x-editable-rails 1.5.3 → 1.5.4

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
  SHA1:
3
- metadata.gz: 749654c2631947399d2e759d6eae397a31da4f47
4
- data.tar.gz: 0c4ac3d4b3b2bb21aff16b65e1655d9fe5d3b0f1
3
+ metadata.gz: 147a7545378c08302b0aa3078eefb5b34f8cfb36
4
+ data.tar.gz: f93643c63b673cb323982194ca905a0eec38a90c
5
5
  SHA512:
6
- metadata.gz: 9d53f30f5c112a0cac95819fc15c135869d02d9f608ee1ae01438c1bca210ca324ec861b18c45bd1e9c5d4c87b752864180e40d6c849a5266a46fe4723477b6e
7
- data.tar.gz: ed081d33f6683905d7743fdcb92196f8b00bb2ce44fc9fc7f0fdd30552cfde3276d7dd42e58f2184ec77df4b43f2282d9e9161d9e658999f0629757a05a2bef5
6
+ metadata.gz: 09d634d226d06a25c1ba9a13977da472744b42674969f0172fc2a14e38b20182551c15737fc996b32c92c65d0a5e3f7ddcfd04da311e31ec0243590f15bb3c9e
7
+ data.tar.gz: 0b3a64951964c9f5451ac7f5deb3954a4852657151f541eca258f9cde0b1a924295bd767d3da2e771ffd717248f4531bd0d3c6a17ccf58c85775df0376fa4a9e
data/README.md CHANGED
@@ -120,7 +120,7 @@ classes = { "Active" => "label-success", "Disabled" => "label-default" }
120
120
  editable @model, :enabled, source: source, classes: classes, class: "label"
121
121
  ```
122
122
 
123
- * **nested** - Name of a nested attributes (such as [gobalize](https://github.com/globalize/globalize)'s `translations`)
123
+ * **nested** - Name of a nested attributes (such as [globalize](https://github.com/globalize/globalize)'s `translations`)
124
124
  * **nid** - ID of the nested attribute
125
125
 
126
126
  ```ruby
@@ -1,7 +1,7 @@
1
1
  module X
2
2
  module Editable
3
3
  module Rails
4
- VERSION = "1.5.3"
4
+ VERSION = "1.5.4"
5
5
  end
6
6
  end
7
- end
7
+ end
@@ -1,3 +1,5 @@
1
+ require 'base64'
2
+
1
3
  module X
2
4
  module Editable
3
5
  module Rails
@@ -16,63 +18,69 @@ module X
16
18
  # - enumerable shorthand ['Yes', 'No', 'Maybe'] becomes { 'Yes' => 'Yes', 'No' => 'No', 'Maybe' => 'Maybe' }
17
19
  # classes: a Hash of classes to add based on the value (same format and shorthands as source)
18
20
  # value: override the object's value
19
- #
21
+ #
20
22
  def editable(object, method, options = {})
21
23
  options = Configuration.method_options_for(object, method).deep_merge(options).with_indifferent_access
22
24
  # merge data attributes for backwards-compatibility
23
25
  options.merge! options.delete(:data){ Hash.new }
24
-
26
+
25
27
  url = options.delete(:url){ polymorphic_path(object) }
26
28
  object = object.last if object.kind_of?(Array)
27
29
  value = options.delete(:value){ object.send(method) }
28
30
  source = options[:source] ? format_source(options.delete(:source), value) : default_source_for(value)
29
31
  classes = format_source(options.delete(:classes), value)
30
32
  error = options.delete(:e)
31
-
33
+ html_options = options.delete(:html){ Hash.new }
34
+
32
35
  if xeditable?(object)
33
- model = object.class.name.split('::').last.underscore
36
+ model = object.model_name.to_s.underscore
34
37
  nid = options.delete(:nid)
35
38
  nested = options.delete(:nested)
36
39
  title = options.delete(:title) do
37
40
  klass = nested ? object.class.const_get(nested.to_s.singularize.capitalize) : object.class
