Implement the Userstyles Addon panel
This commit is contained in:
parent
b9e19d79d6
commit
9bf1b23feb
2 changed files with 64 additions and 8 deletions
|
@ -597,6 +597,51 @@ _js_script_from_file (JSContextRef js_context,
|
|||
return result;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
_js_style_from_file (JSContextRef js_context,
|
||||
const gchar* filename,
|
||||
gchar** exception)
|
||||
{
|
||||
gboolean result = FALSE;
|
||||
gchar* style;
|
||||
GError* error = NULL;
|
||||
guint i, n;
|
||||
gchar* style_script;
|
||||
|
||||
if (g_file_get_contents (filename, &style, NULL, &error))
|
||||
{
|
||||
n = strlen (style);
|
||||
for (i = 0; i < n; i++)
|
||||
{
|
||||
/* Replace line breaks with spaces */
|
||||
if (style[i] == '\n' || style[i] == '\r')
|
||||
style[i] = ' ';
|
||||
/* Change all single quotes to double quotes */
|
||||
if (style[i] == '\'')
|
||||
style[i] = '\"';
|
||||
}
|
||||
style_script = g_strdup_printf (
|
||||
"window.addEventListener ('DOMContentLoaded',"
|
||||
"function () {"
|
||||
"var mystyle = document.createElement(\"style\");"
|
||||
"mystyle.setAttribute(\"type\", \"text/css\");"
|
||||
"mystyle.appendChild(document.createTextNode('%s'));"
|
||||
"document.getElementsByTagName(\"head\")[0].appendChild(mystyle);"
|
||||
"}, true);",
|
||||
style);
|
||||
if (gjs_script_eval (js_context, style_script, exception))
|
||||
result = TRUE;
|
||||
g_free (style_script);
|
||||
g_free (style);
|
||||
}
|
||||
else
|
||||
{
|
||||
*exception = g_strdup (error->message);
|
||||
g_error_free (error);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
static void
|
||||
midori_web_widget_window_object_cleared_cb (GtkWidget* web_widget,
|
||||
WebKitWebFrame* web_frame,
|
||||
|
@ -624,21 +669,31 @@ midori_web_widget_window_object_cleared_cb (GtkWidget* web_widget,
|
|||
fullname = addon_files->data;
|
||||
includes = NULL;
|
||||
excludes = NULL;
|
||||
if (!_metadata_from_file (fullname, &includes, &excludes, NULL, NULL))
|
||||
if (addons->kind == MIDORI_ADDON_USER_SCRIPTS &&
|
||||
!_metadata_from_file (fullname, &includes, &excludes, NULL, NULL))
|
||||
{
|
||||
addon_files = addon_files->next;
|
||||
addon_files = g_slist_next (addon_files);
|
||||
continue;
|
||||
}
|
||||
if (includes || excludes)
|
||||
if (!_may_load_script (uri, &includes, &excludes))
|
||||
{
|
||||
addon_files = addon_files->next;
|
||||
addon_files = g_slist_next (addon_files);
|
||||
continue;
|
||||
}
|
||||
g_slist_free (includes);
|
||||
g_slist_free (excludes);
|
||||
exception = NULL;
|
||||
if (!_js_script_from_file (js_context, fullname, &exception))
|
||||
if (addons->kind == MIDORI_ADDON_USER_SCRIPTS &&
|
||||
!_js_script_from_file (js_context, fullname, &exception))
|
||||
{
|
||||
message = g_strdup_printf ("console.error ('%s');", exception);
|
||||
gjs_script_eval (js_context, message, NULL);
|
||||
g_free (message);
|
||||
g_free (exception);
|
||||
}
|
||||
else if (addons->kind == MIDORI_ADDON_USER_STYLES &&
|
||||
!_js_style_from_file (js_context, fullname, &exception))
|
||||
{
|
||||
message = g_strdup_printf ("console.error ('%s');", exception);
|
||||
gjs_script_eval (js_context, message, NULL);
|
||||
|
@ -745,7 +800,8 @@ midori_addons_set_kind (MidoriAddons* addons,
|
|||
|
||||
addons->kind = kind;
|
||||
|
||||
if (kind == MIDORI_ADDON_USER_SCRIPTS)
|
||||
if (kind == MIDORI_ADDON_USER_SCRIPTS
|
||||
|| kind == MIDORI_ADDON_USER_STYLES)
|
||||
g_signal_connect (addons->web_widget, "window-object-cleared",
|
||||
G_CALLBACK (midori_web_widget_window_object_cleared_cb), addons);
|
||||
|
||||
|
|
|
@ -3488,13 +3488,13 @@ midori_browser_init (MidoriBrowser* browser)
|
|||
panel, toolbar,
|
||||
STOCK_SCRIPTS, _("Userscripts"));
|
||||
/* Userstyles */
|
||||
/*panel = midori_addons_new (GTK_WIDGET (browser), MIDORI_ADDON_USER_STYLES);
|
||||
panel = midori_addons_new (GTK_WIDGET (browser), MIDORI_ADDON_USER_STYLES);
|
||||
gtk_widget_show (panel);
|
||||
toolbar = midori_addons_get_toolbar (MIDORI_ADDONS (panel));
|
||||
gtk_widget_show (toolbar);
|
||||
midori_panel_append_page (MIDORI_PANEL (browser->panel),
|
||||
panel, toolbar,
|
||||
STOCK_STYLES, _("Userstyles"));*/
|
||||
STOCK_STYLES, _("Userstyles"));
|
||||
|
||||
/* Extensions */
|
||||
panel = midori_addons_new (GTK_WIDGET (browser), MIDORI_ADDON_EXTENSIONS);
|
||||
|
|
Loading…
Reference in a new issue