effective_form_inputs 0.9.3 → 0.9.4

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
  SHA1:
3
- metadata.gz: 0873e8f75cb59e2a58fe998e6b8a06aea8312fdf
4
- data.tar.gz: 30a47fc759584af54ff322cfc3ded0f931866450
3
+ metadata.gz: 060510deeb8a9fd2a79cfa4152a6c5b837a850a6
4
+ data.tar.gz: 4a9ef0428e0919592d6e29f536bb4797e469da9a
5
5
  SHA512:
6
- metadata.gz: 5f11b80d3ee6e464ed2ee3e5ef3300f18c82a2d4eed253536add3cae758e0ad3cae9ad916c8c2e1cae452a0489a876628f71a0a58b1cc28966ef8ba1620cdb1d
7
- data.tar.gz: 8682fa12cca48d297c8c3fb2682a53b9784663618e4d69cbc603bf923bd40947f84071eb975f6f4e7560d832d932eb9fd0cf7628eee63197dccf65b7839a1e98
6
+ metadata.gz: fdb69f861ed65d3719c731baf3bb938ced5ca64914ffad00c5f27bf0151bc553db4cd886e979d7423846b4f5650644b8022afd1de4f84df368ed7d577bed1134
7
+ data.tar.gz: 292e19a6587e521cdfe9db2852bc0d9a8a8d5789a1853176adf1379ba2a3cee6dc75fe566cdea65d4c527a7c1fb92d19bc366b239ce9dfd43d54b91c113ac71c
data/README.md CHANGED
@@ -196,6 +196,54 @@ Use the following JavaScript to programatically set the date:
196
196
  $('#start_at').data('DateTimePicker').date('2016-05-08')
197
197
  ```
198
198
 
199
+ ## Effective Email
200
+
201
+ This custom form input makes sure the input is an email address.
202
+
203
+ ### Installation
204
+
205
+ If you've already installed the 'All Form Inputs' assets (see above), there are no additional installation steps.
206
+
207
+ To install this form input individually, add the following to your application.js:
208
+
209
+ ```ruby
210
+ //= require effective_email/input
211
+ ```
212
+
213
+ ### Usage
214
+
215
+ As a Rails Form Helper input:
216
+
217
+ ```ruby
218
+ = form_for @user do |f|
219
+ = f.effective_email :email
220
+ ```
221
+
222
+ As a SimpleForm input:
223
+
224
+ ```ruby
225
+ = simple_form_for @user do |f|
226
+ = f.input :email, :as => :effective_email
227
+ ```
228
+
229
+ As a SimpleForm input without the input group (envelope glyphicon)
230
+
231
+ ```ruby
232
+ = simple_form_for @user do |f|
233
+ = f.input :email, :as => :effective_email, :input_group => false
234
+ ```
235
+
236
+ You should add a server side validation to enforce the format:
237
+
238
+ ```ruby
239
+ validates :email, format: { with: /\A.+@.+\..+\Z/ }
240
+ validates :email, effective_email: true # Enforces same format as above
241
+ ```
242
+
243
+ ### Options
244
+
245
+ There are no javascript options for this input.
246
+
199
247
  ## Effective Static Control
200
248
 
201
249
  A bootstrap3 Static control input
@@ -397,12 +445,6 @@ To install this form input individually, add the following to your application.j
397
445
  //= require effective_tel/input
398
446
  ```
399
447
 
400
- and add the following to your application.css:
401
-
402
- ```ruby
403
- *= require effective_tel/input
404
- ```
405
-
406
448
  ### Usage
407
449
 
408
450
  As a Rails Form Helper input:
@@ -426,10 +468,11 @@ As a SimpleForm input without the input group (phone glyphicon)
426
468
  = f.input :phone, :as => :effective_tel, :input_group => false
427
469
  ```
428
470
 
429
- You can add a server side validation to enforce the default "(123) 555-1234" with optional "x123" extension format:
471
+ You should add a server side validation to enforce the default "(123) 555-1234" with optional "x123" extension format:
430
472
 
431
473
  ```ruby
