proscenium 0.15.0.beta.3-x86_64-linux → 0.15.0.beta.4-x86_64-linux

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4e835fbf55794d2fe56e4c35b9917fd1fe345489aaacf2b8480b53b0855ff96a
4
- data.tar.gz: 4069068d096c5ffc1f953af89167709038fdee13d93fea8f3782579cbbc79647
3
+ metadata.gz: 93000fde1226789c26de17f4d0d075412e9be6e7733be78580f16474776c5dd7
4
+ data.tar.gz: d76651fcd12c177882a28bf5652dd137727020a9d3f4d71c022510d67c09565e
5
5
  SHA512:
6
- metadata.gz: 4a2211cc555734e643ddeba6577f4726d7c32a4af1b9491774b15583039ac116232bf9a8eccb3245f2255089b50850c6d05e61af125bfbb61111278ba4ff40f0
7
- data.tar.gz: 2deed7ce2527e1969231d1698bff8048b532ee85d107304d82c2bf4464a3f87235e1a1fe382a57b4aac34c21e8d416742d8ab5eadd7e4896e0db9ece3d39d62a
6
+ metadata.gz: 196e4a7b647e0a7e0c61ee3c359661287ead2fa709c7e844fac398a812e988d593a094ba0b58219ac474cdfa9e83961e99cb494183656ec022804ccd4663b8bd
7
+ data.tar.gz: 316e36fe6fda602134a282d738003d953459252f959ab4d875ca6adcf4d87c39f93e085b495fab880faffd873c52a592ad7b6950593c21d944c21a3ca4d30a6f
@@ -8,12 +8,28 @@ module Proscenium
8
8
  class Rewriter < RubyNext::Language::Rewriters::Text
9
9
  NAME = 'proscenium-css-module'
10
10
 
11
- def safe_rewrite(source)
12
- source.gsub(/:@([\w_]+)/) do |_|
13
- context.track! self
11
+ def rewrite(source)
12
+ source = source.gsub(/%i\[((@[\w@ ]+)|([\w@ ]+ @[\w@ ]+))\]/) do |_|
13
+ arr = ::Regexp.last_match(1).split.map do |x|
14
+ x.start_with?('@') ? css_module_string(x[1..]) : ":#{x}"
15
+ end
16
+ "[#{arr.join(',')}]"
17
+ end
18
+
19
+ source.gsub(/:@([\w]+)/) do |_|
20
+ context.track!(self)
21
+ css_module_string(::Regexp.last_match(1))
22
+ end
23
+ end
24
+
25
+ private
14
26
 
15
- match = ::Regexp.last_match(1)
16
- "Proscenium::CssModule::Name.new(:@#{match}, css_module(:#{match}))"
27
+ def css_module_string(name)
28
+ if (path = Pathname.new(context.path).sub_ext('.module.css')).exist?
29
+ tname = Transformer.new(path).class_name!(name, name.dup).first
30
+ "Proscenium::CssModule::Name.new(:@#{name}, '#{tname}')"
31
+ else
32
+ "Proscenium::CssModule::Name.new(:@#{name}, css_module(:#{name}))"
17
33
  end
18
34
  end
19
35
  end
Binary file
@@ -0,0 +1,17 @@
1
+ import DataConfirm from "./data_confirm";
2
+ import DataDisableWith from "./data_disable_with";
3
+
4
+ export default class UJS {
5
+ constructor() {
6
+ const dc = new DataConfirm();
7
+ const ddw = new DataDisableWith();
8
+
9
+ document.body.addEventListener(
10
+ "submit",
11
+ (event) => {
12
+ dc.onSubmit(event) && ddw.onSubmit(event);
13
+ },
14
+ { capture: true }
15
+ );
16
+ }
17
+ }
@@ -0,0 +1,16 @@
1
+ export default class DataConfirm {
2
+ onSubmit = event => {
3
+ if (!event.target.matches('[data-turbo=true]') && 'confirm' in event.submitter.dataset) {
4
+ const v = event.submitter.dataset.confirm
5
+
6
+ if (v !== 'false' && !confirm(v === 'true' || v === '' ? 'Are you sure?' : v)) {
7
+ event.preventDefault()
8
+ event.stopPropagation()
9
+ event.stopImmediatePropagation()
10
+ return false
11
+ }
12
+ }
13
+
14
+ return true
15
+ }
16
+ }
@@ -0,0 +1,68 @@
1
+ export default class DataDisableWith {
2
+ onSubmit = event => {
3
+ const target = event.target
4
+ const formId = target.id
5
+
6
+ if (target.matches('[data-turbo=true]')) return
7
+
8
+ const submitElements = Array.from(
9
+ target.querySelectorAll(
10
+ ['input[type=submit][data-disable-with]', 'button[type=submit][data-disable-with]'].join(
11
+ ', '
12
+ )
13
+ )
14
+ )
15
+
16
+ submitElements.push(
17
+ ...Array.from(
18
+ document.querySelectorAll(
19
+ [
20
+ `input[type=submit][data-disable-with][form='${formId}']`,
21
+ `button[type=submit][data-disable-with][form='${formId}']`
22
+ ].join(', ')
23
+ )
24
+ )
25
+ )
26
+
27
+ for (const ele of submitElements) {
28
+ if (ele.hasAttribute('form') && ele.getAttribute('form') !== target.id) continue
29
+
30
+ this.#disableButton(ele)
31
+ }
32
+ }
33
+
34
+ #disableButton(ele) {
35
+ const defaultTextValue = 'Please wait...'
36
+ let textValue = ele.dataset.disableWith || defaultTextValue
37
+ if (textValue === 'false') return
38
+ if (textValue === 'true') {
39
+ textValue = defaultTextValue
40
+ }
41
+
42
+ ele.disabled = true
43
+
44
+ if (ele.matches('button')) {
45
+ ele.dataset.valueBeforeDisabled = ele.innerHTML
46
+ ele.innerHTML = textValue
47
+ } else {
48
+ ele.dataset.valueBeforeDisabled = ele.value
49
+ ele.value = textValue
50
+ }
51
+
52
+ if (ele.resetDisableWith === undefined) {
53
+ // This function can be called on the element to reset the disabled state. Useful for when
54
+ // form submission fails, and the button should be re-enabled.
55
+ ele.resetDisableWith = function () {
56
+ this.disabled = false
57
+
58
+ if (this.matches('button')) {
59
+ this.innerHTML = this.dataset.valueBeforeDisabled
60
+ } else {
61
+ this.value = this.dataset.valueBeforeDisabled
62
+ }
63
+
64
+ delete this.dataset.valueBeforeDisabled
65
+ }
66
+ }
67
+ }
68
+ }
@@ -0,0 +1,9 @@
1
+ export default async () => {
2
+ window.Proscenium = window.Proscenium || {};
3
+
4
+ if (!window.Proscenium.UJS) {
5
+ const classPath = "/@proscenium/ujs/class.js";
6
+ const module = await import(classPath);
7
+ window.Proscenium.UJS = new module.default();
8
+ }
9
+ };
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Proscenium
4
- VERSION = '0.15.0.beta.3'
4
+ VERSION = '0.15.0.beta.4'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: proscenium
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.15.0.beta.3
4
+ version: 0.15.0.beta.4
5
5
  platform: x86_64-linux
6
6
  authors:
7
7
  - Joel Moss
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-03-18 00:00:00.000000000 Z
11
+ date: 2024-03-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -118,6 +118,10 @@ files:
118
118
  - lib/proscenium/libs/react-manager/react.js
119
119
  - lib/proscenium/libs/stimulus-loading.js
120
120
  - lib/proscenium/libs/test.js
121
+ - lib/proscenium/libs/ujs/class.js
122
+ - lib/proscenium/libs/ujs/data_confirm.js
123
+ - lib/proscenium/libs/ujs/data_disable_with.js
124
+ - lib/proscenium/libs/ujs/index.js
121
125
  - lib/proscenium/log_subscriber.rb
122
126
  - lib/proscenium/middleware.rb
123
127
  - lib/proscenium/middleware/base.rb