Skip to content

Instantly share code, notes, and snippets.

View webdesignberlin's full-sized avatar
:octocat:
...

Michael Raguse webdesignberlin

:octocat:
...
View GitHub Profile
@webdesignberlin
webdesignberlin / AStar.ts
Created August 10, 2023 15:23 — forked from smourier/AStar.ts
A* implementation in TypeScript
export interface IHasNeighbours<T> {
getNeighbours(): Iterable<T>;
}
export class AStar {
static findPath<T extends IHasNeighbours<T>>(start: T, end: T, distanceFunc: (a: T, b: T) => number, estimateFunc?: (a: T) => number): Array<T> {
estimateFunc ??= (a: T) => distanceFunc(a, end);
const closed = new Set<T>();
const queue = new PriorityQueue<NodeWithNumber<Path<T>>>(NodeWithNumber.comparator);
queue.push(new NodeWithNumber(new Path<T>(start, undefined, 0), 0));
let cols = 5; //columns in the grid
let rows = 5; //rows in the grid
let grid = new Array(cols); //array of all the grid points
let openSet = []; //array containing unevaluated grid points
let closedSet = []; //array containing completely evaluated grid points
let start; //starting grid point
let end; // ending grid point (goal)
@webdesignberlin
webdesignberlin / reset.css
Created June 20, 2022 13:46 — forked from EllyLoel/reset.css
CSS Reset
/*
Made by Elly Loel - https://ellyloel.com/
With inspiration from:
- Josh W Comeau - https://courses.joshwcomeau.com/css-for-js/treasure-trove/010-global-styles/
- Andy Bell - https://piccalil.li/blog/a-modern-css-reset/
- Adam Argyle - https://unpkg.com/open-props@1.3.16/normalize.min.css / https://codepen.io/argyleink/pen/KKvRORE
Notes:
- `:where()` is used to lower specificity for easy overriding.
*/
@webdesignberlin
webdesignberlin / demo.js
Created May 6, 2022 15:35
Add / Remove Item to/from Array via watch
watch(arrayToWatch, (newVal, oldVal = []) => {
const difference = newVal?.filter(x => !oldVal?.includes(x)) || [];
console.log('difference', difference);
const symmetricDifference = newVal?.filter((x) => !oldVal?.includes(x))
.concat(oldVal?.filter((x) => !newVal?.includes(x))) || [];
console.log('symetricDifference', symmetricDifference);
if (difference?.length > 0) {
emit('add-item', difference[0]);
@webdesignberlin
webdesignberlin / file.js
Last active September 17, 2021 13:55 — forked from gburning/file.js
Storybook - manual mapping of Vue props to argTypes
// This is a super basic way of mapping Vue props to argTypes in cases
// where Storybook (or rather vue-docgen-api) fails.
// See https://github.com/storybookjs/storybook/issues/11774
const toType = (obj) => ({}).toString.call(obj).match(/\s([a-zA-Z]+)/)[1].toLowerCase()
const controlTypeMappings = {
String: 'text',
Boolean: 'boolean',
Array: 'object',
@webdesignberlin
webdesignberlin / filterArray.js
Created June 2, 2021 11:42 — forked from jherax/filterArray.js
Filters an array of objects with multiple match-criteria.
/**
* Filters an array of objects using custom predicates.
*
* @param {Array} array: the array to filter
* @param {Object} filters: an object with the filter criteria
* @return {Array}
*/
function filterArray(array, filters) {
const filterKeys = Object.keys(filters);
return array.filter(item => {
@webdesignberlin
webdesignberlin / MyComponentJsDoc.vue
Created April 9, 2021 13:17 — forked from lbssousa/MyComponentJsDoc.vue
A little cheatsheet of how to write type-safe Vue single file components, using either TypeScript or JSDoc comments (reference: https://blog.usejournal.com/type-vue-without-typescript-b2b49210f0b)
<template>
<div>
<slot/>
</div>
</template>
<script>
// @ts-check
/**
/* --------------------------------
Typography
-------------------------------- */
:root {
--font-primary: sans-serif;
--font-secondary: serif;
@webdesignberlin
webdesignberlin / modifierClasses.js
Last active April 15, 2020 09:00
generate BEModifier for vue computed property
export const modifierClasses = (vm) => ((root) => {
if (vm.modifier) {
const classArray = (typeof vm.modifier === 'string')
? new Array(vm.modifier)
: [...vm.modifier];
return classArray.map((modifier) => `${root}--${modifier}`);
}
return null;
});
components: {
AsyncComponent: () => import('./AsyncComponent'),
/**
With named export, use Object Destructuring on the returned Promise.
*/
AsyncComponent2: () => import('AsyncComponentLib').then(({ AsyncComponent2 }) => AsyncComponent2),
},