// Created by Samuel Lord (NodeMixaholic/Sparksammy) // Licensed under Samuel Public License with <3 // Functions for commonly used elements //Convert markdown to HTML and back function markdownToHTML(markdown) { // Replace headers (h1, h2, h3) with corresponding HTML tags markdown = markdown.replace(/^# (.*$)/gim, '
tag
markdown = markdown.replace(/`(.*?)`/gim, '$1
');
// Replace blockquotes with HTML tag
markdown = markdown.replace(/^\s*> (.*)$/gim, '$1
');
// Replace horizontal rules with HTML
tag
markdown = markdown.replace(/^\s*[-*_]{3,}\s*$/gim, '
');
// Replace line breaks with HTML
tag
markdown = markdown.replace(/\n$/gim, '
');
// Replace images with HTML tag
markdown = markdown.replace(/!\[(.*?)\]\((.*?)\)/gim, '');
// Replace links with HTML tag
markdown = markdown.replace(/\[(.*?)\]\((.*?)\)/gim, '$1');
markdown = markdown.replaceAll("", "")
return markdown;
}
function htmlToMarkdown(html) {
// Replace headers (h1, h2, h3) with corresponding Markdown tags
html = html.replace(/(.*?)<\/h1>/gim, '# $1');
html = html.replace(/(.*?)<\/h2>/gim, '## $1');
html = html.replace(/(.*?)<\/h3>/gim, '### $1');
// Replace bold and italic text with corresponding Markdown tags
html = html.replace(/(.*?)<\/b>/gim, '**$1**');
html = html.replace(/(.*?)<\/i>/gim, '*$1*');
// Replace unordered list items with Markdown list tags
html = html.replace(/(.*?)<\/ul>/gim, function(match, p1) {
let listItems = p1.trim().split('
(.*?)<\/code>/gim, '`$1`');
// Replace blockquotes with Markdown blockquote tag
html = html.replace(/(.*?)<\/blockquote>/gim, '> $1');
// Replace horizontal rules with Markdown horizontal rules
html = html.replace(/
/gim, '---');
// Replace line breaks with Markdown line breaks
html = html.replace(/
/gim, '\n');
// Replace images with Markdown image syntax
html = html.replace(//gim, '![$1]($2)');
// Replace links with Markdown link syntax
html = html.replace(/(.*?)<\/a>/gim, '[$2]($1)');
html = html.replaceAll("", "")
html = html.replaceAll("
", "")
return html;
}
// Generalized element creation
function createElement(tagName, elementID, attributes = {}) {
const element = document.createElement(tagName);
element.id = elementID;
for (const [name, value] of Object.entries(attributes)) {
element.setAttribute(name, value);
}
document.body.appendChild(element);
return element;
}
function createDiv(elementID) {
createElement("div", elementID);
}
function createParagraph(elementID, text) {
let elem = createElement("p", elementID);
elem.innerText = `${text}`
return elem
}
function createButton(elementID, text, attributes = {}) {
let elem = createElement("button", elementID);
elem.innerText = `${text}`
for (const [name, value] of Object.entries(attributes)) {
elem.setAttribute(name, value);
}
return elem;
}
function changeAttributes(elem, attributes = {}) {
for (const [name, value] of Object.entries(attributes)) {
elem.setAttribute(name, value);
}
}
function createImage(elementID, src) {
return createElement("img", elementID, { src: src });
}
// Get URL parameters
function getURLParameters() {
return new URLSearchParams(window.location.search);
}
// Read file contents
function readFileContents(file) {
file = file.toString();
const fileToRead = new File([""], file);
const reader = new FileReader();
return new Promise((resolve, reject) => {
reader.onload = () => resolve(reader.result);
reader.onerror = () => reject(reader.error);
reader.readAsText(fileToRead, "UTF-8");
});
}
// Read data file as data URL
function readDataFile(file) {
file = file.toString();
const fileToRead = new File([""], file);
const reader = new FileReader();
return new Promise((resolve, reject) => {
reader.onload = () => resolve(reader.result);
reader.onerror = () => reject(reader.error);
reader.readAsDataURL(fileToRead);
});
}
function writeToBody(html) {
document.body.innerHTML += html.toString();
}
function overwriteBody(html) {
document.body.innerHTML = html.toString();
}
function randomPOS(elementID) {
const top = Math.floor(Math.random() * 90);
const left = Math.floor(Math.random() * 90);
document.getElementById(elementID).style.top = `${top}%`;
document.getElementById(elementID).style.left = `${left}%`;
}
function pos(elementID, x, y) {
document.getElementById(elementID).style.top = `${y}%`;
document.getElementById(elementID).style.left = `${x}%`;
}
// Select a random value in an array (handles non-arrays)
function randomSelectArray(array) {
if (Array.isArray(array)) {
const randomIndex = Math.floor(Math.random() * array.length);
return array[randomIndex];
} else {
console.log(`Error: ${array} is not an Array!`);
return null; // Or throw an error
}
}
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
async function asyncSleep(ms) {
await new Promise(r => setTimeout(r, ms));
}
// Check if a variable is a function
function isFunction(item) {
return typeof item === 'function';
}
function applyCSS(elementID, prop, value) {
document.getElementById(elementID).style[prop] = value;
}
function writeTimeAndDate(elementID, hourFormat) {
const element = document.getElementById(elementID);
const date = new Date();
const locale = hourFormat === 24 ? "en-GB" : "en-US";
element.innerText = date.toLocaleString(locale);
}
function writeText(elementID, str) {
document.getElementById(elementID).innerText = String(str);
}
function writeHTML(elementID, str) {
document.getElementById(elementID).innerHTML = String(str);
}
function clearPage() {
document.body.innerHTML = "";
}
function createList(listID, items) {
const list = document.createElement("ul");
list.id = listID;
document.body.appendChild(list);
items.forEach(item => (list.innerHTML += `${item} `));
}
function addToList(listID, jsArray) {
let listParent = document.getElementById(listID);
jsArray.forEach(item => {
listParent.innerHTML += `${item} `;
});
}
// Gets the value of an attribute
// Example: getAttribute(document.getElementById("link"), "href");
function getAttribute(el, att) {
let result = el.getAttribute(att);
return result;
}
// Show/Hide Elements
// Example: hideShow(el)
function hideShow(el) {
if (el.style.display == 'none') {
el.style.display = '';
} else{
el.style.display = 'none';
}
}
// Example: fadeOut(el, 1000)
function fadeOut(el, ms) {
let elem = getElementById(el);
ms = parseInt(ms);
for (i = 0; i < (ms + 1); i++) {
elem.style.opacity -= (i / 100);
sleep(1);
}
}
// Example: fadeIn(el, 1000);
function fadeIn(el, ms) {
elem = getElementById(el);
elem.style.opacity = 0;
ms = parseInt(ms);
for (i = 0; i < (ms + 1); i++) {
elem.style.opacity += (i / 100);
sleep(1);
}
}
function spin(el, ms){
elem = getElementById(el);
for (i = 0; i < (ms / 361); i++) {
elem.style.transform = 'rotate(' + i + 'deg)';
}
}
//Eval alternative
//Example: exec("alert('Hello, world!')")
function exec(jsCode) {
let js = jsCode.toString();
Function(js)()
}
function readInternetText(url) {
let xhttp = new XMLHttpRequest();
let response = ""
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
response = this.responseText
}
};
xhttp.open("GET", `${url}`, true);
xhttp.send();
return response
}
function readInternetText(url) {
var request = new XMLHttpRequest(); // Create a new XMLHttpRequest object
request.open('GET', url, false); // Open the request with synchronous mode
request.send(null); // Send the request with no additional data
if (request.status === 200) { // Check if the request was successful
return request.responseText; // Return the response text
} else {
return 'Error: ' + request.status; // Return an error message if the request failed
}
}
function requir3(jsURL) {
let req = readInternetText(jsURL);
console.log(req)
exec(req);
}
// Example: getFileSize(path/to/file)
function getFileSize(file) {
file = file.toString();
file = new File([""], file);
return file.getFileSize;
}
function lastModified(file) {
file = file.toString();
file = new File([""], file);
return file.lastModified;
}
// Example: playAudio("https://interactive-examples.mdn.mozilla.net/media/cc0-audio/t-rex-roar.mp3", 0.4);
function playAudio(audio, speed) {
let ma = new Audio(audio);
ma.playbackRate = speed;
ma.play();
}
// Example: redir(url);
function redir(url) {
window.location.href = url.toString();
}
requir3("https://cdn.jsdelivr.net/npm/gun/gun.js") //Add Gun.JS support.
function initGun(relays = []) {
return Gun(relays)
}