Skip to content

Instantly share code, notes, and snippets.

View KonnorRogers's full-sized avatar

Konnor Rogers KonnorRogers

View GitHub Profile
@KonnorRogers
KonnorRogers / application.js
Last active December 27, 2024 16:28
Auto-update CSRF tokens
;(() => {
// Make sure that all forms have actual up-to-date tokens (cached forms contain old ones)
function refreshCSRFTokens () {
const token = csrfToken()
const param = csrfParam()
if (token != null && param != null) {
document.querySelectorAll(`form input[name="${param}"]`).forEach(input => {
const inputEl = input
inputEl.value = token
# Guide to parsing: https://randombits.dev/articles/number-localization/intro
# Table of data: https://randombits.dev/articles/number-localization/locale-list
# SCRIPT to grab from table of data:
#
=begin
;(() => {
const DECIMAL_SYMBOLS = {
"Period": ".", // U+002E
"Comma": ",", // U+002C
"Arabic Decimal Separator": "٫", // U+066B
@KonnorRogers
KonnorRogers / reactive-components.html
Last active November 28, 2024 20:06
a rough sketch of writing reactive components.
<template component="MyComponent" store="global">
<div
@click="(e) => console.log('Clicked on: ' + this.name)" // event listeners
.name={{ name }} // properties
name="{{ name }}" // attributes
>
Hello {{ name }}
</div>
</template>
@KonnorRogers
KonnorRogers / fetch-mock.js
Last active November 26, 2024 16:36
fetch-mocking
const originalFetch = window.fetch
window.fetch = function (url, options = {}) {
if (url === "http://example.net/locale") {
return new Response(JSON.stringify({
locale: "en-US",
timeZone: "UTC"
}))
} else {
@KonnorRogers
KonnorRogers / sl_button.rb
Created November 2, 2024 19:59
Phlex dump of CLI
class SlButton < Phlex::HTML
register_element :sl_button
def initialize(
caret: false,
circle: false,
disabled: false,
download: nil,
form: nil,
formaction: nil,
@KonnorRogers
KonnorRogers / contenteditable.js
Created October 21, 2024 07:19
Finding if your contenteditable is part of a range across shadow dom.
const selection = document.getSelection()
if (!selection) { return }
let hasNode = false
if (typeof selection.getComposedRanges === "function") {
const staticRange = selection.getComposedRanges(this.contentEditableElement.getRootNode())[0]
if (!staticRange) { return }
@KonnorRogers
KonnorRogers / application_system_test_case.rb
Last active October 10, 2024 07:41
Rails playwright videos and screenshots
# test/application_system_test_case.rb
require "test_helper"
require "playwright"
require "fileutils"
class CapybaraNullDriver < Capybara::Driver::Base
def needs_server?
true
end
end
/**
* @param {InputEvent} e
*/
handleBeforeInput (e) {
// All level 2 input types: <https://w3c.github.io/input-events/#interface-InputEvent-Attributes>
switch (e.inputType) {
// insert typed plain text
case "insertText":
break;
// insert or replace existing text by means of a spell checker, auto-correct, writing suggestions or similar
@KonnorRogers
KonnorRogers / refresh.html
Created September 19, 2024 16:21
Refresh button for Turbo
<button type="button" data-controller="refresh">Refresh</button>
<script type="module">
import { Controller } from "@hotwired/stimulus"
export default class RefreshController extends Controller {
connect () {
this.element.addEventListener("click", this.sendRefresh)
}
@KonnorRogers
KonnorRogers / index.html
Created August 23, 2024 05:11
the joy of SSR
<!-- Case 1 -->
<my-input value="foo">
<template shadowrootmode="open">
<input value="foo">
</template>
</my-input>
<script>
myInput.value = "bar"
customElements.define("my-input", MyInput)