aboutsummaryrefslogtreecommitdiff
path: root/ui/static/js
diff options
context:
space:
mode:
authorGravatar Jean Khawand <22157081+jeankhawand@users.noreply.github.com> 2023-08-01 06:11:39 +0200
committerGravatar GitHub <noreply@github.com> 2023-07-31 21:11:39 -0700
commit061f12fbb0f33314f30e5fcc7c4b5308a399ae69 (patch)
treeea130dbb2ffb3152a2fd61c0b32be9e830c7eb03 /ui/static/js
parentbf4823bdbd2c6a863b8b1beeafd4cddf558c1d17 (diff)
downloadv2-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.js50
-rw-r--r--ui/static/js/bootstrap.js1
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));