From c91bd080e5dac8d722fd814bb5d32af11929e137 Mon Sep 17 00:00:00 2001 From: Charles Bourdot Date: Wed, 4 Feb 2026 16:06:00 +0100 Subject: [PATCH 01/32] initial commit --- ArticleImageDataHandler.inc.php | 47 +- BookImageDataHandler.inc.php | 73 +- README-fr.md | 13 +- README.md | 4 +- XML2HTMLPlugin.php | 220 ++- XML2HTMLSettingsForm.inc.php | 24 +- index.php | 2 +- jats2html.xsl | 459 ------ locale/en_US/locale.po | 3 + locale/fr_FR/locale.po | 3 + resources/javascript/xml_2_html.js | 279 +++- resources/styles/landingpage_pkp.css | 225 +++ resources/styles/landingpage_tei.css | 232 ++++ resources/styles/xml_2_html.css | 1382 +++++++++++++----- tei2html.xsl | 795 ----------- templates/HTMLGalleyView.tpl | 2 +- templates/LandingPage.tpl | 49 + templates/settingsForm.tpl | 3 + xsl/jats/jats-metas2html.xsl | 33 + xsl/jats/jats2html.xsl | 1576 +++++++++++++++++++++ xsl/tei/01-tei2tei.xsl | 108 ++ xsl/tei/02-tei2tei.xsl | 106 ++ xsl/tei/03-tei2html.xsl | 14 + xsl/tei/03-tei2html_core.xsl | 1929 ++++++++++++++++++++++++++ xsl/tei/pause-03-tei2html.xsl | 14 + xsl/tei/tei-metas2html.xsl | 33 + 26 files changed, 5915 insertions(+), 1713 deletions(-) delete mode 100644 jats2html.xsl create mode 100644 resources/styles/landingpage_pkp.css create mode 100644 resources/styles/landingpage_tei.css delete mode 100644 tei2html.xsl create mode 100644 templates/LandingPage.tpl create mode 100644 xsl/jats/jats-metas2html.xsl create mode 100644 xsl/jats/jats2html.xsl create mode 100644 xsl/tei/01-tei2tei.xsl create mode 100644 xsl/tei/02-tei2tei.xsl create mode 100644 xsl/tei/03-tei2html.xsl create mode 100644 xsl/tei/03-tei2html_core.xsl create mode 100644 xsl/tei/pause-03-tei2html.xsl create mode 100644 xsl/tei/tei-metas2html.xsl diff --git a/ArticleImageDataHandler.inc.php b/ArticleImageDataHandler.inc.php index fb868fd..15c3585 100644 --- a/ArticleImageDataHandler.inc.php +++ b/ArticleImageDataHandler.inc.php @@ -1,52 +1,29 @@ fs = ImageUtils::buildFileSystem($this); - } /** * Image from zip archive galley file * @param array $args - * @param APP\core\Request $request + * @param Request $request * @return mixed */ - public function zimage(array $args, APP\core\Request $request) + public function zimage(array $args, Request $request) { - - $galleyId = (int)$args[1]; + $galleyId = $args[1]; $imgName = $args[2]; - $galley = NULL; - foreach ($this->publication->getData('galleys') as $g) { - if($galleyId == $g->getId()){ - $galley = $g; - } - } - if($galley != NULL){ - $file = $galley->getFile(); - $filename = Services::get('file') - ->formatFilename($file->getData('path'), $file->getLocalizedData('path')); - $pathInfo = pathinfo($filename); - $imagePath = $pathInfo['dirname'] . DIRECTORY_SEPARATOR . $pathInfo['filename'] . DIRECTORY_SEPARATOR . $imgName; - ImageUtils::downloadImage($this->fs, $imagePath, $imgName); - } - return NULL; - + $galley = Services::get('galley')->get($galleyId); + $file = $galley->getFile(); + $filename = Services::get('file') + ->formatFilename($file->getData('path'), $file->getLocalizedData('path')); + $pathInfo = pathinfo($filename); + $imagePath = $pathInfo['dirname'] . DIRECTORY_SEPARATOR . $pathInfo['filename'] . DIRECTORY_SEPARATOR . $imgName; + return Services::get('file')->download($imagePath, $imgName); } diff --git a/BookImageDataHandler.inc.php b/BookImageDataHandler.inc.php index b1256aa..a5b91c9 100644 --- a/BookImageDataHandler.inc.php +++ b/BookImageDataHandler.inc.php @@ -1,25 +1,47 @@ fs = ImageUtils::buildFileSystem($this); - } +// /** +// * @param array $args +// * @param Request $request +// * @return mixed +// */ +// public function image(array $args, Request $request) +// { +// $fileId = $args[1]; +// $submission = $this->getAuthorizedContextObject(ASSOC_TYPE_SUBMISSION); +// import('lib.pkp.classes.submission.SubmissionFile'); +// $dependentFilesIterator = Services::get('submissionFile')->getMany([ +// 'assocTypes' => [ASSOC_TYPE_SUBMISSION_FILE], +// 'submissionIds' => [$submission->getId()], +// 'fileStages' => [SUBMISSION_FILE_DEPENDENT], +// 'includeDependentFiles' => true, +// ]); +// +// $submissionFile = null; +// foreach ($dependentFilesIterator as $dependentFile) { +// if ($fileId == $dependentFile->getData('fileId')) { +// $submissionFile = $dependentFile; +// break; +// } +// } +// +// // Download file if exists +// if (!Services::get('file')->fs->has($submissionFile->getData('path'))) { +// $request->getDispatcher()->handle404(); +// } +// +// $filename = Services::get('file') +// ->formatFilename($submissionFile->getData('path'), $submissionFile->getLocalizedData('name')); +// +// return Services::get('file')->download($submissionFile->getData('path'), $filename); +// } /** * Image from zip archive submission file @@ -27,18 +49,16 @@ class BookImageDataHandler extends CatalogBookHandler * @param Request $request * @return mixed */ - public function zimage(array $args, APP\core\Request $request) + public function zimage(array $args, Request $request) { $pubId= $args[1]; $imgName = $args[2]; - $submission = $this->getAuthorizedContextObject(Application::ASSOC_TYPE_SUBMISSION); + $submission = $this->getAuthorizedContextObject(ASSOC_TYPE_SUBMISSION); - - $pubFormatFiles = Repo::submissionFile() - ->getCollector() - ->filterBySubmissionIds([$submission->getId()]) - ->filterByAssoc(Application::ASSOC_TYPE_PUBLICATION_FORMAT) - ->getMany(); + $pubFormatFiles = Services::get('submissionFile')->getMany([ + 'submissionIds' => [$submission->getId()], + 'assocTypes' => [ASSOC_TYPE_PUBLICATION_FORMAT], + ]); $publicationFile = NULL; foreach ($pubFormatFiles as $file){ @@ -46,10 +66,13 @@ class BookImageDataHandler extends CatalogBookHandler $publicationFile = $file; } } - +// $filename = Services::get('file') +// ->formatFilename($publicationFile->getData('path'), $publicationFile->getLocalizedData('path')); +// var_dump($filename); $pathInfo = pathinfo($publicationFile->getData('path')); $imagePath = $pathInfo['dirname'] . DIRECTORY_SEPARATOR . $pathInfo['filename'] . DIRECTORY_SEPARATOR . $imgName; - ImageUtils::downloadImage($this->fs, $imagePath, $imgName); + return Services::get('file')->download($imagePath, $imgName); + } diff --git a/README-fr.md b/README-fr.md index 43318ab..5dbac9e 100644 --- a/README-fr.md +++ b/README-fr.md @@ -18,7 +18,10 @@ Plugin OJS/OMP de chargement de flux XML développé dans le cadre du projet [FN **Licence** : CeCILL-B (voir [licence](LICENCE)). -**Exemple** : https://puc-editorial.unicaen.fr/ojs-3.4/index.php/Caen/article/view/2/14 +**Exemple** : + +- OJS 3.3 : https://puc-editorial.unicaen.fr/ojs-3.3/index.php/Caen/article/view/21/50 +- OMP 3.3 : https://puc-editorial.unicaen.fr/omp-3.3/index.php/acp/catalog/view/9/26/158 @@ -71,8 +74,8 @@ Deux transformations sont fournies dans le plugin : Plugin testé sur les versions suivantes : -- OJS 3.4 (3.4.0-4) -- OMP 3.4 (3.4.0-4) +- OJS 3.3 (3.3.0-16) +- OMP 3.3 (3.3.0-16)) @@ -81,6 +84,10 @@ Plugin testé sur les versions suivantes : - Template de page : `HTMLGalleyView.tpl` ([lien](https://git.unicaen.fr/fnso/fairest/xml2html-pkp-plugin/-/blob/master/templates/HTMLGalleyView.tpl?ref_type=heads)) - Javascript : `resources/javascript/xml_2html.js` ([lien](https://git.unicaen.fr/fnso/fairest/xml2html-pkp-plugin/-/blob/master/resources/javascript/xml_2_html.js?ref_type=heads)) - CSS : `resources/styles/xml_2html.css` ([lien](https://git.unicaen.fr/fnso/fairest/xml2html-pkp-plugin/-/blob/master/resources/styles/xml_2_html.css?ref_type=heads)) +- XSL : + - `xsl/tei/03-tei2html.xsl`, feuille de transformation XSL qui surcharge `xsl/tei/03-tei2html_core.xsl` + - ou via l'ajout d'une ou de plusieurs XSLTs `N-.xsl` (où *N* > 3 et ** est le nom de la feuille de transformation choisi par l'utilisateur) + diff --git a/README.md b/README.md index f9f6f25..bb12425 100644 --- a/README.md +++ b/README.md @@ -70,8 +70,8 @@ Two conversions are embedded in the plugin: Plugin tested on : -- OJS 3.4 (3.4.0-4) -- OMP 3.4 (3.4.0-4) +- OJS 3.3 (3.3.0-21) +- OMP 3.3 (3.3.0-21) diff --git a/XML2HTMLPlugin.php b/XML2HTMLPlugin.php index 5478fec..34b2f9c 100644 --- a/XML2HTMLPlugin.php +++ b/XML2HTMLPlugin.php @@ -6,22 +6,31 @@ * Time: 17:36 */ - -use PKP\core\JSONMessage; -use PKP\plugins\GenericPlugin; -use PKP\file\PrivateFileManager; -use PKP\facades\Locale; +import('lib.pkp.classes.plugins.GenericPlugin'); +import('lib.pkp.classes.file.PrivateFileManager'); class XML2HTMLPlugin extends GenericPlugin { + static $META_XSL_SUFFIX = "-metas2html.xsl"; + public function register($category, $path, $mainContextId = NULL) { // Register the plugin even when it is not enabled $success = parent::register($category, $path); + $context = Application::get()->getRequest()->getContext(); + $landingEnabled = false; + if ($context) { + $landingEnabled = $this->getSetting($context->getId(), 'landingpage'); + } if ($success && $this->getEnabled()) { HookRegistry::register('ArticleHandler::view::galley', array($this, 'articleHandler')); + + if ($landingEnabled) { + HookRegistry::register('ArticleHandler::view', array($this, 'landingPageHandler')); + } + //HookRegistry::register('ArticleHandler::download', array($this, 'articleDownloadCallback'), HOOK_SEQUENCE_LATE); HookRegistry::register('LoadHandler', array($this, 'loadImageHandler')); HookRegistry::register('CatalogBookHandler::view', array($this, 'catalogHandler')); @@ -37,13 +46,81 @@ class XML2HTMLPlugin extends GenericPlugin public function articleHandler($hookName, $params): bool { $galley =& $params[2]; - $submission = &$params[3]; - //handle only on zip galleys - supposed to be an xml archive (source + images) - $zipMode = $galley && $galley->getFileType() === 'application/zip'; - if ($zipMode) { - $this->archiveView($galley->getFile()->getData('path'), $submission->getId(), $galley->getId(), 'article'); + $submission =& $params[3]; + + if (!$galley || $galley->getFileType() !== 'application/zip') { + return false; + } + + $request = Application::get()->getRequest(); + $isAjax = (bool) $request->getUserVar('galley_ajax'); + + // Génère ou récupère le HTML transformé + $html = $this->archiveView( + $galley->getFile()->getData('path'), + $submission->getId(), + $galley->getId(), + 'article' + ); + + if ($isAjax) { + header('Content-Type: text/html; charset=utf-8'); + echo $html; + return true; + } + + $templateMgr = TemplateManager::getManager($request); + $context = $request->getContext(); + + $dcMetas = XML2HTMLPlugin::transformMetas( + XML2HTMLPlugin::getHTMLPathFromZipPath($galley->getFile()->getData('path')), + $this->getSetting($context->getId(), 'format') ?: 'JATS' + ); + + $templateMgr->assign('assetsPath', $this->getPluginAssetsPath($request)); + $templateMgr->assign('dcMetas', $dcMetas); + $templateMgr->assign('text', $html); + + // On réutilise ton template standard pour le galley complet + $templateMgr->display($this->getTemplateResource('HTMLGalleyView.tpl')); + + return true; + } + + + + public function landingPageHandler($hookName, $params): bool + { + $request =& $params[0]; + $submission =& $params[2]; + + try { + // Get the galleys for this submission + $galleys = $submission->getGalleys(); + + foreach ($galleys as $galley) { + if ($galley->getFileType() === 'application/zip') { + $file = $galley->getFile(); + if ($file) { + $html = file_get_contents($this->landingPageView( + $file->getData('path'), + $submission->getId(), + $galley->getId(), + 'article' + )); + return true; + } + } + } + + $html = 'No .zip file available among galleys'; + return true; + + } catch (\Exception $e) { + error_log('XML2HTMLPlugin error: ' . $e->getMessage()); + $html = 'Error processing submission'; return true; - } else return false; + } } public function catalogHandler($hookName, $params): bool @@ -77,6 +154,51 @@ class XML2HTMLPlugin extends GenericPlugin 'format' ); + if ($format == NULL || $format == '') + $format = 'JATS';//default value is JATS + + $xmlFilePath = XML2HTMLPlugin::unzipXMLArchive($filePath); + $html = $this->resolveZipImagePaths( + XML2HTMLPlugin::transform($xmlFilePath, $format), + $submissionId, + $galleyId, + $xmlFilePath, $this->getRequest(), + $op); + + //metas transfo + $dcMetas = XML2HTMLPlugin::transformMetas($xmlFilePath, $format); + + //store render result + $templateMgr = TemplateManager::getManager($this->getRequest()); + $templateMgr->assign('assetsPath', $this->getPluginAssetsPath($this->getRequest())); + $templateMgr->assign('dcMetas', $dcMetas); + $templateMgr->assign('text', $html); + $html = $templateMgr->display($this->getTemplateResource('LandingPage.tpl')); + file_put_contents($htmlFile, $html, LOCK_EX); + } + return $html; + + } + + private function landingPageView(string $filePath, int $submissionId, int $galleyId, string $op) + { + $htmlFile = XML2HTMLPlugin::getHTMLPathFromZipPath($filePath); + $html = file_get_contents($htmlFile); + + $context = Application::get() + ->getRequest() + ->getContext(); + + if (!$html) { + $context = Application::get() + ->getRequest() + ->getContext(); + + $format = $this->getSetting( + $context->getId(), + 'format' + ); + if ($format == NULL || $format == '') $format = 'JATS';//default value is JATS @@ -93,7 +215,9 @@ class XML2HTMLPlugin extends GenericPlugin $templateMgr = TemplateManager::getManager($this->getRequest()); $templateMgr->assign('assetsPath', $this->getPluginAssetsPath($this->getRequest())); $templateMgr->assign('text', $html); - $templateMgr->display($this->getTemplateResource('HTMLGalleyView.tpl')); + $templateMgr->display($this->getTemplateResource('LandingPage.tpl')); + return false; + } /** @@ -207,24 +331,70 @@ class XML2HTMLPlugin extends GenericPlugin ) { + $xsltDir = dirname(__FILE__) + . DIRECTORY_SEPARATOR + . 'xsl' + . DIRECTORY_SEPARATOR + . strtolower($format) + . DIRECTORY_SEPARATOR; + + $result = NULL; + foreach (glob($xsltDir . "*.xsl") as $xsltPath) { + if(basename($xsltPath) == strtolower($format) . XML2HTMLPlugin::$META_XSL_SUFFIX) + continue;//do not apply metas xsl + $xml = new DOMDocument; + if ($result == NULL) { + // Load the XML source + $xml->load($xmlFilePath); + } else { + //Load previous xsl result + $xml->loadXML($result); + } + + $xsl = new DOMDocument; + $xsl->load($xsltPath, LIBXML_DTDATTR); + + // Configure the transformer + $proc = new XSLTProcessor; + $proc->importStyleSheet($xsl); // attach the xsl rules + + //lang param + $locale = AppLocale::getLocale(); + $proc->setParameter('', 'lang', $locale); + + try { + $result = $proc->transformToXML($xml); + } catch (Exception $e) { + $result = NULL; + var_dump($e); + } + + } + return $result; - $xslFileName = strtolower($format) . '2html.xsl'; - ////// xslt transfo - $xsltPath = dirname(__FILE__) . DIRECTORY_SEPARATOR . $xslFileName; - // Load the XML source + } + + + static function transformMetas( + string $xmlFilePath, + string $format + ) + { + $xslt = dirname(__FILE__) + . DIRECTORY_SEPARATOR + . 'xsl' + . DIRECTORY_SEPARATOR + . strtolower($format) + . DIRECTORY_SEPARATOR + . strtolower($format) + . XML2HTMLPlugin::$META_XSL_SUFFIX; $xml = new DOMDocument; $xml->load($xmlFilePath); - $xsl = new DOMDocument; - $xsl->load($xsltPath, LIBXML_DTDATTR); - - // Configure the transformer + $xsl->load($xslt, LIBXML_DTDATTR); $proc = new XSLTProcessor; - $proc->importStyleSheet($xsl); // attach the xsl rules - $locale = Locale::getLocale(); - $proc->setParameter('', 'lang', $locale); + $proc->importStyleSheet($xsl); return $proc->transformToXML($xml); - } @@ -302,7 +472,7 @@ class XML2HTMLPlugin extends GenericPlugin int $submissionId, int $galleyId, string $xmlFilePath, - APP\core\Request $request, + Request $request, string $op = 'article') { $pathInfo = pathinfo($xmlFilePath); diff --git a/XML2HTMLSettingsForm.inc.php b/XML2HTMLSettingsForm.inc.php index c0168af..2793732 100644 --- a/XML2HTMLSettingsForm.inc.php +++ b/XML2HTMLSettingsForm.inc.php @@ -1,9 +1,8 @@ setData( + 'landingpage', + $this->plugin->getSetting($context->getId(), 'landingpage') + ); + parent::initData(); } @@ -54,7 +58,7 @@ class XML2HTMLSettingsForm extends Form { */ public function readInputData() { - $this->readUserVars(['format']); + $this->readUserVars(['format', 'landingpage']); parent::readInputData(); } @@ -76,6 +80,10 @@ class XML2HTMLSettingsForm extends Form { $templateMgr = TemplateManager::getManager($request); $templateMgr->assign('pluginName', $this->plugin->getName()); + $context = Application::get()->getRequest()->getContext(); + $contextId = $context->getId(); + $templateMgr->assign('landingpage', $this->plugin->getSetting($contextId, 'landingpage')); + return parent::fetch($request, $template, $display); } @@ -95,6 +103,12 @@ class XML2HTMLSettingsForm extends Form { $this->getData('format') ); + $this->plugin->updateSetting( + $context->getId(), + 'landingpage', + $this->getData('landingpage') + ); + $notificationMgr = new NotificationManager(); $notificationMgr->createTrivialNotification( Application::get()->getRequest()->getUser()->getId(), diff --git a/index.php b/index.php index 6ae863f..1073b74 100644 --- a/index.php +++ b/index.php @@ -5,6 +5,6 @@ * Date: 04/10/22 * Time: 17:38 */ -require_once('ImageUtils.php'); + require_once('XML2HTMLPlugin.php'); return new XML2HTMLPlugin(); diff --git a/jats2html.xsl b/jats2html.xsl deleted file mode 100644 index 93bb1d4..0000000 --- a/jats2html.xsl +++ /dev/null @@ -1,459 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- FR | EN -
- - -
- - -
-
- - -
-
-
-

