Hatena::ブログ(Diary)

W&R : Jazzと読書の日々 このページをアンテナに追加 RSSフィード

2014/10/24

Drafts4でJavascriptを使ったアクションを作る簡単な方法 PetitCalc

セール期間中だったので、ゲットしてみました。


Drafts 4 - Quickly Capture Notes, Share Anywhere! 4.0.1
分類: 仕事効率化, ソーシャルネットワーキング
価格:¥500 (Agile Tortoise)

海外のサイトを見ると絶賛されているメモ・アプリ。コンセプトはTextwellに近いですが、書いた文章をリスト化できるところが違います。「ドラフト」ではなく「ノート」。そこから他のアプリに転送できる。カスタマイズも可能です。

新しいバージョンからアクションにJavascriptが使えるようになりました。例題としてスクリプトを書いてみましょう。やはりここは「簡易電卓」かな。


f:id:wineroses:20141024224008j:image

本文全体を計算式と見なすアクション。四則演算や括弧付きが使えます。

登録リンクはこちら→ http://tinyurl.com/lwjzprc


作り方


f:id:wineroses:20141024224025j:image

右上の「+」で「Create Action」。


f:id:wineroses:20141024224100j:image

NAMEでアクション名を付け「STEPS」をタップ。


f:id:wineroses:20141024224116j:image

右上の「+」をタップし「Script」を選択。下記スクリプトをSCRIPT欄に貼り付け、右上の Save で終了。スクリプトの内容は、本文を変数 draft.content で取得し、計算結果をdraft.defineTag() でtextタグに保存しています。

s = draft.content;
a = s+" = "+eval(s);
draft.defineTag("text", a );

f:id:wineroses:20141024224132j:image

次に第2ステップ。再度「+」をタップし今度は「URL」を選択。下記スクリプトをURL TEMPLATE欄に貼り付け、Save で保存してください。Drafts4に書き込むURLスキームで、textタグに第1ステップの text が反映します。

x-drafts4://x-callback-url/create?text=[[text]]

これで完了。数式を書いてから実行すると、新しいページが開き、計算結果が出てきます。このアクションを雛形にすれば別のアクションも作りやすくなると思います。

登録リンクはこちら→ http://tinyurl.com/lwjzprc


Action Step: Script – Agile Tortoise
Script action steps allow you to manipulate a draft, and perform basic logical operations effecting ...

例題を作って思うのは、アクションのクセがきつい。Textwellでもそうですが、本来ブラウザ用のJavascriptをテキスト処理に転用しているので、入出力に独自拡張が施されます。Drafts4はそれを draft というオブジェクトにまとめている。

ところがカーソル行を取り出す発想がなく、基本は全文か選択範囲を対象にします。また、変更を反映させる commit(draft) も、テキスト一覧に戻らないと確かめられない。次々新しいテキストを作っていく用途に合わせてある。

確かに、処理前のテキストも残すほうが履歴管理しやすいから、Scriptで加工したものをURLで書き出すタイプのアクションが作りやすく、理にかなっているかも知れません。それとXMLHttpRequest()が使えなかった。実行可能な関数に制限があります。そこあたり、これからどう拡張していくんだろう? 気になるところ。


追記: 2014/10/25

と思ったら、すぐ修正版が来た。


Drafts 4 - Quickly Capture Notes, Share Anywhere! 4.0.3
分類: 仕事効率化, ソーシャルネットワーキング
価格:¥500 (Agile Tortoise)

Javascriptの最後に commit(draft) と書くだけで、ページを更新するようになりました。これでTextwell風に使えるようになった。

s = draft.content;
draft.content = s + " = " + eval(s);
commit(draft);

登録リンクはこちら→ http://tinyurl.com/mv5p6s5