j1-template 2022.5.3 → 2022.6.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/_includes/themes/j1/layouts/content_generator_news_panel_posts.html +61 -40
- data/_includes/themes/j1/layouts/content_generator_page.html +22 -22
- data/_includes/themes/j1/layouts/content_generator_post.html +1 -1
- data/_includes/themes/j1/layouts/layout_metadata_generator.html +5 -86
- data/_includes/themes/j1/modules/navigator/generator.html +1 -13
- data/_includes/themes/j1/modules/searcher/generator.html +61 -0
- data/_includes/themes/j1/modules/{navigator → searcher}/procedures/topsearch.proc +61 -40
- data/_includes/themes/j1/{blocks → procedures/blocks}/footer/boxes/about_box.proc +0 -0
- data/_includes/themes/j1/{blocks → procedures/blocks}/footer/boxes/contacts_box.proc +0 -0
- data/_includes/themes/j1/{blocks → procedures/blocks}/footer/boxes/issue.proc +0 -0
- data/_includes/themes/j1/{blocks → procedures/blocks}/footer/boxes/legal_statements.proc +0 -0
- data/_includes/themes/j1/{blocks → procedures/blocks}/footer/boxes/links_box.proc +0 -0
- data/_includes/themes/j1/{blocks → procedures/blocks}/footer/boxes/news_box.proc +0 -0
- data/_includes/themes/j1/{blocks → procedures/blocks}/footer/boxes/social_media_icons.proc +0 -0
- data/_includes/themes/j1/procedures/blocks/get_wave.proc +211 -0
- data/_includes/themes/j1/procedures/collections/create_collection_article_preview.proc +1 -1
- data/_includes/themes/j1/procedures/global/create_word_cloud.proc +1 -1
- data/_includes/themes/j1/procedures/posts/collate_timeline.proc +2 -2
- data/_includes/themes/j1/procedures/posts/pager.proc +9 -10
- data/_layouts/default.html +26 -13
- data/apps/private/README.txt +1 -0
- data/apps/protected/README.txt +1 -0
- data/apps/public/README.txt +1 -0
- data/assets/data/banner.html +38 -8
- data/assets/data/footer.html +31 -11
- data/assets/data/panel.html +118 -27
- data/assets/data/top_search_modal.0.html +142 -0
- data/assets/data/top_search_modal.html +121 -0
- data/assets/themes/j1/adapter/js/attic.js +4 -4
- data/assets/themes/j1/adapter/js/comments.js +18 -7
- data/assets/themes/j1/adapter/js/lunr.js +34 -1
- data/assets/themes/j1/adapter/js/navigator.js +8 -60
- data/assets/themes/j1/adapter/js/waves.js +227 -0
- data/assets/themes/j1/core/css/themes/bootstrap/bootstrap.css +10 -5
- data/assets/themes/j1/core/css/themes/bootstrap/bootstrap.min.css +1 -1
- data/assets/themes/j1/core/css/themes/theme_vapor/bootstrap.css +10 -5
- data/assets/themes/j1/core/css/themes/theme_vapor/bootstrap.min.css +1 -1
- data/assets/themes/j1/core/css/themes/unodark/bootstrap.css +51 -128
- data/assets/themes/j1/core/css/themes/unodark/bootstrap.min.css +3 -3
- data/assets/themes/j1/core/css/themes/unolight/bootstrap.css +397 -197
- data/assets/themes/j1/core/css/themes/unolight/bootstrap.min.css +9 -9
- data/assets/themes/j1/core/css/vendor.css +11 -8
- data/assets/themes/j1/core/css/vendor.min.css +1 -1
- data/assets/themes/j1/core/fonts/fontawesome_5/LICENSE.txt +34 -0
- data/assets/themes/j1/core/fonts/material_design_icons/LICENSE.txt +97 -0
- data/assets/themes/j1/core/fonts/material_design_icons_light/LICENSE.txt +92 -0
- data/assets/themes/j1/core/fonts/roboto/LICENSE.txt +11 -0
- data/assets/themes/j1/core/js/template.js +405 -772
- data/assets/themes/j1/core/js/template.min.js +1 -1
- data/assets/themes/j1/core/js/template.min.js.map +1 -1
- data/assets/themes/j1/modules/backstretch/js/backstretch.js +1 -1
- data/assets/themes/j1/modules/backstretch/js/backstretch.min.js +1 -1
- data/assets/themes/j1/modules/bokeh/LICENSE.txt +28 -0
- data/assets/themes/j1/modules/jquery/js/extensions/hasClass.js +17 -0
- data/assets/themes/j1/modules/jquery/js/extensions/hasClass.min.js +17 -0
- data/assets/themes/j1/modules/jquery/js/extensions/removeClass.js +18 -0
- data/assets/themes/j1/modules/jquery/js/extensions/removeClass.min.js +17 -0
- data/assets/themes/j1/modules/later/LICENSE.txt +21 -0
- data/assets/themes/j1/modules/log4javascript/license.txt +201 -0
- data/assets/themes/j1/modules/lunr/stopwords/de.txt +229 -0
- data/assets/themes/j1/modules/lunr/stopwords/en.txt +119 -0
- data/assets/themes/j1/modules/masterslider/LICENSE.txt +621 -0
- data/assets/themes/j1/modules/masterslider/README.txt +531 -0
- data/assets/themes/j1/modules/msDropdown/LICENSE.txt +20 -0
- data/assets/themes/j1/modules/nbinteract-core/LICENSE.txt +60 -0
- data/assets/themes/j1/modules/rouge/css/themes.txt +46 -0
- data/assets/themes/j1/modules/vega/LICENSE.txt +27 -0
- data/lib/j1/version.rb +1 -1
- data/lib/starter_web/Gemfile +20 -17
- data/lib/starter_web/README.md +5 -5
- data/lib/starter_web/_config.yml +234 -143
- data/lib/starter_web/_data/blocks/banner.yml +18 -2
- data/lib/starter_web/_data/blocks/defaults/footer.yml +3 -1
- data/lib/starter_web/_data/blocks/defaults/panel.yml +4 -0
- data/lib/starter_web/_data/blocks/footer.yml +12 -1
- data/lib/starter_web/_data/blocks/panel.yml +88 -19
- data/lib/starter_web/_data/layouts/collection.yml +0 -9
- data/lib/starter_web/_data/layouts/default.yml +16 -35
- data/lib/starter_web/_data/layouts/home.yml +21 -30
- data/lib/starter_web/_data/layouts/news_panel_posts.yml +0 -9
- data/lib/starter_web/_data/layouts/page.yml +0 -9
- data/lib/starter_web/_data/layouts/post.yml +0 -9
- data/lib/starter_web/_data/modules/blog_navigator.yml +6 -0
- data/lib/starter_web/_data/modules/defaults/blog_navigator.yml +15 -8
- data/lib/starter_web/_data/modules/defaults/cookieconsent.yml +5 -4
- data/lib/starter_web/_data/modules/defaults/lunr.yml +21 -0
- data/lib/starter_web/_data/modules/defaults/navigator.yml +17 -18
- data/lib/starter_web/_data/modules/defaults/waves.yml +32 -0
- data/lib/starter_web/_data/modules/lunr.yml +7 -0
- data/lib/starter_web/_data/modules/navigator_menu.yml +48 -120
- data/lib/starter_web/_data/modules/waves.yml +32 -0
- data/lib/starter_web/_data/plugins/defaults/feed.yml +82 -0
- data/lib/starter_web/_data/plugins/defaults/seo-tags.yml +65 -0
- data/lib/starter_web/_data/plugins/defaults/sitemap.yml +66 -0
- data/lib/starter_web/_data/plugins/feed.yml +35 -0
- data/lib/starter_web/_data/plugins/seo-tags.yml +30 -0
- data/lib/starter_web/_data/plugins/sitemap.yml +30 -0
- data/lib/starter_web/_data/resources.yml +22 -0
- data/lib/starter_web/_data/templates/feed.xml +191 -0
- data/lib/starter_web/_data/templates/robots.txt +1 -0
- data/lib/starter_web/_data/templates/seo-tags.html +140 -0
- data/lib/starter_web/_data/templates/sitemap.xml +36 -0
- data/lib/starter_web/_includes/attributes.asciidoc +49 -47
- data/lib/starter_web/_includes/custom/static/bs5_accordion.html +84 -0
- data/lib/starter_web/_includes/custom/templates/bs5_accordion.html +103 -0
- data/lib/starter_web/_plugins/{asciidoctor-extensions → asciidoctor}/admonition-block-answer.rb +0 -0
- data/lib/starter_web/_plugins/{asciidoctor-extensions → asciidoctor}/admonition-block-question.rb +0 -0
- data/lib/starter_web/_plugins/{asciidoctor-extensions → asciidoctor}/banner.rb +0 -0
- data/lib/starter_web/_plugins/{asciidoctor-extensions → asciidoctor}/callout.rb +0 -0
- data/lib/starter_web/_plugins/{asciidoctor-extensions → asciidoctor}/carousel-block.rb +0 -0
- data/lib/starter_web/_plugins/{asciidoctor-extensions → asciidoctor}/conum.rb +0 -0
- data/lib/starter_web/_plugins/{asciidoctor-extensions → asciidoctor}/fab-icon-inline.rb +0 -0
- data/lib/starter_web/_plugins/{asciidoctor-extensions → asciidoctor}/fas-icon-inline.rb +0 -0
- data/lib/starter_web/_plugins/{asciidoctor-extensions → asciidoctor}/flag-icon-inline.rb +0 -0
- data/lib/starter_web/_plugins/{asciidoctor-extensions → asciidoctor}/gallery-block.rb +0 -0
- data/lib/starter_web/_plugins/{asciidoctor-extensions → asciidoctor}/gist-block.rb +0 -0
- data/lib/starter_web/_plugins/{asciidoctor-extensions → asciidoctor}/iconify-icon-inline.rb +0 -0
- data/lib/starter_web/_plugins/{asciidoctor-extensions → asciidoctor}/lightbox-block.rb +0 -0
- data/lib/starter_web/_plugins/{asciidoctor-extensions → asciidoctor}/lorem_inline.rb +0 -0
- data/lib/starter_web/_plugins/{asciidoctor-extensions → asciidoctor}/masterslider-block.rb +0 -0
- data/lib/starter_web/_plugins/{asciidoctor-extensions → asciidoctor}/mdi-icon-inline.rb +0 -0
- data/lib/starter_web/_plugins/{asciidoctor-extensions → asciidoctor}/panel.rb +0 -0
- data/lib/starter_web/_plugins/{asciidoctor-extensions → asciidoctor}/range-slider-block.rb +0 -0
- data/lib/starter_web/_plugins/{asciidoctor-extensions → asciidoctor}/shout-block.rb +0 -0
- data/lib/starter_web/_plugins/{asciidoctor-extensions → asciidoctor}/textbook-block.rb +0 -0
- data/lib/starter_web/_plugins/{asciidoctor-extensions → asciidoctor}/twitter-emoji-inline.rb +0 -0
- data/lib/starter_web/_plugins/{debug.rb → filter/debug.rb} +0 -0
- data/lib/starter_web/_plugins/{encodeBase64.rb → filter/encodeBase64.rb} +0 -0
- data/lib/starter_web/_plugins/{encryptAES.rb → filter/encryptAES.rb} +0 -0
- data/lib/starter_web/_plugins/{filters.rb → filter/filters.rb} +11 -0
- data/lib/starter_web/_plugins/{minifyJS.rb → filter/minifyJS.rb} +0 -0
- data/lib/starter_web/_plugins/{minifyJSON.rb → filter/minifyJSON.rb} +0 -0
- data/lib/starter_web/_plugins/{prettify.rb → filter/prettify.rb} +0 -0
- data/lib/starter_web/_plugins/filter/xml_prettify.rb +36 -0
- data/lib/starter_web/_plugins/{symlink_watcher.rb → helper/symlink_watcher.rb} +0 -0
- data/lib/starter_web/_plugins/{date-i18n.rb → i18n/date.rb} +1 -1
- data/lib/starter_web/_plugins/{lunr_index.rb → index/lunr.rb} +30 -30
- data/lib/starter_web/_plugins/seo/j1-feed.rb +268 -0
- data/lib/starter_web/_plugins/seo/j1-seo-tags.rb +717 -0
- data/lib/starter_web/_plugins/seo/j1-sitemap.rb +140 -0
- data/lib/starter_web/assets/images/banner/scalable/wave.svg +13 -0
- data/lib/starter_web/assets/images/blocks/waves/scalable/1280x100/wave-1.svg +63 -0
- data/lib/starter_web/assets/images/blocks/waves/scalable/1280x100/wave-2.svg +60 -0
- data/lib/starter_web/assets/images/blocks/waves/scalable/1280x100/wave-3.svg +64 -0
- data/lib/starter_web/assets/images/blocks/waves/scalable/1280x100/wave-4.svg +62 -0
- data/lib/starter_web/assets/images/blocks/waves/scalable/1920x100/wave-1.svg +64 -0
- data/lib/starter_web/assets/images/blocks/waves/scalable/1920x100/wave-2.svg +60 -0
- data/lib/starter_web/assets/images/blocks/waves/scalable/1920x100/wave-3.svg +65 -0
- data/lib/starter_web/assets/images/blocks/waves/scalable/1920x100/wave-4.svg +62 -0
- data/lib/starter_web/assets/images/collections/blog/featured/dynamic-web-access.png +0 -0
- data/lib/starter_web/assets/images/collections/blog/featured/jamstack-generators.png +0 -0
- data/lib/starter_web/assets/images/collections/blog/featured/static-web-access.png +0 -0
- data/lib/starter_web/assets/images/icons/jekyll/logo-2x.png +0 -0
- data/lib/starter_web/assets/images/icons/jekyll/octojekyll.png +0 -0
- data/lib/starter_web/assets/images/modules/attics/1280x800/j1-template.png +0 -0
- data/lib/starter_web/assets/images/modules/attics/1280x800/jekyll-generator.png +0 -0
- data/lib/starter_web/assets/images/modules/attics/1280x800jekyll-generator.jpg +0 -0
- data/lib/starter_web/assets/images/modules/attics/1920x1280/{ben-kolde.jpg → _ben-kolde.jpg} +0 -0
- data/lib/starter_web/assets/images/modules/attics/1920x1280/_moritz-kindler.jpg +0 -0
- data/lib/starter_web/assets/images/modules/attics/1920x1280/alina-grubnyak.jpg +0 -0
- data/lib/starter_web/assets/images/modules/attics/1920x1280/andrea-badino.jpg +0 -0
- data/lib/starter_web/assets/images/modules/attics/1920x1280/brad-neathery.jpg +0 -0
- data/lib/starter_web/assets/images/modules/attics/1920x1280/bruno-figueiredo.jpg +0 -0
- data/lib/starter_web/assets/images/modules/attics/1920x1280/fly-d.jpg +0 -0
- data/lib/starter_web/assets/images/modules/attics/1920x1280/guillaume-bolduc.jpg +0 -0
- data/lib/starter_web/assets/images/modules/attics/1920x1280/melanie-deziel.jpg +0 -0
- data/lib/starter_web/assets/images/modules/attics/1920x1280/milad-fakurian.jpg +0 -0
- data/lib/starter_web/assets/images/modules/attics/1920x1280/{_nasa.jpg → nasa.jpg} +0 -0
- data/lib/starter_web/assets/images/modules/attics/1920x1280/quino-al-2.jpg +0 -0
- data/lib/starter_web/assets/images/modules/attics/lunr-1280x800.jpg +0 -0
- data/lib/starter_web/assets/images/modules/attics/no-time-1920x1280.jpg +0 -0
- data/lib/starter_web/assets/images/modules/attics/{gift-from-hand-1920x1280.jpg → shutterstock_sponsor-1920x1280.jpg} +0 -0
- data/lib/starter_web/assets/images/modules/gallery/mega_cities/author.txt +75 -0
- data/lib/starter_web/assets/images/pages/egrid/bg.png +0 -0
- data/lib/starter_web/assets/images/pages/egrid/black_denim.png +0 -0
- data/lib/starter_web/assets/images/pages/egrid/explanation.png +0 -0
- data/lib/starter_web/assets/images/pages/egrid/html_markup.png +0 -0
- data/lib/starter_web/assets/images/pages/egrid/large/1.jpg +0 -0
- data/lib/starter_web/assets/images/pages/egrid/large/10.jpg +0 -0
- data/lib/starter_web/assets/images/pages/egrid/large/11.jpg +0 -0
- data/lib/starter_web/assets/images/pages/egrid/large/12.jpg +0 -0
- data/lib/starter_web/assets/images/pages/egrid/large/13.jpg +0 -0
- data/lib/starter_web/assets/images/pages/egrid/large/14.jpg +0 -0
- data/lib/starter_web/assets/images/pages/egrid/large/15.jpg +0 -0
- data/lib/starter_web/assets/images/pages/egrid/large/16.jpg +0 -0
- data/lib/starter_web/assets/images/pages/egrid/large/17.jpg +0 -0
- data/lib/starter_web/assets/images/pages/egrid/large/18.jpg +0 -0
- data/lib/starter_web/assets/images/pages/egrid/large/19.jpg +0 -0
- data/lib/starter_web/assets/images/pages/egrid/large/2.jpg +0 -0
- data/lib/starter_web/assets/images/pages/egrid/large/20.jpg +0 -0
- data/lib/starter_web/assets/images/pages/egrid/large/3.jpg +0 -0
- data/lib/starter_web/assets/images/pages/egrid/large/4.jpg +0 -0
- data/lib/starter_web/assets/images/pages/egrid/large/5.jpg +0 -0
- data/lib/starter_web/assets/images/pages/egrid/large/6.jpg +0 -0
- data/lib/starter_web/assets/images/pages/egrid/large/7.jpg +0 -0
- data/lib/starter_web/assets/images/pages/egrid/large/8.jpg +0 -0
- data/lib/starter_web/assets/images/pages/egrid/large/9.jpg +0 -0
- data/lib/starter_web/assets/images/pages/egrid/loading.gif +0 -0
- data/lib/starter_web/assets/images/pages/egrid/loading_dark.gif +0 -0
- data/lib/starter_web/assets/images/pages/egrid/nav-icon.png +0 -0
- data/lib/starter_web/assets/images/pages/egrid/nav.png +0 -0
- data/lib/starter_web/assets/images/pages/egrid/small/1.jpg +0 -0
- data/lib/starter_web/assets/images/pages/egrid/small/10.jpg +0 -0
- data/lib/starter_web/assets/images/pages/egrid/small/11.jpg +0 -0
- data/lib/starter_web/assets/images/pages/egrid/small/12.jpg +0 -0
- data/lib/starter_web/assets/images/pages/egrid/small/13.jpg +0 -0
- data/lib/starter_web/assets/images/pages/egrid/small/14.jpg +0 -0
- data/lib/starter_web/assets/images/pages/egrid/small/15.jpg +0 -0
- data/lib/starter_web/assets/images/pages/egrid/small/16.jpg +0 -0
- data/lib/starter_web/assets/images/pages/egrid/small/17.jpg +0 -0
- data/lib/starter_web/assets/images/pages/egrid/small/18.jpg +0 -0
- data/lib/starter_web/assets/images/pages/egrid/small/19.jpg +0 -0
- data/lib/starter_web/assets/images/pages/egrid/small/1a.jpg +0 -0
- data/lib/starter_web/assets/images/pages/egrid/small/2.jpg +0 -0
- data/lib/starter_web/assets/images/pages/egrid/small/20.jpg +0 -0
- data/lib/starter_web/assets/images/pages/egrid/small/3.jpg +0 -0
- data/lib/starter_web/assets/images/pages/egrid/small/4.jpg +0 -0
- data/lib/starter_web/assets/images/pages/egrid/small/5.jpg +0 -0
- data/lib/starter_web/assets/images/pages/egrid/small/6.jpg +0 -0
- data/lib/starter_web/assets/images/pages/egrid/small/7.jpg +0 -0
- data/lib/starter_web/assets/images/pages/egrid/small/8.jpg +0 -0
- data/lib/starter_web/assets/images/pages/egrid/small/9.jpg +0 -0
- data/lib/starter_web/assets/images/pages/roundtrip/500_themes/themes-menu-1280x800.jpg +0 -0
- data/lib/starter_web/assets/images/promo/home/screenshot.jpg +0 -0
- data/lib/starter_web/assets/images/promo/jekyll/jekyll-generator.png +0 -0
- data/lib/starter_web/assets/images/promo/jekyll/jekyll-og.png +0 -0
- data/lib/starter_web/collections/asciidoc_skeletons/simple-post/_posts/yyyy-mm-dd-your-post-name.asciidoc +13 -10
- data/lib/starter_web/collections/posts/public/featured/_posts/0000-00-00-welcome-to-j1.adoc.erb +8 -3
- data/lib/starter_web/collections/posts/public/featured/_posts/2021-01-01-about-cookies.adoc +11 -6
- data/lib/starter_web/collections/posts/public/featured/_posts/2021-02-01-site-generators.adoc +13 -10
- data/lib/starter_web/collections/posts/public/featured/_posts/2022-02-01-about-j1.adoc +12 -9
- data/lib/starter_web/collections/posts/public/featured/_posts/_includes/attributes.asciidoc +2 -2
- data/lib/starter_web/collections/posts/public/series/_posts/2020-01-01-post-wiki-series.adoc +13 -5
- data/lib/starter_web/collections/posts/public/series/_posts/2020-01-02-post-wiki-series.adoc +14 -7
- data/lib/starter_web/collections/posts/public/series/_posts/2020-01-03-post-wiki-series.adoc +13 -6
- data/lib/starter_web/index.html +90 -45
- data/lib/starter_web/package.json +1 -1
- data/lib/starter_web/pages/public/about/features.adoc +30 -27
- data/lib/starter_web/pages/public/about/reporting_issues.adoc +13 -11
- data/lib/starter_web/pages/public/about/site.adoc +2 -6
- data/lib/starter_web/pages/public/asciidoc_skeletons/documentation/000_intro.adoc +8 -10
- data/lib/starter_web/pages/public/asciidoc_skeletons/documentation/100_converter.adoc +8 -12
- data/lib/starter_web/pages/public/asciidoc_skeletons/documentation/200_themes.adoc +8 -11
- data/lib/starter_web/pages/public/asciidoc_skeletons/documentation/documentation.adoc +9 -8
- data/lib/starter_web/pages/public/asciidoc_skeletons/multi-document/multi.adoc +9 -14
- data/lib/starter_web/pages/public/asciidoc_skeletons/simple-document/simple.adoc +9 -14
- data/lib/starter_web/pages/public/blog/navigator/{archive.html → archive/allview.html} +53 -26
- data/lib/starter_web/pages/public/blog/navigator/archive/categoryview.html +46 -21
- data/lib/starter_web/pages/public/blog/navigator/archive/dateview.html +49 -19
- data/lib/starter_web/pages/public/blog/navigator/archive/tagview.html +58 -54
- data/lib/starter_web/pages/public/blog/navigator/index.html +212 -35
- data/lib/starter_web/pages/public/features/general.adoc +12 -30
- data/lib/starter_web/pages/public/features/template.adoc +9 -33
- data/lib/starter_web/pages/public/learn/quickstart.adoc +10 -8
- data/lib/starter_web/pages/public/learn/roundtrip/_includes/attributes.asciidoc +0 -7
- data/lib/starter_web/pages/public/learn/roundtrip/_includes/documents/410_table_bs_modal_examples.asciidoc +2 -2
- data/lib/starter_web/pages/public/learn/roundtrip/_includes/documents/themes_bootstrap.asciidoc +51 -0
- data/lib/starter_web/pages/public/learn/roundtrip/_includes/documents/themes_rouge.asciidoc +110 -0
- data/lib/starter_web/pages/public/learn/roundtrip/asciidoc_extensions.adoc +11 -9
- data/lib/starter_web/pages/public/learn/roundtrip/bootstrap_themes.adoc +80 -0
- data/lib/starter_web/pages/public/learn/roundtrip/icon_fonts.adoc +9 -7
- data/lib/starter_web/pages/public/learn/roundtrip/{quicksearch.adoc → lunr_search.adoc} +23 -18
- data/lib/starter_web/pages/public/learn/roundtrip/{bs_modals_extentions.adoc → modal_extentions.adoc} +23 -24
- data/lib/starter_web/pages/public/learn/roundtrip/present_images.adoc +12 -11
- data/lib/starter_web/pages/public/learn/roundtrip/present_videos.adoc +14 -10
- data/lib/starter_web/pages/public/learn/roundtrip/{responsive_tables_extensions.adoc → responsive_tables.adoc} +16 -13
- data/lib/starter_web/pages/public/learn/roundtrip/{typography.adoc → template_typography.adoc} +8 -7
- data/lib/starter_web/pages/public/learn/where_to_go.adoc +12 -29
- data/lib/starter_web/pages/public/legal/de/100_copyright.adoc +1 -1
- data/lib/starter_web/pages/public/legal/de/100_impress.adoc +1 -1
- data/lib/starter_web/pages/public/legal/de/300_privacy.adoc +1 -1
- data/lib/starter_web/pages/public/legal/de/400_comment_policy.adoc +3 -1
- data/lib/starter_web/pages/public/legal/en/100_copyright.adoc +7 -5
- data/lib/starter_web/pages/public/legal/en/200_impress.adoc +7 -5
- data/lib/starter_web/pages/public/legal/en/300_privacy.adoc +7 -5
- data/lib/starter_web/pages/public/legal/en/400_comment_policy.adoc +9 -5
- data/lib/starter_web/pages/public/panels/intro_panel/panel.adoc +11 -10
- data/lib/starter_web/pages/public/plans/plans.adoc +7 -4
- data/lib/starter_web/pages/public/previewer/preview_bootstrap_theme.adoc +16 -47
- data/lib/starter_web/utilsrv/_defaults/package.json +1 -1
- data/lib/starter_web/utilsrv/package.json +1 -1
- metadata +176 -135
- data/_includes/themes/j1/blocks/footer/generator.html +0 -151
- data/_includes/themes/j1/layouts/content_generator_app.html +0 -32
- data/_includes/themes/j1/layouts/content_generator_article_navigator.html +0 -176
- data/_includes/themes/j1/layouts/content_generator_blog_archive.html +0 -251
- data/_layouts/app.html +0 -65
- data/_layouts/article_navigator.html +0 -66
- data/_layouts/blog_archive.html +0 -64
- data/assets/data/article_navigator/index.html +0 -51
- data/lib/starter_web/_data/layouts/app.yml +0 -172
- data/lib/starter_web/_data/layouts/article_navigator.yml +0 -173
- data/lib/starter_web/_data/layouts/blog_archive.yml +0 -191
- data/lib/starter_web/_includes/custom/static/custom_teaser.html +0 -64
- data/lib/starter_web/assets/images/banner/scalable/readme +0 -0
- data/lib/starter_web/assets/images/collections/blog/featured/dynamic-web-access.jpg +0 -0
- data/lib/starter_web/assets/images/collections/blog/featured/jamstack-generators-2.jpg +0 -0
- data/lib/starter_web/assets/images/collections/blog/featured/markus-spiske-2.jpg +0 -0
- data/lib/starter_web/assets/images/collections/blog/featured/static-web-access.jpg +0 -0
- data/lib/starter_web/assets/images/collections/blog/featured/welcome-to-j1-template.jpg +0 -0
- data/lib/starter_web/assets/images/collections/blog/featured/what-is-a-baseurl.jpg +0 -0
- data/lib/starter_web/assets/images/collections/blog/series/j1_using_docker/j1_docker_banner.1280x500.png +0 -0
- data/lib/starter_web/assets/images/collections/blog/series/j1_using_docker/kinematic_alpha.1280x600.png +0 -0
- data/lib/starter_web/assets/images/collections/blog/series/j1_using_docker/kinematic_j1.1280x300.png +0 -0
- data/lib/starter_web/assets/images/collections/blog/series/j1_using_docker/windows_docker_banner.1280x500.png +0 -0
- data/lib/starter_web/assets/images/modules/attics/1920x1280/braden-collum.jpg +0 -0
- data/lib/starter_web/assets/images/modules/attics/1920x1280/firmbee-com.jpg +0 -0
- data/lib/starter_web/assets/images/modules/attics/1920x1280/moritz-kindler.jpg +0 -0
- data/lib/starter_web/assets/images/modules/attics/1920x1280/spacex.jpg +0 -0
- data/lib/starter_web/assets/videos/gallery/dailymotion/meditation.jpg +0 -0
- data/lib/starter_web/assets/videos/gallery/dailymotion/pilates.jpg +0 -0
- data/lib/starter_web/assets/videos/gallery/html5/video1.mp4 +0 -0
- data/lib/starter_web/assets/videos/gallery/html5/video2.mp4 +0 -0
- data/lib/starter_web/assets/videos/gallery/kick-it-old-school-poster.jpg +0 -0
- data/lib/starter_web/assets/videos/gallery/nye-party-shop-poster.jpg +0 -0
- data/lib/starter_web/assets/videos/gallery/stay-colorful-poster.jpg +0 -0
- data/lib/starter_web/assets/videos/gallery/video1-poster.jpg +0 -0
- data/lib/starter_web/assets/videos/gallery/video1-thumb.jpg +0 -0
- data/lib/starter_web/assets/videos/gallery/video2-poster.jpg +0 -0
- data/lib/starter_web/assets/videos/gallery/video2-thumb.jpg +0 -0
- data/lib/starter_web/assets/videos/gallery/video_adele-poster.jpg +0 -0
- data/lib/starter_web/assets/videos/gallery/video_gaga-poster.jpg +0 -0
- data/lib/starter_web/assets/videos/gallery/video_gwen-poster.jpg +0 -0
- data/lib/starter_web/assets/videos/gallery/video_michelle-poster.jpg +0 -0
- data/lib/starter_web/assets/videos/gallery/vk/hai.jpg +0 -0
- data/lib/starter_web/assets/videos/gallery/vk/otter.jpg +0 -0
- data/lib/starter_web/assets/videos/gallery/voice_kids_de_2021/battle.jpg +0 -0
- data/lib/starter_web/assets/videos/gallery/voice_kids_de_2021/ben.jpg +0 -0
- data/lib/starter_web/assets/videos/gallery/voice_kids_de_2021/constance.jpg +0 -0
- data/lib/starter_web/assets/videos/gallery/voice_kids_de_2021/elisa.jpg +0 -0
- data/lib/starter_web/assets/videos/headers/present_videos/still/underground-broadway.jpg +0 -0
- data/lib/starter_web/assets/videos/headers/present_videos/underground-broadway.mp4 +0 -0
- data/lib/starter_web/assets/videos/tiktok/einhorn.jpg +0 -0
- data/lib/starter_web/assets/videos/tiktok/waluschka.jpg +0 -0
- data/lib/starter_web/pages/public/jupyter/examples/distributed/j1-circular-times-table.adoc +0 -142
- data/lib/starter_web/pages/public/jupyter/examples/distributed/j1-common-used-widgets.adoc +0 -232
- data/lib/starter_web/pages/public/jupyter/examples/distributed/j1-odes-in-python.adoc +0 -115
- data/lib/starter_web/pages/public/jupyter/examples/localized/j1_climate-change-forecast.adoc +0 -109
- data/lib/starter_web/pages/public/jupyter/notebooks/j1/j1_circular_times_table.ipynb +0 -12382
- data/lib/starter_web/pages/public/jupyter/notebooks/j1/j1_climate_change_forecast.ipynb +0 -1058
- data/lib/starter_web/pages/public/jupyter/notebooks/j1/j1_docs_example_dynamic.ipynb +0 -14478
- data/lib/starter_web/pages/public/jupyter/notebooks/j1/j1_interactive_widgets.ipynb +0 -442
- data/lib/starter_web/pages/public/jupyter/notebooks/j1/j1_nbi_widgets.ipynb +0 -523
- data/lib/starter_web/pages/public/jupyter/notebooks/j1/j1_nbi_widgets_bar_chart.ipynb +0 -89
- data/lib/starter_web/pages/public/jupyter/notebooks/j1/j1_nbi_widgets_hist_chart.ipynb +0 -87
- data/lib/starter_web/pages/public/jupyter/notebooks/j1/j1_nbi_widgets_line_chart.ipynb +0 -90
- data/lib/starter_web/pages/public/jupyter/notebooks/j1/j1_nbi_widgets_question_multiple_choice.ipynb +0 -64
- data/lib/starter_web/pages/public/jupyter/notebooks/j1/j1_nbi_widgets_question_short_answer.ipynb +0 -122
- data/lib/starter_web/pages/public/jupyter/notebooks/j1/j1_nbi_widgets_scatter_chart.ipynb +0 -89
- data/lib/starter_web/pages/public/jupyter/notebooks/j1/j1_nbi_widgets_scatter_drag_chart.ipynb +0 -87
- data/lib/starter_web/pages/public/jupyter/notebooks/j1/j1_odes_in_python.ipynb +0 -15227
- data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_circular_times_table.html +0 -747
- data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_climate_change_forecast.html +0 -1250
- data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_docs_example_dynamic.html +0 -186
- data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_interactive_widgets.html +0 -512
- data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_nbi_widgets.html +0 -629
- data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_nbi_widgets_bar_chart.html +0 -95
- data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_nbi_widgets_hist_chart.html +0 -93
- data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_nbi_widgets_line_chart.html +0 -96
- data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_nbi_widgets_question_multiple_choice.html +0 -70
- data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_nbi_widgets_question_short_answer.html +0 -156
- data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_nbi_widgets_scatter_chart.html +0 -95
- data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_nbi_widgets_scatter_drag_chart.html +0 -93
- data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_odes_in_python.html +0 -955
- data/lib/starter_web/pages/public/jupyter/where_to_go.adoc +0 -232
- data/lib/starter_web/pages/public/learn/roundtrip/_includes/google-ad.js +0 -130
- data/lib/starter_web/pages/public/learn/roundtrip/themes.adoc +0 -253
- data/lib/starter_web/pages/public/se/se-fake.adoc +0 -48
@@ -0,0 +1,103 @@
|
|
1
|
+
<!--
|
2
|
+
# -----------------------------------------------------------------------------
|
3
|
+
# ~/assets/custom/content/templates/bs5_accordion.html
|
4
|
+
#
|
5
|
+
# Product/Info:
|
6
|
+
# http://jekyll.one
|
7
|
+
#
|
8
|
+
# Copyright (C) 2022 Juergen Adams
|
9
|
+
#
|
10
|
+
# J1 Template is licensed under the MIT License.
|
11
|
+
# See: https://github.com/jekyll-one-org/J1 Template/blob/master/LICENSE
|
12
|
+
#
|
13
|
+
# -----------------------------------------------------------------------------
|
14
|
+
# NOTE:
|
15
|
+
# Find the accordion example @BS5:
|
16
|
+
# https://getbootstrap.com/docs/5.2/components/accordion/
|
17
|
+
# -----------------------------------------------------------------------------
|
18
|
+
# Test data:
|
19
|
+
# liquid_var: {{liquid_var | debug}}
|
20
|
+
# -----------------------------------------------------------------------------
|
21
|
+
-->
|
22
|
+
|
23
|
+
{% comment %} Process YAML config data
|
24
|
+
================================================================================ {% endcomment %}
|
25
|
+
|
26
|
+
{% comment %} Set config data (page)
|
27
|
+
-------------------------------------------------------------------------------- {% endcomment %}
|
28
|
+
{% assign debug_enabled = page.accordion.debug %}
|
29
|
+
{% assign name = page.accordion.name %}
|
30
|
+
{% assign id = page.accordion.id %}
|
31
|
+
{% assign title = page.accordion.header.title %}
|
32
|
+
{% assign tagline = page.accordion.header.tagline %}
|
33
|
+
{% assign description = page.accordion.header.description %}
|
34
|
+
|
35
|
+
|
36
|
+
{% comment %} Main
|
37
|
+
-------------------------------------------------------------------------------- {% endcomment %}
|
38
|
+
<!-- Panel container settings -->
|
39
|
+
<section id="panel_{{name}}" class="g-2 elevated-z2">
|
40
|
+
<section id="{{name}}" class="container">
|
41
|
+
<div class="row mt-5 mb-5">
|
42
|
+
|
43
|
+
<!-- Panel Header -->
|
44
|
+
<div class="noclass">
|
45
|
+
<div>
|
46
|
+
<h2 class="g-font-weight-500 mb-0">{{title}}</h2>
|
47
|
+
<p class="tagline mb-0"><b>{{tagline}}</b></p>
|
48
|
+
<div class="d-inline-block g-width-50 g-height-2 bg-primary mb-2"></div>
|
49
|
+
</div>
|
50
|
+
<div class="mt-3 mb-3">{{description}}</div>
|
51
|
+
</div>
|
52
|
+
<!-- End Header -->
|
53
|
+
|
54
|
+
<!-- Dynamic Content -->
|
55
|
+
<div id="{{id}}" class="accordion mt-3">
|
56
|
+
{% for element in page.accordion.elements %}
|
57
|
+
|
58
|
+
{% if element.expanded %}
|
59
|
+
{% assign button_collapsed = '' %}
|
60
|
+
{% assign content_collapsed = 'collapse show' %}
|
61
|
+
{% assign aria_expanded = 'true' %}
|
62
|
+
{% else %}
|
63
|
+
{% assign button_collapsed = 'collapsed' %}
|
64
|
+
{% assign content_collapsed = 'collapse' %}
|
65
|
+
{% assign aria_expanded = 'false' %}
|
66
|
+
{% endif %}
|
67
|
+
|
68
|
+
{% if debug_enabled %}
|
69
|
+
button_collapsed: {{button_collapsed|debug}}
|
70
|
+
content_collapsed: {{content_collapsed|debug}}
|
71
|
+
aria_expanded: {{aria_expanded|debug}}
|
72
|
+
{% endif %}
|
73
|
+
|
74
|
+
<div class="accordion-item">
|
75
|
+
<h2 id="heading-{{forloop.index}}" class="accordion-header">
|
76
|
+
<button
|
77
|
+
class="accordion-button {{button_collapsed}}"
|
78
|
+
type="button"
|
79
|
+
data-bs-toggle="collapse"
|
80
|
+
data-bs-target="#collapse_{{forloop.index}}"
|
81
|
+
aria-expanded="{{aria_expanded}}"
|
82
|
+
aria-controls="collapse_{{forloop.index}}">
|
83
|
+
{{element.title}}
|
84
|
+
</button>
|
85
|
+
</h2>
|
86
|
+
<div
|
87
|
+
id="collapse_{{forloop.index}}"
|
88
|
+
class="accordion-collapse {{content_collapsed}}"
|
89
|
+
aria-labelledby="heading_{{forloop.index}}"
|
90
|
+
data-bs-parent="#{{id}}">
|
91
|
+
<div class="accordion-body">
|
92
|
+
{{element.content|markdownify}}
|
93
|
+
</div>
|
94
|
+
</div>
|
95
|
+
</div>
|
96
|
+
{% endfor %}
|
97
|
+
</div>
|
98
|
+
<!-- End Dynamic Content -->
|
99
|
+
|
100
|
+
</div>
|
101
|
+
</section>
|
102
|
+
</section>
|
103
|
+
<!-- End Panel container settings -->
|
data/lib/starter_web/_plugins/{asciidoctor-extensions → asciidoctor}/admonition-block-answer.rb
RENAMED
File without changes
|
data/lib/starter_web/_plugins/{asciidoctor-extensions → asciidoctor}/admonition-block-question.rb
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
data/lib/starter_web/_plugins/{asciidoctor-extensions → asciidoctor}/twitter-emoji-inline.rb
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -50,6 +50,7 @@ module Jekyll
|
|
50
50
|
module J1_Filters
|
51
51
|
|
52
52
|
EMPTY = ''
|
53
|
+
DOCTYPE_HTML = '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">'
|
53
54
|
# EMPTY_LINE = /^\s*\n/
|
54
55
|
EMPTY_LINE = /^\s*$\n/
|
55
56
|
MULTIPLE_SPACES = / +/
|
@@ -206,6 +207,16 @@ module Jekyll
|
|
206
207
|
input.to_s.gsub(Regexp.new(COMMENT_LINE), NOTHING)
|
207
208
|
end
|
208
209
|
|
210
|
+
# --------------------------------------------------------------------------
|
211
|
+
# strip_doctype_html:
|
212
|
+
#
|
213
|
+
# Example: stribg_var | strip_doctype_html
|
214
|
+
#
|
215
|
+
# --------------------------------------------------------------------------
|
216
|
+
def strip_doctype_html(input)
|
217
|
+
input.to_s.gsub(Regexp.new(DOCTYPE_HTML), NOTHING)
|
218
|
+
end
|
219
|
+
|
209
220
|
# --------------------------------------------------------------------------
|
210
221
|
# strip_html_comments:
|
211
222
|
#
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# ------------------------------------------------------------------------------
|
2
|
+
# ~/_plugins/xml_prettify.rb
|
3
|
+
# Liquid filter for J1 Template to beautify XML code
|
4
|
+
#
|
5
|
+
# Product/Info:
|
6
|
+
# http://jekyll.one
|
7
|
+
#
|
8
|
+
# Copyright (C) 2022 Juergen Adams
|
9
|
+
#
|
10
|
+
# J1 Template is licensed under the MIT License.
|
11
|
+
# See: https://github.com/jekyll-one-org/J1 Template/blob/master/LICENSE
|
12
|
+
# ------------------------------------------------------------------------------
|
13
|
+
# NOTE:
|
14
|
+
# CustomFilters cannot be used in SAFE mode (e.g not usable for
|
15
|
+
# rendering pages with Jekyll on GitHub
|
16
|
+
#
|
17
|
+
# USAGE:
|
18
|
+
# {% capture cache_name %}
|
19
|
+
#
|
20
|
+
# liquid code to generate XML output goes here
|
21
|
+
#
|
22
|
+
# {% endcapture %}
|
23
|
+
# {{ cache_name | xml_pretty_print }}
|
24
|
+
# ------------------------------------------------------------------------------
|
25
|
+
require 'nokogiri'
|
26
|
+
|
27
|
+
module Jekyll
|
28
|
+
module XmlPrettyPrint
|
29
|
+
def xml_pretty_print(input)
|
30
|
+
# xml cleanup
|
31
|
+
Nokogiri::XML(input).root.to_xml
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
Liquid::Template.register_filter(Jekyll::XmlPrettyPrint)
|
File without changes
|
@@ -47,7 +47,7 @@ module Jekyll
|
|
47
47
|
|
48
48
|
def load_translations
|
49
49
|
return false unless I18n.backend.send(:translations).empty?
|
50
|
-
filename = File.join(File.dirname(__FILE__), '
|
50
|
+
filename = File.join(File.dirname(__FILE__), '../../_data/locales/*.yml')
|
51
51
|
I18n.backend.load_translations Dir[filename]
|
52
52
|
end
|
53
53
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# ------------------------------------------------------------------------------
|
2
2
|
# ~/_plugins/lunr_index.rb
|
3
|
-
# Creates
|
3
|
+
# Creates a index file (json) to be used by J1 Lunr
|
4
4
|
#
|
5
5
|
# Product/Info:
|
6
6
|
# http://jekyll.one
|
@@ -16,10 +16,11 @@ require 'json'
|
|
16
16
|
require 'uri'
|
17
17
|
require 'execjs'
|
18
18
|
require 'yaml'
|
19
|
+
require 'nokogiri'
|
19
20
|
|
20
21
|
module Jekyll
|
21
22
|
module J1LunrSearch
|
22
|
-
#noinspection RubyTooManyInstanceVariablesInspection
|
23
|
+
#noinspection RubyTooManyInstanceVariablesInspection,RubyInterpreter
|
23
24
|
class Indexer < Jekyll::Generator
|
24
25
|
def initialize(config = {})
|
25
26
|
super(config)
|
@@ -27,19 +28,17 @@ module Jekyll
|
|
27
28
|
@mode = config['environment']
|
28
29
|
@template = config['theme']
|
29
30
|
|
30
|
-
@
|
31
|
-
@
|
32
|
-
@
|
33
|
-
@j1_config_path = config['data_dir']
|
34
|
-
|
35
|
-
@j1_config = YAML::load(File.open(File.join(@j1_config_path, 'j1_config.yml')))
|
31
|
+
@project_path = File.join(File.dirname(__FILE__)).sub('_plugins/index', '')
|
32
|
+
@module_config_path = File.join(@project_path, config['data_dir'], 'modules')
|
33
|
+
@j1_config_path = config['data_dir']
|
36
34
|
|
37
|
-
@
|
38
|
-
@
|
35
|
+
@j1_config = YAML::load(File.open(File.join(@j1_config_path, 'j1_config.yml')))
|
36
|
+
@module_config_default = YAML::load(File.open(File.join(@module_config_path, 'defaults', 'lunr.yml')))
|
37
|
+
@module_config_user = YAML::load(File.open(File.join(@module_config_path,'lunr.yml')))
|
39
38
|
|
40
39
|
@module_config_default_settings = @module_config_default['defaults']
|
41
|
-
@module_config_user_settings
|
42
|
-
@module_config
|
40
|
+
@module_config_user_settings = @module_config_user['settings']
|
41
|
+
@module_config = @module_config_default_settings.merge!(@module_config_user_settings)
|
43
42
|
|
44
43
|
@lunr_config = {
|
45
44
|
'excludes' => [],
|
@@ -63,18 +62,18 @@ module Jekyll
|
|
63
62
|
@index_name = @lunr_config['index_name']
|
64
63
|
|
65
64
|
# calculate the module path
|
66
|
-
# if NO template GEM is used (dev system), @
|
65
|
+
# if NO template GEM is used (dev system), @project_path points
|
67
66
|
# in the project folder, otherwise (runtime system) to the Ruby
|
68
67
|
# GEM installation folder!
|
69
68
|
#
|
70
69
|
if @template.nil?
|
71
|
-
@
|
70
|
+
@project_path = File.join(File.dirname(__FILE__), '../../', @module_dir)
|
72
71
|
else
|
73
72
|
@gem_path = `bundle info --path j1-template`
|
74
|
-
@
|
73
|
+
@project_path = File.join(@gem_path.chomp, @module_dir)
|
75
74
|
end
|
76
75
|
|
77
|
-
@lunr_path = File.join(@
|
76
|
+
@lunr_path = File.join(@project_path, 'lunr.min.js')
|
78
77
|
raise "Could not find #{@lunr_path}" unless File.exist?(@lunr_path)
|
79
78
|
|
80
79
|
lunr_src = open(@lunr_path).read
|
@@ -112,7 +111,7 @@ module Jekyll
|
|
112
111
|
|
113
112
|
if @module_config['rebuild'] == false
|
114
113
|
if File.exist?(index_file)
|
115
|
-
Jekyll.logger.info 'J1 Lunr:', '
|
114
|
+
Jekyll.logger.info 'J1 Lunr:', 'rebuild index disabled'
|
116
115
|
# Keep the index file from being cleaned by Jekyll
|
117
116
|
#
|
118
117
|
site.static_files << SearchIndexFile.new(site, site.dest, '/', @module_config['index_file'])
|
@@ -120,7 +119,7 @@ module Jekyll
|
|
120
119
|
end
|
121
120
|
end
|
122
121
|
|
123
|
-
Jekyll.logger.info 'J1 Lunr:', '
|
122
|
+
Jekyll.logger.info 'J1 Lunr:', 'generate search index'
|
124
123
|
|
125
124
|
# gather posts and pages
|
126
125
|
#
|
@@ -186,7 +185,7 @@ module Jekyll
|
|
186
185
|
#
|
187
186
|
FileUtils.mkdir_p(File.dirname(filepath))
|
188
187
|
File.open(filepath, 'w') { |f| f.write(JSON.dump(total)) }
|
189
|
-
|
188
|
+
# Jekyll.logger.info 'J1 Lunr:', "finished, index ready."
|
190
189
|
added_files = [filename]
|
191
190
|
|
192
191
|
# Keep the written files from being cleaned by Jekyll
|
@@ -236,7 +235,6 @@ module Jekyll
|
|
236
235
|
end
|
237
236
|
end
|
238
237
|
|
239
|
-
require 'nokogiri'
|
240
238
|
module Jekyll
|
241
239
|
module J1LunrSearch
|
242
240
|
class PageRenderer
|
@@ -276,7 +274,7 @@ module Jekyll
|
|
276
274
|
end
|
277
275
|
end
|
278
276
|
|
279
|
-
|
277
|
+
|
280
278
|
module Jekyll
|
281
279
|
module J1LunrSearch
|
282
280
|
#noinspection RubyTooManyInstanceVariablesInspection
|
@@ -302,16 +300,18 @@ module Jekyll
|
|
302
300
|
|
303
301
|
if description.nil? || description.length == 0
|
304
302
|
description = 'No description available.'
|
303
|
+
else
|
304
|
+
description, keywords = description.split(/~~~/)
|
305
305
|
end
|
306
306
|
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
307
|
+
# Previous code used for Posts
|
308
|
+
#
|
309
|
+
# if site.is_a?(Jekyll::Document)
|
310
|
+
# excerpt = extract_excerpt(site)
|
311
|
+
# unless excerpt.nil? || excerpt.length == 0
|
312
|
+
# description = excerpt
|
313
|
+
# end
|
314
|
+
# end
|
315
315
|
|
316
316
|
SearchEntry.new(title, tagline, url, date, tags, categories, description, is_post, body, renderer)
|
317
317
|
|
@@ -372,6 +372,6 @@ end
|
|
372
372
|
|
373
373
|
module Jekyll
|
374
374
|
module J1LunrSearch
|
375
|
-
VERSION = '2022.
|
375
|
+
VERSION = '2022.6.1'
|
376
376
|
end
|
377
377
|
end
|
@@ -0,0 +1,268 @@
|
|
1
|
+
# ------------------------------------------------------------------------------
|
2
|
+
# ~/_plugins/j1-feed.rb
|
3
|
+
# Generate RSS feeds for all posts of a site
|
4
|
+
#
|
5
|
+
# Product/Info:
|
6
|
+
# http://jekyll.one
|
7
|
+
#
|
8
|
+
# Copyright (C) 2022 Ben Balter and Contributors
|
9
|
+
# Copyright (C) 2022 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
|
+
require 'jekyll'
|
15
|
+
require 'fileutils'
|
16
|
+
|
17
|
+
module J1Feed
|
18
|
+
class Generator < Jekyll::Generator
|
19
|
+
safe true
|
20
|
+
priority :lowest
|
21
|
+
|
22
|
+
# Main plugin action, called by Jekyll Core
|
23
|
+
#
|
24
|
+
def generate(site)
|
25
|
+
@site = site
|
26
|
+
|
27
|
+
@mode = site.config['environment']
|
28
|
+
@template = site.config['theme']
|
29
|
+
@project_path = File.join(File.dirname(__FILE__)).sub('_plugins/seo', '')
|
30
|
+
@plugin_data_path = File.join(@project_path, site.config['data_dir'])
|
31
|
+
@module_config_path = File.join(@project_path, site.config['data_dir'], 'plugins')
|
32
|
+
|
33
|
+
@module_config_default = YAML::load(File.open(File.join(@module_config_path, 'defaults', 'feed.yml')))
|
34
|
+
@module_config_user = YAML::load(File.open(File.join(@module_config_path, 'feed.yml')))
|
35
|
+
|
36
|
+
@module_config_default_settings = @module_config_default['defaults']
|
37
|
+
@module_config_user_settings = @module_config_user['settings']
|
38
|
+
@module_config = @module_config_default_settings.merge!(@module_config_user_settings)
|
39
|
+
|
40
|
+
@feed_generation_path = @module_config['path'].sub('feed.xml', 'for_categories')
|
41
|
+
@feed_generation_enabled = @module_config['enabled']
|
42
|
+
|
43
|
+
@template_source_folder = File.join(@project_path, @module_config['template_source_folder'])
|
44
|
+
@template_name = @module_config['template_name']
|
45
|
+
@feed_output = @module_config['feed_output']
|
46
|
+
|
47
|
+
if disabled_in_development?
|
48
|
+
Jekyll.logger.info "J1 Feed:", "generate feed skipped in mode development"
|
49
|
+
return
|
50
|
+
end
|
51
|
+
|
52
|
+
if plugin_disabled?
|
53
|
+
Jekyll.logger.info "J1 Feed:", "generate feed: disabled"
|
54
|
+
return
|
55
|
+
end
|
56
|
+
|
57
|
+
if @module_config['excerpt_only']
|
58
|
+
Jekyll.logger.info "J1 Feed:", "generate feed for: excerpts only"
|
59
|
+
end
|
60
|
+
|
61
|
+
if @module_config['posts_limit'] < 100
|
62
|
+
Jekyll.logger.info "J1 Feed:", "generate feed for: #posts of #{@module_config['posts_limit']}"
|
63
|
+
else
|
64
|
+
Jekyll.logger.info "J1 Feed:", "generate feed for: #posts of unlimited"
|
65
|
+
end
|
66
|
+
|
67
|
+
collections.each do |name, meta|
|
68
|
+
Jekyll.logger.info "J1 Feed:", "generate feed for: all #{name}"
|
69
|
+
(meta["categories"] + [nil]).each do |category|
|
70
|
+
Jekyll.logger.info "J1 Feed:", "generate feed for posts by category: #{category}" if category
|
71
|
+
path = feed_path(:collection => name, :category => category)
|
72
|
+
|
73
|
+
# rebuild the feed xml file?
|
74
|
+
#
|
75
|
+
unless @module_config['rebuild_feeds']
|
76
|
+
path = feed_path(:collection => name, :category => category)
|
77
|
+
if file_exists?(path)
|
78
|
+
Jekyll.logger.info "J1 Feed:", "feed already exist, skip rebuild"
|
79
|
+
next
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
@site.pages << make_page(path, :collection => name, :category => category)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
generate_feed_by_tag if config['tags'] && !@site.tags.empty?
|
87
|
+
end
|
88
|
+
|
89
|
+
private
|
90
|
+
|
91
|
+
# Strip all whitespaces to minify the template.
|
92
|
+
# The regex matches all whitespace that follows
|
93
|
+
# '>' which match a closed XML tag
|
94
|
+
# '}' which match a closed Liquid tag
|
95
|
+
#
|
96
|
+
MINIFY_REGEX = %r!(?<=>|})\s+!.freeze
|
97
|
+
|
98
|
+
# Returns the plugin's config or an empty hash if not set
|
99
|
+
#
|
100
|
+
def config
|
101
|
+
@config ||= @module_config || {}
|
102
|
+
end
|
103
|
+
|
104
|
+
# Determines the destination path of a given feed as:
|
105
|
+
# 'collection', the name of a collection (example: 'posts')
|
106
|
+
# 'category', a category within that collection (example: 'news')
|
107
|
+
#
|
108
|
+
# Returns '/feed.xml' (default for posts) or the path specified in config
|
109
|
+
# Returns `/feed/category.xml` for post categories
|
110
|
+
# Returns `/feed/collection.xml` for other collections
|
111
|
+
# Returns `/feed/collection/category.xml` for other collection categories
|
112
|
+
#
|
113
|
+
def feed_path(collection: "posts", category: nil)
|
114
|
+
prefix = collection == "posts" ? "/feed" : "/feed/#{collection}"
|
115
|
+
return "#{@feed_generation_path}/#{category.downcase}.xml" if category
|
116
|
+
|
117
|
+
collections.dig(collection, "path") || "#{prefix}.xml"
|
118
|
+
end
|
119
|
+
|
120
|
+
# Returns a hash representing all collections to be processed
|
121
|
+
# and their metadata in the form of:
|
122
|
+
# { collection_name => { categories = [...], path = '...' } }
|
123
|
+
#
|
124
|
+
def collections
|
125
|
+
return @collections if defined?(@collections)
|
126
|
+
|
127
|
+
@collections = case config["collections"]
|
128
|
+
when Array
|
129
|
+
config["collections"].map { |c| [c, {}] }.to_h
|
130
|
+
when Hash
|
131
|
+
config["collections"]
|
132
|
+
else
|
133
|
+
{}
|
134
|
+
end
|
135
|
+
|
136
|
+
@collections = normalize_posts_meta(@collections)
|
137
|
+
@collections.each_value do |meta|
|
138
|
+
meta["categories"] = (meta["categories"] || []).to_set
|
139
|
+
end
|
140
|
+
|
141
|
+
@collections
|
142
|
+
end
|
143
|
+
|
144
|
+
def generate_feed_by_tag
|
145
|
+
tags_config = config['tags']
|
146
|
+
enabled = config['tags']['enabled']
|
147
|
+
tags_config = {} unless tags_config.is_a?(Hash)
|
148
|
+
|
149
|
+
except = tags_config["except"] || []
|
150
|
+
only = tags_config["only"] || @site.tags.keys
|
151
|
+
tags_pool = only - except
|
152
|
+
tags_path = tags_config["path"] || "/feed/by_tag/"
|
153
|
+
|
154
|
+
# enable|disable generation of feeds by tag
|
155
|
+
#
|
156
|
+
generate_tag_feed(tags_pool, tags_path) if enabled
|
157
|
+
end
|
158
|
+
|
159
|
+
def generate_tag_feed(tags_pool, tags_path)
|
160
|
+
tags_pool.each do |tag|
|
161
|
+
# allow only tags with basic alphanumeric characters and underscore
|
162
|
+
# to keep feed path simple.
|
163
|
+
#
|
164
|
+
# next if %r![^a-zA-Z0-9_]!.match?(tag)
|
165
|
+
next if %r!\W!.match?(tag)
|
166
|
+
|
167
|
+
Jekyll.logger.info "J1 Feed:", "generate feed for posts by tag: #{tag}" if tag
|
168
|
+
path = "#{tags_path}#{tag.downcase}.xml"
|
169
|
+
next if file_exists?(path)
|
170
|
+
|
171
|
+
@site.pages << make_page(path, :tags => tag)
|
172
|
+
end
|
173
|
+
end
|
174
|
+
|
175
|
+
# Path to the template file (feed.xml)
|
176
|
+
#
|
177
|
+
def feed_source_path
|
178
|
+
@feed_source_path ||= File.expand_path @template_name, @template_source_folder
|
179
|
+
end
|
180
|
+
|
181
|
+
def feed_template
|
182
|
+
@feed_template ||= File.read(feed_source_path).gsub(MINIFY_REGEX, "")
|
183
|
+
end
|
184
|
+
|
185
|
+
# Checks if a file already exists in the site source
|
186
|
+
#
|
187
|
+
def file_exists?(file_path)
|
188
|
+
File.exist? @site.in_source_dir(file_path)
|
189
|
+
end
|
190
|
+
|
191
|
+
# Generates contents for a file
|
192
|
+
#
|
193
|
+
def make_page(file_path, collection: "posts", category: nil, tags: nil)
|
194
|
+
PageWithoutAFile.new(@site, __dir__, "", file_path).tap do |file|
|
195
|
+
file.content = feed_template
|
196
|
+
file.data.merge!(
|
197
|
+
"layout" => nil,
|
198
|
+
"sitemap" => false,
|
199
|
+
"xsl" => file_exists?("feed.xslt.xml"),
|
200
|
+
"collection" => collection,
|
201
|
+
"category" => category,
|
202
|
+
"tags" => tags
|
203
|
+
)
|
204
|
+
file.output
|
205
|
+
end
|
206
|
+
end
|
207
|
+
|
208
|
+
# Special case the "posts" collection, which, for ease of use
|
209
|
+
# and backwards compatability, can be configured via top-level keys or
|
210
|
+
# directly as a collection
|
211
|
+
#
|
212
|
+
def normalize_posts_meta(hash)
|
213
|
+
hash["posts"] ||= {}
|
214
|
+
hash["posts"]["path"] ||= config["path"]
|
215
|
+
hash["posts"]["categories"] ||= config["categories"]
|
216
|
+
config["path"] ||= hash["posts"]["path"]
|
217
|
+
hash
|
218
|
+
end
|
219
|
+
|
220
|
+
# Check if plugin is enabled|disabled
|
221
|
+
#
|
222
|
+
def plugin_disabled?
|
223
|
+
if config['enabled']
|
224
|
+
false
|
225
|
+
else
|
226
|
+
true
|
227
|
+
end
|
228
|
+
end
|
229
|
+
|
230
|
+
def disabled_in_development?
|
231
|
+
config && config['disable_in_development'] && Jekyll.env == 'development'
|
232
|
+
end
|
233
|
+
end
|
234
|
+
|
235
|
+
class PageWithoutAFile < Jekyll::Page
|
236
|
+
def read_yaml(*)
|
237
|
+
@data ||= {}
|
238
|
+
end
|
239
|
+
end
|
240
|
+
|
241
|
+
class MetaTag < Liquid::Tag
|
242
|
+
# Use Jekyll's native relative_url filter
|
243
|
+
include Jekyll::Filters::URLFilters
|
244
|
+
|
245
|
+
def render(context)
|
246
|
+
# Jekyll::Filters::URLFilters requires `@context`
|
247
|
+
# to be set in the environment.
|
248
|
+
@context = context
|
249
|
+
|
250
|
+
config = context.registers[:site].config
|
251
|
+
path = config.dig("feed", "path") || "feed.xml"
|
252
|
+
title = config["title"] || config["name"]
|
253
|
+
|
254
|
+
attributes = {
|
255
|
+
:type => "application/atom+xml",
|
256
|
+
:rel => "alternate",
|
257
|
+
:href => absolute_url(path),
|
258
|
+
}
|
259
|
+
attributes[:title] = title if title
|
260
|
+
|
261
|
+
attrs = attributes.map { |k, v| "#{k}=#{v.to_s.encode(:xml => :attr)}" }.join(" ")
|
262
|
+
"<link #{attrs} />"
|
263
|
+
end
|
264
|
+
end
|
265
|
+
|
266
|
+
end
|
267
|
+
|
268
|
+
Liquid::Template.register_tag "feed_meta", J1Feed::MetaTag
|