stay 0.1.2
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/Manifest +10 -0
- data/README.md +0 -0
- data/README.rdoc +0 -0
- data/Rakefile +15 -0
- data/lib/assets/javascripts/stay.js +116 -0
- data/lib/stay/controller_extensions.rb +20 -0
- data/lib/stay/engine.rb +9 -0
- data/lib/stay/helper.rb +34 -0
- data/lib/stay/string_extensions.rb +10 -0
- data/lib/stay.rb +11 -0
- data/stay.gemspec +35 -0
- metadata +92 -0
data/Manifest
ADDED
data/README.md
ADDED
File without changes
|
data/README.rdoc
ADDED
File without changes
|
data/Rakefile
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
require 'echoe'
|
4
|
+
|
5
|
+
Echoe.new('stay', '0.1.2') do |p|
|
6
|
+
p.description = "Form ajax helper with tinymce support"
|
7
|
+
p.summary = "Helper for building ajax form, inspired by best_in_place, with some modifications, support tinymce as editor"
|
8
|
+
p.url = "http://github.com/tejanium/stay"
|
9
|
+
p.author = "Teja Sophista"
|
10
|
+
p.email = "tejanium@yahoo.com"
|
11
|
+
p.ignore_pattern = ["tmp/*", "script/*"]
|
12
|
+
p.runtime_dependencies = ["jquery-rails", "tinymce-rails"]
|
13
|
+
end
|
14
|
+
|
15
|
+
Dir["#{File.dirname(__FILE__)}/tasks/*.rake"].sort.each { |ext| load ext }
|
@@ -0,0 +1,116 @@
|
|
1
|
+
jQuery.fn.stay = function(){
|
2
|
+
this.each(function(){
|
3
|
+
new Stay(this);
|
4
|
+
});
|
5
|
+
}
|
6
|
+
|
7
|
+
jQuery.fn.disable = function(){
|
8
|
+
this.attr("disabled", "")
|
9
|
+
}
|
10
|
+
|
11
|
+
jQuery.fn.enable = function(){
|
12
|
+
this.removeAttr("disabled")
|
13
|
+
}
|
14
|
+
|
15
|
+
function Stay(e){
|
16
|
+
this.init(e);
|
17
|
+
}
|
18
|
+
|
19
|
+
Stay.prototype = {
|
20
|
+
init: function(e){
|
21
|
+
var self = this;
|
22
|
+
console.info("Stay initializing...");
|
23
|
+
|
24
|
+
self.stayWrapper = jQuery(e);
|
25
|
+
self.stayObject = self.stayWrapper.find(".stay-object");
|
26
|
+
self.stayForm = self.stayWrapper.find(".stay-form");
|
27
|
+
self.stayFormForm = self.stayForm.find("form");
|
28
|
+
self.stayTinyMCE = self.stayForm.find(".stay-input.stay-tiny-mce")
|
29
|
+
self.tinyMCEUsed = self.stayTinyMCE.length > 0;
|
30
|
+
self.stayFormInput = self.stayFormForm.find(".stay-input");
|
31
|
+
|
32
|
+
self.tinyMCETheme = self.stayWrapper.data("tinymce-theme") || "simple"
|
33
|
+
|
34
|
+
self.activator_id = self.stayWrapper.data("activator")
|
35
|
+
self.activator = (typeof self.activator_id === "undefined") ? self.stayObject : jQuery(self.activator_id)
|
36
|
+
|
37
|
+
self.submitter_id = this.stayWrapper.data("submitter")
|
38
|
+
self.submitter = (typeof self.submitter_id === "undefined") ? self.stayFormInput : jQuery(self.submitter_id)
|
39
|
+
|
40
|
+
if(self.tinyMCEUsed){
|
41
|
+
console.info("TinyMCE found! Initailize editor...");
|
42
|
+
this.stayTinyMCE.tinymce({
|
43
|
+
theme: self.tinyMCETheme,
|
44
|
+
setup : function(ed) {
|
45
|
+
ed.onInit.add(function(ed, evt) {
|
46
|
+
var dom = ed.dom;
|
47
|
+
var doc = ed.getDoc();
|
48
|
+
if(typeof self.submitter_id === "undefined"){
|
49
|
+
tinymce.dom.Event.add(doc, 'blur', function(e) {
|
50
|
+
self.stayFormForm.submit();
|
51
|
+
});
|
52
|
+
}else{
|
53
|
+
self.submitter.click(function(){
|
54
|
+
self.stayFormForm.submit();
|
55
|
+
});
|
56
|
+
}
|
57
|
+
});
|
58
|
+
}
|
59
|
+
});
|
60
|
+
}
|
61
|
+
self.bindTrigger();
|
62
|
+
self.bindCallback();
|
63
|
+
|
64
|
+
console.info("Stay successfully initialized");
|
65
|
+
},
|
66
|
+
|
67
|
+
|
68
|
+
bindTrigger: function(){
|
69
|
+
var self = this;
|
70
|
+
|
71
|
+
console.log("Activator used: ");
|
72
|
+
console.log(self.activator);
|
73
|
+
|
74
|
+
self.activator.click(function(){
|
75
|
+
self.stayObject.hide();
|
76
|
+
self.stayForm.show();
|
77
|
+
if(self.tinyMCEUsed){
|
78
|
+
self.stayTinyMCE.tinymce().focus();
|
79
|
+
}else{
|
80
|
+
self.stayFormInput.focus();
|
81
|
+
|
82
|
+
var ev = (typeof self.submitter_id === "undefined") ? "blur" : "click";
|
83
|
+
console.log("Submitter event: " + ev + ", on:");
|
84
|
+
console.log(self.submitter);
|
85
|
+
|
86
|
+
self.submitter.bind(ev, function(){
|
87
|
+
self.stayFormForm.submit();
|
88
|
+
self.stayFormInput.disable();
|
89
|
+
});
|
90
|
+
}
|
91
|
+
});
|
92
|
+
},
|
93
|
+
|
94
|
+
bindCallback: function(){
|
95
|
+
var self = this;
|
96
|
+
|
97
|
+
self.stayFormForm.live("ajax:success", function(event, data, status, xhr){
|
98
|
+
self.stayFormInput.val(data.input);
|
99
|
+
self.stayObject.html(data.display);
|
100
|
+
self.reShowObject();
|
101
|
+
});
|
102
|
+
|
103
|
+
self.stayFormForm.live("ajax:error", function(event, data, status, xhr){
|
104
|
+
var cb = jQuery.parseJSON(data.responseText);
|
105
|
+
self.stayFormInput.val(cb.input);
|
106
|
+
self.stayObject.html(cb.display);
|
107
|
+
self.reShowObject();
|
108
|
+
});
|
109
|
+
},
|
110
|
+
|
111
|
+
reShowObject: function(){
|
112
|
+
this.stayForm.hide();
|
113
|
+
this.stayObject.show();
|
114
|
+
this.stayFormInput.enable();
|
115
|
+
}
|
116
|
+
};
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Stay
|
2
|
+
module ControllerExtensions
|
3
|
+
def stay_response(obj)
|
4
|
+
obj.changed? ? response_error(obj) : response_ok(obj)
|
5
|
+
end
|
6
|
+
|
7
|
+
private
|
8
|
+
def response_ok(obj)
|
9
|
+
field = params[obj.class.to_s.underscore].keys.first
|
10
|
+
value = obj.send(field.to_sym)
|
11
|
+
render json: { :display => value.to_html, :input => value }, status: :ok
|
12
|
+
end
|
13
|
+
|
14
|
+
def response_error(obj)
|
15
|
+
field = params[obj.class.to_s.underscore].keys.first
|
16
|
+
value = obj.send("#{field}_was".to_sym)
|
17
|
+
render json: { :display => value.to_html, :input => value }, status: :unprocessable_entity
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
data/lib/stay/engine.rb
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
module Stay
|
2
|
+
class Engine < Rails::Engine
|
3
|
+
initializer "setup for rails" do
|
4
|
+
ActionView::Base.send(:include, Stay::StayHelpers)
|
5
|
+
ActionController::Base.send(:include, Stay::ControllerExtensions)
|
6
|
+
String.send(:include, Stay::StringExtensions)
|
7
|
+
end
|
8
|
+
end
|
9
|
+
end
|
data/lib/stay/helper.rb
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
module Stay
|
2
|
+
module FormHelper
|
3
|
+
def generate_form(object, field, type = :text_field)
|
4
|
+
form_for(object, remote: true, format: :json) do |f|
|
5
|
+
if type == :tiny_mce || type.is_a?(Array)
|
6
|
+
f.send(:text_area, field, class: "stay-input stay-tiny-mce")
|
7
|
+
else
|
8
|
+
f.send(type, field, class: "stay-input")
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
ActionView::Helpers::FormHelper.send(:include, FormHelper)
|
15
|
+
|
16
|
+
module StayHelpers
|
17
|
+
def stay(record, field, opts = {})
|
18
|
+
html = "<span class='stay' "
|
19
|
+
html << "data-activator='#{ opts[:activator] }' " if opts[:activator]
|
20
|
+
html << "data-submitter='#{ opts[:submitter] }' " if opts[:submitter]
|
21
|
+
html << "data-tinymce-theme='#{ opts[:type] }' " if opts[:type] == :tiny_mce
|
22
|
+
html << "data-tinymce-theme='#{ opts[:type][1] }' " if opts[:type].is_a?(Array)
|
23
|
+
html << ">"
|
24
|
+
html << "<span class='stay-object'>"
|
25
|
+
html << (record.is_a?(Array) ? record.last : record).send(field).to_html
|
26
|
+
html << "</span>"
|
27
|
+
html << "<span class='stay-form' style='display:none'>"
|
28
|
+
html << generate_form(record, field, opts[:type])
|
29
|
+
html << "</span>"
|
30
|
+
html << "</span>"
|
31
|
+
html.html_safe
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
data/lib/stay.rb
ADDED
data/stay.gemspec
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = "stay"
|
5
|
+
s.version = "0.1.2"
|
6
|
+
|
7
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
|
+
s.authors = ["Teja Sophista"]
|
9
|
+
s.date = "2012-02-04"
|
10
|
+
s.description = "Form ajax helper with tinymce support"
|
11
|
+
s.email = "tejanium@yahoo.com"
|
12
|
+
s.extra_rdoc_files = ["README.md", "README.rdoc", "lib/assets/javascripts/stay.js", "lib/stay.rb", "lib/stay/controller_extensions.rb", "lib/stay/engine.rb", "lib/stay/helper.rb", "lib/stay/string_extensions.rb"]
|
13
|
+
s.files = ["Manifest", "README.md", "README.rdoc", "Rakefile", "lib/assets/javascripts/stay.js", "lib/stay.rb", "lib/stay/controller_extensions.rb", "lib/stay/engine.rb", "lib/stay/helper.rb", "lib/stay/string_extensions.rb", "stay.gemspec"]
|
14
|
+
s.homepage = "http://github.com/tejanium/stay"
|
15
|
+
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Stay", "--main", "README.md"]
|
16
|
+
s.require_paths = ["lib"]
|
17
|
+
s.rubyforge_project = "stay"
|
18
|
+
s.rubygems_version = "1.8.10"
|
19
|
+
s.summary = "Helper for building ajax form, inspired by best_in_place, with some modifications, support tinymce as editor"
|
20
|
+
|
21
|
+
if s.respond_to? :specification_version then
|
22
|
+
s.specification_version = 3
|
23
|
+
|
24
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
25
|
+
s.add_runtime_dependency(%q<jquery-rails>, [">= 0"])
|
26
|
+
s.add_runtime_dependency(%q<tinymce-rails>, [">= 0"])
|
27
|
+
else
|
28
|
+
s.add_dependency(%q<jquery-rails>, [">= 0"])
|
29
|
+
s.add_dependency(%q<tinymce-rails>, [">= 0"])
|
30
|
+
end
|
31
|
+
else
|
32
|
+
s.add_dependency(%q<jquery-rails>, [">= 0"])
|
33
|
+
s.add_dependency(%q<tinymce-rails>, [">= 0"])
|
34
|
+
end
|
35
|
+
end
|
metadata
ADDED
@@ -0,0 +1,92 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: stay
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.2
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Teja Sophista
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-02-04 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: jquery-rails
|
16
|
+
requirement: &13965200 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *13965200
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: tinymce-rails
|
27
|
+
requirement: &13964740 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
type: :runtime
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *13964740
|
36
|
+
description: Form ajax helper with tinymce support
|
37
|
+
email: tejanium@yahoo.com
|
38
|
+
executables: []
|
39
|
+
extensions: []
|
40
|
+
extra_rdoc_files:
|
41
|
+
- README.md
|
42
|
+
- README.rdoc
|
43
|
+
- lib/assets/javascripts/stay.js
|
44
|
+
- lib/stay.rb
|
45
|
+
- lib/stay/controller_extensions.rb
|
46
|
+
- lib/stay/engine.rb
|
47
|
+
- lib/stay/helper.rb
|
48
|
+
- lib/stay/string_extensions.rb
|
49
|
+
files:
|
50
|
+
- Manifest
|
51
|
+
- README.md
|
52
|
+
- README.rdoc
|
53
|
+
- Rakefile
|
54
|
+
- lib/assets/javascripts/stay.js
|
55
|
+
- lib/stay.rb
|
56
|
+
- lib/stay/controller_extensions.rb
|
57
|
+
- lib/stay/engine.rb
|
58
|
+
- lib/stay/helper.rb
|
59
|
+
- lib/stay/string_extensions.rb
|
60
|
+
- stay.gemspec
|
61
|
+
homepage: http://github.com/tejanium/stay
|
62
|
+
licenses: []
|
63
|
+
post_install_message:
|
64
|
+
rdoc_options:
|
65
|
+
- --line-numbers
|
66
|
+
- --inline-source
|
67
|
+
- --title
|
68
|
+
- Stay
|
69
|
+
- --main
|
70
|
+
- README.md
|
71
|
+
require_paths:
|
72
|
+
- lib
|
73
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
74
|
+
none: false
|
75
|
+
requirements:
|
76
|
+
- - ! '>='
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: '0'
|
79
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
80
|
+
none: false
|
81
|
+
requirements:
|
82
|
+
- - ! '>='
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
version: '1.2'
|
85
|
+
requirements: []
|
86
|
+
rubyforge_project: stay
|
87
|
+
rubygems_version: 1.8.10
|
88
|
+
signing_key:
|
89
|
+
specification_version: 3
|
90
|
+
summary: Helper for building ajax form, inspired by best_in_place, with some modifications,
|
91
|
+
support tinymce as editor
|
92
|
+
test_files: []
|