stimulus-rails 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,21 @@
1
+ import { Application } from "stimulus"
2
+
3
+ const application = Application.start()
4
+
5
+ function autoload() {
6
+ Array.from(document.querySelectorAll('[data-controller]')).forEach((element) => {
7
+ const controllerNames = element.attributes["data-controller"].value.split(" ")
8
+
9
+ controllerNames.forEach((controllerName) => {
10
+ let controllerFilename = `${controllerName}_controller`
11
+
12
+ import(controllerFilename).then((controllerModule) => {
13
+ application.register(controllerName, controllerModule.default)
14
+ }).catch(error => console.log(`Failed to autoload controller: ${controllerName}`))
15
+ })
16
+ })
17
+ }
18
+
19
+ autoload()
20
+
21
+ window.addEventListener("turbo:load", autoload)
@@ -0,0 +1,20 @@
1
+ // Experimental: Not currently exposed.
2
+ import { Application } from "stimulus"
3
+
4
+ const application = Application.start()
5
+
6
+ async function preloadControllers() {
7
+ const imports = await fetch("<%= asset_path "importmap.json" %>").then(r => r.json()).then(json => json.imports)
8
+
9
+ for (const name in imports) {
10
+ if (name.startsWith("controllers/")) {
11
+ let controllerName = name.replace(/controllers\//, "").replace("_controller", "")
12
+
13
+ import(imports[name]).then((module) => {
14
+ application.register(controllerName, module.default)
15
+ }).catch(error => console.log(error))
16
+ }
17
+ }
18
+ }
19
+
20
+ preloadControllers()
@@ -0,0 +1,2 @@
1
+ //= link_directory ./libraries
2
+ //= link_directory ./loaders
@@ -0,0 +1,10 @@
1
+ module Stimulus::StimulusHelper
2
+ def stimulus_include_tags
3
+ [
4
+ javascript_include_tag("stimulus/libraries/es-module-shims", type: "module"),
5
+ tag.script(type: "importmap-shim", src: asset_path("importmap.json")),
6
+ javascript_include_tag("stimulus/libraries/stimulus", type: "module-shim"),
7
+ javascript_include_tag("stimulus/loaders/autoloader", type: "module-shim")
8
+ ].join("\n").html_safe
9
+ end
10
+ end
@@ -0,0 +1,7 @@
1
+ import { Controller } from "stimulus"
2
+
3
+ export default class extends Controller {
4
+ connect() {
5
+ this.element.textContent = "Hello World!"
6
+ }
7
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "imports": {
3
+ <%= importmap_list_with_stimulus_from "app/assets/javascripts/controllers", "app/assets/javascripts/libraries" %>
4
+ }
5
+ }
@@ -0,0 +1,16 @@
1
+ say "Copying Stimulus JavaScript"
2
+ directory "#{__dir__}/app/assets/javascripts", "app/assets/javascripts"
3
+ empty_directory "app/assets/javascripts/libraries"
4
+
5
+ say "Add app/javascripts to asset pipeline manifest"
6
+ append_to_file Rails.root.join("app/assets/config/manifest.js").to_s, "//= link_tree ../javascripts\n"
7
+
8
+ say "Add Stimulus include tags in application layout"
9
+ insert_into_file Rails.root.join("app/views/layouts/application.html.erb").to_s, "\n <%= stimulus_include_tags %>", before: /\s*<\/head>/
10
+
11
+ say "Turn off development debug mode"
12
+ comment_lines Rails.root.join("config/environments/development.rb"), /config.assets.debug = true/
13
+
14
+ say "Turn off rack-mini-profiler"
15
+ comment_lines Rails.root.join("Gemfile"), /rack-mini-profiler/
16
+ run "bin/bundle", capture: true
@@ -0,0 +1,22 @@
1
+ require "stimulus/importmap_helper"
2
+
3
+ module Stimulus
4
+ class Engine < ::Rails::Engine
5
+ isolate_namespace Stimulus
6
+ config.eager_load_namespaces << Stimulus
7
+
8
+ initializer "stimulus.assets" do
9
+ Rails.application.config.assets.precompile += %w( importmap.json stimulus/manifest )
10
+ end
11
+
12
+ initializer "stimulus.helpers" do
13
+ ActiveSupport.on_load(:action_controller_base) do
14
+ helper Stimulus::Engine.helpers
15
+ end
16
+
17
+ Rails.application.config.assets.configure do |env|
18
+ env.context_class.class_eval { include Stimulus::ImportmapHelper }
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,23 @@
1
+ module Stimulus::ImportmapHelper
2
+ def importmap_list_with_stimulus_from(*paths)
3
+ [ %("stimulus": "#{asset_path("stimulus/libraries/stimulus")}"), importmap_list_from(*paths) ].join(",\n")
4
+ end
5
+
6
+ def importmap_list_from(*paths)
7
+ Array(paths).flat_map do |path|
8
+ absolute_path = Rails.root.join(path)
9
+ dirname = absolute_path.basename.to_s
10
+
11
+ absolute_path.children.collect do |module_filename|
12
+ module_name = importmap_module_name_from(module_filename)
13
+ %("#{module_name}": "#{asset_path("#{dirname}/#{module_filename.basename}")}")
14
+ end
15
+ end.join(",\n")
16
+ end
17
+
18
+ private
19
+ # Strip off the extension and any versioning data for an absolute module name.
20
+ def importmap_module_name_from(filename)
21
+ filename.basename.to_s.remove(filename.extname).split("@").first
22
+ end
23
+ end
@@ -0,0 +1,3 @@
1
+ module Stimulus
2
+ VERSION = "0.1.1"
3
+ end
@@ -0,0 +1,5 @@
1
+ require "stimulus/version"
2
+ require "stimulus/engine"
3
+
4
+ module Stimulus
5
+ end
@@ -0,0 +1,6 @@
1
+ namespace :stimulus do
2
+ desc "Install Stimulus into the app"
3
+ task :install do
4
+ system "#{RbConfig.ruby} ./bin/rails app:template LOCATION=#{File.expand_path("../install/stimulus.rb", __dir__)}"
5
+ end
6
+ end
metadata ADDED
@@ -0,0 +1,79 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: stimulus-rails
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - Sam Stephenson
8
+ - Javan Mahkmali
9
+ - David Heinemeier Hansson
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2020-12-23 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: rails
17
+ requirement: !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - - ">="
20
+ - !ruby/object:Gem::Version
21
+ version: 6.0.0
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ version: 6.0.0
29
+ description:
30
+ email: david@loudthinking.com
31
+ executables: []
32
+ extensions: []
33
+ extra_rdoc_files: []
34
+ files:
35
+ - MIT-LICENSE
36
+ - README.md
37
+ - Rakefile
38
+ - app/assets/javascripts/stimulus/libraries/es-module-shims.js
39
+ - app/assets/javascripts/stimulus/libraries/es-module-shims@0.7.1.js
40
+ - app/assets/javascripts/stimulus/libraries/stimulus.js
41
+ - app/assets/javascripts/stimulus/libraries/stimulus@2.js
42
+ - app/assets/javascripts/stimulus/loaders/autoloader.js
43
+ - app/assets/javascripts/stimulus/loaders/preloader.js.erb
44
+ - app/assets/javascripts/stimulus/manifest.js
45
+ - app/helpers/stimulus/stimulus_helper.rb
46
+ - lib/install/app/assets/javascripts/controllers/hello_controller.js
47
+ - lib/install/app/assets/javascripts/importmap.json.erb
48
+ - lib/install/stimulus.rb
49
+ - lib/stimulus-rails.rb
50
+ - lib/stimulus/engine.rb
51
+ - lib/stimulus/importmap_helper.rb
52
+ - lib/stimulus/version.rb
53
+ - lib/tasks/stimulus_tasks.rake
54
+ homepage: https://stimulus.hotwire.dev
55
+ licenses:
56
+ - MIT
57
+ metadata:
58
+ homepage_uri: https://stimulus.hotwire.dev
59
+ source_code_uri: https://github.com/hotwired/stimulus-rails
60
+ post_install_message:
61
+ rdoc_options: []
62
+ require_paths:
63
+ - lib
64
+ required_ruby_version: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ required_rubygems_version: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ version: '0'
74
+ requirements: []
75
+ rubygems_version: 3.1.2
76
+ signing_key:
77
+ specification_version: 4
78
+ summary: A modest JavaScript framework for the HTML you already have.
79
+ test_files: []