Skip to content

Instantly share code, notes, and snippets.

View HeGanjie's full-sized avatar

Bruce He HeGanjie

View GitHub Profile
@HeGanjie
HeGanjie / index.ts
Created March 18, 2022 02:28
intercept object function call
function interceptFuncCall(object: any, fnName: any, fnReplace: (originalObj: any, ...originalArgs: any[]) => any) {
const obj = new Proxy(object, {
get: function(target, propKey, receiver) {
if (propKey === fnName) {
return function() {
return fnReplace(target, ...arguments)
}
}
const val = Reflect.get(target, propKey, receiver)
return val
.flex {
display: -webkit-box;
display: -moz-box;
display: -ms-flexbox;
display: -webkit-flex;
display: flex;
}
.flex.flex--reverse {
-webkit-box-orient: horizontal;
@HeGanjie
HeGanjie / importCompat.ts
Created October 29, 2021 08:50
dynamic import compact chrome 63
async function importCompat(nodeBookModuleUrl: string) {
try {
// const { default: notebook } = await import(/*webpackIgnore: true*/ nodeBookModuleUrl)
// 用 eval 绕过打包逻辑
return await eval(`import('${nodeBookModuleUrl}')`)
} catch (e) {
// https://github.com/guybedford/es-module-shims#shim-mode-option
window.esmsInitOptions = {
shimMode: true // default false
} as any
@HeGanjie
HeGanjie / recur.clj
Last active October 3, 2021 05:58
CPS can't reduce the time complexity...
;fac
(defn fac [n]
(if (zero? n) 1
(* n (fac (dec n)))))
(defn fac-t [n acc] ; n 1
(if (zero? n) acc
(recur (dec n) (* acc n))))
(defn fac-c [n f] ; n identity
@HeGanjie
HeGanjie / geo2screen.ts
Created September 11, 2021 02:06
自适应坐标转换工具类
import * as d3Scale from "d3-scale"
import _ from "lodash";
export interface MappingInfo {
onWindowSize: number[]
screenA: number[]
geoA: number[]
screenB: number[]
geoB: number[]
}
@HeGanjie
HeGanjie / tailwind.config.js
Last active July 12, 2021 05:51
tailwindcss with px2rem
module.exports = {
purge: ['./src/**/*.html', './src/**/*.tsx', './src/**/*.ts'],
darkMode: false, // or 'media' or 'class'
theme: {
// https://github.com/tailwindlabs/tailwindcss/issues/1232
// using px2rem, 1rem = 100px for 1920 screen
fontSize: {
"xs": "0.12rem",
"sm": "0.14rem",
"base": "0.16rem",
@HeGanjie
HeGanjie / document.ejs
Last active December 13, 2020 04:07
rem 全屏自适应逻辑,1080p下 1rem=100px
<!doctype html>
<html style="font-size: 100px">
<head>
<meta charset="utf-8" />
<meta http-equiv="Cache-control" content="no-cache">
<meta http-equiv="Expires" content="-1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no" />
<% if (context.title != null) { %>
<title><%= context.title %></title>
<% } %>
@HeGanjie
HeGanjie / Drag PNG here.bat
Created September 12, 2014 01:29
bat for pngquant, auto cover original png file (DANGEROUS)
:: http://pngquant.org/
@echo off
set path=%~d0%~p0
:start
"%path%pngquant.exe" --force --ext .png --verbose --ordered --speed=1 --quality=50-90 %1
@HeGanjie
HeGanjie / common-styled-component.jsx
Last active February 23, 2020 05:30
Allow you quickly style a div like this: <Box mg10x pd20y textCenter width300 itblock font20 color-white bold />
import styled from '@emotion/styled'
import _ from 'lodash'
const DirectDict = {
t: [0],
r: [1],
b: [2],
l: [3],
x: [1, 3],
// in: [['xxx'], ['yyy', 'zzz'], ...]
// out: [['xxx', 'yyy', ...], ['xxx', 'zzz', ...]]
function calcCombination(options) {
if (_.isEmpty(options)) {
return [[]]
}
let [firstOpt, ...rest] = options
let remainCombinations = calcCombination(rest)
return _.flatMap(remainCombinations, rc => {
return firstOpt.map(o1 => [o1, ...rc])