BotUI でボタンにアイコンを表示したい
簡単にチャットウィンドウを作成できる「BotUI」というOSSを触ってみています。 もしよければこちらの記事「JavaScriptのチャットボットライブラリ「BotUI」ことはじめ」も見てください。
今回は、チャットでボタンを表示する際にそのボタンにテキストだけじゃなくてアイコンも表示させて直感的にしたいので、どのようにできるのか試してみます。
前提条件
- BotUIが動作可能なセッティングが完了しているものとします。
まだ何もしていなくてこれからという方は、こちらの記事をどうぞ - BotUI のバージョンは、0.3.4。
やってみる
テキストのみのボタンを表示する
まずはチャットウィンドウにテキストのみのボタンを表示させてみます。
botui.message.bot({ content: 'どのスマートフォンが好きですか?' }).then(function(){ botui.action.button ({ action: [{ text: 'android', value: 'android' }, { text: 'iphone', value: 'iphone' }, { text: 'windows', value: 'windows' }] }).then(function(res){ botui.message.bot({ content: res.value }); }); });
するとこんなふうに表示されます。
ボタンにアイコンを表示する
ボタンにアイコンを表示するには、action
にicon:
を指定します。
botui.message.bot({ content: 'どのスマートフォンが好きですか?' }).then(function(){ botui.action.button ({ action: [{ icon: 'android', text: 'android', value: 'android' }, { icon: 'apple', text: 'iphone', value: 'iphone' }, { icon: 'windows' text: 'windows', value: 'windows' }] }).then(function(res){ botui.message.bot({ content: res.value }); }); });
こんなふうに表示されます。
さてここで、どのようなアイコンが使用可能なのかが気になります。 BotUIのドキュメントを見ると、BotUIではFontAwesomeを使用しているそうなので、FontAwesomeで提供されているたくさんのアイコンを使うことができます。
Memo:FontAwesomeとは?
FontAwesomeとは、Webでよく使われるアイコンをWebフォントにして提供してくれているものです。画像ではなくWebフォントなので、フォントサイズやカラー、アニメーションなどもCSSで指定することができます。
その数がとても多く、2780アイコンもあります!(2018/5/3現在)
Awesome(素晴らしい)!!
ちょっとした困り事
ボタン数が多く表示領域を超えた場合、キレイに表示されない。
こんな感じ ↓↓
【訂正追記】
※CDNのコードを利用すると上記のようになるのですが、GitHubにある最新コードをcloneしてきて利用すると修正されていて下画像のようにきれいに配置されるようになっていました(2018/6/1 時点)。
ボタンにテキストを表示せずにアイコンだけにした(valueは設定している)場合、クリックされたボタンのvalueを取得できない。
botui.action.button ({ action: [{ icon: 'check', text: 'OK', value: 'ok' }] }).then(function(res){ botui.message.bot({ content: res.value }); });
このコードだと、ボタンをクリックすると"ok"という値がres
に格納されて、Bot側に表示されます。
しかし次のようにtext
を指定しないでおくと、
botui.action.button ({ action: [{ icon: 'check', // text: 'OK', value: 'ok' }] }).then(function(res){ botui.message.bot({ content: res.value }); });
ボタンをクリックしてもres
に値が格納されず、"ok"が表示されません。。。なぜ!?
おいおい深掘りしていこうと思います。