A text-based bookmark manager rendered in a web page
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

235 lines
7.0 KiB

LISEZMOI est peut être en retard sur README
10 months ago
10 months ago
**Travail en cours, si vous rencontrez un soucis ennvoyez un mail à
contact@martinlemaire.fr ou ouvrez une issue ici**
Un gestionnaire de marque-page navigable généré à partir d'une base de
donnée textuel que l'on peut utiliser en temps que page d'accueil de
navigateur
Pour essayer avec une base de données BOOKMARKS fourni en exemple :
```
curl -O https://martinlemaire.fr/signet.sh/BOOKMARKS
```
ensuite
```
chmod +x signet.sh
./signet.sh
```
Le script produit le document html suivant :
index.html
![un gestionnaire de lien navigable](https://www.martinlemaire.fr/signet.sh/demo.png)
10 months ago
Un extrait de la base de donnée correspondante, composée d'entrées
séparées par des sauts de lignes avec des champs clé/valeur :
BOOKMARKS
```
URL: http://fileformats.archiveteam.org/wiki/HEX_(Unifont)
Name: HEX (Unifont) - Just Solve the File Format Problem
Description:
Tags: bbb, hex
Date: 1704636690
Color: Pink
10 months ago
URL: http://robhagemans.github.io/monobit/
Name: Hoard of bitfonts
Description: A python tool to manipulate bitmap fonts and do format conversions
10 months ago
Tags: bitmap, fonts
Date: 1704639859
URL: https://en.wikipedia.org/wiki/Wish_(Unix_shell)
Name: wish (Unix shell) - Wikipedia
Description:
Tags: gui, wish, tcl
Date: 1704646543
URL: https://www.kreativekorp.com/
Name: Rebecca G. Bettencourt
Description:
Tags: RGB, people,hide
Date: 1704648764
```
Avec cette base de données, signet colore le premier lien en rose et
cache le dernier car il contient le tag "hide"
10 months ago
# Présentation
10 months ago
## signet.sh
10 months ago
Signet.sh est un script shell qui transforme une base de donnée de liens
10 months ago
en une page web. La conversion est faite par une commande awk au sein
10 months ago
d'une déclaration here-doc qui est redirigé dans une page html.
J'ai créé ce script car je trouve le gestionnaire de marque-page de
10 months ago
firefox insatisfaisant, autant dans sa forme que dans le format utilisé
10 months ago
(sqlite). Ce script et les utilitaires autours proposent une
10 months ago
alternative pour archiver ses navigations internet.
Lecture en lien :
* FR
*
* EN
* https://www.inkandswitch.com/local-first/
10 months ago
## Format de la base de donné
Seule une Url est requise, le reste des champs sont
facultatifs, on compte les champs suivants :
10 months ago
* URL : ...
* Name : Par défaut la balise </title> de la page
* Description : ...
* Tags : mots-clés séparés d'une virgule
* Date : heure posix de l'ajout du lien
* Color : couleur css (nom, hex, rgb etc...)
10 months ago
## structure de la page index.html générée par signet.sh
```
<!DOCTYPE html>
<html>
<head>
<title>⛵ → YY-MM-DD, H:M</title>
<script defer src="jquery-3.6.4.js"></script>
<script defer src="script.js"></script>
<link rel="stylesheet" href="style.css">
<meta charset="utf-8" />
</head>
<body>
<div id="cc"></div>
<textarea autofocus></textarea>
<nav>
<p>tag (amount)</p>
</nav>
<ol>
<li>
<a href="URL">
<section color="Color">
<h5>URL</h5>
<h1>Name</h1>
<h2>Description</h2>
<h3>Tags</h3>
<h4>Date</h4>
</section>
<a>
</li>
</ol>
<footer></footer>
</body>
</html>
```
10 months ago
# Usage
## Ajouter un marque-page :
10 months ago
Pour ajouter un lien, je séléctionne l'url de la page avec Ctrl + l, la
copie et lance add.sh avec Super + i.
_Si quelqu'un sait récupérer l'url de la page courante du navigateur
sans avoir à la copier, ça économiserait deux étapes sur trois._
En résumé : Ctrl + l, Ctrl + c, Super + i
(ou plus court : Ctrl + l + c, Super + i)
Super + i car dans le fichier de configuration de mon gestionnaire de
fenêtre situé dans ~/.config/awesome/rc.lua j'ai les lignes suivantes :
```
awful.key({modkey}, "i", function()
awful.util.spawn_with_shell("add.sh") end,
{description = "Enregistre le lien copié dans signet.sh"}),
```
10 months ago
10 months ago
# Dependance~~s~~ :
10 months ago
Pour ajouter un lien via l'interface proposée, on aura besoin
d'installer dmenu ~~et htmlq~~.
10 months ago
* dmenu https://tools.suckless.org/dmenu/ (MIT/X)
* ~~htmlq https://github.com/mgdm/htmlq (MIT)~~ remplacé par une
commande awk
10 months ago
## dmenu
Dmenu est un menu interactif qui permet de sélectionner et d'écrire des
valeurs dans un menu. Ces valeurs peuvent provenir d'un programme
fournit en entrée un *pipe* "|", par exemple :
10 months ago
```
10 months ago
ls | dmenu
10 months ago
```
10 months ago
affiche un menu déroulant avec les fichiers de mon répertoire. Dans
notre script, pour stocker le choix dans une variable, on peut faire :
10 months ago
```
10 months ago
tags=$(echo "" | dmenu -p "Enter comma-separated tags:")
10 months ago
```
10 months ago
## ~~htmlq~~
Htmlq est un parseur d'html écrit en go. Peu importe quel parseur on
utilise, on dirait que chaque langage a le sien.
Il s'agit ici de fournir au programme une chaîne de caractère en entrée
et d'en filtrer des éléments html
10 months ago
Si en javascript pour récupérer tous les \<h1> enfants d'une \<section> on
10 months ago
peut faire
10 months ago
```
10 months ago
document.querySelectorAll('section h1')
10 months ago
```
10 months ago
En shell, c'est plus compliqué, htmlq est fait pour ça :
10 months ago
```
10 months ago
cat fichier.html | htmlq 'section h1'
10 months ago
```
10 months ago
Et pour récurer seulement le texte -- l'équivalent en javascript de
.innerHTML :
10 months ago
```
10 months ago
cat fichier.html | htmlq 'section h1' --text
10 months ago
```
10 months ago
On s'en sert pour récupérer la balise titre de la page à ajouter :
10 months ago
```
10 months ago
curl page.html | htmlq 'title' --text
10 months ago
```
10 months ago
Patch pré-sortie :
10 months ago
```
curl $url | awk -v RS='</title>' \
'/<title>/ {gsub(/.*<title>/, ""); print}' |\
tr -d '\n'
```
10 months ago
10 months ago
Pour l'instant cette étape est bloquante. Pour peu que la connection
internet coupe lors de l'ajout d'un lien, il faudra attendre la fin de
la tentative de curl pour passer au prochain champs du script :/ sorry !
10 months ago
# Structure du répertoire
10 months ago
* BOOKMARKS → Une base de données de liens
* add.sh → Un script pour rajouter un lien dans la base de données
10 months ago
* dmenu
* ./signet.sh
10 months ago
* signet.sh → Le script shell qui lit BOOKMARKS et génère index.html
10 months ago
* style.css → La feuille de style pour styliser index.html
10 months ago
* index.html → C'est la page html générée. Elle est composée de :
* \<textarea> pour chercher dans les marque-pages (ctrl + f)
* \<section> de tags \<p> et leurs quantités rangés dans l'ordre décroissant
* liste ordonnée croissante \<ol> en flex column-reverse de liens <\li>
* \<a> lien (href)
* \<h1> Name
* \<h2> Description
* \<h3> Tags
* \<h4> Date
* \<h5> lien (texte)
10 months ago
* script.js → Un peu de javascript pour:
* rechercher dans la \<textarea>
* ajouter les couleurs de fond aux entrées qui en ont
* si le champs de description est vide, ne pas
l'afficher
* formater les dates du temps posix au format AA-MM-JJ
10 months ago
10 months ago
/!\ Prochainement /!\
10 months ago
starred.sh → Un curl des repos de l'api github
https://api.github.com/users/[user]/starred , formaté de json à une
liste html sans jq !
10 months ago
# Autres gestionnaires de marque-pages :
- nb https://xwmx.github.io/nb/ (AGPL-3.0)
- ??
10 months ago
# Crédits
10 months ago
* Junicode (OFL-1.1)
10 months ago
https://psb1558.github.io/Junicode-font/
10 months ago
* dmenu (MIT/X)
10 months ago
https://tools.suckless.org/dmenu/
10 months ago
* jquery (MIT)
https://jquery.com/
10 months ago