Giter Club home page Giter Club logo

yeswiki-extension-publication's Introduction

Extension YesWiki publication


Une extension YesWiki pour créer des documents imprimables (format PDF) à partir d'une sélection de fiches Bazar et/ou de pages de contenu.


Cette page est une documentation technique. Une documentation sur son usage est détaillée sur cette page sur le site de YesWiki ou directement dans votre YesWiki s'il est à jour.

Introduction

La mise en page est effectuée par Paged.js (documentation), et la capture PDF par un navigateur dit "headless" (par défaut chromium).

Les publications générées sont de type livres/livrets, fanzines ou newsletter.

Assemblage de pages (action {{publicationgenerator}}) Publication PDF qui reprend les styles du wiki
Une page "publication", avec actions de téléchargement et prévisualisation (auteur·ices et admin) Bouton d'export à ajouter (action {{bazar2publication}})
Exemple de pliage de fanzine

Pré-requis technique

Avoir installé Chromium sur le serveur. Éventuellement, connaître le chemin d'accès vers l'exécutable s'il est différent de /usr/bin/chromium.

Pour installer Chrome sous Ubuntu/Debian :

sudo apt install -y --no-install-recommends chromium

Fonctionnement général

La génération d'une publication se fait en plusieurs étapes.

  1. Sélection des éléments constitutifs de la publication.
  2. Organisation des éléments constitutifs au sein de la publication.
  3. Génération et enregistrement de la publication.
  4. Production du PDF.

L'action {{publicationgenerator}} prend en charge les étapes 1, 2 et 3.

Le handler /pdf prend en charge l'étape 4.

Pour générer des livrets téléchargeables

Utiliser l'action {{publicationgenerator}}. Aucun paramètre n'est obligatoire.

Chaque publication est générée sous forme d'une page wiki. Le nom de cette page sera constitué de la valeur du paramètre pagenameprefix suivie du titre de l'ebook (par défaut Ebook).

On pourra utilement consulter la section Action {{publicationgenerator}} ci-après.

Pour générer des newsletters

Avant de pouvoir générer des newsletters, il faut créer un formulaire bazar suivant avec la structure suivante :

texte***bf_titre***Titre***60***255*** *** *** ***1***0***
texte***bf_description***Description***60***255*** *** *** ***0***0***
texte***bf_author***Auteur***60***255*** *** *** ***0***0***
textelong***bf_content***Contenu de la newsletter***20***20*** *** ***html***1***0***

Un fois ce formulaire créé, il faut trouver son id et utiliser l'action {{publicationgenerator}} avec, au minimum les paramètres suivants :

  • outputformat="newsletter"
  • formid="<id du formulaire>"

Soit, au minimum : {{publicationgenerator outputformat="newsletter" formid="<id du formulaire>"}}

Chaque newsletter générée sera enregistrée sous la forme d'une fiche bazar du formulaire <id du formulaire> sur le wiki.

On pourra utilement consulter la section Action {{publicationgenerator}} ci-après.

Actions YesWiki

L'extension publication ajoute deux actions à votre wiki.

Action Utilité
{{publicationgenerator}} Interface de sélection du contenu de la publication et de création du document imprimable (cf. Action {{publicationgenerator}})
{{publicationlist}} Liste des ebooks générés et imprimables (cf. Action {{publicationlist}})
{{bazar2publication}} Exporte les résultats d'une sélection de fiches Bazar en PDF (cf. Action {{bazar2publication}})
{{blankpage}} Insère une page vide à l'impression.
{{pagebreak}} Crée un saut de page à l'impression.
{{publication-template}} Combiné avec {{bazar2publication templatepage="…"}}, signale l'emplacement réservé à l'injection de contenus.

Ces actions s'ajoutent, comme toute action YesWiki, dans un contenu de page.

Action {{publicationgenerator}}

Cette action affiche une interface permettant de

  • sélectionner, parmi les fiches bazar et pages YesWiki, les éléments constituant la publication ;
  • organiser ces différents éléments au sein de la publication ;
  • créer le document imprimable résultant.

