From 036dea907d6d4209aec2b4e8af2e9873d7593219 Mon Sep 17 00:00:00 2001 From: MSarmadQadeer Date: Thu, 18 Aug 2022 13:06:42 +0000 Subject: [PATCH] deploy: 1c22af48468c45075c394f9591316bd0ae221f7e --- blog/20201022-simplex-chat/index.html | 47 ++++++-- .../index.html | 47 ++++++-- .../index.html | 47 ++++++-- .../index.html | 47 ++++++-- .../index.html | 47 ++++++-- .../index.html | 49 +++++++-- .../index.html | 49 +++++++-- .../index.html | 51 +++++++-- .../index.html | 49 +++++++-- .../index.html | 51 +++++++-- .../index.html | 51 +++++++-- .../index.html | 53 ++++++++-- .../index.html | 51 +++++++-- .../index.html | 57 +++++++--- css/blog.css | 100 +++++++++++------- css/tailwind.css | 4 + 16 files changed, 642 insertions(+), 158 deletions(-) diff --git a/blog/20201022-simplex-chat/index.html b/blog/20201022-simplex-chat/index.html index 00bd646008..8553575462 100644 --- a/blog/20201022-simplex-chat/index.html +++ b/blog/20201022-simplex-chat/index.html @@ -80,22 +80,55 @@ window.addEventListener("click", (e) => { if (e.target.tagName === "A") { e.preventDefault(); - - if (e.target.href.split("#")[1]) { - const id = e.target.href.split("#")[1]; + if (e.target.getAttribute("href").split("#")[0] == "") { + const id = e.target.getAttribute("href").split("#")[1]; const element = document.getElementById(id); - const yOffset = -80; // Offset for fixed header + const yOffset = 0; // Offset for fixed header const y = element.getBoundingClientRect().top + window.pageYOffset + yOffset; - window.scrollTo({ top: y, behavior: 'smooth' }); - } else { - window.open(e.target.href, "_blank"); + } + else { + window.open(e.target.href, "_self"); } } }); + + // convert relative blog links to absolute links + document.querySelectorAll("a").forEach((a) => { + const dotSepList = a.getAttribute("href").split("."); + if (dotSepList[0] == "") { + const hashSepList = dotSepList[dotSepList.length - 1].split("#") + if (hashSepList[0] == "md") { + let str = `/blog${dotSepList[1]}`; + for (let i = 2; i < dotSepList.length; i++) { + if (dotSepList[i].substring(0, 2) != "md") { + str += "." + dotSepList[i]; + } else break; + } + if (hashSepList[1]) { + str += "#" + hashSepList[1]; + } + a.setAttribute("href", str); + } + } + }); + + const url = window.location.href; + const hash = url.split("#")[1]; + if (hash) { + console.log("entered") + const element = document.getElementById(hash); + const yOffset = 0; // Offset for fixed header + const y = element.getBoundingClientRect().top + window.pageYOffset + yOffset; + + window.scrollTo({ + top: y, + behavior: 'smooth' + }); + } diff --git a/blog/20210512-simplex-chat-terminal-ui/index.html b/blog/20210512-simplex-chat-terminal-ui/index.html index 2ab2704b21..53a9c30c0a 100644 --- a/blog/20210512-simplex-chat-terminal-ui/index.html +++ b/blog/20210512-simplex-chat-terminal-ui/index.html @@ -88,22 +88,55 @@ window.addEventListener("click", (e) => { if (e.target.tagName === "A") { e.preventDefault(); - - if (e.target.href.split("#")[1]) { - const id = e.target.href.split("#")[1]; + if (e.target.getAttribute("href").split("#")[0] == "") { + const id = e.target.getAttribute("href").split("#")[1]; const element = document.getElementById(id); - const yOffset = -80; // Offset for fixed header + const yOffset = 0; // Offset for fixed header const y = element.getBoundingClientRect().top + window.pageYOffset + yOffset; - window.scrollTo({ top: y, behavior: 'smooth' }); - } else { - window.open(e.target.href, "_blank"); + } + else { + window.open(e.target.href, "_self"); } } }); + + // convert relative blog links to absolute links + document.querySelectorAll("a").forEach((a) => { + const dotSepList = a.getAttribute("href").split("."); + if (dotSepList[0] == "") { + const hashSepList = dotSepList[dotSepList.length - 1].split("#") + if (hashSepList[0] == "md") { + let str = `/blog${dotSepList[1]}`; + for (let i = 2; i < dotSepList.length; i++) { + if (dotSepList[i].substring(0, 2) != "md") { + str += "." + dotSepList[i]; + } else break; + } + if (hashSepList[1]) { + str += "#" + hashSepList[1]; + } + a.setAttribute("href", str); + } + } + }); + + const url = window.location.href; + const hash = url.split("#")[1]; + if (hash) { + console.log("entered") + const element = document.getElementById(hash); + const yOffset = 0; // Offset for fixed header + const y = element.getBoundingClientRect().top + window.pageYOffset + yOffset; + + window.scrollTo({ + top: y, + behavior: 'smooth' + }); + } diff --git a/blog/20210914-simplex-chat-v0.4-released/index.html b/blog/20210914-simplex-chat-v0.4-released/index.html index a53d0f84e6..f62e7d0136 100644 --- a/blog/20210914-simplex-chat-v0.4-released/index.html +++ b/blog/20210914-simplex-chat-v0.4-released/index.html @@ -92,22 +92,55 @@ window.addEventListener("click", (e) => { if (e.target.tagName === "A") { e.preventDefault(); - - if (e.target.href.split("#")[1]) { - const id = e.target.href.split("#")[1]; + if (e.target.getAttribute("href").split("#")[0] == "") { + const id = e.target.getAttribute("href").split("#")[1]; const element = document.getElementById(id); - const yOffset = -80; // Offset for fixed header + const yOffset = 0; // Offset for fixed header const y = element.getBoundingClientRect().top + window.pageYOffset + yOffset; - window.scrollTo({ top: y, behavior: 'smooth' }); - } else { - window.open(e.target.href, "_blank"); + } + else { + window.open(e.target.href, "_self"); } } }); + + // convert relative blog links to absolute links + document.querySelectorAll("a").forEach((a) => { + const dotSepList = a.getAttribute("href").split("."); + if (dotSepList[0] == "") { + const hashSepList = dotSepList[dotSepList.length - 1].split("#") + if (hashSepList[0] == "md") { + let str = `/blog${dotSepList[1]}`; + for (let i = 2; i < dotSepList.length; i++) { + if (dotSepList[i].substring(0, 2) != "md") { + str += "." + dotSepList[i]; + } else break; + } + if (hashSepList[1]) { + str += "#" + hashSepList[1]; + } + a.setAttribute("href", str); + } + } + }); + + const url = window.location.href; + const hash = url.split("#")[1]; + if (hash) { + console.log("entered") + const element = document.getElementById(hash); + const yOffset = 0; // Offset for fixed header + const y = element.getBoundingClientRect().top + window.pageYOffset + yOffset; + + window.scrollTo({ + top: y, + behavior: 'smooth' + }); + } diff --git a/blog/20211208-simplex-chat-v0.5-released/index.html b/blog/20211208-simplex-chat-v0.5-released/index.html index 6245220cb3..88a09ebee8 100644 --- a/blog/20211208-simplex-chat-v0.5-released/index.html +++ b/blog/20211208-simplex-chat-v0.5-released/index.html @@ -87,22 +87,55 @@ window.addEventListener("click", (e) => { if (e.target.tagName === "A") { e.preventDefault(); - - if (e.target.href.split("#")[1]) { - const id = e.target.href.split("#")[1]; + if (e.target.getAttribute("href").split("#")[0] == "") { + const id = e.target.getAttribute("href").split("#")[1]; const element = document.getElementById(id); - const yOffset = -80; // Offset for fixed header + const yOffset = 0; // Offset for fixed header const y = element.getBoundingClientRect().top + window.pageYOffset + yOffset; - window.scrollTo({ top: y, behavior: 'smooth' }); - } else { - window.open(e.target.href, "_blank"); + } + else { + window.open(e.target.href, "_self"); } } }); + + // convert relative blog links to absolute links + document.querySelectorAll("a").forEach((a) => { + const dotSepList = a.getAttribute("href").split("."); + if (dotSepList[0] == "") { + const hashSepList = dotSepList[dotSepList.length - 1].split("#") + if (hashSepList[0] == "md") { + let str = `/blog${dotSepList[1]}`; + for (let i = 2; i < dotSepList.length; i++) { + if (dotSepList[i].substring(0, 2) != "md") { + str += "." + dotSepList[i]; + } else break; + } + if (hashSepList[1]) { + str += "#" + hashSepList[1]; + } + a.setAttribute("href", str); + } + } + }); + + const url = window.location.href; + const hash = url.split("#")[1]; + if (hash) { + console.log("entered") + const element = document.getElementById(hash); + const yOffset = 0; // Offset for fixed header + const y = element.getBoundingClientRect().top + window.pageYOffset + yOffset; + + window.scrollTo({ + top: y, + behavior: 'smooth' + }); + } diff --git a/blog/20220112-simplex-chat-v1-released/index.html b/blog/20220112-simplex-chat-v1-released/index.html index fbf39ca798..d6e3c3f9ec 100644 --- a/blog/20220112-simplex-chat-v1-released/index.html +++ b/blog/20220112-simplex-chat-v1-released/index.html @@ -101,22 +101,55 @@ window.addEventListener("click", (e) => { if (e.target.tagName === "A") { e.preventDefault(); - - if (e.target.href.split("#")[1]) { - const id = e.target.href.split("#")[1]; + if (e.target.getAttribute("href").split("#")[0] == "") { + const id = e.target.getAttribute("href").split("#")[1]; const element = document.getElementById(id); - const yOffset = -80; // Offset for fixed header + const yOffset = 0; // Offset for fixed header const y = element.getBoundingClientRect().top + window.pageYOffset + yOffset; - window.scrollTo({ top: y, behavior: 'smooth' }); - } else { - window.open(e.target.href, "_blank"); + } + else { + window.open(e.target.href, "_self"); } } }); + + // convert relative blog links to absolute links + document.querySelectorAll("a").forEach((a) => { + const dotSepList = a.getAttribute("href").split("."); + if (dotSepList[0] == "") { + const hashSepList = dotSepList[dotSepList.length - 1].split("#") + if (hashSepList[0] == "md") { + let str = `/blog${dotSepList[1]}`; + for (let i = 2; i < dotSepList.length; i++) { + if (dotSepList[i].substring(0, 2) != "md") { + str += "." + dotSepList[i]; + } else break; + } + if (hashSepList[1]) { + str += "#" + hashSepList[1]; + } + a.setAttribute("href", str); + } + } + }); + + const url = window.location.href; + const hash = url.split("#")[1]; + if (hash) { + console.log("entered") + const element = document.getElementById(hash); + const yOffset = 0; // Offset for fixed header + const y = element.getBoundingClientRect().top + window.pageYOffset + yOffset; + + window.scrollTo({ + top: y, + behavior: 'smooth' + }); + } diff --git a/blog/20220214-simplex-chat-ios-public-beta/index.html b/blog/20220214-simplex-chat-ios-public-beta/index.html index 233f23d82e..facb388f9f 100644 --- a/blog/20220214-simplex-chat-ios-public-beta/index.html +++ b/blog/20220214-simplex-chat-ios-public-beta/index.html @@ -45,7 +45,7 @@
  • additional layer of E2E encryption in each message queue (to prevent traffic correlation when multiple queues are used in a conversation - something we plan later this year).
  • additional encryption of messages delivered from servers to recipients (also to prevent traffic correlation).
  • -

    You can read more details in our recent v1 announcement.

    +

    You can read more details in our recent v1 announcement.

    Join our public beta!

    Install the app via TestFlight, connect to us (via Connect to SimpleX team link in the app) and to a couple of your friends you usually send messages to - and please let us know what you think!

    We would really appreciate any feedback to improve the app and to decide which additional features should be included in our public release in March.

    @@ -99,22 +99,55 @@ window.addEventListener("click", (e) => { if (e.target.tagName === "A") { e.preventDefault(); - - if (e.target.href.split("#")[1]) { - const id = e.target.href.split("#")[1]; + if (e.target.getAttribute("href").split("#")[0] == "") { + const id = e.target.getAttribute("href").split("#")[1]; const element = document.getElementById(id); - const yOffset = -80; // Offset for fixed header + const yOffset = 0; // Offset for fixed header const y = element.getBoundingClientRect().top + window.pageYOffset + yOffset; - window.scrollTo({ top: y, behavior: 'smooth' }); - } else { - window.open(e.target.href, "_blank"); + } + else { + window.open(e.target.href, "_self"); } } }); + + // convert relative blog links to absolute links + document.querySelectorAll("a").forEach((a) => { + const dotSepList = a.getAttribute("href").split("."); + if (dotSepList[0] == "") { + const hashSepList = dotSepList[dotSepList.length - 1].split("#") + if (hashSepList[0] == "md") { + let str = `/blog${dotSepList[1]}`; + for (let i = 2; i < dotSepList.length; i++) { + if (dotSepList[i].substring(0, 2) != "md") { + str += "." + dotSepList[i]; + } else break; + } + if (hashSepList[1]) { + str += "#" + hashSepList[1]; + } + a.setAttribute("href", str); + } + } + }); + + const url = window.location.href; + const hash = url.split("#")[1]; + if (hash) { + console.log("entered") + const element = document.getElementById(hash); + const yOffset = 0; // Offset for fixed header + const y = element.getBoundingClientRect().top + window.pageYOffset + yOffset; + + window.scrollTo({ + top: y, + behavior: 'smooth' + }); + } diff --git a/blog/20220308-simplex-chat-mobile-apps/index.html b/blog/20220308-simplex-chat-mobile-apps/index.html index 7d1356cbf5..c93d571a7c 100644 --- a/blog/20220308-simplex-chat-mobile-apps/index.html +++ b/blog/20220308-simplex-chat-mobile-apps/index.html @@ -59,7 +59,7 @@
  • additional layer of E2E encryption in each message queue (to prevent traffic correlation when multiple queues are used in a conversation - something we plan later this year).
  • additional encryption of messages delivered from servers to recipients (also to prevent traffic correlation).
  • -

    You can read more technical details in our recent v1 announcement.

    +

    You can read more technical details in our recent v1 announcement.

    A big thank you to @angerman for making it possible to compile our Haskell code to mobile platforms and getting it approved on app stores - it has been a non-trivial project, and it is still ongoing.

    Install the apps and make a private connection!

    Once you install the app, you can connect to anybody:

    @@ -117,22 +117,55 @@ window.addEventListener("click", (e) => { if (e.target.tagName === "A") { e.preventDefault(); - - if (e.target.href.split("#")[1]) { - const id = e.target.href.split("#")[1]; + if (e.target.getAttribute("href").split("#")[0] == "") { + const id = e.target.getAttribute("href").split("#")[1]; const element = document.getElementById(id); - const yOffset = -80; // Offset for fixed header + const yOffset = 0; // Offset for fixed header const y = element.getBoundingClientRect().top + window.pageYOffset + yOffset; - window.scrollTo({ top: y, behavior: 'smooth' }); - } else { - window.open(e.target.href, "_blank"); + } + else { + window.open(e.target.href, "_self"); } } }); + + // convert relative blog links to absolute links + document.querySelectorAll("a").forEach((a) => { + const dotSepList = a.getAttribute("href").split("."); + if (dotSepList[0] == "") { + const hashSepList = dotSepList[dotSepList.length - 1].split("#") + if (hashSepList[0] == "md") { + let str = `/blog${dotSepList[1]}`; + for (let i = 2; i < dotSepList.length; i++) { + if (dotSepList[i].substring(0, 2) != "md") { + str += "." + dotSepList[i]; + } else break; + } + if (hashSepList[1]) { + str += "#" + hashSepList[1]; + } + a.setAttribute("href", str); + } + } + }); + + const url = window.location.href; + const hash = url.split("#")[1]; + if (hash) { + console.log("entered") + const element = document.getElementById(hash); + const yOffset = 0; // Offset for fixed header + const y = element.getBoundingClientRect().top + window.pageYOffset + yOffset; + + window.scrollTo({ + top: y, + behavior: 'smooth' + }); + } diff --git a/blog/20220404-simplex-chat-instant-notifications/index.html b/blog/20220404-simplex-chat-instant-notifications/index.html index 77e6666fe4..c98188dc3c 100644 --- a/blog/20220404-simplex-chat-instant-notifications/index.html +++ b/blog/20220404-simplex-chat-instant-notifications/index.html @@ -37,7 +37,7 @@

    Instant notifications for SimpleX Chat mobile apps

    Published: April 04, 2022

    SimpleX Chat is the first chat platform that is 100% private by design - it has no access to your connections

    -

    Since we released SimpleX Chat mobile apps couple of weeks ago we've had a lot of excitement from our users - nearly 2000 people downloaded the app after the announcement!

    +

    Since we released SimpleX Chat mobile apps couple of weeks ago we've had a lot of excitement from our users - nearly 2000 people downloaded the app after the announcement!

    Huge thanks to everybody who downloaded and connected to us via the chat - there were many great questions and suggestions, and on some days I spent most of the time chatting to our users :)

    Since we released the app, we've added and released:

    @@ -80,22 +80,55 @@ window.addEventListener("click", (e) => { if (e.target.tagName === "A") { e.preventDefault(); - - if (e.target.href.split("#")[1]) { - const id = e.target.href.split("#")[1]; + if (e.target.getAttribute("href").split("#")[0] == "") { + const id = e.target.getAttribute("href").split("#")[1]; const element = document.getElementById(id); - const yOffset = -80; // Offset for fixed header + const yOffset = 0; // Offset for fixed header const y = element.getBoundingClientRect().top + window.pageYOffset + yOffset; - window.scrollTo({ top: y, behavior: 'smooth' }); - } else { - window.open(e.target.href, "_blank"); + } + else { + window.open(e.target.href, "_self"); } } }); + + // convert relative blog links to absolute links + document.querySelectorAll("a").forEach((a) => { + const dotSepList = a.getAttribute("href").split("."); + if (dotSepList[0] == "") { + const hashSepList = dotSepList[dotSepList.length - 1].split("#") + if (hashSepList[0] == "md") { + let str = `/blog${dotSepList[1]}`; + for (let i = 2; i < dotSepList.length; i++) { + if (dotSepList[i].substring(0, 2) != "md") { + str += "." + dotSepList[i]; + } else break; + } + if (hashSepList[1]) { + str += "#" + hashSepList[1]; + } + a.setAttribute("href", str); + } + } + }); + + const url = window.location.href; + const hash = url.split("#")[1]; + if (hash) { + console.log("entered") + const element = document.getElementById(hash); + const yOffset = 0; // Offset for fixed header + const y = element.getBoundingClientRect().top + window.pageYOffset + yOffset; + + window.scrollTo({ + top: y, + behavior: 'smooth' + }); + } diff --git a/blog/20220604-simplex-chat-new-privacy-security-settings/index.html b/blog/20220604-simplex-chat-new-privacy-security-settings/index.html index c8b8aa2f6e..a7741cbfa0 100644 --- a/blog/20220604-simplex-chat-new-privacy-security-settings/index.html +++ b/blog/20220604-simplex-chat-new-privacy-security-settings/index.html @@ -36,7 +36,7 @@

    SimpleX Chat v2.2 - the first messaging platform without user identities - 100% private by design!

    Published: June 4, 2022

    -

    See v2 announcement for more information about SimpleX platform and how it protects your privacy by avoiding user identities of any kind in its design - SimpleX, unlike any other messaging platfom, has no identity keys or any numbers that identify its users.

    +

    See v2 announcement for more information about SimpleX platform and how it protects your privacy by avoiding user identities of any kind in its design - SimpleX, unlike any other messaging platform, has no identity keys or any numbers that identify its users.

    New Privacy and Security settings in version 2.2

    Protect your chats

    @@ -59,7 +59,7 @@

    There is more

    You can discover additional features we are currently testing in Experimental Features - they will be announced later!

    More information

    -

    See v1 announcement for information on how SimpleX protects the security of the messages.

    +

    See v1 announcement for information on how SimpleX protects the security of the messages.

    Read about SimpleX design in whitepaper.

    @@ -98,22 +98,55 @@ window.addEventListener("click", (e) => { if (e.target.tagName === "A") { e.preventDefault(); - - if (e.target.href.split("#")[1]) { - const id = e.target.href.split("#")[1]; + if (e.target.getAttribute("href").split("#")[0] == "") { + const id = e.target.getAttribute("href").split("#")[1]; const element = document.getElementById(id); - const yOffset = -80; // Offset for fixed header + const yOffset = 0; // Offset for fixed header const y = element.getBoundingClientRect().top + window.pageYOffset + yOffset; - window.scrollTo({ top: y, behavior: 'smooth' }); - } else { - window.open(e.target.href, "_blank"); + } + else { + window.open(e.target.href, "_self"); } } }); + + // convert relative blog links to absolute links + document.querySelectorAll("a").forEach((a) => { + const dotSepList = a.getAttribute("href").split("."); + if (dotSepList[0] == "") { + const hashSepList = dotSepList[dotSepList.length - 1].split("#") + if (hashSepList[0] == "md") { + let str = `/blog${dotSepList[1]}`; + for (let i = 2; i < dotSepList.length; i++) { + if (dotSepList[i].substring(0, 2) != "md") { + str += "." + dotSepList[i]; + } else break; + } + if (hashSepList[1]) { + str += "#" + hashSepList[1]; + } + a.setAttribute("href", str); + } + } + }); + + const url = window.location.href; + const hash = url.split("#")[1]; + if (hash) { + console.log("entered") + const element = document.getElementById(hash); + const yOffset = 0; // Offset for fixed header + const y = element.getBoundingClientRect().top + window.pageYOffset + yOffset; + + window.scrollTo({ + top: y, + behavior: 'smooth' + }); + } diff --git a/blog/20220711-simplex-chat-v3-released-ios-notifications-audio-video-calls-database-export-import-protocol-improvements/index.html b/blog/20220711-simplex-chat-v3-released-ios-notifications-audio-video-calls-database-export-import-protocol-improvements/index.html index 93d3c0c61c..ff57aee277 100644 --- a/blog/20220711-simplex-chat-v3-released-ios-notifications-audio-video-calls-database-export-import-protocol-improvements/index.html +++ b/blog/20220711-simplex-chat-v3-released-ios-notifications-audio-video-calls-database-export-import-protocol-improvements/index.html @@ -43,7 +43,7 @@
  • protocol privacy and performance improvements
  • Instant notifications for iOS

    -

    I wrote previously about our design for iOS notifications - this is now released. The app will offer to migrate the database when updated, and then you need to choose notifications mode – instant or periodic push notifications, or previously available periodic background refresh that does not use push notifications.

    +

    I wrote previously about our design for iOS notifications - this is now released. The app will offer to migrate the database when updated, and then you need to choose notifications mode – instant or periodic push notifications, or previously available periodic background refresh that does not use push notifications.

    To deliver the notifications to iOS devices we use our notification server, as there is a single private key that Apple issues for the app. This server has minimal amount of information about your chat activity: