best_in_place 0.1.5 → 0.1.6

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.
data/lib/best_in_place.rb CHANGED
@@ -21,15 +21,16 @@ module BestInPlace
21
21
  collection = opts[:collection].to_json
22
22
  end
23
23
  out = "<span class='best_in_place'"
24
- out += " id='best_in_place_" + object.class.to_s.gsub("::", "_").underscore + "_#{field}"
25
- out += " data-url='" + (opts[:path].blank? ? url_for(object).to_s : url_for(opts[:path])) + "'"
26
- out += " data-object='" + object.class.to_s.gsub("::", "_").underscore + "'"
27
- out += " data-collection='#{collection}'" unless collection.blank?
28
- out += " data-attribute='#{field}'"
29
- out += " data-activator='#{opts[:activator].to_s}'" unless opts[:activator].blank?
30
- out += " data-type='#{opts[:type].to_s}'>"
31
- out += value.to_s
32
- out += "</span>"
24
+ out << " id='best_in_place_#{object.class.to_s.gsub("::", "_").underscore}_#{field}'"
25
+ out << " data-url='#{opts[:path].blank? ? url_for(object).to_s : url_for(opts[:path])}'"
26
+ out << " data-object='#{object.class.to_s.gsub("::", "_").underscore}'"
27
+ out << " data-collection='#{collection}'" unless collection.blank?
28
+ out << " data-attribute='#{field}'"
29
+ out << " data-activator='#{opts[:activator]}'" unless opts[:activator].blank?
30
+ out << " data-sanitize='#{!!opts[:sanitize]}'" unless opts[:sanitize].nil?
31
+ out << " data-type='#{opts[:type].to_s}'>"
32
+ out << value.to_s
33
+ out << "</span>"
33
34
  raw(out)
34
35
  end
35
36
  end
@@ -1,3 +1,3 @@
1
1
  module BestInPlace
2
- VERSION = "0.1.5"
2
+ VERSION = "0.1.6"
3
3
  end
@@ -38,7 +38,6 @@
38
38
  <td>Country</td>
39
39
  <td>
40
40
  <%= best_in_place @user, :country, {:type => :select, :collection => @countries} %>
41
- <!-- <%= @countries.inspect %> -->
42
41
  </td>
43
42
  </tr>
44
43
  <tr>
@@ -50,7 +49,7 @@
50
49
  <tr>
51
50
  <td>User description</td>
52
51
  <td>
53
- <%= best_in_place @user, :description, :type => :textarea %>
52
+ <%= best_in_place @user, :description, :type => :textarea, :sanitize => false %>
54
53
  </td>
55
54
  </table>
56
55
  <br />
