simple_update_field 1.2.0 → 2.0.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.
data/README.creole CHANGED
@@ -21,7 +21,7 @@ based resource calls.
21
21
  }}}
22
22
  * You will need to re-start a running server for the Gemfile change to take effect
23
23
  === View Side
24
- * There are 3 custom attributes that will be used. An Example follows
24
+ * There are 3 custom attributes on a *span* that will be used. An Example follows
25
25
  {{{
26
26
  <div class='phrase'>
27
27
  <span editable-resource-attribute="text"
@@ -86,6 +86,7 @@ There are 2 steps to integration with javascript.
86
86
  //= require simple_update_field
87
87
  }}}
88
88
  * The second step is to invoke the the Simple Update Field on the appropriate elements
89
+ ** this can be done in application.js aswell or in a new file in the app/assets/javascript directory
89
90
  ** A CSS selector of the jQuery style is assumed.
90
91
  ## For the above Phrase view code this could work :
91
92
  {{{
@@ -102,7 +103,7 @@ $(document).ready(function() {
102
103
 
103
104
 
104
105
  == Roadmap
105
-
106
+ * Have it work for any element without modifying structure (ie needs no wrapper)
106
107
  * form field helper
107
108
  * error handling of ajax call
108
109
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.2.0
1
+ 2.0.0
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "simple_update_field"
8
- s.version = "1.2.0"
8
+ s.version = "2.0.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-04-25"
12
+ s.date = "2012-04-27"
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,38 +1,39 @@
1
1
  SimpleUpdateField = function(selector) {
2
2
  var self = this
3
3
  self.selector = selector
4
-
5
- var create_tag_with = function(tag_name,node) {
6
- var elem = $('<'+tag_name+'/>');
7
- var attributes = node.get(0).attributes
8
- for(var i = attributes.length-1; i >=0;i--) {
9
- elem.attr(attributes[i].nodeName, attributes[i].nodeValue)
4
+ self.current_input = function () {
5
+ var last_clicked = $(self.selector + ' > input')
6
+ if (last_clicked.size() == 0) {
7
+ return null
8
+ } else {
9
+ return last_clicked
10
10
  }
11
-
12
- elem.data(node.data())
13
- elem.data('editable-was',node.get(0).tagName)
14
-
15
- node.replaceWith(function() {
16
- return elem
17
- })
18
- return elem
19
11
  }
12
+ // Given a node with text() create an input that has the nodes text as it's value
13
+ // and record a memo about what the original-text is
14
+ //
15
+ var create_input_from = function(node) {
20
16
 
21
- var replace_input_from = function(node) {
22
- var element = create_tag_with('input',node)
23
-
24
- element.data('original-text',node.text())
25
- element.val(node.text().trim())
26
-
27
- return element
17
+ var input_node = $("<input/>")
18
+ var attributes = node.get(0).attributes
19
+ for(var i = attributes.length-1; i >=0; i--) {
20
+ if(attributes[i].nodeName.indexOf('editable') == 0) {
21
+ input_node.attr(attributes[i].nodeName, attributes[i].nodeValue)
22
+ }
23
+ }
24
+ input_node.data('original-text',node.text())
25
+ input_node.val(node.text().trim())
28
26
 
27
+ return input_node
29
28
  }
30
29
 
31
30
  self.begin_edit_event = function(event) {
32
31
  var clicked_node = $(this);
33
- var new_node = replace_input_from(clicked_node);
34
- install_edit_complete_notions(new_node)
35
- new_node.focus();
32
+ var input_node = create_input_from(clicked_node);
33
+ clicked_node.text("")
34
+ clicked_node.append(input_node)
35
+ install_edit_complete_notions(input_node)
36
+ input_node.focus();
36
37
  }
37
38
  var is_rollback_changes = function() {
38
39
  if (self.last_keydown_event) {
@@ -66,10 +67,11 @@ SimpleUpdateField = function(selector) {
66
67
  }
67
68
  }
68
69
  self.rollback_edit_event = function(event) {
69
- var finished_node = $(this)
70
- var element = create_tag_with(finished_node.data('editable-was'),finished_node)
71
- element.text(element.data('original-text'))
72
- install_edit_notions(element)
70
+ var finished_input_node = $(this)
71
+
72
+ finished_input_node.parent().text(finished_input_node.data('original-text')) // the input we create had a memo about it's original text
73
+ finished_input_node.remove() // remove the input field that we created such that the node is unchanged
74
+
73
75
  }
74
76
  self.commit_to_remote_resource = function(node) {
75
77
  uri = node.attr('editable-resource-uri')
@@ -82,26 +84,30 @@ SimpleUpdateField = function(selector) {
82
84
  data[name][attribute] = node.val().trim()
83
85
  $.ajax({url:uri,data:data,type:'PUT'})
84
86
  }
87
+
85
88
  self.complete_edit_event = function(event) {
86
-
87
- var finished_node = $(this)
88
- commit_to_remote_resource(finished_node)
89
- var element = create_tag_with(finished_node.data('editable-was'),finished_node)
90
- element.text(finished_node.val())
91
- install_edit_notions(element)
92
-
89
+
90
+ var finished_input_node = $(this)
91
+ var parent = finished_input_node.parent();
92
+
93
+ commit_to_remote_resource(finished_input_node)
94
+ parent.text(finished_input_node.val()) // set the elements character data back to text
95
+
96
+ finished_input_node.remove() // remove the input field that we created such that the node is unchanged
97
+
98
+
93
99
  // If tab key was hit during the edit phase
94
100
  // we want to redirect this blur to be a click on the next
95
101
  // sibling
96
102
  if(is_blur_tab_redirect()) {
97
- move_to_next_sibling(element)
103
+ move_to_next_sibling(parent)
98
104
  }
99
105
 
100
106
  // Cleanup - cross event state
101
107
  // there was no last keydown event
102
108
  self.last_keydown_event = undefined;
103
109
  }
104
-
110
+
105
111
  var install_edit_notions = function(selector) {
106
112
 
107
113
  $(selector).bind('click.editable',begin_edit_event)
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: 1.2.0
4
+ version: 2.0.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-04-25 00:00:00.000000000Z
12
+ date: 2012-04-27 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &70164641191780 !ruby/object:Gem::Requirement
16
+ requirement: &70219322332160 !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: *70164641191780
24
+ version_requirements: *70219322332160
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rdoc
27
- requirement: &70164641188880 !ruby/object:Gem::Requirement
27
+ requirement: &70219322329300 !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: *70164641188880
35
+ version_requirements: *70219322329300
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: bundler
38
- requirement: &70164641186320 !ruby/object:Gem::Requirement
38
+ requirement: &70219322306340 !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: *70164641186320
46
+ version_requirements: *70219322306340
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: jeweler
49
- requirement: &70164641165080 !ruby/object:Gem::Requirement
49
+ requirement: &70219322304760 !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: *70164641165080
57
+ version_requirements: *70219322304760
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: 2576101730221014213
95
+ hash: 2017553997290528289
96
96
  required_rubygems_version: !ruby/object:Gem::Requirement
97
97
  none: false
98
98
  requirements: