2007-03-02
■[Ruby on Rails]ページ内にウィンドウを表示してみる。
Spinelz(スピネルズ)というJavaScriptのライブラリがある。これを使うとタブやメニューバー等々のインターフェースが簡単に実現できるようだ。デモページで試してみると、とっても楽しい!Railsで開発するアプリケーションにも是非、取り入れてみたい。機能の一つにブラウザのページ内にウィンドウを表示する機能があるので、それを試してみた。
インストール
ダウンロードして解凍したspinelz/srcフォルダの中身を、publicフォルダのimages、javascripts、stylesheets以下にそれぞれコピーした。
spinelz_0.4.1.zipを解凍したフォルダ
spinelz/ |-- src/ |-- images/ | |-- spinelz/ | |-- javascripts/ | |-- spinelz/ | |-- spinelz_lib/ | |-- stylesheets/ |-- spinelz/
上記フォルダ構成のオレンジ色の部分をpublicフォルダにコピーした。以下のような構成になった。
インストール後のpublicフォルダ
RAILS_ROOT/ |-- public/ |-- images/ | |-- spinelz/ | |-- rails.png | |-- javascripts | |-- spinelz/ | |-- spinelz_lib/ | |-- application.js | |-- controls.js | |-- dragdrop.js | |-- effects.js | |-- prototype.js | |-- stylesheets |-- spinelz/ |-- scaffold.css
javaスクリプトとスタイルシートの取り込み
- javascript_include_tagで利用したいjavaスクリプトを指定した。(関連が分からないので、spinelz_libフォルダの全てと、spinelzフォルダのwindowを含むファイル名のjavaスクリプトを、全て取り込んでしまった。)
- 同じようにスタイルシートも取り込む。とりあえずwindowを含むファイル名のスタイルシート一つだけ。
app/views/layouts/softwares.rhtml
<html> <head> <title>Softwares: <%= controller.action_name %></title> <%= javascript_include_tag "spinelz_lib/builder" %> <%= javascript_include_tag "spinelz_lib/controls" %> <%= javascript_include_tag "spinelz_lib/dragdrop" %> <%= javascript_include_tag "spinelz_lib/effects" %> <%= javascript_include_tag "spinelz_lib/json.js" %> <%= javascript_include_tag "spinelz_lib/prototype" %> <%= javascript_include_tag "spinelz_lib/resize" %> <%= javascript_include_tag "spinelz_lib/scriptaculous" %> <%= javascript_include_tag "spinelz_lib/slider" %> <%= javascript_include_tag "spinelz_lib/spinelz_util" %> <%= javascript_include_tag "spinelz_lib/unittest" %> <%= javascript_include_tag "spinelz/window" %> <%= javascript_include_tag "spinelz/window_resizeEx" %> <%= stylesheet_link_tag "spinelz/window" %> <%= stylesheet_link_tag 'scaffold' %> </head> ...(以下省略)...
ウィンドウを表示するビューの設定
前回の画像ファイルをアップロードして表示するテストプロジェクトに、ウィンドウ表示の機能を追加してみた。
app/views/softwares/_show_window.rhtml
- Spinelzデモのソースを参考に、ウィンドウ表示用のパーシャルファイルを作成した。このファイルがウィンドウを表示するコードになる。
- divで階層化されているのと、ちょっとしたjavaスクリプトが含まれているだけで、構成はとても単純だ。
- コードの中で、以下のidが一致しないとウィンドウが表示されない。
- <div id="window<%= @software.id %>">
- new Window("window<%= @software.id %>",{width:800, height: 600,modal:false});
- ウィンドウを複数開く必要が無ければ、以下のようにidを固定してしまってOK。
- <div id="window">
- new Window("window",{width:800, height: 600,modal:false});
<div id="window<%= @software.id %>"> <div> <%# ウィンドウのタイトル %> <%= url_for_file_column(@software, :image) %> </div> <div> <%# ウィンドウの中身 %> <% for column in Software.content_columns %> <p> <b><%= column.human_name %>:</b> <%#=h @software.send(column.name) %> <%= image_tag url_for_image_column(@software, "image", :large) %> </p> <% end %> <%= link_to 'Edit', :action => 'edit', :id => @software %> | <%= link_to 'Back', :action => 'list' %> </div> </div> <script type="text/javascript"> normal_win = new Window("window<%= @software.id %>",{width:800, height: 600,modal:false}); normal_win.open(); normal_win.center(); </script>
app/views/softwares/list.rhtml
- Showリンクをクリックすると、ink_to_remoteで更新して、ウィンドウを表示するようにしてみた。
- リストも表示されているので、次々と選択して内容を確認することが出来る。
<h1>Listing softwares</h1> <div id="update_window"> <%# ここにウィンドウが追記される %> </div> ...(途中省略)... <td><%= link_to_remote 'Show', :update => "update_window", :url => {:action => 'show_window', :id => software} %></td> ...(途中省略)...
app/controllers/softwares_controller.rb
- link_to_remoteで呼び出されるコントローラー。showメソッドにrender :partial => 'show_window'を追記した。
class SoftwaresController < ApplicationController ...(途中省略)... def show_window @software = Software.find(params[:id]) render :partial => 'show_window' end ...(途中省略)...
以上で、こんな感じになった。listとshowのアクションを行き来することなく、次々と写真を確認できる。ウィンドウはタイトルバーをドラッグして移動できる。リサイズ、最大化、最小化も可能。OS環境がブラウザの中に表現されたような感じ。
Railsの機能とは関係ないが、こんな表示が手軽にできるSpinelz(スピネルズ)って素晴らしいです!開発するのが楽しくなる。他にも機能はたくさんあるので、今後どうやって活用していくか、楽しみながら試行錯誤中。
トラックバック - http://d.hatena.ne.jp/zariganitosh/20070302/1172823807
リンク元
- 8 http://72.14.235.104/search?q=cache:E--W_W-dCwgJ:d.hatena.ne.jp/zariganitosh/20070224+url_for_file_column&hl=ja&ct=clnk&cd=4&gl=jp&client=firefox
- 7 http://www.google.co.jp/search?hl=ja&client=firefox&rls=org.mozilla:ja:official&hs=ObO&q=rails+ruby+パス&btnG=Google+検索&lr=lang_ja
- 7 http://www.google.co.jp/search?q=javascript_include_tag&lr=lang_ja&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&client=firefox
- 6 http://reader.livedoor.com/reader/
- 6 http://www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&q=radrails+日本語&num=50
- 5 http://www.google.co.jp/search?hl=ja&q=radrails+日本語化&lr=
- 4 http://b.hatena.ne.jp/essa/ruby on rails/
- 4 http://b.hatena.ne.jp/mukurofan/favorite
- 4 http://mail2.cyber-l.co.jp/cgi-bin/cbgrn/grn.cgi/message/view?cid=594&rid=244070&mid=22226&nid=2254044
- 4 http://search.yahoo.co.jp/search?p=spinelz&tid=top_v2&ei=UTF-8&search_x=1&pstart=1&fr=top_v2&b=11