let lCursorUrl = localStorage.getItem("lcursor_url"); const lCursorStyleTag = document.createElement('style'); document.head.appendChild(lCursorStyleTag); window.setLCursor = (url) => { localStorage.setItem("lcursor_url", url); lCursorUrl = localStorage.getItem("lcursor_url"); lCursorStyleTag.innerHTML = `:root { cursor: url(${lCursorUrl}), auto }`; } if (lCursorUrl) { lCursorStyleTag.innerHTML = `:root { cursor: url(${lCursorUrl}), auto }`; } // // kcursor - kallistero's melo-tech link-fed custom cursors! // // This script allows you to select a custom cursor just by adding an image link to a "kcursor" url parameter! // // example link to test the script: // // https://everyone.melonland.net/kallistero?kcursor=https://kallistero.neocities.org/things/i/use/images/ghost.gif // // ^ click the star from there to see the magic carry over to the Everyone site homepage! // // external handle, for re-running the cursor-setting function if needed // let refreshKCursor = function(){}; // // also, any links with the class "kcursor-removal-link" will turn into links that remove the cursor image // { // let kCursorStyleTag; // const setCursor = (event) => { // let cursorLink; // try { // cursorLink = encodeURI(new URLSearchParams(window.location.search).get('kcursor')); // } catch (e) { // console.warn(e); // return; // } // if(cursorLink && cursorLink !== 'null') { // if(kCursorStyleTag === undefined) { // kCursorStyleTag = document.createElement('style'); // kCursorStyleTag.id = `kcursor-${Date.now()}`; // document.head.appendChild(kCursorStyleTag); // } // kCursorStyleTag.innerHTML = `:root { cursor: url(${cursorLink}), auto }`; // try { // pageLinkHref = new URL(pageLink.href); // } catch (typeError) { // // adds no params to links that are invalid // continue; // } // const pageLinkParams = pageLinkHref.searchParams; // if(pageLinkHref.href.startsWith('javascript:') || pageLinkHref.href.startsWith('https://forum.melonland.net/pad.php')) { // // adds no params to javascript links or community pad links // continue; // } // let newHref = pageLinkHref.origin + pageLinkHref.pathname + '?'; // let hasKCursorParam = false; // for(const [paramName, paramValue] of pageLinkParams) { // if(paramName === 'kcursor') { // hasKCursorParam = true; // newHref += `${paramName}=${cursorLink}`; // } else { // newHref += `${paramName}=${paramValue}`; // } // newHref += '&'; // } // if(hasKCursorParam) { // newHref = newHref.slice(0, -1); // } else { // newHref += 'kcursor=' + cursorLink; // } // newHref += pageLinkHref.hash; // pageLink.href = newHref; // } // } // }; // window.addEventListener('DOMContentLoaded', setCursor); // refreshKCursor = setCursor; // };