Skip to content

Commit e88f1d2

Browse files
authored
Merge pull request #5 from levz0r/develop
Develop
2 parents a7de963 + fb1cb90 commit e88f1d2

31 files changed

Lines changed: 774 additions & 22 deletions

.github/workflows/auto-tag.yml

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
name: Auto Tag on Version Change
2+
3+
on:
4+
push:
5+
branches:
6+
- main
7+
paths:
8+
- 'package.json'
9+
10+
jobs:
11+
tag:
12+
runs-on: ubuntu-latest
13+
steps:
14+
- name: Checkout code
15+
uses: actions/checkout@v4
16+
with:
17+
fetch-depth: 0
18+
19+
- name: Get version from package.json
20+
id: version
21+
run: |
22+
VERSION=$(jq -r '.version' package.json)
23+
echo "version=$VERSION" >> $GITHUB_OUTPUT
24+
echo "tag=v$VERSION" >> $GITHUB_OUTPUT
25+
26+
- name: Check if tag exists
27+
id: check_tag
28+
run: |
29+
if git rev-parse "v${{ steps.version.outputs.version }}" >/dev/null 2>&1; then
30+
echo "exists=true" >> $GITHUB_OUTPUT
31+
else
32+
echo "exists=false" >> $GITHUB_OUTPUT
33+
fi
34+
35+
- name: Create and push tag
36+
if: steps.check_tag.outputs.exists == 'false'
37+
run: |
38+
git config user.name "github-actions[bot]"
39+
git config user.email "github-actions[bot]@users.noreply.github.com"
40+
git tag -a "${{ steps.version.outputs.tag }}" -m "Release ${{ steps.version.outputs.tag }}"
41+
git push origin "${{ steps.version.outputs.tag }}"
42+
43+
- name: Tag already exists
44+
if: steps.check_tag.outputs.exists == 'true'
45+
run: echo "Tag ${{ steps.version.outputs.tag }} already exists, skipping"

.github/workflows/publish.yml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,3 +183,21 @@ jobs:
183183
echo "- Chrome: ${{ steps.chrome-check.outputs.needs_publish == 'true' && '✓ Published' || '⊘ Skipped (up to date)' }}" >> $GITHUB_STEP_SUMMARY
184184
echo "- Firefox: ${{ steps.firefox-check.outputs.needs_publish == 'true' && '✓ Published' || '⊘ Skipped (up to date)' }}" >> $GITHUB_STEP_SUMMARY
185185
echo "- Edge: ${{ steps.edge-check.outputs.needs_publish == 'true' && '✓ Published' || '⊘ Skipped (up to date)' }}" >> $GITHUB_STEP_SUMMARY
186+
187+
# Create GitHub Release with built packages
188+
- name: Get version
189+
id: get_version
190+
if: startsWith(github.ref, 'refs/tags/')
191+
run: echo "version=${GITHUB_REF#refs/tags/v}" >> $GITHUB_OUTPUT
192+
193+
- name: Create GitHub Release
194+
if: startsWith(github.ref, 'refs/tags/')
195+
env:
196+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
197+
run: |
198+
gh release create "v${{ steps.get_version.outputs.version }}" \
199+
--title "v${{ steps.get_version.outputs.version }}" \
200+
--notes "See [CHANGELOG](https://github.com/${{ github.repository }}/blob/main/description.md#version-history) for details." \
201+
chrome-extension.zip#"Chrome Extension" \
202+
firefox-extension.zip#"Firefox Extension" \
203+
edge-extension.zip#"Edge Extension"

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,4 @@ node_modules/
44
dist/
55
*.zip
66
coverage/
7+
.env

CLAUDE.md

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# Claude Code Reminders
2+
3+
## Pre-Commit Checklist
4+
5+
**ALWAYS run before committing:**
6+
7+
1. **Format files**: `pnpm run format`
8+
2. **Run tests**: `pnpm run test`
9+
3. **Check linting**: `pnpm run lint`
10+
11+
## Git Workflow
12+
13+
- Always format before committing
14+
- Ensure all tests pass
15+
- Verify no linting errors
16+
17+
## Common Commands
18+
19+
```bash
20+
# Format all files
21+
pnpm run format
22+
23+
# Run tests
24+
pnpm run test
25+
26+
# Run linter
27+
pnpm run lint
28+
29+
# Build extensions
30+
pnpm run build
31+
```

_locales/en/messages.json

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
{
2+
"extensionName": {
3+
"message": "Markdown Printer",
4+
"description": "Name of the extension"
5+
},
6+
"extensionDescription": {
7+
"message": "Save web pages as Markdown files to your Downloads folder. No setup required!",
8+
"description": "Description of the extension"
9+
},
10+
"savePageButton": {
11+
"message": "Save Page as Markdown",
12+
"description": "Button text in popup"
13+
},
14+
"contextMenuTitle": {
15+
"message": "Save as Markdown",
16+
"description": "Context menu item title"
17+
}
18+
}