432
474
  validates :phone, format: { with: /\A\(\d{3}\) \d{3}-\d{4}( x\d+)?\Z/ }
475
+ validates :phone, effective_tel: true # Enforces same format as above
433
476
  ```
434
477
 
435
478
  ## Effective Price
@@ -482,14 +525,63 @@ You can pass `include_blank: true` to allow `nil`. By default `nil`s are conver
482
525
  = f.input :price, :as => :effective_price, :include_blank => true
483
526
  ```
484
527
 
485
- There are no javascript options for this input.
486
-
487
528
 
488
529
  ### Rails Helper
489
530
 
490
531
  This input also installs a rails view helper `price_to_currency` that takes a value like `10000` and displays it as `$100.00`
491
532
 
492
533
 
534
+ ## Effective URL
535
+
536
+ This custom form input enforces the url starts with http:// or https://
537
+
538
+ If font-awesome-rails gem is installed, a font-awesome icon for facebook, google, linkedin, twitter, vimeo and youtube will be inserted based on the field name.
539
+
540
+ ### Installation
541
+
542
+ If you've already installed the 'All Form Inputs' assets (see above), there are no additional installation steps.
543
+
544
+ To install this form input individually, add the following to your application.js:
545
+
546
+ ```ruby
547
+ //= require effective_url/input
548
+ ```
549
+
550
+ ### Usage
551
+
552
+ As a Rails Form Helper input:
553
+
554
+ ```ruby
555
+ = form_for @user do |f|
556
+ = f.effective_url :website
557
+ ```
558
+
559
+ As a SimpleForm input:
560
+
561
+ ```ruby
562
+ = simple_form_for @user do |f|
563
+ = f.input :website, :as => :effective_url
564
+ ```
565
+
566
+ As a SimpleForm input without the input group (globe glyphicon)
567
+
568
+ ```ruby
569
+ = simple_form_for @user do |f|
570
+ = f.input :website, :as => :effective_url, :input_group => false
571
+ ```
572
+
573
+ You should add a server side validation to enforce the url starts with http(s?)://
574
+
575
+ ```ruby
576
+ validates :phone, format: { with: /\Ahttps?:\/\/\w+.+\Z/ }
577
+ validates :website, effective_url: true # Enforced same format as above
578
+ ```
579
+
580
+ ### Options
581
+
582
+ You can pass `fontawesome: false` and `glyphicon: false` to tweak the automatic social icon display behaviour.
583
+
584
+
493
585
  ## Effective CKEditor Text Area
494
586
 
495
587
  This custom form input replaces a standard textarea with a CKEditor html rich text area.
@@ -0,0 +1,12 @@
1
+ initialize = ->
2
+ $('input.effective_email:not(.initialized)').each (i, element) ->
3
+ element = $(element)
4
+ options = element.data('input-js-options') || {}
5
+
6
+ # We don't actually do anything with options
7
+ element.addClass('initialized')
8
+
9
+ $ -> initialize()
10
+ $(document).on 'page:change', -> initialize()
11
+ $(document).on 'turbolinks:load', -> initialize()
12
+ $(document).on 'cocoon:after-insert', -> initialize()
@@ -0,0 +1 @@
1
+ //= require ./initialize
@@ -4,3 +4,4 @@
4
4
  //= require ./effective_price/input
5
5
  //= require ./effective_select/input
6
6
  //= require ./effective_tel/input
7
+ //= require ./effective_url/input
@@ -3,7 +3,7 @@ initialize = ->
3
3
  element = $(element)
4
4
  options = element.data('input-js-options') || {}
5
5
 
6
- # We don't actually do anything
6
+ # We don't actually do anything with options
7
7
  element.addClass('initialized')
8
8
 
9
9
  $ -> initialize()
