Project

General

Profile

Actions

Patch #42515

open

Introduce Stimulus and reimplement partial quote feature

Added by Katsuya HIDAKA 1 day ago. Updated 1 day ago.

Status:
New
Priority:
Normal
Assignee:
-
Category:
-
Target version:
-
Start date:
Due date:
% Done:

0%

Estimated time:

Description

This patch introduces Stimulus, a JavaScript framework within the Rails ecosystem, and reimplements the partial quote feature added in #41294 using Stimulus.

Why introduce Stimulus?

Here's why I propose introducing Stimulus:

  • The current frontend JavaScript is becoming too complex and harder to develop. application.js is getting large, and everything operates in the global scope.
  • It will make it easier to begin the migration from jQuery UI, which is no longer being developed. Stimulus helps create UI components in vanilla Rails, and many third-party components are also available.
  • Stimulus works well with Turbo, which is a strong candidate to replace the deprecated rails-ujs, making future adoption smoother.
  • Introducing a modern environment can revitalize Redmine development and simply make development more enjoyable.

As a next step after introducing Stimulus, I plan to migrate the tooltip implementation to Stimulus to further reduce the dependency on jQuery UI.

Implementation

  • importmap-rails was also introduced to install Stimulus and its necessary libraries.
  • bin/rails stimulus:install creates app/javascript/application.js by default. To avoid conflicts with the existing app/assets/application.js, I renamed the new file to main.js.
  • turndown, which is used for the partial quote feature, is now also installed via importmap-rails.
  • I confirmed that CI builds pass and all system tests are successful.

Files

Actions #1

Updated by Katsuya HIDAKA 1 day ago

Implementation
  • bin/rails stimulus:install creates app/javascript/application.js by default. To avoid conflicts with the existing app/assets/application.js, I renamed the new file to main.js.

Regarding the above, similar to the patch in #42510, it might be better to rename the existing app/assets/application.js to application-legacy.js. This could also serve as an explicit message to encourage migration to implementations using Stimulus or migration from app/assets/application.js.

Actions #2

Updated by Katsuya HIDAKA 1 day ago

I have added two patch files:

  • 0003: Rename app/assets/application.js to application-legacy.js (keeping app/javascript/application.js default)
  • 0004: Add license headers to added JavaScript files
Actions

Also available in: Atom PDF