38
41
  klass.human_attribute_name(method)
39
42
  end
40
-
43
+
41
44
  output_value = output_value_for(value)
42
45
  css_list = options.delete(:class).to_s.split(/\s+/).unshift('editable')
43
46
  css_list << classes[output_value] if classes
44
-
47
+ type = options.delete(:type){ default_type_for(value) }
45
48
  css = css_list.compact.uniq.join(' ')
46
49
  tag = options.delete(:tag){ 'span' }
47
50
  placeholder = options.delete(:placeholder){ title }
48
-
51
+
49
52
  # any remaining options become data attributes
50
53
  data = {
51
- type: options.delete(:type){ default_type_for(value) },
52
- model: model,
53
- name: method,
54
- value: output_value,
55
- placeholder: placeholder,
56
- classes: classes,
57
- source: source,
58
- url: url,
59
- nested: nested,
54
+ type: type,
55
+ model: model,
56
+ name: method,
57
+ value: ( type == 'wysihtml5' ? Base64.encode64(output_value) : output_value ),
58
+ placeholder: placeholder,
59
+ classes: classes,
60
+ source: source,
61
+ url: url,
62
+ nested: nested,
60
63
  nid: nid
61
64
  }.merge(options)
62
-
65
+
63
66
  data.reject!{|_, value| value.nil?}
64
-
65
- content_tag tag, class: css, title: title, data: data do
66
- safe_join(source_values_for(value.try(:html_safe), source), tag(:br)) unless %w(select checklist).include? data[:type]
67
+
68
+ html_options.update({
69
+ class: css,
70
+ title: title,
71
+ data: data
72
+ })
73
+
74
+ content_tag tag, html_options do
75
+ safe_join(source_values_for(value, source), tag(:br)) unless %w(select checklist).include? data[:type]
67
76
  end
68
77
  else
69
- value = value.try(:html_safe) unless value.kind_of?(TrueClass) or value.kind_of?(FalseClass)
70
78
  error || safe_join(source_values_for(value, source), tag(:br))
71
79
  end
72
80
  end
73
-
81
+
74
82
  private
75
-
83
+
76
84
  def output_value_for(value)
77
85
  value = case value
78
86
  when TrueClass
@@ -86,22 +94,22 @@ module X
86
94
  else
87
95
  value.to_s
88
96
  end
89
-
97
+
90
98
  value
91
99
  end
92
-
100
+
93
101
  def source_values_for(value, source = nil)
94
102
  source ||= default_source_for value
95
-
103
+
96
104
  values = Array.wrap(value)
97
-
105
+
98
106
  if source && ( source.first.is_a?(String) || source.kind_of?(Hash) )
99
107
  values.map{|item| source[output_value_for item]}
100
108
  else
101
109
  values
102
110
  end
103
111
  end
104
-
112
+
105
113
  def default_type_for(value)
106
114
  case value
107
115
  when TrueClass, FalseClass
@@ -112,14 +120,14 @@ module X
112
120
  'text'
113
121
  end
114
122
  end
115
-
123
+
116
124
  def default_source_for(value)
117
125
  case value
118
126
  when TrueClass, FalseClass
119
127
  { '1' => 'Yes', '0' => 'No' }
120
128
  end
121
129
  end
122
-
130
+
123
131
  # helper method that take some shorthand source definitions and reformats them
124
132
  def format_source(source, value)
125
133
  formatted_source = case value
@@ -134,10 +142,10 @@ module X
134
142
  source
135
143
  end
136
144
  end
137
-
145
+
138
146
  formatted_source || source
139
147
  end
140
-
148
+
141
149
  end
142
150
  end
143
151
  end
