This script contains some simple basic-functions.
此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.greatest.deepsurf.us/scripts/547732/1651464/BasicLib.js
// ==UserScript==
// @name BasicLib
// @description This script contains some simple basic-functions.
// @grant none
// @run-at document-start
// @version 1.0.1
// @author Cyrano68
// @license MIT
// @namespace https://greatest.deepsurf.us/users/788550
// ==/UserScript==
(function()
{
"use strict";
function getZeroFilledMillisecs(dateNow)
{
const millisecs = dateNow.getMilliseconds();
return ("00" + millisecs).slice(-3);
}
function consoleLog(text, showLog = true)
{
if (showLog)
{
const dateNow = new Date();
//const now = dateNow.toISOString();
const now = dateNow.toLocaleString() + "." + getZeroFilledMillisecs(dateNow);
console.log(`${now} ${text}`);
}
}
function getMathRandomInteger(val1, val2)
{
let min = 0;
let max = 100;
const val1IsValid = ((val1 !== undefined) && (val1 !== undefined));
const val2IsValid = ((val2 !== undefined) && (val2 !== undefined));
consoleLog(`==> BasicLib: getMathRandomInteger - val1IsValid=${val1IsValid}, val2IsValid=${val2IsValid}`);
if (val1IsValid || val2IsValid)
{
if (val1IsValid && val2IsValid)
{
min = val1;
max = val2;
}
else
{
min = 0;
max = (val1IsValid ? val1 : val2);
}
}
if (max < min)
{
const tmp = min;
min = max;
max = tmp;
}
consoleLog(`==> BasicLib: getMathRandomInteger - min=${min}, max=${max}`);
return Math.floor(Math.random() * (max - min)) + min;
}
function generateID()
{
// NOTE-1: The function "toString(36)" converts the number to a base-36 string (i.e. a string containing digits 0-9 and letters a-z).
// NOTE-2: THe function "substring(2)" is used to remove the "0." from the start of the random number string.
const ID = Date.now().toString(36) + "_" + Math.random().toString(36).substring(2);
consoleLog(`==> BasicLib: generateID - ID='${ID}'`);
return ID;
}
function setInterval2(callback, interval_ms, execCallbackNow)
{
// I defined a new "setInterval" function because I want to call the "setInterval" function and then
// (if required) call immediately the callback function, instead of wait for the first timeout.
//
// Call the "setInterval" for the periodic timer.
consoleLog(`==> BasicLib: setInterval2 - STARTING TIMER - interval_ms=${interval_ms}`);
const timerId = setInterval(callback, interval_ms);
consoleLog(`==> BasicLib: setInterval2 - TIMER STARTED - timerId=${timerId}`);
if (execCallbackNow)
{
// Call immediately the callback function.
callback(timerId);
}
return timerId;
}
function textMatchesArray(text, array, index)
{
// This function returns true if there is an element in the array that matches with "text".
//
// IMPORTANT: The input "index" must be an object with a field named "value". For example:
// let index = {value: -1};
// At the end the "index.value" will contain the index of the element of the array that matched with "text" (or -1 if there is no match).
//
for (let i = 0; i < array.length; ++i)
{
if (text.startsWith(array[i]))
{
index.value = i;
return true;
}
}
index.value = -1;
return false;
}
const myVersion = "1.0.1"; // It must be the same value indicated in @version.
consoleLog(`==> BasicLib: HELLO! Loading script (version: ${myVersion})...`);
function getVersion()
{
return myVersion;
}
// Expose the public interface by returning an object.
window.BasicLib =
{
consoleLog: consoleLog,
getMathRandomInteger: getMathRandomInteger,
generateID: generateID,
setInterval2: setInterval2,
textMatchesArray: textMatchesArray,
getVersion: getVersion
};
consoleLog("==> BasicLib: Script loaded");
})();