Skip to content

Instantly share code, notes, and snippets.

@westc
westc / getMonacoEditorCompDefs.js
Last active November 5, 2024 03:53
Get a <code-editor> component in Vue3 that uses Monaco.
/**
* @param {Record<"codeEditor"|"diffEditor",boolean|string>} defsToInclude
* @returns {Record<string,any>}
*/
function getMonacoEditorCompDefs(defsToInclude) {
/**
* @param {(script?: HTMLScriptElement) => T} getter
* Function that will be called to get the result of a script running. This
* function will initially be called without any arguments to determine if
* the desired results already exist but if not the script tag will be added
@westc
westc / getNextMultiple.js
Created October 8, 2024 19:47
getNextMultiple() — Finds the smallest multiple of `multipleOf` that is greater than or equal to `baseValue + offset`.
/**
* Finds the smallest multiple of `multipleOf` that is greater than or equal to
* `baseValue + offset`.
*
* @param {number} multipleOf
* The number whose multiple needs to be found.
* @param {number} baseValue
* The base value to start from.
* @param {number} [offset=0]
* The optional value to add to `baseValue` (default is 0).
@westc
westc / destruct.js
Last active September 16, 2024 22:39
Destructures values from a `root` object based on one or more `nestedMaps` structures.
/**
* Destructures values from a `root` object based on one or more `nestedMaps`
* structures.
* @param {Object} root
* The root object or array containing the data to destructure.
* @param {...NestedMap} nestedMaps
* One or more nested mapping objects. Each key in the `NestedMap` is a
* string, and each value is either:
* - A string (which specifies the key in the result object), or
* - A `NestedMap` (which specifies further nested extraction).
@westc
westc / cwest-dark-mode.bookmarklet.js
Last active June 6, 2024 01:46
Bookmarklet - Dark mode code.
(()=>{
const docElem = document.documentElement;
const FILTERS = [
"",
"invert(1) hue-rotate(180deg) contrast(0.75)",
"invert(1) contrast(0.75)",
"invert(1) hue-rotate(180deg)"
];
const VAR_NAME = "cwestDarkMode";
const DATA_VAR_NAME = `data-${VAR_NAME.replace(/[A-Z]/g, '-$&').toLowerCase()}`;
@westc
westc / formatIntlDate.js
Last active April 20, 2024 03:48
A more intuitive version of a JS date formatter. This function leverages Intl.DateTimeFormat().
var formatIntlDate = (() => {
const codeToOpts = [...'Y=year M=month D=day H=hour h=hour m=minute s=second S:1 SS:2 SSS:3 MMM=month:short MMMM=month:long DDD=weekday:short DDDD=weekday:long A=hour:2D a=hour:2D Z:Offset ZZ:Offset ZZZ:Generic ZZZZ: J=year:numeric,month:2D,day:2D,hourCycle:h23,hour:2D,minute:2D,second:2D,fractionalSecondDigits:3,timeZoneName:longOffset'.replace(/(\w)=\w+(?= |$)/g, '$&:numeric $1$&:2D').replace(/hour/g, 'hourCycle:h23,$&').replace(/Z:/g, 'Z=timeZoneName:long').replace(/S:/g, 'S=fractionalSecondDigits:').replace(/2D/g, '2-digit').matchAll(/(\w+)=(\S+)/g)]
.reduce(
(codeToOpts, [_, code, strOpts]) => {
codeToOpts[code] = [...strOpts.matchAll(/(\w+):([^,]+)/g)].reduce(
(opts, [_, key, value]) => {
opts[key] = value;
return opts;
},
{}
@westc
westc / zip.cls
Last active March 28, 2024 22:14
Two implementations of zip() and zipKeys() in Apex (Salesforce).
/**
* Merges together the values of each of the arrays with the values at the
* corresponding position. Useful when you have separate data sources that are
* coordinated through matching array indexes.
*/
public static Object[][] zip(Object[][] listOfArrays) {
Object[][] rows = new List<Object[]>();
Integer itemsCount;
for (Object[] items : listOfArrays) {
Boolean isFirstPass = itemsCount == null;
@westc
westc / sendNewRecordsEmail.cls
Created February 16, 2024 02:25 — forked from cwest-consultch/sendNewRecordsEmail.cls
Apex - Function that sends an email of all of the new records of a given type created after a given datetime.
public static boolean sendNewRecordsEmail(String[] toAddresses, String sobjectName, DateTime createdAfter) {
String strCreatedAfter = createdAfter.formatGMT('yyyy-MM-dd\'T\'HH:mm:ss\'Z\'');
// Get the count of records after the createdAfter date/time.
String restSOQL = String.join(
new String[]{
'SELECT count(Id) record_count',
'FROM ' + sobjectName,
'WHERE CreatedDate > ' + strCreatedAfter
},
@westc
westc / lwc-console-override.js
Created February 12, 2024 16:16
Custom console object to allow for objects to be printed correctly in the console from within LWC by leveraging iframes.
/**
* Custom console object to allow for objects to be printed correctly in the
* console by leveraging iframes.
* @type {Console}
*/
const CONSOLE = ((realConsole) => {
let iframe;
try {
iframe = document.createElement('iframe');
iframe.style.display = 'none';
@westc
westc / loadScripts.js
Last active February 1, 2024 21:16
Loads a <script> tag if necessary and finishes once the `checker` returns a promised value that is not falsy.
/**
* Can load multiple scripts (javascript and css) and finishes once the
* `checker` returns a promised value that is not falsy.
* @param {string[]} urls
* Ordinarily a URL is determined to be for CSS or JS by the extension of the
* pathname but if it doesn't end in .js or .css this will not be possible and
* it will default to JS. If you want to force a URL to be recognized as a JS
* file you should prefix the URL with `"js:"` and if you want it to be
* recognized as a CSS file you should prefix it with `"css:"`.
* @param {null|undefined|{
@westc
westc / vue3-component-clickable-dragon-balls.html
Last active January 25, 2024 17:25
Vue3 Component - Clickable Dragon Balls
<!DOCTYPE html>
<html lang="en-US">
<head>
<meta charset='UTF-8'>
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Clickable Dragon Balls</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/3.2.37/vue.global.prod.min.js"></script>
<script>
addEventListener('DOMContentLoaded', () => {
Vue.createApp({