Skip to content

Instantly share code, notes, and snippets.

View KonnorRogers's full-sized avatar

Konnor Rogers KonnorRogers

View GitHub Profile
@KonnorRogers
KonnorRogers / testing-dragonruby-web-builds.md
Created January 26, 2025 18:53
Testing Dragonruby web builds
@KonnorRogers
KonnorRogers / circle.rb
Created January 12, 2025 00:55
drawing an "empty" circle in dragonruby
def draw_circle(args, diameter: 200)
diameter.times do |i|
r1 = diameter / 2
h1 = i - r1
l1 = Math::sqrt(r1 * r1 - h1 * h1)
r2 = r1 - 4 # Modify this to adjust the size of the inner circle. the bigger this is, the more empty space, the smaller, the less empty space.
h2 = (i - r2) - (r1 - r2)
if h2.abs < r2
l2 = Math::sqrt(r2 * r2 - h2 * h2)
@KonnorRogers
KonnorRogers / dragonruby-html5-loader.js
Last active January 8, 2025 05:08
A silly hack for window.open in Safari with DragonRuby. Append this to the end of `.dragonruby/stubs/html5/dragonruby-html5-loader.js`.
// .dragonruby/stubs/html5/dragonruby-html5-loader.js
// ...
// end of dragonruby-html5-loader.js ...
// A silly hack for Safari browsers to get `window.open` to behave properly.
// The hack is fairly straightforward. We create a "hidden" anchor. When the user clicks on the page, if `window.open` gets called
// in a "click" event, it will set the `href` and `target` attributes on the anchor, and then when the `pointerup` finishes, reverts
// the override on `window.open` and remove the `href` and `target` attributes.
//
// As for "why" this works, Safari as part of "security", generally only expects `window.open` to be called in "click" and "click-like"
@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