Skip to content

Instantly share code, notes, and snippets.

View jimmont's full-sized avatar

Jim Montgomery jimmont

View GitHub Profile
@jimmont
jimmont / jsx-template-transformer.js
Last active February 26, 2020 01:20
transform jsx to tagged template literals
/*
transform JSX to tagged template literals
history:
2019-01-25 initial working draft
https://stackoverflow.com/a/54381294/965666
https://astexplorer.net/#/gist/fdaed19a884dc75fe4a92092826bd635/9bc3c34e276eaf74cc318da9b87bbe0cfd37ff6d
https://astexplorer.net/#/gist/fdaed19a884dc75fe4a92092826bd635/9a47a064fe0734868f8c5c46ceb99de6ebfe3600
/*
add,remove,length, reverse
{value,next}
*/
class List{
constructor(){
}
}
class Node{
@jimmont
jimmont / websockets.js
Created July 27, 2020 00:37
http upgrade websocket
/*
running with Deno 1.2
deno run --inspect --allow-net ./websockets.js
*/
import { Application, Router, HttpError, send, Status } from "https://deno.land/x/oak@v6.0.1/mod.ts";
import { isWebSocketCloseEvent } from "https://deno.land/std@0.61.0/ws/mod.ts";
const port = 8123;
const users = new Set();
const app = new Application({state:{users}});
@jimmont
jimmont / ReactHTM.html
Created November 16, 2020 07:42
use HTM to reduce work in React apps by removing the need for JSX translation in build processes
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" >
<meta name="viewport" content="width=device-width, minimum-scale=1, initial-scale=1, user-scalable=yes">
<title>use HTM to reduce work in React apps</title>
<meta name="description" content="example using HTM with React to replace JSX and reduce work">
<style>
html,body{margin:0;padding:0;min-width:320px;min-height:320px;box-sizing:border-box;background-color:#cf0;}
body{
@jimmont
jimmont / .dockerignore
Created February 19, 2021 05:17
Deno on Cloud Run
# TODO cleanup
log/
logs/
**/log/
**/logs/
**/*.log
secrets.txt
.git
@jimmont
jimmont / polyfill.Events.js
Created April 27, 2021 20:14
Event related polyfills (for evergreen browsers)
if( !('SubmitEvent' in self && 'submitter' in SubmitEvent.prototype) ){
// polyfill SubmitEvent.submitter (a Safari issue as-of 2021)
// https://developer.mozilla.org/docs/Web/API/SubmitEvent
const submitter = Symbol.for('submitter');
Event[ submitter ] = null;
const submitterSelector = 'input[type=submit], input[type=image], input[type=button], button';
Object.defineProperty(Event.prototype, 'submitter', {
get: function(){
if('submit' === this.type){
@jimmont
jimmont / uitest.js
Last active September 15, 2021 19:55
async Deno.test() tests
import puppeteer from 'https://deno.land/x/puppeteer/mod.ts';
import { assert } from 'https://deno.land/std/testing/asserts.ts';
/*
related:
async runTests()
https://github.com/denoland/deno/issues/10941
https://github.com/denoland/deno_std/issues/162
discussion of testing API
(function() {
'use strict';
if (typeof document === 'undefined' || 'adoptedStyleSheets' in document) {
return;
}
var hasShadyCss = 'ShadyCSS' in window && !ShadyCSS.nativeShadow;
var bootstrapper = document.implementation.createHTMLDocument('');
var closedShadowRootRegistry = new WeakMap();
var _DOMException = typeof DOMException === 'object' ? Error : DOMException;
var defineProperty = Object.defineProperty;
@jimmont
jimmont / interactivecontent.js
Created December 13, 2021 18:00
interactive content HTML elements where tab through document gives focus
/*
needed to manage tab focus (focusin) events leading to the following selector to adjust;
reference
* https://html.spec.whatwg.org/multipage/dom.html#interactive-content
additional info:
* https://www.tpgi.com/using-the-tabindex-attribute/
* https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex
and various linked/related in the above (or simply Google a bit)
*/