mirror of
https://github.com/supermemoryai/supermemory.git
synced 2026-09-05 08:06:19 +00:00
Improved browser extension memory saving with better content handling and added markdown conversion. ### What changed? - Enhanced memory content handling in the background script to prioritize different content types (explicit content, highlighted text, markdown, HTML, or URL) - Added HTML to markdown conversion using TurndownService when saving entire pages - Improved HTML handling by removing script tags before processing - Updated the web app to display the saved URL from metadata when available - Added turndown library and its type definitions as dependencies
112 lines
3.1 KiB
TypeScript
112 lines
3.1 KiB
TypeScript
import type { DocumentWithMemories } from "@ui/memory-graph/types"
|
|
|
|
export const formatDate = (date: string | Date) => {
|
|
const dateObj = new Date(date)
|
|
const now = new Date()
|
|
const currentYear = now.getFullYear()
|
|
const dateYear = dateObj.getFullYear()
|
|
|
|
const monthNames = [
|
|
"Jan",
|
|
"Feb",
|
|
"Mar",
|
|
"Apr",
|
|
"May",
|
|
"Jun",
|
|
"Jul",
|
|
"Aug",
|
|
"Sep",
|
|
"Oct",
|
|
"Nov",
|
|
"Dec",
|
|
]
|
|
const month = monthNames[dateObj.getMonth()]
|
|
const day = dateObj.getDate()
|
|
|
|
const getOrdinalSuffix = (n: number) => {
|
|
const s = ["th", "st", "nd", "rd"]
|
|
const v = n % 100
|
|
return n + (s[(v - 20) % 10] || s[v] || s[0] || "th")
|
|
}
|
|
|
|
const formattedDay = getOrdinalSuffix(day)
|
|
|
|
if (dateYear !== currentYear) {
|
|
return `${month} ${formattedDay}, ${dateYear}`
|
|
}
|
|
|
|
return `${month} ${formattedDay}`
|
|
}
|
|
|
|
export const getSourceUrl = (document: DocumentWithMemories) => {
|
|
if (document.type === "google_doc" && document.customId) {
|
|
return `https://docs.google.com/document/d/${document.customId}`
|
|
}
|
|
if (document.type === "google_sheet" && document.customId) {
|
|
return `https://docs.google.com/spreadsheets/d/${document.customId}`
|
|
}
|
|
if (document.type === "google_slide" && document.customId) {
|
|
return `https://docs.google.com/presentation/d/${document.customId}`
|
|
}
|
|
if(document.metadata?.website_url) {
|
|
return document.metadata?.website_url as string
|
|
}
|
|
// Fallback to existing URL for all other document types
|
|
return document.url
|
|
}
|
|
|
|
// Simple hash function for consistent color generation
|
|
const hashString = (str: string): number => {
|
|
let hash = 0
|
|
for (let i = 0; i < str.length; i++) {
|
|
const char = str.charCodeAt(i)
|
|
hash = (hash << 5) - hash + char
|
|
hash = hash & hash // Convert to 32-bit integer
|
|
}
|
|
return Math.abs(hash)
|
|
}
|
|
|
|
// Generate consistent pastel background color based on document ID
|
|
export const getPastelBackgroundColor = (
|
|
documentId: string | undefined | null,
|
|
): string => {
|
|
// Handle null/undefined cases
|
|
if (!documentId) {
|
|
return "rgba(255, 255, 255, 0.06)" // Default fallback color
|
|
}
|
|
|
|
const hash = hashString(documentId)
|
|
|
|
// Define pastel color palette with good contrast against dark backgrounds
|
|
const pastelColors = [
|
|
// Soft pinks and roses
|
|
"rgba(255, 182, 193, 0.08)", // Light pink
|
|
"rgba(255, 218, 221, 0.08)", // Misty rose
|
|
"rgba(255, 192, 203, 0.08)", // Pink
|
|
|
|
// Soft blues and purples
|
|
"rgba(173, 216, 230, 0.08)", // Light blue
|
|
"rgba(221, 160, 221, 0.08)", // Plum
|
|
"rgba(218, 112, 214, 0.08)", // Orchid
|
|
"rgba(147, 197, 253, 0.08)", // Sky blue
|
|
|
|
// Soft greens
|
|
"rgba(152, 251, 152, 0.08)", // Pale green
|
|
"rgba(175, 238, 238, 0.08)", // Pale turquoise
|
|
"rgba(144, 238, 144, 0.08)", // Light green
|
|
|
|
// Soft oranges and yellows
|
|
"rgba(255, 218, 185, 0.08)", // Peach puff
|
|
"rgba(255, 239, 213, 0.08)", // Papaya whip
|
|
"rgba(255, 228, 196, 0.08)", // Bisque
|
|
|
|
// Soft corals and salmons
|
|
"rgba(250, 128, 114, 0.08)", // Salmon
|
|
"rgba(255, 127, 80, 0.08)", // Coral
|
|
"rgba(255, 160, 122, 0.08)", // Light salmon
|
|
]
|
|
|
|
// Use hash to consistently pick a color
|
|
const colorIndex = hash % pastelColors.length
|
|
return pastelColors[colorIndex] || "rgba(255, 255, 255, 0.06)"
|
|
}
|