TipsJsToolButton » 履歴 » バージョン 1
Mitsuyoshi Yoshida, 2011/05/26 01:45
1 | 1 | Mitsuyoshi Yoshida | |
---|---|---|---|
2 | h1. wiki のツールボタンを追加する |
||
3 | |||
4 | [[TipsWikiMacro|前節]] でマクロの作り方を説明しました。マクロで wiki を拡張できるのはいいのですが、ちょっとマクロは書きづらいです。そこで wiki 編集のツールボタン(テキストボックスの上についているの)があると簡単に使えるようになります。これがあれば、ユーザも使ってくれるようになるでしょう。このボタンの追加方法を紹介します。 |
||
5 | |||
6 | ただし、この Tips は Rails の「設定より規約」というやつで、上手くいくときは結構簡単にできるのですが、ちょっと間違っているとどこが悪いのかわからなくて結構ハマるので、名前の付け方には注意をしてください。 |
||
7 | !jstoolbutton.png! |
||
8 | |||
9 | h2. サンプルコード |
||
10 | |||
11 | * "表示":http://code.google.com/p/myoshida-rp/source/browse/#svn%2Ftrunk%2FTips%2Falias%2Fwikimacro_jstb |
||
12 | * "ダウンロード":http://code.google.com/p/myoshida-rp/downloads/detail?name=sample-wikimacro_jstb.zip&can=2&q=#makechanges |
||
13 | |||
14 | |||
15 | h2. アイコンと CSS ファイルの作成 |
||
16 | |||
17 | サンプルは前の wikipedia のマクロのプラグインをツールボタンを追加するように改造したものです。 |
||
18 | このプラグインではツールボタン用のアイコンを必要とするので、その画像ファイルと css ファイルを用意します。この辺りの詳しくは [[TipsOriginalImage|プラグイン独自のアイコンを使用する]] の Tips を見てみてください。 |
||
19 | |||
20 | css の定義は @public/stylesheets/jstoolbar.css@ を参考にして定義します。 |
||
21 | <pre> |
||
22 | .jstb_wikipedia_link { |
||
23 | background-image: url('../images/wikipedialink.png'); |
||
24 | } |
||
25 | </pre> |
||
26 | クラス名はツールボタンはみんな jstb_ で始まっているので、それにあわせます。おそらく JavaScriptToolButton を意味しているのでしょう。 |
||
27 | 名前は *wikipedia_link* にしています。 |
||
28 | |||
29 | |||
30 | h2. AssetTagHelper のパッチ |
||
31 | |||
32 | ツールバーを追加するには AssetTagHelper のパッチを使います。 |
||
33 | このパッチは以下のファイルを作って init.rb で require します。 |
||
34 | *lib/wikipedia_link_asset_tag_helper_patch.rb* |
||
35 | ファイルを require しているだけなので、 init.rb に直接記述してもよさそうな気がするのですが、直接 init.rb に書くとなぜか Redmine が立ち上がらなくなってしまいます。 |
||
36 | |||
37 | パッチの中身を見てみましょう。 |
||
38 | <pre><code class="ruby"> |
||
39 | module ActionView |
||
40 | module Helpers |
||
41 | module AssetTagHelper |
||
42 | def javascript_include_tag_with_wikipedia_link(*sources) |
||
43 | out = javascript_include_tag_without_wikipedia_link(*sources) |
||
44 | if sources.is_a?(Array) and sources[0] == 'jstoolbar/textile' |
||
45 | out += javascript_tag <<-javascript_tag |
||
46 | jsToolBar.prototype.elements.wikipedia_link = { |
||
47 | type: 'button', |
||
48 | title: 'Link to Wikipedia', |
||
49 | fn: { |
||
50 | wiki: function() { this.encloseSelection("{{wikipedia(", ")}}") } |
||
51 | } |
||
52 | } |
||
53 | javascript_tag |
||
54 | out += stylesheet_link_tag 'wikipedialink', :plugin => 'redmine_wikipedia_link' |
||
55 | end |
||
56 | out |
||
57 | end |
||
58 | alias_method_chain :javascript_include_tag, :wikipedia_link |
||
59 | end |
||
60 | end |
||
61 | end |
||
62 | </pre> |
||
63 | |||
64 | このファイルでは ActionView::Helpers::AssetTagHelper のモジュールに *javascript_include_tag_with_wikipedia_link* メソッドを追加しています。 |
||
65 | |||
66 | 基本的にツールバーを追加のプラグインを作りたい場合、このファイルの wikipedia_link の部分を適当な名前に変えれば OK です。 |
||
67 | それ以外の修正点を次に上げておきます。 |
||
68 | |||
69 | 10 行目の title はマウスを持ってきたときのツールチップとして使われます。実際のプラグインを作る場合は国際化して説明を書いた方がいいでしょう。 |
||
70 | |||
71 | 12 行目は JavaScript の部分となります。 encloseSelection() メソッドは *画像* や *wiki へのリンク* などの 2 つの文字列で挟むタイプのツールバーのときに使用するもので、前後の文字列を引数として渡します。 |
||
72 | |||
73 | 16 行目は css ファイルの指定です。ここも詳しくはオリジナルアイコンの使用の Tips を見てください。 |
||
74 | |||
75 | これでツールバーボタンの追加は完成です。 |
||
76 | ちなみに *javascript_include_tag_without_wikipedia_link* のメソッドはプラグイン中のどこにも定義していませんが、 ruby のメタプログラミングを上手く使って処理してくれているみたいで、定義する必要はありません。 |