A Website built on with
Built with:
/** | |
* @class Locker | |
* @description who doesn't like Konami? | |
* @example const locker = new Locker(); locker.initialize(); | |
* | |
*/ | |
// I'm not going to use Babel for a tiny static site | |
// eslint-disable-next-line no-unused-vars | |
class Locker { | |
/** |
class ClientStorage { | |
/** | |
* Converts a string into a namespaced string | |
* @param {string} namespace the namespace | |
* @param {string} keyname keyname | |
* @returns {string} a string with namespace.keyname | |
*/ | |
static getNamespacedKeyName(namespace, keyname) { | |
let namespacedKeyName = ""; |
/* | |
where "title" is the full class name | |
/class=(.*[ "]title[ "].*)/g | |
*/ | |
const className = 'title'; | |
const regex = new RegExp(`/class=(.*[ "]${className}[ "].*)/g`); | |
/** | |
* Class for adding CSS with JavaScript that relies on the CSSOM | |
*/ | |
class JSCSS { | |
/** | |
* @param {string} cssText Text for a stylesheet. Rulesets, queries, and all | |
*/ | |
constructor(cssText = '') { | |
const sheet = JSCSS.addStyleSheet(); | |
this.stylesheet = JSCSS.getStyleSheet(sheet.title); |
.isDebugging .debug { | |
outline: 1px solid rgba(200, 100, 50, 0.9); | |
} | |
.isDebugging .debug * { | |
outline: 1px solid rgba(200, 100, 50, 0.9); | |
} |
/** Creates an array that, when iterated, only returns ruthy items | |
* @param {array} iterable | |
* | |
* @example const mixedBag = new TruthyArray(1, 0, 'foo', '', true, false, undefined, null, 'three']) | |
* for (item of mixedBag) { | |
* console.log(item); | |
* } | |
* | |
*/ |
function ifIn(array) { | |
console.group(`ifIn======`); | |
let i = 0; | |
while (i < array.length) { | |
if (i++ in array) { | |
console.log(`${i - 1} is in the array`); | |
} | |
} | |
console.groupEnd(); |
/** Evaluates an array, makes the key lowercasee and makes the value an object with original keyname | |
* @param {Array} iterable=[] an array of arrays:[[key,val],[key,val]] | |
* @returns Array | |
*/ | |
function LowercaseIterable(iterable = []) { | |
if (iterable.length === 0) return []; | |
const newIterable = iterable.map(([key, val]) => { | |
const entry = [ | |
key.toLowerCase(), |
/** | |
* @typedef SpeakerDefaults | |
* @type {object} | |
* @property {string} voiceURI voice that the browser uses | |
* @property {Number} volume loudness. Between 0 and 1.0 | |
* @property {Number} rate speed at which words are spoken. Between 0 and 2. | |
* @property {Number} pitch Between 0 and 2 | |
* @property {string} lang ISO language | |
*/ |