j1_template_mde 2018.4.10

Sign up to get free protection for your applications and to get access to all the features.
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,1147 @@
1
+ /**
2
+ * Justified Gallery - v3.6.4
3
+ * http://miromannino.github.io/Justified-Gallery/
4
+ *
5
+ * Copyright (C) 2016 Miro Mannino
6
+ * Licensed under the MIT license.
7
+ */
8
+
9
+ (function($) {
10
+
11
+ function hasScrollBar() {
12
+ return $("body").height() > $(window).height();
13
+ }
14
+ /**
15
+ * Justified Gallery controller constructor
16
+ *
17
+ * @param $gallery the gallery to build
18
+ * @param settings the settings (the defaults are in $.fn.justifiedGallery.defaults)
19
+ * @constructor
20
+ */
21
+ var JustifiedGallery = function ($gallery, settings) {
22
+
23
+ this.settings = settings;
24
+ this.checkSettings();
25
+
26
+ this.imgAnalyzerTimeout = null;
27
+ this.entries = null;
28
+ this.buildingRow = {
29
+ entriesBuff : [],
30
+ width : 0,
31
+ height : 0,
32
+ aspectRatio : 0
33
+ };
34
+ this.lastFetchedEntry = null;
35
+ this.lastAnalyzedIndex = -1;
36
+ this.yield = {
37
+ every : 2, // do a flush every n flushes (must be greater than 1)
38
+ flushed : 0 // flushed rows without a yield
39
+ };
40
+ this.border = settings.border >= 0 ? settings.border : settings.margins;
41
+ this.maxRowHeight = this.retrieveMaxRowHeight();
42
+ this.suffixRanges = this.retrieveSuffixRanges();
43
+ this.offY = this.border;
44
+ this.rows = 0;
45
+ this.spinner = {
46
+ phase : 0,
47
+ timeSlot : 150,
48
+ $el : $('<div class="spinner"><span></span><span></span><span></span></div>'),
49
+ intervalId : null
50
+ };
51
+ this.checkWidthIntervalId = null;
52
+ this.galleryWidth = $gallery.width();
53
+ this.$gallery = $gallery;
54
+
55
+ };
56
+
57
+ /** @returns {String} the best suffix given the width and the height */
58
+ JustifiedGallery.prototype.getSuffix = function (width, height) {
59
+ var longestSide, i;
60
+ longestSide = (width > height) ? width : height;
61
+ for (i = 0; i < this.suffixRanges.length; i++) {
62
+ if (longestSide <= this.suffixRanges[i]) {
63
+ return this.settings.sizeRangeSuffixes[this.suffixRanges[i]];
64
+ }
65
+ }
66
+ return this.settings.sizeRangeSuffixes[this.suffixRanges[i - 1]];
67
+ };
68
+
69
+ /**
70
+ * Remove the suffix from the string
71
+ *
72
+ * @returns {string} a new string without the suffix
73
+ */
74
+ JustifiedGallery.prototype.removeSuffix = function (str, suffix) {
75
+ return str.substring(0, str.length - suffix.length);
76
+ };
77
+
78
+ /**
79
+ * @returns {boolean} a boolean to say if the suffix is contained in the str or not
80
+ */
81
+ JustifiedGallery.prototype.endsWith = function (str, suffix) {
82
+ return str.indexOf(suffix, str.length - suffix.length) !== -1;
83
+ };
84
+
85
+ /**
86
+ * Get the used suffix of a particular url
87
+ *
88
+ * @param str
89
+ * @returns {String} return the used suffix
90
+ */
91
+ JustifiedGallery.prototype.getUsedSuffix = function (str) {
92
+ for (var si in this.settings.sizeRangeSuffixes) {
93
+ if (this.settings.sizeRangeSuffixes.hasOwnProperty(si)) {
94
+ if (this.settings.sizeRangeSuffixes[si].length === 0) continue;
95
+ if (this.endsWith(str, this.settings.sizeRangeSuffixes[si])) return this.settings.sizeRangeSuffixes[si];
96
+ }
97
+ }
98
+ return '';
99
+ };
100
+
101
+ /**
102
+ * Given an image src, with the width and the height, returns the new image src with the
103
+ * best suffix to show the best quality thumbnail.
104
+ *
105
+ * @returns {String} the suffix to use
106
+ */
107
+ JustifiedGallery.prototype.newSrc = function (imageSrc, imgWidth, imgHeight, image) {
108
+ var newImageSrc;
109
+
110
+ if (this.settings.thumbnailPath) {
111
+ newImageSrc = this.settings.thumbnailPath(imageSrc, imgWidth, imgHeight, image);
112
+ } else {
113
+ var matchRes = imageSrc.match(this.settings.extension);
114
+ var ext = (matchRes !== null) ? matchRes[0] : '';
115
+ newImageSrc = imageSrc.replace(this.settings.extension, '');
116
+ newImageSrc = this.removeSuffix(newImageSrc, this.getUsedSuffix(newImageSrc));
117
+ newImageSrc += this.getSuffix(imgWidth, imgHeight) + ext;
118
+ }
119
+
120
+ return newImageSrc;
121
+ };
122
+
123
+ /**
124
+ * Shows the images that is in the given entry
125
+ *
126
+ * @param $entry the entry
127
+ * @param callback the callback that is called when the show animation is finished
128
+ */
129
+ JustifiedGallery.prototype.showImg = function ($entry, callback) {
130
+ if (this.settings.cssAnimation) {
131
+ $entry.addClass('entry-visible');
132
+ if (callback) callback();
133
+ } else {
134
+ $entry.stop().fadeTo(this.settings.imagesAnimationDuration, 1.0, callback);
135
+ $entry.find('> img, > a > img').stop().fadeTo(this.settings.imagesAnimationDuration, 1.0, callback);
136
+ }
137
+ };
138
+
139
+ /**
140
+ * Extract the image src form the image, looking from the 'safe-src', and if it can't be found, from the
141
+ * 'src' attribute. It saves in the image data the 'jg.originalSrc' field, with the extracted src.
142
+ *
143
+ * @param $image the image to analyze
144
+ * @returns {String} the extracted src
145
+ */
146
+ JustifiedGallery.prototype.extractImgSrcFromImage = function ($image) {
147
+ var imageSrc = (typeof $image.data('safe-src') !== 'undefined') ? $image.data('safe-src') : $image.attr('src');
148
+ $image.data('jg.originalSrc', imageSrc);
149
+ return imageSrc;
150
+ };
151
+
152
+ /** @returns {jQuery} the image in the given entry */
153
+ JustifiedGallery.prototype.imgFromEntry = function ($entry) {
154
+ var $img = $entry.find('> img');
155
+ if ($img.length === 0) $img = $entry.find('> a > img');
156
+ return $img.length === 0 ? null : $img;
157
+ };
158
+
159
+ /** @returns {jQuery} the caption in the given entry */
160
+ JustifiedGallery.prototype.captionFromEntry = function ($entry) {
161
+ var $caption = $entry.find('> .caption');
162
+ return $caption.length === 0 ? null : $caption;
163
+ };
164
+
165
+ /**
166
+ * Display the entry
167
+ *
168
+ * @param {jQuery} $entry the entry to display
169
+ * @param {int} x the x position where the entry must be positioned
170
+ * @param y the y position where the entry must be positioned
171
+ * @param imgWidth the image width
172
+ * @param imgHeight the image height
173
+ * @param rowHeight the row height of the row that owns the entry
174
+ */
175
+ JustifiedGallery.prototype.displayEntry = function ($entry, x, y, imgWidth, imgHeight, rowHeight) {
176
+ $entry.width(imgWidth);
177
+ $entry.height(rowHeight);
178
+ $entry.css('top', y);
179
+ $entry.css('left', x);
180
+
181
+ var $image = this.imgFromEntry($entry);
182
+ if ($image !== null) {
183
+ $image.css('width', imgWidth);
184
+ $image.css('height', imgHeight);
185
+ $image.css('margin-left', - imgWidth / 2);
186
+ $image.css('margin-top', - imgHeight / 2);
187
+
188
+ // Image reloading for an high quality of thumbnails
189
+ var imageSrc = $image.attr('src');
190
+ var newImageSrc = this.newSrc(imageSrc, imgWidth, imgHeight, $image[0]);
191
+
192
+ $image.one('error', function () {
193
+ $image.attr('src', $image.data('jg.originalSrc')); //revert to the original thumbnail, we got it.
194
+ });
195
+
196
+ var loadNewImage = function () {
197
+ if (imageSrc !== newImageSrc) { //load the new image after the fadeIn
198
+ $image.attr('src', newImageSrc);
199
+ }
200
+ };
201
+
202
+ if ($entry.data('jg.loaded') === 'skipped') {
203
+ this.onImageEvent(imageSrc, $.proxy(function() {
204
+ this.showImg($entry, loadNewImage);
205
+ $entry.data('jg.loaded', true);
206
+ }, this));
207
+ } else {
208
+ this.showImg($entry, loadNewImage);
209
+ }
210
+
211
+ } else {
212
+ this.showImg($entry);
213
+ }
214
+
215
+ this.displayEntryCaption($entry);
216
+ };
217
+
218
+ /**
219
+ * Display the entry caption. If the caption element doesn't exists, it creates the caption using the 'alt'
220
+ * or the 'title' attributes.
221
+ *
222
+ * @param {jQuery} $entry the entry to process
223
+ */
224
+ JustifiedGallery.prototype.displayEntryCaption = function ($entry) {
225
+ var $image = this.imgFromEntry($entry);
226
+ if ($image !== null && this.settings.captions) {
227
+ var $imgCaption = this.captionFromEntry($entry);
228
+
229
+ // Create it if it doesn't exists
230
+ if ($imgCaption === null) {
231
+ var caption = $image.attr('alt');
232
+ if (!this.isValidCaption(caption)) caption = $entry.attr('title');
233
+ if (this.isValidCaption(caption)) { // Create only we found something
234
+ $imgCaption = $('<div class="caption">' + caption + '</div>');
235
+ $entry.append($imgCaption);
236
+ $entry.data('jg.createdCaption', true);
237
+ }
238
+ }
239
+
240
+ // Create events (we check again the $imgCaption because it can be still inexistent)
241
+ if ($imgCaption !== null) {
242
+ if (!this.settings.cssAnimation) $imgCaption.stop().fadeTo(0, this.settings.captionSettings.nonVisibleOpacity);
243
+ this.addCaptionEventsHandlers($entry);
244
+ }
245
+ } else {
246
+ this.removeCaptionEventsHandlers($entry);
247
+ }
248
+ };
249
+
250
+ /**
251
+ * Validates the caption
252
+ *
253
+ * @param caption The caption that should be validated
254
+ * @return {boolean} Validation result
255
+ */
256
+ JustifiedGallery.prototype.isValidCaption = function (caption) {
257
+ return (typeof caption !== 'undefined' && caption.length > 0);
258
+ };
259
+
260
+ /**
261
+ * The callback for the event 'mouseenter'. It assumes that the event currentTarget is an entry.
262
+ * It shows the caption using jQuery (or using CSS if it is configured so)
263
+ *
264
+ * @param {Event} eventObject the event object
265
+ */
266
+ JustifiedGallery.prototype.onEntryMouseEnterForCaption = function (eventObject) {
267
+ var $caption = this.captionFromEntry($(eventObject.currentTarget));
268
+ if (this.settings.cssAnimation) {
269
+ $caption.addClass('caption-visible').removeClass('caption-hidden');
270
+ } else {
271
+ $caption.stop().fadeTo(this.settings.captionSettings.animationDuration,
272
+ this.settings.captionSettings.visibleOpacity);
273
+ }
274
+ };
275
+
276
+ /**
277
+ * The callback for the event 'mouseleave'. It assumes that the event currentTarget is an entry.
278
+ * It hides the caption using jQuery (or using CSS if it is configured so)
279
+ *
280
+ * @param {Event} eventObject the event object
281
+ */
282
+ JustifiedGallery.prototype.onEntryMouseLeaveForCaption = function (eventObject) {
283
+ var $caption = this.captionFromEntry($(eventObject.currentTarget));
284
+ if (this.settings.cssAnimation) {
285
+ $caption.removeClass('caption-visible').removeClass('caption-hidden');
286
+ } else {
287
+ $caption.stop().fadeTo(this.settings.captionSettings.animationDuration,
288
+ this.settings.captionSettings.nonVisibleOpacity);
289
+ }
290
+ };
291
+
292
+ /**
293
+ * Add the handlers of the entry for the caption
294
+ *
295
+ * @param $entry the entry to modify
296
+ */
297
+ JustifiedGallery.prototype.addCaptionEventsHandlers = function ($entry) {
298
+ var captionMouseEvents = $entry.data('jg.captionMouseEvents');
299
+ if (typeof captionMouseEvents === 'undefined') {
300
+ captionMouseEvents = {
301
+ mouseenter: $.proxy(this.onEntryMouseEnterForCaption, this),
302
+ mouseleave: $.proxy(this.onEntryMouseLeaveForCaption, this)
303
+ };
304
+ $entry.on('mouseenter', undefined, undefined, captionMouseEvents.mouseenter);
305
+ $entry.on('mouseleave', undefined, undefined, captionMouseEvents.mouseleave);
306
+ $entry.data('jg.captionMouseEvents', captionMouseEvents);
307
+ }
308
+ };
309
+
310
+ /**
311
+ * Remove the handlers of the entry for the caption
312
+ *
313
+ * @param $entry the entry to modify
314
+ */
315
+ JustifiedGallery.prototype.removeCaptionEventsHandlers = function ($entry) {
316
+ var captionMouseEvents = $entry.data('jg.captionMouseEvents');
317
+ if (typeof captionMouseEvents !== 'undefined') {
318
+ $entry.off('mouseenter', undefined, captionMouseEvents.mouseenter);
319
+ $entry.off('mouseleave', undefined, captionMouseEvents.mouseleave);
320
+ $entry.removeData('jg.captionMouseEvents');
321
+ }
322
+ };
323
+
324
+ /**
325
+ * Justify the building row, preparing it to
326
+ *
327
+ * @param isLastRow
328
+ * @returns a boolean to know if the row has been justified or not
329
+ */
330
+ JustifiedGallery.prototype.prepareBuildingRow = function (isLastRow) {
331
+ var i, $entry, imgAspectRatio, newImgW, newImgH, justify = true;
332
+ var minHeight = 0;
333
+ var availableWidth = this.galleryWidth - 2 * this.border - (
334
+ (this.buildingRow.entriesBuff.length - 1) * this.settings.margins);
335
+ var rowHeight = availableWidth / this.buildingRow.aspectRatio;
336
+ var defaultRowHeight = this.settings.rowHeight;
337
+ var justifiable = this.buildingRow.width / availableWidth > this.settings.justifyThreshold;
338
+
339
+ //Skip the last row if we can't justify it and the lastRow == 'hide'
340
+ if (isLastRow && this.settings.lastRow === 'hide' && !justifiable) {
341
+ for (i = 0; i < this.buildingRow.entriesBuff.length; i++) {
342
+ $entry = this.buildingRow.entriesBuff[i];
343
+ if (this.settings.cssAnimation)
344
+ $entry.removeClass('entry-visible');
345
+ else {
346
+ $entry.stop().fadeTo(0, 0.1);
347
+ $entry.find('> img, > a > img').fadeTo(0, 0);
348
+ }
349
+ }
350
+ return -1;
351
+ }
352
+
353
+ // With lastRow = nojustify, justify if is justificable (the images will not become too big)
354
+ if (isLastRow && !justifiable && this.settings.lastRow !== 'justify' && this.settings.lastRow !== 'hide') {
355
+ justify = false;
356
+
357
+ if (this.rows > 0) {
358
+ defaultRowHeight = (this.offY - this.border - this.settings.margins * this.rows) / this.rows;
359
+ justify = defaultRowHeight * this.buildingRow.aspectRatio / availableWidth > this.settings.justifyThreshold;
360
+ }
361
+ }
362
+
363
+ for (i = 0; i < this.buildingRow.entriesBuff.length; i++) {
364
+ $entry = this.buildingRow.entriesBuff[i];
365
+ imgAspectRatio = $entry.data('jg.width') / $entry.data('jg.height');
366
+
367
+ if (justify) {
368
+ newImgW = (i === this.buildingRow.entriesBuff.length - 1) ? availableWidth : rowHeight * imgAspectRatio;
369
+ newImgH = rowHeight;
370
+ } else {
371
+ newImgW = defaultRowHeight * imgAspectRatio;
372
+ newImgH = defaultRowHeight;
373
+ }
374
+
375
+ availableWidth -= Math.round(newImgW);
376
+ $entry.data('jg.jwidth', Math.round(newImgW));
377
+ $entry.data('jg.jheight', Math.ceil(newImgH));
378
+ if (i === 0 || minHeight > newImgH) minHeight = newImgH;
379
+ }
380
+
381
+ this.buildingRow.height = minHeight;
382
+ return justify;
383
+ };
384
+
385
+ /**
386
+ * Clear the building row data to be used for a new row
387
+ */
388
+ JustifiedGallery.prototype.clearBuildingRow = function () {
389
+ this.buildingRow.entriesBuff = [];
390
+ this.buildingRow.aspectRatio = 0;
391
+ this.buildingRow.width = 0;
392
+ };
393
+
394
+ /**
395
+ * Flush a row: justify it, modify the gallery height accordingly to the row height
396
+ *
397
+ * @param isLastRow
398
+ */
399
+ JustifiedGallery.prototype.flushRow = function (isLastRow) {
400
+ var settings = this.settings;
401
+ var $entry, buildingRowRes, offX = this.border, i;
402
+
403
+ buildingRowRes = this.prepareBuildingRow(isLastRow);
404
+ if (isLastRow && settings.lastRow === 'hide' && buildingRowRes === -1) {
405
+ this.clearBuildingRow();
406
+ return;
407
+ }
408
+
409
+ if (this.maxRowHeight) {
410
+ if (this.maxRowHeight.isPercentage && this.maxRowHeight.value * settings.rowHeight < this.buildingRow.height) {
411
+ this.buildingRow.height = this.maxRowHeight.value * settings.rowHeight;
412
+ } else if (this.maxRowHeight.value >= settings.rowHeight && this.maxRowHeight.value < this.buildingRow.height) {
413
+ this.buildingRow.height = this.maxRowHeight.value;
414
+ }
415
+ }
416
+
417
+ //Align last (unjustified) row
418
+ if (settings.lastRow === 'center' || settings.lastRow === 'right') {
419
+ var availableWidth = this.galleryWidth - 2 * this.border - (this.buildingRow.entriesBuff.length - 1) * settings.margins;
420
+
421
+ for (i = 0; i < this.buildingRow.entriesBuff.length; i++) {
422
+ $entry = this.buildingRow.entriesBuff[i];
423
+ availableWidth -= $entry.data('jg.jwidth');
424
+ }
425
+
426
+ if (settings.lastRow === 'center')
427
+ offX += availableWidth / 2;
428
+ else if (settings.lastRow === 'right')
429
+ offX += availableWidth;
430
+ }
431
+
432
+ for (i = 0; i < this.buildingRow.entriesBuff.length; i++) {
433
+ $entry = this.buildingRow.entriesBuff[i];
434
+ this.displayEntry($entry, offX, this.offY, $entry.data('jg.jwidth'), $entry.data('jg.jheight'), this.buildingRow.height);
435
+ offX += $entry.data('jg.jwidth') + settings.margins;
436
+ }
437
+
438
+ //Gallery Height
439
+ this.galleryHeightToSet = this.offY + this.buildingRow.height + this.border;
440
+ this.$gallery.height(this.galleryHeightToSet + this.getSpinnerHeight());
441
+
442
+ if (!isLastRow || (this.buildingRow.height <= settings.rowHeight && buildingRowRes)) {
443
+ //Ready for a new row
444
+ this.offY += this.buildingRow.height + settings.margins;
445
+ this.rows += 1;
446
+ this.clearBuildingRow();
447
+ this.$gallery.trigger('jg.rowflush');
448
+ }
449
+ };
450
+
451
+ /**
452
+ * Checks the width of the gallery container, to know if a new justification is needed
453
+ */
454
+ var scrollBarOn = false;
455
+ JustifiedGallery.prototype.checkWidth = function () {
456
+ this.checkWidthIntervalId = setInterval($.proxy(function () {
457
+ var galleryWidth = parseFloat(this.$gallery.width());
458
+ if (hasScrollBar() === scrollBarOn) {
459
+ if (Math.abs(galleryWidth - this.galleryWidth) > this.settings.refreshSensitivity) {
460
+ this.galleryWidth = galleryWidth;
461
+ this.rewind();
462
+
463
+ // Restart to analyze
464
+ this.startImgAnalyzer(true);
465
+ }
466
+ } else {
467
+ scrollBarOn = hasScrollBar();
468
+ this.galleryWidth = galleryWidth;
469
+ }
470
+ }, this), this.settings.refreshTime);
471
+ };
472
+
473
+ /**
474
+ * @returns {boolean} a boolean saying if the spinner is active or not
475
+ */
476
+ JustifiedGallery.prototype.isSpinnerActive = function () {
477
+ return this.spinner.intervalId !== null;
478
+ };
479
+
480
+ /**
481
+ * @returns {int} the spinner height
482
+ */
483
+ JustifiedGallery.prototype.getSpinnerHeight = function () {
484
+ return this.spinner.$el.innerHeight();
485
+ };
486
+
487
+ /**
488
+ * Stops the spinner animation and modify the gallery height to exclude the spinner
489
+ */
490
+ JustifiedGallery.prototype.stopLoadingSpinnerAnimation = function () {
491
+ clearInterval(this.spinner.intervalId);
492
+ this.spinner.intervalId = null;
493
+ this.$gallery.height(this.$gallery.height() - this.getSpinnerHeight());
494
+ this.spinner.$el.detach();
495
+ };
496
+
497
+ /**
498
+ * Starts the spinner animation
499
+ */
500
+ JustifiedGallery.prototype.startLoadingSpinnerAnimation = function () {
501
+ var spinnerContext = this.spinner;
502
+ var $spinnerPoints = spinnerContext.$el.find('span');
503
+ clearInterval(spinnerContext.intervalId);
504
+ this.$gallery.append(spinnerContext.$el);
505
+ this.$gallery.height(this.offY + this.buildingRow.height + this.getSpinnerHeight());
506
+ spinnerContext.intervalId = setInterval(function () {
507
+ if (spinnerContext.phase < $spinnerPoints.length) {
508
+ $spinnerPoints.eq(spinnerContext.phase).fadeTo(spinnerContext.timeSlot, 1);
509
+ } else {
510
+ $spinnerPoints.eq(spinnerContext.phase - $spinnerPoints.length).fadeTo(spinnerContext.timeSlot, 0);
511
+ }
512
+ spinnerContext.phase = (spinnerContext.phase + 1) % ($spinnerPoints.length * 2);
513
+ }, spinnerContext.timeSlot);
514
+ };
515
+
516
+ /**
517
+ * Rewind the image analysis to start from the first entry.
518
+ */
519
+ JustifiedGallery.prototype.rewind = function () {
520
+ this.lastFetchedEntry = null;
521
+ this.lastAnalyzedIndex = -1;
522
+ this.offY = this.border;
523
+ this.rows = 0;
524
+ this.clearBuildingRow();
525
+ };
526
+
527
+ /**
528
+ * Update the entries searching it from the justified gallery HTML element
529
+ *
530
+ * @param norewind if norewind only the new entries will be changed (i.e. randomized, sorted or filtered)
531
+ * @returns {boolean} true if some entries has been founded
532
+ */
533
+ JustifiedGallery.prototype.updateEntries = function (norewind) {
534
+ var newEntries;
535
+
536
+ if (norewind && this.lastFetchedEntry != null) {
537
+ newEntries = $(this.lastFetchedEntry).nextAll(this.settings.selector).toArray();
538
+ } else {
539
+ this.entries = [];
540
+ newEntries = this.$gallery.children(this.settings.selector).toArray();
541
+ }
542
+
543
+ if (newEntries.length > 0) {
544
+
545
+ // Sort or randomize
546
+ if ($.isFunction(this.settings.sort)) {
547
+ newEntries = this.sortArray(newEntries);
548
+ } else if (this.settings.randomize) {
549
+ newEntries = this.shuffleArray(newEntries);
550
+ }
551
+ this.lastFetchedEntry = newEntries[newEntries.length - 1];
552
+
553
+ // Filter
554
+ if (this.settings.filter) {
555
+ newEntries = this.filterArray(newEntries);
556
+ } else {
557
+ this.resetFilters(newEntries);
558
+ }
559
+
560
+ }
561
+
562
+ this.entries = this.entries.concat(newEntries);
563
+ return true;
564
+ };
565
+
566
+ /**
567
+ * Apply the entries order to the DOM, iterating the entries and appending the images
568
+ *
569
+ * @param entries the entries that has been modified and that must be re-ordered in the DOM
570
+ */
571
+ JustifiedGallery.prototype.insertToGallery = function (entries) {
572
+ var that = this;
573
+ $.each(entries, function () {
574
+ $(this).appendTo(that.$gallery);
575
+ });
576
+ };
577
+
578
+ /**
579
+ * Shuffle the array using the Fisher-Yates shuffle algorithm
580
+ *
581
+ * @param a the array to shuffle
582
+ * @return the shuffled array
583
+ */
584
+ JustifiedGallery.prototype.shuffleArray = function (a) {
585
+ var i, j, temp;
586
+ for (i = a.length - 1; i > 0; i--) {
587
+ j = Math.floor(Math.random() * (i + 1));
588
+ temp = a[i];
589
+ a[i] = a[j];
590
+ a[j] = temp;
591
+ }
592
+ this.insertToGallery(a);
593
+ return a;
594
+ };
595
+
596
+ /**
597
+ * Sort the array using settings.comparator as comparator
598
+ *
599
+ * @param a the array to sort (it is sorted)
600
+ * @return the sorted array
601
+ */
602
+ JustifiedGallery.prototype.sortArray = function (a) {
603
+ a.sort(this.settings.sort);
604
+ this.insertToGallery(a);
605
+ return a;
606
+ };
607
+
608
+ /**
609
+ * Reset the filters removing the 'jg-filtered' class from all the entries
610
+ *
611
+ * @param a the array to reset
612
+ */
613
+ JustifiedGallery.prototype.resetFilters = function (a) {
614
+ for (var i = 0; i < a.length; i++) $(a[i]).removeClass('jg-filtered');
615
+ };
616
+
617
+ /**
618
+ * Filter the entries considering theirs classes (if a string has been passed) or using a function for filtering.
619
+ *
620
+ * @param a the array to filter
621
+ * @return the filtered array
622
+ */
623
+ JustifiedGallery.prototype.filterArray = function (a) {
624
+ var settings = this.settings;
625
+ if ($.type(settings.filter) === 'string') {
626
+ // Filter only keeping the entries passed in the string
627
+ return a.filter(function (el) {
628
+ var $el = $(el);
629
+ if ($el.is(settings.filter)) {
630
+ $el.removeClass('jg-filtered');
631
+ return true;
632
+ } else {
633
+ $el.addClass('jg-filtered').removeClass('jg-visible');
634
+ return false;
635
+ }
636
+ });
637
+ } else if ($.isFunction(settings.filter)) {
638
+ // Filter using the passed function
639
+ var filteredArr = a.filter(settings.filter);
640
+ for (var i = 0; i < a.length; i++) {
641
+ if (filteredArr.indexOf(a[i]) === -1) {
642
+ $(a[i]).addClass('jg-filtered').removeClass('jg-visible');
643
+ } else {
644
+ $(a[i]).removeClass('jg-filtered');
645
+ }
646
+ }
647
+ return filteredArr;
648
+ }
649
+ };
650
+
651
+ /**
652
+ * Destroy the Justified Gallery instance.
653
+ *
654
+ * It clears all the css properties added in the style attributes. We doesn't backup the original
655
+ * values for those css attributes, because it costs (performance) and because in general one
656
+ * shouldn't use the style attribute for an uniform set of images (where we suppose the use of
657
+ * classes). Creating a backup is also difficult because JG could be called multiple times and
658
+ * with different style attributes.
659
+ */
660
+ JustifiedGallery.prototype.destroy = function () {
661
+ clearInterval(this.checkWidthIntervalId);
662
+
663
+ $.each(this.entries, $.proxy(function(_, entry) {
664
+ var $entry = $(entry);
665
+
666
+ // Reset entry style
667
+ $entry.css('width', '');
668
+ $entry.css('height', '');
669
+ $entry.css('top', '');
670
+ $entry.css('left', '');
671
+ $entry.data('jg.loaded', undefined);
672
+ $entry.removeClass('jg-entry');
673
+
674
+ // Reset image style
675
+ var $img = this.imgFromEntry($entry);
676
+ $img.css('width', '');
677
+ $img.css('height', '');
678
+ $img.css('margin-left', '');
679
+ $img.css('margin-top', '');
680
+ $img.attr('src', $img.data('jg.originalSrc'));
681
+ $img.data('jg.originalSrc', undefined);
682
+
683
+ // Remove caption
684
+ this.removeCaptionEventsHandlers($entry);
685
+ var $caption = this.captionFromEntry($entry);
686
+ if ($entry.data('jg.createdCaption')) {
687
+ // remove also the caption element (if created by jg)
688
+ $entry.data('jg.createdCaption', undefined);
689
+ if ($caption !== null) $caption.remove();
690
+ } else {
691
+ if ($caption !== null) $caption.fadeTo(0, 1);
692
+ }
693
+
694
+ }, this));
695
+
696
+ this.$gallery.css('height', '');
697
+ this.$gallery.removeClass('justified-gallery');
698
+ this.$gallery.data('jg.controller', undefined);
699
+ };
700
+
701
+ /**
702
+ * Analyze the images and builds the rows. It returns if it found an image that is not loaded.
703
+ *
704
+ * @param isForResize if the image analyzer is called for resizing or not, to call a different callback at the end
705
+ */
706
+ JustifiedGallery.prototype.analyzeImages = function (isForResize) {
707
+ for (var i = this.lastAnalyzedIndex + 1; i < this.entries.length; i++) {
708
+ var $entry = $(this.entries[i]);
709
+ if ($entry.data('jg.loaded') === true || $entry.data('jg.loaded') === 'skipped') {
710
+ var availableWidth = this.galleryWidth - 2 * this.border - (
711
+ (this.buildingRow.entriesBuff.length - 1) * this.settings.margins);
712
+ var imgAspectRatio = $entry.data('jg.width') / $entry.data('jg.height');
713
+ if (availableWidth / (this.buildingRow.aspectRatio + imgAspectRatio) < this.settings.rowHeight) {
714
+ this.flushRow(false);
715
+ if(++this.yield.flushed >= this.yield.every) {
716
+ this.startImgAnalyzer(isForResize);
717
+ return;
718
+ }
719
+ }
720
+
721
+ this.buildingRow.entriesBuff.push($entry);
722
+ this.buildingRow.aspectRatio += imgAspectRatio;
723
+ this.buildingRow.width += imgAspectRatio * this.settings.rowHeight;
724
+ this.lastAnalyzedIndex = i;
725
+
726
+ } else if ($entry.data('jg.loaded') !== 'error') {
727
+ return;
728
+ }
729
+ }
730
+
731
+ // Last row flush (the row is not full)
732
+ if (this.buildingRow.entriesBuff.length > 0) this.flushRow(true);
733
+
734
+ if (this.isSpinnerActive()) {
735
+ this.stopLoadingSpinnerAnimation();
736
+ }
737
+
738
+ /* Stop, if there is, the timeout to start the analyzeImages.
739
+ This is because an image can be set loaded, and the timeout can be set,
740
+ but this image can be analyzed yet.
741
+ */
742
+ this.stopImgAnalyzerStarter();
743
+
744
+ //On complete callback
745
+ this.$gallery.trigger(isForResize ? 'jg.resize' : 'jg.complete');
746
+ this.$gallery.height(this.galleryHeightToSet);
747
+ };
748
+
749
+ /**
750
+ * Stops any ImgAnalyzer starter (that has an assigned timeout)
751
+ */
752
+ JustifiedGallery.prototype.stopImgAnalyzerStarter = function () {
753
+ this.yield.flushed = 0;
754
+ if (this.imgAnalyzerTimeout !== null) clearTimeout(this.imgAnalyzerTimeout);
755
+ };
756
+
757
+ /**
758
+ * Starts the image analyzer. It is not immediately called to let the browser to update the view
759
+ *
760
+ * @param isForResize specifies if the image analyzer must be called for resizing or not
761
+ */
762
+ JustifiedGallery.prototype.startImgAnalyzer = function (isForResize) {
763
+ var that = this;
764
+ this.stopImgAnalyzerStarter();
765
+ this.imgAnalyzerTimeout = setTimeout(function () {
766
+ that.analyzeImages(isForResize);
767
+ }, 0.001); // we can't start it immediately due to a IE different behaviour
768
+ };
769
+
770
+ /**
771
+ * Checks if the image is loaded or not using another image object. We cannot use the 'complete' image property,
772
+ * because some browsers, with a 404 set complete = true.
773
+ *
774
+ * @param imageSrc the image src to load
775
+ * @param onLoad callback that is called when the image has been loaded
776
+ * @param onError callback that is called in case of an error
777
+ */
778
+ JustifiedGallery.prototype.onImageEvent = function (imageSrc, onLoad, onError) {
779
+ if (!onLoad && !onError) return;
780
+
781
+ var memImage = new Image();
782
+ var $memImage = $(memImage);
783
+ if (onLoad) {
784
+ $memImage.one('load', function () {
785
+ $memImage.off('load error');
786
+ onLoad(memImage);
787
+ });
788
+ }
789
+ if (onError) {
790
+ $memImage.one('error', function() {
791
+ $memImage.off('load error');
792
+ onError(memImage);
793
+ });
794
+ }
795
+ memImage.src = imageSrc;
796
+ };
797
+
798
+ /**
799
+ * Init of Justified Gallery controlled
800
+ * It analyzes all the entries starting theirs loading and calling the image analyzer (that works with loaded images)
801
+ */
802
+ JustifiedGallery.prototype.init = function () {
803
+ var imagesToLoad = false, skippedImages = false, that = this;
804
+ $.each(this.entries, function (index, entry) {
805
+ var $entry = $(entry);
806
+ var $image = that.imgFromEntry($entry);
807
+
808
+ $entry.addClass('jg-entry');
809
+
810
+ if ($entry.data('jg.loaded') !== true && $entry.data('jg.loaded') !== 'skipped') {
811
+
812
+ // Link Rel global overwrite
813
+ if (that.settings.rel !== null) $entry.attr('rel', that.settings.rel);
814
+
815
+ // Link Target global overwrite
816
+ if (that.settings.target !== null) $entry.attr('target', that.settings.target);
817
+
818
+ if ($image !== null) {
819
+
820
+ // Image src
821
+ var imageSrc = that.extractImgSrcFromImage($image);
822
+ $image.attr('src', imageSrc);
823
+
824
+ /* If we have the height and the width, we don't wait that the image is loaded, but we start directly
825
+ * with the justification */
826
+ if (that.settings.waitThumbnailsLoad === false) {
827
+ var width = parseFloat($image.attr('width'));
828
+ var height = parseFloat($image.attr('height'));
829
+ if (!isNaN(width) && !isNaN(height)) {
830
+ $entry.data('jg.width', width);
831
+ $entry.data('jg.height', height);
832
+ $entry.data('jg.loaded', 'skipped');
833
+ skippedImages = true;
834
+ that.startImgAnalyzer(false);
835
+ return true; // continue
836
+ }
837
+ }
838
+
839
+ $entry.data('jg.loaded', false);
840
+ imagesToLoad = true;
841
+
842
+ // Spinner start
843
+ if (!that.isSpinnerActive()) that.startLoadingSpinnerAnimation();
844
+
845
+ that.onImageEvent(imageSrc, function (loadImg) { // image loaded
846
+ $entry.data('jg.width', loadImg.width);
847
+ $entry.data('jg.height', loadImg.height);
848
+ $entry.data('jg.loaded', true);
849
+ that.startImgAnalyzer(false);
850
+ }, function () { // image load error
851
+ $entry.data('jg.loaded', 'error');
852
+ that.startImgAnalyzer(false);
853
+ });
854
+
855
+ } else {
856
+ $entry.data('jg.loaded', true);
857
+ $entry.data('jg.width', $entry.width() | parseFloat($entry.css('width')) | 1);
858
+ $entry.data('jg.height', $entry.height() | parseFloat($entry.css('height')) | 1);
859
+ }
860
+
861
+ }
862
+
863
+ });
864
+
865
+ if (!imagesToLoad && !skippedImages) this.startImgAnalyzer(false);
866
+ this.checkWidth();
867
+ };
868
+
869
+ /**
870
+ * Checks that it is a valid number. If a string is passed it is converted to a number
871
+ *
872
+ * @param settingContainer the object that contains the setting (to allow the conversion)
873
+ * @param settingName the setting name
874
+ */
875
+ JustifiedGallery.prototype.checkOrConvertNumber = function (settingContainer, settingName) {
876
+ if ($.type(settingContainer[settingName]) === 'string') {
877
+ settingContainer[settingName] = parseFloat(settingContainer[settingName]);
878
+ }
879
+
880
+ if ($.type(settingContainer[settingName]) === 'number') {
881
+ if (isNaN(settingContainer[settingName])) throw 'invalid number for ' + settingName;
882
+ } else {
883
+ throw settingName + ' must be a number';
884
+ }
885
+ };
886
+
887
+ /**
888
+ * Checks the sizeRangeSuffixes and, if necessary, converts
889
+ * its keys from string (e.g. old settings with 'lt100') to int.
890
+ */
891
+ JustifiedGallery.prototype.checkSizeRangesSuffixes = function () {
892
+ if ($.type(this.settings.sizeRangeSuffixes) !== 'object') {
893
+ throw 'sizeRangeSuffixes must be defined and must be an object';
894
+ }
895
+
896
+ var suffixRanges = [];
897
+ for (var rangeIdx in this.settings.sizeRangeSuffixes) {
898
+ if (this.settings.sizeRangeSuffixes.hasOwnProperty(rangeIdx)) suffixRanges.push(rangeIdx);
899
+ }
900
+
901
+ var newSizeRngSuffixes = {0: ''};
902
+ for (var i = 0; i < suffixRanges.length; i++) {
903
+ if ($.type(suffixRanges[i]) === 'string') {
904
+ try {
905
+ var numIdx = parseInt(suffixRanges[i].replace(/^[a-z]+/, ''), 10);
906
+ newSizeRngSuffixes[numIdx] = this.settings.sizeRangeSuffixes[suffixRanges[i]];
907
+ } catch (e) {
908
+ throw 'sizeRangeSuffixes keys must contains correct numbers (' + e + ')';
909
+ }
910
+ } else {
911
+ newSizeRngSuffixes[suffixRanges[i]] = this.settings.sizeRangeSuffixes[suffixRanges[i]];
912
+ }
913
+ }
914
+
915
+ this.settings.sizeRangeSuffixes = newSizeRngSuffixes;
916
+ };
917
+
918
+ /**
919
+ * check and convert the maxRowHeight setting
920
+ */
921
+ JustifiedGallery.prototype.retrieveMaxRowHeight = function () {
922
+ var newMaxRowHeight = { };
923
+
924
+ if ($.type(this.settings.maxRowHeight) === 'string') {
925
+ if (this.settings.maxRowHeight.match(/^[0-9]+%$/)) {
926
+ newMaxRowHeight.value = parseFloat(this.settings.maxRowHeight.match(/^([0-9]+)%$/)[1]) / 100;
927
+ newMaxRowHeight.isPercentage = false;
928
+ } else {
929
+ newMaxRowHeight.value = parseFloat(this.settings.maxRowHeight);
930
+ newMaxRowHeight.isPercentage = true;
931
+ }
932
+ } else if ($.type(this.settings.maxRowHeight) === 'number') {
933
+ newMaxRowHeight.value = this.settings.maxRowHeight;
934
+ newMaxRowHeight.isPercentage = false;
935
+ } else if (this.settings.maxRowHeight === false ||
936
+ this.settings.maxRowHeight === null ||
937
+ typeof this.settings.maxRowHeight === 'undefined') {
938
+ return null;
939
+ } else {
940
+ throw 'maxRowHeight must be a number or a percentage';
941
+ }
942
+
943
+ // check if the converted value is not a number
944
+ if (isNaN(newMaxRowHeight.value)) throw 'invalid number for maxRowHeight';
945
+
946
+ // check values
947
+ if (newMaxRowHeight.isPercentage) {
948
+ if (newMaxRowHeight.value < 100) newMaxRowHeight.value = 100;
949
+ }
950
+
951
+ return newMaxRowHeight;
952
+ };
953
+
954
+ /**
955
+ * Checks the settings
956
+ */
957
+ JustifiedGallery.prototype.checkSettings = function () {
958
+ this.checkSizeRangesSuffixes();
959
+
960
+ this.checkOrConvertNumber(this.settings, 'rowHeight');
961
+ this.checkOrConvertNumber(this.settings, 'margins');
962
+ this.checkOrConvertNumber(this.settings, 'border');
963
+
964
+ var lastRowModes = [
965
+ 'justify',
966
+ 'nojustify',
967
+ 'left',
968
+ 'center',
969
+ 'right',
970
+ 'hide'
971
+ ];
972
+ if (lastRowModes.indexOf(this.settings.lastRow) === -1) {
973
+ throw 'lastRow must be one of: ' + lastRowModes.join(', ');
974
+ }
975
+
976
+ this.checkOrConvertNumber(this.settings, 'justifyThreshold');
977
+ if (this.settings.justifyThreshold < 0 || this.settings.justifyThreshold > 1) {
978
+ throw 'justifyThreshold must be in the interval [0,1]';
979
+ }
980
+ if ($.type(this.settings.cssAnimation) !== 'boolean') {
981
+ throw 'cssAnimation must be a boolean';
982
+ }
983
+
984
+ if ($.type(this.settings.captions) !== 'boolean') throw 'captions must be a boolean';
985
+ this.checkOrConvertNumber(this.settings.captionSettings, 'animationDuration');
986
+
987
+ this.checkOrConvertNumber(this.settings.captionSettings, 'visibleOpacity');
988
+ if (this.settings.captionSettings.visibleOpacity < 0 ||
989
+ this.settings.captionSettings.visibleOpacity > 1) {
990
+ throw 'captionSettings.visibleOpacity must be in the interval [0, 1]';
991
+ }
992
+
993
+ this.checkOrConvertNumber(this.settings.captionSettings, 'nonVisibleOpacity');
994
+ if (this.settings.captionSettings.nonVisibleOpacity < 0 ||
995
+ this.settings.captionSettings.nonVisibleOpacity > 1) {
996
+ throw 'captionSettings.nonVisibleOpacity must be in the interval [0, 1]';
997
+ }
998
+
999
+ this.checkOrConvertNumber(this.settings, 'imagesAnimationDuration');
1000
+ this.checkOrConvertNumber(this.settings, 'refreshTime');
1001
+ this.checkOrConvertNumber(this.settings, 'refreshSensitivity');
1002
+ if ($.type(this.settings.randomize) !== 'boolean') throw 'randomize must be a boolean';
1003
+ if ($.type(this.settings.selector) !== 'string') throw 'selector must be a string';
1004
+
1005
+ if (this.settings.sort !== false && !$.isFunction(this.settings.sort)) {
1006
+ throw 'sort must be false or a comparison function';
1007
+ }
1008
+
1009
+ if (this.settings.filter !== false && !$.isFunction(this.settings.filter) &&
1010
+ $.type(this.settings.filter) !== 'string') {
1011
+ throw 'filter must be false, a string or a filter function';
1012
+ }
1013
+ };
1014
+
1015
+ /**
1016
+ * It brings all the indexes from the sizeRangeSuffixes and it orders them. They are then sorted and returned.
1017
+ * @returns {Array} sorted suffix ranges
1018
+ */
1019
+ JustifiedGallery.prototype.retrieveSuffixRanges = function () {
1020
+ var suffixRanges = [];
1021
+ for (var rangeIdx in this.settings.sizeRangeSuffixes) {
1022
+ if (this.settings.sizeRangeSuffixes.hasOwnProperty(rangeIdx)) suffixRanges.push(parseInt(rangeIdx, 10));
1023
+ }
1024
+ suffixRanges.sort(function (a, b) { return a > b ? 1 : a < b ? -1 : 0; });
1025
+ return suffixRanges;
1026
+ };
1027
+
1028
+ /**
1029
+ * Update the existing settings only changing some of them
1030
+ *
1031
+ * @param newSettings the new settings (or a subgroup of them)
1032
+ */
1033
+ JustifiedGallery.prototype.updateSettings = function (newSettings) {
1034
+ // In this case Justified Gallery has been called again changing only some options
1035
+ this.settings = $.extend({}, this.settings, newSettings);
1036
+ this.checkSettings();
1037
+
1038
+ // As reported in the settings: negative value = same as margins, 0 = disabled
1039
+ this.border = this.settings.border >= 0 ? this.settings.border : this.settings.margins;
1040
+
1041
+ this.maxRowHeight = this.retrieveMaxRowHeight();
1042
+ this.suffixRanges = this.retrieveSuffixRanges();
1043
+ };
1044
+
1045
+ /**
1046
+ * Justified Gallery plugin for jQuery
1047
+ *
1048
+ * Events
1049
+ * - jg.complete : called when all the gallery has been created
1050
+ * - jg.resize : called when the gallery has been resized
1051
+ * - jg.rowflush : when a new row appears
1052
+ *
1053
+ * @param arg the action (or the settings) passed when the plugin is called
1054
+ * @returns {*} the object itself
1055
+ */
1056
+ $.fn.justifiedGallery = function (arg) {
1057
+ return this.each(function (index, gallery) {
1058
+
1059
+ var $gallery = $(gallery);
1060
+ $gallery.addClass('justified-gallery');
1061
+
1062
+ var controller = $gallery.data('jg.controller');
1063
+ if (typeof controller === 'undefined') {
1064
+ // Create controller and assign it to the object data
1065
+ if (typeof arg !== 'undefined' && arg !== null && $.type(arg) !== 'object') {
1066
+ if (arg === 'destroy') return; // Just a call to an unexisting object
1067
+ throw 'The argument must be an object';
1068
+ }
1069
+ controller = new JustifiedGallery($gallery, $.extend({}, $.fn.justifiedGallery.defaults, arg));
1070
+ $gallery.data('jg.controller', controller);
1071
+ } else if (arg === 'norewind') {
1072
+ // In this case we don't rewind: we analyze only the latest images (e.g. to complete the last unfinished row
1073
+ // ... left to be more readable
1074
+ } else if (arg === 'destroy') {
1075
+ controller.destroy();
1076
+ return;
1077
+ } else {
1078
+ // In this case Justified Gallery has been called again changing only some options
1079
+ controller.updateSettings(arg);
1080
+ controller.rewind();
1081
+ }
1082
+
1083
+ // Update the entries list
1084
+ if (!controller.updateEntries(arg === 'norewind')) return;
1085
+
1086
+ // Init justified gallery
1087
+ controller.init();
1088
+
1089
+ });
1090
+ };
1091
+
1092
+ // Default options
1093
+ $.fn.justifiedGallery.defaults = {
1094
+ sizeRangeSuffixes: { }, /* e.g. Flickr configuration
1095
+ {
1096
+ 100: '_t', // used when longest is less than 100px
1097
+ 240: '_m', // used when longest is between 101px and 240px
1098
+ 320: '_n', // ...
1099
+ 500: '',
1100
+ 640: '_z',
1101
+ 1024: '_b' // used as else case because it is the last
1102
+ }
1103
+ */
1104
+ thumbnailPath: undefined, /* If defined, sizeRangeSuffixes is not used, and this function is used to determine the
1105
+ path relative to a specific thumbnail size. The function should accept respectively three arguments:
1106
+ current path, width and height */
1107
+ rowHeight: 120,
1108
+ maxRowHeight: false, // false or negative value to deactivate. Positive number to express the value in pixels,
1109
+ // A string '[0-9]+%' to express in percentage (e.g. 300% means that the row height
1110
+ // can't exceed 3 * rowHeight)
1111
+ margins: 1,
1112
+ border: -1, // negative value = same as margins, 0 = disabled, any other value to set the border
1113
+
1114
+ lastRow: 'nojustify', // … which is the same as 'left', or can be 'justify', 'center', 'right' or 'hide'
1115
+
1116
+ justifyThreshold: 0.90, /* if row width / available space > 0.90 it will be always justified
1117
+ * (i.e. lastRow setting is not considered) */
1118
+ waitThumbnailsLoad: true,
1119
+ captions: true,
1120
+ cssAnimation: true,
1121
+ imagesAnimationDuration: 500, // ignored with css animations
1122
+ captionSettings: { // ignored with css animations
1123
+ animationDuration: 500,
1124
+ visibleOpacity: 0.7,
1125
+ nonVisibleOpacity: 0.0
1126
+ },
1127
+ rel: null, // rewrite the rel of each analyzed links
1128
+ target: null, // rewrite the target of all links
1129
+ extension: /\.[^.\\/]+$/, // regexp to capture the extension of an image
1130
+ refreshTime: 200, // time interval (in ms) to check if the page changes its width
1131
+ refreshSensitivity: 0, // change in width allowed (in px) without re-building the gallery
1132
+ randomize: false,
1133
+ sort: false, /*
1134
+ - false: to do not sort
1135
+ - function: to sort them using the function as comparator (see Array.prototype.sort())
1136
+ */
1137
+ filter: false, /*
1138
+ - false, null or undefined: for a disabled filter
1139
+ - a string: an entry is kept if entry.is(filter string) returns true
1140
+ see jQuery's .is() function for further information
1141
+ - a function: invoked with arguments (entry, index, array). Return true to keep the entry, false otherwise.
1142
+ It follows the specifications of the Array.prototype.filter() function of JavaScript.
1143
+ */
1144
+ selector: 'a, div:not(.spinner)' // The selector that is used to know what are the entries of the gallery
1145
+ };
1146
+
1147
+ }(jQuery));