diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-05 11:19:16 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-05 12:07:37 +0000 |
commit | b485aab7e71c1625cfc27e0f92c9509f42378458 (patch) | |
tree | ae9abe108601079d1679194de237c9a435ae5b55 /web/gui/ilove.html | |
parent | Adding upstream version 1.44.3. (diff) | |
download | netdata-b485aab7e71c1625cfc27e0f92c9509f42378458.tar.xz netdata-b485aab7e71c1625cfc27e0f92c9509f42378458.zip |
Adding upstream version 1.45.3+dfsg.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'web/gui/ilove.html')
-rw-r--r-- | web/gui/ilove.html | 302 |
1 files changed, 0 insertions, 302 deletions
diff --git a/web/gui/ilove.html b/web/gui/ilove.html deleted file mode 100644 index f82b1cfd3..000000000 --- a/web/gui/ilove.html +++ /dev/null @@ -1,302 +0,0 @@ -<!DOCTYPE html> -<!-- SPDX-License-Identifier: GPL-3.0-or-later --> -<html lang="en"> -<head> - <meta charset="UTF-8"> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <title>I Love SVG</title> - <style> - * { - margin: 0; - padding: 0; - box-sizing: border-box; - } - - body { - background-color: gray; - font-family: 'Arial', sans-serif; - display: flex; - flex-direction: column; - height: 100vh; - padding: 20px; - } - - .svg-container { - display: flex; - flex-wrap: wrap; - gap: 10px; - margin-bottom: 20px; - } - - .svg-container img { - height: 75px; - cursor: pointer; - } - - .input-wrapper { - display: flex; - align-items: center; - justify-content: center; /* Centers the items horizontally */ - flex-wrap: wrap; /* Allow the items to wrap if there isn't enough horizontal space */ - gap: 10px; /* Gap between the items */ - } - - .input-wrapper #labelInput { - font-family: 'IBM Plex Sans', sans-serif; - font-weight: bold; - font-size: 24px; - color: white; - background-color: gray; - border: none; - cursor: default; - padding: 10px 15px; - margin-right: 10px; - text-align: right; - width: 135px; - } - - .string-input input { - font-family: 'IBM Plex Sans', sans-serif; - font-weight: bold; - font-size: 24px; - background-color: black; - color: white; - border: none; - border-radius: 8px; - padding: 10px 15px; - width: 100%; - box-shadow: 0px 0px 8px rgba(0, 0, 0, 0.2); - outline: none; - } - - .string-input input:focus { - box-shadow: 0px 0px 12px rgba(0, 0, 0, 0.3); - } - - .big-svg-container { - flex: 1; - display: flex; - align-items: center; - justify-content: center; - overflow: hidden; - } - - .big-svg { - max-width: 100%; - max-height: 95%; - object-fit: contain; - } - - .input-wrapper button { - background-color: darkgray; - color: white; - border: none; - border-radius: 8px; - padding: 5px 10px; - margin-left: 10px; /* Space between buttons */ - cursor: pointer; - transition: background-color 0.3s; /* Smooth transition for hover effect */ - } - - .input-wrapper button:hover { - background-color: #555; /* Darker shade on hover */ - } - - /* Style for the dropdown */ - #resolutionSelect { - background-color: darkgray; /* Same as button background */ - color: white; /* Text color */ - border: none; /* Remove border */ - border-radius: 8px; /* Rounded corners, same as buttons */ - padding: 5px 10px; /* Some padding for aesthetics */ - margin-left: 10px; /* Space between dropdown and adjacent elements */ - font-family: "IBM Plex Sans", sans-serif; /* Font from SVG */ - font-weight: bold; /* Bold font */ - font-size: 16px; /* Font size consistent with text box */ - cursor: pointer; /* Hand cursor for better UX */ - appearance: none; /* Remove default styling on some browsers */ - -webkit-appearance: none; /* Remove default styling on WebKit browsers */ - -moz-appearance: none; /* Remove default styling on Firefox */ - - padding: 10px 20px; /* Increase padding for more height */ - line-height: 1.5; /* Increase line height for a taller dropdown */ - - /* Arrow for the dropdown */ - background: darkgray url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><path d="M31.3 192l121.5 121.5c4.7 4.7 12.3 4.7 17 0L291.3 192c4.7-4.7 4.7-12.3 0-17l-22.6-22.6c-4.7-4.7-12.3-4.7-17 0L160 273.9 68.3 152c-4.7-4.7-12.3-4.7-17 0L28.7 174.5c-4.7 4.7-4.7 12.3 0 17.1z" fill="white"/></svg>') no-repeat right 10px center; - padding-right: 40px; /* Add padding to prevent text from overlapping the arrow */ - } - - /* Hover effect for the dropdown, similar to buttons */ - #resolutionSelect:hover { - background-color: #555; /* Darker shade on hover */ - } - - /* Arrow for the dropdown (this is a bit of a hack, but it works for adding a custom arrow) */ - #resolutionSelect::-ms-expand { - display: none; /* Hide default arrow for IE/Edge */ - } - #resolutionSelect::after { - content: '\25BC'; /* Down arrow symbol */ - position: absolute; - top: 50%; - right: 10px; - transform: translateY(-50%); - pointer-events: none; /* Ensure dropdown still works when clicking arrow */ - } - </style> - <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css"> -</head> -<body> -<div class="svg-container"> - <!-- SVG examples will be loaded here --> -</div> - -<div class="input-wrapper"> - <input type="text" value="You Love" id="labelInput" readonly> - <div class="string-input"> - <input type="text" id="stringInput" placeholder="Enter your STRING here"> - </div> - <select id="resolutionSelect"> - <option value="360">360p</option> - <option value="720">720p</option> - <option value="1080">1080p</option> - <option value="4k">4k</option> - <option value="8k">8k</option> - </select> - <button id="copyUrl"><i class="fas fa-copy"></i><br/>URL</button> - <button id="downloadSvg"><i class="fas fa-download"></i><br/>SVG</button> - <button id="downloadPng"><i class="fas fa-image"></i><br/>PNG</button> - <button id="downloadWebp"><i class="fas fa-file-image"></i><br/>WEBP</button> -</div> - -<div class="big-svg-container"> - <img src="" alt="Big SVG Image" id="bigSvg" class="big-svg"> -</div> - -<script> - document.addEventListener('DOMContentLoaded', function() { - const examples = ["TROUBLE", "3AM", "BUGS", "ML", "AI", "CODE", "DEV", "DevOps", "Observability", "Telemetry", "Dashboards", "Automation", "K8s", "Docker", "PostgreSQL", "NightShifts", "OnCall", "Linux", "Debian", "Ubuntu", "Arch", "Manjaro", "CentOS", "AWS"]; - const svgContainer = document.querySelector('.svg-container'); - const bigSvg = document.getElementById('bigSvg'); - const stringInput = document.getElementById('stringInput'); - - // Calculate the API endpoint - const currentUrl = new URL(window.location.href); - const apiEndpoint = `${currentUrl.origin}${currentUrl.pathname.replace('ilove.html', '')}api/v2/ilove.svg?love=`; - - // Load examples - examples.forEach(example => { - const img = document.createElement('img'); - img.src = `${apiEndpoint}${example}`; - img.addEventListener('click', function() { - stringInput.value = example; - updateBigSvg(); - }); - svgContainer.appendChild(img); - }); - - // Set the default value of the text box to the first word from the examples - stringInput.value = examples[0]; - updateBigSvg(); - - // Update the big SVG when the input changes - stringInput.addEventListener('input', updateBigSvg); - - function updateBigSvg() { - const encodedValue = encodeURIComponent(stringInput.value); - bigSvg.src = `${apiEndpoint}${encodedValue}`; - } - - // Copy URL functionality - document.getElementById('copyUrl').addEventListener('click', function() { - const tempTextArea = document.createElement('textarea'); - tempTextArea.value = bigSvg.src; - document.body.appendChild(tempTextArea); - tempTextArea.select(); - document.execCommand('copy'); - document.body.removeChild(tempTextArea); - - // Update button icon and text temporarily - const btn = this; // 'this' refers to the clicked element (in this case, the 'copyUrl' button) - const originalIcon = btn.querySelector('i'); - const breakElement = btn.querySelector('br'); - - // Replace the icon and text - originalIcon.className = "fas fa-check"; // Change to checkmark icon - btn.textContent = ''; // Clear the button text - btn.appendChild(originalIcon); // Add the checkmark icon - btn.appendChild(breakElement); // Add the break element - btn.appendChild(document.createTextNode('Copied')); // Add the "Copied" text - - setTimeout(() => { - originalIcon.className = "fas fa-copy"; // Revert back to copy icon - btn.textContent = ''; // Clear the button text - btn.appendChild(originalIcon); // Add the copy icon - btn.appendChild(breakElement); // Add the break element - btn.appendChild(document.createTextNode('URL')); // Add the "URL" text - }, 2000); // Revert back after 2 seconds - }); - - // Download SVG - document.getElementById('downloadSvg').addEventListener('click', function() { - const filename = `I love ${stringInput.value}.svg`; - triggerDownload(bigSvg.src, filename); - }); - - // Download PNG - document.getElementById('downloadPng').addEventListener('click', function() { - convertSvgToImage('png'); - }); - - // Download WEBP - document.getElementById('downloadWebp').addEventListener('click', function() { - convertSvgToImage('webp'); - }); - - function convertSvgToImage(format) { - const image = new Image(); - image.src = bigSvg.src; - image.onload = function() { - const resolution = getResolutionDimensions(); - - // Calculate the scaling factor based on the resolution width - const scaleFactor = resolution.width / image.width; - - // Set canvas dimensions based on SVG's aspect ratio - const canvas = document.createElement('canvas'); - canvas.width = image.width * scaleFactor; - canvas.height = image.height * scaleFactor; - - const ctx = canvas.getContext('2d'); - ctx.drawImage(image, 0, 0, canvas.width, canvas.height); - - const filename = `I love ${stringInput.value}.${format}`; - triggerDownload(canvas.toDataURL(`image/${format}`), filename); - }; - } - - function getResolutionDimensions() { - const resolution = document.getElementById('resolutionSelect').value; - switch(resolution) { - case "360": return { width: 640, height: 360 }; - case "720": return { width: 1280, height: 720 }; - case "1080": return { width: 1920, height: 1080 }; - case "4k": return { width: 3840, height: 2160 }; - case "8k": return { width: 7680, height: 4320 }; - default: return { width: 640, height: 360 }; // Default to 360p - } - } - - function triggerDownload(url, filename) { - const downloadLink = document.createElement('a'); - downloadLink.href = url; - downloadLink.download = filename; - document.body.appendChild(downloadLink); - downloadLink.click(); - document.body.removeChild(downloadLink); - } - - }); -</script> -</body> -</html> |