proscenium 0.15.0.beta.2-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: 6fd614807627e6d4755d7f8b1ec6ad75f215a78a5a24c28724ea8847ff29d6c2
4
- data.tar.gz: 747a388fc948a6f2c4c5a8496820a685f8c06ce846dbb0382ac9741b32c51823
3
+ metadata.gz: 93000fde1226789c26de17f4d0d075412e9be6e7733be78580f16474776c5dd7
4
+ data.tar.gz: d76651fcd12c177882a28bf5652dd137727020a9d3f4d71c022510d67c09565e
5
5
  SHA512:
6
- metadata.gz: 396f5481fb22ca11cc8e9d9cd50977aec7e07c37bb6fecdc741aa8edad13c825593b9338019047d500db98811559372814a258f8c5d5340d46cb13d06a747bda
7
- data.tar.gz: 4d28ffeaed4cbd4df33f3f0a5c655daba4bc941ecaadeab85c0c21c20d1e5a844a00c7d08282eb0b3ea40ac0be0ad50605769272fb715b04517b707b8bf4b582
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
+ };
@@ -21,6 +21,7 @@ module Proscenium
21
21
  end
22
22
 
23
23
  def capture_and_replace_proscenium_stylesheets # rubocop:disable Metrics/*
24
+ return if response_body.nil?
24
25
  return if response_body.first.blank? || !Proscenium::Importer.css_imported?
25
26
  return unless response_body.first.include? '<!-- [PROSCENIUM_STYLESHEETS] -->'
26
27
 
@@ -52,6 +53,7 @@ module Proscenium
52
53
  end
53
54
 
54
55
  def capture_and_replace_proscenium_javascripts # rubocop:disable Metrics/*
56
+ return if response_body.nil?
55
57
  return if response_body.first.blank? || !Proscenium::Importer.js_imported?
56
58
 
57
59
  imports = Proscenium::Importer.imported.dup
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Proscenium
4
- VERSION = '0.15.0.beta.2'
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.2
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-02-23 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