_locales/fr/messages.json

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
{
2+
"extensionName": {
3+
"message": "Markdown Printer",
4+
"description": "Name of the extension"
5+
},
6+
"extensionDescription": {
7+
"message": "Enregistrez des pages web en tant que fichiers Markdown dans votre dossier Téléchargements. Aucune configuration requise !",
8+
"description": "Description of the extension"
9+
},
10+
"savePageButton": {
11+
"message": "Enregistrer la page en Markdown",
12+
"description": "Button text in popup"
13+
},
14+
"contextMenuTitle": {
15+
"message": "Enregistrer en Markdown",
16+
"description": "Context menu item title"
17+
}
18+
}

_locales/he/messages.json

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
{
2+
"extensionName": {
3+
"message": "Markdown Printer",
4+
"description": "Name of the extension"
5+
},
6+
"extensionDescription": {
7+
"message": "שמור דפי אינטרנט כקבצי Markdown לתיקיית ההורדות. ללא הגדרות נדרשות!",
8+
"description": "Description of the extension"
9+
},
10+
"savePageButton": {
11+
"message": "שמור דף כ-Markdown",
12+
"description": "Button text in popup"
13+
},
14+
"contextMenuTitle": {
15+
"message": "שמור כ-Markdown",
16+
"description": "Context menu item title"
17+
}
18+
}

_locales/hi/messages.json

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
{
2+
"extensionName": {
3+
"message": "Markdown Printer",
4+
"description": "Name of the extension"
5+
},
6+
"extensionDescription": {
7+
"message": "वेब पेजों को Markdown फ़ाइलों के रूप में अपने डाउनलोड फ़ोल्डर में सहेजें। किसी सेटअप की आवश्यकता नहीं!",
8+
"description": "Description of the extension"
9+
},
10+
"savePageButton": {
11+
"message": "पेज को Markdown के रूप में सहेजें",
12+
"description": "Button text in popup"
13+
},
14+
"contextMenuTitle": {
15+
"message": "Markdown के रूप में सहेजें",
16+
"description": "Context menu item title"
17+
}
18+
}

build.js

Lines changed: 41 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,16 @@ const commonFiles = [
2626
'icon128.png',
2727
];
2828

29+
// Common directories to copy
30+
const commonDirs = ['_locales'];
31+
2932
// Manifest templates
3033
const chromeManifest = {
3134
manifest_version: 3,
32-
name: 'Markdown Printer',
35+
name: '__MSG_extensionName__',
3336
version: version,
34-
description: 'Save web pages as Markdown files to your Downloads folder. No setup required!',
37+
description: '__MSG_extensionDescription__',
38+
default_locale: 'en',
3539
author: 'Lev Gelfenbuim',
3640
homepage_url: 'https://github.com/levz0r/markdown-printer',
3741
permissions: ['activeTab', 'contextMenus', 'downloads', 'scripting'],
@@ -91,6 +95,31 @@ function copyFiles(sourceDir, destDir, files) {
9195
});
9296
}
9397

