Create Bookmarklet (browser bookmark that executes Javsacript) to copy a given text to Clipboard.
This is the base javascript:
(function (text) {
var node = document.createElement('textarea')
var selection = document.getSelection()
/** | |
* Create an new deferred promise that can be resolved/rejected from outside. | |
* @return {Promise} A new Promise with two extra methods: resolve and reject. | |
* | |
* @example | |
* const unknownResult = () => { | |
* const deferredPromise = defer() | |
* | |
* const errorTimeoutId = setTimeout( | |
* () => { |
/** | |
* @file one-liner functional utilities in JavaScript | |
* @author Stefan Maric <me@stefanmaric.com> | |
* @license | |
* Copyright © 2017 Stefan Maric <me@stefanmaric.com> | |
* This work is free. You can redistribute it and/or modify it under the | |
* terms of the Do What The Fuck You Want To Public License, Version 2, | |
* as published by Sam Hocevar. See http://www.wtfpl.net/ for more details. | |
*/ |
export const UNITS = [ | |
{ | |
multiplier: 1000, | |
name: 'second', | |
threshold: 45, | |
}, | |
{ | |
multiplier: 60, | |
name: 'minute', | |
threshold: 45, |
/* Open Sans - by Steve Matteson, Apache License version 2.0 */ | |
/* Open Sans Light */ | |
@font-face { | |
font-family: 'Open Sans'; | |
src: url(data:application/font-woff;charset=utf-8;base64,d09GRgABAAAAAF5IABMAAAAArgwAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAABqAAAABwAAAAca7DAFEdERUYAAAHEAAAAHQAAAB4AJwDwR1BPUwAAAeQAAASiAAAJmCwaFlhHU1VCAAAGiAAAAIEAAACooF6Ikk9TLzIAAAcMAAAAXgAAAGCgeJYXY21hcAAAB2wAAAGGAAAB2s9AWKBjdnQgAAAI9AAAADgAAAA4ClINZmZwZ20AAAksAAABsQAAAmVTtC+nZ2FzcAAACuAAAAAIAAAACAAAABBnbHlmAAAK6AAASiYAAI54OERAeGhlYWQAAFUQAAAAMwAAADYJcp/SaGhlYQAAVUQAAAAfAAAAJA9bBixobXR4AABVZAAAAjEAAAOmuKtcmWxvY2EAAFeYAAABzgAAAdZKMihUbWF4cAAAWWgAAAAgAAAAIAIHAc1uYW1lAABZiAAAAhoAAATiYqqsfHBvc3QAAFukAAAB6wAAAt17wozucHJlcAAAXZAAAACvAAABLyQjUqh3ZWJmAABeQAAAAAYAAAAG7WNVfgAAAAEAAAAA0MoNVwAAAADJQhTbAAAAANGkneF42mNgZGBg4AFiMSBmYmAEwpdAzALmMQAADaEBGAAAAHjarZZLbFRVGMf/M51hxoKWqtH4CBoyNrUGjQ1J27GwatpaDZZpi4MOig/iAkJCY0hMExaFgbgwIQYrOTxqCkyh0FmQUpryMkxXLNzhaW3jyuVJV8QFIY6/c9sp4EjVxHz55dw597vf43/OPXMVklSpbn2qSEvru916/rOvenep5oveHTtVv+uTL3dro |
/** | |
* Transform a number to any base based on a provided range. | |
* TODO: doesn't support floats. | |
* @param {number} baseTen A regular, primitive integer number | |
* @param {Array<string>} range And array of characters to represent the positional system. | |
* @returns {string} A representation of the provided number in the positional system provided. | |
*/ | |
const toBase = (baseTen, range = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split('')) => { | |
if (baseTen % 1 > 0) throw new TypeError('Only integers are supported') | |
if (baseTen === 0) return range[0] |
CS:Source setup on Ubuntu
const defaultPredicate = (x) => x === null || x === undefined | |
const deepDefaults = (target, defaults, predicate = defaultPredicate) => { | |
if (Object(target) !== target) return Object.assign({}, defaults) | |
return Object.keys(defaults).reduce((acc, key) => { | |
if (Object(defaults[key]) === defaults[key]) { | |
acc[key] = deepDefaults(target[key] || {}, defaults[key], predicate) | |
} else { | |
acc[key] = predicate(target[key], key) ? defaults[key] : target[key] |