diff --git a/Gemfile b/Gemfile index 7dffdec299..2816dbd7b5 100644 --- a/Gemfile +++ b/Gemfile @@ -273,7 +273,7 @@ end gem 'bootsnap', '~> 1.3.2', require: true # API gems -gem 'grape', '~> 1.1' +gem 'grape', '~> 1.2.3' gem 'reform', '~> 2.2.0' gem 'reform-rails', '~> 0.1.7' diff --git a/Gemfile.lock b/Gemfile.lock index 7844aeb18d..389920eadb 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -456,7 +456,7 @@ GEM actionpack (>= 3.0) multi_json request_store (>= 1.0) - grape (1.1.0) + grape (1.2.3) activesupport builder mustermann-grape (~> 1.0.0) @@ -918,7 +918,7 @@ DEPENDENCIES friendly_id (~> 5.2.1) fuubar (~> 2.3.2) gon (~> 6.2.1) - grape (~> 1.1) + grape (~> 1.2.3) grids! health_check html-pipeline (~> 2.8.0) diff --git a/app/assets/stylesheets/content/_forms.sass b/app/assets/stylesheets/content/_forms.sass index dc1698030f..8bddb3c5d5 100644 --- a/app/assets/stylesheets/content/_forms.sass +++ b/app/assets/stylesheets/content/_forms.sass @@ -399,6 +399,9 @@ fieldset.form--fieldset &.-vertical display: block + + .form--field.-visible-overflow & + overflow: visible &:nth-of-type(n+2), .form--field.-no-label & diff --git a/app/views/wiki/_page_form.html.erb b/app/views/wiki/_page_form.html.erb index 1ed845a052..ed97759c0d 100644 --- a/app/views/wiki/_page_form.html.erb +++ b/app/views/wiki/_page_form.html.erb @@ -10,7 +10,7 @@ <% end %> <% end %> -
+
<%= f.text_area :text, cols: 100, rows: 25, diff --git a/lib/api/api_patch_registry.rb b/config/constants/api_patch_registry.rb similarity index 99% rename from lib/api/api_patch_registry.rb rename to config/constants/api_patch_registry.rb index 511fc0f749..ded96d3970 100644 --- a/lib/api/api_patch_registry.rb +++ b/config/constants/api_patch_registry.rb @@ -26,7 +26,7 @@ # See docs/COPYRIGHT.rdoc for more details. #++ -module API +module Constants class APIPatchRegistry class << self def add_patch(class_name, path, &block) diff --git a/docs/installation/manual/README.md b/docs/installation/manual/README.md index 8e2b01bb38..20bd9c4702 100644 --- a/docs/installation/manual/README.md +++ b/docs/installation/manual/README.md @@ -92,7 +92,8 @@ Lastly, exit the system user ### Using MySQL instead -We recommend against using MySQL. If you have to use MySQL instead, please ensure a version of >= 5.7 as it supports special characters such as emojis (emoticons) out of the box. +We recommend against using MySQL. If you have to use MySQL instead, please ensure a version of >= 5.7 +(MariaDB version >= 10.2) as it supports special characters such as emojis (emoticons) out of the box. If your Linux distribution only provides older versions of MySQL it is worth considering [adding MySQL as an `apt` source](https://dev.mysql.com/doc/mysql-apt-repo-quick-guide/en/). @@ -116,7 +117,7 @@ the OpenProject database. You may replace the string `openproject` with the desired username and database name. The password `my_password` should definitely be changed. -**On MySQL version 5.7 or greater (recommended)** +**On MySQL version 5.7 (MariaDB 10.2) or greater (recommended)** ```sql mysql> CREATE DATABASE openproject CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; @@ -236,7 +237,7 @@ production: password: openproject ``` -** MySQL installation: version 5.7 or greater (recommended)** +** MySQL installation: version 5.7 (MariaDB 10.2) or greater (recommended)** The encoding should be set to `utf8mb4` as we created the DB with that encoding a few steps ago. diff --git a/lib/api/open_project_api.rb b/lib/api/open_project_api.rb index f8541e5a7e..6ad48a6093 100644 --- a/lib/api/open_project_api.rb +++ b/lib/api/open_project_api.rb @@ -28,6 +28,37 @@ module API class OpenProjectAPI < ::Grape::API - include ::API::PatchableAPI + class << self + def inherited(api, *) + super + + # run unscoped patches (i.e. patches that are on the class root, not in a namespace) + api.apply_patches(nil) + end + end + end +end + +Grape::DSL::Routing::ClassMethods.module_eval do + # Be reload safe. otherwise, an infinite loop occurs on reload. + unless instance_methods.include?(:orig_namespace) + alias :orig_namespace :namespace + end + + def namespace(space = nil, options = {}, &block) + orig_namespace(space, options) do + instance_eval(&block) + apply_patches(space) + end + end + + def apply_patches(path) + (patches[path] || []).each do |patch| + instance_eval(&patch) + end + end + + def patches + ::Constants::APIPatchRegistry.patches_for(base) end end diff --git a/lib/api/patchable_api.rb b/lib/api/patchable_api.rb index 688c4058fe..fe944ea083 100644 --- a/lib/api/patchable_api.rb +++ b/lib/api/patchable_api.rb @@ -29,15 +29,17 @@ module API module PatchableAPI def self.included(base) - base.extend ClassMethods + base.class_eval do + prepend ClassMethods + end end module ClassMethods - def inherited(subclass) + def inherited(api, base_instance_parent = Grape::API::Instance) super # run unscoped patches (i.e. patches that are on the class root, not in a namespace) - subclass.send(:execute_patches_for, nil) + api.send(:execute_patches_for, nil) end def namespace(name, *args, &block) @@ -64,7 +66,7 @@ module API end def patches - ::API::APIPatchRegistry.patches_for(self) + ::Constants::APIPatchRegistry.patches_for(self) end end end diff --git a/lib/api/v3/root.rb b/lib/api/v3/root.rb index ee812b0a16..09b1cf8348 100644 --- a/lib/api/v3/root.rb +++ b/lib/api/v3/root.rb @@ -30,7 +30,7 @@ # Root class of the API v3 # This is the place for all API v3 wide configuration, helper methods, exceptions -# rescuing, mounting of differnet API versions etc. +# rescuing, mounting of different API versions etc. module API module V3 diff --git a/lib/open_project/plugins/acts_as_op_engine.rb b/lib/open_project/plugins/acts_as_op_engine.rb index 86aa2e172f..8c1610722d 100644 --- a/lib/open_project/plugins/acts_as_op_engine.rb +++ b/lib/open_project/plugins/acts_as_op_engine.rb @@ -27,6 +27,7 @@ #++ require_dependency 'open_project/ui/extensible_tabs' +require_dependency 'config/constants/api_patch_registry' module OpenProject::Plugins module ActsAsOpEngine @@ -225,7 +226,7 @@ module OpenProject::Plugins # 1. it does not seem possible to pass it as constant (auto loader not ready yet) # 2. we can't constantize it here, because that would evaluate # the API before it can be patched - ::API::APIPatchRegistry.add_patch base_endpoint, path, &block + ::Constants::APIPatchRegistry.add_patch base_endpoint, path, &block end end diff --git a/modules/my_project_page/app/views/my_projects_overviews/_block_textilizable.html.erb b/modules/my_project_page/app/views/my_projects_overviews/_block_textilizable.html.erb index f65a057d28..be5082c27e 100644 --- a/modules/my_project_page/app/views/my_projects_overviews/_block_textilizable.html.erb +++ b/modules/my_project_page/app/views/my_projects_overviews/_block_textilizable.html.erb @@ -51,7 +51,7 @@ See doc/COPYRIGHT.md for more details.
-
+
<%= styled_label_tag "textile_#{block_name}", t('info_custom_text') %>