@@ -43,6 +43,12 @@ BestInPlaceEditor.prototype = {
43
43
 
44
44
  update : function() {
45
45
  var editor = this
46
+ if (this.formType in {"input":1, "textarea":1} && this.getValue() == this.oldValue)
47
+ { // Avoid request if no change is made
48
+ editor.element.html(this.getValue())
49
+ $(this.activator).bind('click', {editor: this}, this.clickHandler)
50
+ return true
51
+ }
46
52
  editor.ajax({
47
53
  "type" : "post",
48
54
  "dataType" : "text",
@@ -74,6 +80,7 @@ BestInPlaceEditor.prototype = {
74
80
  self.objectName = self.objectName || jQuery(this).attr("data-object")
75
81
  self.attributeName = self.attributeName || jQuery(this).attr("data-attribute")
76
82
  })
83
+
77
84
  // Try Rails-id based if parents did not explicitly supply something
78
85
  self.element.parents().each(function(){
79
86
  var res
@@ -83,12 +90,16 @@ BestInPlaceEditor.prototype = {
83
90
  })
84
91
 
85
92
  // Load own attributes (overrides all others)
86
- self.url = self.element.attr("data-url") || self.url || document.location.pathname
87
- self.collection = self.element.attr("data-collection") || self.collection
88
- self.formType = self.element.attr("data-type") || self.formtype || "input"
89
- self.objectName = self.element.attr("data-object") || self.objectName
90
- self.attributeName = self.element.attr("data-attribute") || self.attributeName
91
- self.activator = self.element.attr("data-activator") || self.element
93
+ self.url = self.element.attr("data-url") || self.url || document.location.pathname
94
+ self.collection = self.element.attr("data-collection") || self.collection
95
+ self.formType = self.element.attr("data-type") || self.formtype || "input"
96
+ self.objectName = self.element.attr("data-object") || self.objectName
97
+ self.attributeName = self.element.attr("data-attribute") || self.attributeName
98
+ self.activator = self.element.attr("data-activator") || self.element
99
+
100
+ if (!self.element.attr("data-sanitize")) self.sanitize = true
101
+ else self.sanitize = (self.element.attr("data-sanitize") == "true")
102
+
92
103
 
93
104
  if ((self.formType == "select" || self.formType == "checkbox") && self.collection != null)
94
105
  {
@@ -106,10 +117,14 @@ BestInPlaceEditor.prototype = {
106
117
  },
107
118
 
108
119
  // Trim and Strips HTML from text
109
- sanitize : function(s) {
110
- var tmp = document.createElement("DIV")
111
- tmp.innerHTML = s
112
- return jQuery.trim(tmp.textContent||tmp.innerText)
120
+ sanitizeValue : function(s) {
121
+ if (this.sanitize)
122
+ {
123
+ var tmp = document.createElement("DIV")
124
+ tmp.innerHTML = s
125
+ s = tmp.textContent || tmp.innerText
126
+ }
127
+ return jQuery.trim(s)
113
128
  },
114
129
 
115
130
  /* Generate the data sent in the POST request */
@@ -162,7 +177,7 @@ BestInPlaceEditor.prototype = {
162
177
  BestInPlaceEditor.forms = {
163
178
  "input" : {
164
179
  activateForm : function() {
165
- var form = '<form class="form_in_place" action="javascript:void(0)" style="display:inline;"><input type="text" value="' + this.sanitize(this.oldValue) + '"></form>'
180
+ var form = '<form class="form_in_place" action="javascript:void(0)" style="display:inline;"><input type="text" value="' + this.sanitizeValue(this.oldValue) + '"></form>'
166
181
  this.element.html(form)
167
182
  this.element.find('input')[0].select()
168
183
  this.element.find("form").bind('submit', {editor: this}, BestInPlaceEditor.forms.input.submitHandler)
@@ -171,7 +186,7 @@ BestInPlaceEditor.forms = {
171
186
  },
172
187
 
173
188
  getValue : function() {
174
- return this.sanitize(this.element.find("input").val())
189
+ return this.sanitizeValue(this.element.find("input").val())
175
190
  },
176
191
 
177
192
  inputBlurHandler : function(event) {
@@ -202,7 +217,7 @@ BestInPlaceEditor.forms = {
202
217
  },
203
218
 
204
219
  getValue : function() {
205
- return this.sanitize(this.element.find("select").val())
220
+ return this.sanitizeValue(this.element.find("select").val())
206
221
  },
207
222
 
208
223
  blurHandler : function(event) {
@@ -225,14 +240,14 @@ BestInPlaceEditor.forms = {
225
240
 
226
241
  "textarea" : {
227
242
  activateForm : function() {
228
- this.element.html('<form action="javascript:void(0)" style="display:inline;"><textarea>' + this.sanitize(this.oldValue) + '</textarea></form>')
243
+ this.element.html('<form action="javascript:void(0)" style="display:inline;"><textarea>' + this.sanitizeValue(this.oldValue) + '</textarea></form>')
229
244
  this.element.find('textarea')[0].select()
230
245
  this.element.find("textarea").bind('blur', {editor: this}, BestInPlaceEditor.forms.textarea.blurHandler)
231
246
  this.element.find("textarea").bind('keyup', {editor: this}, BestInPlaceEditor.forms.textarea.keyupHandler)
232
247
  },
233
248
 
234
249
  getValue : function() {
235
- return this.sanitize(this.element.find("textarea").val())
250
+ return this.sanitizeValue(this.element.find("textarea").val())
236
251
  },
237
252
 
238
253
  blurHandler : function(event) {
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: best_in_place
3
3
  version: !ruby/object:Gem::Version
4
- hash: 17
4
+ hash: 23
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 5
10
- version: 0.1.5
9
+ - 6
10
+ version: 0.1.6
11
11
  platform: ruby
12
12
  authors:
13
13
  - Bernat Farrero