@@ -0,0 +1,14 @@
1
+ # http://digitalbush.com/projects/masked-input-plugin/
2
+
3
+ initialize = ->
4
+ $('input.effective_url:not(.initialized)').each (i, element) ->
5
+ element = $(element)
6
+ options = element.data('input-js-options') || {}
7
+
8
+ # We don't actually do anything with options
9
+ element.addClass('initialized')
10
+
11
+ $ -> initialize()
12
+ $(document).on 'page:change', -> initialize()
13
+ $(document).on 'turbolinks:load', -> initialize()
14
+ $(document).on 'cocoon:after-insert', -> initialize()
@@ -0,0 +1 @@
1
+ //= require ./initialize
@@ -0,0 +1,28 @@
1
+ module Inputs
2
+ module EffectiveEmail
3
+ class Input < Effective::FormInput
4
+ delegate :content_tag, :email_field_tag, :to => :@template
5
+
6
+ def default_input_html
7
+ {
8
+ class: 'effective_email email',
9
+ placeholder: 'someone@example.com',
10
+ }
11
+ end
12
+
13
+ def to_html
14
+ if options[:input_group] == false
15
+ return email_field_tag(field_name, value, tag_options)
16
+ end
17
+
18
+ content_tag(:div, class: 'input-group') do
19
+ content_tag(:span, class: 'input-group-addon') do
20
+ content_tag(:i, '', class: 'glyphicon glyphicon-envelope').html_safe
21
+ end +
22
+ email_field_tag(field_name, value, tag_options)
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+
@@ -0,0 +1,12 @@
1
+ # = simple_form_for @thing do |f|
2
+ # = f.input :email, :as => :effective_email
3
+
4
+ if defined?(SimpleForm)
5
+
6
+ class EffectiveEmailInput < SimpleForm::Inputs::StringInput
7
+ def input(wrapper_options = nil)
8
+ Inputs::EffectiveEmail::Input.new(object, object_name, template, attribute_name, input_options, (merge_wrapper_options(input_html_options, wrapper_options) || {})).to_html
9
+ end
10
+ end
11
+
12
+ end
@@ -8,7 +8,12 @@ module Inputs
8
8
  end
9
9
 
10
10
  def to_html
11
- content_tag(:p, value, tag_options)
11
+ if value.kind_of?(String) && value.start_with?('<p>') && value.end_with?('</p>')
12
+ content_tag(:p, value[3...-4].html_safe, tag_options)
13
+ else
14
+ content_tag(:p, (value.html_safe? ? value : value.to_s.html_safe), tag_options)
15
+ end
16
+
12
17
  end
13
18
 
14
19
  def html_options
@@ -11,7 +11,7 @@ module Inputs
11
11
  end
12
12
 
13
13
  def default_input_html
14
- {class: 'effective_tel tel'}
14
+ {class: 'effective_tel tel', placeholder: '(555) 555-5555'}
15
15
  end
16
16
 
17
17
  def default_input_js
