Compare commits

...

1 Commits
v0.1.0 ... main

Author SHA1 Message Date
iGor milhit 1d49fe91d9
projet: complète le modèle
- Améliore l'usage des polices, pour se passer de TheSans.
- Utilise une version des scripts JS servis par le projet, que ce soit
  pour l'interface de pagedjs ou pour recharger le document dans
  l'interface web restant au même endroit dans le document.
- Ajoute la classe `.newpage` à la liste des sélecteurs provoquant un
  saut de page.
- Crée la classe `.exercise` pour mettre en avant les sections
  d'exercice.
- Utilise la variable pandoc `noscript` (à passer dans la commande
  pandoc avec -V noscript=true) lors de la production du PDF avec pandoc
  et le pdf-engine pagedjs-cli.

Co-Authored-by: iGor milhit <igor@milhit.ch>
2024-11-06 16:23:02 +01:00
7 changed files with 33430 additions and 12 deletions

1
.gitignore vendored
View File

@ -2,3 +2,4 @@ example.html
example.pdf example.pdf
test.* test.*
release/ release/
watched-files.txt

View File

@ -90,13 +90,16 @@ Pour générer directement le PDF, en utilisant `pagedjs` au moyen de `pandoc`
pandoc --citeproc \ pandoc --citeproc \
--to=pdf --pdf-engine=pagedjs-cli \ --to=pdf --pdf-engine=pagedjs-cli \
--css=../style.css \ --css=../style.css \
--template=../template.html \
--toc --toc-depth=2 \ --toc --toc-depth=2 \
-V noscript=true
--output=example.pdf example.md --output=example.pdf example.md
``` ```
- `--pdf-engine=` impose `pagedjs` pour la conversion en PDF. - `--pdf-engine=` impose `pagedjs` pour la conversion en PDF.
- Ici le `template` ne doit pas être utilisé, mais la feuille de style doit - `-V noscript=true` permet d'indiquer que la feuille de style de l'interface
l'être. web de `pagedjs` et les scripts javascript utile dans le navigateur web ne
soient pas utilisés, car ils perturbent la conversion par `pandoc`.
Pour générer le PDF en utilisant directement `pagedjs`: Pour générer le PDF en utilisant directement `pagedjs`:

View File

