Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

View pketh's full-sized avatar
🐢
https://kinopio.club

Pirijan pketh

🐢
https://kinopio.club
View GitHub Profile
@pketh
pketh / convert json canvas to kinopio space.js
Created March 13, 2024 21:20
convert json canvas to kinopio space.js
// https://jsoncanvas.org
const convertFromCanvas = (space) => {
const yThreshold = 150
let newSpace = {}
try {
newSpace.name = `Canvas ${utils.journalSpaceName({})}`
newSpace.id = nanoid()
newSpace.background = consts.defaultSpaceBackground
@pketh
pketh / meta-seo.jade
Last active February 25, 2024 21:43
seo meta tags for social unfurling
// facebook open graph tags
meta(property="og:type" content="website")
meta(property="og:url" content=url)
meta(property="og:title" content=title)
meta(property="og:description" content=description)
meta(property="og:image" content=frog2x)
// twitter card tags (stack with og: tags)
meta(name="twitter:card" content="summary")
meta(name="twitter:site" content="@pketh")
@pketh
pketh / macrolight list.json
Created October 18, 2023 18:13
kinopio code languages list
[
{"id": 1,"name": "txt"},
{"id": 2,"name": "c", "color": "#555555", "keywords": ["auto", "break", "case", "char", "const", "continue", "default", "do", "double", "else", "enum", "extern", "float", "for", "goto", "if", "int", "long", "register", "return", "short", "signed", "sizeof", "static", "struct", "switch", "typedef", "union", "unsigned", "void", "volatile", "while"]},
{"id": 3,"name": "c++", "color": "#f34b7d", "keywords": ["alignas", "alignof", "and", "and_eq", "asm", "auto", "bitand", "bitor", "bool", "break", "case", "catch", "char", "char8_t", "char16_t", "char32_t", "class", "compl", "concept", "const", "consteval", "constexpr", "const_cast", "continue", "co_await", "co_return", "co_yield", "decltype", "default", "delete", "do", "double", "dynamic_cast", "else", "enum", "explicit", "export", "extern", "false", "float", "for", "friend", "goto", "if", "inline", "int", "long", "mutable", "namespace", "new", "noexcept", "not", "not_eq", "nullptr", "operator", "or", "or_eq", "private", "protected
@pketh
pketh / gist:f6b37564b8f42fca7c61eb43c39287de
Last active December 23, 2023 15:23
disable ios text field autozoom
// https://stackoverflow.com/a/57527009
const disableIOSTextFieldZoom = () => {
if (!isIOS()) { return }
const element = document.querySelector('meta[name=viewport]')
if (element !== null) {
let content = element.getAttribute('content')
let scalePattern = /maximum\-scale=[0-9\.]+/g
if (scalePattern.test(content)) {
content = content.replace(scalePattern, 'maximum-scale=1.0')
} else {
@pketh
pketh / BlankDialogTemplate.vue
Created October 8, 2023 14:20
vue 3 composition template
<script setup>
import { reactive, computed, onMounted, defineProps, defineEmits, watch, ref, nextTick } from 'vue'
import { useStore } from 'vuex'
const store = useStore()
import utils from '@/utils.js'
const dialog = ref(null)
onMounted(() => {
[
{
"name": "Ascension Island",
"emoji": "🇦🇨",
"unicode": "U+1F1E6 U+1F1E8",
"image": "https://cdn.jsdelivr.net/npm/country-flag-emoji-json@2.0.0/dist/images/AC.svg"
},
{
"name": "Andorra",
"emoji": "🇦🇩",
@pketh
pketh / 1-promises.coffee
Last active April 5, 2023 02:12
Promises in Coffeescript
# Create a promise:
myCoolPromise = new Promise (resolve, reject) ->
# do a thing
success = true
if success
resolve 'stuff worked'
else
reject Error 'it broke'
@pketh
pketh / sendEmailBatchWithTemplates.js
Created October 25, 2022 15:49
wrapped in try catch to log errors
try {
await postmark.sendEmailBatchWithTemplates(templates)
} catch (error) {
console.error('🚒 email.bulletin', error)
}
async bulletin ({subject, users, exploreSpaces}) {
const batches = utils.groupIntoBatches(users)
console.log('📧 bulletin', { subject, users: users.length, batches: batches.length })
for (const users of batches) {
const templates = users.map(user => {
return {
From: "hi@kinopio.club",
To: user.email,
TemplateAlias: "bulletin",
MessageStream: "bulletins",
groupIntoBatches (array) {
const batchSize = 100
const totalBatches = Math.ceil(array.length / batchSize)
let batches = []
_.times(totalBatches, (index) => {
const start = index * batchSize
let end = (index + 1) * batchSize
const batch = array.slice(start, end)
batches.push(batch)
})