2022-02-04 23:47:14 +00:00
|
|
|
(local lgi (require :lgi))
|
2022-02-20 17:41:42 +00:00
|
|
|
(local inspect (require :inspect))
|
|
|
|
|
2022-02-20 12:25:59 +00:00
|
|
|
(local { : Gtk : Gdk : WebKit2 : cairo } lgi)
|
|
|
|
|
2022-03-03 23:07:37 +00:00
|
|
|
(local {: view} (require :fennel))
|
2022-02-04 23:47:14 +00:00
|
|
|
|
2022-02-06 15:05:00 +00:00
|
|
|
(local cache-dir (.. (os.getenv "HOME") "/.cache/just"))
|
2022-02-05 19:08:18 +00:00
|
|
|
|
|
|
|
(local content-filter-store
|
|
|
|
(WebKit2.UserContentFilterStore {:path cache-dir}))
|
|
|
|
|
2022-02-06 15:05:00 +00:00
|
|
|
(-> (WebKit2.WebContext:get_default)
|
|
|
|
(: :get_website_data_manager)
|
|
|
|
(: :get_cookie_manager)
|
|
|
|
(: :set_persistent_storage
|
|
|
|
(.. cache-dir "/cookies.db")
|
|
|
|
WebKit2.CookiePersistentStorage.SQLITE))
|
|
|
|
|
2022-03-03 23:07:37 +00:00
|
|
|
(local
|
|
|
|
Webview
|
|
|
|
{
|
|
|
|
:new
|
|
|
|
#(let [listeners {}
|
|
|
|
notify-listeners (fn [self pspec]
|
|
|
|
(let [n pspec.name
|
|
|
|
funs (. listeners n)]
|
|
|
|
(when funs
|
|
|
|
(each [_ f (ipairs funs)]
|
|
|
|
(f (. self n))))))
|
|
|
|
widget (WebKit2.WebView {
|
|
|
|
:on_notify
|
|
|
|
#(notify-listeners $1 $2)
|
|
|
|
})]
|
|
|
|
;;(load-adblocks webview.user_content_manager content-filter-store)
|
|
|
|
{
|
|
|
|
:listen (fn [self event-name fun]
|
|
|
|
(let [funs (or (. listeners event-name) [])]
|
|
|
|
(table.insert funs fun)
|
|
|
|
(tset listeners event-name funs)))
|
|
|
|
:visit (fn [self url]
|
|
|
|
(widget:load_uri url))
|
|
|
|
:stop-loading #(widget:stop_loading)
|
|
|
|
:refresh #(widget:reload)
|
|
|
|
:go-back #(and (widget:can_go_back) (widget:go_back))
|
|
|
|
|
|
|
|
:widget widget
|
|
|
|
})
|
|
|
|
})
|
2022-02-06 14:05:05 +00:00
|
|
|
|
2022-02-05 21:47:12 +00:00
|
|
|
(fn named-image [name size]
|
|
|
|
(Gtk.Image.new_from_icon_name
|
|
|
|
name
|
|
|
|
(or size Gtk.IconSize.LARGE_TOOLBAR)))
|
|
|
|
|
2022-03-03 23:07:37 +00:00
|
|
|
(local
|
|
|
|
Navbar
|
|
|
|
{
|
|
|
|
:new
|
|
|
|
(fn [webview]
|
|
|
|
(let [url (Gtk.Entry {
|
|
|
|
;; :completion (Gtk.EntryCompletion {:model completions :text_column 0 })
|
|
|
|
:on_activate
|
|
|
|
#(webview:visit $1.text)
|
|
|
|
})
|
|
|
|
stop (doto (Gtk.Button {
|
|
|
|
:on_clicked #(webview:stop-loading)
|
|
|
|
})
|
|
|
|
(: :set_image (named-image "process-stop")))
|
|
|
|
refresh (doto (Gtk.Button {
|
|
|
|
:on_clicked #(webview:refresh)
|
|
|
|
})
|
|
|
|
(: :set_image (named-image "view-refresh")))
|
|
|
|
show-tabs (Gtk.Button {
|
|
|
|
:label "><"
|
|
|
|
; :on_clicked #(views:show-tab-overview)
|
|
|
|
})
|
|
|
|
back (doto
|
|
|
|
(Gtk.Button {
|
|
|
|
:on_clicked #(webview:go-back)
|
|
|
|
})
|
|
|
|
(: :set_image (named-image "go-previous")))
|
|
|
|
widget (Gtk.Box {
|
|
|
|
:orientation Gtk.Orientation.HORIZONTAL
|
|
|
|
})
|
|
|
|
]
|
|
|
|
(widget:pack_start back false false 2)
|
|
|
|
(widget:pack_start refresh false false 2)
|
|
|
|
(widget:pack_start stop false false 2)
|
|
|
|
(widget:pack_start url true true 2)
|
|
|
|
(widget:pack_end show-tabs false false 2)
|
|
|
|
|
|
|
|
(webview:listen :uri #(url:set_text $1))
|
|
|
|
|
|
|
|
{
|
|
|
|
:widget widget
|
|
|
|
}))
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
(let [window (Gtk.Window {
|
2022-02-04 23:47:14 +00:00
|
|
|
:title "Just browsing"
|
2022-02-06 22:16:03 +00:00
|
|
|
:default_width 360
|
|
|
|
:default_height 720
|
2022-02-04 23:47:14 +00:00
|
|
|
:on_destroy Gtk.main_quit
|
|
|
|
})
|
|
|
|
container (Gtk.Box {
|
|
|
|
:orientation Gtk.Orientation.VERTICAL
|
|
|
|
})
|
2022-03-03 23:07:37 +00:00
|
|
|
webview (Webview.new)
|
|
|
|
navbar (Navbar.new webview)
|
|
|
|
]
|
2022-02-06 14:05:05 +00:00
|
|
|
|
2022-03-03 23:07:37 +00:00
|
|
|
(container:pack_start navbar.widget false false 0)
|
|
|
|
(container:pack_start webview.widget true true 0)
|
2022-02-04 23:47:14 +00:00
|
|
|
|
|
|
|
(window:add container)
|
|
|
|
|
2022-03-03 23:07:37 +00:00
|
|
|
(webview:visit "https://terse.telent.net/")
|
|
|
|
(window:show_all))
|
2022-02-06 15:05:00 +00:00
|
|
|
|
2022-02-04 23:47:14 +00:00
|
|
|
(Gtk.main)
|