diff --git a/docs/privacy.md b/docs/privacy.md index a4cec9cc..c13f35c1 100644 --- a/docs/privacy.md +++ b/docs/privacy.md @@ -4,9 +4,9 @@ I love free software and I'm doing this because it's fun and to give back. I hav never monetize or sell your information. This service will always stay free and open. Neither the server nor the app record any personal information, or share any of the messages and topics with -any outside service. All data is exclusively used to make the service function properly. The one exception -is the Firebase Cloud Messaging (FCM) service, which is required to provide instant Android notifications (see -[FAQ](faq.md) for details). +any outside service. All data is exclusively used to make the service function properly. The only external service +I use is Firebase Cloud Messaging (FCM) service, which is required to provide instant Android notifications (see +[FAQ](faq.md) for details). To avoid FCM altogether, download the F-Droid version. The web server does not log or otherwise store request paths, remote IP addresses or even topics or messages, aside from a short on-disk cache to support service restarts. diff --git a/docs/static/css/extra.css b/docs/static/css/extra.css index 6c85d1aa..ac44b523 100644 --- a/docs/static/css/extra.css +++ b/docs/static/css/extra.css @@ -1,3 +1,7 @@ +.md-header__button.md-logo :is(img, svg) { + width: unset !important; +} + article { padding-bottom: 50px; } @@ -16,3 +20,78 @@ figure img { .remove-md-box td { padding: 0 10px } + +/* Lightbox; thanks to https://yossiabramov.com/blog/vanilla-js-lightbox */ + +.screenshots { + text-align: center; +} + +.screenshots img { + height: 230px; + margin: 3px; + border-radius: 5px; + filter: drop-shadow(2px 2px 2px #ddd); +} + +.screenshots .nowrap { + white-space: nowrap; +} + +.lightbox { + opacity: 0; + visibility: hidden; + position: fixed; + left:0; + right: 0; + top: 0; + bottom: 0; + z-index: -1; + display: flex; + align-items: center; + justify-content: center; + transition: all 0.15s ease-in; +} + +.lightbox.show { + background-color: rgba(0,0,0, 0.75); + opacity: 1; + visibility: visible; + z-index: 1000; +} + +.lightbox img { + max-width: 90%; + max-height: 90%; + filter: drop-shadow(5px 5px 10px #222); + border-radius: 5px; +} + +.lightbox .close-lightbox { + cursor: pointer; + position: absolute; + top: 30px; + right: 30px; + width: 20px; + height: 20px; +} + +.lightbox .close-lightbox::after, +.lightbox .close-lightbox::before { + content: ''; + width: 3px; + height: 20px; + background-color: #ddd; + position: absolute; + border-radius: 5px; + transform: rotate(45deg); +} + +.lightbox .close-lightbox::before { + transform: rotate(-45deg); +} + +.lightbox .close-lightbox:hover::after, +.lightbox .close-lightbox:hover::before { + background-color: #fff; +} diff --git a/docs/static/img/android-notification-settings.png b/docs/static/img/android-notification-settings.png new file mode 100644 index 00000000..ce66408c Binary files /dev/null and b/docs/static/img/android-notification-settings.png differ diff --git a/docs/static/img/android-screenshot-add-instant.jpg b/docs/static/img/android-screenshot-add-instant.jpg new file mode 100644 index 00000000..51846efa Binary files /dev/null and b/docs/static/img/android-screenshot-add-instant.jpg differ diff --git a/docs/static/img/android-screenshot-add-other.jpg b/docs/static/img/android-screenshot-add-other.jpg new file mode 100644 index 00000000..004d559c Binary files /dev/null and b/docs/static/img/android-screenshot-add-other.jpg differ diff --git a/docs/static/img/android-screenshot-add.jpg b/docs/static/img/android-screenshot-add.jpg new file mode 100644 index 00000000..7fed362d Binary files /dev/null and b/docs/static/img/android-screenshot-add.jpg differ diff --git a/docs/static/img/android-screenshot-detail.jpg b/docs/static/img/android-screenshot-detail.jpg new file mode 100644 index 00000000..c15dfa6e Binary files /dev/null and b/docs/static/img/android-screenshot-detail.jpg differ diff --git a/docs/static/img/android-screenshot-main.jpg b/docs/static/img/android-screenshot-main.jpg new file mode 100644 index 00000000..3b82fd85 Binary files /dev/null and b/docs/static/img/android-screenshot-main.jpg differ diff --git a/docs/static/img/android-screenshot-pause.jpg b/docs/static/img/android-screenshot-pause.jpg new file mode 100644 index 00000000..dc3ce74b Binary files /dev/null and b/docs/static/img/android-screenshot-pause.jpg differ diff --git a/docs/static/img/android-video-overview.mp4 b/docs/static/img/android-video-overview.mp4 new file mode 100644 index 00000000..cf295099 Binary files /dev/null and b/docs/static/img/android-video-overview.mp4 differ diff --git a/docs/static/img/screenshot-web-notifcation.png b/docs/static/img/screenshot-curl.png similarity index 100% rename from docs/static/img/screenshot-web-notifcation.png rename to docs/static/img/screenshot-curl.png diff --git a/docs/static/img/screenshot-phone-add.jpg b/docs/static/img/screenshot-phone-add.jpg new file mode 100644 index 00000000..f728ec99 Binary files /dev/null and b/docs/static/img/screenshot-phone-add.jpg differ diff --git a/docs/static/img/screenshot-phone-detail.jpg b/docs/static/img/screenshot-phone-detail.jpg new file mode 100644 index 00000000..2cd3b2fe Binary files /dev/null and b/docs/static/img/screenshot-phone-detail.jpg differ diff --git a/docs/static/img/screenshot-phone-main.jpg b/docs/static/img/screenshot-phone-main.jpg new file mode 100644 index 00000000..5caeee14 Binary files /dev/null and b/docs/static/img/screenshot-phone-main.jpg differ diff --git a/docs/static/img/screenshot-phone-notification.jpg b/docs/static/img/screenshot-phone-notification.jpg new file mode 100644 index 00000000..7924c6fd Binary files /dev/null and b/docs/static/img/screenshot-phone-notification.jpg differ diff --git a/docs/static/img/screenshot-web.png b/docs/static/img/screenshot-web.png deleted file mode 100644 index 08c759f8..00000000 Binary files a/docs/static/img/screenshot-web.png and /dev/null differ diff --git a/docs/static/img/web-detail.png b/docs/static/img/web-detail.png new file mode 100644 index 00000000..a45e9155 Binary files /dev/null and b/docs/static/img/web-detail.png differ diff --git a/docs/static/img/web-notification.png b/docs/static/img/web-notification.png new file mode 100644 index 00000000..535d0830 Binary files /dev/null and b/docs/static/img/web-notification.png differ diff --git a/docs/static/img/web-subscribe.png b/docs/static/img/web-subscribe.png new file mode 100644 index 00000000..7c8f7e38 Binary files /dev/null and b/docs/static/img/web-subscribe.png differ diff --git a/docs/static/js/extra.js b/docs/static/js/extra.js index d588866a..0aa380a7 100644 --- a/docs/static/js/extra.js +++ b/docs/static/js/extra.js @@ -29,3 +29,71 @@ for (const tab of tabs) { tab.checked = true } } + +// Lightbox for screenshot + +const lightbox = document.createElement('div'); +lightbox.classList.add('lightbox'); +document.body.appendChild(lightbox); + +const showScreenshotOverlay = (e, el, group, index) => { + lightbox.classList.add('show'); + document.addEventListener('keydown', nextScreenshotKeyboardListener); + return showScreenshot(e, group, index); +}; + +const showScreenshot = (e, group, index) => { + const actualIndex = resolveScreenshotIndex(group, index); + lightbox.innerHTML = '
' + screenshots[group][actualIndex].innerHTML; + lightbox.querySelector('img').onclick = (e) => { return showScreenshot(e, group, actualIndex+1); }; + currentScreenshotGroup = group; + currentScreenshotIndex = actualIndex; + e.stopPropagation(); + return false; +}; + +const nextScreenshot = (e) => { + return showScreenshot(e, currentScreenshotGroup, currentScreenshotIndex+1); +}; + +const previousScreenshot = (e) => { + return showScreenshot(e, currentScreenshotGroup, currentScreenshotIndex-1); +}; + +const resolveScreenshotIndex = (group, index) => { + if (index < 0) { + return screenshots[group].length - 1; + } else if (index > screenshots[group].length - 1) { + return 0; + } + return index; +}; + +const hideScreenshotOverlay = (e) => { + lightbox.classList.remove('show'); + document.removeEventListener('keydown', nextScreenshotKeyboardListener); +}; + +const nextScreenshotKeyboardListener = (e) => { + switch (e.keyCode) { + case 37: + previousScreenshot(e); + break; + case 39: + nextScreenshot(e); + break; + } +}; + +let currentScreenshotGroup = ''; +let currentScreenshotIndex = 0; +let screenshots = {}; +Array.from(document.getElementsByClassName('screenshots')).forEach((sg) => { + const group = sg.id; + screenshots[group] = [...sg.querySelectorAll('a')]; + screenshots[group].forEach((el, index) => { + el.onclick = (e) => { return showScreenshotOverlay(e, el, group, index); }; + }); +}); + +lightbox.onclick = hideScreenshotOverlay; diff --git a/docs/subscribe/phone.md b/docs/subscribe/phone.md index d9fed5c9..bfa59714 100644 --- a/docs/subscribe/phone.md +++ b/docs/subscribe/phone.md @@ -4,12 +4,51 @@ notifications directly on your phone. Just like the server, this app is also [op Since I don't have an iPhone or a Mac, I didn't make an iOS app yet. I'd be awesome if [someone else could help out](https://github.com/binwiederhier/ntfy/issues/4). ## Android +Subscribe to topics here and receive messages as desktop notification. Topics are not password-protected, - so choose a name that's not easy to guess. Once subscribed, you can publish messages via PUT/POST. + so choose a name that's not easy to guess.