@@ -0,0 +1,87 @@
1
+ module Inputs
2
+ module EffectiveUrl
3
+ class Input < Effective::FormInput
4
+ FA_FIELD_NAMES = ['facebook', 'google', 'linkedin', 'twitter', 'vimeo', 'youtube']
5
+
6
+ delegate :content_tag, :url_field_tag, :to => :@template
7
+
8
+ def default_input_html
9
+ {
10
+ class: 'effective_url url',
11
+ pattern: 'https?://[A-Za-z0-9]+.+',
12
+ placeholder: placeholder,
13
+ title: 'A URL starting with http:// or https://'
14
+ }
15
+ end
16
+
17
+ def to_html
18
+ if options[:input_group] == false
19
+ return url_field_tag(field_name, value, tag_options)
20
+ end
21
+
22
+ content_tag(:div, class: 'input-group') do
23
+ content_tag(:span, class: 'input-group-addon') do
24
+ glyphicon + fontawesome
25
+ end +
26
+ url_field_tag(field_name, value, tag_options)
27
+ end
28
+ end
29
+
30
+ def placeholder
31
+ if field_name.include?('facebook')
32
+ 'https://www.facebook.com/MyProfile'
33
+ elsif field_name.include?('google')
34
+ 'https://plus.google.com/+MyProfile'
35
+ elsif field_name.include?('linkedin')
36
+ 'https://www.linkedin.com/in/MyProfile'
37
+ elsif field_name.include?('twitter')
38
+ 'https://twitter.com/MyProfile'
39
+ elsif field_name.include?('vimeo')
40
+ 'https://vimeo.com/MyProfile'
41
+ elsif field_name.include?('youtube')
42
+ 'https://www.youtube.com/user/MyProfile'
43
+ else
44
+ 'http://www.example.com'
45
+ end
46
+ end
47
+
48
+ def glyphicon
49
+ if options[:glyphicon] == false
50
+ ''.html_safe
51
+ elsif options[:glyphicon] == true
52
+ content_tag(:i, '', class: 'glyphicon glyphicon-globe')
53
+ elsif options[:glyphicon].present?
54
+ content_tag(:i, '', class: "glyphicon glyphicon-#{options[:glyphicon].to_s.gsub('glyphicon-', '')}")
55
+ elsif defined?(FontAwesome) && FA_FIELD_NAMES.any? { |name| field_name.include?(name) } && options[:fontawesome] != false
56
+ ''.html_safe
57
+ else
58
+ content_tag(:i, '', class: 'glyphicon glyphicon-globe')
59
+ end
60
+ end
61
+
62
+ def fontawesome
63
+ if options[:fontawesome] == false
64
+ ''.html_safe
65
+ elsif options[:fontawesome].present? && options[:fontawesome] != true
66
+ content_tag(:i, '', class: "fa fa-#{options[:fontawesome].to_s.gsub('fa-', '')}")
67
+ elsif field_name.include?('facebook')
68
+ content_tag(:i, '', class: 'fa fa-facebook')
69
+ elsif field_name.include?('google')
70
+ content_tag(:i, '', class: 'fa fa-google')
71
+ elsif field_name.include?('linkedin')
72
+ content_tag(:i, '', class: 'fa fa-linkedin')
73
+ elsif field_name.include?('twitter')
74
+ content_tag(:i, '', class: 'fa fa-twitter')
75
+ elsif field_name.include?('vimeo')
76
+ content_tag(:i, '', class: 'fa fa-vimeo')
77
+ elsif field_name.include?('youtube')
78
+ content_tag(:i, '', class: 'fa fa-youtube')
79
+ else
80
+ ''.html_safe
81
+ end
82
+ end
83
+
84
+ end
85
+ end
86
+ end
87
+
@@ -0,0 +1,14 @@
1
+ # = simple_form_for @thing do |f|
2
+ # = f.input :website, :as => :effective_url
3
+ # = f.input :website, :as => :effective_url, :glyphicon => false
4
+ # = f.input :website, :as => :effective_url, :fontawesome => false
5
+
6
+ if defined?(SimpleForm)
7
+
8
+ class EffectiveUrlInput < SimpleForm::Inputs::StringInput
9
+ def input(wrapper_options = nil)
10
+ Inputs::EffectiveUrl::Input.new(object, object_name, template, attribute_name, input_options, (merge_wrapper_options(input_html_options, wrapper_options) || {})).to_html
11
+ end
12
+ end
13
+
14
+ end
@@ -0,0 +1,13 @@
1
+ # An ActiveRecord validator for any email field that you would use with effective_email or otherwise
2
+ #
3
+ # validates :phone, effective_email: true
4
+
5
+ class EffectiveEmailValidator < ActiveModel::EachValidator
6
+ PATTERN = /\A.+@.+\..+\Z/
7
+
8
+ def validate_each(record, attribute, value)
9
+ if value.present?
10
+ record.errors.add(attribute, 'is invalid') unless PATTERN =~ value
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ # An ActiveRecord validator for any phone field that you would use with effective_tel
2
+ #
3
+ # validates :phone, effective_tel: true
4
+
5
+ class EffectiveTelValidator < ActiveModel::EachValidator
6
+ PATTERN = /\A\(\d{3}\) \d{3}-\d{4}( x\d+)?\Z/
7
+
8
+ def validate_each(record, attribute, value)
9
+ if value.present?
10
+ record.errors.add(attribute, 'is invalid') unless PATTERN =~ value
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ # An ActiveRecord validator for any url field that you would use with effective_url or otherwise
2
+ #
3
+ # validates :phone, effective_url: true
4
+
5
+ class EffectiveUrlValidator < ActiveModel::EachValidator
6
+ PATTERN = /\Ahttps?:\/\/\w+.+\Z/
7
+
8
+ def validate_each(record, attribute, value)
9
+ if value.present?
10
+ record.errors.add(attribute, 'is invalid') unless PATTERN =~ value
11
+ end
12
+ end
13
+ end
@@ -1,3 +1,3 @@
1
1
  module EffectiveFormInputs
