Drafts5で作ろう、自作アクション入門(3)

Draftsを触っているといろいろ違和感があります。プログラミング用の予約語に結構重要な単語を使っている。Tオブジェクトに集約しているTextwellと方向性が違う。


今日のミッション

ダイアログボックスの作り方を見てみます。


ワードカウント

テクストの文字数を表示します。右上に出てますけどね。練習ということで。

Counter
text = editor.getText();
p = Prompt.create();
p.title = "Counter";
p.message = text.length;
p.show();

Prompt.create() でボックスを作ります。ボックスの title と message を指定し、show() を使うと表示されます。もちろん、message に何を指定してもかまいません。


目次作成

Markdownの見出し一覧を表示します。

Index
text = editor.getText();
list = text.match(/#+\s.+/g);
p = Prompt.create();
p.title = "Index";
for(i=0; i<list.length; i++) p.addButton(list[i]);
p.show();
s = p.buttonPressed;
x = text.search(s);
editor.setSelectedRange(x,0);
editor.focus();

Action Directory にある Jump to Header を参考にしました。
見出し部分を抜き出し配列listに収めます。addButton() でボタンを並べ show() でボックスを表示。buttonPressed で押されたボタンを調べ、search() で位置を探したあと、setSelectedRange() を使いカーソルを移動します。focus() でエディタに戻して完璧。


Google検索

選択範囲を検索します。キーボードアクションに登録すると呼び出しやすい。

Google
p = Prompt.create();
p.title = "Google";
p.addTextField("word","Search for",editor.getSelectedText());
p.addButton("Go");
p.show();
if(p.buttonPressed=="Go"){
s = p.fieldValues["word"];
url = "http://google.co.jp/search?q="+encodeURIComponent(s);
app.openURL(url);
}

addTextField() で入力欄を追加します。このとき最初の引数がこの欄の識別子になります。入力された文字を取得するには filedValues[識別子] という配列を使います。複数行を入力する場合は addTextView() に替えてください。textarea のような感じになります。


まとめ

Javascript の prompt が乗っ取られた感じですね。alert() は使えるんですが、confirm() も使えません。Promptを使って自分で作成する。柔軟性がありますけど。

アクションを組んでみて、サブスクリプションはDraftsに向いていないと思いました。アクションを作るメンバーに負担を強いては、コミュニティを育てる面でマイナス要因になります。確かにAppStoreも開発者から登録料を徴収するシステムではあるけれど、それはアプリの販売を認めているからでしょう。アクションは「商品」ではありません。Draftsの「本質」ではないでしょうか。