j1_template_mde 2018.4.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (852) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +21 -0
  3. data/README.md +79 -0
  4. data/_includes/themes/j1/layouts/content_generator_app.html +34 -0
  5. data/_includes/themes/j1/layouts/content_generator_blog_archive.html +201 -0
  6. data/_includes/themes/j1/layouts/content_generator_collection.html +116 -0
  7. data/_includes/themes/j1/layouts/content_generator_page.html +116 -0
  8. data/_includes/themes/j1/layouts/content_generator_post.html +214 -0
  9. data/_includes/themes/j1/layouts/content_generator_raw.html +35 -0
  10. data/_includes/themes/j1/layouts/layout_metadata_generator.html +106 -0
  11. data/_includes/themes/j1/layouts/layout_module_generator.html +49 -0
  12. data/_includes/themes/j1/layouts/layout_resource_generator.html +53 -0
  13. data/_includes/themes/j1/layouts/layout_shim_generator.html +105 -0
  14. data/_includes/themes/j1/layouts/layout_theme_generator.html +105 -0
  15. data/_includes/themes/j1/modules/boards/news_pin_board.html +183 -0
  16. data/_includes/themes/j1/modules/connectors/ad/google-adsense +39 -0
  17. data/_includes/themes/j1/modules/connectors/ads +34 -0
  18. data/_includes/themes/j1/modules/connectors/analytic/google +42 -0
  19. data/_includes/themes/j1/modules/connectors/analytic/googleUA +44 -0
  20. data/_includes/themes/j1/modules/connectors/analytics +46 -0
  21. data/_includes/themes/j1/modules/connectors/comment/disqus.html +61 -0
  22. data/_includes/themes/j1/modules/connectors/comments +44 -0
  23. data/_includes/themes/j1/modules/connectors/sharing +36 -0
  24. data/_includes/themes/j1/modules/footers/boxes/about_box.proc +33 -0
  25. data/_includes/themes/j1/modules/footers/boxes/contacts_box.proc +55 -0
  26. data/_includes/themes/j1/modules/footers/boxes/legal_statements.proc +61 -0
  27. data/_includes/themes/j1/modules/footers/boxes/links_box.proc +38 -0
  28. data/_includes/themes/j1/modules/footers/boxes/news_box.proc +54 -0
  29. data/_includes/themes/j1/modules/footers/boxes/social_media_icons.proc +38 -0
  30. data/_includes/themes/j1/modules/footers/footer_light_generator.html +130 -0
  31. data/_includes/themes/j1/modules/headers/master_header_generator.html +140 -0
  32. data/_includes/themes/j1/modules/navigator/generator.html +170 -0
  33. data/_includes/themes/j1/modules/navigator/procedures/_unused/authclient.proc +139 -0
  34. data/_includes/themes/j1/modules/navigator/procedures/_unused/authclient.proc.org +217 -0
  35. data/_includes/themes/j1/modules/navigator/procedures/quicklinks.proc +97 -0
  36. data/_includes/themes/j1/modules/navigator/procedures/sidebar.proc +117 -0
  37. data/_includes/themes/j1/modules/navigator/procedures/topsearch.proc +115 -0
  38. data/_includes/themes/j1/procedures/collections/create_collection_article_preview.proc +68 -0
  39. data/_includes/themes/j1/procedures/global/_get_page_path.proc.new +80 -0
  40. data/_includes/themes/j1/procedures/global/_get_page_path.proc.org +68 -0
  41. data/_includes/themes/j1/procedures/global/collect_frontmatter_options.proc +62 -0
  42. data/_includes/themes/j1/procedures/global/create_bs_button.proc +126 -0
  43. data/_includes/themes/j1/procedures/global/create_word_cloud.proc +119 -0
  44. data/_includes/themes/j1/procedures/global/get_category.proc +60 -0
  45. data/_includes/themes/j1/procedures/global/get_category_item.proc +80 -0
  46. data/_includes/themes/j1/procedures/global/get_documents_dir.proc +67 -0
  47. data/_includes/themes/j1/procedures/global/get_page_path.proc +67 -0
  48. data/_includes/themes/j1/procedures/global/get_page_url.proc +55 -0
  49. data/_includes/themes/j1/procedures/global/pager.proc +79 -0
  50. data/_includes/themes/j1/procedures/global/select_color.proc +69 -0
  51. data/_includes/themes/j1/procedures/global/select_font_size.proc +86 -0
  52. data/_includes/themes/j1/procedures/global/select_icon_size.proc +72 -0
  53. data/_includes/themes/j1/procedures/global/select_location.proc +107 -0
  54. data/_includes/themes/j1/procedures/global/set_env_entry_document.proc +88 -0
  55. data/_includes/themes/j1/procedures/global/set_image_block.proc +50 -0
  56. data/_includes/themes/j1/procedures/global/setup.proc +61 -0
  57. data/_includes/themes/j1/procedures/layouts/content_writer.proc +107 -0
  58. data/_includes/themes/j1/procedures/layouts/default_writer.proc +160 -0
  59. data/_includes/themes/j1/procedures/layouts/module_writer.proc +170 -0
  60. data/_includes/themes/j1/procedures/layouts/resource_writer.proc +183 -0
  61. data/_includes/themes/j1/procedures/posts/_collate_timeline.proc +253 -0
  62. data/_includes/themes/j1/procedures/posts/collate_calendar.proc +224 -0
  63. data/_includes/themes/j1/procedures/posts/collate_list.proc +102 -0
  64. data/_includes/themes/j1/procedures/posts/collate_timeline.proc +219 -0
  65. data/_includes/themes/j1/procedures/posts/create_ad_block.proc +56 -0
  66. data/_includes/themes/j1/procedures/posts/create_series_header.proc +96 -0
  67. data/_layouts/_unused/default.html +347 -0
  68. data/_layouts/_unused/default.modal.html +291 -0
  69. data/_layouts/app.html +68 -0
  70. data/_layouts/blog_archive.html +60 -0
  71. data/_layouts/collection.html +68 -0
  72. data/_layouts/compress.html +52 -0
  73. data/_layouts/default.html +192 -0
  74. data/_layouts/home.html +80 -0
  75. data/_layouts/page.html +68 -0
  76. data/_layouts/paginator/autopage_category.html +79 -0
  77. data/_layouts/paginator/autopage_collection.html +159 -0
  78. data/_layouts/paginator/autopage_collections_tags.html +87 -0
  79. data/_layouts/paginator/autopage_tags.html +79 -0
  80. data/_layouts/post.html +68 -0
  81. data/_layouts/raw.html +71 -0
  82. data/_sass/README.md +16 -0
  83. data/assets/README.md +3 -0
  84. data/exe/j1 +26 -0
  85. data/lib/j1.rb +130 -0
  86. data/lib/j1/command.rb +23 -0
  87. data/lib/j1/commands/generate.rb +154 -0
  88. data/lib/j1/commands/help.rb +32 -0
  89. data/lib/j1/commands/module.rb +69 -0
  90. data/lib/j1/external.rb +59 -0
  91. data/lib/j1/log_adapter.rb +115 -0
  92. data/lib/j1/log_helper.rb +61 -0
  93. data/lib/j1/templates/posts/0000-00-00-welcome-to-j1-template.adoc.erb +60 -0
  94. data/lib/j1/utils.rb +330 -0
  95. data/lib/j1/utils/ansi.rb +59 -0
  96. data/lib/j1/utils/exec.rb +25 -0
  97. data/lib/j1/utils/platforms.rb +80 -0
  98. data/lib/j1/utils/win_tz.rb +73 -0
  99. data/lib/j1/version.rb +3 -0
  100. data/lib/j1_app.rb +69 -0
  101. data/lib/j1_app/j1_auth_manager/auth_manager.rb +418 -0
  102. data/lib/j1_app/j1_auth_manager/commands.rb +18 -0
  103. data/lib/j1_app/j1_auth_manager/config.rb +76 -0
  104. data/lib/j1_app/j1_auth_manager/helpers.rb +55 -0
  105. data/lib/j1_app/j1_auth_manager/helpers_disqus.rb +12 -0
  106. data/lib/j1_app/j1_auth_manager/helpers_facebook.rb +12 -0
  107. data/lib/j1_app/j1_auth_manager/helpers_github.rb +95 -0
  108. data/lib/j1_app/j1_auth_manager/helpers_patreon.rb +12 -0
  109. data/lib/j1_app/j1_auth_manager/helpers_twitter.rb +12 -0
  110. data/lib/j1_app/j1_auth_manager/warden_omniauth.rb +133 -0
  111. data/lib/j1_app/j1_site_manager/static_site.rb +16 -0
  112. data/lib/j1_app/omniauth/facebook/signed_request.rb +52 -0
  113. data/lib/j1_app/omniauth/strategies/_unused/doumart_patreon.rb +75 -0
  114. data/lib/j1_app/omniauth/strategies/_unused/my_patreon.rb +78 -0
  115. data/lib/j1_app/omniauth/strategies/disqus.rb +56 -0
  116. data/lib/j1_app/omniauth/strategies/facebook.rb +181 -0
  117. data/lib/j1_app/omniauth/strategies/github.rb +79 -0
  118. data/lib/j1_app/omniauth/strategies/patreon.rb +49 -0
  119. data/lib/j1_app/omniauth/strategies/twitter.rb +104 -0
  120. data/lib/j1_app/sinatra/extras/cookies.rb +282 -0
  121. data/lib/j1_app/sinatra/extras/index.rb +33 -0
  122. data/lib/starter_web/Gemfile +180 -0
  123. data/lib/starter_web/_config.yml +962 -0
  124. data/lib/starter_web/_data/apps/_unused/j1_colorbox.yml +100 -0
  125. data/lib/starter_web/_data/apps/_unused/j1_tocbot.yml +156 -0
  126. data/lib/starter_web/_data/apps/j1_bootstrap_gallery.yml +167 -0
  127. data/lib/starter_web/_data/apps/j1_carousel.yml +501 -0
  128. data/lib/starter_web/_data/apps/j1_justified_gallery.yml +229 -0
  129. data/lib/starter_web/_data/apps/j1_light_gallery.yml +105 -0
  130. data/lib/starter_web/_data/apps/j1_lightbox.yml +163 -0
  131. data/lib/starter_web/_data/apps/j1_link_checker.yml +21 -0
  132. data/lib/starter_web/_data/asciidoc2pdf/default-theme.yml +391 -0
  133. data/lib/starter_web/_data/asciidoc2pdf/j1-theme.yml +53 -0
  134. data/lib/starter_web/_data/builder/blog_navigator.yml +203 -0
  135. data/lib/starter_web/_data/j1_categories.yml +31 -0
  136. data/lib/starter_web/_data/j1_colors.yml +607 -0
  137. data/lib/starter_web/_data/j1_config.yml +203 -0
  138. data/lib/starter_web/_data/j1_font_sizes.yml +25 -0
  139. data/lib/starter_web/_data/j1_i18n.yml +18 -0
  140. data/lib/starter_web/_data/j1_resources.yml +631 -0
  141. data/lib/starter_web/_data/known_issues/windows/cacert.pem +3314 -0
  142. data/lib/starter_web/_data/layouts/app.yml +154 -0
  143. data/lib/starter_web/_data/layouts/blog_archive.yml +155 -0
  144. data/lib/starter_web/_data/layouts/collection.yml +157 -0
  145. data/lib/starter_web/_data/layouts/default.yml +230 -0
  146. data/lib/starter_web/_data/layouts/home.yml +203 -0
  147. data/lib/starter_web/_data/layouts/page.yml +154 -0
  148. data/lib/starter_web/_data/layouts/post.yml +164 -0
  149. data/lib/starter_web/_data/layouts/raw.yml +154 -0
  150. data/lib/starter_web/_data/modules/_unused/j1_navigator.yml +195 -0
  151. data/lib/starter_web/_data/modules/_unused/j1_navigator_menu.yml +317 -0
  152. data/lib/starter_web/_data/modules/j1_back2top.yml +120 -0
  153. data/lib/starter_web/_data/modules/j1_banner.yml +248 -0
  154. data/lib/starter_web/_data/modules/j1_cookiebar.yml +65 -0
  155. data/lib/starter_web/_data/modules/j1_footer.yml +128 -0
  156. data/lib/starter_web/_data/modules/j1_header.yml +201 -0
  157. data/lib/starter_web/_data/modules/j1_iframe_resizer.yml +234 -0
  158. data/lib/starter_web/_data/modules/j1_jekyll_search.yml +112 -0
  159. data/lib/starter_web/_data/modules/j1_log4javascript.yml +98 -0
  160. data/lib/starter_web/_data/modules/j1_navigator.yml +218 -0
  161. data/lib/starter_web/_data/modules/j1_navigator_menu.yml +265 -0
  162. data/lib/starter_web/_data/modules/j1_panel.yml +688 -0
  163. data/lib/starter_web/_data/modules/j1_parallax.yml +87 -0
  164. data/lib/starter_web/_data/modules/j1_sign_in_up.yml +18 -0
  165. data/lib/starter_web/_data/modules/j1_smooth_scroll.yml +122 -0
  166. data/lib/starter_web/_data/modules/j1_theme_switcher.yml +139 -0
  167. data/lib/starter_web/_data/modules/j1_toccer.yml +155 -0
  168. data/lib/starter_web/_data/pages/builder.yml +82 -0
  169. data/lib/starter_web/_plugins/asciidoctor-extensions/admonition-block-answer.rb +48 -0
  170. data/lib/starter_web/_plugins/asciidoctor-extensions/admonition-block-question.rb +48 -0
  171. data/lib/starter_web/_plugins/asciidoctor-extensions/carousel-block.rb +45 -0
  172. data/lib/starter_web/_plugins/asciidoctor-extensions/gist-block.rb +52 -0
  173. data/lib/starter_web/_plugins/asciidoctor-extensions/lightbox-block.rb +85 -0
  174. data/lib/starter_web/_plugins/asciidoctor-extensions/lorem-inline.rb +65 -0
  175. data/lib/starter_web/_plugins/asciidoctor-extensions/shout-block.rb +47 -0
  176. data/lib/starter_web/_plugins/asciidoctor-extensions/twitter-emoji-inline.rb +69 -0
  177. data/lib/starter_web/_plugins/debug.rb +64 -0
  178. data/lib/starter_web/_plugins/filters.rb +307 -0
  179. data/lib/starter_web/_plugins/prettify.rb +45 -0
  180. data/lib/starter_web/_plugins/simple_search_filter.rb +33 -0
  181. data/lib/starter_web/_plugins/symlink_watcher.rb +53 -0
  182. data/lib/starter_web/_rack/Procfile.nginx +1 -0
  183. data/lib/starter_web/_rack/Procfile.webrick +1 -0
  184. data/lib/starter_web/_rack/Rakefile +6 -0
  185. data/lib/starter_web/_rack/config.ru +7 -0
  186. data/lib/starter_web/_rack/dot.env +48 -0
  187. data/lib/starter_web/_rack/dot.gitignore +34 -0
  188. data/lib/starter_web/_rack/heroku.config_set +12 -0
  189. data/lib/starter_web/_rack/puma.rb +200 -0
  190. data/lib/starter_web/_sass/README.md +16 -0
  191. data/lib/starter_web/apps/calendar/index.adoc +71 -0
  192. data/lib/starter_web/apps/link_checker/index.html +24 -0
  193. data/lib/starter_web/assets/apps/link-checker/assets/img/main/img22.jpg +0 -0
  194. data/lib/starter_web/assets/apps/link-checker/assets/img/main/img22.png +0 -0
  195. data/lib/starter_web/assets/apps/link-checker/index.html +125 -0
  196. data/lib/starter_web/assets/apps/link-checker/src/bootstrap/css/bootstrap.min.css +1560 -0
  197. data/lib/starter_web/assets/apps/link-checker/src/bootstrap/fonts/glyphicons-halflings-regular.eot +0 -0
  198. data/lib/starter_web/assets/apps/link-checker/src/bootstrap/fonts/glyphicons-halflings-regular.svg +288 -0
  199. data/lib/starter_web/assets/apps/link-checker/src/bootstrap/fonts/glyphicons-halflings-regular.ttf +0 -0
  200. data/lib/starter_web/assets/apps/link-checker/src/bootstrap/fonts/glyphicons-halflings-regular.woff +0 -0
  201. data/lib/starter_web/assets/apps/link-checker/src/bootstrap/fonts/glyphicons-halflings-regular.woff2 +0 -0
  202. data/lib/starter_web/assets/apps/link-checker/src/bootstrap/js/bootstrap.min.js +7 -0
  203. data/lib/starter_web/assets/apps/link-checker/src/fonts/font_awesome/LICENSE.md +11 -0
  204. data/lib/starter_web/assets/apps/link-checker/src/fonts/font_awesome/README.md +105 -0
  205. data/lib/starter_web/assets/apps/link-checker/src/fonts/font_awesome/css/font-awesome.css +2337 -0
  206. data/lib/starter_web/assets/apps/link-checker/src/fonts/font_awesome/css/font-awesome.min.css +4 -0
  207. data/lib/starter_web/assets/apps/link-checker/src/fonts/font_awesome/fonts/FontAwesome.otf +0 -0
  208. data/lib/starter_web/assets/apps/link-checker/src/fonts/font_awesome/fonts/fontawesome-webfont.eot +0 -0
  209. data/lib/starter_web/assets/apps/link-checker/src/fonts/font_awesome/fonts/fontawesome-webfont.svg +2671 -0
  210. data/lib/starter_web/assets/apps/link-checker/src/fonts/font_awesome/fonts/fontawesome-webfont.ttf +0 -0
  211. data/lib/starter_web/assets/apps/link-checker/src/fonts/font_awesome/fonts/fontawesome-webfont.woff +0 -0
  212. data/lib/starter_web/assets/apps/link-checker/src/fonts/font_awesome/fonts/fontawesome-webfont.woff2 +0 -0
  213. data/lib/starter_web/assets/apps/link-checker/src/fonts/roboto/How_to_use_webfonts.html +230 -0
  214. data/lib/starter_web/assets/apps/link-checker/src/fonts/roboto/Roboto-Regular-demo.html +372 -0
  215. data/lib/starter_web/assets/apps/link-checker/src/fonts/roboto/Roboto-Regular.eot +0 -0
  216. data/lib/starter_web/assets/apps/link-checker/src/fonts/roboto/Roboto-Regular.svg +621 -0
  217. data/lib/starter_web/assets/apps/link-checker/src/fonts/roboto/Roboto-Regular.ttf +0 -0
  218. data/lib/starter_web/assets/apps/link-checker/src/fonts/roboto/Roboto-Regular.woff +0 -0
  219. data/lib/starter_web/assets/apps/link-checker/src/fonts/roboto/specimen_files/Roboto-Regular-cleartype.png +0 -0
  220. data/lib/starter_web/assets/apps/link-checker/src/fonts/roboto/specimen_files/grid_12-825-55-15.css +129 -0
  221. data/lib/starter_web/assets/apps/link-checker/src/fonts/roboto/specimen_files/specimen_stylesheet.css +396 -0
  222. data/lib/starter_web/assets/apps/link-checker/src/fonts/roboto/stylesheet.css +12 -0
  223. data/lib/starter_web/assets/apps/link-checker/src/link-checker/css/link-checker.css +87 -0
  224. data/lib/starter_web/assets/apps/link-checker/src/link-checker/js/backbone.1.3.2.js +1920 -0
  225. data/lib/starter_web/assets/apps/link-checker/src/link-checker/js/backbone.min.js +37 -0
  226. data/lib/starter_web/assets/apps/link-checker/src/link-checker/js/html5shiv.min.js +4 -0
  227. data/lib/starter_web/assets/apps/link-checker/src/link-checker/js/iframeResizer.contentWindow.min.js +9 -0
  228. data/lib/starter_web/assets/apps/link-checker/src/link-checker/js/jquery.min.js +6 -0
  229. data/lib/starter_web/assets/apps/link-checker/src/link-checker/js/jsuri-1.1.1.min.js +2 -0
  230. data/lib/starter_web/assets/apps/link-checker/src/link-checker/js/link-checker.js +333 -0
  231. data/lib/starter_web/assets/apps/link-checker/src/link-checker/js/underscore.min.js +31 -0
  232. data/lib/starter_web/assets/data/animate.json +120 -0
  233. data/lib/starter_web/assets/data/ascii_code_table.json +1794 -0
  234. data/lib/starter_web/assets/data/authclient.html +371 -0
  235. data/lib/starter_web/assets/data/banner.html +350 -0
  236. data/lib/starter_web/assets/data/carousel.json +95 -0
  237. data/lib/starter_web/assets/data/colors.json +42 -0
  238. data/lib/starter_web/assets/data/font_sizes.json +42 -0
  239. data/lib/starter_web/assets/data/fontawesome_icons.json +5525 -0
  240. data/lib/starter_web/assets/data/footer.html +230 -0
  241. data/lib/starter_web/assets/data/galleries.json +143 -0
  242. data/lib/starter_web/assets/data/mdi_icons.json +14324 -0
  243. data/lib/starter_web/assets/data/menu.html +470 -0
  244. data/lib/starter_web/assets/data/objects.json +458 -0
  245. data/lib/starter_web/assets/data/panel.html +529 -0
  246. data/lib/starter_web/assets/data/search.json +114 -0
  247. data/lib/starter_web/assets/data/themes.json +59 -0
  248. data/lib/starter_web/assets/data/twa_v1.json +6978 -0
  249. data/lib/starter_web/assets/data/twa_v2.json +12812 -0
  250. data/lib/starter_web/assets/images/backgrounds/bg-1.jpg +0 -0
  251. data/lib/starter_web/assets/images/backgrounds/bg-2.jpg +0 -0
  252. data/lib/starter_web/assets/images/backgrounds/bg-3.jpg +0 -0
  253. data/lib/starter_web/assets/images/backgrounds/bg-4.jpg +0 -0
  254. data/lib/starter_web/assets/images/backgrounds/bg-7.jpg +0 -0
  255. data/lib/starter_web/assets/images/blog/featured/img3.jpg +0 -0
  256. data/lib/starter_web/assets/images/blog/featured/jekyll.1200x400.png +0 -0
  257. data/lib/starter_web/assets/images/blog/featured/jekyll.png +0 -0
  258. data/lib/starter_web/assets/images/blog/featured/staticgen.jpg +0 -0
  259. data/lib/starter_web/assets/images/blog/featured/what-is-a-baseurl.jpg +0 -0
  260. data/lib/starter_web/assets/images/blog/series/j1_using_docker/j1_docker_banner.1280x500.png +0 -0
  261. data/lib/starter_web/assets/images/blog/series/j1_using_docker/kinematic_alpha.1280x600.png +0 -0
  262. data/lib/starter_web/assets/images/blog/series/j1_using_docker/kinematic_j1.1280x300.png +0 -0
  263. data/lib/starter_web/assets/images/blog/series/j1_using_docker/windows_docker_banner.1280x500.png +0 -0
  264. data/lib/starter_web/assets/images/blog/wikipedia/columbia-river.1200x400.jpg +0 -0
  265. data/lib/starter_web/assets/images/blog/wikipedia/minneapolis.1200x400.jpg +0 -0
  266. data/lib/starter_web/assets/images/blog/wikipedia/narcise-snake-pits.1200x400.jpg +0 -0
  267. data/lib/starter_web/assets/images/carousel/cats/cat-1.jpg +0 -0
  268. data/lib/starter_web/assets/images/carousel/cats/cat-2.jpg +0 -0
  269. data/lib/starter_web/assets/images/carousel/cats/cat-3.jpg +0 -0
  270. data/lib/starter_web/assets/images/carousel/cats/cat-4.jpg +0 -0
  271. data/lib/starter_web/assets/images/carousel/cats/cat-5.jpg +0 -0
  272. data/lib/starter_web/assets/images/carousel/cats/cat-6.jpg +0 -0
  273. data/lib/starter_web/assets/images/carousel/cats/cat-7.jpg +0 -0
  274. data/lib/starter_web/assets/images/carousel/cats/cat-8.jpg +0 -0
  275. data/lib/starter_web/assets/images/carousel/katarina/katarina-1.jpg +0 -0
  276. data/lib/starter_web/assets/images/carousel/katarina/katarina-2.jpg +0 -0
  277. data/lib/starter_web/assets/images/carousel/katarina/katarina-3.jpg +0 -0
  278. data/lib/starter_web/assets/images/carousel/katarina/katarina-4.jpg +0 -0
  279. data/lib/starter_web/assets/images/carousel/katarina/katarina-5.jpg +0 -0
  280. data/lib/starter_web/assets/images/gallery/justified_gallery/000_6791628438_affaa19e10_b.jpg +0 -0
  281. data/lib/starter_web/assets/images/gallery/justified_gallery/000_6798453217_72dea2d06e_b.jpg +0 -0
  282. data/lib/starter_web/assets/images/gallery/justified_gallery/000_6806687375_07d2b7a1f9_b.jpg +0 -0
  283. data/lib/starter_web/assets/images/gallery/justified_gallery/000_6840627709_92ed52fb41_b.jpg +0 -0
  284. data/lib/starter_web/assets/images/gallery/justified_gallery/000_6876412479_6268c6e2aa_b.jpg +0 -0
  285. data/lib/starter_web/assets/images/gallery/justified_gallery/000_6880502467_d4b3c4b2a8_b.jpg +0 -0
  286. data/lib/starter_web/assets/images/gallery/justified_gallery/13824322785_104dc0968c_b.jpg +0 -0
  287. data/lib/starter_web/assets/images/gallery/justified_gallery/13824674674_ca1e482394_b.jpg +0 -0
  288. data/lib/starter_web/assets/images/gallery/justified_gallery/16961685188_f130144d60_b.jpg +0 -0
  289. data/lib/starter_web/assets/images/gallery/justified_gallery/23753792354_bd75d8dabc_b.jpg +0 -0
  290. data/lib/starter_web/assets/images/gallery/justified_gallery/24014174029_2cfa940264_b.jpg +0 -0
  291. data/lib/starter_web/assets/images/gallery/justified_gallery/24096687789_c37d45712f_b.jpg +0 -0
  292. data/lib/starter_web/assets/images/gallery/justified_gallery/6791628438_affaa19e10_b.jpg +0 -0
  293. data/lib/starter_web/assets/images/gallery/justified_gallery/6798453217_72dea2d06e_b.jpg +0 -0
  294. data/lib/starter_web/assets/images/gallery/justified_gallery/6806687375_07d2b7a1f9_b.jpg +0 -0
  295. data/lib/starter_web/assets/images/gallery/justified_gallery/6812090617_5fd5bbdda0_b.jpg +0 -0
  296. data/lib/starter_web/assets/images/gallery/justified_gallery/6840627709_92ed52fb41_b.jpg +0 -0
  297. data/lib/starter_web/assets/images/gallery/justified_gallery/6841267340_855273fd7e_b.jpg +0 -0
  298. data/lib/starter_web/assets/images/gallery/justified_gallery/6876412479_6268c6e2aa_b.jpg +0 -0
  299. data/lib/starter_web/assets/images/gallery/justified_gallery/6880502467_d4b3c4b2a8_b.jpg +0 -0
  300. data/lib/starter_web/assets/images/gallery/justified_gallery/6916180091_9c9559e463_b.jpg +0 -0
  301. data/lib/starter_web/assets/images/gallery/justified_gallery/7002395006_29fdc85f7a_b.jpg +0 -0
  302. data/lib/starter_web/assets/images/gallery/justified_gallery/7062575651_b23918b11a_b.jpg +0 -0
  303. data/lib/starter_web/assets/images/gallery/justified_gallery/7822678460_ee98ff1f69_b.jpg +0 -0
  304. data/lib/starter_web/assets/images/gallery/justified_gallery/7948632554_01f6ae6b6f_b.jpg +0 -0
  305. data/lib/starter_web/assets/images/gallery/justified_gallery/8157236803_78aa1698b6_b.jpg +0 -0
  306. data/lib/starter_web/assets/images/gallery/justified_gallery/8400794773_932654a20e_b.jpg +0 -0
  307. data/lib/starter_web/assets/images/gallery/justified_gallery/8811828736_88392f614a_b.jpg +0 -0
  308. data/lib/starter_web/assets/images/gallery/justified_gallery/8842312290_f310d491f4_b.jpg +0 -0
  309. data/lib/starter_web/assets/images/icons/asciidoc/logo-512x512.png +0 -0
  310. data/lib/starter_web/assets/images/icons/bootstrap/bootstrap-solid-32x32.png +0 -0
  311. data/lib/starter_web/assets/images/icons/bootstrap/bs-docs-masthead-pattern.png +0 -0
  312. data/lib/starter_web/assets/images/icons/bootstrap/scalable/bootstrap-outline.svg +20 -0
  313. data/lib/starter_web/assets/images/icons/bootstrap/scalable/bootstrap-punchout.svg +18 -0
  314. data/lib/starter_web/assets/images/icons/bootstrap/scalable/bootstrap-solid.svg +17 -0
  315. data/lib/starter_web/assets/images/icons/components/angular.ui.png +0 -0
  316. data/lib/starter_web/assets/images/icons/components/angularjs.png +0 -0
  317. data/lib/starter_web/assets/images/icons/components/aws.png +0 -0
  318. data/lib/starter_web/assets/images/icons/components/bootstrap.png +0 -0
  319. data/lib/starter_web/assets/images/icons/components/c9.png +0 -0
  320. data/lib/starter_web/assets/images/icons/components/chai.png +0 -0
  321. data/lib/starter_web/assets/images/icons/components/emmet.png +0 -0
  322. data/lib/starter_web/assets/images/icons/components/express.png +0 -0
  323. data/lib/starter_web/assets/images/icons/components/git.png +0 -0
  324. data/lib/starter_web/assets/images/icons/components/github.png +0 -0
  325. data/lib/starter_web/assets/images/icons/components/gulp.png +0 -0
  326. data/lib/starter_web/assets/images/icons/components/heroku.png +0 -0
  327. data/lib/starter_web/assets/images/icons/components/htmlcss-1.png +0 -0
  328. data/lib/starter_web/assets/images/icons/components/htmlcss-2.png +0 -0
  329. data/lib/starter_web/assets/images/icons/components/jasmine.png +0 -0
  330. data/lib/starter_web/assets/images/icons/components/javascript.png +0 -0
  331. data/lib/starter_web/assets/images/icons/components/jquery.png +0 -0
  332. data/lib/starter_web/assets/images/icons/components/kanban.png +0 -0
  333. data/lib/starter_web/assets/images/icons/components/leanux.png +0 -0
  334. data/lib/starter_web/assets/images/icons/components/linkedin.png +0 -0
  335. data/lib/starter_web/assets/images/icons/components/mean.png +0 -0
  336. data/lib/starter_web/assets/images/icons/components/mongodb.png +0 -0
  337. data/lib/starter_web/assets/images/icons/components/node.png +0 -0
  338. data/lib/starter_web/assets/images/icons/components/postgresql.png +0 -0
  339. data/lib/starter_web/assets/images/icons/components/protractor.png +0 -0
  340. data/lib/starter_web/assets/images/icons/components/rails.png +0 -0
  341. data/lib/starter_web/assets/images/icons/components/ruby.png +0 -0
  342. data/lib/starter_web/assets/images/icons/components/sass.png +0 -0
  343. data/lib/starter_web/assets/images/icons/components/scrum.png +0 -0
  344. data/lib/starter_web/assets/images/icons/components/twitter.png +0 -0
  345. data/lib/starter_web/assets/images/icons/j1/favicon.ico +0 -0
  346. data/lib/starter_web/assets/images/icons/j1/j1-32x32.ico +0 -0
  347. data/lib/starter_web/assets/images/icons/j1/j1-512x512.png +0 -0
  348. data/lib/starter_web/assets/images/icons/j1/j1-64x64.png +0 -0
  349. data/lib/starter_web/assets/images/icons/j1/j1.ico +0 -0
  350. data/lib/starter_web/assets/images/icons/j1/scalable/j1.svg +2037 -0
  351. data/lib/starter_web/assets/images/icons/social/amazon.png +0 -0
  352. data/lib/starter_web/assets/images/icons/social/behance.png +0 -0
  353. data/lib/starter_web/assets/images/icons/social/blogger.png +0 -0
  354. data/lib/starter_web/assets/images/icons/social/deviantart.png +0 -0
  355. data/lib/starter_web/assets/images/icons/social/dribbble.png +0 -0
  356. data/lib/starter_web/assets/images/icons/social/dropbox.png +0 -0
  357. data/lib/starter_web/assets/images/icons/social/evernote.png +0 -0
  358. data/lib/starter_web/assets/images/icons/social/facebook.png +0 -0
  359. data/lib/starter_web/assets/images/icons/social/forrst.png +0 -0
  360. data/lib/starter_web/assets/images/icons/social/github.png +0 -0
  361. data/lib/starter_web/assets/images/icons/social/googleplus.png +0 -0
  362. data/lib/starter_web/assets/images/icons/social/instagram.png +0 -0
  363. data/lib/starter_web/assets/images/icons/social/jolicloud.png +0 -0
  364. data/lib/starter_web/assets/images/icons/social/last-fm.png +0 -0
  365. data/lib/starter_web/assets/images/icons/social/linkedin.png +0 -0
  366. data/lib/starter_web/assets/images/icons/social/picasa.png +0 -0
  367. data/lib/starter_web/assets/images/icons/social/pintrest.png +0 -0
  368. data/lib/starter_web/assets/images/icons/social/rss.png +0 -0
  369. data/lib/starter_web/assets/images/icons/social/skype.png +0 -0
  370. data/lib/starter_web/assets/images/icons/social/spotify.png +0 -0
  371. data/lib/starter_web/assets/images/icons/social/stumbleupon.png +0 -0
  372. data/lib/starter_web/assets/images/icons/social/tumblr.png +0 -0
  373. data/lib/starter_web/assets/images/icons/social/twitter.png +0 -0
  374. data/lib/starter_web/assets/images/icons/social/vimeo.png +0 -0
  375. data/lib/starter_web/assets/images/icons/social/vk.png +0 -0
  376. data/lib/starter_web/assets/images/icons/social/wordpress.png +0 -0
  377. data/lib/starter_web/assets/images/icons/social/xing.png +0 -0
  378. data/lib/starter_web/assets/images/icons/social/yahoo.png +0 -0
  379. data/lib/starter_web/assets/images/icons/social/youtube.png +0 -0
  380. data/lib/starter_web/assets/images/lightbox/close.png +0 -0
  381. data/lib/starter_web/assets/images/lightbox/loading.gif +0 -0
  382. data/lib/starter_web/assets/images/lightbox/next.png +0 -0
  383. data/lib/starter_web/assets/images/lightbox/prev.png +0 -0
  384. data/lib/starter_web/assets/images/master_header/aaron-burden-1200.jpg +0 -0
  385. data/lib/starter_web/assets/images/master_header/alexey-ruban-slider.jpg +0 -0
  386. data/lib/starter_web/assets/images/master_header/chuttersnap-1200.jpg +0 -0
  387. data/lib/starter_web/assets/images/master_header/clark-tibbs-do-something.jpg +0 -0
  388. data/lib/starter_web/assets/images/master_header/docker_banner_l.1280x500.png +0 -0
  389. data/lib/starter_web/assets/images/master_header/docker_banner_r.1280x500.png +0 -0
  390. data/lib/starter_web/assets/images/master_header/homehead-default-1200.jpg +0 -0
  391. data/lib/starter_web/assets/images/master_header/ideas-start-here.1200x800.png +0 -0
  392. data/lib/starter_web/assets/images/master_header/ideas-start-here.1920x1200.png +0 -0
  393. data/lib/starter_web/assets/images/master_header/ideas-start-here.jpg +0 -0
  394. data/lib/starter_web/assets/images/master_header/maarten-van-den-heuvel-1200.jpg +0 -0
  395. data/lib/starter_web/assets/images/master_header/pagehead-default-1200.jpg +0 -0
  396. data/lib/starter_web/assets/images/master_header/stefan-stefancik-1200.jpg +0 -0
  397. data/lib/starter_web/assets/images/master_header/water-journal-1200.jpg +0 -0
  398. data/lib/starter_web/assets/images/md-kit/avatar.jpg +0 -0
  399. data/lib/starter_web/assets/images/md-kit/bg7.jpg +0 -0
  400. data/lib/starter_web/assets/images/md-kit/blog1.jpg +0 -0
  401. data/lib/starter_web/assets/images/md-kit/blog5.jpg +0 -0
  402. data/lib/starter_web/assets/images/md-kit/blog6.jpg +0 -0
  403. data/lib/starter_web/assets/images/md-kit/card-blog2.jpg +0 -0
  404. data/lib/starter_web/assets/images/md-kit/card-blog3.jpg +0 -0
  405. data/lib/starter_web/assets/images/md-kit/card-profile1.jpg +0 -0
  406. data/lib/starter_web/assets/images/md-kit/card-profile4.jpg +0 -0
  407. data/lib/starter_web/assets/images/md-kit/card-profile5-square.jpg +0 -0
  408. data/lib/starter_web/assets/images/md-kit/kendall.jpg +0 -0
  409. data/lib/starter_web/assets/images/md-kit/kendall.png +0 -0
  410. data/lib/starter_web/assets/images/md-kit/marc.jpg +0 -0
  411. data/lib/starter_web/assets/images/md-kit/office1.jpg +0 -0
  412. data/lib/starter_web/assets/images/old_times/image_01.jpg +0 -0
  413. data/lib/starter_web/assets/images/old_times/image_02.jpg +0 -0
  414. data/lib/starter_web/assets/images/old_times/image_03.jpg +0 -0
  415. data/lib/starter_web/assets/images/old_times/image_04.jpg +0 -0
  416. data/lib/starter_web/assets/images/pages/documentation/100_user_guide/200_modules/200_navigation/001_menubar_example.png +0 -0
  417. data/lib/starter_web/assets/images/pages/documentation/100_user_guide/200_modules/200_navigation/005_navbar.png +0 -0
  418. data/lib/starter_web/assets/images/pages/documentation/100_user_guide/200_modules/200_navigation/005_navigation_bar.png +0 -0
  419. data/lib/starter_web/assets/images/pages/documentation/100_user_guide/200_modules/200_navigation/006_navigation_side_bar.png +0 -0
  420. data/lib/starter_web/assets/images/pages/documentation/100_user_guide/200_modules/200_navigation/006_searchbar.png +0 -0
  421. data/lib/starter_web/assets/images/pages/documentation/100_user_guide/200_modules/200_navigation/007_sidebar.png +0 -0
  422. data/lib/starter_web/assets/images/pages/documentation/100_user_guide/200_modules/200_navigation/008_navbar_blank.png +0 -0
  423. data/lib/starter_web/assets/images/pages/documentation/100_user_guide/200_modules/200_navigation/010_nav_bar.png +0 -0
  424. data/lib/starter_web/assets/images/pages/documentation/100_user_guide/200_modules/200_navigation/010_top_search.png +0 -0
  425. data/lib/starter_web/assets/images/pages/documentation/100_user_guide/200_modules/200_navigation/012_top_search.png +0 -0
  426. data/lib/starter_web/assets/images/pages/documentation/100_user_guide/200_modules/200_navigation/015_quicklink_bar.png +0 -0
  427. data/lib/starter_web/assets/images/pages/documentation/100_user_guide/200_modules/200_navigation/017_side_bar.png +0 -0
  428. data/lib/starter_web/assets/images/pages/documentation/100_user_guide/200_modules/200_navigation/020_menu_bar.png +0 -0
  429. data/lib/starter_web/assets/images/pages/documentation/100_user_guide/200_modules/240_auth_manager/2-tier-architecture-1280x600.png +0 -0
  430. data/lib/starter_web/assets/images/pages/documentation/100_user_guide/200_modules/240_auth_manager/3-tier-architecture-1280x600.png +0 -0
  431. data/lib/starter_web/assets/images/pages/documentation/100_user_guide/200_modules/240_auth_manager/download_image_create_starter.800x600.png +0 -0
  432. data/lib/starter_web/assets/images/pages/documentation/100_user_guide/200_modules/240_auth_manager/j1-app-authclient-icon.1280x600.png +0 -0
  433. data/lib/starter_web/assets/images/pages/documentation/100_user_guide/200_modules/240_auth_manager/j1-app-authclient-signin.1280x700.png +0 -0
  434. data/lib/starter_web/assets/images/pages/documentation/100_user_guide/200_modules/240_auth_manager/j1-app-authclient-signout.1280x700.png +0 -0
  435. data/lib/starter_web/assets/images/pages/documentation/100_user_guide/200_modules/240_auth_manager/j1-disqus-comment-dialog.1280x500.png +0 -0
  436. data/lib/starter_web/assets/images/pages/documentation/100_user_guide/200_modules/240_auth_manager/j1_development_system-1280x600.png +0 -0
  437. data/lib/starter_web/assets/images/pages/documentation/100_user_guide/200_modules/240_auth_manager/j1_runtime_system-1280x600.png +0 -0
  438. data/lib/starter_web/assets/images/pages/documentation/100_user_guide/200_modules/240_auth_manager/rack_based_web_app-1280x600.png +0 -0
  439. data/lib/starter_web/assets/images/pages/documentation/100_user_guide/200_modules/240_auth_manager/rack_based_web_app.png +0 -0
  440. data/lib/starter_web/assets/images/pages/documentation/100_user_guide/200_modules/240_auth_manager/run_container_build_start_web.800x400.png +0 -0
  441. data/lib/starter_web/assets/images/pages/documentation/100_user_guide/200_modules/240_auth_manager/run_starter_web.800x700.png +0 -0
  442. data/lib/starter_web/assets/images/pages/kickstarter/web_in_a_day/130_layout_inheritance.png +0 -0
  443. data/lib/starter_web/assets/images/pages/kickstarter/web_in_a_day/content_inheritance.png +0 -0
  444. data/lib/starter_web/assets/images/pages/kickstarter/web_in_a_day/content_inheritance_thumb.png +0 -0
  445. data/lib/starter_web/assets/images/pages/kickstarter/web_in_a_day/html_layout.png +0 -0
  446. data/lib/starter_web/assets/images/pages/kickstarter/web_in_a_day/j1-quickstart-windows.png +0 -0
  447. data/lib/starter_web/assets/images/pages/kickstarter/web_in_a_day/j1-template-theme.png +0 -0
  448. data/lib/starter_web/assets/images/pages/kickstarter/web_in_a_day/j1_layout.png +0 -0
  449. data/lib/starter_web/assets/images/pages/kickstarter/web_in_a_day/jekyll-minima-theme.png +0 -0
  450. data/lib/starter_web/assets/images/pages/kickstarter/web_in_a_day/lane_inheritance.png +0 -0
  451. data/lib/starter_web/assets/images/pages/kickstarter/web_in_a_day/layout_inheritance.png +0 -0
  452. data/lib/starter_web/assets/images/pages/modals/01_frame_modal.jpg +0 -0
  453. data/lib/starter_web/assets/images/pages/modals/02_site_modal.jpg +0 -0
  454. data/lib/starter_web/assets/images/pages/modals/03_central_modal.jpg +0 -0
  455. data/lib/starter_web/assets/images/pages/modals/04_fluid_modal.jpg +0 -0
  456. data/lib/starter_web/assets/images/pages/previewer/bs-color-palette.png +0 -0
  457. data/lib/starter_web/assets/images/pages/previewer/material-design-color-palette.jpg +0 -0
  458. data/lib/starter_web/assets/images/pages/previewer/material-design-color-palette.png +0 -0
  459. data/lib/starter_web/assets/images/pages/roundtrip/100_present_images/image-1.jpg +0 -0
  460. data/lib/starter_web/assets/images/pages/roundtrip/100_present_images/image-2.jpg +0 -0
  461. data/lib/starter_web/assets/images/pages/roundtrip/100_present_images/image-3.jpg +0 -0
  462. data/lib/starter_web/assets/images/pages/roundtrip/100_present_images/image-4.jpg +0 -0
  463. data/lib/starter_web/assets/images/pages/roundtrip/100_present_images/image-5.jpg +0 -0
  464. data/lib/starter_web/assets/images/pages/roundtrip/100_present_images/tables-1920.jpg +0 -0
  465. data/lib/starter_web/assets/images/pages/roundtrip/100_present_images/thumb-1.jpg +0 -0
  466. data/lib/starter_web/assets/images/pages/roundtrip/100_present_images/thumb-2.jpg +0 -0
  467. data/lib/starter_web/assets/images/pages/roundtrip/100_present_images/thumb-3.jpg +0 -0
  468. data/lib/starter_web/assets/images/pages/roundtrip/100_present_images/thumb-4.jpg +0 -0
  469. data/lib/starter_web/assets/images/pages/roundtrip/100_present_images/thumb-5.jpg +0 -0
  470. data/lib/starter_web/assets/images/pages/roundtrip/cards-1920.jpg +0 -0
  471. data/lib/starter_web/assets/images/pages/roundtrip/icon-fonts-1920.jpg +0 -0
  472. data/lib/starter_web/assets/images/pages/roundtrip/meeting.jpg +0 -0
  473. data/lib/starter_web/assets/images/pages/roundtrip/theme-1920.jpg +0 -0
  474. data/lib/starter_web/assets/images/pages/roundtrip/typography-1920.jpg +0 -0
  475. data/lib/starter_web/assets/images/patterns/1x1.png +0 -0
  476. data/lib/starter_web/assets/images/patterns/gridtile.png +0 -0
  477. data/lib/starter_web/assets/images/quotes/default.png +0 -0
  478. data/lib/starter_web/assets/images/quotes/people.png +0 -0
  479. data/lib/starter_web/assets/images/spinner/loader1.gif +0 -0
  480. data/lib/starter_web/assets/images/spinner/loader2.gif +0 -0
  481. data/lib/starter_web/assets/images/widescreen/featured-1920x800.jpg +0 -0
  482. data/lib/starter_web/assets/images/widescreen/people.jpg +0 -0
  483. data/lib/starter_web/assets/themes/j1/core/css/bootstrap.css +6328 -0
  484. data/lib/starter_web/assets/themes/j1/core/css/bootstrap.min.css +6 -0
  485. data/lib/starter_web/assets/themes/j1/core/css/custom.scss +28 -0
  486. data/lib/starter_web/assets/themes/j1/core/css/theme_extensions.css +3333 -0
  487. data/lib/starter_web/assets/themes/j1/core/css/theme_extensions.min.css +1 -0
  488. data/lib/starter_web/assets/themes/j1/core/css/uno.css +11580 -0
  489. data/lib/starter_web/assets/themes/j1/core/css/uno.min.css +1 -0
  490. data/lib/starter_web/assets/themes/j1/core/css/uno.scss +28 -0
  491. data/lib/starter_web/assets/themes/j1/core/css/vendor.css +34598 -0
  492. data/lib/starter_web/assets/themes/j1/core/css/vendor.min.css +8 -0
  493. data/lib/starter_web/assets/themes/j1/core/css/vendor.scss +28 -0
  494. data/lib/starter_web/assets/themes/j1/core/fonts/fontawesome_5/fonts/fa-brands-400.eot +0 -0
  495. data/lib/starter_web/assets/themes/j1/core/fonts/fontawesome_5/fonts/fa-brands-400.svg +990 -0
  496. data/lib/starter_web/assets/themes/j1/core/fonts/fontawesome_5/fonts/fa-brands-400.ttf +0 -0
  497. data/lib/starter_web/assets/themes/j1/core/fonts/fontawesome_5/fonts/fa-brands-400.woff +0 -0
  498. data/lib/starter_web/assets/themes/j1/core/fonts/fontawesome_5/fonts/fa-brands-400.woff2 +0 -0
  499. data/lib/starter_web/assets/themes/j1/core/fonts/fontawesome_5/fonts/fa-regular-400.eot +0 -0
  500. data/lib/starter_web/assets/themes/j1/core/fonts/fontawesome_5/fonts/fa-regular-400.svg +363 -0
  501. data/lib/starter_web/assets/themes/j1/core/fonts/fontawesome_5/fonts/fa-regular-400.ttf +0 -0
  502. data/lib/starter_web/assets/themes/j1/core/fonts/fontawesome_5/fonts/fa-regular-400.woff +0 -0
  503. data/lib/starter_web/assets/themes/j1/core/fonts/fontawesome_5/fonts/fa-regular-400.woff2 +0 -0
  504. data/lib/starter_web/assets/themes/j1/core/fonts/fontawesome_5/fonts/fa-solid-900.eot +0 -0
  505. data/lib/starter_web/assets/themes/j1/core/fonts/fontawesome_5/fonts/fa-solid-900.svg +1413 -0
  506. data/lib/starter_web/assets/themes/j1/core/fonts/fontawesome_5/fonts/fa-solid-900.ttf +0 -0
  507. data/lib/starter_web/assets/themes/j1/core/fonts/fontawesome_5/fonts/fa-solid-900.woff +0 -0
  508. data/lib/starter_web/assets/themes/j1/core/fonts/fontawesome_5/fonts/fa-solid-900.woff2 +0 -0
  509. data/lib/starter_web/assets/themes/j1/core/fonts/fontawesome_5/metadata/icons.json +26790 -0
  510. data/lib/starter_web/assets/themes/j1/core/fonts/fontawesome_5/metadata/icons.yml +9088 -0
  511. data/lib/starter_web/assets/themes/j1/core/fonts/fontawesome_5/metadata/shims.json +2302 -0
  512. data/lib/starter_web/assets/themes/j1/core/fonts/fontawesome_5/metadata/shims.yml +292 -0
  513. data/lib/starter_web/assets/themes/j1/core/fonts/materialdesign_icons/fonts/materialdesignicons-webfont.eot +0 -0
  514. data/lib/starter_web/assets/themes/j1/core/fonts/materialdesign_icons/fonts/materialdesignicons-webfont.svg +6369 -0
  515. data/lib/starter_web/assets/themes/j1/core/fonts/materialdesign_icons/fonts/materialdesignicons-webfont.ttf +0 -0
  516. data/lib/starter_web/assets/themes/j1/core/fonts/materialdesign_icons/fonts/materialdesignicons-webfont.woff +0 -0
  517. data/lib/starter_web/assets/themes/j1/core/fonts/materialdesign_icons/fonts/materialdesignicons-webfont.woff2 +0 -0
  518. data/lib/starter_web/assets/themes/j1/core/fonts/materialdesign_icons/license.md +97 -0
  519. data/lib/starter_web/assets/themes/j1/core/fonts/materialdesign_icons/metadata/icons.json +8186 -0
  520. data/lib/starter_web/assets/themes/j1/core/fonts/materialdesign_icons/metadata/icons.yml +5857 -0
  521. data/lib/starter_web/assets/themes/j1/core/fonts/roboto/fonts/OpenSansEmoji.ttf +0 -0
  522. data/lib/starter_web/assets/themes/j1/core/fonts/roboto/fonts/Roboto-Black.ttf +0 -0
  523. data/lib/starter_web/assets/themes/j1/core/fonts/roboto/fonts/Roboto-BlackItalic.ttf +0 -0
  524. data/lib/starter_web/assets/themes/j1/core/fonts/roboto/fonts/Roboto-Bold.ttf +0 -0
  525. data/lib/starter_web/assets/themes/j1/core/fonts/roboto/fonts/Roboto-Bold.woff +0 -0
  526. data/lib/starter_web/assets/themes/j1/core/fonts/roboto/fonts/Roboto-Bold.woff2 +0 -0
  527. data/lib/starter_web/assets/themes/j1/core/fonts/roboto/fonts/Roboto-BoldItalic.ttf +0 -0
  528. data/lib/starter_web/assets/themes/j1/core/fonts/roboto/fonts/Roboto-Italic.ttf +0 -0
  529. data/lib/starter_web/assets/themes/j1/core/fonts/roboto/fonts/Roboto-Light.ttf +0 -0
  530. data/lib/starter_web/assets/themes/j1/core/fonts/roboto/fonts/Roboto-Light.woff +0 -0
  531. data/lib/starter_web/assets/themes/j1/core/fonts/roboto/fonts/Roboto-Light.woff2 +0 -0
  532. data/lib/starter_web/assets/themes/j1/core/fonts/roboto/fonts/Roboto-LightItalic.ttf +0 -0
  533. data/lib/starter_web/assets/themes/j1/core/fonts/roboto/fonts/Roboto-Medium.ttf +0 -0
  534. data/lib/starter_web/assets/themes/j1/core/fonts/roboto/fonts/Roboto-Medium.woff +0 -0
  535. data/lib/starter_web/assets/themes/j1/core/fonts/roboto/fonts/Roboto-Medium.woff2 +0 -0
  536. data/lib/starter_web/assets/themes/j1/core/fonts/roboto/fonts/Roboto-MediumItalic.ttf +0 -0
  537. data/lib/starter_web/assets/themes/j1/core/fonts/roboto/fonts/Roboto-Regular.ttf +0 -0
  538. data/lib/starter_web/assets/themes/j1/core/fonts/roboto/fonts/Roboto-Regular.woff +0 -0
  539. data/lib/starter_web/assets/themes/j1/core/fonts/roboto/fonts/Roboto-Regular.woff2 +0 -0
  540. data/lib/starter_web/assets/themes/j1/core/fonts/roboto/fonts/Roboto-Thin.ttf +0 -0
  541. data/lib/starter_web/assets/themes/j1/core/fonts/roboto/fonts/Roboto-Thin.woff +0 -0
  542. data/lib/starter_web/assets/themes/j1/core/fonts/roboto/fonts/Roboto-Thin.woff2 +0 -0
  543. data/lib/starter_web/assets/themes/j1/core/fonts/roboto/fonts/Roboto-ThinItalic.ttf +0 -0
  544. data/lib/starter_web/assets/themes/j1/core/fonts/roboto/fonts/mplus1mn-bold-ascii.ttf +0 -0
  545. data/lib/starter_web/assets/themes/j1/core/fonts/roboto/fonts/mplus1mn-bold_italic-ascii.ttf +0 -0
  546. data/lib/starter_web/assets/themes/j1/core/fonts/roboto/fonts/mplus1mn-italic-ascii.ttf +0 -0
  547. data/lib/starter_web/assets/themes/j1/core/fonts/roboto/fonts/mplus1mn-regular-ascii-conums.ttf +0 -0
  548. data/lib/starter_web/assets/themes/j1/core/fonts/roboto/fonts/mplus1p-regular-fallback.ttf +0 -0
  549. data/lib/starter_web/assets/themes/j1/core/fonts/roboto/fonts/notoserif-bold-subset.ttf +0 -0
  550. data/lib/starter_web/assets/themes/j1/core/fonts/roboto/fonts/notoserif-bold_italic-subset.ttf +0 -0
  551. data/lib/starter_web/assets/themes/j1/core/fonts/roboto/fonts/notoserif-italic-subset.ttf +0 -0
  552. data/lib/starter_web/assets/themes/j1/core/fonts/roboto/fonts/notoserif-regular-subset.ttf +0 -0
  553. data/lib/starter_web/assets/themes/j1/core/js/adapter/back2top.js +141 -0
  554. data/lib/starter_web/assets/themes/j1/core/js/adapter/bs_gallery.js +282 -0
  555. data/lib/starter_web/assets/themes/j1/core/js/adapter/cookiebar.js +112 -0
  556. data/lib/starter_web/assets/themes/j1/core/js/adapter/custom.js +92 -0
  557. data/lib/starter_web/assets/themes/j1/core/js/adapter/iframer.js +99 -0
  558. data/lib/starter_web/assets/themes/j1/core/js/adapter/lightbox.js +95 -0
  559. data/lib/starter_web/assets/themes/j1/core/js/adapter/logger.js +153 -0
  560. data/lib/starter_web/assets/themes/j1/core/js/adapter/master_header.js +488 -0
  561. data/lib/starter_web/assets/themes/j1/core/js/adapter/navigator.js +687 -0
  562. data/lib/starter_web/assets/themes/j1/core/js/adapter/scroller.js +110 -0
  563. data/lib/starter_web/assets/themes/j1/core/js/adapter/searcher.js +111 -0
  564. data/lib/starter_web/assets/themes/j1/core/js/adapter/switcher.js +113 -0
  565. data/lib/starter_web/assets/themes/j1/core/js/adapter/template.js +608 -0
  566. data/lib/starter_web/assets/themes/j1/core/js/adapter/toccer.js +295 -0
  567. data/lib/starter_web/assets/themes/j1/core/js/template.js +79 -0
  568. data/lib/starter_web/assets/themes/j1/core/js/template.js.map +1 -0
  569. data/lib/starter_web/assets/themes/j1/core/js/template.min.js +1 -0
  570. data/lib/starter_web/assets/themes/j1/extensions/carousel/css/carousel.css +81 -0
  571. data/lib/starter_web/assets/themes/j1/extensions/carousel/css/carousel.min.css +17 -0
  572. data/lib/starter_web/assets/themes/j1/extensions/carousel/css/carousel_transitions.css +184 -0
  573. data/lib/starter_web/assets/themes/j1/extensions/carousel/css/carousel_transitions.min.css +17 -0
  574. data/lib/starter_web/assets/themes/j1/extensions/carousel/css/theme/uno.css +190 -0
  575. data/lib/starter_web/assets/themes/j1/extensions/carousel/css/theme/uno.min.css +17 -0
  576. data/lib/starter_web/assets/themes/j1/extensions/carousel/images/ajax-loader.gif +0 -0
  577. data/lib/starter_web/assets/themes/j1/extensions/carousel/images/grabbing.png +0 -0
  578. data/lib/starter_web/assets/themes/j1/extensions/carousel/images/owl-logo.png +0 -0
  579. data/lib/starter_web/assets/themes/j1/extensions/carousel/images/owl.video.play.png +0 -0
  580. data/lib/starter_web/assets/themes/j1/extensions/carousel/js/carousel.js +1517 -0
  581. data/lib/starter_web/assets/themes/j1/extensions/carousel/js/carousel.min.js +57 -0
  582. data/lib/starter_web/assets/themes/j1/extensions/carousel/js/j1_adapter_carousel.js +228 -0
  583. data/lib/starter_web/assets/themes/j1/extensions/datatables/css/DataTables-1.10.16/images/sort_asc.png +0 -0
  584. data/lib/starter_web/assets/themes/j1/extensions/datatables/css/DataTables-1.10.16/images/sort_asc_disabled.png +0 -0
  585. data/lib/starter_web/assets/themes/j1/extensions/datatables/css/DataTables-1.10.16/images/sort_both.png +0 -0
  586. data/lib/starter_web/assets/themes/j1/extensions/datatables/css/DataTables-1.10.16/images/sort_desc.png +0 -0
  587. data/lib/starter_web/assets/themes/j1/extensions/datatables/css/DataTables-1.10.16/images/sort_desc_disabled.png +0 -0
  588. data/lib/starter_web/assets/themes/j1/extensions/datatables/css/datatables.css +1113 -0
  589. data/lib/starter_web/assets/themes/j1/extensions/datatables/css/datatables.min.css +136 -0
  590. data/lib/starter_web/assets/themes/j1/extensions/datatables/css/theme/uno.css +473 -0
  591. data/lib/starter_web/assets/themes/j1/extensions/datatables/js/datatables.js +95360 -0
  592. data/lib/starter_web/assets/themes/j1/extensions/datatables/js/datatables.min.js +533 -0
  593. data/lib/starter_web/assets/themes/j1/extensions/iframe_resizer/examples/frame.absolute.html +86 -0
  594. data/lib/starter_web/assets/themes/j1/extensions/iframe_resizer/examples/frame.content.html +58 -0
  595. data/lib/starter_web/assets/themes/j1/extensions/iframe_resizer/examples/frame.hover.html +51 -0
  596. data/lib/starter_web/assets/themes/j1/extensions/iframe_resizer/examples/frame.nested.html +68 -0
  597. data/lib/starter_web/assets/themes/j1/extensions/iframe_resizer/examples/frame.textarea.html +46 -0
  598. data/lib/starter_web/assets/themes/j1/extensions/iframe_resizer/examples/frame.tolerance.html +79 -0
  599. data/lib/starter_web/assets/themes/j1/extensions/iframe_resizer/examples/index.html +70 -0
  600. data/lib/starter_web/assets/themes/j1/extensions/iframe_resizer/examples/two.html +71 -0
  601. data/lib/starter_web/assets/themes/j1/extensions/iframe_resizer/js/client/iframeResizer.contentWindow.js +1104 -0
  602. data/lib/starter_web/assets/themes/j1/extensions/iframe_resizer/js/client/iframeResizer.contentWindow.map +1 -0
  603. data/lib/starter_web/assets/themes/j1/extensions/iframe_resizer/js/client/iframeResizer.contentWindow.min.js +10 -0
  604. data/lib/starter_web/assets/themes/j1/extensions/justified_gallery/css/justifiedGallery.css +103 -0
  605. data/lib/starter_web/assets/themes/j1/extensions/justified_gallery/css/justifiedGallery.min.css +8 -0
  606. data/lib/starter_web/assets/themes/j1/extensions/justified_gallery/css/theme/uno.css +23 -0
  607. data/lib/starter_web/assets/themes/j1/extensions/justified_gallery/js/j1_adapter_justified_gallery.js +262 -0
  608. data/lib/starter_web/assets/themes/j1/extensions/justified_gallery/js/justifiedGallery.3.6.3.js +1145 -0
  609. data/lib/starter_web/assets/themes/j1/extensions/justified_gallery/js/justifiedGallery.js +1147 -0
  610. data/lib/starter_web/assets/themes/j1/extensions/justified_gallery/js/justifiedGallery.min.js +9 -0
  611. data/lib/starter_web/assets/themes/j1/extensions/justified_gallery/less/.csslintrc +19 -0
  612. data/lib/starter_web/assets/themes/j1/extensions/justified_gallery/less/justifiedGallery.less +113 -0
  613. data/lib/starter_web/assets/themes/j1/extensions/light_gallery/css/lg-fb-comment-box.css +57 -0
  614. data/lib/starter_web/assets/themes/j1/extensions/light_gallery/css/lg-fb-comment-box.min.css +1 -0
  615. data/lib/starter_web/assets/themes/j1/extensions/light_gallery/css/lg-transitions.css +777 -0
  616. data/lib/starter_web/assets/themes/j1/extensions/light_gallery/css/lg-transitions.min.css +1 -0
  617. data/lib/starter_web/assets/themes/j1/extensions/light_gallery/css/lightgallery.css +980 -0
  618. data/lib/starter_web/assets/themes/j1/extensions/light_gallery/css/lightgallery.min.css +1 -0
  619. data/lib/starter_web/assets/themes/j1/extensions/light_gallery/css/theme/uno.css +330 -0
  620. data/lib/starter_web/assets/themes/j1/extensions/light_gallery/fonts/lg.eot +0 -0
  621. data/lib/starter_web/assets/themes/j1/extensions/light_gallery/fonts/lg.svg +47 -0
  622. data/lib/starter_web/assets/themes/j1/extensions/light_gallery/fonts/lg.ttf +0 -0
  623. data/lib/starter_web/assets/themes/j1/extensions/light_gallery/fonts/lg.woff +0 -0
  624. data/lib/starter_web/assets/themes/j1/extensions/light_gallery/img/icons/animation-w.png +0 -0
  625. data/lib/starter_web/assets/themes/j1/extensions/light_gallery/img/icons/customize-w.png +0 -0
  626. data/lib/starter_web/assets/themes/j1/extensions/light_gallery/img/icons/dynamic-w.png +0 -0
  627. data/lib/starter_web/assets/themes/j1/extensions/light_gallery/img/icons/facebook-icon.svg +10 -0
  628. data/lib/starter_web/assets/themes/j1/extensions/light_gallery/img/icons/googleplus-icon.svg +30 -0
  629. data/lib/starter_web/assets/themes/j1/extensions/light_gallery/img/icons/html5-w.png +0 -0
  630. data/lib/starter_web/assets/themes/j1/extensions/light_gallery/img/icons/linked-in.png +0 -0
  631. data/lib/starter_web/assets/themes/j1/extensions/light_gallery/img/icons/module-w.png +0 -0
  632. data/lib/starter_web/assets/themes/j1/extensions/light_gallery/img/icons/play-button.png +0 -0
  633. data/lib/starter_web/assets/themes/j1/extensions/light_gallery/img/icons/responsive-w.png +0 -0
  634. data/lib/starter_web/assets/themes/j1/extensions/light_gallery/img/icons/thumb-w.png +0 -0
  635. data/lib/starter_web/assets/themes/j1/extensions/light_gallery/img/icons/touch-w.png +0 -0
  636. data/lib/starter_web/assets/themes/j1/extensions/light_gallery/img/icons/twitter-icon.svg +15 -0
  637. data/lib/starter_web/assets/themes/j1/extensions/light_gallery/img/icons/twitter.png +0 -0
  638. data/lib/starter_web/assets/themes/j1/extensions/light_gallery/img/icons/video1-w.png +0 -0
  639. data/lib/starter_web/assets/themes/j1/extensions/light_gallery/img/icons/zoom-w.png +0 -0
  640. data/lib/starter_web/assets/themes/j1/extensions/light_gallery/img/icons/zoom.png +0 -0
  641. data/lib/starter_web/assets/themes/j1/extensions/light_gallery/img/loading.gif +0 -0
  642. data/lib/starter_web/assets/themes/j1/extensions/light_gallery/img/video-play.png +0 -0
  643. data/lib/starter_web/assets/themes/j1/extensions/light_gallery/img/vimeo-play.png +0 -0
  644. data/lib/starter_web/assets/themes/j1/extensions/light_gallery/img/youtube-play.png +0 -0
  645. data/lib/starter_web/assets/themes/j1/extensions/light_gallery/js/lg-autoplay.js +206 -0
  646. data/lib/starter_web/assets/themes/j1/extensions/light_gallery/js/lg-autoplay.min.js +4 -0
  647. data/lib/starter_web/assets/themes/j1/extensions/light_gallery/js/lg-fullscreen.js +116 -0
  648. data/lib/starter_web/assets/themes/j1/extensions/light_gallery/js/lg-fullscreen.min.js +4 -0
  649. data/lib/starter_web/assets/themes/j1/extensions/light_gallery/js/lg-hash.js +101 -0
  650. data/lib/starter_web/assets/themes/j1/extensions/light_gallery/js/lg-hash.min.js +4 -0
  651. data/lib/starter_web/assets/themes/j1/extensions/light_gallery/js/lg-pager.js +105 -0
  652. data/lib/starter_web/assets/themes/j1/extensions/light_gallery/js/lg-pager.min.js +4 -0
  653. data/lib/starter_web/assets/themes/j1/extensions/light_gallery/js/lg-share.js +107 -0
  654. data/lib/starter_web/assets/themes/j1/extensions/light_gallery/js/lg-share.min.js +4 -0
  655. data/lib/starter_web/assets/themes/j1/extensions/light_gallery/js/lg-thumbnail.js +478 -0
  656. data/lib/starter_web/assets/themes/j1/extensions/light_gallery/js/lg-thumbnail.min.js +4 -0
  657. data/lib/starter_web/assets/themes/j1/extensions/light_gallery/js/lg-video.js +331 -0
  658. data/lib/starter_web/assets/themes/j1/extensions/light_gallery/js/lg-video.min.js +4 -0
  659. data/lib/starter_web/assets/themes/j1/extensions/light_gallery/js/lg-zoom.js +527 -0
  660. data/lib/starter_web/assets/themes/j1/extensions/light_gallery/js/lg-zoom.min.js +4 -0
  661. data/lib/starter_web/assets/themes/j1/extensions/light_gallery/js/lightgallery.js +1364 -0
  662. data/lib/starter_web/assets/themes/j1/extensions/light_gallery/js/lightgallery.min.js +4 -0
  663. data/lib/starter_web/assets/themes/j1/extensions/rouge/css/base16.dark/theme.css +78 -0
  664. data/lib/starter_web/assets/themes/j1/extensions/rouge/css/base16.light/theme.css +77 -0
  665. data/lib/starter_web/assets/themes/j1/extensions/rouge/css/base16.monokai.dark/theme.css +78 -0
  666. data/lib/starter_web/assets/themes/j1/extensions/rouge/css/base16.monokai.light/theme.css +77 -0
  667. data/lib/starter_web/assets/themes/j1/extensions/rouge/css/base16.monokai/theme.css +78 -0
  668. data/lib/starter_web/assets/themes/j1/extensions/rouge/css/base16.solarized.dark/theme.css +78 -0
  669. data/lib/starter_web/assets/themes/j1/extensions/rouge/css/base16.solarized.light/theme.css +77 -0
  670. data/lib/starter_web/assets/themes/j1/extensions/rouge/css/base16.solarized/theme.css +77 -0
  671. data/lib/starter_web/assets/themes/j1/extensions/rouge/css/base16/theme.css +77 -0
  672. data/lib/starter_web/assets/themes/j1/extensions/rouge/css/colorful/theme.css +170 -0
  673. data/lib/starter_web/assets/themes/j1/extensions/rouge/css/github/theme.css +209 -0
  674. data/lib/starter_web/assets/themes/j1/extensions/rouge/css/gruvbox.dark/theme.css +84 -0
  675. data/lib/starter_web/assets/themes/j1/extensions/rouge/css/gruvbox.light/theme.css +84 -0
  676. data/lib/starter_web/assets/themes/j1/extensions/rouge/css/gruvbox/theme.css +84 -0
  677. data/lib/starter_web/assets/themes/j1/extensions/rouge/css/igorpro/theme.css +32 -0
  678. data/lib/starter_web/assets/themes/j1/extensions/rouge/css/molokai/theme.css +208 -0
  679. data/lib/starter_web/assets/themes/j1/extensions/rouge/css/monokai.sublime/theme.css +187 -0
  680. data/lib/starter_web/assets/themes/j1/extensions/rouge/css/monokai/theme.css +210 -0
  681. data/lib/starter_web/assets/themes/j1/extensions/rouge/css/pastie/theme.css +146 -0
  682. data/lib/starter_web/assets/themes/j1/extensions/rouge/css/thankful_eyes/theme.css +173 -0
  683. data/lib/starter_web/assets/themes/j1/extensions/rouge/css/tulip/theme.css +164 -0
  684. data/lib/starter_web/assets/themes/j1/extensions/videojs/css/font/vjs.ttf +0 -0
  685. data/lib/starter_web/assets/themes/j1/extensions/videojs/css/font/vjs.woff +0 -0
  686. data/lib/starter_web/assets/themes/j1/extensions/videojs/css/video-js.4.12.15.css +1011 -0
  687. data/lib/starter_web/assets/themes/j1/extensions/videojs/css/video-js.4.12.15.min.css +5 -0
  688. data/lib/starter_web/assets/themes/j1/extensions/videojs/js/video.4.12.15.min.js +203 -0
  689. data/lib/starter_web/assets/themes/j1/extensions/vimeo_player/js/froogaloop2.min.js +4 -0
  690. data/lib/starter_web/assets/videos/gallery/video1-poster.jpg +0 -0
  691. data/lib/starter_web/assets/videos/gallery/video1-thumb.jpg +0 -0
  692. data/lib/starter_web/assets/videos/gallery/video2-poster.jpg +0 -0
  693. data/lib/starter_web/assets/videos/gallery/video2-thumb.jpg +0 -0
  694. data/lib/starter_web/assets/videos/gallery/video_adele-poster.jpg +0 -0
  695. data/lib/starter_web/assets/videos/gallery/video_gaga-poster.jpg +0 -0
  696. data/lib/starter_web/assets/videos/gallery/video_gwen-poster.jpg +0 -0
  697. data/lib/starter_web/assets/videos/gallery/video_michelle-poster.jpg +0 -0
  698. data/lib/starter_web/assets/videos/headers/still/underground-broadway.png +0 -0
  699. data/lib/starter_web/assets/videos/headers/still/victoria-oskolovich-on-vimeo.png +0 -0
  700. data/lib/starter_web/collections/_biography/a-life-in-questions.adoc +76 -0
  701. data/lib/starter_web/collections/_biography/born-to-run.adoc +73 -0
  702. data/lib/starter_web/collections/_biography/forty-autumns.adoc +70 -0
  703. data/lib/starter_web/collections/_biography/not-dead-yet.adoc +64 -0
  704. data/lib/starter_web/collections/_biography/princess-diarist-the.adoc +67 -0
  705. data/lib/starter_web/collections/_biography/when-breath-becomes-air.adoc +68 -0
  706. data/lib/starter_web/collections/_fantasy/harry-potter-deathly-hallows.adoc +59 -0
  707. data/lib/starter_web/collections/_fantasy/harry-potter-philosophers-stone.adoc +59 -0
  708. data/lib/starter_web/collections/_fantasy/mistborn-trilogy.adoc +57 -0
  709. data/lib/starter_web/collections/_fantasy/ready-player-one.adoc +58 -0
  710. data/lib/starter_web/collections/_fantasy/sword-of-destiny.adoc +57 -0
  711. data/lib/starter_web/collections/_fantasy/terry-pratchet-diary-2017.adoc +55 -0
  712. data/lib/starter_web/collections/_featured/static-site-generators.adoc +43 -0
  713. data/lib/starter_web/collections/_romance/breath-of-snow-and-ashes-a.adoc +62 -0
  714. data/lib/starter_web/collections/_romance/dressmaker-the.adoc +56 -0
  715. data/lib/starter_web/collections/_romance/fiery-cross-the.adoc +64 -0
  716. data/lib/starter_web/collections/_romance/it-ends-with-us.adoc +61 -0
  717. data/lib/starter_web/collections/_romance/outlander-novel.adoc +73 -0
  718. data/lib/starter_web/collections/_romance/virgins-outlander-short-story.adoc +57 -0
  719. data/lib/starter_web/collections/posts/featured/_posts/0000-00-00-welcome-to-j1-template.adoc.erb +60 -0
  720. data/lib/starter_web/collections/posts/featured/_posts/000_includes/attributes.asciidoc +15 -0
  721. data/lib/starter_web/collections/posts/featured/_posts/2017-05-01-confusion-about-base-url.adoc +102 -0
  722. data/lib/starter_web/collections/posts/featured/_posts/2017-06-01-top-open-source-static-site-generators.adoc +79 -0
  723. data/lib/starter_web/collections/posts/featured/_posts/2017-07-01-what-is-a-static-site.adoc +146 -0
  724. data/lib/starter_web/collections/posts/series/_posts/000_includes/attributes.asciidoc +66 -0
  725. data/lib/starter_web/collections/posts/series/_posts/000_includes/documents/100-docker-using-shared-folders.asciidoc +415 -0
  726. data/lib/starter_web/collections/posts/series/_posts/000_includes/documents/loop.sh +28 -0
  727. data/lib/starter_web/collections/posts/series/_posts/000_includes/tables/debug_variables.asciidoc +47 -0
  728. data/lib/starter_web/collections/posts/series/_posts/2018-11-01-docker-using-shared-folders.adoc +94 -0
  729. data/lib/starter_web/collections/posts/wikipedia/_posts/2016-11-20-minneapolis.adoc +112 -0
  730. data/lib/starter_web/collections/posts/wikipedia/_posts/2016-11-24-narcisse-snake-pits.adoc +81 -0
  731. data/lib/starter_web/collections/posts/wikipedia/_posts/2016-11-26-columbia-river.adoc +68 -0
  732. data/lib/starter_web/favicon.ico +0 -0
  733. data/lib/starter_web/index.html +57 -0
  734. data/lib/starter_web/package.json +104 -0
  735. data/lib/starter_web/pages/about/about_site.adoc +40 -0
  736. data/lib/starter_web/pages/about/about_you.adoc +103 -0
  737. data/lib/starter_web/pages/blog/navigator/archive.html +97 -0
  738. data/lib/starter_web/pages/blog/navigator/archive_by_category.html +135 -0
  739. data/lib/starter_web/pages/blog/navigator/archive_by_date.html +115 -0
  740. data/lib/starter_web/pages/blog/navigator/archive_by_tag.html +168 -0
  741. data/lib/starter_web/pages/blog/navigator/index.html +41 -0
  742. data/lib/starter_web/pages/bookshelf/100_about_jekyll_collections.adoc +264 -0
  743. data/lib/starter_web/pages/bookshelf/200_book_shelf_biography.adoc +41 -0
  744. data/lib/starter_web/pages/bookshelf/300_book_shelf_fantasy.adoc +43 -0
  745. data/lib/starter_web/pages/bookshelf/400_book_shelf_romance.adoc +43 -0
  746. data/lib/starter_web/pages/legal/de/100_impress.adoc +80 -0
  747. data/lib/starter_web/pages/legal/de/200_terms_of_use.adoc +48 -0
  748. data/lib/starter_web/pages/legal/de/300_privacy.adoc +233 -0
  749. data/lib/starter_web/pages/legal/de/400_license_agreement.adoc +388 -0
  750. data/lib/starter_web/pages/legal/de/500_support.adoc +13 -0
  751. data/lib/starter_web/pages/legal/en/100_impress.adoc +80 -0
  752. data/lib/starter_web/pages/legal/en/200_terms_of_use.adoc +44 -0
  753. data/lib/starter_web/pages/legal/en/300_privacy.adoc +269 -0
  754. data/lib/starter_web/pages/legal/en/400_license_agreement.adoc +430 -0
  755. data/lib/starter_web/pages/legal/en/500_support.adoc +13 -0
  756. data/lib/starter_web/pages/panel/100_intro_panel.adoc +151 -0
  757. data/lib/starter_web/pages/previewer/000_includes/attributes.asciidoc +75 -0
  758. data/lib/starter_web/pages/previewer/000_includes/tables/mdi_icons/100_absolute_sizes.asciidoc +39 -0
  759. data/lib/starter_web/pages/previewer/000_includes/tables/mdi_icons/110_bs_grid_sizes.asciidoc +47 -0
  760. data/lib/starter_web/pages/previewer/000_includes/tables/mdi_icons/120_relative_sizes.asciidoc +87 -0
  761. data/lib/starter_web/pages/previewer/000_includes/tables/mdi_icons/200_rotate.asciidoc +71 -0
  762. data/lib/starter_web/pages/previewer/000_includes/tables/mdi_icons/300_flip.asciidoc +30 -0
  763. data/lib/starter_web/pages/previewer/000_includes/tables/mdi_icons/400_spin_pulsed.asciidoc +39 -0
  764. data/lib/starter_web/pages/previewer/000_includes/tables/mdi_icons/500_bw_color_palette.asciidoc +60 -0
  765. data/lib/starter_web/pages/previewer/000_includes/tables/mdi_icons/510_bs_color_palette.asciidoc +54 -0
  766. data/lib/starter_web/pages/previewer/000_includes/tables/mdi_icons/600_md_color_palette.asciidoc +94 -0
  767. data/lib/starter_web/pages/previewer/000_includes/tables/mdi_icons/601_md_color_palette_indigo.asciidoc +94 -0
  768. data/lib/starter_web/pages/previewer/000_includes/tables/mdi_icons/602_md_color_palette_pink.asciidoc +94 -0
  769. data/lib/starter_web/pages/previewer/000_includes/tables/twitter_emoji/100_bs_sizes.asciidoc +46 -0
  770. data/lib/starter_web/pages/previewer/000_includes/tables/twitter_emoji/100_relative_sizes.asciidoc +46 -0
  771. data/lib/starter_web/pages/previewer/000_includes/tables/twitter_emoji/200_rotate.asciidoc +70 -0
  772. data/lib/starter_web/pages/previewer/000_includes/tables/twitter_emoji/300_flip.asciidoc +29 -0
  773. data/lib/starter_web/pages/previewer/000_includes/tables/twitter_emoji/400_spin_pulsed.asciidoc +30 -0
  774. data/lib/starter_web/pages/previewer/bootstrap_theme.adoc +1820 -0
  775. data/lib/starter_web/pages/previewer/justified_gallery.html +353 -0
  776. data/lib/starter_web/pages/previewer/mdi_icons_preview.adoc +314 -0
  777. data/lib/starter_web/pages/previewer/twitter_emoji_preview.adoc +181 -0
  778. data/lib/starter_web/pages/start/000_includes/attributes.asciidoc +30 -0
  779. data/lib/starter_web/pages/start/change_me_first.adoc +54 -0
  780. data/lib/starter_web/pages/start/dm920hd.adoc +467 -0
  781. data/lib/starter_web/pages/start/documentation/user_guide/100_header/000_includes/attributes.asciidoc +72 -0
  782. data/lib/starter_web/pages/start/documentation/user_guide/100_header/000_includes/documents/200_library_features.asciidoc +285 -0
  783. data/lib/starter_web/pages/start/documentation/user_guide/100_header/000_includes/images/001_menu_bar_example.png +0 -0
  784. data/lib/starter_web/pages/start/documentation/user_guide/100_header/000_includes/images/005_navbar.png +0 -0
  785. data/lib/starter_web/pages/start/documentation/user_guide/100_header/000_includes/images/005_navigation_bar.png +0 -0
  786. data/lib/starter_web/pages/start/documentation/user_guide/100_header/000_includes/images/006_navigation_side_bar.png +0 -0
  787. data/lib/starter_web/pages/start/documentation/user_guide/100_header/000_includes/images/006_searchbar.png +0 -0
  788. data/lib/starter_web/pages/start/documentation/user_guide/100_header/000_includes/images/007_sidebar.png +0 -0
  789. data/lib/starter_web/pages/start/documentation/user_guide/100_header/000_includes/images/008_navbar_blank.png +0 -0
  790. data/lib/starter_web/pages/start/documentation/user_guide/100_header/000_includes/images/010_nav_bar.png +0 -0
  791. data/lib/starter_web/pages/start/documentation/user_guide/100_header/000_includes/images/010_top_search.png +0 -0
  792. data/lib/starter_web/pages/start/documentation/user_guide/100_header/000_includes/images/012_top_search.png +0 -0
  793. data/lib/starter_web/pages/start/documentation/user_guide/100_header/000_includes/images/015_quicklink_bar.png +0 -0
  794. data/lib/starter_web/pages/start/documentation/user_guide/100_header/000_includes/images/017_side_bar.png +0 -0
  795. data/lib/starter_web/pages/start/documentation/user_guide/100_header/000_includes/images/020_menu_bar.png +0 -0
  796. data/lib/starter_web/pages/start/documentation/user_guide/100_header/000_includes/images/400_master_header.png +0 -0
  797. data/lib/starter_web/pages/start/documentation/user_guide/100_header/000_includes/images/410_text_header.png +0 -0
  798. data/lib/starter_web/pages/start/documentation/user_guide/100_header/000_includes/images/411_text_header.png +0 -0
  799. data/lib/starter_web/pages/start/documentation/user_guide/100_header/000_includes/images/412_header_anatomy.png +0 -0
  800. data/lib/starter_web/pages/start/documentation/user_guide/100_header/000_includes/images/415_image_header_caption.png +0 -0
  801. data/lib/starter_web/pages/start/documentation/user_guide/100_header/000_includes/images/snagit/412_header_anatomy.snag +0 -0
  802. data/lib/starter_web/pages/start/documentation/user_guide/100_header/000_includes/tables/000_text_sizes.asciidoc +50 -0
  803. data/lib/starter_web/pages/start/documentation/user_guide/100_header/000_includes/tables/410_common_header_parameters.asciidoc +120 -0
  804. data/lib/starter_web/pages/start/documentation/user_guide/100_header/000_includes/tables/420_common_image_header_parameters.asciidoc +52 -0
  805. data/lib/starter_web/pages/start/documentation/user_guide/100_header/000_includes/tables/421_additional_image_header_parameters.asciidoc +36 -0
  806. data/lib/starter_web/pages/start/documentation/user_guide/100_header/000_includes/tables/430_video_header_parameters.asciidoc +26 -0
  807. data/lib/starter_web/pages/start/documentation/user_guide/100_header/000_includes/tables/440_image_and_video_transitions.asciidoc +36 -0
  808. data/lib/starter_web/pages/start/documentation/user_guide/100_header/000_includes/tables/450_image_and_video_header_defaults.asciidoc +82 -0
  809. data/lib/starter_web/pages/start/documentation/user_guide/100_header/000_includes/tables/451_additional_image_and_video_header_defaults.asciidoc +23 -0
  810. data/lib/starter_web/pages/start/documentation/user_guide/100_header/100_header.adoc +452 -0
  811. data/lib/starter_web/pages/start/documentation/user_guide/240_auth_manager/000_includes/attributes.asciidoc +119 -0
  812. data/lib/starter_web/pages/start/documentation/user_guide/240_auth_manager/100_auth_manager.adoc +539 -0
  813. data/lib/starter_web/pages/start/downloads/quickstarter/000_includes/attributes.asciidoc +26 -0
  814. data/lib/starter_web/pages/start/downloads/quickstarter/000_includes/tables/100_quickstart_installation_packages.asciidoc +20 -0
  815. data/lib/starter_web/pages/start/downloads/quickstarter/100_linux_starter.adoc +566 -0
  816. data/lib/starter_web/pages/start/downloads/quickstarter/200_macos_starter.adoc +742 -0
  817. data/lib/starter_web/pages/start/downloads/quickstarter/300_windows_starter.adoc +742 -0
  818. data/lib/starter_web/pages/start/downloads/quickstarter/quickstart.adoc +104 -0
  819. data/lib/starter_web/pages/start/kickstarter/web_in_a_day/000_includes/attributes.asciidoc +24 -0
  820. data/lib/starter_web/pages/start/kickstarter/web_in_a_day/000_includes/documents/collections.adoc +268 -0
  821. data/lib/starter_web/pages/start/kickstarter/web_in_a_day/000_includes/documents/configuration.adoc +780 -0
  822. data/lib/starter_web/pages/start/kickstarter/web_in_a_day/000_includes/documents/directory_structure.adoc +106 -0
  823. data/lib/starter_web/pages/start/kickstarter/web_in_a_day/000_includes/documents/jekyll_commandline.adoc +94 -0
  824. data/lib/starter_web/pages/start/kickstarter/web_in_a_day/000_includes/documents/layout_inheritance.adoc +305 -0
  825. data/lib/starter_web/pages/start/kickstarter/web_in_a_day/000_includes/documents/manage_pages.adoc +365 -0
  826. data/lib/starter_web/pages/start/kickstarter/web_in_a_day/000_includes/documents/manage_posts.adoc +203 -0
  827. data/lib/starter_web/pages/start/kickstarter/web_in_a_day/000_includes/documents/pagination.adoc +228 -0
  828. data/lib/starter_web/pages/start/kickstarter/web_in_a_day/000_includes/documents/plugins.adoc +777 -0
  829. data/lib/starter_web/pages/start/kickstarter/web_in_a_day/000_includes/documents/templates.adoc +249 -0
  830. data/lib/starter_web/pages/start/kickstarter/web_in_a_day/000_includes/documents/variables.adoc +175 -0
  831. data/lib/starter_web/pages/start/kickstarter/web_in_a_day/100_introduction.adoc +169 -0
  832. data/lib/starter_web/pages/start/kickstarter/web_in_a_day/110_preparations.adoc +177 -0
  833. data/lib/starter_web/pages/start/kickstarter/web_in_a_day/120_getting_started.adoc +180 -0
  834. data/lib/starter_web/pages/start/kickstarter/web_in_a_day/_unused/20_j1_anatomy.asciidoc +97 -0
  835. data/lib/starter_web/pages/start/kickstarter/web_in_a_day/_unused/30_j1_configure_your_site.asciidoc +48 -0
  836. data/lib/starter_web/pages/start/kickstarter/web_in_a_day/_unused/40_j1_create_content.asciidoc +48 -0
  837. data/lib/starter_web/pages/start/kickstarter/web_in_a_day/_unused/50_j1_customize_your_pages.asciidoc +48 -0
  838. data/lib/starter_web/pages/start/read_me_first.adoc +102 -0
  839. data/lib/starter_web/pages/start/roundtrip/000_includes/attributes.asciidoc +49 -0
  840. data/lib/starter_web/pages/start/roundtrip/000_includes/documents/100_gistblock.asciidoc +27 -0
  841. data/lib/starter_web/pages/start/roundtrip/100_present_images.adoc +411 -0
  842. data/lib/starter_web/pages/start/roundtrip/200_cards.adoc +769 -0
  843. data/lib/starter_web/pages/start/roundtrip/300_typography.adoc +518 -0
  844. data/lib/starter_web/pages/start/roundtrip/400_icon_fonts.adoc +182 -0
  845. data/lib/starter_web/pages/start/roundtrip/500_asciidoc_extensions.adoc +462 -0
  846. data/lib/starter_web/pages/start/roundtrip/600_themes.adoc +75 -0
  847. data/lib/starter_web/pages/start/roundtrip/700_additional_modals.adoc +1369 -0
  848. data/lib/starter_web/pages/teaser/100_core.adoc +31 -0
  849. data/lib/starter_web/pages/teaser/200_components.adoc +30 -0
  850. data/lib/starter_web/pages/teaser/300_modules.adoc +32 -0
  851. data/screenshot.png +0 -0
  852. metadata +925 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["iframeResizer.contentWindow.js"],"names":["window","undefined","addEventListener","el","evt","func","attachEvent","removeEventListener","detachEvent","capitalizeFirstLetter","string","charAt","toUpperCase","slice","throttle","context","args","result","timeout","previous","later","getNow","apply","now","remaining","throttledTimer","this","arguments","clearTimeout","setTimeout","formatLogMsg","msg","msgID","myID","log","logging","console","warn","init","readDataFromParent","location","href","readDataFromPage","setMargin","setBodyStyle","bodyBackground","bodyPadding","injectClearFixIntoBodyElement","checkHeightMode","checkWidthMode","stopInfiniteResizingOfIFrame","setupPublicMethods","startEventListeners","inPageLinks","setupInPageLinks","sendSize","readyCallback","strBool","str","data","initMsg","substr","msgIdLen","split","bodyMargin","Number","calculateWidth","interval","autoResize","bodyMarginStr","heightCalcMode","tolerance","enable","resizeFrom","widthCalcMode","readData","iFrameResizer","JSON","stringify","messageCallback","targetOriginDefault","targetOrigin","heightCalculationMethod","widthCalculationMethod","setupCustomCalcMethods","calcMode","calcFunc","customCalcMethods","Object","constructor","chkCSS","attr","value","indexOf","document","body","style","documentElement","height","manageTriggerEvent","options","listener","add","eventName","handleEvent","eventType","eventHandlersByName","remove","eventNames","Array","prototype","map","method","manageEventListeners","checkCalcMode","calcModeDefault","modes","type","heightCalcModeDefault","getHeight","widthCalcModeDefault","getWidth","setupMutationObserver","stopMsgsToParent","sendPermit","removeMsgListener","receiver","disconnectMutationObserver","bodyObserver","disconnect","stopEventListeners","clearInterval","intervalTimer","teardown","clearFix","createElement","clear","display","appendChild","getPagePosition","x","pageXOffset","scrollLeft","y","pageYOffset","scrollTop","getElementPosition","elPosition","getBoundingClientRect","pagePosition","parseInt","left","top","findTarget","jumpToTarget","target","jumpPosition","hash","sendMsg","hashData","decodeURIComponent","getElementById","getElementsByName","checkLocationHash","bindAnchors","setupLink","linkClicked","e","preventDefault","getAttribute","forEach","call","querySelectorAll","bindLocationHash","initCheck","eventCancelTimer","enableInPageLinks","win","parentIFrame","resize","close","getId","getPageInfo","callback","pageInfoCallback","moveToAnchor","reset","resetIFrame","scrollTo","scrollToOffset","sendMessage","setHeightCalculationMethod","setWidthCalculationMethod","setTargetOrigin","size","customHeight","customWidth","valString","initInterval","setInterval","Math","abs","setupBodyMutationObserver","addImageLoadListners","mutation","addImageLoadListener","element","complete","src","imageLoaded","imageError","elements","push","attributeName","removeFromArray","splice","removeImageLoadListener","imageEventTriggered","event","typeDesc","mutationObserved","mutations","createMutationObserver","querySelector","config","attributes","attributeOldValue","characterData","characterDataOldValue","childList","subtree","observer","MutationObserver","observe","WebKitMutationObserver","forceIntervalTimer","getComputedStyle","prop","convertUnitsToPxForIE8","PIXEL","test","base","runtimeStyle","currentStyle","pixelLeft","retVal","defaultView","chkEventThottle","timer","getMaxElement","side","elementsLength","length","elVal","maxVal","Side","i","getAllMeasurements","dimention","bodyOffset","bodyScroll","documentElementOffset","documentElementScroll","getTaggedElements","tag","noTaggedElementsFound","getAllElements","sizeIFrame","triggerEvent","triggerEventDesc","resizeIFrame","currentHeight","width","currentWidth","isSizeChangeDetected","checkTolarance","a","b","isForceResizableEvent","isForceResizableCalcMode","resetRequiredMethods","logIgnored","checkDownSizing","lockTrigger","recordTrigger","resetPage","isDoubleFiredEvent","triggerLocked","doubleEventList","sizeIFrameThrottled","triggerLockedTimer","triggerReset","hcm","sendToParent","message","postMessage","isMessageForUs","getMessageType","getData","isMiddleTier","isInitMsg","true","false","callFromParent","messageType","processRequestFromParent","processMessage","firstRun","fireInit","source","initLock","initFromParent","inPageLink","pageInfo","msgBody","parse","chkLateLoaded","readyState","parent","click","max","min","offsetHeight","scrollWidth","Date","getTime","offset","scrollHeight","custom","grow","lowestElement","taggedElement","offsetWidth","scroll","rightMostElement"],"mappings":"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","file":"iframeResizer.contentWindow.min.js","sourcesContent":["/*\n * File: iframeResizer.contentWindow.js\n * Desc: Include this file in any page being loaded into an iframe\n * to force the iframe to resize to the content size.\n * Requires: iframeResizer.js on host page.\n * Doc: https://github.com/davidjbradshaw/iframe-resizer\n * Author: David J. Bradshaw - dave@bradshaw.net\n * Contributor: Jure Mav - jure.mav@gmail.com\n * Contributor: Ian Caunce - ian@hallnet.co.uk\n */\n\n\n;(function(window, undefined) {\n\t'use strict';\n\n\tvar\n\t\tautoResize = true,\n\t\tbase = 10,\n\t\tbodyBackground = '',\n\t\tbodyMargin = 0,\n\t\tbodyMarginStr = '',\n\t\tbodyObserver = null,\n\t\tbodyPadding = '',\n\t\tcalculateWidth = false,\n\t\tdoubleEventList = {'resize':1,'click':1},\n\t\teventCancelTimer = 128,\n\t\tfirstRun = true,\n\t\theight = 1,\n\t\theightCalcModeDefault = 'bodyOffset',\n\t\theightCalcMode = heightCalcModeDefault,\n\t\tinitLock = true,\n\t\tinitMsg = '',\n\t\tinPageLinks = {},\n\t\tinterval = 32,\n\t\tintervalTimer = null,\n\t\tlogging = false,\n\t\tmsgID = '[iFrameSizer]', //Must match host page msg ID\n\t\tmsgIdLen = msgID.length,\n\t\tmyID = '',\n\t\tobserver = null,\n\t\tresetRequiredMethods = {max:1,min:1,bodyScroll:1,documentElementScroll:1},\n\t\tresizeFrom = 'child',\n\t\tsendPermit = true,\n\t\ttarget = window.parent,\n\t\ttargetOriginDefault = '*',\n\t\ttolerance = 0,\n\t\ttriggerLocked = false,\n\t\ttriggerLockedTimer = null,\n\t\tthrottledTimer = 16,\n\t\twidth = 1,\n\t\twidthCalcModeDefault = 'scroll',\n\t\twidthCalcMode = widthCalcModeDefault,\n\t\twin = window,\n\t\tmessageCallback = function(){ warn('MessageCallback function not defined'); },\n\t\treadyCallback = function(){},\n\t\tpageInfoCallback = function(){},\n\t\tcustomCalcMethods = {\n\t\t\theight: function(){\n\t\t\t\twarn('Custom height calculation function not defined');\n\t\t\t\treturn document.documentElement.offsetHeight;\n\t\t\t},\n\t\t\twidth: function(){\n\t\t\t\twarn('Custom width calculation function not defined');\n\t\t\t\treturn document.body.scrollWidth;\n\t\t\t}\n\t\t},\n\t\teventHandlersByName = {};\n\n\n\tfunction addEventListener(el,evt,func){\n\t\t/* istanbul ignore else */ // Not testable in phantonJS\n\t\tif ('addEventListener' in window){\n\t\t\tel.addEventListener(evt,func, false);\n\t\t} else if ('attachEvent' in window){ //IE\n\t\t\tel.attachEvent('on'+evt,func);\n\t\t}\n\t}\n\n\tfunction removeEventListener(el,evt,func){\n\t\t/* istanbul ignore else */ // Not testable in phantonJS\n\t\tif ('removeEventListener' in window){\n\t\t\tel.removeEventListener(evt,func, false);\n\t\t} else if ('detachEvent' in window){ //IE\n\t\t\tel.detachEvent('on'+evt,func);\n\t\t}\n\t}\n\n\tfunction capitalizeFirstLetter(string) {\n\t\treturn string.charAt(0).toUpperCase() + string.slice(1);\n\t}\n\n\t//Based on underscore.js\n\tfunction throttle(func) {\n\t\tvar\n\t\t\tcontext, args, result,\n\t\t\ttimeout = null,\n\t\t\tprevious = 0,\n\t\t\tlater = function() {\n\t\t\t\tprevious = getNow();\n\t\t\t\ttimeout = null;\n\t\t\t\tresult = func.apply(context, args);\n\t\t\t\tif (!timeout) {\n\t\t\t\t\tcontext = args = null;\n\t\t\t\t}\n\t\t\t};\n\n\t\treturn function() {\n\t\t\tvar now = getNow();\n\n\t\t\tif (!previous) {\n\t\t\t\tprevious = now;\n\t\t\t}\n\n\t\t\tvar remaining = throttledTimer - (now - previous);\n\n\t\t\tcontext = this;\n\t\t\targs = arguments;\n\n\t\t\tif (remaining <= 0 || remaining > throttledTimer) {\n\t\t\t\tif (timeout) {\n\t\t\t\t\tclearTimeout(timeout);\n\t\t\t\t\ttimeout = null;\n\t\t\t\t}\n\n\t\t\t\tprevious = now;\n\t\t\t\tresult = func.apply(context, args);\n\n\t\t\t\tif (!timeout) {\n\t\t\t\t\tcontext = args = null;\n\t\t\t\t}\n\n\t\t\t} else if (!timeout) {\n\t\t\t\ttimeout = setTimeout(later, remaining);\n\t\t\t}\n\n\t\t\treturn result;\n\t\t};\n\t}\n\n\tvar getNow = Date.now || function() {\n\t\t/* istanbul ignore next */ // Not testable in PhantonJS\n\t\treturn new Date().getTime();\n\t};\n\n\tfunction formatLogMsg(msg){\n\t\treturn msgID + '[' + myID + ']' + ' ' + msg;\n\t}\n\n\tfunction log(msg){\n\t\tif (logging && ('object' === typeof window.console)){\n\t\t\tconsole.log(formatLogMsg(msg));\n\t\t}\n\t}\n\n\tfunction warn(msg){\n\t\tif ('object' === typeof window.console){\n\t\t\tconsole.warn(formatLogMsg(msg));\n\t\t}\n\t}\n\n\n\tfunction init(){\n\t\treadDataFromParent();\n\t\tlog('Initialising iFrame ('+location.href+')');\n\t\treadDataFromPage();\n\t\tsetMargin();\n\t\tsetBodyStyle('background',bodyBackground);\n\t\tsetBodyStyle('padding',bodyPadding);\n\t\tinjectClearFixIntoBodyElement();\n\t\tcheckHeightMode();\n\t\tcheckWidthMode();\n\t\tstopInfiniteResizingOfIFrame();\n\t\tsetupPublicMethods();\n\t\tstartEventListeners();\n\t\tinPageLinks = setupInPageLinks();\n\t\tsendSize('init','Init message from host page');\n\t\treadyCallback();\n\t}\n\n\tfunction readDataFromParent(){\n\n\t\tfunction strBool(str){\n\t\t\treturn 'true' === str ? true : false;\n\t\t}\n\n\t\tvar data = initMsg.substr(msgIdLen).split(':');\n\n\t\tmyID = data[0];\n\t\tbodyMargin = (undefined !== data[1]) ? Number(data[1]) : bodyMargin; //For V1 compatibility\n\t\tcalculateWidth = (undefined !== data[2]) ? strBool(data[2]) : calculateWidth;\n\t\tlogging = (undefined !== data[3]) ? strBool(data[3]) : logging;\n\t\tinterval = (undefined !== data[4]) ? Number(data[4]) : interval;\n\t\tautoResize = (undefined !== data[6]) ? strBool(data[6]) : autoResize;\n\t\tbodyMarginStr = data[7];\n\t\theightCalcMode = (undefined !== data[8]) ? data[8] : heightCalcMode;\n\t\tbodyBackground = data[9];\n\t\tbodyPadding = data[10];\n\t\ttolerance = (undefined !== data[11]) ? Number(data[11]) : tolerance;\n\t\tinPageLinks.enable = (undefined !== data[12]) ? strBool(data[12]): false;\n\t\tresizeFrom = (undefined !== data[13]) ? data[13] : resizeFrom;\n\t\twidthCalcMode = (undefined !== data[14]) ? data[14] : widthCalcMode;\n\t}\n\n\tfunction readDataFromPage(){\n\t\tfunction readData(){\n\t\t\tvar data = window.iFrameResizer;\n\n\t\t\tlog('Reading data from page: ' + JSON.stringify(data));\n\n\t\t\tmessageCallback = ('messageCallback' in data) ? data.messageCallback : messageCallback;\n\t\t\treadyCallback = ('readyCallback' in data) ? data.readyCallback : readyCallback;\n\t\t\ttargetOriginDefault = ('targetOrigin' in data) ? data.targetOrigin : targetOriginDefault;\n\t\t\theightCalcMode = ('heightCalculationMethod' in data) ? data.heightCalculationMethod : heightCalcMode;\n\t\t\twidthCalcMode = ('widthCalculationMethod' in data) ? data.widthCalculationMethod : widthCalcMode;\n\t\t}\n\n\t\tfunction setupCustomCalcMethods(calcMode, calcFunc){\n\t\t\tif ('function' === typeof calcMode) {\n\t\t\t\tlog('Setup custom ' + calcFunc + 'CalcMethod');\n\t\t\t\tcustomCalcMethods[calcFunc] = calcMode;\n\t\t\t\tcalcMode = 'custom';\n\t\t\t}\n\n\t\t\treturn calcMode;\n\t\t}\n\n\t\tif(('iFrameResizer' in window) && (Object === window.iFrameResizer.constructor)) {\n\t\t\treadData();\n\t\t\theightCalcMode = setupCustomCalcMethods(heightCalcMode, 'height');\n\t\t\twidthCalcMode = setupCustomCalcMethods(widthCalcMode, 'width');\n\t\t}\n\n\t\tlog('TargetOrigin for parent set to: ' + targetOriginDefault);\n\t}\n\n\n\tfunction chkCSS(attr,value){\n\t\tif (-1 !== value.indexOf('-')){\n\t\t\twarn('Negative CSS value ignored for '+attr);\n\t\t\tvalue='';\n\t\t}\n\t\treturn value;\n\t}\n\n\tfunction setBodyStyle(attr,value){\n\t\tif ((undefined !== value) && ('' !== value) && ('null' !== value)){\n\t\t\tdocument.body.style[attr] = value;\n\t\t\tlog('Body '+attr+' set to \"'+value+'\"');\n\t\t}\n\t}\n\n\tfunction setMargin(){\n\t\t//If called via V1 script, convert bodyMargin from int to str\n\t\tif (undefined === bodyMarginStr){\n\t\t\tbodyMarginStr = bodyMargin+'px';\n\t\t}\n\n\t\tsetBodyStyle('margin',chkCSS('margin',bodyMarginStr));\n\t}\n\n\tfunction stopInfiniteResizingOfIFrame(){\n\t\tdocument.documentElement.style.height = '';\n\t\tdocument.body.style.height = '';\n\t\tlog('HTML & body height set to \"auto\"');\n\t}\n\n\n\tfunction manageTriggerEvent(options){\n\n\t\tvar listener = {\n\t\t\tadd: function(eventName){\n\t\t\t\tfunction handleEvent(){\n\t\t\t\t\tsendSize(options.eventName,options.eventType);\n\t\t\t\t}\n\n\t\t\t\teventHandlersByName[eventName] = handleEvent;\n\n\t\t\t\taddEventListener(window,eventName,handleEvent);\n\t\t\t},\n\t\t\tremove: function(eventName){\n\t\t\t\tvar handleEvent = eventHandlersByName[eventName];\n\t\t\t\tdelete eventHandlersByName[eventName];\n\n\t\t\t\tremoveEventListener(window,eventName,handleEvent);\n\t\t\t}\n\t\t};\n\n\t\tif(options.eventNames && Array.prototype.map){\n\t\t\toptions.eventName = options.eventNames[0];\n\t\t\toptions.eventNames.map(listener[options.method]);\n\t\t} else {\n\t\t\tlistener[options.method](options.eventName);\n\t\t}\n\n\t\tlog(capitalizeFirstLetter(options.method) + ' event listener: ' + options.eventType);\n\t}\n\n\tfunction manageEventListeners(method){\n\t\tmanageTriggerEvent({method:method, eventType: 'Animation Start', eventNames: ['animationstart','webkitAnimationStart'] });\n\t\tmanageTriggerEvent({method:method, eventType: 'Animation Iteration', eventNames: ['animationiteration','webkitAnimationIteration'] });\n\t\tmanageTriggerEvent({method:method, eventType: 'Animation End', eventNames: ['animationend','webkitAnimationEnd'] });\n\t\tmanageTriggerEvent({method:method, eventType: 'Input', eventName: 'input' });\n\t\tmanageTriggerEvent({method:method, eventType: 'Mouse Up', eventName: 'mouseup' });\n\t\tmanageTriggerEvent({method:method, eventType: 'Mouse Down', eventName: 'mousedown' });\n\t\tmanageTriggerEvent({method:method, eventType: 'Orientation Change', eventName: 'orientationchange' });\n\t\tmanageTriggerEvent({method:method, eventType: 'Print', eventName: ['afterprint', 'beforeprint'] });\n\t\tmanageTriggerEvent({method:method, eventType: 'Ready State Change', eventName: 'readystatechange' });\n\t\tmanageTriggerEvent({method:method, eventType: 'Touch Start', eventName: 'touchstart' });\n\t\tmanageTriggerEvent({method:method, eventType: 'Touch End', eventName: 'touchend' });\n\t\tmanageTriggerEvent({method:method, eventType: 'Touch Cancel', eventName: 'touchcancel' });\n\t\tmanageTriggerEvent({method:method, eventType: 'Transition Start', eventNames: ['transitionstart','webkitTransitionStart','MSTransitionStart','oTransitionStart','otransitionstart'] });\n\t\tmanageTriggerEvent({method:method, eventType: 'Transition Iteration', eventNames: ['transitioniteration','webkitTransitionIteration','MSTransitionIteration','oTransitionIteration','otransitioniteration'] });\n\t\tmanageTriggerEvent({method:method, eventType: 'Transition End', eventNames: ['transitionend','webkitTransitionEnd','MSTransitionEnd','oTransitionEnd','otransitionend'] });\n\t\tif('child' === resizeFrom){\n\t\t\tmanageTriggerEvent({method:method, eventType: 'IFrame Resized', eventName: 'resize' });\n\t\t}\n\t}\n\n\tfunction checkCalcMode(calcMode,calcModeDefault,modes,type){\n\t\tif (calcModeDefault !== calcMode){\n\t\t\tif (!(calcMode in modes)){\n\t\t\t\twarn(calcMode + ' is not a valid option for '+type+'CalculationMethod.');\n\t\t\t\tcalcMode=calcModeDefault;\n\t\t\t}\n\t\t\tlog(type+' calculation method set to \"'+calcMode+'\"');\n\t\t}\n\n\t\treturn calcMode;\n\t}\n\n\tfunction checkHeightMode(){\n\t\theightCalcMode = checkCalcMode(heightCalcMode,heightCalcModeDefault,getHeight,'height');\n\t}\n\n\tfunction checkWidthMode(){\n\t\twidthCalcMode = checkCalcMode(widthCalcMode,widthCalcModeDefault,getWidth,'width');\n\t}\n\n\tfunction startEventListeners(){\n\t\tif ( true === autoResize ) {\n\t\t\tmanageEventListeners('add');\n\t\t\tsetupMutationObserver();\n\t\t}\n\t\telse {\n\t\t\tlog('Auto Resize disabled');\n\t\t}\n\t}\n\n\tfunction stopMsgsToParent(){\n\t\tlog('Disable outgoing messages');\n\t\tsendPermit = false;\n\t}\n\n\tfunction removeMsgListener(){\n\t\tlog('Remove event listener: Message');\n\t\tremoveEventListener(window, 'message', receiver);\n\t}\n\n\tfunction disconnectMutationObserver(){\n\t\tif (null !== bodyObserver){\n\t\t\t/* istanbul ignore next */ // Not testable in PhantonJS\n\t\t\tbodyObserver.disconnect();\n\t\t}\n\t}\n\n\tfunction stopEventListeners(){\n\t\tmanageEventListeners('remove');\n\t\tdisconnectMutationObserver();\n\t\tclearInterval(intervalTimer);\n\t}\n\n\tfunction teardown(){\n\t\tstopMsgsToParent();\n\t\tremoveMsgListener();\n\t\tif (true === autoResize) stopEventListeners();\n\t}\n\n\tfunction injectClearFixIntoBodyElement(){\n\t\tvar clearFix = document.createElement('div');\n\t\tclearFix.style.clear = 'both';\n\t\tclearFix.style.display = 'block'; //Guard against this having been globally redefined in CSS.\n\t\tdocument.body.appendChild(clearFix);\n\t}\n\n\tfunction setupInPageLinks(){\n\n\t\tfunction getPagePosition (){\n\t\t\treturn {\n\t\t\t\tx: (window.pageXOffset !== undefined) ? window.pageXOffset : document.documentElement.scrollLeft,\n\t\t\t\ty: (window.pageYOffset !== undefined) ? window.pageYOffset : document.documentElement.scrollTop\n\t\t\t};\n\t\t}\n\n\t\tfunction getElementPosition(el){\n\t\t\tvar\n\t\t\t\telPosition = el.getBoundingClientRect(),\n\t\t\t\tpagePosition = getPagePosition();\n\n\t\t\treturn {\n\t\t\t\tx: parseInt(elPosition.left,10) + parseInt(pagePosition.x,10),\n\t\t\t\ty: parseInt(elPosition.top,10) + parseInt(pagePosition.y,10)\n\t\t\t};\n\t\t}\n\n\t\tfunction findTarget(location){\n\t\t\tfunction jumpToTarget(target){\n\t\t\t\tvar jumpPosition = getElementPosition(target);\n\n\t\t\t\tlog('Moving to in page link (#'+hash+') at x: '+jumpPosition.x+' y: '+jumpPosition.y);\n\t\t\t\tsendMsg(jumpPosition.y, jumpPosition.x, 'scrollToOffset'); // X&Y reversed at sendMsg uses height/width\n\t\t\t}\n\n\t\t\tvar\n\t\t\t\thash = location.split('#')[1] || location, //Remove # if present\n\t\t\t\thashData = decodeURIComponent(hash),\n\t\t\t\ttarget = document.getElementById(hashData) || document.getElementsByName(hashData)[0];\n\n\t\t\tif (undefined !== target){\n\t\t\t\tjumpToTarget(target);\n\t\t\t} else {\n\t\t\t\tlog('In page link (#' + hash + ') not found in iFrame, so sending to parent');\n\t\t\t\tsendMsg(0,0,'inPageLink','#'+hash);\n\t\t\t}\n\t\t}\n\n\t\tfunction checkLocationHash(){\n\t\t\tif ('' !== location.hash && '#' !== location.hash){\n\t\t\t\tfindTarget(location.href);\n\t\t\t}\n\t\t}\n\n\t\tfunction bindAnchors(){\n\t\t\tfunction setupLink(el){\n\t\t\t\tfunction linkClicked(e){\n\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\t/*jshint validthis:true */\n\t\t\t\t\tfindTarget(this.getAttribute('href'));\n\t\t\t\t}\n\n\t\t\t\tif ('#' !== el.getAttribute('href')){\n\t\t\t\t\taddEventListener(el,'click',linkClicked);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tArray.prototype.forEach.call( document.querySelectorAll( 'a[href^=\"#\"]' ), setupLink );\n\t\t}\n\n\t\tfunction bindLocationHash(){\n\t\t\taddEventListener(window,'hashchange',checkLocationHash);\n\t\t}\n\n\t\tfunction initCheck(){ //check if page loaded with location hash after init resize\n\t\t\tsetTimeout(checkLocationHash,eventCancelTimer);\n\t\t}\n\n\t\tfunction enableInPageLinks(){\n\t\t\t/* istanbul ignore else */ // Not testable in phantonJS\n\t\t\tif(Array.prototype.forEach && document.querySelectorAll){\n\t\t\t\tlog('Setting up location.hash handlers');\n\t\t\t\tbindAnchors();\n\t\t\t\tbindLocationHash();\n\t\t\t\tinitCheck();\n\t\t\t} else {\n\t\t\t\twarn('In page linking not fully supported in this browser! (See README.md for IE8 workaround)');\n\t\t\t}\n\t\t}\n\n\t\tif(inPageLinks.enable){\n\t\t\tenableInPageLinks();\n\t\t} else {\n\t\t\tlog('In page linking not enabled');\n\t\t}\n\n\t\treturn {\n\t\t\tfindTarget:findTarget\n\t\t};\n\t}\n\n\tfunction setupPublicMethods(){\n\t\tlog('Enable public methods');\n\n\t\twin.parentIFrame = {\n\n\t\t\tautoResize: function autoResizeF(resize){\n\t\t\t\tif (true === resize && false === autoResize) {\n\t\t\t\t\tautoResize=true;\n\t\t\t\t\tstartEventListeners();\n\t\t\t\t\t//sendSize('autoResize','Auto Resize enabled');\n\t\t\t\t} else if (false === resize && true === autoResize) {\n\t\t\t\t\tautoResize=false;\n\t\t\t\t\tstopEventListeners();\n\t\t\t\t}\n\n\t\t\t\treturn autoResize;\n\t\t\t},\n\n\t\t\tclose: function closeF(){\n\t\t\t\tsendMsg(0,0,'close');\n\t\t\t\tteardown();\n\t\t\t},\n\n\t\t\tgetId: function getIdF(){\n\t\t\t\treturn myID;\n\t\t\t},\n\n\t\t\tgetPageInfo: function getPageInfoF(callback){\n\t\t\t\tif ('function' === typeof callback){\n\t\t\t\t\tpageInfoCallback = callback;\n\t\t\t\t\tsendMsg(0,0,'pageInfo');\n\t\t\t\t} else {\n\t\t\t\t\tpageInfoCallback = function(){};\n\t\t\t\t\tsendMsg(0,0,'pageInfoStop');\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tmoveToAnchor: function moveToAnchorF(hash){\n\t\t\t\tinPageLinks.findTarget(hash);\n\t\t\t},\n\n\t\t\treset: function resetF(){\n\t\t\t\tresetIFrame('parentIFrame.reset');\n\t\t\t},\n\n\t\t\tscrollTo: function scrollToF(x,y){\n\t\t\t\tsendMsg(y,x,'scrollTo'); // X&Y reversed at sendMsg uses height/width\n\t\t\t},\n\n\t\t\tscrollToOffset: function scrollToF(x,y){\n\t\t\t\tsendMsg(y,x,'scrollToOffset'); // X&Y reversed at sendMsg uses height/width\n\t\t\t},\n\n\t\t\tsendMessage: function sendMessageF(msg,targetOrigin){\n\t\t\t\tsendMsg(0,0,'message',JSON.stringify(msg),targetOrigin);\n\t\t\t},\n\n\t\t\tsetHeightCalculationMethod: function setHeightCalculationMethodF(heightCalculationMethod){\n\t\t\t\theightCalcMode = heightCalculationMethod;\n\t\t\t\tcheckHeightMode();\n\t\t\t},\n\n\t\t\tsetWidthCalculationMethod: function setWidthCalculationMethodF(widthCalculationMethod){\n\t\t\t\twidthCalcMode = widthCalculationMethod;\n\t\t\t\tcheckWidthMode();\n\t\t\t},\n\n\t\t\tsetTargetOrigin: function setTargetOriginF(targetOrigin){\n\t\t\t\tlog('Set targetOrigin: '+targetOrigin);\n\t\t\t\ttargetOriginDefault = targetOrigin;\n\t\t\t},\n\n\t\t\tsize: function sizeF(customHeight, customWidth){\n\t\t\t\tvar valString = ''+(customHeight?customHeight:'')+(customWidth?','+customWidth:'');\n\t\t\t\t//lockTrigger();\n\t\t\t\tsendSize('size','parentIFrame.size('+valString+')', customHeight, customWidth);\n\t\t\t}\n\t\t};\n\t}\n\n\tfunction initInterval(){\n\t\tif ( 0 !== interval ){\n\t\t\tlog('setInterval: '+interval+'ms');\n\t\t\tintervalTimer = setInterval(function(){\n\t\t\t\tsendSize('interval','setInterval: '+interval);\n\t\t\t},Math.abs(interval));\n\t\t}\n\t}\n\n\t/* istanbul ignore next */ //Not testable in PhantomJS\n\tfunction setupBodyMutationObserver(){\n\t\tfunction addImageLoadListners(mutation) {\n\t\t\tfunction addImageLoadListener(element){\n\t\t\t\tif (false === element.complete) {\n\t\t\t\t\tlog('Attach listeners to ' + element.src);\n\t\t\t\t\telement.addEventListener('load', imageLoaded, false);\n\t\t\t\t\telement.addEventListener('error', imageError, false);\n\t\t\t\t\telements.push(element);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (mutation.type === 'attributes' && mutation.attributeName === 'src'){\n\t\t\t\taddImageLoadListener(mutation.target);\n\t\t\t} else if (mutation.type === 'childList'){\n\t\t\t\tArray.prototype.forEach.call(\n\t\t\t\t\tmutation.target.querySelectorAll('img'),\n\t\t\t\t\taddImageLoadListener\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tfunction removeFromArray(element){\n\t\t\telements.splice(elements.indexOf(element),1);\n\t\t}\n\n\t\tfunction removeImageLoadListener(element){\n\t\t\tlog('Remove listeners from ' + element.src);\n\t\t\telement.removeEventListener('load', imageLoaded, false);\n\t\t\telement.removeEventListener('error', imageError, false);\n\t\t\tremoveFromArray(element);\n\t\t}\n\n\t\tfunction imageEventTriggered(event,type,typeDesc){\n\t\t\tremoveImageLoadListener(event.target);\n\t\t\tsendSize(type, typeDesc + ': ' + event.target.src, undefined, undefined);\n\t\t}\n\n\t\tfunction imageLoaded(event) {\n\t\t\timageEventTriggered(event,'imageLoad','Image loaded');\n\t\t}\n\n\t\tfunction imageError(event) {\n\t\t\timageEventTriggered(event,'imageLoadFailed','Image load failed');\n\t\t}\n\n\t\tfunction mutationObserved(mutations) {\n\t\t\tsendSize('mutationObserver','mutationObserver: ' + mutations[0].target + ' ' + mutations[0].type);\n\n\t\t\t//Deal with WebKit asyncing image loading when tags are injected into the page\n\t\t\tmutations.forEach(addImageLoadListners);\n\t\t}\n\n\t\tfunction createMutationObserver(){\n\t\t\tvar\n\t\t\t\ttarget = document.querySelector('body'),\n\n\t\t\t\tconfig = {\n\t\t\t\t\tattributes : true,\n\t\t\t\t\tattributeOldValue : false,\n\t\t\t\t\tcharacterData : true,\n\t\t\t\t\tcharacterDataOldValue : false,\n\t\t\t\t\tchildList : true,\n\t\t\t\t\tsubtree : true\n\t\t\t\t};\n\n\t\t\tobserver = new MutationObserver(mutationObserved);\n\n\t\t\tlog('Create body MutationObserver');\n\t\t\tobserver.observe(target, config);\n\n\t\t\treturn observer;\n\t\t}\n\n\t\tvar\n\t\t\telements = [],\n\t\t\tMutationObserver = window.MutationObserver || window.WebKitMutationObserver,\n\t\t\tobserver = createMutationObserver();\n\n\t\treturn {\n\t\t\tdisconnect: function (){\n\t\t\t\tif ('disconnect' in observer){\n\t\t\t\t\tlog('Disconnect body MutationObserver');\n\t\t\t\t\tobserver.disconnect();\n\t\t\t\t\telements.forEach(removeImageLoadListener);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\tfunction setupMutationObserver(){\n\t\tvar\tforceIntervalTimer = 0 > interval;\n\n\t\t/* istanbul ignore if */ // Not testable in PhantomJS\n\t\tif (window.MutationObserver || window.WebKitMutationObserver){\n\t\t\tif (forceIntervalTimer) {\n\t\t\t\tinitInterval();\n\t\t\t} else {\n\t\t\t\tbodyObserver = setupBodyMutationObserver();\n\t\t\t}\n\t\t} else {\n\t\t\tlog('MutationObserver not supported in this browser!');\n\t\t\tinitInterval();\n\t\t}\n\t}\n\n\n\t// document.documentElement.offsetHeight is not reliable, so\n\t// we have to jump through hoops to get a better value.\n\tfunction getComputedStyle(prop,el) {\n\t\t/* istanbul ignore next */ //Not testable in PhantomJS\n\t\tfunction convertUnitsToPxForIE8(value) {\n\t\t\tvar PIXEL = /^\\d+(px)?$/i;\n\n\t\t\tif (PIXEL.test(value)) {\n\t\t\t\treturn parseInt(value,base);\n\t\t\t}\n\n\t\t\tvar\n\t\t\t\tstyle = el.style.left,\n\t\t\t\truntimeStyle = el.runtimeStyle.left;\n\n\t\t\tel.runtimeStyle.left = el.currentStyle.left;\n\t\t\tel.style.left = value || 0;\n\t\t\tvalue = el.style.pixelLeft;\n\t\t\tel.style.left = style;\n\t\t\tel.runtimeStyle.left = runtimeStyle;\n\n\t\t\treturn value;\n\t\t}\n\n\t\tvar retVal = 0;\n\t\tel = el || document.body;\n\n\t\t/* istanbul ignore else */ // Not testable in phantonJS\n\t\tif (('defaultView' in document) && ('getComputedStyle' in document.defaultView)) {\n\t\t\tretVal = document.defaultView.getComputedStyle(el, null);\n\t\t\tretVal = (null !== retVal) ? retVal[prop] : 0;\n\t\t} else {//IE8\n\t\t\tretVal = convertUnitsToPxForIE8(el.currentStyle[prop]);\n\t\t}\n\n\t\treturn parseInt(retVal,base);\n\t}\n\n\tfunction chkEventThottle(timer){\n\t\tif(timer > throttledTimer/2){\n\t\t\tthrottledTimer = 2*timer;\n\t\t\tlog('Event throttle increased to ' + throttledTimer + 'ms');\n\t\t}\n\t}\n\n\t//Idea from https://github.com/guardian/iframe-messenger\n\tfunction getMaxElement(side,elements) {\n\t\tvar\n\t\t\telementsLength = elements.length,\n\t\t\telVal = 0,\n\t\t\tmaxVal = 0,\n\t\t\tSide = capitalizeFirstLetter(side),\n\t\t\ttimer = getNow();\n\n\t\tfor (var i = 0; i < elementsLength; i++) {\n\t\t\telVal = elements[i].getBoundingClientRect()[side] + getComputedStyle('margin'+Side,elements[i]);\n\t\t\tif (elVal > maxVal) {\n\t\t\t\tmaxVal = elVal;\n\t\t\t}\n\t\t}\n\n\t\ttimer = getNow() - timer;\n\n\t\tlog('Parsed '+elementsLength+' HTML elements');\n\t\tlog('Element position calculated in ' + timer + 'ms');\n\n\t\tchkEventThottle(timer);\n\n\t\treturn maxVal;\n\t}\n\n\tfunction getAllMeasurements(dimention){\n\t\treturn [\n\t\t\tdimention.bodyOffset(),\n\t\t\tdimention.bodyScroll(),\n\t\t\tdimention.documentElementOffset(),\n\t\t\tdimention.documentElementScroll()\n\t\t];\n\t}\n\n\tfunction getTaggedElements(side,tag){\n\t\tfunction noTaggedElementsFound(){\n\t\t\twarn('No tagged elements ('+tag+') found on page');\n\t\t\treturn document.querySelectorAll('body *');\n\t\t}\n\n\t\tvar elements = document.querySelectorAll('['+tag+']');\n\n\t\tif (0 === elements.length) noTaggedElementsFound();\n\n\t\treturn getMaxElement(side,elements);\n\t}\n\n\tfunction getAllElements(){\n\t\treturn document.querySelectorAll('body *');\n\t}\n\n\tvar\n\t\tgetHeight = {\n\t\t\tbodyOffset: function getBodyOffsetHeight(){\n\t\t\t\treturn document.body.offsetHeight + getComputedStyle('marginTop') + getComputedStyle('marginBottom');\n\t\t\t},\n\n\t\t\toffset: function(){\n\t\t\t\treturn getHeight.bodyOffset(); //Backwards compatability\n\t\t\t},\n\n\t\t\tbodyScroll: function getBodyScrollHeight(){\n\t\t\t\treturn document.body.scrollHeight;\n\t\t\t},\n\n\t\t\tcustom: function getCustomWidth(){\n\t\t\t\treturn customCalcMethods.height();\n\t\t\t},\n\n\t\t\tdocumentElementOffset: function getDEOffsetHeight(){\n\t\t\t\treturn document.documentElement.offsetHeight;\n\t\t\t},\n\n\t\t\tdocumentElementScroll: function getDEScrollHeight(){\n\t\t\t\treturn document.documentElement.scrollHeight;\n\t\t\t},\n\n\t\t\tmax: function getMaxHeight(){\n\t\t\t\treturn Math.max.apply(null,getAllMeasurements(getHeight));\n\t\t\t},\n\n\t\t\tmin: function getMinHeight(){\n\t\t\t\treturn Math.min.apply(null,getAllMeasurements(getHeight));\n\t\t\t},\n\n\t\t\tgrow: function growHeight(){\n\t\t\t\treturn getHeight.max(); //Run max without the forced downsizing\n\t\t\t},\n\n\t\t\tlowestElement: function getBestHeight(){\n\t\t\t\treturn Math.max(getHeight.bodyOffset(), getMaxElement('bottom',getAllElements()));\n\t\t\t},\n\n\t\t\ttaggedElement: function getTaggedElementsHeight(){\n\t\t\t\treturn getTaggedElements('bottom','data-iframe-height');\n\t\t\t}\n\t\t},\n\n\t\tgetWidth = {\n\t\t\tbodyScroll: function getBodyScrollWidth(){\n\t\t\t\treturn document.body.scrollWidth;\n\t\t\t},\n\n\t\t\tbodyOffset: function getBodyOffsetWidth(){\n\t\t\t\treturn document.body.offsetWidth;\n\t\t\t},\n\n\t\t\tcustom: function getCustomWidth(){\n\t\t\t\treturn customCalcMethods.width();\n\t\t\t},\n\n\t\t\tdocumentElementScroll: function getDEScrollWidth(){\n\t\t\t\treturn document.documentElement.scrollWidth;\n\t\t\t},\n\n\t\t\tdocumentElementOffset: function getDEOffsetWidth(){\n\t\t\t\treturn document.documentElement.offsetWidth;\n\t\t\t},\n\n\t\t\tscroll: function getMaxWidth(){\n\t\t\t\treturn Math.max(getWidth.bodyScroll(), getWidth.documentElementScroll());\n\t\t\t},\n\n\t\t\tmax: function getMaxWidth(){\n\t\t\t\treturn Math.max.apply(null,getAllMeasurements(getWidth));\n\t\t\t},\n\n\t\t\tmin: function getMinWidth(){\n\t\t\t\treturn Math.min.apply(null,getAllMeasurements(getWidth));\n\t\t\t},\n\n\t\t\trightMostElement: function rightMostElement(){\n\t\t\t\treturn getMaxElement('right', getAllElements());\n\t\t\t},\n\n\t\t\ttaggedElement: function getTaggedElementsWidth(){\n\t\t\t\treturn getTaggedElements('right', 'data-iframe-width');\n\t\t\t}\n\t\t};\n\n\n\tfunction sizeIFrame(triggerEvent, triggerEventDesc, customHeight, customWidth){\n\n\t\tfunction resizeIFrame(){\n\t\t\theight = currentHeight;\n\t\t\twidth = currentWidth;\n\n\t\t\tsendMsg(height,width,triggerEvent);\n\t\t}\n\n\t\tfunction isSizeChangeDetected(){\n\t\t\tfunction checkTolarance(a,b){\n\t\t\t\tvar retVal = Math.abs(a-b) <= tolerance;\n\t\t\t\treturn !retVal;\n\t\t\t}\n\n\t\t\tcurrentHeight = (undefined !== customHeight) ? customHeight : getHeight[heightCalcMode]();\n\t\t\tcurrentWidth = (undefined !== customWidth ) ? customWidth : getWidth[widthCalcMode]();\n\n\t\t\treturn\tcheckTolarance(height,currentHeight) || (calculateWidth && checkTolarance(width,currentWidth));\n\t\t}\n\n\t\tfunction isForceResizableEvent(){\n\t\t\treturn !(triggerEvent in {'init':1,'interval':1,'size':1});\n\t\t}\n\n\t\tfunction isForceResizableCalcMode(){\n\t\t\treturn (heightCalcMode in resetRequiredMethods) || (calculateWidth && widthCalcMode in resetRequiredMethods);\n\t\t}\n\n\t\tfunction logIgnored(){\n\t\t\tlog('No change in size detected');\n\t\t}\n\n\t\tfunction checkDownSizing(){\n\t\t\tif (isForceResizableEvent() && isForceResizableCalcMode()){\n\t\t\t\tresetIFrame(triggerEventDesc);\n\t\t\t} else if (!(triggerEvent in {'interval':1})){\n\t\t\t\tlogIgnored();\n\t\t\t}\n\t\t}\n\n\t\tvar\tcurrentHeight,currentWidth;\n\n\t\tif (isSizeChangeDetected() || 'init' === triggerEvent){\n\t\t\tlockTrigger();\n\t\t\tresizeIFrame();\n\t\t} else {\n\t\t\tcheckDownSizing();\n\t\t}\n\t}\n\n\tvar sizeIFrameThrottled = throttle(sizeIFrame);\n\n\tfunction sendSize(triggerEvent, triggerEventDesc, customHeight, customWidth){\n\t\tfunction recordTrigger(){\n\t\t\tif (!(triggerEvent in {'reset':1,'resetPage':1,'init':1})){\n\t\t\t\tlog( 'Trigger event: ' + triggerEventDesc );\n\t\t\t}\n\t\t}\n\n\t\tfunction isDoubleFiredEvent(){\n\t\t\treturn triggerLocked && (triggerEvent in doubleEventList);\n\t\t}\n\n\t\tif (!isDoubleFiredEvent()){\n\t\t\trecordTrigger();\n\t\t\tsizeIFrameThrottled(triggerEvent, triggerEventDesc, customHeight, customWidth);\n\t\t} else {\n\t\t\tlog('Trigger event cancelled: '+triggerEvent);\n\t\t}\n\t}\n\n\tfunction lockTrigger(){\n\t\tif (!triggerLocked){\n\t\t\ttriggerLocked = true;\n\t\t\tlog('Trigger event lock on');\n\t\t}\n\t\tclearTimeout(triggerLockedTimer);\n\t\ttriggerLockedTimer = setTimeout(function(){\n\t\t\ttriggerLocked = false;\n\t\t\tlog('Trigger event lock off');\n\t\t\tlog('--');\n\t\t},eventCancelTimer);\n\t}\n\n\tfunction triggerReset(triggerEvent){\n\t\theight = getHeight[heightCalcMode]();\n\t\twidth = getWidth[widthCalcMode]();\n\n\t\tsendMsg(height,width,triggerEvent);\n\t}\n\n\tfunction resetIFrame(triggerEventDesc){\n\t\tvar hcm = heightCalcMode;\n\t\theightCalcMode = heightCalcModeDefault;\n\n\t\tlog('Reset trigger event: ' + triggerEventDesc);\n\t\tlockTrigger();\n\t\ttriggerReset('reset');\n\n\t\theightCalcMode = hcm;\n\t}\n\n\tfunction sendMsg(height,width,triggerEvent,msg,targetOrigin){\n\t\tfunction setTargetOrigin(){\n\t\t\tif (undefined === targetOrigin){\n\t\t\t\ttargetOrigin = targetOriginDefault;\n\t\t\t} else {\n\t\t\t\tlog('Message targetOrigin: '+targetOrigin);\n\t\t\t}\n\t\t}\n\n\t\tfunction sendToParent(){\n\t\t\tvar\n\t\t\t\tsize = height + ':' + width,\n\t\t\t\tmessage = myID + ':' + size + ':' + triggerEvent + (undefined !== msg ? ':' + msg : '');\n\n\t\t\tlog('Sending message to host page (' + message + ')');\n\t\t\ttarget.postMessage( msgID + message, targetOrigin);\n\t\t}\n\n\t\tif(true === sendPermit){\n\t\t\tsetTargetOrigin();\n\t\t\tsendToParent();\n\t\t}\n\t}\n\n\tfunction receiver(event) {\n\t\tvar processRequestFromParent = {\n\t\t\tinit: function initFromParent(){\n\t\t\t\tfunction fireInit(){\n\t\t\t\t\tinitMsg = event.data;\n\t\t\t\t\ttarget = event.source;\n\n\t\t\t\t\tinit();\n\t\t\t\t\tfirstRun = false;\n\t\t\t\t\tsetTimeout(function(){ initLock = false;},eventCancelTimer);\n\t\t\t\t}\n\n\t\t\t\tif (document.body){\n\t\t\t\t\tfireInit();\n\t\t\t\t} else {\n\t\t\t\t\tlog('Waiting for page ready');\n\t\t\t\t\taddEventListener(window,'readystatechange',processRequestFromParent.initFromParent);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\treset: function resetFromParent(){\n\t\t\t\tif (!initLock){\n\t\t\t\t\tlog('Page size reset by host page');\n\t\t\t\t\ttriggerReset('resetPage');\n\t\t\t\t} else {\n\t\t\t\t\tlog('Page reset ignored by init');\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tresize: function resizeFromParent(){\n\t\t\t\tsendSize('resizeParent','Parent window requested size check');\n\t\t\t},\n\n\t\t\tmoveToAnchor: function moveToAnchorF(){\n\t\t\t\tinPageLinks.findTarget(getData());\n\t\t\t},\n\t\t\tinPageLink: function inPageLinkF() {this.moveToAnchor();}, //Backward compatability\n\n\t\t\tpageInfo: function pageInfoFromParent(){\n\t\t\t\tvar msgBody = getData();\n\t\t\t\tlog('PageInfoFromParent called from parent: ' + msgBody );\n\t\t\t\tpageInfoCallback(JSON.parse(msgBody));\n\t\t\t\tlog(' --');\n\t\t\t},\n\n\t\t\tmessage: function messageFromParent(){\n\t\t\t\tvar msgBody = getData();\n\n\t\t\t\tlog('MessageCallback called from parent: ' + msgBody );\n\t\t\t\tmessageCallback(JSON.parse(msgBody));\n\t\t\t\tlog(' --');\n\t\t\t}\n\t\t};\n\n\t\tfunction isMessageForUs(){\n\t\t\treturn msgID === (''+event.data).substr(0,msgIdLen); //''+ Protects against non-string messages\n\t\t}\n\n\t\tfunction getMessageType(){\n\t\t\treturn event.data.split(']')[1].split(':')[0];\n\t\t}\n\n\t\tfunction getData(){\n\t\t\treturn event.data.substr(event.data.indexOf(':')+1);\n\t\t}\n\n\t\tfunction isMiddleTier(){\n\t\t\treturn ('iFrameResize' in window);\n\t\t}\n\n\t\tfunction isInitMsg(){\n\t\t\t//Test if this message is from a child below us. This is an ugly test, however, updating\n\t\t\t//the message format would break backwards compatibity.\n\t\t\treturn event.data.split(':')[2] in {'true':1,'false':1};\n\t\t}\n\n\t\tfunction callFromParent(){\n\t\t\tvar messageType = getMessageType();\n\n\t\t\tif (messageType in processRequestFromParent){\n\t\t\t\tprocessRequestFromParent[messageType]();\n\t\t\t} else if (!isMiddleTier() && !isInitMsg()){\n\t\t\t\twarn('Unexpected message ('+event.data+')');\n\t\t\t}\n\t\t}\n\n\t\tfunction processMessage(){\n\t\t\tif (false === firstRun) {\n\t\t\t\tcallFromParent();\n\t\t\t} else if (isInitMsg()) {\n\t\t\t\tprocessRequestFromParent.init();\n\t\t\t} else {\n\t\t\t\tlog('Ignored message of type \"' + getMessageType() + '\". Received before initialization.');\n\t\t\t}\n\t\t}\n\n\t\tif (isMessageForUs()){\n\t\t\tprocessMessage();\n\t\t}\n\t}\n\n\t//Normally the parent kicks things off when it detects the iFrame has loaded.\n\t//If this script is async-loaded, then tell parent page to retry init.\n\tfunction chkLateLoaded(){\n\t\tif('loading' !== document.readyState){\n\t\t\twindow.parent.postMessage('[iFrameResizerChild]Ready','*');\n\t\t}\n\t}\n\n\taddEventListener(window, 'message', receiver);\n\tchkLateLoaded();\n\n\t\n\n})(window || {});\n"]}
