Skip to content

Commit e457973

Browse files
committed
Added handlebars, pulling JS libs now per liferea:// URI scheme
1 parent ae13e93 commit e457973

7 files changed

+98
-37
lines changed

.eslintrc.js

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
module.exports = {
2+
"env": {
3+
"browser": true,
4+
"es2021": true
5+
},
6+
"extends": "eslint:recommended",
7+
"overrides": [
8+
{
9+
"env": {
10+
"node": true
11+
},
12+
"files": [
13+
".eslintrc.{js,cjs}"
14+
],
15+
"parserOptions": {
16+
"sourceType": "script"
17+
}
18+
}
19+
],
20+
"parserOptions": {
21+
"ecmaVersion": "latest",
22+
"sourceType": "module"
23+
},
24+
"rules": {
25+
}
26+
}

js/gresource.xml

+3-4
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,10 @@
44
<file compressed="true">Readability-readerable.js</file>
55
<file compressed="true">Readability.js</file>
66
</gresource>
7-
<gresource prefix="/org/gnome/liferea/dompurify">
8-
<file compressed="true">purify.min.js</file>
9-
</gresource>
10-
<gresource prefix="/org/gnome/liferea">
7+
<gresource prefix="/org/gnome/liferea/js">
118
<file compressed="true">htmlview.js</file>
9+
<file compressed="true">purify.min.js</file>
10+
<file compressed="true">handlebars.min.js</file>
1211
</gresource>
1312
</gresources>
1413

js/handlebars.min.js

+29
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

js/htmlview.js