98+
// Function to copy directories recursively
99+
function copyDir(src, dest) {
100+
if (!fs.existsSync(src)) {
101+
console.warn(` ⚠ Warning: Directory ${src} not found`);
102+
return;
103+
}
104+
105+
ensureDir(dest);
106+
107+
const entries = fs.readdirSync(src, { withFileTypes: true });
108+
109+
for (const entry of entries) {
110+
const srcPath = path.join(src, entry.name);
111+
const destPath = path.join(dest, entry.name);
112+
113+
if (entry.isDirectory()) {
114+
copyDir(srcPath, destPath);
115+
} else {
116+
fs.copyFileSync(srcPath, destPath);
117+
}
118+
}
119+
120+
console.log(` ✓ Copied directory ${path.basename(src)}/`);
121+
}
122+
94123
// Function to create zip package
95124
function createZip(sourceDir, outputName) {
96125
try {
@@ -114,6 +143,11 @@ if (buildChrome) {
114143
copyFiles(sourceDir, chromeDir, commonFiles);
115144
}
116145

146+
// Copy common directories (like _locales)
147+
commonDirs.forEach(dir => {
148+
copyDir(dir, path.join(chromeDir, dir));
149+
});
150+
117151
// Write manifest
118152
fs.writeFileSync(path.join(chromeDir, 'manifest.json'), JSON.stringify(chromeManifest, null, 2));
119153
console.log(' ✓ Updated manifest.json');
@@ -137,6 +171,11 @@ if (buildFirefox) {
137171
copyFiles(sourceDir, firefoxDir, commonFiles);
138172
}
139173

174+
// Copy common directories (like _locales)
175+
commonDirs.forEach(dir => {
176+
copyDir(dir, path.join(firefoxDir, dir));
177+
});
178+
140179
// Write manifest
141180
fs.writeFileSync(
142181
path.join(firefoxDir, 'manifest.json'),

description-fr.md

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
# Markdown Printer - Français
2+
3+
Markdown Printer vous permet de sauvegarder n'importe quelle page web en tant que fichier Markdown en un seul clic. Parfait pour le développement IA, la documentation et la prise de notes.
4+
5+
## ✨ FONCTIONNALITÉS
6+
7+
• Aucune configuration requise - fonctionne immédiatement après l'installation
8+
• Préserve le formatage (titres, liens, blocs de code, listes, tableaux)
9+
• Enregistrez n'importe où avec la boîte de dialogue familière "Enregistrer sous"
10+
• Conversion rapide côté client
11+
• Menu contextuel clic droit + popup dans la barre d'outils
12+
• Ajoute des métadonnées (URL source, date d'enregistrement)
13+
• Sortie propre - supprime les scripts, styles et éléments indésirables
14+
15+
## 🎯 COMMENT ÇA MARCHE
16+
17+
1. Accédez à n'importe quelle page web
18+
2. Faites un clic droit et sélectionnez "Enregistrer en Markdown" OU cliquez sur l'icône de l'extension
19+
3. Choisissez où enregistrer dans la boîte de dialogue
20+
4. C'est fait ! Votre page est maintenant un fichier .md
21+
22+
## 📝 PARFAIT POUR
23+
24+
• Développement IA/LLM - Alimentez Claude, ChatGPT ou Cursor avec une efficacité de tokens 2-3x meilleure que HTML
25+
• Codage rapide - Sauvegardez rapidement les docs API, tutoriels et références pour votre assistant de codage IA
26+
• Construction de bases de connaissances - Archivez les docs techniques dans un format optimisé pour le contexte IA
27+
• Revue de code - Sauvegardez les PRs et discussions de code dans un format facilement analysable par les LLMs
28+
• Développeurs sauvegardant la documentation
29+
• Chercheurs archivant des articles
30+
• Étudiants prenant des notes
31+
• Créateurs de contenu sauvegardant des posts
32+
• Tous les amateurs de Markdown !
33+
34+
## 🤖 POURQUOI MARKDOWN POUR L'IA ?
35+
36+
Markdown est le format optimal pour alimenter les outils IA en contexte :
37+
• 2-3x plus de contenu dans les limites de tokens par rapport à HTML
38+
• Format propre et structuré que les LLMs comprennent parfaitement
39+
• Préserve les blocs de code, titres et liens sans le bruit HTML
40+
• Fonctionne parfaitement avec Cursor, Continue et autres outils de codage IA
41+
42+
## 🔒 CONFIDENTIALITÉ
43+
44+
Cette extension ne collecte, ne transmet ni ne partage aucune donnée utilisateur. Toute la conversion se fait localement dans votre navigateur. Aucune donnée ne quitte votre ordinateur.
45+
46+
## 🆓 GRATUIT ET OPEN SOURCE
47+
48+
Voir le code source sur GitHub : https://github.com/levz0r/markdown-printer
49+
50+
## ⭐ SUPPORT
51+
52+
Trouvé un bug ou une suggestion ? Signalez-le sur GitHub ou envoyez un email à hi@lev.engineer
53+
54+
---
55+
56+
## Historique des versions
57+
58+
### v1.1.0 (2025-10-10)
59+
60+
• Ajout de la prise en charge de l'internationalisation pour l'hébreu, l'hindi et le français
61+
• Ajout de la prise en charge des langues RTL (droite à gauche) pour l'hébreu et autres langues RTL
62+
• Ajout de l'affichage du numéro de version dans la popup
63+
• Amélioration du système de build pour inclure les fichiers de localisation
64+
65+
### v1.0.3 (2025-10-06)
66+
67+
• Correction de l'extraction de contenu pour fonctionner de manière fiable sur toutes les mises en page de site
68+
• Amélioration de la capture des sites de documentation complexes (Microsoft Learn, etc.)
69+
• Simplification de la sélection de contenu pour une meilleure compatibilité
70+
71+
### v1.0.2 (2025-10-06)
72+
73+
• Ajout de la capture de page complète avec défilement automatique
74+
• Charge automatiquement le contenu lazy-loaded avant la conversion
75+
• Fait défiler toute la page pour déclencher le contenu dynamique
76+
• Performance de défilement 3x plus rapide
77+
78+
### v1.0.1 (2025-10-05)
79+
80+
• Ajout de la prise en charge de Firefox avec compatibilité multi-navigateurs
81+
• Amélioration de la sortie Markdown en supprimant les éléments indésirables (scripts, styles, iframes, SVGs)
82+
• Ajout d'un système de build automatisé avec gestion des versions
83+
• Meilleure gestion des erreurs pour les pages protégées
84+
85+
### v1.0.0 (2025-10-01)
86+
87+
• Version initiale
88+
• Conversion Markdown en un clic
89+
• Prise en charge du menu contextuel clic droit
90+
• Interface popup dans la barre d'outils
91+
• Insertion de métadonnées (URL source, date de sauvegarde)
92+
• Intégration de la boîte de dialogue Enregistrer sous

0 commit comments

Comments
 (0)