cloudflare-turnstile-rails 0.10.1 → 0.11.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7af30ad08aa789ad214d41613d6a6a2b6df44c05cacb3fcdd198ae8f17760f02
4
- data.tar.gz: 3a248a47546aaf3efe6f8341b472af2d11a0de137d8c05a890f6bd6c50d7b8ea
3
+ metadata.gz: 0d8fd3cb77f097623954e01bb7b8edf603f88334dde368099b0da253aae0b2e0
4
+ data.tar.gz: 134e4ea34f7e4a85e2a63971fd97bd3d709f388853a04b3efd67b247ff1bf7ba
5
5
  SHA512:
6
- metadata.gz: e4e959a9aecc03dcf6365b304be22777a815c22d1b208df6160003c510c286d5253c22a475699d1aa03acd728c4cd0c413a4e8eb98a5d662e78b1341fc56a9c8
7
- data.tar.gz: 1998385612074a7fc53232f415276b7b7799f2e412f24cc46b6e889486e4281073d988af7453adc47fdcd50c6f3ebac210dbbb45315dda48553f64ad97e2d12a
6
+ metadata.gz: 1961d3464fa15763ac0c536d969ba5b825f191711f55a4b62067a81bdd83120337872b85d3492afb72065cc5e1d5e8180db27b88eed33457bec91bec533fa23d
7
+ data.tar.gz: 5bf90db9a243711e0eced90efba52a5930914b035bc65cfde5d9e3981c418fd346e2d1bed4108cd58e12fd6706a302cc3c8a83d63b56a35835135b2463550139
data/.rubocop.yml CHANGED
@@ -9,6 +9,7 @@ AllCops:
9
9
  NewCops: enable
10
10
  Exclude:
11
11
  - .git/**/*
12
+ - node_modules/**/*
12
13
  - vendor/bundle/**/*
13
14
 
14
15
  Layout/IndentationConsistency:
@@ -43,4 +44,3 @@ Style/EmptyElse:
43
44
 
44
45
  Style/FrozenStringLiteralComment:
45
46
  EnforcedStyle: never
46
-
data/Appraisals CHANGED
@@ -63,7 +63,7 @@ if RUBY_VERSION >= '3.2.0'
63
63
  gem 'rails', '~> 8.0.0'
64
64
  end
65
65
 
66
- appraise 'rails-8.0' do
66
+ appraise 'rails-8.1' do
67
67
  gem 'rails', '~> 8.1.0'
68
68
  end
69
69
  end
