Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

122 lines (101 sloc) 3.835 kb
--------------------------------------------------------
-- NoScript plugin for luakit --
-- (C) 2011 Mason Larobina <mason.larobina@gmail.com> --
--------------------------------------------------------
-- Get Lua environment
local os = require "os"
local tonumber = tonumber
local assert = assert
local table = table
local string = string
-- Get luakit environment
local webview = webview
local add_binds = add_binds
local lousy = require "lousy"
local sql_escape = lousy.util.sql_escape
local capi = { luakit = luakit, sqlite3 = sqlite3 }
module "noscript"
-- Default blocking values
enable_scripts = true
enable_plugins = true
create_table = [[
CREATE TABLE IF NOT EXISTS by_domain (
id INTEGER PRIMARY KEY,
domain TEXT,
enable_scripts INTEGER,
enable_plugins INTEGER
);]]
db = capi.sqlite3{ filename = capi.luakit.data_dir .. "/noscript.db" }
db:exec("PRAGMA synchronous = OFF; PRAGMA secure_delete = 1;")
db:exec(create_table)
local function btoi(bool) return bool and 1 or 0 end
local function itob(int) return tonumber(int) ~= 0 end
local function get_domain(uri)
uri = assert(lousy.uri.parse(uri), "invalid uri")
return string.lower(uri.host)
end
local function match_domain(domain)
local rows = db:exec(string.format("SELECT * FROM by_domain "
.. "WHERE domain == %s;", sql_escape(domain)))
if rows[1] then return rows[1] end
end
local function update(id, field, value)
db:exec(string.format("UPDATE by_domain SET %s = %d WHERE id == %d;",
field, btoi(value), id))
end
local function insert(domain, enable_scripts, enable_plugins)
db:exec(string.format("INSERT INTO by_domain VALUES (NULL, %s, %d, %d);",
sql_escape(domain), btoi(enable_scripts), btoi(enable_plugins)))
end
function webview.methods.toggle_scripts(view, w)
local domain = get_domain(view.uri)
local enable_scripts = _M.enable_scripts
local row = match_domain(domain)
if row then
enable_scripts = itob(row.enable_scripts)
update(row.id, "enable_scripts", not enable_scripts)
else
insert(domain, not enable_scripts, _M.enable_plugins)
end
w:notify(string.format("%sabled scripts for domain: %s",
enable_scripts and "Dis" or "En", domain))
end
function webview.methods.toggle_plugins(view, w)
local domain = get_domain(view.uri)
local enable_plugins = _M.enable_plugins
local row = match_domain(domain)
if row then
enable_plugins = itob(row.enable_plugins)
update(row.id, "enable_plugins", not enable_plugins)
else
insert(domain, _M.enable_scripts, not enable_plugins)
end
w:notify(string.format("%sabled plugins for domain: %s",
enable_plugins and "Dis" or "En", domain))
end
function webview.methods.toggle_remove(view, w)
local domain = get_domain(view.uri)
db:exec(string.format("DELETE FROM by_domain WHERE domain == %s;",
sql_escape(domain)))
w:notify("Removed rules for domain: " .. domain)
end
webview.init_funcs.noscript_load = function (view)
view:add_signal("load-status", function (v, status)
if status ~= "committed" or v.uri == "about:blank" then return end
local enable_scripts, enable_plugins = _M.enable_scripts, _M.enable_plugins
local domain = get_domain(v.uri)
local row = match_domain(domain)
if row then
enable_scripts = itob(row.enable_scripts)
enable_plugins = itob(row.enable_plugins)
end
view.enable_scripts = enable_scripts
view.enable_plugins = enable_plugins
end)
end
local buf = lousy.bind.buf
add_binds("normal", {
buf("^,ts$", function (w) w:toggle_scripts() end),
buf("^,tp$", function (w) w:toggle_plugins() end),
buf("^,tr$", function (w) w:toggle_remove() end),
})
Jump to Line
Something went wrong with that request. Please try again.