kenny_dialoggins 0.1.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/.specification +89 -0
- data/MIT-LICENSE +20 -0
- data/README.rdoc +97 -0
- data/Rakefile +46 -0
- data/VERSION +1 -0
- data/generators/kenny_dialoggins_assets/kenny_dialoggins_assets_generator.rb +8 -0
- data/generators/kenny_dialoggins_assets/templates/kenny_dialoggins.css +20 -0
- data/generators/kenny_dialoggins_assets/templates/kenny_dialoggins.js +268 -0
- data/init.rb +1 -0
- data/kenny_dialoggins.gemspec +55 -0
- data/lib/kenny_dialoggins/helpers.rb +79 -0
- data/lib/kenny_dialoggins.rb +10 -0
- data/rails/init.rb +1 -0
- data/test/kenny_dialoggins/helpers_test.rb +89 -0
- data/test/test_helper.rb +16 -0
- metadata +79 -0
data/.specification
ADDED
@@ -0,0 +1,89 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: kenny_dialoggins
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 1
|
8
|
+
- 0
|
9
|
+
version: 0.1.0
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Coroutine
|
13
|
+
- Tim Lowrimore
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2010-03-26 00:00:00 -05:00
|
19
|
+
default_executable:
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
name: actionpack
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
requirements:
|
26
|
+
- - ">="
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
segments:
|
29
|
+
- 0
|
30
|
+
version: "0"
|
31
|
+
type: :runtime
|
32
|
+
version_requirements: *id001
|
33
|
+
description: Kenny Dialoggins allows you to include scriptaculous dialogs in Rails applications using the same syntax employed for rendering partials.
|
34
|
+
email: "@coroutine.com"
|
35
|
+
executables: []
|
36
|
+
|
37
|
+
extensions: []
|
38
|
+
|
39
|
+
extra_rdoc_files:
|
40
|
+
- README.rdoc
|
41
|
+
files:
|
42
|
+
- MIT-LICENSE
|
43
|
+
- README.rdoc
|
44
|
+
- Rakefile
|
45
|
+
- VERSION
|
46
|
+
- generators/kenny_dialoggins_assets/kenny_dialoggins_assets_generator.rb
|
47
|
+
- generators/kenny_dialoggins_assets/templates/kenny_dialoggins.css
|
48
|
+
- generators/kenny_dialoggins_assets/templates/kenny_dialoggins.js
|
49
|
+
- init.rb
|
50
|
+
- kenny_dialoggins.gemspec
|
51
|
+
- lib/kenny_dialoggins.rb
|
52
|
+
- lib/kenny_dialoggins/helpers.rb
|
53
|
+
- rails/init.rb
|
54
|
+
- test/kenny_dialoggins_test.rb
|
55
|
+
- test/test_helper.rb
|
56
|
+
has_rdoc: true
|
57
|
+
homepage: http://github.com/coroutine/kenny_dialoggins
|
58
|
+
licenses: []
|
59
|
+
|
60
|
+
post_install_message:
|
61
|
+
rdoc_options:
|
62
|
+
- --charset=UTF-8
|
63
|
+
require_paths:
|
64
|
+
- lib
|
65
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - ">="
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
segments:
|
70
|
+
- 0
|
71
|
+
version: "0"
|
72
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - ">="
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
segments:
|
77
|
+
- 0
|
78
|
+
version: "0"
|
79
|
+
requirements: []
|
80
|
+
|
81
|
+
rubyforge_project:
|
82
|
+
rubygems_version: 1.3.6
|
83
|
+
signing_key:
|
84
|
+
specification_version: 3
|
85
|
+
summary: Dead simple, beautiful dialogs for Rails.
|
86
|
+
test_files:
|
87
|
+
- test/kenny_dialoggins_test.rb
|
88
|
+
- test/test_helper.rb
|
89
|
+
|
data/MIT-LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2010 Coroutine LLC
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.rdoc
ADDED
@@ -0,0 +1,97 @@
|
|
1
|
+
= Kenny Dialoggins
|
2
|
+
|
3
|
+
Hey, there.
|
4
|
+
|
5
|
+
I'm Kenny Dialoggins. A lot of people confuse me with the singer who rose to fame in the 1980s, but
|
6
|
+
I'm a different guy altogether.
|
7
|
+
|
8
|
+
Don't get me wrong, that Kenny and I are into a lot of the same things, like manly beards and Miami Vice-
|
9
|
+
inspired attire. But while that Kenny spent his career focused on synth beats and lyrics that cut to
|
10
|
+
the bone, I only care about one thing.
|
11
|
+
|
12
|
+
<b>Freakin' Dialogs</b>.
|
13
|
+
|
14
|
+
If you're a Rails developer who wants to use dialogs but doesn't want to mess with Javascript, you
|
15
|
+
might want to prep your best friend for some bad news. We're about to become <b>tight</b>.
|
16
|
+
|
17
|
+
Let me lay it out for you. If you want my dialog in one of your views, here's what you do:
|
18
|
+
|
19
|
+
# Create the dialog
|
20
|
+
<%= render_dialog :danger_zone_dialog, :partial => "danger_zone", :locals => { :pilot => current_user } %>
|
21
|
+
|
22
|
+
# Invoke the dialog
|
23
|
+
<%= link_to_function "Take Me to the Danger Zone", show_dialog(:danger_zone_dialog) %>
|
24
|
+
|
25
|
+
That's pretty much it. Did you notice how <tt>render_dialog</tt> takes the same options as
|
26
|
+
<tt>render</tt>? The content for your dialog can just be a regular old partial.
|
27
|
+
|
28
|
+
You like that. I can tell. Don't fight it.
|
29
|
+
|
30
|
+
Wait, you want more details? You got it, buddy.
|
31
|
+
|
32
|
+
<tt>render_dialog</tt> always needs a unique id for its first argument. After that, it will
|
33
|
+
take the same options as <tt>ActionController::Base#render</tt>. It'll also take a few more, namely:
|
34
|
+
|
35
|
+
* <tt>:before_show</tt> - a Javascript function that will be invoked before the dialog is shown
|
36
|
+
* <tt>:after_show</tt> - a Javascript function that will be invoked after the dialog has become visible
|
37
|
+
* <tt>:before_hide</tt> - a Javascript function that will be invoked before the dialog is hidden
|
38
|
+
* <tt>:after_hide</tt> - a Javascript function that will be invoked after the dialog has been hidden
|
39
|
+
|
40
|
+
Here's an example using the <tt>before_show</tt> option:
|
41
|
+
|
42
|
+
# Create the dialog with a callback
|
43
|
+
<%= render_dialog :footloose_dialog, :partial => "footloose", :before_show => "function() { alert('Everybody get footloose!'); }" %>
|
44
|
+
|
45
|
+
# Invoke the dialog
|
46
|
+
<%= link_to_function "Dance party!", show_dialog(:footloose_dialog) %>
|
47
|
+
|
48
|
+
If you need more help than that, maybe you should just look at the source code. There are a ton of comments
|
49
|
+
in there.
|
50
|
+
|
51
|
+
|
52
|
+
Your pal,
|
53
|
+
|
54
|
+
Kenny Dialoggins
|
55
|
+
|
56
|
+
|
57
|
+
|
58
|
+
|
59
|
+
== Helpful Links
|
60
|
+
|
61
|
+
* <b>Repository:</b> http://github.com/coroutine/kenny_dialoggins
|
62
|
+
* <b>Gem:</b> http://rubygems.org/gems/kenny_dialoggins
|
63
|
+
* <b>Authors:</b> http://coroutine.com
|
64
|
+
|
65
|
+
|
66
|
+
|
67
|
+
== Prerequisites
|
68
|
+
|
69
|
+
To take you to the danger zone, I need my kick ass backup singers Prototype and Scriptaculous.
|
70
|
+
|
71
|
+
But since I was designed as a Rails extension, chances are you already have my boys
|
72
|
+
in the mix.
|
73
|
+
|
74
|
+
* <b>Prototype:</b> http://prototypejs.org
|
75
|
+
* <b>Scriptaculous:</b> http://script.aculo.us
|
76
|
+
|
77
|
+
|
78
|
+
|
79
|
+
== Installation & Generators
|
80
|
+
|
81
|
+
Install me from RubyGems.org and add a gem dependency in your configuration file.
|
82
|
+
|
83
|
+
$ sudo gem install kenny_dialoggins
|
84
|
+
|
85
|
+
Or install me as a plugin.
|
86
|
+
|
87
|
+
$ script/plugin install git://github.com/coroutine/kenny_dialoggins.git
|
88
|
+
|
89
|
+
Then, generate the stylesheet and javascript files I need.
|
90
|
+
|
91
|
+
$ script/generate kenny_dialoggins_assets
|
92
|
+
|
93
|
+
|
94
|
+
|
95
|
+
== License
|
96
|
+
|
97
|
+
Copyright (c) 2010 {Coroutine LLC}[http://coroutine.com].
|
data/Rakefile
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'rake'
|
2
|
+
require 'rake/testtask'
|
3
|
+
require 'rake/rdoctask'
|
4
|
+
require 'jeweler'
|
5
|
+
|
6
|
+
|
7
|
+
desc 'Default: run tests.'
|
8
|
+
task :default => [:test]
|
9
|
+
|
10
|
+
|
11
|
+
desc 'Test the plugin.'
|
12
|
+
Rake::TestTask.new(:test) do |t|
|
13
|
+
t.libs << 'lib'
|
14
|
+
t.pattern = 'test/**/*_test.rb'
|
15
|
+
t.verbose = true
|
16
|
+
end
|
17
|
+
|
18
|
+
|
19
|
+
desc 'Generate documentation for the plugin.'
|
20
|
+
Rake::RDocTask.new(:rdoc) do |rdoc|
|
21
|
+
rdoc.rdoc_dir = 'rdoc'
|
22
|
+
rdoc.title = 'kenny_dialoggins'
|
23
|
+
rdoc.options << '--line-numbers --inline-source'
|
24
|
+
rdoc.rdoc_files.include('README')
|
25
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
26
|
+
end
|
27
|
+
|
28
|
+
|
29
|
+
begin
|
30
|
+
Jeweler::Tasks.new do |gemspec|
|
31
|
+
gemspec.authors = ["Coroutine", "Tim Lowrimore", "John Dugan"]
|
32
|
+
gemspec.description = "Kenny Dialoggins allows you to include scriptaculous dialogs in Rails applications using the same syntax employed for rendering partials."
|
33
|
+
gemspec.email = "gems@coroutine.com"
|
34
|
+
gemspec.homepage = "http://github.com/coroutine/kenny_dialoggins"
|
35
|
+
gemspec.name = "kenny_dialoggins"
|
36
|
+
gemspec.summary = "Dead simple, beautiful dialogs for Rails."
|
37
|
+
|
38
|
+
gemspec.files.include("lib/**/*.rb")
|
39
|
+
gemspec.files.include("test/**/*.rb")
|
40
|
+
end
|
41
|
+
Jeweler::GemcutterTasks.new
|
42
|
+
rescue LoadError
|
43
|
+
puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
|
44
|
+
end
|
45
|
+
|
46
|
+
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.1.0
|
@@ -0,0 +1,20 @@
|
|
1
|
+
/**
|
2
|
+
* These styles are provided as examples. Feel free to change them however you like.
|
3
|
+
*/
|
4
|
+
.kenny_dialoggins_dialog {
|
5
|
+
position: absolute;
|
6
|
+
padding: 1em;
|
7
|
+
border: 1px solid #BBB;
|
8
|
+
background: #FFF;
|
9
|
+
z-index: 2;
|
10
|
+
-moz-box-shadow: 4px 4px 16px rgba(0,0,0,0.5);
|
11
|
+
-webkit-box-shadow: 4px 4px 16px rgba(0,0,0,0.5);
|
12
|
+
filter: alpha(opacity=100); /* really only needed if ie6 suport is enabled */
|
13
|
+
}
|
14
|
+
|
15
|
+
.kenny_dialoggins_dialog_frame {
|
16
|
+
position: absolute;
|
17
|
+
border: none;
|
18
|
+
z-index: 1;
|
19
|
+
filter: alpha(opacity=0); /* really only needed if ie6 suport is enabled */
|
20
|
+
}
|
@@ -0,0 +1,268 @@
|
|
1
|
+
/**
|
2
|
+
* Kenny Dialoggins creates pretty dialogs using prototype and
|
3
|
+
* scriptaculous. These functions work with ActionView
|
4
|
+
* helpers to provide dialog components that can be programmed
|
5
|
+
* using the same syntax as rendering partials.
|
6
|
+
*
|
7
|
+
*
|
8
|
+
* Brought to you by the good folks at Coroutine. Hire us!
|
9
|
+
* http://coroutine.com
|
10
|
+
*/
|
11
|
+
var KennyDialoggins = {}
|
12
|
+
|
13
|
+
|
14
|
+
/**
|
15
|
+
* This property governs whether or not KD bothers creating and
|
16
|
+
* managing a blocking iframe to accommodate ie6.
|
17
|
+
*
|
18
|
+
* Defaults to false, but override if you must.
|
19
|
+
*/
|
20
|
+
KennyDialoggins.SUPPORT_IE6_BULLSHIT = false;
|
21
|
+
|
22
|
+
|
23
|
+
|
24
|
+
/**
|
25
|
+
* This function puts you on the highway to the danger
|
26
|
+
* zone by defining the KD dialog class.
|
27
|
+
*/
|
28
|
+
KennyDialoggins.Dialog = function(content, options) {
|
29
|
+
options = options || {};
|
30
|
+
|
31
|
+
this._element = null;
|
32
|
+
this._frame = null;
|
33
|
+
this._hideListener = this._generateHideListener();
|
34
|
+
this._is_showing = false;
|
35
|
+
|
36
|
+
this._beforeShow = options["beforeShow"] || Prototype.emptyFunction
|
37
|
+
this._afterShow = options["afterShow"] || Prototype.emptyFunction
|
38
|
+
this._beforeHide = options["beforeHide"] || Prototype.emptyFunction
|
39
|
+
this._afterHide = options["afterHide"] || Prototype.emptyFunction
|
40
|
+
|
41
|
+
this._makeDialog();
|
42
|
+
this.setContent(content);
|
43
|
+
document.body.appendChild(this._element);
|
44
|
+
|
45
|
+
if (KennyDialoggins.SUPPORT_IE6_BULLSHIT) {
|
46
|
+
this._makeFrame();
|
47
|
+
document.body.appendChild(this._frame);
|
48
|
+
}
|
49
|
+
}
|
50
|
+
|
51
|
+
|
52
|
+
|
53
|
+
// ----------------------------------------------------------------------------
|
54
|
+
// Class methods
|
55
|
+
// ----------------------------------------------------------------------------
|
56
|
+
|
57
|
+
/**
|
58
|
+
* This hash maps the dialog id to the dialog object itself. It allows the Rails
|
59
|
+
* code a way to specify the js object it wishes to invoke.
|
60
|
+
*/
|
61
|
+
KennyDialoggins.Dialog.instances = {};
|
62
|
+
|
63
|
+
|
64
|
+
/**
|
65
|
+
* This hash is a convenience that allows us to write slightly denser code when
|
66
|
+
* calculating the dialog's position.
|
67
|
+
*/
|
68
|
+
KennyDialoggins.Dialog._POSITION_FN_MAP = $H({
|
69
|
+
left: "getWidth",
|
70
|
+
top: "getHeight"
|
71
|
+
});
|
72
|
+
|
73
|
+
|
74
|
+
/**
|
75
|
+
* This method shows the dialog with the corresponding id.
|
76
|
+
*
|
77
|
+
* @param {String} id The id value of the dialog element (also the key
|
78
|
+
* in the instances hash.)
|
79
|
+
*
|
80
|
+
* @return {Object} an instance of KennyDialoggins.Dialog
|
81
|
+
*
|
82
|
+
*/
|
83
|
+
KennyDialoggins.Dialog.show = function(id) {
|
84
|
+
var dialog = this.instances[id];
|
85
|
+
if(dialog) {
|
86
|
+
dialog.show();
|
87
|
+
}
|
88
|
+
return dialog;
|
89
|
+
}
|
90
|
+
|
91
|
+
|
92
|
+
/**
|
93
|
+
* This method hides the dialog with the corresponding id.
|
94
|
+
*
|
95
|
+
* @param {String} id The id value of the dialog element (also the key
|
96
|
+
* in the instances hash.)
|
97
|
+
*
|
98
|
+
* @return {Object} an instance of KennyDialoggins.Dialog
|
99
|
+
*
|
100
|
+
*/
|
101
|
+
KennyDialoggins.Dialog.hide = function(id) {
|
102
|
+
var dialog = this.instances[id];
|
103
|
+
if(dialog) {
|
104
|
+
dialog.hide();
|
105
|
+
}
|
106
|
+
return dialog;
|
107
|
+
}
|
108
|
+
|
109
|
+
|
110
|
+
/**
|
111
|
+
* This method returns a boolean indiciating whether or not the
|
112
|
+
* dialog with the corresponding id is showing.
|
113
|
+
*
|
114
|
+
* @param {String} id The id value of the dialog element (also the key
|
115
|
+
* in the instances hash.)
|
116
|
+
*
|
117
|
+
* @return {Boolean} Whether or not the dialog with the corresponding
|
118
|
+
* id is showing.
|
119
|
+
*
|
120
|
+
*/
|
121
|
+
KennyDialoggins.Dialog.is_showing = function(id) {
|
122
|
+
var dialog = this.instances[id];
|
123
|
+
if (!dialog) {
|
124
|
+
throw "No dialog cound be found for the supplied id.";
|
125
|
+
}
|
126
|
+
return dialog.is_showing();
|
127
|
+
}
|
128
|
+
|
129
|
+
|
130
|
+
|
131
|
+
// ----------------------------------------------------------------------------
|
132
|
+
// Instance methods
|
133
|
+
// ----------------------------------------------------------------------------
|
134
|
+
|
135
|
+
Object.extend(KennyDialoggins.Dialog.prototype, {
|
136
|
+
|
137
|
+
/**
|
138
|
+
* This function constructs the dialog element and hides it by default.
|
139
|
+
*
|
140
|
+
* The class name is set outside the element constructor to accommodate
|
141
|
+
* a discrepancy in how prototype handles this particular attribute. The
|
142
|
+
* attribute is set as className in IE8--rather than class--which means the
|
143
|
+
* styles are not applied and the element's positioning gets royally
|
144
|
+
* screwed up.
|
145
|
+
*/
|
146
|
+
_makeDialog: function() {
|
147
|
+
if (!this._element) {
|
148
|
+
this._element = new Element("DIV");
|
149
|
+
this._element.className = "kenny_dialoggins_dialog";
|
150
|
+
this._element.hide();
|
151
|
+
}
|
152
|
+
},
|
153
|
+
|
154
|
+
|
155
|
+
/**
|
156
|
+
* This function constructs the iframe element and hides it by default.
|
157
|
+
*
|
158
|
+
* The class name is set outside the element constructor to accommodate
|
159
|
+
* a discrepancy in how prototype handles this particular attribute. The
|
160
|
+
* attribute is set as className in IE8--rather than class--which means the
|
161
|
+
* styles are not applied and the element's positioning gets royally
|
162
|
+
* screwed up.
|
163
|
+
*/
|
164
|
+
_makeFrame: function() {
|
165
|
+
if (!this._frame) {
|
166
|
+
this._frame = new Element("IFRAME");
|
167
|
+
this._frame.className = "kenny_dialoggins_dialog_frame";
|
168
|
+
this._frame.setAttribute("src", "about:blank");
|
169
|
+
this._frame.hide();
|
170
|
+
}
|
171
|
+
},
|
172
|
+
|
173
|
+
|
174
|
+
/**
|
175
|
+
* This function creates the function that handles click events when the dialog is
|
176
|
+
* shown. The handler ignores clicks targeted from within the dialog; any click
|
177
|
+
* targeted outside the dialog causes the dialog to hide itself and cancel the
|
178
|
+
* observer.
|
179
|
+
*/
|
180
|
+
_generateHideListener: function() {
|
181
|
+
return function(evt) {
|
182
|
+
var origin = evt.findElement(".kenny_dialoggins_dialog");
|
183
|
+
if (this._element !== origin) {
|
184
|
+
this.hide();
|
185
|
+
}
|
186
|
+
}.bind(this);
|
187
|
+
},
|
188
|
+
|
189
|
+
|
190
|
+
/**
|
191
|
+
* This function sets the content of the dialog element.
|
192
|
+
*
|
193
|
+
* @param {Object} content The html content for the dialog.
|
194
|
+
*/
|
195
|
+
setContent: function(content) {
|
196
|
+
this._element.update(content);
|
197
|
+
},
|
198
|
+
|
199
|
+
|
200
|
+
/**
|
201
|
+
* This function displays the dialog. It uses a scriptaculous effect to fade in,
|
202
|
+
* centers the dialog in the viewport (and adjusts the blocking iframe, if in use),
|
203
|
+
* and connects a click observer to hide the dialog whenever mouse focus leaves
|
204
|
+
* the dialog.
|
205
|
+
*/
|
206
|
+
show: function() {
|
207
|
+
KennyDialoggins.Dialog._POSITION_FN_MAP.each(function(pair) {
|
208
|
+
var method = pair.last();
|
209
|
+
this._element.style[pair.first()] =
|
210
|
+
(document.viewport[method]() / 2 + document.viewport.getScrollOffsets()[pair.first()] - this._element[method]() / 2) + "px";
|
211
|
+
}.bind(this));
|
212
|
+
|
213
|
+
if (this._frame) {
|
214
|
+
this._frame.style.top = this._element.style.top;
|
215
|
+
this._frame.style.left = this._element.style.left;
|
216
|
+
this._frame.style.width = this._element.getWidth() + "px";
|
217
|
+
this._frame.style.height = this._element.getHeight() + "px";
|
218
|
+
|
219
|
+
new Effect.Appear(this._frame, {
|
220
|
+
duration: 0.2
|
221
|
+
});
|
222
|
+
}
|
223
|
+
|
224
|
+
new Effect.Appear(this._element, {
|
225
|
+
duration: 0.2,
|
226
|
+
beforeStart: this._beforeShow,
|
227
|
+
afterFinish: function() {
|
228
|
+
this._is_showing = true;
|
229
|
+
this._afterShow();
|
230
|
+
document.observe("click", this._hideListener);
|
231
|
+
}.bind(this)
|
232
|
+
});
|
233
|
+
},
|
234
|
+
|
235
|
+
|
236
|
+
/**
|
237
|
+
* This function hides the dialog. It uses a scriptaculous effect to fade out
|
238
|
+
* and disconnects the click observer to prevent memory leaks.
|
239
|
+
*/
|
240
|
+
hide: function() {
|
241
|
+
new Effect.Fade(this._element, {
|
242
|
+
duration: 0.2,
|
243
|
+
beforeStart: this._beforeHide,
|
244
|
+
afterFinish: function() {
|
245
|
+
this._is_showing = false;
|
246
|
+
this._afterHide();
|
247
|
+
document.stopObserving("click", this._hideListener);
|
248
|
+
}.bind(this)
|
249
|
+
});
|
250
|
+
|
251
|
+
if (this._frame) {
|
252
|
+
new Effect.Fade(this._frame, {
|
253
|
+
duration: 0.2
|
254
|
+
});
|
255
|
+
}
|
256
|
+
},
|
257
|
+
|
258
|
+
|
259
|
+
/**
|
260
|
+
* This function indicates whether or not the dialog is currently
|
261
|
+
* being shown.
|
262
|
+
*
|
263
|
+
* @return {Boolean} Whether or not the dialog is being shown.
|
264
|
+
*/
|
265
|
+
is_showing: function() {
|
266
|
+
return this._is_showing;
|
267
|
+
}
|
268
|
+
});
|
data/init.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/rails/init.rb"
|
@@ -0,0 +1,55 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{kenny_dialoggins}
|
8
|
+
s.version = "0.1.0"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Coroutine", "Tim Lowrimore", "John Dugan"]
|
12
|
+
s.date = %q{2010-03-29}
|
13
|
+
s.description = %q{Kenny Dialoggins allows you to include scriptaculous dialogs in Rails applications using the same syntax employed for rendering partials.}
|
14
|
+
s.email = %q{gems@coroutine.com}
|
15
|
+
s.extra_rdoc_files = [
|
16
|
+
"README.rdoc"
|
17
|
+
]
|
18
|
+
s.files = [
|
19
|
+
".specification",
|
20
|
+
"MIT-LICENSE",
|
21
|
+
"README.rdoc",
|
22
|
+
"Rakefile",
|
23
|
+
"VERSION",
|
24
|
+
"generators/kenny_dialoggins_assets/kenny_dialoggins_assets_generator.rb",
|
25
|
+
"generators/kenny_dialoggins_assets/templates/kenny_dialoggins.css",
|
26
|
+
"generators/kenny_dialoggins_assets/templates/kenny_dialoggins.js",
|
27
|
+
"init.rb",
|
28
|
+
"kenny_dialoggins.gemspec",
|
29
|
+
"lib/kenny_dialoggins.rb",
|
30
|
+
"lib/kenny_dialoggins/helpers.rb",
|
31
|
+
"rails/init.rb",
|
32
|
+
"test/kenny_dialoggins/helpers_test.rb",
|
33
|
+
"test/test_helper.rb"
|
34
|
+
]
|
35
|
+
s.homepage = %q{http://github.com/coroutine/kenny_dialoggins}
|
36
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
37
|
+
s.require_paths = ["lib"]
|
38
|
+
s.rubygems_version = %q{1.3.6}
|
39
|
+
s.summary = %q{Dead simple, beautiful dialogs for Rails.}
|
40
|
+
s.test_files = [
|
41
|
+
"test/kenny_dialoggins/helpers_test.rb",
|
42
|
+
"test/test_helper.rb"
|
43
|
+
]
|
44
|
+
|
45
|
+
if s.respond_to? :specification_version then
|
46
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
47
|
+
s.specification_version = 3
|
48
|
+
|
49
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
50
|
+
else
|
51
|
+
end
|
52
|
+
else
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
@@ -0,0 +1,79 @@
|
|
1
|
+
module Coroutine
|
2
|
+
module KennyDialoggins
|
3
|
+
module Helpers
|
4
|
+
|
5
|
+
# Returns a javascript tag containing the dialog initialization logic. The first argument
|
6
|
+
# to this method is the dialog's <tt>id</tt>. The id is required and should be unique.
|
7
|
+
# Further options may be provided; those that are specific to the dialog are:
|
8
|
+
#
|
9
|
+
# * <tt>:before_show</tt> - a Javascript function that will be invoked before the dialog is shown
|
10
|
+
# * <tt>:after_show</tt> - a Javascript function that will be invoked after the dialog has become visible
|
11
|
+
# * <tt>:before_hide</tt> - a Javascript function that will be invoked before the dialog is hidden
|
12
|
+
# * <tt>:after_hide</tt> - a Javascript function that will be invoked after the dialog has been hidden
|
13
|
+
#
|
14
|
+
# All remaining options are the same as the options available to ActionController::Base#render. Please
|
15
|
+
# see the documentation for ActionController::Base#render for further details.
|
16
|
+
#
|
17
|
+
# ==== Example
|
18
|
+
#
|
19
|
+
# # Generates:
|
20
|
+
# #
|
21
|
+
# # <script type="text/javascript">
|
22
|
+
# # //<![CDATA[
|
23
|
+
# # KennyDialoggins.Dialog.instances['foo_dialog'] = new KennyDialoggins.Dialog('Hello, Foo!', {});
|
24
|
+
# # //]]>
|
25
|
+
# # </script>
|
26
|
+
# <%= render_dialog :foo_dialog, :partial => "foo" %>
|
27
|
+
#
|
28
|
+
# In this case, a partial named "_foo.html.erb"--containing the string, "Hello, Foo!"--
|
29
|
+
# is rendered into the dialog.
|
30
|
+
#
|
31
|
+
# ==== Example
|
32
|
+
#
|
33
|
+
# # Generates:
|
34
|
+
# # <script type="text/javascript">
|
35
|
+
# # //<![CDATA[
|
36
|
+
# # KennyDialoggins.Dialog.instances['foo_dialog'] = new KennyDialoggins.Dialog('Hello, Foo!', {beforeShow:function() { alert('bar!') }});
|
37
|
+
# # //]]>
|
38
|
+
# # </script>
|
39
|
+
# <%= render_dialog :foo_dialog, :partial => "foo", :before_show => "function() { alert('bar!') }" %>
|
40
|
+
#
|
41
|
+
# This case is similar to the previous case, except that an alert containing the string, "bar!" will
|
42
|
+
# appear before the dialog is shown
|
43
|
+
def render_dialog(id, options={})
|
44
|
+
dialog_options = [:before_show, :after_show, :before_hide, :after_hide].inject({}) do |result, key|
|
45
|
+
result[key] = options.delete(key) if options[key]
|
46
|
+
result
|
47
|
+
end
|
48
|
+
|
49
|
+
content = escape_javascript render(options)
|
50
|
+
javascript_tag "KennyDialoggins.Dialog.instances['#{id.to_s}'] = new KennyDialoggins.Dialog('#{content}', #{dialog_options_to_js dialog_options});"
|
51
|
+
end
|
52
|
+
|
53
|
+
# Returns a string of Javascript that will show the dialog identified by the supplied
|
54
|
+
# dialog_id. As an example of useage, this method might be called as the second argument
|
55
|
+
# to ActionView::Helpers::JavaScriptHelper#link_to_function.
|
56
|
+
def show_dialog(dialog_id)
|
57
|
+
"KennyDialoggins.Dialog.show('#{dialog_id.to_s}')"
|
58
|
+
end
|
59
|
+
|
60
|
+
# Returns a string of Javascript that will hide the dialog identified by the supplied
|
61
|
+
# dialog_id. As an example of useage, this method might be called as the second argument
|
62
|
+
# to ActionView::Helpers::JavaScriptHelper#link_to_function.
|
63
|
+
def hide_dialog(dialog_id)
|
64
|
+
"KennyDialoggins.Dialog.hide('#{dialog_id.to_s}')"
|
65
|
+
end
|
66
|
+
|
67
|
+
private
|
68
|
+
|
69
|
+
def dialog_options_to_js(options={})
|
70
|
+
js_kv_pairs = []
|
71
|
+
options.each do |key, value|
|
72
|
+
js_kv_pairs << "#{key.to_s.camelize(:lower)}:#{value || 'null'}"
|
73
|
+
end
|
74
|
+
"{#{js_kv_pairs.join(',')}}"
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
data/rails/init.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "kenny_dialoggins"
|
@@ -0,0 +1,89 @@
|
|
1
|
+
#---------------------------------------------------------
|
2
|
+
# Requirements
|
3
|
+
#---------------------------------------------------------
|
4
|
+
|
5
|
+
# all generic stuff required by test helper
|
6
|
+
require "test/test_helper"
|
7
|
+
|
8
|
+
|
9
|
+
|
10
|
+
#---------------------------------------------------------
|
11
|
+
# Class Definitions
|
12
|
+
#---------------------------------------------------------
|
13
|
+
|
14
|
+
class TestView < ActionView::Base
|
15
|
+
def dialog_options_to_js_proxy(options)
|
16
|
+
dialog_options_to_js(options)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
|
21
|
+
|
22
|
+
#---------------------------------------------------------
|
23
|
+
# Tests
|
24
|
+
#---------------------------------------------------------
|
25
|
+
|
26
|
+
class KennyDialogginsHelpersTest < ActionView::TestCase
|
27
|
+
|
28
|
+
# build a test view object
|
29
|
+
def setup
|
30
|
+
@view = TestView.new
|
31
|
+
end
|
32
|
+
|
33
|
+
|
34
|
+
# verify methods were mixed in properly
|
35
|
+
def test_composition
|
36
|
+
assert @view.respond_to?(:render_dialog, false)
|
37
|
+
assert @view.respond_to?(:show_dialog, false)
|
38
|
+
assert @view.respond_to?(:hide_dialog, false)
|
39
|
+
assert @view.respond_to?(:dialog_options_to_js, true)
|
40
|
+
end
|
41
|
+
|
42
|
+
|
43
|
+
# verify render returns proper script tag and content
|
44
|
+
# (just testing simple text example here)
|
45
|
+
def test_render_dialog
|
46
|
+
text = "Who wants to play volleyball on a court with a four-foot net?"
|
47
|
+
expected = "<script type=\"text/javascript\">\n" \
|
48
|
+
"//<![CDATA[\n" \
|
49
|
+
"KennyDialoggins.Dialog.instances['danger_zone'] = new KennyDialoggins.Dialog('" + text + "', {});\n" \
|
50
|
+
"//]]>\n" \
|
51
|
+
"</script>"
|
52
|
+
actual = @view.render_dialog(:danger_zone, :text => text)
|
53
|
+
|
54
|
+
assert_equal expected, actual
|
55
|
+
end
|
56
|
+
|
57
|
+
|
58
|
+
# verify show dialog returns proper javascript command.
|
59
|
+
def test_show_dialog
|
60
|
+
expected = "KennyDialoggins.Dialog.show('danger_zone')"
|
61
|
+
actual = @view.show_dialog(:danger_zone)
|
62
|
+
|
63
|
+
assert_equal expected, actual
|
64
|
+
end
|
65
|
+
|
66
|
+
|
67
|
+
# verify hide dialog returns proper javascript command.
|
68
|
+
def test_hide_dialog
|
69
|
+
expected = "KennyDialoggins.Dialog.hide('danger_zone')"
|
70
|
+
actual = @view.hide_dialog(:danger_zone)
|
71
|
+
|
72
|
+
assert_equal expected, actual
|
73
|
+
end
|
74
|
+
|
75
|
+
|
76
|
+
# verify private function converts ruby hash to javascript hash properly.
|
77
|
+
def test_dialog_options_to_js
|
78
|
+
options = {
|
79
|
+
:before_show => "function{ alert('hello, world!'); }",
|
80
|
+
:after_show => "function{ alert('goodbye, world!'); }"
|
81
|
+
}
|
82
|
+
|
83
|
+
expected = "{beforeShow:#{options[:before_show]},afterShow:#{options[:after_show]}}"
|
84
|
+
actual = @view.dialog_options_to_js_proxy(options)
|
85
|
+
|
86
|
+
assert_equal expected, actual
|
87
|
+
end
|
88
|
+
|
89
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
#----------------------------------------------------------
|
2
|
+
# Requirements
|
3
|
+
#----------------------------------------------------------
|
4
|
+
|
5
|
+
# rails stuff
|
6
|
+
require "rubygems"
|
7
|
+
require "active_support"
|
8
|
+
require "active_support/test_case"
|
9
|
+
require "action_controller"
|
10
|
+
require "action_controller/test_case"
|
11
|
+
require "action_view"
|
12
|
+
require "action_view/test_case"
|
13
|
+
require "test/unit"
|
14
|
+
|
15
|
+
# the plugin itself
|
16
|
+
require "#{File.dirname(__FILE__)}/../init"
|
metadata
ADDED
@@ -0,0 +1,79 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: kenny_dialoggins
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 1
|
8
|
+
- 0
|
9
|
+
version: 0.1.0
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Coroutine
|
13
|
+
- Tim Lowrimore
|
14
|
+
- John Dugan
|
15
|
+
autorequire:
|
16
|
+
bindir: bin
|
17
|
+
cert_chain: []
|
18
|
+
|
19
|
+
date: 2010-03-29 00:00:00 -05:00
|
20
|
+
default_executable:
|
21
|
+
dependencies: []
|
22
|
+
|
23
|
+
description: Kenny Dialoggins allows you to include scriptaculous dialogs in Rails applications using the same syntax employed for rendering partials.
|
24
|
+
email: gems@coroutine.com
|
25
|
+
executables: []
|
26
|
+
|
27
|
+
extensions: []
|
28
|
+
|
29
|
+
extra_rdoc_files:
|
30
|
+
- README.rdoc
|
31
|
+
files:
|
32
|
+
- .specification
|
33
|
+
- MIT-LICENSE
|
34
|
+
- README.rdoc
|
35
|
+
- Rakefile
|
36
|
+
- VERSION
|
37
|
+
- generators/kenny_dialoggins_assets/kenny_dialoggins_assets_generator.rb
|
38
|
+
- generators/kenny_dialoggins_assets/templates/kenny_dialoggins.css
|
39
|
+
- generators/kenny_dialoggins_assets/templates/kenny_dialoggins.js
|
40
|
+
- init.rb
|
41
|
+
- kenny_dialoggins.gemspec
|
42
|
+
- lib/kenny_dialoggins.rb
|
43
|
+
- lib/kenny_dialoggins/helpers.rb
|
44
|
+
- rails/init.rb
|
45
|
+
- test/kenny_dialoggins/helpers_test.rb
|
46
|
+
- test/test_helper.rb
|
47
|
+
has_rdoc: true
|
48
|
+
homepage: http://github.com/coroutine/kenny_dialoggins
|
49
|
+
licenses: []
|
50
|
+
|
51
|
+
post_install_message:
|
52
|
+
rdoc_options:
|
53
|
+
- --charset=UTF-8
|
54
|
+
require_paths:
|
55
|
+
- lib
|
56
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
segments:
|
61
|
+
- 0
|
62
|
+
version: "0"
|
63
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
segments:
|
68
|
+
- 0
|
69
|
+
version: "0"
|
70
|
+
requirements: []
|
71
|
+
|
72
|
+
rubyforge_project:
|
73
|
+
rubygems_version: 1.3.6
|
74
|
+
signing_key:
|
75
|
+
specification_version: 3
|
76
|
+
summary: Dead simple, beautiful dialogs for Rails.
|
77
|
+
test_files:
|
78
|
+
- test/kenny_dialoggins/helpers_test.rb
|
79
|
+
- test/test_helper.rb
|