Skip to content

Instantly share code, notes, and snippets.

@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({
@westc
westc / extract.js
Last active January 12, 2024 15:40
Extracts substrings from the given `string` by using `regexp`.
/**
* Extracts substrings from the given `string` by using `regexp`.
* @type {{
* (regexp: RegExp, string: string) => RegExpExecArray;
* <T>(regexp: RegExp, string: string, handler: (matches: RegExpExecArray) => T) => T;
* }}
*/
const extract = (regexp, string, handler) => {
const matches = regexp.exec(string) ?? [];
return handler ? handler(matches) : matches;
@westc
westc / partition.js
Last active January 10, 2024 20:21
partition() - Partitions a string by using the given delimiter. In other words this splits a string while keeping the substring matches that were used to delimit the string.
/**
* Partitions a string by using the given delimiter.
* @param {string} string
* @param {string|RegExp} delimiter
* @returns {(string | (string[] & {input: string, index: number, groups?: Record<string,string>}))[]}
* All items of an even index in the zero-indexed array will be strings while
* all items of an odd index will be `RegExpMatchArray` objects.
*/
function partition(string, delimiter) {
const parts = [];
@westc
westc / formatIntlDate.js
Last active January 2, 2024 02:40
Makes it possible to format a Date object while leveraging the Intl.DateTimeFormat formatter.
function formatIntlDate(date, format, options) {
return format.replace(
/<<|>>|<(\w)(?:\|([^>]+))?>/g,
(fullMatch, type, option) => {
if (!type) return fullMatch.charAt(0);
if (/^[YMDHhmsf]$/.test(type ?? '')) option ??= 'numeric';
const subOptions = {timeZone: options?.timeZone ?? undefined};
let partType;
@westc
westc / waitForReadyDOM.js
Created December 23, 2023 01:57
Function that waits for the DOM to be ready to be manipulated.
/**
* Function that waits for the DOM to be ready to be manipulated.
* @returns {Promise<undefined>}
* A promise that will be finished after the DOM is ready to be manipulated.
*/
function waitForReadyDOM() {
return new Promise(async resolve => {
if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', () => resolve());
else resolve();
});
@westc
westc / isPrimitive.js
Created December 6, 2023 18:37
isPrimitive() - Determines if `input` is a primitive value or not.
/**
* Determines if `input` is a primitive value or not.
* @param {any} input
* The input value to test.
* @returns {boolean}
* Returns `true if `input` is a primitive, otherwise `false` is returned.
*/
function isPrimitive(input) {
if (input == null) {
// This is here to correctly handle document.all.
@westc
westc / Searcher.js
Last active November 29, 2023 05:53
A JavaScript class that can be used in a rudimentary search engine to test and find all matches for search terms entered.
class Searcher {
/** @type {string} */
#terms;
/** @type {boolean} */
#matchWordStart;
/** @type {boolean} */
#matchWordEnd;
/** @type {RegExp} */
#rgxFullNeg;
/** @type {RegExp} */