simple_update_field 2.2.0 → 2.3.0

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.
@@ -8,6 +8,30 @@ simple_update_field is implemented internally with jquery
8
8
  == Design Goals
9
9
 
10
10
  Simple_update_field is designed to extend the browsers behaviour in a un-surprising manner.
11
+ == Callback Guide
12
+
13
+ You may wish to be able to change the rules around when to, or when not to do an update.
14
+
15
+ A callback named 'before_update' is provided - you can install it when you invoke SimpleUpdateField.
16
+
17
+ For example you may wish to have a confirmation dialog:
18
+
19
+ {{{
20
+
21
+ var my_confirm_handler = function() {
22
+ var input = this
23
+ return confirm("Update the database with " + input.value +" ?")
24
+ }
25
+
26
+ $(document).ready(function() {
27
+ SimpleUpdateField('.phrase .text'
28
+ ,{
29
+ before_update:my_confirm_handler
30
+ })
31
+
32
+ })
33
+
34
+ }}}
11
35
 
12
36
  == Styling Guide
13
37
 
@@ -145,7 +169,7 @@ $(document).ready(function() {
145
169
  * error handling of ajax call
146
170
 
147
171
  == Recent Changes
148
-
172
+ * before_update callback - return true to continue , false to stop
149
173
  * Only commit changed fields to the remote-resource-uri
150
174
  * Trim leading and trailng whitespace of entered data or original text data
151
175
  * Have it work for any element without modifying structure (ie needs no wrapper)
@@ -168,6 +192,7 @@ Curtis Schofield
168
192
 
169
193
  Contributors
170
194
  Judy Tuna
195
+ Hollin Wilkins
171
196
 
172
197
  Copyright (c) 2012 Blazing Cloud. See LICENSE.txt for
173
198
  further details.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.2.0
1
+ 2.3.0
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "simple_update_field"
8
- s.version = "2.2.0"
8
+ s.version = "2.3.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Curtis Schofield"]
12
- s.date = "2012-05-04"
12
+ s.date = "2012-05-09"
13
13
  s.description = "Your resources text attributes will gain inplace update ability with keybindings for quick editing"
14
14
  s.email = "curtis@ram9.cc"
15
15
  s.extra_rdoc_files = [
@@ -1,5 +1,5 @@
1
1
  //1
2
- SimpleUpdateField = function(selector) {
2
+ SimpleUpdateField = function(selector, options) {
3
3
  var self = this
4
4
  /*
5
5
  * This is used internally to track what key has been
@@ -52,7 +52,7 @@ SimpleUpdateField = function(selector) {
52
52
  }
53
53
  return false
54
54
  }
55
- var is_blur_tab_redirect = function () {
55
+ var is_tab_redirect = function () {
56
56
  if (self.last_keydown_event) {
57
57
  if (self.last_keydown_event.keyCode == SimpleUpdateField.TAB_KEY) {
58
58
  return true
@@ -87,45 +87,62 @@ SimpleUpdateField = function(selector) {
87
87
  $.ajax({url:uri,data:data,type:'PUT'})
88
88
  }
89
89
 
90
- var commit_if_changed = function(input_node) {
90
+ self.commit_if_changed = function(input_node) {
91
91
  if(input_node.data('original-text') != input_node.val().trim()) {
92
92
  commit_to_remote_resource(input_node)
93
93
  }
94
94
  }
95
95
 
96
- var editable_restoration = function(element,text_value) {
97
- element.text(text_value)
98
- install_edit_notions(element)
96
+ var commit_if_callback_true = function(original_element,finished_input_node) {
97
+ var continue_commit = true
98
+ if (options && options.before_update)
99
+ continue_commit = options.before_update.apply(finished_input_node.get(0))
100
+ if (continue_commit) {
101
+ commit_if_changed(finished_input_node)
102
+ }
103
+ return continue_commit
99
104
  }
100
105
 
101
- var rollback_edit_event = function(event) {
102
- var finished_input_node = $(this)
103
- var parent = finished_input_node.parent();
104
-
105
- editable_restoration(parent,finished_input_node.data('original-text')) // the input we create had a memo about it's original text
106
+ var editable_restoration = function(original_element,text_value) {
107
+ original_element.text(text_value)
108
+ install_edit_notions(original_element)
106
109
  }
107
110
 
108
- var complete_edit_event = function(event) {
109
-
110
- var finished_input_node = $(this)
111
- var parent = finished_input_node.parent();
112
-
113
- commit_if_changed(finished_input_node)
114
-
115
- editable_restoration(parent,finished_input_node.val())
111
+ var rollback_edit_event = function(event) {
112
+ var parent = $(this).parent();
113
+ rollback_edit(parent, $(this))
114
+ }
116
115
 
116
+ var rollback_edit = function(original_element, finished_input_node) {
117
+ editable_restoration(original_element, finished_input_node.data('original-text'))
118
+ }
119
+
120
+ var complete_edit = function(original_element,finished_input_node) {
121
+ if(commit_if_callback_true(original_element,finished_input_node) ) {
122
+ editable_restoration(original_element,finished_input_node.val())
123
+ }
124
+ else {
125
+ editable_restoration(original_element, finished_input_node.data('original-text'))
126
+ }
117
127
  // If tab key was hit during the edit phase
118
- // we want to redirect this blur to be a
128
+ // we want to redirect this to be a
119
129
  // click on the next sibling
120
- if(is_blur_tab_redirect()) {
121
- move_to_next_sibling(parent)
130
+ if(is_tab_redirect()) {
131
+ move_to_next_sibling(original_element)
122
132
  }
123
-
124
133
  // Cleanup - cross event state
125
134
  // there was no last keydown event
126
135
  self.last_keydown_event = undefined;
127
136
  }
128
137
 
138
+ var complete_edit_event = function(event) {
139
+
140
+ var finished_input_node = $(this)
141
+ var original_element = finished_input_node.parent();
142
+
143
+ complete_edit(original_element,finished_input_node)
144
+ }
145
+
129
146
  var install_edit_notions = function(selector) {
130
147
 
131
148
  $(selector).bind('click.editable',begin_edit_event)
@@ -148,8 +165,8 @@ SimpleUpdateField = function(selector) {
148
165
 
149
166
  $(selector).bind('keydown.editable',function(e) {
150
167
  self.last_keydown_event = e
151
- if(is_blur_tab_redirect()) {
152
- $(this).trigger('blur.editable')
168
+ if(is_tab_redirect()) {
169
+ $(this).trigger('complete.editable')
153
170
  return false; // manually handle tab - no event propigation
154
171
  }
155
172
  if(is_rollback_changes()) {
@@ -159,7 +176,7 @@ SimpleUpdateField = function(selector) {
159
176
  return true // allow default propigation
160
177
  })
161
178
 
162
- $(selector).bind('blur.editable',complete_edit_event)
179
+ $(selector).bind('complete.editable',complete_edit_event)
163
180
  $(selector).bind('rollback.editable',rollback_edit_event)
164
181
  }
165
182
  var annotate_editable_with_position = function(selector) {
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simple_update_field
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.0
4
+ version: 2.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-05-04 00:00:00.000000000Z
12
+ date: 2012-05-09 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &70198250446640 !ruby/object:Gem::Requirement
16
+ requirement: &70104163814740 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 2.8.0
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70198250446640
24
+ version_requirements: *70104163814740
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rdoc
27
- requirement: &70198250445360 !ruby/object:Gem::Requirement
27
+ requirement: &70104163813460 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '3.12'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70198250445360
35
+ version_requirements: *70104163813460
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: bundler
38
- requirement: &70198250443680 !ruby/object:Gem::Requirement
38
+ requirement: &70104163812080 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 1.1.0
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70198250443680
46
+ version_requirements: *70104163812080
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: jeweler
49
- requirement: &70198250442160 !ruby/object:Gem::Requirement
49
+ requirement: &70104163810880 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,7 +54,7 @@ dependencies:
54
54
  version: 1.8.3
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70198250442160
57
+ version_requirements: *70104163810880
58
58
  description: Your resources text attributes will gain inplace update ability with
59
59
  keybindings for quick editing
60
60
  email: curtis@ram9.cc
@@ -92,7 +92,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
92
92
  version: '0'
93
93
  segments:
94
94
  - 0
95
- hash: -1261042367084871670
95
+ hash: 4112278823148699834
96
96
  required_rubygems_version: !ruby/object:Gem::Requirement
97
97
  none: false
98
98
  requirements: