summaryrefslogtreecommitdiff
path: root/js/sample.node.js
diff options
context:
space:
mode:
authorAylur <[email protected]>2024-05-19 02:39:53 +0200
committerAylur <[email protected]>2024-05-19 02:39:53 +0200
commit1425b396b08f0e91d45bbd0f92b1309115c7c870 (patch)
tree8af1a899a14d8a01a9ef50e248c077b48aed25bc /js/sample.node.js
init 0.1.0
Diffstat (limited to 'js/sample.node.js')
-rwxr-xr-xjs/sample.node.js49
1 files changed, 49 insertions, 0 deletions
diff --git a/js/sample.node.js b/js/sample.node.js
new file mode 100755
index 0000000..f7ee70d
--- /dev/null
+++ b/js/sample.node.js
@@ -0,0 +1,49 @@
+#!/usr/bin/env node
+import { Variable, App, Widget, Astal, bind, gi } from "../js/dist/node/astal.js"
+const Playerctl = gi.require("Playerctl", "2.0")
+
+// state
+const player = Playerctl.Player.new("spotify")
+const title = Variable(player.getTitle()).observe(player, "metadata", () => player.getTitle())
+const date = Variable("")
+ // FIXME: doesn't work because promises don't resolve
+ // .poll(1000, "date")
+ // FIXME: don't know why but this doesn't work either
+ // .watch("bash -c 'while true; do date; sleep 1; done'")
+ // this does
+ .poll(1000, Date)
+
+// ui
+function Bar(monitor) {
+ return Widget.Window(
+ {
+ monitor,
+ application: App,
+ exclusivity: Astal.Exclusivity.EXCLUSIVE,
+ anchor: Astal.WindowAnchor.BOTTOM |
+ Astal.WindowAnchor.LEFT |
+ Astal.WindowAnchor.RIGHT
+ },
+ Widget.CenterBox({
+ startWidget: Widget.Label({
+ label: date(l => `Current date: ${l}`),
+ }),
+ endWidget: Widget.Label({
+ label: bind(title).as(t => `Title: ${t}`)
+ }),
+ })
+ )
+}
+
+// main
+App.start({
+ requestHandler(msg, res) {
+ switch (msg) {
+ case "inspector": return res(App.inspector())
+ case "quit": return res(App.quit())
+ default: return App.eval(msg).then(res).catch(console.error)
+ }
+ }
+}, () => {
+ Bar(0)
+})