Skip to content

Instantly share code, notes, and snippets.

@romainavalle
romainavalle / LangSwitcher.vue
Last active March 13, 2024 17:51
Dynamic slugs with nuxt/I18n SSR
<script setup>
const waitForEventOrTimeout = async (
eventEmitter,
eventName,
maxTime = 500,
) => {
return new Promise((resolve, reject) => {
let timer
const eventHandler = (...args) => {
console.log('waited eventHandler')
// https://gist.github.com/raphaelameaume
vec2 uvCover (vec2 uv, vec2 size, vec2 resolution) {
vec2 coverUv = uv;
vec2 s = resolution; // Screen
vec2 i = size; // Image
float rs = s.x / s.y;
float ri = i.x / i.y;
vec2 new = rs < ri ? vec2(i.x * s.y / i.y, s.y) : vec2(s.x, i.y * s.x / i.x);
vec2 offset = (rs < ri ? vec2((new.x - s.x) / 2.0, 0.0) : vec2(0.0, (new.y - s.y) / 2.0)) / new;
// https://gist.github.com/raphaelameaume
vec2 uvRotate (vec2 baseUv, float angle, vec2 center) {
vec2 uv = baseUv;
uv -= center;
mat2 m = mat2(cos(angle), -sin(angle), sin(angle), cos(angle));
uv = m * uv;
uv += center;
export function drawImageProp(ctx, img, x, y, w, h, offsetX, offsetY) {
if (arguments.length === 2) {
x = y = 0;
w = ctx.canvas.width;
h = ctx.canvas.height;
}
// default offset is center
offsetX = typeof offsetX === 'number' ? offsetX : 0.5;
offsetY = typeof offsetY === 'number' ? offsetY : 0.5;
@romainavalle
romainavalle / texture-resize.glsl
Last active January 17, 2023 14:27
texture resize glsl
float scale(float _val, float _scale) {
_val -= 0.5;
_val *= _scale;
_val += 0.5;
return _val;
}
vec2 coverImage(vec2 _pos) {
float rS = uRes.x / uRes.y;
float rI = uImageRes.x / uImageRes.y;
const rating = '★★★★★☆☆☆☆☆'.slice(5-stars,10-stars)
@romainavalle
romainavalle / border-radius.scss
Created June 10, 2022 09:56
border-radius scss class
.b-r{
border-radius: $radius;
overflow: hidden;
&.-animating{
-webkit-mask-image: -webkit-radial-gradient(white, black);
}
}
@romainavalle
romainavalle / write-redirects.js
Last active June 10, 2022 09:59
Dato write redirects module (to include in build module)
const { SiteClient } = require('datocms-client')
const client = new SiteClient(process.env.GRAPHQL_TOKEN)
const fs = require('fs')
export default function () {
client.items
.all({ 'filter[type]': 'your_redirect_modelApiKey' }, { allPages: true })
.then((records) => {
const array = records.map((el) => {
return {
@romainavalle
romainavalle / line-ellipsis.scss
Last active June 10, 2022 09:53
scss line ellipsis
.line-ellipsis{
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2; /* number of lines to show */
line-clamp: 2;
-webkit-box-orient: vertical;
}
@romainavalle
romainavalle / duotone.glsl
Last active June 10, 2022 09:54
duotone glsl
float g = greyscale(texture2D(tMap, uv).r;
vec3 finalColor = mix(colorA, colorB, g);