data/eslint.config.js ADDED
@@ -0,0 +1,232 @@
1
+ import js from '@eslint/js';
2
+ import globals from 'globals';
3
+
4
+ export default [
5
+ js.configs.recommended,
6
+ {
7
+ ignores: [
8
+ 'node_modules/**',
9
+ 'vendor/**',
10
+ 'tmp/**',
11
+ 'test/generators/tmp/**',
12
+ 'eslint.config.js'
13
+ ]
14
+ },
15
+ {
16
+ files: ['**/*.js'],
17
+ languageOptions: {
18
+ ecmaVersion: 5,
19
+ sourceType: 'script',
20
+ globals: {
21
+ ...globals.browser,
22
+ turnstile: 'readonly',
23
+ Turbolinks: 'readonly'
24
+ }
25
+ },
26
+ rules: {
27
+ 'for-direction': 'error',
28
+ 'getter-return': 'error',
29
+ 'no-mixed-operators': 'error',
30
+ 'no-await-in-loop': 'error',
31
+ 'no-compare-neg-zero': 'error',
32
+ 'no-cond-assign': 'error',
33
+ 'no-console': 'warn',
34
+ 'no-constant-condition': 'error',
35
+ 'no-control-regex': 'error',
36
+ 'no-debugger': 'error',
37
+ 'no-dupe-args': 'error',
38
+ 'no-dupe-keys': 'error',
39
+ 'no-duplicate-case': 'error',
40
+ 'no-empty': 'error',
41
+ 'no-empty-character-class': 'error',
42
+ 'no-ex-assign': 'error',
43
+ 'no-extra-boolean-cast': 'error',
44
+ 'no-extra-parens': 'off',
45
+ 'no-extra-semi': 'error',
46
+ 'no-func-assign': 'error',
47
+ 'no-inner-declarations': ['error', 'both'],
48
+ 'no-invalid-regexp': 'error',
49
+ 'no-irregular-whitespace': 'error',
50
+ 'no-obj-calls': 'error',
51
+ 'no-prototype-builtins': 'error',
52
+ 'no-regex-spaces': 'error',
53
+ 'no-sparse-arrays': 'error',
54
+ 'no-template-curly-in-string': 'off',
55
+ 'no-unexpected-multiline': 'error',
56
+ 'no-unreachable': 'error',
57
+ 'no-unsafe-finally': 'error',
58
+ 'no-unsafe-negation': 'error',
59
+ 'use-isnan': 'error',
60
+ 'valid-typeof': 'error',
61
+
62
+ // BEST PRACTICES
63
+ 'accessor-pairs': 'error',
64
+ 'array-callback-return': 'error',
65
+ 'block-scoped-var': 'error',
66
+ 'consistent-return': 'error',
67
+ curly: 'error',
68
+ 'default-case': 'error',
69
+ 'dot-location': ['error', 'property'],
70
+ 'dot-notation': 'error',
71
+ eqeqeq: 'error',
72
+ 'guard-for-in': 'error',
73
+ 'no-alert': 'error',
74
+ 'no-caller': 'error',
75
+ 'no-case-declarations': 'error',
76
+ 'no-div-regex': 'error',
77
+ 'no-else-return': 'error',
78
+ 'no-empty-function': 'error',
79
+ 'no-empty-pattern': 'error',
80
+ 'no-eq-null': 'error',
81
+ 'no-eval': 'error',
82
+ 'no-extend-native': 'error',
83
+ 'no-extra-bind': 'error',
84
+ 'no-extra-label': 'error',
85
+ 'no-fallthrough': 'error',
86
+ 'no-floating-decimal': 'error',
87
+ 'no-global-assign': 'error',
88
+ 'no-implicit-coercion': 'error',
89
+ 'no-implicit-globals': 'error',
90
+ 'no-implied-eval': 'error',
91
+ 'no-invalid-this': 'off',
92
+ 'no-iterator': 'error',
93
+ 'no-labels': 'error',
94
+ 'no-lone-blocks': 'error',
95
+ 'no-loop-func': 'error',
96
+ 'no-magic-numbers': 'off',
97
+ 'no-multi-spaces': 'error',
98
+ 'no-multi-str': 'error',
99
+ 'no-new': 'off',
100
+ 'no-new-func': 'error',
101
+ 'no-new-wrappers': 'error',
102
+ 'no-octal': 'error',
103
+ 'no-octal-escape': 'error',
104
+ 'no-param-reassign': 'error',
105
+ 'no-proto': 'error',
106
+ 'no-redeclare': 'error',
107
+ 'no-restricted-properties': 'error',
108
+ 'no-return-assign': 'error',
109
+ 'no-return-await': 'error',
110
+ 'no-script-url': 'error',
111
+ 'no-self-assign': 'error',
112
+ 'no-self-compare': 'error',
113
+ 'no-sequences': 'error',
114
+ 'no-throw-literal': 'error',
115
+ 'no-unmodified-loop-condition': 'error',
116
+ 'no-unused-expressions': 'error',
117
+ 'no-unused-labels': 'error',
118
+ 'no-useless-call': 'error',
119
+ 'no-useless-concat': 'error',
120
+ 'no-useless-escape': 'error',
121
+ 'no-useless-return': 'error',
122
+ 'no-void': 'error',
123
+ 'no-warning-comments': 'error',
124
+ 'no-with': 'error',
125
+ 'prefer-promise-reject-errors': 'error',
126
+ radix: 'error',
127
+ 'require-await': 'error',
128
+ 'vars-on-top': 'error',
129
+ 'wrap-iife': 'error',
130
+ yoda: 'error',
131
+
132
+ // STRICT MODE - allow function-level strict mode for IIFEs
133
+ strict: ['error', 'function'],
134
+
135
+ // VARIABLES
136
+ 'no-delete-var': 'error',
137
+ 'no-label-var': 'error',
138
+ 'no-restricted-globals': 'error',
139
+ 'no-shadow': 'error',
140
+ 'no-shadow-restricted-names': 'error',
141
+ 'no-undef': 'warn',
142
+ 'no-undef-init': 'error',
143
+ 'no-undefined': 'error',
144
+ 'no-unused-vars': 'error',
145
+ 'no-use-before-define': 'error',
146
+
147
+ // STYLISTIC ISSUES
148
+ 'array-bracket-spacing': ['error', 'never'],
149
+ 'block-spacing': 'error',
150
+ 'brace-style': ['error', 'stroustrup'],
151
+ camelcase: 'error',
152
+ 'comma-dangle': ['error', 'never'],
153
+ 'comma-spacing': 'error',
154
+ 'comma-style': 'error',
155
+ 'computed-property-spacing': ['error', 'never'],
156
+ 'consistent-this': ['error', 'null'],
157
+ 'eol-last': ['error', 'always'],
158
+ 'func-call-spacing': ['error', 'never'],
159
+ 'func-name-matching': ['error', 'always'],
160
+ 'func-style': 'off',
161
+ 'function-paren-newline': ['error', 'never'],
162
+ indent: ['error', 2],
163
+ 'key-spacing': ['error', {beforeColon: false, afterColon: true}],
164
+ 'keyword-spacing': ['error', {after: true}],
165
+ 'linebreak-style': ['error', 'unix'],
166
+ 'lines-between-class-members': ['error', 'always'],
167
+ 'max-depth': ['error', 4],
168
+ 'max-len': ['error', 120, 4],
169
+ 'max-nested-callbacks': ['error', 3],
170
+ 'max-params': ['error', 5],
171
+ 'max-statements': ['error', 30],
172
+ 'max-statements-per-line': ['error', {max: 2}],
173
+ 'multiline-comment-style': ['error', 'starred-block'],
174
+ 'new-cap': 'error',
175
+ 'new-parens': 'error',
176
+ 'no-array-constructor': 'error',
177
+ 'no-bitwise': 'error',
178
+ 'no-lonely-if': 'error',
179
+ 'no-mixed-spaces-and-tabs': 'error',
180
+ 'no-multiple-empty-lines': ['error', {max: 1, maxBOF: 0, maxEOF: 0}],
181
+ 'no-negated-condition': 'error',
182
+ 'no-nested-ternary': 'error',
183
+ 'no-new-object': 'error',
184
+ 'no-tabs': 'error',
185
+ 'no-trailing-spaces': 'error',
186
+ 'no-unneeded-ternary': 'error',
187
+ 'no-whitespace-before-property': 'error',
188
+ 'nonblock-statement-body-position': ['error', 'beside'],
189
+ 'object-curly-spacing': ['error', 'never'],
190
+ 'operator-assignment': ['error', 'always'],
191
+ 'operator-linebreak': 'error',
192
+ 'padded-blocks': ['error', 'never'],
193
+ 'padding-line-between-statements': [
194
+ 'error',
195
+ {blankLine: 'always', prev: '*', next: 'block'},
196
+ {blankLine: 'always', prev: '*', next: 'block'},
197
+ {blankLine: 'always', prev: '*', next: 'class'},
198
+ {blankLine: 'always', prev: '*', next: 'export'},
199
+ {blankLine: 'always', prev: '*', next: 'multiline-block-like'},
200
+ {blankLine: 'always', prev: 'block', next: '*'},
201
+ {blankLine: 'always', prev: 'block-like', next: '*'},
202
+ {blankLine: 'always', prev: 'class', next: '*'},
203
+ {blankLine: 'always', prev: 'default', next: '*'},
204
+ {blankLine: 'always', prev: 'multiline-block-like', next: '*'},
205
+ {blankLine: 'never', prev: 'import', next: 'import'}
206
+ ],
207
+ 'quote-props': ['error', 'as-needed'],
208
+ quotes: ['error', 'single'],
209
+ semi: ['error', 'always'],
210
+ 'semi-spacing': ['error', {before: false, after: true}],
211
+ 'semi-style': ['error', 'last'],
212
+ 'space-before-blocks': ['error', 'always'],
213
+ 'space-before-function-paren': ['error', 'never'],
214
+ 'space-in-parens': ['error', 'never'],
215
+ 'space-infix-ops': 'error',
216
+ 'space-unary-ops': ['error', {words: true, nonwords: false}],
217
+ 'spaced-comment': ['error', 'always'],
218
+ 'switch-colon-spacing': ['error', {before: false, after: true}],
219
+ 'template-tag-spacing': ['error', 'always'],
220
+ 'unicode-bom': ['error', 'never'],
221
+ 'wrap-regex': 'error',
222
+
223
+ // ES6+ rules - disabled for older browser compatibility
224
+ 'no-var': 'off',
225
+ 'prefer-const': 'off',
226
+ 'prefer-arrow-callback': 'off',
227
+ 'prefer-rest-params': 'off',
228
+ 'prefer-spread': 'off',
229
+ 'prefer-template': 'off'
230
+ }
231
+ }
232
+ ];
@@ -1,40 +1,60 @@
1
- (function(){
2
- function reinitializeTurnstile() {
3
- if (typeof turnstile !== "undefined") {
4
- document.querySelectorAll('.cf-turnstile').forEach(function(el) {
5
- if (!el.dataset.initialized && el.childElementCount === 0) {
6
- turnstile.render(el);
7
- el.dataset.initialized = true;
8
- }
9
- });
1
+ (function() {
2
+ 'use strict';
3
+
4
+ var me, cfUrl, helper, nonce;
5
+
6
+ function reinitializeTurnstile() {
7
+ var elements, el, i;
8
+
9
+ if (typeof turnstile !== 'undefined') {
10
+ elements = document.querySelectorAll('.cf-turnstile');
11
+
12
+ for (i = 0; i < elements.length; i++) {
13
+ el = elements[i];
14
+
15
+ if (!el.dataset.initialized && el.childElementCount === 0) {
16
+ turnstile.render(el);
17
+ el.dataset.initialized = 'true';
10
18
  }
19
+ }
11
20
  }
21
+ }
22
+
23
+ if (!window._turnstileHelperLoaded) {
24
+ window._turnstileHelperLoaded = true;
12
25
 
13
- if (!window._turnstileHelperLoaded) {
14
- window._turnstileHelperLoaded = true;
15
-
16
- // read our data-attribute to know which CF script URL to use:
17
- var me = document.currentScript;
18
- var cfUrl = me.getAttribute('data-script-url');
19
- var helper = document.createElement('script');
20
- helper.src = cfUrl;
21
- helper.async = true;
22
- helper.defer = true;
23
- var nonce = me.getAttribute('nonce');
24
- if (nonce) helper.nonce = nonce;
25
- document.head.appendChild(helper);
26
-
27
- // set up Turbo hooks only once
28
- document.addEventListener("turbo:load", reinitializeTurnstile);
29
- document.addEventListener("turbo:before-stream-render", function(event) {
30
- var orig = event.detail.render.bind(event.detail);
31
- event.detail.render = function() {
32
- orig.apply(this, arguments);
33
- reinitializeTurnstile();
34
- };
35
- });
26
+ // read our data-attribute to know which CF script URL to use:
27
+ me = document.currentScript;
28
+ cfUrl = me.getAttribute('data-script-url');
29
+ helper = document.createElement('script');
30
+ helper.src = cfUrl;
31
+ helper.async = true;
32
+ helper.defer = true;
33
+
34
+ /*
35
+ * Use .nonce property instead of getAttribute('nonce') because browsers
36
+ * hide the nonce attribute value from getAttribute() for security reasons
37
+ */
38
+ nonce = me.nonce;
39
+
40
+ if (nonce) {
41
+ helper.nonce = nonce;
36
42
  }
37
43
 
38
- // always try to render any containers already in the DOM
39
- reinitializeTurnstile();
40
- })();
44
+ document.head.appendChild(helper);
45
+
46
+ // set up Turbo hooks only once
47
+ document.addEventListener('turbo:render', reinitializeTurnstile);
48
+ document.addEventListener('turbo:before-stream-render', function(event) {
49
+ var orig = event.detail.render.bind(event.detail);
50
+
51
+ event.detail.render = function() {
52
+ orig.apply(this, arguments);
53
+ reinitializeTurnstile();
54
+ };
55
+ });
56
+ }
57
+
58
+ // always try to render any containers already in the DOM
59
+ reinitializeTurnstile();
60
+ }());
@@ -1,7 +1,7 @@
1
1
  module Cloudflare
2
2
  module Turnstile
3
3
  module Rails
4
- VERSION = '0.10.1'.freeze
4
+ VERSION = '0.11.0'.freeze
5
5
  end
6
6
  end
7
7
  end
data/package.json ADDED
@@ -0,0 +1,14 @@
1
+ {
2
+ "name": "cloudflare-turnstile-rails",
3
+ "private": true,
4
+ "type": "module",
5
+ "scripts": {
6
+ "lint": "eslint .",
7
+ "lint:fix": "eslint . --fix"
8
+ },
9
+ "devDependencies": {
10
+ "@eslint/js": "^9.17.0",
11
+ "eslint": "^9.17.0",
12
+ "globals": "^15.14.0"
13
+ }
14
+ }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cloudflare-turnstile-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.1
4
+ version: 0.11.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vadim Kononov
@@ -36,6 +36,7 @@ files:
36
36
  - LICENSE.txt
37
37
  - README.md
38
38
  - Rakefile
39
+ - eslint.config.js
39
40
  - lib/cloudflare/turnstile/rails.rb
40
41
  - lib/cloudflare/turnstile/rails/assets/javascripts/cloudflare_turnstile_helper.js
41
42
  - lib/cloudflare/turnstile/rails/configuration.rb
@@ -64,6 +65,7 @@ files:
64
65
  - lib/cloudflare/turnstile/rails/version.rb
65
66
  - lib/generators/cloudflare_turnstile/install_generator.rb
66
67
  - lib/generators/cloudflare_turnstile/templates/cloudflare_turnstile.rb
68
+ - package.json
67
69
  homepage: https://github.com/vkononov/cloudflare-turnstile-rails
68
70
  licenses:
69
71
  - MIT