diff --git a/.browserslistrc b/.browserslistrc deleted file mode 100644 index e94f8140c..000000000 --- a/.browserslistrc +++ /dev/null @@ -1 +0,0 @@ -defaults diff --git a/.coffeelint.json b/.coffeelint.json deleted file mode 100644 index 6bfd6487f..000000000 --- a/.coffeelint.json +++ /dev/null @@ -1,135 +0,0 @@ -{ - "arrow_spacing": { - "level": "warn" - }, - "braces_spacing": { - "level": "warn", - "spaces": 1, - "empty_object_spaces": 0 - }, - "camel_case_classes": { - "level": "error" - }, - "coffeescript_error": { - "level": "error" - }, - "colon_assignment_spacing": { - "level": "warn", - "spacing": { - "left": 0, - "right": 1 - } - }, - "cyclomatic_complexity": { - "level": "warn", - "value": 10 - }, - "duplicate_key": { - "level": "error" - }, - "empty_constructor_needs_parens": { - "level": "warn" - }, - "ensure_comprehensions": { - "level": "warn" - }, - "eol_last": { - "level": "warn" - }, - "indentation": { - "value": 2, - "level": "error" - }, - "line_endings": { - "level": "warn", - "value": "unix" - }, - "max_line_length": { - "value": 80, - "level": "ignore", - "limitComments": true - }, - "missing_fat_arrows": { - "level": "ignore" - }, - "newlines_after_classes": { - "value": 3, - "level": "warn" - }, - "no_backticks": { - "level": "error" - }, - "no_debugger": { - "level": "warn", - "console": false - }, - "no_empty_functions": { - "level": "warn" - }, - "no_empty_param_list": { - "level": "warn" - }, - "no_implicit_braces": { - "level": "ignore", - "strict": true - }, - "no_implicit_parens": { - "level": "ignore", - "strict": true - }, - "no_interpolation_in_single_quotes": { - "level": "warn" - }, - "no_nested_string_interpolation": { - "level": "warn" - }, - "no_plusplus": { - "level": "warn" - }, - "no_private_function_fat_arrows": { - "level": "warn" - }, - "no_stand_alone_at": { - "level": "warn" - }, - "no_tabs": { - "level": "error" - }, - "no_this": { - "level": "warn" - }, - "no_throwing_strings": { - "level": "error" - }, - "no_trailing_semicolons": { - "level": "error" - }, - "no_trailing_whitespace": { - "level": "error", - "allowed_in_comments": false, - "allowed_in_empty_lines": true - }, - "no_unnecessary_double_quotes": { - "level": "warn" - }, - "no_unnecessary_fat_arrows": { - "level": "warn" - }, - "non_empty_constructor_needs_parens": { - "level": "warn" - }, - "prefer_english_operator": { - "level": "ignore", - "doubleNotLevel": "warn" - }, - "space_operators": { - "level": "warn" - }, - "spacing_after_comma": { - "level": "warn" - }, - "transform_messes_up_line_numbers": { - "level": "warn" - } - } - \ No newline at end of file diff --git a/.erb-lint.yml b/.config/.erb-lint.yml similarity index 90% rename from .erb-lint.yml rename to .config/.erb-lint.yml index 48d5f74d1..5b8aba745 100644 --- a/.erb-lint.yml +++ b/.config/.erb-lint.yml @@ -1,3 +1,4 @@ +# Not used right now --- EnableDefaultLinters: true linters: diff --git a/.rubocop.yml b/.config/.rubocop.yml similarity index 99% rename from .rubocop.yml rename to .config/.rubocop.yml index c625d63ec..cc781ea1b 100644 --- a/.rubocop.yml +++ b/.config/.rubocop.yml @@ -105,7 +105,7 @@ Style/MethodCallWithArgsParentheses: AllowedPatterns: [^redirect_] # Don't enforce in migrations, as we have methods like `add_column`, # `change_column` etc. and parentheses would be very annoying there. - Exclude: ["db/**/*"] + Exclude: ["../db/**/*"] Style/RedundantReturn: AllowMultipleReturnValues: true diff --git a/.config/README.md b/.config/README.md new file mode 100644 index 000000000..f71a48028 --- /dev/null +++ b/.config/README.md @@ -0,0 +1,6 @@ +# Config settings + +This directory contains configuration files for the project according to the [`.config/` directory proposal](https://github.com/pi0/config-dir). + +Note that we currently don't use these files (but might in the near future): +- `.erb-lint.myl` diff --git a/eslint.config.mjs b/.config/eslint.mjs similarity index 99% rename from eslint.config.mjs rename to .config/eslint.mjs index 0d2ada414..c7a82fe39 100644 --- a/eslint.config.mjs +++ b/.config/eslint.mjs @@ -96,7 +96,7 @@ export default [ js.configs.recommended, // Allow linting of ERB files, see https://github.com/Splines/eslint-plugin-erb erb.configs.recommended, - // Globally ignore the following files + // Globally ignore the following paths { ignores: [ "node_modules/", diff --git a/.dockerignore b/.dockerignore index 097e4c485..844014fb0 100644 --- a/.dockerignore +++ b/.dockerignore @@ -3,7 +3,6 @@ docker/developement/Dockerfile docker/run_tests/docker-compose.yml docker/run_tests/Dockerfile **/.git -.travis* LICENSE README.md mampf-gui-transparent.png diff --git a/.github/PULL_REQUEST_TEMPLATE/feature.md b/.github/PULL_REQUEST_TEMPLATE/feature.md deleted file mode 100644 index ac58040fa..000000000 --- a/.github/PULL_REQUEST_TEMPLATE/feature.md +++ /dev/null @@ -1,29 +0,0 @@ -This pull request questionaire is for features and bugs - -* **Please check if the PR fulfills these requirements** - - [ ] E2E Tests for the changes have been added via Cypress - - [ ] Meaningful rspec tests have been added - - [ ] Docs have been added / updated - - Linter - - [ ] `rubocop` reports equal or less errors and warnings **in total** - - [ ] `yarn lint` reports equal or less errors and warnings **in total** - - [ ] `coffeelint .` reports equal or less errors and warnings **in total** - - [ ] `erblint .` reports equal or less errors and warnings **in total** - -* **What kind of change does this PR introduce?** (Bug fix, feature, docs update, ...) - - - -* **What is the current behavior?** (You can also link to an open issue here) - - - -* **What is the new behavior (if this is a feature change)?** - - - -* **Does this PR introduce a breaking change?** (What changes might users need to make in their application due to this PR?) - - - -* **Other information**: diff --git a/.github/PULL_REQUEST_TEMPLATE/localizing.md b/.github/PULL_REQUEST_TEMPLATE/localizing.md deleted file mode 100644 index 99faa3b04..000000000 --- a/.github/PULL_REQUEST_TEMPLATE/localizing.md +++ /dev/null @@ -1 +0,0 @@ -This pull request only changes wording and/or adds localizing information. \ No newline at end of file diff --git a/.github/workflows/linter.yml b/.github/workflows/linter.yml index e40132f75..230aafd40 100644 --- a/.github/workflows/linter.yml +++ b/.github/workflows/linter.yml @@ -72,4 +72,4 @@ jobs: if: ${{ steps.js-changed.outputs.changed-files != ''}} run: | echo "🚨 Running ESLint version: $(yarn run --silent eslint --version)" - yarn run eslint --max-warnings 0 --no-warn-ignored ${{ steps.js-changed.outputs.changed-files }} + yarn run eslint --config ./.config/eslint.mjs --max-warnings 0 --no-warn-ignored ${{ steps.js-changed.outputs.changed-files }} diff --git a/.gitignore b/.gitignore index a3800f0df..fa78b9564 100644 --- a/.gitignore +++ b/.gitignore @@ -43,7 +43,6 @@ coverage /public/uploads # Ignore environment variables -/config/app_environment_variables.rb completed_initial_run /public/uploads.zip /public/pdfcomprezzor/pdfcomprezzor.wasm diff --git a/.rspec b/.rspec deleted file mode 100644 index 83c8466f5..000000000 --- a/.rspec +++ /dev/null @@ -1,3 +0,0 @@ ---color ---require rails_helper ---format documentation diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index a1fdba20e..000000000 --- a/.travis.yml +++ /dev/null @@ -1,15 +0,0 @@ -language: ruby -service: - - docker - - -before_install: - - cd docker/run_tests/ - -install: - - docker-compose build - -before_script: - -script: - - docker-compose up --abort-on-container-exit diff --git a/.vscode/settings.json b/.vscode/settings.json index 0932c405a..473af2bd1 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -16,6 +16,9 @@ "eslint.experimental.useFlatConfig": true, // this disables VSCode built-in formatter (instead we want to use ESLint) "javascript.validate.enable": false, + "eslint.options": { + "overrideConfigFile": ".config/eslint.mjs" + }, ////////////////////////////////////// // HTML ////////////////////////////////////// @@ -30,7 +33,9 @@ "editor.formatOnSave": true }, "rubyLsp.formatter": "rubocop", - "rubyLsp.rubyVersionManager": "rbenv", + "rubyLsp.rubyVersionManager": { + "identifier": "rbenv" + }, "rubyLsp.enabledFeatures": { "codeActions": true, "diagnostics": true, @@ -89,6 +94,8 @@ ////////////////////////////////////// "cSpell.words": [ "commontator", + "helpdesk", "turbolinks" - ] + ], + "rubyLsp.customRubyCommand": "set -o allexport && . ./docker-dummy.env && set +o allexport" } \ No newline at end of file diff --git a/Gemfile b/Gemfile index aa44445ae..da68ea8e6 100644 --- a/Gemfile +++ b/Gemfile @@ -4,7 +4,7 @@ git_source(:github) { |repo| "https://github.com/#{repo}.git" } ruby "3.1.4" # Bundle edge Rails instead: gem 'rails', github: 'rails/rails' -gem "rails", "~> 7.0.4.3" +gem "rails", "~> 7.1.3" # Use dalli for caching to memcached in production gem "dalli", ">= 2.7" # Ruby wrapper for UglifyJS JavaScript compressor @@ -70,14 +70,14 @@ gem "erubis" gem "exception_handler", "~> 0.8.0.0" gem "faraday", "~> 1.8" gem "fuzzy-string-match" -gem "globalize" -gem "globalize-accessors" +gem "html-pipeline", "~> 2.14" gem "jquery-rails" gem "jquery-ui-rails" gem "js-routes", "1.4.9" gem "kaminari" gem "kaminari-i18n" gem "kramdown-parser-gfm" +gem "mobility" gem "net-smtp" gem "pg" gem "premailer-rails" @@ -104,16 +104,16 @@ gem "trix-rails", require: "trix" gem "webpacker", "~> 5.x" group :development, :docker_development do - # Access an interactive console on exception pages or by calling 'console' anywhere in the code. - gem "listen", ">= 3.0.5", "< 3.2" + gem "listen", "~> 3.9" gem "rails-erd" + # Access an interactive console on exception pages or by calling 'console' anywhere in the code. gem "web-console", ">= 3.3.0" # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring gem "marcel" gem "pgreset" - gem "rubocop", "~> 1.57", require: false - gem "rubocop-performance", "~> 1.16", require: false - gem "rubocop-rails", "~> 2.22", ">= 2.22.1", require: false + gem "rubocop", "~> 1.63", require: false + gem "rubocop-performance", "~> 1.21", require: false + gem "rubocop-rails", "~> 2.24", require: false gem "spring" gem "spring-watcher-listen", "~> 2.0.0" # gem 'bullet' diff --git a/Gemfile.lock b/Gemfile.lock index 946c11b31..8330339dc 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -10,11 +10,11 @@ GIT GIT remote: https://github.com/sunspot/sunspot.git - revision: 414a59413cb7333ba4b2cc7bc23a625c7a965e03 + revision: 41a311e9eff34df5ae7c51905574677dd474e91e glob: sunspot_rails/*.gemspec specs: sunspot_rails (2.6.0) - rails (>= 3) + rails (>= 5) sunspot (= 2.6.0) GIT @@ -28,125 +28,136 @@ GIT GIT remote: https://github.com/zdennis/activerecord-import.git - revision: 748309d1ae03fc1fe56d58e54c634a003408c706 + revision: f4d42e1090dca17e2eaad9f4df0ece8a8b7fe1a2 branch: master specs: - activerecord-import (1.4.1) + activerecord-import (1.6.0) activerecord (>= 4.2) GEM remote: https://rubygems.org/ specs: Ascii85 (1.1.0) - RubyInline (3.13.0) + RubyInline (3.14.0) ZenTest (~> 4.3) ZenTest (4.12.1) - actioncable (7.0.4.3) - actionpack (= 7.0.4.3) - activesupport (= 7.0.4.3) + actioncable (7.1.3.2) + actionpack (= 7.1.3.2) + activesupport (= 7.1.3.2) nio4r (~> 2.0) websocket-driver (>= 0.6.1) - actionmailbox (7.0.4.3) - actionpack (= 7.0.4.3) - activejob (= 7.0.4.3) - activerecord (= 7.0.4.3) - activestorage (= 7.0.4.3) - activesupport (= 7.0.4.3) + zeitwerk (~> 2.6) + actionmailbox (7.1.3.2) + actionpack (= 7.1.3.2) + activejob (= 7.1.3.2) + activerecord (= 7.1.3.2) + activestorage (= 7.1.3.2) + activesupport (= 7.1.3.2) mail (>= 2.7.1) net-imap net-pop net-smtp - actionmailer (7.0.4.3) - actionpack (= 7.0.4.3) - actionview (= 7.0.4.3) - activejob (= 7.0.4.3) - activesupport (= 7.0.4.3) + actionmailer (7.1.3.2) + actionpack (= 7.1.3.2) + actionview (= 7.1.3.2) + activejob (= 7.1.3.2) + activesupport (= 7.1.3.2) mail (~> 2.5, >= 2.5.4) net-imap net-pop net-smtp - rails-dom-testing (~> 2.0) - actionpack (7.0.4.3) - actionview (= 7.0.4.3) - activesupport (= 7.0.4.3) - rack (~> 2.0, >= 2.2.0) + rails-dom-testing (~> 2.2) + actionpack (7.1.3.2) + actionview (= 7.1.3.2) + activesupport (= 7.1.3.2) + nokogiri (>= 1.8.5) + racc + rack (>= 2.2.4) + rack-session (>= 1.0.1) rack-test (>= 0.6.3) - rails-dom-testing (~> 2.0) - rails-html-sanitizer (~> 1.0, >= 1.2.0) - actiontext (7.0.4.3) - actionpack (= 7.0.4.3) - activerecord (= 7.0.4.3) - activestorage (= 7.0.4.3) - activesupport (= 7.0.4.3) + rails-dom-testing (~> 2.2) + rails-html-sanitizer (~> 1.6) + actiontext (7.1.3.2) + actionpack (= 7.1.3.2) + activerecord (= 7.1.3.2) + activestorage (= 7.1.3.2) + activesupport (= 7.1.3.2) globalid (>= 0.6.0) nokogiri (>= 1.8.5) - actionview (7.0.4.3) - activesupport (= 7.0.4.3) + actionview (7.1.3.2) + activesupport (= 7.1.3.2) builder (~> 3.1) - erubi (~> 1.4) - rails-dom-testing (~> 2.0) - rails-html-sanitizer (~> 1.1, >= 1.2.0) - active_model_serializers (0.10.13) - actionpack (>= 4.1, < 7.1) - activemodel (>= 4.1, < 7.1) + erubi (~> 1.11) + rails-dom-testing (~> 2.2) + rails-html-sanitizer (~> 1.6) + active_model_serializers (0.10.14) + actionpack (>= 4.1) + activemodel (>= 4.1) case_transform (>= 0.2) jsonapi-renderer (>= 0.1.1.beta1, < 0.3) active_record_union (1.3.0) activerecord (>= 4.0) - activejob (7.0.4.3) - activesupport (= 7.0.4.3) + activejob (7.1.3.2) + activesupport (= 7.1.3.2) globalid (>= 0.3.6) - activemodel (7.0.4.3) - activesupport (= 7.0.4.3) - activerecord (7.0.4.3) - activemodel (= 7.0.4.3) - activesupport (= 7.0.4.3) - activerecord-nulldb-adapter (0.9.0) - activerecord (>= 5.2.0, < 7.1) - activestorage (7.0.4.3) - actionpack (= 7.0.4.3) - activejob (= 7.0.4.3) - activerecord (= 7.0.4.3) - activesupport (= 7.0.4.3) + activemodel (7.1.3.2) + activesupport (= 7.1.3.2) + activerecord (7.1.3.2) + activemodel (= 7.1.3.2) + activesupport (= 7.1.3.2) + timeout (>= 0.4.0) + activerecord-nulldb-adapter (1.0.1) + activerecord (>= 5.2.0, < 7.2) + activestorage (7.1.3.2) + actionpack (= 7.1.3.2) + activejob (= 7.1.3.2) + activerecord (= 7.1.3.2) + activesupport (= 7.1.3.2) marcel (~> 1.0) - mini_mime (>= 1.1.0) - activesupport (7.0.4.3) + activesupport (7.1.3.2) + base64 + bigdecimal concurrent-ruby (~> 1.0, >= 1.0.2) + connection_pool (>= 2.2.5) + drb i18n (>= 1.6, < 2) minitest (>= 5.1) + mutex_m tzinfo (~> 2.0) acts_as_list (1.1.0) activerecord (>= 4.2) acts_as_tree (2.9.1) activerecord (>= 3.0.0) acts_as_votable (0.14.0) - addressable (2.8.2) + addressable (2.8.6) public_suffix (>= 2.0.2, < 6.0) afm (0.2.2) ast (2.4.2) - autoprefixer-rails (10.4.13.0) + autoprefixer-rails (10.4.16.0) execjs (~> 2) babel-source (5.8.35) babel-transpiler (0.7.0) babel-source (>= 4.0, < 6) execjs (~> 2.0) - barby (0.6.8) - bcrypt (3.1.18) + barby (0.6.9) + base64 (0.2.0) + bcrypt (3.1.20) + bigdecimal (3.1.7) bindex (0.8.1) - bootsnap (1.16.0) + bootsnap (1.18.3) msgpack (~> 1.2) - bootstrap (5.3.1) + bootstrap (5.3.2) autoprefixer-rails (>= 9.1.0) popper_js (>= 2.11.8, < 3) - sassc-rails (>= 2.0.0) - bootstrap_form (5.1.0) - actionpack (>= 5.2) - activemodel (>= 5.2) + bootstrap_form (5.4.0) + actionpack (>= 6.1) + activemodel (>= 6.1) builder (3.2.4) byebug (11.1.3) cancancan (3.5.0) case_transform (0.2) activesupport + childprocess (5.0.0) choice (0.2.0) chunky_png (1.4.0) clipboard-rails (1.7.1) @@ -157,12 +168,12 @@ GEM coffee-script-source execjs coffee-script-source (1.12.2) - commontator (7.0.0) + commontator (7.0.1) rails (>= 6.0) sprockets-rails will_paginate - concurrent-ruby (1.2.2) - connection_pool (2.4.0) + concurrent-ruby (1.2.3) + connection_pool (2.4.1) content_disposition (1.0.0) coveralls (0.7.1) multi_json (~> 1.3) @@ -171,48 +182,48 @@ GEM term-ansicolor thor crass (1.0.6) - css_parser (1.14.0) + css_parser (1.17.1) addressable - cypress-on-rails (1.13.1) + cypress-on-rails (1.17.0) rack - dalli (3.2.4) + dalli (3.2.8) database_cleaner (2.0.2) database_cleaner-active_record (>= 2, < 3) database_cleaner-active_record (2.1.0) activerecord (>= 5.a) database_cleaner-core (~> 2.0.0) database_cleaner-core (2.0.1) - date (3.3.3) + date (3.3.4) db_text_search (1.0.0) activerecord (>= 4.1.15) - devise (4.9.1) + devise (4.9.4) bcrypt (~> 3.0) orm_adapter (~> 0.1) railties (>= 4.1.0) responders warden (~> 1.2.3) devise-bootstrap-views (1.1.0) - diff-lcs (1.5.0) + diff-lcs (1.5.1) docile (1.4.0) - domain_name (0.5.20190701) - unf (>= 0.0.5, < 1.0.0) - down (5.4.0) + domain_name (0.6.20240107) + down (5.4.1) addressable (~> 2.8) + drb (2.2.1) erubi (1.12.0) erubis (2.7.0) - et-orbi (1.2.7) + et-orbi (1.2.11) tzinfo exception_handler (0.8.0.2) bundler rails (>= 4.2.0) responders - execjs (2.8.1) - factory_bot (6.2.1) + execjs (2.9.1) + factory_bot (6.4.6) activesupport (>= 5.0.0) - factory_bot_rails (6.2.0) - factory_bot (~> 6.2.0) + factory_bot_rails (6.4.3) + factory_bot (~> 6.4) railties (>= 5.0.0) - faker (3.1.1) + faker (3.3.1) i18n (>= 1.8.11, < 2) faraday (1.10.3) faraday-em_http (~> 1.0) @@ -237,24 +248,18 @@ GEM faraday-patron (1.0.0) faraday-rack (1.0.0) faraday-retry (1.0.3) - fastimage (2.2.6) - ffi (1.15.5) + fastimage (2.3.1) + ffi (1.16.3) filesize (0.2.0) - friendly_id (5.5.0) + friendly_id (5.5.1) activerecord (>= 4.0.0) - fugit (1.8.1) + fugit (1.10.1) et-orbi (~> 1, >= 1.2.7) raabro (~> 1.4) fuzzy-string-match (1.0.1) RubyInline (>= 3.8.6) - globalid (1.1.0) - activesupport (>= 5.0) - globalize (6.2.1) - activemodel (>= 4.2, < 7.1) - activerecord (>= 4.2, < 7.1) - request_store (~> 1.0) - globalize-accessors (0.3.0) - globalize (>= 5.0.0) + globalid (1.2.1) + activesupport (>= 6.1) hashery (2.1.2) highline (2.1.0) html-pipeline (2.14.3) @@ -264,7 +269,7 @@ GEM http-accept (1.7.0) http-cookie (1.0.5) domain_name (~> 0.5) - i18n (1.14.1) + i18n (1.14.4) concurrent-ruby (~> 1.0) image_processing (1.12.2) mini_magick (>= 4.9.5, < 5) @@ -272,19 +277,23 @@ GEM inline_svg (1.9.0) activesupport (>= 3.0) nokogiri (>= 1.6) + io-console (0.7.2) + irb (1.12.0) + rdoc + reline (>= 0.4.2) jbuilder (2.11.5) actionview (>= 5.0.0) activesupport (>= 5.0.0) - jquery-rails (4.5.1) + jquery-rails (4.6.0) rails-dom-testing (>= 1, < 3) railties (>= 4.2.0) thor (>= 0.14, < 2.0) - jquery-ui-rails (6.0.1) + jquery-ui-rails (7.0.0) railties (>= 3.2.16) js-routes (1.4.9) railties (>= 4) sprockets-rails - json (2.6.3) + json (2.7.2) jsonapi-renderer (0.2.2) kaminari (1.2.2) activesupport (>= 4.1.0) @@ -301,8 +310,8 @@ GEM kaminari-i18n (0.5.0) kaminari rails - katex (0.9.0) - execjs (~> 2.7) + katex (0.10.0) + execjs (~> 2.8) kramdown (2.4.0) rexml kramdown-math-katex (1.0.1) @@ -311,12 +320,13 @@ GEM kramdown-parser-gfm (1.1.0) kramdown (~> 2.0) language_server-protocol (3.17.0.3) - launchy (2.5.2) + launchy (3.0.0) addressable (~> 2.8) - listen (3.0.8) - rb-fsevent (~> 0.9, >= 0.9.4) - rb-inotify (~> 0.9, >= 0.9.7) - loofah (2.21.3) + childprocess (~> 5.0) + listen (3.9.0) + rb-fsevent (~> 0.10, >= 0.10.3) + rb-inotify (~> 0.9, >= 0.9.10) + loofah (2.22.0) crass (~> 1.0.2) nokogiri (>= 1.12.0) mail (2.8.1) @@ -324,30 +334,33 @@ GEM net-imap net-pop net-smtp - marcel (1.0.2) - method_source (1.0.0) - mime-types (3.4.1) + marcel (1.0.4) + mime-types (3.5.2) mime-types-data (~> 3.2015) - mime-types-data (3.2023.0218.1) + mime-types-data (3.2024.0305) mini_magick (4.12.0) - mini_mime (1.1.2) - minitest (5.19.0) - msgpack (1.7.0) + mini_mime (1.1.5) + minitest (5.22.3) + mobility (1.2.9) + i18n (>= 0.6.10, < 2) + request_store (~> 1.0) + msgpack (1.7.2) multi_json (1.15.0) - multipart-post (2.3.0) + multipart-post (2.4.0) mustache (1.1.1) - net-imap (0.3.4) + mutex_m (0.2.0) + net-imap (0.4.10) date net-protocol net-pop (0.1.2) net-protocol - net-protocol (0.2.1) + net-protocol (0.2.2) timeout - net-smtp (0.3.3) + net-smtp (0.5.0) net-protocol netrc (0.11.0) - nio4r (2.5.8) - nokogiri (1.15.4-x86_64-linux) + nio4r (2.7.1) + nokogiri (1.16.4-x86_64-linux) racc (~> 1.4) onebox (2.2.19) addressable (~> 2.8.0) @@ -358,22 +371,22 @@ GEM sanitize options (2.3.2) orm_adapter (0.5.0) - pairing_heap (3.0.0) - parallel (1.23.0) - parser (3.2.2.4) + pairing_heap (3.1.0) + parallel (1.24.0) + parser (3.3.0.5) ast (~> 2.4.1) racc - pdf-reader (2.11.0) + pdf-reader (2.12.0) Ascii85 (~> 1.0) afm (~> 0.2.1) hashery (~> 2.0) ruby-rc4 ttfunk - pg (1.4.6) - pgreset (0.3) + pg (1.5.6) + pgreset (0.4) popper_js (2.11.8) pr_geohash (1.0.0) - premailer (1.21.0) + premailer (1.23.0) addressable css_parser (>= 1.12.0) htmlentities (>= 4.0.0) @@ -384,34 +397,41 @@ GEM progress_bar (1.3.3) highline (>= 1.6, < 3) options (~> 2.3.0) - prometheus_exporter (2.0.8) + prometheus_exporter (2.1.0) webrick - public_suffix (5.0.1) - puma (6.3.1) + psych (5.1.2) + stringio + public_suffix (5.0.5) + puma (6.4.2) nio4r (~> 2.0) - pundit (2.3.0) + pundit (2.3.1) activesupport (>= 3.0.0) raabro (1.4.0) - racc (1.7.1) - rack (2.2.8) - rack-proxy (0.7.6) + racc (1.7.3) + rack (3.0.10) + rack-proxy (0.7.7) rack + rack-session (2.0.0) + rack (>= 3.0.0) rack-test (2.1.0) rack (>= 1.3) - rails (7.0.4.3) - actioncable (= 7.0.4.3) - actionmailbox (= 7.0.4.3) - actionmailer (= 7.0.4.3) - actionpack (= 7.0.4.3) - actiontext (= 7.0.4.3) - actionview (= 7.0.4.3) - activejob (= 7.0.4.3) - activemodel (= 7.0.4.3) - activerecord (= 7.0.4.3) - activestorage (= 7.0.4.3) - activesupport (= 7.0.4.3) + rackup (2.1.0) + rack (>= 3) + webrick (~> 1.8) + rails (7.1.3.2) + actioncable (= 7.1.3.2) + actionmailbox (= 7.1.3.2) + actionmailer (= 7.1.3.2) + actionpack (= 7.1.3.2) + actiontext (= 7.1.3.2) + actionview (= 7.1.3.2) + activejob (= 7.1.3.2) + activemodel (= 7.1.3.2) + activerecord (= 7.1.3.2) + activestorage (= 7.1.3.2) + activesupport (= 7.1.3.2) bundler (>= 1.15.0) - railties (= 7.0.4.3) + railties (= 7.1.3.2) rails-dom-testing (2.2.0) activesupport (>= 5.0.0) minitest @@ -424,29 +444,34 @@ GEM rails-html-sanitizer (1.6.0) loofah (~> 2.21) nokogiri (~> 1.14) - rails-i18n (7.0.6) + rails-i18n (7.0.9) i18n (>= 0.7, < 2) railties (>= 6.0.0, < 8) rails_gravatar (1.0.4) actionview - railties (7.0.4.3) - actionpack (= 7.0.4.3) - activesupport (= 7.0.4.3) - method_source + railties (7.1.3.2) + actionpack (= 7.1.3.2) + activesupport (= 7.1.3.2) + irb + rackup (>= 1.0.0) rake (>= 12.2) - thor (~> 1.0) - zeitwerk (~> 2.5) + thor (~> 1.0, >= 1.2.2) + zeitwerk (~> 2.6) rainbow (3.1.1) - rake (13.0.6) + rake (13.2.1) rb-fsevent (0.11.2) rb-inotify (0.10.1) ffi (~> 1.0) - redis-client (0.14.1) + rdoc (6.6.3.1) + psych (>= 4.0.0) + redis-client (0.22.1) connection_pool - regexp_parser (2.8.2) - request_store (1.5.1) + regexp_parser (2.9.0) + reline (0.5.2) + io-console (~> 0.5) + request_store (1.6.0) rack (>= 1.4) - responders (3.1.0) + responders (3.1.1) actionpack (>= 5.2) railties (>= 5.2) rest-client (2.1.0) @@ -454,65 +479,66 @@ GEM http-cookie (>= 1.0.2, < 2.0) mime-types (>= 1.16, < 4.0) netrc (~> 0.8) - rexml (3.2.5) - rgl (0.6.2) - pairing_heap (>= 0.3.0) + rexml (3.2.6) + rgl (0.6.6) + pairing_heap (>= 0.3, < 4.0) rexml (~> 3.2, >= 3.2.4) stream (~> 0.5.3) rinku (2.0.6) - rqrcode (2.1.2) + rqrcode (2.2.0) chunky_png (~> 1.0) rqrcode_core (~> 1.0) rqrcode_core (1.2.0) - rsolr (2.5.0) + rsolr (2.6.0) builder (>= 2.1.2) faraday (>= 0.9, < 3, != 2.0.0) - rspec-core (3.12.1) - rspec-support (~> 3.12.0) - rspec-expectations (3.12.2) + rspec-core (3.13.0) + rspec-support (~> 3.13.0) + rspec-expectations (3.13.0) diff-lcs (>= 1.2.0, < 2.0) - rspec-support (~> 3.12.0) - rspec-mocks (3.12.5) + rspec-support (~> 3.13.0) + rspec-mocks (3.13.0) diff-lcs (>= 1.2.0, < 2.0) - rspec-support (~> 3.12.0) - rspec-rails (6.0.1) + rspec-support (~> 3.13.0) + rspec-rails (6.1.2) actionpack (>= 6.1) activesupport (>= 6.1) railties (>= 6.1) - rspec-core (~> 3.11) - rspec-expectations (~> 3.11) - rspec-mocks (~> 3.11) - rspec-support (~> 3.11) - rspec-support (3.12.0) - rubocop (1.57.2) + rspec-core (~> 3.13) + rspec-expectations (~> 3.13) + rspec-mocks (~> 3.13) + rspec-support (~> 3.13) + rspec-support (3.13.1) + rubocop (1.63.2) json (~> 2.3) language_server-protocol (>= 3.17.0) parallel (~> 1.10) - parser (>= 3.2.2.4) + parser (>= 3.3.0.2) rainbow (>= 2.2.2, < 4.0) regexp_parser (>= 1.8, < 3.0) rexml (>= 3.2.5, < 4.0) - rubocop-ast (>= 1.28.1, < 2.0) + rubocop-ast (>= 1.31.1, < 2.0) ruby-progressbar (~> 1.7) unicode-display_width (>= 2.4.0, < 3.0) - rubocop-ast (1.30.0) - parser (>= 3.2.1.0) - rubocop-performance (1.19.1) - rubocop (>= 1.7.0, < 2.0) - rubocop-ast (>= 0.4.0) - rubocop-rails (2.22.1) + rubocop-ast (1.31.2) + parser (>= 3.3.0.4) + rubocop-performance (1.21.0) + rubocop (>= 1.48.1, < 2.0) + rubocop-ast (>= 1.31.1, < 2.0) + rubocop-rails (2.24.1) activesupport (>= 4.2.0) rack (>= 1.1) rubocop (>= 1.33.0, < 2.0) + rubocop-ast (>= 1.31.1, < 2.0) ruby-graphviz (1.2.5) rexml ruby-progressbar (1.13.0) ruby-rc4 (0.1.5) - ruby-vips (2.1.4) + ruby-vips (2.2.1) ffi (~> 1.12) ruby2_keywords (0.0.5) rubyzip (2.3.2) - sanitize (6.0.1) + sanitize (6.1.0) crass (~> 1.0.2) nokogiri (>= 1.12.0) sass-rails (6.0.0) @@ -525,20 +551,20 @@ GEM sprockets (> 3.0) sprockets-rails tilt - selenium-webdriver (4.8.6) + selenium-webdriver (4.10.0) rexml (~> 3.2, >= 3.2.5) rubyzip (>= 1.2.2, < 3.0) websocket (~> 1.0) semantic_range (3.0.0) - shrine (3.4.0) + shrine (3.5.0) content_disposition (~> 1.0) down (~> 5.1) - sidekiq (7.0.9) + sidekiq (7.2.2) concurrent-ruby (< 2) connection_pool (>= 2.3.0) rack (>= 2.2.4) - redis-client (>= 0.11.0) - sidekiq-cron (1.10.0) + redis-client (>= 0.19.0) + sidekiq-cron (1.12.0) fugit (~> 1.8) globalid (>= 1.0.1) sidekiq (>= 6) @@ -555,27 +581,28 @@ GEM spring-watcher-listen (2.0.1) listen (>= 2.7, < 4.0) spring (>= 1.2, < 3.0) - sprockets (4.2.0) + sprockets (4.2.1) concurrent-ruby (~> 1.0) rack (>= 2.2.4, < 4) sprockets-es6 (0.9.2) babel-source (>= 5.8.11) babel-transpiler sprockets (>= 3.0.0) - sqlite3 (1.6.2-x86_64-linux) + sqlite3 (1.7.3-x86_64-linux) stream (0.5.5) streamio-ffmpeg (3.0.2) multi_json (~> 1.8) + stringio (3.1.0) sunspot (2.6.0) pr_geohash (~> 1.0) rsolr (>= 1.1.1, < 3) sunspot_solr (2.6.0) sync (0.5.0) - term-ansicolor (1.7.1) + term-ansicolor (1.8.0) tins (~> 1.0) - terser (1.1.14) + terser (1.2.2) execjs (>= 0.3.0, < 3) - thor (1.2.2) + thor (1.3.1) thredded (1.1.0) active_record_union (>= 1.3.0) autoprefixer-rails @@ -597,46 +624,44 @@ GEM sassc-rails (>= 2.0.0) sprockets-es6 timeago_js (>= 3.0.2.2) - tilt (2.2.0) + tilt (2.3.0) timeago_js (3.0.2.2) - timeout (0.3.2) + timeout (0.4.1) tins (1.32.1) sync trix-rails (2.4.0) rails (> 4.1) - ttfunk (1.7.0) + ttfunk (1.8.0) + bigdecimal (~> 3.1) turbolinks (5.2.1) turbolinks-source (~> 5.2) turbolinks-source (5.2.0) tzinfo (2.0.6) concurrent-ruby (~> 1.0) - unf (0.1.4) - unf_ext - unf_ext (0.0.8.2) unicode-display_width (2.5.0) warden (1.2.9) rack (>= 2.0.9) - web-console (4.2.0) + web-console (4.2.1) actionview (>= 6.0.0) activemodel (>= 6.0.0) bindex (>= 0.4.0) railties (>= 6.0.0) - webdrivers (5.2.0) + webdrivers (5.3.1) nokogiri (~> 1.6) rubyzip (>= 1.3.0) - selenium-webdriver (~> 4.0) + selenium-webdriver (~> 4.0, < 4.11) webpacker (5.4.4) activesupport (>= 5.2) rack-proxy (>= 0.6.1) railties (>= 5.2) semantic_range (>= 2.3.0) webrick (1.8.1) - websocket (1.2.9) - websocket-driver (0.7.5) + websocket (1.2.10) + websocket-driver (0.7.6) websocket-extensions (>= 0.1.0) websocket-extensions (0.1.5) - will_paginate (3.3.1) - zeitwerk (2.6.11) + will_paginate (4.0.0) + zeitwerk (2.6.13) PLATFORMS x86_64-linux @@ -671,8 +696,7 @@ DEPENDENCIES fastimage filesize fuzzy-string-match - globalize - globalize-accessors + html-pipeline (~> 2.14) image_processing jbuilder jquery-rails @@ -682,9 +706,10 @@ DEPENDENCIES kaminari-i18n kramdown-parser-gfm launchy - listen (>= 3.0.5, < 3.2) + listen (~> 3.9) marcel mini_magick + mobility net-smtp pdf-reader pg @@ -694,16 +719,16 @@ DEPENDENCIES prometheus_exporter puma (< 7) rack - rails (~> 7.0.4.3) + rails (~> 7.1.3) rails-erd rails-i18n responders rgl rqrcode rspec-rails - rubocop (~> 1.57) - rubocop-performance (~> 1.16) - rubocop-rails (~> 2.22, >= 2.22.1) + rubocop (~> 1.63) + rubocop-performance (~> 1.21) + rubocop-rails (~> 2.24) rubyzip (~> 2.3.0) sass-rails (>= 6) selenium-webdriver @@ -732,4 +757,4 @@ RUBY VERSION ruby 3.1.4p223 BUNDLED WITH - 2.3.13 + 2.5.9 diff --git a/README.md b/README.md index 3cb0c5187..8406cea21 100644 --- a/README.md +++ b/README.md @@ -1,69 +1,121 @@ -
- +
+ Mathematical Media Platform for universities +
+Mathematische Medienplattform
- +## 💡 About / Motivation -## 💡 About +MaMpf is an innovative open source e-learning platform for the mathematical sciences developed at the [Institute for Mathematics at Heidelberg University](https://www.math.uni-heidelberg.de/en). It's actively used in teaching and learning; you can [register for free here](https://mampf.mathi.uni-heidelberg.de/) (no student email required). Our platform is fully available in English & German. -**MaMpf (*Mathematische Medienplattform*)** is an innovative open source E-Learning platform for the mathematical sciences. -Central point is the interconnection between different content in the sense -of a hypermedia system. + + + -MaMpf uses the contextual classification of a course as visual leitmotiv, -instead of organizational aspects. +MaMpf aims to be a hypermedia system for mathematical content. Like _moodle_, it provides a platform for lecturers to upload & organize their teaching material including videos and scripts. But MaMpf goes beyond that and eases learning through interconnected contents: +- 🎞 **Lecture videos** can be enriched with a navigation that allows students to jump to specific parts of the video, e.g. mathematical definitions, theorems, examples etc. References to other media are also possible, e.g. to different lecture videos / quizzes / worked examples etc. +- 🏷 Any media can be **tagged** with keywords. This allows students to easily find content related to a specific topic and discover how items are connected in a **graph view**. +- 🕹 Interactive **quizzes** allow students to test their understanding of the material. The system can automatically evaluate the answers and provide direct feedback, e.g. explain why an answer is wrong or provide a link to the relevant part of the video or an additional "worked example" video. +- 👩🏫 Students can sign up for tutorials and form teams themselves. Tutors are then able to manage the groups and upload corrected homework assignments for their students. +- 🗨 A **comment system** allows students to ask questions about the material in the context of the specific video/script or in a general forum. Lecturers will get a notification when a new comment is posted (of course adjustable). Students may choose their own alias name when posting comments in order to stay anonymous. -![mampf-gui](public/mampf-gui-transparent.png) +This is just a brief overview of the feature set. You may think of MaMpf as a mix of _Moodle_, _Khan Academy_ and _YouTube_. But it's more than that as features are tailored to the needs of the mathematical sciences and a university context. Start exploring MaMpf [here](https://mampf.mathi.uni-heidelberg.de/). -MaMpf comes with its own hypermedia player and editor THymE -(*The hypermedia Experience*). ThymeE uses the internal structure of -mathematical content (consisting of theorems, remarks, definitions etc.) and allows -exact navigation between content that is related, but temporally apart. -References can be created not only to content within the same video, but within -the whole MaMpf database. -![thyme](public/thyme.png) +## 📷 Screenshots -ThymE is lean and makes use of WebVTT and HTML5 video capabilites -of modern browsers. A sample hypervideo can be found -[here](https://mampf.mathi.uni-heidelberg.de/media/384/play). +To give you a closer look, here are some **screenshots** taken from our live system: -MaMpf is equipped with a tagging system and rich visualisations for content relations, -making use of [cytoscape.js](http://js.cytoscape.org/). +