best_in_place 0.1.6 → 0.1.7

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -45,6 +45,7 @@ Options:
45
45
  - **:nil**: The nil param defines the content displayed in case no value is defined for that field. It can be something like "click me to edit".
46
46
  If not defined it will show *"-"*.
47
47
  - **:activator**: Is the DOM object that can activate the field. If not defined the user will making editable by clicking on it.
48
+ - **:sanitize**: True by default. If set to false the input/textarea will accept html tags.
48
49
 
49
50
 
50
51
  I created a [test_app](https://github.com/bernat/best_in_place/tree/master/test_app) and a running demo in heroku to test the features.
@@ -160,6 +161,7 @@ In order to use the Rails 3 gem, just add the following line to the gemfile:
160
161
  - v.0.1.5 **Attention: this release is not backwards compatible**. Changing params from list to option hash, helper's refactoring,
161
162
  fixing bug with objects inside namespaces, adding feature for passing an external activator handler as param. Adding feature
162
163
  of key ESCAPE for destroying changes before they are made permanent (in inputs and textarea).
164
+ - v.0.1.6-0.1.7 Avoiding request when the input is not modified and allowing the user to not sanitize input data.
163
165
 
164
166
  ##Authors, License and Stuff
165
167
 
@@ -1,3 +1,3 @@
1
1
  module BestInPlace
2
- VERSION = "0.1.6"
2
+ VERSION = "0.1.7"
3
3
  end
@@ -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: 23
4
+ hash: 21
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 6
10
- version: 0.1.6
9
+ - 7
10
+ version: 0.1.7
11
11
  platform: ruby
12
12
  authors:
13
13
  - Bernat Farrero