Jazzと読書の日々

iPadを筆記具として使う方法を模索します

Obsidian dataviewでプログラミングしてみよう

dataviewは表を作るだけではありません。 javascriptを使ったプログラムを動かすこともできます。 今回その入口をお示ししましょう。

ボタン

まず「ボタン」から。 テキストにボタンを置いて他のアプリを起動します。

```dataviewjs
const b = dv.el("button", "Google")

b.onclick = () => {
  open("https://www.google.co.jp")
}
```

dv.el() を使ってHTMLのパーツを配置できます。 dv はdataviewのことで el はエレメント。 divタグを作りたいときは dv.el("div","名前") となります。 今回はボタンなので dv.el("button", "名前") とします。

このボタンを押したときGoogleを開きたい。 その場合はonclickのイベントを使います。 b.onclick = () => {} ですね。 ボタンをクリックしたとき {} を実行する。

実行する内容は open("URLアドレス")。 URLアドレスを開くjavascriptコマンドです。 これでGoogleを開くことができます。

URLスキームも使えます。 open("mobilenotes://") とすればメモ帳が開き、open("calshow://") とすればカレンダーが立ち上がる。 ランチャーを組み込める。

スタイル

ただ、これだけだとボタンが見にくいですよね。

```dataviewjs
const b = dv.el("button", "Google")
b.style = "color:white; background: darkred;"

b.onclick = () => {
  open("https://www.google.co.jp")
}
```

.style でパーツのカスタマイズができます。 CSSに準じます。 color が文字色で background が背景色。 これをプレビューすると下のようになります。

このボタンを押すとSafariが起動します。

入力欄

次に入力欄を追加しましょう。

```dataviewjs
const a = dv.el("input")
a.style = "font-size: large; margin-right: 10px;"
const b = dv.el("button", "Google")
b.style = "color:white; background: darkred;"

b.onclick = () => {
  s = encodeURI(a.value)
  open("https://www.google.co.jp/search?q=" + s)
}
```

input のパーツを作ります。 フォントサイズは large にします。 そのままだと次のGoogle ボタンとくっつくので右側にマージンを設けます。

入力欄にキーワードを打ち込めばGoogleで検索します。

計算式

これを応用すると自動計算機になります。

```dataviewjs
const a = dv.el("input")
a.style = "font-size: large; margin-right: 10px;"
const b = dv.el("button", "平方根")
b.style = "color:white; background: darkred;"
const c = dv.el("span", " = 答え")

b.onclick = () => {
  s = Math.sqrt(a.value)
  c.innerText = " = " + s
}
```

javascriptのMath関数を使い、演算を行います。

平方根」のボタンを押すと答えが出てくる。 もちろん、もっと複雑な関数でも構いません。 わざわざ手計算しなくていい。

まとめ

自分だけのアプリを作る。 ほら、「ダイナブック」の片鱗を感じませんか。