Skip to content

Instantly share code, notes, and snippets.

@davideast
davideast / bookmarklet.js
Created November 14, 2025 16:04
Dark Mode Bookmarklet
javascript:(function(){const id='gemini-dark-mode-script';if(document.getElementById(id)){document.getElementById(id).remove();}else{const css='html{filter:invert(1) hue-rotate(180deg);background:#fdfdfd}img,video,iframe,picture{filter:invert(1) hue-rotate(180deg)}';const style=document.createElement('style');style.id=id;style.textContent=css;document.head.appendChild(style);}})();
@davideast
davideast / firestore.gs
Last active September 23, 2019 03:08
Export to Firestore in AppScript
function main() {
var sheet = SpreadsheetApp.getActiveSheet();
// This is set as the collection name
var sheetName = sheet.getName();
var properties = getProperties(sheet);
var records = getData(sheet);
var firestore = getFirestore();
exportToFirestore(firestore, sheetName, records, properties);
}
@davideast
davideast / index.ts
Last active February 8, 2019 18:08
syncWithElements
// https://stackblitz.com/edit/typescript-h68plq?file=index.ts
import firebase from 'firebase/app';
import 'firebase/firestore';
import { syncWithElements } from './sync';
const app = firebase.initializeApp({ projectId: "alwaysbecaching" });
const unsub = syncWithElements(app, {
parent: document.querySelector('.container'),
@davideast
davideast / selectText.js
Created October 19, 2017 17:55
Select Text
function selectText(selection) {
var range = selection.getRangeAt(0);
function replaceRange(s, start, end, substitute) {
return s.substring(0, start) + substitute + s.substring(end);
}
var text = selection.baseNode.textContent.substring(range.startOffset, range.endOffset);
var mark = `<mark>${text}</mark>`;
range.startContainer.parentElement.innerHTML = replaceRange(range.startContainer.textContent, range.startOffset, range.endOffset, mark);
}
@davideast
davideast / index.ts
Last active August 10, 2017 17:18
Angular Universal Server
import { angularUniversal } from 'angular-universal-express';
import * as express from 'express';
const app = express();
// serving static requests
app.use(express.static(__dirname + '/static'));
// serving dynamic requests
app.get('/*', angularUniversal({
index: __dirname + '/index.html',
main: __dirname + '/main.<your-hash>.bundle',
@davideast
davideast / tsconfig.json
Created August 10, 2017 16:34
Angular Universal Server Build
{
"compilerOptions": {
"outDir": "../dist-server",
"sourceMap": true,
"moduleResolution": "node",
"target": "es5",
"lib": [ "es2017" ]
}
}
@davideast
davideast / build.sh
Last active August 10, 2017 17:17
Angular Universal + TS server build
# Build the browser bundle
ng build --prod
# Build the universal bundle
ng build --prod --app 1
# Move the browser index.html to generate the SSR version
mv dist/index.html dist-server/
# Treat dist as static within dist-server
mv dist/ dist-server/static
# Transpile TS server code
node_modules/.bin/tsc -p server/tsconfig.json
@davideast
davideast / build.sh
Last active August 10, 2017 17:18
Angular Universal Build
# Build the browser bundle
ng build --prod
# Build the universal bundle
ng build --prod --app 1
# Move the browser index.html to generate the SSR version
mv dist/index.html dist-server/
# Treat dist as static within dist-server
mv dist/ dist-server/static
@davideast
davideast / server.ts
Last active August 10, 2017 16:25
Angular Universal Express Sample
import { angularUniversal } from 'angular-universal-express';
import * as express from 'express';
const app = express();
/*
I usually copy my Angular CLI "dist" build into my "dist-server" build
and serve them as static files so they aren't treated as dynamic routes.
*/
app.use(express.static(__dirname + '/dist'));
app.get('/*', angularUniversal({
@davideast
davideast / FIREBASE_WISHLIST.md
Created June 18, 2017 16:32
Firebase Wishlist

COME BACK ADAM