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の「本質」ではないでしょうか。