alerts v2, formatting

This commit is contained in:
NunoSempere 2023-06-17 00:29:27 -06:00
parent 1cf68bb1fe
commit 98f6d5630f
8 changed files with 115 additions and 119 deletions

View File

@ -32,7 +32,7 @@ int libre_redirect(const char* uri, char* output)
char* annoying_sites[] = { char* annoying_sites[] = {
"https://www.reddit.com", "https://www.reddit.com",
"https://www.youtube.com", "https://www.youtube.com",
"https://google.com" "https://google.com"
"https://medium.com", "https://medium.com",
"https://translate.google.com", "https://translate.google.com",
"https://www.bloomberg.com", "https://www.bloomberg.com",
@ -43,7 +43,7 @@ int libre_redirect(const char* uri, char* output)
char* alternatives[] = { char* alternatives[] = {
"https://teddit.nunosempere.com", "https://teddit.nunosempere.com",
"https://yt.artemislena.eu", "https://yt.artemislena.eu",
"https://search.nunosempere.com" "https://search.nunosempere.com"
"https://scribe.rip", "https://scribe.rip",
"https://translate.riverside.rocks/", "https://translate.riverside.rocks/",
"https://archive.is/https://www.bloomberg.com", "https://archive.is/https://www.bloomberg.com",

View File

@ -4,4 +4,3 @@ void str_init(char* str, int n)
str[i] = ' '; str[i] = ' ';
str[n] = '\0'; str[n] = '\0';
} // could also use <https://manpages.ubuntu.com/manpages/impish/man3/strinit.3pub.html> } // could also use <https://manpages.ubuntu.com/manpages/impish/man3/strinit.3pub.html>

View File

@ -2,8 +2,8 @@
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
#include "../libre_redirect/str_replace_start.h"
#include "../libre_redirect/str_init.h" #include "../libre_redirect/str_init.h"
#include "../libre_redirect/str_replace_start.h"
#define SHORTCUT_N 41 #define SHORTCUT_N 41
@ -33,8 +33,8 @@ int shortcut_expand(const char* uri, char* output)
char* shortcuts[] = { char* shortcuts[] = {
"!fnf", "!fnf",
"!fnc", "!fnc",
"!hn", "!hn",
"!hnb" "!hnb"
}; };
char* expansions[] = { char* expansions[] = {
@ -45,7 +45,7 @@ int shortcut_expand(const char* uri, char* output)
}; };
// len = sizeof(shortcuts) / sizeof(shortcuts[0]); // len = sizeof(shortcuts) / sizeof(shortcuts[0]);
len = sizeof(shortcuts) / sizeof(char *); len = sizeof(shortcuts) / sizeof(char*);
for (int i = 0; i < len; i++) { for (int i = 0; i < len; i++) {
int replace_check = str_replace_start(tmp_uri, shortcuts[i], int replace_check = str_replace_start(tmp_uri, shortcuts[i],

View File

@ -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 3640 + 1 #define STYLE_N 3858 + 1
void read_style_js(char* string) void read_style_js(char* string)
{ {

View File

@ -1,7 +1,7 @@
#ifndef STYLE #ifndef STYLE
#define STYLE #define STYLE
#define STYLE_N 3640 + 1 #define STYLE_N 3858 + 1
void read_style_js(char* string); void read_style_js(char* string);

View File

@ -73,63 +73,61 @@ if(styles != null){
// Replace default alert with new function // Replace default alert with new function
// whose style can be changed! // whose style can be changed!
window.alert = function(message) { window.alert = (message) => {
// Check if the alert dialog already exists let alertDiv = document.getElementById('customAlert');
var alertDiv = document.getElementById('customAlert');
if (!alertDiv) { if (!alertDiv) {
// Create the alert dialog const html = `
alertDiv = document.createElement('div'); <div id="customAlert" class="custom-alert">
alertDiv.id = 'customAlert'; <div class="custom-alert-content">
alertDiv.className = 'custom-alert hidden'; <p id="alertMessage"></p>
<button id="alertOkButton">OK</button>
var contentDiv = document.createElement('div'); </div>
contentDiv.className = 'custom-alert-content'; </div>
<style>
var alertMessage = document.createElement('p'); .custom-alert {
alertMessage.id = 'alertMessage'; display: none;
position: fixed;
var okButton = document.createElement('button'); z-index: 999;
okButton.id = 'alertOkButton'; left: 0;
okButton.textContent = 'OK'; top: 0;
okButton.onclick = function() { width: 100%;
alertDiv.classList.add('hidden'); height: 100%;
overflow: auto;
background-color: rgba(0,0,0,0.4);
}
.custom-alert-content {
background-color: #fefefe;
margin: 15% auto;
padding: 20px;
border: 1px solid #888;
width: 80%;
font-family: monospace; /* Use monospace font */
}
.visible {
display: block;
}
</style>
`;
document.body.insertAdjacentHTML('beforeend', html);
alertDiv = document.getElementById('customAlert');
document.getElementById('alertOkButton').onclick = () => {
alertDiv.classList.remove('visible');
document.removeEventListener('keydown', dismissAlert);
}; };
contentDiv.appendChild(alertMessage);
contentDiv.appendChild(okButton);
alertDiv.appendChild(contentDiv);
document.body.appendChild(alertDiv);
// Inject CSS
var style = document.createElement('style');
style.innerHTML = `
.custom-alert {
position: fixed;
z-index: 999;
left: 0;
top: 0;
width: 100%;
height: 100%;
overflow: auto;
background-color: rgba(0,0,0,0.4);
}
.custom-alert-content {
background-color: #fefefe;
margin: 15% auto;
padding: 20px;
border: 1px solid #888;
width: 80%;
}
.hidden {
display: none;
}`;
document.head.appendChild(style);
} }
// Show the alert dialog const dismissAlert = (event) => {
if (event.key === 'Enter' /*&& event.ctrlKey*/ && alertDiv.classList.contains('visible')) {
alertDiv.classList.remove('visible');
document.removeEventListener('keydown', dismissAlert);
}
}
document.addEventListener('keydown', dismissAlert);
document.getElementById('alertMessage').textContent = message; document.getElementById('alertMessage').textContent = message;
alertDiv.classList.remove('hidden'); alertDiv.classList.add('visible');
} }
// alert("Hello world!") // alert("Hello world!")
document.body.style.visibility = "visible" document.body.style.visibility = "visible"

BIN
rose

Binary file not shown.

113
rose.c
View File

@ -98,20 +98,19 @@ void load_uri(WebKitWebView* view, const char* uri)
if (g_str_has_prefix(uri, "http://") || g_str_has_prefix(uri, "https://") || g_str_has_prefix(uri, "file://") || g_str_has_prefix(uri, "about:")) { if (g_str_has_prefix(uri, "http://") || g_str_has_prefix(uri, "https://") || g_str_has_prefix(uri, "file://") || g_str_has_prefix(uri, "about:")) {
webkit_web_view_load_uri(view, uri); webkit_web_view_load_uri(view, uri);
} else { } else {
// Check for shortcuts // Check for shortcuts
int l = SHORTCUT_N + strlen(uri) + 1; int l = SHORTCUT_N + strlen(uri) + 1;
char uri_expanded[l]; char uri_expanded[l];
str_init(uri_expanded, l); str_init(uri_expanded, l);
int check = shortcut_expand(uri, uri_expanded); int check = shortcut_expand(uri, uri_expanded);
if (check == 2) { if (check == 2) {
webkit_web_view_load_uri(view, uri_expanded); webkit_web_view_load_uri(view, uri_expanded);
} else { } else {
// Feed into search engine. // Feed into search engine.
char tmp[strlen(uri) + strlen(SEARCH)]; char tmp[strlen(uri) + strlen(SEARCH)];
snprintf(tmp, sizeof(tmp), SEARCH, uri); snprintf(tmp, sizeof(tmp), SEARCH, uri);
webkit_web_view_load_uri(view, tmp); webkit_web_view_load_uri(view, tmp);
} }
} }
} }
@ -194,18 +193,18 @@ void notebook_append(GtkNotebook* notebook, const char* uri);
GtkWidget* handle_create_new_tab(WebKitWebView* self, GtkWidget* handle_create_new_tab(WebKitWebView* self,
WebKitNavigationAction* navigation_action, WebKitNavigationAction* navigation_action,
GtkNotebook* notebook) GtkNotebook* notebook)
{ {
if(NUM_TABS < MAX_NUM_TABS || NUM_TABS == 0){ if (NUM_TABS < MAX_NUM_TABS || NUM_TABS == 0) {
WebKitURIRequest* uri_request = webkit_navigation_action_get_request(navigation_action); WebKitURIRequest* uri_request = webkit_navigation_action_get_request(navigation_action);
const char* uri = webkit_uri_request_get_uri(uri_request); const char* uri = webkit_uri_request_get_uri(uri_request);
printf("Creating new window: %s\n", uri); printf("Creating new window: %s\n", uri);
notebook_append(notebook, uri); notebook_append(notebook, uri);
gtk_notebook_set_show_tabs(notebook, true); gtk_notebook_set_show_tabs(notebook, true);
return NULL; return NULL;
} else { } else {
webkit_web_view_run_javascript(notebook_get_webview(notebook), webkit_web_view_run_javascript(notebook_get_webview(notebook),
"alert('Too many tabs, not opening a new one')", NULL, NULL, NULL); "alert('Too many tabs, not opening a new one')", NULL, NULL, NULL);
} }
/* WebKitGTK documentation recommends returning the new webview. /* WebKitGTK documentation recommends returning the new webview.
* I imagine that this might allow e.g., to go back in a new tab * I imagine that this might allow e.g., to go back in a new tab
* or generally to keep track of history. * or generally to keep track of history.
@ -216,42 +215,42 @@ GtkWidget* handle_create_new_tab(WebKitWebView* self,
void notebook_append(GtkNotebook* notebook, const char* uri) void notebook_append(GtkNotebook* notebook, const char* uri)
{ {
if(NUM_TABS < MAX_NUM_TABS || NUM_TABS == 0){ if (NUM_TABS < MAX_NUM_TABS || NUM_TABS == 0) {
GdkScreen* screen = gtk_window_get_screen(GTK_WINDOW(window)); GdkScreen* screen = gtk_window_get_screen(GTK_WINDOW(window));
GdkVisual* rgba_visual = gdk_screen_get_rgba_visual(screen); GdkVisual* rgba_visual = gdk_screen_get_rgba_visual(screen);
GdkRGBA rgba; GdkRGBA rgba;
gdk_rgba_parse(&rgba, BG_COLOR); gdk_rgba_parse(&rgba, BG_COLOR);
WebKitWebView* view = webview_new(); WebKitWebView* view = webview_new();
gtk_widget_set_visual(GTK_WIDGET(window), rgba_visual); gtk_widget_set_visual(GTK_WIDGET(window), rgba_visual);
g_signal_connect(view, "load_changed", G_CALLBACK(load_changed), notebook); g_signal_connect(view, "load_changed", G_CALLBACK(load_changed), notebook);
g_signal_connect(view, "create", G_CALLBACK(handle_create_new_tab), notebook); g_signal_connect(view, "create", G_CALLBACK(handle_create_new_tab), notebook);
int n = gtk_notebook_append_page(notebook, GTK_WIDGET(view), NULL); int n = gtk_notebook_append_page(notebook, GTK_WIDGET(view), NULL);
gtk_notebook_set_tab_reorderable(notebook, GTK_WIDGET(view), true); gtk_notebook_set_tab_reorderable(notebook, GTK_WIDGET(view), true);
gtk_widget_show_all(GTK_WIDGET(window)); gtk_widget_show_all(GTK_WIDGET(window));
gtk_widget_hide(GTK_WIDGET(bar)); gtk_widget_hide(GTK_WIDGET(bar));
webkit_web_view_set_background_color(view, &rgba); webkit_web_view_set_background_color(view, &rgba);
load_uri(view, (uri) ? uri : HOME); load_uri(view, (uri) ? uri : HOME);
if (CUSTOM_STYLE_ENABLED) { if (CUSTOM_STYLE_ENABLED) {
char* style_js = malloc(STYLE_N + 1); char* style_js = malloc(STYLE_N + 1);
read_style_js(style_js); read_style_js(style_js);
webkit_web_view_run_javascript(notebook_get_webview(notebook), style_js, webkit_web_view_run_javascript(notebook_get_webview(notebook), style_js,
NULL, NULL, NULL); NULL, NULL, NULL);
free(style_js); free(style_js);
} }
gtk_notebook_set_current_page(notebook, n); gtk_notebook_set_current_page(notebook, n);
gtk_notebook_set_tab_label_text(notebook, GTK_WIDGET(view), "-"); gtk_notebook_set_tab_label_text(notebook, GTK_WIDGET(view), "-");
webkit_web_view_set_zoom_level(view, ZOOM); webkit_web_view_set_zoom_level(view, ZOOM);
NUM_TABS+=1; NUM_TABS += 1;
} else { } else {
webkit_web_view_run_javascript(notebook_get_webview(notebook), webkit_web_view_run_javascript(notebook_get_webview(notebook),
"alert('Too many tabs, not opening a new one')", NULL, NULL, NULL); "alert('Too many tabs, not opening a new one')", NULL, NULL, NULL);
} }
} }
void show_bar(GtkNotebook* notebook) void show_bar(GtkNotebook* notebook)
@ -338,7 +337,7 @@ int handle_key(func id, GtkNotebook* notebook)
case close_tab: case close_tab:
gtk_notebook_remove_page(notebook, gtk_notebook_get_current_page(notebook)); gtk_notebook_remove_page(notebook, gtk_notebook_get_current_page(notebook));
NUM_TABS-=1; NUM_TABS -= 1;
switch (gtk_notebook_get_n_pages(notebook)) { switch (gtk_notebook_get_n_pages(notebook)) {
case 0: case 0: