815 lines
24 KiB
HTML
815 lines
24 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
|
|
<meta charset="UTF-8">
|
|
<title>Irvirty - Home page and projects</title>
|
|
|
|
<meta name="description" content="A home and start page with projects such as typing speed, to-do list, games, new tab extension, tech news, microblog, icons, themes, website templates, etc.">
|
|
<meta name="keywords" content="website, homepage, home, page,
|
|
WebDesign, web, design, project, projects, portfolio, programming, inspiration,
|
|
Geany, Firefox, Chrome, WordPress, theme, themes, extension,
|
|
WebDev, HTML, CSS, JavaScript,
|
|
todo, typing, game, icons, templates, redirect,
|
|
tech, news, technology, search, redirect, microblog, links, images, photos,
|
|
newtab, new, tab, startpage, start, page, main,
|
|
ignoreme,">
|
|
|
|
<link rel="alternate" type="application/rss+xml" title="Website RSS" href="/rss.xml">
|
|
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
|
|
<meta name="color-scheme" content="light dark">
|
|
<!--<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">-->
|
|
|
|
<link rel="icon" sizes="512x512" href="/img/logo.png" type="image/png">
|
|
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
|
|
|
|
|
|
<!-- main -->
|
|
<link rel="preload" href="/js/main.js" as="script">
|
|
|
|
<link rel="preload" href="/css/main.css" as="style">
|
|
<link rel="stylesheet" href="/css/main.css" type="text/css">
|
|
<link rel="preload" href="/css/auto.css" as="style">
|
|
<link rel="stylesheet" type="text/css" href="/css/auto.css" id="theme">
|
|
|
|
<link rel="preload" href="/css/style.css" as="style">
|
|
<link rel="stylesheet" href="/css/style.css" type="text/css">
|
|
|
|
<noscript>
|
|
<link rel="stylesheet" type="text/css" href="/css/noscript.css">
|
|
</noscript>
|
|
<!-- // main -->
|
|
|
|
|
|
<!--<link rel="manifest" href="manifest.webmanifest">-->
|
|
|
|
<style>
|
|
#topHeader { position: relative; }
|
|
|
|
.siteName {
|
|
position: relative;
|
|
text-transform: uppercase;
|
|
transform: rotate(-15deg);
|
|
|
|
display: inline-block;
|
|
color: var(--cRand2);
|
|
|
|
background: var(--bg);
|
|
border-top: 2px dashed color-mix(in srgb, var(--brand) 50%, transparent);
|
|
padding-top: 2px;
|
|
top: -30px;
|
|
|
|
width: 100%;
|
|
max-width: 180px;
|
|
}
|
|
|
|
.siteName::after {
|
|
content: "Home Page";
|
|
text-transform: none;
|
|
|
|
font-size: small;
|
|
display: inline-block;
|
|
|
|
position: absolute;
|
|
background: var(--bg);
|
|
width: 100%;
|
|
height: 50%;
|
|
text-align: center;
|
|
left: 0;
|
|
bottom: 0;
|
|
|
|
color: var(--cRand);
|
|
}
|
|
|
|
.siteNameWrapper { margin-bottom: -30px; }
|
|
|
|
@media (prefers-reduced-motion: no-preference) {
|
|
.siteName {
|
|
animation: mOpacity 1s 0s;
|
|
}
|
|
@keyframes mOpacity {
|
|
from { opacity: 0; }
|
|
to { opacity: 1; }
|
|
}
|
|
}
|
|
|
|
.headerBannerImg img,
|
|
.headerBannerImg svg {
|
|
display: block;
|
|
width: auto;
|
|
max-height: 120px;
|
|
margin: 0 auto;
|
|
margin-bottom: -30px;
|
|
position: relative;
|
|
|
|
z-index: -2;
|
|
/*border-bottom: 2px dashed var(--cRand2);*/
|
|
}
|
|
|
|
.headerBannerImg svg,
|
|
.headerBannerImg img {
|
|
opacity: .9;
|
|
}
|
|
|
|
|
|
@media(max-width: 200px) {
|
|
.siteName, .siteName::after {
|
|
transform: rotate(0deg);
|
|
}
|
|
}
|
|
|
|
</style>
|
|
|
|
</head>
|
|
<body>
|
|
|
|
|
|
|
|
<!-- Navigation HTML v.1.0.1 -->
|
|
<header>
|
|
<div class="wrapper3">
|
|
<div class="margin"></div>
|
|
|
|
<div id="topNav" class="topNav">
|
|
<nav>
|
|
|
|
<span class="countMenuItem"></span>
|
|
<a class="countMenuItem inlineBlock padding" style="padding-left: 0;" href="/index.html" title="index / nav 1"><img class="logo2 reduceLight" src="/img/logo.png" alt="logo" style="max-width: 26px;"></a>
|
|
|
|
<span id="navMenu" class="navMenu">
|
|
<!-- links in nav -->
|
|
<a class="countMenuItem inlineBlock padding brand itemLinkAni" href="/pages/" title="Pages">Pages</a>
|
|
<a class="countMenuItem inlineBlock padding brand itemLinkAni" href="/projects/" title="Projects">Projects</a>
|
|
<a class="countMenuItem inlineBlock padding brand itemLinkAni" href="/mini-projects/" title="Mini Projects">Mini Projects</a>
|
|
<a class="countMenuItem inlineBlock padding brand itemLinkAni" href="/games/" title="Games">Games</a>
|
|
<a class="countMenuItem inlineBlock padding brand itemLinkAni" href="/archive.html" title="Archive">Archive</a>
|
|
<!-- // links in nav -->
|
|
</span>
|
|
|
|
<div class="dropdownMenuContentWrapper">
|
|
<div class="dropdownMenuContent">
|
|
|
|
<a id="dropdownMenuButton" class="dropdownMenuButton inlineBlock padding mClassNavUp brand borderBottomTransparent itemLinkAni" href="#" onclick="fuMDropdownButton();return false;">☰ Menu</a>
|
|
|
|
<div id="dropdownMenu" class="dropdownMenu">
|
|
<div class="dropdownMenuColumn shadow bg2 padding2 borderRadius2">
|
|
<!-- links for show in dropdown (duplicate) -->
|
|
<a class="countMenuItem inlineBlock padding brand itemLinkAni" href="/pages/" title="Pages">Pages</a>
|
|
<a class="countMenuItem inlineBlock padding brand itemLinkAni" href="/projects/" title="Projects">Projects</a>
|
|
<a class="countMenuItem inlineBlock padding brand itemLinkAni" href="/mini-projects/" title="Mini Projects">Mini Projects</a>
|
|
<a class="countMenuItem inlineBlock padding brand itemLinkAni" href="/games/" title="Games">Games</a>
|
|
<a class="countMenuItem inlineBlock padding brand itemLinkAni" href="/archive.html" title="Archive">Archive</a>
|
|
<!-- // links for show in dropdown (duplicate) -->
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
|
|
<span class="countMenuItem"></span>
|
|
<a class="countMenuItem inlineBlock padding mClassNavUp brand borderBottomTransparent itemLinkAni" href="../" title="../ (Up)">List (up)</a>
|
|
|
|
<span class="countMenuItem"></span>
|
|
<form class="countMenuItem noscriptHide inlineBlock padding" style="padding-right: 0;" method="GET" action="/pages/site-search.html" role="search">
|
|
<!--<label for="siteSearch" class="xSmall op">search:</label>-->
|
|
<input id="siteSearch" type="search" placeholder="site search" name="q" autocomplete="off">
|
|
</form>
|
|
|
|
</nav>
|
|
</div>
|
|
|
|
</div>
|
|
</header>
|
|
<!-- // Navigation HTML -->
|
|
|
|
<!--<hr>-->
|
|
|
|
|
|
|
|
<!-- content -->
|
|
<main class="content">
|
|
|
|
|
|
|
|
<div class="wrapper">
|
|
|
|
<header id="topHeader" class="block padding1PxList tCenter" style="position: relative;">
|
|
|
|
<div class="headerBannerImg reduceLight2">
|
|
<img src="/img/header-banner.png" alt="header banner">
|
|
</div>
|
|
|
|
<a href="/img/logo.png"><img class="logo reduceLight" src="/img/logo.png" width="60" alt="logo"></a>
|
|
|
|
<div class="padding2List"></div>
|
|
|
|
<div class="siteNameWrapper">
|
|
<h1 class="zero siteName op">Irvirty</h1>
|
|
</div>
|
|
<div class="tRight">
|
|
|
|
<details class="small" style="position: relative; z-index: 5;">
|
|
<summary class="op wrapperSmall3 pointer">
|
|
<span class="xSmall">Site update: <span class="brand" id="last-update"></span></span>
|
|
</summary>
|
|
<div class="wrapperSmall small inlineBlock padding2 pre bg shadow borderRadius2 tLeft">
|
|
Updated red color in color themes (dark). The color became lighter.
|
|
|
|
<a class="brand block tag2 small tCenter border2 light borderRadius2" href="/pages/updates.html" title="Update Log">more</a></div>
|
|
</details>
|
|
|
|
</div>
|
|
|
|
<div class="listItem op wrapperSmall3 inlineBlock pre marginList borderRadius2 tLeft small"><span class="xSmall">Status: </span><span class="small"><span class="ico zero medium">❄️</span> Winter.</span></div>
|
|
|
|
<div id="hotLinksTop" class="scrollX tCenter small noscriptHide paddingList">
|
|
<span id="urlDayNow"></span>
|
|
|
|
<a class="brand inline padding op small" href="/pages/search.html?q=n2" title="News (random)">News</a>
|
|
<a class="brand inline padding op small" href="/pages/search.html?q=cul" title="Other news (random)">Other</a>
|
|
<a class="brand inline padding op small" href="/pages/search.html?q=spo" title="Sports news (random)">Sports</a>
|
|
<a class="brand inline padding op small" href="/pages/search.html?q=sci" title="Science news (random)">Sci</a>
|
|
<a class="brand inline padding op small" href="/pages/search.html?q=tec" title="Technology news (random)">Tech</a>
|
|
<a class="brand inline padding op small" href="/pages/search.html?q=dev" title="Development (random)">Dev</a>
|
|
<!--<a class="brand inline padding op small" href="/pages/search.html?q=rs" title="Radnom site">Rs</a>-->
|
|
|
|
</div>
|
|
|
|
<div class="padding1PxList"></div>
|
|
|
|
</header>
|
|
|
|
|
|
|
|
<script>
|
|
// day link
|
|
var monthsEn = ['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
|
|
var dayEn = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
|
|
|
|
//https://stackoverflow.com/questions/50922593/function-getutcdate-returns-a-month
|
|
var dateObj = new Date();
|
|
var month = dateObj.getMonth() + 1; //months from 1-12
|
|
var day = dateObj.getDate();
|
|
var year = dateObj.getFullYear();
|
|
|
|
//https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getDay
|
|
let d = dateObj.getDay();
|
|
|
|
var dayNowTitle = day +' '+ dayEn[d];
|
|
|
|
var urlDayNow = 'https://en.wikipedia.org/wiki/' + monthsEn[month] + '_' + day + '';
|
|
//document.getElementById('urlDayNow').innerHTML = `<a class="brand tag op" href="` + urlDayNow + `" title="Wikipedia">` + dayNowTitle + `</a>`;
|
|
document.getElementById('urlDayNow').innerHTML = `<a class="brand tag op" href="https://wikipedia.org/wiki/" title="Wikipedia">` + dayNowTitle + `</a>`;
|
|
|
|
</script>
|
|
|
|
|
|
<div id="form" class="noscriptHide">
|
|
<form method="GET" style="margin-top: 0px;" action="/projects/redirects-25/index.html" autocomplete="off" role="search">
|
|
|
|
<label id="search" class="op block tLeft xSmall padding1PxList" for="q"><span class="bold orange">✪</span> Web search (redirect, random):</label>
|
|
<input id="q" aria-labelledby="search" type="search" name="q" autofocus="autofocus" placeholder="" autocomplete="off" spellcheck="true">
|
|
|
|
<div style="display: grid; grid-template-columns: 1fr 1fr; grid-gap: 2px;">
|
|
<input class="smaller op tCenter" type="submit" value="Search">
|
|
<!--https://stackoverflow.com/questions/4171664/html-submit-button-different-value-button-text#-->
|
|
<button class="smaller op tCenter" name="q2" value="l" type="submit">Luck</button>
|
|
<!--<input class="smaller op tCenter" type="submit" name="q2" value="l">-->
|
|
</div>
|
|
|
|
</form>
|
|
|
|
</div>
|
|
|
|
<script>
|
|
document.head.insertAdjacentHTML("beforeend", `
|
|
|
|
<style>
|
|
|
|
.hotLinks {
|
|
/*display: grid;
|
|
/*grid-template-columns: repeat(auto-fill, minmax(42px, 1fr));
|
|
grid-template-columns: repeat(auto-fill, minmax(52px, 1fr));
|
|
grid-gap: 1px;*/
|
|
/*margin: 0 auto;
|
|
justify-content: center;
|
|
align-items: center;*/
|
|
|
|
display: flex;
|
|
flex: 1 0 auto;
|
|
flex-wrap: wrap;
|
|
}
|
|
|
|
.hotLinks a {
|
|
display: inline-flex;
|
|
width: auto;
|
|
min-height: 30px;
|
|
justify-content: center;
|
|
align-content: center;
|
|
text-wrap: balance;
|
|
padding: .6em;
|
|
|
|
flex: 1 0 auto;
|
|
flex-wrap: wrap;
|
|
}
|
|
/*.hotLinks .tag { max-width: 100%; }*/
|
|
</style>
|
|
|
|
`);
|
|
|
|
</script>
|
|
|
|
<div class="center noscriptHide" style="margin-top: 7px;">
|
|
<div class="wrapper tCenter small"><!--if scrollX horizontal class rm tagList)-->
|
|
<div id="hotLinks">
|
|
|
|
<div class="tagList2 hotLinks ">
|
|
<!--<span class="x-small op c" title="Commands:">com: </span>-->
|
|
<!--<a class="tag light2 border3 borderRadius2 op" href="?q=nn" title="AI search random (text nn)">AI</a>-->
|
|
<a class="tag light2 border3 borderRadius2 op" href="?q=w" title="Web search random (text w)">Web</a>
|
|
<a class="tag light2 border3 borderRadius2 op" href="?q=o" title="Other random (text o)">Other</a>
|
|
<a class="tag light2 border3 borderRadius2 op" href="?q=n" title="News search random (text n)">News</a>
|
|
<a class="tag light2 border3 borderRadius2 op" href="?q=s" title="Social media search random (text s)">Social</a>
|
|
<a class="tag light2 border3 borderRadius2 op" href="?q=i" title="Image search random (text i)">Images</a>
|
|
<a class="tag light2 border3 borderRadius2 op" href="?q=v" title="Video search random (text v)">Videos</a>
|
|
<a class="tag light2 border3 borderRadius2 op" href="?q=t" title="Translate random (text t)">Translate</a>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- hint v.1.1.0 -->
|
|
<div id="hint" title="hint"></div>
|
|
|
|
<!--<script src="/data/linksJsonVar.js"></script>-->
|
|
<script>
|
|
/*
|
|
let dataHint = [];
|
|
dataHint = dataHint.concat(linksJsonVar);
|
|
if (localStorage.getItem("confSpeedDialData")) {
|
|
let confSpeedDialDataArr33 = JSON.parse(localStorage.getItem("confSpeedDialData"));
|
|
dataHint = dataHint.concat(confSpeedDialDataArr33);
|
|
}
|
|
|
|
document.getElementById("q").addEventListener('input', function(e) {
|
|
if ((this.value).trim() == ""){
|
|
document.getElementById("hint").innerHTML = ``;
|
|
} else {
|
|
hint(this.value, dataHint);
|
|
}
|
|
});
|
|
|
|
function hint(q, data){
|
|
|
|
q = q.trim();
|
|
|
|
|
|
|
|
if (q != ""){
|
|
let qLower = q.toLowerCase();
|
|
let hintResult = "";
|
|
let hintCounter = 0;
|
|
|
|
for (let i = 0; i < data.length; i++) {
|
|
if (data[i]["tag"] == undefined){ data[i]["tag"] = ""; }
|
|
let hintText = data[i]["text"];
|
|
hintTextLower = hintText.toLowerCase();
|
|
let hintUrl = data[i]["url"];
|
|
hintUrlLower = hintUrl.toLowerCase();
|
|
let hintUrlClean = hintUrl;
|
|
hintUrlClean = hintUrlClean.replace("https://", '');
|
|
hintUrlClean = hintUrlClean.replace("http://", '');
|
|
let hintTag = data[i]["tag"];
|
|
hintTagLower = hintTag.toLowerCase();
|
|
if(hintTextLower.indexOf(qLower) != -1||hintUrlLower.indexOf(qLower) != -1||hintTagLower.indexOf(qLower) != -1){
|
|
hintResult += `
|
|
<a class="brand" href="` + hintUrl + `">` + hintUrlClean + `</a> - ` + hintText + `<br>
|
|
`;
|
|
hintCounter++
|
|
}
|
|
if (hintCounter >= 6){ break; }
|
|
};
|
|
|
|
|
|
// hint 2
|
|
if (hintResult == ""){
|
|
for (let i = 0; i < data.length; i++) {
|
|
if (data[i]["tag"] == undefined){ data[i]["tag"] = ""; }
|
|
let hintText = data[i]["text"];
|
|
hintTextLower = hintText.toLowerCase();
|
|
let hintUrl = data[i]["url"];
|
|
hintUrlLower = hintUrl.toLowerCase();
|
|
let hintUrlClean = hintUrl;
|
|
hintUrlClean = hintUrlClean.replace("https://", '');
|
|
hintUrlClean = hintUrlClean.replace("http://", '');
|
|
let hintTag = data[i]["tag"];
|
|
hintTagLower = hintTag.toLowerCase();
|
|
if(fuzzySearch(hintTextLower, qLower) == true||fuzzySearch(hintUrlLower, qLower) == true||fuzzySearch(hintTagLower, qLower) == true){
|
|
hintResult += `
|
|
<a class="brand" href="` + hintUrl + `">` + hintUrlClean + `</a> - ` + hintText + `<br>
|
|
`;
|
|
hintCounter++
|
|
}
|
|
if (hintCounter >= 6){ break; }
|
|
}
|
|
}
|
|
|
|
|
|
|
|
hintResult = fuMSort(hintResult, `
|
|
`, "text");
|
|
if (hintResult != ""&&q != ""){
|
|
document.getElementById("hint").innerHTML = `<div class="padding3 bg2 border borderRadius2 small">` + hintResult + `</div>`;
|
|
} else {
|
|
document.getElementById("hint").innerHTML = ``;
|
|
}
|
|
|
|
|
|
}
|
|
}
|
|
|
|
//https://stackoverflow.com/questions/9206013/javascript-list-js-implement-a-fuzzy-search
|
|
function fuzzySearch(text, q){
|
|
String.prototype.fuzzy = function (s) {
|
|
var hay = this.toLowerCase(), i = 0, n = -1, l;
|
|
s = s.toLowerCase();
|
|
for (; l = s[i++] ;) if (!~(n = hay.indexOf(l, n + 1))) return false;
|
|
return true;
|
|
};
|
|
|
|
return (text).fuzzy(q);
|
|
}
|
|
*/
|
|
</script>
|
|
<!--// hint -->
|
|
|
|
|
|
<div class="margin2 padding2"></div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div class="wrapper">
|
|
|
|
<span id="speedDialPrint"></span>
|
|
</div>
|
|
<noscript>
|
|
<!-- nav2 -->
|
|
<div class="margin padding"></div>
|
|
<hr>
|
|
<h2 class="op tCenter">Lists:</h2>
|
|
|
|
<div class="xSmall op block tLeft padding1PxList margin1PxList"><span class="bold green">✪</span> Lists:</div>
|
|
|
|
<div class="menu small">
|
|
|
|
<a class=" button light3 border3 borderRadius2 itemHeight2" tabindex="0" href="/pages/"><span class="insertIcon firstLetterBold">Pages</span></a>
|
|
|
|
<a class=" button light3 border3 borderRadius2 itemHeight2" tabindex="0" href="/projects/"><span class="insertIcon firstLetterBold">Projects</span></a>
|
|
|
|
<a class=" button light3 border3 borderRadius2 itemHeight2" tabindex="0" href="/mini-projects/"><span class="insertIcon firstLetterBold">Mini projects</span></a>
|
|
|
|
<a class=" button light3 border3 borderRadius2 itemHeight2" tabindex="0" href="/games/"><span class="insertIcon firstLetterBold">Games</span></a>
|
|
|
|
<a class=" button light3 border3 borderRadius2 itemHeight2" tabindex="0" href="/other-projects-list.html"><span class="insertIcon firstLetterBold">Other projects</span></a>
|
|
|
|
<a class=" button light3 border3 borderRadius2 itemHeight2" tabindex="0" href="/archive.html"><span class="insertIcon firstLetterBold">Archive (All)</span></a>
|
|
|
|
</div>
|
|
|
|
<div class="padding2"></div>
|
|
<!-- // nav2 -->
|
|
</noscript>
|
|
|
|
<!-- tags -->
|
|
<div class="wrapper2">
|
|
<div class="tCenter">
|
|
|
|
<div class="bold padding medium">
|
|
<a class="op brand" href="/projects/redirects-25/?q=s">Social Media Explore:</a>
|
|
</div>
|
|
|
|
<div class="padding"></div>
|
|
|
|
<div class="wrapper2 balance small">
|
|
|
|
<span id="printTags"></span>
|
|
<hr>
|
|
<div id="printMode" class="tRight"></div>
|
|
<span id="tagListEditForm"></span>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
<!--// tags -->
|
|
|
|
|
|
|
|
|
|
</main>
|
|
<!-- // content -->
|
|
|
|
<footer id="footer"></footer>
|
|
|
|
<script src="/js/main.js"></script>
|
|
<script src="/js/script.js"></script>
|
|
|
|
|
|
<script>
|
|
// post time v.1.2.0, local
|
|
//https://stackoverflow.com/questions/13903897/javascript-return-number-of-days-hours-minutes-seconds-between-two-dates
|
|
|
|
// Time post date
|
|
function checkTime(i) {
|
|
if (i < 10) {i = "0" + i};
|
|
return i;
|
|
}
|
|
|
|
|
|
function fuPostTime(p){
|
|
const date_future = Date.now();
|
|
const date_now = new Date(p * 1000);
|
|
|
|
|
|
// get total seconds between the times
|
|
var delta = Math.abs(date_future - date_now) / 1000;
|
|
|
|
var year = Math.floor(delta / 31557600);
|
|
delta -= year * 31557600;
|
|
|
|
var month = Math.floor(delta / 2629800);
|
|
delta -= month * 2629800;
|
|
|
|
// calculate (and subtract) whole days
|
|
var days = Math.floor(delta / 86400);
|
|
delta -= days * 86400;
|
|
|
|
// calculate (and subtract) whole hours
|
|
var hours = Math.floor(delta / 3600) % 24;
|
|
delta -= hours * 3600;
|
|
|
|
// calculate (and subtract) whole minutes
|
|
var minutes = Math.floor(delta / 60) % 60;
|
|
delta -= minutes * 60;
|
|
|
|
// what's left is seconds
|
|
var seconds = delta % 60; // in theory the modulus is not required
|
|
|
|
if (year > 0){
|
|
time = year+' year ';
|
|
} else if (month > 0){
|
|
time = month+' month ';
|
|
} else if (days > 0){
|
|
time = days+' day ';
|
|
} else if (hours > 0){
|
|
time = hours+' hour ';
|
|
} else if (minutes > 0) {
|
|
time = minutes+' minute ';
|
|
} else {
|
|
time = checkTime(Math.floor(seconds))+' second ';
|
|
}
|
|
|
|
return time + ' ago';
|
|
//document.getElementById("time").innerHTML = ' '+time+' ';
|
|
}
|
|
</script>
|
|
|
|
<!--<script src="/js/fuPostTime.js"></script>-->
|
|
<script>
|
|
document.getElementById("last-update").innerHTML = fuPostTime(1730324165);
|
|
</script>
|
|
|
|
<script>
|
|
// v.1.1.3
|
|
// hot links
|
|
|
|
if (document.getElementById("q") != null){
|
|
var inputA = document.getElementById("q");
|
|
inputA.addEventListener('input', updateValueIn);
|
|
}
|
|
|
|
if (document.getElementById("q2") != null){
|
|
var inputB = document.getElementById("q2");
|
|
inputB.addEventListener('input', updateValueIn);
|
|
}
|
|
|
|
|
|
function updateValueIn(e) {
|
|
var text = encodeURIComponent(e.target.value);
|
|
|
|
var a = `
|
|
|
|
<div class="tagList2 hotLinks">
|
|
<!--<a class="tag light2 border3 borderRadius2" href="?q=` + text + ` nn" title="AI search random (text nn)">AI</a>-->
|
|
<a class="tag light2 border3 borderRadius2" href="?q=` + text + ` w" title="Web search random (text w)">Web</a>
|
|
<a class="tag light2 border3 borderRadius2" href="?q=` + text + ` o" title="Other random (text o)">Other</a>
|
|
<a class="tag light2 border3 borderRadius2" href="?q=` + text + ` n" title="News search random (text n)">News</a>
|
|
<a class="tag light2 border3 borderRadius2" href="?q=` + text + ` s" title="Socail media search random (text s)">Social</a>
|
|
<!--<a class="tag light2 border3 borderRadius2" href="?q=` + text + ` s" title="Static sites random (text sta)">Static</a>-->
|
|
<a class="tag light2 border3 borderRadius2" href="?q=` + text + ` i" title="Image search random (text i)">Images</a>
|
|
<a class="tag light2 border3 borderRadius2" href="?q=` + text + ` v" title="Video search random (text v)">Videos</a>
|
|
<a class="tag light2 border3 borderRadius2" href="?q=` + text + ` t" title="Translate random (text t)">Translate</a>
|
|
</div>
|
|
|
|
`;
|
|
|
|
document.getElementById("hotLinks").innerHTML = a;
|
|
|
|
}
|
|
|
|
|
|
// hot links
|
|
|
|
</script>
|
|
|
|
|
|
|
|
<script>
|
|
|
|
//window.addEventListener('load', function() {});
|
|
|
|
|
|
function tagListCloud(mode){
|
|
|
|
let tagModePrint = "";
|
|
if (mode == undefined||mode == ""){
|
|
mode = localStorage.getItem("tagModeData");
|
|
} else if (mode != "edit"){
|
|
localStorage.setItem("tagModeData", mode);
|
|
}
|
|
|
|
if (mode == null){ mode = "hashtags"; }
|
|
|
|
let tagListColor = `red orange yellow green blue indigo violet`;
|
|
|
|
let tagList = localStorage.getItem("tagListData");
|
|
if (tagList == null||tagList == undefined){
|
|
tagList = `
|
|
Art Photography Writing Blog Games Music Movies Books Travel
|
|
Comics Sports Fashion Fun Nature Poetry Drawing
|
|
Science Education Internet Technology Programming
|
|
`;
|
|
}
|
|
|
|
let arr = fuMSplit(tagList);
|
|
|
|
let tagListPrint = "";
|
|
arr.forEach((val, index) => {
|
|
val = val.trim();
|
|
if (val != ""){
|
|
//console.log(val + "=" + index);
|
|
let color = fuMRandomItem(tagListColor);
|
|
let printTagUrl = val.toLowerCase();
|
|
|
|
|
|
switch (mode) {
|
|
case 'keywords':
|
|
tagListPrint += `<a class="inlineBlock padding op ` + color + `" href="/projects/redirects-25/?q=` + printTagUrl + ` s">` + val + `</a>`;
|
|
break;
|
|
|
|
case 'static':
|
|
tagListPrint += `<a class="inlineBlock padding op ` + color + `" href="/projects/google-programmable-search-49/?mode=staticnotstorage&q=` + printTagUrl +`">` + val + `</a>`;
|
|
break;
|
|
|
|
case 'search':
|
|
//tagListPrint += `<a class="inlineBlock padding op ` + color + `" href="/projects/redirects-25/?q=` + printTagUrl +`">` + val + `</a>`;
|
|
tagListPrint += `<a class="inlineBlock padding op ` + color + `" href="/projects/google-programmable-search-49/?q=` + printTagUrl +`">` + val + `</a>`;
|
|
break;
|
|
|
|
case 'edit':
|
|
tagListPrint += `<span class="inlineBlock padding">` + val + `</span>`;
|
|
break;
|
|
|
|
default:
|
|
tagListPrint += `<a class="inlineBlock padding op ` + color + `" href="/projects/redirects-25/?q=` + printTagUrl + ` ht">#` + val + `</a>`;
|
|
|
|
}
|
|
|
|
}
|
|
});
|
|
|
|
document.getElementById("printTags").innerHTML = tagListPrint;
|
|
|
|
modeSwitch(mode, tagList);
|
|
|
|
}
|
|
|
|
tagListCloud("");
|
|
|
|
|
|
function modeSwitch(mode, tagList){
|
|
|
|
let tagModePrint = "";
|
|
let tagsModeList = `hashtags keywords search`;
|
|
let arr = fuMSplit(tagsModeList);
|
|
let tagListPrint = `<span class="op">mode:</span>`;
|
|
arr.forEach((val, index) => {
|
|
if (mode == val){
|
|
tagModePrint += `
|
|
<a class="inlineBlock padding op active" href="#" onclick="tagListCloud('` + val +`'); return false;">` + val +`</a>
|
|
`;
|
|
} else {
|
|
tagModePrint += `
|
|
<a class="inlineBlock padding op brand" href="#" onclick="tagListCloud('` + val +`'); return false;">` + val +`</a>
|
|
`;
|
|
}
|
|
});
|
|
|
|
if (mode == "edit"){
|
|
tagModePrint += `
|
|
<span class="op gray">/</span>
|
|
<a class="inlineBlock padding op gray" title="Close" href="#" onclick="closeTagListData(''); return false;">edit</a>
|
|
`;
|
|
} else {
|
|
tagModePrint += `
|
|
<span class="op gray">/</span>
|
|
<a class="inlineBlock padding op brand" href="#" onclick="tagListCloud('edit'); return false;">edit</a>
|
|
`;
|
|
}
|
|
document.getElementById("printMode").innerHTML = tagModePrint;
|
|
|
|
if (mode == "edit"){
|
|
document.getElementById("tagListEditForm").innerHTML = `
|
|
<form action="" method="get" class="form-example">
|
|
<textarea id="tagListEditData" rows="10">` + tagList + `</textarea>
|
|
<a class="w100 button light2 padding2 border op brand" href="#" onclick="saveTagListData(); return false;">Save</a>
|
|
<div class="tRight"><a class="tRight button light2 padding2 border op red" href="#" onclick="resetTagListData(); return false;">Reset</a></div>
|
|
</div>
|
|
</form>
|
|
`;
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function saveTagListData(){
|
|
let data = document.getElementById("tagListEditData").value;
|
|
localStorage.setItem("tagListData", data);
|
|
document.getElementById("tagListEditForm").innerHTML = ``;
|
|
tagListCloud("");
|
|
}
|
|
|
|
function resetTagListData(){
|
|
if (window.confirm("Are you sure?")) {
|
|
localStorage.removeItem("tagListData")
|
|
}
|
|
document.getElementById("tagListEditForm").innerHTML = ``;
|
|
tagListCloud("");
|
|
}
|
|
|
|
function closeTagListData(){
|
|
document.getElementById("tagListEditForm").innerHTML = ``;
|
|
tagListCloud("");
|
|
}
|
|
|
|
|
|
</script>
|
|
|
|
<script>
|
|
// hide top header if mobile
|
|
// local, only this page
|
|
/*
|
|
if (conf["confDevice"] == 'mobile'){
|
|
var getclick2 = document.getElementById('form');
|
|
document.addEventListener('click', function(event) {
|
|
if (getclick2.contains(event.target)) {
|
|
document.getElementById( 'topHeader' ).style.display = 'none';
|
|
} else {
|
|
document.getElementById( 'topHeader' ).style.display = 'block';
|
|
}
|
|
});
|
|
|
|
}*/
|
|
|
|
|
|
// redirect "q" to "redirect" script
|
|
var geturl = window.location;
|
|
var url = new URL(geturl);
|
|
var q = url.searchParams.get("q");
|
|
var url = new URL(geturl);
|
|
let sUrlText = String(url);
|
|
const myArray = sUrlText.split("q=");
|
|
if (q != null&&myArray[0].search("cache") == -1&&url.hostname == location.hostname){
|
|
q = encodeURIComponent(q);
|
|
location.href = "/projects/redirects-25/?q=" + q;
|
|
//location.href = fuMHideFileNameExt("./search.html?q=") + q;
|
|
}
|
|
|
|
</script>
|
|
|
|
<!--delme<script src="/js/form.js"></script>-->
|
|
|
|
|
|
|
|
</body>
|
|
</html>
|
|
|