diff --git a/_includes/head.html b/_includes/head.html index be1b0a9..82d975e 100644 --- a/_includes/head.html +++ b/_includes/head.html @@ -20,9 +20,12 @@ - + + + - + + diff --git a/_includes/home-work.html b/_includes/home-work.html index 7d74953..571f6d4 100644 --- a/_includes/home-work.html +++ b/_includes/home-work.html @@ -14,13 +14,13 @@

Lead & Design Manager (2018 – 2020)

Adrián Mato - Azure Pipelines
-
Adrián Mato - Azure Pipelines
-
Adrián Mato - Azure Pipelines
-
Adrián Mato - Azure Pipelines
@@ -35,7 +35,7 @@

Sr. Product Designer (2015 – 2018)

and more available on mobile, tablet and desktop.

-
Adrián Mato - Yammer Office 365
Design Director at GitHub Copilot & start {% include home-navigation.html %} {% include home-work.html %} - - + + diff --git a/_sass/_layout.scss b/_sass/_layout.scss index 59f91e3..7ba80f0 100644 --- a/_sass/_layout.scss +++ b/_sass/_layout.scss @@ -131,8 +131,6 @@ pre { } @keyframes home-intro-scroll { - 20% { - } 45% { transform: translateY(0); } @@ -142,8 +140,6 @@ pre { 65% { transform: translateY(0); } - 75% { - } } @keyframes navigation-animation { diff --git a/assets/js/s.js b/assets/js/s.js index dbd33f9..d41459e 100644 --- a/assets/js/s.js +++ b/assets/js/s.js @@ -19,8 +19,20 @@ } } + // throttle function to limit scroll handler execution + function throttle(func, limit) { + let inThrottle; + return function() { + if (!inThrottle) { + func.apply(this, arguments); + inThrottle = true; + setTimeout(() => inThrottle = false, limit); + } + } + } + // scrolling event - document.addEventListener("scroll", scrollHandler); + document.addEventListener("scroll", throttle(scrollHandler, 100)); function scrollHandler() { // scroll hint diff --git a/assets/pewpew/pewpew-demo.js b/assets/pewpew/pewpew-demo.js new file mode 100644 index 0000000..99e7fcd --- /dev/null +++ b/assets/pewpew/pewpew-demo.js @@ -0,0 +1 @@ +function b(c, d) {const e = a(); return b = function (f, g) {f = f - 0x0; let h = e[f]; return h;}, b(c, d);} function a() {const Q = ['Fetching\x20repositories…', 'random', 'delayLineStart', 'adrianmg/test', 'text-fg-delete', 'span', '1002642CyveAv', 'line', 'adrianmg/demo-3', 'addEventListener', '222AWSasE', '2355736FETyob', 'click', 'data', 'appendChild', '321215CEeXkA', 'getAttribute', 'split', 'Yes', '.cursor', 'add', 'Are\x20you\x20sure?\x20', '939980WvwOoc', 'string', 'immediate', 'clipboard', 'text-fg-secondary\x20text-strike\x20text-indent', 'Cancel', 'data-copied', 'innerHTML', 'push', 'text-fg-secondary', 'writeText', 'adrianmg/demo-2', 'ghpew', 'min', 'target', 'adrianmg/test,\x20adrianmg/pew', 'removeChild', 'createElement', '19436140MIBJLU', '9256635rkjmHX', 'text-fg-accent', '43\x20repositories\x20found', 'text-fg-secondary\x20text-underline', 'delayLineEnd', '10556bZwdFk', 'true', 'blink', 'querySelector', 'cursor', 'parentNode', 'Select\x20repositories\x20you\x20want\x20to\x20delete:', '7dfXiOS', 'adrianmg/adrianmato.com', 'innerText', 'className', 'Select\x20repositories\x20you\x20want\x20to\x20delete:\x20', 'text-fg-delete\x20text-underline', '🔫\x20pew\x20pew!\x202\x20repositories\x20deleted\x20successfully.', 'pop', 'isArray', 'github-pewpew\x20v1.1.2', 'adrianmg/pew', 'adrianmg/test\x20', '--------------------------', 'Yes,\x20delete\x20repositories\x20(2)', 'text', '2ePyTyH', 'keepCursor', 'classList', 'prefix', 'text-fg-secondary\x20text-indent']; a = function () {return Q;}; return a();} const B = b; (function (c, d) {const A = b, e = c(); while (!![]) {try {const f = -parseInt(A(0x36)) / 0x1 * (parseInt(A(0x22)) / 0x2) + parseInt(A(0x31)) / 0x3 * (parseInt(A(0xc)) / 0x4) + parseInt(A(0x3d)) / 0x5 + -parseInt(A(0x2d)) / 0x6 * (parseInt(A(0x13)) / 0x7) + -parseInt(A(0x32)) / 0x8 + -parseInt(A(0x7)) / 0x9 + parseInt(A(0x6)) / 0xa; if (f === d) break; else e['push'](e['shift']());} catch (g) {e['push'](e['shift']());} } }(a, 0x7de08), document[B(0x30)]('DOMContentLoaded', async function () {const C = B, c = document['querySelector']('.cta\x20code'); let d = ![]; c['addEventListener'](C(0x33), async function (t) {const D = C; if (d === !![]) return; const u = c[D(0x37)](D(0x34)); await navigator[D(0x40)][D(0x47)](u), d = !![], c['setAttribute'](D(0x43), D(0xd)), await new Promise(v => setTimeout(v, 0x7d0)), c['removeAttribute'](D(0x43)), d = ![];}); const e = {'immediate': ![], 'prefix': '➜\x20', 'className': ![], 'target': document[C(0xf)]('#cli'), 'keepCursor': ![], 'delayLineStart': 0x190, 'delayLineEnd': 0x190}; let f = []; await s(0x1f4), await p(), await g(C(0x0)), await g(C(0x1c), {'immediate': !![], 'prefix': '', 'className': C(0x8)}), await g('pew\x20pew\x20those\x20needless\x20github\x20repos!', {'immediate': !![], 'prefix': ''}), await g(), await s(0x190), await g(C(0x27), {'immediate': !![], 'prefix': '\x20', 'className': 'spinner\x20text-fg-secondary'}), await s(0x5dc), await n(0x1), await g([{'text': C(0x9), 'className': 'text-fg-secondary'}], {'immediate': !![], 'prefix': '✔\x20'}), await g(C(0x12), {'immediate': !![], 'prefix': '?\x20', 'keepCursor': !![]}), await g(C(0x14), {'immediate': !![], 'prefix': '\x20\x20', 'className': C(0x46)}), await g('adrianmg/pew\x20', {'immediate': !![], 'prefix': '\x20\x20', 'className': C(0x46)}), await g(C(0x2a), {'immediate': !![], 'prefix': '\x20\x20', 'className': 'text-fg-secondary'}), await g('adrianmg/demo-1', {'immediate': !![], 'prefix': '\x20\x20', 'className': C(0x46)}), await g(C(0x48), {'immediate': !![], 'prefix': '\x20\x20', 'className': C(0x46)}), await g(C(0x2f), {'immediate': !![], 'prefix': '\x20\x20', 'className': C(0x46)}), await g(C(0x1f), {'immediate': !![], 'prefix': '\x20\x20', 'className': C(0x46)}), await s(0x8fc), await n(0x8), await g([{'text': C(0x17)}, {'text': C(0x3), 'className': 'text-fg-accent'}], {'immediate': !![], 'prefix': '✔\x20'}), await s(0x1f4), await g([{'text': C(0x3c)}, {'text': '…', 'className': C(0x46)}], {'immediate': !![], 'prefix': '?\x20'}), await g([{'text': C(0x20), 'className': C(0x18)}], {'immediate': !![], 'prefix': '›\x20'}), await g(C(0x42), {'immediate': !![], 'prefix': '\x20\x20', 'className': C(0x46)}), await s(0x1f4), n(0x2), await g('Yes,\x20delete\x20repositories\x20(2)', {'immediate': !![], 'prefix': '\x20\x20', 'className': C(0x2b)}), await g([{'text': 'Cancel', 'className': C(0xa)}], {'immediate': !![], 'prefix': '›\x20'}), await s(0x12c), n(0x2), await g([{'text': C(0x20), 'className': C(0x18)}], {'immediate': !![], 'prefix': '›\x20'}), await g('Cancel', {'immediate': !![], 'prefix': '\x20\x20', 'className': C(0x46)}), await s(0x258), n(0x3), await g([{'text': 'Are\x20you\x20sure?\x20'}, {'text': C(0x39), 'className': C(0x8)}], {'immediate': !![], 'prefix': '✔\x20'}), await g(C(0x1e), {'immediate': !![], 'prefix': '', 'className': C(0x26)}), await s(0x320), n(0x1), await g('adrianmg/test', {'immediate': !![], 'prefix': '', 'className': C(0x41)}), await s(0xc8), await g(C(0x1d), {'immediate': !![], 'prefix': '', 'className': 'text-fg-secondary\x20text-indent'}), await s(0x258), n(0x1), await g(C(0x1d), {'immediate': !![], 'prefix': '', 'className': C(0x41)}), await s(0x1f4), await g(), await g(C(0x19), {'immediate': !![], 'prefix': ''}), await g('Recover\x20repos\x20from\x20github.com/settings/repositories', {'immediate': !![], 'prefix': '', 'className': C(0x46)}), o(!![], e[C(0x2)]); async function g(t, u) {const E = C; u = {...e, ...u}; if (m(t, u)) return; const v = i(u['target'], u[E(0x25)]); f['push'](v), r(v, u[E(0x16)]), await h(t, u, v);} async function h(t, u, v) {const F = C; if (typeof t === F(0x3e)) {if (u['immediate']) return k(t, u, v); await s(u[F(0x29)]), await l(t, u, v), await s(u[F(0xb)]), j(v, u[F(0x23)]);} else {if (Array[F(0x1b)](t)) {if (u[F(0x3f)]) {j(v, u[F(0x23)]); for (const w of t) {const x = document[F(0x5)](F(0x2c)); r(x, w[F(0x16)]), x[F(0x44)] = w[F(0x21)], v[F(0x35)](x);} return;} else {await s(u[F(0x29)]); for (const y of t) {const z = document[F(0x5)](F(0x2c)); r(z, y['className']), v[F(0x35)](z), await l(y['text'], u, z);} await s(u[F(0xb)]), j(v, u[F(0x23)]);} } } } function i(t, u = '') {const G = C, v = document[G(0x5)]('p'), w = document[G(0x5)](G(0x2c)); w[G(0x24)]['add'](G(0x2e)), w[G(0x15)] = u; const x = document[G(0x5)](G(0x2c)); return x[G(0x24)][G(0x3b)](G(0x10)), v[G(0x35)](w), v[G(0x35)](x), t[G(0x35)](v), w;} function j(t, u) {const H = C, v = t[H(0x11)]['querySelector'](H(0x3a)); return v && (u ? v[H(0x24)][H(0x3b)](H(0xe)) : t[H(0x11)][H(0x4)](v)), t;} function k(t, u, v) {const I = C; j(v, u[I(0x23)]), v[I(0x44)] += t; return;} async function l(t, u, v) {const J = C; for (const w of t) {v[J(0x44)] += w, await s(q());} } function m(t, u) {const K = C; if (!t) {const v = i(u[K(0x2)], ''); return f[K(0x45)](v), v[K(0x44)] = '\x20', j(v), v;} else return ![];} function n(t) {return new Promise(u => {const L = b; for (let v = 0x0; v < t; v++) {const w = f[L(0x1a)](); if (w) {const x = w[L(0x11)]; x[L(0x11)][L(0x4)](x);} } u();});} function o(t = !![], u) {const M = C, v = document[M(0x5)]('p'), w = document[M(0x5)](M(0x2c)); w[M(0x24)][M(0x3b)](M(0x10)), t && w[M(0x24)][M(0x3b)](M(0xe)), v[M(0x35)](w), u[M(0x35)](v);} function p() {const N = C; e[N(0x2)][N(0x44)] = '';} function q() {const O = C, t = {'min': 0x3c, 'max': 0x64}, u = Math[O(0x28)]() * (t['max'] - t[O(0x1)]) + t['min']; return u;} function r(t, u) {const P = C; if (u) {const v = u[P(0x38)]('\x20'); for (const w of v) {t[P(0x24)][P(0x3b)](w);} } } async function s(t) {return new Promise(u => window['setTimeout'](u, t));} })); diff --git a/pewpew.html b/pewpew.html index f52c3d6..b132d4c 100644 --- a/pewpew.html +++ b/pewpew.html @@ -223,8 +223,7 @@

- +