View copy-to-clipboard.js
function CopyButton({ value }) { | |
let [copied, setCopied] = React.useState(); | |
let hydrated = usePageIsHydrated(); | |
React.useEffect(() => { | |
let id = setTimeout(() => setCopied(false), 2000); | |
return () => clearTimeout(id); | |
}, [copied]); | |
return ( | |
<button |
View index.js
// I see this mistake often (and have made it myself before) | |
// What's the bug with this function? | |
function isFavSeason(season) { | |
return season === 'spring' || 'summer' ? 'yes' : 'no' | |
} | |
// Let's try it and find out | |
console.log(isFavSeason('spring')) // yes | |
console.log(isFavSeason('summer')) // yes |
View tweet-when-to-use-generators-iterators.js
// Builds array of everything ahead of time | |
function collectAllItems() { | |
return [calculateFirst(), calculateSecond(), ...] | |
} | |
// This loop will end as soon as `isMatch(item)` is truthy. | |
// If the very first item in the array is a match, then we | |
// wasted all this time building the array in the first place. | |
for (let item of collectAllItems()) { | |
if (isMatch(item)) { |
View example.js
// Variables used by Scriptable. | |
// These must be at the very top of the file. Do not edit. | |
// icon-color: gray; icon-glyph: magic; | |
// Defaults to the latest version and no automatic update; if the file exists, just use it | |
const moment = await require('moment'); | |
// Use any SemVer options to specify a version you want | |
// Refer to the calculator here: https://semver.npmjs.com/ | |
const lodash = await require('lodash@^3.9.1'); |
View require.js
// Variables used by Scriptable. | |
// These must be at the very top of the file. Do not edit. | |
// icon-color: green; icon-glyph: file-code; | |
const getModule = importModule("getModule"); | |
const documentDirectory = FileManager.iCloud().documentsDirectory(); | |
module.exports = async ({ moduleName, url, forceDownload = false }) => { | |
if (moduleExists(moduleName) && !forceDownload) { | |
return importModule(moduleName); |
View getString.js
// Variables used by Scriptable. | |
// These must be at the very top of the file. Do not edit. | |
// icon-color: green; icon-glyph: file-code; | |
module.exports = async ({ url, headers = {} }) => { | |
const request = new Request(url); | |
request.method = methods.get; | |
request.headers = { | |
...headers | |
}; | |
return await request.loadString(); |
View getModule.js
// Variables used by Scriptable. | |
// These must be at the very top of the file. Do not edit. | |
// icon-color: green; icon-glyph: file-code; | |
const getString = importModule('getString'); | |
const documentDirectory = FileManager.iCloud().documentsDirectory(); | |
const header = `// Variables used by Scriptable. | |
// These must be at the very top of the file. Do not edit. | |
// icon-color: deep-gray; icon-glyph: file-code;`; |
View requests.js
// Variables used by Scriptable. | |
// These must be at the very top of the file. Do not edit. | |
// icon-color: green; icon-glyph: file-code; | |
module.exports = { | |
post: async ({ url, body, headers = {} }) => { | |
const request = new Request(url); | |
request.body = JSON.stringify(body); | |
request.method = methods.post; | |
request.headers = { | |
...defaultHeaders, |
View Timer fallback.js
function Timer() { | |
const startTime = React.useRef(performance.now()); | |
const [time, setTime] = React.useState(performance.now()); | |
React.useEffect(() => { | |
const id = setTimeout(() => { | |
ReactDOM.flushSync(() => { | |
setTime(performance.now()); | |
}); | |
}, 2); |
NewerOlder