elabs 4.0.0 → 5.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitlab-ci.yml +9 -0
- data/.node-version +1 -1
- data/.rubocop.yml +4 -0
- data/.stylelintrc.yml +12 -2
- data/CHANGELOG.md +81 -12
- data/Gemfile +1 -1
- data/Gemfile.lock +96 -94
- data/README.md +2 -0
- data/ROADMAP.md +4 -2
- data/app/assets/config/elabs_manifest.js +2 -1
- data/app/assets/fonts/elabs/FontAwesome/fa-brands-400.eot +0 -0
- data/app/assets/fonts/elabs/FontAwesome/fa-brands-400.svg +1148 -0
- data/app/assets/fonts/elabs/FontAwesome/fa-brands-400.ttf +0 -0
- data/app/assets/fonts/elabs/FontAwesome/fa-brands-400.woff +0 -0
- data/app/assets/fonts/elabs/FontAwesome/fa-brands-400.woff2 +0 -0
- data/app/assets/fonts/elabs/FontAwesome/fa-regular-400.eot +0 -0
- data/app/assets/fonts/elabs/FontAwesome/fa-regular-400.svg +467 -0
- data/app/assets/fonts/elabs/FontAwesome/fa-regular-400.ttf +0 -0
- data/app/assets/fonts/elabs/FontAwesome/fa-regular-400.woff +0 -0
- data/app/assets/fonts/elabs/FontAwesome/fa-regular-400.woff2 +0 -0
- data/app/assets/fonts/elabs/FontAwesome/fa-solid-900.eot +0 -0
- data/app/assets/fonts/elabs/FontAwesome/fa-solid-900.svg +2231 -0
- data/app/assets/fonts/elabs/FontAwesome/fa-solid-900.ttf +0 -0
- data/app/assets/fonts/elabs/FontAwesome/fa-solid-900.woff +0 -0
- data/app/assets/fonts/elabs/FontAwesome/fa-solid-900.woff2 +0 -0
- data/app/assets/fonts/elabs/OpenSans/Apache License.txt +201 -0
- data/app/assets/fonts/elabs/OpenSans/OpenSans-Bold.ttf +0 -0
- data/app/assets/fonts/elabs/OpenSans/OpenSans-Light.ttf +0 -0
- data/app/assets/fonts/elabs/OpenSans/OpenSans-Regular.ttf +0 -0
- data/app/assets/fonts/elabs/OpenSans/OpenSans-Semibold.ttf +0 -0
- data/app/assets/fonts/elabs/license-icons/license-icons.eot +0 -0
- data/app/assets/fonts/elabs/license-icons/license-icons.svg +51 -0
- data/app/assets/fonts/elabs/license-icons/license-icons.ttf +0 -0
- data/app/assets/fonts/elabs/license-icons/license-icons.woff +0 -0
- data/app/assets/fonts/elabs/license-icons/license-icons.woff2 +0 -0
- data/app/assets/images/elabs/preview_placeholder.png +0 -0
- data/app/assets/images/elabs/preview_placeholder_nsfw.png +0 -0
- data/app/assets/javascripts/elabs/announcements.js +33 -0
- data/app/assets/javascripts/elabs/application.js.erb +17 -14
- data/app/assets/javascripts/elabs/forms.js +0 -1
- data/app/assets/javascripts/elabs/helpers-markdown.js +2 -2
- data/app/assets/javascripts/elabs/helpers.js +17 -0
- data/app/assets/javascripts/elabs/menu.js +5 -0
- data/app/assets/stylesheets/elabs/_fonts.scss +32 -0
- data/app/assets/stylesheets/elabs/_variables.scss +286 -5
- data/app/assets/stylesheets/elabs/app/components/_act.scss +83 -0
- data/app/assets/stylesheets/elabs/app/components/_announcement.scss +41 -0
- data/app/assets/stylesheets/elabs/app/components/_classifier_types.scss +43 -0
- data/app/assets/stylesheets/elabs/app/components/_comment.scss +29 -0
- data/app/assets/stylesheets/elabs/app/components/_content_relations.scss +53 -0
- data/app/assets/stylesheets/elabs/app/components/_content_statuses.scss +39 -0
- data/app/assets/stylesheets/elabs/app/components/_content_types.scss +41 -0
- data/app/assets/stylesheets/elabs/app/components/_git_cards.scss +122 -0
- data/app/assets/stylesheets/elabs/app/elements/_alerts.scss +3 -0
- data/app/assets/stylesheets/elabs/app/elements/_badges.scss +17 -0
- data/app/assets/stylesheets/elabs/app/elements/_buttons.scss +34 -0
- data/app/assets/stylesheets/elabs/app/elements/_dropdowns.scss +78 -0
- data/app/assets/stylesheets/elabs/app/elements/_empty.scss +31 -0
- data/app/assets/stylesheets/elabs/app/elements/_errors.scss +15 -0
- data/app/assets/stylesheets/elabs/app/elements/_filter_link.scss +23 -0
- data/app/assets/stylesheets/elabs/app/elements/_fixed_links.scss +19 -0
- data/app/assets/stylesheets/elabs/app/elements/_forms.scss +123 -0
- data/app/assets/stylesheets/elabs/app/elements/_icons.scss +74 -0
- data/app/assets/stylesheets/elabs/app/{_medias.scss → elements/_medias.scss} +2 -0
- data/app/assets/stylesheets/elabs/app/{_modals.scss → elements/_modals.scss} +8 -4
- data/app/assets/stylesheets/elabs/app/elements/_nsfw.scss +41 -0
- data/app/assets/stylesheets/elabs/app/{_pagination.scss → elements/_pagination.scss} +0 -0
- data/app/assets/stylesheets/elabs/app/{_tables.scss → elements/_tables.scss} +2 -2
- data/app/assets/stylesheets/elabs/app/elements/_tabs.scss +73 -0
- data/app/assets/stylesheets/elabs/app/helpers/_cards.scss +80 -0
- data/app/assets/stylesheets/elabs/app/helpers/_containers.scss +7 -0
- data/app/assets/stylesheets/elabs/app/helpers/_states.scss +3 -0
- data/app/assets/stylesheets/elabs/app/{_helpers.scss → helpers/_typo.scss} +6 -4
- data/app/assets/stylesheets/elabs/app/layouts/_acts.scss +25 -0
- data/app/assets/stylesheets/elabs/app/layouts/_classifiers.scss +32 -0
- data/app/assets/stylesheets/elabs/app/{_comments.scss → layouts/_comments.scss} +0 -2
- data/app/assets/stylesheets/elabs/app/layouts/_devise.scss +65 -0
- data/app/assets/stylesheets/elabs/app/layouts/_layout.scss +40 -0
- data/app/assets/stylesheets/elabs/app/layouts/_page.scss +14 -0
- data/app/assets/stylesheets/elabs/app/layouts/_page_content.scss +13 -0
- data/app/assets/stylesheets/elabs/app/layouts/_page_footer.scss +20 -0
- data/app/assets/stylesheets/elabs/app/layouts/_page_header.scss +146 -0
- data/app/assets/stylesheets/elabs/app/layouts/_page_menu.scss +232 -0
- data/app/assets/stylesheets/elabs/app/layouts/_page_messages.scss +4 -0
- data/app/assets/stylesheets/elabs/app/layouts/_private_layout.scss +78 -0
- data/app/assets/stylesheets/elabs/app/{_typo.scss → layouts/_typo.scss} +3 -0
- data/app/assets/stylesheets/elabs/app/mixins/_classifier_card.scss +43 -0
- data/app/assets/stylesheets/elabs/app/mixins/_content_card.scss +103 -0
- data/app/assets/stylesheets/elabs/app/mixins/_content_full.scss +158 -0
- data/app/assets/stylesheets/elabs/app/mixins/{_content-inline.scss → _content_inline.scss} +0 -0
- data/app/assets/stylesheets/elabs/lib/_codemirror.scss +2 -2
- data/app/assets/stylesheets/elabs/{_colors.scss → lib/_colors_reference.scss} +0 -52
- data/app/assets/stylesheets/elabs/lib/_license_icons.scss +121 -0
- data/app/assets/stylesheets/elabs/lib/fontawesome/_fontawesome.scss +1 -1
- data/app/assets/stylesheets/elabs/lib/fontawesome/_fonts.scss +18 -18
- data/app/assets/stylesheets/elabs/lib/knacss/_knacss.scss +1 -1
- data/app/assets/stylesheets/elabs/lib/knacss/_knacss_variables.scss +227 -0
- data/app/assets/stylesheets/elabs/style.scss +62 -57
- data/app/controllers/elabs/admin/admin_application_controller.rb +1 -1
- data/app/controllers/elabs/admin/announcements_controller.rb +71 -0
- data/app/controllers/elabs/concerns/elabs_controller.rb +3 -0
- data/app/controllers/elabs/content_application_controller.rb +4 -0
- data/app/controllers/elabs/elabs_public_controller.rb +15 -0
- data/app/controllers/elabs/languages_controller.rb +1 -5
- data/app/controllers/elabs/member/comments_controller.rb +42 -0
- data/app/controllers/elabs/member/member_application_controller.rb +1 -1
- data/app/controllers/elabs/reports_controller.rb +2 -0
- data/app/helpers/elabs/acts_helper.rb +7 -2
- data/app/helpers/elabs/application_helper.rb +8 -50
- data/app/helpers/elabs/content_filters_helper.rb +17 -24
- data/app/helpers/elabs/content_helper.rb +8 -35
- data/app/helpers/elabs/content_renderer_helper.rb +4 -112
- data/app/helpers/elabs/form_helper.rb +11 -11
- data/app/helpers/elabs/icons_helper.rb +63 -0
- data/app/helpers/elabs/{admin_content_helper.rb → links_admin_helper.rb} +1 -1
- data/app/helpers/elabs/links_helper.rb +58 -0
- data/app/helpers/elabs/{member_content_helper.rb → links_member_helper.rb} +2 -2
- data/app/helpers/elabs/notification_helper.rb +17 -3
- data/app/helpers/elabs/shortcodes_helper.rb +108 -0
- data/app/helpers/elabs/thumbnails_helper.rb +1 -1
- data/app/models/elabs/album.rb +14 -0
- data/app/models/elabs/announcement.rb +33 -0
- data/app/models/elabs/article.rb +14 -0
- data/app/models/elabs/comment.rb +10 -4
- data/app/models/elabs/note.rb +14 -0
- data/app/models/elabs/project.rb +12 -0
- data/app/models/elabs/report.rb +1 -0
- data/app/models/elabs/upload.rb +16 -0
- data/app/models/elabs/user.rb +2 -1
- data/app/views/elabs/acts/_filters.html.haml +3 -2
- data/app/views/elabs/acts/index.html.haml +2 -13
- data/app/views/elabs/admin/announcements/_announcement.json.jbuilder +10 -0
- data/app/views/elabs/admin/announcements/_form.html.haml +52 -0
- data/app/views/elabs/admin/announcements/edit.html.haml +3 -0
- data/app/views/elabs/admin/announcements/index.html.haml +28 -0
- data/app/views/elabs/admin/announcements/index.json.jbuilder +1 -0
- data/app/views/elabs/admin/announcements/new.html.haml +3 -0
- data/app/views/elabs/admin/licenses/index.html.haml +2 -2
- data/app/views/elabs/admin/uploads/_upload.json.jbuilder +3 -3
- data/app/views/elabs/albums/_card_content.html.haml +8 -0
- data/app/views/elabs/albums/_filters.html.haml +5 -3
- data/app/views/elabs/albums/index.html.haml +1 -1
- data/app/views/elabs/albums/show.html.haml +38 -29
- data/app/views/elabs/articles/_filters.html.haml +5 -3
- data/app/views/elabs/articles/index.html.haml +1 -1
- data/app/views/elabs/articles/show.html.haml +33 -25
- data/app/views/elabs/auth/confirmations/new.html.haml +1 -1
- data/app/views/elabs/auth/passwords/edit.html.haml +1 -1
- data/app/views/elabs/auth/passwords/new.html.haml +1 -1
- data/app/views/elabs/auth/registrations/new.html.haml +7 -2
- data/app/views/elabs/auth/sessions/_new.html.haml +1 -1
- data/app/views/elabs/auth/unlocks/new.html.haml +1 -1
- data/app/views/elabs/comments/_comments.html.haml +29 -20
- data/app/views/elabs/comments/_form.html.haml +40 -36
- data/app/views/elabs/languages/_filters.html.haml +3 -5
- data/app/views/elabs/languages/index.html.haml +12 -13
- data/app/views/elabs/languages/show.html.haml +36 -31
- data/app/views/elabs/layouts/_announcements.html.haml +9 -0
- data/app/views/elabs/layouts/_content_associations.html.haml +89 -0
- data/app/views/elabs/layouts/_content_card.html.haml +41 -0
- data/app/views/elabs/layouts/_flash_messages.html.haml +4 -0
- data/app/views/elabs/layouts/_footer.html.haml +18 -10
- data/app/views/elabs/layouts/_form_honeypot.html.haml +12 -0
- data/app/views/elabs/layouts/_hidden_entry.html.haml +1 -1
- data/app/views/elabs/layouts/_hidden_entry_full.html.haml +4 -2
- data/app/views/elabs/layouts/_hidden_entry_inline.html.haml +1 -1
- data/app/views/elabs/layouts/_language_menu.html.haml +2 -2
- data/app/views/elabs/layouts/_menu.html.haml +58 -75
- data/app/views/elabs/layouts/_menu_admin.html.haml +40 -0
- data/app/views/elabs/layouts/_menu_member.html.haml +57 -0
- data/app/views/elabs/layouts/application.html.haml +24 -13
- data/app/views/elabs/layouts/application_admin.html.haml +33 -0
- data/app/views/elabs/layouts/application_member.html.haml +36 -0
- data/app/views/elabs/layouts/{lists → content_classifiers_lists}/_albums.html.haml +0 -0
- data/app/views/elabs/layouts/{lists → content_classifiers_lists}/_projects.html.haml +0 -0
- data/app/views/elabs/layouts/{lists → content_classifiers_lists}/_tags.html.haml +0 -0
- data/app/views/elabs/layouts/{_shortcode_infinite_loop.html.haml → shortcodes/_infinite_loop.html.haml} +1 -1
- data/app/views/elabs/layouts/{_shortcode_infinite_loop_inline.html.haml → shortcodes/_infinite_loop_inline.html.haml} +0 -0
- data/app/views/elabs/layouts/{_shortcode_missing_content.html.haml → shortcodes/_missing_content.html.haml} +1 -1
- data/app/views/elabs/layouts/{_shortcode_missing_content_inline.html.haml → shortcodes/_missing_content_inline.html.haml} +0 -0
- data/app/views/elabs/layouts/shortcodes/_open_to_see.html.haml +2 -0
- data/app/views/elabs/layouts/{widgets → shortcodes/widgets}/_github_repo_card.html.haml +1 -1
- data/app/views/elabs/layouts/{widgets → shortcodes/widgets}/_github_repo_inline.html.haml +0 -0
- data/app/views/elabs/layouts/{widgets → shortcodes/widgets}/_github_user_card.html.haml +0 -0
- data/app/views/elabs/layouts/{widgets → shortcodes/widgets}/_gitlab_group_card.html.haml +1 -1
- data/app/views/elabs/layouts/{widgets → shortcodes/widgets}/_gitlab_repo_card.html.haml +1 -1
- data/app/views/elabs/layouts/{widgets → shortcodes/widgets}/_gitlab_repo_inline.html.haml +0 -0
- data/app/views/elabs/layouts/{widgets → shortcodes/widgets}/_gitlab_user_card.html.haml +1 -1
- data/app/views/elabs/layouts/shortcodes/widgets/vue/_all_widgets.html.haml +5 -0
- data/app/views/elabs/layouts/{widgets → shortcodes/widgets}/vue/_github_repo_card_vue.html.haml +8 -8
- data/app/views/elabs/layouts/{widgets → shortcodes/widgets}/vue/_github_user_card_vue.html.haml +5 -5
- data/app/views/elabs/layouts/{widgets → shortcodes/widgets}/vue/_gitlab_group_card_vue.html.haml +5 -5
- data/app/views/elabs/layouts/{widgets → shortcodes/widgets}/vue/_gitlab_repo_card_vue.html.haml +8 -8
- data/app/views/elabs/layouts/{widgets → shortcodes/widgets}/vue/_gitlab_user_card_vue.html.haml +4 -4
- data/app/views/elabs/licenses/_filters.html.haml +3 -2
- data/app/views/elabs/licenses/index.html.haml +14 -12
- data/app/views/elabs/licenses/show.html.haml +40 -34
- data/app/views/elabs/member/albums/_form.html.haml +1 -43
- data/app/views/elabs/member/articles/_form.html.haml +1 -39
- data/app/views/elabs/member/layouts/_form_commons.html.haml +55 -0
- data/app/views/elabs/member/notes/_form.html.haml +1 -39
- data/app/views/elabs/member/preferences/edit.html.haml +1 -2
- data/app/views/elabs/member/projects/_form.html.haml +3 -38
- data/app/views/elabs/member/uploads/_form.html.haml +1 -42
- data/app/views/elabs/member/uploads/_upload.json.jbuilder +3 -3
- data/app/views/elabs/member/users/edit.html.haml +3 -4
- data/app/views/elabs/notes/_filters.html.haml +5 -3
- data/app/views/elabs/notes/index.html.haml +1 -1
- data/app/views/elabs/notes/show.html.haml +33 -25
- data/app/views/elabs/projects/_filters.html.haml +5 -3
- data/app/views/elabs/projects/index.html.haml +1 -1
- data/app/views/elabs/projects/show.html.haml +68 -62
- data/app/views/elabs/reports/_form.html.haml +2 -0
- data/app/views/elabs/tags/_filters.html.haml +3 -2
- data/app/views/elabs/tags/index.html.haml +11 -11
- data/app/views/elabs/tags/show.html.haml +31 -28
- data/app/views/elabs/uploads/_filters.html.haml +5 -3
- data/app/views/elabs/uploads/_preview.html.haml +5 -4
- data/app/views/elabs/uploads/_thumbnail.html.haml +9 -0
- data/app/views/elabs/uploads/_upload.json.jbuilder +3 -3
- data/app/views/elabs/uploads/index.html.haml +1 -1
- data/app/views/elabs/uploads/show.html.haml +45 -39
- data/app/views/elabs/users/_filters.html.haml +3 -2
- data/app/views/elabs/users/_user.html.haml +3 -3
- data/app/views/elabs/users/show.html.haml +48 -43
- data/config/routes.rb +13 -8
- data/db/migrate/20181025084232_add_archived_field_to_comments.rb +5 -0
- data/db/migrate/20181026071743_delete_comment_notifications.rb +5 -0
- data/db/migrate/20181030063505_create_announcements.rb +14 -0
- data/docs/CODEOWNERS +10 -0
- data/docs/migrating.md +16 -1
- data/docs/shortcodes_guide.md +51 -0
- data/lib/assets/javascripts/README-highlight.js.md +5 -5
- data/lib/assets/javascripts/highlight.js-9.13.1/highlight.pack.js +2 -0
- data/lib/assets/stylesheets/{highlight.js-9.12.0 → highlight.js-9.13.1}/styles/atelier-sulphurpool-light.css +0 -0
- data/lib/elabs.rb +8 -0
- data/lib/elabs/version.rb +1 -1
- data/lib/generators/elabs/{devise_views_generator.rb → devise_mailer_views_generator.rb} +2 -2
- data/lib/generators/elabs/images_generator.rb +24 -0
- data/lib/generators/elabs/required_assets_generator.rb +0 -2
- data/lib/generators/templates/elabs.rb +3 -0
- data/locale/app.pot +132 -19
- data/locale/en/app.edit.po +130 -17
- data/locale/en/app.po +130 -17
- data/locale/fr/app.edit.po +145 -28
- data/locale/fr/app.po +141 -27
- data/package.json +10 -12
- data/yarn.lock +885 -668
- metadata +136 -97
- data/app/assets/stylesheets/elabs/_icons.scss +0 -17
- data/app/assets/stylesheets/elabs/app/_acts.scss +0 -69
- data/app/assets/stylesheets/elabs/app/_alerts.scss +0 -3
- data/app/assets/stylesheets/elabs/app/_badges.scss +0 -11
- data/app/assets/stylesheets/elabs/app/_buttons.scss +0 -29
- data/app/assets/stylesheets/elabs/app/_content.scss +0 -25
- data/app/assets/stylesheets/elabs/app/_content_statuses.scss +0 -32
- data/app/assets/stylesheets/elabs/app/_content_uploads.scss +0 -39
- data/app/assets/stylesheets/elabs/app/_empty.scss +0 -19
- data/app/assets/stylesheets/elabs/app/_errors.scss +0 -9
- data/app/assets/stylesheets/elabs/app/_filter_links.scss +0 -27
- data/app/assets/stylesheets/elabs/app/_forms.scss +0 -74
- data/app/assets/stylesheets/elabs/app/_languages.scss +0 -6
- data/app/assets/stylesheets/elabs/app/_layout.scss +0 -206
- data/app/assets/stylesheets/elabs/app/_licenses.scss +0 -6
- data/app/assets/stylesheets/elabs/app/_link-to-top.scss +0 -8
- data/app/assets/stylesheets/elabs/app/_tabs.scss +0 -54
- data/app/assets/stylesheets/elabs/app/_tags.scss +0 -6
- data/app/assets/stylesheets/elabs/app/_toolbars.scss +0 -3
- data/app/assets/stylesheets/elabs/app/_users.scss +0 -21
- data/app/assets/stylesheets/elabs/app/admin-members/_forms.scss +0 -13
- data/app/assets/stylesheets/elabs/app/admin-members/_indexes.scss +0 -46
- data/app/assets/stylesheets/elabs/app/admin-members/_layout.scss +0 -17
- data/app/assets/stylesheets/elabs/app/areas/_devise.scss +0 -31
- data/app/assets/stylesheets/elabs/app/components/_cards.scss +0 -16
- data/app/assets/stylesheets/elabs/app/components/_container.scss +0 -4
- data/app/assets/stylesheets/elabs/app/mixins/_classifier-card.scss +0 -16
- data/app/assets/stylesheets/elabs/app/mixins/_content-card.scss +0 -72
- data/app/assets/stylesheets/elabs/app/mixins/_content-full.scss +0 -77
- data/app/assets/stylesheets/elabs/app/widgets/_git-cards.scss +0 -88
- data/app/assets/stylesheets/elabs/lib/fontawesome/_icons.scss +0 -1118
- data/app/assets/stylesheets/elabs/lib/knacss/_knacss-variables.scss +0 -239
- data/app/views/elabs/albums/_album.html.haml +0 -38
- data/app/views/elabs/articles/_article.html.haml +0 -30
- data/app/views/elabs/languages/_associations.html.haml +0 -61
- data/app/views/elabs/layouts/_shortcode_open_to_see.html.haml +0 -2
- data/app/views/elabs/layouts/admin_application.html.haml +0 -21
- data/app/views/elabs/layouts/member_application.html.haml +0 -24
- data/app/views/elabs/layouts/widgets/vue/_all_widgets.html.haml +0 -5
- data/app/views/elabs/licenses/_associations.html.haml +0 -61
- data/app/views/elabs/notes/_note.html.haml +0 -31
- data/app/views/elabs/projects/_associations.html.haml +0 -54
- data/app/views/elabs/projects/_project.html.haml +0 -29
- data/app/views/elabs/tags/_associations.html.haml +0 -61
- data/app/views/elabs/uploads/_upload.html.haml +0 -41
- data/app/views/elabs/users/_associations.html.haml +0 -61
- data/db/seeds.rb +0 -10
- data/db/seeds_development.rb +0 -21
- data/db/seeds_production.rb +0 -0
- data/lib/assets/javascripts/codemirror-5.39.2/addon/mode/overlay.js +0 -90
- data/lib/assets/javascripts/codemirror-5.39.2/lib/codemirror.js +0 -9684
- data/lib/assets/javascripts/codemirror-5.39.2/mode/clike/clike.js +0 -834
- data/lib/assets/javascripts/codemirror-5.39.2/mode/css/css.js +0 -832
- data/lib/assets/javascripts/codemirror-5.39.2/mode/gfm/gfm.js +0 -129
- data/lib/assets/javascripts/codemirror-5.39.2/mode/htmlmixed/htmlmixed.js +0 -152
- data/lib/assets/javascripts/codemirror-5.39.2/mode/javascript/javascript.js +0 -896
- data/lib/assets/javascripts/codemirror-5.39.2/mode/markdown/markdown.js +0 -882
- data/lib/assets/javascripts/codemirror-5.39.2/mode/meta.js +0 -217
- data/lib/assets/javascripts/codemirror-5.39.2/mode/xml/xml.js +0 -402
- data/lib/assets/javascripts/highlight.js-9.12.0/highlight.pack.js +0 -2
- data/lib/assets/stylesheets/codemirror-5.39.2/lib/codemirror.css +0 -346
- data/lib/assets/stylesheets/codemirror-5.39.2/theme/base16-dark.css +0 -38
- data/lib/assets/stylesheets/codemirror-5.39.2/theme/base16-light.css +0 -38
@@ -0,0 +1,14 @@
|
|
1
|
+
class CreateAnnouncements < ActiveRecord::Migration[5.2]
|
2
|
+
def change
|
3
|
+
create_table :announcements do |t|
|
4
|
+
t.datetime :start_at
|
5
|
+
t.datetime :end_at
|
6
|
+
t.text :content, null: false, default: nil
|
7
|
+
t.string :level, null: false, default: nil
|
8
|
+
t.string :target, null: false, default: 'global'
|
9
|
+
t.references :user, foreign_key: true, null: false
|
10
|
+
|
11
|
+
t.timestamps
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
data/docs/CODEOWNERS
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
# You can use this file as a reference for who does what on this project
|
2
|
+
# If you create an issue about something, feel free to ping one of the
|
3
|
+
# owners for this particular subject
|
4
|
+
|
5
|
+
# Main maintainer
|
6
|
+
* @mtancoigne
|
7
|
+
|
8
|
+
# SCSS/JS related stuff:
|
9
|
+
/app/assets/stylesheets/ @olivier.sazos
|
10
|
+
/app/assets/javascripts/ @olivier.sazos
|
data/docs/migrating.md
CHANGED
@@ -1,5 +1,19 @@
|
|
1
1
|
# Migration guide
|
2
2
|
|
3
|
+
## From 4.x to 5.0.0
|
4
|
+
|
5
|
+
First of all, read the changelog for the 5.0.0 release.
|
6
|
+
|
7
|
+
- You can safely remove `app/assets/stylesheets` if you don't use it.
|
8
|
+
- You can safely remove `public/fonts/fa-*` as fonts are now handled by
|
9
|
+
the assets pipeline
|
10
|
+
- You can safely remove `app/assets/images/elabs` as these images are now
|
11
|
+
handled by the assets pipeline
|
12
|
+
- You should update the initializer for the new configuration option
|
13
|
+
`Elabs.trap_dumb_bots`
|
14
|
+
- Layouts and styles had heavy changes, if you customized yours, you'll
|
15
|
+
have to re-generate them and merge your work in it.
|
16
|
+
|
3
17
|
## From 3.x to 4.0.0
|
4
18
|
|
5
19
|
First of all, read the changelog for the 4.0.0 release.
|
@@ -13,7 +27,7 @@ made in your own application.
|
|
13
27
|
`rails g elabs:install` and accept to override everything. Then check
|
14
28
|
changes
|
15
29
|
- Apply the last migrations: `rake elabs:install:migrations` then
|
16
|
-
`rails db:migrate`
|
30
|
+
` [rails db:migrate]() `
|
17
31
|
|
18
32
|
Don't forget to rebuild the assets...
|
19
33
|
|
@@ -55,6 +69,7 @@ end
|
|
55
69
|
|
56
70
|
First of all, read the changelog for the 3.0.0 release
|
57
71
|
|
72
|
+
- Add the "Rails-i18n" gem for some core translations: `gem 'rails-i18n'`
|
58
73
|
- Update the translations: `rails g elabs:install` and accept to override
|
59
74
|
the initializer, and everything in `locale` folder
|
60
75
|
- Apply the last migrations: `rake elabs:install:migrations` then
|
@@ -0,0 +1,51 @@
|
|
1
|
+
# Shortcodes guide
|
2
|
+
|
3
|
+
Reference file: `app/helpers/shortcodes_helper.rb`
|
4
|
+
|
5
|
+
General behavior:
|
6
|
+
- If a card shortcode is made to some site content, the card content
|
7
|
+
won't be visible in indexes to limit the requests
|
8
|
+
- If a card shortcode points to the content in which it is created, a
|
9
|
+
warning is displayed instead, to avoid infinite loops
|
10
|
+
- If a card shortcode contains shortcodes too, these shortcodes won't
|
11
|
+
be displayed to limit the requests and to keep the page clean
|
12
|
+
|
13
|
+
## Inline shortcodes
|
14
|
+
|
15
|
+
| Shortcode | Example | Description |
|
16
|
+
|---------------------------------|-----------------------------------------------------------------|--------------------------------------------------------------|
|
17
|
+
| `[album:<album-slug>]` | `[album:my-first-album]` | Link with album icon and name |
|
18
|
+
| `[article:<article-slug>]` | `[article:my-first-article]` | Link with article icon and title |
|
19
|
+
| `[note:<note-slug>]` | `[note:2018-11-23-18-57-02-3]` | Link with note icon and id |
|
20
|
+
| `[project:<project-slug>]` | `[project:my-first-project]` | Link with project icon and name |
|
21
|
+
| `[upload:<upload-slug>]` | `[upload:my-first-upload]` | Link with upload icon and title |
|
22
|
+
| `[user:<username>]` | `[user:jimmy]` | Link with avatar if any |
|
23
|
+
| `[github-repo:<username/repo>]` | `[github-repo:el-cms/elabs]` | Github icon, link to user, link to repo with a `/` separator |
|
24
|
+
| `[gitlab-repo:<link>]` | `[gitlab-repo:https://gitlab.com/experimentslabs/engine_elabs]` | Gitlab icon, link to user, link to repo with a `/` separator |
|
25
|
+
|
26
|
+
Behavior:
|
27
|
+
- for site-content, if content is unpublished/inexistant, a warning is displayed instead
|
28
|
+
- for site-content, if content is NSFW, a warning is displayed, depending on current NSFW preference
|
29
|
+
- for Github/Gitlab links, if the targeted element does not exist, the links are created anyway.
|
30
|
+
|
31
|
+
## Cards
|
32
|
+
|
33
|
+
| Shortcode | Example | Description |
|
34
|
+
|-------------------------------------|----------------------------------------------------------------------|--------------------------------------------|
|
35
|
+
| `[album-card:<album-slug>]` | `[album-card:my-first-album]` | Simple card as the ones visible in indexes |
|
36
|
+
| `[article-card:<article-slug>]` | `[article-card:my-first-article]` | Simple card as the ones visible in indexes |
|
37
|
+
| `[note-card:<note-slug>]` | `[note-card:2018-11-23-18-57-02-3]` | Simple card as the ones visible in indexes |
|
38
|
+
| `[project-card:<project-slug>]` | `[project-card:my-first-project]` | Simple card as the ones visible in indexes |
|
39
|
+
| `[upload-card:<upload-slug>]` | `[upload-card:my-first-upload]` | Simple card as the ones visible in indexes |
|
40
|
+
| `[user-card:<username>]` | `[user-card:jimmy]` | Simple card as the ones visible in indexes |
|
41
|
+
| `[github-repo-card:<username/repo>` | `[github-repo-card:el-cms/elabs]` | Card with base information and description |
|
42
|
+
| `[github-user-card:<username>` | `[github-user-card:mtancoigne]` | Card with base information |
|
43
|
+
| `[gitlab-repo-card:<link>` | `[gitlab-repo-card:https://gitlab.com/experimentslabs/engine_elabs]` | Card with base information and description |
|
44
|
+
| `[gitlab-user-card:<link>` | `[gitlab-user-card:https://gitlab.com/mtancoigne]` | Card with base information |
|
45
|
+
| `[gitlab-group-card:<link>` | `[gitlab-group-card:https://gitlab.com/experimentslabs]` | Card with base information |
|
46
|
+
|
47
|
+
Behavior:
|
48
|
+
- for site-content, if content is unpublished/inexistant, a warning is displayed instead
|
49
|
+
- for site-content, if content is NSFW, a warning is displayed, depending on current NSFW preference
|
50
|
+
- for Github/Gitlab links, if the targeted element does not exist, an error is displayed.
|
51
|
+
- for Github cards, the visitor may reach a limit of cards displayed, as we don't send any developer key to github.
|
@@ -0,0 +1,2 @@
|
|
1
|
+
/*! highlight.js v9.13.1 | BSD3 License | git.io/hljslicense */
|
2
|
+
!function(e){var n="object"==typeof window&&window||"object"==typeof self&&self;"undefined"!=typeof exports?e(exports):n&&(n.hljs=e({}),"function"==typeof define&&define.amd&&define([],function(){return n.hljs}))}(function(e){function n(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}function t(e){return e.nodeName.toLowerCase()}function r(e,n){var t=e&&e.exec(n);return t&&0===t.index}function a(e){return k.test(e)}function i(e){var n,t,r,i,o=e.className+" ";if(o+=e.parentNode?e.parentNode.className:"",t=M.exec(o))return w(t[1])?t[1]:"no-highlight";for(o=o.split(/\s+/),n=0,r=o.length;r>n;n++)if(i=o[n],a(i)||w(i))return i}function o(e){var n,t={},r=Array.prototype.slice.call(arguments,1);for(n in e)t[n]=e[n];return r.forEach(function(e){for(n in e)t[n]=e[n]}),t}function c(e){var n=[];return function r(e,a){for(var i=e.firstChild;i;i=i.nextSibling)3===i.nodeType?a+=i.nodeValue.length:1===i.nodeType&&(n.push({event:"start",offset:a,node:i}),a=r(i,a),t(i).match(/br|hr|img|input/)||n.push({event:"stop",offset:a,node:i}));return a}(e,0),n}function u(e,r,a){function i(){return e.length&&r.length?e[0].offset!==r[0].offset?e[0].offset<r[0].offset?e:r:"start"===r[0].event?e:r:e.length?e:r}function o(e){function r(e){return" "+e.nodeName+'="'+n(e.value).replace('"',""")+'"'}l+="<"+t(e)+E.map.call(e.attributes,r).join("")+">"}function c(e){l+="</"+t(e)+">"}function u(e){("start"===e.event?o:c)(e.node)}for(var s=0,l="",f=[];e.length||r.length;){var g=i();if(l+=n(a.substring(s,g[0].offset)),s=g[0].offset,g===e){f.reverse().forEach(c);do u(g.splice(0,1)[0]),g=i();while(g===e&&g.length&&g[0].offset===s);f.reverse().forEach(o)}else"start"===g[0].event?f.push(g[0].node):f.pop(),u(g.splice(0,1)[0])}return l+n(a.substr(s))}function s(e){return e.v&&!e.cached_variants&&(e.cached_variants=e.v.map(function(n){return o(e,{v:null},n)})),e.cached_variants||e.eW&&[o(e)]||[e]}function l(e){function n(e){return e&&e.source||e}function t(t,r){return new RegExp(n(t),"m"+(e.cI?"i":"")+(r?"g":""))}function r(a,i){if(!a.compiled){if(a.compiled=!0,a.k=a.k||a.bK,a.k){var o={},c=function(n,t){e.cI&&(t=t.toLowerCase()),t.split(" ").forEach(function(e){var t=e.split("|");o[t[0]]=[n,t[1]?Number(t[1]):1]})};"string"==typeof a.k?c("keyword",a.k):B(a.k).forEach(function(e){c(e,a.k[e])}),a.k=o}a.lR=t(a.l||/\w+/,!0),i&&(a.bK&&(a.b="\\b("+a.bK.split(" ").join("|")+")\\b"),a.b||(a.b=/\B|\b/),a.bR=t(a.b),a.endSameAsBegin&&(a.e=a.b),a.e||a.eW||(a.e=/\B|\b/),a.e&&(a.eR=t(a.e)),a.tE=n(a.e)||"",a.eW&&i.tE&&(a.tE+=(a.e?"|":"")+i.tE)),a.i&&(a.iR=t(a.i)),null==a.r&&(a.r=1),a.c||(a.c=[]),a.c=Array.prototype.concat.apply([],a.c.map(function(e){return s("self"===e?a:e)})),a.c.forEach(function(e){r(e,a)}),a.starts&&r(a.starts,i);var u=a.c.map(function(e){return e.bK?"\\.?("+e.b+")\\.?":e.b}).concat([a.tE,a.i]).map(n).filter(Boolean);a.t=u.length?t(u.join("|"),!0):{exec:function(){return null}}}}r(e)}function f(e,t,a,i){function o(e){return new RegExp(e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&"),"m")}function c(e,n){var t,a;for(t=0,a=n.c.length;a>t;t++)if(r(n.c[t].bR,e))return n.c[t].endSameAsBegin&&(n.c[t].eR=o(n.c[t].bR.exec(e)[0])),n.c[t]}function u(e,n){if(r(e.eR,n)){for(;e.endsParent&&e.parent;)e=e.parent;return e}return e.eW?u(e.parent,n):void 0}function s(e,n){return!a&&r(n.iR,e)}function p(e,n){var t=R.cI?n[0].toLowerCase():n[0];return e.k.hasOwnProperty(t)&&e.k[t]}function d(e,n,t,r){var a=r?"":j.classPrefix,i='<span class="'+a,o=t?"":I;return i+=e+'">',i+n+o}function h(){var e,t,r,a;if(!E.k)return n(k);for(a="",t=0,E.lR.lastIndex=0,r=E.lR.exec(k);r;)a+=n(k.substring(t,r.index)),e=p(E,r),e?(M+=e[1],a+=d(e[0],n(r[0]))):a+=n(r[0]),t=E.lR.lastIndex,r=E.lR.exec(k);return a+n(k.substr(t))}function b(){var e="string"==typeof E.sL;if(e&&!L[E.sL])return n(k);var t=e?f(E.sL,k,!0,B[E.sL]):g(k,E.sL.length?E.sL:void 0);return E.r>0&&(M+=t.r),e&&(B[E.sL]=t.top),d(t.language,t.value,!1,!0)}function v(){y+=null!=E.sL?b():h(),k=""}function m(e){y+=e.cN?d(e.cN,"",!0):"",E=Object.create(e,{parent:{value:E}})}function N(e,n){if(k+=e,null==n)return v(),0;var t=c(n,E);if(t)return t.skip?k+=n:(t.eB&&(k+=n),v(),t.rB||t.eB||(k=n)),m(t,n),t.rB?0:n.length;var r=u(E,n);if(r){var a=E;a.skip?k+=n:(a.rE||a.eE||(k+=n),v(),a.eE&&(k=n));do E.cN&&(y+=I),E.skip||E.sL||(M+=E.r),E=E.parent;while(E!==r.parent);return r.starts&&(r.endSameAsBegin&&(r.starts.eR=r.eR),m(r.starts,"")),a.rE?0:n.length}if(s(n,E))throw new Error('Illegal lexeme "'+n+'" for mode "'+(E.cN||"<unnamed>")+'"');return k+=n,n.length||1}var R=w(e);if(!R)throw new Error('Unknown language: "'+e+'"');l(R);var x,E=i||R,B={},y="";for(x=E;x!==R;x=x.parent)x.cN&&(y=d(x.cN,"",!0)+y);var k="",M=0;try{for(var C,A,S=0;;){if(E.t.lastIndex=S,C=E.t.exec(t),!C)break;A=N(t.substring(S,C.index),C[0]),S=C.index+A}for(N(t.substr(S)),x=E;x.parent;x=x.parent)x.cN&&(y+=I);return{r:M,value:y,language:e,top:E}}catch(O){if(O.message&&-1!==O.message.indexOf("Illegal"))return{r:0,value:n(t)};throw O}}function g(e,t){t=t||j.languages||B(L);var r={r:0,value:n(e)},a=r;return t.filter(w).filter(x).forEach(function(n){var t=f(n,e,!1);t.language=n,t.r>a.r&&(a=t),t.r>r.r&&(a=r,r=t)}),a.language&&(r.second_best=a),r}function p(e){return j.tabReplace||j.useBR?e.replace(C,function(e,n){return j.useBR&&"\n"===e?"<br>":j.tabReplace?n.replace(/\t/g,j.tabReplace):""}):e}function d(e,n,t){var r=n?y[n]:t,a=[e.trim()];return e.match(/\bhljs\b/)||a.push("hljs"),-1===e.indexOf(r)&&a.push(r),a.join(" ").trim()}function h(e){var n,t,r,o,s,l=i(e);a(l)||(j.useBR?(n=document.createElementNS("http://www.w3.org/1999/xhtml","div"),n.innerHTML=e.innerHTML.replace(/\n/g,"").replace(/<br[ \/]*>/g,"\n")):n=e,s=n.textContent,r=l?f(l,s,!0):g(s),t=c(n),t.length&&(o=document.createElementNS("http://www.w3.org/1999/xhtml","div"),o.innerHTML=r.value,r.value=u(t,c(o),s)),r.value=p(r.value),e.innerHTML=r.value,e.className=d(e.className,l,r.language),e.result={language:r.language,re:r.r},r.second_best&&(e.second_best={language:r.second_best.language,re:r.second_best.r}))}function b(e){j=o(j,e)}function v(){if(!v.called){v.called=!0;var e=document.querySelectorAll("pre code");E.forEach.call(e,h)}}function m(){addEventListener("DOMContentLoaded",v,!1),addEventListener("load",v,!1)}function N(n,t){var r=L[n]=t(e);r.aliases&&r.aliases.forEach(function(e){y[e]=n})}function R(){return B(L)}function w(e){return e=(e||"").toLowerCase(),L[e]||L[y[e]]}function x(e){var n=w(e);return n&&!n.disableAutodetect}var E=[],B=Object.keys,L={},y={},k=/^(no-?highlight|plain|text)$/i,M=/\blang(?:uage)?-([\w-]+)\b/i,C=/((^(<[^>]+>|\t|)+|(?:\n)))/gm,I="</span>",j={classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:void 0};return e.highlight=f,e.highlightAuto=g,e.fixMarkup=p,e.highlightBlock=h,e.configure=b,e.initHighlighting=v,e.initHighlightingOnLoad=m,e.registerLanguage=N,e.listLanguages=R,e.getLanguage=w,e.autoDetection=x,e.inherit=o,e.IR="[a-zA-Z]\\w*",e.UIR="[a-zA-Z_]\\w*",e.NR="\\b\\d+(\\.\\d+)?",e.CNR="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",e.BNR="\\b(0b[01]+)",e.RSR="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",e.BE={b:"\\\\[\\s\\S]",r:0},e.ASM={cN:"string",b:"'",e:"'",i:"\\n",c:[e.BE]},e.QSM={cN:"string",b:'"',e:'"',i:"\\n",c:[e.BE]},e.PWM={b:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},e.C=function(n,t,r){var a=e.inherit({cN:"comment",b:n,e:t,c:[]},r||{});return a.c.push(e.PWM),a.c.push({cN:"doctag",b:"(?:TODO|FIXME|NOTE|BUG|XXX):",r:0}),a},e.CLCM=e.C("//","$"),e.CBCM=e.C("/\\*","\\*/"),e.HCM=e.C("#","$"),e.NM={cN:"number",b:e.NR,r:0},e.CNM={cN:"number",b:e.CNR,r:0},e.BNM={cN:"number",b:e.BNR,r:0},e.CSSNM={cN:"number",b:e.NR+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",r:0},e.RM={cN:"regexp",b:/\//,e:/\/[gimuy]*/,i:/\n/,c:[e.BE,{b:/\[/,e:/\]/,r:0,c:[e.BE]}]},e.TM={cN:"title",b:e.IR,r:0},e.UTM={cN:"title",b:e.UIR,r:0},e.METHOD_GUARD={b:"\\.\\s*"+e.UIR,r:0},e});hljs.registerLanguage("json",function(e){var i={literal:"true false null"},n=[e.QSM,e.CNM],r={e:",",eW:!0,eE:!0,c:n,k:i},t={b:"{",e:"}",c:[{cN:"attr",b:/"/,e:/"/,c:[e.BE],i:"\\n"},e.inherit(r,{b:/:/})],i:"\\S"},c={b:"\\[",e:"\\]",c:[e.inherit(r)],i:"\\S"};return n.splice(n.length,0,t,c),{c:n,k:i,i:"\\S"}});hljs.registerLanguage("coffeescript",function(e){var c={keyword:"in if for while finally new do return else break catch instanceof throw try this switch continue typeof delete debugger super yield import export from as default await then unless until loop of by when and or is isnt not",literal:"true false null undefined yes no on off",built_in:"npm require console print module global window document"},n="[A-Za-z$_][0-9A-Za-z$_]*",r={cN:"subst",b:/#\{/,e:/}/,k:c},i=[e.BNM,e.inherit(e.CNM,{starts:{e:"(\\s*/)?",r:0}}),{cN:"string",v:[{b:/'''/,e:/'''/,c:[e.BE]},{b:/'/,e:/'/,c:[e.BE]},{b:/"""/,e:/"""/,c:[e.BE,r]},{b:/"/,e:/"/,c:[e.BE,r]}]},{cN:"regexp",v:[{b:"///",e:"///",c:[r,e.HCM]},{b:"//[gim]*",r:0},{b:/\/(?![ *])(\\\/|.)*?\/[gim]*(?=\W|$)/}]},{b:"@"+n},{sL:"javascript",eB:!0,eE:!0,v:[{b:"```",e:"```"},{b:"`",e:"`"}]}];r.c=i;var s=e.inherit(e.TM,{b:n}),t="(\\(.*\\))?\\s*\\B[-=]>",o={cN:"params",b:"\\([^\\(]",rB:!0,c:[{b:/\(/,e:/\)/,k:c,c:["self"].concat(i)}]};return{aliases:["coffee","cson","iced"],k:c,i:/\/\*/,c:i.concat([e.C("###","###"),e.HCM,{cN:"function",b:"^\\s*"+n+"\\s*=\\s*"+t,e:"[-=]>",rB:!0,c:[s,o]},{b:/[:\(,=]\s*/,r:0,c:[{cN:"function",b:t,e:"[-=]>",rB:!0,c:[o]}]},{cN:"class",bK:"class",e:"$",i:/[:="\[\]]/,c:[{bK:"extends",eW:!0,i:/[:="\[\]]/,c:[s]},s]},{b:n+":",e:":",rB:!0,rE:!0,r:0}])}});hljs.registerLanguage("typescript",function(e){var r="[A-Za-z$_][0-9A-Za-z$_]*",t={keyword:"in if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const class public private protected get set super static implements enum export import declare type namespace abstract as from extends async await",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document any number boolean string void Promise"},n={cN:"meta",b:"@"+r},a={b:"\\(",e:/\)/,k:t,c:["self",e.QSM,e.ASM,e.NM]},o={cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,k:t,c:[e.CLCM,e.CBCM,n,a]};return{aliases:["ts"],k:t,c:[{cN:"meta",b:/^\s*['"]use strict['"]/},e.ASM,e.QSM,{cN:"string",b:"`",e:"`",c:[e.BE,{cN:"subst",b:"\\$\\{",e:"\\}"}]},e.CLCM,e.CBCM,{cN:"number",v:[{b:"\\b(0[bB][01]+)"},{b:"\\b(0[oO][0-7]+)"},{b:e.CNR}],r:0},{b:"("+e.RSR+"|\\b(case|return|throw)\\b)\\s*",k:"return throw case",c:[e.CLCM,e.CBCM,e.RM,{cN:"function",b:"(\\(.*?\\)|"+e.IR+")\\s*=>",rB:!0,e:"\\s*=>",c:[{cN:"params",v:[{b:e.IR},{b:/\(\s*\)/},{b:/\(/,e:/\)/,eB:!0,eE:!0,k:t,c:["self",e.CLCM,e.CBCM]}]}]}],r:0},{cN:"function",b:"function",e:/[\{;]/,eE:!0,k:t,c:["self",e.inherit(e.TM,{b:r}),o],i:/%/,r:0},{bK:"constructor",e:/\{/,eE:!0,c:["self",o]},{b:/module\./,k:{built_in:"module"},r:0},{bK:"module",e:/\{/,eE:!0},{bK:"interface",e:/\{/,eE:!0,k:"interface extends"},{b:/\$[(.]/},{b:"\\."+e.IR,r:0},n,a]}});hljs.registerLanguage("http",function(e){var t="HTTP/[0-9\\.]+";return{aliases:["https"],i:"\\S",c:[{b:"^"+t,e:"$",c:[{cN:"number",b:"\\b\\d{3}\\b"}]},{b:"^[A-Z]+ (.*?) "+t+"$",rB:!0,e:"$",c:[{cN:"string",b:" ",e:" ",eB:!0,eE:!0},{b:t},{cN:"keyword",b:"[A-Z]+"}]},{cN:"attribute",b:"^\\w",e:": ",eE:!0,i:"\\n|\\s|=",starts:{e:"$",r:0}},{b:"\\n\\n",starts:{sL:[],eW:!0}}]}});hljs.registerLanguage("xml",function(s){var e="[A-Za-z0-9\\._:-]+",t={eW:!0,i:/</,r:0,c:[{cN:"attr",b:e,r:0},{b:/=\s*/,r:0,c:[{cN:"string",endsParent:!0,v:[{b:/"/,e:/"/},{b:/'/,e:/'/},{b:/[^\s"'=<>`]+/}]}]}]};return{aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist"],cI:!0,c:[{cN:"meta",b:"<!DOCTYPE",e:">",r:10,c:[{b:"\\[",e:"\\]"}]},s.C("<!--","-->",{r:10}),{b:"<\\!\\[CDATA\\[",e:"\\]\\]>",r:10},{cN:"meta",b:/<\?xml/,e:/\?>/,r:10},{b:/<\?(php)?/,e:/\?>/,sL:"php",c:[{b:"/\\*",e:"\\*/",skip:!0},{b:'b"',e:'"',skip:!0},{b:"b'",e:"'",skip:!0},s.inherit(s.ASM,{i:null,cN:null,c:null,skip:!0}),s.inherit(s.QSM,{i:null,cN:null,c:null,skip:!0})]},{cN:"tag",b:"<style(?=\\s|>|$)",e:">",k:{name:"style"},c:[t],starts:{e:"</style>",rE:!0,sL:["css","xml"]}},{cN:"tag",b:"<script(?=\\s|>|$)",e:">",k:{name:"script"},c:[t],starts:{e:"</script>",rE:!0,sL:["actionscript","javascript","handlebars","xml"]}},{cN:"tag",b:"</?",e:"/?>",c:[{cN:"name",b:/[^\/><\s]+/,r:0},t]}]}});hljs.registerLanguage("apache",function(e){var r={cN:"number",b:"[\\$%]\\d+"};return{aliases:["apacheconf"],cI:!0,c:[e.HCM,{cN:"section",b:"</?",e:">"},{cN:"attribute",b:/\w+/,r:0,k:{nomarkup:"order deny allow setenv rewriterule rewriteengine rewritecond documentroot sethandler errordocument loadmodule options header listen serverroot servername"},starts:{e:/$/,r:0,k:{literal:"on off all"},c:[{cN:"meta",b:"\\s\\[",e:"\\]$"},{cN:"variable",b:"[\\$%]\\{",e:"\\}",c:["self",r]},r,e.QSM]}}],i:/\S/}});hljs.registerLanguage("markdown",function(e){return{aliases:["md","mkdown","mkd"],c:[{cN:"section",v:[{b:"^#{1,6}",e:"$"},{b:"^.+?\\n[=-]{2,}$"}]},{b:"<",e:">",sL:"xml",r:0},{cN:"bullet",b:"^([*+-]|(\\d+\\.))\\s+"},{cN:"strong",b:"[*_]{2}.+?[*_]{2}"},{cN:"emphasis",v:[{b:"\\*.+?\\*"},{b:"_.+?_",r:0}]},{cN:"quote",b:"^>\\s+",e:"$"},{cN:"code",v:[{b:"^```w*s*$",e:"^```s*$"},{b:"`.+?`"},{b:"^( {4}| )",e:"$",r:0}]},{b:"^[-\\*]{3,}",e:"$"},{b:"\\[.+?\\][\\(\\[].*?[\\)\\]]",rB:!0,c:[{cN:"string",b:"\\[",e:"\\]",eB:!0,rE:!0,r:0},{cN:"link",b:"\\]\\(",e:"\\)",eB:!0,eE:!0},{cN:"symbol",b:"\\]\\[",e:"\\]",eB:!0,eE:!0}],r:10},{b:/^\[[^\n]+\]:/,rB:!0,c:[{cN:"symbol",b:/\[/,e:/\]/,eB:!0,eE:!0},{cN:"link",b:/:\s*/,e:/$/,eB:!0}]}]}});hljs.registerLanguage("diff",function(e){return{aliases:["patch"],c:[{cN:"meta",r:10,v:[{b:/^@@ +\-\d+,\d+ +\+\d+,\d+ +@@$/},{b:/^\*\*\* +\d+,\d+ +\*\*\*\*$/},{b:/^\-\-\- +\d+,\d+ +\-\-\-\-$/}]},{cN:"comment",v:[{b:/Index: /,e:/$/},{b:/={3,}/,e:/$/},{b:/^\-{3}/,e:/$/},{b:/^\*{3} /,e:/$/},{b:/^\+{3}/,e:/$/},{b:/\*{5}/,e:/\*{5}$/}]},{cN:"addition",b:"^\\+",e:"$"},{cN:"deletion",b:"^\\-",e:"$"},{cN:"addition",b:"^\\!",e:"$"}]}});hljs.registerLanguage("sql",function(e){var t=e.C("--","$");return{cI:!0,i:/[<>{}*]/,c:[{bK:"begin end start commit rollback savepoint lock alter create drop rename call delete do handler insert load replace select truncate update set show pragma grant merge describe use explain help declare prepare execute deallocate release unlock purge reset change stop analyze cache flush optimize repair kill install uninstall checksum restore check backup revoke comment with",e:/;/,eW:!0,l:/[\w\.]+/,k:{keyword:"as abort abs absolute acc acce accep accept access accessed accessible account acos action activate add addtime admin administer advanced advise aes_decrypt aes_encrypt after agent aggregate ali alia alias allocate allow alter always analyze ancillary and any anydata anydataset anyschema anytype apply archive archived archivelog are as asc ascii asin assembly assertion associate asynchronous at atan atn2 attr attri attrib attribu attribut attribute attributes audit authenticated authentication authid authors auto autoallocate autodblink autoextend automatic availability avg backup badfile basicfile before begin beginning benchmark between bfile bfile_base big bigfile bin binary_double binary_float binlog bit_and bit_count bit_length bit_or bit_xor bitmap blob_base block blocksize body both bound buffer_cache buffer_pool build bulk by byte byteordermark bytes cache caching call calling cancel capacity cascade cascaded case cast catalog category ceil ceiling chain change changed char_base char_length character_length characters characterset charindex charset charsetform charsetid check checksum checksum_agg child choose chr chunk class cleanup clear client clob clob_base clone close cluster_id cluster_probability cluster_set clustering coalesce coercibility col collate collation collect colu colum column column_value columns columns_updated comment commit compact compatibility compiled complete composite_limit compound compress compute concat concat_ws concurrent confirm conn connec connect connect_by_iscycle connect_by_isleaf connect_by_root connect_time connection consider consistent constant constraint constraints constructor container content contents context contributors controlfile conv convert convert_tz corr corr_k corr_s corresponding corruption cos cost count count_big counted covar_pop covar_samp cpu_per_call cpu_per_session crc32 create creation critical cross cube cume_dist curdate current current_date current_time current_timestamp current_user cursor curtime customdatum cycle data database databases datafile datafiles datalength date_add date_cache date_format date_sub dateadd datediff datefromparts datename datepart datetime2fromparts day day_to_second dayname dayofmonth dayofweek dayofyear days db_role_change dbtimezone ddl deallocate declare decode decompose decrement decrypt deduplicate def defa defau defaul default defaults deferred defi defin define degrees delayed delegate delete delete_all delimited demand dense_rank depth dequeue des_decrypt des_encrypt des_key_file desc descr descri describ describe descriptor deterministic diagnostics difference dimension direct_load directory disable disable_all disallow disassociate discardfile disconnect diskgroup distinct distinctrow distribute distributed div do document domain dotnet double downgrade drop dumpfile duplicate duration each edition editionable editions element ellipsis else elsif elt empty enable enable_all enclosed encode encoding encrypt end end-exec endian enforced engine engines enqueue enterprise entityescaping eomonth error errors escaped evalname evaluate event eventdata events except exception exceptions exchange exclude excluding execu execut execute exempt exists exit exp expire explain export export_set extended extent external external_1 external_2 externally extract failed failed_login_attempts failover failure far fast feature_set feature_value fetch field fields file file_name_convert filesystem_like_logging final finish first first_value fixed flash_cache flashback floor flush following follows for forall force foreign form forma format found found_rows freelist freelists freepools fresh from from_base64 from_days ftp full function general generated get get_format get_lock getdate getutcdate global global_name globally go goto grant grants greatest group group_concat group_id grouping grouping_id groups gtid_subtract guarantee guard handler hash hashkeys having hea head headi headin heading heap help hex hierarchy high high_priority hosts hour http id ident_current ident_incr ident_seed identified identity idle_time if ifnull ignore iif ilike ilm immediate import in include including increment index indexes indexing indextype indicator indices inet6_aton inet6_ntoa inet_aton inet_ntoa infile initial initialized initially initrans inmemory inner innodb input insert install instance instantiable instr interface interleaved intersect into invalidate invisible is is_free_lock is_ipv4 is_ipv4_compat is_not is_not_null is_used_lock isdate isnull isolation iterate java join json json_exists keep keep_duplicates key keys kill language large last last_day last_insert_id last_value lax lcase lead leading least leaves left len lenght length less level levels library like like2 like4 likec limit lines link list listagg little ln load load_file lob lobs local localtime localtimestamp locate locator lock locked log log10 log2 logfile logfiles logging logical logical_reads_per_call logoff logon logs long loop low low_priority lower lpad lrtrim ltrim main make_set makedate maketime managed management manual map mapping mask master master_pos_wait match matched materialized max maxextents maximize maxinstances maxlen maxlogfiles maxloghistory maxlogmembers maxsize maxtrans md5 measures median medium member memcompress memory merge microsecond mid migration min minextents minimum mining minus minute minvalue missing mod mode model modification modify module monitoring month months mount move movement multiset mutex name name_const names nan national native natural nav nchar nclob nested never new newline next nextval no no_write_to_binlog noarchivelog noaudit nobadfile nocheck nocompress nocopy nocycle nodelay nodiscardfile noentityescaping noguarantee nokeep nologfile nomapping nomaxvalue nominimize nominvalue nomonitoring none noneditionable nonschema noorder nopr nopro noprom nopromp noprompt norely noresetlogs noreverse normal norowdependencies noschemacheck noswitch not nothing notice notnull notrim novalidate now nowait nth_value nullif nulls num numb numbe nvarchar nvarchar2 object ocicoll ocidate ocidatetime ociduration ociinterval ociloblocator ocinumber ociref ocirefcursor ocirowid ocistring ocitype oct octet_length of off offline offset oid oidindex old on online only opaque open operations operator optimal optimize option optionally or oracle oracle_date oradata ord ordaudio orddicom orddoc order ordimage ordinality ordvideo organization orlany orlvary out outer outfile outline output over overflow overriding package pad parallel parallel_enable parameters parent parse partial partition partitions pascal passing password password_grace_time password_lock_time password_reuse_max password_reuse_time password_verify_function patch path patindex pctincrease pctthreshold pctused pctversion percent percent_rank percentile_cont percentile_disc performance period period_add period_diff permanent physical pi pipe pipelined pivot pluggable plugin policy position post_transaction pow power pragma prebuilt precedes preceding precision prediction prediction_cost prediction_details prediction_probability prediction_set prepare present preserve prior priority private private_sga privileges procedural procedure procedure_analyze processlist profiles project prompt protection public publishingservername purge quarter query quick quiesce quota quotename radians raise rand range rank raw read reads readsize rebuild record records recover recovery recursive recycle redo reduced ref reference referenced references referencing refresh regexp_like register regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy reject rekey relational relative relaylog release release_lock relies_on relocate rely rem remainder rename repair repeat replace replicate replication required reset resetlogs resize resource respect restore restricted result result_cache resumable resume retention return returning returns reuse reverse revoke right rlike role roles rollback rolling rollup round row row_count rowdependencies rowid rownum rows rtrim rules safe salt sample save savepoint sb1 sb2 sb4 scan schema schemacheck scn scope scroll sdo_georaster sdo_topo_geometry search sec_to_time second section securefile security seed segment select self sequence sequential serializable server servererror session session_user sessions_per_user set sets settings sha sha1 sha2 share shared shared_pool short show shrink shutdown si_averagecolor si_colorhistogram si_featurelist si_positionalcolor si_stillimage si_texture siblings sid sign sin size size_t sizes skip slave sleep smalldatetimefromparts smallfile snapshot some soname sort soundex source space sparse spfile split sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_small_result sql_variant_property sqlcode sqldata sqlerror sqlname sqlstate sqrt square standalone standby start starting startup statement static statistics stats_binomial_test stats_crosstab stats_ks_test stats_mode stats_mw_test stats_one_way_anova stats_t_test_ stats_t_test_indep stats_t_test_one stats_t_test_paired stats_wsr_test status std stddev stddev_pop stddev_samp stdev stop storage store stored str str_to_date straight_join strcmp strict string struct stuff style subdate subpartition subpartitions substitutable substr substring subtime subtring_index subtype success sum suspend switch switchoffset switchover sync synchronous synonym sys sys_xmlagg sysasm sysaux sysdate sysdatetimeoffset sysdba sysoper system system_user sysutcdatetime table tables tablespace tan tdo template temporary terminated tertiary_weights test than then thread through tier ties time time_format time_zone timediff timefromparts timeout timestamp timestampadd timestampdiff timezone_abbr timezone_minute timezone_region to to_base64 to_date to_days to_seconds todatetimeoffset trace tracking transaction transactional translate translation treat trigger trigger_nestlevel triggers trim truncate try_cast try_convert try_parse type ub1 ub2 ub4 ucase unarchived unbounded uncompress under undo unhex unicode uniform uninstall union unique unix_timestamp unknown unlimited unlock unnest unpivot unrecoverable unsafe unsigned until untrusted unusable unused update updated upgrade upped upper upsert url urowid usable usage use use_stored_outlines user user_data user_resources users using utc_date utc_timestamp uuid uuid_short validate validate_password_strength validation valist value values var var_samp varcharc vari varia variab variabl variable variables variance varp varraw varrawc varray verify version versions view virtual visible void wait wallet warning warnings week weekday weekofyear wellformed when whene whenev wheneve whenever where while whitespace with within without work wrapped xdb xml xmlagg xmlattributes xmlcast xmlcolattval xmlelement xmlexists xmlforest xmlindex xmlnamespaces xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltype xor year year_to_month years yearweek",literal:"true false null unknown",built_in:"array bigint binary bit blob bool boolean char character date dec decimal float int int8 integer interval number numeric real record serial serial8 smallint text time timestamp varchar varying void"},c:[{cN:"string",b:"'",e:"'",c:[e.BE,{b:"''"}]},{cN:"string",b:'"',e:'"',c:[e.BE,{b:'""'}]},{cN:"string",b:"`",e:"`",c:[e.BE]},e.CNM,e.CBCM,t,e.HCM]},e.CBCM,t,e.HCM]}});hljs.registerLanguage("php",function(e){var c={b:"\\$+[a-zA-Z_-ÿ][a-zA-Z0-9_-ÿ]*"},i={cN:"meta",b:/<\?(php)?|\?>/},t={cN:"string",c:[e.BE,i],v:[{b:'b"',e:'"'},{b:"b'",e:"'"},e.inherit(e.ASM,{i:null}),e.inherit(e.QSM,{i:null})]},a={v:[e.BNM,e.CNM]};return{aliases:["php","php3","php4","php5","php6","php7"],cI:!0,k:"and include_once list abstract global private echo interface as static endswitch array null if endwhile or const for endforeach self var while isset public protected exit foreach throw elseif include __FILE__ empty require_once do xor return parent clone use __CLASS__ __LINE__ else break print eval new catch __METHOD__ case exception default die require __FUNCTION__ enddeclare final try switch continue endfor endif declare unset true false trait goto instanceof insteadof __DIR__ __NAMESPACE__ yield finally",c:[e.HCM,e.C("//","$",{c:[i]}),e.C("/\\*","\\*/",{c:[{cN:"doctag",b:"@[A-Za-z]+"}]}),e.C("__halt_compiler.+?;",!1,{eW:!0,k:"__halt_compiler",l:e.UIR}),{cN:"string",b:/<<<['"]?\w+['"]?$/,e:/^\w+;?$/,c:[e.BE,{cN:"subst",v:[{b:/\$\w+/},{b:/\{\$/,e:/\}/}]}]},i,{cN:"keyword",b:/\$this\b/},c,{b:/(::|->)+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/},{cN:"function",bK:"function",e:/[;{]/,eE:!0,i:"\\$|\\[|%",c:[e.UTM,{cN:"params",b:"\\(",e:"\\)",c:["self",c,e.CBCM,t,a]}]},{cN:"class",bK:"class interface",e:"{",eE:!0,i:/[:\(\$"]/,c:[{bK:"extends implements"},e.UTM]},{bK:"namespace",e:";",i:/[\.']/,c:[e.UTM]},{bK:"use",e:";",c:[e.UTM]},{b:"=>"},t,a]}});hljs.registerLanguage("bash",function(e){var t={cN:"variable",v:[{b:/\$[\w\d#@][\w\d_]*/},{b:/\$\{(.*?)}/}]},s={cN:"string",b:/"/,e:/"/,c:[e.BE,t,{cN:"variable",b:/\$\(/,e:/\)/,c:[e.BE]}]},a={cN:"string",b:/'/,e:/'/};return{aliases:["sh","zsh"],l:/\b-?[a-z\._]+\b/,k:{keyword:"if then else elif fi for while in do done case esac function",literal:"true false",built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp",_:"-ne -eq -lt -gt -f -d -e -s -l -a"},c:[{cN:"meta",b:/^#![^\n]+sh\s*$/,r:10},{cN:"function",b:/\w[\w\d_]*\s*\(\s*\)\s*\{/,rB:!0,c:[e.inherit(e.TM,{b:/\w[\w\d_]*/})],r:0},e.HCM,s,a,t]}});hljs.registerLanguage("shell",function(s){return{aliases:["console"],c:[{cN:"meta",b:"^\\s{0,3}[\\w\\d\\[\\]()@-]*[>%$#]",starts:{e:"$",sL:"bash"}}]}});hljs.registerLanguage("css",function(e){var c="[a-zA-Z-][a-zA-Z0-9_-]*",t={b:/[A-Z\_\.\-]+\s*:/,rB:!0,e:";",eW:!0,c:[{cN:"attribute",b:/\S/,e:":",eE:!0,starts:{eW:!0,eE:!0,c:[{b:/[\w-]+\(/,rB:!0,c:[{cN:"built_in",b:/[\w-]+/},{b:/\(/,e:/\)/,c:[e.ASM,e.QSM]}]},e.CSSNM,e.QSM,e.ASM,e.CBCM,{cN:"number",b:"#[0-9A-Fa-f]+"},{cN:"meta",b:"!important"}]}}]};return{cI:!0,i:/[=\/|'\$]/,c:[e.CBCM,{cN:"selector-id",b:/#[A-Za-z0-9_-]+/},{cN:"selector-class",b:/\.[A-Za-z0-9_-]+/},{cN:"selector-attr",b:/\[/,e:/\]/,i:"$"},{cN:"selector-pseudo",b:/:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/},{b:"@(font-face|page)",l:"[a-z-]+",k:"font-face page"},{b:"@",e:"[{;]",i:/:/,c:[{cN:"keyword",b:/\w+/},{b:/\s/,eW:!0,eE:!0,r:0,c:[e.ASM,e.QSM,e.CSSNM]}]},{cN:"selector-tag",b:c,r:0},{b:"{",e:"}",i:/\S/,c:[e.CBCM,t]}]}});hljs.registerLanguage("ruby",function(e){var b="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?",r={keyword:"and then defined module in return redo if BEGIN retry end for self when next until do begin unless END rescue else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor",literal:"true false nil"},c={cN:"doctag",b:"@[A-Za-z]+"},a={b:"#<",e:">"},s=[e.C("#","$",{c:[c]}),e.C("^\\=begin","^\\=end",{c:[c],r:10}),e.C("^__END__","\\n$")],n={cN:"subst",b:"#\\{",e:"}",k:r},t={cN:"string",c:[e.BE,n],v:[{b:/'/,e:/'/},{b:/"/,e:/"/},{b:/`/,e:/`/},{b:"%[qQwWx]?\\(",e:"\\)"},{b:"%[qQwWx]?\\[",e:"\\]"},{b:"%[qQwWx]?{",e:"}"},{b:"%[qQwWx]?<",e:">"},{b:"%[qQwWx]?/",e:"/"},{b:"%[qQwWx]?%",e:"%"},{b:"%[qQwWx]?-",e:"-"},{b:"%[qQwWx]?\\|",e:"\\|"},{b:/\B\?(\\\d{1,3}|\\x[A-Fa-f0-9]{1,2}|\\u[A-Fa-f0-9]{4}|\\?\S)\b/},{b:/<<(-?)\w+$/,e:/^\s*\w+$/}]},i={cN:"params",b:"\\(",e:"\\)",endsParent:!0,k:r},d=[t,a,{cN:"class",bK:"class module",e:"$|;",i:/=/,c:[e.inherit(e.TM,{b:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"}),{b:"<\\s*",c:[{b:"("+e.IR+"::)?"+e.IR}]}].concat(s)},{cN:"function",bK:"def",e:"$|;",c:[e.inherit(e.TM,{b:b}),i].concat(s)},{b:e.IR+"::"},{cN:"symbol",b:e.UIR+"(\\!|\\?)?:",r:0},{cN:"symbol",b:":(?!\\s)",c:[t,{b:b}],r:0},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},{b:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},{cN:"params",b:/\|/,e:/\|/,k:r},{b:"("+e.RSR+"|unless)\\s*",k:"unless",c:[a,{cN:"regexp",c:[e.BE,n],i:/\n/,v:[{b:"/",e:"/[a-z]*"},{b:"%r{",e:"}[a-z]*"},{b:"%r\\(",e:"\\)[a-z]*"},{b:"%r!",e:"![a-z]*"},{b:"%r\\[",e:"\\][a-z]*"}]}].concat(s),r:0}].concat(s);n.c=d,i.c=d;var l="[>?]>",o="[\\w#]+\\(\\w+\\):\\d+:\\d+>",u="(\\w+-)?\\d+\\.\\d+\\.\\d(p\\d+)?[^>]+>",w=[{b:/^\s*=>/,starts:{e:"$",c:d}},{cN:"meta",b:"^("+l+"|"+o+"|"+u+")",starts:{e:"$",c:d}}];return{aliases:["rb","gemspec","podspec","thor","irb"],k:r,i:/\/\*/,c:s.concat(w).concat(d)}});hljs.registerLanguage("yaml",function(e){var b="true false yes no null",a="^[ \\-]*",r="[a-zA-Z_][\\w\\-]*",t={cN:"attr",v:[{b:a+r+":"},{b:a+'"'+r+'":'},{b:a+"'"+r+"':"}]},c={cN:"template-variable",v:[{b:"{{",e:"}}"},{b:"%{",e:"}"}]},l={cN:"string",r:0,v:[{b:/'/,e:/'/},{b:/"/,e:/"/},{b:/\S+/}],c:[e.BE,c]};return{cI:!0,aliases:["yml","YAML","yaml"],c:[t,{cN:"meta",b:"^---s*$",r:10},{cN:"string",b:"[\\|>] *$",rE:!0,c:l.c,e:t.v[0].b},{b:"<%[%=-]?",e:"[%-]?%>",sL:"ruby",eB:!0,eE:!0,r:0},{cN:"type",b:"!"+e.UIR},{cN:"type",b:"!!"+e.UIR},{cN:"meta",b:"&"+e.UIR+"$"},{cN:"meta",b:"\\*"+e.UIR+"$"},{cN:"bullet",b:"^ *-",r:0},e.HCM,{bK:b,k:{literal:b}},e.CNM,l]}});hljs.registerLanguage("nginx",function(e){var r={cN:"variable",v:[{b:/\$\d+/},{b:/\$\{/,e:/}/},{b:"[\\$\\@]"+e.UIR}]},b={eW:!0,l:"[a-z/_]+",k:{literal:"on off yes no true false none blocked debug info notice warn error crit select break last permanent redirect kqueue rtsig epoll poll /dev/poll"},r:0,i:"=>",c:[e.HCM,{cN:"string",c:[e.BE,r],v:[{b:/"/,e:/"/},{b:/'/,e:/'/}]},{b:"([a-z]+):/",e:"\\s",eW:!0,eE:!0,c:[r]},{cN:"regexp",c:[e.BE,r],v:[{b:"\\s\\^",e:"\\s|{|;",rE:!0},{b:"~\\*?\\s+",e:"\\s|{|;",rE:!0},{b:"\\*(\\.[a-z\\-]+)+"},{b:"([a-z\\-]+\\.)+\\*"}]},{cN:"number",b:"\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b"},{cN:"number",b:"\\b\\d+[kKmMgGdshdwy]*\\b",r:0},r]};return{aliases:["nginxconf"],c:[e.HCM,{b:e.UIR+"\\s+{",rB:!0,e:"{",c:[{cN:"section",b:e.UIR}],r:0},{b:e.UIR+"\\s",e:";|{",rB:!0,c:[{cN:"attribute",b:e.UIR,starts:b}],r:0}],i:"[^\\s\\}]"}});hljs.registerLanguage("makefile",function(e){var i={cN:"variable",v:[{b:"\\$\\("+e.UIR+"\\)",c:[e.BE]},{b:/\$[@%<?\^\+\*]/}]},r={cN:"string",b:/"/,e:/"/,c:[e.BE,i]},a={cN:"variable",b:/\$\([\w-]+\s/,e:/\)/,k:{built_in:"subst patsubst strip findstring filter filter-out sort word wordlist firstword lastword dir notdir suffix basename addsuffix addprefix join wildcard realpath abspath error warning shell origin flavor foreach if or and call eval file value"},c:[i]},n={b:"^"+e.UIR+"\\s*[:+?]?=",i:"\\n",rB:!0,c:[{b:"^"+e.UIR,e:"[:+?]?=",eE:!0}]},t={cN:"meta",b:/^\.PHONY:/,e:/$/,k:{"meta-keyword":".PHONY"},l:/[\.\w]+/},l={cN:"section",b:/^[^\s]+:/,e:/$/,c:[i]};return{aliases:["mk","mak"],k:"define endef undefine ifdef ifndef ifeq ifneq else endif include -include sinclude override export unexport private vpath",l:/[\w-]+/,c:[e.HCM,i,r,a,n,t,l]}});hljs.registerLanguage("cpp",function(t){var e={cN:"keyword",b:"\\b[a-z\\d_]*_t\\b"},r={cN:"string",v:[{b:'(u8?|U|L)?"',e:'"',i:"\\n",c:[t.BE]},{b:'(u8?|U|L)?R"\\(',e:'\\)"'},{b:"'\\\\?.",e:"'",i:"."}]},s={cN:"number",v:[{b:"\\b(0b[01']+)"},{b:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{b:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],r:0},i={cN:"meta",b:/#\s*[a-z]+\b/,e:/$/,k:{"meta-keyword":"if else elif endif define undef warning error line pragma ifdef ifndef include"},c:[{b:/\\\n/,r:0},t.inherit(r,{cN:"meta-string"}),{cN:"meta-string",b:/<[^\n>]*>/,e:/$/,i:"\\n"},t.CLCM,t.CBCM]},a=t.IR+"\\s*\\(",c={keyword:"int float while private char catch import module export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using asm case typeid short reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignof constexpr decltype noexcept static_assert thread_local restrict _Bool complex _Complex _Imaginary atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong new throw return and or not",built_in:"std string cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap array shared_ptr abort abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr",literal:"true false nullptr NULL"},n=[e,t.CLCM,t.CBCM,s,r];return{aliases:["c","cc","h","c++","h++","hpp"],k:c,i:"</",c:n.concat([i,{b:"\\b(deque|list|queue|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array)\\s*<",e:">",k:c,c:["self",e]},{b:t.IR+"::",k:c},{v:[{b:/=/,e:/;/},{b:/\(/,e:/\)/},{bK:"new throw return else",e:/;/}],k:c,c:n.concat([{b:/\(/,e:/\)/,k:c,c:n.concat(["self"]),r:0}]),r:0},{cN:"function",b:"("+t.IR+"[\\*&\\s]+)+"+a,rB:!0,e:/[{;=]/,eE:!0,k:c,i:/[^\w\s\*&]/,c:[{b:a,rB:!0,c:[t.TM],r:0},{cN:"params",b:/\(/,e:/\)/,k:c,r:0,c:[t.CLCM,t.CBCM,r,s,e,{b:/\(/,e:/\)/,k:c,r:0,c:["self",t.CLCM,t.CBCM,r,s,e]}]},t.CLCM,t.CBCM,i]},{cN:"class",bK:"class struct",e:/[{;:]/,c:[{b:/</,e:/>/,c:["self"]},t.TM]}]),exports:{preprocessor:i,strings:r,k:c}}});hljs.registerLanguage("ini",function(e){var b={cN:"string",c:[e.BE],v:[{b:"'''",e:"'''",r:10},{b:'"""',e:'"""',r:10},{b:'"',e:'"'},{b:"'",e:"'"}]};return{aliases:["toml"],cI:!0,i:/\S/,c:[e.C(";","$"),e.HCM,{cN:"section",b:/^\s*\[+/,e:/\]+/},{b:/^[a-z0-9\[\]_-]+\s*=\s*/,e:"$",rB:!0,c:[{cN:"attr",b:/[a-z0-9\[\]_-]+/},{b:/=/,eW:!0,r:0,c:[{cN:"literal",b:/\bon|off|true|false|yes|no\b/},{cN:"variable",v:[{b:/\$[\w\d"][\w\d_]*/},{b:/\$\{(.*?)}/}]},b,{cN:"number",b:/([\+\-]+)?[\d]+_[\d_]+/},e.NM]}]}]}});hljs.registerLanguage("cs",function(e){var i={keyword:"abstract as base bool break byte case catch char checked const continue decimal default delegate do double enum event explicit extern finally fixed float for foreach goto if implicit in int interface internal is lock long nameof object operator out override params private protected public readonly ref sbyte sealed short sizeof stackalloc static string struct switch this try typeof uint ulong unchecked unsafe ushort using virtual void volatile while add alias ascending async await by descending dynamic equals from get global group into join let on orderby partial remove select set value var where yield",literal:"null false true"},r={cN:"number",v:[{b:"\\b(0b[01']+)"},{b:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{b:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],r:0},t={cN:"string",b:'@"',e:'"',c:[{b:'""'}]},a=e.inherit(t,{i:/\n/}),c={cN:"subst",b:"{",e:"}",k:i},n=e.inherit(c,{i:/\n/}),s={cN:"string",b:/\$"/,e:'"',i:/\n/,c:[{b:"{{"},{b:"}}"},e.BE,n]},b={cN:"string",b:/\$@"/,e:'"',c:[{b:"{{"},{b:"}}"},{b:'""'},c]},l=e.inherit(b,{i:/\n/,c:[{b:"{{"},{b:"}}"},{b:'""'},n]});c.c=[b,s,t,e.ASM,e.QSM,r,e.CBCM],n.c=[l,s,a,e.ASM,e.QSM,r,e.inherit(e.CBCM,{i:/\n/})];var o={v:[b,s,t,e.ASM,e.QSM]},d=e.IR+"(<"+e.IR+"(\\s*,\\s*"+e.IR+")*>)?(\\[\\])?";return{aliases:["csharp"],k:i,i:/::/,c:[e.C("///","$",{rB:!0,c:[{cN:"doctag",v:[{b:"///",r:0},{b:"<!--|-->"},{b:"</?",e:">"}]}]}),e.CLCM,e.CBCM,{cN:"meta",b:"#",e:"$",k:{"meta-keyword":"if else elif endif define undef warning error line region endregion pragma checksum"}},o,r,{bK:"class interface",e:/[{;=]/,i:/[^\s:,]/,c:[e.TM,e.CLCM,e.CBCM]},{bK:"namespace",e:/[{;=]/,i:/[^\s:]/,c:[e.inherit(e.TM,{b:"[a-zA-Z](\\.?\\w)*"}),e.CLCM,e.CBCM]},{cN:"meta",b:"^\\s*\\[",eB:!0,e:"\\]",eE:!0,c:[{cN:"meta-string",b:/"/,e:/"/}]},{bK:"new return throw await else",r:0},{cN:"function",b:"("+d+"\\s+)+"+e.IR+"\\s*\\(",rB:!0,e:/\s*[{;=]/,eE:!0,k:i,c:[{b:e.IR+"\\s*\\(",rB:!0,c:[e.TM],r:0},{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,k:i,r:0,c:[o,r,e.CBCM]},e.CLCM,e.CBCM]}]}});hljs.registerLanguage("python",function(e){var r={keyword:"and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda async await nonlocal|10 None True False",built_in:"Ellipsis NotImplemented"},b={cN:"meta",b:/^(>>>|\.\.\.) /},c={cN:"subst",b:/\{/,e:/\}/,k:r,i:/#/},a={cN:"string",c:[e.BE],v:[{b:/(u|b)?r?'''/,e:/'''/,c:[e.BE,b],r:10},{b:/(u|b)?r?"""/,e:/"""/,c:[e.BE,b],r:10},{b:/(fr|rf|f)'''/,e:/'''/,c:[e.BE,b,c]},{b:/(fr|rf|f)"""/,e:/"""/,c:[e.BE,b,c]},{b:/(u|r|ur)'/,e:/'/,r:10},{b:/(u|r|ur)"/,e:/"/,r:10},{b:/(b|br)'/,e:/'/},{b:/(b|br)"/,e:/"/},{b:/(fr|rf|f)'/,e:/'/,c:[e.BE,c]},{b:/(fr|rf|f)"/,e:/"/,c:[e.BE,c]},e.ASM,e.QSM]},s={cN:"number",r:0,v:[{b:e.BNR+"[lLjJ]?"},{b:"\\b(0o[0-7]+)[lLjJ]?"},{b:e.CNR+"[lLjJ]?"}]},i={cN:"params",b:/\(/,e:/\)/,c:["self",b,s,a]};return c.c=[a,s,b],{aliases:["py","gyp"],k:r,i:/(<\/|->|\?)|=>/,c:[b,s,a,e.HCM,{v:[{cN:"function",bK:"def"},{cN:"class",bK:"class"}],e:/:/,i:/[${=;\n,]/,c:[e.UTM,i,{b:/->/,eW:!0,k:"None"}]},{cN:"meta",b:/^[\t ]*@/,e:/$/},{b:/\b(print|exec)\(/}]}});hljs.registerLanguage("javascript",function(e){var r="[A-Za-z$_][0-9A-Za-z$_]*",t={keyword:"in of if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const export super debugger as async await static import from as",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect Promise"},a={cN:"number",v:[{b:"\\b(0[bB][01]+)"},{b:"\\b(0[oO][0-7]+)"},{b:e.CNR}],r:0},n={cN:"subst",b:"\\$\\{",e:"\\}",k:t,c:[]},c={cN:"string",b:"`",e:"`",c:[e.BE,n]};n.c=[e.ASM,e.QSM,c,a,e.RM];var s=n.c.concat([e.CBCM,e.CLCM]);return{aliases:["js","jsx"],k:t,c:[{cN:"meta",r:10,b:/^\s*['"]use (strict|asm)['"]/},{cN:"meta",b:/^#!/,e:/$/},e.ASM,e.QSM,c,e.CLCM,e.CBCM,a,{b:/[{,]\s*/,r:0,c:[{b:r+"\\s*:",rB:!0,r:0,c:[{cN:"attr",b:r,r:0}]}]},{b:"("+e.RSR+"|\\b(case|return|throw)\\b)\\s*",k:"return throw case",c:[e.CLCM,e.CBCM,e.RM,{cN:"function",b:"(\\(.*?\\)|"+r+")\\s*=>",rB:!0,e:"\\s*=>",c:[{cN:"params",v:[{b:r},{b:/\(\s*\)/},{b:/\(/,e:/\)/,eB:!0,eE:!0,k:t,c:s}]}]},{b:/</,e:/(\/\w+|\w+\/)>/,sL:"xml",c:[{b:/<\w+\s*\/>/,skip:!0},{b:/<\w+/,e:/(\/\w+|\w+\/)>/,skip:!0,c:[{b:/<\w+\s*\/>/,skip:!0},"self"]}]}],r:0},{cN:"function",bK:"function",e:/\{/,eE:!0,c:[e.inherit(e.TM,{b:r}),{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,c:s}],i:/\[|%/},{b:/\$[(.]/},e.METHOD_GUARD,{cN:"class",bK:"class",e:/[{;=]/,eE:!0,i:/[:"\[\]]/,c:[{bK:"extends"},e.UTM]},{bK:"constructor",e:/\{/,eE:!0}],i:/#(?!!)/}});hljs.registerLanguage("dockerfile",function(e){return{aliases:["docker"],cI:!0,k:"from maintainer expose env arg user onbuild stopsignal",c:[e.HCM,e.ASM,e.QSM,e.NM,{bK:"run cmd entrypoint volume add copy workdir label healthcheck shell",starts:{e:/[^\\]\n/,sL:"bash"}}],i:"</"}});hljs.registerLanguage("erb",function(e){return{sL:"xml",c:[e.C("<%#","%>"),{b:"<%[%=-]?",e:"[%-]?%>",sL:"ruby",eB:!0,eE:!0}]}});hljs.registerLanguage("haml",function(s){return{cI:!0,c:[{cN:"meta",b:"^!!!( (5|1\\.1|Strict|Frameset|Basic|Mobile|RDFa|XML\\b.*))?$",r:10},s.C("^\\s*(!=#|=#|-#|/).*$",!1,{r:0}),{b:"^\\s*(-|=|!=)(?!#)",starts:{e:"\\n",sL:"ruby"}},{cN:"tag",b:"^\\s*%",c:[{cN:"selector-tag",b:"\\w+"},{cN:"selector-id",b:"#[\\w-]+"},{cN:"selector-class",b:"\\.[\\w-]+"},{b:"{\\s*",e:"\\s*}",c:[{b:":\\w+\\s*=>",e:",\\s+",rB:!0,eW:!0,c:[{cN:"attr",b:":\\w+"},s.ASM,s.QSM,{b:"\\w+",r:0}]}]},{b:"\\(\\s*",e:"\\s*\\)",eE:!0,c:[{b:"\\w+\\s*=",e:"\\s+",rB:!0,eW:!0,c:[{cN:"attr",b:"\\w+",r:0},s.ASM,s.QSM,{b:"\\w+",r:0}]}]}]},{b:"^\\s*[=~]\\s*"},{b:"#{",starts:{e:"}",sL:"ruby"}}]}});hljs.registerLanguage("puppet",function(e){var s={keyword:"and case default else elsif false if in import enherits node or true undef unless main settings $string ",literal:"alias audit before loglevel noop require subscribe tag owner ensure group mode name|0 changes context force incl lens load_path onlyif provider returns root show_diff type_check en_address ip_address realname command environment hour monute month monthday special target weekday creates cwd ogoutput refresh refreshonly tries try_sleep umask backup checksum content ctime force ignore links mtime purge recurse recurselimit replace selinux_ignore_defaults selrange selrole seltype seluser source souirce_permissions sourceselect validate_cmd validate_replacement allowdupe attribute_membership auth_membership forcelocal gid ia_load_module members system host_aliases ip allowed_trunk_vlans description device_url duplex encapsulation etherchannel native_vlan speed principals allow_root auth_class auth_type authenticate_user k_of_n mechanisms rule session_owner shared options device fstype enable hasrestart directory present absent link atboot blockdevice device dump pass remounts poller_tag use message withpath adminfile allow_virtual allowcdrom category configfiles flavor install_options instance package_settings platform responsefile status uninstall_options vendor unless_system_user unless_uid binary control flags hasstatus manifest pattern restart running start stop allowdupe auths expiry gid groups home iterations key_membership keys managehome membership password password_max_age password_min_age profile_membership profiles project purge_ssh_keys role_membership roles salt shell uid baseurl cost descr enabled enablegroups exclude failovermethod gpgcheck gpgkey http_caching include includepkgs keepalive metadata_expire metalink mirrorlist priority protect proxy proxy_password proxy_username repo_gpgcheck s3_enabled skip_if_unavailable sslcacert sslclientcert sslclientkey sslverify mounted",built_in:"architecture augeasversion blockdevices boardmanufacturer boardproductname boardserialnumber cfkey dhcp_servers domain ec2_ ec2_userdata facterversion filesystems ldom fqdn gid hardwareisa hardwaremodel hostname id|0 interfaces ipaddress ipaddress_ ipaddress6 ipaddress6_ iphostnumber is_virtual kernel kernelmajversion kernelrelease kernelversion kernelrelease kernelversion lsbdistcodename lsbdistdescription lsbdistid lsbdistrelease lsbmajdistrelease lsbminordistrelease lsbrelease macaddress macaddress_ macosx_buildversion macosx_productname macosx_productversion macosx_productverson_major macosx_productversion_minor manufacturer memoryfree memorysize netmask metmask_ network_ operatingsystem operatingsystemmajrelease operatingsystemrelease osfamily partitions path physicalprocessorcount processor processorcount productname ps puppetversion rubysitedir rubyversion selinux selinux_config_mode selinux_config_policy selinux_current_mode selinux_current_mode selinux_enforced selinux_policyversion serialnumber sp_ sshdsakey sshecdsakey sshrsakey swapencrypted swapfree swapsize timezone type uniqueid uptime uptime_days uptime_hours uptime_seconds uuid virtual vlans xendomains zfs_version zonenae zones zpool_version"},r=e.C("#","$"),a="([A-Za-z_]|::)(\\w|::)*",i=e.inherit(e.TM,{b:a}),o={cN:"variable",b:"\\$"+a},t={cN:"string",c:[e.BE,o],v:[{b:/'/,e:/'/},{b:/"/,e:/"/}]};return{aliases:["pp"],c:[r,o,t,{bK:"class",e:"\\{|;",i:/=/,c:[i,r]},{bK:"define",e:/\{/,c:[{cN:"section",b:e.IR,endsParent:!0}]},{b:e.IR+"\\s+\\{",rB:!0,e:/\S/,c:[{cN:"keyword",b:e.IR},{b:/\{/,e:/\}/,k:s,r:0,c:[t,r,{b:"[a-zA-Z_]+\\s*=>",rB:!0,e:"=>",c:[{cN:"attr",b:e.IR}]},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},o]}],r:0}]}});hljs.registerLanguage("scss",function(e){var t="[a-zA-Z-][a-zA-Z0-9_-]*",i={cN:"variable",b:"(\\$"+t+")\\b"},r={cN:"number",b:"#[0-9A-Fa-f]+"};({cN:"attribute",b:"[A-Z\\_\\.\\-]+",e:":",eE:!0,i:"[^\\s]",starts:{eW:!0,eE:!0,c:[r,e.CSSNM,e.QSM,e.ASM,e.CBCM,{cN:"meta",b:"!important"}]}});return{cI:!0,i:"[=/|']",c:[e.CLCM,e.CBCM,{cN:"selector-id",b:"\\#[A-Za-z0-9_-]+",r:0},{cN:"selector-class",b:"\\.[A-Za-z0-9_-]+",r:0},{cN:"selector-attr",b:"\\[",e:"\\]",i:"$"},{cN:"selector-tag",b:"\\b(a|abbr|acronym|address|area|article|aside|audio|b|base|big|blockquote|body|br|button|canvas|caption|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|div|dl|dt|em|embed|fieldset|figcaption|figure|footer|form|frame|frameset|(h[1-6])|head|header|hgroup|hr|html|i|iframe|img|input|ins|kbd|keygen|label|legend|li|link|map|mark|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|samp|script|section|select|small|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video)\\b",r:0},{b:":(visited|valid|root|right|required|read-write|read-only|out-range|optional|only-of-type|only-child|nth-of-type|nth-last-of-type|nth-last-child|nth-child|not|link|left|last-of-type|last-child|lang|invalid|indeterminate|in-range|hover|focus|first-of-type|first-line|first-letter|first-child|first|enabled|empty|disabled|default|checked|before|after|active)"},{b:"::(after|before|choices|first-letter|first-line|repeat-index|repeat-item|selection|value)"},i,{cN:"attribute",b:"\\b(z-index|word-wrap|word-spacing|word-break|width|widows|white-space|visibility|vertical-align|unicode-bidi|transition-timing-function|transition-property|transition-duration|transition-delay|transition|transform-style|transform-origin|transform|top|text-underline-position|text-transform|text-shadow|text-rendering|text-overflow|text-indent|text-decoration-style|text-decoration-line|text-decoration-color|text-decoration|text-align-last|text-align|tab-size|table-layout|right|resize|quotes|position|pointer-events|perspective-origin|perspective|page-break-inside|page-break-before|page-break-after|padding-top|padding-right|padding-left|padding-bottom|padding|overflow-y|overflow-x|overflow-wrap|overflow|outline-width|outline-style|outline-offset|outline-color|outline|orphans|order|opacity|object-position|object-fit|normal|none|nav-up|nav-right|nav-left|nav-index|nav-down|min-width|min-height|max-width|max-height|mask|marks|margin-top|margin-right|margin-left|margin-bottom|margin|list-style-type|list-style-position|list-style-image|list-style|line-height|letter-spacing|left|justify-content|initial|inherit|ime-mode|image-orientation|image-resolution|image-rendering|icon|hyphens|height|font-weight|font-variant-ligatures|font-variant|font-style|font-stretch|font-size-adjust|font-size|font-language-override|font-kerning|font-feature-settings|font-family|font|float|flex-wrap|flex-shrink|flex-grow|flex-flow|flex-direction|flex-basis|flex|filter|empty-cells|display|direction|cursor|counter-reset|counter-increment|content|column-width|column-span|column-rule-width|column-rule-style|column-rule-color|column-rule|column-gap|column-fill|column-count|columns|color|clip-path|clip|clear|caption-side|break-inside|break-before|break-after|box-sizing|box-shadow|box-decoration-break|bottom|border-width|border-top-width|border-top-style|border-top-right-radius|border-top-left-radius|border-top-color|border-top|border-style|border-spacing|border-right-width|border-right-style|border-right-color|border-right|border-radius|border-left-width|border-left-style|border-left-color|border-left|border-image-width|border-image-source|border-image-slice|border-image-repeat|border-image-outset|border-image|border-color|border-collapse|border-bottom-width|border-bottom-style|border-bottom-right-radius|border-bottom-left-radius|border-bottom-color|border-bottom|border|background-size|background-repeat|background-position|background-origin|background-image|background-color|background-clip|background-attachment|background-blend-mode|background|backface-visibility|auto|animation-timing-function|animation-play-state|animation-name|animation-iteration-count|animation-fill-mode|animation-duration|animation-direction|animation-delay|animation|align-self|align-items|align-content)\\b",i:"[^\\s]"},{b:"\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\b"},{b:":",e:";",c:[i,r,e.CSSNM,e.QSM,e.ASM,{cN:"meta",b:"!important"}]},{b:"@",e:"[{;]",k:"mixin include extend for if else each while charset import debug media page content font-face namespace warn",c:[i,e.QSM,e.ASM,r,e.CSSNM,{b:"\\s[A-Za-z0-9_.-]+",r:0}]}]}});
|
File without changes
|
data/lib/elabs.rb
CHANGED
@@ -42,8 +42,16 @@ module Elabs
|
|
42
42
|
mattr_accessor :users_can_register
|
43
43
|
@@users_can_register = true
|
44
44
|
|
45
|
+
# Enable the form honeypot used for reports/comments
|
46
|
+
mattr_accessor :trap_dumb_bots
|
47
|
+
@@trap_dumb_bots = true
|
48
|
+
|
45
49
|
def self.setup
|
46
50
|
yield self
|
47
51
|
end
|
52
|
+
|
53
|
+
def self.trap_dumb_bots?
|
54
|
+
@@trap_dumb_bots
|
55
|
+
end
|
48
56
|
end
|
49
57
|
# rubocop:enable Style/ClassVars
|
data/lib/elabs/version.rb
CHANGED
@@ -4,7 +4,7 @@ require 'rails/generators/base'
|
|
4
4
|
|
5
5
|
module Elabs
|
6
6
|
module Generators
|
7
|
-
class
|
7
|
+
class DeviseMailerViewsGenerator < Rails::Generators::Base
|
8
8
|
source_root File.expand_path('../../..', __dir__)
|
9
9
|
|
10
10
|
def set_source_paths
|
@@ -14,7 +14,7 @@ module Elabs
|
|
14
14
|
]
|
15
15
|
end
|
16
16
|
|
17
|
-
desc 'Copies
|
17
|
+
desc 'Copies devise mailer views in your app'
|
18
18
|
|
19
19
|
def copy_devise_views
|
20
20
|
directory 'spec/dummy/app/views/devise', 'app/views/devise'
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rails/generators/base'
|
4
|
+
|
5
|
+
module Elabs
|
6
|
+
module Generators
|
7
|
+
class ImagesGenerator < Rails::Generators::Base
|
8
|
+
source_root File.expand_path('../../..', __dir__)
|
9
|
+
|
10
|
+
def set_source_paths
|
11
|
+
@source_paths = [
|
12
|
+
File.expand_path('../templates', __dir__),
|
13
|
+
File.expand_path('../../..', __dir__)
|
14
|
+
]
|
15
|
+
end
|
16
|
+
|
17
|
+
desc 'Copies placeholder images'
|
18
|
+
|
19
|
+
def copy_images
|
20
|
+
directory 'app/assets/images/elabs/'
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -17,9 +17,7 @@ module Elabs
|
|
17
17
|
desc 'Copies required files if you plan to use elabs views'
|
18
18
|
|
19
19
|
def copy_files
|
20
|
-
directory 'spec/dummy/app/assets/images/elabs', 'app/assets/images/elabs'
|
21
20
|
template 'spec/dummy/package.json', 'package.json'
|
22
|
-
directory 'spec/dummy/public/fonts', 'public/fonts'
|
23
21
|
end
|
24
22
|
end
|
25
23
|
end
|
data/locale/app.pot
CHANGED
@@ -8,8 +8,8 @@ msgid ""
|
|
8
8
|
msgstr ""
|
9
9
|
"Project-Id-Version: app 1.0.0\n"
|
10
10
|
"Report-Msgid-Bugs-To: \n"
|
11
|
-
"POT-Creation-Date: 2018-
|
12
|
-
"PO-Revision-Date: 2018-
|
11
|
+
"POT-Creation-Date: 2018-12-31 13:06+0100\n"
|
12
|
+
"PO-Revision-Date: 2018-12-31 13:06+0100\n"
|
13
13
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
14
14
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
15
15
|
"Language: \n"
|
@@ -70,9 +70,6 @@ msgstr[1] ""
|
|
70
70
|
msgid "%<number>i characters minimum"
|
71
71
|
msgstr ""
|
72
72
|
|
73
|
-
msgid "%<s>s:"
|
74
|
-
msgstr ""
|
75
|
-
|
76
73
|
msgid "%<string>s has been %<event>s"
|
77
74
|
msgstr ""
|
78
75
|
|
@@ -139,7 +136,7 @@ msgstr ""
|
|
139
136
|
msgid "Admin"
|
140
137
|
msgstr ""
|
141
138
|
|
142
|
-
msgid "Administration
|
139
|
+
msgid "Administration"
|
143
140
|
msgstr ""
|
144
141
|
|
145
142
|
msgid "Album count"
|
@@ -169,6 +166,9 @@ msgstr ""
|
|
169
166
|
msgid "An error occured when fetching the repository data from Github."
|
170
167
|
msgstr ""
|
171
168
|
|
169
|
+
msgid "An error occurred during process"
|
170
|
+
msgstr ""
|
171
|
+
|
172
172
|
msgid "An error prevented the instructions from being sent:"
|
173
173
|
msgid_plural "%<nb>i errors prevented the instructions from being sent:"
|
174
174
|
msgstr[0] ""
|
@@ -179,6 +179,11 @@ msgid_plural "%<nb>i errors prevented this album from being saved:"
|
|
179
179
|
msgstr[0] ""
|
180
180
|
msgstr[1] ""
|
181
181
|
|
182
|
+
msgid "An error prevented this announcement from being saved:"
|
183
|
+
msgid_plural "%<nb>i errors prevented this announcement from being saved:"
|
184
|
+
msgstr[0] ""
|
185
|
+
msgstr[1] ""
|
186
|
+
|
182
187
|
msgid "An error prevented this article from being saved:"
|
183
188
|
msgid_plural "%<nb>i errors prevented this article from being saved:"
|
184
189
|
msgstr[0] ""
|
@@ -249,6 +254,18 @@ msgid_plural "%<nb>i errors prevented your report from being saved:"
|
|
249
254
|
msgstr[0] ""
|
250
255
|
msgstr[1] ""
|
251
256
|
|
257
|
+
msgid "Announcement was successfully created."
|
258
|
+
msgstr ""
|
259
|
+
|
260
|
+
msgid "Announcement was successfully destroyed."
|
261
|
+
msgstr ""
|
262
|
+
|
263
|
+
msgid "Announcement was successfully updated."
|
264
|
+
msgstr ""
|
265
|
+
|
266
|
+
msgid "Announcements"
|
267
|
+
msgstr ""
|
268
|
+
|
252
269
|
msgid "Application content record"
|
253
270
|
msgstr ""
|
254
271
|
|
@@ -321,6 +338,9 @@ msgstr ""
|
|
321
338
|
msgid "Bio"
|
322
339
|
msgstr ""
|
323
340
|
|
341
|
+
msgid "Body"
|
342
|
+
msgstr ""
|
343
|
+
|
324
344
|
msgid "By submitting this report, you agree to be recontacted by administrators."
|
325
345
|
msgstr ""
|
326
346
|
|
@@ -336,15 +356,42 @@ msgstr ""
|
|
336
356
|
msgid "Change your password"
|
337
357
|
msgstr ""
|
338
358
|
|
359
|
+
msgid "Choose day"
|
360
|
+
msgstr ""
|
361
|
+
|
362
|
+
msgid "Choose hour"
|
363
|
+
msgstr ""
|
364
|
+
|
365
|
+
msgid "Choose minutes"
|
366
|
+
msgstr ""
|
367
|
+
|
368
|
+
msgid "Choose month"
|
369
|
+
msgstr ""
|
370
|
+
|
371
|
+
msgid "Choose year"
|
372
|
+
msgstr ""
|
373
|
+
|
374
|
+
msgid "Come back in a few days to give time to the author to review it."
|
375
|
+
msgstr ""
|
376
|
+
|
339
377
|
msgid "Come back later, content is being created, somewhere"
|
340
378
|
msgstr ""
|
341
379
|
|
342
380
|
msgid "Comment"
|
343
381
|
msgstr ""
|
344
382
|
|
383
|
+
msgid "Comment was successfully archived."
|
384
|
+
msgstr ""
|
385
|
+
|
345
386
|
msgid "Comment was successfully created."
|
346
387
|
msgstr ""
|
347
388
|
|
389
|
+
msgid "Comment was successfully created. Thank you Bishop."
|
390
|
+
msgstr ""
|
391
|
+
|
392
|
+
msgid "Comment was successfully destroyed."
|
393
|
+
msgstr ""
|
394
|
+
|
348
395
|
msgid "Comments"
|
349
396
|
msgstr ""
|
350
397
|
|
@@ -405,10 +452,13 @@ msgstr ""
|
|
405
452
|
msgid "Didn't receive unlock instructions?"
|
406
453
|
msgstr ""
|
407
454
|
|
408
|
-
msgid "Display the full element to display this content
|
455
|
+
msgid "Display the full element to display this content…"
|
456
|
+
msgstr ""
|
457
|
+
|
458
|
+
msgid "Documentation"
|
409
459
|
msgstr ""
|
410
460
|
|
411
|
-
msgid "
|
461
|
+
msgid "Don't fill this field if you want this form to be saved."
|
412
462
|
msgstr ""
|
413
463
|
|
414
464
|
msgid "Download"
|
@@ -423,6 +473,9 @@ msgstr ""
|
|
423
473
|
msgid "Edit \"%<name>s\""
|
424
474
|
msgstr ""
|
425
475
|
|
476
|
+
msgid "Edit announcement"
|
477
|
+
msgstr ""
|
478
|
+
|
426
479
|
msgid "Editing album"
|
427
480
|
msgstr ""
|
428
481
|
|
@@ -450,6 +503,9 @@ msgstr ""
|
|
450
503
|
msgid "Email:"
|
451
504
|
msgstr ""
|
452
505
|
|
506
|
+
msgid "End at"
|
507
|
+
msgstr ""
|
508
|
+
|
453
509
|
msgid "Forgot your password?"
|
454
510
|
msgstr ""
|
455
511
|
|
@@ -462,13 +518,13 @@ msgstr ""
|
|
462
518
|
msgid "Gitlab responded with the following error:"
|
463
519
|
msgstr ""
|
464
520
|
|
465
|
-
msgid "
|
521
|
+
msgid "Global"
|
466
522
|
msgstr ""
|
467
523
|
|
468
|
-
msgid "
|
524
|
+
msgid "Hide NSFW"
|
469
525
|
msgstr ""
|
470
526
|
|
471
|
-
msgid "Home page
|
527
|
+
msgid "Home page"
|
472
528
|
msgstr ""
|
473
529
|
|
474
530
|
msgid "I agree to be recontacted"
|
@@ -486,6 +542,15 @@ msgstr ""
|
|
486
542
|
msgid "If this is not a minor modification, you can specify the changes here."
|
487
543
|
msgstr ""
|
488
544
|
|
545
|
+
msgid "If you want to display NSFW content, click on \"Show NSFW\" in the main menu."
|
546
|
+
msgstr ""
|
547
|
+
|
548
|
+
msgid "Important"
|
549
|
+
msgstr ""
|
550
|
+
|
551
|
+
msgid "Info"
|
552
|
+
msgstr ""
|
553
|
+
|
489
554
|
msgid "Infos"
|
490
555
|
msgstr ""
|
491
556
|
|
@@ -567,6 +632,9 @@ msgstr ""
|
|
567
632
|
msgid "Leave a comment"
|
568
633
|
msgstr ""
|
569
634
|
|
635
|
+
msgid "Level"
|
636
|
+
msgstr ""
|
637
|
+
|
570
638
|
msgid "License"
|
571
639
|
msgstr ""
|
572
640
|
|
@@ -648,9 +716,15 @@ msgstr ""
|
|
648
716
|
msgid "Member"
|
649
717
|
msgstr ""
|
650
718
|
|
719
|
+
msgid "Members"
|
720
|
+
msgstr ""
|
721
|
+
|
651
722
|
msgid "Mime type:"
|
652
723
|
msgstr ""
|
653
724
|
|
725
|
+
msgid "NSFW content"
|
726
|
+
msgstr ""
|
727
|
+
|
654
728
|
msgid "Name"
|
655
729
|
msgstr ""
|
656
730
|
|
@@ -678,6 +752,9 @@ msgstr ""
|
|
678
752
|
msgid "New album"
|
679
753
|
msgstr ""
|
680
754
|
|
755
|
+
msgid "New announcement"
|
756
|
+
msgstr ""
|
757
|
+
|
681
758
|
msgid "New article"
|
682
759
|
msgstr ""
|
683
760
|
|
@@ -735,6 +812,9 @@ msgstr ""
|
|
735
812
|
msgid "Notifications"
|
736
813
|
msgstr ""
|
737
814
|
|
815
|
+
msgid "Official documentation"
|
816
|
+
msgstr ""
|
817
|
+
|
738
818
|
msgid "Oh noes ! There is nothing here!"
|
739
819
|
msgstr ""
|
740
820
|
|
@@ -750,9 +830,6 @@ msgstr ""
|
|
750
830
|
msgid "Pass reset"
|
751
831
|
msgstr ""
|
752
832
|
|
753
|
-
msgid "Permalink"
|
754
|
-
msgstr ""
|
755
|
-
|
756
833
|
msgid "Posted on:"
|
757
834
|
msgstr ""
|
758
835
|
|
@@ -822,6 +899,9 @@ msgstr ""
|
|
822
899
|
msgid "Report was successfully created."
|
823
900
|
msgstr ""
|
824
901
|
|
902
|
+
msgid "Report was successfully created. Thank you Bishop."
|
903
|
+
msgstr ""
|
904
|
+
|
825
905
|
msgid "Report was successfully destroyed."
|
826
906
|
msgstr ""
|
827
907
|
|
@@ -852,6 +932,9 @@ msgstr ""
|
|
852
932
|
msgid "Resend unlock instructions"
|
853
933
|
msgstr ""
|
854
934
|
|
935
|
+
msgid "Robot area"
|
936
|
+
msgstr ""
|
937
|
+
|
855
938
|
msgid "Role"
|
856
939
|
msgstr ""
|
857
940
|
|
@@ -909,7 +992,13 @@ msgstr ""
|
|
909
992
|
msgid "Sorry, showing this may have unpredictable consequences"
|
910
993
|
msgstr ""
|
911
994
|
|
912
|
-
msgid "
|
995
|
+
msgid "Sort by…"
|
996
|
+
msgstr ""
|
997
|
+
|
998
|
+
msgid "Sources"
|
999
|
+
msgstr ""
|
1000
|
+
|
1001
|
+
msgid "Start at"
|
913
1002
|
msgstr ""
|
914
1003
|
|
915
1004
|
msgid "Subscription date:"
|
@@ -957,10 +1046,13 @@ msgstr ""
|
|
957
1046
|
msgid "Tag|Uploads count"
|
958
1047
|
msgstr ""
|
959
1048
|
|
960
|
-
msgid "
|
1049
|
+
msgid "Target"
|
1050
|
+
msgstr ""
|
1051
|
+
|
1052
|
+
msgid "The author wanted to put something here, but it may create an infinite loop…"
|
961
1053
|
msgstr ""
|
962
1054
|
|
963
|
-
msgid "The author wanted to put something here, but it was not found
|
1055
|
+
msgid "The author wanted to put something here, but it was not found…"
|
964
1056
|
msgstr ""
|
965
1057
|
|
966
1058
|
msgid "The following formats will be viewable online; other will need a download: %<formats>s"
|
@@ -1023,10 +1115,10 @@ msgstr ""
|
|
1023
1115
|
msgid "User was successfully destroyed."
|
1024
1116
|
msgstr ""
|
1025
1117
|
|
1026
|
-
msgid "
|
1118
|
+
msgid "Username"
|
1027
1119
|
msgstr ""
|
1028
1120
|
|
1029
|
-
msgid "Username"
|
1121
|
+
msgid "Username can be upper/lower case ascii letters, digits, hyphens and underscores. Make it at least 4 characters. As in \"super_man\", \"super-woman\", \"uberCat01\""
|
1030
1122
|
msgstr ""
|
1031
1123
|
|
1032
1124
|
msgid "Username:"
|
@@ -1098,9 +1190,15 @@ msgstr ""
|
|
1098
1190
|
msgid "User|Username"
|
1099
1191
|
msgstr ""
|
1100
1192
|
|
1193
|
+
msgid "View"
|
1194
|
+
msgstr ""
|
1195
|
+
|
1101
1196
|
msgid "View online"
|
1102
1197
|
msgstr ""
|
1103
1198
|
|
1199
|
+
msgid "Warning"
|
1200
|
+
msgstr ""
|
1201
|
+
|
1104
1202
|
msgid "We can't display the repository infos. Github responded with the following error:"
|
1105
1203
|
msgstr ""
|
1106
1204
|
|
@@ -1113,6 +1211,15 @@ msgstr ""
|
|
1113
1211
|
msgid "Yes"
|
1114
1212
|
msgstr ""
|
1115
1213
|
|
1214
|
+
msgid "You"
|
1215
|
+
msgstr ""
|
1216
|
+
|
1217
|
+
msgid "You may want to use a real device to do administrative things. Content here will be a mess."
|
1218
|
+
msgstr ""
|
1219
|
+
|
1220
|
+
msgid "You may want to use a real device to manage things. Content here will be a mess."
|
1221
|
+
msgstr ""
|
1222
|
+
|
1116
1223
|
msgid "You want to react to this content or ask something to the author? Just leave a comment here!"
|
1117
1224
|
msgstr ""
|
1118
1225
|
|
@@ -1122,12 +1229,18 @@ msgstr ""
|
|
1122
1229
|
msgid "Your browser does not support the video tag."
|
1123
1230
|
msgstr ""
|
1124
1231
|
|
1232
|
+
msgid "Your content"
|
1233
|
+
msgstr ""
|
1234
|
+
|
1125
1235
|
msgid "Your infos were successfully saved"
|
1126
1236
|
msgstr ""
|
1127
1237
|
|
1128
1238
|
msgid "Your picture should be in \"png\" or \"jpg\", preferably a square of 512px."
|
1129
1239
|
msgstr ""
|
1130
1240
|
|
1241
|
+
msgid "by %<name>s"
|
1242
|
+
msgstr ""
|
1243
|
+
|
1131
1244
|
msgid "created"
|
1132
1245
|
msgstr ""
|
1133
1246
|
|