formstrap 0.4.4 → 0.4.5

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: 9036a76a91e170b7fb332d006940db1273770254f9d26c090365c512ce0e0c16
4
- data.tar.gz: 22433a20c6970ddcee18a5df637cc7a4506bc77d4516e73b3c39cc76af3026ab
3
+ metadata.gz: '0379b9b80ad9551b56d07884264fcc37132b72d5539976ec4034800a09adaeb2'
4
+ data.tar.gz: bbd8d0892fce51fa07375b3e6a414e169344825f5da142c5a06ab87a7696424b
5
5
  SHA512:
6
- metadata.gz: 733e8dc5350e55ae59df878de51daa8da355159eeccb7875ff5d9c0bfa19fafa7fc6019ed6e8779eca09a07a3657e451145f5e2c98d6f53e3bf91118ccda24d4
7
- data.tar.gz: 3c39838520f7dc0d62bc010ca159e91c6df28e179c505c825362d50c941a9b972fb1845657352466e59517d3c903a27a9b86b60769392e4af7d77350c0e6d8ea
6
+ metadata.gz: '0788d10916489c6fabe8798a87ffa10a75d46a4e57a2cd8c73455cc64630414ebbdbcfe213041437b22d108df2a3fa986e3692e8ea46ba25fdc28bb068142a42'
7
+ data.tar.gz: 3fba876a0ce0c7be868100726d60af6b1b5aae1b8af675e4861b9ba016405920b1ff35f537a12ce9aa10865fb1e599662170446d999a9bc6e69752f9cf2dc252
@@ -6,7 +6,7 @@ export default class extends Controller {
6
6
  static values = {
7
7
  selected: Array
8
8
  }
9
-
9
+
10
10
  connect () {
11
11
  if (this.element.hasAttribute('multiple') || this.element.dataset.tomSelect === 'true') {
12
12
  this.initTomSelect()
@@ -49,7 +49,7 @@ export default class extends Controller {
49
49
 
50
50
  initTomSelect () {
51
51
  const defaultOptions = this.defaultOptions()
52
- const options = {
52
+ const options = {
53
53
  create: this.hasTags(),
54
54
  items: this.selectedValue
55
55
  }
@@ -31,11 +31,13 @@ Redactor.add('plugin', 'linkstyles', {
31
31
  }
32
32
  },
33
33
  'link.change': function (e) {
34
- const link = e.params.element.nodes[0]
34
+ let link = e.params.element.nodes[0]
35
+ link = this.ensureValidProtocol(link)
35
36
  this.applyStylingToLink(link)
36
37
  },
37
38
  'link.add': function (e) {
38
- const link = e.params.element.nodes[0]
39
+ let link = e.params.element.nodes[0]
40
+ link = this.ensureValidProtocol(link)
39
41
  this.applyStylingToLink(link)
40
42
  }
41
43
  },
@@ -47,6 +49,7 @@ Redactor.add('plugin', 'linkstyles', {
47
49
  const stack = this.app.modal.getStack()
48
50
 
49
51
  const item = stack.getFormItem('url')
52
+
50
53
  const box = this.dom('<div>').addClass('rx-form-item')
51
54
 
52
55
  // Add a select
@@ -69,6 +72,18 @@ Redactor.add('plugin', 'linkstyles', {
69
72
  link.classList.add(className)
70
73
  })
71
74
  },
75
+ ensureValidProtocol (link) {
76
+ let url = link.getAttribute('href')
77
+
78
+ // Match valid protocols
79
+ const regex = /^(https?:\/\/|mailto:|ftp:\/\/)/i
80
+ if (!regex.test(url)) {
81
+ url = `https://${url}`
82
+ }
83
+
84
+ link.setAttribute('href', url)
85
+ return link
86
+ },
72
87
  buildSelect () {
73
88
  // Create a select node
74
89
  const select = this.dom('<select>').addClass('rx-form-select')
@@ -14462,11 +14462,13 @@ Redactor.add("plugin", "linkstyles", {
14462
14462
  }
14463
14463
  },
14464
14464
  "link.change": function(e) {
14465
- const link = e.params.element.nodes[0];
14465
+ let link = e.params.element.nodes[0];
14466
+ link = this.ensureValidProtocol(link);
14466
14467
  this.applyStylingToLink(link);
14467
14468
  },
14468
14469
  "link.add": function(e) {
14469
- const link = e.params.element.nodes[0];
14470
+ let link = e.params.element.nodes[0];
14471
+ link = this.ensureValidProtocol(link);
14470
14472
  this.applyStylingToLink(link);
14471
14473
  }
14472
14474
  },
@@ -14490,6 +14492,15 @@ Redactor.add("plugin", "linkstyles", {
14490
14492
  link.classList.add(className);
14491
14493
  });
14492
14494
  },
14495
+ ensureValidProtocol(link) {
14496
+ let url = link.getAttribute("href");
14497
+ const regex = /^(https?:\/\/|mailto:|ftp:\/\/)/i;
14498
+ if (!regex.test(url)) {
14499
+ url = `https://${url}`;
14500
+ }
14501
+ link.setAttribute("href", url);
14502
+ return link;
14503
+ },
14493
14504
  buildSelect() {
14494
14505
  const select = this.dom("<select>").addClass("rx-form-select");
14495
14506
  const items = this.opts.get("linkstyles.items");
@@ -0,0 +1,3 @@
1
+ <%= link_to url, options do %>
2
+ <%= yield %>
3
+ <% end %>
@@ -11,15 +11,15 @@ module Formstrap
11
11
  render_input(:association, attribute, options)
12
12
  end
13
13
 
14
- def preview_button(value = nil, options = {}, &block)
14
+ def preview_button(url = nil, options = {}, &block)
15
15
  default_options = {
16
16
  data: {
17
17
  controller: "preview",
18
- "preview-url-value": options[:url]
19
- },
20
- type: nil
18
+ preview_url_value: url
19
+ }
21
20
  }
22
- button value, default_options.deep_merge(options.except(:url)), &block
21
+
22
+ @template.render("formstrap/link", form: self, url: url, options: default_options.deep_merge(options), &block)
23
23
  end
24
24
 
25
25
  def checkbox(attribute, formstrap: true, **options)
@@ -1,3 +1,3 @@
1
1
  module Formstrap
2
- VERSION = "0.4.4"
2
+ VERSION = "0.4.5"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: formstrap
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.4
4
+ version: 0.4.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jef Vlamings
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-07-16 00:00:00.000000000 Z
11
+ date: 2024-11-21 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: An extensive Bootstrap form library to power your Ruby On Rails application.
14
14
  email:
@@ -142,6 +142,7 @@ files:
142
142
  - app/views/formstrap/_hint.html.erb
143
143
  - app/views/formstrap/_input_group.html.erb
144
144
  - app/views/formstrap/_label.html.erb
145
+ - app/views/formstrap/_link.html.erb
145
146
  - app/views/formstrap/_media.html.erb
146
147
  - app/views/formstrap/_number.html.erb
147
148
  - app/views/formstrap/_password.html.erb