window_rails 0.1.5 → 0.2.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/CHANGELOG.rdoc +3 -0
- data/LICENSE +1 -23
- data/README.rdoc +14 -26
- data/app/controllers/window_rails_controller.rb +19 -4
- data/lib/window_rails.rb +6 -2
- data/lib/window_rails/engine.rb +15 -0
- data/lib/window_rails/tasks.rb +65 -3
- data/lib/window_rails/version.rb +1 -1
- data/lib/window_rails/window_rails_generators.rb +225 -98
- data/lib/window_rails/window_rails_view.rb +35 -3
- data/rails/init.rb +1 -1
- metadata +24 -181
- data/files/javascripts/debug.js +0 -137
- data/files/javascripts/extended_debug.js +0 -113
- data/files/javascripts/tooltip.js +0 -241
- data/files/javascripts/window.js +0 -1882
- data/files/javascripts/window_effects.js +0 -157
- data/files/javascripts/window_ext.js +0 -115
- data/files/themes/alert.css +0 -119
- data/files/themes/alert/bottom.gif +0 -0
- data/files/themes/alert/bottom_left.gif +0 -0
- data/files/themes/alert/bottom_right.gif +0 -0
- data/files/themes/alert/left.gif +0 -0
- data/files/themes/alert/overlay.png +0 -0
- data/files/themes/alert/progress.gif +0 -0
- data/files/themes/alert/right.gif +0 -0
- data/files/themes/alert/top.gif +0 -0
- data/files/themes/alert/top_left.gif +0 -0
- data/files/themes/alert/top_right.gif +0 -0
- data/files/themes/alert_lite.css +0 -88
- data/files/themes/alphacube.css +0 -150
- data/files/themes/alphacube/bottom-left-c.gif +0 -0
- data/files/themes/alphacube/bottom-middle.gif +0 -0
- data/files/themes/alphacube/bottom-right-c.gif +0 -0
- data/files/themes/alphacube/button-close-focus.gif +0 -0
- data/files/themes/alphacube/button-max-focus.gif +0 -0
- data/files/themes/alphacube/button-min-focus.gif +0 -0
- data/files/themes/alphacube/frame-left.gif +0 -0
- data/files/themes/alphacube/frame-right.gif +0 -0
- data/files/themes/alphacube/left-top.gif +0 -0
- data/files/themes/alphacube/right-top.gif +0 -0
- data/files/themes/alphacube/top-middle.gif +0 -0
- data/files/themes/behavior.htc +0 -51
- data/files/themes/darkX.css +0 -121
- data/files/themes/darkX/button-close-focused.png +0 -0
- data/files/themes/darkX/button-maximize-focused.png +0 -0
- data/files/themes/darkX/button-minimize-focused.png +0 -0
- data/files/themes/darkX/frame-bottom-left-focused.png +0 -0
- data/files/themes/darkX/frame-bottom-mid-focused.png +0 -0
- data/files/themes/darkX/frame-bottom-right-focused.png +0 -0
- data/files/themes/darkX/frame-left-focused.png +0 -0
- data/files/themes/darkX/frame-right-focused.png +0 -0
- data/files/themes/darkX/titlebar-left-focused.png +0 -0
- data/files/themes/darkX/titlebar-mid-focused.png +0 -0
- data/files/themes/darkX/titlebar-right-focused.png +0 -0
- data/files/themes/debug.css +0 -25
- data/files/themes/default.css +0 -155
- data/files/themes/default/bottom_left.gif +0 -0
- data/files/themes/default/bottom_mid.gif +0 -0
- data/files/themes/default/bottom_right.gif +0 -0
- data/files/themes/default/bottom_right_resize.gif +0 -0
- data/files/themes/default/center_left.gif +0 -0
- data/files/themes/default/center_right.gif +0 -0
- data/files/themes/default/clear.gif +0 -0
- data/files/themes/default/close.gif +0 -0
- data/files/themes/default/inspect.gif +0 -0
- data/files/themes/default/maximize.gif +0 -0
- data/files/themes/default/minimize.gif +0 -0
- data/files/themes/default/overlay.png +0 -0
- data/files/themes/default/resize.gif +0 -0
- data/files/themes/default/sizer.gif +0 -0
- data/files/themes/default/top_left.gif +0 -0
- data/files/themes/default/top_mid.gif +0 -0
- data/files/themes/default/top_right.gif +0 -0
- data/files/themes/iefix/blank.gif +0 -0
- data/files/themes/iefix/iepngfix.css +0 -3
- data/files/themes/iefix/iepngfix.htc +0 -54
- data/files/themes/lighting.css +0 -960
- data/files/themes/lighting/background_buttons.gif +0 -0
- data/files/themes/lighting/bottom-left-blue.png +0 -0
- data/files/themes/lighting/bottom-left-darkblue.png +0 -0
- data/files/themes/lighting/bottom-left-green.png +0 -0
- data/files/themes/lighting/bottom-left-grey.png +0 -0
- data/files/themes/lighting/bottom-middle-blue.png +0 -0
- data/files/themes/lighting/bottom-middle-darkblue.png +0 -0
- data/files/themes/lighting/bottom-middle-green.png +0 -0
- data/files/themes/lighting/bottom-middle-grey.png +0 -0
- data/files/themes/lighting/bottom-right-blue.png +0 -0
- data/files/themes/lighting/bottom-right-darkblue.png +0 -0
- data/files/themes/lighting/bottom-right-green.png +0 -0
- data/files/themes/lighting/bottom-right-grey.png +0 -0
- data/files/themes/lighting/button-close-blue.png +0 -0
- data/files/themes/lighting/button-close-darkblue.png +0 -0
- data/files/themes/lighting/button-close-green.png +0 -0
- data/files/themes/lighting/button-close-grey.png +0 -0
- data/files/themes/lighting/button-maximize-blue.png +0 -0
- data/files/themes/lighting/button-maximize-darkblue.png +0 -0
- data/files/themes/lighting/button-maximize-green.png +0 -0
- data/files/themes/lighting/button-maximize-grey.png +0 -0
- data/files/themes/lighting/button-minimize-blue.png +0 -0
- data/files/themes/lighting/button-minimize-darkblue.png +0 -0
- data/files/themes/lighting/button-minimize-green.png +0 -0
- data/files/themes/lighting/button-minimize-grey.png +0 -0
- data/files/themes/lighting/left-blue.png +0 -0
- data/files/themes/lighting/left-darkblue.png +0 -0
- data/files/themes/lighting/left-green.png +0 -0
- data/files/themes/lighting/left-grey.png +0 -0
- data/files/themes/lighting/pngbehavior.htc +0 -67
- data/files/themes/lighting/right-blue.png +0 -0
- data/files/themes/lighting/right-darkblue.png +0 -0
- data/files/themes/lighting/right-green.png +0 -0
- data/files/themes/lighting/right-grey.png +0 -0
- data/files/themes/lighting/spinner.gif +0 -0
- data/files/themes/lighting/top-left-blue.png +0 -0
- data/files/themes/lighting/top-left-darkblue.png +0 -0
- data/files/themes/lighting/top-left-green.png +0 -0
- data/files/themes/lighting/top-left-grey.png +0 -0
- data/files/themes/lighting/top-middle-blue.png +0 -0
- data/files/themes/lighting/top-middle-darkblue.png +0 -0
- data/files/themes/lighting/top-middle-green.png +0 -0
- data/files/themes/lighting/top-middle-grey.png +0 -0
- data/files/themes/lighting/top-right-blue.png +0 -0
- data/files/themes/lighting/top-right-darkblue.png +0 -0
- data/files/themes/lighting/top-right-green.png +0 -0
- data/files/themes/lighting/top-right-grey.png +0 -0
- data/files/themes/mac_os_x.css +0 -333
- data/files/themes/mac_os_x/B.png +0 -0
- data/files/themes/mac_os_x/BL.png +0 -0
- data/files/themes/mac_os_x/BL_Main.png +0 -0
- data/files/themes/mac_os_x/BR.png +0 -0
- data/files/themes/mac_os_x/BR_Main.png +0 -0
- data/files/themes/mac_os_x/B_Main.png +0 -0
- data/files/themes/mac_os_x/L.png +0 -0
- data/files/themes/mac_os_x/L_Main.png +0 -0
- data/files/themes/mac_os_x/R.png +0 -0
- data/files/themes/mac_os_x/R_Main.png +0 -0
- data/files/themes/mac_os_x/T.png +0 -0
- data/files/themes/mac_os_x/TL.png +0 -0
- data/files/themes/mac_os_x/TL_Main.png +0 -0
- data/files/themes/mac_os_x/TR.png +0 -0
- data/files/themes/mac_os_x/TR_Main.png +0 -0
- data/files/themes/mac_os_x/T_Main.png +0 -0
- data/files/themes/mac_os_x/close.gif +0 -0
- data/files/themes/mac_os_x/maximize.gif +0 -0
- data/files/themes/mac_os_x/minimize.gif +0 -0
- data/files/themes/mac_os_x_dialog.css +0 -160
- data/files/themes/mac_os_x_dialog/B.png +0 -0
- data/files/themes/mac_os_x_dialog/BL.png +0 -0
- data/files/themes/mac_os_x_dialog/BR.png +0 -0
- data/files/themes/mac_os_x_dialog/L.png +0 -0
- data/files/themes/mac_os_x_dialog/R.png +0 -0
- data/files/themes/mac_os_x_dialog/T.png +0 -0
- data/files/themes/mac_os_x_dialog/TL.png +0 -0
- data/files/themes/mac_os_x_dialog/TR.png +0 -0
- data/files/themes/mac_os_x_dialog/bg.gif +0 -0
- data/files/themes/mac_os_x_dialog/close.gif +0 -0
- data/files/themes/mac_os_x_dialog/maximize.gif +0 -0
- data/files/themes/mac_os_x_dialog/minimize.gif +0 -0
- data/files/themes/nuncio.css +0 -164
- data/files/themes/nuncio/bottom_left.png +0 -0
- data/files/themes/nuncio/bottom_mid.png +0 -0
- data/files/themes/nuncio/bottom_right.png +0 -0
- data/files/themes/nuncio/center_left.png +0 -0
- data/files/themes/nuncio/center_right.png +0 -0
- data/files/themes/nuncio/close.png +0 -0
- data/files/themes/nuncio/minimize.png +0 -0
- data/files/themes/nuncio/overlay.png +0 -0
- data/files/themes/nuncio/top_left.png +0 -0
- data/files/themes/nuncio/top_mid.png +0 -0
- data/files/themes/nuncio/top_right.png +0 -0
- data/files/themes/spread.css +0 -108
- data/files/themes/spread/bottom-left-c.gif +0 -0
- data/files/themes/spread/bottom-middle.gif +0 -0
- data/files/themes/spread/bottom-right-c.gif +0 -0
- data/files/themes/spread/button-close-focus.gif +0 -0
- data/files/themes/spread/button-max-focus.gif +0 -0
- data/files/themes/spread/button-min-focus.gif +0 -0
- data/files/themes/spread/frame-left.gif +0 -0
- data/files/themes/spread/frame-right.gif +0 -0
- data/files/themes/spread/left-top.gif +0 -0
- data/files/themes/spread/right-top.gif +0 -0
- data/files/themes/spread/top-middle.gif +0 -0
- data/init.rb +0 -8
- data/install.rb +0 -31
- data/uninstall.rb +0 -9
data/CHANGELOG.rdoc
CHANGED
data/LICENSE
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Current WindowRails License:
|
|
2
2
|
|
|
3
|
-
Copyright (c)
|
|
3
|
+
Copyright (c) 2011 Chris Roberts <chrisroberts.code@gmail.com>
|
|
4
4
|
|
|
5
5
|
Permission is hereby granted, free of charge, to any person obtaining
|
|
6
6
|
a copy of this software and associated documentation files (the
|
|
@@ -20,25 +20,3 @@ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
|
20
20
|
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
21
21
|
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
22
22
|
|
|
23
|
-
|
|
24
|
-
Original Prototype Window License:
|
|
25
|
-
|
|
26
|
-
Copyright (c) 2006 Sébastien Gruhier (http://xilinus.com, http://itseb.com)
|
|
27
|
-
|
|
28
|
-
Permission is hereby granted, free of charge, to any person obtaining
|
|
29
|
-
a copy of this software and associated documentation files (the
|
|
30
|
-
"Software"), to deal in the Software without restriction, including
|
|
31
|
-
without limitation the rights to use, copy, modify, merge, publish,
|
|
32
|
-
distribute, sublicense, and/or sell copies of the Software, and to
|
|
33
|
-
permit persons to whom the Software is furnished to do so, subject to
|
|
34
|
-
the following conditions:
|
|
35
|
-
|
|
36
|
-
The above copyright notice and this permission notice shall be
|
|
37
|
-
included in all copies or substantial portions of the Software.
|
|
38
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
39
|
-
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
40
|
-
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
41
|
-
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
42
|
-
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
43
|
-
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
44
|
-
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.rdoc
CHANGED
|
@@ -1,33 +1,26 @@
|
|
|
1
|
-
== WindowRails
|
|
1
|
+
== WindowRails (for jQuery)
|
|
2
2
|
|
|
3
3
|
WindowRails is a plugin for Rails that provides easy to use AJAXy windows. It is based
|
|
4
|
-
completely on {
|
|
5
|
-
Rails to make it easy to use from a Rails app.
|
|
4
|
+
completely on {jquery-ui}[http://jquery-ui.com] and the [jQuery Window Plugin}[http://fstoke.me/jquery/window/]
|
|
5
|
+
with helpers for Rails to make it easy to use from a Rails app.
|
|
6
6
|
|
|
7
|
-
==
|
|
7
|
+
== Requirements
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
* jQuery
|
|
10
|
+
* jQuery-UI with Dialog widget enabled
|
|
10
11
|
|
|
11
|
-
|
|
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
|
-
|
|
16
|
-
=== Gem based installs
|
|
17
|
-
|
|
18
|
-
Gem based installs (bundler) will need to run the install task. For rails versions < 3 the task
|
|
19
|
-
must be added to the Rakefile:
|
|
20
|
-
|
|
21
|
-
require 'window_rails/tasks'
|
|
22
|
-
|
|
23
|
-
Then run the install:
|
|
12
|
+
== Installation
|
|
24
13
|
|
|
25
14
|
rake window_rails:install
|
|
26
15
|
|
|
27
16
|
=== Basic examples to get you started
|
|
28
17
|
|
|
29
18
|
==== Linking to a window
|
|
30
|
-
|
|
19
|
+
===== Load an entire HTML page into an IFrame
|
|
20
|
+
<%= link_to_window('Link', :iframe => {:controller => :my_controller, :action => :my_action}, :window => 'some_name') %>
|
|
21
|
+
|
|
22
|
+
===== Load a partial page directly into the DOM within the window
|
|
23
|
+
<%= link_to_window('Link', :url => {:controller => :my_controller, :action => :my_action}, :width => 400, :height => 300, :window => 'some_name') %>
|
|
31
24
|
|
|
32
25
|
==== Opening a window via AJAX
|
|
33
26
|
def open_my_window
|
|
@@ -35,7 +28,7 @@ Then run the install:
|
|
|
35
28
|
format.html
|
|
36
29
|
format.js do
|
|
37
30
|
render :update do |page|
|
|
38
|
-
page.open_window({:partial => 'my_partial'}, :
|
|
31
|
+
page.open_window({:partial => 'my_partial'}, :width => 400, :height => 200, :window => 'my_window')
|
|
39
32
|
end
|
|
40
33
|
end
|
|
41
34
|
end
|
|
@@ -73,11 +66,6 @@ Then run the install:
|
|
|
73
66
|
|
|
74
67
|
{Issues}[http://github.com/chrisroberts/window_rails/issues]
|
|
75
68
|
|
|
76
|
-
== Thanks
|
|
77
|
-
|
|
78
|
-
* Many thanks to Sébastien Gruhier (creator of {Prototype Window}[http://prototype-window.xilinus.com/])
|
|
79
|
-
|
|
80
69
|
== License
|
|
81
70
|
|
|
82
|
-
*
|
|
83
|
-
* WindowRails continues on under the MIT license
|
|
71
|
+
* WindowRails is released under an MIT license
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
class WindowRailsController <
|
|
2
|
-
|
|
1
|
+
class WindowRailsController < ApplicationController
|
|
2
|
+
|
|
3
|
+
unloadable
|
|
4
|
+
|
|
3
5
|
# Make sure we kick any thing out that is making a request other
|
|
4
6
|
# than openning a new window
|
|
5
7
|
before_filter :redirect_out, :except => :open_window
|
|
@@ -26,10 +28,23 @@ class WindowRailsController < ActionController::Base
|
|
|
26
28
|
redirect_to '/'
|
|
27
29
|
end
|
|
28
30
|
format.js do
|
|
31
|
+
opts = {}
|
|
32
|
+
content = nil
|
|
33
|
+
if(params[:window_url].blank?)
|
|
34
|
+
content = {:url => params[:iframe_url]}
|
|
35
|
+
else
|
|
36
|
+
content = {:content_url => params[:window_url]}
|
|
37
|
+
end
|
|
38
|
+
base_key = params[:window_options] ? :window_options : 'window_options'
|
|
39
|
+
if(params[base_key])
|
|
40
|
+
params[base_key].keys.each do |key|
|
|
41
|
+
opts[key.to_sym] = params[base_key][key]
|
|
42
|
+
end
|
|
43
|
+
end
|
|
29
44
|
render :update do |page|
|
|
30
|
-
page.open_window(
|
|
45
|
+
page.open_window(content, opts || {})
|
|
31
46
|
end
|
|
32
47
|
end
|
|
33
48
|
end
|
|
34
49
|
end
|
|
35
|
-
end
|
|
50
|
+
end
|
data/lib/window_rails.rb
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
require 'window_rails/version'
|
|
2
2
|
|
|
3
|
-
if(defined?(Rails))
|
|
4
|
-
require
|
|
3
|
+
if(defined?(Rails::Engine))
|
|
4
|
+
require 'window_rails/engine'
|
|
5
|
+
else
|
|
6
|
+
%w(window_rails_generators window_rails_view).each do |part|
|
|
7
|
+
require "window_rails/#{part}"
|
|
8
|
+
end
|
|
5
9
|
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
module WindowRails
|
|
2
|
+
class Engine < Rails::Engine
|
|
3
|
+
|
|
4
|
+
rake_tasks do
|
|
5
|
+
require 'window_rails/tasks'
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
# We do all our setup in here
|
|
9
|
+
config.to_prepare do
|
|
10
|
+
%w(window_rails_generators window_rails_view).each do |part|
|
|
11
|
+
require "window_rails/#{part}"
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
data/lib/window_rails/tasks.rb
CHANGED
|
@@ -1,7 +1,69 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
require 'fileutils'
|
|
2
|
+
|
|
3
|
+
namespace :window_rails do
|
|
4
|
+
|
|
5
|
+
desc 'Install window_rails'
|
|
3
6
|
task :install do
|
|
4
|
-
|
|
7
|
+
FileUtils.mkdir_p(File.join(Rails.root, 'public', 'window_rails'))
|
|
8
|
+
Rake::Task['window_rails:install_javascripts'].invoke
|
|
9
|
+
Rake::Task['window_rails:install_stylesheets'].invoke
|
|
10
|
+
Rake::Task['window_rails:install_assets'].invoke
|
|
11
|
+
Rake::Task['window_rails:install_version'].invoke
|
|
12
|
+
puts '*' * 50
|
|
13
|
+
puts 'WindowRails installation is complete.'
|
|
14
|
+
puts 'NOTE: Please refer to README file for any additional setup.'
|
|
15
|
+
puts '*' * 50
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
task :upgrade do
|
|
19
|
+
Rake::Task['window_rails:install_javascripts'].invoke
|
|
20
|
+
Rake::Task['window_rails:install_stylesheets'].invoke
|
|
21
|
+
Rake::Task['window_rails:install_assets'].invoke
|
|
22
|
+
puts 'WindowRails files have been updated to most current version'
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
task :install_javascripts do
|
|
26
|
+
install_items('javascripts')
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
task :install_stylesheets do
|
|
30
|
+
install_items('stylesheets')
|
|
5
31
|
end
|
|
32
|
+
|
|
33
|
+
task :install_assets do
|
|
34
|
+
install_items('images')
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
task :install_version do
|
|
38
|
+
f = File.open(File.join(Rails.root, 'public', 'window_rails', 'version'), 'w')
|
|
39
|
+
f.write WindowRails::VERSION
|
|
40
|
+
f.close
|
|
41
|
+
puts 'Version file written'
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
desc 'Output current version information'
|
|
45
|
+
task :version do
|
|
46
|
+
asset_version = nil
|
|
47
|
+
if(File.exists?(File.join(Rails.root, 'public', 'window_rails', 'version')))
|
|
48
|
+
asset_version = File.read(File.join(Rails.root, 'public', 'window_rails', 'version')).strip
|
|
49
|
+
end
|
|
50
|
+
puts "Current WindowRails version: #{WindowRails::VERSION}"
|
|
51
|
+
puts "Current WindowRails assets version: #{asset_version}"
|
|
52
|
+
if(WindowRails::VERSION != asset_version.to_s)
|
|
53
|
+
puts "WARNING #{'*' * 50}"
|
|
54
|
+
puts 'WindowRails assets within project are out of date'
|
|
55
|
+
puts 'Please run: rake window_rails:upgrade'
|
|
56
|
+
puts "WARNING #{'*' * 50}"
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def install_items(item)
|
|
62
|
+
FileUtils.mkdir_p(File.join(Rails.root, 'public', 'window_rails', item))
|
|
63
|
+
FileUtils.cp_r(
|
|
64
|
+
File.join(File.dirname(__FILE__), '..', '..', 'files', item, File::SEPARATOR, '.'),
|
|
65
|
+
File.join(Rails.root, 'public', 'window_rails', item)
|
|
66
|
+
)
|
|
67
|
+
puts "#{item.titleize} files installed."
|
|
6
68
|
end
|
|
7
69
|
|
data/lib/window_rails/version.rb
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
|
+
require 'rails_javascript_helpers'
|
|
2
|
+
|
|
1
3
|
module WindowRailsGenerators
|
|
2
|
-
|
|
4
|
+
|
|
5
|
+
include RailsJavaScriptHelpers
|
|
3
6
|
include ActionView::Helpers::JavaScriptHelper
|
|
4
7
|
include ActionView::Helpers::TagHelper
|
|
5
8
|
|
|
@@ -8,7 +11,27 @@ module WindowRailsGenerators
|
|
|
8
11
|
# Opens an alert window
|
|
9
12
|
def open_alert_window(msg, options={})
|
|
10
13
|
options[:width] ||= 200
|
|
11
|
-
|
|
14
|
+
options[:modal] = true
|
|
15
|
+
options[:title] ||= 'Alert!'
|
|
16
|
+
options[:buttons] ||= {'OK' => 'function(){ jQuery(this).dialog("close");}'}
|
|
17
|
+
store_content(msg, 'alert_modal');
|
|
18
|
+
self << "
|
|
19
|
+
if(jQuery('#alert_modal').size() == 0){
|
|
20
|
+
jQuery('<div id=\"alert_modal\"></div>')
|
|
21
|
+
.html(window_rails_contents['alert_modal'])
|
|
22
|
+
.dialog(#{format_type_to_js(options)});
|
|
23
|
+
} else {
|
|
24
|
+
jQuery('#alert_modal')
|
|
25
|
+
.html(window_rails_contents['alert_modal'])
|
|
26
|
+
.dialog(#{format_type_to_js(options)}).focus();
|
|
27
|
+
}"
|
|
28
|
+
nil
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# Closes alert window
|
|
32
|
+
def close_alert_window
|
|
33
|
+
self << 'jQuery("#alert_modal").dialog("close");'
|
|
34
|
+
nil
|
|
12
35
|
end
|
|
13
36
|
|
|
14
37
|
# msg:: Confirmation message
|
|
@@ -16,7 +39,21 @@ module WindowRailsGenerators
|
|
|
16
39
|
# Opens a confirmation window
|
|
17
40
|
def open_confirm_window(msg, options={})
|
|
18
41
|
options[:width] ||= 200
|
|
19
|
-
|
|
42
|
+
options[:modal] = true
|
|
43
|
+
options[:title] ||= 'Confirm'
|
|
44
|
+
options[:buttons] ||= {'OK' => 'function(){ jQuery(this).dialog("close");}'}
|
|
45
|
+
store_content(msg, 'confirmation_modal')
|
|
46
|
+
self << "
|
|
47
|
+
if(jQuery('#confirmation_modal').size() == 0){
|
|
48
|
+
jQuery('<div id=\"confirmation_modal\"></div>')
|
|
49
|
+
.html(window_rails_contents['confirmation_modal'])
|
|
50
|
+
.dialog(#{format_type_to_js(options)});
|
|
51
|
+
} else {
|
|
52
|
+
jQuery('#confirmation_modal')
|
|
53
|
+
.html(window_rails_contents['confirmation_modal'])
|
|
54
|
+
.dialog(#{format_type_to_js(options)}).focus();
|
|
55
|
+
}"
|
|
56
|
+
nil
|
|
20
57
|
end
|
|
21
58
|
|
|
22
59
|
# msg:: Information message
|
|
@@ -24,19 +61,62 @@ module WindowRailsGenerators
|
|
|
24
61
|
# Open an information window
|
|
25
62
|
def open_info_window(msg, options={})
|
|
26
63
|
options[:width] ||= 200
|
|
27
|
-
|
|
64
|
+
options[:modal] = true
|
|
65
|
+
options[:title] ||= 'Information'
|
|
66
|
+
options[:close_on_escape] = false
|
|
67
|
+
store_content(msg, 'information_modal')
|
|
68
|
+
self << "
|
|
69
|
+
if(jQuery('#information_modal').size() == 0){
|
|
70
|
+
jQuery('<div id=\"information_modal\"></div>')
|
|
71
|
+
.html(window_rails_contents['information_modal'])
|
|
72
|
+
.dialog(#{format_type_to_js(options)});
|
|
73
|
+
} else {
|
|
74
|
+
jQuery('#information_modal')
|
|
75
|
+
.html(window_rails_contents['information_modal'])
|
|
76
|
+
.dialog(#{format_type_to_js(options)}).focus();
|
|
77
|
+
}"
|
|
78
|
+
nil
|
|
28
79
|
end
|
|
29
80
|
|
|
30
81
|
# Close an information window
|
|
31
82
|
def close_info_window
|
|
32
|
-
self << "
|
|
83
|
+
self << 'jQuery("#information_modal").dialog("close");'
|
|
84
|
+
nil
|
|
33
85
|
end
|
|
34
86
|
|
|
35
87
|
# Update the contents of an information window
|
|
36
88
|
def update_info_window(msg)
|
|
37
|
-
self << "
|
|
89
|
+
self << 'jQuery("#information_modal").html(#{format_type_to_js(msg)});'
|
|
90
|
+
nil
|
|
38
91
|
end
|
|
39
|
-
|
|
92
|
+
|
|
93
|
+
def window_setup
|
|
94
|
+
@set ||= false
|
|
95
|
+
unless(@set)
|
|
96
|
+
self << '
|
|
97
|
+
if(typeof(window.window_rails_windows) == "undefined") {
|
|
98
|
+
window.window_rails_windows = {};
|
|
99
|
+
} if(typeof(window_rails_windows_array) == "undefined") {
|
|
100
|
+
window.window_rails_windows_array = new Array();
|
|
101
|
+
}
|
|
102
|
+
'
|
|
103
|
+
end
|
|
104
|
+
@set = true
|
|
105
|
+
nil
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def window(dom_id)
|
|
109
|
+
window_setup
|
|
110
|
+
unless(dom_id.blank?)
|
|
111
|
+
dom_id = dom_id.to_s.dup
|
|
112
|
+
dom_id.slice!(0) if dom_id.start_with?('#')
|
|
113
|
+
self << "window.window_rails_windows['#{dom_id}']"
|
|
114
|
+
else
|
|
115
|
+
self << "window.window_rails_windows[window.window_rails_windows_array[0]]"
|
|
116
|
+
end
|
|
117
|
+
self
|
|
118
|
+
end
|
|
119
|
+
|
|
40
120
|
# content:: content
|
|
41
121
|
# options:: Hash of options
|
|
42
122
|
# * window -> Name of the window to update (defaults to last window)
|
|
@@ -49,7 +129,8 @@ module WindowRailsGenerators
|
|
|
49
129
|
win = options.delete(:window)
|
|
50
130
|
error = options.delete(:error)
|
|
51
131
|
key = store_content(content)
|
|
52
|
-
self << check_for_window(win, error){ update_window_contents(key, win) }
|
|
132
|
+
self << check_for_window(win, error){ update_window_contents(key, win, options) }
|
|
133
|
+
nil
|
|
53
134
|
end
|
|
54
135
|
|
|
55
136
|
# name:: Name of the window
|
|
@@ -57,67 +138,46 @@ module WindowRailsGenerators
|
|
|
57
138
|
# Checks for a window of the given name. If a block is provided, it will be executed
|
|
58
139
|
# if the window is found
|
|
59
140
|
def check_for_window(name, error=true)
|
|
141
|
+
name = name.to_s.dup
|
|
142
|
+
name.slice!(0) if name.start_with?('#')
|
|
143
|
+
window_setup
|
|
60
144
|
if(name.blank?)
|
|
61
|
-
self <<
|
|
145
|
+
self << "if(window.window_rails_windows.length > 0){"
|
|
62
146
|
else
|
|
63
|
-
self << "if(
|
|
147
|
+
self << "if(window.window_rails_windows['#{name}']){"
|
|
64
148
|
end
|
|
65
149
|
yield if block_given?
|
|
66
150
|
self << "}"
|
|
67
151
|
self << "else { alert('Unexpected error. Failed to locate window for output.'); }" if error
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
# Simply wraps a block within an else statement
|
|
71
|
-
def else_block
|
|
72
|
-
self << "else {"
|
|
73
|
-
yield if block_given?
|
|
74
|
-
self << "}"
|
|
152
|
+
nil
|
|
75
153
|
end
|
|
76
154
|
|
|
77
155
|
# key:: Content key location
|
|
78
156
|
# win:: Name of window
|
|
79
157
|
# Updates the contents of the window. If no window name is provided, the topmost window
|
|
80
158
|
# will be updated
|
|
81
|
-
def update_window_contents(key, win
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
else
|
|
85
|
-
self << "Windows.windows.values().last().setHTMLContent(window_rails_contents.get('#{key}'));"
|
|
86
|
-
end
|
|
159
|
+
def update_window_contents(key, win, options)
|
|
160
|
+
window(win) << ".html(window.window_rails_contents[#{format_type_to_js(key.to_s)}]);"
|
|
161
|
+
nil
|
|
87
162
|
end
|
|
88
163
|
|
|
89
164
|
# win:: Name of window
|
|
90
165
|
# Will focus the window. If no name provided, topmost window will be focused
|
|
91
166
|
def focus_window(win=nil)
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
else
|
|
95
|
-
self << "Windows.focus(Windows.windows.values().last().getId());"
|
|
96
|
-
end
|
|
167
|
+
window(win) << '.dialog("focus");'
|
|
168
|
+
nil
|
|
97
169
|
end
|
|
98
170
|
|
|
99
171
|
# win:: Name of window
|
|
100
172
|
# Will maximize the window. If no name provided, topmost window will be maximized
|
|
101
173
|
def maximize_window(win=nil)
|
|
102
|
-
|
|
103
|
-
if(name)
|
|
104
|
-
self << "Windows.getWindowByName('#{escape_javascript(win)}').maximize();"
|
|
105
|
-
else
|
|
106
|
-
self << "Windows.windows.values().last().maximize();"
|
|
107
|
-
end
|
|
108
|
-
end
|
|
174
|
+
# noop
|
|
109
175
|
end
|
|
110
176
|
|
|
111
177
|
# win:: Name of window
|
|
112
178
|
# Will minimize the window. If no name provided, topmost window will be minimized
|
|
113
179
|
def minimize_window(win)
|
|
114
|
-
|
|
115
|
-
if(name)
|
|
116
|
-
self << "Windows.getWindowByName('#{escape_javascript(win)}').minimize();"
|
|
117
|
-
else
|
|
118
|
-
self << "Windows.windows.values().last().minimize();"
|
|
119
|
-
end
|
|
120
|
-
end
|
|
180
|
+
# noop
|
|
121
181
|
end
|
|
122
182
|
|
|
123
183
|
# key:: Content key location
|
|
@@ -126,10 +186,56 @@ module WindowRailsGenerators
|
|
|
126
186
|
# Creates a new window. Generally this should not be called,
|
|
127
187
|
# rather #open_window should be used
|
|
128
188
|
def create_window(key, win, options)
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
189
|
+
options[:auto_open] ||= false
|
|
190
|
+
options[:close] = "function(event,ui){
|
|
191
|
+
#{
|
|
192
|
+
if(options[:close])
|
|
193
|
+
"callback = #{options[:close]}; callback();"
|
|
194
|
+
end
|
|
195
|
+
}
|
|
196
|
+
jQuery('##{win}').dialog('destroy');
|
|
197
|
+
window.window_rails_windows['#{win}'] = null;
|
|
198
|
+
window.window_rails_windows_array.splice(window.window_rails_windows_array.indexOf('#{win}'), 1);
|
|
199
|
+
jQuery('##{win}').remove();
|
|
200
|
+
}"
|
|
201
|
+
unless(win.is_a?(String))
|
|
202
|
+
win = win.to_s
|
|
203
|
+
end
|
|
204
|
+
if(win.start_with?('#'))
|
|
205
|
+
win.slice!(0)
|
|
206
|
+
end
|
|
207
|
+
window_setup
|
|
208
|
+
self << "
|
|
209
|
+
if(jQuery('#window_rails_windows').size() == 0){
|
|
210
|
+
jQuery('body').append('<div id=\"window_rails_windows\" style=\"visibility:hidden;display:none;\"></div>');
|
|
211
|
+
}
|
|
212
|
+
if(jQuery('##{win}').size() == 0){
|
|
213
|
+
jQuery('#window_rails_windows').append('<div id=\"#{win}\"></div>');
|
|
214
|
+
}
|
|
215
|
+
window.window_rails_windows['#{win}'] = jQuery('##{win}');
|
|
216
|
+
window.window_rails_windows_array.push('#{win}');
|
|
217
|
+
"
|
|
218
|
+
if(key == :url)
|
|
219
|
+
options[:auto_open] = true
|
|
220
|
+
self << "
|
|
221
|
+
jQuery.get(
|
|
222
|
+
'#{options.delete(:url)}',
|
|
223
|
+
function(data){
|
|
224
|
+
window.window_rails_windows['#{win}']
|
|
225
|
+
.html(data)
|
|
226
|
+
.dialog(#{format_type_to_js(options)})
|
|
227
|
+
.dialog('open');
|
|
228
|
+
}
|
|
229
|
+
);
|
|
230
|
+
"
|
|
231
|
+
else
|
|
232
|
+
self << "
|
|
233
|
+
window.window_rails_windows['#{win}']
|
|
234
|
+
.html(window.window_rails_contents['#{key}'])
|
|
235
|
+
.dialog(#{format_type_to_js(options)});
|
|
236
|
+
"
|
|
237
|
+
end
|
|
238
|
+
nil
|
|
133
239
|
end
|
|
134
240
|
|
|
135
241
|
# win:: Name of window
|
|
@@ -137,30 +243,15 @@ module WindowRailsGenerators
|
|
|
137
243
|
# Shows the window centered on the screen. If no window name is provided
|
|
138
244
|
# it will default to the last created window. Generally this should not
|
|
139
245
|
# be called, rather #open_window should be used
|
|
246
|
+
# NOTE: No modal mode currently
|
|
140
247
|
def show_window(win, modal)
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
end
|
|
147
|
-
self << "#{s}.showCenter(#{modal ? 'true' : 'false'});"
|
|
148
|
-
end
|
|
149
|
-
|
|
150
|
-
# win:: Name of window
|
|
151
|
-
# constraints:: Constaint hash {:left, :right, :top, :bottom}
|
|
152
|
-
# Sets the constraints on the window. Generally this should not be used,
|
|
153
|
-
# rather #open_window should be used
|
|
154
|
-
def apply_window_constraints(win, constraints)
|
|
155
|
-
opts = {:left => 0, :right => 0, :top => 0, :bottom => 0}
|
|
156
|
-
opts.merge!(constraints) if constraints.is_a?(Hash)
|
|
157
|
-
s = nil
|
|
158
|
-
unless(win.blank?)
|
|
159
|
-
s = "Windows.getWindowByName('#{escape_javascript(win)}')"
|
|
160
|
-
else
|
|
161
|
-
s = "Windows.windows.values().last()"
|
|
248
|
+
modal ||= false
|
|
249
|
+
check_for_window(win) do
|
|
250
|
+
window(win) << ".dialog('option', 'modal', #{format_type_to_js(modal)});"
|
|
251
|
+
window(win) << ".dialog('option', 'autoOpen', true);"
|
|
252
|
+
window(win) << '.dialog("open");'
|
|
162
253
|
end
|
|
163
|
-
|
|
254
|
+
nil
|
|
164
255
|
end
|
|
165
256
|
|
|
166
257
|
# content:: Content for window
|
|
@@ -171,7 +262,6 @@ module WindowRailsGenerators
|
|
|
171
262
|
# * :iframe -> URL to load within an IFrame in the window
|
|
172
263
|
# * :width -> Width of the window
|
|
173
264
|
# * :height -> Height of the window
|
|
174
|
-
# * :className -> Theme name for the window
|
|
175
265
|
# * :no_update -> Set to true to force creation of a new window even if window of same name already exists (defaults to false)
|
|
176
266
|
# Creates a new window and displays it at the center of the viewport. Content can be provided as
|
|
177
267
|
# 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
|
|
@@ -183,14 +273,16 @@ module WindowRailsGenerators
|
|
|
183
273
|
# be isolated from the current page, but this isolation means it cannot communicate with other windows on the page (including
|
|
184
274
|
# its own).
|
|
185
275
|
def open_window(content, options={})
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
options[:className] = 'alphacube' unless options[:className]
|
|
276
|
+
key = nil
|
|
277
|
+
if(options[:iframe])
|
|
278
|
+
iframe = @context.url_for(options.delete(:iframe))
|
|
279
|
+
end
|
|
191
280
|
if(content.is_a?(Hash))
|
|
192
281
|
if(content[:url])
|
|
193
|
-
options[:
|
|
282
|
+
options[:iframe] = @context.url_for(content[:url])
|
|
283
|
+
content = nil
|
|
284
|
+
elsif(content[:content_url])
|
|
285
|
+
options[:url] = @context.url_for(content[:content_url])
|
|
194
286
|
content = nil
|
|
195
287
|
else
|
|
196
288
|
content = @context.render(content)
|
|
@@ -198,34 +290,42 @@ module WindowRailsGenerators
|
|
|
198
290
|
end
|
|
199
291
|
options[:width] ||= 300
|
|
200
292
|
options[:height] ||= 200
|
|
201
|
-
|
|
202
|
-
if(
|
|
293
|
+
modal = options[:modal]
|
|
294
|
+
if(options[:on_close])
|
|
295
|
+
options[:close] = options.delete(:on_close)
|
|
296
|
+
end
|
|
297
|
+
if(options[:iframe])
|
|
298
|
+
key = :iframe
|
|
299
|
+
elsif(options[:url])
|
|
300
|
+
key = :url
|
|
301
|
+
else
|
|
302
|
+
key = store_content(content)
|
|
303
|
+
end
|
|
304
|
+
win = options.delete(:window) || "win_#{rand(99999)}"
|
|
305
|
+
if(options.delete(:no_update))
|
|
203
306
|
create_window(key, win, options)
|
|
204
|
-
unless(constraints == false)
|
|
205
|
-
apply_window_constraints(win, constraints)
|
|
206
|
-
end
|
|
207
307
|
show_window(win, modal)
|
|
208
308
|
else
|
|
209
309
|
check_for_window(win, false) do
|
|
210
|
-
update_window_contents(key, win)
|
|
310
|
+
update_window_contents(key, win, options)
|
|
211
311
|
focus_window(win)
|
|
212
312
|
end
|
|
213
313
|
else_block do
|
|
214
314
|
create_window(key, win, options)
|
|
215
|
-
unless(constraints == false)
|
|
216
|
-
apply_window_constraints(win, constraints)
|
|
217
|
-
end
|
|
218
315
|
show_window(win, modal)
|
|
219
316
|
end
|
|
220
317
|
end
|
|
318
|
+
nil
|
|
221
319
|
end
|
|
222
320
|
|
|
223
|
-
def store_content(content)
|
|
224
|
-
key
|
|
225
|
-
|
|
321
|
+
def store_content(content, key=nil)
|
|
322
|
+
unless(key)
|
|
323
|
+
key = rand.to_s
|
|
324
|
+
key.slice!(0,2)
|
|
325
|
+
end
|
|
226
326
|
c = content.is_a?(Hash) ? @context.render(content) : content.to_s
|
|
227
|
-
self << "if(typeof(window_rails_contents) == 'undefined'){
|
|
228
|
-
self << "window_rails_contents
|
|
327
|
+
self << "if(typeof(window.window_rails_contents) == 'undefined'){ window.window_rails_contents = {}; }"
|
|
328
|
+
self << "window.window_rails_contents[#{format_type_to_js(key.to_s)}] = #{format_type_to_js(c)};"
|
|
229
329
|
key
|
|
230
330
|
end
|
|
231
331
|
|
|
@@ -233,24 +333,37 @@ module WindowRailsGenerators
|
|
|
233
333
|
# * :window -> name of window to close
|
|
234
334
|
# Close the window of the provided name or the last opened window
|
|
235
335
|
def close_window(options = {})
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
336
|
+
win_name = if(options.is_a?(Hash))
|
|
337
|
+
(options[:window] || options[:name]).to_s
|
|
338
|
+
elsif(options.is_a?(Array))
|
|
339
|
+
options.map(&:to_s)
|
|
240
340
|
else
|
|
241
|
-
|
|
341
|
+
options.to_s
|
|
342
|
+
end
|
|
343
|
+
win_name.each do |win|
|
|
344
|
+
window(win) << '.dialog("close");'
|
|
242
345
|
end
|
|
243
|
-
self << "if(myWin){ myWin.close(); }"
|
|
244
346
|
end
|
|
245
347
|
|
|
246
348
|
# Close all open windows
|
|
247
349
|
def close_all_windows
|
|
248
|
-
|
|
350
|
+
setup_windows
|
|
351
|
+
self << '
|
|
352
|
+
jQuery.each(
|
|
353
|
+
window_rails_windows_array,
|
|
354
|
+
function(name, win){
|
|
355
|
+
window.window_rails_windows[win].dialog("close");
|
|
356
|
+
}
|
|
357
|
+
);
|
|
358
|
+
'
|
|
249
359
|
end
|
|
250
360
|
|
|
251
361
|
# args:: List of window names to refresh (All will be refreshed if :all is included)
|
|
252
362
|
# Refresh window contents
|
|
363
|
+
# NOTE: Currently does nothing
|
|
364
|
+
# NOTE: Deprecated (remaining temporarily for compatibility reasons)
|
|
253
365
|
def refresh_window(*args)
|
|
366
|
+
return
|
|
254
367
|
self << "var myWin = null;"
|
|
255
368
|
if(args.include?(:all))
|
|
256
369
|
self << "Windows.windows.values().each(function(win){ win.refresh(); });"
|
|
@@ -266,7 +379,10 @@ module WindowRailsGenerators
|
|
|
266
379
|
# options:: Options
|
|
267
380
|
# Helper for observing fields that have been dynamically loaed into the DOM. Works like
|
|
268
381
|
# #observe_field but not as full featured.
|
|
269
|
-
|
|
382
|
+
# NOTE: Currently does nothing
|
|
383
|
+
# NOTE: Deprecated (remaining temporarily for compatibility reasons)
|
|
384
|
+
def observe_dynamically_loaded_field(field_id, options={}) # :nodoc
|
|
385
|
+
return
|
|
270
386
|
f = options.delete(:function)
|
|
271
387
|
unless(f)
|
|
272
388
|
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()})}"
|
|
@@ -275,5 +391,16 @@ module WindowRailsGenerators
|
|
|
275
391
|
end
|
|
276
392
|
self << "if($('#{escape_javascript(field_id.to_s)}')){ $('#{escape_javascript(field_id.to_s)}').observe('change', #{f}); }"
|
|
277
393
|
end
|
|
278
|
-
|
|
394
|
+
|
|
395
|
+
private
|
|
396
|
+
|
|
397
|
+
# Simply wraps a block within an else statement
|
|
398
|
+
def else_block
|
|
399
|
+
self << "else {"
|
|
400
|
+
yield if block_given?
|
|
401
|
+
self << "}"
|
|
402
|
+
nil
|
|
403
|
+
end
|
|
404
|
+
|
|
279
405
|
end
|
|
406
|
+
ActionView::Helpers::PrototypeHelper::JavaScriptGenerator::GeneratorMethods.send :include, WindowRailsGenerators
|