Skip to content

Instantly share code, notes, and snippets.

View beetcb's full-sized avatar
:octocat:
contributing

beet beetcb

:octocat:
contributing
View GitHub Profile
@beetcb
beetcb / proxy.pac
Last active February 6, 2024 08:27
// see -> https://en.wikipedia.org/wiki/Proxy_auto-config#:~:text=A%20proxy%20auto%2Dconfig%20(PAC,for%20fetching%20a%20given%20URL.
// 定义 findProxyForURL 函数,它接受初始化状态和配置文件
const findProxyForURL = (init, profiles) => (url, host) => {
let result = init;
const scheme = url.substr(0, url.indexOf(":"));
do {
result = profiles[result];
if (typeof result === "function") {
result = result(url, host, scheme);
@beetcb
beetcb / util.ts
Last active August 18, 2023 09:30
Exclude number type from typescript `keyof` string indexed signature
// see -> https://www.typescriptlang.org/docs/handbook/2/keyof-types.html
type ExcludeUnexpectedNumIdxSigKeyof<T> = keyof T extends number
? keyof T
: Extract<keyof T, string>;
type MapishMixed = { [k: number | string]: boolean };
type M = ExcludeUnexpectedNumIdxSigKeyof<MapishMixed>;
// ^? M will be of type string | number
type MapishNumber = { [k: number]: boolean };
@beetcb
beetcb / findInheritedProps.console.js
Last active March 12, 2022 02:23
Find Inherited props from W3C Spec.
// Shall be excuted in W3C latest props table's webpage
// Current link https://www.w3.org/TR/CSS22/propidx.html
[...document.querySelectorAll("tbody>tr") ?? []].reduce((acc, tr) => {
const inheritance = tr.querySelector("td:nth-child(5)")
if (inheritance?.innerHTML === "yes\n") {
acc.push(tr.querySelector("td:nth-child(1)")?.innerText)
}
return acc
@beetcb
beetcb / eventLoop.js
Last active May 14, 2022 23:46
Explain event loop in JS Runtime with pseudocode
// The if-else pattern is replaced by if-only expressions for consisitency and clarity.
// A new JavaScript program or subprogram is executed, a initial task is created
taskQueue.enqueue(initParse())
// Event Loop
while everyTick {
if !callstack.isEmpty() {continue}
taskQueue.dequeue().excuteStepsByJSEngine()
while !microTaskQueue.isEmpty() {
  1. Copy ~/.gnupg folder from your Mac|GNU/Linux machine to C:\Users\username\AppData\Roaming\ folder on Windows(with win4gpg installed)
  2. The name .gnupg shall be changed to gnupg
@beetcb
beetcb / downloadThumbnail.js
Last active November 8, 2021 09:22
Thumbnail download script for a certain platform
/**
* Thumbnail download script for a certain platform
* @github https://gist.github.com/beetcb/75b511714cec347b9362639e6ff3f923
*/
;(async () => {
// Prerequisite
const rightToggle = document.querySelector('.right-panel-toggle')
if (rightToggle.classList.contains('active')) {
rightToggle.click()
await new Promise(res=>setTimeout(2000, res))
@beetcb
beetcb / readline.js
Last active January 12, 2021 15:24
keyPressListener.js
const readline = require('readline')
const read = readline.createInterface({
input: process.stdin,
output: process.stdout,
}).input
// Prase key-by-key
read.isRaw = true
@beetcb
beetcb / realDeepClone.js
Last active August 29, 2020 06:52
clone a object's flags
// using spread expression
let [one, two, three] = [...'12', { ...'abc' }]
const obj = { one, two, three }
function realDeepClone(obj, key, clone) {
if (!key) {
clone = Object.defineProperties({}, Object.getOwnPropertyDescriptors(obj))
} else {
clone[key] = Object.defineProperties(
{},
@beetcb
beetcb / semantic-commit-messages.md
Created August 23, 2020 14:35 — forked from joshbuchea/semantic-commit-messages.md
Semantic Commit Messages

Semantic Commit Messages

See how a minor change to your commit message style can make you a better programmer.

Format: <type>(<scope>): <subject>

<scope> is optional

Example

@beetcb
beetcb / WhatThisIs.js
Last active September 6, 2020 01:07
four Steps to master this
// 0.IS `addEventLister()` and `click` ... <EVENT> used?
// // => `this` === who triggered the <EVENT>
// 1.Is it an arrow function ?
// // => `this` in arrow function === `this` around(arrow function) the closest valid line
// 2.Is it `bind` `call` `apply`
// // => `this` === `this` inside those [key words method]
// 3.Is it called with prefix `.`
// // => `this` === who is in fornt of `.`
// // => no `.` added => `this` === window
const $ = console.log;