@@ -0,0 +1,10 @@
1
+ /*! iFrame Resizer (iframeSizer.contentWindow.min.js) - v3.5.7 - 2016-12-16
2
+ * Desc: Include this file in any page being loaded into an iframe
3
+ * to force the iframe to resize to the content size.
4
+ * Requires: iframeResizer.min.js on host page.
5
+ * Copyright: (c) 2016 David J. Bradshaw - dave@bradshaw.net
6
+ * License: MIT
7
+ */
8
+
9
+ !function(a,b){"use strict";function c(b,c,d){"addEventListener"in a?b.addEventListener(c,d,!1):"attachEvent"in a&&b.attachEvent("on"+c,d)}function d(b,c,d){"removeEventListener"in a?b.removeEventListener(c,d,!1):"detachEvent"in a&&b.detachEvent("on"+c,d)}function e(a){return a.charAt(0).toUpperCase()+a.slice(1)}function f(a){var b,c,d,e=null,f=0,g=function(){f=Ia(),e=null,d=a.apply(b,c),e||(b=c=null)};return function(){var h=Ia();f||(f=h);var i=ya-(h-f);return b=this,c=arguments,0>=i||i>ya?(e&&(clearTimeout(e),e=null),f=h,d=a.apply(b,c),e||(b=c=null)):e||(e=setTimeout(g,i)),d}}function g(a){return na+"["+pa+"] "+a}function h(b){ma&&"object"==typeof a.console&&console.log(g(b))}function i(b){"object"==typeof a.console&&console.warn(g(b))}function j(){k(),h("Initialising iFrame ("+location.href+")"),l(),o(),n("background",X),n("padding",_),B(),t(),u(),p(),D(),v(),ja=C(),O("init","Init message from host page"),Ea()}function k(){function a(a){return"true"===a?!0:!1}var c=ia.substr(oa).split(":");pa=c[0],Y=b!==c[1]?Number(c[1]):Y,aa=b!==c[2]?a(c[2]):aa,ma=b!==c[3]?a(c[3]):ma,ka=b!==c[4]?Number(c[4]):ka,V=b!==c[6]?a(c[6]):V,Z=c[7],ga=b!==c[8]?c[8]:ga,X=c[9],_=c[10],va=b!==c[11]?Number(c[11]):va,ja.enable=b!==c[12]?a(c[12]):!1,ra=b!==c[13]?c[13]:ra,Ba=b!==c[14]?c[14]:Ba}function l(){function b(){var b=a.iFrameResizer;h("Reading data from page: "+JSON.stringify(b)),Da="messageCallback"in b?b.messageCallback:Da,Ea="readyCallback"in b?b.readyCallback:Ea,ua="targetOrigin"in b?b.targetOrigin:ua,ga="heightCalculationMethod"in b?b.heightCalculationMethod:ga,Ba="widthCalculationMethod"in b?b.widthCalculationMethod:Ba}function c(a,b){return"function"==typeof a&&(h("Setup custom "+b+"CalcMethod"),Ga[b]=a,a="custom"),a}"iFrameResizer"in a&&Object===a.iFrameResizer.constructor&&(b(),ga=c(ga,"height"),Ba=c(Ba,"width")),h("TargetOrigin for parent set to: "+ua)}function m(a,b){return-1!==b.indexOf("-")&&(i("Negative CSS value ignored for "+a),b=""),b}function n(a,c){b!==c&&""!==c&&"null"!==c&&(document.body.style[a]=c,h("Body "+a+' set to "'+c+'"'))}function o(){b===Z&&(Z=Y+"px"),n("margin",m("margin",Z))}function p(){document.documentElement.style.height="",document.body.style.height="",h('HTML & body height set to "auto"')}function q(b){var f={add:function(d){function e(){O(b.eventName,b.eventType)}Ha[d]=e,c(a,d,e)},remove:function(b){var c=Ha[b];delete Ha[b],d(a,b,c)}};b.eventNames&&Array.prototype.map?(b.eventName=b.eventNames[0],b.eventNames.map(f[b.method])):f[b.method](b.eventName),h(e(b.method)+" event listener: "+b.eventType)}function r(a){q({method:a,eventType:"Animation Start",eventNames:["animationstart","webkitAnimationStart"]}),q({method:a,eventType:"Animation Iteration",eventNames:["animationiteration","webkitAnimationIteration"]}),q({method:a,eventType:"Animation End",eventNames:["animationend","webkitAnimationEnd"]}),q({method:a,eventType:"Input",eventName:"input"}),q({method:a,eventType:"Mouse Up",eventName:"mouseup"}),q({method:a,eventType:"Mouse Down",eventName:"mousedown"}),q({method:a,eventType:"Orientation Change",eventName:"orientationchange"}),q({method:a,eventType:"Print",eventName:["afterprint","beforeprint"]}),q({method:a,eventType:"Ready State Change",eventName:"readystatechange"}),q({method:a,eventType:"Touch Start",eventName:"touchstart"}),q({method:a,eventType:"Touch End",eventName:"touchend"}),q({method:a,eventType:"Touch Cancel",eventName:"touchcancel"}),q({method:a,eventType:"Transition Start",eventNames:["transitionstart","webkitTransitionStart","MSTransitionStart","oTransitionStart","otransitionstart"]}),q({method:a,eventType:"Transition Iteration",eventNames:["transitioniteration","webkitTransitionIteration","MSTransitionIteration","oTransitionIteration","otransitioniteration"]}),q({method:a,eventType:"Transition End",eventNames:["transitionend","webkitTransitionEnd","MSTransitionEnd","oTransitionEnd","otransitionend"]}),"child"===ra&&q({method:a,eventType:"IFrame Resized",eventName:"resize"})}function s(a,b,c,d){return b!==a&&(a in c||(i(a+" is not a valid option for "+d+"CalculationMethod."),a=b),h(d+' calculation method set to "'+a+'"')),a}function t(){ga=s(ga,fa,Ja,"height")}function u(){Ba=s(Ba,Aa,Ka,"width")}function v(){!0===V?(r("add"),G()):h("Auto Resize disabled")}function w(){h("Disable outgoing messages"),sa=!1}function x(){h("Remove event listener: Message"),d(a,"message",T)}function y(){null!==$&&$.disconnect()}function z(){r("remove"),y(),clearInterval(la)}function A(){w(),x(),!0===V&&z()}function B(){var a=document.createElement("div");a.style.clear="both",a.style.display="block",document.body.appendChild(a)}function C(){function d(){return{x:a.pageXOffset!==b?a.pageXOffset:document.documentElement.scrollLeft,y:a.pageYOffset!==b?a.pageYOffset:document.documentElement.scrollTop}}function e(a){var b=a.getBoundingClientRect(),c=d();return{x:parseInt(b.left,10)+parseInt(c.x,10),y:parseInt(b.top,10)+parseInt(c.y,10)}}function f(a){function c(a){var b=e(a);h("Moving to in page link (#"+d+") at x: "+b.x+" y: "+b.y),S(b.y,b.x,"scrollToOffset")}var d=a.split("#")[1]||a,f=decodeURIComponent(d),g=document.getElementById(f)||document.getElementsByName(f)[0];b!==g?c(g):(h("In page link (#"+d+") not found in iFrame, so sending to parent"),S(0,0,"inPageLink","#"+d))}function g(){""!==location.hash&&"#"!==location.hash&&f(location.href)}function j(){function a(a){function b(a){a.preventDefault(),f(this.getAttribute("href"))}"#"!==a.getAttribute("href")&&c(a,"click",b)}Array.prototype.forEach.call(document.querySelectorAll('a[href^="#"]'),a)}function k(){c(a,"hashchange",g)}function l(){setTimeout(g,ca)}function m(){Array.prototype.forEach&&document.querySelectorAll?(h("Setting up location.hash handlers"),j(),k(),l()):i("In page linking not fully supported in this browser! (See README.md for IE8 workaround)")}return ja.enable?m():h("In page linking not enabled"),{findTarget:f}}function D(){h("Enable public methods"),Ca.parentIFrame={autoResize:function(a){return!0===a&&!1===V?(V=!0,v()):!1===a&&!0===V&&(V=!1,z()),V},close:function(){S(0,0,"close"),A()},getId:function(){return pa},getPageInfo:function(a){"function"==typeof a?(Fa=a,S(0,0,"pageInfo")):(Fa=function(){},S(0,0,"pageInfoStop"))},moveToAnchor:function(a){ja.findTarget(a)},reset:function(){R("parentIFrame.reset")},scrollTo:function(a,b){S(b,a,"scrollTo")},scrollToOffset:function(a,b){S(b,a,"scrollToOffset")},sendMessage:function(a,b){S(0,0,"message",JSON.stringify(a),b)},setHeightCalculationMethod:function(a){ga=a,t()},setWidthCalculationMethod:function(a){Ba=a,u()},setTargetOrigin:function(a){h("Set targetOrigin: "+a),ua=a},size:function(a,b){var c=""+(a?a:"")+(b?","+b:"");O("size","parentIFrame.size("+c+")",a,b)}}}function E(){0!==ka&&(h("setInterval: "+ka+"ms"),la=setInterval(function(){O("interval","setInterval: "+ka)},Math.abs(ka)))}function F(){function c(a){function b(a){!1===a.complete&&(h("Attach listeners to "+a.src),a.addEventListener("load",g,!1),a.addEventListener("error",i,!1),l.push(a))}"attributes"===a.type&&"src"===a.attributeName?b(a.target):"childList"===a.type&&Array.prototype.forEach.call(a.target.querySelectorAll("img"),b)}function d(a){l.splice(l.indexOf(a),1)}function e(a){h("Remove listeners from "+a.src),a.removeEventListener("load",g,!1),a.removeEventListener("error",i,!1),d(a)}function f(a,c,d){e(a.target),O(c,d+": "+a.target.src,b,b)}function g(a){f(a,"imageLoad","Image loaded")}function i(a){f(a,"imageLoadFailed","Image load failed")}function j(a){O("mutationObserver","mutationObserver: "+a[0].target+" "+a[0].type),a.forEach(c)}function k(){var a=document.querySelector("body"),b={attributes:!0,attributeOldValue:!1,characterData:!0,characterDataOldValue:!1,childList:!0,subtree:!0};return n=new m(j),h("Create body MutationObserver"),n.observe(a,b),n}var l=[],m=a.MutationObserver||a.WebKitMutationObserver,n=k();return{disconnect:function(){"disconnect"in n&&(h("Disconnect body MutationObserver"),n.disconnect(),l.forEach(e))}}}function G(){var b=0>ka;a.MutationObserver||a.WebKitMutationObserver?b?E():$=F():(h("MutationObserver not supported in this browser!"),E())}function H(a,b){function c(a){var c=/^\d+(px)?$/i;if(c.test(a))return parseInt(a,W);var d=b.style.left,e=b.runtimeStyle.left;return b.runtimeStyle.left=b.currentStyle.left,b.style.left=a||0,a=b.style.pixelLeft,b.style.left=d,b.runtimeStyle.left=e,a}var d=0;return b=b||document.body,"defaultView"in document&&"getComputedStyle"in document.defaultView?(d=document.defaultView.getComputedStyle(b,null),d=null!==d?d[a]:0):d=c(b.currentStyle[a]),parseInt(d,W)}function I(a){a>ya/2&&(ya=2*a,h("Event throttle increased to "+ya+"ms"))}function J(a,b){for(var c=b.length,d=0,f=0,g=e(a),i=Ia(),j=0;c>j;j++)d=b[j].getBoundingClientRect()[a]+H("margin"+g,b[j]),d>f&&(f=d);return i=Ia()-i,h("Parsed "+c+" HTML elements"),h("Element position calculated in "+i+"ms"),I(i),f}function K(a){return[a.bodyOffset(),a.bodyScroll(),a.documentElementOffset(),a.documentElementScroll()]}function L(a,b){function c(){return i("No tagged elements ("+b+") found on page"),document.querySelectorAll("body *")}var d=document.querySelectorAll("["+b+"]");return 0===d.length&&c(),J(a,d)}function M(){return document.querySelectorAll("body *")}function N(a,c,d,e){function f(){ea=m,za=n,S(ea,za,a)}function g(){function a(a,b){var c=Math.abs(a-b)<=va;return!c}return m=b!==d?d:Ja[ga](),n=b!==e?e:Ka[Ba](),a(ea,m)||aa&&a(za,n)}function i(){return!(a in{init:1,interval:1,size:1})}function j(){return ga in qa||aa&&Ba in qa}function k(){h("No change in size detected")}function l(){i()&&j()?R(c):a in{interval:1}||k()}var m,n;g()||"init"===a?(P(),f()):l()}function O(a,b,c,d){function e(){a in{reset:1,resetPage:1,init:1}||h("Trigger event: "+b)}function f(){return wa&&a in ba}f()?h("Trigger event cancelled: "+a):(e(),La(a,b,c,d))}function P(){wa||(wa=!0,h("Trigger event lock on")),clearTimeout(xa),xa=setTimeout(function(){wa=!1,h("Trigger event lock off"),h("--")},ca)}function Q(a){ea=Ja[ga](),za=Ka[Ba](),S(ea,za,a)}function R(a){var b=ga;ga=fa,h("Reset trigger event: "+a),P(),Q("reset"),ga=b}function S(a,c,d,e,f){function g(){b===f?f=ua:h("Message targetOrigin: "+f)}function i(){var g=a+":"+c,i=pa+":"+g+":"+d+(b!==e?":"+e:"");h("Sending message to host page ("+i+")"),ta.postMessage(na+i,f)}!0===sa&&(g(),i())}function T(b){function d(){return na===(""+b.data).substr(0,oa)}function e(){return b.data.split("]")[1].split(":")[0]}function f(){return b.data.substr(b.data.indexOf(":")+1)}function g(){return"iFrameResize"in a}function k(){return b.data.split(":")[2]in{"true":1,"false":1}}function l(){var a=e();a in n?n[a]():g()||k()||i("Unexpected message ("+b.data+")")}function m(){!1===da?l():k()?n.init():h('Ignored message of type "'+e()+'". Received before initialization.')}var n={init:function(){function d(){ia=b.data,ta=b.source,j(),da=!1,setTimeout(function(){ha=!1},ca)}document.body?d():(h("Waiting for page ready"),c(a,"readystatechange",n.initFromParent))},reset:function(){ha?h("Page reset ignored by init"):(h("Page size reset by host page"),Q("resetPage"))},resize:function(){O("resizeParent","Parent window requested size check")},moveToAnchor:function(){ja.findTarget(f())},inPageLink:function(){this.moveToAnchor()},pageInfo:function(){var a=f();h("PageInfoFromParent called from parent: "+a),Fa(JSON.parse(a)),h(" --")},message:function(){var a=f();h("MessageCallback called from parent: "+a),Da(JSON.parse(a)),h(" --")}};d()&&m()}function U(){"loading"!==document.readyState&&a.parent.postMessage("[iFrameResizerChild]Ready","*")}var V=!0,W=10,X="",Y=0,Z="",$=null,_="",aa=!1,ba={resize:1,click:1},ca=128,da=!0,ea=1,fa="bodyOffset",ga=fa,ha=!0,ia="",ja={},ka=32,la=null,ma=!1,na="[iFrameSizer]",oa=na.length,pa="",qa={max:1,min:1,bodyScroll:1,documentElementScroll:1},ra="child",sa=!0,ta=a.parent,ua="*",va=0,wa=!1,xa=null,ya=16,za=1,Aa="scroll",Ba=Aa,Ca=a,Da=function(){i("MessageCallback function not defined")},Ea=function(){},Fa=function(){},Ga={height:function(){return i("Custom height calculation function not defined"),document.documentElement.offsetHeight},width:function(){return i("Custom width calculation function not defined"),document.body.scrollWidth}},Ha={},Ia=Date.now||function(){return(new Date).getTime()},Ja={bodyOffset:function(){return document.body.offsetHeight+H("marginTop")+H("marginBottom")},offset:function(){return Ja.bodyOffset()},bodyScroll:function(){return document.body.scrollHeight},custom:function(){return Ga.height()},documentElementOffset:function(){return document.documentElement.offsetHeight},documentElementScroll:function(){return document.documentElement.scrollHeight},max:function(){return Math.max.apply(null,K(Ja))},min:function(){return Math.min.apply(null,K(Ja))},grow:function(){return Ja.max()},lowestElement:function(){return Math.max(Ja.bodyOffset(),J("bottom",M()))},taggedElement:function(){return L("bottom","data-iframe-height")}},Ka={bodyScroll:function(){return document.body.scrollWidth},bodyOffset:function(){return document.body.offsetWidth},custom:function(){return Ga.width()},documentElementScroll:function(){return document.documentElement.scrollWidth},documentElementOffset:function(){return document.documentElement.offsetWidth},scroll:function(){return Math.max(Ka.bodyScroll(),Ka.documentElementScroll())},max:function(){return Math.max.apply(null,K(Ka))},min:function(){return Math.min.apply(null,K(Ka))},rightMostElement:function(){return J("right",M())},taggedElement:function(){return L("right","data-iframe-width")}},La=f(N);c(a,"message",T),U()}(window||{});
10
+ //# sourceMappingURL=iframeResizer.contentWindow.map
@@ -0,0 +1,103 @@
1
+ /*
2
+ * Justified Gallery - v3.6.4
3
+ * http://miromannino.github.io/Justified-Gallery/
4
+ * Copyright (C) 2016 Miro Mannino
5
+ * Licensed under the MIT license.
6
+ */
7
+
8
+ .justified-gallery {
9
+ width: 100%;
10
+ position: relative;
11
+ overflow: hidden;
12
+ }
13
+ .justified-gallery > a,
14
+ .justified-gallery > div,
15
+ .justified-gallery > figure {
16
+ position: absolute;
17
+ display: inline-block;
18
+ overflow: hidden;
19
+ /* background: #888888; To have gray placeholders while the gallery is loading with waitThumbnailsLoad = false */
20
+ filter: "alpha(opacity=10)";
21
+ opacity: 0.1;
22
+ margin: 0;
23
+ padding: 0;
24
+ }
25
+ .justified-gallery > a > img,
26
+ .justified-gallery > div > img,
27
+ .justified-gallery > figure > img,
28
+ .justified-gallery > a > a > img,
29
+ .justified-gallery > div > a > img,
30
+ .justified-gallery > figure > a > img {
31
+ position: absolute;
32
+ top: 50%;
33
+ left: 50%;
34
+ margin: 0;
35
+ padding: 0;
36
+ border: none;
37
+ filter: "alpha(opacity=0)";
38
+ opacity: 0;
39
+ }
40
+ .justified-gallery > a > .caption,
41
+ .justified-gallery > div > .caption,
42
+ .justified-gallery > figure > .caption {
43
+ display: none;
44
+ position: absolute;
45
+ bottom: 0;
46
+ padding: 5px;
47
+ background-color: #000000;
48
+ left: 0;
49
+ right: 0;
50
+ margin: 0;
51
+ color: white;
52
+ font-size: 12px;
53
+ font-weight: 300;
54
+ font-family: sans-serif;
55
+ }
56
+ .justified-gallery > a > .caption.caption-visible,
57
+ .justified-gallery > div > .caption.caption-visible,
58
+ .justified-gallery > figure > .caption.caption-visible {
59
+ display: initial;
60
+ filter: "alpha(opacity=70)";
61
+ opacity: 0.7;
62
+ -webkit-transition: opacity 500ms ease-in;
63
+ -moz-transition: opacity 500ms ease-in;
64
+ -o-transition: opacity 500ms ease-in;
65
+ transition: opacity 500ms ease-in;
66
+ }
67
+ .justified-gallery > .entry-visible {
68
+ filter: "alpha(opacity=100)";
69
+ opacity: 1;
70
+ background: none;
71
+ }
72
+ .justified-gallery > .entry-visible > img,
73
+ .justified-gallery > .entry-visible > a > img {
74
+ filter: "alpha(opacity=100)";
75
+ opacity: 1;
76
+ -webkit-transition: opacity 500ms ease-in;
77
+ -moz-transition: opacity 500ms ease-in;
78
+ -o-transition: opacity 500ms ease-in;
79
+ transition: opacity 500ms ease-in;
80
+ }
81
+ .justified-gallery > .jg-filtered {
82
+ display: none;
83
+ }
84
+ .justified-gallery > .spinner {
85
+ position: absolute;
86
+ bottom: 0;
87
+ margin-left: -24px;
88
+ padding: 10px 0 10px 0;
89
+ left: 50%;
90
+ filter: "alpha(opacity=100)";
91
+ opacity: 1;
92
+ overflow: initial;
93
+ }
94
+ .justified-gallery > .spinner > span {
95
+ display: inline-block;
96
+ filter: "alpha(opacity=0)";
97
+ opacity: 0;
98
+ width: 8px;
99
+ height: 8px;
100
+ margin: 0 4px 0 4px;
101
+ background-color: #000;
102
+ border-radius: 6px;
103
+ }
@@ -0,0 +1,8 @@
1
+ /*
2
+ * Justified Gallery - v3.6.4
3
+ * http://miromannino.github.io/Justified-Gallery/
4
+ * Copyright (C) 2016 Miro Mannino
5
+ * Licensed under the MIT license.
6
+ */
7
+
8
+ .justified-gallery{width:100%;position:relative;overflow:hidden}.justified-gallery>a,.justified-gallery>div,.justified-gallery>figure{position:absolute;display:inline-block;overflow:hidden;filter:"alpha(opacity=10)";opacity:.1;margin:0;padding:0}.justified-gallery>a>img,.justified-gallery>div>img,.justified-gallery>figure>img,.justified-gallery>a>a>img,.justified-gallery>div>a>img,.justified-gallery>figure>a>img{position:absolute;top:50%;left:50%;margin:0;padding:0;border:0;filter:"alpha(opacity=0)";opacity:0}.justified-gallery>a>.caption,.justified-gallery>div>.caption,.justified-gallery>figure>.caption{display:none;position:absolute;bottom:0;padding:5px;background-color:#000;left:0;right:0;margin:0;color:#fff;font-size:12px;font-weight:300;font-family:sans-serif}.justified-gallery>a>.caption.caption-visible,.justified-gallery>div>.caption.caption-visible,.justified-gallery>figure>.caption.caption-visible{display:initial;filter:"alpha(opacity=70)";opacity:.7;-webkit-transition:opacity 500ms ease-in;-moz-transition:opacity 500ms ease-in;-o-transition:opacity 500ms ease-in;transition:opacity 500ms ease-in}.justified-gallery>.entry-visible{filter:"alpha(opacity=100)";opacity:1;background:0 0}.justified-gallery>.entry-visible>img,.justified-gallery>.entry-visible>a>img{filter:"alpha(opacity=100)";opacity:1;-webkit-transition:opacity 500ms ease-in;-moz-transition:opacity 500ms ease-in;-o-transition:opacity 500ms ease-in;transition:opacity 500ms ease-in}.justified-gallery>.jg-filtered{display:none}.justified-gallery>.spinner{position:absolute;bottom:0;margin-left:-24px;padding:10px 0;left:50%;filter:"alpha(opacity=100)";opacity:1;overflow:initial}.justified-gallery>.spinner>span{display:inline-block;filter:"alpha(opacity=0)";opacity:0;width:8px;height:8px;margin:0 4px;background-color:#000;border-radius:6px}
@@ -0,0 +1,23 @@
1
+ /*
2
+ # -----------------------------------------------------------------------------
3
+ # ~/assets/themes/j1/extensions/justified_gallery/css/theme/uno.css
4
+ # Provides J1 JustifiedGallery styles for J1 Theme Uno
5
+ #
6
+ # Product/Info:
7
+ # https://jekyll-one.com
8
+ #
9
+ # Copyright (C) 2019 Juergen Adams
10
+ #
11
+ # J1 Template is licensed under the MIT License.
12
+ # See: https://github.com/jekyll-one/j1_template_mde/blob/master/LICENSE
13
+ #
14
+ # -----------------------------------------------------------------------------
15
+ */
16
+
17
+ /* Gallery title */
18
+ .jg-gallery-title {
19
+ font-style: italic;
20
+ font-weight: 400;
21
+ color: rgba(0, 0, 0, 0.5);
22
+ overflow: hidden;
23
+ }
@@ -0,0 +1,262 @@
1
+ ---
2
+ regenerate: false
3
+ ---
4
+
5
+ {% capture cache %}
6
+
7
+ {% comment %}
8
+ # -----------------------------------------------------------------------------
9
+ # ~/assets/themes/j1/extentions/justified_gallery/js/j1_adapter_justified_gallery.js
10
+ # Liquid template to create the J1 Adapter for Justified Gallery
11
+ #
12
+ # Product/Info:
13
+ # https://jekyll-one.com
14
+ #
15
+ # Copyright (C) 2019 Juergen Adams
16
+ #
17
+ # J1 Template is licensed under the MIT License.
18
+ # See: https://github.com/jekyll-one/j1_template_mde/blob/master/LICENSE
19
+ #
20
+ # -----------------------------------------------------------------------------
21
+ {% endcomment %}
22
+
23
+ /*
24
+ # -----------------------------------------------------------------------------
25
+ # ~/assets/themes/j1/extentions/justified_gallery/js/j1_adapter_justified_gallery.js
26
+ # JS Adapter for JustifiedGallery
27
+ #
28
+ # Product/Info:
29
+ # https://jekyll-one.com
30
+ # https://github.com/miromannino/Justified-Gallery
31
+ #
32
+ # Copyright (C) 2019 Juergen Adams
33
+ # Copyright (C) 2016 Miro Mannino
34
+ #
35
+ # J1 Template is licensed under the MIT License.
36
+ # See: https://github.com/jekyll-one/j1_template_mde/blob/master/LICENSE
37
+ # Justified Gallery is licensed under the MIT license
38
+ # See: https://github.com/miromannino/Justified-Gallery
39
+ #
40
+ # -----------------------------------------------------------------------------
41
+ # Adapter generated: {{site.time}}
42
+ # -----------------------------------------------------------------------------
43
+ */
44
+ 'use strict';
45
+
46
+ {% comment %} Liquid procedures
47
+ --------------------------------------------------------------- {% endcomment %}
48
+
49
+ {% comment %} Variables
50
+ --------------------------------------------------------------- {% endcomment %}
51
+ {% assign environment = site.environment %}
52
+ {% assign config = site.data.apps.j1_justified_gallery %}
53
+
54
+ {% comment %} Main
55
+ --------------------------------------------------------------- {% endcomment %}
56
+ j1.JustifiedGallery = (function (j1, window) {
57
+ var environment = '{{environment}}'; // Set environment
58
+ var state = 'unknown';
59
+ var logger;
60
+ var logText;
61
+
62
+ return {
63
+ // J1 J1JustifiedGallery
64
+ init: function ( options ) {
65
+ // Setup logger
66
+ logger = log4javascript.getLogger("j1.JustifiedGallery.init");
67
+
68
+ if ( options != null ) {
69
+ var lb_settings = $.extend({}, options);
70
+ }
71
+
72
+ {% if environment == 'development' %}
73
+ logText = 'start gallery initialization';
74
+ logger.info(logText);
75
+ state = 'started';
76
+ logger.info('state: ' + state); // Set|Log status
77
+ {% endif %}
78
+
79
+ this.load( lb_settings );
80
+
81
+ },
82
+ // ---------------------------------------------------------------------
83
+ // Load AJAX data and initialize the jg gallery
84
+ // ---------------------------------------------------------------------
85
+ load: function ( options ) {
86
+ // Setup logger
87
+ logger = log4javascript.getLogger("j1.JustifiedGallery.load");
88
+
89
+ {% if environment == 'development' %}
90
+ state = 'running';
91
+ logger.info('state: ' + state); // Set|Log status
92
+ {% endif %}
93
+
94
+ {% for item in config.galleries %}
95
+ {% if item.gallery.enabled %}
96
+
97
+ {% assign lb_options = item.gallery.lightbox_options %}
98
+ {% assign jg_options = item.gallery.gallery_options %}
99
+ {% assign gallery_title = item.gallery.title %}
100
+ {% assign gallery_type = item.gallery.type %}
101
+ {% assign lightbox = item.gallery.lightbox_options.lightbox %}
102
+ {% assign css_classes = item.gallery.css_classes %}
103
+ {% assign show_delay = 250 %}
104
+
105
+ {% if lightbox == "lg" %}
106
+ {% assign lb_mode = "lg-fade" %}
107
+ {% assign lb_cssEasing = "cubic-bezier(0.25, 0, 0.25, 1)" %}
108
+ {% assign lb_thumbnails = true %}
109
+ {% assign lb_autoplay = false %}
110
+ {% assign lb_fullscreen = true %}
111
+ {% assign lb_pager = true %}
112
+ {% assign lb_zoomer = true %}
113
+ {% assign lb_hash = true %}
114
+ {% assign lb_video = false %}
115
+ {% assign lb_video_html5 = false %}
116
+ {% assign lb_video_online = false %}
117
+ {% assign lb_share = false %}
118
+ {% assign lb_share_facebook = false %}
119
+ {% assign lb_share_twitter = false %}
120
+ {% assign lb_share_googleplus = false %}
121
+ {% assign lb_share_pinterest = false %}
122
+ {% endif %}
123
+
124
+ {% assign container_id = item.gallery.id %}
125
+ {% capture gallery_id %}{{item.gallery.id}}_div{% endcapture %}
126
+
127
+ {% if item.gallery.show_delay %} {% assign show_delay = item.gallery.show_delay %} {% endif %}
128
+ {% if lb_options.mode %} {% assign lb_mode = lb_options.mode %} {% endif %}
129
+ {% if lb_options.cssEasing %} {% assign lb_cssEasing = lb_options.cssEasing %} {% endif %}
130
+ {% if lb_options.thumbnails %} {% assign lb_thumbnails = lb_options.thumbnails %} {% endif %}
131
+ {% if lb_options.autoplay %} {% assign lb_autoplay = lb_options.autoplay %} {% endif %}
132
+ {% if lb_options.fullscreen %} {% assign lb_fullscreen = lb_options.fullscreen %} {% endif %}
133
+ {% if lb_options.pager %} {% assign lb_pager = lb_options.pager %} {% endif %}
134
+ {% if lb_options.zoomer %} {% assign lb_zoomer = lb_options.zoomer %} {% endif %}
135
+ {% if lb_options.video.enabled %} {% assign lb_video = lb_options.video.enabled %} {% endif %}
136
+
137
+ {% if lb_options.video.enabled %}
138
+ logText = 'Video not supported';
139
+ logger.error(logText);
140
+ {% endif %}
141
+
142
+ // Create an gallery instance if id: {{ container_id }} exists
143
+ if ( $('#{{ container_id }}').length ) {
144
+
145
+ {% if environment == 'development' %}
146
+ logText = 'Gallery on ID #{{ container_id }} is being initialized';
147
+ logger.info(logText);
148
+ {% endif %}
149
+
150
+ // Place HTML markup for the title
151
+ {% if gallery_title %}
152
+ var gallery_title = '<div class="jg-gallery-title">{{ gallery_title }}</div>';
153
+ $('#{{ container_id }}').before( gallery_title );
154
+ {% endif %}
155
+
156
+ $('#{{ container_id }}').addClass("justifiedgallery ");
157
+
158
+ {% if gallery_type == "image" %}
159
+ // Collect image gallery data from data file (jsonPath)
160
+ $.getJSON( '{{config.jsonPath}}', function (data) {
161
+ var content = '';
162
+ var gallery_class = 'justified-gallery'
163
+ {% if lightbox == "lg" %}
164
+ gallery_class += ' light-gallery ';
165
+ {% endif %}
166
+ content += '<div id="{{ gallery_id }}" class="' +gallery_class+ '{{ css_classes }}">' + '\n';
167
+
168
+ for ( var i in data["{{item.gallery.id}}"] ) {
169
+ var img = data["{{item.gallery.id}}"][i].img;
170
+ var captions_gallery = data["{{item.gallery.id}}"][i].captions_gallery;
171
+ var captions_lightbox = data["{{item.gallery.id}}"][i].captions_lightbox;
172
+ var lightbox = "{{ lightbox }}";
173
+
174
+ if ( captions_lightbox != null && lightbox == 'lg' ) {
175
+ content += '<a data-sub-html="' +captions_lightbox+ '" ';
176
+ content += 'href="' +img+ '">' + '\n';
177
+ } else {
178
+ content += '<a href="' +img+ '">' + '\n';
179
+ }
180
+ content += ' <img src="' +img+ '" img alt="' +captions_gallery+ '">' + '\n';
181
+ //content += ' <img class="img-overlay" src="/assets/themes/j1/modules/lightboxes/light_gallery/img/icons/zoom.png">' + '\n';
182
+ content += '</a>' + '\n';
183
+
184
+ } // end for
185
+ content += '</div>';
186
+ {% endif %}
187
+ // Hide gallery container (until lightGallery is NOT initialized)
188
+ // and place HTML markup
189
+ $("#{{ container_id }}").hide().html(content);
190
+ // Initialize and run the gallery using individual gallery|lightbox options
191
+ {% if lightbox == "lg" %}
192
+ var gallery_selector = $("#{{ gallery_id }}");
193
+ if ( options !== undefined ) {
194
+ // lightbox initialized on COMPLETE event of justifiedGallery
195
+ gallery_selector.justifiedGallery().on('jg.complete', function () {
196
+ gallery_selector.lightGallery({
197
+ {% for option in item.gallery.lightbox_options %}
198
+ {{ option[0] | json }}: {{ option[1] | json }},
199
+ {% endfor %}
200
+ });
201
+ // Initialize instance variable of lightGallery (for later access)
202
+ j1["{{gallery_id}}"] = gallery_selector.data('lightGallery');
203
+ // Show gallery DIV element if jg has completed *and* the
204
+ // lightbox is initialized (delayed)
205
+ setTimeout(function() { $("#{{ container_id }}").show(); }, {{ show_delay }});
206
+
207
+ {% if environment == 'development' %}
208
+ logText = 'Gallery on ID #{{ container_id }} initializing completed';
209
+ logger.info(logText);
210
+ {% endif %}
211
+
212
+ });
213
+ } else {
214
+ gallery_selector.justifiedGallery({
215
+ {% for option in item.gallery.gallery_options %}
216
+ {{ option[0] | json }}: {{ option[1] | json }},
217
+ {% endfor %}
218
+ }).on('jg.complete', function () {
219
+ // lightbox initialized on COMPLETE event of justifiedGallery
220
+ gallery_selector.lightGallery({
221
+ {% for option in item.gallery.lightbox_options %}
222
+ {{ option[0] | json }}: {{ option[1] | json }},
223
+ {% endfor %}
224
+ });
225
+ // Initialize instance variable of lightGallery (for later access)
226
+ j1["{{gallery_id}}"] = gallery_selector.data('lightGallery');
227
+ // Show gallery DIV element if jg has completed *and* the
228
+ // lightbox is initialized (delayed)
229
+ setTimeout(function() { $("#{{ container_id }}").show(); }, {{ show_delay }});
230
+
231
+ {% if environment == 'development' %}
232
+ logText = 'Gallery on ID #{{ container_id }} initializing completed';
233
+ logger.info(logText);
234
+ {% endif %}
235
+
236
+ });
237
+ }
238
+ {% endif %} // endif lightbox "lg"
239
+
240
+ {% if lightbox == "cb" %}
241
+ // $(this).find('a').colorbox();
242
+ {% endif %} // endif lightbox "cb"
243
+
244
+ }); // end getJSON
245
+ } //end gallery
246
+ {% endif %} // endif gallery enabled
247
+ {% endfor %}
248
+ }, // end function load
249
+
250
+ // -------------------------------------------------------------------------
251
+ // returns the current (processing) state of the module
252
+ // -------------------------------------------------------------------------
253
+ state: function () {
254
+ return state;
255
+ }
256
+
257
+ }; // end return
258
+
259
+ })(j1, window);
260
+
261
+ {% endcapture %}
262
+ {{ cache | strip_empty_lines }}
@@ -0,0 +1,1145 @@
1
+ /*!
2
+ * Justified Gallery - v3.6.3
3
+ * http://miromannino.github.io/Justified-Gallery/
4
+ * Copyright (C) 2016 Miro Mannino
5
+ * Licensed under the MIT license.
6
+ */
7
+ (function($) {
8
+
9
+ function hasScrollBar() {
10
+ return $("body").height() > $(window).height();
11
+ }
12
+ /**
13
+ * Justified Gallery controller constructor
14
+ *
15
+ * @param $gallery the gallery to build
16
+ * @param settings the settings (the defaults are in $.fn.justifiedGallery.defaults)
17
+ * @constructor
18
+ */
19
+ var JustifiedGallery = function ($gallery, settings) {
20
+
21
+ this.settings = settings;
22
+ this.checkSettings();
23
+
24
+ this.imgAnalyzerTimeout = null;
25
+ this.entries = null;
26
+ this.buildingRow = {
27
+ entriesBuff : [],
28
+ width : 0,
29
+ height : 0,
30
+ aspectRatio : 0
31
+ };
32
+ this.lastFetchedEntry = null;
33
+ this.lastAnalyzedIndex = -1;
34
+ this.yield = {
35
+ every : 2, // do a flush every n flushes (must be greater than 1)
36
+ flushed : 0 // flushed rows without a yield
37
+ };
38
+ this.border = settings.border >= 0 ? settings.border : settings.margins;
39
+ this.maxRowHeight = this.retrieveMaxRowHeight();
40
+ this.suffixRanges = this.retrieveSuffixRanges();
41
+ this.offY = this.border;
42
+ this.rows = 0;
43
+ this.spinner = {
44
+ phase : 0,
45
+ timeSlot : 150,
46
+ $el : $('<div class="spinner"><span></span><span></span><span></span></div>'),
47
+ intervalId : null
48
+ };
49
+ this.checkWidthIntervalId = null;
50
+ this.galleryWidth = $gallery.width();
51
+ this.$gallery = $gallery;
52
+
53
+ };
54
+
55
+ /** @returns {String} the best suffix given the width and the height */
56
+ JustifiedGallery.prototype.getSuffix = function (width, height) {
57
+ var longestSide, i;
58
+ longestSide = (width > height) ? width : height;
59
+ for (i = 0; i < this.suffixRanges.length; i++) {
60
+ if (longestSide <= this.suffixRanges[i]) {
61
+ return this.settings.sizeRangeSuffixes[this.suffixRanges[i]];
62
+ }
63
+ }
64
+ return this.settings.sizeRangeSuffixes[this.suffixRanges[i - 1]];
65
+ };
66
+
67
+ /**
68
+ * Remove the suffix from the string
69
+ *
70
+ * @returns {string} a new string without the suffix
71
+ */
72
+ JustifiedGallery.prototype.removeSuffix = function (str, suffix) {
73
+ return str.substring(0, str.length - suffix.length);
74
+ };
75
+
76
+ /**
77
+ * @returns {boolean} a boolean to say if the suffix is contained in the str or not
78
+ */
79
+ JustifiedGallery.prototype.endsWith = function (str, suffix) {
80
+ return str.indexOf(suffix, str.length - suffix.length) !== -1;
81
+ };
82
+
83
+ /**
84
+ * Get the used suffix of a particular url
85
+ *
86
+ * @param str
87
+ * @returns {String} return the used suffix
88
+ */
89
+ JustifiedGallery.prototype.getUsedSuffix = function (str) {
90
+ for (var si in this.settings.sizeRangeSuffixes) {
91
+ if (this.settings.sizeRangeSuffixes.hasOwnProperty(si)) {
92
+ if (this.settings.sizeRangeSuffixes[si].length === 0) continue;
93
+ if (this.endsWith(str, this.settings.sizeRangeSuffixes[si])) return this.settings.sizeRangeSuffixes[si];
94
+ }
95
+ }
96
+ return '';
97
+ };
98
+
99
+ /**
100
+ * Given an image src, with the width and the height, returns the new image src with the
101
+ * best suffix to show the best quality thumbnail.
102
+ *
103
+ * @returns {String} the suffix to use
104
+ */
105
+ JustifiedGallery.prototype.newSrc = function (imageSrc, imgWidth, imgHeight, image) {
106
+ var newImageSrc;
107
+
108
+ if (this.settings.thumbnailPath) {
109
+ newImageSrc = this.settings.thumbnailPath(imageSrc, imgWidth, imgHeight, image);
110
+ } else {
111
+ var matchRes = imageSrc.match(this.settings.extension);
112
+ var ext = (matchRes !== null) ? matchRes[0] : '';
113
+ newImageSrc = imageSrc.replace(this.settings.extension, '');
114
+ newImageSrc = this.removeSuffix(newImageSrc, this.getUsedSuffix(newImageSrc));
115
+ newImageSrc += this.getSuffix(imgWidth, imgHeight) + ext;
116
+ }
117
+
118
+ return newImageSrc;
119
+ };
120
+
121
+ /**
122
+ * Shows the images that is in the given entry
123
+ *
124
+ * @param $entry the entry
125
+ * @param callback the callback that is called when the show animation is finished
126
+ */
127
+ JustifiedGallery.prototype.showImg = function ($entry, callback) {
128
+ if (this.settings.cssAnimation) {
129
+ $entry.addClass('entry-visible');
130
+ if (callback) callback();
131
+ } else {
132
+ $entry.stop().fadeTo(this.settings.imagesAnimationDuration, 1.0, callback);
133
+ $entry.find('> img, > a > img').stop().fadeTo(this.settings.imagesAnimationDuration, 1.0, callback);
134
+ }
135
+ };
136
+
137
+ /**
138
+ * Extract the image src form the image, looking from the 'safe-src', and if it can't be found, from the
139
+ * 'src' attribute. It saves in the image data the 'jg.originalSrc' field, with the extracted src.
140
+ *
141
+ * @param $image the image to analyze
142
+ * @returns {String} the extracted src
143
+ */
144
+ JustifiedGallery.prototype.extractImgSrcFromImage = function ($image) {
145
+ var imageSrc = (typeof $image.data('safe-src') !== 'undefined') ? $image.data('safe-src') : $image.attr('src');
146
+ $image.data('jg.originalSrc', imageSrc);
147
+ return imageSrc;
148
+ };
149
+
150
+ /** @returns {jQuery} the image in the given entry */
151
+ JustifiedGallery.prototype.imgFromEntry = function ($entry) {
152
+ var $img = $entry.find('> img');
153
+ if ($img.length === 0) $img = $entry.find('> a > img');
154
+ return $img.length === 0 ? null : $img;
155
+ };
156
+
157
+ /** @returns {jQuery} the caption in the given entry */
158
+ JustifiedGallery.prototype.captionFromEntry = function ($entry) {
159
+ var $caption = $entry.find('> .caption');
160
+ return $caption.length === 0 ? null : $caption;
161
+ };
162
+
163
+ /**
164
+ * Display the entry
165
+ *
166
+ * @param {jQuery} $entry the entry to display
167
+ * @param {int} x the x position where the entry must be positioned
168
+ * @param y the y position where the entry must be positioned
169
+ * @param imgWidth the image width
170
+ * @param imgHeight the image height
171
+ * @param rowHeight the row height of the row that owns the entry
172
+ */
173
+ JustifiedGallery.prototype.displayEntry = function ($entry, x, y, imgWidth, imgHeight, rowHeight) {
174
+ $entry.width(imgWidth);
175
+ $entry.height(rowHeight);
176
+ $entry.css('top', y);
177
+ $entry.css('left', x);
178
+
179
+ var $image = this.imgFromEntry($entry);
180
+ if ($image !== null) {
181
+ $image.css('width', imgWidth);
182
+ $image.css('height', imgHeight);
183
+ $image.css('margin-left', - imgWidth / 2);
184
+ $image.css('margin-top', - imgHeight / 2);
185
+
186
+ // Image reloading for an high quality of thumbnails
187
+ var imageSrc = $image.attr('src');
188
+ var newImageSrc = this.newSrc(imageSrc, imgWidth, imgHeight, $image[0]);
189
+
190
+ $image.one('error', function () {
191
+ $image.attr('src', $image.data('jg.originalSrc')); //revert to the original thumbnail, we got it.
192
+ });
193
+
194
+ var loadNewImage = function () {
195
+ if (imageSrc !== newImageSrc) { //load the new image after the fadeIn
196
+ $image.attr('src', newImageSrc);
197
+ }
198
+ };
199
+
200
+ if ($entry.data('jg.loaded') === 'skipped') {
201
+ this.onImageEvent(imageSrc, $.proxy(function() {
202
+ this.showImg($entry, loadNewImage);
203
+ $entry.data('jg.loaded', true);
204
+ }, this));
205
+ } else {
206
+ this.showImg($entry, loadNewImage);
207
+ }
208
+
209
+ } else {
210
+ this.showImg($entry);
211
+ }
212
+
213
+ this.displayEntryCaption($entry);
214
+ };
215
+
216
+ /**
217
+ * Display the entry caption. If the caption element doesn't exists, it creates the caption using the 'alt'
218
+ * or the 'title' attributes.
219
+ *
220
+ * @param {jQuery} $entry the entry to process
221
+ */
222
+ JustifiedGallery.prototype.displayEntryCaption = function ($entry) {
223
+ var $image = this.imgFromEntry($entry);
224
+ if ($image !== null && this.settings.captions) {
225
+ var $imgCaption = this.captionFromEntry($entry);
226
+
227
+ // Create it if it doesn't exists
228
+ if ($imgCaption === null) {
229
+ var caption = $image.attr('alt');
230
+ if (!this.isValidCaption(caption)) caption = $entry.attr('title');
231
+ if (this.isValidCaption(caption)) { // Create only we found something
232
+ $imgCaption = $('<div class="caption">' + caption + '</div>');
233
+ $entry.append($imgCaption);
234
+ $entry.data('jg.createdCaption', true);
235
+ }
236
+ }
237
+
238
+ // Create events (we check again the $imgCaption because it can be still inexistent)
239
+ if ($imgCaption !== null) {
240
+ if (!this.settings.cssAnimation) $imgCaption.stop().fadeTo(0, this.settings.captionSettings.nonVisibleOpacity);
241
+ this.addCaptionEventsHandlers($entry);
242
+ }
243
+ } else {
244
+ this.removeCaptionEventsHandlers($entry);
245
+ }
246
+ };
247
+
248
+ /**
249
+ * Validates the caption
250
+ *
251
+ * @param caption The caption that should be validated
252
+ * @return {boolean} Validation result
253
+ */
254
+ JustifiedGallery.prototype.isValidCaption = function (caption) {
255
+ return (typeof caption !== 'undefined' && caption.length > 0);
256
+ };
257
+
258
+ /**
259
+ * The callback for the event 'mouseenter'. It assumes that the event currentTarget is an entry.
260
+ * It shows the caption using jQuery (or using CSS if it is configured so)
261
+ *
262
+ * @param {Event} eventObject the event object
263
+ */
264
+ JustifiedGallery.prototype.onEntryMouseEnterForCaption = function (eventObject) {
265
+ var $caption = this.captionFromEntry($(eventObject.currentTarget));
266
+ if (this.settings.cssAnimation) {
267
+ $caption.addClass('caption-visible').removeClass('caption-hidden');
268
+ } else {
269
+ $caption.stop().fadeTo(this.settings.captionSettings.animationDuration,
270
+ this.settings.captionSettings.visibleOpacity);
271
+ }
272
+ };
273
+
274
+ /**
275
+ * The callback for the event 'mouseleave'. It assumes that the event currentTarget is an entry.
276
+ * It hides the caption using jQuery (or using CSS if it is configured so)
277
+ *
278
+ * @param {Event} eventObject the event object
279
+ */
280
+ JustifiedGallery.prototype.onEntryMouseLeaveForCaption = function (eventObject) {
281
+ var $caption = this.captionFromEntry($(eventObject.currentTarget));
282
+ if (this.settings.cssAnimation) {
283
+ $caption.removeClass('caption-visible').removeClass('caption-hidden');
284
+ } else {
285
+ $caption.stop().fadeTo(this.settings.captionSettings.animationDuration,
286
+ this.settings.captionSettings.nonVisibleOpacity);
287
+ }
288
+ };
289
+
290
+ /**
291
+ * Add the handlers of the entry for the caption
292
+ *
293
+ * @param $entry the entry to modify
294
+ */
295
+ JustifiedGallery.prototype.addCaptionEventsHandlers = function ($entry) {
296
+ var captionMouseEvents = $entry.data('jg.captionMouseEvents');
297
+ if (typeof captionMouseEvents === 'undefined') {
298
+ captionMouseEvents = {
299
+ mouseenter: $.proxy(this.onEntryMouseEnterForCaption, this),
300
+ mouseleave: $.proxy(this.onEntryMouseLeaveForCaption, this)
301
+ };
302
+ $entry.on('mouseenter', undefined, undefined, captionMouseEvents.mouseenter);
303
+ $entry.on('mouseleave', undefined, undefined, captionMouseEvents.mouseleave);
304
+ $entry.data('jg.captionMouseEvents', captionMouseEvents);
305
+ }
306
+ };
307
+
308
+ /**
309
+ * Remove the handlers of the entry for the caption
310
+ *
311
+ * @param $entry the entry to modify
312
+ */
313
+ JustifiedGallery.prototype.removeCaptionEventsHandlers = function ($entry) {
314
+ var captionMouseEvents = $entry.data('jg.captionMouseEvents');
315
+ if (typeof captionMouseEvents !== 'undefined') {
316
+ $entry.off('mouseenter', undefined, captionMouseEvents.mouseenter);
317
+ $entry.off('mouseleave', undefined, captionMouseEvents.mouseleave);
318
+ $entry.removeData('jg.captionMouseEvents');
319
+ }
320
+ };
321
+
322
+ /**
323
+ * Justify the building row, preparing it to
324
+ *
325
+ * @param isLastRow
326
+ * @returns a boolean to know if the row has been justified or not
327
+ */
328
+ JustifiedGallery.prototype.prepareBuildingRow = function (isLastRow) {
329
+ var i, $entry, imgAspectRatio, newImgW, newImgH, justify = true;
330
+ var minHeight = 0;
331
+ var availableWidth = this.galleryWidth - 2 * this.border - (
332
+ (this.buildingRow.entriesBuff.length - 1) * this.settings.margins);
333
+ var rowHeight = availableWidth / this.buildingRow.aspectRatio;
334
+ var defaultRowHeight = this.settings.rowHeight;
335
+ var justifiable = this.buildingRow.width / availableWidth > this.settings.justifyThreshold;
336
+
337
+ //Skip the last row if we can't justify it and the lastRow == 'hide'
338
+ if (isLastRow && this.settings.lastRow === 'hide' && !justifiable) {
339
+ for (i = 0; i < this.buildingRow.entriesBuff.length; i++) {
340
+ $entry = this.buildingRow.entriesBuff[i];
341
+ if (this.settings.cssAnimation)
342
+ $entry.removeClass('entry-visible');
343
+ else {
344
+ $entry.stop().fadeTo(0, 0.1);
345
+ $entry.find('> img, > a > img').fadeTo(0, 0);
346
+ }
347
+ }
348
+ return -1;
349
+ }
350
+
351
+ // With lastRow = nojustify, justify if is justificable (the images will not become too big)
352
+ if (isLastRow && !justifiable && this.settings.lastRow !== 'justify' && this.settings.lastRow !== 'hide') {
353
+ justify = false;
354
+
355
+ if (this.rows > 0) {
356
+ defaultRowHeight = (this.offY - this.border - this.settings.margins * this.rows) / this.rows;
357
+ justify = defaultRowHeight * this.buildingRow.aspectRatio / availableWidth > this.settings.justifyThreshold;
358
+ }
359
+ }
360
+
361
+ for (i = 0; i < this.buildingRow.entriesBuff.length; i++) {
362
+ $entry = this.buildingRow.entriesBuff[i];
363
+ imgAspectRatio = $entry.data('jg.width') / $entry.data('jg.height');
364
+
365
+ if (justify) {
366
+ newImgW = (i === this.buildingRow.entriesBuff.length - 1) ? availableWidth : rowHeight * imgAspectRatio;
367
+ newImgH = rowHeight;
368
+ } else {
369
+ newImgW = defaultRowHeight * imgAspectRatio;
370
+ newImgH = defaultRowHeight;
371
+ }
372
+
373
+ availableWidth -= Math.round(newImgW);
374
+ $entry.data('jg.jwidth', Math.round(newImgW));
375
+ $entry.data('jg.jheight', Math.ceil(newImgH));
376
+ if (i === 0 || minHeight > newImgH) minHeight = newImgH;
377
+ }
378
+
379
+ this.buildingRow.height = minHeight;
380
+ return justify;
381
+ };
382
+
383
+ /**
384
+ * Clear the building row data to be used for a new row
385
+ */
386
+ JustifiedGallery.prototype.clearBuildingRow = function () {
387
+ this.buildingRow.entriesBuff = [];
388
+ this.buildingRow.aspectRatio = 0;
389
+ this.buildingRow.width = 0;
390
+ };
391
+
392
+ /**
393
+ * Flush a row: justify it, modify the gallery height accordingly to the row height
394
+ *
395
+ * @param isLastRow
396
+ */
397
+ JustifiedGallery.prototype.flushRow = function (isLastRow) {
398
+ var settings = this.settings;
399
+ var $entry, buildingRowRes, offX = this.border, i;
400
+
401
+ buildingRowRes = this.prepareBuildingRow(isLastRow);
402
+ if (isLastRow && settings.lastRow === 'hide' && buildingRowRes === -1) {
403
+ this.clearBuildingRow();
404
+ return;
405
+ }
406
+
407
+ if (this.maxRowHeight) {
408
+ if (this.maxRowHeight.isPercentage && this.maxRowHeight.value * settings.rowHeight < this.buildingRow.height) {
409
+ this.buildingRow.height = this.maxRowHeight.value * settings.rowHeight;
410
+ } else if (this.maxRowHeight.value >= settings.rowHeight && this.maxRowHeight.value < this.buildingRow.height) {
411
+ this.buildingRow.height = this.maxRowHeight.value;
412
+ }
413
+ }
414
+
415
+ //Align last (unjustified) row
416
+ if (settings.lastRow === 'center' || settings.lastRow === 'right') {
417
+ var availableWidth = this.galleryWidth - 2 * this.border - (this.buildingRow.entriesBuff.length - 1) * settings.margins;
418
+
419
+ for (i = 0; i < this.buildingRow.entriesBuff.length; i++) {
420
+ $entry = this.buildingRow.entriesBuff[i];
421
+ availableWidth -= $entry.data('jg.jwidth');
422
+ }
423
+
424
+ if (settings.lastRow === 'center')
425
+ offX += availableWidth / 2;
426
+ else if (settings.lastRow === 'right')
427
+ offX += availableWidth;
428
+ }
429
+
430
+ for (i = 0; i < this.buildingRow.entriesBuff.length; i++) {
431
+ $entry = this.buildingRow.entriesBuff[i];
432
+ this.displayEntry($entry, offX, this.offY, $entry.data('jg.jwidth'), $entry.data('jg.jheight'), this.buildingRow.height);
433
+ offX += $entry.data('jg.jwidth') + settings.margins;
434
+ }
435
+
436
+ //Gallery Height
437
+ this.galleryHeightToSet = this.offY + this.buildingRow.height + this.border;
438
+ this.$gallery.height(this.galleryHeightToSet + this.getSpinnerHeight());
439
+
440
+ if (!isLastRow || (this.buildingRow.height <= settings.rowHeight && buildingRowRes)) {
441
+ //Ready for a new row
442
+ this.offY += this.buildingRow.height + settings.margins;
443
+ this.rows += 1;
444
+ this.clearBuildingRow();
445
+ this.$gallery.trigger('jg.rowflush');
446
+ }
447
+ };
448
+
449
+ /**
450
+ * Checks the width of the gallery container, to know if a new justification is needed
451
+ */
452
+ var scrollBarOn = false;
453
+ JustifiedGallery.prototype.checkWidth = function () {
454
+ this.checkWidthIntervalId = setInterval($.proxy(function () {
455
+ var galleryWidth = parseFloat(this.$gallery.width());
456
+ if (hasScrollBar() === scrollBarOn) {
457
+ if (Math.abs(galleryWidth - this.galleryWidth) > this.settings.refreshSensitivity) {
458
+ this.galleryWidth = galleryWidth;
459
+ this.rewind();
460
+
461
+ // Restart to analyze
462
+ this.startImgAnalyzer(true);
463
+ }
464
+ } else {
465
+ scrollBarOn = hasScrollBar();
466
+ this.galleryWidth = galleryWidth;
467
+ }
468
+ }, this), this.settings.refreshTime);
469
+ };
470
+
471
+ /**
472
+ * @returns {boolean} a boolean saying if the spinner is active or not
473
+ */
474
+ JustifiedGallery.prototype.isSpinnerActive = function () {
475
+ return this.spinner.intervalId !== null;
476
+ };
477
+
478
+ /**
479
+ * @returns {int} the spinner height
480
+ */
481
+ JustifiedGallery.prototype.getSpinnerHeight = function () {
482
+ return this.spinner.$el.innerHeight();
483
+ };
484
+
485
+ /**
486
+ * Stops the spinner animation and modify the gallery height to exclude the spinner
487
+ */
488
+ JustifiedGallery.prototype.stopLoadingSpinnerAnimation = function () {
489
+ clearInterval(this.spinner.intervalId);
490
+ this.spinner.intervalId = null;
491
+ this.$gallery.height(this.$gallery.height() - this.getSpinnerHeight());
492
+ this.spinner.$el.detach();
493
+ };
494
+
495
+ /**
496
+ * Starts the spinner animation
497
+ */
498
+ JustifiedGallery.prototype.startLoadingSpinnerAnimation = function () {
499
+ var spinnerContext = this.spinner;
500
+ var $spinnerPoints = spinnerContext.$el.find('span');
501
+ clearInterval(spinnerContext.intervalId);
502
+ this.$gallery.append(spinnerContext.$el);
503
+ this.$gallery.height(this.offY + this.buildingRow.height + this.getSpinnerHeight());
504
+ spinnerContext.intervalId = setInterval(function () {
505
+ if (spinnerContext.phase < $spinnerPoints.length) {
506
+ $spinnerPoints.eq(spinnerContext.phase).fadeTo(spinnerContext.timeSlot, 1);
507
+ } else {
508
+ $spinnerPoints.eq(spinnerContext.phase - $spinnerPoints.length).fadeTo(spinnerContext.timeSlot, 0);
509
+ }
510
+ spinnerContext.phase = (spinnerContext.phase + 1) % ($spinnerPoints.length * 2);
511
+ }, spinnerContext.timeSlot);
512
+ };
513
+
514
+ /**
515
+ * Rewind the image analysis to start from the first entry.
516
+ */
517
+ JustifiedGallery.prototype.rewind = function () {
518
+ this.lastFetchedEntry = null;
519
+ this.lastAnalyzedIndex = -1;
520
+ this.offY = this.border;
521
+ this.rows = 0;
522
+ this.clearBuildingRow();
523
+ };
524
+
525
+ /**
526
+ * Update the entries searching it from the justified gallery HTML element
527
+ *
528
+ * @param norewind if norewind only the new entries will be changed (i.e. randomized, sorted or filtered)
529
+ * @returns {boolean} true if some entries has been founded
530
+ */
531
+ JustifiedGallery.prototype.updateEntries = function (norewind) {
532
+ var newEntries;
533
+
534
+ if (norewind && this.lastFetchedEntry != null) {
535
+ newEntries = $(this.lastFetchedEntry).nextAll(this.settings.selector).toArray();
536
+ } else {
537
+ this.entries = [];
538
+ newEntries = this.$gallery.children(this.settings.selector).toArray();
539
+ }
540
+
541
+ if (newEntries.length > 0) {
542
+
543
+ // Sort or randomize
544
+ if ($.isFunction(this.settings.sort)) {
545
+ newEntries = this.sortArray(newEntries);
546
+ } else if (this.settings.randomize) {
547
+ newEntries = this.shuffleArray(newEntries);
548
+ }
549
+ this.lastFetchedEntry = newEntries[newEntries.length - 1];
550
+
551
+ // Filter
552
+ if (this.settings.filter) {
553
+ newEntries = this.filterArray(newEntries);
554
+ } else {
555
+ this.resetFilters(newEntries);
556
+ }
557
+
558
+ }
559
+
560
+ this.entries = this.entries.concat(newEntries);
561
+ return true;
562
+ };
563
+
564
+ /**
565
+ * Apply the entries order to the DOM, iterating the entries and appending the images
566
+ *
567
+ * @param entries the entries that has been modified and that must be re-ordered in the DOM
568
+ */
569
+ JustifiedGallery.prototype.insertToGallery = function (entries) {
570
+ var that = this;
571
+ $.each(entries, function () {
572
+ $(this).appendTo(that.$gallery);
573
+ });
574
+ };
575
+
576
+ /**
577
+ * Shuffle the array using the Fisher-Yates shuffle algorithm
578
+ *
579
+ * @param a the array to shuffle
580
+ * @return the shuffled array
581
+ */
582
+ JustifiedGallery.prototype.shuffleArray = function (a) {
583
+ var i, j, temp;
584
+ for (i = a.length - 1; i > 0; i--) {
585
+ j = Math.floor(Math.random() * (i + 1));
586
+ temp = a[i];
587
+ a[i] = a[j];
588
+ a[j] = temp;
589
+ }
590
+ this.insertToGallery(a);
591
+ return a;
592
+ };
593
+
594
+ /**
595
+ * Sort the array using settings.comparator as comparator
596
+ *
597
+ * @param a the array to sort (it is sorted)
598
+ * @return the sorted array
599
+ */
600
+ JustifiedGallery.prototype.sortArray = function (a) {
601
+ a.sort(this.settings.sort);
602
+ this.insertToGallery(a);
603
+ return a;
604
+ };
605
+
606
+ /**
607
+ * Reset the filters removing the 'jg-filtered' class from all the entries
608
+ *
609
+ * @param a the array to reset
610
+ */
611
+ JustifiedGallery.prototype.resetFilters = function (a) {
612
+ for (var i = 0; i < a.length; i++) $(a[i]).removeClass('jg-filtered');
613
+ };
614
+
615
+ /**
616
+ * Filter the entries considering theirs classes (if a string has been passed) or using a function for filtering.
617
+ *
618
+ * @param a the array to filter
619
+ * @return the filtered array
620
+ */
621
+ JustifiedGallery.prototype.filterArray = function (a) {
622
+ var settings = this.settings;
623
+ if ($.type(settings.filter) === 'string') {
624
+ // Filter only keeping the entries passed in the string
625
+ return a.filter(function (el) {
626
+ var $el = $(el);
627
+ if ($el.is(settings.filter)) {
628
+ $el.removeClass('jg-filtered');
629
+ return true;
630
+ } else {
631
+ $el.addClass('jg-filtered').removeClass('jg-visible');
632
+ return false;
633
+ }
634
+ });
635
+ } else if ($.isFunction(settings.filter)) {
636
+ // Filter using the passed function
637
+ var filteredArr = a.filter(settings.filter);
638
+ for (var i = 0; i < a.length; i++) {
639
+ if (filteredArr.indexOf(a[i]) == -1) {
640
+ $(a[i]).addClass('jg-filtered').removeClass('jg-visible');
641
+ } else {
642
+ $(a[i]).removeClass('jg-filtered');
643
+ }
644
+ }
645
+ return filteredArr;
646
+ }
647
+ };
648
+
649
+ /**
650
+ * Destroy the Justified Gallery instance.
651
+ *
652
+ * It clears all the css properties added in the style attributes. We doesn't backup the original
653
+ * values for those css attributes, because it costs (performance) and because in general one
654
+ * shouldn't use the style attribute for an uniform set of images (where we suppose the use of
655
+ * classes). Creating a backup is also difficult because JG could be called multiple times and
656
+ * with different style attributes.
657
+ */
658
+ JustifiedGallery.prototype.destroy = function () {
659
+ clearInterval(this.checkWidthIntervalId);
660
+
661
+ $.each(this.entries, $.proxy(function(_, entry) {
662
+ var $entry = $(entry);
663
+
664
+ // Reset entry style
665
+ $entry.css('width', '');
666
+ $entry.css('height', '');
667
+ $entry.css('top', '');
668
+ $entry.css('left', '');
669
+ $entry.data('jg.loaded', undefined);
670
+ $entry.removeClass('jg-entry');
671
+
672
+ // Reset image style
673
+ var $img = this.imgFromEntry($entry);
674
+ $img.css('width', '');
675
+ $img.css('height', '');
676
+ $img.css('margin-left', '');
677
+ $img.css('margin-top', '');
678
+ $img.attr('src', $img.data('jg.originalSrc'));
679
+ $img.data('jg.originalSrc', undefined);
680
+
681
+ // Remove caption
682
+ this.removeCaptionEventsHandlers($entry);
683
+ var $caption = this.captionFromEntry($entry);
684
+ if ($entry.data('jg.createdCaption')) {
685
+ // remove also the caption element (if created by jg)
686
+ $entry.data('jg.createdCaption', undefined);
687
+ if ($caption !== null) $caption.remove();
688
+ } else {
689
+ if ($caption !== null) $caption.fadeTo(0, 1);
690
+ }
691
+
692
+ }, this));
693
+
694
+ this.$gallery.css('height', '');
695
+ this.$gallery.removeClass('justified-gallery');
696
+ this.$gallery.data('jg.controller', undefined);
697
+ };
698
+
699
+ /**
700
+ * Analyze the images and builds the rows. It returns if it found an image that is not loaded.
701
+ *
702
+ * @param isForResize if the image analyzer is called for resizing or not, to call a different callback at the end
703
+ */
704
+ JustifiedGallery.prototype.analyzeImages = function (isForResize) {
705
+ for (var i = this.lastAnalyzedIndex + 1; i < this.entries.length; i++) {
706
+ var $entry = $(this.entries[i]);
707
+ if ($entry.data('jg.loaded') === true || $entry.data('jg.loaded') === 'skipped') {
708
+ var availableWidth = this.galleryWidth - 2 * this.border - (
709
+ (this.buildingRow.entriesBuff.length - 1) * this.settings.margins);
710
+ var imgAspectRatio = $entry.data('jg.width') / $entry.data('jg.height');
711
+ if (availableWidth / (this.buildingRow.aspectRatio + imgAspectRatio) < this.settings.rowHeight) {
712
+ this.flushRow(false);
713
+ if(++this.yield.flushed >= this.yield.every) {
714
+ this.startImgAnalyzer(isForResize);
715
+ return;
716
+ }
717
+ }
718
+
719
+ this.buildingRow.entriesBuff.push($entry);
720
+ this.buildingRow.aspectRatio += imgAspectRatio;
721
+ this.buildingRow.width += imgAspectRatio * this.settings.rowHeight;
722
+ this.lastAnalyzedIndex = i;
723
+
724
+ } else if ($entry.data('jg.loaded') !== 'error') {
725
+ return;
726
+ }
727
+ }
728
+
729
+ // Last row flush (the row is not full)
730
+ if (this.buildingRow.entriesBuff.length > 0) this.flushRow(true);
731
+
732
+ if (this.isSpinnerActive()) {
733
+ this.stopLoadingSpinnerAnimation();
734
+ }
735
+
736
+ /* Stop, if there is, the timeout to start the analyzeImages.
737
+ This is because an image can be set loaded, and the timeout can be set,
738
+ but this image can be analyzed yet.
739
+ */
740
+ this.stopImgAnalyzerStarter();
741
+
742
+ //On complete callback
743
+ this.$gallery.trigger(isForResize ? 'jg.resize' : 'jg.complete');
744
+ this.$gallery.height(this.galleryHeightToSet);
745
+ };
746
+
747
+ /**
748
+ * Stops any ImgAnalyzer starter (that has an assigned timeout)
749
+ */
750
+ JustifiedGallery.prototype.stopImgAnalyzerStarter = function () {
751
+ this.yield.flushed = 0;
752
+ if (this.imgAnalyzerTimeout !== null) clearTimeout(this.imgAnalyzerTimeout);
753
+ };
754
+
755
+ /**
756
+ * Starts the image analyzer. It is not immediately called to let the browser to update the view
757
+ *
758
+ * @param isForResize specifies if the image analyzer must be called for resizing or not
759
+ */
760
+ JustifiedGallery.prototype.startImgAnalyzer = function (isForResize) {
761
+ var that = this;
762
+ this.stopImgAnalyzerStarter();
763
+ this.imgAnalyzerTimeout = setTimeout(function () {
764
+ that.analyzeImages(isForResize);
765
+ }, 0.001); // we can't start it immediately due to a IE different behaviour
766
+ };
767
+
768
+ /**
769
+ * Checks if the image is loaded or not using another image object. We cannot use the 'complete' image property,
770
+ * because some browsers, with a 404 set complete = true.
771
+ *
772
+ * @param imageSrc the image src to load
773
+ * @param onLoad callback that is called when the image has been loaded
774
+ * @param onError callback that is called in case of an error
775
+ */
776
+ JustifiedGallery.prototype.onImageEvent = function (imageSrc, onLoad, onError) {
777
+ if (!onLoad && !onError) return;
778
+
779
+ var memImage = new Image();
780
+ var $memImage = $(memImage);
781
+ if (onLoad) {
782
+ $memImage.one('load', function () {
783
+ $memImage.off('load error');
784
+ onLoad(memImage);
785
+ });
786
+ }
787
+ if (onError) {
788
+ $memImage.one('error', function() {
789
+ $memImage.off('load error');
790
+ onError(memImage);
791
+ });
792
+ }
793
+ memImage.src = imageSrc;
794
+ };
795
+
796
+ /**
797
+ * Init of Justified Gallery controlled
798
+ * It analyzes all the entries starting theirs loading and calling the image analyzer (that works with loaded images)
799
+ */
800
+ JustifiedGallery.prototype.init = function () {
801
+ var imagesToLoad = false, skippedImages = false, that = this;
802
+ $.each(this.entries, function (index, entry) {
803
+ var $entry = $(entry);
804
+ var $image = that.imgFromEntry($entry);
805
+
806
+ $entry.addClass('jg-entry');
807
+
808
+ if ($entry.data('jg.loaded') !== true && $entry.data('jg.loaded') !== 'skipped') {
809
+
810
+ // Link Rel global overwrite
811
+ if (that.settings.rel !== null) $entry.attr('rel', that.settings.rel);
812
+
813
+ // Link Target global overwrite
814
+ if (that.settings.target !== null) $entry.attr('target', that.settings.target);
815
+
816
+ if ($image !== null) {
817
+
818
+ // Image src
819
+ var imageSrc = that.extractImgSrcFromImage($image);
820
+ $image.attr('src', imageSrc);
821
+
822
+ /* If we have the height and the width, we don't wait that the image is loaded, but we start directly
823
+ * with the justification */
824
+ if (that.settings.waitThumbnailsLoad === false) {
825
+ var width = parseFloat($image.attr('width'));
826
+ var height = parseFloat($image.attr('height'));
827
+ if (!isNaN(width) && !isNaN(height)) {
828
+ $entry.data('jg.width', width);
829
+ $entry.data('jg.height', height);
830
+ $entry.data('jg.loaded', 'skipped');
831
+ skippedImages = true;
832
+ that.startImgAnalyzer(false);
833
+ return true; // continue
834
+ }
835
+ }
836
+
837
+ $entry.data('jg.loaded', false);
838
+ imagesToLoad = true;
839
+
840
+ // Spinner start
841
+ if (!that.isSpinnerActive()) that.startLoadingSpinnerAnimation();
842
+
843
+ that.onImageEvent(imageSrc, function (loadImg) { // image loaded
844
+ $entry.data('jg.width', loadImg.width);
845
+ $entry.data('jg.height', loadImg.height);
846
+ $entry.data('jg.loaded', true);
847
+ that.startImgAnalyzer(false);
848
+ }, function () { // image load error
849
+ $entry.data('jg.loaded', 'error');
850
+ that.startImgAnalyzer(false);
851
+ });
852
+
853
+ } else {
854
+ $entry.data('jg.loaded', true);
855
+ $entry.data('jg.width', $entry.width() | parseFloat($entry.css('width')) | 1);
856
+ $entry.data('jg.height', $entry.height() | parseFloat($entry.css('height')) | 1);
857
+ }
858
+
859
+ }
860
+
861
+ });
862
+
863
+ if (!imagesToLoad && !skippedImages) this.startImgAnalyzer(false);
864
+ this.checkWidth();
865
+ };
866
+
867
+ /**
868
+ * Checks that it is a valid number. If a string is passed it is converted to a number
869
+ *
870
+ * @param settingContainer the object that contains the setting (to allow the conversion)
871
+ * @param settingName the setting name
872
+ */
873
+ JustifiedGallery.prototype.checkOrConvertNumber = function (settingContainer, settingName) {
874
+ if ($.type(settingContainer[settingName]) === 'string') {
875
+ settingContainer[settingName] = parseFloat(settingContainer[settingName]);
876
+ }
877
+
878
+ if ($.type(settingContainer[settingName]) === 'number') {
879
+ if (isNaN(settingContainer[settingName])) throw 'invalid number for ' + settingName;
880
+ } else {
881
+ throw settingName + ' must be a number';
882
+ }
883
+ };
884
+
885
+ /**
886
+ * Checks the sizeRangeSuffixes and, if necessary, converts
887
+ * its keys from string (e.g. old settings with 'lt100') to int.
888
+ */
889
+ JustifiedGallery.prototype.checkSizeRangesSuffixes = function () {
890
+ if ($.type(this.settings.sizeRangeSuffixes) !== 'object') {
891
+ throw 'sizeRangeSuffixes must be defined and must be an object';
892
+ }
893
+
894
+ var suffixRanges = [];
895
+ for (var rangeIdx in this.settings.sizeRangeSuffixes) {
896
+ if (this.settings.sizeRangeSuffixes.hasOwnProperty(rangeIdx)) suffixRanges.push(rangeIdx);
897
+ }
898
+
899
+ var newSizeRngSuffixes = {0: ''};
900
+ for (var i = 0; i < suffixRanges.length; i++) {
901
+ if ($.type(suffixRanges[i]) === 'string') {
902
+ try {
903
+ var numIdx = parseInt(suffixRanges[i].replace(/^[a-z]+/, ''), 10);
904
+ newSizeRngSuffixes[numIdx] = this.settings.sizeRangeSuffixes[suffixRanges[i]];
905
+ } catch (e) {
906
+ throw 'sizeRangeSuffixes keys must contains correct numbers (' + e + ')';
907
+ }
908
+ } else {
909
+ newSizeRngSuffixes[suffixRanges[i]] = this.settings.sizeRangeSuffixes[suffixRanges[i]];
910
+ }
911
+ }
912
+
913
+ this.settings.sizeRangeSuffixes = newSizeRngSuffixes;
914
+ };
915
+
916
+ /**
917
+ * check and convert the maxRowHeight setting
918
+ */
919
+ JustifiedGallery.prototype.retrieveMaxRowHeight = function () {
920
+ var newMaxRowHeight = { };
921
+
922
+ if ($.type(this.settings.maxRowHeight) === 'string') {
923
+ if (this.settings.maxRowHeight.match(/^[0-9]+%$/)) {
924
+ newMaxRowHeight.value = parseFloat(this.settings.maxRowHeight.match(/^([0-9]+)%$/)[1]) / 100;
925
+ newMaxRowHeight.isPercentage = false;
926
+ } else {
927
+ newMaxRowHeight.value = parseFloat(this.settings.maxRowHeight);
928
+ newMaxRowHeight.isPercentage = true;
929
+ }
930
+ } else if ($.type(this.settings.maxRowHeight) === 'number') {
931
+ newMaxRowHeight.value = this.settings.maxRowHeight;
932
+ newMaxRowHeight.isPercentage = false;
933
+ } else if (this.settings.maxRowHeight === false ||
934
+ this.settings.maxRowHeight === null ||
935
+ typeof this.settings.maxRowHeight == 'undefined') {
936
+ return null;
937
+ } else {
938
+ throw 'maxRowHeight must be a number or a percentage';
939
+ }
940
+
941
+ // check if the converted value is not a number
942
+ if (isNaN(newMaxRowHeight.value)) throw 'invalid number for maxRowHeight';
943
+
944
+ // check values
945
+ if (newMaxRowHeight.isPercentage) {
946
+ if (newMaxRowHeight.value < 100) newMaxRowHeight.value = 100;
947
+ }
948
+
949
+ return newMaxRowHeight;
950
+ };
951
+
952
+ /**
953
+ * Checks the settings
954
+ */
955
+ JustifiedGallery.prototype.checkSettings = function () {
956
+ this.checkSizeRangesSuffixes();
957
+
958
+ this.checkOrConvertNumber(this.settings, 'rowHeight');
959
+ this.checkOrConvertNumber(this.settings, 'margins');
960
+ this.checkOrConvertNumber(this.settings, 'border');
961
+
962
+ var lastRowModes = [
963
+ 'justify',
964
+ 'nojustify',
965
+ 'left',
966
+ 'center',
967
+ 'right',
968
+ 'hide'
969
+ ];
970
+ if (lastRowModes.indexOf(this.settings.lastRow) === -1) {
971
+ throw 'lastRow must be one of: ' + lastRowModes.join(', ');
972
+ }
973
+
974
+ this.checkOrConvertNumber(this.settings, 'justifyThreshold');
975
+ if (this.settings.justifyThreshold < 0 || this.settings.justifyThreshold > 1) {
976
+ throw 'justifyThreshold must be in the interval [0,1]';
977
+ }
978
+ if ($.type(this.settings.cssAnimation) !== 'boolean') {
979
+ throw 'cssAnimation must be a boolean';
980
+ }
981
+
982
+ if ($.type(this.settings.captions) !== 'boolean') throw 'captions must be a boolean';
983
+ this.checkOrConvertNumber(this.settings.captionSettings, 'animationDuration');
984
+
985
+ this.checkOrConvertNumber(this.settings.captionSettings, 'visibleOpacity');
986
+ if (this.settings.captionSettings.visibleOpacity < 0 ||
987
+ this.settings.captionSettings.visibleOpacity > 1) {
988
+ throw 'captionSettings.visibleOpacity must be in the interval [0, 1]';
989
+ }
990
+
991
+ this.checkOrConvertNumber(this.settings.captionSettings, 'nonVisibleOpacity');
992
+ if (this.settings.captionSettings.nonVisibleOpacity < 0 ||
993
+ this.settings.captionSettings.nonVisibleOpacity > 1) {
994
+ throw 'captionSettings.nonVisibleOpacity must be in the interval [0, 1]';
995
+ }
996
+
997
+ this.checkOrConvertNumber(this.settings, 'imagesAnimationDuration');
998
+ this.checkOrConvertNumber(this.settings, 'refreshTime');
999
+ this.checkOrConvertNumber(this.settings, 'refreshSensitivity');
1000
+ if ($.type(this.settings.randomize) !== 'boolean') throw 'randomize must be a boolean';
1001
+ if ($.type(this.settings.selector) !== 'string') throw 'selector must be a string';
1002
+
1003
+ if (this.settings.sort !== false && !$.isFunction(this.settings.sort)) {
1004
+ throw 'sort must be false or a comparison function';
1005
+ }
1006
+
1007
+ if (this.settings.filter !== false && !$.isFunction(this.settings.filter) &&
1008
+ $.type(this.settings.filter) !== 'string') {
1009
+ throw 'filter must be false, a string or a filter function';
1010
+ }
1011
+ };
1012
+
1013
+ /**
1014
+ * It brings all the indexes from the sizeRangeSuffixes and it orders them. They are then sorted and returned.
1015
+ * @returns {Array} sorted suffix ranges
1016
+ */
1017
+ JustifiedGallery.prototype.retrieveSuffixRanges = function () {
1018
+ var suffixRanges = [];
1019
+ for (var rangeIdx in this.settings.sizeRangeSuffixes) {
1020
+ if (this.settings.sizeRangeSuffixes.hasOwnProperty(rangeIdx)) suffixRanges.push(parseInt(rangeIdx, 10));
1021
+ }
1022
+ suffixRanges.sort(function (a, b) { return a > b ? 1 : a < b ? -1 : 0; });
1023
+ return suffixRanges;
1024
+ };
1025
+
1026
+ /**
1027
+ * Update the existing settings only changing some of them
1028
+ *
1029
+ * @param newSettings the new settings (or a subgroup of them)
1030
+ */
1031
+ JustifiedGallery.prototype.updateSettings = function (newSettings) {
1032
+ // In this case Justified Gallery has been called again changing only some options
1033
+ this.settings = $.extend({}, this.settings, newSettings);
1034
+ this.checkSettings();
1035
+
1036
+ // As reported in the settings: negative value = same as margins, 0 = disabled
1037
+ this.border = this.settings.border >= 0 ? this.settings.border : this.settings.margins;
1038
+
1039
+ this.maxRowHeight = this.retrieveMaxRowHeight();
1040
+ this.suffixRanges = this.retrieveSuffixRanges();
1041
+ };
1042
+
1043
+ /**
1044
+ * Justified Gallery plugin for jQuery
1045
+ *
1046
+ * Events
1047
+ * - jg.complete : called when all the gallery has been created
1048
+ * - jg.resize : called when the gallery has been resized
1049
+ * - jg.rowflush : when a new row appears
1050
+ *
1051
+ * @param arg the action (or the settings) passed when the plugin is called
1052
+ * @returns {*} the object itself
1053
+ */
1054
+ $.fn.justifiedGallery = function (arg) {
1055
+ return this.each(function (index, gallery) {
1056
+
1057
+ var $gallery = $(gallery);
1058
+ $gallery.addClass('justified-gallery');
1059
+
1060
+ var controller = $gallery.data('jg.controller');
1061
+ if (typeof controller === 'undefined') {
1062
+ // Create controller and assign it to the object data
1063
+ if (typeof arg !== 'undefined' && arg !== null && $.type(arg) !== 'object') {
1064
+ if (arg === 'destroy') return; // Just a call to an unexisting object
1065
+ throw 'The argument must be an object';
1066
+ }
1067
+ controller = new JustifiedGallery($gallery, $.extend({}, $.fn.justifiedGallery.defaults, arg));
1068
+ $gallery.data('jg.controller', controller);
1069
+ } else if (arg === 'norewind') {
1070
+ // In this case we don't rewind: we analyze only the latest images (e.g. to complete the last unfinished row
1071
+ // ... left to be more readable
1072
+ } else if (arg === 'destroy') {
1073
+ controller.destroy();
1074
+ return;
1075
+ } else {
1076
+ // In this case Justified Gallery has been called again changing only some options
1077
+ controller.updateSettings(arg);
1078
+ controller.rewind();
1079
+ }
1080
+
1081
+ // Update the entries list
1082
+ if (!controller.updateEntries(arg === 'norewind')) return;
1083
+
1084
+ // Init justified gallery
1085
+ controller.init();
1086
+
1087
+ });
1088
+ };
1089
+
1090
+ // Default options
1091
+ $.fn.justifiedGallery.defaults = {
1092
+ sizeRangeSuffixes: { }, /* e.g. Flickr configuration
1093
+ {
1094
+ 100: '_t', // used when longest is less than 100px
1095
+ 240: '_m', // used when longest is between 101px and 240px
1096
+ 320: '_n', // ...
1097
+ 500: '',
1098
+ 640: '_z',
1099
+ 1024: '_b' // used as else case because it is the last
1100
+ }
1101
+ */
1102
+ thumbnailPath: undefined, /* If defined, sizeRangeSuffixes is not used, and this function is used to determine the
1103
+ path relative to a specific thumbnail size. The function should accept respectively three arguments:
1104
+ current path, width and height */
1105
+ rowHeight: 120,
1106
+ maxRowHeight: false, // false or negative value to deactivate. Positive number to express the value in pixels,
1107
+ // A string '[0-9]+%' to express in percentage (e.g. 300% means that the row height
1108
+ // can't exceed 3 * rowHeight)
1109
+ margins: 1,
1110
+ border: -1, // negative value = same as margins, 0 = disabled, any other value to set the border
1111
+
1112
+ lastRow: 'nojustify', // … which is the same as 'left', or can be 'justify', 'center', 'right' or 'hide'
1113
+
1114
+ justifyThreshold: 0.90, /* if row width / available space > 0.90 it will be always justified
1115
+ * (i.e. lastRow setting is not considered) */
1116
+ waitThumbnailsLoad: true,
1117
+ captions: true,
1118
+ cssAnimation: true,
1119
+ imagesAnimationDuration: 500, // ignored with css animations
1120
+ captionSettings: { // ignored with css animations
1121
+ animationDuration: 500,
1122
+ visibleOpacity: 0.7,
1123
+ nonVisibleOpacity: 0.0
1124
+ },
1125
+ rel: null, // rewrite the rel of each analyzed links
1126
+ target: null, // rewrite the target of all links
1127
+ extension: /\.[^.\\/]+$/, // regexp to capture the extension of an image
1128
+ refreshTime: 200, // time interval (in ms) to check if the page changes its width
1129
+ refreshSensitivity: 0, // change in width allowed (in px) without re-building the gallery
1130
+ randomize: false,
1131
+ sort: false, /*
1132
+ - false: to do not sort
1133
+ - function: to sort them using the function as comparator (see Array.prototype.sort())
1134
+ */
1135
+ filter: false, /*
1136
+ - false, null or undefined: for a disabled filter
1137
+ - a string: an entry is kept if entry.is(filter string) returns true
1138
+ see jQuery's .is() function for further information
1139
+ - a function: invoked with arguments (entry, index, array). Return true to keep the entry, false otherwise.
1140
+ It follows the specifications of the Array.prototype.filter() function of JavaScript.
1141
+ */
1142
+ selector: 'a, div:not(.spinner)' // The selector that is used to know what are the entries of the gallery
1143
+ };
1144
+
1145
+ }(jQuery));