From 1674bcaaebce22d17236fed72b4ee8a5d43bd4ab Mon Sep 17 00:00:00 2001 From: Jakob Schnitzer Date: Sat, 17 Dec 2022 09:29:11 +0100 Subject: [PATCH] ./webpack: use vanilla js instead of jquery --- webpack/js/app.js | 82 ++++++++++++++++++++++----------------- webpack/webpack.config.js | 1 - 2 files changed, 46 insertions(+), 37 deletions(-) diff --git a/webpack/js/app.js b/webpack/js/app.js index 14d6e31c..796e652b 100644 --- a/webpack/js/app.js +++ b/webpack/js/app.js @@ -1,53 +1,59 @@ // @ts-check -require("bootstrap"); +import "bootstrap"; function initDownloadButton() { - const buttons = $(".download-btn"); - if (buttons.length <= 0) { - return; + const downloadButton = document.querySelector(".download-btn"); + if (downloadButton) { + fetch("https://api.github.com/repos/lektor/lektor/releases", { + method: "GET", + }) + .then((res) => res.json()) + .then((releases) => { + const tag = releases[0].tag_name; + const link = downloadButton.querySelector("a"); + if (link) { + const span = document.createElement("span"); + span.className = "version"; + span.innerText = tag; + link.append(span); + } + }) + .catch((err) => { + console.error( + "fetching the latest Lektor version from the Github API failed: ", + err + ); + }); } - - $.ajax({ - method: "GET", - url: "https://api.github.com/repos/lektor/lektor/releases", - crossDomain: true, - }).then((releases) => { - updateDownloadButtons(buttons.toArray(), releases); - }); -} - -function updateDownloadButtons(buttons, releases) { - let tag = releases[0].tag_name; - - buttons.forEach((button) => { - let link = $("a", button); - - link.attr("href", "/downloads/"); - link.append($('').text(tag)); - }); } function initGoogleSearch() { - var container = $(".google-custom-search"); - if (container.length == 0) { + const container = document.querySelector(".google-custom-search"); + if (!container) { return; } - var cx = "012722186170730423054:utwznhnrrmi"; - var gcse = document.createElement("script"); + const cx = "012722186170730423054:utwznhnrrmi"; + const gcse = document.createElement("script"); gcse.type = "text/javascript"; gcse.async = true; gcse.src = (document.location.protocol == "https:" ? "https:" : "http:") + "//cse.google.com/cse.js?cx=" + cx; - var s = document.getElementsByTagName("script")[0]; - s.parentNode.insertBefore(gcse, s); + const firstScript = document.getElementsByTagName("script")[0]; + if (!firstScript || !firstScript.parentNode) { + return; + } + firstScript.parentNode.insertBefore(gcse, firstScript); - $(` - - `).appendTo(container); - $(` + container.insertAdjacentHTML( + "beforeend", + `` + ); + container.insertAdjacentHTML( + "beforeend", + `
- `).appendTo(container); + ` + ); const params = new URLSearchParams(location.search); const query = params.get("q"); if (query) { - $('input[name="q"]', container).val(query); + const input = container.querySelector('input[name="q"]'); + if (input instanceof HTMLInputElement) { + input.value = query; + } } } -$(function () { +window.addEventListener("DOMContentLoaded", () => { initDownloadButton(); initGoogleSearch(); }); diff --git a/webpack/webpack.config.js b/webpack/webpack.config.js index cc940541..cb4e4b0f 100644 --- a/webpack/webpack.config.js +++ b/webpack/webpack.config.js @@ -43,7 +43,6 @@ const options = { }, plugins: [ new webpack.ProvidePlugin({ - $: "jquery", jQuery: "jquery", }), new MiniCssExtractPlugin(),