j1-template 2020.0.11 → 2020.0.12

Sign up to get free protection for your applications and to get access to all the features.
Files changed (306) hide show
  1. checksums.yaml +4 -4
  2. data/_includes/themes/j1/blocks/ads/ad.html +64 -0
  3. data/_includes/themes/j1/blocks/footer/boxes/links_box.proc +1 -1
  4. data/_includes/themes/j1/layouts/content_generator_blog_archive.html +3 -2
  5. data/_includes/themes/j1/layouts/content_generator_collection.html +3 -1
  6. data/_includes/themes/j1/layouts/content_generator_page.html +3 -1
  7. data/_includes/themes/j1/layouts/content_generator_post.html +12 -11
  8. data/_includes/themes/j1/layouts/layout_metadata_generator.html +141 -4
  9. data/_includes/themes/j1/modules/connectors/ad/custom-provider.html +6 -9
  10. data/_includes/themes/j1/modules/connectors/ad/google-adsense.html +9 -6
  11. data/_includes/themes/j1/modules/connectors/ads +3 -6
  12. data/_includes/themes/j1/modules/navigator/procedures/topsearch.proc +3 -3
  13. data/_includes/themes/j1/procedures/posts/collate_timeline.proc +7 -7
  14. data/assets/data/authclient.html +19 -8
  15. data/assets/data/banner.html +24 -23
  16. data/assets/data/carousel.json +31 -21
  17. data/assets/data/cookie_consent.html +81 -52
  18. data/assets/data/footer.html +15 -5
  19. data/assets/data/galleries.json +91 -81
  20. data/assets/data/gallery_customizer.html +20 -10
  21. data/assets/data/mdi_icons.json +56 -1
  22. data/assets/data/menu.html +14 -6
  23. data/assets/data/mmenu.html +47 -93
  24. data/assets/data/mmenu_sidebar.html +41 -44
  25. data/assets/data/mmenu_toc.html +20 -3
  26. data/assets/data/panel.html +35 -22
  27. data/assets/data/quicklinks.html +15 -3
  28. data/assets/data/{search.yml → search.json} +36 -28
  29. data/assets/data/ssm.html +14 -2
  30. data/assets/data/themes.json +17 -6
  31. data/assets/data/twa_v1.json +7035 -6978
  32. data/assets/themes/j1/adapter/js/algolia.js +13 -2
  33. data/assets/themes/j1/adapter/js/attic.js +35 -15
  34. data/assets/themes/j1/adapter/js/carousel.js +12 -2
  35. data/assets/themes/j1/adapter/js/clipboard.js +232 -0
  36. data/assets/themes/j1/adapter/js/cookie_consent.js +13 -4
  37. data/assets/themes/j1/adapter/js/framer.js +10 -2
  38. data/assets/themes/j1/adapter/js/gallery_customizer.js +11 -2
  39. data/assets/themes/j1/adapter/js/j1.js +300 -681
  40. data/assets/themes/j1/adapter/js/{justified_gallery.js → jf_gallery.js} +14 -5
  41. data/assets/themes/j1/adapter/js/lightbox.js +11 -2
  42. data/assets/themes/j1/adapter/js/logger.js +11 -2
  43. data/assets/themes/j1/adapter/js/mdb.js +167 -0
  44. data/assets/themes/j1/adapter/js/mmenu.js +13 -3
  45. data/assets/themes/j1/adapter/js/navigator.js +73 -74
  46. data/assets/themes/j1/adapter/js/searcher.js +12 -2
  47. data/assets/themes/j1/adapter/js/ssm.js +33 -9
  48. data/assets/themes/j1/adapter/js/themer.js +26 -51
  49. data/assets/themes/j1/adapter/js/toccer.js +19 -12
  50. data/assets/themes/j1/core/css/theme_extensions.css +85 -1241
  51. data/assets/themes/j1/core/css/theme_extensions.min.css +1 -1
  52. data/assets/themes/j1/core/css/uno.css +110 -1256
  53. data/assets/themes/j1/core/css/uno.min.css +1 -1
  54. data/assets/themes/j1/core/css/vendor.css +1 -55
  55. data/assets/themes/j1/core/css/vendor.min.css +1 -1
  56. data/assets/themes/j1/core/js/template.js +12 -82
  57. data/assets/themes/j1/core/js/template.js.map +1 -1
  58. data/assets/themes/j1/core/js/template.min.js +1 -1
  59. data/assets/themes/j1/extensions/bsDatepicker/css/datepicker.css +203 -0
  60. data/assets/themes/j1/extensions/bsDatepicker/css/theme/uno.css +235 -0
  61. data/assets/themes/j1/extensions/bsDatepicker/js/datepicker.js +509 -0
  62. data/assets/themes/j1/extensions/bsDatepicker/less/datepicker.less +122 -0
  63. data/assets/themes/j1/extensions/bsThemeSwitcher/js/switcher.js +425 -0
  64. data/assets/themes/j1/extensions/bsThemeSwitcher/js/switcher.min.js +20 -0
  65. data/assets/themes/j1/extensions/clipboard/LICENSE +20 -0
  66. data/assets/themes/j1/extensions/clipboard/css/theme/uno.css +52 -0
  67. data/assets/themes/j1/extensions/clipboard/css/theme/uno.min.css +52 -0
  68. data/assets/themes/j1/extensions/clipboard/js/clipboard.js +975 -0
  69. data/assets/themes/j1/extensions/clipboard/js/clipboard.min.js +7 -0
  70. data/assets/themes/j1/extensions/{iconify → iconifyAPI}/js/iconify.min.js +0 -0
  71. data/assets/themes/j1/extensions/iframeResizer/LICENSE +21 -0
  72. data/assets/themes/j1/extensions/iframeResizer/examples/frame.absolute.html +127 -0
  73. data/assets/themes/j1/extensions/iframeResizer/examples/frame.content.html +157 -0
  74. data/assets/themes/j1/extensions/iframeResizer/examples/frame.hover.html +68 -0
  75. data/assets/themes/j1/extensions/iframeResizer/examples/frame.nested.html +100 -0
  76. data/assets/themes/j1/extensions/iframeResizer/examples/frame.textarea.html +45 -0
  77. data/assets/themes/j1/extensions/iframeResizer/examples/frame.tolerance.html +113 -0
  78. data/assets/themes/j1/extensions/iframeResizer/examples/index.html +83 -0
  79. data/assets/themes/j1/extensions/iframeResizer/examples/two.html +88 -0
  80. data/assets/themes/j1/extensions/iframeResizer/js/client/iframeResizer.contentWindow.js +1288 -0
  81. data/assets/themes/j1/extensions/iframeResizer/js/client/iframeResizer.contentWindow.map +1 -0
  82. data/assets/themes/j1/extensions/iframeResizer/js/client/iframeResizer.contentWindow.min.js +10 -0
  83. data/assets/themes/j1/extensions/iframeResizer/js/iframeResizer.js +1390 -0
  84. data/assets/themes/j1/extensions/iframeResizer/js/iframeResizer.map +1 -0
  85. data/assets/themes/j1/extensions/iframeResizer/js/iframeResizer.min.js +9 -0
  86. data/assets/themes/j1/extensions/jqMouseWheel/README.md +76 -0
  87. data/assets/themes/j1/extensions/jqMouseWheel/js/jquery.mousewheel.js +221 -0
  88. data/assets/themes/j1/extensions/jqMouseWheel/js/jquery.mousewheel.min.js +9 -0
  89. data/assets/themes/j1/extensions/{justified_gallery → justifiedGallery}/LICENSE +0 -0
  90. data/assets/themes/j1/extensions/{justified_gallery → justifiedGallery}/README.md +0 -0
  91. data/assets/themes/j1/extensions/{justified_gallery → justifiedGallery}/_versions/v3.7.0/css/justifiedGallery.css +0 -0
  92. data/assets/themes/j1/extensions/{justified_gallery → justifiedGallery}/_versions/v3.7.0/css/justifiedGallery.min.css +0 -0
  93. data/assets/themes/j1/extensions/{justified_gallery → justifiedGallery}/_versions/v3.7.0/css/theme/uno.css +0 -0
  94. data/assets/themes/j1/extensions/{justified_gallery → justifiedGallery}/_versions/v3.7.0/js/justifiedGallery.3.7.0.js +0 -0
  95. data/assets/themes/j1/extensions/{justified_gallery → justifiedGallery}/_versions/v3.7.0/js/justifiedGallery.js +0 -0
  96. data/assets/themes/j1/extensions/{justified_gallery → justifiedGallery}/_versions/v3.7.0/js/justifiedGallery.min.js +0 -0
  97. data/assets/themes/j1/extensions/{justified_gallery → justifiedGallery}/_versions/v3.7.0/less/.csslintrc +0 -0
  98. data/assets/themes/j1/extensions/{justified_gallery → justifiedGallery}/_versions/v3.7.0/less/justifiedGallery.less +0 -0
  99. data/assets/themes/j1/extensions/{justified_gallery → justifiedGallery}/_versions/v4.0.0/css/justifiedGallery.css +0 -0
  100. data/assets/themes/j1/extensions/{justified_gallery → justifiedGallery}/_versions/v4.0.0/css/justifiedGallery.min.css +0 -0
  101. data/assets/themes/j1/extensions/{justified_gallery → justifiedGallery}/_versions/v4.0.0/css/theme/uno.css +0 -0
  102. data/assets/themes/j1/extensions/{justified_gallery → justifiedGallery}/_versions/v4.0.0/js/jquery.justifiedGallery.js +0 -0
  103. data/assets/themes/j1/extensions/{justified_gallery → justifiedGallery}/_versions/v4.0.0/js/jquery.justifiedGallery.min.js +0 -0
  104. data/assets/themes/j1/extensions/{justified_gallery → justifiedGallery}/css/justifiedGallery.css +0 -0
  105. data/assets/themes/j1/extensions/{justified_gallery → justifiedGallery}/css/justifiedGallery.min.css +0 -0
  106. data/assets/themes/j1/extensions/{justified_gallery → justifiedGallery}/css/theme/uno.css +0 -0
  107. data/assets/themes/j1/extensions/{justified_gallery → justifiedGallery}/css/theme/uno.min.css +0 -0
  108. data/assets/themes/j1/extensions/{justified_gallery → justifiedGallery}/js/justifiedGallery.js +0 -0
  109. data/assets/themes/j1/extensions/{justified_gallery → justifiedGallery}/js/justifiedGallery.min.js +0 -0
  110. data/assets/themes/j1/extensions/{light_gallery → lightGallery}/css/core/lg-fb-comment-box.css +0 -0
  111. data/assets/themes/j1/extensions/{light_gallery → lightGallery}/css/core/lg-fb-comment-box.min.css +0 -0
  112. data/assets/themes/j1/extensions/{light_gallery → lightGallery}/css/core/lg-transitions.css +0 -0
  113. data/assets/themes/j1/extensions/{light_gallery → lightGallery}/css/core/lg-transitions.min.css +0 -0
  114. data/assets/themes/j1/extensions/{light_gallery → lightGallery}/css/core/lightgallery.css +0 -0
  115. data/assets/themes/j1/extensions/{light_gallery → lightGallery}/css/core/lightgallery.min.css +0 -0
  116. data/assets/themes/j1/extensions/{light_gallery → lightGallery}/css/fonts/lg.eot +0 -0
  117. data/assets/themes/j1/extensions/{light_gallery → lightGallery}/css/fonts/lg.svg +0 -0
  118. data/assets/themes/j1/extensions/{light_gallery → lightGallery}/css/fonts/lg.ttf +0 -0
  119. data/assets/themes/j1/extensions/{light_gallery → lightGallery}/css/fonts/lg.woff +0 -0
  120. data/assets/themes/j1/extensions/{light_gallery → lightGallery}/css/img/loading.gif +0 -0
  121. data/assets/themes/j1/extensions/{light_gallery → lightGallery}/css/img/video-play.png +0 -0
  122. data/assets/themes/j1/extensions/{light_gallery → lightGallery}/css/img/vimeo-play.png +0 -0
  123. data/assets/themes/j1/extensions/{light_gallery → lightGallery}/css/img/youtube-play.png +0 -0
  124. data/assets/themes/j1/extensions/{light_gallery → lightGallery}/css/themes/icons/animation-w.png +0 -0
  125. data/assets/themes/j1/extensions/{light_gallery → lightGallery}/css/themes/icons/customize-w.png +0 -0
  126. data/assets/themes/j1/extensions/{light_gallery → lightGallery}/css/themes/icons/dynamic-w.png +0 -0
  127. data/assets/themes/j1/extensions/{light_gallery → lightGallery}/css/themes/icons/facebook-icon.svg +0 -0
  128. data/assets/themes/j1/extensions/{light_gallery → lightGallery}/css/themes/icons/googleplus-icon.svg +0 -0
  129. data/assets/themes/j1/extensions/{light_gallery → lightGallery}/css/themes/icons/html5-w.png +0 -0
  130. data/assets/themes/j1/extensions/{light_gallery → lightGallery}/css/themes/icons/linked-in.png +0 -0
  131. data/assets/themes/j1/extensions/{light_gallery → lightGallery}/css/themes/icons/module-w.png +0 -0
  132. data/assets/themes/j1/extensions/{light_gallery → lightGallery}/css/themes/icons/play-button.png +0 -0
  133. data/assets/themes/j1/extensions/{light_gallery → lightGallery}/css/themes/icons/responsive-w.png +0 -0
  134. data/assets/themes/j1/extensions/{light_gallery → lightGallery}/css/themes/icons/thumb-w.png +0 -0
  135. data/assets/themes/j1/extensions/{light_gallery → lightGallery}/css/themes/icons/touch-w.png +0 -0
  136. data/assets/themes/j1/extensions/{light_gallery → lightGallery}/css/themes/icons/twitter-icon.svg +0 -0
  137. data/assets/themes/j1/extensions/{light_gallery → lightGallery}/css/themes/icons/twitter.png +0 -0
  138. data/assets/themes/j1/extensions/{light_gallery → lightGallery}/css/themes/icons/video1-w.png +0 -0
  139. data/assets/themes/j1/extensions/{light_gallery → lightGallery}/css/themes/icons/zoom-w.png +0 -0
  140. data/assets/themes/j1/extensions/{light_gallery → lightGallery}/css/themes/icons/zoom.png +0 -0
  141. data/assets/themes/j1/extensions/{light_gallery → lightGallery}/css/themes/uno.css +1 -1
  142. data/assets/themes/j1/extensions/{light_gallery → lightGallery}/css/themes/uno.min.css +1 -1
  143. data/assets/themes/j1/extensions/{light_gallery → lightGallery}/js/core/lightgallery.js +0 -0
  144. data/assets/themes/j1/extensions/{light_gallery → lightGallery}/js/core/lightgallery.min.js +0 -0
  145. data/assets/themes/j1/extensions/{light_gallery → lightGallery}/js/modules/j1/j1-video.js +0 -0
  146. data/assets/themes/j1/extensions/{light_gallery → lightGallery}/js/modules/j1/j1-video.min.js +0 -0
  147. data/assets/themes/j1/extensions/{light_gallery → lightGallery}/js/modules/lg-autoplay.js +0 -0
  148. data/assets/themes/j1/extensions/{light_gallery → lightGallery}/js/modules/lg-autoplay.min.js +0 -0
  149. data/assets/themes/j1/extensions/{light_gallery → lightGallery}/js/modules/lg-fullscreen.js +0 -0
  150. data/assets/themes/j1/extensions/{light_gallery → lightGallery}/js/modules/lg-fullscreen.min.js +0 -0
  151. data/assets/themes/j1/extensions/{light_gallery → lightGallery}/js/modules/lg-hash.js +0 -0
  152. data/assets/themes/j1/extensions/{light_gallery → lightGallery}/js/modules/lg-hash.min.js +0 -0
  153. data/assets/themes/j1/extensions/{light_gallery → lightGallery}/js/modules/lg-pager.js +0 -0
  154. data/assets/themes/j1/extensions/{light_gallery → lightGallery}/js/modules/lg-pager.min.js +0 -0
  155. data/assets/themes/j1/extensions/{light_gallery → lightGallery}/js/modules/lg-share.js +0 -0
  156. data/assets/themes/j1/extensions/{light_gallery → lightGallery}/js/modules/lg-share.min.js +0 -0
  157. data/assets/themes/j1/extensions/{light_gallery → lightGallery}/js/modules/lg-thumbnail.js +0 -0
  158. data/assets/themes/j1/extensions/{light_gallery → lightGallery}/js/modules/lg-thumbnail.min.js +0 -0
  159. data/assets/themes/j1/extensions/{light_gallery → lightGallery}/js/modules/lg-video.js +0 -0
  160. data/assets/themes/j1/extensions/{light_gallery → lightGallery}/js/modules/lg-video.min.js +0 -0
  161. data/assets/themes/j1/extensions/{light_gallery → lightGallery}/js/modules/lg-zoom.js +0 -0
  162. data/assets/themes/j1/extensions/{light_gallery → lightGallery}/js/modules/lg-zoom.min.js +0 -0
  163. data/assets/themes/j1/extensions/lightbox/LICENSE +22 -0
  164. data/assets/themes/j1/extensions/lightbox/css/lightbox.css +224 -0
  165. data/assets/themes/j1/extensions/lightbox/css/lightbox.min.css +21 -0
  166. data/assets/themes/j1/extensions/lightbox/css/theme/uno.css +25 -0
  167. data/assets/themes/j1/extensions/lightbox/css/theme/uno.min.css +26 -0
  168. data/{lib/starter_web/assets/images/modules/lightbox → assets/themes/j1/extensions/lightbox/images}/close.png +0 -0
  169. data/{lib/starter_web/assets/images/modules/lightbox → assets/themes/j1/extensions/lightbox/images}/loading.gif +0 -0
  170. data/{lib/starter_web/assets/images/modules/lightbox → assets/themes/j1/extensions/lightbox/images}/next.png +0 -0
  171. data/{lib/starter_web/assets/images/modules/lightbox → assets/themes/j1/extensions/lightbox/images}/prev.png +0 -0
  172. data/assets/themes/j1/extensions/lightbox/js/lightbox.js +583 -0
  173. data/assets/themes/j1/extensions/lightbox/js/lightbox.min.js +35 -0
  174. data/assets/themes/j1/extensions/mmenuLight/css/mmenu.css +392 -0
  175. data/assets/themes/j1/extensions/mmenuLight/css/mmenu.min.css +393 -0
  176. data/assets/themes/j1/extensions/mmenuLight/css/theme/uno.css +170 -0
  177. data/assets/themes/j1/extensions/mmenuLight/css/theme/uno.min.css +169 -0
  178. data/assets/themes/j1/extensions/mmenuLight/js/mmenu.js +30 -0
  179. data/assets/themes/j1/extensions/noUISlider/LICENSE +13 -0
  180. data/assets/themes/j1/extensions/noUISlider/css/nouislider.css +260 -0
  181. data/assets/themes/j1/extensions/noUISlider/css/nouislider.min.css +1 -0
  182. data/assets/themes/j1/extensions/noUISlider/js/nouislider.js +2312 -0
  183. data/assets/themes/j1/extensions/noUISlider/js/nouislider.min.js +3 -0
  184. data/assets/themes/j1/extensions/twemoji/js/LICENSE +21 -0
  185. data/assets/themes/j1/extensions/twemoji/js/picker/LICENSE +21 -0
  186. data/assets/themes/j1/extensions/twemoji/js/picker/twemoji-picker.js +21 -0
  187. data/assets/themes/j1/extensions/twemoji/js/picker/twemoji-picker.min.js +21 -0
  188. data/assets/themes/j1/extensions/twemoji/js/twemoji.js +590 -0
  189. data/assets/themes/j1/extensions/twemoji/js/twemoji.min.js +25 -0
  190. data/lib/j1/version.rb +1 -1
  191. data/lib/starter_web/Gemfile +7 -1
  192. data/lib/starter_web/_config.yml +9 -8
  193. data/lib/starter_web/_data/_defaults/resources.yml +13 -13
  194. data/lib/starter_web/_data/blocks/banner.yml +21 -29
  195. data/lib/starter_web/_data/blocks/footer.yml +10 -3
  196. data/lib/starter_web/_data/blocks/panel.yml +13 -13
  197. data/lib/starter_web/_data/layouts/default.yml +10 -0
  198. data/lib/starter_web/_data/layouts/home.yml +7 -7
  199. data/lib/starter_web/_data/layouts/page.yml +15 -16
  200. data/lib/starter_web/_data/modules/advertising.yml +48 -0
  201. data/lib/starter_web/_data/modules/attics.yml +2 -38
  202. data/lib/starter_web/_data/modules/cookie_consent.yml +3 -95
  203. data/lib/starter_web/_data/modules/defaults/attics.yml +16 -15
  204. data/lib/starter_web/_data/modules/defaults/cookie_consent.yml +75 -12
  205. data/lib/starter_web/_data/modules/defaults/jekyll_search.yml +9 -9
  206. data/lib/starter_web/_data/modules/defaults/navigator.yml +54 -20
  207. data/lib/starter_web/_data/modules/jekyll_search.yml +1 -20
  208. data/lib/starter_web/_data/modules/navigator.yml +1 -1
  209. data/lib/starter_web/_data/modules/themer.yml +2 -3
  210. data/lib/starter_web/_data/resources.yml +239 -111
  211. data/lib/starter_web/_data/template_settings.yml +87 -4
  212. data/lib/starter_web/_plugins/asciidoctor-extensions/fab-icon-inline.rb +1 -1
  213. data/lib/starter_web/_plugins/asciidoctor-extensions/fas-icon-inline.rb +2 -2
  214. data/lib/starter_web/_plugins/asciidoctor-extensions/iconify-icon-inline.rb +2 -2
  215. data/lib/starter_web/_plugins/asciidoctor-extensions/mdi-icon-inline.rb +2 -2
  216. data/lib/starter_web/_plugins/asciidoctor-extensions/twitter-emoji-inline.rb +2 -2
  217. data/lib/starter_web/_plugins/minifyJS.rb +54 -0
  218. data/lib/starter_web/_plugins/minifyJSON.rb +47 -0
  219. data/lib/starter_web/assets/images/modules/attics/admin-dashboard-bootstrap-1280x600.jpg +0 -0
  220. data/lib/starter_web/assets/images/modules/attics/alex-holyoake-1920x1280.jpg +0 -0
  221. data/lib/starter_web/assets/images/modules/attics/anaya-katlego-1920x1280.jpg +0 -0
  222. data/lib/starter_web/assets/images/modules/attics/antonella-lombardi-1920x1280.jpg +0 -0
  223. data/lib/starter_web/assets/images/modules/attics/antonino-visalli-1920x1280.jpg +0 -0
  224. data/lib/starter_web/assets/images/modules/attics/banner/library-1920x800-bw.jpg +0 -0
  225. data/lib/starter_web/assets/images/modules/attics/banner/signpost-1920x800-bw.jpg +0 -0
  226. data/lib/starter_web/assets/images/modules/attics/banner/water-journal-1280x600.jpg +0 -0
  227. data/lib/starter_web/assets/images/modules/attics/banner/write-1280x600-bw.jpg +0 -0
  228. data/lib/starter_web/assets/images/modules/attics/brandon-mowinkel-1920x1280.jpg +0 -0
  229. data/lib/starter_web/assets/images/modules/attics/building-blocks-1920x1280-bw.jpg +0 -0
  230. data/lib/starter_web/assets/images/modules/attics/cookies-1920x1200-bw.jpg +0 -0
  231. data/lib/starter_web/assets/images/modules/attics/daniel-jensen-1920x1280.jpg +0 -0
  232. data/lib/starter_web/assets/images/modules/attics/giammarco-boscaro-1920x1280.jpg +0 -0
  233. data/lib/starter_web/assets/images/modules/attics/go-up-1920x1280-bw.jpg +0 -0
  234. data/lib/starter_web/assets/images/modules/attics/ian-schneider-1920x1280.jpg +0 -0
  235. data/lib/starter_web/assets/images/modules/attics/ideas-start-here-1920x1280-bw.jpg +0 -0
  236. data/lib/starter_web/assets/images/modules/attics/jason-rosewell-1920x1280.jpg +0 -0
  237. data/lib/starter_web/assets/images/modules/attics/jessica-ruscello-1920x1280.jpg +0 -0
  238. data/lib/starter_web/assets/images/modules/attics/lianhao-1920x1280.jpg +0 -0
  239. data/lib/starter_web/assets/images/modules/attics/library-1920x1280-bw.jpg +0 -0
  240. data/lib/starter_web/assets/images/modules/attics/matthaeus-1920x1280.jpg +0 -0
  241. data/lib/starter_web/assets/images/modules/attics/nousnou-iwasaki-1920x1280.jpg +0 -0
  242. data/lib/starter_web/assets/images/modules/attics/premium-1920x1280-bw.jpg +0 -0
  243. data/lib/starter_web/assets/images/modules/attics/robert-v-ruggiero-1920x1280.jpg +0 -0
  244. data/lib/starter_web/assets/images/modules/attics/romain-vignes-1920x1280.jpg +0 -0
  245. data/lib/starter_web/assets/images/modules/attics/runner-1920x1200-bw.jpg +0 -0
  246. data/lib/starter_web/assets/images/modules/attics/spider-web-1920x1200-bw.jpg +0 -0
  247. data/lib/starter_web/assets/images/modules/attics/the-place-1920x1280-bw.jpg +0 -0
  248. data/lib/starter_web/assets/images/modules/attics/welcome-1920x1280-bw.jpg +0 -0
  249. data/lib/starter_web/assets/images/modules/carousel/cats/cat-1.jpg +0 -0
  250. data/lib/starter_web/assets/images/modules/carousel/mega_cities/andreas-brucker_b.jpg +0 -0
  251. data/lib/starter_web/assets/images/modules/carousel/mega_cities/denys-nevozhai-1_b.jpg +0 -0
  252. data/lib/starter_web/assets/images/modules/carousel/mega_cities/denys-nevozhai-2_b.jpg +0 -0
  253. data/lib/starter_web/assets/images/modules/carousel/mega_cities/luca-bravo_b.jpg +0 -0
  254. data/lib/starter_web/assets/images/modules/carousel/mega_cities/thomas-tucker_b.jpg +0 -0
  255. data/lib/starter_web/assets/images/modules/gallery/mega_cities/banter-snaps_b.jpg +0 -0
  256. data/lib/starter_web/assets/images/modules/gallery/mega_cities/denys-nevozhai-1_b.jpg +0 -0
  257. data/lib/starter_web/assets/images/modules/gallery/mega_cities/denys-nevozhai-2-bw.jpg +0 -0
  258. data/lib/starter_web/assets/images/modules/gallery/mega_cities/denys-nevozhai-2_b.jpg +0 -0
  259. data/lib/starter_web/assets/images/modules/gallery/mega_cities/emmad-mazhari_b.jpg +0 -0
  260. data/lib/starter_web/assets/images/modules/gallery/mega_cities/ethan-brooke_b.jpg +0 -0
  261. data/lib/starter_web/assets/images/modules/gallery/mega_cities/federico-rizzarelli_b.jpg +0 -0
  262. data/lib/starter_web/assets/images/modules/gallery/mega_cities/gints-gailis_b.jpg +0 -0
  263. data/lib/starter_web/assets/images/modules/gallery/mega_cities/johan-mouchet_b.jpg +0 -0
  264. data/lib/starter_web/assets/images/modules/gallery/mega_cities/luca-bravo_b.jpg +0 -0
  265. data/lib/starter_web/assets/images/modules/gallery/mega_cities/oskars-sylwan_b.jpg +0 -0
  266. data/lib/starter_web/assets/images/modules/gallery/mega_cities/steven-diaz_b.jpg +0 -0
  267. data/lib/starter_web/assets/images/modules/gallery/mega_cities/thomas-tucker-bw.jpg +0 -0
  268. data/lib/starter_web/assets/images/modules/gallery/mega_cities/thomas-tucker_b.jpg +0 -0
  269. data/lib/starter_web/index.html +9 -8
  270. data/lib/starter_web/package.json +1 -1
  271. data/lib/starter_web/pages/public/learn/examples/floating_ad.adoc +221 -0
  272. data/lib/starter_web/pages/public/learn/examples/floating_div.adoc +33 -1
  273. data/lib/starter_web/pages/public/learn/roundtrip/000_includes/documents/419_advanced_modals_html.asciidoc +5 -5
  274. data/lib/starter_web/pages/public/learn/roundtrip/100_present_images.adoc +2 -2
  275. data/lib/starter_web/pages/public/learn/roundtrip/200_typography.adoc +2 -1
  276. data/lib/starter_web/pages/public/learn/roundtrip/300_icon_fonts.adoc +35 -44
  277. data/lib/starter_web/pages/public/learn/roundtrip/420_responsive_tables_extensions.adoc +39 -39
  278. data/lib/starter_web/pages/public/learn/whats_up.adoc +1 -0
  279. data/lib/starter_web/pages/public/previewer/bootstrap_theme.adoc +3 -5
  280. data/lib/starter_web/pages/public/previewer/iframer.adoc +15 -14
  281. data/lib/starter_web/pages/public/previewer/justified_gallery.html +1 -1
  282. data/lib/starter_web/pages/public/previewer/mdb_preview/mdb_previewer.adoc +2 -2
  283. data/lib/starter_web/pages/public/previewer/twitter_emoji_preview.adoc +2 -2
  284. data/lib/starter_web/utilsrv/_defaults/package.json +1 -1
  285. data/lib/starter_web/utilsrv/package.json +1 -1
  286. metadata +143 -103
  287. data/assets/data/colors.json +0 -42
  288. data/assets/data/font_sizes.json +0 -42
  289. data/assets/data/messages.yml +0 -131
  290. data/assets/themes/j1/extensions/iframe_resizer/examples/frame.absolute.html +0 -86
  291. data/assets/themes/j1/extensions/iframe_resizer/examples/frame.content.html +0 -58
  292. data/assets/themes/j1/extensions/iframe_resizer/examples/frame.hover.html +0 -51
  293. data/assets/themes/j1/extensions/iframe_resizer/examples/frame.nested.html +0 -68
  294. data/assets/themes/j1/extensions/iframe_resizer/examples/frame.textarea.html +0 -46
  295. data/assets/themes/j1/extensions/iframe_resizer/examples/frame.tolerance.html +0 -79
  296. data/assets/themes/j1/extensions/iframe_resizer/examples/index.html +0 -70
  297. data/assets/themes/j1/extensions/iframe_resizer/examples/two.html +0 -71
  298. data/assets/themes/j1/extensions/iframe_resizer/js/client/iframeResizer.contentWindow.js +0 -1104
  299. data/assets/themes/j1/extensions/iframe_resizer/js/client/iframeResizer.contentWindow.map +0 -1
  300. data/assets/themes/j1/extensions/iframe_resizer/js/client/iframeResizer.contentWindow.min.js +0 -10
  301. data/assets/themes/j1/extensions/log4javascript/log4javascript.js +0 -5826
  302. data/assets/themes/j1/extensions/log4javascript/log4javascript.min.js +0 -266
  303. data/lib/starter_web/assets/images/modules/attics/admin-dashboard-bootstrap-1280x600.png +0 -0
  304. data/lib/starter_web/assets/images/modules/attics/mae-mu-Vf9gbsLZyf0-unsplash.jpg +0 -0
  305. data/lib/starter_web/assets/images/modules/attics/mae-mue-1920x1280-v.jpg +0 -0
  306. data/lib/starter_web/assets/images/modules/attics/mae-mue-1920x1280.jpg +0 -0
@@ -0,0 +1,22 @@
1
+
2
+ The MIT License (MIT)
3
+
4
+ Copyright (c) 2015 Lokesh Dhakar
5
+
6
+ Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ of this software and associated documentation files (the "Software"), to deal
8
+ in the Software without restriction, including without limitation the rights
9
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ copies of the Software, and to permit persons to whom the Software is
11
+ furnished to do so, subject to the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be included in all
14
+ copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
+ SOFTWARE.
@@ -0,0 +1,224 @@
1
+ /*
2
+ # -----------------------------------------------------------------------------
3
+ # ~/assets/themes/j1/extensions/clipboard/css/lightbox.css
4
+ # Lightbox v.2.11.2 implementation for J1 Template.
5
+ #
6
+ # Product/Info:
7
+ # https://jekyll.one
8
+ # http://lokeshdhakar.com/projects/lightbox2/
9
+ #
10
+ # Copyright (C) 2020 Juergen Adams
11
+ # Copyright (C) 2015-2019 Lokesh Dhakar
12
+ #
13
+ # J1 Template is licensed under the MIT License.
14
+ # See: https://github.com/jekyll-one-org/J1 Template/blob/master/LICENSE
15
+ # Lightbox is licensed under the MIT License.
16
+ # See: https://github.com/lokesh/lightbox2/blob/master/LICENSE
17
+ #
18
+ # -----------------------------------------------------------------------------
19
+ */
20
+
21
+ body.lb-disable-scrolling {
22
+ overflow: hidden;
23
+ }
24
+
25
+ .lightboxOverlay {
26
+ position: absolute;
27
+ top: 0;
28
+ left: 0;
29
+ z-index: 9999;
30
+ background-color: black;
31
+ filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80);
32
+ opacity: 0.8;
33
+ display: none;
34
+ }
35
+
36
+ .lightbox {
37
+ position: absolute;
38
+ left: 0;
39
+ width: 100%;
40
+ z-index: 10000;
41
+ text-align: center;
42
+ line-height: 0;
43
+ font-weight: normal;
44
+ outline: none;
45
+ }
46
+
47
+ .lightbox .lb-image {
48
+ display: block;
49
+ height: auto;
50
+ max-width: inherit;
51
+ max-height: none;
52
+ border-radius: 3px;
53
+
54
+ /* Image border */
55
+ border: 4px solid white;
56
+ }
57
+
58
+ .lightbox a img {
59
+ border: none;
60
+ }
61
+
62
+ .lb-outerContainer {
63
+ position: relative;
64
+ *zoom: 1;
65
+ width: 250px;
66
+ height: 250px;
67
+ margin: 0 auto;
68
+ border-radius: 4px;
69
+
70
+ /* Background color behind image.
71
+ This is visible during transitions. */
72
+ background-color: white;
73
+ }
74
+
75
+ .lb-outerContainer:after {
76
+ content: "";
77
+ display: table;
78
+ clear: both;
79
+ }
80
+
81
+ .lb-loader {
82
+ position: absolute;
83
+ top: 43%;
84
+ left: 0;
85
+ height: 25%;
86
+ width: 100%;
87
+ text-align: center;
88
+ line-height: 0;
89
+ }
90
+
91
+ .lb-cancel {
92
+ display: block;
93
+ width: 32px;
94
+ height: 32px;
95
+ margin: 0 auto;
96
+ background: url(../images/loading.gif) no-repeat;
97
+ }
98
+
99
+ .lb-nav {
100
+ position: absolute;
101
+ top: 0;
102
+ left: 0;
103
+ height: 100%;
104
+ width: 100%;
105
+ z-index: 10;
106
+ }
107
+
108
+ .lb-container > .nav {
109
+ left: 0;
110
+ }
111
+
112
+ .lb-nav a {
113
+ outline: none;
114
+ background-image: url('data:image/gif;base64,R0lGODlhAQABAPAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==');
115
+ }
116
+
117
+ .lb-prev, .lb-next {
118
+ height: 100%;
119
+ cursor: pointer;
120
+ display: block;
121
+ }
122
+
123
+ .lb-nav a.lb-prev {
124
+ width: 34%;
125
+ left: 0;
126
+ float: left;
127
+ background: url(../images/prev.png) left 48% no-repeat;
128
+ filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);
129
+ opacity: 0;
130
+ -webkit-transition: opacity 0.6s;
131
+ -moz-transition: opacity 0.6s;
132
+ -o-transition: opacity 0.6s;
133
+ transition: opacity 0.6s;
134
+ }
135
+
136
+ .lb-nav a.lb-prev:hover {
137
+ filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);
138
+ opacity: 1;
139
+ }
140
+
141
+ .lb-nav a.lb-next {
142
+ width: 64%;
143
+ right: 0;
144
+ float: right;
145
+ background: url(../images/next.png) right 48% no-repeat;
146
+ filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);
147
+ opacity: 0;
148
+ -webkit-transition: opacity 0.6s;
149
+ -moz-transition: opacity 0.6s;
150
+ -o-transition: opacity 0.6s;
151
+ transition: opacity 0.6s;
152
+ }
153
+
154
+ .lb-nav a.lb-next:hover {
155
+ filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);
156
+ opacity: 1;
157
+ }
158
+
159
+ .lb-dataContainer {
160
+ margin: 0 auto;
161
+ padding-top: 5px;
162
+ *zoom: 1;
163
+ width: 100%;
164
+ border-bottom-left-radius: 4px;
165
+ border-bottom-right-radius: 4px;
166
+ }
167
+
168
+ .lb-dataContainer:after {
169
+ content: "";
170
+ display: table;
171
+ clear: both;
172
+ }
173
+
174
+ .lb-data {
175
+ padding: 0 4px;
176
+ color: #ccc;
177
+ }
178
+
179
+ .lb-data .lb-details {
180
+ width: 85%;
181
+ float: left;
182
+ text-align: left;
183
+ line-height: 1.1em;
184
+ }
185
+
186
+ .lb-data .lb-caption {
187
+ font-size: 13px;
188
+ font-weight: bold;
189
+ line-height: 1em;
190
+ }
191
+
192
+ .lb-data .lb-caption a {
193
+ color: #4ae;
194
+ }
195
+
196
+ .lb-data .lb-number {
197
+ display: block;
198
+ clear: left;
199
+ padding-bottom: 1em;
200
+ font-size: 12px;
201
+ color: #999999;
202
+ }
203
+
204
+ .lb-data .lb-close {
205
+ display: block;
206
+ float: right;
207
+ width: 30px;
208
+ height: 30px;
209
+ background: url(../images/close.png) top right no-repeat;
210
+ text-align: right;
211
+ outline: none;
212
+ filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=70);
213
+ opacity: 0.7;
214
+ -webkit-transition: opacity 0.2s;
215
+ -moz-transition: opacity 0.2s;
216
+ -o-transition: opacity 0.2s;
217
+ transition: opacity 0.2s;
218
+ }
219
+
220
+ .lb-data .lb-close:hover {
221
+ cursor: pointer;
222
+ filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);
223
+ opacity: 1;
224
+ }
@@ -0,0 +1,21 @@
1
+ /*
2
+ # -----------------------------------------------------------------------------
3
+ # ~/assets/themes/j1/extensions/clipboard/css/lightbox.min.css
4
+ # Lightbox v.2.11.2 implementation for J1 Template.
5
+ #
6
+ # Product/Info:
7
+ # https://jekyll.one
8
+ # http://lokeshdhakar.com/projects/lightbox2/
9
+ #
10
+ # Copyright (C) 2020 Juergen Adams
11
+ # Copyright (C) 2015-2019 Lokesh Dhakar
12
+ #
13
+ # J1 Template is licensed under the MIT License.
14
+ # See: https://github.com/jekyll-one-org/J1 Template/blob/master/LICENSE
15
+ # Lightbox is licensed under the MIT License.
16
+ # See: https://github.com/lokesh/lightbox2/blob/master/LICENSE
17
+ #
18
+ # -----------------------------------------------------------------------------
19
+ */
20
+
21
+ .lb-loader,.lightbox{text-align:center;line-height:0;position:absolute;left:0}body.lb-disable-scrolling{overflow:hidden}.lightboxOverlay{position:absolute;top:0;left:0;z-index:9999;background-color:#000;filter:alpha(Opacity=80);opacity:.8;display:none}.lightbox{width:100%;z-index:10000;font-weight:400;outline:0}.lightbox .lb-image{display:block;height:auto;max-width:inherit;max-height:none;border-radius:3px;border:4px solid #fff}.lightbox a img{border:none}.lb-outerContainer{position:relative;width:250px;height:250px;margin:0 auto;border-radius:4px;background-color:#fff}.lb-outerContainer:after{content:"";display:table;clear:both}.lb-loader{top:43%;height:25%;width:100%}.lb-cancel{display:block;width:32px;height:32px;margin:0 auto;background:url(../images/loading.gif) no-repeat}.lb-nav{position:absolute;top:0;left:0;height:100%;width:100%;z-index:10}.lb-container>.nav{left:0}.lb-nav a{outline:0;background-image:url(data:image/gif;base64,R0lGODlhAQABAPAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==)}.lb-next,.lb-prev{height:100%;cursor:pointer;display:block}.lb-nav a.lb-prev{width:34%;left:0;float:left;background:url(../images/prev.png) left 48% no-repeat;filter:alpha(Opacity=0);opacity:0;-webkit-transition:opacity .6s;-moz-transition:opacity .6s;-o-transition:opacity .6s;transition:opacity .6s}.lb-nav a.lb-prev:hover{filter:alpha(Opacity=100);opacity:1}.lb-nav a.lb-next{width:64%;right:0;float:right;background:url(../images/next.png) right 48% no-repeat;filter:alpha(Opacity=0);opacity:0;-webkit-transition:opacity .6s;-moz-transition:opacity .6s;-o-transition:opacity .6s;transition:opacity .6s}.lb-nav a.lb-next:hover{filter:alpha(Opacity=100);opacity:1}.lb-dataContainer{margin:0 auto;padding-top:5px;width:100%;border-bottom-left-radius:4px;border-bottom-right-radius:4px}.lb-dataContainer:after{content:"";display:table;clear:both}.lb-data{padding:0 4px;color:#ccc}.lb-data .lb-details{width:85%;float:left;text-align:left;line-height:1.1em}.lb-data .lb-caption{font-size:13px;font-weight:700;line-height:1em}.lb-data .lb-caption a{color:#4ae}.lb-data .lb-number{display:block;clear:left;padding-bottom:1em;font-size:12px;color:#999}.lb-data .lb-close{display:block;float:right;width:30px;height:30px;background:url(../images/close.png) top right no-repeat;text-align:right;outline:0;filter:alpha(Opacity=70);opacity:.7;-webkit-transition:opacity .2s;-moz-transition:opacity .2s;-o-transition:opacity .2s;transition:opacity .2s}.lb-data .lb-close:hover{cursor:pointer;filter:alpha(Opacity=100);opacity:1}
@@ -0,0 +1,25 @@
1
+ /*
2
+ # -----------------------------------------------------------------------------
3
+ # ~/assets/themes/j1/extensions/lightbox/css/theme/uno.css
4
+ # Provides Lightbox styles for J1 Theme Uno (v2.11.2)
5
+ #
6
+ # Product/Info:
7
+ # https://jekyll.one
8
+ #
9
+ # Copyright (C) 2020 Juergen Adams
10
+ #
11
+ # J1 Template is licensed under the MIT License.
12
+ # See: https://github.com/jekyll-one-org/J1 Template/blob/master/LICENSE
13
+ # -----------------------------------------------------------------------------
14
+ */
15
+
16
+ /* Reduced image border|color changed */
17
+ .lightbox .lb-image {
18
+ border-radius: 1px;
19
+ border: 1px solid lightgrey;
20
+ }
21
+
22
+ /* Removed invalid|unneeded attributes */
23
+ .lb-outerContainer {
24
+ zoom: unset;
25
+ }
@@ -0,0 +1,26 @@
1
+ /*
2
+ # -----------------------------------------------------------------------------
3
+ # ~/assets/themes/j1/extensions/lightbox/css/theme/uno.min.css
4
+ # Provides Lightbox styles for J1 Theme Uno
5
+ #
6
+ # Product/Info:
7
+ # https://jekyll.one
8
+ #
9
+ # Copyright (C) 2020 Juergen Adams
10
+ #
11
+ # J1 Template is licensed under the MIT License.
12
+ # See: https://github.com/jekyll-one-org/J1 Template/blob/master/LICENSE
13
+ #
14
+ # -----------------------------------------------------------------------------
15
+ */
16
+
17
+ /* Reduced image border|color changed */
18
+ .lightbox .lb-image {
19
+ border-radius: 1px;
20
+ border: 1px solid lightgrey;
21
+ }
22
+
23
+ /* Removed invalid|unneeded attributes */
24
+ .lb-outerContainer {
25
+ zoom: unset;
26
+ }
@@ -0,0 +1,583 @@
1
+ /*
2
+ # -----------------------------------------------------------------------------
3
+ # ~/js/lightbox/lightbox.js
4
+ # Lightbox v.2.11.2 implementation for J1 Template.
5
+ #
6
+ # Product/Info:
7
+ # https://jekyll.one
8
+ # http://lokeshdhakar.com/projects/lightbox2/
9
+ #
10
+ # Copyright (C) 2020 Juergen Adams
11
+ # Copyright (C) 2015-2019 Lokesh Dhakar
12
+ #
13
+ # J1 Template is licensed under the MIT License.
14
+ # See: https://github.com/jekyll-one-org/J1 Template/blob/master/LICENSE
15
+ # Lightbox is licensed under the MIT License.
16
+ # See: https://github.com/lokesh/lightbox2/blob/master/LICENSE
17
+ #
18
+ # -----------------------------------------------------------------------------
19
+ */
20
+
21
+ // -----------------------------------------------------------------------------
22
+ // ESLint shimming
23
+ // -----------------------------------------------------------------------------
24
+ /* eslint indent: "off" */
25
+ /* eslint no-unused-vars: "off" */
26
+ /* eslint no-undef: "off" */
27
+ /* eslint no-console: "off" */
28
+ // -----------------------------------------------------------------------------
29
+
30
+ /*!
31
+ * Lightbox v2.11.2
32
+ * by Lokesh Dhakar
33
+ *
34
+ * More info:
35
+ * http://lokeshdhakar.com/projects/lightbox2/
36
+ *
37
+ * Copyright Lokesh Dhakar
38
+ * Released under the MIT license
39
+ * https://github.com/lokesh/lightbox2/blob/master/LICENSE
40
+ *
41
+ * @preserve
42
+ */
43
+
44
+ // Uses Node, AMD or browser globals to create a module.
45
+ (function (root, factory) {
46
+ if (typeof define === 'function' && define.amd) {
47
+ // AMD. Register as an anonymous module.
48
+ define(['jquery'], factory);
49
+ } else if (typeof exports === 'object') {
50
+ // Node. Does not work with strict CommonJS, but
51
+ // only CommonJS-like environments that support module.exports,
52
+ // like Node.
53
+ module.exports = factory(require('jquery'));
54
+ } else {
55
+ // Browser globals (root is window)
56
+ root.lightbox = factory(root.jQuery);
57
+ }
58
+ }(this, function ($) {
59
+
60
+ function Lightbox(options) {
61
+ this.album = [];
62
+ this.currentImageIndex = void 0;
63
+ this.init();
64
+
65
+ // options
66
+ this.options = $.extend({}, this.constructor.defaults);
67
+ this.option(options);
68
+ }
69
+
70
+ // Descriptions of all options available on the demo site:
71
+ // http://lokeshdhakar.com/projects/lightbox2/index.html#options
72
+ Lightbox.defaults = {
73
+ albumLabel: 'Image %1 of %2',
74
+ alwaysShowNavOnTouchDevices: false,
75
+ fadeDuration: 600,
76
+ fitImagesInViewport: true,
77
+ imageFadeDuration: 600,
78
+ // maxWidth: 800,
79
+ // maxHeight: 600,
80
+ positionFromTop: 50,
81
+ resizeDuration: 700,
82
+ showImageNumberLabel: true,
83
+ wrapAround: false,
84
+ disableScrolling: false,
85
+ /*
86
+ Sanitize Title
87
+ If the caption data is trusted, for example you are hardcoding it in, then leave this to false.
88
+ This will free you to add html tags, such as links, in the caption.
89
+
90
+ If the caption data is user submitted or from some other untrusted source, then set this to true
91
+ to prevent xss and other injection attacks.
92
+ */
93
+ sanitizeTitle: false
94
+ };
95
+
96
+ Lightbox.prototype.option = function(options) {
97
+ $.extend(this.options, options);
98
+ };
99
+
100
+ Lightbox.prototype.imageCountLabel = function(currentImageNum, totalImages) {
101
+ return this.options.albumLabel.replace(/%1/g, currentImageNum).replace(/%2/g, totalImages);
102
+ };
103
+
104
+ Lightbox.prototype.init = function() {
105
+ var self = this;
106
+ // Both enable and build methods require the body tag to be in the DOM.
107
+ $(document).ready(function() {
108
+ self.enable();
109
+ self.build();
110
+ });
111
+ };
112
+
113
+ // Loop through anchors and areamaps looking for either data-lightbox attributes or rel attributes
114
+ // that contain 'lightbox'. When these are clicked, start lightbox.
115
+ Lightbox.prototype.enable = function() {
116
+ var self = this;
117
+ $('body').on('click', 'a[rel^=lightbox], area[rel^=lightbox], a[data-lightbox], area[data-lightbox]', function(event) {
118
+ self.start($(event.currentTarget));
119
+ return false;
120
+ });
121
+ };
122
+
123
+ // Build html for the lightbox and the overlay.
124
+ // Attach event handlers to the new DOM elements. click click click
125
+ Lightbox.prototype.build = function() {
126
+ if ($('#lightbox').length > 0) {
127
+ return;
128
+ }
129
+
130
+ var self = this;
131
+
132
+ // The two root notes generated, #lightboxOverlay and #lightbox are given
133
+ // tabindex attrs so they are focusable. We attach our keyboard event
134
+ // listeners to these two elements, and not the document. Clicking anywhere
135
+ // while Lightbox is opened will keep the focus on or inside one of these
136
+ // two elements.
137
+ //
138
+ // We do this so we can prevent propogation of the Esc keypress when
139
+ // Lightbox is open. This prevents it from intefering with other components
140
+ // on the page below.
141
+ //
142
+ // Github issue: https://github.com/lokesh/lightbox2/issues/663
143
+ $('<div id="lightboxOverlay" tabindex="-1" class="lightboxOverlay"></div><div id="lightbox" tabindex="-1" class="lightbox"><div class="lb-outerContainer"><div class="lb-container"><img class="lb-image" src="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==" alt=""/><div class="lb-nav"><a class="lb-prev" aria-label="Previous image" href="" ></a><a class="lb-next" aria-label="Next image" href="" ></a></div><div class="lb-loader"><a class="lb-cancel"></a></div></div></div><div class="lb-dataContainer"><div class="lb-data"><div class="lb-details"><span class="lb-caption"></span><span class="lb-number"></span></div><div class="lb-closeContainer"><a class="lb-close"></a></div></div></div></div>').appendTo($('body'));
144
+
145
+ // Cache jQuery objects
146
+ this.$lightbox = $('#lightbox');
147
+ this.$overlay = $('#lightboxOverlay');
148
+ this.$outerContainer = this.$lightbox.find('.lb-outerContainer');
149
+ this.$container = this.$lightbox.find('.lb-container');
150
+ this.$image = this.$lightbox.find('.lb-image');
151
+ this.$nav = this.$lightbox.find('.lb-nav');
152
+
153
+ // Store css values for future lookup
154
+ this.containerPadding = {
155
+ top: parseInt(this.$container.css('padding-top'), 10),
156
+ right: parseInt(this.$container.css('padding-right'), 10),
157
+ bottom: parseInt(this.$container.css('padding-bottom'), 10),
158
+ left: parseInt(this.$container.css('padding-left'), 10)
159
+ };
160
+
161
+ this.imageBorderWidth = {
162
+ top: parseInt(this.$image.css('border-top-width'), 10),
163
+ right: parseInt(this.$image.css('border-right-width'), 10),
164
+ bottom: parseInt(this.$image.css('border-bottom-width'), 10),
165
+ left: parseInt(this.$image.css('border-left-width'), 10)
166
+ };
167
+
168
+ // Attach event handlers to the newly minted DOM elements
169
+ this.$overlay.hide().on('click', function() {
170
+ self.end();
171
+ return false;
172
+ });
173
+
174
+ this.$lightbox.hide().on('click', function(event) {
175
+ if ($(event.target).attr('id') === 'lightbox') {
176
+ self.end();
177
+ }
178
+ });
179
+
180
+ this.$outerContainer.on('click', function(event) {
181
+ if ($(event.target).attr('id') === 'lightbox') {
182
+ self.end();
183
+ }
184
+ return false;
185
+ });
186
+
187
+ this.$lightbox.find('.lb-prev').on('click', function() {
188
+ if (self.currentImageIndex === 0) {
189
+ self.changeImage(self.album.length - 1);
190
+ } else {
191
+ self.changeImage(self.currentImageIndex - 1);
192
+ }
193
+ return false;
194
+ });
195
+
196
+ this.$lightbox.find('.lb-next').on('click', function() {
197
+ if (self.currentImageIndex === self.album.length - 1) {
198
+ self.changeImage(0);
199
+ } else {
200
+ self.changeImage(self.currentImageIndex + 1);
201
+ }
202
+ return false;
203
+ });
204
+
205
+ /*
206
+ Show context menu for image on right-click
207
+
208
+ There is a div containing the navigation that spans the entire image and lives above of it. If
209
+ you right-click, you are right clicking this div and not the image. This prevents users from
210
+ saving the image or using other context menu actions with the image.
211
+
212
+ To fix this, when we detect the right mouse button is pressed down, but not yet clicked, we
213
+ set pointer-events to none on the nav div. This is so that the upcoming right-click event on
214
+ the next mouseup will bubble down to the image. Once the right-click/contextmenu event occurs
215
+ we set the pointer events back to auto for the nav div so it can capture hover and left-click
216
+ events as usual.
217
+ */
218
+ this.$nav.on('mousedown', function(event) {
219
+ if (event.which === 3) {
220
+ self.$nav.css('pointer-events', 'none');
221
+
222
+ self.$lightbox.one('contextmenu', function() {
223
+ setTimeout(function() {
224
+ this.$nav.css('pointer-events', 'auto');
225
+ }.bind(self), 0);
226
+ });
227
+ }
228
+ });
229
+
230
+
231
+ this.$lightbox.find('.lb-loader, .lb-close').on('click', function() {
232
+ self.end();
233
+ return false;
234
+ });
235
+ };
236
+
237
+ // Show overlay and lightbox. If the image is part of a set, add siblings to album array.
238
+ Lightbox.prototype.start = function($link) {
239
+ var self = this;
240
+ var $window = $(window);
241
+
242
+ $window.on('resize', $.proxy(this.sizeOverlay, this));
243
+
244
+ this.sizeOverlay();
245
+
246
+ this.album = [];
247
+ var imageNumber = 0;
248
+
249
+ function addToAlbum($link) {
250
+ self.album.push({
251
+ alt: $link.attr('data-alt'),
252
+ link: $link.attr('href'),
253
+ title: $link.attr('data-title') || $link.attr('title')
254
+ });
255
+ }
256
+
257
+ // Support both data-lightbox attribute and rel attribute implementations
258
+ var dataLightboxValue = $link.attr('data-lightbox');
259
+ var $links;
260
+
261
+ if (dataLightboxValue) {
262
+ $links = $($link.prop('tagName') + '[data-lightbox="' + dataLightboxValue + '"]');
263
+ for (var i = 0; i < $links.length; i = ++i) {
264
+ addToAlbum($($links[i]));
265
+ if ($links[i] === $link[0]) {
266
+ imageNumber = i;
267
+ }
268
+ }
269
+ } else {
270
+ if ($link.attr('rel') === 'lightbox') {
271
+ // If image is not part of a set
272
+ addToAlbum($link);
273
+ } else {
274
+ // If image is part of a set
275
+ $links = $($link.prop('tagName') + '[rel="' + $link.attr('rel') + '"]');
276
+ for (var j = 0; j < $links.length; j = ++j) {
277
+ addToAlbum($($links[j]));
278
+ if ($links[j] === $link[0]) {
279
+ imageNumber = j;
280
+ }
281
+ }
282
+ }
283
+ }
284
+
285
+ // Position Lightbox
286
+ var top = $window.scrollTop() + this.options.positionFromTop;
287
+ var left = $window.scrollLeft();
288
+ this.$lightbox.css({
289
+ top: top + 'px',
290
+ left: left + 'px'
291
+ }).fadeIn(this.options.fadeDuration);
292
+
293
+ // Disable scrolling of the page while open
294
+ if (this.options.disableScrolling) {
295
+ $('body').addClass('lb-disable-scrolling');
296
+ }
297
+
298
+ this.changeImage(imageNumber);
299
+ };
300
+
301
+ // Hide most UI elements in preparation for the animated resizing of the lightbox.
302
+ Lightbox.prototype.changeImage = function(imageNumber) {
303
+ var self = this;
304
+ var filename = this.album[imageNumber].link;
305
+ var filetype = filename.split('.').slice(-1)[0];
306
+ var $image = this.$lightbox.find('.lb-image');
307
+
308
+ // Disable keyboard nav during transitions
309
+ this.disableKeyboardNav();
310
+
311
+ // Show loading state
312
+ this.$overlay.fadeIn(this.options.fadeDuration);
313
+ $('.lb-loader').fadeIn('slow');
314
+ this.$lightbox.find('.lb-image, .lb-nav, .lb-prev, .lb-next, .lb-dataContainer, .lb-numbers, .lb-caption').hide();
315
+ this.$outerContainer.addClass('animating');
316
+
317
+ // When image to show is preloaded, we send the width and height to sizeContainer()
318
+ var preloader = new Image();
319
+ preloader.onload = function() {
320
+ var $preloader;
321
+ var imageHeight;
322
+ var imageWidth;
323
+ var maxImageHeight;
324
+ var maxImageWidth;
325
+ var windowHeight;
326
+ var windowWidth;
327
+
328
+ $image.attr({
329
+ 'alt': self.album[imageNumber].alt,
330
+ 'src': filename
331
+ });
332
+
333
+ $preloader = $(preloader);
334
+
335
+ $image.width(preloader.width);
336
+ $image.height(preloader.height);
337
+ windowWidth = $(window).width();
338
+ windowHeight = $(window).height();
339
+
340
+ // Calculate the max image dimensions for the current viewport.
341
+ // Take into account the border around the image and an additional 10px gutter on each side.
342
+ maxImageWidth = windowWidth - self.containerPadding.left - self.containerPadding.right - self.imageBorderWidth.left - self.imageBorderWidth.right - 20;
343
+ maxImageHeight = windowHeight - self.containerPadding.top - self.containerPadding.bottom - self.imageBorderWidth.top - self.imageBorderWidth.bottom - self.options.positionFromTop - 70;
344
+
345
+ /*
346
+ Since many SVGs have small intrinsic dimensions, but they support scaling
347
+ up without quality loss because of their vector format, max out their
348
+ size.
349
+ */
350
+ if (filetype === 'svg') {
351
+ $image.width(maxImageWidth);
352
+ $image.height(maxImageHeight);
353
+ }
354
+
355
+ // Fit image inside the viewport.
356
+ if (self.options.fitImagesInViewport) {
357
+
358
+ // Check if image size is larger then maxWidth|maxHeight in settings
359
+ if (self.options.maxWidth && self.options.maxWidth < maxImageWidth) {
360
+ maxImageWidth = self.options.maxWidth;
361
+ }
362
+ if (self.options.maxHeight && self.options.maxHeight < maxImageHeight) {
363
+ maxImageHeight = self.options.maxHeight;
364
+ }
365
+
366
+ } else {
367
+ maxImageWidth = self.options.maxWidth || preloader.width || maxImageWidth;
368
+ maxImageHeight = self.options.maxHeight || preloader.height || maxImageHeight;
369
+ }
370
+
371
+ // Is the current image's width or height is greater than the maxImageWidth or maxImageHeight
372
+ // option than we need to size down while maintaining the aspect ratio.
373
+ if ((preloader.width > maxImageWidth) || (preloader.height > maxImageHeight)) {
374
+ if ((preloader.width / maxImageWidth) > (preloader.height / maxImageHeight)) {
375
+ imageWidth = maxImageWidth;
376
+ imageHeight = parseInt(preloader.height / (preloader.width / imageWidth), 10);
377
+ $image.width(imageWidth);
378
+ $image.height(imageHeight);
379
+ } else {
380
+ imageHeight = maxImageHeight;
381
+ imageWidth = parseInt(preloader.width / (preloader.height / imageHeight), 10);
382
+ $image.width(imageWidth);
383
+ $image.height(imageHeight);
384
+ }
385
+ }
386
+ self.sizeContainer($image.width(), $image.height());
387
+ };
388
+
389
+ // Preload image before showing
390
+ preloader.src = this.album[imageNumber].link;
391
+ this.currentImageIndex = imageNumber;
392
+ };
393
+
394
+ // Stretch overlay to fit the viewport
395
+ Lightbox.prototype.sizeOverlay = function() {
396
+ var self = this;
397
+ /*
398
+ We use a setTimeout 0 to pause JS execution and let the rendering catch-up.
399
+ Why do this? If the `disableScrolling` option is set to true, a class is added to the body
400
+ tag that disables scrolling and hides the scrollbar. We want to make sure the scrollbar is
401
+ hidden before we measure the document width, as the presence of the scrollbar will affect the
402
+ number.
403
+ */
404
+ setTimeout(function() {
405
+ self.$overlay
406
+ .width($(document).width())
407
+ .height($(document).height());
408
+
409
+ }, 0);
410
+ };
411
+
412
+ // Animate the size of the lightbox to fit the image we are showing
413
+ // This method also shows the the image.
414
+ Lightbox.prototype.sizeContainer = function(imageWidth, imageHeight) {
415
+ var self = this;
416
+
417
+ var oldWidth = this.$outerContainer.outerWidth();
418
+ var oldHeight = this.$outerContainer.outerHeight();
419
+ var newWidth = imageWidth + this.containerPadding.left + this.containerPadding.right + this.imageBorderWidth.left + this.imageBorderWidth.right;
420
+ var newHeight = imageHeight + this.containerPadding.top + this.containerPadding.bottom + this.imageBorderWidth.top + this.imageBorderWidth.bottom;
421
+
422
+ function postResize() {
423
+ self.$lightbox.find('.lb-dataContainer').width(newWidth);
424
+ self.$lightbox.find('.lb-prevLink').height(newHeight);
425
+ self.$lightbox.find('.lb-nextLink').height(newHeight);
426
+
427
+ // Set focus on one of the two root nodes so keyboard events are captured.
428
+ self.$overlay.focus();
429
+
430
+ self.showImage();
431
+ }
432
+
433
+ if (oldWidth !== newWidth || oldHeight !== newHeight) {
434
+ this.$outerContainer.animate({
435
+ width: newWidth,
436
+ height: newHeight
437
+ }, this.options.resizeDuration, 'swing', function() {
438
+ postResize();
439
+ });
440
+ } else {
441
+ postResize();
442
+ }
443
+ };
444
+
445
+ // Display the image and its details and begin preload neighboring images.
446
+ Lightbox.prototype.showImage = function() {
447
+ this.$lightbox.find('.lb-loader').stop(true).hide();
448
+ this.$lightbox.find('.lb-image').fadeIn(this.options.imageFadeDuration);
449
+
450
+ this.updateNav();
451
+ this.updateDetails();
452
+ this.preloadNeighboringImages();
453
+ this.enableKeyboardNav();
454
+ };
455
+
456
+ // Display previous and next navigation if appropriate.
457
+ Lightbox.prototype.updateNav = function() {
458
+ // Check to see if the browser supports touch events. If so, we take the conservative approach
459
+ // and assume that mouse hover events are not supported and always show prev/next navigation
460
+ // arrows in image sets.
461
+ var alwaysShowNav = false;
462
+ try {
463
+ document.createEvent('TouchEvent');
464
+ alwaysShowNav = (this.options.alwaysShowNavOnTouchDevices) ? true : false;
465
+ } catch (e) {}
466
+
467
+ this.$lightbox.find('.lb-nav').show();
468
+
469
+ if (this.album.length > 1) {
470
+ if (this.options.wrapAround) {
471
+ if (alwaysShowNav) {
472
+ this.$lightbox.find('.lb-prev, .lb-next').css('opacity', '1');
473
+ }
474
+ this.$lightbox.find('.lb-prev, .lb-next').show();
475
+ } else {
476
+ if (this.currentImageIndex > 0) {
477
+ this.$lightbox.find('.lb-prev').show();
478
+ if (alwaysShowNav) {
479
+ this.$lightbox.find('.lb-prev').css('opacity', '1');
480
+ }
481
+ }
482
+ if (this.currentImageIndex < this.album.length - 1) {
483
+ this.$lightbox.find('.lb-next').show();
484
+ if (alwaysShowNav) {
485
+ this.$lightbox.find('.lb-next').css('opacity', '1');
486
+ }
487
+ }
488
+ }
489
+ }
490
+ };
491
+
492
+ // Display caption, image number, and closing button.
493
+ Lightbox.prototype.updateDetails = function() {
494
+ var self = this;
495
+
496
+ // Enable anchor clicks in the injected caption html.
497
+ // Thanks Nate Wright for the fix. @https://github.com/NateWr
498
+ if (typeof this.album[this.currentImageIndex].title !== 'undefined' &&
499
+ this.album[this.currentImageIndex].title !== '') {
500
+ var $caption = this.$lightbox.find('.lb-caption');
501
+ if (this.options.sanitizeTitle) {
502
+ $caption.text(this.album[this.currentImageIndex].title);
503
+ } else {
504
+ $caption.html(this.album[this.currentImageIndex].title);
505
+ }
506
+ $caption.fadeIn('fast');
507
+ }
508
+
509
+ if (this.album.length > 1 && this.options.showImageNumberLabel) {
510
+ var labelText = this.imageCountLabel(this.currentImageIndex + 1, this.album.length);
511
+ this.$lightbox.find('.lb-number').text(labelText).fadeIn('fast');
512
+ } else {
513
+ this.$lightbox.find('.lb-number').hide();
514
+ }
515
+
516
+ this.$outerContainer.removeClass('animating');
517
+
518
+ this.$lightbox.find('.lb-dataContainer').fadeIn(this.options.resizeDuration, function() {
519
+ return self.sizeOverlay();
520
+ });
521
+ };
522
+
523
+ // Preload previous and next images in set.
524
+ Lightbox.prototype.preloadNeighboringImages = function() {
525
+ if (this.album.length > this.currentImageIndex + 1) {
526
+ var preloadNext = new Image();
527
+ preloadNext.src = this.album[this.currentImageIndex + 1].link;
528
+ }
529
+ if (this.currentImageIndex > 0) {
530
+ var preloadPrev = new Image();
531
+ preloadPrev.src = this.album[this.currentImageIndex - 1].link;
532
+ }
533
+ };
534
+
535
+ Lightbox.prototype.enableKeyboardNav = function() {
536
+ this.$lightbox.on('keyup.keyboard', $.proxy(this.keyboardAction, this));
537
+ this.$overlay.on('keyup.keyboard', $.proxy(this.keyboardAction, this));
538
+ };
539
+
540
+ Lightbox.prototype.disableKeyboardNav = function() {
541
+ this.$lightbox.off('.keyboard');
542
+ this.$overlay.off('.keyboard');
543
+ };
544
+
545
+ Lightbox.prototype.keyboardAction = function(event) {
546
+ var KEYCODE_ESC = 27;
547
+ var KEYCODE_LEFTARROW = 37;
548
+ var KEYCODE_RIGHTARROW = 39;
549
+
550
+ var keycode = event.keyCode;
551
+ if (keycode === KEYCODE_ESC) {
552
+ // Prevent bubbling so as to not affect other components on the page.
553
+ event.stopPropagation();
554
+ this.end();
555
+ } else if (keycode === KEYCODE_LEFTARROW) {
556
+ if (this.currentImageIndex !== 0) {
557
+ this.changeImage(this.currentImageIndex - 1);
558
+ } else if (this.options.wrapAround && this.album.length > 1) {
559
+ this.changeImage(this.album.length - 1);
560
+ }
561
+ } else if (keycode === KEYCODE_RIGHTARROW) {
562
+ if (this.currentImageIndex !== this.album.length - 1) {
563
+ this.changeImage(this.currentImageIndex + 1);
564
+ } else if (this.options.wrapAround && this.album.length > 1) {
565
+ this.changeImage(0);
566
+ }
567
+ }
568
+ };
569
+
570
+ // Closing time. :-(
571
+ Lightbox.prototype.end = function() {
572
+ this.disableKeyboardNav();
573
+ $(window).off('resize', this.sizeOverlay);
574
+ this.$lightbox.fadeOut(this.options.fadeDuration);
575
+ this.$overlay.fadeOut(this.options.fadeDuration);
576
+
577
+ if (this.options.disableScrolling) {
578
+ $('body').removeClass('lb-disable-scrolling');
579
+ }
580
+ };
581
+
582
+ return new Lightbox();
583
+ }));