Skip to content

Instantly share code, notes, and snippets.

View captainbrosset's full-sized avatar
👋

Patrick Brosset captainbrosset

👋
View GitHub Profile
@captainbrosset
captainbrosset / collision.js
Created June 4, 2013 21:32
Pixel-perfect javascript 2D collision detection
/*
2d pixel-perfect collision detection
Requires that each object has a rectangular bounding box (simple x/y/w/h, no rotation)
and a bit mask (i.e. an array of lines and columns containing 0s for empty pixels and 1s for solid pixels).
On each frame of the animation, take all pairs of objects and
1. compare the bounding boxes
2. for those that collide, check for overlayed bits by creating a new mask that is the AND of the 2 sub-masks and check for 1s
@captainbrosset
captainbrosset / frustrations.md
Created January 4, 2023 10:30
List of frustrations when working with the web
  • Having to support specific browsers.
  • Avoiding or removing a feature that doesn’t work across browsers.
  • Making a design look/work the same across browsers.
  • Achieving visual precision on stylized elements (e.g., buttons).
  • Lack of capabilities to implement specific use cases.
  • Making web sites/applications accessible.
  • Making web sites/applications performant.
  • Making web sites/applications secure.
  • Using web technologies in a native or hybrid context (e.g, using WebViews, Electron, CEF).
  • Working with different tracking protection and data storage policies in browsers.
@captainbrosset
captainbrosset / dom-mutation-logger.js
Last active November 14, 2022 13:03
Useful DevTools snippets
function logMutation(mutation) {
console.log(mutation);
}
const mutationObserver = new MutationObserver((mutations) => {
for (const mutation of mutations) {
// Build a reason object that will let the user know what exactly happened
let details = null;
if (mutation.type === "attributes") {
details = {
@captainbrosset
captainbrosset / z-index.js
Created January 13, 2017 11:52
z-index tool - Compare 2 elements in the DOM and understand why they are stacked the way they are
(function() {
/**
* https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Positioning/Understanding_z_index/The_stacking_context
*
* A stacking context is formed, anywhere in the document, by any element which is either
*
* - the root element (HTML),
* - positioned (absolutely or relatively) with a z-index value other than "auto",
* - a flex item with a z-index value other than "auto",that is the parent element display: flex|inline-flex,
* - elements with an opacity value less than 1. (See the specification for opacity),
@captainbrosset
captainbrosset / codeswing.json
Last active September 16, 2021 09:01
test gistpad codeswing
{
"scripts": [],
"styles": []
}
@captainbrosset
captainbrosset / badges.html
Created April 8, 2021 12:12
Color contrast improvement in DevTools
<!DOCTYPE html>
<meta charset="utf8">
<style>
html {
font-family: consolas, monospace;
font-size: 16px;
}
ul, li {
padding: 0;
@captainbrosset
captainbrosset / clip-mask.ts
Created March 5, 2021 09:42
Code snippets for the "How we built the DevTools Tooltips" article
// This is our mask element, a 100%/100% semi-transparent
// element sitting on the whole UI.
const mask = ...;
// Start defining a path used to clip the mask.
// First, go around the outer perimeter.
const polygon = ['0 0', '100% 0', '100% 100%', '0 100%', '0 0'];
// And then clip away the highlighted areas from the mask.
// To do this, we go around their shapes, in reverse direction.
@captainbrosset
captainbrosset / svg-clip.css
Created March 5, 2021 09:39
Code snippets for the "How we built the DevTools Tooltips" article
svg {
clip-path: path("M100,100L200,100L200,150L250,150L250,250L150,250L150,200L100,200L100,100Z");
}
@captainbrosset
captainbrosset / position.css
Created March 5, 2021 09:36
Code snippets for the "How we built the DevTools Tooltips" article
.tooltips-wrapper {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
@captainbrosset
captainbrosset / generate-path.ts
Created March 5, 2021 09:34
Code snippets for the "How we built the DevTools Tooltips" article
// Get the first segment's start point.
const points = [segments[0].start];
// And append the end point of each segment, one by one, after that.
for (const segment of segments) {
if (!segment) {
continue;
}
points.push(segment.end);
}