ajout de fonctionnalités à l'ui
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
last_checked: 1707227268
|
last_checked: 1707326193
|
||||||
data:
|
data:
|
||||||
-
|
-
|
||||||
title: 'macOS 14.0 Sonoma Apache Setup: Upgrading Homebrew'
|
title: 'macOS 14.0 Sonoma Apache Setup: Upgrading Homebrew'
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
last_checked: 1707227267
|
last_checked: 1707326192
|
||||||
data:
|
data:
|
||||||
feed:
|
feed:
|
||||||
-
|
-
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
margin-right: 8mm;
|
margin-right: 8mm;
|
||||||
|
|
||||||
@left-middle {
|
@left-middle {
|
||||||
content: counter(page);
|
content: counter(page); /* ICI À HARDCODER */
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
|||||||
@@ -1,12 +1,74 @@
|
|||||||
#chargement {
|
.uiContainer {
|
||||||
position: fixed;
|
left: 10px;
|
||||||
background-color: chocolate;
|
top: 10px;
|
||||||
padding: 5px;
|
min-width: 200px;
|
||||||
color: white;
|
background-color: rgba(255, 255, 255, 0.5);
|
||||||
top: 10px;
|
padding-bottom: 10px;
|
||||||
left: 10px;
|
box-shadow: 0 0 10px rgba(0, 0, 0, 0.3);
|
||||||
opacity: 1;
|
z-index: 9999;
|
||||||
transition: opacity 0.3s ease-out;
|
}
|
||||||
z-index: 9999;
|
|
||||||
}
|
.uiTitle {
|
||||||
|
padding: 5px 20px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
cursor: pointer;
|
||||||
|
background-color: rgba(255, 255, 255, 0.1);
|
||||||
|
transition: background-color 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.uiTitle:hover {
|
||||||
|
background-color: rgba(0, 0, 0, 0.1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.uiTitle p {
|
||||||
|
margin: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.uiContent {
|
||||||
|
padding: 5px 20px;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.loader {
|
||||||
|
display: inline-block;
|
||||||
|
width: 12px;
|
||||||
|
aspect-ratio: 1;
|
||||||
|
border-radius: 50%;
|
||||||
|
border: 2px solid;
|
||||||
|
border-color: #606d6e #fff;
|
||||||
|
animation: l1 1s infinite;
|
||||||
|
margin-right: 15px;
|
||||||
|
}
|
||||||
|
@keyframes l1 {to{transform: rotate(.5turn)}}
|
||||||
|
|
||||||
|
.pageAmount {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.jumpToPage, .pagesToDisplay {
|
||||||
|
margin-top: 10px;
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.jumpToPage input {
|
||||||
|
font-weight: normal;
|
||||||
|
width: 60px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.intervalContainer {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-content: space-between;
|
||||||
|
}
|
||||||
|
|
||||||
|
.intervalContainer p {
|
||||||
|
margin: 0;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
.intervalContainer input {
|
||||||
|
margin: 0 5px;
|
||||||
|
width: 60px;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
@@ -1,7 +1,6 @@
|
|||||||
if (debug) console.log('%cStart layout', boldLogging);
|
if (debug) console.log('%cStart layout', boldLogging);
|
||||||
|
|
||||||
const layoutScripts = [
|
const layoutScripts = [
|
||||||
'layout/ui.js', // DRAW UI AFTER PARSED (paged hook) BEFORE LAYOUT
|
|
||||||
'layout/getLastPage.js',
|
'layout/getLastPage.js',
|
||||||
'layout/alignTopMargin.js',
|
'layout/alignTopMargin.js',
|
||||||
'layout/removeEmptyParagraphs.js',
|
'layout/removeEmptyParagraphs.js',
|
||||||
@@ -13,6 +12,8 @@ const layoutScripts = [
|
|||||||
'layout/margins.js',
|
'layout/margins.js',
|
||||||
'layout/colors.js',
|
'layout/colors.js',
|
||||||
'layout/imgsFootnotes.js',
|
'layout/imgsFootnotes.js',
|
||||||
|
'layout/hardcodePageNumbers.js',
|
||||||
|
'layout/layoutIsDone.js'
|
||||||
];
|
];
|
||||||
|
|
||||||
loadScripts(layoutScripts, 0, true);
|
loadScripts(layoutScripts, 0, true);
|
||||||
|
|||||||
@@ -0,0 +1,15 @@
|
|||||||
|
// hardcoder les numéros de page plutôt que la propriété css de paged
|
||||||
|
// pour permettre d'exporter par intervales de pages
|
||||||
|
if (debug) console.log('start harcodePageNumbers');
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
|
||||||
|
let middleMargins = document.querySelectorAll('.pagedjs_left_page .pagedjs_margin-left-middle');
|
||||||
|
for (let middleMargin of middleMargins) {
|
||||||
|
middleMargin.innerHTML = middleMargin.parentNode.parentNode.parentNode.parentNode.dataset.pageNumber;
|
||||||
|
}
|
||||||
|
|
||||||
|
})();
|
||||||
|
|
||||||
|
if (debug) console.log('end hardcodePageNumbers');
|
||||||
|
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
// alerte que le rendu est fini et actualise l'ui
|
||||||
|
if (debug) console.log('%cBook is ready', boldLogging);
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
let loading = document.querySelector('.loading');
|
||||||
|
loading.innerHTML = 'Le livre est prêt';
|
||||||
|
|
||||||
|
let pageAmount = document.querySelectorAll('.pagedjs_page').length;
|
||||||
|
let pageAmountContainer = document.querySelector('.pageAmount');
|
||||||
|
pageAmountContainer.style.display = 'block';
|
||||||
|
pageAmountContainer.innerText = `${pageAmount} pages`;
|
||||||
|
|
||||||
|
let jumpToPage = document.querySelector('.jumpToPage');
|
||||||
|
jumpToPage.style.display = 'block';
|
||||||
|
|
||||||
|
let pagesToDisplay = document.querySelector('.pagesToDisplay');
|
||||||
|
pagesToDisplay.style.display = 'block';
|
||||||
|
})();
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
// afficher l'interface par dessus le livre
|
|
||||||
if (debug) console.log('start ui');
|
|
||||||
|
|
||||||
(function() {
|
|
||||||
|
|
||||||
// indication du chargement
|
|
||||||
let chargement = document.createElement('div');
|
|
||||||
chargement.setAttribute('id', 'chargement');
|
|
||||||
chargement.innerHTML = 'chargement';
|
|
||||||
chargement.style.color = "orange";
|
|
||||||
chargement.style.position = "fixed";
|
|
||||||
chargement.style.fontWeight = "bold";
|
|
||||||
chargement.style.zIndex = "9999";
|
|
||||||
document.querySelector('body').prepend(chargement);
|
|
||||||
|
|
||||||
})();
|
|
||||||
|
|
||||||
|
|
||||||
if (debug) console.log('end ui');
|
|
||||||
@@ -34,6 +34,10 @@ function loadScripts(scripts, index, isPagedLoaded) {
|
|||||||
constructor(chunker, polisher, caller) {
|
constructor(chunker, polisher, caller) {
|
||||||
super(chunker, polisher, caller);
|
super(chunker, polisher, caller);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
afterParsed(parsed) {
|
||||||
|
$.getScript(`${jsFolder}/ui.js`, function() {});
|
||||||
|
}
|
||||||
|
|
||||||
afterRendered(pages) {
|
afterRendered(pages) {
|
||||||
if (debug) console.log('%cAll pages render done', boldLogging);
|
if (debug) console.log('%cAll pages render done', boldLogging);
|
||||||
|
|||||||
@@ -0,0 +1,12 @@
|
|||||||
|
if (debug) console.log('%cStart drawing UI', boldLogging);
|
||||||
|
|
||||||
|
const uiScripts = [
|
||||||
|
'ui/drawContainer.js',
|
||||||
|
'ui/loading.js',
|
||||||
|
'ui/pageAmount.js',
|
||||||
|
'ui/jumpToPage.js',
|
||||||
|
'ui/pagesToDisplay.js',
|
||||||
|
'ui/toggleUiWhenPrinting.js',
|
||||||
|
];
|
||||||
|
|
||||||
|
loadScripts(uiScripts, 0, true);
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
// créer le container de l'interface utilisateur
|
||||||
|
if (debug) console.log('start drawContainer');
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
let uiContainer = document.createElement('div');
|
||||||
|
uiContainer.classList.add('uiContainer');
|
||||||
|
uiContainer.style.position = 'fixed';
|
||||||
|
|
||||||
|
let titleContainer = document.createElement('div');
|
||||||
|
titleContainer.classList.add('uiTitle');
|
||||||
|
|
||||||
|
let uiTitle = document.createElement('p');
|
||||||
|
uiTitle.innerText = '⚙️ Paramètres';
|
||||||
|
|
||||||
|
let uiArrow = document.createElement('p');
|
||||||
|
uiArrow.innerText = '▾';
|
||||||
|
|
||||||
|
titleContainer.append(uiTitle);
|
||||||
|
titleContainer.append(uiArrow);
|
||||||
|
|
||||||
|
let uiContent = document.createElement('div');
|
||||||
|
uiContent.classList.add('uiContent');
|
||||||
|
|
||||||
|
uiContainer.append(titleContainer);
|
||||||
|
uiContainer.append(uiContent);
|
||||||
|
|
||||||
|
document.querySelector('body').prepend(uiContainer);
|
||||||
|
})();
|
||||||
|
|
||||||
|
if (debug) console.log('end drawContainer');
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
// fonctionnalité pour accéder directement à une page voulue
|
||||||
|
if (debug) console.log('start jumpToPage');
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
let uiContent = document.querySelector('.uiContent');
|
||||||
|
|
||||||
|
let jumpToPageContainer = document.createElement('div');
|
||||||
|
jumpToPageContainer.classList.add('jumpToPage');
|
||||||
|
|
||||||
|
let jumpToPageTitle = document.createElement('div');
|
||||||
|
jumpToPageTitle.innerText = "Aller à la page"
|
||||||
|
|
||||||
|
let userInput = document.createElement('input');
|
||||||
|
userInput.setAttribute('type', 'text');
|
||||||
|
userInput.addEventListener('keydown', function(event) {
|
||||||
|
if (event.key === "Enter") {
|
||||||
|
jumpToPage(this.value);
|
||||||
|
userInput.value = "";
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
jumpToPageContainer.append(jumpToPageTitle);
|
||||||
|
jumpToPageContainer.append(userInput);
|
||||||
|
|
||||||
|
uiContent.append(jumpToPageContainer);
|
||||||
|
|
||||||
|
function jumpToPage(pageNumber) {
|
||||||
|
if (/^\d+$/.test(pageNumber)) {
|
||||||
|
pageNumber = parseInt(pageNumber);
|
||||||
|
let pagesArray = document.querySelectorAll('.pagedjs_page')
|
||||||
|
if (pageNumber <= pagesArray.length) {
|
||||||
|
pagesArray[pageNumber - 1].scrollIntoView({ behavior: "smooth", block: "start" });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})();
|
||||||
|
|
||||||
|
if (debug) console.log('end jumpToPage');
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
// état du chargement du document
|
||||||
|
if (debug) console.log('start loading');
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
let uiContent = document.querySelector('.uiContent');
|
||||||
|
let loading = document.createElement('div')
|
||||||
|
loading.innerText = 'Chargement...';
|
||||||
|
let loadingRing = document.createElement('div');
|
||||||
|
loadingRing.classList.add('loader');
|
||||||
|
loading.prepend(loadingRing);
|
||||||
|
loading.classList.add('loading');
|
||||||
|
uiContent.append(loading);
|
||||||
|
})();
|
||||||
|
|
||||||
|
if (debug) console.log('end loading');
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
// affiche le nombre de pages total du livre
|
||||||
|
if (debug) console.log('start pageAmount');
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
let uiContent = document.querySelector('.uiContent');
|
||||||
|
let pageAmount = document.createElement('div');
|
||||||
|
pageAmount.classList.add('pageAmount');
|
||||||
|
uiContent.append(pageAmount);
|
||||||
|
})();
|
||||||
|
|
||||||
|
if (debug) console.log('end pageAmount');
|
||||||
@@ -0,0 +1,75 @@
|
|||||||
|
// sélectionner l'interval de pages à afficher
|
||||||
|
// laisser les inputs vides pour afficher toutes les pages
|
||||||
|
if (debug) console.log('start pagesToDisplay');
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
let uiContent = document.querySelector('.uiContent');
|
||||||
|
|
||||||
|
let pagesToDisplayContainer = document.createElement('div');
|
||||||
|
pagesToDisplayContainer.classList.add('pagesToDisplay');
|
||||||
|
|
||||||
|
let pagesToDisplayTitle = document.createElement('div');
|
||||||
|
pagesToDisplayTitle.innerText = "Afficher l'interval de pages";
|
||||||
|
|
||||||
|
let intervalContainer = document.createElement('div');
|
||||||
|
intervalContainer.classList.add('intervalContainer');
|
||||||
|
|
||||||
|
let textFrom = document.createElement('p');
|
||||||
|
textFrom.innerText = "De";
|
||||||
|
|
||||||
|
let inputFrom = document.createElement('input');
|
||||||
|
inputFrom.setAttribute('type', 'text');
|
||||||
|
|
||||||
|
let textTo = document.createElement('p');
|
||||||
|
textTo.innerText = "à";
|
||||||
|
|
||||||
|
let inputTo = document.createElement('input');
|
||||||
|
inputTo.setAttribute('type', 'text');
|
||||||
|
inputTo.addEventListener('keypress', function(event) {
|
||||||
|
if (event.key === "Enter") displayPagesRange(inputFrom.value, inputTo.value)
|
||||||
|
})
|
||||||
|
|
||||||
|
let button = document.createElement('button');
|
||||||
|
button.innerText = 'Go';
|
||||||
|
button.addEventListener('click', function() { displayPagesRange(inputFrom.value, inputTo.value) });
|
||||||
|
|
||||||
|
intervalContainer.append(textFrom);
|
||||||
|
intervalContainer.append(inputFrom);
|
||||||
|
intervalContainer.append(textTo);
|
||||||
|
intervalContainer.append(inputTo);
|
||||||
|
intervalContainer.append(button);
|
||||||
|
|
||||||
|
pagesToDisplayContainer.append(pagesToDisplayTitle);
|
||||||
|
pagesToDisplayContainer.append(intervalContainer);
|
||||||
|
|
||||||
|
uiContent.append(pagesToDisplayContainer);
|
||||||
|
|
||||||
|
function displayPagesRange(start, end) {
|
||||||
|
let pages = document.querySelectorAll('.pagedjs_page');
|
||||||
|
|
||||||
|
if (/^\d+$/.test(start) && /^\d+$/.test(end) && start <= pages.length && end <= pages.length && start < end) {
|
||||||
|
// disable pages before start
|
||||||
|
if (start != 1) {
|
||||||
|
for (let i = 0; i < start - 1; i++) {
|
||||||
|
pages[i].style.display = 'none';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// enable pages between the interval
|
||||||
|
for (let j = start - 1; j < end; j++) {
|
||||||
|
pages[j].style.display = 'block';
|
||||||
|
}
|
||||||
|
// disable pages after end
|
||||||
|
if (end != pages.length + 1) {
|
||||||
|
for (let k = end; k < pages.length; k++) {
|
||||||
|
pages[k].style.display = 'none';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (start === '' && end === '') {
|
||||||
|
for (let page of pages) {
|
||||||
|
page.style.display = 'block';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})();
|
||||||
|
|
||||||
|
if (debug) console.log('end pagesToDisplay');
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
// désactiver l'ui à l'impression puis la réactiver
|
||||||
|
if (debug) console.log('start toggleUiWhenPrinting');
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
let uiContainer = document.querySelector('.uiContainer');
|
||||||
|
|
||||||
|
window.addEventListener("beforeprint", (event) => {
|
||||||
|
uiContainer.style.display = "none";
|
||||||
|
});
|
||||||
|
|
||||||
|
window.addEventListener("afterprint", (event) => {
|
||||||
|
uiContainer.style.display = "block";
|
||||||
|
});
|
||||||
|
|
||||||
|
})();
|
||||||
|
|
||||||
|
if (debug) console.log('end toggleUiWhenPrinting');
|
||||||
@@ -16,12 +16,11 @@
|
|||||||
|
|
||||||
{% block stylesheets %}
|
{% block stylesheets %}
|
||||||
{% do assets.addCss('https://unpkg.com/purecss@1.0.0/build/pure-min.css', 100) %}
|
{% do assets.addCss('https://unpkg.com/purecss@1.0.0/build/pure-min.css', 100) %}
|
||||||
{% do assets.addCss('https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css', 99) %}
|
{% do assets.addCss('theme://css/pagedjs.css', 99) %}
|
||||||
{% do assets.addCss('theme://css/pagedjs.css', 98) %}
|
{% do assets.addCss('theme://css/custom.css', 98) %}
|
||||||
{% do assets.addCss('theme://css/custom.css', 97) %}
|
{% do assets.addCss('theme://fonts/fonts.css', 97) %}
|
||||||
{% do assets.addCss('theme://fonts/fonts.css', 96) %}
|
{% do assets.addCss('theme://css/ui.css', 96) %}
|
||||||
{% do assets.addCss('theme://css/ui.css', 95) %}
|
{% do assets.addCss('theme://css/mep_carnet.css', 95) %}
|
||||||
{% do assets.addCss('theme://css/mep_carnet.css', 94) %}
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block javascripts %}
|
{% block javascripts %}
|
||||||
|
|||||||
Reference in New Issue
Block a user