+8-5
Original file line numberDiff line numberDiff line change
@@ -150,12 +150,12 @@ function loadItem(data, baseURL = null, direction) {
150150
let item = JSON.parse(decodeURIComponent(data));
151151
let richContent = metadata_get(item, "richContent");
152152
let description = item.description;
153-
// FIXME: use this!
154-
/*let author = metadata_get(item, "author");
153+
let author = metadata_get(item, "author");
155154
let creator = metadata_get(item, "creator");
156155
let sharedby = metadata_get(item, "sharedby");
157156
let via = metadata_get(item, "via");
158-
let related = metadata_get(item, "related");
157+
// FIXME: use this!
158+
/*let related = metadata_get(item, "related");
159159
let point = metadata_get(item, "point");
160160
let mediaviews = metadata_get(item, "mediaviews");
161161
let ratingavg = metadata_get(item, "mediastarRatingavg");
@@ -202,6 +202,10 @@ function loadItem(data, baseURL = null, direction) {
202202
<span class="slashDepartment">Department</span><span class="slashValue">${slash.split(',')[1]}</span>
203203
</div>
204204
`:''}
205+
${author?`<div>Author: ${author}</div>`:''}
206+
${creator?`<div>Creator: ${creator}</div>`:''}
207+
${sharedby?`<div>Shared By: ${sharedby}</div>`:''}
208+
${via?`<div>Via: <a href="${via}">${via}</a></div>`:''}
205209
</header>
206210
207211
<!-- cleaned by DOMPurify -->
@@ -271,7 +275,7 @@ function loadItem(data, baseURL = null, direction) {
271275
function contentCleanup() {
272276

273277
// Run DOMPurify
274-
content = document.getElementById('content').innerHTML;
278+
let content = document.getElementById('content').innerHTML;
275279
document.getElementById('content').innerHTML = DOMPurify.sanitize(content);
276280

277281
// Fix inline SVG sizes
@@ -307,7 +311,6 @@ function contentCleanup() {
307311
});
308312

309313
// Drop empty elements (to get rid of empty picture/video/iframe divs)
310-
const emptyRegex = new RegExp("^\s*$");
311314
document.getElementById('content')
312315
.querySelectorAll(":only-child")
313316
.forEach((el) => {

package.json

+9-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,14 @@
11
{
2+
"scripts": {
3+
"test": "eslint js/htmlview.js",
4+
"installDeps": "ls node_modules"
5+
},
26
"dependencies": {
37
"dompurify": "^3.0.6",
4-
"readability": "^0.1.0"
8+
"readability": "^0.1.0",
9+
"handlebars": "^4.7.8"
10+
},
11+
"devDependencies": {
12+
"eslint": "^8.49.0"
513
}
614
}

src/ui/liferea_browser.c

+4-17
Original file line numberDiff line numberDiff line change
@@ -476,28 +476,15 @@ liferea_browser_do_zoom (LifereaBrowser *browser, gint zoom)
476476
static void
477477
liferea_browser_write_body (LifereaBrowser *browser, const gchar *script, const gchar *baseURL)
478478
{
479-
g_autoptr(GBytes) b1, b2, b3, b4;
480479
g_autoptr(GString) buffer = g_string_new ("");
481480

482-
// Return Readability.js and Liferea specific loader code
483-
b1 = g_resources_lookup_data ("/org/gnome/liferea/readability/Readability-readerable.js", 0, NULL);
484-
b2 = g_resources_lookup_data ("/org/gnome/liferea/readability/Readability.js", 0, NULL);
485-
b3 = g_resources_lookup_data ("/org/gnome/liferea/dompurify/purify.min.js", 0, NULL);
486-
b4 = g_resources_lookup_data ("/org/gnome/liferea/htmlview.js", 0, NULL);
487-
488-
g_assert(b1 != NULL);
489-
g_assert(b2 != NULL);
490-
g_assert(b3 != NULL);
491-
g_assert(b4 != NULL);
492-
493-
/* Prepare HTML boilderplate */
494481
g_string_append (buffer, "<!DOCTYPE html>\n");
495482
g_string_append (buffer, "<html>\n");
496483
g_string_append (buffer, "<head>");
497-
g_string_append_printf (buffer, "<script>%s</script>", (gchar *)g_bytes_get_data (b1, NULL));
498-
g_string_append_printf (buffer, "<script>%s</script>", (gchar *)g_bytes_get_data (b2, NULL));
499-
g_string_append_printf (buffer, "<script>%s</script>", (gchar *)g_bytes_get_data (b3, NULL));
500-
g_string_append_printf (buffer, "<script>%s</script>", (gchar *)g_bytes_get_data (b4, NULL));
484+
g_string_append (buffer, "<script src='liferea:///readability/Readability.js'></script>");
485+
g_string_append (buffer, "<script src='liferea:///js/purify.min.js'></script>");
486+
g_string_append (buffer, "<script src='liferea:///js/handlebar.min.js'></script>");
487+
g_string_append (buffer, "<script src='liferea:///js/htmlview.js'></script>");
501488

502489
// FIXME: consider adding CSP meta tag here as e.g. Firefox reader mode page does
503490
g_string_append (buffer, "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />");

src/webkit/webkit.c

+19-10
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
#include "browser.h"
3131
#include "conf.h"
3232
#include "common.h"
33+
#include "debug.h"
3334
#include "download.h"
3435
#include "net.h"
3536
#include "ui/browser_tabs.h"
@@ -368,19 +369,27 @@ liferea_webkit_download_started (WebKitWebContext *context,
368369
download_show ();
369370
}
370371

372+
371373
static void
372374
liferea_webkit_handle_liferea_scheme (WebKitURISchemeRequest *request, gpointer user_data)
373375
{
374-
const gchar *uri = webkit_uri_scheme_request_get_uri (request);
375-
GInputStream *stream;
376-
gssize length;
377-
gchar *contents;
378-
379-
contents = g_strdup_printf ("Placeholder handler for liferea scheme. URI requested : %s", uri);
380-
length = (gssize) strlen (contents);
381-
stream = g_memory_input_stream_new_from_data (contents, length, g_free);
382-
webkit_uri_scheme_request_finish (request, stream, length, "text/plain");
383-
g_object_unref (stream);
376+
const gchar *path = webkit_uri_scheme_request_get_path (request);
377+
g_autofree gchar *rpath;
378+
g_autoptr(GBytes) b;
379+
380+
rpath = g_strdup_printf ("/org/gnome/liferea%s", path);
381+
debug (DEBUG_HTML, "Handling liferea:// request for path %s (%s)", path, rpath);
382+
383+
b = g_resources_lookup_data (rpath, 0, NULL);
384+
if (b) {
385+
const guchar *data = g_bytes_get_data (b, NULL);
386+
GInputStream *stream = g_memory_input_stream_new_from_data (data, -1, NULL);
387+
webkit_uri_scheme_request_finish (request, stream, -1, "text/plain");
388+
g_object_unref (stream);
389+
} else {
390+
g_autoptr(GError) error = g_error_new (G_IO_ERROR, G_IO_ERROR_NOT_FOUND, "Resource not found");
391+
webkit_uri_scheme_request_finish_error (request, error);
392+
}
384393
}
385394

386395
static void

0 commit comments

Comments
 (0)