window_rails 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.rdoc CHANGED
@@ -1,3 +1,9 @@
1
+ == v0.1.1
2
+ * Proper rails loading when included via gem
3
+ * Fix for window jumping when constraints applied
4
+ * Fix for #observe_dynamically_loaded_field when using a function instead of callback
5
+ * Make IFrame usage optional
6
+
1
7
  == v0.1.0
2
8
  * Lots of cleanup
3
9
  * Better builders available
data/README.rdoc CHANGED
@@ -1,14 +1,18 @@
1
- ++ Important note ++
2
-
3
- This is still in its infancy and is pretty unstable. This will be removed once it's ready
4
- for initial release.
5
-
6
1
  == WindowRails
7
2
 
8
3
  WindowRails is a plugin for Rails that provides easy to use AJAXy windows. It is based
9
4
  completely on {Prototype Window}[http://prototype-window.xilinus.com/] with helpers for
10
5
  Rails to make it easy to use from a Rails app.
11
6
 
7
+ == Configuration
8
+
9
+ After install, add these in the head of your application.html.erb file:
10
+
11
+ <%= javascript_include_tag 'window_rails/window' %>
12
+ <%= stylesheet_link_tag *%w(/themes/alphacube /themes/default /themes/alert) %>
13
+
14
+ Alphacube is the default theme used by window_rails. Be sure to add the css link if you plan on using other themes.
15
+
12
16
  === Basic examples to get you started
13
17
 
14
18
  ==== Linking to a window
@@ -65,4 +69,4 @@ Rails to make it easy to use from a Rails app.
65
69
  == License
66
70
 
67
71
  * Prototype Window was released under the MIT license
68
- * WindowRails continues on under the MIT license
72
+ * WindowRails continues on under the MIT license
@@ -287,8 +287,13 @@ Window.prototype = {
287
287
  },
288
288
 
289
289
  setAjaxContent: function(url, options, showCentered, showModal) {
290
- this.showFunction = showCentered ? "showCenter" : "show";
291
- this.showModal = showModal || false;
290
+ if(showCentered){
291
+ this.showFunction = showCentered ? "showCenter" : "show";
292
+ this.showModal = showModal || false;
293
+ } else {
294
+ this.showFunction = null;
295
+ this.showModal = null;
296
+ }
292
297
 
293
298
  options = options || {};
294
299
 
@@ -309,7 +314,9 @@ Window.prototype = {
309
314
  if (this.onComplete)
310
315
  this.onComplete(originalRequest);
311
316
  this.onComplete = null;
312
- this[this.showFunction](this.showModal)
317
+ if(this.showFunction){
318
+ this[this.showFunction](this.showModal)
319
+ }
313
320
  },
314
321
 
315
322
  setURL: function(url) {
@@ -537,8 +544,9 @@ Window.prototype = {
537
544
  if (this.constraint && this.useLeft && this.useTop) {
538
545
  var width = this.options.parent == document.body ? WindowUtilities.getPageSize().windowWidth : this.options.parent.getDimensions().width;
539
546
 
547
+ // the -10 gives a bit of pad to reduce window from jumping screen
540
548
  if (left < this.constraintPad.left)
541
- left = this.constraintPad.left;
549
+ left = this.constraintPad.left - 10;
542
550
  if (left + this.width + this.widthE + this.widthW > width - this.constraintPad.right)
543
551
  left = width - this.constraintPad.right - this.width - this.widthE - this.widthW;
544
552
  }
@@ -1,3 +1,3 @@
1
1
  module WindowRails
2
- VERSION = '0.1.0'
2
+ VERSION = '0.1.1'
3
3
  end
@@ -54,6 +54,10 @@ module WindowRailsGenerators
54
54
  self << check_for_window(win, error){ update_window_contents(content, win) }
55
55
  end
56
56
 
57
+ # name:: Name of the window
58
+ # error:: Will throw an alert if window is not found
59
+ # Checks for a window of the given name. If a block is provided, it will be executed
60
+ # if the window is found
57
61
  def check_for_window(name, error)
58
62
  if(name.blank?)
59
63
  self << "if(Windows.windows.values().size() > 0){"
@@ -65,13 +69,18 @@ module WindowRailsGenerators
65
69
  self << "else { alert('Unexpected error. Failed to locate window for output.'); }" if error
66
70
  end
67
71
 
72
+ # Simply wraps a block within an else statement
68
73
  def else_block
69
74
  self << "else {"
70
75
  yield if block_given?
71
76
  self << "}"
72
77
  end
73
78
 
74
- def update_window_contents(content, win)
79
+ # content:: String content
80
+ # win:: Name of window
81
+ # Updates the contents of the window. If no window name is provided, the topmost window
82
+ # will be updated
83
+ def update_window_contents(content, win=nil)
75
84
  unless(win.blank?)
76
85
  self << "Windows.getWindowByName('#{escape_javascript(win)}').setHTMLContent('#{escape_javascript(content)}');"
77
86
  else
@@ -79,7 +88,9 @@ module WindowRailsGenerators
79
88
  end
80
89
  end
81
90
 
82
- def focus_window(win)
91
+ # win:: Name of window
92
+ # Will focus the window. If no name provided, topmost window will be focused
93
+ def focus_window(win=nil)
83
94
  unless(win.blank?)
84
95
  self << "Windows.focus(Windows.getWindowByName('#{escape_javascript(win)}').getId());"
85
96
  else
@@ -87,13 +98,27 @@ module WindowRailsGenerators
87
98
  end
88
99
  end
89
100
 
101
+ # content:: String content
102
+ # win:: Name of window
103
+ # options:: Options to be passed onto window
104
+ # Creates a new window. Generally this should not be called,
105
+ # rather #open_window should be used
90
106
  def create_window(content, win, options)
91
107
  self << "var myWin = new Window({#{options.map{|k,v|"#{escape_javascript(k.to_s)}:'#{escape_javascript(v.to_s)}'"}.join(', ')}});"
92
108
  self << "Windows.registerByName('#{escape_javascript(win)}', myWin);" unless win.blank?
93
- self << "myWin.setHTMLContent('#{escape_javascript(content)}');" unless content.blank?
109
+ if(content.is_a?(Hash) && content[:url])
110
+ self << "myWin.setAjaxContent('#{escape_javascript(content[:url])}');"
111
+ elsif(!content.blank?)
112
+ self << "myWin.setHTMLContent('#{escape_javascript(content.to_s)}');"
113
+ end
94
114
  self << "myWin.setCloseCallback(function(win){ win.destroy(); return true; });"
95
115
  end
96
116
 
117
+ # win:: Name of window
118
+ # modal:: True if window should be modal
119
+ # Shows the window centered on the screen. If no window name is provided
120
+ # it will default to the last created window. Generally this should not
121
+ # be called, rather #open_window should be used
97
122
  def show_window(win, modal)
98
123
  s = nil
99
124
  unless(win.blank?)
@@ -104,6 +129,10 @@ module WindowRailsGenerators
104
129
  self << "#{s}.showCenter(#{modal ? 'true' : 'false'});"
105
130
  end
106
131
 
132
+ # win:: Name of window
133
+ # constraints:: Constaint hash {:left, :right, :top, :bottom}
134
+ # Sets the constraints on the window. Generally this should not be used,
135
+ # rather #open_window should be used
107
136
  def apply_window_constraints(win, constraints)
108
137
  opts = {:left => 0, :right => 0, :top => 0, :bottom => 0}
109
138
  opts.merge!(constraints) if constraints.is_a?(Hash)
@@ -118,15 +147,23 @@ module WindowRailsGenerators
118
147
 
119
148
  # content:: Content for window
120
149
  # options:: Hash of options
121
- # * modal -> Window should be modal
122
- # * window -> Name to reference window (used for easy updating and closing)
123
- # * constraints -> Hash containing top,left,right,bottom values for padding from edges. False value will turn off constraints (window can travel out of viewport)
124
- # * url -> URL to load into the window
125
- # * width -> Width of the window
126
- # * height -> Height of the window
127
- # * className -> Theme name for the window
128
- # * no_update -> Set to true to force creation of a new window even if window of same name already exists (defaults to false)
129
- # Creates a new window and displays it at the center of the viewport.
150
+ # * :modal -> Window should be modal
151
+ # * :window -> Name to reference window (used for easy updating and closing)
152
+ # * :constraints -> Hash containing top,left,right,bottom values for padding from edges. False value will turn off constraints (window can travel out of viewport)
153
+ # * :iframe -> URL to load within an IFrame in the window
154
+ # * :width -> Width of the window
155
+ # * :height -> Height of the window
156
+ # * :className -> Theme name for the window
157
+ # * :no_update -> Set to true to force creation of a new window even if window of same name already exists (defaults to false)
158
+ # Creates a new window and displays it at the center of the viewport. Content can be provided as
159
+ # a string, or as a Hash. If :url is defined, the window will be loaded with the contents of the request. If not, the hash
160
+ # will be passed to #render and the string will be displayed.
161
+ # Important note:
162
+ # There are two ways to load remote content. The first is to use :url => 'http://host/page.html' for content. This will
163
+ # load the contents directly into the window. The second is to set content to nil and pass :iframe => 'http://host/page.html'
164
+ # in the options. This later form will load the contents within an IFrame in the window. This is useful in that it will
165
+ # be isolated from the current page, but this isolation means it cannot communicate with other windows on the page (including
166
+ # its own).
130
167
  def open_window(content, options={})
131
168
  modal = options.delete(:modal)
132
169
  win = options.delete(:window)
@@ -198,10 +235,16 @@ module WindowRailsGenerators
198
235
  end
199
236
  end
200
237
 
238
+ # field_id:: DOM ID of form element to observe
239
+ # options:: Options
240
+ # Helper for observing fields that have been dynamically loaed into the DOM. Works like
241
+ # #observe_field but not as full featured.
201
242
  def observe_dynamically_loaded_field(field_id, options={})
202
243
  f = options.delete(:function)
203
244
  unless(f)
204
245
  f = "function(event){ new Ajax.Request('#{escape_javascript(@context.url_for(options[:url]).to_s)}', {asynchronous:true, evalScripts:true,parameters:'#{escape_javascript(options[:with].to_s)}='+$('#{escape_javascript(options[:with].to_s)}').getValue()})}"
246
+ else
247
+ f = "function(event){ #{f}; }"
205
248
  end
206
249
  self << "if($('#{escape_javascript(field_id.to_s)}')){ $('#{escape_javascript(field_id.to_s)}').observe('change', #{f}); }"
207
250
  end
@@ -1,10 +1,14 @@
1
1
  module WindowRailsView
2
2
 
3
3
  # name:: Name of the link
4
- # options:: Hash of optional values. These options are simply passed
5
- # on to the activate_window method
4
+ # options:: Hash of options values.
5
+ # Creates a link to a window. Content is defined by a url in the options hash using :url or :iframe.
6
+ # If :url is used, the content is loaded into the window within the page. If :iframe is used
7
+ # the content is loaded into the window within an IFrame on the page. Generally, if you are calling
8
+ # a method that simply renders out a partial, you want to use :url. If you are calling something
9
+ # that returns an entire page, :iframe will likely be the ticket.
6
10
  def link_to_window(name, options={})
7
- link_to_remote(name, :url => {:controller => :window_rails, :action => :open_window, :window_url => url_for(options.delete(:url)), :window_options => options})
11
+ link_to_remote(name, :url => {:controller => :window_rails, :action => :open_window, :window_url => url_for(options.delete(:url)), :iframe_url => url_for(options.delete(:iframe)), :window_options => options})
8
12
  end
9
13
 
10
14
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: window_rails
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 25
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 0
10
- version: 0.1.0
9
+ - 1
10
+ version: 0.1.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Chris Roberts
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-11-10 00:00:00 -08:00
18
+ date: 2010-12-17 00:00:00 -08:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -26,10 +26,11 @@ dependencies:
26
26
  requirements:
27
27
  - - ">="
28
28
  - !ruby/object:Gem::Version
29
- hash: 3
29
+ hash: 5
30
30
  segments:
31
- - 0
32
- version: "0"
31
+ - 2
32
+ - 3
33
+ version: "2.3"
33
34
  type: :runtime
34
35
  version_requirements: *id001
35
36
  description: Windows for Rails