- -

- -
-
-
- -
- -
- - - -
- - - - -
-
- - -
-
- - - - -
- -
-
- -
    - - - - - -
- -
-
- - - - - - - - -
-
- - - - - - - - - - - - - -
  • - - - - -
  • -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    - - -
    - -
    -
    - - - - - -
  • - - - - - - -
      - - - - - -
    -
    -
    -
  • - -
    - - - -
    - - - - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - - -
    -
    - - -
    - -
    - - - - - - - - - - - - - - - -
    -
    -
    -
    - - - -
    - -
    -
    - - -

    - -

    -
    - - -
    - -
    -
    - - -
    - - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    -
    - - - - - - - - - - - - -
    - - - -
    -
    - - - -
    -
    - - - - -
      - -
    -
    - - -
      - -
    -
    - - -
  • -
    - - - - - - - - - - - - -
    - -
    -
    - - - - - - - - -
    diff --git a/locale/en_US/locale.po b/locale/en_US/locale.po index 1b6a2aa..94b67ef 100644 --- a/locale/en_US/locale.po +++ b/locale/en_US/locale.po @@ -13,3 +13,6 @@ msgstr "" msgid "plugins.generic.xml2html.format" msgstr "Format / XML Vocabulary" + +msgid "plugins.generic.xml2html.landingpage" +msgstr "Display HTML on landing page" \ No newline at end of file diff --git a/locale/fr_FR/locale.po b/locale/fr_FR/locale.po index 22e106b..aec4397 100644 --- a/locale/fr_FR/locale.po +++ b/locale/fr_FR/locale.po @@ -13,3 +13,6 @@ msgstr "" msgid "plugins.generic.xml2html.format" msgstr "Format / Vocabulaire XML" + +msgid "plugins.generic.xml2html.landingpage" +msgstr "Affichage du texte sur la page d'accueil" \ No newline at end of file diff --git a/resources/javascript/xml_2_html.js b/resources/javascript/xml_2_html.js index 8e8b4ec..fa3c93f 100644 --- a/resources/javascript/xml_2_html.js +++ b/resources/javascript/xml_2_html.js @@ -2,10 +2,173 @@ const dict = { fr : { 'toc' : 'Table des matières', 'refs': 'Références', + 'pagination': 'Pagination : ', + 'date-received': 'Date de réception', + 'date-accepted': 'Date d’acceptation', + 'date-publication-electronic': "Date de publication numérique", + 'date-publication-print': "Date de publication papier", + 'date-publication-early': "Date de publication anticipée", + 'colon': ' : ', + 'abstract': 'Résumé', + 'abstractTrl': 'Résumé ', + 'keywords': 'Mots-clés', + 'keywordsTrl': 'Mots-clés ', + 'author': 'Auteur', + 'authors': 'Auteurs', + 'editor': 'Contributeur', + 'editors': 'Contributeurs', + 'editorial-manager':'Responsable d’édition', + 'editorial-managers':'Responsables d’édition', + 'title': 'Titre', + 'titleTrl': 'Titre ', + 'supertitle': 'Surtitre', + 'subtitle': 'Sous-titre', + 'short-title': 'Titre court', + 'subject': 'Sujet', + 'publisher': 'Éditeur', + 'funder': 'Financeur', + 'funders': 'Financeurs', + 'sponsor': 'Partenariat financier', + 'sponsors': 'Partenariats financiers', + 'chronology': '(chronologie)', + 'geography': '(géographie)', + 'subject-kwd': '(thèmes)', + 'work': '(œuvres citées)', + 'propernoun': '(noms propres)', + 'personcited': '(personnes citées)', + 'article-meta': 'Article', + 'issue-meta': 'Numéro', + 'journal-meta': 'Revue', + 'pagination': 'Pagination', + 'copyright': 'Droits', + 'license': 'Licence', + 'isbn-print': 'ISBN (imprimé)', + 'isbn-electronic': 'ISBN (numérique)', + 'isbn-pdf': 'ISBN (PDF)', + 'isbn-epub': 'ISBN (ePub)', + 'issn-print': 'ISSN (imprimé)', + 'issn-electronic': 'ISSN (numérique)', + 'DOI': 'DOI', + 'volume': 'Volume', + 'issue': 'Fascicule', + 'cite-issue': 'Citer ce numéro', + 'cite-article': 'Citer cet article', + 'long-desc' : 'Description longue', + }, en: { 'toc' : 'Table of contents', 'refs': 'References', + 'pagination': 'Pagination: ', + 'date-received': 'Reception date', + 'date-accepted': 'Acceptation date', + 'date-publication-electronic': "Electronic publication date", + 'date-publication-print': "Print publication date", + 'date-publication-early': "Early access date", + 'colon': ': ', + 'abstract': 'Abstract', + 'abstractTrl': 'Abstract ', + 'keywords': 'Keywords', + 'keywordsTrl': 'Keywords ', + 'author': 'Author', + 'authors': 'Authors', + 'editor': 'Contributor', + 'editors': 'Contributors', + 'editorial-manager':'Editorial manager', + 'editorial-managers':'Editorial managers', + 'title': 'Title', + 'titleTrl': 'Title ', + 'subtitle': 'Subtitle', + 'supertitle': 'Supertitle', + 'short-title': 'Short title', + 'subject': 'Subject', + 'publisher': 'Editor', + 'funder': 'Funder', + 'funders': 'Funders', + 'sponsor': 'Sponsor', + 'sponsors': 'Sponsors', + 'chronology': '(chronology)', + 'geography': '(geography)', + 'subject-kwd': '(subjects)', + 'work': '(works cited)', + 'propernoun': '(proper nouns)', + 'personcited': '(people cited)', + 'article-meta': 'Article', + 'issue-meta': 'Issue', + 'journal-meta': 'Journal', + 'pagination': 'Pagination', + 'copyright': 'Copyright', + 'license': 'License', + 'isbn-print': 'ISBN (print)', + 'isbn-electronic': 'ISBN (electronic)', + 'isbn-pdf': 'ISBN (PDF)', + 'isbn-epub': 'ISBN (ePub)', + 'issn-print': 'ISSN (print)', + 'issn-electronic': 'ISSN (electronic)', + 'DOI': 'DOI', + 'volume': 'Volume', + 'issue': 'Issue', + 'cite-issue': 'Cite this issue', + 'cite-article': 'Cite this article', + 'long-desc' : 'Long description', + + }, + es: { + 'toc' : 'Índice', + 'refs': 'Referencias', + 'pagination': 'Paginación: ', + 'date-received': 'Fecha de recepción', + 'date-accepted': 'Fecha de aceptación', + 'date-publication-electronic': "Fecha de publicacíon electrónica", + 'date-publication-print': "Fecha de publicacíon impresa", + 'date-publication-early': "Fecha de publicación anticipada", + 'colon': ': ', + 'abstract': 'Resumen', + 'abstractTrl': 'Resumen ', + 'keywords': 'Palabras clave', + 'keywordsTrl': 'Palabras clave ', + 'author': 'Autor', + 'authors': 'Autores', + 'editor': 'Colaborador', + 'editors': 'Colaboradores', + 'editorial-manager':'Responsable editorial', + 'editorial-managers':'Responsables editoriales', + 'title': 'Título', + 'titleTrl': 'Título ', + 'subtitle': 'Subtítulo', + 'supertitle': 'Sobretítulo', + 'short-title': 'Título abreviado', + 'subject': 'Tema', + 'publisher': 'Editor', + 'funder': 'Financiador', + 'funders': 'Financiadores', + 'sponsor': 'Financiación', + 'sponsors': 'Financiaciones', + 'chronology': '(cronología)', + 'geography': '(geografía)', + 'subject-kwd': '(temas)', + 'work': '(obras citadas)', + 'propernoun': '(nombres propios)', + 'personcited': '(personas citadas)', + 'article-meta': 'Artículo', + 'issue-meta': 'Número', + 'journal-meta': 'Revista', + 'pagination': 'Paginación', + 'copyright': 'Derechos', + 'license': 'Licencia', + 'isbn-print': 'ISBN (impreso)', + 'isbn-electronic': 'ISBN (electrónico)', + 'isbn-pdf': 'ISBN (PDF)', + 'isbn-epub': 'ISBN (ePub)', + 'issn-print': 'ISSN (impreso)', + 'issn-electronic': 'ISSN (electrónico)', + 'DOI': 'DOI', + 'volume': 'Volumen', + 'issue': 'Fascículo', + 'cite-issue': 'Citar este número', + 'cite-article': 'Citar este artículo', + 'long-desc' : 'Descripción larga', + } } @@ -74,6 +237,22 @@ function openTab(tabName) { document.getElementById('tabtn-' + tabName).classList.add('focus-tab'); } +function openMetaTab(tabName) { + let i; + let metaTabs = document.querySelectorAll(".meta-content-tab"); + for (i = 0; i < metaTabs.length; i++) { + metaTabs[i].style.display = "none"; + } + document.getElementById(tabName).style.display = "block"; + + //button focus + document.querySelectorAll(".meta-tab-btn").forEach((btn) => { + btn.classList.remove('focus-meta-tab'); + }); + document.getElementById('tabtn-' + tabName).classList.add('focus-meta-tab'); + +} + function darkMode(bool) { if (bool) { @@ -153,37 +332,33 @@ function scrollToElementById(elementId) { let figTables; - function initialiseTableaux() { - - figTables = document.getElementsByClassName("fig-table"); - - for (let i = 0; i { isDragging = true; - startX = e.clientX; - initialWidthLeft = leftPane.offsetWidth; - initialWidthRight = rightPane.offsetWidth; - - document.addEventListener('mousemove', onMouseMove); - document.addEventListener('mouseup', onMouseUp); + e.preventDefault(); + document.body.style.cursor = 'col-resize'; + document.body.style.userSelect = 'none'; }); - function onMouseMove(e) { + document.addEventListener('mousemove', (e) => { if (!isDragging) return; - const newWidthLeft = initialWidthLeft + e.clientX - startX; - const newWidthRight = initialWidthRight - e.clientX + startX; - - if (newWidthLeft > 100 && newWidthRight > 100) { - leftPane.style.width = `${newWidthLeft}px`; - rightPane.style.width = `${newWidthRight}px`; + const container = document.querySelector('.article-and-metas'); + const containerRect = container.getBoundingClientRect(); + + // Calcul depuis le bord droit + const newWidth = containerRect.right - e.clientX; + + // Limites + const minWidth = 200; + const maxWidth = containerRect.width - 300; + + if (newWidth >= minWidth && newWidth <= maxWidth) { + rightPane.style.flex = `0 0 ${newWidth}px`; } - } + }); - function onMouseUp() { - isDragging = false; - document.removeEventListener('mousemove', onMouseMove); - document.removeEventListener('mouseup', onMouseUp); - } + document.addEventListener('mouseup', () => { + if (isDragging) { + isDragging = false; + document.body.style.cursor = ''; + document.body.style.userSelect = ''; + } + }); }); \ No newline at end of file diff --git a/resources/styles/landingpage_pkp.css b/resources/styles/landingpage_pkp.css new file mode 100644 index 0000000..eb0a6b3 --- /dev/null +++ b/resources/styles/landingpage_pkp.css @@ -0,0 +1,225 @@ +div.landingPage h1 { + display: none; +} + +#toc ol { + list-style-type: none; +} + +.xref-call { + vertical-align: top; + font-size: 50%; +} + +span[class*="fn-call"], +sup { + /** must not affect line height **/ + font-size: 0.6em; + vertical-align: 0.65em; + line-height: 0; +} + +span[class*="fn-call"] { + /*font-variant-position: super;*/ + color: var(--third-color); + cursor: pointer; +} + +.button-tabs{ + border-bottom : 1px solid #ddd; + width: var(--right-width); + height: var(--btn-tabs-height); + z-index: 1; + background-color: white; +} + +.dark .button-tabs { + border-bottom: 1px solid var(--dark-theme-txt); + background-color: var(--dark-theme-bg); +} + +.tab-btn{ + background-color: white; + padding: 10px ; + font-size: 1rem; + cursor: pointer; + border: none; + font-weight: bold; + height: var(--btn-tabs-height); +} + +#tabtn-metas{ + display: none; +} + +.mixed-citation { + margin-top: 10px; + margin-bottom: 10px; + padding: 10px; + border-bottom: 1px solid #888; +} + + /***** FOOTNOTES ******/ +div[id^="footnotes"] ul, +div[id^="footnotes"] ul { + list-style-type: none; +} + +div[id^="footnotes"] li{ + box-sizing: border-box; + padding: 20px 10px 20px 10px; + border-bottom: 1px solid #888; +} + +div[id^="footnotes"] li.focus, #refs .ref.focus{ + border-right: 5px solid var(--third-color); +} + +div[id^="footnotes"] li .label { + display: inline-block; + margin-right:10px; + cursor: pointer; +} + +div[id^="footnotes"] li .label:hover{ + color: var(--grey-color); +} + +div[id^="footnotes"] li .label:before { + content: '['; +} + +div[id^="footnotes"] li .label:after { + content: ']'; +} + +/* +#footnotes .label { + color:var(--third-color); +} +*/ + +div[id^="footnotes"] .label { + color:var(--third-color); +} + +.article-and-metas{ + display: -ms-grid; + display: grid; + grid-template-columns: repeat(12, 1fr); + grid-column-gap: 24px; + max-width: 1114px; + padding: 0; +} + +@media only screen and (min-width: 75em) { + .right-contents { + display: block; + grid-column: 1/4; + -ms-grid-row: 3; + grid-row: 3; + } +} + +@media only screen and (min-width: 75em) { + .left-contents { + margin-left: 36px; + margin-left: 2.25rem; + margin-right: 36px; + margin-right: 2.25rem; + grid-column: 4/13; + -ms-grid-row: 3; + grid-row: 3; + } +} + +.front{ + list-style: none; + margin: 0; + padding: 0; + position: -webkit-sticky; + position: sticky; + top: 110px; +} + +#mode-color-btns, +.langBtns, +.button-tabs{ + display: none; +} + + +/***** TOC *******/ + +#toc li { + margin-top:5px; +} +#toc a { + color: #757575; + text-decoration: none; + /* padding-left: 5px; + padding-right: 5px;*/ + /*display: inline-block;*/ +} + +#toc a:hover{ + color: black; +} + +.dark #toc a { + color: var(--dark-theme-txt); +} + +#toc a.active { + color: white; + background-color: black; + padding-left: 5px; + padding-right: 5px; +} + +.dark #toc a.active { + color: var(--dark-theme-bg); + background-color: var(--dark-theme-txt); +} + +#toc ol { + list-style-type: none; + padding-left: 0; +} + +#toc .section2 { + margin-left:5%; +} + +#toc .section3 { + margin-left:10%; +} + +#toc .section4 { + margin-left:15%; +} + +#toc .section5 { + margin-left:20%; +} + +#toc ol li ol { + margin-left: 10%; +} + +.obj_galley_link::before { + display: inline; + font: normal normal normal 14px/1 FontAwesome; + font-size: 14px; + font-size: inherit; + text-rendering: auto; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + transform: translate(0, 0); + content: "\f0f6"; + margin-right: 0.25em; +} + +div.LangMode{ + display: none; +} diff --git a/resources/styles/landingpage_tei.css b/resources/styles/landingpage_tei.css new file mode 100644 index 0000000..41c10e8 --- /dev/null +++ b/resources/styles/landingpage_tei.css @@ -0,0 +1,232 @@ +div.article-and-metas h1 { + display: none; +} + +#toc ol { + list-style-type: none; +} + +.xref-call { + vertical-align: top; + font-size: 50%; +} + +span[class*="fn-call"], +sup { + /** must not affect line height **/ + font-size: 0.6em; + vertical-align: 0.65em; + line-height: 0; +} + +span[class*="fn-call"] { + /*font-variant-position: super;*/ + color: var(--third-color); + cursor: pointer; +} + +.button-tabs{ + border-bottom : 1px solid #ddd; + width: var(--right-width); + height: var(--btn-tabs-height); + z-index: 1; + background-color: white; +} + +.dark .button-tabs { + border-bottom: 1px solid var(--dark-theme-txt); + background-color: var(--dark-theme-bg); +} + +.tab-btn{ + background-color: white; + padding: 10px ; + font-size: 1rem; + cursor: pointer; + border: none; + font-weight: bold; + height: var(--btn-tabs-height); +} + +#tabtn-metas{ + display: none; +} + +.mixed-citation { + margin-top: 10px; + margin-bottom: 10px; + padding: 10px; + border-bottom: 1px solid #888; +} + + /***** FOOTNOTES ******/ +div[id^="footnotes"] ul, +div[id^="footnotes"] ul { + list-style-type: none; +} + +div[id^="footnotes"] li{ + box-sizing: border-box; + padding: 20px 10px 20px 10px; + border-bottom: 1px solid #888; +} + +div[id^="footnotes"] li.focus, #refs .ref.focus{ + border-right: 5px solid var(--third-color); +} + +div[id^="footnotes"] li .label { + display: inline-block; + margin-right:10px; + cursor: pointer; +} + +div[id^="footnotes"] li .label:hover{ + color: var(--grey-color); +} + +div[id^="footnotes"] li .label:before { + content: '['; +} + +div[id^="footnotes"] li .label:after { + content: ']'; +} + +/* +#footnotes .label { + color:var(--third-color); +} +*/ + +div[id^="footnotes"] .label { + color:var(--third-color); +} + +.article-and-metas{ + display: -ms-grid; + display: grid; + grid-template-columns: repeat(12, 1fr); + grid-column-gap: 24px; + max-width: 1114px; + padding: 0; +} + +@media only screen and (min-width: 75em) { + .right-contents { + display: block; + grid-column: 1/4; + -ms-grid-row: 3; + grid-row: 3; + } +} + +@media only screen and (min-width: 75em) { + .left-contents { + margin-left: 36px; + margin-left: 2.25rem; + margin-right: 36px; + margin-right: 2.25rem; + grid-column: 4/13; + -ms-grid-row: 3; + grid-row: 3; + } +} + +.front{ + list-style: none; + margin: 0; + padding: 0; + position: -webkit-sticky; + position: sticky; + top: 110px; +} + +#mode-color-btns, +.langBtns, +.button-tabs{ + display: none; +} + + +/***** TOC *******/ + +#toc li { + margin-top:5px; +} +#toc a { + color: #757575; + text-decoration: none; + /* padding-left: 5px; + padding-right: 5px;*/ + /*display: inline-block;*/ +} + +#toc a:hover{ + color: black; +} + +.dark #toc a { + color: var(--dark-theme-txt); +} + +#toc a.active { + color: white; + background-color: black; + padding-left: 5px; + padding-right: 5px; +} + +.dark #toc a.active { + color: var(--dark-theme-bg); + background-color: var(--dark-theme-txt); +} + +#toc ol { + list-style-type: none; + padding-left: 0; +} + +#toc .section2 { + margin-left:5%; +} + +#toc .section3 { + margin-left:10%; +} + +#toc .section4 { + margin-left:15%; +} + +#toc .section5 { + margin-left:20%; +} + +#toc ol li ol { + margin-left: 10%; +} + +span.value{ + display: block; + font-size: 80%; +} + +fn span{ + display: none; + position: absolute; + height: fit-content; + width: 350px; + background-color: #f9f8f2; + text-align: left; + color: #808080; + font-size: 0.9em; + border-bottom: solid 2px rgba(235, 234, 221); + border-left: solid 2px rgba(235, 234, 221); + border-radius: 10px; + z-index: 999; +} + +div.LangMode{ + display: none; +} \ No newline at end of file diff --git a/resources/styles/xml_2_html.css b/resources/styles/xml_2_html.css index a3788aa..648efbe 100644 --- a/resources/styles/xml_2_html.css +++ b/resources/styles/xml_2_html.css @@ -1,289 +1,508 @@ :root { + /* Palette de couleurs moderne et professionnelle (from CHARLES) */ + --primary-color: #1a5490; + --primary-hover: #2f6fb3; + --accent-color: #0ea5e9; + --text-primary: #1e293b; + --text-secondary: #64748b; + --text-muted: #94a3b8; + + /* Dark theme (from CHARLES) */ + --dark-bg-primary: #0f172a; + --dark-bg-secondary: #1e293b; + --dark-text-primary: #e2e8f0; + --dark-text-secondary: #cbd5e1; + --dark-border: #334155; + + /* EVA legacy colors (kept for compatibility) */ --dark-theme-bg: #22272e; --dark-theme-txt: #adbac7; --grey-color: #777; - /*--nav-height: 4em;*/ + --lighter-txt-light-theme: #545454; + --darker-txt-dark-theme: #97A4B0; --third-color : #0a84ff; --right-width: 35%; --btn-tabs-height: 40px; -} - - -/** temp addons (if jatsParser enabled)*/ -/*.jatsParser__meta, #jatsParserFullText > h2, #jatsParserFullText > p, .usernav,.journal_branding, .jatsParser__cover-wrapper,*/ -/*nav li.dropdown, button.navbar-toggler {*/ -/* display: none;*/ -/*}*/ -/***************************************/ -/* hides pkp ojs stuff */ -/*#navigationUserWrapper, section.item, .cmp_skip_to_content, .pkp_navigation_primary_row, .pkp_site_name_wrapper,*/ -/*.entry_details, .pkp_brand_footer{*/ -/* display:none;*/ -/*}*/ - - -*{ - /*border-width: 0;*/ + /* Spacing & Layout (from CHARLES) */ + --max-content-width: 850px; + --sidebar-width: 480px; + --nav-height: 64px; + --spacing-xs: 0.3rem; + --spacing-sm: 0.8rem; + --spacing-md: 1.2rem; + --spacing-lg: 2rem; + --spacing-xl: 3rem; + + /* Typography (from CHARLES) */ + --font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, + "Helvetica Neue", Arial, sans-serif; + --font-serif: "Georgia", "Times New Roman", Times, serif; + --font-mono: "SF Mono", Monaco, "Cascadia Code", "Roboto Mono", Consolas, + monospace; + + /* Shadows (from CHARLES) */ + --shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05); + --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1); + --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1); + + /* Transitions (from CHARLES) */ + --transition-fast: 150ms ease; + --transition-base: 250ms ease; +} + +/* Reset et Base (from CHARLES) */ +* { margin: 0; padding: 0; + box-sizing: border-box; } -/*.pkp_structure_main::before, .pkp_structure_main::after{*/ -/* background: none;*/ -/*}*/ +html { + font-size: 16px; + scroll-behavior: smooth; +} + +body { + font-family: var(--font-serif); + color: var(--text-primary); + background-color: #ffffff; + line-height: 1.75; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} -/*.pkp_structure_content, .pkp_structure_main, .obj_article_details .main_entry{*/ -/* margin: 0;*/ -/* padding: 0;*/ -/* width: auto;*/ -/*}*/ +body.dark { + background-color: var(--dark-bg-primary); + color: var(--dark-text-primary); +} /*********/ +/* Navigation modernisée (from CHARLES) */ nav { - /*height: var(--nav-height);*/ position: fixed; - width: 100%; - border-bottom : 1px solid black; - background-color: white; - box-sizing: border-box; + top: 0; + left: 0; + right: 0; + height: var(--nav-height); + background-color: rgba(255, 255, 255, 0.95); + border-bottom: 1px solid #e2e8f0; + box-shadow: var(--shadow-sm); + z-index: 100; + display: flex; + align-items: center; + padding: 0 var(--spacing-md); + backdrop-filter: blur(8px); } -body.dark nav{ - border-color : var(--dark-theme-txt); - background-color: var(--dark-theme-bg); +body.dark nav { + background-color: rgba(15, 23, 42, 0.95); + border-bottom-color: var(--dark-border); } - nav li { display: inline-block; - padding:5px; + padding: var(--spacing-xs) var(--spacing-sm); + font-family: var(--font-sans); + font-size: 0.9rem; + font-weight: 500; } -#mode-color-btns{ +/* Boutons de mode (from CHARLES) */ +#mode-color-btns { position: fixed; - top:5px; - right: 5px; - z-index:10; + top: 10px; + right: var(--spacing-sm); + z-index: 110; } -#sun, #moon{ + +#sun, +#moon { cursor: pointer; - width: 24px; - height: 24px; + width: 25px; + height: 25px; border: none; background-color: transparent; + border-radius: 8px; + transition: background-color var(--transition-fast); + display: flex; + align-items: center; + justify-content: center; } +#sun:hover, +#moon:hover { + background-color: rgba(0, 0, 0, 0.05); +} -body.dark{ - background-color: var(--dark-theme-bg); - color: var(--dark-theme-txt); +body.dark #sun:hover, +body.dark #moon:hover { + background-color: rgba(255, 255, 255, 0.1); } +/* Layout principal (from CHARLES) */ .wrap { - /*padding-top: calc(var(--nav-height));*/ - font-family: "Noto Sans",-apple-system,BlinkMacSystemFont,"Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif; - /*border-top: 1px solid black;*/ + padding-top: 42px; + min-height: 100vh; + border-bottom: solid 3px rgb(226,232,240); +} + +.LangMode { + position: fixed; +} + +.LangMode > a[role="button"] { + cursor: pointer; } -section.back{ +section.back { display: none; } -.article-and-metas{ +.article-and-metas { + position: relative; display: flex; - max-width: 100vw; + width: 100%; + height: calc(100vh - var(--nav-height)); + overflow: hidden; } +/* Contenu principal (from CHARLES) */ .left-contents { - width: 65%; + flex: 1 1 auto; + display: flex; + justify-content: center; + min-width: 100px; + padding: var(--spacing-xl) var(--spacing-lg); + scrollbar-color: var(--text-muted) var(--text-muted); overflow-y: auto; - max-height: 100vh;/*calc(100vh - var(--nav-height));*/ - scrollbar-color: var(--third-color) var(--third-color); - /*margin-top: var(--nav-height);*/ + overflow-x: hidden; + height: 100%; } -.article-wrap{ - max-width: 820px; - margin-left: auto; - margin-right: auto; +.article-wrap { + max-width: var(--max-content-width); + margin: 0 auto; } +/* Panneau latéral (from CHARLES) */ .right-contents { - width: var(--right-width); - position: fixed; - right:0px; - top: 0;/*calc(var(--nav-height));*/ - overflow-y: auto; + flex: 0 0 auto; + width: var(--sidebar-width); + max-width: 100%; + background-color: #fafaf9; + border-left: 1px solid #e7e5e4; + font-family: var(--font-sans); + box-sizing: border-box; + height: 100%; /* Prend toute la hauteur du parent */ + overflow-y: auto; /* Scroll indépendant */ + overflow-x: hidden; scrollbar-width: thin; - height: 100vh;/*calc(100vh - var(--nav-height));*/ - border-left: 1px solid black; + word-wrap: break-word; + overflow-wrap: break-word; } -.left-contents h1 { - font-size: 3.2rem; - margin-bottom: 20px; - line-height: normal; - padding-top: 25px;/*calc(var(--nav-height));*/ +.right-contents * { + word-wrap: break-word; + box-sizing: border-box; +} + + +.right-contents .front, +.right-contents .content-tab, +.right-contents .meta-content-tab { + width: 100%; + box-sizing: border-box; } +body.dark .right-contents { + background-color: var(--dark-bg-secondary); + border-left-color: var(--dark-border); +} + +/* Titres élégants (from CHARLES) */ +.left-contents h1:not(div.boxed-text *) { + font-family: var(--font-serif); + font-size: 2.5rem; + font-weight: 700; + line-height: 1.2; + margin-bottom: var(--spacing-lg); + color: var(--text-primary); + letter-spacing: -0.02em; + padding-top: 25px; + padding-bottom: var(--spacing-lg); +} + +body.dark .left-contents h1:not(div.boxed-text *) { + color: var(--dark-text-primary); +} -.article-wrap ul, .article-wrap ol{ - margin-left: 40px; +.article-wrap ul, .article-wrap ol { + margin-left: var(--spacing-lg); + margin-top: var(--spacing-md); + margin-bottom: var(--spacing-md); + line-height: 1.8; } -/*.left-contents section.body, .left-contents h1{*/ - /*width: 65%;*/ -/*}*/ + +.article-wrap li { + margin-bottom: var(--spacing-xs); + padding-left: var(--spacing-xs); +} + section.body, section.front { - padding-right: 15px ; + padding-right: 15px; } section.body { - font-size: 150%; - padding-right:50px ; - line-height: normal ; + padding-right: 50px; + line-height: normal; } - section.front ol, section.front ol { - padding-left: 25px ; + padding-left: 25px; } - -.button-tabs{ - border-bottom : 1px solid black; - position: fixed; - width: var(--right-width); +/* Onglets (from CHARLES) */ +.front > .button-tabs { + position: sticky; + top: 0; + display: flex; + background-color: #fafaf9; + border-bottom: 1px solid #e7e5e4; + z-index: 10; height: var(--btn-tabs-height); - z-index: 1; - background-color: white; + margin-right: -15px; + width: calc(100% + 15px); + overflow-x: auto; /* permet le scroll horizontal */ + overflow-y: hidden; /* cache le scroll vertical */ } .dark .button-tabs { - border-bottom: 1px solid var(--dark-theme-txt); - background-color: var(--dark-theme-bg); + background-color: var(--dark-bg-secondary); + border-bottom-color: var(--dark-border); } -.tab-btn{ - background-color: white; - padding: 10px ; - font-size: 1rem; - cursor: pointer; +.tab-btn { + flex: 1 0 auto; + padding: var(--spacing-sm); + font-family: var(--font-sans); + font-size: 0.875rem; + font-weight: 600; + background-color: transparent; border: none; - font-weight: bold; + border-right: 1px solid #e7e5e4; + color: var(--text-secondary); + cursor: pointer; + transition: all var(--transition-fast); height: var(--btn-tabs-height); - border-right:1px solid black; + min-width: fit-content; } -.dark .tab-btn { - border-right:1px solid var(--dark-theme-txt); + +.tab-btn[data-key="toc"] { + flex: 1; + white-space: nowrap; } -.content-tab{ - padding: calc(var(--btn-tabs-height) + 10px) 20px; +body.dark .tab-btn { + color: var(--dark-text-secondary); + border-right-color: var(--dark-border); } -.content-tab .bibliography { - border:none; +.tab-btn:hover { + background-color: rgba(0, 0, 0, 0.03); + color: var(--text-primary); +} + +body.dark .tab-btn:hover { + background-color: rgba(255, 255, 255, 0.05); + color: var(--dark-text-primary); } -.focus-tab{ - background-color: black; +.focus-meta-tab { + background-color: var(--primary-color); color: white; } +.focus-meta-tab:hover { + background-color: var(--primary-hover); + color: white; +} -.dark .tab-btn{ - background-color: var(--dark-theme-bg); - color: #adbac7; +.focus-tab { + background-color: var(--primary-color); + color: white; } -.dark .focus-tab{ - color: var(--dark-theme-bg); - background-color: var(--dark-theme-txt); +.focus-tab:hover { + background-color: var(--primary-hover); + color: white; +} + +.content-tab { + padding: var(--spacing-md); + font-size: 0.9375rem; } -.dark .right-contents { - border-color: var(--dark-theme-txt); +.content-tab .button-tabs.meta-tabs { + margin-top: calc(var(--spacing-md) * -1); + margin-right: calc((var(--spacing-md) + 15px) * -1); + margin-left: calc(var(--spacing-md) * -1); + margin-bottom: var(--spacing-lg); + display: flex; + } +.content-tab .bibliography { + border: none; +} /***** section/h *******/ -section.body p { - margin-top:10px ; - line-height: 150% ; - word-wrap: break-word +section.body p:not(div.boxed-text *, .caption, .credits, .stage, details *, .front-matter *) { + font-size: 1.0625rem; + line-height: 1.7; + margin-top: var(--spacing-md); + color: var(--text-primary); + text-align: justify; + hyphens: auto; + word-wrap: break-word; } -section.body p:first-child { - margin-top:50px; +body.dark section.body p:not(div.boxed-text *, .caption, .credits, details *) { + color: var(--dark-text-primary); } -.title-trl { - margin-top: 20px; - margin-bottom: 15px; - font-size: 3rem; - font-style:italic; +.title-sup, +.z39-98 { + display: inline-block; + margin-top: 10px; + font-size: 1.2rem; + background-color: var(--dark-theme-txt); + padding-right: 2rem; + padding-top: 0.5rem; + padding-bottom: 0.5rem; + font-weight: 450; } +/*.title-trl { + font-family: var(--font-serif); + font-size: 1.875rem; + font-weight: 700; + margin-top: 10px; + margin-bottom: 10px; + color: var(--text-primary); + letter-spacing: -0.01em; + font-style: italic; +}*/ + .title-sub { - font-size: 2.4rem; - margin-top: 25px ; + font-family: var(--font-serif); + font-size: 1.875rem; + font-weight: 700; + margin-top: 10px; + margin-bottom: 10px; + color: var(--text-primary); + letter-spacing: -0.01em; } -section.body h2 { - margin-top: 30px ; - margin-bottom: 15px ; - font-size: 3rem; - /*line-height: 200%;*/ +section.body h2:not(div.boxed-text *) { + font-family: var(--font-serif); + font-size: 1.875rem; + font-weight: 700; + margin-top: var(--spacing-xl); + margin-bottom: var(--spacing-md); + color: var(--text-primary); + line-height: 1.3; + letter-spacing: -0.01em; } -section.body h3 { - margin-top: 25px ; - margin-bottom: 10px ; - font-size: 2.5rem; - /*line-height: 100%;*/ +section.body h3:not(div.boxed-text *) { + font-family: var(--font-serif); + font-size: 1.5rem; + font-weight: 600; + margin-top: var(--spacing-lg); + margin-bottom: var(--spacing-sm); + color: var(--text-primary); + line-height: 1.4; } -section.body h4 { - margin-top: 15px ; - margin-bottom: 5px ; - font-size: 2rem; - /*line-height: 15%;*/ +section.body h4:not(div.boxed-text *) { + font-family: var(--font-sans); + font-size: 1.25rem; + font-weight: 600; + margin-top: var(--spacing-md); + margin-bottom: var(--spacing-sm); + color: var(--text-secondary); } section.body h5 { - margin-top: 15px ; - margin-bottom: 5px ; - font-size: 1.6rem; - /*line-height: 15%;*/ + font-family: var(--font-sans); + font-size: 1.125rem; + font-weight: 600; + margin-top: var(--spacing-md); + margin-bottom: var(--spacing-xs); + color: var(--text-secondary); } section.body h6 { - margin-top: 15px ; - margin-bottom: 5px ; - font-size: 1.4rem; - /*line-height: 15%;*/ + font-family: var(--font-sans); + font-size: 1.125rem; + font-weight: 600; + margin-top: var(--spacing-md); + margin-bottom: var(--spacing-xs); + color: var(--text-secondary); +} + +section.body p.firstPara:not(div.boxed-text *, details *) { + margin-top: var(--spacing-xl); } /***** figure *******/ + figure { - width: 100%; - min-height: 100px; - display:flex; + margin: var(--spacing-xl) 0; + padding: var(--spacing-md); + background-color: #f8fafc; + border-radius: 12px; + border: 1px solid #e2e8f0; + display: flex; flex-direction: column; align-items: center; justify-content: center; - color: #999; - margin: 25px 0px; - background-color: #454545; + min-height: 70px; } -img { +body.dark figure { + background-color: var(--dark-bg-secondary); + border-color: var(--dark-border); +} + +figure.fig-formula { + color: inherit; + background: transparent; + margin: 0px 0px; + min-height: 50px; + padding-top: 5px; + padding-bottom: 5px; + border: none; +} + +.img { + height: 1.3em; + width: auto; + vertical-align: bottom; +} + +figure img { width: 100%; + height: auto; + border-radius: 8px; + box-shadow: var(--shadow-md); + padding-bottom: 0px; + margin-bottom: 3px; } -.caption { - padding: 8px; +body.dark .caption { + color: var(--dark-text-secondary); } .fig-call-window, @@ -292,58 +511,182 @@ img { .table-call-window, .table-call-window a, .table-call-window a:visited { - color:var(--third-color); + color: var(--third-color); text-decoration: none; } -.table-call-window { +/* recensions */ + +.bibl-cr + .bibl-cr { + margin-top: 15px; +} + +.bibl-cr { + margin-top: 25px; +} + +section.review { position: relative; - top: -10px; - left: 355px; - margin-top: -26px; + padding-top: 50px; +} + +section.review:not(:first-child)::before { + content: ""; + position: absolute; + left: 0; + width: 100%; + height: 1px; + background-color: #454545; + top: 40px; } /* right pane */ div[id='figures'] figure { - border-bottom:1px solid var(--grey-color); - padding-bottom: 30px; + border-top: none; background-color: inherit; + border: none; + margin-top: var(--spacing-md); + margin-bottom: var(--spacing-md); + padding-bottom: var(--spacing-md); + padding-right: var(--spacing-md); + padding-left: var(--spacing-md); + padding-top: var(--spacing-xl); +} + +div[id='figures'] figure + figure { + border-top: 4px solid #e2e8f0; + border-radius: 0px; + margin-top: var(--spacing-md); + margin-bottom: var(--spacing-md); + padding-bottom: var(--spacing-md); + padding-right: var(--spacing-md); + padding-left: var(--spacing-md); + padding-top: var(--spacing-xl); + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + min-height: 70px; +} + +img { + width: 100%; + padding-bottom: 5px; } -/****** formula ******/ -.fig-formula { - background-color:white; - color: black; +/****** théâtre ******/ + +.speaker { + font-weight: bold; } -figure[class='fig-formula inline'] { - display:inline; +.stage { + font-style: italic; + color: var(--lighter-txt-light-theme); + font-size: 1.0625rem; + line-height: 1.7; + margin-top: var(--spacing-md); + text-align: justify; + hyphens: auto; + word-wrap: break-word; +} + +.dark .stage { + font-style: italic; + color: var(--darker-txt-dark-theme); } /****** table ******/ + table caption { - font-size: 1.2rem; font-style: italic; + margin-bottom: var(--spacing-sm); + color: var(--text-secondary); + font-size: 1.2rem; } table { - display: none; width: 100%; + border-collapse: collapse; + display: none; + text-indent: initial; + line-height: normal; + font-weight: normal; + font-size: medium; + font-style: normal; + color: -internal-quirk-inherit; + text-align: start; + border-spacing: 2px; + white-space: normal; + font-variant: normal; + margin: var(--spacing-lg) 0; + font-family: var(--font-sans); + font-size: 0.9375rem; +} + +table.linguistic { + display: table; + margin-top: 1em; + margin-bottom: 1em; } -table[class='linguistic'] { +table.lg { display: table; width: 100%; - margin-top:1em; + margin-top: 1em; margin-bottom: 1em; + border: none; } -td,th { - border-bottom:1px solid #ccc; - font-size:1.1rem; +td[class='num'] { + width: 40px; + border: none; + padding-left: none; +} + +td[class='l'] { + border: none; + padding-left: none; +} + +th, +td { + padding: var(--spacing-sm); + text-align: left; + border-bottom: 1px solid #e2e8f0; + font-size: 1.1rem; + padding-left: 2px; +} + +body.dark th, +body.dark td { + border-bottom-color: var(--dark-border); +} + +th { + font-weight: 600; + background-color: #f8fafc; + color: var(--text-primary); +} + +body.dark th { + background-color: var(--dark-bg-secondary); + color: var(--dark-text-primary); } -.fig-table label { +blockquote table.lg td, +blockquote table.lg th { + font-size: 1.1rem; + padding-left: 2px; +} + +table.lg td { + line-height: 120%; + font-size: 150%; +} + +.fig-table .label, +.fig-ill .label { padding: 10px; margin: 0; cursor: pointer; @@ -354,25 +697,55 @@ td,th { .expand { color: var(--third-color); text-decoration: none; - position: relative; - right: 45%; - top: 37px; - margin-top: -27px; + margin-right: 0.5em; + cursor: pointer; } span[class='expand empty'] { color: var(--third-color); text-decoration: none; - position: relative; - right: 45%; - top: 20px; - margin-top: -27px; + margin-right: 0.5em; + cursor: pointer; } -.credits { - margin: 0 5 5 20px; - font-size:smaller; +figure .credits, +figure .caption { + margin-top: 8px; + margin-right: 5px; + margin-bottom: 5px; + margin-left: 8px; align-self: flex-start; + line-height: 1.5; + color: var(--text-primary); + text-align: justify; + hyphens: auto; + word-wrap: break-word; +} + +label { + margin-bottom: 10px; +} + +.caption-right-panel, +.credits-right-panel { + text-align: left; + align-self: flex-start; + line-height: 1.4; + margin-top: 10px; + font-size: 0.85rem; +} + +.label-right-panel { + text-align: left; + align-self: flex-start; + line-height: 1.4; + font-weight: bold; + font-size: 0.85rem; +} + +.img-righ-panel { + margin-bottom: 5px; + margin-top: 5px; } /*counters*/ @@ -380,72 +753,178 @@ section.body { counter-reset: section; } -section.body h2:not(div.boxed-text *){ +section.body h2:not(div.boxed-text *) { counter-reset: subsection; } -section.body h3:not(div.boxed-text *){ +section.body h3:not(div.boxed-text *) { counter-reset: subsubsection; } -section.body h4:not(div.boxed-text *){ +section.body h4:not(div.boxed-text *) { counter-reset: subsubsubsection; } +/* descriptions longues */ -/* biblio end */ -.bibliography { - margin-top:4ex; - border-top:1px solid #efefef; +details.floating-note { + width: 100%; + margin-left: 18px; + margin-top: 10px; } -section.bibliography h2 { - font-size: 2rem; +details.floating-note .body { + font-size: smaller; + line-height: 1.4em; } -section.bibliography h3 { - font-size: 1.8rem; +details.floating-note .body ul, details.floating-note .body ol { + margin-left: var(--spacing-sm); + margin-top: var(--spacing-sm); + margin-bottom: var(--spacing-sm); + line-height: 1.4em; } -section.bibliography ul { - list-style-type: none; - margin-left: 0; +details.floating-note p.firstPara { + margin-top: 20px; +} +details.floating-note p { + margin-top: 6px; +} + +/****** annexe ******/ + +.appendix, .right-panel-appendix { + position: relative; +} + +section.appendix { + margin-top: 100px; +} + +section.body section.appendix > h1 { + margin-bottom: var(--spacing-xl); +} + +section.appendix::before { + content: ""; + position: absolute; + left: 0; + width: 100%; + height: 1px; + background-color: #454545; + top: -10px; +} + +.right-panel-appendix::before { + content: ""; + position: absolute; + left: 0; + width: 100%; + height: 1px; + background-color: #454545; + top: -2px; +} + +.auteur-annexe { + font-size: 85%; +} + +section.body frontinclusion h2.sous-titre-annexe { + margin-top: -10px; + font-size: 1.5rem; + line-height: 100%; + font-weight: normal; +} + +bodyInclusion p.firstPara:not(div.boxed-text *) { + margin-top: 50px; +} + +/* biblio right panel + collection de recenion */ + +.right-contents #refs ul { + list-style: none; +} + +.right-contents #refs li { + margin-left: 1.5em; + text-indent: -1.5em; + margin-bottom: var(--spacing-md); + font-size: 0.9375rem; + line-height: 1.6; +} + +.right-contents #refs h3 { + font-size: 1.125rem; + font-weight: 600; + margin-top: var(--spacing-lg); + margin-bottom: var(--spacing-sm); + color: var(--text-primary); + padding-top: 10px; } -section.bibliography li.bibl { - font-size:1.3rem; +body.dark .right-contents #refs h3 { + color: var(--dark-text-primary); } +.right-contents #refs h4 { + margin-bottom: 10px; +} + +.review_bibliography p.bibl { + margin-left: 1.5em; + text-indent: -1.5em; + font-size: 90%; +} + +section.review p.bibl-cr { + margin-bottom: 50px; + margin-left: 30px; +} -/***** TOC *******/ +/***** TOC (from CHARLES) *******/ -#toc li { - margin-top:5px; +#toc { + font-size: 0.9375rem; } + +/*#toc li { + margin-top: var(--spacing-sm); +}*/ + #toc a { - color: black; + color: var(--text-secondary); text-decoration: none; - /* padding-left: 5px; - padding-right: 5px;*/ - /*display: inline-block;*/ + display: block; + padding: var(--spacing-xs) var(--spacing-sm); + border-radius: 6px; + transition: all var(--transition-fast); } -#toc a:hover{ - color: var(--grey-color); +#toc a:hover { + color: var(--primary-color); + background-color: rgba(26, 84, 144, 0.08); +} + +body.dark #toc a { + color: var(--dark-text-secondary); } -.dark #toc a { - color: var(--dark-theme-txt); +body.dark #toc a:hover { + color: var(--accent-color); + background-color: rgba(14, 165, 233, 0.1); } #toc a.active { - color: white; - background-color: black; + color: var(--primary-color); + background-color: rgba(26, 84, 144, 0.12); + font-weight: 600; padding-left: 5px; padding-right: 5px; } -.dark #toc a.active { - color: var(--dark-theme-bg); - background-color: var(--dark-theme-txt); +body.dark #toc a.active { + color: var(--accent-color); + background-color: rgba(14, 165, 233, 0.15); } #toc ol { @@ -453,63 +932,124 @@ section.bibliography li.bibl { } #toc .section2 { - margin-left:5%; + margin-left: 1rem; } #toc .section3 { - margin-left:10%; + margin-left: 2rem; } #toc .section4 { - margin-left:15%; + margin-left: 3rem; } #toc .section5 { - margin-left:20%; + margin-left: 4rem; } -/***** INLINE ELEMENTS******/ +.toc-floatingText { + background-color: #ddd; +} -span[class*="fn-call"], sup{ /** must not affect line height **/ - font-size: .60em; - vertical-align: 0.65em; +/***** REVIEW *******/ +.author-aut, +.authority_affiliation, +.authority_mail { + text-align: right; +} + +/***** INLINE ELEMENTS (from CHARLES) ******/ + +span[class*="fn-call"], sup { + font-size: 0.75em; + vertical-align: super; line-height: 0; + font-weight: 600; +} + +sub { + font-size: .60em; } span[class*="fn-call"] { - /*font-variant-position: super;*/ - color: var(--third-color); + color: var(--primary-color); cursor: pointer; + transition: color var(--transition-fast); } -span.bibr-call{ - text-decoration: underline; +span[class*="fn-call"]:hover { + color: var(--primary-hover); +} + +body.dark span[class*="fn-call"] { + color: var(--accent-color); +} + +span.bibr-call { + color: var(--primary-color); cursor: pointer; + text-decoration: none; + border-bottom: 1px dotted var(--primary-color); + transition: all var(--transition-fast); } -/***** FOOTNOTES ******/ +span.bibr-call:hover { + color: var(--primary-hover); + border-bottom-color: var(--primary-hover); +} + +body.dark span.bibr-call { + color: var(--accent-color); + border-bottom-color: var(--accent-color); +} + +/***** FOOTNOTES (from CHARLES) ******/ div[id^="footnotes"] ul, div[id^="footnotes"] ul { list-style-type: none; } -div[id^="footnotes"] li{ +div[id^="footnotes"] li { + padding-left: var(--spacing-md); + padding-right: var(--spacing-md); + padding-top: var(--spacing-sm); + padding-bottom: var(--spacing-sm); + background-color: #fafaf9; + border-left: 3px solid transparent; + border-radius: 8px; + transition: all var(--transition-base); box-sizing: border-box; - padding: 20px 10px 20px 10px; - border-bottom: 1px solid #888; } -div[id^="footnotes"] li.focus, #refs .ref.focus{ +body.dark div[id^="footnotes"] li { + background-color: var(--dark-bg-secondary); +} + +div[id^="footnotes"] li.focus, #refs .ref.focus { + border-left-color: var(--primary-color); + background-color: rgba(26, 84, 144, 0.05); border-right: 5px solid var(--third-color); } +body.dark div[id^="footnotes"] li.focus { + border-left-color: var(--accent-color); + background-color: rgba(14, 165, 233, 0.08); +} + div[id^="footnotes"] li .label { - display: inline-block; - margin-right:10px; + color: var(--primary-color); + font-weight: 600; cursor: pointer; + font-family: var(--font-sans); + display: inline-block; + margin-right: 10px; +} + +body.dark div[id^="footnotes"] .label { + color: var(--accent-color); } -div[id^="footnotes"] li .label:hover{ +div[id^="footnotes"] li .label:hover { color: var(--grey-color); } @@ -518,19 +1058,10 @@ div[id^="footnotes"] li .label:before { } div[id^="footnotes"] li .label:after { - content: ']'; -} - -/* -#footnotes .label { - color:var(--third-color); -} -*/ - -div[id^="footnotes"] .label { - color:var(--third-color); + content: '] '; } +/* je crois que les mixed-citation ne concernait que les réfs biblio du right panel en JATS, si oui, à supprimer (car la structure a changé) */ .mixed-citation { margin-top: 10px; margin-bottom: 10px; @@ -564,7 +1095,7 @@ div[id^="footnotes"] .label { } .index-anchor { - color:var(--third-color); + color: var(--third-color); font-size: 75%; } @@ -574,97 +1105,156 @@ div[id^="footnotes"] .label { /* collapse via toggle-button */ .index-level2 { - display: none; + display: none; } .toggle-button { - cursor: pointer; - color:var(--third-color); + cursor: pointer; + color: var(--third-color); } .expanded .toggle-button::after { - content: "[-]"; + content: "[-]"; } .collapsed .toggle-button::after { - content: "[+]"; + content: "[+]"; } /******************************************/ -.journal-meta { - padding: 10px; + +body.dark .journal-meta { + background-color: var(--dark-bg-secondary); } -.meta-field:before { - display: block; +.meta-field { + margin-bottom: var(--spacing-md); + font-family: var(--font-sans); +} + +.meta-field > div:first-child { color: var(--grey-color); margin-top: 10px; } -.subject:before{ - content : "Sujet"; -} -.article-title:before { - content : "Titre"; -} -.subtitle:before { - content : "Sous-titre"; +.meta-field:before { + display: block; + font-size: 0.75rem; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.05em; + color: var(--text-muted); + margin-bottom: var(--spacing-xs); } -.trans-title:before{ - content : "Titre traduit"; +body.dark .meta-field:before { + color: var(--dark-text-secondary); +} +.abstract { + margin-top: 6px; } -.contrib-group:before{ - content : "Contributeurs"; +.correction { + border: 1px solid black; + margin-top: 6px; + padding: 3px; } -.abstract:before{ - content : "Résumé"; +.ack { + font-style: italic; } -.trans-abstract:before{ - content : "Résumé traduit"; +.front-matter, .epigraph { + margin-top: 20px; + margin-bottom: 20px; + font-size: 95%; +} +.front-matter:first-of-type { + margin-top: 50px; } -.kwd-group:before{ - content: "Mots-clés"; + +.front-matter:last-of-type { + margin-bottom: 50px; } .kwd { - display:inline-block; - margin-right:5px; - + display: inline-block; + margin-right: 5px; } -.kwd:after{ - margin-left:5px; +.kwd:after { + margin-left: 5px; content: "·"; } +.kwd:last-child::after { + content: none; +} + .underline { text-decoration: underline; } -.bio { - margin-bottom:2ex; +/********* BOXED TEXT (from CHARLES) **********/ +div.boxed-text { + border: 2px solid var(--primary-color); + border-radius: 12px; + padding: var(--spacing-lg); + margin: var(--spacing-xl) 0; + background-color: rgba(26, 84, 144, 0.03); } -/********* BOXED TEXT **********/ -div.boxed-text{ - border: 1px solid var(--grey-color); - padding: 15px; +body.dark div.boxed-text { + border-color: var(--accent-color); + background-color: rgba(14, 165, 233, 0.05); +} + +div.boxed-text h1 { + font-size: 2.3rem; + margin-bottom: 10px; + line-height: normal; + padding-top: 25px; +} + +div.boxed-text h2, frontinclusionencadre .titlePage .title-main { + font-size: 1.8rem; + margin-bottom: 20px; + line-height: normal; + padding-top: 25px; +} + +frontinclusionencadre .titlePage .title-main { + font-weight: bold; +} + +div.boxed-text h3 { + font-size: 1.6rem; + margin-bottom: 20px; + line-height: normal; + padding-top: 25px; +} + +div.boxed-text p { + font-size: 1.2rem; + margin-top: 10px; + line-height: 150%; + word-wrap: break-word; +} + +div.boxed-text * { + font-size: 1.2rem; } /** galleys DL links**/ div.item.galleys { position: fixed; - top:20px; + top: 20px; right: 75px; display: flex; justify-content: right; - font-size:0.75rem; + font-size: 0.75rem; } div.item.galleys h2 { display: none; @@ -673,41 +1263,205 @@ div.item.galleys ul { list-style-type: none; } -/*********** QUOTE *******************/ -disp-quote { +/*********** QUOTE (from CHARLES) *******************/ +disp-quote { display: block; - text-align:right; + text-align: right; } blockquote { - background-color:aliceblue; + margin: var(--spacing-lg) 0; + padding-left: var(--spacing-lg); + border-left: 4px solid var(--primary-color); + font-style: italic; + font-size: 1.0625rem; + color: var(--text-secondary); +} + +body.dark blockquote { + border-left-color: var(--accent-color); + color: var(--dark-text-secondary); +} + +.epigraph blockquote { + font-size: 100%; +} + +blockquote + blockquote { + margin-top: 1.7em; +} + +.quotation2 { + border-left: 2px solid var(--grey-color); padding-left: 5%; + margin-left: -5%; } -/*************** DRAG-BAR ***************************/ +/*********** BR *******************/ +.lb::after { + content: "\a"; + white-space: pre; +} + +/*************** DRAG-BAR (from CHARLES) ***************************/ ul, ol { - margin-top:2ex; - margin-bottom:2ex; - line-height: 150% ; + margin-top: 1ex; + margin-bottom: 1.5ex; + line-height: 130%; } iframe { border: solid 0.5pt; } -#map { height: 400px; } +#map { + height: 400px; +} #drag-bar { - width: 1px; + flex: 0 0 3px; cursor: col-resize; - background-color: black; - display: block; + background-color: #e2e8f0; + position: relative; z-index: 1000; + transition: background-color var(--transition-fast); } -#drag-bar:hover { - width: 5px; - cursor: col-resize; - background-color: #ddd; - z-index: 1000; + +#drag-bar:hover, +#drag-bar:active { + background-color: var(--primary-color); +} + +body.dark #drag-bar { + background-color: var(--dark-border); +} + +body.dark #drag-bar:hover { + background-color: var(--accent-color); +} + +/* signature et auteur de la section*/ + +.article-wrap section section p.signature, .article-wrap section section p.author-section-body { + text-align: right; +} + +/* Liens (from CHARLES) */ +a { + color: var(--primary-color); + text-decoration: none; + transition: color var(--transition-fast); +} + +a:hover { + color: var(--primary-hover); +} + +body.dark a { + color: var(--accent-color); +} + +/* Scrollbar personnalisée (from CHARLES) */ +::-webkit-scrollbar { + width: 8px; + height: 8px; +} + +::-webkit-scrollbar-track { + background: transparent; +} + +::-webkit-scrollbar-thumb { + background: #cbd5e1; + border-radius: 4px; +} + +::-webkit-scrollbar-thumb:hover { + background: #94a3b8; +} + +body.dark ::-webkit-scrollbar-thumb { + background: var(--dark-border); +} + +body.dark ::-webkit-scrollbar-thumb:hover { + background: #475569; +} + +/* Styles spécifiques pour Mirador dans le panneau latéral (from CHARLES) */ +#mirador-container { + width: 100%; + height: calc(100vh - 80px); + position: relative; + min-height: 500px; +} + +/* Assurer que le conteneur Mirador prend toute la hauteur disponible */ +#mirador.content-tab { + padding: 0; + height: calc(100vh - 50px); + overflow: hidden; + display: flex; + flex-direction: column; +} + +/* Adapter le thème Mirador au mode sombre */ +body.dark #mirador-container { + background-color: var(--dark-theme-bg); +} + +/* S'assurer que Mirador est visible */ +#mirador-container > div { + width: 100% !important; + height: 100% !important; +} + +/* Responsive (from CHARLES) */ +@media (max-width: 1200px) { + .right-contents { + width: 320px; + } + + .left-contents { + max-width: calc(100% - 320px); + } +} + +@media (max-width: 768px) { + :root { + --nav-height: 56px; + } + + .article-and-metas { + flex-direction: column; + display: flex; + width: 100%; + overflow: hidden; + } + + .left-contents, + .right-contents { + width: 100%; + max-width: 100%; + position: relative; + } + + .right-contents { + border-left: none; + border-top: 1px solid #e2e8f0; + height: auto; + } + + body.dark .right-contents { + border-top-color: var(--dark-border); + } +} + +div.idno { + margin-left: 7px; + border-left: 1px solid var(--text-secondary); + padding-left: 5px; + margin-top: 2px; + margin-bottom: 2px; } \ No newline at end of file diff --git a/tei2html.xsl b/tei2html.xsl deleted file mode 100644 index a3d5dd3..0000000 --- a/tei2html.xsl +++ /dev/null @@ -1,795 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - FR | EN -
    - - -
    - - -
    -
    - - -
    -
    -
    -

    - -

    - -

    - -

    -
    - -
    -
    -
    - -
    -
    - - - -
    - - - - - -
    -
    - - - - - - -
    - -
    - - - - - - - - - - - - - - - - -
    - -
    -
    - -
      - - - - - -
    - -
    -
    - - - - - - - - - - - - -
    -
    - - - - - - - - - - - - -
  • - - - - - -
  • -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - index-anchor - anchor - - - # - - - - - - - - - - - - - - - -
    - - - - -
    -
    - - -
    -
      - -
    -
    -
    - - -
  • - -
  • -
    - - - - - -
  • - - - - section2 - - - - - - - - - - - - -
      - - - - - -
    -
    -
    -
  • - -
    - - - - - - - -
    - - - - - - -
    - -
    -
    -
    -
    - - - - - - -
    - - - Pagination : - - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  [+] - - - - -
    - - - - -
    -
    - - -
    - -
    - - - - - - - - - - - - - - - -
    -
    -
    -
    - - - -
    - - - - - - - - - - - - - - - - -
    -
    - - -

    - -

    -
    - -
    - - -
    - - - fig-table - fig-formula - fig-ill - - - -
    -
    - - -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -

    - -

    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    -
    - - - - - - - ol - ul - - - - - - - - index- - - - - - - - list-style-type: "– "; - - - - - - - - - - - -
  • - -
  • -
    - - - -
    -
    - - -

    -
    - - - - - - - - - - - - - - -
    - - -
    -
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    diff --git a/templates/HTMLGalleyView.tpl b/templates/HTMLGalleyView.tpl index e15eea8..08b85b7 100644 --- a/templates/HTMLGalleyView.tpl +++ b/templates/HTMLGalleyView.tpl @@ -1,4 +1,3 @@ - @@ -13,6 +12,7 @@ let lang = "{$currentLocale}" + {$dcMetas}
    diff --git a/templates/LandingPage.tpl b/templates/LandingPage.tpl new file mode 100644 index 0000000..16a9f5d --- /dev/null +++ b/templates/LandingPage.tpl @@ -0,0 +1,49 @@ +{** +* templates/frontend/pages/article.tpl +* +* Copyright (c) 2014-2021 Simon Fraser University +* Copyright (c) 2003-2021 John Willinsky +* Distributed under the GNU GPL v3. For full terms see the file docs/COPYING. +* +* @brief Display the page to view an article with all of it's details. +* +* @uses $article Submission This article +* @uses $publication Publication The publication being displayed +* @uses $firstPublication Publication The first published version of this article +* @uses $currentPublication Publication The most recently published version of this article +* @uses $issue Issue The issue this article is assigned to +* @uses $section Section The journal section this article is assigned to +* @uses $journal Journal The journal currently being viewed. +* @uses $primaryGalleys array List of article galleys that are not supplementary or dependent +* @uses $supplementaryGalleys array List of article galleys that are supplementary +* +* @hook Templates::Article::Footer::PageFooter [] +*} + +{include file="frontend/components/header.tpl" pageTitleTranslated=$article->getCurrentPublication()->getLocalizedFullTitle(null, 'html')|strip_unsafe_html} + +
    + + + {if $section} + {include file="frontend/components/breadcrumbs_article.tpl" currentTitle=$section->getLocalizedTitle()} + {else} + {include file="frontend/components/breadcrumbs_article.tpl" currentTitleKey="common.publication"} + {/if} + + + {include file="frontend/objects/article_details.tpl"} + + + {call_hook name="Templates::Article::Footer::PageFooter"} + +
    + +
    + {$text} +
    + + {include file="frontend/components/footer.tpl"} \ No newline at end of file diff --git a/templates/settingsForm.tpl b/templates/settingsForm.tpl index 7770e53..7b5c500 100644 --- a/templates/settingsForm.tpl +++ b/templates/settingsForm.tpl @@ -9,6 +9,9 @@
    {csrf} + {fbvFormSection label="plugins.generic.xml2html.landingpage"} + + {/fbvFormSection} {fbvFormSection label="plugins.generic.xml2html.format"} matches the setting key + + if (!isset($_FILES[$inputName]) || $_FILES[$inputName]['error'] !== UPLOAD_ERR_OK) { + return; + } + + $tmpPath = $_FILES[$inputName]['tmp_name']; + $origName = $_FILES[$inputName]['name']; + + if (strtolower(pathinfo($origName, PATHINFO_EXTENSION)) !== 'css') { + return; + } + + $destDir = dirname(__FILE__) + . DIRECTORY_SEPARATOR . 'resources' + . DIRECTORY_SEPARATOR . 'custom'; + + if (!is_dir($destDir)) { + mkdir($destDir, 0755, true); + } + + // Remove old file before replacing + $this->_deleteCssFile($contextId, $settingKey); + + // Suffix the filename with the journal path (slug) + // e.g. "custom-landing-page.css" → "custom-landing-page-my_journal.css" + $context = Application::get()->getRequest()->getContext(); + $journalSlug = preg_replace('/[^a-z0-9_-]/i', '_', $context->getPath()); + $baseName = pathinfo($destName, PATHINFO_FILENAME); // "custom-landing-page" + $ext = pathinfo($destName, PATHINFO_EXTENSION); // "css" + $finalName = $baseName . '-' . $journalSlug . '.' . $ext; + + $destPath = $destDir . DIRECTORY_SEPARATOR . $finalName; + + if (move_uploaded_file($tmpPath, $destPath)) { + $this->plugin->updateSetting($contextId, $settingKey, $finalName, 'string'); + } + } + + /** + * Deletes the CSS file from disk and clears the setting. + * + * @param int $contextId Journal context ID + * @param string $settingKey Plugin setting key holding the filename + */ + private function _deleteCssFile(int $contextId, string $settingKey): void + { + $existing = $this->plugin->getSetting($contextId, $settingKey); + if (!$existing) return; + + $path = dirname(__FILE__) + . DIRECTORY_SEPARATOR . 'resources' + . DIRECTORY_SEPARATOR . 'custom' + . DIRECTORY_SEPARATOR . $existing; + + if (file_exists($path)) { + unlink($path); + } + + $this->plugin->updateSetting($contextId, $settingKey, null, 'string'); + } +} \ No newline at end of file diff --git a/locale/en_US/locale.po b/locale/en_US/locale.po index 94b67ef..c86aa39 100644 --- a/locale/en_US/locale.po +++ b/locale/en_US/locale.po @@ -15,4 +15,22 @@ msgid "plugins.generic.xml2html.format" msgstr "Format / XML Vocabulary" msgid "plugins.generic.xml2html.landingpage" -msgstr "Display HTML on landing page" \ No newline at end of file +msgstr "Display HTML on landing page" + +msgid "plugins.generic.xml2html.cssLandingPage" +msgstr "Landing Page CSS" + +msgid "plugins.generic.xml2html.cssSideView" +msgstr "Side View CSS" + +msgid "plugins.generic.xml2html.customCss.current" +msgstr "Current file:" + +msgid "plugins.generic.xml2html.customCss.view" +msgstr "View" + +msgid "plugins.generic.xml2html.customCss.delete" +msgstr "Delete this file" + +msgid "plugins.generic.xml2html.settingsFor" +msgstr "Settings for" \ No newline at end of file diff --git a/locale/fr_FR/locale.po b/locale/fr_FR/locale.po index aec4397..36bc6db 100644 --- a/locale/fr_FR/locale.po +++ b/locale/fr_FR/locale.po @@ -15,4 +15,22 @@ msgid "plugins.generic.xml2html.format" msgstr "Format / Vocabulaire XML" msgid "plugins.generic.xml2html.landingpage" -msgstr "Affichage du texte sur la page d'accueil" \ No newline at end of file +msgstr "Affichage du texte sur la page d'accueil" + +msgid "plugins.generic.xml2html.cssLandingPage" +msgstr "CSS de la page d'accueil" + +msgid "plugins.generic.xml2html.cssSideView" +msgstr "CSS de la vue de lecture" + +msgid "plugins.generic.xml2html.customCss.current" +msgstr "Fichier actuel :" + +msgid "plugins.generic.xml2html.customCss.view" +msgstr "Voir" + +msgid "plugins.generic.xml2html.customCss.delete" +msgstr "Supprimer ce fichier" + +msgid "plugins.generic.xml2html.settingsFor" +msgstr "Paramétrage de la revue" \ No newline at end of file diff --git a/resources/javascript/xml_2_html.js b/resources/javascript/xml_2_html.js index aaa3703..1226fb8 100644 --- a/resources/javascript/xml_2_html.js +++ b/resources/javascript/xml_2_html.js @@ -249,12 +249,7 @@ window.addEventListener('DOMContentLoaded', (event) => { // Appel fonction pour tableaux déroulants initialiseTableaux(); - // index collapsible - initializeCollapsibleLists(); - - // open new windows - openFigureWindow(elementId); - + initCitationCopy(); //toc hightlighing on scroll document.querySelector('.left-contents').addEventListener("scroll", () => { let scrollTop = document.querySelector('.left-contents').scrollTop; @@ -326,34 +321,35 @@ function darkMode(bool) { function bindFootnotesAndImages() { let figAppels = document.getElementsByClassName('fig-call'); let notesAppels = document.getElementsByClassName('xref-call'); - let bibRefAppels = document.getElementsByClassName('bib-ref-call'); - // fusionne les deux tableaux ('arrays') dans un 3e : - let tousLesAppels = [...figAppels, ...notesAppels, ...bibRefAppels]; + let bibAppels = document.getElementsByClassName('bib-ref-call'); // ← AJOUT + + let tousLesAppels = [...figAppels, ...notesAppels, ...bibAppels]; // ← AJOUT + + for (let i = 0; i < tousLesAppels.length; i++) { + let target = tousLesAppels[i].dataset.target; + // Retirer le # pour getElementById + let targetId = target ? target.replace('#', '') : null; + let focusTarget = targetId ? document.getElementById(targetId) : null; + if (!focusTarget) continue; - for (let i=0 ; i < tousLesAppels.length ; i++) { - let focusTarget = document.getElementById(tousLesAppels[i].dataset.target); tousLesAppels[i].addEventListener('click', () => { - if(tousLesAppels[i].classList.contains('fn-call')) { + if (tousLesAppels[i].classList.contains('fn-call')) { openTab('footnotes'); - } else if (tousLesAppels[i].classList.contains('bib-ref-call')) { - openTab('refs'); - } else if (tousLesAppels[i].classList.contains('fig-call')){ - let cible = tousLesAppels[i].getAttribute('data-target'); + } else if (tousLesAppels[i].classList.contains('fig-call')) { openTab('figures'); - scrollToElementById(cible); + scrollToElementById(targetId); + } else if (tousLesAppels[i].classList.contains('bib-ref-call')) { + openTab('refs'); // ← ouvre l'onglet références } else { openTab('refs'); } - document.getElementById(tousLesAppels[i].dataset.target).scrollIntoView({ - block: 'center', - behavior: "smooth" - }); + focusTarget.scrollIntoView({ block: 'center', behavior: 'smooth' }); + document.querySelectorAll('.footnote, .ref, .bibl').forEach( (fn) => fn.classList.remove('focus') ); focusTarget.classList.add('focus'); - }); if(tousLesAppels[i].classList.contains('fn-call')) { @@ -368,18 +364,6 @@ function bindFootnotesAndImages() { ); focusTarget.classList.add('focus'); }) - } else if (tousLesAppels[i].classList.contains('bib-ref-call')) { - let bibRefLabel = focusTarget.querySelector('span.bibRef'); - bibRefLabel.addEventListener('click', () => { - tousLesAppels[i].scrollIntoView({ - block: 'start', - behavior: "smooth" - }); - document.querySelectorAll('.bibl').forEach( - (fn) => fn.classList.remove('focus') - ); - focusTarget.classList.add('focus'); - }) } } @@ -417,20 +401,19 @@ function initialiseTableaux() { ///////////////////////////////////////////////////////////// ////// Fonctions pour les index (collapsible) [EC] /// ///////////////////////////////////////////////////////////// -function initializeCollapsibleLists() { - var toggleButtons = document.querySelectorAll('.toggle-button'); - toggleButtons.forEach(function (button) { - button.addEventListener('click', function () { - var parentLi = this.closest('li'); // Get the parent
  • element - var indexLevel2Elements = parentLi.querySelectorAll('.index-level2'); // Get descendant elements with class .index-level2 - indexLevel2Elements.forEach(function (element) { - element.style.display = (element.style.display === 'none' || element.style.display === '') ? 'block' : 'none'; // Toggle display - }); - - // Toggle button text on the clicked toggle button - this.textContent = (indexLevel2Elements[0].style.display === 'none') ? '[+]' : '[-]'; // Use the first element's display property +function toggleIndexItem(li) { + const subLists = li.querySelectorAll(':scope > .index-level2'); + if (!subLists.length) return; + + const isCollapsed = li.classList.contains('collapsed'); + li.classList.toggle('collapsed', !isCollapsed); + li.classList.toggle('expanded', isCollapsed); + subLists.forEach(ul => { + ul.style.display = isCollapsed ? 'block' : 'none'; }); - }); + + // Empêcher la propagation si on clique sur un lien enfant + event.stopPropagation(); } @@ -560,4 +543,167 @@ document.addEventListener('DOMContentLoaded', function() { document.body.style.userSelect = ''; } }); -}); \ No newline at end of file +}); + +function toggleFiguresFilter() { + const articleWrap = document.querySelector('.article-wrap'); + const btn = document.getElementById('btn-filter-figures'); + const label = document.getElementById('filter-label'); + + const isActive = btn.classList.toggle('active'); + + if (isActive) { + // Masquer tout le contenu de l'article + articleWrap.querySelectorAll('p, table.linguistic, ul.index-unordered, h1, h2, h3').forEach(el => { + el.style.display = 'none'; + }); + + articleWrap.querySelectorAll('section').forEach(el => { + el.style.display = 'block'; // garder visible pour que les enfants le soient + }); + + // S'assurer que les figures et tableaux (fig-table, fig-ill) sont visibles + articleWrap.querySelectorAll('figure').forEach(el => { + el.style.display = 'block'; + let parent = el.parentElement; + while (parent && parent !== articleWrap) { + parent.style.display = 'block'; + parent = parent.parentElement; + } + }); + + } else { + +articleWrap.querySelectorAll('*').forEach(el => { + el.style.removeProperty('display'); + }); + } +} + +function openGalleyIframe() { + // Récupère le lien galley présent dans la page + const galleyLink = document.querySelector('.galleys_links .obj_galley_link'); + if (!galleyLink) { + alert('Aucun lien galley trouvé dans la page.'); + return; + } + + const overlay = document.getElementById('galley-overlay'); + const iframe = document.getElementById('galley-iframe'); + const btn = document.getElementById('btn-galley'); + + iframe.src = galleyLink.href; + overlay.style.display = 'block'; + btn.classList.add('active'); + + // Fermer en cliquant sur le fond + overlay.addEventListener('click', function(e) { + if (e.target === overlay) closeGalleyIframe(); + }, { once: true }); +} + +function closeGalleyIframe() { + const overlay = document.getElementById('galley-overlay'); + const iframe = document.getElementById('galley-iframe'); + const btn = document.getElementById('btn-galley'); + + overlay.style.display = 'none'; + iframe.src = ''; // libère la ressource + btn.classList.remove('active'); +} + +document.querySelectorAll('.galleys_links li').forEach(li => { + if (li.textContent.trim() === 'HTML') { + li.style.display = 'none'; + } +}); + +function openModal(url) { + // Crée la modale si elle n'existe pas encore + if (!document.getElementById('iframeModal')) { + const modal = document.createElement('div'); + modal.id = 'iframeModal'; + modal.style.cssText = ` + position: fixed; top: 0; left: 0; + width: 100%; height: 100%; + background: rgba(0,0,0,0.7); + z-index: 9999; + display: flex; + justify-content: center; + align-items: center; + `; + modal.innerHTML = ` +
    + + +
    + `; + modal.addEventListener('click', function(e) { + if (e.target === this) closeModal(); + }); + document.body.appendChild(modal); + } + + document.getElementById('modalIframe').src = url; + document.getElementById('iframeModal').style.display = 'flex'; +} + +function closeModal() { + const modal = document.getElementById('iframeModal'); + if (modal) { + modal.style.display = 'none'; + document.getElementById('modalIframe').src = ''; + } +} + +function initCitationCopy() { + const els = document.querySelectorAll('.data-citation'); + console.log('[citationCopy] éléments trouvés :', els.length); + + els.forEach(function(el) { + el.addEventListener('click', function() { + const text = el.innerText.trim(); + console.log('[citationCopy] clic, texte :', text); + + function showFeedback() { + const original = el.innerText; + el.classList.add('copied'); + el.setAttribute('data-original', original); + el.innerText = '✓ Copié dans le presse-papier'; + setTimeout(function() { + el.innerText = el.getAttribute('data-original'); + el.classList.remove('copied'); + }, 2000); + } + + function fallbackCopy() { + const ta = document.createElement('textarea'); + ta.value = text; + ta.style.cssText = 'position:fixed;top:50%;left:50%;width:1px;height:1px;opacity:0;'; + document.body.appendChild(ta); + ta.focus(); + ta.select(); + try { + const ok = document.execCommand('copy'); + console.log('[citationCopy] execCommand résultat :', ok); + if (ok) showFeedback(); + } catch(e) { + console.error('[citationCopy] execCommand erreur :', e); + } + document.body.removeChild(ta); + } + + if (navigator.clipboard && window.isSecureContext) { + navigator.clipboard.writeText(text) + .then(showFeedback) + .catch(function(e) { + console.warn('[citationCopy] clipboard API échouée, fallback :', e); + fallbackCopy(); + }); + } else { + fallbackCopy(); + } + }); + }); +} + \ No newline at end of file diff --git a/resources/styles/landingpage.css b/resources/styles/landingpage.css new file mode 100644 index 0000000..b1290ec --- /dev/null +++ b/resources/styles/landingpage.css @@ -0,0 +1,2027 @@ +:root { + /* Palette de couleurs moderne et professionnelle (from CHARLES) */ + --primary-color: #1a5490; + --primary-hover: #2f6fb3; + --accent-color: #0ea5e9; + --text-primary: #1e293b; + --text-secondary: #64748b; + --text-muted: #94a3b8; + + /* Dark theme (from CHARLES) */ + --dark-bg-primary: #0f172a; + --dark-bg-secondary: #1e293b; + --dark-text-primary: #e2e8f0; + --dark-text-secondary: #cbd5e1; + --dark-border: #334155; + + /* EVA legacy colors (kept for compatibility) */ + --dark-theme-bg: #22272e; + --dark-theme-txt: #adbac7; + --grey-color: #777; + --lighter-txt-light-theme: #545454; + --darker-txt-dark-theme: #97A4B0; + --third-color : #0a84ff; + --right-width: 35%; + --btn-tabs-height: 40px; + + /* Spacing & Layout (from CHARLES) */ + --max-content-width: 1250px; + --sidebar-width: 480px; + --nav-height: 64px; + --spacing-xs: 0.3rem; + --spacing-sm: 0.8rem; + --spacing-md: 1.2rem; + --spacing-lg: 2rem; + --spacing-xl: 3rem; + + /* Typography (from CHARLES) */ + --font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, + "Helvetica Neue", Arial, sans-serif; + --font-serif: "Georgia", "Times New Roman", Times, serif; + --font-mono: "SF Mono", Monaco, "Cascadia Code", "Roboto Mono", Consolas, + monospace; + + /* Shadows (from CHARLES) */ + --shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05); + --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1); + --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1); + + /* Transitions (from CHARLES) */ + --transition-fast: 150ms ease; + --transition-base: 250ms ease; +} + +/* Reset et Base (from CHARLES) */ +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +html { + font-size: 16px; + scroll-behavior: smooth; +} + +body { + font-family: var(--font-serif); + color: var(--text-primary); + background-color: #ffffff; + line-height: 1.75; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +body.dark { + background-color: var(--dark-bg-primary); + color: var(--dark-text-primary); +} + +/*********/ +/* Navigation modernisée (from CHARLES) */ +.cmp_breadcrumbs { + position: sticky; + top: 0; + left: 0; + right: 0; + height: var(--nav-height); + background-color: rgba(255, 255, 255, 0.95); + border-bottom: 1px solid #e2e8f0; + box-shadow: var(--shadow-sm); + z-index: 100; + display: flex; + align-items: center; + padding: 0 var(--spacing-md); + backdrop-filter: blur(8px); +} + +body.dark nav { + background-color: rgba(15, 23, 42, 0.95); + border-bottom-color: var(--dark-border); +} + +nav li { + display: inline-block; + padding: var(--spacing-xs) var(--spacing-sm); + font-family: var(--font-sans); + font-size: 0.9rem; + font-weight: 500; +} + + +/* Boutons de mode (from CHARLES) */ +#mode-color-btns { + position: fixed; + top: 10px; + right: var(--spacing-sm); + z-index: 110; +} + +#sun, +#moon { + cursor: pointer; + width: 25px; + height: 25px; + border: none; + background-color: transparent; + border-radius: 8px; + transition: background-color var(--transition-fast); + display: flex; + align-items: center; + justify-content: center; +} + +#sun:hover, +#moon:hover { + background-color: rgba(0, 0, 0, 0.05); +} + +body.dark #sun:hover, +body.dark #moon:hover { + background-color: rgba(255, 255, 255, 0.1); +} + +/* Layout principal (from CHARLES) */ +.wrap { + padding-top: 42px; + min-height: 100vh; +} + +.LangMode { + +} + +.LangMode > a[role="button"] { + cursor: pointer; +} + +section.back { + display: none; +} + +.obj_article_details, +.landingPage{ + /* Reset et Base (from CHARLES) */ + margin: 0; + padding: 0; + box-sizing: border-box; + max-width: var(--max-content-width); + margin: 0 auto; +} + + +.article-and-metas { + position: relative; + display: flex; + width: 100%; + align-items: flex-start; +} + +/* Contenu principal (from CHARLES) */ +.left-contents { + flex: 1 1 auto; + display: flex; + justify-content: center; + min-width: 100px; + overflow-x: hidden; +} + +.article-wrap { + max-width: var(--max-content-width); + margin: 0 auto; +} + +/* Panneau latéral (from CHARLES) */ +.right-contents { + flex: 0 0 auto; + width: var(--sidebar-width); + max-width: 100%; + background-color: #fafaf9; + border-left: 1px solid #e7e5e4; + font-family: var(--font-sans); + box-sizing: border-box; + position: sticky; + top: 0; + height: 95vh; + overflow-y: auto; + overflow-x: hidden; + scrollbar-width: thin; + word-wrap: break-word; + overflow-wrap: break-word; + position: sticky; + top: 64; +} + +.article-wrap h1, +.title-sub{ + display: none; +} + +.right-contents * { + word-wrap: break-word; + box-sizing: border-box; +} + + +.right-contents .front, +.right-contents .content-tab, +.right-contents .meta-content-tab { + width: 100%; + box-sizing: border-box; +} + +body.dark .right-contents { + background-color: var(--dark-bg-secondary); + border-left-color: var(--dark-border); +} + +/* Titres élégants (from CHARLES) */ +.left-contents h1:not(div.boxed-text *) { + font-family: var(--font-serif); + font-size: 2.5rem; + font-weight: 700; + line-height: 1.2; + margin-bottom: var(--spacing-lg); + color: var(--text-primary); + letter-spacing: -0.02em; + padding-top: 25px; + padding-bottom: var(--spacing-lg); +} + +body.dark .left-contents h1:not(div.boxed-text *) { + color: var(--dark-text-primary); +} + +.article-wrap ul, .article-wrap ol { + margin-left: var(--spacing-lg); + margin-top: var(--spacing-md); + margin-bottom: var(--spacing-md); + line-height: 1.8; +} + +.article-wrap li { + margin-bottom: var(--spacing-xs); + padding-left: var(--spacing-xs); +} + +section.body, section.front { + padding-right: 15px; +} + +section.body { + padding-right: 50px; + line-height: normal; +} + +section.front ol, section.front ol { + padding-left: 25px; +} + +/* Onglets (from CHARLES) */ +.front > .button-tabs { + position: sticky; + top: 0; + display: flex; + background-color: #fafaf9; + border-bottom: 1px solid #e7e5e4; + z-index: 10; + height: var(--btn-tabs-height); + margin-right: -15px; + width: calc(100% + 15px); + overflow-x: auto; /* permet le scroll horizontal */ + overflow-y: hidden; /* cache le scroll vertical */ +} + +.dark .button-tabs { + background-color: var(--dark-bg-secondary); + border-bottom-color: var(--dark-border); +} + +.tab-btn { + flex: 1 0 auto; + padding: var(--spacing-sm); + font-family: var(--font-sans); + font-size: 0.875rem; + font-weight: 600; + background-color: transparent; + border: none; + border-right: 1px solid #e7e5e4; + color: var(--text-secondary); + cursor: pointer; + transition: all var(--transition-fast); + height: var(--btn-tabs-height); + min-width: fit-content; +} + +.tab-btn[data-key="toc"] { + flex: 1; + white-space: nowrap; +} + +body.dark .tab-btn { + color: var(--dark-text-secondary); + border-right-color: var(--dark-border); +} + +.tab-btn:hover { + background-color: rgba(0, 0, 0, 0.03); + color: var(--text-primary); +} + +body.dark .tab-btn:hover { + background-color: rgba(255, 255, 255, 0.05); + color: var(--dark-text-primary); +} + +.focus-meta-tab { + background-color: var(--primary-color); + color: white; +} + +.focus-meta-tab:hover { + background-color: var(--primary-hover); + color: white; +} + +.focus-tab { + background-color: var(--primary-color); + color: white; +} + +.focus-tab:hover { + background-color: var(--primary-hover); + color: white; +} + +.content-tab { + padding: var(--spacing-md); + font-size: 0.9375rem; +} + +.content-tab .button-tabs.meta-tabs { + margin-top: calc(var(--spacing-md) * -1); + margin-right: calc((var(--spacing-md) + 15px) * -1); + margin-left: calc(var(--spacing-md) * -1); + margin-bottom: var(--spacing-lg); + display: flex; + +} + +.content-tab .bibliography { + border: none; +} + +/***** section/h *******/ +section.body p:not(div.boxed-text *, .caption, .credits, .stage, details *, .front-matter *) { + font-size: 1.0625rem; + line-height: 1.7; + margin-top: var(--spacing-md); + color: var(--text-primary); + text-align: justify; + hyphens: auto; + word-wrap: break-word; +} + +body.dark section.body p:not(div.boxed-text *, .caption, .credits, details *) { + color: var(--dark-text-primary); +} + +.title-sup, +.z39-98 { + display: inline-block; + margin-top: 10px; + font-size: 1.2rem; + background-color: var(--dark-theme-txt); + padding-right: 2rem; + padding-top: 0.5rem; + padding-bottom: 0.5rem; + font-weight: 450; +} + +/*.title-trl { + font-family: var(--font-serif); + font-size: 1.875rem; + font-weight: 700; + margin-top: 10px; + margin-bottom: 10px; + color: var(--text-primary); + letter-spacing: -0.01em; + font-style: italic; +}*/ + +.title-sub { + font-family: var(--font-serif); + font-size: 1.875rem; + font-weight: 700; + margin-top: 10px; + margin-bottom: 10px; + color: var(--text-primary); + letter-spacing: -0.01em; +} + +section.body h2:not(div.boxed-text *) { + font-family: var(--font-serif); + font-size: 1.875rem; + font-weight: 700; + margin-top: var(--spacing-xl); + margin-bottom: var(--spacing-md); + color: var(--text-primary); + line-height: 1.3; + letter-spacing: -0.01em; +} + +section.body h3:not(div.boxed-text *) { + font-family: var(--font-serif); + font-size: 1.5rem; + font-weight: 600; + margin-top: var(--spacing-lg); + margin-bottom: var(--spacing-sm); + color: var(--text-primary); + line-height: 1.4; +} + +section.body h4:not(div.boxed-text *) { + font-family: var(--font-sans); + font-size: 1.25rem; + font-weight: 600; + margin-top: var(--spacing-md); + margin-bottom: var(--spacing-sm); + color: var(--text-secondary); +} + +section.body h5 { + font-family: var(--font-sans); + font-size: 1.125rem; + font-weight: 600; + margin-top: var(--spacing-md); + margin-bottom: var(--spacing-xs); + color: var(--text-secondary); +} + +section.body h6 { + font-family: var(--font-sans); + font-size: 1.125rem; + font-weight: 600; + margin-top: var(--spacing-md); + margin-bottom: var(--spacing-xs); + color: var(--text-secondary); +} + +section.body p.firstPara:not(div.boxed-text *, details *) { + margin-top: var(--spacing-xl); +} + +/***** figure *******/ + +figure { + margin: var(--spacing-xl) 0; + padding: var(--spacing-md); + background-color: #f8fafc; + border-radius: 12px; + border: 1px solid #e2e8f0; + display: flex; + flex-direction: column; + min-height: 70px; +} + +body.dark figure { + background-color: var(--dark-bg-secondary); + border-color: var(--dark-border); +} + +figure.fig-formula { + color: inherit; + background: transparent; + margin: 0px 0px; + min-height: 50px; + padding-top: 5px; + padding-bottom: 5px; + border: none; +} + +.img { + height: 1.3em; + width: auto; + vertical-align: bottom; +} + +figure img { + width: 100%; + height: auto; + border-radius: 8px; + box-shadow: var(--shadow-md); + padding-bottom: 0px; + margin-bottom: 7px; +} + +figure .fig-call-window img, +figure .table-call-window img { + border-radius: 0px; + box-shadow: none; +} + +body.dark .caption { + color: var(--dark-text-secondary); +} + +.fig-call-window, +.fig-call-window a, +.fig-call-window a:visited, +.table-call-window, +.table-call-window a, +.table-call-window a:visited { + text-decoration: none; + align-self: flex-end; + margin-top: -13px; + margin-right: -6px; + margin-bottom: -15px; +} + +/* recensions */ + +.bibl-cr + .bibl-cr { + margin-top: 15px; +} + +.bibl-cr { + margin-top: 25px; +} + +section.review { + position: relative; + padding-top: 50px; +} + +section.review:not(:first-child)::before { + content: ""; + position: absolute; + left: 0; + width: 100%; + height: 1px; + background-color: #454545; + top: 40px; +} + +/* right pane */ +div[id='figures'] figure { + border-top: none; + background-color: inherit; + border: none; + margin-top: -15px; + margin-bottom: var(--spacing-md); + padding-bottom: var(--spacing-md); + padding-right: var(--spacing-md); + padding-left: var(--spacing-md); + padding-top: var(--spacing-xl); +} + +div[id='figures'] figure + figure { + border-top: 4px solid #e2e8f0; + border-radius: 0px; + margin-top: var(--spacing-md); + margin-bottom: var(--spacing-md); + padding-bottom: var(--spacing-md); + padding-right: var(--spacing-md); + padding-left: var(--spacing-md); + padding-top: var(--spacing-xl); + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + min-height: 70px; +} + +img { + width: 100%; + padding-bottom: 5px; +} + +/****** théâtre ******/ + +.speaker { + font-weight: bold; +} + +.stage { + font-style: italic; + color: var(--lighter-txt-light-theme); + font-size: 1.0625rem; + line-height: 1.7; + margin-top: var(--spacing-md); + text-align: justify; + hyphens: auto; + word-wrap: break-word; +} + +.dark .stage { + font-style: italic; + color: var(--darker-txt-dark-theme); +} + +/****** table ******/ + +table caption { + font-style: italic; + margin-bottom: var(--spacing-sm); + color: var(--text-secondary); + font-size: 1.2rem; +} + +table { + width: 100%; + border-collapse: collapse; + display: table; + text-indent: initial; + line-height: normal; + font-weight: normal; + font-size: medium; + font-style: normal; + color: -internal-quirk-inherit; + text-align: start; + border-spacing: 2px; + white-space: normal; + font-variant: normal; + margin: 0 0; + margin-bottom: 7px; + font-family: var(--font-sans); + font-size: 0.9375rem; + background-color: white; +} + +table.linguistic { + display: table; + margin-top: 1em; + margin-bottom: 1em; +} + +table.lg { + display: table; + width: 100%; + margin-top: 1em; + margin-bottom: 1em; + border: none; +} + +td[class='num'] { + width: 40px; + border: none; + padding-left: none; +} + +td[class='l'] { + border: none; + padding-left: none; +} + +th, +td { + padding: var(--spacing-sm); + text-align: left; + border-bottom: 1px solid #e2e8f0; + font-size: 0.9rem; + padding-left: 2px; +} + +body.dark th, +body.dark td { + border-bottom-color: var(--dark-border); +} + +th { + font-weight: 600; + background-color: #f8fafc; + color: var(--text-primary); +} + +body.dark th { + background-color: var(--dark-bg-secondary); + color: var(--dark-text-primary); +} + +blockquote table.lg td, +blockquote table.lg th { + font-size: 1.1rem; + padding-left: 2px; +} + +table.lg td { + line-height: 120%; + font-size: 150%; +} + +.fig-table label, +.fig-ill label { + padding: 10px; + cursor: pointer; + margin-bottom: 5px; + line-height: 1.5; +} + +.expand { + color: var(--third-color); + text-decoration: none; + margin-right: 0.5em; + cursor: pointer; +} + +span[class='expand empty'] { + color: var(--third-color); + text-decoration: none; + margin-right: 0.5em; + cursor: pointer; +} + +figure .credits, +figure .caption { + margin-top: 8px; + margin-right: 5px; + margin-bottom: 5px; + margin-left: 8px; + align-self: flex-start; + line-height: 1.5; + color: var(--text-primary); + text-align: justify; + hyphens: auto; + word-wrap: break-word; +} + +label { + margin-bottom: 15px; +} + +.caption-right-panel, +.credits-right-panel { + text-align: left; + align-self: flex-start; + line-height: 1.4; + margin-top: 10px; + font-size: 0.85rem; +} + +.label-right-panel { + text-align: left; + align-self: flex-start; + line-height: 1.4; + font-weight: bold; + font-size: 0.85rem; +} + +.img-righ-panel { + margin-bottom: 5px; + margin-top: 5px; +} + +/*counters*/ +section.body { + counter-reset: section; +} + +section.body h2:not(div.boxed-text *) { + counter-reset: subsection; +} +section.body h3:not(div.boxed-text *) { + counter-reset: subsubsection; +} +section.body h4:not(div.boxed-text *) { + counter-reset: subsubsubsection; +} + +/* descriptions longues */ + +details.floating-note { + width: 100%; + margin-left: 9px; + margin-top: 12px; +} + +details.floating-note .body { + font-size: smaller; + line-height: 1.4em; +} + +details.floating-note .body ul, details.floating-note .body ol { + margin-left: var(--spacing-sm); + margin-top: var(--spacing-sm); + margin-bottom: var(--spacing-sm); + line-height: 1.4em; +} + +details.floating-note p.firstPara { + margin-top: 20px; +} +details.floating-note p { + margin-top: 6px; +} + +summary::marker { + color: var(--third-color); + content: "⇱  "; + font-size: 105%; +} + +.floating-note[open] summary::marker { + content: "⇲  "; +} + +summary span.idno { + color: var(--third-color); + font-family: var(--font-sans); + font-size: 95%; +} + +/****** annexe ******/ + +.appendix, .right-panel-appendix { + position: relative; +} + +section.appendix { + margin-top: 100px; +} + +section.body section.appendix > h1 { + margin-bottom: var(--spacing-xl); +} + +section.appendix::before { + content: ""; + position: absolute; + left: 0; + width: 100%; + height: 1px; + background-color: #454545; + top: -10px; +} + +.right-panel-appendix::before { + content: ""; + position: absolute; + left: 0; + width: 100%; + height: 1px; + background-color: #454545; + top: -2px; +} + +.auteur-annexe { + font-size: 85%; +} + +section.body frontinclusion h2.sous-titre-annexe { + margin-top: -10px; + font-size: 1.5rem; + line-height: 100%; + font-weight: normal; +} + +bodyInclusion p.firstPara:not(div.boxed-text *) { + margin-top: 50px; +} + +/* biblio right panel + collection de recenion */ + +.right-contents #refs ul { + list-style: none; +} + +.right-contents #refs li { + margin-left: 1.5em; + margin-bottom: var(--spacing-md); + font-size: 0.9375rem; + line-height: 1.6; +} + +.right-contents #refs h3 { + font-size: 1.125rem; + font-weight: 600; + margin-top: var(--spacing-lg); + margin-bottom: var(--spacing-sm); + color: var(--text-primary); + padding-top: 10px; +} + +body.dark .right-contents #refs h3 { + color: var(--dark-text-primary); +} + +.right-contents #refs h4 { + margin-bottom: 10px; +} + +.review_bibliography p.bibl { + margin-left: 1.5em; + text-indent: -1.5em; + font-size: 90%; +} + +section.review p.bibl-cr { + margin-bottom: 50px; + margin-left: 30px; +} + +/***** TOC (from CHARLES) *******/ + +#toc { + font-size: 0.9375rem; +} + +/*#toc li { + margin-top: var(--spacing-sm); +}*/ + +#toc a { + color: var(--text-secondary); + text-decoration: none; + display: block; + padding: var(--spacing-xs) var(--spacing-sm); + border-radius: 6px; + transition: all var(--transition-fast); +} + +#toc a:hover { + color: var(--primary-color); + background-color: rgba(26, 84, 144, 0.08); +} + +body.dark #toc a { + color: var(--dark-text-secondary); +} + +body.dark #toc a:hover { + color: var(--accent-color); + background-color: rgba(14, 165, 233, 0.1); +} + +#toc a.active { + color: var(--primary-color); + background-color: rgba(26, 84, 144, 0.12); + font-weight: 600; + padding-left: 5px; + padding-right: 5px; +} + +body.dark #toc a.active { + color: var(--accent-color); + background-color: rgba(14, 165, 233, 0.15); +} + +#toc ol { + list-style-type: none; +} + +#toc .section2 { + margin-left: 1rem; +} + +#toc .section3 { + margin-left: 2rem; +} + +#toc .section4 { + margin-left: 3rem; +} + +#toc .section5 { + margin-left: 4rem; +} + +.toc-floatingText { + background-color: #ddd; +} + +/***** REVIEW *******/ +.author-aut, +.authority_affiliation, +.authority_mail { + text-align: right; +} + +/***** INLINE ELEMENTS (from CHARLES) ******/ + +span[class*="fn-call"], sup { + font-size: 0.75em; + vertical-align: super; + line-height: 0; + font-weight: 600; +} + +sub { + font-size: .60em; +} + +span[class*="fn-call"] { + color: var(--primary-color); + cursor: pointer; + transition: color var(--transition-fast); +} + +span[class*="fn-call"]:hover { + color: var(--primary-hover); +} + +body.dark span[class*="fn-call"] { + color: var(--accent-color); +} + +span.bibr-call { + color: var(--primary-color); + cursor: pointer; + text-decoration: none; + border-bottom: 1px dotted var(--primary-color); + transition: all var(--transition-fast); +} + +span.bibr-call:hover { + color: var(--primary-hover); + border-bottom-color: var(--primary-hover); +} + +body.dark span.bibr-call { + color: var(--accent-color); + border-bottom-color: var(--accent-color); +} + +/***** FOOTNOTES (from CHARLES) ******/ +div[id^="footnotes"] ul, +div[id^="footnotes"] ul { + list-style-type: none; +} + +div[id^="footnotes"] li { + padding-left: var(--spacing-md); + padding-right: var(--spacing-md); + padding-top: var(--spacing-sm); + padding-bottom: var(--spacing-sm); + background-color: #fafaf9; + border-left: 3px solid transparent; + border-radius: 8px; + transition: all var(--transition-base); + box-sizing: border-box; +} + +body.dark div[id^="footnotes"] li { + background-color: var(--dark-bg-secondary); +} + +div[id^="footnotes"] li.focus, #refs .ref.focus, #refs li.bibl.focus { + border-left-color: var(--primary-color); + background-color: rgba(26, 84, 144, 0.05); + border-left-color: var(--primary-color); +} + +body.dark div[id^="footnotes"] li.focus { + border-left-color: var(--accent-color); + background-color: rgba(14, 165, 233, 0.08); +} + +div[id^="footnotes"] li .label { + color: var(--primary-color); + font-weight: 600; + cursor: pointer; + font-family: var(--font-sans); + display: inline-block; + margin-right: 10px; +} + +body.dark div[id^="footnotes"] .label { + color: var(--accent-color); +} + +div[id^="footnotes"] li .label:hover { + color: var(--grey-color); +} + +div[id^="footnotes"] li .label:before { + content: '['; +} + +div[id^="footnotes"] li .label:after { + content: '] '; +} + +/* je crois que les mixed-citation ne concernait que les réfs biblio du right panel en JATS, si oui, à supprimer (car la structure a changé) */ +.mixed-citation { + margin-top: 10px; + margin-bottom: 10px; + padding: 10px; + border-bottom: 1px solid #888; +} + +.dark div[id^="footnotes"] li, .dark .mixed-citation { + border-bottom: 1px solid var(--dark-theme-txt); +} + +/*********** INDEX **********/ +#index .index-level1 { + list-style-type: none; + margin-top: 3%; + font-weight: bold; +} + +#index .index-level2 { + list-style-type: none; + margin-top: 1%; + margin-left: 5%; + font-weight: normal; +} + +#index .index-level3 { + list-style-type: none; + margin-top: 1%; + margin-left: 5%; + font-weight: normal; +} + +.index-anchor { + color: var(--third-color); + font-size: 75%; +} + +.index-link:first-of-type { + margin-left: 12px; +} + +/* collapse via toggle-button */ +.index-level2 { + display: none; +} + +.toggle-button { + cursor: pointer; + color: var(--third-color); +} + +.expanded .toggle-button::after { + content: "[-]"; +} + +.collapsed .toggle-button::after { + content: "[+]"; +} + +/******************************************/ + +body.dark .journal-meta { + background-color: var(--dark-bg-secondary); +} + +.meta-field { + margin-bottom: var(--spacing-md); + font-family: var(--font-sans); +} + +.meta-field > div:first-child { + color: var(--grey-color); + margin-top: 10px; +} + +.meta-field:before { + display: block; + font-size: 0.75rem; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.05em; + color: var(--text-muted); + margin-bottom: var(--spacing-xs); +} + +body.dark .meta-field:before { + color: var(--dark-text-secondary); +} + +.abstract { + margin-top: 6px; +} + +.correction { + border: 1px solid black; + margin-top: 6px; + padding: 3px; +} + +.ack { + font-style: italic; +} + +.front-matter, .epigraph { + margin-bottom: 20px; + font-size: 95%; +} + + +.front-matter:last-of-type { + margin-bottom: 50px; +} + +.kwd { + display: inline-block; + margin-right: 5px; +} + +.kwd:after { + margin-left: 5px; + content: "·"; +} + +.kwd:last-child::after { + content: none; +} + +.underline { + text-decoration: underline; +} + +/********* BOXED TEXT (from CHARLES) **********/ +div.boxed-text { + border: 2px solid var(--primary-color); + border-radius: 12px; + padding: var(--spacing-lg); + margin: var(--spacing-xl) 0; + background-color: rgba(26, 84, 144, 0.03); +} + +body.dark div.boxed-text { + border-color: var(--accent-color); + background-color: rgba(14, 165, 233, 0.05); +} + +div.boxed-text h1 { + font-size: 2.3rem; + margin-bottom: 10px; + line-height: normal; + padding-top: 25px; +} + +div.boxed-text h2, frontinclusionencadre .titlePage .title-main { + font-size: 1.8rem; + margin-bottom: 20px; + line-height: normal; + padding-top: 25px; +} + +frontinclusionencadre .titlePage .title-main { + font-weight: bold; +} + +div.boxed-text h3 { + font-size: 1.6rem; + margin-bottom: 20px; + line-height: normal; + padding-top: 25px; +} + +div.boxed-text p { + font-size: 1.2rem; + margin-top: 10px; + line-height: 150%; + word-wrap: break-word; +} + +div.boxed-text * { + font-size: 1.2rem; +} + +/** galleys DL links**/ +div.item.galleys { + font-size: 0.75rem; +} +div.item.galleys h2 { + display: none; +} +div.item.galleys ul { + list-style-type: none; +} + +/*********** QUOTE (from CHARLES) *******************/ +disp-quote { + display: block; + text-align: right; +} + +blockquote { + margin: var(--spacing-lg) 0; + padding-left: var(--spacing-lg); + border-left: 4px solid var(--primary-color); + font-style: italic; + font-size: 1.0625rem; + color: var(--text-secondary); +} + +body.dark blockquote { + border-left-color: var(--accent-color); + color: var(--dark-text-secondary); +} + +.epigraph blockquote { + font-size: 100%; +} + +blockquote + blockquote { + margin-top: 1.7em; +} + +.quotation2 { + border-left: 2px solid var(--grey-color); + padding-left: 5%; + margin-left: -5%; +} + +/*********** BR *******************/ +.lb::after { + content: "\a"; + white-space: pre; +} + +/*************** DRAG-BAR (from CHARLES) ***************************/ +ul, ol { + margin-top: 1ex; + margin-bottom: 1.5ex; + line-height: 130%; +} + +iframe { + border: solid 0.5pt; +} + +#map { + height: 400px; +} + +#drag-bar { + flex: 0 0 3px; + cursor: col-resize; + background-color: #e2e8f0; + position: relative; + z-index: 1000; + transition: background-color var(--transition-fast); +} + + +#drag-bar:hover, +#drag-bar:active { + background-color: var(--primary-color); +} + +body.dark #drag-bar { + background-color: var(--dark-border); +} + +body.dark #drag-bar:hover { + background-color: var(--accent-color); +} + +/* signature et auteur de la section*/ + +.article-wrap section section p.signature, .article-wrap section section p.author-section-body { + text-align: right; +} + +/* Liens (from CHARLES) */ +a { + color: var(--primary-color); + text-decoration: none; + transition: color var(--transition-fast); +} + +a:hover { + color: var(--primary-hover); +} + +body.dark a { + color: var(--accent-color); +} + +/* Scrollbar personnalisée (from CHARLES) */ +::-webkit-scrollbar { + width: 8px; + height: 8px; +} + +::-webkit-scrollbar-track { + background: transparent; +} + +::-webkit-scrollbar-thumb { + background: #cbd5e1; + border-radius: 4px; +} + +::-webkit-scrollbar-thumb:hover { + background: #94a3b8; +} + +body.dark ::-webkit-scrollbar-thumb { + background: var(--dark-border); +} + +body.dark ::-webkit-scrollbar-thumb:hover { + background: #475569; +} + +/* Styles spécifiques pour Mirador dans le panneau latéral (from CHARLES) */ +#mirador-container { + width: 100%; + height: calc(100vh - 80px); + position: relative; + min-height: 500px; +} + +/* Assurer que le conteneur Mirador prend toute la hauteur disponible */ +#mirador.content-tab { + padding: 0; + height: calc(100vh - 50px); + overflow: hidden; + display: flex; + flex-direction: column; +} + +/* Adapter le thème Mirador au mode sombre */ +body.dark #mirador-container { + background-color: var(--dark-theme-bg); +} + +/* S'assurer que Mirador est visible */ +#mirador-container > div { + width: 100% !important; + height: 100% !important; +} + +/* Responsive (from CHARLES) */ +@media (max-width: 1200px) { + .right-contents { + width: 320px; + } + + .left-contents { + max-width: calc(100% - 320px); + } +} + +@media (max-width: 768px) { + :root { + --nav-height: 56px; + } + + .article-and-metas { + flex-direction: column; + display: flex; + width: 100%; + overflow: hidden; + } + + .left-contents, + .right-contents { + width: 100%; + max-width: 100%; + position: relative; + } + + .right-contents { + border-left: none; + border-top: 1px solid #e2e8f0; + height: auto; + } + + body.dark .right-contents { + border-top-color: var(--dark-border); + } +} + +div.idno { + margin-left: 7px; + border-left: 1px solid var(--text-secondary); + padding-left: 5px; + margin-top: 2px; + margin-bottom: 2px; +} + +.obj_article_details .cmp_notification { + font-family: var(--font-sans); + font-size: 0.825rem; + padding: 8px 16px; + margin-bottom: var(--spacing-lg); + background: #fff8e1; + border: 1px solid #ffe082; + border-radius: 3px; + color: #4e342e; + display: none; + align-items: center; + gap: 12px; +} + +.obj_article_details .cmp_notification a { + font-weight: 600; + color: inherit; + text-decoration: underline; +} + +/* ── Titre ───────────────────────────────────────────────────────────── */ + +.obj_article_details h1.page_title { + font-family: var(--font-serif); + font-size: 1.75rem; + font-weight: 700; + line-height: 1.25; + letter-spacing: -0.015em; + color: var(--text-primary); + margin: 0 0 var(--spacing-lg); + padding: var(--spacing-lg) 0 var(--spacing-md); + border-bottom: 1px solid #e2e8f0; +} + +body.dark .obj_article_details h1.page_title { + color: var(--dark-text-primary); + border-bottom-color: var(--dark-border); +} + +/* ── Layout .row ─────────────────────────────────────────────────────── */ + +.obj_article_details .row { + display: flex; + gap: var(--spacing-xl); + align-items: flex-start; + padding-bottom: var(--spacing-xl); +} + +.obj_article_details .main_entry { + flex: 1 1 0; + min-width: 0; + display: flex; + flex-direction: column; + gap: var(--spacing-lg); + padding-right: var(--spacing-lg); +} + +.obj_article_details .entry_details { + flex: 0 0 180px; + display: flex; + flex-direction: column; + gap: var(--spacing-md); + border-left: 1px solid #e2e8f0; + padding-left: var(--spacing-lg); +} + +body.dark .obj_article_details .entry_details { + border-left-color: var(--dark-border); +} + +/* ── Labels h2 ───────────────────────────────────────────────────────── */ + +.obj_article_details .item > h2.label, +.obj_article_details .sub_item > h2.label { + font-family: var(--font-sans); + font-size: 0.7rem; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.08em; + color: var(--text-muted); + margin-bottom: 4px; + margin-top: 0; + padding: 0; + border: none; + background: none; +} + +/* h2 accessible uniquement aux lecteurs d'écran */ +.obj_article_details h2.pkp_screen_reader { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0,0,0,0); + white-space: nowrap; + border: 0; +} + +/* ── Auteurs ─────────────────────────────────────────────────────────── */ + +.obj_article_details .item.authors ul.authors { + list-style: none; + padding: 0; + margin: 0; + flex-wrap: wrap; + gap: 4px 16px; +} + +.obj_article_details .item.authors ul.authors li { + font-family: var(--font-sans); + font-size: 0.9375rem; + font-weight: 600; + color: var(--text-primary); + margin: 0; + padding: 1em; +} + +body.dark .obj_article_details .item.authors ul.authors li { + color: var(--dark-text-primary); +} + +/* ── Résumé ──────────────────────────────────────────────────────────── */ + +.obj_article_details .item.abstract p { + font-family: var(--font-serif); + font-size: 0.9375rem; + line-height: 1.7; + color: var(--text-secondary); + text-align: justify; + hyphens: auto; + margin: 0; +} + +body.dark .obj_article_details .item.abstract p { + color: var(--dark-text-secondary); +} + +/* ── Galleys ─────────────────────────────────────────────────────────── */ + +.obj_article_details .item.galleys ul.galleys_links { + list-style: none; + padding: 0; + margin: 0; + display: flex; + flex-direction: column; + gap: 6px; +} + +.obj_article_details .item.galleys a.obj_galley_link { + display: inline-flex; + align-items: center; + justify-content: center; + gap: 5px; + width: 100%; + font-family: var(--font-sans); + font-size: 0.75rem; + font-weight: 600; + letter-spacing: 0.05em; + text-transform: uppercase; + padding: 5px 12px; + border: 1.5px solid var(--primary-color); + border-radius: 2px; + color: var(--primary-color); + text-decoration: none; + transition: background var(--transition-fast), color var(--transition-fast); + background: transparent; +} + +.obj_article_details .item.galleys a.obj_galley_link:hover { + background: var(--primary-color); + color: #fff; +} + +body.dark .obj_article_details .item.galleys a.obj_galley_link { + border-color: var(--accent-color); + color: var(--accent-color); +} + +body.dark .obj_article_details .item.galleys a.obj_galley_link:hover { + background: var(--accent-color); + color: #fff; +} + +/* ── Rubrique / issue ────────────────────────────────────────────────── */ + +.obj_article_details .item.issue .value { + font-family: var(--font-sans); + font-size: 0.875rem; + color: var(--text-secondary); +} + +body.dark .obj_article_details .item.issue .value { + color: var(--dark-text-secondary); +} + +.obj_article_details{ + border-bottom: 2px solid #718EAC; +} + +/* ── Responsive ──────────────────────────────────────────────────────── */ + +@media (max-width: 768px) { + .obj_article_details .row { + flex-direction: column; + gap: var(--spacing-lg); + } + + .obj_article_details .main_entry { + padding-right: 0; + } + + .obj_article_details .entry_details { + flex: none; + border-left: none; + border-top: 1px solid #e2e8f0; + padding-left: 0; + padding-top: var(--spacing-md); + } + + body.dark .obj_article_details .entry_details { + border-top-color: var(--dark-border); + } +} + +.pkp_structure_footer_wrapper{ +border-top: 2px solid#718EAC; +margin-top: 2em; +} + +.filter-bar{ + display: none; +} + +.LangMode{ + display: none; +} + +.affiliation{ + display: block; +} + +.pkp_structure_head{ +font-family: "Merriweather Sans","Helvetica Neue",Helvetica,Arial,sans-serif; + background-color: white; + padding: 8px 0 0; + border-bottom: 2px solid #718EAC; + font-size: 1rem; + line-height: 1.5; + height: var(--nav-height); + align-items: center; + padding: 0 var(--spacing-md); +} + +.pkp_site_name{ + padding: 0.8rem; +} + +.pkp_brand_footer{ + max-width: 10%; + padding: 20px; + align-content: center; + display: flex; + margin: auto; +} + +/* ── Linked Data cards ───────────────────────────────────────────────── */ + +.linked_data { + display: flex; + flex-direction: column; + gap: 3px; + padding: var(--spacing-md); + background-color: #fafaf9; + border: 1px solid #e7e5e4; + border-left: 3px solid var(--primary-color); + border-radius: 6px; + margin-bottom: var(--spacing-md); + box-sizing: border-box; + transition: box-shadow var(--transition-base), border-color var(--transition-base); + font-family: var(--font-sans); +} + +.linked_data:hover { + box-shadow: var(--shadow-md); + border-left-color: var(--accent-color); +} + +body.dark .linked_data { + background-color: var(--dark-bg-secondary); + border-color: var(--dark-border); + border-left-color: var(--accent-color); +} + +/* Titre du dataset */ +.linked_data .data-title { + font-size: 0.9rem; + font-weight: 700; + color: var(--text-primary); + margin: 0 0 2px; + line-height: 1.3; +} + +body.dark .linked_data .data-title { + color: var(--dark-text-primary); +} + +/* Auteurs — empilés correctement */ +.linked_data .data-author { + font-size: 0.78rem; + color: var(--text-secondary); + margin: 0; + line-height: 1.5; +} + +.linked_data .data-author + .data-author { + margin-top: 0; +} + +.linked_data .data-author::before { + content: ""; + display: inline-block; + width: 0.4em; + height: 0.4em; + background-color: var(--accent-color); + border-radius: 50%; + margin-right: 5px; + vertical-align: middle; + opacity: 0.7; +} + +/* Date */ +.linked_data .data-date { + font-size: 0.75rem; + font-weight: 600; + color: var(--text-muted); + text-align: right; + margin: 0; + white-space: nowrap; + align-self: start; +} + +body.dark .linked_data .data-date { + color: var(--dark-text-secondary); +} + +/* Description */ +.linked_data .data-desc { + font-size: 0.8rem; + color: var(--text-secondary); + line-height: 1.55; + margin: 4px 0 0; + padding-top: var(--spacing-xs); + border-top: 1px solid #e7e5e4; +} + +body.dark .linked_data .data-desc { + color: var(--dark-text-secondary); + border-top-color: var(--dark-border); +} + +/* Citation */ +.linked_data .data-citation { + font-size: 0.75rem; + font-style: italic; + color: var(--text-muted); + margin: 2px 0 0; + line-height: 1.5; + padding: var(--spacing-xs) var(--spacing-sm); + background: rgba(26, 84, 144, 0.05); + border-radius: 3px; +} + +body.dark .linked_data .data-citation { + color: var(--dark-text-secondary); + background: rgba(14, 165, 233, 0.08); +} + +/* Ligne licence + lien côte à côte */ +.linked_data .data-license, +.linked_data .data-link { + display: inline; +} + +.linked_data .data-license + .data-link, +.linked_data .data-link { + /* regroupés dans une pseudo-ligne via order + flex sur le parent */ +} + +/* Licence */ +.linked_data .data-license { + order: 5; + font-size: 0.7rem; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.06em; + color: #fff; + background-color: var(--primary-color); + padding: 2px 7px; + border-radius: 3px; + margin: 0; + align-self: center; + justify-self: start; + line-height: 1.6; +} + +body.dark .linked_data .data-license { + background-color: var(--accent-color); +} + +/* Lien DOI / URL */ +.linked_data .data-link { + font-size: 0.75rem; + margin: 0; + text-align: right; + align-self: center; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.linked_data .data-link a { + color: var(--primary-color); + text-decoration: none; + font-weight: 500; + transition: color var(--transition-fast); +} + +.linked_data .data-link a:hover { + color: var(--accent-color); + text-decoration: underline; +} + +body.dark .linked_data .data-link a { + color: var(--accent-color); +} + +/* Responsive */ +@media (max-width: 768px) { + .linked_data .data-date, + .linked_data .data-link { + text-align: left; + } +} +/* ── Citation — clic pour copier ─────────────────────────────────────── */ + +.linked_data .data-citation { + cursor: pointer; + user-select: none; + position: relative; + transition: background var(--transition-fast), color var(--transition-fast); +} + +.linked_data .data-citation:hover { + background: rgba(26, 84, 144, 0.12); + color: var(--primary-color); +} + +body.dark .linked_data .data-citation:hover { + background: rgba(14, 165, 233, 0.15); + color: var(--accent-color); +} + +.linked_data .data-citation::after { + font-style: normal; + font-size: 0.7em; + opacity: 0.45; + transition: opacity var(--transition-fast); +} + +.linked_data .data-citation:hover::after { + opacity: 1; +} + +.linked_data .data-citation.copied { + background: rgba(16, 185, 129, 0.12); + color: #059669; + font-style: normal; +} + +.linked_data .data-citation.copied::after { + content: " ✓"; + opacity: 1; +} + +.expan button{ + background: none; + background-color: rgba(0, 0, 0, 0); + border: none; + cursor: pointer; + font-size: inherit; + order: 5; + font-size: 0.7rem; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.06em; + color: #fff; + background-color: var(--primary-color); + padding: 2px 7px; + border-radius: 3px; + margin: 0; + margin-top: 0px; + margin-bottom: 0px; + align-self: center; + justify-self: start; + line-height: 1.6; + display: flex; + margin: auto; + margin-bottom: 1em; + margin-top: 1em; +} + +#refs li.bibl { + padding: var(--spacing-sm) var(--spacing-md); + border-left: 3px solid transparent; + border-right: 5px solid transparent; + border-radius: 8px; + transition: all var(--transition-base); + box-sizing: border-box; +} + +body.dark #refs li.bibl { + background-color: var(--dark-bg-secondary); +} + +body.dark #refs li.bibl.focus { + border-left-color: var(--accent-color); + background-color: rgba(224, 123, 57, 0.08); +} \ No newline at end of file diff --git a/resources/styles/landingpage_pkp.css b/resources/styles/landingpage_pkp.css deleted file mode 100644 index eb0a6b3..0000000 --- a/resources/styles/landingpage_pkp.css +++ /dev/null @@ -1,225 +0,0 @@ -div.landingPage h1 { - display: none; -} - -#toc ol { - list-style-type: none; -} - -.xref-call { - vertical-align: top; - font-size: 50%; -} - -span[class*="fn-call"], -sup { - /** must not affect line height **/ - font-size: 0.6em; - vertical-align: 0.65em; - line-height: 0; -} - -span[class*="fn-call"] { - /*font-variant-position: super;*/ - color: var(--third-color); - cursor: pointer; -} - -.button-tabs{ - border-bottom : 1px solid #ddd; - width: var(--right-width); - height: var(--btn-tabs-height); - z-index: 1; - background-color: white; -} - -.dark .button-tabs { - border-bottom: 1px solid var(--dark-theme-txt); - background-color: var(--dark-theme-bg); -} - -.tab-btn{ - background-color: white; - padding: 10px ; - font-size: 1rem; - cursor: pointer; - border: none; - font-weight: bold; - height: var(--btn-tabs-height); -} - -#tabtn-metas{ - display: none; -} - -.mixed-citation { - margin-top: 10px; - margin-bottom: 10px; - padding: 10px; - border-bottom: 1px solid #888; -} - - /***** FOOTNOTES ******/ -div[id^="footnotes"] ul, -div[id^="footnotes"] ul { - list-style-type: none; -} - -div[id^="footnotes"] li{ - box-sizing: border-box; - padding: 20px 10px 20px 10px; - border-bottom: 1px solid #888; -} - -div[id^="footnotes"] li.focus, #refs .ref.focus{ - border-right: 5px solid var(--third-color); -} - -div[id^="footnotes"] li .label { - display: inline-block; - margin-right:10px; - cursor: pointer; -} - -div[id^="footnotes"] li .label:hover{ - color: var(--grey-color); -} - -div[id^="footnotes"] li .label:before { - content: '['; -} - -div[id^="footnotes"] li .label:after { - content: ']'; -} - -/* -#footnotes .label { - color:var(--third-color); -} -*/ - -div[id^="footnotes"] .label { - color:var(--third-color); -} - -.article-and-metas{ - display: -ms-grid; - display: grid; - grid-template-columns: repeat(12, 1fr); - grid-column-gap: 24px; - max-width: 1114px; - padding: 0; -} - -@media only screen and (min-width: 75em) { - .right-contents { - display: block; - grid-column: 1/4; - -ms-grid-row: 3; - grid-row: 3; - } -} - -@media only screen and (min-width: 75em) { - .left-contents { - margin-left: 36px; - margin-left: 2.25rem; - margin-right: 36px; - margin-right: 2.25rem; - grid-column: 4/13; - -ms-grid-row: 3; - grid-row: 3; - } -} - -.front{ - list-style: none; - margin: 0; - padding: 0; - position: -webkit-sticky; - position: sticky; - top: 110px; -} - -#mode-color-btns, -.langBtns, -.button-tabs{ - display: none; -} - - -/***** TOC *******/ - -#toc li { - margin-top:5px; -} -#toc a { - color: #757575; - text-decoration: none; - /* padding-left: 5px; - padding-right: 5px;*/ - /*display: inline-block;*/ -} - -#toc a:hover{ - color: black; -} - -.dark #toc a { - color: var(--dark-theme-txt); -} - -#toc a.active { - color: white; - background-color: black; - padding-left: 5px; - padding-right: 5px; -} - -.dark #toc a.active { - color: var(--dark-theme-bg); - background-color: var(--dark-theme-txt); -} - -#toc ol { - list-style-type: none; - padding-left: 0; -} - -#toc .section2 { - margin-left:5%; -} - -#toc .section3 { - margin-left:10%; -} - -#toc .section4 { - margin-left:15%; -} - -#toc .section5 { - margin-left:20%; -} - -#toc ol li ol { - margin-left: 10%; -} - -.obj_galley_link::before { - display: inline; - font: normal normal normal 14px/1 FontAwesome; - font-size: 14px; - font-size: inherit; - text-rendering: auto; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - transform: translate(0, 0); - content: "\f0f6"; - margin-right: 0.25em; -} - -div.LangMode{ - display: none; -} diff --git a/resources/styles/landingpage_tei.css b/resources/styles/landingpage_tei.css deleted file mode 100644 index 41c10e8..0000000 --- a/resources/styles/landingpage_tei.css +++ /dev/null @@ -1,232 +0,0 @@ -div.article-and-metas h1 { - display: none; -} - -#toc ol { - list-style-type: none; -} - -.xref-call { - vertical-align: top; - font-size: 50%; -} - -span[class*="fn-call"], -sup { - /** must not affect line height **/ - font-size: 0.6em; - vertical-align: 0.65em; - line-height: 0; -} - -span[class*="fn-call"] { - /*font-variant-position: super;*/ - color: var(--third-color); - cursor: pointer; -} - -.button-tabs{ - border-bottom : 1px solid #ddd; - width: var(--right-width); - height: var(--btn-tabs-height); - z-index: 1; - background-color: white; -} - -.dark .button-tabs { - border-bottom: 1px solid var(--dark-theme-txt); - background-color: var(--dark-theme-bg); -} - -.tab-btn{ - background-color: white; - padding: 10px ; - font-size: 1rem; - cursor: pointer; - border: none; - font-weight: bold; - height: var(--btn-tabs-height); -} - -#tabtn-metas{ - display: none; -} - -.mixed-citation { - margin-top: 10px; - margin-bottom: 10px; - padding: 10px; - border-bottom: 1px solid #888; -} - - /***** FOOTNOTES ******/ -div[id^="footnotes"] ul, -div[id^="footnotes"] ul { - list-style-type: none; -} - -div[id^="footnotes"] li{ - box-sizing: border-box; - padding: 20px 10px 20px 10px; - border-bottom: 1px solid #888; -} - -div[id^="footnotes"] li.focus, #refs .ref.focus{ - border-right: 5px solid var(--third-color); -} - -div[id^="footnotes"] li .label { - display: inline-block; - margin-right:10px; - cursor: pointer; -} - -div[id^="footnotes"] li .label:hover{ - color: var(--grey-color); -} - -div[id^="footnotes"] li .label:before { - content: '['; -} - -div[id^="footnotes"] li .label:after { - content: ']'; -} - -/* -#footnotes .label { - color:var(--third-color); -} -*/ - -div[id^="footnotes"] .label { - color:var(--third-color); -} - -.article-and-metas{ - display: -ms-grid; - display: grid; - grid-template-columns: repeat(12, 1fr); - grid-column-gap: 24px; - max-width: 1114px; - padding: 0; -} - -@media only screen and (min-width: 75em) { - .right-contents { - display: block; - grid-column: 1/4; - -ms-grid-row: 3; - grid-row: 3; - } -} - -@media only screen and (min-width: 75em) { - .left-contents { - margin-left: 36px; - margin-left: 2.25rem; - margin-right: 36px; - margin-right: 2.25rem; - grid-column: 4/13; - -ms-grid-row: 3; - grid-row: 3; - } -} - -.front{ - list-style: none; - margin: 0; - padding: 0; - position: -webkit-sticky; - position: sticky; - top: 110px; -} - -#mode-color-btns, -.langBtns, -.button-tabs{ - display: none; -} - - -/***** TOC *******/ - -#toc li { - margin-top:5px; -} -#toc a { - color: #757575; - text-decoration: none; - /* padding-left: 5px; - padding-right: 5px;*/ - /*display: inline-block;*/ -} - -#toc a:hover{ - color: black; -} - -.dark #toc a { - color: var(--dark-theme-txt); -} - -#toc a.active { - color: white; - background-color: black; - padding-left: 5px; - padding-right: 5px; -} - -.dark #toc a.active { - color: var(--dark-theme-bg); - background-color: var(--dark-theme-txt); -} - -#toc ol { - list-style-type: none; - padding-left: 0; -} - -#toc .section2 { - margin-left:5%; -} - -#toc .section3 { - margin-left:10%; -} - -#toc .section4 { - margin-left:15%; -} - -#toc .section5 { - margin-left:20%; -} - -#toc ol li ol { - margin-left: 10%; -} - -span.value{ - display: block; - font-size: 80%; -} - -fn span{ - display: none; - position: absolute; - height: fit-content; - width: 350px; - background-color: #f9f8f2; - text-align: left; - color: #808080; - font-size: 0.9em; - border-bottom: solid 2px rgba(235, 234, 221); - border-left: solid 2px rgba(235, 234, 221); - border-radius: 10px; - z-index: 999; -} - -div.LangMode{ - display: none; -} \ No newline at end of file diff --git a/resources/styles/xml_2_html.css b/resources/styles/xml_2_html.css index 08988b1..4786d48 100644 --- a/resources/styles/xml_2_html.css +++ b/resources/styles/xml_2_html.css @@ -1,5 +1,4 @@ :root { - /* Palette de couleurs moderne et professionnelle (from CHARLES) */ --primary-color: #1a5490; --primary-hover: #2f6fb3; --accent-color: #0ea5e9; @@ -7,14 +6,12 @@ --text-secondary: #64748b; --text-muted: #94a3b8; - /* Dark theme (from CHARLES) */ --dark-bg-primary: #0f172a; --dark-bg-secondary: #1e293b; --dark-text-primary: #e2e8f0; --dark-text-secondary: #cbd5e1; --dark-border: #334155; - /* EVA legacy colors (kept for compatibility) */ --dark-theme-bg: #22272e; --dark-theme-txt: #adbac7; --grey-color: #777; @@ -24,7 +21,6 @@ --right-width: 35%; --btn-tabs-height: 40px; - /* Spacing & Layout (from CHARLES) */ --max-content-width: 850px; --sidebar-width: 480px; --nav-height: 64px; @@ -33,26 +29,21 @@ --spacing-md: 1.2rem; --spacing-lg: 2rem; --spacing-xl: 3rem; - --spacing-xxl: 4rem; - /* Typography (from CHARLES) */ --font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; --font-serif: "Georgia", "Times New Roman", Times, serif; --font-mono: "SF Mono", Monaco, "Cascadia Code", "Roboto Mono", Consolas, monospace; - /* Shadows (from CHARLES) */ --shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05); --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1); --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1); - /* Transitions (from CHARLES) */ --transition-fast: 150ms ease; --transition-base: 250ms ease; } -/* Reset et Base (from CHARLES) */ * { margin: 0; padding: 0; @@ -79,7 +70,6 @@ body.dark { } /*********/ -/* Navigation modernisée (from CHARLES) */ nav { position: fixed; top: 0; @@ -109,7 +99,6 @@ nav li { font-weight: 500; } -/* Boutons de mode (from CHARLES) */ #mode-color-btns { position: fixed; top: 10px; @@ -141,7 +130,6 @@ body.dark #moon:hover { background-color: rgba(255, 255, 255, 0.1); } -/* Layout principal (from CHARLES) */ .wrap { padding-top: 42px; min-height: 100vh; @@ -152,7 +140,7 @@ body.dark #moon:hover { position: fixed; } -.wrap > a[role="button"] { +.LangMode > a[role="button"] { cursor: pointer; } @@ -168,7 +156,6 @@ section.back { overflow: hidden; } -/* Contenu principal (from CHARLES) */ .left-contents { flex: 1 1 auto; display: flex; @@ -186,7 +173,6 @@ section.back { margin: 0 auto; } -/* Panneau latéral (from CHARLES) */ .right-contents { flex: 0 0 auto; width: var(--sidebar-width); @@ -221,7 +207,6 @@ body.dark .right-contents { border-left-color: var(--dark-border); } -/* Titres élégants (from CHARLES) */ .left-contents h1:not(div.boxed-text *) { font-family: var(--font-serif); font-size: 2.5rem; @@ -263,7 +248,6 @@ section.front ol, section.front ol { padding-left: 25px; } -/* Onglets (from CHARLES) */ .front > .button-tabs { position: sticky; top: 0; @@ -399,7 +383,7 @@ body.dark section.body p:not(div.boxed-text *, .caption, .credits, details *) { font-family: var(--font-serif); font-size: 1.875rem; font-weight: 700; - margin-top: -40px; + margin-top: 10px; margin-bottom: 10px; color: var(--text-primary); letter-spacing: -0.01em; @@ -454,7 +438,7 @@ section.body h6 { } section.body p.firstPara:not(div.boxed-text *, details *) { - margin-top: var(--spacing-xxl); + margin-top: var(--spacing-xl); } /***** figure *******/ @@ -871,20 +855,11 @@ bodyInclusion p.firstPara:not(div.boxed-text *) { } .right-contents #refs li { - margin-left: 0.1em; + margin-left: 1.5em; text-indent: -1.5em; + margin-bottom: var(--spacing-md); font-size: 0.9375rem; - margin-bottom: 0.2rem; line-height: 1.6; - padding-left: 2.8em; - padding-right: var(--spacing-md); - padding-top: 0.6rem; - padding-bottom: 0.6rem; - background-color: #fafaf9; - border-left: 3px solid transparent; - border-radius: 8px; - transition: all var(--transition-base); - box-sizing: border-box; } .right-contents #refs h3 { @@ -910,11 +885,11 @@ body.dark .right-contents #refs h3 { font-size: 90%; } -p.bibl-cr { +section.review p.bibl-cr { + margin-bottom: 50px; margin-left: 30px; } -/***** TOC (from CHARLES) *******/ #toc { font-size: 0.9375rem; @@ -986,12 +961,11 @@ body.dark #toc a.active { /***** REVIEW *******/ .author-aut, -.authority_affiliation { - text-align: right !important; +.authority_affiliation, +.authority_mail { + text-align: right; } -/***** INLINE ELEMENTS (from CHARLES) ******/ - span[class*="fn-call"], sup { font-size: 0.75em; vertical-align: super; @@ -1003,8 +977,7 @@ sub { font-size: .60em; } -span[class*="fn-call"], -span[class*="bib-ref-call"] { +span[class*="fn-call"] { color: var(--primary-color); cursor: pointer; transition: color var(--transition-fast); @@ -1036,7 +1009,6 @@ body.dark span.bibr-call { border-bottom-color: var(--accent-color); } -/***** FOOTNOTES (from CHARLES) ******/ div[id^="footnotes"] ul, div[id^="footnotes"] ul { list-style-type: none; @@ -1058,16 +1030,13 @@ body.dark div[id^="footnotes"] li { background-color: var(--dark-bg-secondary); } -div[id^="footnotes"] li.focus, -.right-contents #refs li.focus, -#refs .ref.focus { +div[id^="footnotes"] li.focus, #refs .ref.focus { border-left-color: var(--primary-color); background-color: rgba(26, 84, 144, 0.05); border-right: 5px solid var(--third-color); } -body.dark div[id^="footnotes"] li.focus, -body.dark div[id^="refs"] li.focus { +body.dark div[id^="footnotes"] li.focus { border-left-color: var(--accent-color); background-color: rgba(14, 165, 233, 0.08); } @@ -1233,7 +1202,6 @@ body.dark .meta-field:before { text-decoration: underline; } -/********* BOXED TEXT (from CHARLES) **********/ div.boxed-text { border: 2px solid var(--primary-color); border-radius: 12px; @@ -1299,7 +1267,6 @@ div.item.galleys ul { list-style-type: none; } -/*********** QUOTE (from CHARLES) *******************/ disp-quote { display: block; text-align: right; @@ -1339,7 +1306,7 @@ blockquote + blockquote { white-space: pre; } -/*************** DRAG-BAR (from CHARLES) ***************************/ + ul, ol { margin-top: 1ex; margin-bottom: 1.5ex; @@ -1383,7 +1350,7 @@ body.dark #drag-bar:hover { text-align: right; } -/* Liens (from CHARLES) */ + a { color: var(--primary-color); text-decoration: none; @@ -1398,7 +1365,7 @@ body.dark a { color: var(--accent-color); } -/* Scrollbar personnalisée (from CHARLES) */ + ::-webkit-scrollbar { width: 8px; height: 8px; @@ -1425,7 +1392,7 @@ body.dark ::-webkit-scrollbar-thumb:hover { background: #475569; } -/* Styles spécifiques pour Mirador dans le panneau latéral (from CHARLES) */ + #mirador-container { width: 100%; height: calc(100vh - 80px); @@ -1453,7 +1420,6 @@ body.dark #mirador-container { height: 100% !important; } -/* Responsive (from CHARLES) */ @media (max-width: 1200px) { .right-contents { width: 320px; @@ -1500,4 +1466,8 @@ div.idno { padding-left: 5px; margin-top: 2px; margin-bottom: 2px; +} + +.filter-bar { + display: none; } \ No newline at end of file diff --git a/templates/HTMLGalleyView.tpl b/templates/HTMLGalleyView.tpl index 56c09c0..4b830e3 100644 --- a/templates/HTMLGalleyView.tpl +++ b/templates/HTMLGalleyView.tpl @@ -7,7 +7,12 @@ {$currentContext->getLocalizedName()} - + {if $cssSideViewUrl} + + {else} + + {/if} + diff --git a/templates/LandingPage.tpl b/templates/LandingPage.tpl index d05da9f..df7aeca 100644 --- a/templates/LandingPage.tpl +++ b/templates/LandingPage.tpl @@ -20,33 +20,72 @@ * @hook Templates::Article::Footer::PageFooter [] *} -{include file="frontend/components/header.tpl" pageTitleTranslated=$article->getCurrentPublication()->getLocalizedFullTitle(null, 'html')|strip_unsafe_html} + + {if $section} + {include file="frontend/components/breadcrumbs_article.tpl" currentTitle=$section->getLocalizedTitle()} + {else} + {include file="frontend/components/breadcrumbs_article.tpl" currentTitleKey="common.publication"} + {/if}
    +{include file="frontend/objects/article_details.tpl"} + - - - {if $section} - {include file="frontend/components/breadcrumbs_article.tpl" currentTitle=$section->getLocalizedTitle()} - {else} - {include file="frontend/components/breadcrumbs_article.tpl" currentTitleKey="common.publication"} + + + + + + {if $cssLandingPageUrl} + + {else} + {/if} - - - - {include file="frontend/objects/article_details.tpl"} - - + +
    + {$text} +
    {call_hook name="Templates::Article::Footer::PageFooter"}
    -
    - {$text} -
    + {include file="frontend/components/footer.tpl"} \ No newline at end of file diff --git a/templates/settingsForm.tpl b/templates/settingsForm.tpl index 7b5c500..b2cb3ac 100644 --- a/templates/settingsForm.tpl +++ b/templates/settingsForm.tpl @@ -1,27 +1,76 @@ - - +
    +

    {translate key="plugins.generic.xml2html.settingsFor"} {$currentContext->getLocalizedName()}

    {csrf} - {fbvFormSection label="plugins.generic.xml2html.landingpage"} - - {/fbvFormSection} + {fbvFormSection label="plugins.generic.xml2html.format"} - + + {/fbvFormSection} + + {fbvFormSection} + {/fbvFormSection} + + {fbvFormSection label="plugins.generic.xml2html.cssLandingPage"} + + {if $cssLandingPageUrl} +

    + {translate key="plugins.generic.xml2html.customCss.current"} + {translate key="plugins.generic.xml2html.customCss.view"} | + + {translate key="plugins.generic.xml2html.customCss.delete"} + + +

    + {/if} + {/fbvFormSection} + + {fbvFormSection label="plugins.generic.xml2html.cssSideView"} + + {if $cssSideViewUrl} +

    + {translate key="plugins.generic.xml2html.customCss.current"} + {translate key="plugins.generic.xml2html.customCss.view"} | + + {translate key="plugins.generic.xml2html.customCss.delete"} + + +

    + {/if} + {/fbvFormSection} + {fbvFormButtons submitText="common.save"} +
  • diff --git a/xsl/jats/jats2html.xsl b/xsl/jats/jats2html.xsl index 603c71a..fa37024 100644 --- a/xsl/jats/jats2html.xsl +++ b/xsl/jats/jats2html.xsl @@ -90,6 +90,20 @@ +
    + + +
    +
    diff --git a/xsl/tei/03-tei2html_core.xsl b/xsl/tei/03-tei2html_core.xsl index e27311f..99cbfb3 100644 --- a/xsl/tei/03-tei2html_core.xsl +++ b/xsl/tei/03-tei2html_core.xsl @@ -69,6 +69,20 @@ +
    + + +
    +
    @@ -115,6 +129,9 @@ + + + @@ -174,6 +191,42 @@
    + +
    - -

    - -

    -
    -
    + +

    + +

    +
    +

    @@ -286,7 +286,7 @@ - + @@ -432,7 +432,7 @@ - + @@ -1504,6 +1504,12 @@

    + + + + + + @@ -1762,7 +1768,7 @@ - + @@ -1772,9 +1778,28 @@

    -
    +
    + + + + + + + + +
    +
    +
    +
    + + + + + + + diff --git a/xsl/tei/03-tei2html_core.xsl b/xsl/tei/03-tei2html_core.xsl index 99cbfb3..99cb1d1 100644 --- a/xsl/tei/03-tei2html_core.xsl +++ b/xsl/tei/03-tei2html_core.xsl @@ -12,7 +12,7 @@ - + @@ -31,40 +31,40 @@
    -
    -
    - FR - | - EN - | - ES -
    - - -
    +
    +
    + FR + | + EN + | + ES +
    + +
    - +
    +
    @@ -142,7 +142,7 @@ - +
    @@ -167,7 +167,7 @@ . - + @@ -191,7 +191,7 @@
    - +