画面の内容に合わせて、必要なJavaScriptやStyleSheetをincludeする場合、 以前紹介した content_forを使うのが便利ですが、 画面内で何度も呼び出される partial のなかに記述したりすると、 呼び出された回数分だけ include されてしまったりして不便です。

そこで、画面内で一回だけ content_for を実行するためのプラグイン、 content_for_once を作りました。こちらに置いてあります。

使い方。まずはプラグインをインストールします。

   1  % ./script/plugin install https://svn.s21g.com/public/rails/plugins/content_for_once/

あとは、Viewから以下のようにして呼び出します。

   1  <% content_for_once :head do %>
   2    <%= javascript_include_tag 'iepngfix' %>
   3  <% end %>

これで、このコードが実行されたときに、一度だけJavaScriptが includeされるようになります。

posted by Png genki on Sun 18 Nov 2007 at 04:54

Ultraviolet によるシンタックス・ハイライトに対応しました。

書式は以下のような感じです。

ruby>>
def foo
  bar
end
<<--

レンダリング結果は以下のとおり。

   1  def foo
   2    bar
   3  end

posted by Png genki on Sun 18 Nov 2007 at 04:22

前回の続き。導入そのままでは、

  • link作成ダイアログがリサイズできない
  • エディタのフォントサイズが小さい

という問題がありました。 Wikiサイトを調べると、割とすんなりと解決。

advlinkプラグイン導入
http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advlink

Content用css導入
http://wiki.moxiecode.com/index.php/TinyMCE:Configuration/content_css
FAQ:How do I change the default font size/face color of the editor?

