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,
 | 
			
		||||
    finder_next,
 | 
			
		||||
    finder_prev,
 | 
			
		||||
    filter,
 | 
			
		||||
 | 
			
		||||
    halve_window,
 | 
			
		||||
    rebig_window,
 | 
			
		||||
| 
						 | 
				
			
			@ -134,6 +135,7 @@ static struct {
 | 
			
		|||
    { CTRL,        KEY(f),             show_finder          },
 | 
			
		||||
    { CTRL,        KEY(n),             finder_next          },
 | 
			
		||||
    { CTRL,        KEY(N),             finder_prev          },
 | 
			
		||||
    { CTRL | SFT,  KEY(F),             filter               },
 | 
			
		||||
    { CTRL,        KEY(Up),            halve_window         },
 | 
			
		||||
    { CTRL,        KEY(Down),          rebig_window         },
 | 
			
		||||
    { CTRL,        KEY(p),             prettify             },
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#define STYLE_N 8049 + 1000
 | 
			
		||||
#define STYLE_N 8675 + 1000
 | 
			
		||||
 | 
			
		||||
void read_style_js(char* string)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,5 @@
 | 
			
		|||
#pragma once
 | 
			
		||||
 | 
			
		||||
#define STYLE_N 8049 + 1000
 | 
			
		||||
#define STYLE_N 8675 + 1000
 | 
			
		||||
 | 
			
		||||
void read_style_js(char* string);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -299,3 +299,25 @@ if (document.domain == "twitter.com" || document.domain == "x.com") {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
// 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 */
 | 
			
		||||
static GtkNotebook* notebook;
 | 
			
		||||
static GtkWindow* window;
 | 
			
		||||
typedef enum { _SEARCH, _FIND, _HIDDEN } Bar_entry_mode;
 | 
			
		||||
typedef enum { _SEARCH, _FIND, _FILTER, _HIDDEN } Bar_entry_mode;
 | 
			
		||||
static struct {
 | 
			
		||||
    GtkHeaderBar* widget;
 | 
			
		||||
    GtkEntry* line;
 | 
			
		||||
| 
						 | 
				
			
			@ -227,6 +227,13 @@ void toggle_bar(GtkNotebook* notebook, Bar_entry_mode mode)
 | 
			
		|||
            gtk_window_set_focus(window, GTK_WIDGET(bar.line));
 | 
			
		||||
            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:
 | 
			
		||||
            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? */
 | 
			
		||||
{
 | 
			
		||||
    WebKitWebView* view = notebook_get_webview(notebook);
 | 
			
		||||
    if (bar.entry_mode == _SEARCH)
 | 
			
		||||
        load_uri(view, gtk_entry_buffer_get_text(bar.line_text));
 | 
			
		||||
    else if (bar.entry_mode == _FIND)
 | 
			
		||||
        webkit_find_controller_search(
 | 
			
		||||
            webkit_web_view_get_find_controller(view),
 | 
			
		||||
            gtk_entry_buffer_get_text(bar.line_text),
 | 
			
		||||
            WEBKIT_FIND_OPTIONS_CASE_INSENSITIVE | WEBKIT_FIND_OPTIONS_WRAP_AROUND,
 | 
			
		||||
            G_MAXUINT);
 | 
			
		||||
    const char* bar_line_text = gtk_entry_buffer_get_text(bar.line_text);
 | 
			
		||||
    switch (bar.entry_mode) {
 | 
			
		||||
        case _SEARCH: {
 | 
			
		||||
            load_uri(view, bar_line_text);
 | 
			
		||||
            gtk_widget_set_visible(GTK_WIDGET(bar.widget), 0);
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
        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 */
 | 
			
		||||
| 
						 | 
				
			
			@ -332,6 +358,9 @@ int handle_shortcut(func id)
 | 
			
		|||
        case show_finder:
 | 
			
		||||
            toggle_bar(notebook, _FIND);
 | 
			
		||||
            break;
 | 
			
		||||
        case filter:
 | 
			
		||||
            toggle_bar(notebook, _FILTER);
 | 
			
		||||
            break;
 | 
			
		||||
 | 
			
		||||
        case finder_next:
 | 
			
		||||
            webkit_find_controller_search_next(webkit_web_view_get_find_controller(view));
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue
	
	Block a user