Les différents paramètres de cette action sont les suivants.

N.B — Dans les explications qui suivent, le terme "sélection" désigne la sélection des éléments constitutifs d'une publication.

groupselector

S'il est utilisé, ce paramètre doit l'être conjointement au paramètre titles.

Liste des groupes d'éléments proposés à la sélection.

Dans la liste,

  • les groupes doivent être séparés par des virgules ;
  • les pages YesWiki seront identifiées par le mot "pages" ; pour une page YesWiki, on peut préciser, entre parenthèses et après "pages",
    • une liste de mots clefs associés à ces pages,
    • les critères doivent être séparés par des "|" ;
  • un formulaire bazar est identifié par son numéro identifiant (exemple : "1"), pour un formulaire, on peut préciser, entre parenthèses et après son numéro,
    • une liste de critères de sélection dans ce formulaire,
    • les critères doivent être séparés par des "|".

Exemple – les éléments suivants

  • Les pages wiki "pages wiki", reprenant les pages du wiki ;
{{publicationgenerator titles="pages wiki" groupselector="pages"}}
  • Les pages wiki taggées "important", reprenant les pages du wiki catégorisées (au moyen d'un mot-clef) comme importantes ;
{{publicationgenerator titles="important" groupselector="pages(important)"}}
  • Les fiches associées à un formulaire "recettes de cuisine", reprenant les fiches du formulaire 1 ;
{{publicationgenerator titles="recettes de cuisine" groupselector="1"}}
  • Certaines fiches "livres", reprenant les fiches du formulaire 2 dont l'auteur est "Rabelais" ou dont la taille est "long" ;
{{publicationgenerator titles="livres" groupselector="2(bf_auteur=Rabelais|bf_taille=long)"}}
{{publicationgenerator titles="pages wiki, important, recettes de cuisine, livres" groupselector="pages, pages(important), 1, 2(bf_auteur=Rabelais|bf_taille=long)"}}

Exemple – Pour organiser les éléments proposés dans quatre groupes différents,

  • un groupe, nommé "pages wiki", reprenant les pages du wiki ;
  • un groupe, nommé "important", reprenant les pages du wiki catégorisées (au moyen d'un mot-clef) comme importantes ;
  • un groupe, nommé "recettes de cuisine", reprenant les fiches du formulaire 1 ;
  • un groupe, nommé "livres", reprenant les fiches du formulaire 2 dont l'auteur est "Rabelais" ou dont la taille est "long" ;
{{publicationgenerator titles="pages wiki, important, recettes de cuisine, livres" groupselector="pages, pages(important), 1, 2(bf_auteur=Rabelais|bf_taille=long)"}}

title

Titre des publications à générer.

Si ce paramètre est renseigné, le titre de la publication sera celui qu'il donne. Et l'utilisateur ne se verra pas proposer de choix lors de la sélection.

Si ce paramètre n'est pas renseigné ou est vide, l'utilisateur pourra, lors de la sélection, saisir un titre.

Exemple :

{{publicationgenerator title="Guerre et paix"}}

outputformat

Détermine le type de publication générée (ebook ou newsletter).

S'il n'est pas précisé, ce paramètre vaut "ebook".

Exemple – pour générer une newsletter il faut donc écrire :

{{publicationgenerator outputformat="newsletter"}}

formid

Paramètre spécifique et obligatoire dans le cas où on souhaite générer une newsletter.

Lorsqu'une newsletter est générée, elle est enregistrée sous forme d'une fiche bazar (voir à cet effet la section "Pour générer des newsletters"). Ce paramètre permet de spécifier le numéro identifiant du formulaire bazar en question.

Exemple – pour générer une newsletter avec le formulaire bazar "2", il faut donc écrire :

{{publicationgenerator outputformat="newsletter" formid="2"}}

pagestart

Nom de la page à utiliser comme page d'introduction de la publication.

Exemple :

{{publicationgenerator pagestart="MaPageWiki"}}

pageend

Nom de la page à utiliser comme page de fin de la publication.

Exemple :

{{publicationgenerator pageend="MaPageWiki"}}

pagenameprefix

Paramètre utilisé uniquement dans le cas d'un ebook.

Lorsqu'un ebook est généré, il est enregistré sous forme d'une page YesWiki (voir à cet effet la section "Pour générer des ebooks"). Ce paramètre permet de spécifier le préfixe automatiquement ajouté en début du nom de la page ainsi créée.

S'il n'est pas précisé, ce paramètre vaut "Ebook".

Exemple – pour générer un ebook avec le préfixe "MesEDoc", il faut donc écrire :

{{publicationgenerator outputformat="ebook" ebookpagenameprefix="MesEDoc"}}

addinstalledpage

Certaines pages de YesWiki ont un statut un peu particulier. Il s'agit des pages créées par défaut lor de l'installation du wiki. Parmi ces pages on trouve, les pages de menu, les entêtes, pieds de pages, mais également PagePincipale.

Si ce paramètre n'est pas présent, ou s'il est vide, ou s'il est égal à 0, lors de la sélection, on ne propose pas ces pages.

Toute autre valeur de ce paramètre, fera apparaître ces pages.

Exemple – pour faire apparaître les pages créées lors del 'installation du wiki, il peut écrire :

{{publicationgenerator addinstalledpage="1"}}

coverimage

Paramètre utilisé uniquement dans le cas d'un ebook.

Ce paramètre contient l'adresse de l'image de couverture utilisée en 1re page de couverture des ebooks générés.

Si ce paramètre n'est pas renseigné ou est vide, l'utilisateur pourra, lors de la sélection en vue d'un ebook, choisir une image de couverture.

Exemple :

{{publicationgenerator outputformat="ebook" coverimage="monImage.jpg"}}

title

Titre par défaut des publications à générer.

Exemple :

{{publicationgenerator title="Guerre et paix"}}

desc

Description par défaut des publications à générer.

Exemple :

{{publicationgenerator desc="Les nouveautés du mois dernier"}}

author

Auteur·ices par défaut des publications à générer.

Exemple :

{{publicationgenerator author="George Sand"}}

chapterpages

Liste des noms des pages YesWiki à utiliser comme chapitre des publications à générer.

Dans la liste, les noms doivent être séparés par des virgules.

Si ce paramètre est renseigné, les pages ainsi désignées seront proposées par défaut dans la publication lors de la sélection.

L'utilisateur pourra, lors de la sélection, choisir les pages qu'il souhaite mettre à la suite de chaque chapitre.

Exemple :

{{publicationgenerator chapterpages="DebutChapitreUn, DebutChapitreDeux, DebutChapitreTrois"}}

readonly

Spécifie si les titre, description, auteur·ices, image et chapitres sont modifiables par l'utilisateur.

Les paramètres d'impression restent modifiables dans tous les cas.

Exemple :

{{publicationgenerator readonly}}

Action {{publicationlist}}

Cette action liste les ebook générés.

pagenameprefix

Le paramètre pagenameprefix précise le préfixe par lequel commencent les noms de pages correspondant à des ebooks.

S'il n'est pas précisé, ce paramètre vaut "Ebook".

Exemple – Pour lister les ebooks dont le préfixe est "MesEDoc", il faut donc écrire :

{{publicationlist outputformat="ebook" pagenameprefix="MesEDoc"}}

Action {{bazar2publication}}

Cette action exporte les résultats d'une sélection de fiches Bazar en PDF en cliquant sur un bouton. Le téléchargement débute au bout de quelques secondes. Il n'y a pas d'étape de personnalisation.

L'action est à placer à côté d'une action {{bazar}} ou {{bazarliste}}.

Tous les paramètres sont facultatifs.

title

Personnalise le texte affiché sur le bouton.

{{bazar2publication title="Imprimer ces résultats"}}

icon

Par défaut : fa-book.

Personnalise l'icône affichée (par défaut, fa-book).

À choisir parmi le catalogue Font Awesome.

{{bazar2publication icon="fa-cloud-download"}}

templatepage

Par défaut, chaque fiche Bazar démarre sur une nouvelle page.

Cet attribut importe la configuration d'une page Ebook : thème et style de présentation, ainsi que les éléments de configuration saisis dans le formulaire de création.

{{bazar2publication templatepage="EbookModelePourBazar"}}

Un Ebook modèle se crée comme tout autre publication, à partir d'une action {{publicationgenerator}}.

Par défaut, le contenu de la page modèle est remplacé par les fiches Bazar. L'utilisation de l'action {{publication-template}} dans la page modèle vous donne la liberté de choisir l'emplacement où les fiches Bazar seront insérées.

Action {{publication-template}}

Cette action se place dans une page Ebook dont vous voulez vous servir comme modèle de publication.

Ce modèle de publication s'utilise notamment pour personnaliser un export depuis une liste Bazar à l'aide du bouton généré par l'action {{bazar2publication}}.

{{include page="EbookPageIntro" class="publication-cover"}}
{{include page="EbookRemerciements"}}
<mark>{{publication-template}}</mark>
{{include page="EbookPageFin" class="publication-end"}}

Handlers (ou suffixes) de page

L'extension publication ajoute deux handlers aux pages de votre wiki.

handler Utilité
/pdf Télécharge un document en PDF
/preview Prévisualise un document

Ces fonctions sont accessibles depuis le sous-menu "partager" du bas de page.

Adapter templates et contenus

Vous souhaitez escamoter certaines parties de vos pages wiki lors de l'édition du pdf

à priori, deux class permettent de cacher des parties du votre wiki :

  • ""<div class="no-print"> ""bla bla à supprimer à l'impression""</div>""
  • ""<div class="hide-print"> ""bla bla à supprimer à l'impression""</div>""

Surcharger les styles d'impression par défaut

Des styles d'impression par défaut sont ajoutés pour vous donner le moins de travail possible lors de la création d'une publication. Il y a plusieurs mécanismes pour personnaliser vos styles d'impression en créant des feuilles de styles (fichiers .css) :

Répertoire Noms possibles À quoi ça s'applique ?
custom/tools/publication/*.css Peu importe Toute publication, peu importe le thème
custom/tools/publication/print-layouts/*.css fanzine.css, book.css Seulement les fanzines, ou les livres/livrets, peu importe le thème
themes/NOM_DU_THEME/tools/publication/*.css Peu importe Toute publication, pour un thème donné
themes/NOM_DU_THEME/tools/publication/print-layouts/*.css fanzine.css, book.css Seulement les fanzines, ou les livres/livrets, pour un thème donné

Configuration serveur (wakka.config.php)

Remarque : les réglages principaux sont exposés dans l'action {{ editconfig }}.

Le fichier de configuration [wakka.config.php][wakka-config] accepte plusieurs paramètres pour ajuster le rendu PDF à votre infrastructure informatique.

Clé de configuration Valeur par défaut Utilité
htmltopdf_path /usr/bin/chromium Indique l'emplacement du programme chargé
htmltopdf_options ['windowSize' => [1440, 780], 'noSandbox' => true] Options par défaut passées au navigateur embarqué
htmltopdf_service_url Adresse du serveur YesWiki qui fera le rendu à distance
htmltopdf_service_authorized_domains Si votre serveur partage les fonction de générateur de pdf, il faut lui indique les nom de domaines autorisés
htmltopdf_base_url Si votre serveur n'a pas accès au wiki via la valeur de base_url

… avec Chrome sur votre serveur

array(
    ...
    'htmltopdf_path' => '/usr/bin/chrome',
    'htmltopdf_options' => ['windowSize' => [1440, 780], 'noSandbox' => true],
    ...
);

Vous avez un YesWiki qui est autorisé à utiliser le service pdf de https://example.org/yeswiki

array(
    ...
    'htmltopdf_service_url' => 'https://example.org/yeswiki/?PagePrincipale/pdf',
    ...
);

Vous avez un YesWiki qui est un service pdf pour d'autres wikis

Vous devez indiquer les noms de domaine que vous autorisez :

array(
    ...
    'htmltopdf_service_authorized_domains' => ['example.org', 'youpi.com', 'toto.fr'],
    ...
);

Avec Docker / reverse-proxy

⚠️ Utilisation avancée

La génération de PDF va échouer sur un environnement technique où YesWiki et Chromium sont dans un conteneur Docker — ou un reverse-proxy — qui n'a pas accès au réseau externe, c'est-à-dire au wiki via l'URL configurée dans base_url du wakka.config.php.

htmltopdf_base_url sera utilisée comme substitut pour accéder aus contenus du wiki (pages, images, vidéos, etc.).

// docker run -p 8000:80 …
array(
    // URL exposée par le conteneur Docker (extérieur)
    'base_url' => 'https://example.com:8000/?,
    ...
    // URL à l'intérieur du conteneur Docker (port interne)
    'htmltopdf_base_url' => 'http://localhost:80/?',
);

English

A YesWiki extension to create printable documents (PDF format) from a selection of Bazar entries and/or content pages.


This page is a technical documentation. Documentation n the usage of the extension is avaialable on this page (fr) on the YesWiki website or directly into your YesWiki (fr) if it is up-to-date.

Introduction

Pagination is done by Paged.js (documentation), and PDF print by a "headless" browser by default chromium).

Generated publications are of type books/booklets, fanzines or newsletter.

Installation

See dedicated documentation

yeswiki-extension-publication's People

Contributors

acheype avatar daiko avatar dependabot[bot] avatar furax37 avatar j9rem avatar louisequincaillere avatar magalied avatar melaniemichel avatar mrflos avatar srosset81 avatar sruffin19 avatar sylvainboyer avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

yeswiki-extension-publication's Issues

N'importe quelle page contenant un `{{bazar*}}` est prise pour une liste de résultats Bazar

Le test qui vérifie si la page est un résultats de liste Bazar pense que c'est implicitement lié à l'action {{bazar2publication}}.

if ($wiki->HasAccess('read') && preg_match('#{{bazar#', $wiki->page['body'])) {

Or, on devrait vérifier aussi la présence d'une action {{ bazar2publication }} pour distinguer une page solo, d'une liste bazar.

Ça entraine/aggrave #28.

Impossible de configurer le timeout du serveur chroimum

Le recours a {{bazar2publication}} génère souvent un résultat de type "Operation timed out (5s)" sur notre serveur dès qu'il y a plus de 5 ou 6 fiches à exporter. Nous avons bien essayé d'augmenter les valeurs de timeout sur la base de la PR de @mrflos #38 mais sans que cela ne résolve le problème...qui demeure incohérent puisque tous les temps configurés sont à plus de 5s...

Rendre bazar2Publication configurable

Il serait pertinnent de pouvoir sélectionner les champs que l'on veut intégrer au PDF généré (dans un templateà en les cochant pour éviter d'avoir tous les champs afin de permettre d'écarter des informations nons essentielles de la version imprimée

Meilleure respect de la mise en page lors du /pdf

Actuellement, lorsque l'on utilise le /pdf (ou son équivalent en bas de page) un pdf est généré. Il ne respecte pas le rendu graphique de la page. L'idée serait que le pdf généré respecte au mieux la mise en page existante en coupant si besoin avec un beau saut de page. (presque comme un screenshot).

Revoir la règle de cache du PDF

Aujourd'hui, le cache expire au bout d'un certain temps (X heures/minutes).


  • le PDF est (re)créé si le cache n'est pas trouvé
  • le PDF est recréé si l'option debug + utilisateur admin/auteur·ice est détectée
  • le PDF est recréé si le checksum de l'assemblage + version de l'extension + version yeswiki a changé (et le persiste en métadonnées)

Meilleure gestion du chapitrage + page de couverture et de fin

Lorsqu'on utiliise l'outil publication pour générer un ebook et que l'on y place des pages chapitre on rencontre :

  • la génération "peu fidèle" en pdf du design réalisé sur la page chapitre (voir issues #7)
  • son insertion étrange dans le flux de pages de l'ebook généré (saut de page étrange)
  • la création automatique d'un verso de chapitre vierge (une page blanche dans le flux)

La page couvreture devrait automatiquement créer page verso vierge et insérer une feuille RV de garde vierge.
Ensuite viendrait s'insérer automatiquement une [page de grand titre](https://fr.wikipedia.org/wiki/Page_(livre) : càd une page contenant le nom de l'auteur, le titre de l'œuvre, et autres infos fournies (si fourni : prévu dans l'outil publication). Au verso de cette page (si infos fournies / n'existe pas pour l'instant dans l'outil publication !!! ) se trouveraient les données de catalogage, d'ISBN et de copyright.

Ensuite le premier chapitre et c'est parti

La page de couverture comprendrait d'abord une page vierge et au verso la page de couverture fournie (c'est demandé via l'outil publication)

Le saut de page est intégré comme page à inclure, et non comme une macro

Aujourd'hui, un saut de page est ajouté dans le corps de page comme suit :

{{include page="{{pagebreak}}" class=""}}

L'attente est qu'il soit inclut plutôt comme ça :

{{pagebreak}}

Exemple complet de ce qui cloche

{{include page="Tag1" class=""}}
{{include page="{{pagebreak}}" class=""}}
{{include page="Tag2" class=""}}

Exemple complet de ce qui est attendu :

{{include page="Tag1" class=""}}
{{pagebreak}}
{{include page="Tag2" class=""}}

Feature Request, idée de Romain : fonction panier

@RomainLalande propose (@oncletom ne pas en tenir compte)

Hello,

En testant publication, je me suis dit qu'une piste intéressante d'évolution serait de pouvoir en naviguant sur un wiki ajouter avec un "+" à coter des fiches les fiches que l'on veut ajouter dans son panier, qui sont ainsi sauvegardée quand on va sur la page qui génère l'ebook.
Un peu comme e l'e-commerce quoi x)

Voilà voilà !

Page de couverture, de fin et pages de chapitre "à la demande et sur mesure"

Afin de permettre un découpage plus sympa des ebooks avec beaucoup de pages, il serait sympa de pouvoir générer selon besoin un certains nombre de pages chapitres :

  • sur lesquelles on aurait la main en terme de contenu (genre une page wiki à remplir avec ce qu'on veut)
  • et qu'on peut placer là où on veut quand on construit l'ebook

Cool aussi avec la page de couverture :

  • soit en mode automatique : génération de la page "par défaut"
  • soit en mode "sous contrôle" : une pagewiki que je complète avec les infos que je veux (je = celui qui porte le projet et pas le passant qui se génèr el'ebook)

idem pour la page de fin :

  • automatique
  • sous contrôle (par exmple pour placer les logos qui vont bien et sur lequel l'user de base qui génère son ebook ne doit pas avoir la main)

une exemple avait été tenté lors de coconstruire https://co-construire.be/?GenererEbook

L'idée serait de voir comment on peut fusionner ce travail spécifique de @mrflos avec celui entrepris par @oncletom récemment #9

Une page de type Ebook affiche des informations utiles, plutôt qu'un assemblage d'`{{include …}}`

Actuellement, la page présente l'assemblage des {{include …}}, avec 2 boutons "Preview" et "PDF".

Cette page est liée aux résultats de recherche, à l'action {{ebooklist}}… mais n'a aucun contexte, et n'a pas vocation à être regardée comme telle.


L'intention est de remplacer le contenu affiché par :

  • un message d'information comme quoi c'est un document imprimable (titre + description + auteur·ices)
  • un lien vers la preview si auteur·ice/admin
  • un lien de téléchargement
  • un lien de partage (quand #19 sera réalisé)

Transformer un résultat interactif de `{{bazar vue="consulter"}}` en publication

  • Ajouter un script sur une vue bazar/bazarliste
  • Ce script ajoute un lien à la suite des résultats, qui relie vers une page connue qui contient une action {{ebookgenerator}} (aka "page Ebook")
  • L'URL vers la "page Ebook"contient la liste des tags correspondant aux items visibles de la liste ($('.bazar-entry[data-id_fiche]:not([class*="icon"]):visible').toArray().map(element => element.dataset.id_fiche).join(','))
  • La "page Ebook" interprète le paramètre d'URL comme un paramètre chapterpages, et pré-remplit la liste des pages en fonction
  • Tenter avec un webcomponent, pour le fun

image

Version minimale :

{{bazar-to-ebook page="Ebook"}}

En personnalisant le libellé et l'icône :

{{bazar-to-ebook page="Ebook" class="fas fa-book" label="Exporter en ebook" }}

Basculer vers un mode "Imprimer en PDF" depuis le navigateur lorsque chromium n'est pas utilisable

L'appel à la route :pageTag/pdf aurait alors 3 comportements :

  • si $wakkaConfig['htmltopdf_path'] est un exécutable, piloter la génération côté serveur
  • si $wakkaConfig['htmltopdf_service_url'] est renseigné, déléguer l'appel à cette URL
  • sinon, afficher le contenu de ``:pageTag/preview`, les pages les unes sous les autres, avec une instruction en en-tête pour "Imprimer › Enregistrer au format PDF"

browser PDF generation stops to work with debian 11 chromium version 111

I suppose it's a regression in chromium but after upgrading chromium package on debian 11 (to version 111), it stopped to work for the pdf generation.

Workaround :

apt remove chromium chromium-common # remove latest version
apt install chromium=108.0.5359.94-1~deb11u1 chromium-common=108.0.5359.94-1~deb11u1 # install working version
apt-mark hold chromium # block updates for this package
apt-mark hold chromium-common # block updates for this package

This is probably not the best way to solve this problem, but it can probably help

L'export derrière un proxy tente d'appeler une URL de wiki injoignable

Cas de l'utilisation de Docker par exemple :

  • mon wiki est appelé sur ma machine en localhost:81
  • ce port est mappé vers un conteneur, qui lui tourne en localhost:80

Et bien quand chrome/chromium est lancé dans le conteneur, il cherche à joindre localhost:81, qui est injoignable.

Ça entraine la fameuse erreur où __is_yw_publication_ready() est undefined.

Une astuce serait soit de "détecter" la différence d'host entre l'appelant et le serveur local… ou de configurer explicitement l'url de base à appeler, genre :

// wakka.config.php
$wakkaConfig = array(
  "base_url": "http://localhost:81/?",
  // ...
  "htmltopdf_base_url": "http://localhost:80/?"
);

Documenter l'utilisation de l'extension sur la doc utilisateur YesWiki

En tant que https://yeswiki.net/?DocumentationExtensionPublication

  • Mentionner que le README de l'extension est la doc technique pour rendre l'extension opérationnelle ; cette documentation démarre à partir d'une extension fonctionnelle
  • Expliquer les concepts
    • Formulaire de génération
    • Liste de publications
    • La page wiki de type Ebook (Publication ?)
    • La preview
    • Le PDF
  • Cas d'usage : Sélection de pages, couverture et téléchargement
    • Découverte du formulaire
  • Cas d'usage : Impression à partir de résultats Bazar
    • Préparer une publication template
    • Insérer l'action {{bazar2publication}}
  • Cas d'usage : Changer l'apparence de la publication
    • Quels fichiers permettent des surcharges
    • Modifier le thème de la page wiki de type Ebook (Publication ?)
  • Cas d'usage : S'épargner du temps en configurant le générateur de publication
    • Thématiser les pages
    • Forcer des contenus avec l'attribut readonly
    • Sélectionner des pages de couverture

`{{publicationgenerator}}` : rendre un chapitre/page sélectionnable, et ajouter les autres pages à sa suite

Aujourd'hui, les pages sont ajoutées à la fin. C'est pénible quand les chapitres sont utilisés, et qu'on veut ajouter une/plusieurs pages dans un chapitre, ou à la suite d'une autre page.

  • dans la zone du chapitrage, rendre une page/chapitre sélectionnable/active
  • lors d'un clic sur une page (dans la zone de gauche), ou "Ajouter tout" (dans la zone de gauche), placer ces éléments à la suite de la page/chapitre active

Ça ne vaut pas pour les pages de couverture/fin (cf. #22) qui sont toujours ajoutées au tout début, ou à la toute fin.

Ajout de paramètres supplémentaires lors de la création de l'ebook

par ex pouvoir indiquer que les ebook générés à cet endroit seront d'office en A4 et ce que param passe au-dessus de tous ceux fournis ailleurs ou avant.

et peut-être (mais c'est peut-être du rêve) : déjà imposé l'ebook pour une impression A4 avec pli central pour version livret A5 ou ...

Documenter les paramètres d'actions

Cf. YesWiki/yeswiki#498

Ça rendra les actions plus faciles à remplir, sans avoir à jeter un œil à la documentation (qui n'existe pas encore sur yeswiki.net).

  • créer un fichier actions/documentation.yaml
  • documenter l'action {{publicationgenerator}}
  • documenter l'action {{publicationlist}}
  • documenter l'action {{bazar2publication}}
  • documenter l'action {{blankpage}}
  • documenter l'action {{pagebreak}}
  • documenter l'action {{publication-template}}
  • documenter l'action {{publication-cover}}

Ajouter une action `{{publication-cover}}`

refs #16

Avec plusieurs paramètres :

  • type : start (défaut) et end
  • page : auto (défaut), ou un tag de page (à-la {{include page="..."}})
  • template (optionnel) : publication-cover.tpl.html (défaut)
  • title
  • description (optionnel)
  • authors (optionnel)
  • image (optionnel)

Pourquoi ? Parce qu'on peut modifier, à tout moment, toute la structure du livre en modifiant une page de type Ebook. Idem pour le titre de publication.

Aujourd'hui c'est implicitement généré par l'option "générer une couverture automatiquement".

Ça clarifierait le formulaire de création en :

  • paramètres d'ouvrage (repris dans la couverture)
  • paramètres d'impression (ceux masqués dans l'accordéon)

  • implémenter l'action selon ce qui est écrit précédemment
  • ne plus sauvegarder la métadonnée publication-cover-page
  • implémenter cet algorithme d'affichage de couverture :
    • legacy : la métadonnée publication-cover-page est présente, et vaut 1
    • actuelle : la métadonnée publication-cover-page est absente, et {{publication-cover type="start"}} prend en charge l'affichage avec le même template
  • câbler {{publicationgenerator pagestart="..." pagestart="..."}}
  • dans le formulaire, au même titre que "Chapitres" et "Pages", ajouter "Couverture" avec les éléments de début et de fin
    • ils sont pré-remplis avec la valeur des attributs publicationstart et publicationend
    • ils sont supprimables sur l'attribut readonly n'est pas activé (comme pour les pages de chapitre)

[BUG]: /tmp/yeswiki folder is used for generating the pdf, it doesn't work in a multi user environment

Case:
On the same server, a unix user toto is in charge of running publication on yeswiki toto.fr , and unix user tata is in charge of running publication on yeswiki tata.fr

The first of the users get access to /tmp/yeswiki and then the other one has not more write access to /tmp/yeswiki and cannot use /pdf annymore.

Solutions:

  • create a unique folder for each website /tmp/yeswiki-toto.fr and /tmp/yeswiki-tata.fr
  • use the cache file on the wikis : /var/www/toto.fr/cache and /var/www/tata.fr/cache

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.