From 82adb01307e108e8a2b4eeb900552160d730d0b7 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Mon, 15 Feb 2021 14:10:46 +0300 Subject: render enclosures on the client --- js/App.js | 18 ++++++++---------- js/Article.js | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++- js/Headlines.js | 2 +- 3 files changed, 66 insertions(+), 12 deletions(-) (limited to 'js') diff --git a/js/App.js b/js/App.js index 0a72d1b12..3a31438c5 100644 --- a/js/App.js +++ b/js/App.js @@ -586,6 +586,10 @@ const App = { isPrefs() { return this.is_prefs; }, + audioCanPlay: function(ctype) { + const a = document.createElement('audio'); + return a.canPlayType(ctype); + }, init: function(parser, is_prefs) { this.is_prefs = is_prefs; window.onerror = this.Error.onWindowError; @@ -604,17 +608,11 @@ const App = { this.initHotkeyActions(); this.enableCsrfSupport(); - const a = document.createElement('audio'); - const hasAudio = !!a.canPlayType; - const hasSandbox = "sandbox" in document.createElement("iframe"); - const hasMp3 = !!(a.canPlayType && a.canPlayType('audio/mpeg;').replace(/no/, '')); - const clientTzOffset = new Date().getTimezoneOffset() * 60; - const params = { - op: "rpc", method: "sanityCheck", hasAudio: hasAudio, - hasMp3: hasMp3, - clientTzOffset: clientTzOffset, - hasSandbox: hasSandbox + op: "rpc", + method: "sanityCheck", + clientTzOffset: new Date().getTimezoneOffset() * 60, + hasSandbox: "sandbox" in document.createElement("iframe") }; xhrPost("backend.php", params, (transport) => { diff --git a/js/Article.js b/js/Article.js index f8b0415b9..efe33bc99 100644 --- a/js/Article.js +++ b/js/Article.js @@ -140,6 +140,62 @@ const Article = { Headlines.toggleUnread(id, 0); }, + renderEnclosures: function (enclosures) { + + // enclosure list was handled by backend (HOOK_FORMAT_ENCLOSURES) + if (enclosures.formatted) + return enclosures.formatted; + + return ` + ${enclosures.can_inline ? + `
+ ${enclosures.entries.map((enc) => { + if (!enclosures.inline_text_only) { + if (enc.content_type && enc.content_type.indexOf("image/") != -1) { + return `

+ +

` + } else if (enc.content_type && enc.content_type.indexOf("audio/") != -1 && App.audioCanPlay(enc.content_type)) { + return `

+ +

+ `; + } else { + return `

+ ${App.escapeHtml(enc.content_url)} +

` + } + } else { + return `

+ ${App.escapeHtml(enc.content_url)} +

` + } + }).join("")} +
` : ''} + ${enclosures.entries.length > 0 ? + `
+ ${__('Attachments')} +
+ ${enclosures.entries.map((enc) => ` +
+ ${enc.title ? enc.title : enc.filename} +
+ `).join("")} +
+
` : ''} + ` + }, render: function (article) { App.cleanupMemory("content-insert"); @@ -241,7 +297,7 @@ const Article = {
${hl.note}
${hl.content} - ${hl.enclosures} + ${Article.renderEnclosures(hl.enclosures)}
`; diff --git a/js/Headlines.js b/js/Headlines.js index 94541b974..dadf79c1a 100755 --- a/js/Headlines.js +++ b/js/Headlines.js @@ -488,7 +488,7 @@ const Headlines = {
- ${hl.enclosures} + ${Article.renderEnclosures(hl.enclosures)}