具体的には

   1        tinyMCE.init({
   2        (略)
   3        content_css : "/stylesheets/tinymce.css",
   4        plugins : "advlink",
   5        extended_valid_elements : "a[name|href|target|title|onclick|rel]",

うむ。FCKより小回りが利くかもですね。
そして標準のプラグインがおおいのも++。advlinkも標準です:標準のプラグイン一覧

posted by Png satoko on Sun 18 Nov 2007 at 04:08

会社設立や、それに伴う環境の変化への対応などのため、しばらく開発がとまってしまっていた ShootingStar ですが、ipod touch&iphoneへの対応作業をほぼ完了いたしました。

DEMO: http://www.cocktail-party.jp/

screen shot

もうしばらくコードの整理をしてから、version 3.2.5 をリリースいたします。

よろしくお願いいたします。

posted by Png genki on Sat 17 Nov 2007 at 18:52

Core Services社が提供している DebugBarCompanion.JS を使って、IE6のデバッグ環境を改善してみた。

ScreenShot1

DebugBarは、ツールバー(DeskBand)とサイドバー(InfoBand)を使ったIE拡張で、DOM Inspector的な機能がある。Companion.JSは、CommBandを使ったIE拡張で、Script Console機能を持っている。

IEのJavaScriptデバッグには、本当に難儀していたので有難い。

posted by Png genki on Sat 17 Nov 2007 at 09:41

(注) 続きも書きました。advlinkなど。

TinyMCE本家サイトTinyMCE wikiがあります。

まとめ 

またRailsへの導入の仕方の記事もrubyonrails.orgにあります(現時点で2007年9月更新)。

http://wiki.rubyonrails.org/rails/pages/HowToUseTinyMCE 

posted by Png satoko on Fri 16 Nov 2007 at 16:14

TinyMCE 2.1.2(stableの最新)です。 

  • Operaの日本語入力が2重になる。
  • Safari3.0.3で日本語が入力できない

というバグはありますが・・

FCK, YUIよりがドキュメントが充実してカスタマイズが容易なように感じます。

またレポートします。 

 

posted by Png satoko on Fri 16 Nov 2007 at 15:54

以前、ログをトレースしながらautotestを走らせる方法を紹介しましたが、 今回はさらにその方法を拡張して、script/consoleも同時に実行してしまう 方法を紹介します。

ちなみに以前紹介した方法は、こんな感じでした。

% tail -f log/development.log &
% autotest

tail -f log/development.log &でloggerの出力をバックグラウンドで補足しつつ、フォアグラウンドではautotestを実行しています。

今回は、autotestもさらにバックグラウンドで起動させて、 フォアグラウンドで./script/consoleを実行させるのですが、 一つ問題があります。

autotestは、migrationの実行などでDBの中身が変わった場合など、 Ctrl+CでINTを送ってリロードさせる必要があるのですが、 バックグラウンドプロセスにしてしまうと、Ctrl+Cでリロード できなくなってしまいます。

そこで、autotestのリロードを script/consle の中から行えるように するプラグインを作りました。

インストール方法は、通常のRailsプラグインと同様です。

% ./script/plugin install http://svn.s21g.com/public/rails/plugins/trident/

使い方は、モニタリング用のコンソールから以下のRakeタスクを実行します。

% rake trident

すると、tail -f log/development.logautotestが実行され、 script/consoleが立ち上がります。

この状態で、autotestをリロードさせる場合、script/consoleから

> Trident.reload

を実行すればOKです。

終了するときは、普通にscript/cosoleexitすると、生成された子プロセスと一緒に終了します。

posted by Png genki on Fri 16 Nov 2007 at 06:51

こちら で、ExceptionNotifierプラグインのテンプレートに関するバグの報告が出ていました。

Plugins - Exception Notifier

Brett Neumeier 12 Oct 2007

In ruby 1.8.6p111, rendering the _environment.rhtml plugin fails with "TemplateError: flag after width". This is fixed if you change the string "%-s" to "%-s" on line three of the template.

Chris 18 Oct 2007

This is the correct string: "%-*s:"

具体的には、views/exception_notifier/_environment.rhtml の3行目を次のように修正すればOKのようです。

views/exception_notifier/_environment.rhtml

<% max = @request.env.keys.max { |a,b| a.length <=> b.length } -%>
<% @request.env.keys.sort.each do |key| -%>
* <%= "%-*s: %s" % [max.length, key, filter_sensitive_post_data_from_env(key, @request.env[key].to_s.strip)] %>
<% end -%>

手元の環境(ruby-1.8.6 p36/Rails-1.99.0)では、これで問題なく動作するようになりました。

posted by Png genki on Thu 15 Nov 2007 at 05:07

Railsのプラグインは非常に便利な仕組みなのですが、pluginのテスト とうまく付き合うにはちょっと工夫が必要です。

plugin用に書かれているテストは、二通りの方法で実行される可能性があります。

  1. plugin ディレクトリの中で rake コマンドた実行された場合
  2. RAILS_ROOT から rake test:plugins が実行された場合

いくつかのプラグインは、上記の片方のケースのみを想定して test が書かれている場合があり、想定されていないケースからテスト が実行された場合、多くは沢山のエラーを出すようになります。

このような場合、プラグインディレクトリのRakefileに手を加えて、 呼び出し元に応じて処理を分けたりすれば、一見うまくいきそうですが、 そう簡単にはいきません。

Railsの test:plugins の仕組みは、プラグインディレクトリの Rakefileを参照せずに、直接 test ディレクトリの中身を実行する からです。

この挙動はあまり良くないと思うのですが、とりあえず、 rake test:plugins から実行するとエラーを出すプラグインの テストディレクトリの名前を plugin_test 等に変更して、 プラグインのRakefileを以下のように書き換えることで回避できます。

Rakefile

   1  desc 'Test the acts_as_taggable_on_steroids plugin.'
   2  Rake::TestTask.new(:test) do |t|
   3    t.libs << 'lib'
   4    t.pattern = 'plugin_test/**/*_test.rb'
   5    t.verbose = true
   6  end

これによって、上記 1 のケースでは正常に動作し、2 のケースではSkipされるため、エラーの山を見ることから逃れられます。

posted by Png genki on Thu 15 Nov 2007 at 02:13