You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
90 lines
3.1 KiB
Lua
90 lines
3.1 KiB
Lua
12 years ago
|
-------------------------------------------------------------------------------
|
||
|
-- --
|
||
|
-- Blocks Adding "Private Browsing" Hosts to History DB --
|
||
|
-- --
|
||
|
-------------------------------------------------------------------------------
|
||
|
|
||
|
local string = string
|
||
|
local window = window
|
||
|
local webview = webview
|
||
|
local widget = widget
|
||
|
local theme = theme
|
||
|
local luakit = luakit
|
||
|
local domain_props = domain_props
|
||
|
local lousy = require("lousy")
|
||
|
local util = lousy.util
|
||
|
local history = require("history")
|
||
|
local nohist = globals.history_blacklist or {}
|
||
|
|
||
|
local print = print
|
||
|
module("plugins.private_browsing")
|
||
|
|
||
|
local indicator = { private = "!hist", notprivate = "" }
|
||
|
|
||
|
-- Load themes, if undefined fallback
|
||
|
theme.pbm_font = theme.pbm_font or theme.buf_sbar_font
|
||
|
theme.pbm_fg = theme.pbm_fg or theme.buf_sbar_fg
|
||
|
theme.pbm_bg = theme.pbm_bg or theme.buf_sbar_bg
|
||
|
|
||
|
-- Create the indictor widget on window creation
|
||
|
window.init_funcs.build_pindicator = function(w)
|
||
|
local i = w.sbar.r
|
||
|
i.prvt = widget{type="label"}
|
||
|
i.layout:pack(w.sbar.r.prvt)
|
||
|
i.layout:reorder(w.sbar.r.prvt, 2)
|
||
|
i.prvt.font = theme.buf_sbar_font
|
||
|
i.prvt.fg = theme.buf_sbar_fg
|
||
|
w:update_prvt()
|
||
|
-- Update indicator on tab change
|
||
|
w.tabs:add_signal("switch-page", function (_,view)
|
||
|
luakit.idle_add(function() w:update_prvt(w) return false end)
|
||
|
end)
|
||
|
end
|
||
|
|
||
|
-- Update indicator on page navigation
|
||
|
webview.init_funcs.prvt_update = function(view, w)
|
||
|
view:add_signal("load-status", function (v, status)
|
||
|
if status == "comitted" or status == "failed" or status == "finished" then
|
||
|
w:update_prvt()
|
||
|
end
|
||
|
end)
|
||
|
end
|
||
|
|
||
|
-- Updates widget based on status
|
||
|
window.methods.update_prvt = function(w)
|
||
|
if not w.view then return end
|
||
|
local private_br = w.view.enable_private_browsing
|
||
|
|
||
|
local domain = (lousy.uri.parse(w.view.uri) or {}).host or ""
|
||
|
domain = string.match(domain, "^www%.(.+)") or domain
|
||
|
repeat
|
||
|
private_br = private_br or util.table.hasitem(nohist, domain)
|
||
|
domain = string.match(domain, "%.(.+)")
|
||
|
until not domain
|
||
|
|
||
|
local prvt = w.sbar.r.prvt
|
||
|
-- Set widget text based on privacy setting
|
||
|
prvt.text = (private_br and indicator.private) or indicator.notprivate
|
||
|
-- Hide blank widget
|
||
|
if string.len(prvt.text) then
|
||
|
prvt:show()
|
||
|
else
|
||
|
prvt:hide()
|
||
|
end
|
||
|
end
|
||
|
|
||
|
-- Hook to intercept history additions
|
||
|
history.add_signal("add", function (uri, title)
|
||
|
local domain = lousy.uri.parse(uri).host
|
||
|
domain = string.match(domain or "", "^www%.(.+)") or domain or "all"
|
||
|
-- Build list of domains and subdomains, pulling private browsing.
|
||
|
-- I.e. for luakit.org load .luakit.org, luakit.org, .org
|
||
|
local no_hist = domain_props.all.enable_private_browsing or (domain_props[domain] or {}).enable_private_browsing
|
||
|
repeat
|
||
|
no_hist = no_hist or (domain_props["."..domain] or {}).enable_private_browsing
|
||
|
no_hist = no_hist or util.table.hasitem(nohist, domain)
|
||
|
domain = string.match(domain, "%.(.+)")
|
||
|
until not domain
|
||
|
return not no_hist
|
||
|
end)
|