theater.js iGoogleガジェットの作り方

デフォルトサンプル - theater-jsの日記の解説です。

とりあえずブログに載せる方法

以下にアクセスしてください。

http://gmodules.com/ig/creator?synd=open&url=http://susie-t.main.jp/theater/gadgets/200709121532.xml

下のほうにある「コードを取得」ボタンを押します。下のテキストエリアにコードが表示されますので、それをコピーしてブログに貼り付けてください。

シナリオがつまらない

ごめんなさい。ご自分で作ったシナリオを使用することもできます。

現在のシナリオは以下です。

http://susie-t.main.jp/theater/gadgets/scenario.js

エディタで開くと以下のようなコードが表示されます。(文字コードUTF-8)

Element.update("msg", "Loading...");
(new Theater({
  imgs:{
    title: 'http://f.hatena.ne.jp/images/fotolife/s/susie-t/20070911/20070911171131.gif',
    mk01: 'http://f.hatena.ne.jp/images/fotolife/s/susie-t/20070911/20070911171402.gif'
  },
  scenario: [
    {img:"$I{title}", msg:"theater.js"},
    {img:"$I{mk01}", msg:"これはtheater.js iGoogleガジェットのデフォルトサンプルです。"},
    {img:"$I{title}", msg:"おわり。"}
  ],
  filter:106,
  outEffect:'Fade',
  inEffect:'Appear'
})).speak("Please click to start.");

これを書き換えて、任意のサーバにアップし、http://gmodules.com/ig/creator?synd=open&url=http://susie-t.main.jp/theater/gadgets/200709121532.xmlで「ガジェットの設定」>「シナリオURL」の値をアップしたファイルのURLに変更、その後取得したコードをブログに貼り付ければOKです。

シナリオの書き方は?

とりあえず、以下の二つの部分に注目してください。

【画像指定】
  imgs:{
    title: 'http://f.hatena.ne.jp/images/fotolife/s/susie-t/20070911/20070911171131.gif',
    mk01: 'http://f.hatena.ne.jp/images/fotolife/s/susie-t/20070911/20070911171402.gif'
  },
【シナリオ】
  scenario: [
    {img:"$I{title}", msg:"theater.js"},
    {img:"$I{mk01}", msg:"これはtheater.js iGoogleガジェットのデフォルトサンプルです。"},
    {img:"$I{title}", msg:"おわり。"}
  ],

この部分を書き換えることでシナリオが変わります。

画像指定
【画像指定】
  imgs:{
    title: 'http://f.hatena.ne.jp/images/fotolife/s/susie-t/20070911/20070911171131.gif',
    mk01: 'http://f.hatena.ne.jp/images/fotolife/s/susie-t/20070911/20070911171402.gif'
  },

imgs:{・・・},の・・・の部分にシナリオで使用する画像を指定します。指定方法は

(画像の名前):'(画像のアドレス(フルパス))'

です。複数指定の場合は「,」で繋ぎます。ただし、末尾の「,」はつけないでください。画像アドレスは必ずフルパスで指定してください。

'http://f.hatena.ne.jp/images/fotolife/s/susie-t/20070911/' + '20070911171131.gif'

のようにしてもいけません。これは、相対参照の画像アドレス文字列が自動的(勝手)に変換されてしまうという、iGoogleガジェットの仕様(?)のためです。。。

ここで指定された画像はシナリオ開始前に先読みされ、シナリオ進行時の画像切替をスムーズにします。

シナリオ
【シナリオ】
  scenario: [
    {img:"$I{title}", msg:"theater.js"},
    {img:"$I{mk01}", msg:"これはtheater.js iGoogleガジェットのデフォルトサンプルです。"},
    {img:"$I{title}", msg:"おわり。"}
  ],

scenario:[・・・],の・・・の部分にシナリオを記述します。主な指定方法は

{img:"$I{(画像の名前)}", msg:"(表示する文章)"},

です。画像の名前は、前述の画像指定で記述したものです。複数指定の場合は「,」で繋ぎ、末尾はつけないでください。

でかい。見た目がしょぼい。

http://gmodules.com/ig/creator?synd=open&url=http://susie-t.main.jp/theater/gadgets/200709121532.xmlで表示設定の幅、高さを変更してからコードを取得すれば小さくなりますが、それだけだとはみ出ます。なので、スタイルシートを変更してください。

http://susie-t.main.jp/theater/gadgets/style.css

が現在のスタイルシートです。これを変更して任意のサーバにアップし、http://gmodules.com/ig/creator?synd=open&url=http://susie-t.main.jp/theater/gadgets/200709121532.xmlのガジェットの設定>スタイルシートURL をアップしたファイルのURLに変更してからコードを取得してください。

幅、高さにかかわる設定は

#frame, .frame{
  display:block;
  width:400px;
  height:300px;
}

#msg, .msg{
  letter-spacing:1px;
  width:400px;
  height:100px;
  font-size:14px;
  line-height:1.5em;
}

のwidth、heightです。#frame, .frame{・・・}が画像表示部分、#msg, .msg{・・・}が文章表示部分です。

余談ですが、

#play{
  margin: 20px;
}

は全体の指定で、外枠との余白を指定しています。これは、IEで必ず外枠の右側に背景色と同じ要素が付く(?)ため、これを意識させないように苦肉の策で指定しました。別の方法をご存知の方がおられましたらコメントください・・・。

更に詳しく

http://susie-t.main.jp/で解説していますのでそちらをご覧ください。*1

*1:今回使用した{img:・・・,msg:・・・}という記法(省略記法)については、新機能のためまだ解説していません。