diff options
author | 2023-08-01 06:11:39 +0200 | |
---|---|---|
committer | 2023-07-31 21:11:39 -0700 | |
commit | 061f12fbb0f33314f30e5fcc7c4b5308a399ae69 (patch) | |
tree | ea130dbb2ffb3152a2fd61c0b32be9e830c7eb03 /ui/static/js | |
parent | bf4823bdbd2c6a863b8b1beeafd4cddf558c1d17 (diff) | |
download | v2-061f12fbb0f33314f30e5fcc7c4b5308a399ae69.tar.gz v2-061f12fbb0f33314f30e5fcc7c4b5308a399ae69.tar.zst v2-061f12fbb0f33314f30e5fcc7c4b5308a399ae69.zip |
Use Web Share API for sharing entry
Diffstat (limited to 'ui/static/js')
-rw-r--r-- | ui/static/js/app.js | 50 | ||||
-rw-r--r-- | ui/static/js/bootstrap.js | 1 |
2 files changed, 46 insertions, 5 deletions
diff --git a/ui/static/js/app.js b/ui/static/js/app.js index e75c2ddf..9ef95730 100644 --- a/ui/static/js/app.js +++ b/ui/static/js/app.js @@ -221,9 +221,9 @@ function updateEntriesStatus(entryIDs, status, callback) { request.withBody({entry_ids: entryIDs, status: status}); request.withCallback((resp) => { resp.json().then(count => { - if (callback) { - callback(resp); - } + if (callback) { + callback(resp); + } if (status === "read") { decrementUnreadCounter(count); @@ -336,7 +336,7 @@ function handleFetchOriginalContent() { response.json().then((data) => { if (data.hasOwnProperty("content") && data.hasOwnProperty("reading_time")) { document.querySelector(".entry-content").innerHTML = data.content; - document.querySelector(".entry-reading-time").innerHTML = data.reading_time; + document.querySelector(".entry-reading-time").innerHTML = data.reading_time; } }); }); @@ -557,7 +557,7 @@ function handleConfirmationMessage(linkElement, callback) { } linkElement.style.display = "none"; - + let containerElement = linkElement.parentNode; let questionElement = document.createElement("span"); @@ -638,3 +638,43 @@ function handlePlayerProgressionSave(playerElement) { request.execute(); } } + +/** + * handle new share entires and already shared entries + */ +function handleShare() { + let link = document.querySelector('a[data-share-status]'); + let title = document.querySelector("body > main > section > header > h1 > a"); + if (link.dataset.shareStatus === "shared") { + checkShareAPI(title, link.href); + } + if (link.dataset.shareStatus === "share") { + let request = new RequestBuilder(link.href); + request.withCallback((r) => { + checkShareAPI(title, r.url); + }); + request.withHttpMethod("GET"); + request.execute(); + } +} + +/** +* wrapper for Web Share API +*/ +function checkShareAPI(title, url) { + if (!navigator.canShare) { + console.error("Your browser doesn't support the Web Share API."); + window.location = url; + return; + } + try { + navigator.share({ + title: title, + url: url + }); + window.location.reload(); + } catch (err) { + console.error(err); + window.location.reload(); + } +}
\ No newline at end of file diff --git a/ui/static/js/bootstrap.js b/ui/static/js/bootstrap.js index be68225b..6cba7089 100644 --- a/ui/static/js/bootstrap.js +++ b/ui/static/js/bootstrap.js @@ -52,6 +52,7 @@ document.addEventListener("DOMContentLoaded", function () { onClick("a[data-toggle-bookmark]", (event) => handleBookmark(event.target)); onClick("a[data-fetch-content-entry]", () => handleFetchOriginalContent()); onClick("a[data-action=search]", (event) => setFocusToSearchInput(event)); + onClick("a[data-share-status]", () => handleShare()); onClick("a[data-action=markPageAsRead]", (event) => handleConfirmationMessage(event.target, () => markPageAsRead())); onClick("a[data-toggle-status]", (event) => handleEntryStatus("next", event.target)); |