@ -31,10 +31,11 @@ Au terme de cet atelier, vous serez en mesure de:
&nbsp; &nbsp;
:::{#licence} :::{#licence}
![Logo de la licence CC BY-SA 4.0](../static/by-sa.svg) \ ![Logo de la licence CC BY-SA 4.0][logo] \
[CC BY-SA 4.0][cc-by-sa] --- [Sources][sources] [CC BY-SA 4.0][cc-by-sa] --- [Sources][sources]
::: :::
[logo]: ../static/by-sa.svg
[cc-by-sa]: https://creativecommons.org/licenses/by-sa/4.0/deed.fr "Texte de la licence en français" [cc-by-sa]: https://creativecommons.org/licenses/by-sa/4.0/deed.fr "Texte de la licence en français"
[sources]: https://git.milhit.ch/igor/bunige-pagedjs-template [sources]: https://git.milhit.ch/igor/bunige-pagedjs-template
@ -123,16 +124,20 @@ par exemple un livre.</p>
## Police ## Police
Pour que la police *TheSans* puisse s'appliquer correctement, elle doit être Bien que la police *TheSans* face partie de la charte de l'UNIGE et de la
installée sur votre système d'exploitation. Malheureusement, elle n'est pas Bibliothèque de l'Université, je trouve qu'elle n'est pas des plus lisible,
publiée avec une licence libre, ce qui en réduit l'usage. Les polices de notamment sur les titres. De plus, la licence de cette police, sauf erreur,
remplacement sont dans l'ordre *Open Sans*, *Arial*, *Helvetica*, ou la police n'est pas libre, ce qui en limite l'usage. C'est pourquoi je préfère spécifier
ici les polices *Noto Sans*, *Open Sans*, *Arial*, *Helvetica*, ou la police
*sans-serif* par défaut de votre système ou de votre navigateur. *sans-serif* par défaut de votre système ou de votre navigateur.
La police peut être facilement configurable au moyen du sélecteur `body` dans La police peut être facilement configurable au moyen du sélecteur `body` dans
le fichier `style.css` (règle déjà existante, dans la section *Définitions le fichier `style.css` (règle déjà existante, dans la section *Définitions
globales*). globales*).
Pour les éléments verbatim (`pre`, `code`), la police est *Lilex*, *Courier
New*, *Courier*, *monospace*.
## Titres ## Titres
Il y a une particularité avec les titres, qui découlent de l'usage de Il y a une particularité avec les titres, qui découlent de l'usage de
@ -149,6 +154,23 @@ Ainsi, un sélecteur unique est disponible pour appliquer un saut de page à ce
titre, quel que soit son texte. Une logique similaire est appliquée au titre de titre, quel que soit son texte. Une logique similaire est appliquée au titre de
la bibliographie (`bibliography`). la bibliographie (`bibliography`).
De la même façon, une ou plusieurs classes peuvent être attribuées:
```markdown
## Titre {.class}
```
Ainsi, on peut ajouter la classe `.newpage` qui insert un saut de page avant le
titre en question.
La même chose peut être faite avec des `<div>`, par exemple:
```markdown
:::{.class}{#id}
Du texte.
:::
```
## Citation ## Citation
> Tout dabord un bon éditeur est un éditeur avec coloration syntaxique. Avec > Tout dabord un bon éditeur est un éditeur avec coloration syntaxique. Avec

33251
paged.polyfill.js 100644

File diff suppressed because it is too large Load Diff

117
reload-in-place.js 100644
View File

@ -0,0 +1,117 @@
// Reload-in-place v2.0
// Nicolas Taffin + Sameh Chafik - 2020
// MIT License https://opensource.org/licenses/MIT
// A simple script to add your pagedjs project. On reload, it will make the web browser scroll to the place it was before reload.
// Useful when styling or proof correcting your book. Multi docs compatible and doesn't wait for complete compilation to go.
console.log("reload in place");
// separate human / machine scroll
var machineScroll = false;
// check pagedJS ended compilation
var pagedjsEnd = false;
class pagedjsEnded extends Paged.Handler {
constructor(chunker, polisher, caller) {
super(chunker, polisher, caller);
}
afterRendered(pages) {
pagedjsEnd = true;
}
}
Paged.registerHandlers(pagedjsEnded);
// set a "unique" filename based on title element, in case several books are opened
var fileTitle = document.getElementsByTagName("title")[0].text;
function getDocHeight() {
var D = document;
return Math.max(
D.body.scrollHeight, D.documentElement.scrollHeight,
D.body.offsetHeight, D.documentElement.offsetHeight,
D.body.clientHeight, D.documentElement.clientHeight
)
}
function saveAmountScrolled(){
var scrollArray = [];
var scrollTop = window.pageYOffset || (document.documentElement || document.body.parentNode || document.body).scrollTop
if (!machineScroll) {
var scrollLeft = window.pageXOffset || (document.documentElement || document.body.parentNode || document.body).scrollLeft
scrollArray.push({ X: Math.round(scrollLeft), Y: Math.round(scrollTop) });
console.log("Saved ", scrollArray);
localStorage[fileTitle] = JSON.stringify(scrollArray);
}
}
// on Load, blur or opacify the page, and try to join ASAP
// last saved position, or at least last compiled page
window.onload = moveFast;
function moveFast() {
machineScroll= true;
var styleEl = document.createElement('style');
document.head.appendChild(styleEl);
var styleSheet = styleEl.sheet;
styleSheet.insertRule('.pagedjs_pages { filter: blur(10px); }', 0);
//styleSheet.insertRule('.pagedjs_pages { opacity: 0.1; }', 0);
var savedData = localStorage.getItem(fileTitle);
if (savedData) {
var scrollArray = JSON.parse(savedData);
var scrollTop = scrollArray[0].Y;
var scrollLeft = scrollArray[0].X;
} else {
var scrollTop = 0;
var scrollLeft = 0;
}
var winheight= window.innerHeight || (document.documentElement || document.body).clientHeight
window.currentInterval = setInterval(function(){
var docheight = getDocHeight();
if ( scrollTop > 0 && scrollTop > docheight - winheight && !pagedjsEnd) {
window.scrollTo(scrollLeft,docheight);
} else {
window.scrollTo(scrollLeft,scrollTop);
clearInterval(window.currentInterval);
setTimeout(function(){
window.scrollTo(scrollLeft,scrollTop);
machineScroll = false;
styleSheet.deleteRule(0);
}, 500); // Delay to start
}
}, 50); // refresh frequency
};
// slow down a bit save position pace
var slowSave = debounce(function() {
if(!machineScroll) {
saveAmountScrolled();
}
}, 100); // save frequency
function debounce(func, wait, immediate) {
var timeout;
return function() {
var context = this, args = arguments;
var later = function() {
timeout = null;
if (!immediate) func.apply(context, args);
};
var callNow = immediate && !timeout;
clearTimeout(timeout);
timeout = setTimeout(later, wait);
if (callNow) func.apply(context, args);
};
};
// Scroll triggers save, but not immediately on load
setTimeout(function(){
window.addEventListener('scroll', slowSave);
}, 1000); // wait a bit before starting position save

View File

@ -28,7 +28,7 @@
* bibliothèque de l'UNIGE. */ * bibliothèque de l'UNIGE. */
@top-right { @top-right {
content: ""; content: "";
background-image: url("./static/bibliotheque-logo.svg"); background-image: url("static/bibliotheque-logo.svg");
background-position: right; background-position: right;
background-repeat: no-repeat; background-repeat: no-repeat;
background-size: 25%; background-size: 25%;
@ -56,7 +56,8 @@
* ************************ */ * ************************ */
body { body {
font-family: "TheSansOsF", "Open Sans", Arial, Helvetica, sans-serif; font-family: "Noto Sans", "Open Sans",
Arial, Helvetica, sans-serif;
/* Définit les trois variables de compteur nécessaires */ /* Définit les trois variables de compteur nécessaires */
counter-reset: figureNumber toc tableNumber; counter-reset: figureNumber toc tableNumber;
} }
@ -132,6 +133,7 @@
* dans la source markdown. */ * dans la source markdown. */
#first-section, #first-section,
#bibliography, #bibliography,
.newpage,
.footnotes { .footnotes {
break-before: page; break-before: page;
} }
@ -158,8 +160,9 @@
padding: none; padding: none;
} }
code { code {
font-family:'Courier New', Courier, monospace; font-family: 'Lilex Nerd Font', 'Courier New', Courier, monospace;
font-size: 90%; font-size: 90%;
line-height: 1.4;
background-color: #f2f1f1; background-color: #f2f1f1;
padding: 2px; padding: 2px;
border-radius: 5px; border-radius: 5px;
@ -173,6 +176,12 @@
} }
.footnote-ref { .footnote-ref {
text-decoration: none; text-decoration: none;
padding-left: 2px;
}
.footnote-back {
font-size: small;
text-decoration: none;
padding-left: .5em;
} }
figure { figure {
@ -198,6 +207,15 @@
content: "Figure " counter(figureNumber) ": "; content: "Figure " counter(figureNumber) ": ";
} }
.exercise {
background-color: #f2f1f1;
width: 90%;
margin: 0 auto;
border: 2px solid #d80669;
border-radius: .5em;
padding: 0 .5em;
}
blockquote { blockquote {
font-style: italic; font-style: italic;
} }

View File

@ -26,15 +26,21 @@ $endif$
$for(css)$ $for(css)$
<link rel="stylesheet" href="$css$" /> <link rel="stylesheet" href="$css$" />
$endfor$ $endfor$
<!-- Allow to use -V noscript=true with pandoc
in order to avoid to insert these lines
when they are unnecessary. -->
$if(noscript)$
$else$
<link href="/interface.css" rel="stylesheet" type="text/css" /> <link href="/interface.css" rel="stylesheet" type="text/css" />
<script src="https://unpkg.com/pagedjs/dist/paged.polyfill.js"></script> <script src="/paged.polyfill.js"></script>
<script src="/reload-in-place.js"></script>
$endif$
$for(header-includes)$ $for(header-includes)$
$header-includes$ $header-includes$
$endfor$ $endfor$
$if(math)$ $if(math)$
$math$ $math$
$endif$ $endif$
</head> </head>
<body> <body>
$for(include-before)$ $for(include-before)$