diff --git a/.dockerfiles/entrypoint-dev-rails.sh b/.dockerfiles/entrypoint-dev-rails.sh index e9c126182d5..b7a5b9bfc1c 100755 --- a/.dockerfiles/entrypoint-dev-rails.sh +++ b/.dockerfiles/entrypoint-dev-rails.sh @@ -31,5 +31,8 @@ sed -i -e :a -e '/^\n*$/{$d;N;};/\n$/ba' /app/db/structure.sql rm -f ./tmp/pids/server.pid +# cssbundling-rails development command +npm run build-dev:css & + # Then exec the container's main process (what's set as CMD in the Dockerfile or compose.yaml). exec "$@" diff --git a/Changelog.md b/Changelog.md index de1b14b8b00..03fa7f32352 100644 --- a/Changelog.md +++ b/Changelog.md @@ -38,6 +38,8 @@ - Upgrade CI chromedriver to 125.0.6422.60 (#7082) - Fix flaky `Assignment#summary_json` test (#7111) - Upgrade pdfjs-dist to v4.3.136 (#7113) +- Switch from old rails-sassc to cssbundling-rails for CSS asset management + ## [v2.4.11] diff --git a/Gemfile b/Gemfile index 778d7915c14..6354aab0995 100644 --- a/Gemfile +++ b/Gemfile @@ -19,7 +19,6 @@ gem 'pluck_to_hash' gem 'autoprefixer-rails' gem 'jsbundling-rails' gem 'js-routes' -gem 'sass-rails' gem 'terser' # Background tasks @@ -124,3 +123,5 @@ end group :unicorn do gem 'unicorn' end + +gem 'cssbundling-rails', '~> 1.4' diff --git a/Gemfile.lock b/Gemfile.lock index a344a6b0bc4..926a58d6615 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -138,6 +138,8 @@ GEM bigdecimal rexml crass (1.0.6) + cssbundling-rails (1.4.0) + railties (>= 6.0.0) date (3.3.4) debug (1.9.2) irb (~> 1.10) @@ -413,16 +415,6 @@ GEM rufus-scheduler (3.9.1) fugit (~> 1.1, >= 1.1.6) rugged (1.7.2) - sass-rails (6.0.0) - sassc-rails (~> 2.1, >= 2.1.1) - sassc (2.4.0) - ffi (~> 1.9) - sassc-rails (2.1.2) - railties (>= 4.0.0) - sassc (>= 2.0) - sprockets (> 3.0) - sprockets-rails - tilt selenium-webdriver (4.21.1) base64 (~> 0.2) rexml (~> 3.2, >= 3.2.5) @@ -506,6 +498,7 @@ DEPENDENCIES combine_pdf config cookies_eu + cssbundling-rails (~> 1.4) debug (>= 1.0.0) descriptive_statistics dry-validation @@ -546,7 +539,6 @@ DEPENDENCIES rtesseract rubyzip rugged - sass-rails selenium-webdriver shoulda shoulda-callback-matchers (~> 1.1.1) diff --git a/app/assets/config/manifest.js b/app/assets/config/manifest.js index ce7664197aa..cea21fcdc3d 100644 --- a/app/assets/config/manifest.js +++ b/app/assets/config/manifest.js @@ -1,14 +1,9 @@ //= link_tree ../javascripts .js -//= link_directory ../stylesheets .css -//= link common/SyntaxHighlighter.css -//= link common/jupyterlab-markus-custom.css //= link_tree ../../../vendor/assets/javascripts .js -//= link_tree ../../../vendor/assets/stylesheets .css //= link cookies_eu.js // Images and fonts so that views can link to them // //= link_tree ../images //= link_tree ../builds -//= link flatpickr/dist/flatpickr.css diff --git a/app/assets/stylesheets/application.css b/app/assets/stylesheets/application.css deleted file mode 100644 index 55cf07624f3..00000000000 --- a/app/assets/stylesheets/application.css +++ /dev/null @@ -1,15 +0,0 @@ -/* - * This is a manifest file that'll automatically include all the stylesheets available in this directory - * and any sub-directories. You're free to add application-wide styles to this file and they'll appear at - * the top of the compiled file, but it's generally better to create a new file per style scope. - *= require_self - *= require 'clickable' - *= require 'fonts' - *= require react-table - *= require 'react-tabs/style/react-tabs' - *= require react-keyed-file-browser - *= require cookies_eu - *= require 'common/pdfjs_custom' - *= require 'common/core' - *= require 'flatpickr' -*/ diff --git a/app/assets/stylesheets/common/_login.scss b/app/assets/stylesheets/common/_login.scss index 91279bd2cae..fc6d94eabf9 100644 --- a/app/assets/stylesheets/common/_login.scss +++ b/app/assets/stylesheets/common/_login.scss @@ -92,7 +92,7 @@ } .login-image { - background: transparent asset-url('markus_logo.svg') no-repeat center center / contain; + background: transparent url('markus_logo.svg') no-repeat center center / contain; height: 115px; margin: 0 auto; width: 220px; diff --git a/app/assets/stylesheets/common/_navigation.scss b/app/assets/stylesheets/common/_navigation.scss index e2c1ce7529e..d82f875e742 100644 --- a/app/assets/stylesheets/common/_navigation.scss +++ b/app/assets/stylesheets/common/_navigation.scss @@ -58,7 +58,7 @@ nav { } #logo-img { - background: transparent asset-url('markus_logo.svg') no-repeat center center / 90px 30px; + background: transparent url('markus_logo.svg') no-repeat center center / 90px 30px; margin-right: $dimen-horizontal-nav; min-height: 38px; width: 90px; @@ -70,11 +70,11 @@ nav { .color-dark { #logo-img { - background-image: asset-url('markus_logo_dark.svg'); + background-image: url('markus_logo_dark.svg'); } #mobile_menu { - background-image: asset-url('markus_logo_dark.svg'); + background-image: url('markus_logo_dark.svg'); } } @@ -131,7 +131,7 @@ nav { } #mobile_menu { - background: $background-support asset-url('markus_logo.svg') no-repeat center center / 90px 30px; + background: $background-support url('markus_logo.svg') no-repeat center center / 90px 30px; border-bottom: 1px solid $primary-three; display: none; height: 3.5em; diff --git a/app/assets/stylesheets/entrypoints/application.scss b/app/assets/stylesheets/entrypoints/application.scss new file mode 100644 index 00000000000..fba0286ef24 --- /dev/null +++ b/app/assets/stylesheets/entrypoints/application.scss @@ -0,0 +1,15 @@ +// Entry point for your Sass build +@use 'clickable'; +@use 'fonts'; +@use 'common/pdfjs_custom'; +@use 'common/core'; + +@use 'flatpickr/dist/flatpickr.min'; +@use 'react-table/react-table'; +@use 'react-tabs/style/react-tabs'; +@use 'react-keyed-file-browser/dist/react-keyed-file-browser'; + +// We create a copy of the vendored assets in the cookies_eu gem due to limitation of cssbundling-rails. +// See https://github.com/rails/cssbundling-rails/issues/81. +@use 'cookies_eu'; +@use 'jquery-ui'; diff --git a/app/assets/stylesheets/entrypoints/notebook_common.scss b/app/assets/stylesheets/entrypoints/notebook_common.scss new file mode 100644 index 00000000000..1fd4f63ae55 --- /dev/null +++ b/app/assets/stylesheets/entrypoints/notebook_common.scss @@ -0,0 +1,5 @@ +@use 'jupyterlab'; +@use 'jupyterlab-extra'; + +@use 'fonts'; +@use 'common/jupyterlab-markus-custom'; diff --git a/app/assets/stylesheets/entrypoints/notebook_dark.scss b/app/assets/stylesheets/entrypoints/notebook_dark.scss new file mode 100644 index 00000000000..65080a10138 --- /dev/null +++ b/app/assets/stylesheets/entrypoints/notebook_dark.scss @@ -0,0 +1,2 @@ +@use 'jupyterlab-theme-dark-extension'; +@use 'pygments-monokai'; diff --git a/app/assets/stylesheets/entrypoints/notebook_light.scss b/app/assets/stylesheets/entrypoints/notebook_light.scss new file mode 100644 index 00000000000..ed087821a99 --- /dev/null +++ b/app/assets/stylesheets/entrypoints/notebook_light.scss @@ -0,0 +1,2 @@ +@use 'jupyterlab-theme-light-extension'; +@use 'pygments-default'; diff --git a/app/assets/stylesheets/entrypoints/result_main.scss b/app/assets/stylesheets/entrypoints/result_main.scss new file mode 100644 index 00000000000..7c10ffed916 --- /dev/null +++ b/app/assets/stylesheets/entrypoints/result_main.scss @@ -0,0 +1,3 @@ +@use 'common/SyntaxHighlighter'; +@use 'context_menu'; +@use 'grader'; diff --git a/app/assets/stylesheets/fonts.scss b/app/assets/stylesheets/fonts.scss index 721080dd9da..54274839885 100644 --- a/app/assets/stylesheets/fonts.scss +++ b/app/assets/stylesheets/fonts.scss @@ -3,12 +3,12 @@ font-family: 'Open Sans'; font-style: normal; font-weight: 100 1000; - src: asset-url('fonts/OpenSans-VariableFont_wdth,wght.woff2') format('woff2-variations'); + src: url('fonts/OpenSans-VariableFont_wdth,wght.woff2') format('woff2-variations'); } @font-face { font-family: 'Open Sans'; font-style: italic; font-weight: 100 1000; - src: asset-url('fonts/OpenSans-Italic-VariableFont_wdth,wght.woff2') format('woff2-variations'); + src: url('fonts/OpenSans-Italic-VariableFont_wdth,wght.woff2') format('woff2-variations'); } diff --git a/app/assets/stylesheets/result_main.scss b/app/assets/stylesheets/result_main.scss deleted file mode 100644 index dfc806c7941..00000000000 --- a/app/assets/stylesheets/result_main.scss +++ /dev/null @@ -1,3 +0,0 @@ -//= require common/SyntaxHighlighter -//= require context_menu -//= require grader diff --git a/app/views/exam_templates/assign_errors.html.erb b/app/views/exam_templates/assign_errors.html.erb index de450b615c6..ddc7dc1eccd 100644 --- a/app/views/exam_templates/assign_errors.html.erb +++ b/app/views/exam_templates/assign_errors.html.erb @@ -1,6 +1,5 @@ <% content_for :head do %> - <%= stylesheet_link_tag('grader') %> - <%= stylesheet_link_tag('context_menu') %> + <%= stylesheet_link_tag 'result_main' %> <%= stylesheet_link_tag 'result' %> <%= javascript_include_tag 'result', nonce: true %> diff --git a/app/views/groups/assign_scans.html.erb b/app/views/groups/assign_scans.html.erb index 07e8a3716fe..01584f2ad4c 100644 --- a/app/views/groups/assign_scans.html.erb +++ b/app/views/groups/assign_scans.html.erb @@ -1,6 +1,5 @@ <% content_for :head do %> - <%= stylesheet_link_tag 'grader', - 'jquery-ui' %> + <%= stylesheet_link_tag 'result_main' %> <%= stylesheet_link_tag 'result' %> <%= javascript_include_tag 'result', nonce: true %> <% end %> diff --git a/app/views/layouts/notebook.html.erb b/app/views/layouts/notebook.html.erb index 8cb901570c0..feeedd0a626 100644 --- a/app/views/layouts/notebook.html.erb +++ b/app/views/layouts/notebook.html.erb @@ -2,16 +2,11 @@ <% if @notebook_type == 'jupyter-notebook' %> - <%= stylesheet_link_tag 'jupyterlab' %> - <%= stylesheet_link_tag 'jupyterlab-extra' %> - <%= stylesheet_link_tag 'fonts' %> - <%= stylesheet_link_tag 'common/jupyterlab-markus-custom' %> + <%= stylesheet_link_tag 'notebook_common' %> <% if @current_user&.theme == 'dark' %> - <%= stylesheet_link_tag 'jupyterlab-theme-dark-extension' %> - <%= stylesheet_link_tag 'pygments-monokai' %> + <%= stylesheet_link_tag 'notebook_dark' %> <% else %> - <%= stylesheet_link_tag 'jupyterlab-theme-light-extension' %> - <%= stylesheet_link_tag 'pygments-default' %> + <%= stylesheet_link_tag 'notebook_light' %> <% end %> <%= javascript_include_tag 'require', nonce: true %> <%= javascript_tag nonce: true do %> diff --git a/config/brakeman.yml b/config/brakeman.yml new file mode 100644 index 00000000000..bf3e2fc88b5 --- /dev/null +++ b/config/brakeman.yml @@ -0,0 +1,3 @@ +--- +safe-methods: + - FileHelper.checked_join diff --git a/config/initializers/compressors.rb b/config/initializers/compressors.rb index d27a6a3837e..4b85b63015b 100644 --- a/config/initializers/compressors.rb +++ b/config/initializers/compressors.rb @@ -1,7 +1,7 @@ if Rails.env.production? Rails.application.config.assets.js_compressor = :terser - Rails.application.config.assets.css_compressor = :sass else Rails.application.config.assets.js_compressor = nil - Rails.application.config.assets.css_compressor = nil end + +Rails.application.config.assets.css_compressor = nil diff --git a/package.json b/package.json index 6e958e324ae..c91276643c2 100644 --- a/package.json +++ b/package.json @@ -66,6 +66,8 @@ "scripts": { "build": "node_modules/.bin/webpack --progress --config webpack.production.js", "build-dev": "node_modules/.bin/webpack --progress --config webpack.development.js", + "build:css": "sass ./app/assets/stylesheets/entrypoints:./app/assets/builds/ --no-source-map --load-path=node_modules --load-path=./app/assets/stylesheets --load-path=./vendor/assets/stylesheets --style=compressed", + "build-dev:css": "sass ./app/assets/stylesheets/entrypoints:./app/assets/builds/ --watch --load-path=node_modules --load-path=./app/assets/stylesheets --load-path=./vendor/assets/stylesheets", "test": "node_modules/.bin/jest --no-cache", "test-cov": "node_modules/.bin/jest --no-cache --collect-coverage" } diff --git a/vendor/assets/stylesheets/cookies_eu.scss b/vendor/assets/stylesheets/cookies_eu.scss new file mode 100644 index 00000000000..9e312968c43 --- /dev/null +++ b/vendor/assets/stylesheets/cookies_eu.scss @@ -0,0 +1,59 @@ +$cookies-eu-background-color: #F2F2F2; +$cookies-eu-border-color: #E4E4E4; +$cookies-eu-button-background-color: #4D90FE; +$cookies-eu-button-color: #FFFFFF; +$cookies-eu-mobile: 'max-width: 767px'; + +.cookies-eu { + line-height: 40px; + + position: fixed; + z-index: 999; + right: 0; + bottom: 0; + left: 0; + + padding: 0 20px; + + text-align: center; + + border-top: 1px solid $cookies-eu-border-color; + background: $cookies-eu-background-color; + + @media ($cookies-eu-mobile) { + font-size: 12px; + line-height: 30px; + + position: initial; + } + + .cookies-eu-content-holder { + display: inline-block; + + padding: 0 20px; + } + + .cookies-eu-button-holder { + display: inline-block; + + .cookies-eu-ok { + font-size: 11px; + font-weight: bold; + + line-height: 20px; + + min-width: 26px; + margin-right: 5px; + padding: 2px 11px; + + cursor: pointer; + text-align: center; + white-space: nowrap; + + color: $cookies-eu-button-color; + border: 0; + outline: none; + background-color: $cookies-eu-button-background-color; + } + } +} diff --git a/vendor/assets/stylesheets/jquery-ui-timepicker-addon.css b/vendor/assets/stylesheets/jquery-ui-timepicker-addon.css deleted file mode 100644 index 6ef513cc2d9..00000000000 --- a/vendor/assets/stylesheets/jquery-ui-timepicker-addon.css +++ /dev/null @@ -1,11 +0,0 @@ -.ui-timepicker-div .ui-widget-header { margin-bottom: 8px; } -.ui-timepicker-div dl { text-align: left; } -.ui-timepicker-div dl dt { float: left; clear:left; padding: 0 0 0 5px; } -.ui-timepicker-div dl dd { margin: 0 10px 10px 40%; } -.ui-timepicker-div td { font-size: 90%; } -.ui-tpicker-grid-label { background: none; border: none; margin: 0; padding: 0; } - -.ui-timepicker-rtl{ direction: rtl; } -.ui-timepicker-rtl dl { text-align: right; padding: 0 5px 0 0; } -.ui-timepicker-rtl dl dt{ float: right; clear: right; } -.ui-timepicker-rtl dl dd { margin: 0 40% 10px 10px; } diff --git a/vendor/assets/stylesheets/jquery.Jcrop.css b/vendor/assets/stylesheets/jquery.Jcrop.css deleted file mode 100755 index 95f8b9cfc23..00000000000 --- a/vendor/assets/stylesheets/jquery.Jcrop.css +++ /dev/null @@ -1,165 +0,0 @@ -/* jquery.Jcrop.css v0.9.12 - MIT License */ -/* - The outer-most container in a typical Jcrop instance - If you are having difficulty with formatting related to styles - on a parent element, place any fixes here or in a like selector - - You can also style this element if you want to add a border, etc - A better method for styling can be seen below with .jcrop-light - (Add a class to the holder and style elements for that extended class) -*/ -.jcrop-holder { - direction: ltr; - text-align: left; -} -/* Selection Border */ -.jcrop-vline, -.jcrop-hline { - background: #ffffff url("Jcrop.gif"); - font-size: 0; - position: absolute; -} -.jcrop-vline { - height: 100%; - width: 1px !important; -} -.jcrop-vline.right { - right: 0; -} -.jcrop-hline { - height: 1px !important; - width: 100%; -} -.jcrop-hline.bottom { - bottom: 0; -} -/* Invisible click targets */ -.jcrop-tracker { - height: 100%; - width: 100%; - /* "turn off" link highlight */ - -webkit-tap-highlight-color: transparent; - /* disable callout, image save panel */ - -webkit-touch-callout: none; - /* disable cut copy paste */ - -webkit-user-select: none; -} -/* Selection Handles */ -.jcrop-handle { - background-color: #333333; - border: 1px #eeeeee solid; - width: 7px; - height: 7px; - font-size: 1px; -} -.jcrop-handle.ord-n { - left: 50%; - margin-left: -4px; - margin-top: -4px; - top: 0; -} -.jcrop-handle.ord-s { - bottom: 0; - left: 50%; - margin-bottom: -4px; - margin-left: -4px; -} -.jcrop-handle.ord-e { - margin-right: -4px; - margin-top: -4px; - right: 0; - top: 50%; -} -.jcrop-handle.ord-w { - left: 0; - margin-left: -4px; - margin-top: -4px; - top: 50%; -} -.jcrop-handle.ord-nw { - left: 0; - margin-left: -4px; - margin-top: -4px; - top: 0; -} -.jcrop-handle.ord-ne { - margin-right: -4px; - margin-top: -4px; - right: 0; - top: 0; -} -.jcrop-handle.ord-se { - bottom: 0; - margin-bottom: -4px; - margin-right: -4px; - right: 0; -} -.jcrop-handle.ord-sw { - bottom: 0; - left: 0; - margin-bottom: -4px; - margin-left: -4px; -} -/* Dragbars */ -.jcrop-dragbar.ord-n, -.jcrop-dragbar.ord-s { - height: 7px; - width: 100%; -} -.jcrop-dragbar.ord-e, -.jcrop-dragbar.ord-w { - height: 100%; - width: 7px; -} -.jcrop-dragbar.ord-n { - margin-top: -4px; -} -.jcrop-dragbar.ord-s { - bottom: 0; - margin-bottom: -4px; -} -.jcrop-dragbar.ord-e { - margin-right: -4px; - right: 0; -} -.jcrop-dragbar.ord-w { - margin-left: -4px; -} -/* The "jcrop-light" class/extension */ -.jcrop-light .jcrop-vline, -.jcrop-light .jcrop-hline { - background: #ffffff; - filter: alpha(opacity=70) !important; - opacity: .70!important; -} -.jcrop-light .jcrop-handle { - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - background-color: #000000; - border-color: #ffffff; - border-radius: 3px; -} -/* The "jcrop-dark" class/extension */ -.jcrop-dark .jcrop-vline, -.jcrop-dark .jcrop-hline { - background: #000000; - filter: alpha(opacity=70) !important; - opacity: 0.7 !important; -} -.jcrop-dark .jcrop-handle { - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - background-color: #ffffff; - border-color: #000000; - border-radius: 3px; -} -/* Simple macro to turn off the antlines */ -.solid-line .jcrop-vline, -.solid-line .jcrop-hline { - background: #ffffff; -} -/* Fix for twitter bootstrap et al. */ -.jcrop-holder img, -img.jcrop-preview { - max-width: none; -} diff --git a/vendor/assets/stylesheets/react-keyed-file-browser.css b/vendor/assets/stylesheets/react-keyed-file-browser.css deleted file mode 100644 index a2a4cb9e7aa..00000000000 --- a/vendor/assets/stylesheets/react-keyed-file-browser.css +++ /dev/null @@ -1,85 +0,0 @@ -div.rendered-react-keyed-file-browser div.action-bar { - margin-bottom: 0.5rem; - flex-wrap: wrap; - display: flex; - align-items: flex-start; } - div.rendered-react-keyed-file-browser div.action-bar input[type="search"] { - display: block; - flex-grow: 2; - min-width: 300px; - padding: 0.25rem 0.5rem; - font-size: 1rem; - line-height: 1em; - margin-bottom: 0.5rem; - border: 0.1rem solid #ddd; } - div.rendered-react-keyed-file-browser div.action-bar .item-actions { - text-align: right; - margin: 0; - padding: 0; - line-height: 1.5rem; - font-size: 1rem; } - div.rendered-react-keyed-file-browser div.action-bar ul.item-actions { - display: block; - flex-grow: 1; - min-width: 300px; - margin-left: 10px; - white-space: nowrap; } - div.rendered-react-keyed-file-browser div.action-bar ul.item-actions li { - display: inline-block; - margin: 0; } - div.rendered-react-keyed-file-browser div.action-bar ul.item-actions li:not(:last-child) { - margin-right: 0.5rem; } - -div.rendered-react-keyed-file-browser div.files table { - width: 100%; - margin-bottom: 2rem; - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; } - div.rendered-react-keyed-file-browser div.files table th, div.rendered-react-keyed-file-browser div.files table td { - font-size: 1rem; - font-weight: normal; - text-align: left; - margin: 0; - padding: 0.5rem; } - div.rendered-react-keyed-file-browser div.files table th { - font-weight: bold; } - div.rendered-react-keyed-file-browser div.files table th.size, div.rendered-react-keyed-file-browser div.files table th.modified, div.rendered-react-keyed-file-browser div.files table td.size, div.rendered-react-keyed-file-browser div.files table td.modified { - text-align: right; } - div.rendered-react-keyed-file-browser div.files table th.name i, div.rendered-react-keyed-file-browser div.files table td.name i { - padding-right: 0.5rem; } - div.rendered-react-keyed-file-browser div.files table thead th { - border-bottom: 0.1rem solid #ddd; } - div.rendered-react-keyed-file-browser div.files table tr:not(:last-child) td { - border-bottom: 0.1rem solid #eee; } - div.rendered-react-keyed-file-browser div.files table td.name { - padding-left: 0.8rem; } - div.rendered-react-keyed-file-browser div.files table td.name form.renaming { - display: flex; - align-items: center; } - div.rendered-react-keyed-file-browser div.files table td.name form.renaming i { - flex-grow: 0; - flex-shrink: 0; } - div.rendered-react-keyed-file-browser div.files table td.name form.renaming input[type="text"] { - flex: 1; } - div.rendered-react-keyed-file-browser div.files table tr td { - cursor: pointer; } - div.rendered-react-keyed-file-browser div.files table tr.selected td { - font-weight: bold; } - div.rendered-react-keyed-file-browser div.files table tr.selected td input, div.rendered-react-keyed-file-browser div.files table tr.selected td button { - font-weight: normal; } - div.rendered-react-keyed-file-browser div.files table tr.selected td.name { - position: relative; } - div.rendered-react-keyed-file-browser div.files table tr.selected td.name:after { - content: ' '; - position: absolute; - left: 0; - top: 0; - width: 0.3rem; - height: 100%; - background: #1d4567; } - div.rendered-react-keyed-file-browser div.files table tr.dragover td, div.rendered-react-keyed-file-browser div.files table tr.dragover th { - background: #eee; } diff --git a/vendor/assets/stylesheets/react-table.css b/vendor/assets/stylesheets/react-table.css deleted file mode 100644 index 457c0c812cf..00000000000 --- a/vendor/assets/stylesheets/react-table.css +++ /dev/null @@ -1 +0,0 @@ -.ReactTable{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;border:1px solid rgba(0,0,0,0.1);}.ReactTable *{box-sizing:border-box}.ReactTable .rt-table{-webkit-box-flex:1;-ms-flex:auto 1;flex:auto 1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;width:100%;border-collapse:collapse;overflow:auto}.ReactTable .rt-thead{-webkit-box-flex:1;-ms-flex:1 0 auto;flex:1 0 auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;}.ReactTable .rt-thead.-headerGroups{background:rgba(0,0,0,0.03);border-bottom:1px solid rgba(0,0,0,0.05)}.ReactTable .rt-thead.-filters{border-bottom:1px solid rgba(0,0,0,0.05);}.ReactTable .rt-thead.-filters input,.ReactTable .rt-thead.-filters select{border:1px solid rgba(0,0,0,0.1);background:#fff;padding:5px 7px;font-size:inherit;border-radius:3px;font-weight:normal;outline:none}.ReactTable .rt-thead.-filters .rt-th{border-right:1px solid rgba(0,0,0,0.02)}.ReactTable .rt-thead.-header{box-shadow:0 2px 15px 0 rgba(0,0,0,0.15)}.ReactTable .rt-thead .rt-tr{text-align:center}.ReactTable .rt-thead .rt-th,.ReactTable .rt-thead .rt-td{padding:5px 5px;line-height:normal;position:relative;border-right:1px solid rgba(0,0,0,0.05);transition:box-shadow .3s cubic-bezier(.175,.885,.32,1.275);box-shadow:inset 0 0 0 0 transparent;}.ReactTable .rt-thead .rt-th.-sort-asc,.ReactTable .rt-thead .rt-td.-sort-asc{box-shadow:inset 0 3px 0 0 rgba(0,0,0,0.6)}.ReactTable .rt-thead .rt-th.-sort-desc,.ReactTable .rt-thead .rt-td.-sort-desc{box-shadow:inset 0 -3px 0 0 rgba(0,0,0,0.6)}.ReactTable .rt-thead .rt-th.-cursor-pointer,.ReactTable .rt-thead .rt-td.-cursor-pointer{cursor:pointer}.ReactTable .rt-thead .rt-th:last-child,.ReactTable .rt-thead .rt-td:last-child{border-right:0}.ReactTable .rt-thead .rt-resizable-header{overflow:visible;}.ReactTable .rt-thead .rt-resizable-header:last-child{overflow:hidden}.ReactTable .rt-thead .rt-resizable-header-content{overflow:hidden;text-overflow:ellipsis}.ReactTable .rt-thead .rt-header-pivot{border-right-color:#f7f7f7}.ReactTable .rt-thead .rt-header-pivot:after,.ReactTable .rt-thead .rt-header-pivot:before{left:100%;top:50%;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.ReactTable .rt-thead .rt-header-pivot:after{border-color:rgba(255,255,255,0);border-left-color:#fff;border-width:8px;margin-top:-8px}.ReactTable .rt-thead .rt-header-pivot:before{border-color:rgba(102,102,102,0);border-left-color:#f7f7f7;border-width:10px;margin-top:-10px}.ReactTable .rt-tbody{-webkit-box-flex:99999;-ms-flex:99999 1 auto;flex:99999 1 auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;overflow:auto;}.ReactTable .rt-tbody .rt-tr-group{border-bottom:solid 1px rgba(0,0,0,0.05);}.ReactTable .rt-tbody .rt-tr-group:last-child{border-bottom:0}.ReactTable .rt-tbody .rt-td{border-right:1px solid rgba(0,0,0,0.02);}.ReactTable .rt-tbody .rt-td:last-child{border-right:0}.ReactTable .rt-tbody .rt-expandable{cursor:pointer}.ReactTable .rt-tr-group{-webkit-box-flex:1;-ms-flex:1 0 auto;flex:1 0 auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.ReactTable .rt-tr{-webkit-box-flex:1;-ms-flex:1 0 auto;flex:1 0 auto;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.ReactTable .rt-th,.ReactTable .rt-td{-webkit-box-flex:1;-ms-flex:1 0 0px;flex:1 0 0;white-space:nowrap;text-overflow:ellipsis;padding:7px 5px;overflow:hidden;transition:.3s ease;transition-property:width,min-width,padding,opacity;}.ReactTable .rt-th.-hidden,.ReactTable .rt-td.-hidden{width:0 !important;min-width:0 !important;padding:0 !important;border:0 !important;opacity:0 !important}.ReactTable .rt-expander{display:inline-block;position:relative;margin:0;color:transparent;margin:0 10px;}.ReactTable .rt-expander:after{content:'';position:absolute;width:0;height:0;top:50%;left:50%;-webkit-transform:translate(-50%,-50%) rotate(-90deg);transform:translate(-50%,-50%) rotate(-90deg);border-left:5.04px solid transparent;border-right:5.04px solid transparent;border-top:7px solid rgba(0,0,0,0.8);transition:all .3s cubic-bezier(.175,.885,.32,1.275);cursor:pointer}.ReactTable .rt-expander.-open:after{-webkit-transform:translate(-50%,-50%) rotate(0);transform:translate(-50%,-50%) rotate(0)}.ReactTable .rt-resizer{display:inline-block;position:absolute;width:36px;top:0;bottom:0;right:-18px;cursor:col-resize;z-index:10}.ReactTable .rt-tfoot{-webkit-box-flex:1;-ms-flex:1 0 auto;flex:1 0 auto;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;box-shadow:0 0 15px 0 rgba(0,0,0,0.15);}.ReactTable .rt-tfoot .rt-td{border-right:1px solid rgba(0,0,0,0.05);}.ReactTable .rt-tfoot .rt-td:last-child{border-right:0}.ReactTable.-striped .rt-tr.-odd{background:rgba(0,0,0,0.03)}.ReactTable.-highlight .rt-tbody .rt-tr:not(.-padRow):hover{background:rgba(0,0,0,0.05)}.ReactTable .-pagination{z-index:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:3px;box-shadow:0 0 15px 0 rgba(0,0,0,0.1);border-top:2px solid rgba(0,0,0,0.1);}.ReactTable .-pagination input,.ReactTable .-pagination select{border:1px solid rgba(0,0,0,0.1);background:#fff;padding:5px 7px;font-size:inherit;border-radius:3px;font-weight:normal;outline:none}.ReactTable .-pagination .-btn{-webkit-appearance:none;-moz-appearance:none;appearance:none;display:block;width:100%;height:100%;border:0;border-radius:3px;padding:6px;font-size:1em;color:rgba(0,0,0,0.6);background:rgba(0,0,0,0.1);transition:all .1s ease;cursor:pointer;outline:none;}.ReactTable .-pagination .-btn[disabled]{opacity:.5;cursor:default}.ReactTable .-pagination .-btn:not([disabled]):hover{background:rgba(0,0,0,0.3);color:#fff}.ReactTable .-pagination .-previous,.ReactTable .-pagination .-next{-webkit-box-flex:1;-ms-flex:1;flex:1;text-align:center}.ReactTable .-pagination .-center{-webkit-box-flex:1.5;-ms-flex:1.5;flex:1.5;text-align:center;margin-bottom:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-pack:distribute;justify-content:space-around}.ReactTable .-pagination .-pageInfo{display:inline-block;margin:3px 10px;white-space:nowrap}.ReactTable .-pagination .-pageJump{display:inline-block;}.ReactTable .-pagination .-pageJump input{width:70px;text-align:center}.ReactTable .-pagination .-pageSizeOptions{margin:3px 10px}.ReactTable .rt-noData{display:block;position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);background:rgba(255,255,255,0.8);transition:all .3s ease;z-index:1;pointer-events:none;padding:20px;color:rgba(0,0,0,0.5)}.ReactTable .-loading{display:block;position:absolute;left:0;right:0;top:0;bottom:0;background:rgba(255,255,255,0.8);transition:all .3s ease;z-index:-1;opacity:0;pointer-events:none;}.ReactTable .-loading > div{position:absolute;display:block;text-align:center;width:100%;top:50%;left:0;font-size:15px;color:rgba(0,0,0,0.6);-webkit-transform:translateY(-52%);transform:translateY(-52%);transition:all .3s cubic-bezier(.25,.46,.45,.94)}.ReactTable .-loading.-active{opacity:1;z-index:2;pointer-events:all;}.ReactTable .-loading.-active > div{-webkit-transform:translateY(50%);transform:translateY(50%)}.ReactTable .rt-resizing .rt-th,.ReactTable .rt-resizing .rt-td{transition:none !important;cursor:col-resize;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none} \ No newline at end of file diff --git a/vendor/assets/stylesheets/rmarkdown.css b/vendor/assets/stylesheets/rmarkdown.css deleted file mode 100644 index a6e1039796e..00000000000 --- a/vendor/assets/stylesheets/rmarkdown.css +++ /dev/null @@ -1,206 +0,0 @@ -/* -copied from -https://github.com/rstudio/rmarkdown/blob/master/inst/rmarkdown/templates/html_vignette/resources/vignette.css -*/ - -body { - background-color: #fff; - margin: 1em auto; - max-width: 700px; - overflow: visible; - padding-left: 2em; - padding-right: 2em; - font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 14px; - line-height: 1.35; -} - -#TOC { - clear: both; - margin: 0 0 10px 10px; - padding: 4px; - width: 400px; - border: 1px solid #CCCCCC; - border-radius: 5px; - - background-color: #f6f6f6; - font-size: 13px; - line-height: 1.3; -} -#TOC .toctitle { - font-weight: bold; - font-size: 15px; - margin-left: 5px; -} - -#TOC ul { - padding-left: 40px; - margin-left: -1.5em; - margin-top: 5px; - margin-bottom: 5px; -} -#TOC ul ul { - margin-left: -2em; -} -#TOC li { - line-height: 16px; -} - -table { - margin: 1em auto; - border-width: 1px; - border-color: #DDDDDD; - border-style: outset; - border-collapse: collapse; -} -table th { - border-width: 2px; - padding: 5px; - border-style: inset; -} -table td { - border-width: 1px; - border-style: inset; - line-height: 18px; - padding: 5px 5px; -} -table, table th, table td { - border-left-style: none; - border-right-style: none; -} -table thead, table tr.even { - background-color: #f7f7f7; -} - -p { - margin: 0.5em 0; -} - -blockquote { - background-color: #f6f6f6; - padding: 0.25em 0.75em; -} - -hr { - border-style: solid; - border: none; - border-top: 1px solid #777; - margin: 28px 0; -} - -dl { - margin-left: 0; -} -dl dd { - margin-bottom: 13px; - margin-left: 13px; -} -dl dt { - font-weight: bold; -} - -ul { - margin-top: 0; -} -ul li { - list-style: circle outside; -} -ul ul { - margin-bottom: 0; -} - -pre, code { - background-color: #f7f7f7; - border-radius: 3px; - color: #333; - white-space: pre-wrap; /* Wrap long lines */ -} -pre { - border-radius: 3px; - margin: 5px 0px 10px 0px; - padding: 10px; -} -pre:not([class]) { - background-color: #f7f7f7; -} - -code { - font-family: Consolas, Monaco, 'Courier New', monospace; - font-size: 85%; -} -p > code, li > code { - padding: 2px 0px; -} - -div.figure { - text-align: center; -} -img { - background-color: #FFFFFF; - padding: 2px; - border: 1px solid #DDDDDD; - border-radius: 3px; - border: 1px solid #CCCCCC; - margin: 0 5px; -} - -h1 { - margin-top: 0; - font-size: 35px; - line-height: 40px; -} - -h2 { - border-bottom: 4px solid #f7f7f7; - padding-top: 10px; - padding-bottom: 2px; - font-size: 145%; -} - -h3 { - border-bottom: 2px solid #f7f7f7; - padding-top: 10px; - font-size: 120%; -} - -h4 { - border-bottom: 1px solid #f7f7f7; - margin-left: 8px; - font-size: 105%; -} - -h5, h6 { - border-bottom: 1px solid #ccc; - font-size: 105%; -} - -a { - color: #0033dd; - text-decoration: none; -} -a:hover { - color: #6666ff; } -a:visited { - color: #800080; } -a:visited:hover { - color: #BB00BB; } -a[href^="http:"] { - text-decoration: underline; } -a[href^="https:"] { - text-decoration: underline; } - -/* Class described in https://benjeffrey.com/posts/pandoc-syntax-highlighting-css - Colours from https://gist.github.com/robsimmons/1172277 */ - -code > span.kw { color: #555; font-weight: bold; } /* Keyword */ -code > span.dt { color: #902000; } /* DataType */ -code > span.dv { color: #40a070; } /* DecVal (decimal values) */ -code > span.bn { color: #d14; } /* BaseN */ -code > span.fl { color: #d14; } /* Float */ -code > span.ch { color: #d14; } /* Char */ -code > span.st { color: #d14; } /* String */ -code > span.co { color: #888888; font-style: italic; } /* Comment */ -code > span.ot { color: #007020; } /* OtherToken */ -code > span.al { color: #ff0000; font-weight: bold; } /* AlertToken */ -code > span.fu { color: #900; font-weight: bold; } /* Function calls */ -code > span.er { color: #a61717; background-color: #e3d2d2; } /* ErrorTok */