Skip to content

Instantly share code, notes, and snippets.

View mattlockyer's full-sized avatar
💭
🥳

Matt Lockyer mattlockyer

💭
🥳
View GitHub Profile
@mattlockyer
mattlockyer / custom-grunt.js
Created January 10, 2019 15:46
Custom Gruntfile for materializecss
const files = [
'js/cash.js',
'js/component.js',
'js/global.js',
'js/anime.min.js',
// 'js/collapsible.js',
// 'js/dropdown.js',
// 'js/modal.js',
@mattlockyer
mattlockyer / sign-with-near-cli.js
Last active January 21, 2021 05:41
Signing Messages with near-cli
// set the network (if you want mainnet)
export NEAR_ENV=mainnet
// choose 1 or 2
// 1. NEAR wallet login
near login
// 2. LEDGER replace ACCOUNT_ID
// change useLedgerKey value if you are using custom ledger path
near repl --accountId="ACCOUNT_ID" --useLedgerKey="44'/397'/0'/0'/1'"
// REPL
@mattlockyer
mattlockyer / sane-localStorage.js
Last active January 14, 2021 03:46
Sane localStorage wrappers for JSON
export const get = (k, d = {}) => {
let v = localStorage.getItem(k)
try {
return JSON.parse(v || JSON.stringify(d))
} catch (e) {
return v
}
}
export const set = (k, v) => localStorage.setItem(k, typeof v === 'string' ? v : JSON.stringify(v))
export const del = (k) => localStorage.removeItem(k)
@mattlockyer
mattlockyer / index.html
Created December 19, 2020 23:18
Image Link Preview Meta Tags
Use square image or 1200x628
<head>
<meta property="og:title" content="">
<meta property="og:image" content="">
<meta property="og:type" content="website">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:site" content="@mattdlockyer">
<meta name="twitter:creator" content="@mattdlockyer">
<meta property="twitter:image:alt" content="">
@mattlockyer
mattlockyer / threejs-blendmodes
Last active November 25, 2020 00:20
Three.js blend modes from source (not in docs)
THREE.NoBlending = 0;
THREE.NormalBlending = 1;
THREE.AdditiveBlending = 2;
THREE.SubtractiveBlending = 3;
THREE.MultiplyBlending = 4;
THREE.CustomBlending = 5;
How to change it:
var material = new THREE.BasicMaterial({
@mattlockyer
mattlockyer / console.js
Created October 23, 2020 22:23
Quick Modal for Developer Console
modal = document.createElement('div')
modal.innerHTML = '<span id="close-modal">x</span>'
style = modal.style
modal.style.zIndex = 1000
modal.style.width = modal.style.height = '90%'
modal.style.background = 'white'
modal.style.position = 'absolute'
modal.style.top = modal.style.left = '5%'
modal.style.padding = '16px'
document.body.appendChild(modal)
@mattlockyer
mattlockyer / ga_cfw.js
Last active September 30, 2020 20:31
Google Analytics for Cloudflare Workers
/********************************
* GA data
********************************/
let data = {
v: 1,
}
/********************************
* Initializes GA data
* @param {string} tid your tracking id for GA
* @param {object} req the request object from event.request
@mattlockyer
mattlockyer / App.js
Last active September 27, 2020 23:53
React useContext, state, dispatch with thunk for namespaced state management
import React, { useContext, useEffect } from 'react';
import { store } from './state/store';
import { onMount } from './state/test';
const ExampleComponent = () => {
const { state, dispatch, update: updateStore } = useContext(store)
console.log(state)
const update = async () => {
// dispatch thunk wraps function with state, dispatch
const res = await dispatch(initNear())
@mattlockyer
mattlockyer / check-hash.js
Created September 21, 2020 00:31
Check a NEAR contract hash using near-api-js
import * as nearlib from 'near-api-js'
const contractBytes = await fetch('./contract.wasm').then((r) => r.arrayBuffer())
const hash = await crypto.subtle.digest('SHA-256', contractBytes)
const hash58 = nearlib.utils.serialize.base_encode(hash)
console.log(hash58)
@mattlockyer
mattlockyer / app.js
Last active May 26, 2020 15:52
Javascript Mutex to prevent re-entry from multiple method calls. Protect methods that modify app, localStorage or IndexedDB.
import { lock, unlock } from './mutex.js'
async function processCallsLikeQueue() {
// stop method calls here
await lock('processCallsLikeQueue()')
// ...
// code to protect from re-entry
// i.e. prevent multiple simultaneous calls to this part of the code
// ...
// let next method call in