this is the "(Default) Soft" theme I'm using as a base https://marketplace.visualstudio.com/items?itemName=janicweber.soft-grey-theme
and this is the one for dark mode https://marketplace.visualstudio.com/items?itemName=zhuangtongfa.Material-theme
this is the "(Default) Soft" theme I'm using as a base https://marketplace.visualstudio.com/items?itemName=janicweber.soft-grey-theme
and this is the one for dark mode https://marketplace.visualstudio.com/items?itemName=zhuangtongfa.Material-theme
open /Applications/Cursor.app/Contents/Resources/app/out/vs/platform/accessibilitySignal/browser/media
This guide is for macOS only.
(async function collectSpotifyPlaylist() { | |
const TRACK_SELECTOR = '._iQpvk1c9OgRAc8KRTlH'; | |
// Find the correct scroll container | |
let scrollContainers = document.querySelectorAll('[data-overlayscrollbars-viewport]'); | |
let scrollContainer = scrollContainers.length > 1 ? scrollContainers[1] : scrollContainers[0]; | |
if (!scrollContainer) { | |
console.error("Could not find the scrollable playlist container."); | |
return; |
export const storage = { | |
async get(key) { | |
return new Promise((resolve, reject) => { | |
chrome.storage.local.get(key, (result) => { | |
if (chrome.runtime.lastError) { | |
return reject(chrome.runtime.lastError) | |
} | |
resolve(result[key]) | |
}) | |
}) |
// Not sure whether it's genius or stupid, but it definitely works. | |
// The goal is to reduce chaining critical requests. | |
// By default in most cases Astro do this: html -> small chunk -> big chunk(s), which is kinda like Require.js, where you need to download file, to know what file you want to download. | |
// Code below takes this small chunk and inlines it into html, so we have at least one client-side request to make less: html -> big chunk(s). | |
// Additionally we can add "modulepreload" to start fetching those files faster (not sure where in this particular case it makes any sense, but was easy to add, so I did it). | |
// For sure this code isn't optimal, I just quickly hacked it just to have PoC, but I belive it won't hurt server-side performance that much. | |
// If you know some better way to do it, that doesn't require digging through HTML and replacing strings, please let me know. | |
import fs from "node:fs" | |
import path from "node:path" |
import axios from "axios" | |
import TTLCache from "@isaacs/ttlcache" | |
const domainsCache = new TTLCache({ | |
ttl: 1000 * 60 * 60 * 24, | |
}) as TTLCache<string, Set<string>> | |
interface ListConfig { | |
url: string | |
type: "text" | "json" |
// How to use this script? | |
// 1. Set LinkedIn language to engligh (I just didn't test it on others) | |
// 2. Go to https://www.linkedin.com/mynetwork/invite-connect/connections/ | |
// 3. Paste this script to the console and watch :) | |
[...document.querySelectorAll('.mn-connection-card')] | |
// Comment out line below, if you want to remove not only people joined your network in the last year | |
.filter(el => el.querySelector('.time-badge').innerText.search(/year/igm) === -1) | |
.filter(el => el.querySelector('.mn-connection-card__occupation').innerText.search(/recruit|rekru|hr|talent|headhunter|people|resource|hiring|build|job|researcher/gmi) !== -1) | |
.forEach((el, index) => { |
import path from 'node:path' | |
import fs from 'node:fs/promises' | |
import { globby } from 'globby' | |
const files = await globby('./dist/**/index.html') | |
await Promise.all( | |
files.map(async htmlPath => { | |
const pageStyles = [] | |
const stylesPaths = [] |
const fs = require('fs-extra') | |
const path = require('path') | |
const glob = require('glob') | |
const prettier = require('prettier') | |
const components = glob | |
.sync('src/*/*/*.js', { ignore: '**/*.{stories,stories_,spec}.js' }) | |
.map(file => ({ | |
src: file, | |
name: path.basename(file) |