Skip to content

Instantly share code, notes, and snippets.

function __append (el, children) {
for (let child of children) {
if (!child) continue;
if (Array.isArray(child)) __append(el, child);
else if (child instanceof HTMLElement || child instanceof DocumentFragment) el.append(child);
else el.append(document.createTextNode(child));
}
}
import { render } from 'preact';
import { useRef, useState } from 'preact/hooks';
function useReactive (initialState) {
let [, forceUpdate] = useState({});
let reactive = useRef(null);
if (!reactive.current) {
reactive.current = new Proxy(initialState, {
@intrnl
intrnl / google-forms-get-url-with-filled-answer.js
Last active November 18, 2020 02:13
Creates Google Forms URL containing answers that have been filled
// A teacher told us to submit the same form multiple times as sort of memory strengthening.
// I don't like that though, so here's a script that creates a Forms URL that contains the answers I've already filled.
location.origin + location.pathname + '?' +
Array.from(document.querySelectorAll('input[name^="entry."]'))
.filter((el) => el.value)
.map((el) => `${el.name}=${encodeURIComponent(el.value)}`)
.join('&');
@intrnl
intrnl / handler.js
Last active December 14, 2020 19:31
Discord slash commands example on Cloudflare Workers
import * as ed from './noble-ed25519';
let encoder = new TextEncoder();
let commands = new Map();
export function define (name, handler) {
commands.set(name, handler);
}
@intrnl
intrnl / queue.ts
Last active December 21, 2020 06:18
export class Queue<V = any> {
head?: Node<V>;
tail?: Node<V>;
size!: number;
constructor () {
this.clear();
}
@intrnl
intrnl / deferred.ts
Last active December 19, 2020 00:53
export function createDeferred<V> (): Deferred<V> {
let deferred: Deferred<V> = {} as any;
deferred.promise = new Promise((resolve, reject) => (
Object.assign(deferred, { resolve, reject })
));
return deferred;
}
function sleep (ms: number): Promise<void> {
return new Promise((resolve) => setTimeout(resolve, ms));
}
export function createLazyPromise (executor) {
let promise;
function ensure () {
return promise || (promise = new Promise(executor));
}
return {
then (onfulfilled, onrejected) {
return ensure().then(onfulfilled, onrejected);
import { getPlatformInfo } from '../utils/platform';
import { noop } from '../utils/util';
import * as http from '../lib/http';
import { GATEWAY_VERSION } from '../constants/endpoints';
import { GATEWAY } from '../constants/api';
import { GatewayOP, ConnectionStatus } from '../constants/gateway';
import { Inflate } from '@intrnl/pako-esm/inflate';
import { Z_SYNC_FLUSH } from '@intrnl/pako-esm/constants';
@intrnl
intrnl / clear_mal.js
Last active February 8, 2021 01:07
Clear MyAnimeList
let sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
let random = (min, max) => ~~(Math.random() * (max - min) + min);
let form_data = new FormData();
form_data.append('csrf_token', document.querySelector('meta[name=csrf_token]').content);
let elements = Array.from(document.querySelectorAll('.animetitle'));
console.log(`${elements.length} to delete`);