2
- VERSION = '0.9.3'.freeze
2
+ VERSION = '0.9.4'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: effective_form_inputs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.3
4
+ version: 0.9.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Code and Effect
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-09-24 00:00:00.000000000 Z
11
+ date: 2016-10-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -57,6 +57,8 @@ files:
57
57
  - app/assets/javascripts/effective_date_time_picker/input.js
58
58
  - app/assets/javascripts/effective_date_time_picker/moment.js
59
59
  - app/assets/javascripts/effective_date_time_picker/overrides.js.coffee
60
+ - app/assets/javascripts/effective_email/initialize.js.coffee
61
+ - app/assets/javascripts/effective_email/input.js
60
62
  - app/assets/javascripts/effective_form_inputs.js
61
63
  - app/assets/javascripts/effective_price/initialize.js.coffee
62
64
  - app/assets/javascripts/effective_price/input.js
@@ -67,6 +69,8 @@ files:
67
69
  - app/assets/javascripts/effective_tel/initialize.js.coffee
68
70
  - app/assets/javascripts/effective_tel/input.js
69
71
  - app/assets/javascripts/effective_tel/jquery.maskedInput.js
72
+ - app/assets/javascripts/effective_url/initialize.js.coffee
73
+ - app/assets/javascripts/effective_url/input.js
70
74
  - app/assets/stylesheets/effective_date_picker/input.scss
71
75
  - app/assets/stylesheets/effective_date_time_picker/bootstrap-datetimepicker.scss
72
76
  - app/assets/stylesheets/effective_date_time_picker/input.scss
@@ -85,6 +89,8 @@ files:
85
89
  - app/models/inputs/effective_date_picker_input.rb
86
90
  - app/models/inputs/effective_date_time_picker/input.rb
87
91
  - app/models/inputs/effective_date_time_picker_input.rb
92
+ - app/models/inputs/effective_email/input.rb
93
+ - app/models/inputs/effective_email_input.rb
88
94
  - app/models/inputs/effective_price/input.rb
89
95
  - app/models/inputs/effective_price_input.rb
90
96
  - app/models/inputs/effective_select/input.rb
@@ -93,6 +99,11 @@ files:
93
99
  - app/models/inputs/effective_static_control_input.rb
94
100
  - app/models/inputs/effective_tel/input.rb
95
101
  - app/models/inputs/effective_tel_input.rb
102
+ - app/models/inputs/effective_url/input.rb
103
+ - app/models/inputs/effective_url_input.rb
104
+ - app/validators/effective_email_validator.rb
105
+ - app/validators/effective_tel_validator.rb
106
+ - app/validators/effective_url_validator.rb
96
107
  - app/views/effective/style_guide/_effective_form_inputs.html.haml
97
108
  - lib/effective_form_inputs.rb
98
109
  - lib/effective_form_inputs/engine.rb