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.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/README.md +66 -0
- data/Rakefile +13 -0
- data/app/assets/javascripts/stimulus/libraries/es-module-shims.js +1 -0
- data/app/assets/javascripts/stimulus/libraries/es-module-shims@0.7.1.js +475 -0
- data/app/assets/javascripts/stimulus/libraries/stimulus.js +1 -0
- data/app/assets/javascripts/stimulus/libraries/stimulus@2.js +1699 -0
- data/app/assets/javascripts/stimulus/loaders/autoloader.js +21 -0
- data/app/assets/javascripts/stimulus/loaders/preloader.js.erb +20 -0
- data/app/assets/javascripts/stimulus/manifest.js +2 -0
- data/app/helpers/stimulus/stimulus_helper.rb +10 -0
- data/lib/install/app/assets/javascripts/controllers/hello_controller.js +7 -0
- data/lib/install/app/assets/javascripts/importmap.json.erb +5 -0
- data/lib/install/stimulus.rb +16 -0
- data/lib/stimulus/engine.rb +22 -0
- data/lib/stimulus/importmap_helper.rb +23 -0
- data/lib/stimulus/version.rb +3 -0
- data/lib/stimulus-rails.rb +5 -0
- data/lib/tasks/stimulus_tasks.rake +6 -0
- metadata +79 -0
@@ -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,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,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
|
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: []
|