add custom filter command (Ctrl+F)
This commit is contained in:
parent
2a5f09ce7c
commit
5e3cab2a63
2
config.h
2
config.h
|
@ -92,6 +92,7 @@ typedef enum {
|
||||||
show_finder,
|
show_finder,
|
||||||
finder_next,
|
finder_next,
|
||||||
finder_prev,
|
finder_prev,
|
||||||
|
filter,
|
||||||
|
|
||||||
halve_window,
|
halve_window,
|
||||||
rebig_window,
|
rebig_window,
|
||||||
|
@ -134,6 +135,7 @@ static struct {
|
||||||
{ CTRL, KEY(f), show_finder },
|
{ CTRL, KEY(f), show_finder },
|
||||||
{ CTRL, KEY(n), finder_next },
|
{ CTRL, KEY(n), finder_next },
|
||||||
{ CTRL, KEY(N), finder_prev },
|
{ CTRL, KEY(N), finder_prev },
|
||||||
|
{ CTRL | SFT, KEY(F), filter },
|
||||||
{ CTRL, KEY(Up), halve_window },
|
{ CTRL, KEY(Up), halve_window },
|
||||||
{ CTRL, KEY(Down), rebig_window },
|
{ CTRL, KEY(Down), rebig_window },
|
||||||
{ CTRL, KEY(p), prettify },
|
{ CTRL, KEY(p), prettify },
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#define STYLE_N 8049 + 1000
|
#define STYLE_N 8675 + 1000
|
||||||
|
|
||||||
void read_style_js(char* string)
|
void read_style_js(char* string)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#define STYLE_N 8049 + 1000
|
#define STYLE_N 8675 + 1000
|
||||||
|
|
||||||
void read_style_js(char* string);
|
void read_style_js(char* string);
|
||||||
|
|
|
@ -299,3 +299,25 @@ if (document.domain == "twitter.com" || document.domain == "x.com") {
|
||||||
}
|
}
|
||||||
|
|
||||||
// document.body.style.visibility = "visible";
|
// document.body.style.visibility = "visible";
|
||||||
|
|
||||||
|
// Add some code to filter out articles for Sentinel
|
||||||
|
function filterDetailsByKeywordHide(keyword) {
|
||||||
|
// Get all the <details> elements on the page
|
||||||
|
const detailsElements = document.querySelectorAll("details");
|
||||||
|
|
||||||
|
// Loop through each <details> element
|
||||||
|
detailsElements.forEach((element) => {
|
||||||
|
// Find the <p> element inside the <details> that follows the first <h3> (assumed to be the summary here)
|
||||||
|
const summaryElement = element.querySelector("h3 + p");
|
||||||
|
|
||||||
|
// Check if the summary text includes the keyword (case-insensitive match)
|
||||||
|
if (
|
||||||
|
summaryElement &&
|
||||||
|
summaryElement.textContent.toLowerCase().includes(keyword.toLowerCase())
|
||||||
|
) {
|
||||||
|
// If the keyword is found, hide this <details> element
|
||||||
|
element.style.display = "none";
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
console.log("Hello world");
|
||||||
|
|
49
rosenrot4.c
49
rosenrot4.c
|
@ -9,7 +9,7 @@
|
||||||
/* Global variables */
|
/* Global variables */
|
||||||
static GtkNotebook* notebook;
|
static GtkNotebook* notebook;
|
||||||
static GtkWindow* window;
|
static GtkWindow* window;
|
||||||
typedef enum { _SEARCH, _FIND, _HIDDEN } Bar_entry_mode;
|
typedef enum { _SEARCH, _FIND, _FILTER, _HIDDEN } Bar_entry_mode;
|
||||||
static struct {
|
static struct {
|
||||||
GtkHeaderBar* widget;
|
GtkHeaderBar* widget;
|
||||||
GtkEntry* line;
|
GtkEntry* line;
|
||||||
|
@ -227,6 +227,13 @@ void toggle_bar(GtkNotebook* notebook, Bar_entry_mode mode)
|
||||||
gtk_window_set_focus(window, GTK_WIDGET(bar.line));
|
gtk_window_set_focus(window, GTK_WIDGET(bar.line));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case _FILTER: {
|
||||||
|
gtk_entry_set_placeholder_text(bar.line, "Filter");
|
||||||
|
gtk_entry_buffer_set_text(bar.line_text, "", strlen(""));
|
||||||
|
gtk_widget_set_visible(GTK_WIDGET(bar.widget), 1);
|
||||||
|
gtk_window_set_focus(window, GTK_WIDGET(bar.line));
|
||||||
|
break;
|
||||||
|
}
|
||||||
case _HIDDEN:
|
case _HIDDEN:
|
||||||
gtk_widget_set_visible(GTK_WIDGET(bar.widget), 0);
|
gtk_widget_set_visible(GTK_WIDGET(bar.widget), 0);
|
||||||
}
|
}
|
||||||
|
@ -236,16 +243,35 @@ void toggle_bar(GtkNotebook* notebook, Bar_entry_mode mode)
|
||||||
void handle_signal_bar_press_enter(GtkEntry* self, GtkNotebook* notebook) /* consider passing notebook as the data here? */
|
void handle_signal_bar_press_enter(GtkEntry* self, GtkNotebook* notebook) /* consider passing notebook as the data here? */
|
||||||
{
|
{
|
||||||
WebKitWebView* view = notebook_get_webview(notebook);
|
WebKitWebView* view = notebook_get_webview(notebook);
|
||||||
if (bar.entry_mode == _SEARCH)
|
const char* bar_line_text = gtk_entry_buffer_get_text(bar.line_text);
|
||||||
load_uri(view, gtk_entry_buffer_get_text(bar.line_text));
|
switch (bar.entry_mode) {
|
||||||
else if (bar.entry_mode == _FIND)
|
case _SEARCH: {
|
||||||
webkit_find_controller_search(
|
load_uri(view, bar_line_text);
|
||||||
webkit_web_view_get_find_controller(view),
|
gtk_widget_set_visible(GTK_WIDGET(bar.widget), 0);
|
||||||
gtk_entry_buffer_get_text(bar.line_text),
|
break;
|
||||||
WEBKIT_FIND_OPTIONS_CASE_INSENSITIVE | WEBKIT_FIND_OPTIONS_WRAP_AROUND,
|
}
|
||||||
G_MAXUINT);
|
case _FIND: {
|
||||||
|
webkit_find_controller_search(
|
||||||
|
webkit_web_view_get_find_controller(view),
|
||||||
|
bar_line_text,
|
||||||
|
WEBKIT_FIND_OPTIONS_CASE_INSENSITIVE | WEBKIT_FIND_OPTIONS_WRAP_AROUND,
|
||||||
|
G_MAXUINT);
|
||||||
|
gtk_widget_set_visible(GTK_WIDGET(bar.widget), 0);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case _FILTER: {
|
||||||
|
const char* js_template = "filterDetailsByKeywordHide(\"%s\")";
|
||||||
|
char js_command[strlen(js_template) + strlen(bar_line_text) + 2];
|
||||||
|
snprintf(js_command, sizeof(js_command) + 1, js_template, bar_line_text);
|
||||||
|
webkit_web_view_evaluate_javascript(view, js_command, -1, NULL, "rosenrot-filter-plugin", NULL, NULL, NULL);
|
||||||
|
gtk_widget_set_visible(GTK_WIDGET(bar.widget), 0);
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case _HIDDEN:
|
||||||
|
// no op
|
||||||
|
}
|
||||||
|
|
||||||
gtk_widget_set_visible(GTK_WIDGET(bar.widget), 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Shortcuts */
|
/* Shortcuts */
|
||||||
|
@ -332,6 +358,9 @@ int handle_shortcut(func id)
|
||||||
case show_finder:
|
case show_finder:
|
||||||
toggle_bar(notebook, _FIND);
|
toggle_bar(notebook, _FIND);
|
||||||
break;
|
break;
|
||||||
|
case filter:
|
||||||
|
toggle_bar(notebook, _FILTER);
|
||||||
|
break;
|
||||||
|
|
||||||
case finder_next:
|
case finder_next:
|
||||||
webkit_find_controller_search_next(webkit_web_view_get_find_controller(view));
|
webkit_find_controller_search_next(webkit_web_view_get_find_controller(view));
|
||||||
|
|
Loading…
Reference in New Issue
Block a user