@@ -72,9 +72,12 @@ $(function(){
72
72
 
73
73
  return deferred.promise();
74
74
  },
75
+
76
+ valueIsEncoded: true,
75
77
 
76
78
  value2html: function(value, element) {
77
79
  $(element).html(value);
80
+ this.valueIsEncoded = false;
78
81
  },
79
82
 
80
83
  html2value: function(html) {
@@ -82,8 +85,13 @@ $(function(){
82
85
  },
83
86
 
84
87
  value2input: function(value) {
88
+ value = (this.valueIsEncoded ? this.base65decode(value) : value);
85
89
  this.$input.data("wysihtml5").editor.setValue(value, true);
86
- },
90
+ },
91
+
92
+ base65decode: function(value) {
93
+ return decodeURIComponent( escape( atob( value.replace(/\s/g, ''))));
94
+ },
87
95
 
88
96
  activate: function() {
89
97
  this.$input.data("wysihtml5").editor.focus();
@@ -1,4 +1,4 @@
1
- jQuery ($) ->
1
+ unless EditableForm
2
2
  EditableForm = $.fn.editableform.Constructor
3
3
  EditableForm.prototype.saveWithUrlHook = (value) ->
4
4
  originalUrl = @options.url
@@ -6,46 +6,46 @@ jQuery ($) ->
6
6
  nestedName = @options.nested
7
7
  nestedId = @options.nid
8
8
  nestedLocale = @options.locale
9
-
9
+
10
10
  @options.url = (params) =>
11
11
  if typeof originalUrl == 'function'
12
12
  originalUrl.call(@options.scope, params)
13
13
  else if originalUrl? && @options.send != 'never'
14
14
  myName = params.name
15
15
  myValue = params.value
16
-
16
+
17
17
  # if there are no values in a list, add a blank value so Rails knows all values were removed
18
18
  if Object.prototype.toString.call(params.value) == '[object Array]' && params.value.length == 0
19
19
  params.value.push("")
20
-
20
+
21
21
  obj = {}
22
-
22
+
23
23
  if nestedName
24
24
  nested = {}
25
25
  nested[myName] = myValue
26
26
  nested['id'] = nestedId
27
-
27
+
28
28
  if nestedLocale
29
29
  nested['locale'] = nestedLocale
30
-
30
+
31
31
  obj[nestedName + '_attributes'] = nested
32
32
  else
33
33
  obj[myName] = myValue
34
-
34
+
35
35
  params[model] = obj
36
-
36
+
37
37
  delete params.name
38
38
  delete params.value
39
39
  delete params.pk
40
-
40
+
41
41
  $.ajax($.extend({
42
42
  url: originalUrl
43
43
  data: params
44
44
  type: 'PUT'
45
45
  dataType: 'json'
46
46
  }, @options.ajaxOptions))
47
-
47
+
48
48
  @saveWithoutUrlHook(value)
49
-
49
+
50
50
  EditableForm.prototype.saveWithoutUrlHook = EditableForm.prototype.save
51
51
  EditableForm.prototype.save = EditableForm.prototype.saveWithUrlHook
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: x-editable-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.3
4
+ version: 1.5.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jiri Kolarik
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-11 00:00:00.000000000 Z
11
+ date: 2015-09-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: railties
@@ -86,7 +86,7 @@ files:
86
86
  - vendor/assets/stylesheets/editable/bootstrap-editable.scss
87
87
  - vendor/assets/stylesheets/editable/bootstrap2-editable.scss
88
88
  - vendor/assets/stylesheets/editable/inputs-ext/address.css
89
- - vendor/assets/stylesheets/editable/inputs-ext/bootstrap-typehead.css
89
+ - vendor/assets/stylesheets/editable/inputs-ext/bootstrap-typeahead.css
90
90
  - vendor/assets/stylesheets/editable/inputs-ext/bootstrap-wysihtml5.css
91
91
  - vendor/assets/stylesheets/editable/inputs-ext/wysiwyg-color.css
92
92
  - vendor/assets/stylesheets/editable/jquery-editable.scss
@@ -112,7 +112,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
112
112
  version: '0'
113
113
  requirements: []
114
114
  rubyforge_project:
115
- rubygems_version: 2.2.2
115
+ rubygems_version: 2.4.8
116
116
  signing_key:
117
117
  specification_version: 4
118
118
  summary: X-editable for Rails