diff --git a/CHANGES.md b/CHANGES.md index 164def7a..b61c1741 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,14 +1,30 @@ -# ChangeLog +# Changelog +## Version 9.1.0 +- Modifications : + - Amélioration de l'algorithme de gestion des barres + - Script Google Analytics + - Menu : effet de surimpression pages filles + - Réorganisation de l'écran d'édition des pages + - Blog : notification hiérarchique lors de la rédaction d'un commentaire + - Form : notification hiérarchique de la récepton d'un message +- Ajouts : + - Menu dans une barre latérale : intégral ou sous-menu de la page parente + - Option d'apparition des pages dans le menu latéral ou le menu principal + - Option de chargement d'un modèle de site à l'installation + - Option de masquage des pages enfants dans le menu principal + - Petits écrans, ordre des blocs : Page - Barre Gauche - Barre Droite + - Intégration de la classe Swiper http://idangero.us/swiper/ + - Intégration de l'URL canonical + - Icône de suppression des pages dans la barre d'administration + - Gestion du sitemap.xml et du robots.txt ## Version 9.0.21 - Mise à jour : - Code Mirror v5.46 - Corrections : - Liens de l'éditeur de page : impossibilité de sélectionner un lien vers une page parente - - Export des données du site, problème lors de la création de l'arborescence - - Titre de l'icône Youtube erroné - - Translittératon activée et multi-sélection dans le gestionnaire de fichiers + - Export des données du site, problème lors de la création de l'arborescence. ## Version 9.0.20 - Correction : @@ -16,11 +32,11 @@ ## Version 9.0.19 - Correction : - - Alignement du menu - + - Alignement du menu + ## Version 9.0.18 - Correction : - - Etat par défaut du numéro de version mal récupéré + - Etat par défaut du numéro de version mal récupéré ## Version 9.0.17 - Mises à jour : @@ -31,10 +47,10 @@ - Harmonisation du contenu des bulles d'aide - Modifications : - Ajout du numéro de version dans le pied de page activable dans la configuration du thème - - Désactivation Aviary dans Responsive FileManager + - Désactivation Aviary dans Responsive FileManager ## Version 9.0.16 -- Corrections : +- Correction : - Nom de page constitué de caractères filtrés empếchant la création d'un Id valide. - Module Gallery : bouton de fermeture sous Edge @@ -46,11 +62,11 @@ - Masquage de l'icône de gestion du compte ## Version 9.0.14 -- Modifications : - - Tippy, lity et TinyMCE, simpleLightbox : - - légende et titre, nouveaux paramètres - - SimpleLightbox : bug d'affichage sous Edge, autre méthode - - Meilleure intégration +- Corrections : + - Débordement dans le pied de page quand le copyright est à droite +- Modifications : + - Petits écrans, menu d'administration plus icônes plus grandes + - Masquage de l'icône de gestion du compte ## Version 9.0.13 - Modifications : diff --git a/core/core.js.php b/core/core.js.php index 9abda891..a796e0e5 100755 --- a/core/core.js.php +++ b/core/core.js.php @@ -328,9 +328,29 @@ core.start = function() { }); }).trigger("resize"); + // Ajouter l'attribut data-lity afin de faire la liaison avec lity + //$("a[rel='data-lity']").attr("data-lity",""); + + // Ajouter la classe Gallery afin de faire la liaison avec simplelightbox + //$("a[rel='gallery']").addClass("gallery",""); + + + // Appel dans init.js + // $('.gallery').simpleLightbox(); + }; core.start(); +/** + * Confirmation de suppression + */ +$("#pageDelete").on("click", function() { + var _this = $(this); + return core.confirm("Êtes-vous sûr de vouloir supprimer cette page ?", function() { + $(location).attr("href", _this.attr("href")); + }); +}); + /** * Calcul de la luminance relative d'une couleur */ diff --git a/core/core.php b/core/core.php index 6988696b..7a96edf1 100644 --- a/core/core.php +++ b/core/core.php @@ -27,8 +27,8 @@ class common { const GROUP_MODERATOR = 2; const GROUP_ADMIN = 3; - // Numéro de version stable - const ZWII_VERSION = '9.0.21'; + // Numéro de version + const ZWII_VERSION = '9.1.00.dev63'; public static $actions = []; public static $coreModuleIds = [ @@ -55,6 +55,8 @@ class common { public $output = [ 'access' => true, 'content' => '', + 'contentLeft' => '', + 'contentRight' => '', 'display' => self::DISPLAY_LAYOUT_MAIN, 'metaDescription' => '', 'metaTitle' => '', @@ -79,7 +81,8 @@ class common { 'tippy', 'zwiico', 'imagemap', - 'simplelightbox' + 'simplelightbox', + 'swiper' ], 'view' => '' ]; @@ -142,8 +145,6 @@ class common { } // Mise à jour des données core - // Fonction désactivée en dev - // if (stripos(common::ZWII_VERSION, 'dev') === 0 ) $this->update(); // Utilisateur connecté @@ -213,9 +214,6 @@ class common { $this->url = $this->getData(['config', 'homePageId']); } } - - // Mise à jour de la liste des pages pour TinyMCE - $this->linkList(); } /** @@ -519,7 +517,6 @@ class common { * Enregistre les données dans deux fichiers séparés */ public function saveData() { - // Save config core page module et user // 5 premières clés principales // Trois tentatives @@ -543,9 +540,10 @@ class common { } /** - * Génére un fichier json avec la liste des + * Génére un fichier json avec la liste des pages + * */ - public function linkList() { + public function pages2Json() { // Sauve la liste des pages pour TinyMCE $parents = []; $rewrite = (helper::checkRewrite()) ? '' : '?'; @@ -590,6 +588,89 @@ class common { } } + /** + * Génére un fichier robots.txt à l'installation + * Si le fichier exite déjà les commandes sont ajoutées + */ + + public function createRobots() { + + $robotValue = + PHP_EOL . + '# ZWII CONFIG ---------' . PHP_EOL . + 'User-agent: *' . PHP_EOL . + 'Disallow: /core/' . PHP_EOL . + 'Disallow: /module/' .PHP_EOL . + 'Disallow: /site/data' .PHP_EOL . + 'Disallow: /site/tmp' .PHP_EOL . + 'Disallow: /site/backup' .PHP_EOL . + 'Allow: /site/file/' .PHP_EOL . + 'Sitemap: ' . helper::baseUrl() . 'sitemap.xml' . PHP_EOL . + 'Sitemap: ' . helper::baseUrl() . 'sitemap.xml.gz' . PHP_EOL . + '# ZWII CONFIG ---------' . PHP_EOL ; + + + if (file_exists('robots.txt')) { + return(file_put_contents( + 'robots.txt', + $robotValue, + FILE_APPEND + )); + } else { + // Sinon on crée un fichier + return(file_put_contents( + 'robots.txt', + $robotValue + )); + } + } + + + /** + * Génére un fichier un fchier sitemap.xml + * https://github.com/icamys/php-sitemap-generator + * $command valeurs possible + * all : génére un site map complet + * Sinon contient id de la page à créer + */ + + public function createSitemap($command = "all") { + + require_once "core/vendor/sitemap/SitemapGenerator.php"; + + $sitemap = new \Icamys\SitemapGenerator\SitemapGenerator(helper::baseurl()); + + // will create also compressed (gzipped) sitemap + $sitemap->createGZipFile = true; + + // determine how many urls should be put into one file + // according to standard protocol 50000 is maximum value (see http://www.sitemaps.org/protocol.html) + $sitemap->maxURLsPerSitemap = 50000; + + // sitemap file name + $sitemap->sitemapFileName = "sitemap.xml"; + + $datetime = new DateTime(date('c')); + $datetime->format(DateTime::ATOM); // Updated ISO8601 + // sitemap index file name + $sitemap->sitemapIndexFileName = "sitemap-index.xml"; + foreach($this->getHierarchy(null, false, false) as $parentPageId => $childrenPageIds) { + $sitemap->addUrl ($parentPageId,$datetime); + foreach($childrenPageIds as $childKey) { + $sitemap->addUrl($childKey,$datetime); + } + } + // generating internally a sitemap + $sitemap->createSitemap(); + + // writing early generated sitemap to file + $sitemap->writeSitemap(); + + return(file_exists('sitemap.xml')); + + } + + /** * Envoi un mail @@ -790,6 +871,14 @@ class common { $this->setData(['core', 'dataVersion', 9017]); $this->SaveData(); } + // Version 9.1.0 + if($this->getData(['core', 'dataVersion']) < 9100) { + $this->setData(['theme','footer','displayVersion', true ]); + $this->setData(['theme','footer','displaySiteMap', true ]); + $this->setData(['theme','footer','displayCopyright', true ]); + $this->setData(['core', 'dataVersion', 9100]); + $this->SaveData(); + } } } @@ -1025,6 +1114,7 @@ class core extends common { } // Breadcrumb + $title = $this->getData(['page', $this->getUrl(0), 'title']); if (!empty($this->getData(['page', $this->getUrl(0), 'parentPageId'])) && $this->getData(['page', $this->getUrl(0), 'breadCrumb'])) { @@ -1048,12 +1138,15 @@ class core extends common { 'metaTitle' => $this->getData(['page', $this->getUrl(0), 'metaTitle']), 'typeMenu' => $this->getData(['page', $this->getUrl(0), 'typeMenu']), 'iconUrl' => $this->getData(['page', $this->getUrl(0), 'iconUrl']), - 'disable' => $this->getData(['page', $this->getUrl(0), 'disable']) + 'disable' => $this->getData(['page', $this->getUrl(0), 'disable']), + 'contentRight' => $this->getData(['page',$this->getData(['page',$this->getUrl(0),'barRight']),'content']), + 'contentLeft' => $this->getData(['page',$this->getData(['page',$this->getUrl(0),'barLeft']),'content']) ]); } // Importe le module else { // Id du module, et valeurs en sortie de la page si il s'agit d'un module de page + if($access AND $this->getData(['page', $this->getUrl(0), 'moduleId'])) { $moduleId = $this->getData(['page', $this->getUrl(0), 'moduleId']); $this->addOutput([ @@ -1062,7 +1155,9 @@ class core extends common { 'metaTitle' => $this->getData(['page', $this->getUrl(0), 'metaTitle']), 'typeMenu' => $this->getData(['page', $this->getUrl(0), 'typeMenu']), 'iconUrl' => $this->getData(['page', $this->getUrl(0), 'iconUrl']), - 'disable' => $this->getData(['page', $this->getUrl(0), 'disable']) + 'disable' => $this->getData(['page', $this->getUrl(0), 'disable']), + 'contentRight' => $this->getData(['page',$this->getData(['page',$this->getUrl(0),'barRight']),'content']), + 'contentLeft' => $this->getData(['page',$this->getData(['page',$this->getUrl(0),'barLeft']),'content']) ]); $pageContent = $this->getData(['page', $this->getUrl(0), 'content']); } @@ -1460,7 +1555,7 @@ class helper { // Cas où un identifiant est vide if (empty($text)) { $text = uniqid('page-'); - } + } // Un ID ne peut pas être un entier, pour éviter les conflits avec le système de pagination if(intval($text) !== 0) { $text = 'i' . $text; @@ -1690,14 +1785,14 @@ class layout extends common { */ public function showAnalytics() { if($code = $this->getData(['config', 'analyticsId'])) { - echo ''; + echo ' + + '; } } @@ -1716,22 +1811,48 @@ class layout extends common { echo '

' . $this->core->output['title'] . '

'; } echo $this->core->output['content']; + } + /** + * Affiche le contenu de la barre gauche + * @param page chargée + */ + public function showBarContentLeft() { + echo $this->core->output['contentLeft']; + } -/** + /** + * Affiche le contenu de la barre droite + * @param page chargée + */ + public function showBarContentRight() { + echo $this->core->output['contentRight']; + } + + /** * Affiche le copyright */ public function showCopyright() { - $items = '
'; - $items .= 'Motorisé par Zwii'; - $items .= ' getData(['theme','footer','displayVersion']) === true ? '>': 'class="displayNone" >' ) . - common::ZWII_VERSION . - "" ; - $items .= ''; - $items .= ' | Plan du site'; + $items = '
'; + $items .= ''; + $items .= ''; + if ($this->getData(['theme','footer','displayCopyright']) === true) { + $items .= 'Motorisé par '; + } + $items .= 'ZwiiCMS'; + //$items .= ''; + $items .= ''; + if ($this->getData(['theme','footer','displayVersion']) === true ) { + $items .= ' '. common::ZWII_VERSION ; + } + $items .= ''; + $items .= ''; + if ($this->getData(['theme','footer','displaySiteMap']) === true ) { + $items .= ' | Plan du site'; + } if( ( $this->getData(['theme', 'footer', 'loginLink']) @@ -1741,11 +1862,11 @@ class layout extends common { ) { $items .= 'getUrl(0) === 'theme' ? 'class="displayNone"' : '') . - '> | getUrl())) . '" data-tippy-content="Connexion à l\'administration" >Connexion'; } - $items .= '
'; + $items .= '
'; echo $items; } @@ -1775,9 +1896,13 @@ class layout extends common { $items = ''; $currentPageId = $this->getData(['page', $this->getUrl(0)]) ? $this->getUrl(0) : $this->getUrl(2); foreach($this->getHierarchy() as $parentPageId => $childrenPageIds) { + // Passer les entrées masquées + if ($this->getData(['page',$parentPageId,'hideMenuHead']) === true ) { + continue; + } // Propriétés de l'item $active = ($parentPageId === $currentPageId OR in_array($currentPageId, $childrenPageIds)) ? ' class="active"' : ''; - $targetBlank = $this->getData(['page', $parentPageId, 'targetBlank']) ? ' target="_blank"' : ''; + $targetBlank = $this->getData(['page', $parentPageId, 'targetBlank']) ? ' target="_blank"' : ''; // Mise en page de l'item $items .= '
  • '; @@ -1789,7 +1914,6 @@ class layout extends common { $items .= ''; } - switch ($this->getData(['page', $parentPageId, 'typeMenu'])) { case '' : $items .= $this->getData(['page', $parentPageId, 'title']); @@ -1813,18 +1937,31 @@ class layout extends common { } break; } - - - - if($childrenPageIds) { + // Cas où les pages enfants enfant sont toutes masquées dans le menu + // ne pas afficher de symbole lorsqu'il n'y a rien à afficher + $totalChild = 0; + $disableChild = 0; + foreach($childrenPageIds as $childKey) { + $totalChild += 1; + if ($this->getData(['page',$childKey,'hideMenuHead']) === true ) { + $disableChild += 1; + } + } + if($childrenPageIds && $disableChild !== $totalChild && + $this->getdata(['page',$parentPageId,'hideMenuChildren']) === false) { $items .= template::ico('down', 'left'); } + // ------------------------------------------------ $items .= ''; - - - + if ($this->getdata(['page',$parentPageId,'hideMenuChildren']) === true) { + continue; + } $items .= ''; + } + + $items .= ''; + $items .= '
  • '; + } + // Retourne les items du menu + echo ''; + } + + + /** * Affiche le meta titre */ public function showMetaTitle() { echo '' . $this->core->output['metaTitle'] . ''; echo ''; + $canonical = ($this->getUrl(0) == "accueil") ? "" : "?".$this->getUrl(0) ; + echo ''; } /** @@ -2014,6 +2255,7 @@ class layout extends common { OR $this->getUrl(0) === '' ) { $leftItems .= '
  • ' . template::ico('pencil') . '
  • '; + $leftItems .= '
  • ' . template::ico('trash') . '
  • '; } } // Items de droite @@ -2069,6 +2311,10 @@ class layout extends common { $socialUrl = 'https://www.facebook.com/'; $title = 'Facebook'; break; + case 'linkedinId': + $socialUrl = 'https://fr.linkedin.com/in/'; + $title = 'Linkedin'; + break; case 'instagramId': $socialUrl = 'https://www.instagram.com/'; $title = 'Instagram'; diff --git a/core/layout/common.css b/core/layout/common.css index a92e6aff..e165f419 100755 --- a/core/layout/common.css +++ b/core/layout/common.css @@ -31,10 +31,30 @@ body { */ @media (max-width: 768px) { body { - margin:2px 2px !important; + margin:2px 2px !important; } #site { - margin:2px auto !important; + margin:0px auto !important; + } + header { + margin:0px 0px !important; + background-size: cover !important; + } +} + +@media (max-width: 992px) { + .siteContainer { + display: flex; + flex-direction: column; + } + .siteContainer > #contentLeft { + order: 2; + } + .siteContainer > #contentRight { + order: 3; + } + .siteContainer > #contentSite { + order: 1; } } @@ -320,13 +340,14 @@ td > .col12 { width: 70% !important; } #bar #barRight { - font-size: 1.2em; + font-size: 1.2em; } #bar #barSelectPage { width: 80%; font-size: 120%; } } + @media (max-width: 992px) { #bar .zwiico-user { display: none; @@ -380,6 +401,7 @@ nav #toggle span { nav #menu { display: block; } + nav ul { padding: 0; margin: 0; @@ -389,6 +411,7 @@ nav li { display: inline-block; position: relative; } + nav li ul { display: block; position: absolute; @@ -397,13 +420,15 @@ nav li ul { opacity: 0; -webkit-transition: .3s ease-out; transition: .3s ease-out; + padding-left: 10px; } + nav li ul li { display: block; text-align: left; } nav li:hover ul { - z-index: 1; + z-index: 2; opacity: 1; } nav a { @@ -439,6 +464,8 @@ nav a:hover { padding-left: 40px !important; } } + + /* Barre de navigation fixe quand le menu est en-dehors du site */ #navfixedlogout { position: -webkit-sticky; /* Safari */ @@ -460,6 +487,19 @@ nav .zwiico-menu { } +/* Menu vertical */ + +#menuSide, #menuSideChild { + padding-left: 10px; + margin: 0px; + list-style: none; +} + +ul #menuSideChild, li #menuSideChild { + padding-left:10px; +} + + /* Corps */ section { padding: 20px; @@ -487,12 +527,17 @@ body > footer { footer { text-align: center; padding: 1px 20px; - vertical-align:middle; -} - -footer .col4 { vertical-align: middle; } + +#footerLoginLink, +#footerDisplayCopyright, +#footerDisplayVersion, +#footerDisplaySiteMap { + font-size: inherit; +} + + /* Conserve le pied de page sur une ligne */ @media (max-width: 992px) { footer .col4 { @@ -503,10 +548,6 @@ footer .col4 { } } -#footerDisplayVersion { - font-size: inherit; -} - footer #footerSocials span { color: #FFF; padding: 9px; @@ -522,11 +563,11 @@ footer #footerSocials .zwiico-facebook { footer #footerSocials .zwiico-facebook:hover { background: #324B80; } -footer #footerSocials .zwiico-googleplus { - background: #DD4B39; +footer #footerSocials .zwiico-linkedin { + background: #007BB6; } -footer #footerSocials .zwiico-googleplus:hover { - background: #D03724; +footer #footerSocials .zwiico-linkedin:hover { + background: #006881; } footer #footerSocials .zwiico-instagram { background: #E4405F; diff --git a/core/layout/main.php b/core/layout/main.php index 5845224b..7fb52caa 100755 --- a/core/layout/main.php +++ b/core/layout/main.php @@ -1,294 +1,325 @@ - - - - - - - showMetaTitle(); ?> - showMetaDescription(); ?> - showMetaType(); ?> - showMetaImage(); ?> - showFavicon(); ?> - showVendor(); ?> - - - - - -showStyle(); ?> -showBar(); ?> -showNotification(); ?> -getData(['theme', 'menu', 'position']) === 'body-first' || $this->getData(['theme', 'menu', 'position']) === 'top' ): ?> - - - -getData(['theme', 'header', 'position']) === 'body'): ?> - -
    - getData(['theme','header','linkHome'])){ - echo "" ;} ?> - getData(['theme', 'header', 'textHide']) === false - // Affiche toujours le titre de la bannière pour l'édition du thème - OR ($this->getUrl(0) === 'theme' AND $this->getUrl(1) === 'header') - ): ?> -
    - getData(['config', 'title']); ?> -
    - - getData(['theme','header','linkHome'])){echo "
    ";} - ?> -
    - - -getData(['theme', 'menu', 'position']) === 'body-second'): ?> - - - - -
    - getData(['theme', 'menu', 'position']) === 'site-first'): ?> - - - - getData(['theme', 'header', 'position']) === 'site' - // Affiche toujours la bannière pour l'édition du thème - OR ( - $this->getData(['theme', 'header', 'position']) === 'hide' - AND $this->getUrl(0) === 'theme' - ) - ): ?> - - getData(['theme','header','linkHome'])){ - echo "" ;} ?> -
    getData(['theme', 'header', 'position']) === 'hide'): ?>class="displayNone"> - getData(['theme', 'header', 'textHide']) === false - // Affiche toujours le titre de la bannière pour l'édition du thème - OR ($this->getUrl(0) === 'theme' AND $this->getUrl(1) === 'header') - ): ?> -
    - getData(['config', 'title']); ?> -
    - -
    - getData(['theme','header','linkHome'])){echo "
    ";} ?> - - getData(['theme', 'menu', 'position']) === 'site-second' || - $this->getData(['theme', 'menu', 'position']) === 'site' - // Affiche toujours le menu pour l'édition du thème - OR ( - $this->getData(['theme', 'menu', 'position']) === 'hide' - AND $this->getUrl(0) === 'theme' - ) - ): ?> - - - - -
    - getData(['page',$this->getUrl(0),'block'])); - // Initialiser - $blockleft=$blockright=""; - switch (sizeof($blocks)) { - case 1 : // une colonne - $content = 'col'. $blocks[0] ; - break; - case 2 : // 2 blocks - if ($blocks[0] < $blocks[1]) { // détermine la position de la colonne - $blockleft = 'col'. $blocks[0]; - $content = 'col'. $blocks[1] ; - } else { - $content = 'col' . $blocks[0]; - $blockright = 'col' . $blocks[1]; - } - break; - case 3 : // 3 blocks - $blockleft = 'col' . $blocks[0]; - $content = 'col' . $blocks[1]; - $blockright = 'col' . $blocks[2]; - } - // Page pleine pour la configuration des modules et l'édition des pages - // ($this->getData(['page', $this->getUrl(2), 'moduleId']) == '' && - // $this->getUrl(1) == 'config' || // Configuration d'un module en page pleine - // $this->getUrl(1) == 'data' || // données de formulaire en page pleine - // $this->getUrl(1) == 'comment' // données des commentaires en page pleine - if (sizeof($blocks) === 1 || - !empty($this->getUrl(1)) ) { // Pleine page en mode configuration - $layout->showContent(); - } else { - ?> -
    -
    - getData(['page',$this->getData(['page',$this->getUrl(0),'barLeft']),'content']); - ?>
    -
    showContent(); ?>
    -
    - getData(['page',$this->getData(['page',$this->getUrl(0),'barRight']),'content']); - ?>
    -
    - -
    - - getData(['theme', 'footer', 'position']) === 'site' - // Affiche toujours le pied de page pour l'édition du thème - OR ( - $this->getData(['theme', 'footer', 'position']) === 'hide' - AND $this->getUrl(0) === 'theme' - ) - ): ?> - - - - -
    -getData(['theme', 'footer', 'position']) === 'body'): ?> - - - - -
    -showAnalytics(); ?> -showScript(); ?> - + + + + + + + showMetaTitle(); ?> + showMetaDescription(); ?> + showMetaType(); ?> + showMetaImage(); ?> + showFavicon(); ?> + showVendor(); ?> + showAnalytics(); ?> + + + + + +showStyle(); ?> +showBar(); ?> +showNotification(); ?> +getData(['theme', 'menu', 'position']) === 'body-first' || $this->getData(['theme', 'menu', 'position']) === 'top' ): ?> + + + +getData(['theme', 'header', 'position']) === 'body'): ?> + +
    + getData(['theme','header','linkHome'])){ + echo "" ;} ?> + getData(['theme', 'header', 'textHide']) === false + // Affiche toujours le titre de la bannière pour l'édition du thème + OR ($this->getUrl(0) === 'theme' AND $this->getUrl(1) === 'header') + ): ?> +
    + getData(['config', 'title']); ?> +
    + + getData(['theme','header','linkHome'])){echo "
    ";} + ?> +
    + + +getData(['theme', 'menu', 'position']) === 'body-second'): ?> + + + + +
    + getData(['theme', 'menu', 'position']) === 'site-first'): ?> + + + + getData(['theme', 'header', 'position']) === 'site' + // Affiche toujours la bannière pour l'édition du thème + OR ( + $this->getData(['theme', 'header', 'position']) === 'hide' + AND $this->getUrl(0) === 'theme' + ) + ): ?> + + getData(['theme','header','linkHome'])){ + echo "" ;} ?> +
    getData(['theme', 'header', 'position']) === 'hide'): ?>class="displayNone"> + getData(['theme', 'header', 'textHide']) === false + // Affiche toujours le titre de la bannière pour l'édition du thème + OR ($this->getUrl(0) === 'theme' AND $this->getUrl(1) === 'header') + ): ?> +
    + getData(['config', 'title']); ?> +
    + +
    + getData(['theme','header','linkHome'])){echo "
    ";} ?> + + getData(['theme', 'menu', 'position']) === 'site-second' || + $this->getData(['theme', 'menu', 'position']) === 'site' + // Affiche toujours le menu pour l'édition du thème + OR ( + $this->getData(['theme', 'menu', 'position']) === 'hide' + AND $this->getUrl(0) === 'theme' + ) + ): ?> + + + + +
    + getData(['page',$this->getUrl(0),'block'])); + // Initialiser + $blockleft=$blockright=""; + switch (sizeof($blocks)) { + case 1 : // une colonne + $content = 'col'. $blocks[0] ; + break; + case 2 : // 2 blocks + if ($blocks[0] < $blocks[1]) { // détermine la position de la colonne + $blockleft = 'col'. $blocks[0]; + $content = 'col'. $blocks[1] ; + } else { + $content = 'col' . $blocks[0]; + $blockright = 'col' . $blocks[1]; + } + break; + case 3 : // 3 blocks + $blockleft = 'col' . $blocks[0]; + $content = 'col' . $blocks[1]; + $blockright = 'col' . $blocks[2]; + } + // Page pleine pour la configuration des modules et l'édition des pages + // ($this->getData(['page', $this->getUrl(2), 'moduleId']) == '' && + // $this->getUrl(1) == 'config' || // Configuration d'un module en page pleine + // $this->getUrl(1) == 'data' || // données de formulaire en page pleine + // $this->getUrl(1) == 'comment' // données des commentaires en page pleine + if (sizeof($blocks) === 1 || + !empty($this->getUrl(1)) ) { // Pleine page en mode configuration + $layout->showContent(); + } else { + ?> +
    + +
    + showBarContentLeft(); + // Type de menu affiché + // 0 : aucun + // 1 : menu complet + // 2 : sous-menu de la page parente + if ($this->getData(['page',$this->getData(['page',$this->getUrl(0),'barLeft']),'displayMenu']) !== 'none') { + ?> +
    + +
    showContent(); ?> +
    + +
    + showBarContentRight(); + // Type de menu affiché + // 0 : aucun + // 1 : menu complet + // 2 : sous-menu de la page parente + if ($this->getData(['page',$this->getData(['page',$this->getUrl(0),'barRight']),'displayMenu']) !== 'none') { + ?> +
    + +
    + +
    + + getData(['theme', 'footer', 'position']) === 'site' + // Affiche toujours le pied de page pour l'édition du thème + OR ( + $this->getData(['theme', 'footer', 'position']) === 'hide' + AND $this->getUrl(0) === 'theme' + ) + ): ?> + + + + +
    +getData(['theme', 'footer', 'position']) === 'body'): ?> + + + + +
    +showScript(); ?> + \ No newline at end of file diff --git a/core/module/config/config.php b/core/module/config/config.php index 9aee9052..17608d03 100755 --- a/core/module/config/config.php +++ b/core/module/config/config.php @@ -17,6 +17,8 @@ class config extends common { public static $actions = [ 'backup' => self::GROUP_ADMIN, 'configMetaImage' => self::GROUP_ADMIN, + 'generateFiles' => self::GROUP_ADMIN, + 'updateRobots' => self::GROUP_ADMIN, 'index' => self::GROUP_ADMIN ]; @@ -144,6 +146,55 @@ class config extends common { ]; + public function generateFiles() { + // Mettre à jour le site map + $successSitemap=$this->createSitemap('all'); + + // Creer un fichier robots.txt + $successRobots=$this->updateRobots(); + if ( $successSitemap === true && + $successRobots >= 100) { + $success = true; + } else { + $success = false; + } + // Valeurs en sortie + $this->addOutput([ + 'notification' => ($successSitemap === true && $successRobots >= 100) ? 'Création réussie' : 'Echec d\'écriture', + 'redirect' => helper::baseUrl() . 'config', + 'state' => ($successSitemap === true && $successRobots >=100) ? true : false + ]); + } + + /** + * Met à jour un fichier robots.txt lors du changement de réécriture + */ + + public function updateRobots() { + // Créer le fichier robot si absent + if (!file_exists('robots.txt')) { + $this->createRobots(); + } + // backup + rename ('robots.txt','robots.bak'); + $fileold = fopen('robots.bak','r'); + $filenew = fopen('robots.txt','w'); + while(!feof($fileold)) { + $data = fgets($fileold); + if (strpos($data,'sitemap.xml') == 0) { + fwrite($filenew, $data); + } else { + fwrite($filenew, 'Sitemap: ' . helper::baseUrl() . 'sitemap.xml' . PHP_EOL); + fwrite($filenew, 'Sitemap: ' . helper::baseUrl() . 'sitemap.xml.gz' . PHP_EOL); + fwrite($filenew, '# ZWII CONFIG ---------' . PHP_EOL); + break; + } + } + fclose($fileold); + unlink('robots.bak'); + return(fclose($filenew)); + } + /** * Sauvegarde des données */ @@ -167,6 +218,7 @@ class config extends common { $this->addOutput([ 'display' => self::DISPLAY_RAW ]); + unlink('site/tmp/' . $fileName); } /** @@ -215,7 +267,7 @@ class config extends common { 'metaDescription' => $this->getInput('configMetaDescription', helper::FILTER_STRING_LONG, true), 'social' => [ 'facebookId' => $this->getInput('configSocialFacebookId'), - 'googleplusId' => $this->getInput('configSocialGoogleplusId'), + 'linkedinId' => $this->getInput('configSocialLinkedinId'), 'instagramId' => $this->getInput('configSocialInstagramId'), 'pinterestId' => $this->getInput('configSocialPinterestId'), 'twitterId' => $this->getInput('configSocialTwitterId'), @@ -261,6 +313,8 @@ class config extends common { helper::$rewriteStatus = false; } } + // Générer robots.txt et sitemap + $this->generateFiles(); // Valeurs en sortie $this->addOutput([ 'redirect' => helper::baseUrl() . $this->getUrl(), @@ -305,4 +359,4 @@ class configHelper extends helper { return $dirContent; } -} \ No newline at end of file +} diff --git a/core/module/config/view/index/index.php b/core/module/config/view/index/index.php index 8687b6b5..c2099a89 100755 --- a/core/module/config/view/index/index.php +++ b/core/module/config/view/index/index.php @@ -25,12 +25,12 @@ 'Titre du site', 'value' => $this->getData(['config', 'title']), - 'help' => 'Affiché dans la barre de titre et inclus lors des partages sur les réseaux sociaux' + 'help' => 'Il apparaît dans la barre de titre et les partages sur les réseaux sociaux.' ]); ?> 'Description du site', 'value' => $this->getData(['config', 'metaDescription']), - 'help' => 'La description est incluse lors des partages sur les réseaux sociaux' + 'help' => 'Elle apparaît dans les partages sur les réseaux sociaux.' ]); ?>
    @@ -42,7 +42,7 @@ 'value' => $this->getData(['config', 'favicon']) ]); ?> 'Saisissez l\'ID de suivi de votre propriété Google Analytics.', + 'help' => 'Saisissez l\'ID de suivi.', 'label' => 'Google Analytics', 'placeholder' => 'UA-XXXXXXXX-X', 'value' => $this->getData(['config', 'analyticsId']) @@ -52,28 +52,29 @@ ]); ?> helper::checkRewrite(), - 'help' => 'Afin d\'éviter de bloquer votre site pensez à vérifier que le module de réécriture d\'URL est bien actif sur votre serveur avant d\'activer cette fonctionnalité.' + 'help' => 'Vérifiez d\'abord que votre serveur l\'autorise : ce n\'est pas le cas chez Free.' ]); ?> 'Pagination Blog et News', - 'selected' => $this->getData(['config', 'itemsperPage']), - 'help' => 'Nombre d\'articles de blog ou de news par page' + 'label' => 'Articles par page ("Blog" et "News")', + 'selected' => $this->getData(['config', 'itemsperPage']) ]); ?>

    Copie d'écran OpenGraph

    -
    +
    ' />
    -
    +
    +
    +
    helper::baseUrl() . 'config/configMetaImage', 'value' => 'Rafraîchir la capture d\'écran' ]); ?>
    -

    Cette copie d'écran est nécessaire aux partages sur les réseaux sociaux. Elle est régénérée lorsque le fichier screenshot.png est effacé du gestionnaire de fichiers.

    +

    Cette capture d'écran est nécessaire aux partages sur les réseaux sociaux. Elle est régénérée lorsque le fichier "screenshot.png" est effacé du gestionnaire de fichiers.

    @@ -82,14 +83,14 @@
    'Saisissez votre ID Facebook : https://www.facebook.com/[CETTE PARTIE].', + 'help' => 'Saisissez votre ID : https://www.facebook.com/[ID].', 'label' => 'Facebook', 'value' => $this->getData(['config', 'social', 'facebookId']) ]); ?>
    'Saisissez votre ID Instagram : https://www.instagram.com/[CETTE PARTIE].', + 'help' => 'Saisissez votre ID : https://www.instagram.com/[ID].', 'label' => 'Instagram', 'value' => $this->getData(['config', 'social', 'instagramId']) ]); ?> @@ -99,14 +100,14 @@
    'Saisissez votre ID Youtube : https://www.youtube.com/channel/[CETTE PARTIE].', + 'help' => 'Saisissez votre ID : https://www.youtube.com/channel/[ID].', 'label' => 'Youtube', 'value' => $this->getData(['config', 'social', 'youtubeId']) ]); ?>
    'Saisissez votre ID Twitter : https://twitter.com/[CETTE PARTIE].', + 'help' => 'Saisissez votre ID : https://twitter.com/[ID].', 'label' => 'Twitter', 'value' => $this->getData(['config', 'social', 'twitterId']) ]); ?> @@ -115,11 +116,18 @@
    'Saisissez votre ID Pinterest : https://pinterest.com/[CETTE PARTIE].', + 'help' => 'Saisissez votre ID : https://pinterest.com/[ID].', 'label' => 'Pinterest', 'value' => $this->getData(['config', 'social', 'pinterestId']) ]); ?>
    +
    + 'Saisissez votre ID Linkedin : https://fr.linkedin.com/in/[CETTE PARTIE].', + 'label' => 'Linkedin', + 'value' => $this->getData(['config', 'social', 'linkedinId']) + ]); ?> +
    @@ -127,14 +135,14 @@
    'ZwiiCMS Version', + 'label' => 'ZwiiCMS', 'readonly' => true, 'value' => common::ZWII_VERSION ]); ?>
    'Module Redirection version', + 'label' => 'Module "Redirection"', 'readonly' => true, 'value' => redirection::REDIRECTION_VERSION ]); ?> @@ -143,14 +151,14 @@
    'Module Form version', + 'label' => 'Module "Form"', 'readonly' => true, 'value' => form::FORM_VERSION ]); ?>
    'Module Gallery version', + 'label' => 'Module "Gallery"', 'readonly' => true, 'value' => gallery::GALLERY_VERSION ]); ?> @@ -159,14 +167,14 @@
    'Module News version', + 'label' => 'Module "News"', 'readonly' => true, 'value' => news::NEWS_VERSION ]); ?>
    'Module Blog version', + 'label' => 'Module "Blog"', 'readonly' => true, 'value' => blog::BLOG_VERSION ]); ?> @@ -175,24 +183,31 @@ 'Fuseau horaire', 'selected' => $this->getData(['config', 'timezone']) - ]); ?> + ]); ?> $this->getData(['config', 'maintenance']), - 'help' => 'Le site devient inaccessible sauf pour les administrateurs.' + 'checked' => $this->getData(['config', 'maintenance']) ]); ?> - $this->getData(['config', 'autoBackup']), - 'help' => 'Sauvegarde une fois par jour le fichier de données dans le dossier site/backup/. La sauvegarde est conservée 30 jours.' + 'help' => 'Le fichier de données est copié quotidiennement dans le dossier \'site/backup\'. La sauvegarde est conservée pendant 30 jours.' ]); ?>
    -
    +
    helper::baseUrl() . 'config/backup', 'value' => 'Exporter une copie du site
    (données, thème et fichiers)' ]); ?>
    +
    +
    + helper::baseUrl() . 'config/generateFiles', + 'value' => 'Générer sitemap.xml et robots.txt' + ]); ?> +
    +
    - \ No newline at end of file + diff --git a/core/module/install/install.php b/core/module/install/install.php index 1f99b007..b2cd433a 100755 --- a/core/module/install/install.php +++ b/core/module/install/install.php @@ -17,11 +17,14 @@ class install extends common { public static $actions = [ 'index' => self::GROUP_VISITOR, 'steps' => self::GROUP_ADMIN, - 'update' => self::GROUP_ADMIN + 'update' => self::GROUP_ADMIN, + 'removeAll' => self::GROUP_ADMIN, ]; + public static $newVersion; + /** * Installation */ @@ -46,6 +49,28 @@ class install extends common { $userLastname = $this->getInput('installLastname', helper::FILTER_STRING_SHORT, true); $userMail = $this->getInput('installMail', helper::FILTER_MAIL, true); $userId = $this->getInput('installId', helper::FILTER_ID, true); + // Configure certaines données par défaut + if ($this->getInput('installDefaultData',helper::FILTER_BOOLEAN) === FALSE) { + foreach($this->getHierarchy(null, false) as $parentPageId => $childrenPageIds) { + if ( $parentPageId !== 'accueil') { + $this->deleteData(['page',$parentPageId]); + } + foreach($childrenPageIds as $childKey) { + $this->deleteData(['page', $childKey]); + } + } + // Ajouter ici la liste des pages privées qui ne sont pas vues lors de l'installation. + $this->deleteData(['page', 'privee']); + // Effacer les fichiers par défaut + if (is_dir('site/file/source/galerie')) { + $this->removeAll('site/file/source/galerie'); + $this->removeAll('site/file/thumb/galerie'); + } + } else { + $this->setData(['module', 'blog', 'mon-premier-article', 'userId', $userId]); + $this->setData(['module', 'blog', 'mon-deuxieme-article', 'userId', $userId]); + $this->setData(['module', 'blog', 'mon-troisieme-article', 'userId', $userId]); + } $this->setData([ 'user', $userId, @@ -57,12 +82,8 @@ class install extends common { 'mail' => $userMail, 'password' => $this->getInput('installPassword', helper::FILTER_PASSWORD, true) ] - ]); - // Configure certaines données par défaut - $this->setData(['module', 'blog', 'mon-premier-article', 'userId', $userId]); - $this->setData(['module', 'blog', 'mon-deuxieme-article', 'userId', $userId]); - $this->setData(['module', 'blog', 'mon-troisieme-article', 'userId', $userId]); - // Envoi le mail + ]); + // Envoie le mail $sent = $this->sendMail( $userMail, 'Installation de votre site', @@ -72,6 +93,10 @@ class install extends common { 'Identifiant du compte : ' . $this->getInput('installId') . '
    ' . 'Mot de passe du compte : ' . $this->getInput('installPassword') ); + // Générer un fichier robots.txt + $this->createRobots(); + // Créer sitemap + $this->createSitemap('all'); // Valeurs en sortie $this->addOutput([ 'redirect' => helper::baseUrl(false), @@ -79,6 +104,7 @@ class install extends common { 'state' => ($sent === true ? true : null) ]); } + // Valeurs en sortie $this->addOutput([ 'display' => self::DISPLAY_LAYOUT_LIGHT, @@ -195,4 +221,17 @@ class install extends common { 'view' => 'update' ]); } + + /** + * Effacer un dossier non vide. + */ + private function removeAll ( $path ) { + foreach ( new DirectoryIterator($path) as $item ): + if ( $item->isFile() ) unlink($item->getRealPath()); + if ( !$item->isDot() && $item->isDir() ) $this->removeAll($item->getRealPath()); + endforeach; + + rmdir($path); + } + } \ No newline at end of file diff --git a/core/module/install/ressource/defaultdata.php b/core/module/install/ressource/defaultdata.php index 7753c15f..2e4cfa81 100644 --- a/core/module/install/ressource/defaultdata.php +++ b/core/module/install/ressource/defaultdata.php @@ -9,7 +9,7 @@ class install extends common { 'favicon' => 'favicon.ico', 'homePageId' => 'accueil', 'maintenance' => false, - 'metaDescription' => 'Zwii est un CMS sans base de données qui permet à ses utilisateurs de créer et gérer facilement un site web sans aucune connaissance en programmation.', + 'metaDescription' => 'Zwii est un CMS sans base de données qui permet de créer et gérer facilement un site web sans aucune connaissance en programmation.', 'social' => [ 'facebookId' => 'ZwiiCMS', 'instagramId' => '', @@ -28,163 +28,216 @@ class install extends common { ], 'page' => [ 'accueil' => [ - 'typeMenu' => 'text', - 'iconUrl' => '', - 'disable' => false, - 'content' => '

    Bienvenue sur votre nouveau site Zwii !

    + 'typeMenu' => 'text', + 'iconUrl' => '', + 'disable' => false, + 'content' => '

    Bienvenue sur votre nouveau site Zwii !

    Un email contenant le récapitulatif de votre installation vient de vous être envoyé.

    -

    Connectez-vous dès maintenant à votre espace membre afin de créer un site à votre image ! Vous allez pouvoir personnaliser le thème, créer des pages, ajouter des utilisateurs et bien plus encore !

    +

    Connectez-vous dès maintenant à votre espace membre afin de créer un site à votre image ! Vous pourrez personnaliser le thème, créer des pages, ajouter des utilisateurs et bien plus encore !

    Si vous avez besoin d\'aide ou si vous cherchez des informations sur Zwii, n\'hésitez pas à jeter un œil à notre forum.

    ', - 'hideTitle' => false, - 'breadCrumb' => false, - 'metaDescription' => '', - 'metaTitle' => '', - 'moduleId' => '', - 'modulePosition' => 'bottom', - 'parentPageId' => '', - 'position' => 1, - 'group' => self::GROUP_VISITOR, - 'targetBlank' => false, - 'title' => 'Accueil', - 'block' => '12', - 'barLeft' => '', - 'barRight' => '' + 'hideTitle' => false, + 'breadCrumb' => false, + 'metaDescription' => '', + 'metaTitle' => '', + 'moduleId' => '', + 'modulePosition' => 'bottom', + 'parentPageId' => '', + 'position' => 1, + 'group' => self::GROUP_VISITOR, + 'targetBlank' => false, + 'title' => 'Accueil', + 'block' => '12', + 'barLeft' => '', + 'barRight' => '', + 'displayMenu' => 'none', + 'hideMenuSide' => false, + 'hideMenuHead' => false, + 'hideMenuChildren' =>false ], - 'enfant' => [ - 'typeMenu' => 'text', - 'iconUrl' => '', - 'disable' => false, - 'content' => '

    Vous pouvez assigner des parents à vos pages afin de mieux organiser votre menu !

    + 'enfant' => [ + 'typeMenu' => 'text', + 'iconUrl' => '', + 'disable' => false, + 'content' => '

    Vous pouvez assigner des parents à vos pages afin de mieux organiser votre menu !

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam interdum, neque non vulputate hendrerit, arcu turpis dapibus nisl, id scelerisque metus lectus vitae nisi. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Donec feugiat dolor et turpis finibus condimentum. Cras sit amet ligula sagittis justo.

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam interdum, neque non vulputate hendrerit, arcu turpis dapibus nisl, id scelerisque metus lectus vitae nisi. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Donec feugiat dolor et turpis finibus condimentum. Cras sit amet ligula sagittis justo.

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam interdum, neque non vulputate hendrerit, arcu turpis dapibus nisl, id scelerisque metus lectus vitae nisi. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Donec feugiat dolor et turpis finibus condimentum. Cras sit amet ligula sagittis justo.

    ', - 'hideTitle' => false, - 'breadCrumb' => true, - 'metaDescription' => '', - 'metaTitle' => '', - 'moduleId' => '', - 'modulePosition' => 'bottom', - 'parentPageId' => 'accueil', - 'position' => 1, - 'group' => self::GROUP_VISITOR, - 'targetBlank' => false, - 'title' => 'Enfant', - 'block' => '12', - 'barLeft' => '', - 'barRight' => '' - ], - 'privee' => [ - 'typeMenu' => 'text', - 'iconUrl' => '', - 'disable' => false, - 'content' => '

    Cette page n\'est visible que par les membres de votre site !

    + 'hideTitle' => false, + 'breadCrumb' => true, + 'metaDescription' => '', + 'metaTitle' => '', + 'moduleId' => '', + 'modulePosition' => 'bottom', + 'parentPageId' => 'accueil', + 'position' => 1, + 'group' => self::GROUP_VISITOR, + 'targetBlank' => false, + 'title' => 'Enfant', + 'block' => '12', + 'barLeft' => '', + 'barRight' => '', + 'displayMenu' => 'none', + 'hideMenuSide' => false, + 'hideMenuHead' => false, + 'hideMenuChildren' =>false + ], + 'privee' => [ + 'typeMenu' => 'text', + 'iconUrl' => '', + 'disable' => false, + 'content' => '

    Cette page n\'est visible que des membres de votre site !

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam interdum, neque non vulputate hendrerit, arcu turpis dapibus nisl, id scelerisque metus lectus vitae nisi. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Donec feugiat dolor et turpis finibus condimentum. Cras sit amet ligula sagittis justo.

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam interdum, neque non vulputate hendrerit, arcu turpis dapibus nisl, id scelerisque metus lectus vitae nisi. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Donec feugiat dolor et turpis finibus condimentum. Cras sit amet ligula sagittis justo.

    ', - 'hideTitle' => false, - 'breadCrumb' => true, - 'metaDescription' => '', - 'metaTitle' => '', - 'moduleId' => '', - 'parentPageId' => '', - 'modulePosition' => 'bottom', - 'position' => 2, - 'group' => self::GROUP_MEMBER, - 'targetBlank' => false, - 'title' => 'Privée', - 'block' => '12', - 'barLeft' => '', - 'barRight' => '' - ], - 'mise-en-page' => [ - 'typeMenu' => 'text', - 'iconUrl' => '', - 'disable' => false, - 'content' => '

    Vous pouvez ajouter une ou deux barres latérales aux pages de votre site. Cette mise en page se définit dans les paramètres de page et peut s\'appliquer à l\'ensemble du site ou à certaines pages en particulier, au gré de vos désirs.

    + 'hideTitle' => false, + 'breadCrumb' => true, + 'metaDescription' => '', + 'metaTitle' => '', + 'moduleId' => '', + 'parentPageId' => '', + 'modulePosition' => 'bottom', + 'position' => 2, + 'group' => self::GROUP_MEMBER, + 'targetBlank' => false, + 'title' => 'Privée', + 'block' => '12', + 'barLeft' => '', + 'barRight' => '', + 'displayMenu' => 'none', + 'hideMenuSide' => false, + 'hideMenuHead' => false, + 'hideMenuChildren' =>false + ], + 'mise-en-page' => [ + 'typeMenu' => 'text', + 'iconUrl' => '', + 'disable' => false, + 'content' => '

    Vous pouvez ajouter une ou deux barres latérales aux pages de votre site. Cette mise en page se définit dans les paramètres de page et peut s\'appliquer à l\'ensemble du site ou à certaines pages en particulier, au gré de vos désirs.

    Pour créer une barre latérale à partir d\'une "Nouvelle page" ou transformer une page existante en barre latérale, sélectionnez l\'option dans la liste des gabarits. On peut bien sûr définir autant de barres latérales qu\'on le souhaite.

    Cette nouvelle fonctionnalité autorise toutes sortes d\'utilisations : texte, encadrés, images, vidéos... ou simple marge blanche. Seule restriction : on ne peut pas installer un module dans une barre latérale.

    La liste des barres disponibles et leur emplacement s\'affichent en fonction du gabarit que vous aurez choisi.', - 'hideTitle' => false, - 'breadCrumb' => true, - 'metaDescription' => '', - 'metaTitle' => '', - 'moduleId' => '', - 'parentPageId' => 'accueil', - 'modulePosition' => 'bottom', - 'position' => 3, - 'group' => self::GROUP_VISITOR, - 'targetBlank' => false, - 'title' => 'Mise en page', - 'block' => '8-4', - 'barLeft' => '', - 'barRight' => 'barre' - - ], - 'blog' => [ - 'typeMenu' => 'text', - 'iconUrl' => '', - 'disable' => false, - 'content' => '

    Cette page contient une instance du module de blog. Cliquez sur un article afin de le lire et de poster des commentaires.

    ', - 'hideTitle' => false, - 'breadCrumb' => false, - 'metaDescription' => '', - 'metaTitle' => '', - 'moduleId' => 'blog', - 'modulePosition' => 'bottom', - 'parentPageId' => '', - 'position' => 4, - 'group' => self::GROUP_VISITOR, - 'targetBlank' => false, - 'title' => 'Blog', - 'block' => '12', - 'barLeft' => '', - 'barRight' => '' - ], - 'galeries' => [ - 'typeMenu' => 'text', - 'iconUrl' => '', - 'disable' => false, - 'content' => '

    Cette page contient une instance du module de galeries photos. Cliquez sur la galerie ci-dessous afin de voir les photos qu\'elle contient.

    ', - 'hideTitle' => false, - 'breadCrumb' => false, - 'metaDescription' => '', - 'metaTitle' => '', - 'moduleId' => 'gallery', - 'modulePosition' => 'bottom', - 'parentPageId' => '', - 'position' => 5, - 'group' => self::GROUP_VISITOR, - 'targetBlank' => false, - 'title' => 'Galeries', - 'block' => '12', - 'barLeft' => '', - 'barRight' => '' - ], + 'hideTitle' => false, + 'breadCrumb' => true, + 'metaDescription' => '', + 'metaTitle' => '', + 'moduleId' => '', + 'parentPageId' => 'accueil', + 'modulePosition' => 'bottom', + 'position' => 3, + 'group' => self::GROUP_VISITOR, + 'targetBlank' => false, + 'title' => 'Mise en page', + 'block' => '4-8', + 'barLeft' => 'barre', + 'barRight' => '', + 'displayMenu' => 'none', + 'hideMenuSide' => false, + 'hideMenuHead' => false, + 'hideMenuChildren' =>false + ], + 'menu-lateral' => [ + 'typeMenu' => 'text', + 'iconUrl' => '', + 'disable' => false, + 'content' => '

    Cette page illustre la possibilité d\'ajouter un menu dans les barres latérales.
    + Deux types de menus sont disponibles : l\'un reprenant les rubriques du menu principal comme celui-ci, l\'autre listant les pages d\'une même rubrique. Le choix du type de menu se fait dans la page de configuration d\'une barre latérale.

    +

    Pour ajouter un menu à une page, choisissez une barre latérale avec menu dans la page de configuration. Les bulles d\'aide de la rubrique "Menu" expliquent comment masquer une page.

    ', + 'hideTitle' => false, + 'breadCrumb' => true, + 'metaDescription' => '', + 'metaTitle' => '', + 'moduleId' => '', + 'parentPageId' => 'accueil', + 'modulePosition' => 'bottom', + 'position' => 3, + 'group' => self::GROUP_VISITOR, + 'targetBlank' => false, + 'title' => 'Menu latéral', + 'block' => '9-3', + 'barLeft' => '', + 'barRight' => 'barrelateraleavecmenu', + 'displayMenu' => 'none', + 'hideMenuSide' => false, + 'hideMenuHead' => false, + 'hideMenuChildren' =>false + ], + 'blog' => [ + 'typeMenu' => 'text', + 'iconUrl' => '', + 'disable' => false, + 'content' => '

    Cette page contient une instance du module de blog. Cliquez sur un article afin de le lire et de poster des commentaires.

    ', + 'hideTitle' => false, + 'breadCrumb' => false, + 'metaDescription' => '', + 'metaTitle' => '', + 'moduleId' => 'blog', + 'modulePosition' => 'bottom', + 'parentPageId' => '', + 'position' => 4, + 'group' => self::GROUP_VISITOR, + 'targetBlank' => false, + 'title' => 'Blog', + 'block' => '12', + 'barLeft' => '', + 'barRight' => '', + 'displayMenu' => 'none', + 'hideMenuSide' => false, + 'hideMenuHead' => false, + 'hideMenuChildren' =>false + ], + 'galeries' => [ + 'typeMenu' => 'text', + 'iconUrl' => '', + 'disable' => false, + 'content' => '

    Cette page contient une instance du module de galeries photos. Cliquez sur la galerie ci-dessous afin de voir les photos qu\'elle contient.

    ', + 'hideTitle' => false, + 'breadCrumb' => false, + 'metaDescription' => '', + 'metaTitle' => '', + 'moduleId' => 'gallery', + 'modulePosition' => 'bottom', + 'parentPageId' => '', + 'position' => 5, + 'group' => self::GROUP_VISITOR, + 'targetBlank' => false, + 'title' => 'Galeries', + 'block' => '12', + 'barLeft' => '', + 'barRight' => '', + 'displayMenu' => 'none', + 'hideMenuSide' => false, + 'hideMenuHead' => false, + 'hideMenuChildren' =>false + ], 'site-de-zwii' => [ - 'typeMenu' => 'text', - 'iconUrl' => '', - 'disable' => false, - 'content' => "", - 'hideTitle' => false, - 'breadCrumb' => false, - 'metaDescription' => '', - 'metaTitle' => '', - 'moduleId' => 'redirection', - 'modulePosition' => 'bottom', - 'parentPageId' => '', - 'position' => 6, - 'group' => self::GROUP_VISITOR, - 'targetBlank' => true, - 'title' => 'Site de Zwii', - 'block' => '12', - 'barLeft' => '', - 'barRight' => '' - ], + 'typeMenu' => 'text', + 'iconUrl' => '', + 'disable' => false, + 'content' => "", + 'hideTitle' => false, + 'breadCrumb' => false, + 'metaDescription' => '', + 'metaTitle' => '', + 'moduleId' => 'redirection', + 'modulePosition' => 'bottom', + 'parentPageId' => '', + 'position' => 6, + 'group' => self::GROUP_VISITOR, + 'targetBlank' => true, + 'title' => 'Site de Zwii', + 'block' => '12', + 'barLeft' => '', + 'barRight' => '', + 'displayMenu' => 'none', + 'hideMenuSide' => false, + 'hideMenuHead' => true, + 'hideMenuChildren' =>false + ], 'contact' => [ - 'typeMenu' => 'text', + 'typeMenu' => 'text', 'iconUrl' => '', 'disable' => false, 'content' => '

    Cette page contient un exemple de formulaire conçu à partir du module de génération de formulaires. Il est configuré pour envoyer les données saisies par mail aux administrateurs du site.

    ', @@ -201,12 +254,16 @@ class install extends common { 'title' => 'Contact', 'block' => '12', 'barLeft' => '', - 'barRight' => '' + 'barRight' => '', + 'displayMenu' => 'none', + 'hideMenuSide' => false, + 'hideMenuHead' => false, + 'hideMenuChildren' =>false ], - 'barre' => [ - 'typeMenu' => 'text', - 'iconUrl' => '', - 'disable' => false, + 'barre' => [ + 'typeMenu' => 'text', + 'iconUrl' => '', + 'disable' => false, 'content' => '

    ZwiiCMS

    Le CMS sans base de données à l\'installation simple et rapide

    ', 'hideTitle' => false, 'breadCrumb' => false, @@ -221,7 +278,35 @@ class install extends common { 'title' => 'Barre latérale', 'block' => 'bar', 'barLeft' => '', - 'barRight' => '' + 'barRight' => '', + 'displayMenu' => "none", + 'hideMenuSide' => false, + 'hideMenuHead' => false, + 'hideMenuChildren' =>false + ], + 'barrelateraleavecmenu' => [ + 'typeMenu' => 'text', + 'iconUrl' => '', + 'disable' => false, + 'content' => '

    ', + 'hideTitle' => false, + 'breadCrumb' => false, + 'metaDescription' => '', + 'metaTitle' => '', + 'moduleId' => '', + 'modulePosition' => 'bottom', + 'parentPageId' => '', + 'position' => 0 , + 'group' => self::GROUP_VISITOR, + 'targetBlank' => false, + 'title' => 'Barre latérale avec menu', + 'block' => 'bar', + 'barLeft' => '', + 'barRight' => '', + 'displayMenu' => "parents", + 'hideMenuSide' => false, + 'hideMenuHead' => false, + 'hideMenuChildren' =>false ], ], 'module' => [ @@ -360,7 +445,10 @@ class install extends common { 'textTransform' => 'none', 'socialsPosition' => 'center', 'socialsAlign' => 'center', - 'displayVersion' => true + 'displayVersion' => true, + 'displayVersion' => true, + 'displaySiteMap' => true, + 'displayCopyright' => true ], 'header' => [ 'backgroundColor' => 'rgba(255, 255, 255, 1)', @@ -417,4 +505,4 @@ class install extends common { 'version' => 0, ] ]; -} \ No newline at end of file +} diff --git a/core/module/install/view/index/index.php b/core/module/install/view/index/index.php index dc30b3a6..caa9e37d 100755 --- a/core/module/install/view/index/index.php +++ b/core/module/install/view/index/index.php @@ -20,7 +20,7 @@
    'off', - 'label' => 'Adresse mail' + 'label' => 'Adresse mail' ]); ?>
    @@ -36,6 +36,14 @@ ]); ?>
    +
    +
    + true + ]); + ?> +
    +
    'Libre' ]; public static $pageBlocks = [ - '12' => 'Page pleine', + '12' => 'Pleine page', '4-8' => 'Barre latérale 1/3 - Page 2/3', '8-4' => 'Page 2/3 - Barre latérale 1/3', '3-9' => 'Barre latérale 1/4 - Page 3/4', @@ -49,6 +49,11 @@ class page extends common { '3-6-3' => 'Barre latérale 1/4 - Page 1/2 - Barre latérale 1/4', 'bar' => 'Barre latérale' ]; + public static $displayMenu = [ + 'none' => 'Aucun', + 'parents' => 'Menu principal', + 'children' => 'Sous-menu de la page parente' + ]; /** * Création @@ -77,9 +82,15 @@ class page extends common { 'title' => $pageTitle, 'block' => '12', 'barLeft' => '', - 'barRight' => '' + 'barRight' => '', + 'displayMenu' => '0', + 'hideMenuSide' => false, + 'hideMenuHead' => false, + 'hideMenuChildren' => false ] ]); + // Met à jour le site map + $this->createSitemap('all'); // Valeurs en sortie $this->addOutput([ 'redirect' => helper::baseUrl() . $pageId, @@ -133,7 +144,10 @@ class page extends common { ]); } // Suppression - else { + else { + // Met à jour le site map + $this->createSitemap('all'); + // Effacer la page $this->deleteData(['page', $url[0]]); $this->deleteData(['module', $url[0]]); // Valeurs en sortie @@ -165,7 +179,7 @@ class page extends common { // un dossier existe du même nom (erreur en cas de redirection) if (file_exists($pageId)) { $pageId = uniqid($pageId . '-'); - } + } // Si l'id a changée if ($pageId !== $this->getUrl(2)) { // Incrémente le nouvel id de la page @@ -213,6 +227,7 @@ class page extends common { if ($this->getinput('pageEditBlock') !== 'bar') { $barLeft = $this->getinput('pageEditBarLeft'); $barRight = $this->getinput('pageEditBarRight'); + $hideTitle = $this->getInput('pageEditHideTitle', helper::FILTER_BOOLEAN); } else { // Une barre ne peut pas avoir de barres @@ -220,6 +235,7 @@ class page extends common { $barRight = ""; // Une barre est masquée $position = 0; + $hideTitle = true; } // Modifie la page ou en crée une nouvelle si l'id a changé $this->setData([ @@ -228,9 +244,9 @@ class page extends common { [ 'typeMenu' => $this->getinput('pageTypeMenu'), 'iconUrl' => $this->getinput('pageIconUrl'), - 'disable'=> $this->getinput('pageDisable', helper::FILTER_BOOLEAN), + 'disable'=> $this->getinput('pageEditDisable', helper::FILTER_BOOLEAN), 'content' => (empty($this->getInput('pageEditContent', null)) ? "

    " : $this->getInput('pageEditContent', null)) , - 'hideTitle' => $this->getInput('pageEditHideTitle', helper::FILTER_BOOLEAN), + 'hideTitle' => $hideTitle, 'breadCrumb' => $this->getInput('pageEditbreadCrumb', helper::FILTER_BOOLEAN), 'metaDescription' => $this->getInput('pageEditMetaDescription', helper::FILTER_STRING_LONG), 'metaTitle' => $this->getInput('pageEditMetaTitle'), @@ -243,9 +259,13 @@ class page extends common { 'title' => $this->getInput('pageEditTitle', helper::FILTER_STRING_SHORT, true), 'block' => $this->getinput('pageEditBlock'), 'barLeft' => $barLeft, - 'barRight' => $barRight + 'barRight' => $barRight, + 'displayMenu' => $this->getinput('pageEditDisplayMenu'), + 'hideMenuSide' => $this->getinput('pageEditHideMenuSide', helper::FILTER_BOOLEAN), + 'hideMenuHead' => $this->getinput('pageEditHideMenuHead', helper::FILTER_BOOLEAN), + 'hideMenuChildren' => $this->getinput('pageEditHideMenuChildren', helper::FILTER_BOOLEAN), ] - ]); + ]); // Barre renommée : changement le nom de la barre dans les pages mères if ($this->getinput('pageEditBlock') === 'bar') { foreach ($this->getHierarchy() as $eachPageId=>$parentId) { @@ -265,6 +285,8 @@ class page extends common { } } } + // Met à jour le site map + $this->createSitemap('all'); // Redirection vers la configuration if($this->getInput('pageEditModuleRedirect', helper::FILTER_BOOLEAN)) { // Valeurs en sortie @@ -306,7 +328,7 @@ class page extends common { $this->getData(['page', $parentPageId, 'block']) === 'bar') { self::$pagesBarId[$parentPageId] = $this->getData(['page', $parentPageId, 'title']); } - } + } // Valeurs en sortie $this->addOutput([ 'title' => $this->getData(['page', $this->getUrl(2), 'title']), diff --git a/core/module/page/view/edit/edit.js.php b/core/module/page/view/edit/edit.js.php index 3cc0e26a..4c2194da 100755 --- a/core/module/page/view/edit/edit.js.php +++ b/core/module/page/view/edit/edit.js.php @@ -122,7 +122,9 @@ $( document ).ready(function() { $("#pageEditModuleConfig").removeClass("disabled"); $("#pageEditModuleConfig").slideUp(); $("#pageEditDisplayMenuWrapper").addClass("disabled"); - $("#pageEditDisplayMenuWrapper").slideDown(); + $("#pageEditDisplayMenuWrapper").slideDown(); + $("#pageEditGroupWrapper").removeClass("disabled"); + $("#pageEditGroupWrapper").slideUp(); } else { $("#pageEditDisplayMenuWrapper").removeClass("disabled"); $("#pageEditDisplayMenuWrapper").slideUp(); @@ -133,7 +135,9 @@ $( document ).ready(function() { * Quand le titre est masqué */ if ($("input[name=pageEditHideTitle]").is(':checked') && - $("#pageEditParentPageId").val() === "") { + $("#pageEditParentPageId").val() === "" && + !$('input[name=pageEditHideTitle]').is(':checked') ) { + $("#pageEditbreadCrumbWrapper").removeClass("disabled"); $("#pageEditbreadCrumbWrapper").slideUp(); } else { @@ -154,52 +158,49 @@ $( document ).ready(function() { $("#pageIconUrlWrapper").slideUp(); } - /** - * Masquer ou afficher le chemin de fer - * Quand la page n'est pas parente et que le menu n'est pas masqué - */ - if ($("#pageEditParentPageId").val() === "" && - !$('input[name=pageEditHideTitle]').is(':checked') ) { - $("#pageEditbreadCrumbWrapper").removeClass("disabled"); - $("#pageEditbreadCrumbWrapper").slideUp(); - } else { - $("#pageEditbreadCrumbWrapper").addClass("disabled"); - $("#pageEditbreadCrumbWrapper").slideDown(); - } - /** * Cache les options de masquage dans les menus quand la page n'est pas affichée. */ if ($("#pageEditPosition").val() === "0" ) { - $("#pageEdithiddenMenuHeadWrapper").removeClass("disabled"); - $("#pageEdithiddenMenuHeadWrapper").slideUp(); - $("#pageEdithiddenMenuSideWrapper").removeClass("disabled"); - $("#pageEdithiddenMenuSideWrapper").slideUp(); + $("#pageEdithideMenuHeadWrapper").removeClass("disabled"); + $("#pageEdithideMenuHeadWrapper").slideUp(); + $("#pageEdithideMenuSideWrapper").removeClass("disabled"); + $("#pageEdithideMenuSideWrapper").slideUp(); } else { - $("#pageEdithiddenMenuHeadWrapper").addClass("disabled"); - $("#pageEdithiddenMenuHeadWrapper").slideDown(); - $("#pageEdithiddenMenuSideWrapper").addClass("disabled"); - $("#pageEdithiddenMenuSideWrapper").slideDown(); + $("#pageEdithideMenuHeadWrapper").addClass("disabled"); + $("#pageEdithideMenuHeadWrapper").slideDown(); + $("#pageEdithideMenuSideWrapper").addClass("disabled"); + $("#pageEdithideMenuSideWrapper").slideDown(); } + /** + * Cache l'option de masquage des pages enfants + */ + if ($("#pageEditParentPageId").val() !== "") { + $("#pageEditHideMenuChildrenWrapper").removeClass("disabled"); + $("#pageEditHideMenuChildrenWrapper").slideUp(); + } else { + $("#pageEditHideMenuChildrenWrapper").addClass("disabled"); + $("#pageEditHideMenuChildrenWrapper").slideDown(); + } + }); /** * Une seule option de masquage dans les menus est autorisée */ - -var pageEdithiddenMenuHeadDOM = $("#pageEdithiddenMenuHead"); -pageEdithiddenMenuHeadDOM.on("change", function() { - if ($('input[name=pageEdithiddenMenuSide]').is(':checked')) { - $("#pageEdithiddenMenuSide").prop("checked",false); +var pageEdithideMenuHeadDOM = $("#pageEdithideMenuHead"); +pageEdithideMenuHeadDOM.on("change", function() { + if ($('input[name=pageEdithideMenuSide]').is(':checked')) { + $("#pageEdithideMenuSide").prop("checked",false); } }); -var pageEdithiddenMenuSideDOM = $("#pageEdithiddenMenuSide"); -pageEdithiddenMenuSideDOM.on("change", function() { - if ($('input[name=pageEdithiddenMenuHead]').is(':checked')) { - $("#pageEdithiddenMenuHead").prop("checked",false); +var pageEdithideMenuSideDOM = $("#pageEdithideMenuSide"); +pageEdithideMenuSideDOM.on("change", function() { + if ($('input[name=pageEdithideMenuHead]').is(':checked')) { + $("#pageEdithideMenuHead").prop("checked",false); } }); @@ -210,17 +211,17 @@ pageEdithiddenMenuSideDOM.on("change", function() { var pageEditPositionDOM = $("#pageEditPosition"); pageEditPositionDOM.on("change", function() { if ($(this).val() === "0" ) { - $("#pageEdithiddenMenuHeadWrapper").removeClass("disabled"); - $("#pageEdithiddenMenuHeadWrapper").slideUp(); - $("#pageEdithiddenMenuSideWrapper").removeClass("disabled"); - $("#pageEdithiddenMenuSideWrapper").slideUp(); - $("#pageEdithiddenMenuSide").prop("checked",false); - $("#pageEdithiddenMenuHead").prop("checked",false); + $("#pageEdithideMenuHeadWrapper").removeClass("disabled"); + $("#pageEdithideMenuHeadWrapper").slideUp(); + $("#pageEdithideMenuSideWrapper").removeClass("disabled"); + $("#pageEdithideMenuSideWrapper").slideUp(); + $("#pageEdithideMenuSide").prop("checked",false); + $("#pageEdithideMenuHead").prop("checked",false); } else { - $("#pageEdithiddenMenuHeadWrapper").addClass("disabled"); - $("#pageEdithiddenMenuHeadWrapper").slideDown(); - $("#pageEdithiddenMenuSideWrapper").addClass("disabled"); - $("#pageEdithiddenMenuSideWrapper").slideDown(); + $("#pageEdithideMenuHeadWrapper").addClass("disabled"); + $("#pageEdithideMenuHeadWrapper").slideDown(); + $("#pageEdithideMenuSideWrapper").addClass("disabled"); + $("#pageEdithideMenuSideWrapper").slideDown(); } }); @@ -338,6 +339,8 @@ pageEditBlockDOM.on("change", function() { if ($(this).val() === "bar") { $("#PageEditMenu").removeClass("disabled"); $("#PageEditMenu").slideUp(); + $("#PageEditMenuSpecial").removeClass("disabled"); + $("#PageEditMenuSpecial").slideUp(); $("#pageEditHideTitleWrapper").removeClass("disabled"); $("#pageEditHideTitleWrapper").slideUp(); $("#pageEditbreadCrumbWrapper").removeClass("disabled"); @@ -347,20 +350,28 @@ pageEditBlockDOM.on("change", function() { $("#pageEditModuleConfig").removeClass("disabled"); $("#pageEditModuleConfig").slideUp(); $("#pageEditDisplayMenuWrapper").addClass("disabled"); - $("#pageEditDisplayMenuWrapper").slideDown(); + $("#pageEditDisplayMenuWrapper").slideDown(); + $("#pageEditGroupWrapper").removeClass("disabled"); + $("#pageEditGroupWrapper").slideUp(); } else { $("#PageEditMenu").addClass("disabled"); - $("#PageEditMenu").slideDown(); + $("#PageEditMenu").slideDown(); + $("#PageEditMenuSpecial").addClass("disabled"); + $("#PageEditMenuSpecial").slideDown(); $("#pageEditHideTitleWrapper").addClass("disabled"); $("#pageEditHideTitleWrapper").slideDown(); - $("#pageEditbreadCrumbWrapper").addClass("disabled"); - $("#pageEditbreadCrumbWrapper").slideDown(); $("#pageEditModuleIdWrapper").addClass("disabled"); $("#pageEditModuleIdWrapper").slideDown(); $("#pageEditModuleConfig").addClass("disabled"); $("#pageEditModuleConfig").slideDown(); $("#pageEditDisplayMenuWrapper").removeClass("disabled"); - $("#pageEditDisplayMenuWrapper").slideUp(); + $("#pageEditDisplayMenuWrapper").slideUp(); + $("#pageEditGroupWrapper").addClass("disabled"); + $("#pageEditGroupWrapper").slideDown(); + if ($("#pageEditParentPageId").val() !== "") { + $("#pageEditbreadCrumbWrapper").addClass("disabled"); + $("#pageEditbreadCrumbWrapper").slideDown(); + } } }); @@ -397,6 +408,13 @@ pageEditParentPageIdDOM.on("change", function() { $("#pageEditbreadCrumbWrapper").slideDown(); } + if ($(this).val() !== "") { + $("#pageEditHideMenuChildrenWrapper").removeClass("disabled"); + $("#pageEditHideMenuChildrenWrapper").slideUp(); + } else { + $("#pageEditHideMenuChildrenWrapper").addClass("disabled"); + $("#pageEditHideMenuChildrenWrapper").slideDown(); + } }); diff --git a/core/module/page/view/edit/edit.php b/core/module/page/view/edit/edit.php index 78512103..762f2b05 100755 --- a/core/module/page/view/edit/edit.php +++ b/core/module/page/view/edit/edit.php @@ -1,3 +1,7 @@ +pages2Json(); +?>
    @@ -56,21 +60,21 @@
    'Sélectionnez le type de menu.', - 'label' => 'Type de menu', + 'help' => 'Choisissez une icône ou une image de petite taille.', + 'label' => 'Aspect du menu', 'selected' => $this->getData(['page', $this->getUrl(2), 'typeMenu']) ]); ?>
    'En position libre ajoutez manuellement le module en plaçant deux crochets [] à l\'endroit voulu dans votre page.', + 'help' => 'En position libre ajoutez le module en plaçant deux crochets [] à l\'endroit voulu dans votre page.', 'label' => 'Position du module dans la page', 'selected' => $this->getData(['page', $this->getUrl(2), 'modulePosition']) ]); ?>
    -
    +>
    'Icône du menu', 'value' => $this->getData(['page', $this->getUrl(2), 'iconUrl']) @@ -85,36 +89,6 @@ 'value' => $this->getData(['page', $this->getUrl(2), 'content']) ]); ?>
    -
    -
    -

    Menu

    - getHierarchy($this->getUrl(2), false)): ?> - $this->getData(['page', $this->getUrl(2), 'parentPageId']) - ]); ?> - - 'Page parent', - 'selected' => $this->getData(['page', $this->getUrl(2), 'parentPageId']) - ]); ?> - - 'Position' - ]); ?> -
    -
    - $this->getData(['page', $this->getUrl(2), 'targetBlank']) - ]); ?> -
    -
    - $this->getData(['page', $this->getUrl(2), 'disable']) - ]); ?> -
    -
    -
    -

    Mise en page

    @@ -144,24 +118,95 @@ 'selected' => $this->getData(['page', $this->getUrl(2), 'barRight']) ]); ?> +
    +
    + 'Configuration du menu vertical', + 'selected' => $this->getData(['page', $this->getUrl(2), 'displayMenu']) + ]); ?> +
    +
    - $this->getData(['page', $this->getUrl(2), 'hideTitle']) ]); ?>
    -
    +
    $this->getData(['page', $this->getUrl(2), 'breadCrumb']) ]); ?>
    -
    +
    +
    +
    +

    Emplacements

    + getHierarchy($this->getUrl(2), false)): ?> + $this->getData(['page', $this->getUrl(2), 'parentPageId']) + ]); ?> + + 'Page parent', + 'selected' => $this->getData(['page', $this->getUrl(2), 'parentPageId']) + ]); ?> + + 'Position', + 'help' => 'Une page non affichée n\'apparaît pas dans les menus mais comme \'Page orpheline\' dans la liste des pages.' + ]); ?> +
    +
    + $this->getData(['page', $this->getUrl(2), 'targetBlank']) + ]); ?> +
    +
    + $this->getData(['page', $this->getUrl(2), 'disable']), + 'help' => 'Une page désactivée figure dans le menu sans être cliquable.' + ]); ?> +
    +
    +
    +
    +
    +
    +
    +
    +

    Options avancées d'emplacements

    +
    +
    + $this->getData(['page', $this->getUrl(2), 'hideMenuChildren']), + 'help' => 'Utilisez cette option pour afficher uniquement les pages enfants dans un `sous-menu de page parente` placé dans une barre latérale.' + ]); ?> +
    +
    +
    +
    + $this->getData(['page', $this->getUrl(2), 'hideMenuHead']), + 'help' => 'Pour masquer la page totalement (ex : page en construction), dans `Position`, sélectionnez `Ne pas afficher`.' + ]); ?> +
    +
    +
    +
    + $this->getData(['page', $this->getUrl(2), 'hideMenuSide']), + 'help' => 'Pour masquer la page totalement (ex : page en construction), dans `Position`, sélectionnez `Ne pas afficher`.' + ]); ?> +
    +
    +
    +
    -

    Options avancées

    +

    Autres options

    'Groupe requis pour accéder à la page :', @@ -181,4 +226,4 @@
    - \ No newline at end of file + diff --git a/core/module/sitemap/view/index/index.php b/core/module/sitemap/view/index/index.php index 50e4e99f..ad2c8ce2 100755 --- a/core/module/sitemap/view/index/index.php +++ b/core/module/sitemap/view/index/index.php @@ -2,17 +2,17 @@ getHierarchy() as $parentId => $childIds): ?>
  • getData(['page', $parentId, 'disable']) == false || - $this->getData(['page', $parentId, 'block']) !== 'bar' || - $this->getUser('group') >= $module::$actions[$action]) { ?> + $this->getData(['page', $parentId, 'block']) == 'bar' || + $this->getUser('group') >= $module::$actions[$action]) { ?> getData(['page', $parentId, 'title']); ?> getData(['page', $parentId, 'title']); }?>
    • - getData(['page', $childId, 'disable']) == false || - $this->getData(['page', $childId, 'block']) == 'bar' || - $this->getUser('group') >= $module::$actions[$action]) { ?> + getData(['page', $childId, 'disable']) == false || + $this->getData(['page', $childId, 'block']) == 'bar' || + $this->getUser('group') >= $module::$actions[$action]) { ?> getData(['page', $childId, 'title']); ?> getData(['page', $childId, 'title']); }?> diff --git a/core/module/theme/resource/custom.css b/core/module/theme/resource/custom.css index e9ab5288..28f27a51 100755 --- a/core/module/theme/resource/custom.css +++ b/core/module/theme/resource/custom.css @@ -12,11 +12,11 @@ * Grille du site * Barres et page */ -#contentleft { +#contentLeft { } -#contentright { +#contentRight { } -#contentsite { +#contentSite { } /* Bannière */ @@ -43,6 +43,18 @@ nav a:hover { nav a.active { } +/* Menu latéral */ +/* aspect des puces */ +ul #menuSide { +} +/* Block menu à droite */ +#menuSideRight { +} +/* Block menu à gauchle */ +#menuSideLeft { +} + + /* Bas de page */ footer { } diff --git a/core/module/theme/theme.php b/core/module/theme/theme.php index 81f33d47..3db8cca8 100755 --- a/core/module/theme/theme.php +++ b/core/module/theme/theme.php @@ -85,7 +85,7 @@ class theme extends common { '15px' => 'Très grande' ]; public static $footerPositions = [ - 'hide' => 'Cachée', + 'hide' => 'Caché', 'site' => 'Dans le site', 'body' => 'En dessous du site' ]; @@ -105,11 +105,11 @@ class theme extends common { '2.4vmax' => 'Très grande (240%)' ]; public static $headerHeights = [ - '100px' => 'Très petite', - '150px' => 'Petite', - '200px' => 'Moyenne', - '300px' => 'Grande', - '400px' => 'Très grande' + '100px' => 'Très petite (100px) ', + '150px' => 'Petite (150px)', + '200px' => 'Moyenne (200px)', + '300px' => 'Grande (300px)', + '400px' => 'Très grande (400px)' ]; public static $headerPositions = [ 'body' => 'Au dessus du site', @@ -290,7 +290,9 @@ class theme extends common { 'font' => $this->getInput('themeFooterFont'), 'fontSize' => $this->getInput('themeFooterFontSize'), 'fontWeight' => $this->getInput('themeFooterFontWeight'), - 'displayVersion' => $this->getInput('themefooterDisplayVersion', helper::FILTER_BOOLEAN) + 'displayVersion' => $this->getInput('themefooterDisplayVersion', helper::FILTER_BOOLEAN), + 'displaySiteMap' => $this->getInput('themefooterDisplaySiteMap', helper::FILTER_BOOLEAN), + 'displayCopyright' => $this->getInput('themefooterDisplayCopyright', helper::FILTER_BOOLEAN) ]]); // Valeurs en sortie $this->addOutput([ @@ -578,4 +580,4 @@ class theme extends common { } return ($zipFilename); } -} \ No newline at end of file +} diff --git a/core/module/theme/view/body/body.php b/core/module/theme/view/body/body.php index 6ab43b1d..16695055 100755 --- a/core/module/theme/view/body/body.php +++ b/core/module/theme/view/body/body.php @@ -18,7 +18,7 @@

      Couleur

      'colorPicker', - 'help' => 'Le curseur horizontal règle le niveau de transparence', + 'help' => 'Le curseur horizontal règle le niveau de transparence.', 'label' => 'Fond', 'value' => $this->getData(['theme', 'body', 'backgroundColor']) ]); ?> diff --git a/core/module/theme/view/footer/footer.js.php b/core/module/theme/view/footer/footer.js.php index 26f9cf5b..cea2ba4e 100755 --- a/core/module/theme/view/footer/footer.js.php +++ b/core/module/theme/view/footer/footer.js.php @@ -131,6 +131,38 @@ $("#themeFooterLoginLink").on("change", function() { $("#footerLoginLink").hide(); } }).trigger("change"); + +// Numéro de version +$("#themefooterDisplayVersion").on("change", function() { + if($(this).is(":checked")) { + $("#footerDisplayVersion").show(); + } + else { + $("#footerDisplayVersion").hide(); + } +}).trigger("change"); + +// Numéro de version +$("#themefooterDisplayCopyright").on("change", function() { + if($(this).is(":checked")) { + $("#footerDisplayCopyright").show(); + } + else { + $("#footerDisplayCopyright").hide(); + } +}).trigger("change"); + +// Site Map +$("#themefooterDisplaySiteMap").on("change", function() { + if($(this).is(":checked")) { + $("#footerDisplaySiteMap").show(); + } + else { + $("#footerDisplaySiteMap").hide(); + } +}).trigger("change"); + + // Numéro de version $("#themefooterDisplayVersion").on("change", function() { @@ -158,4 +190,4 @@ $("#themeFooterPosition").on("change", function() { $("#themeFooterMargin").prop("checked", false).trigger("change"); }); } -}).trigger("change"); \ No newline at end of file +}).trigger("change"); diff --git a/core/module/theme/view/footer/footer.php b/core/module/theme/view/footer/footer.php index 027bbc97..56cd37f3 100755 --- a/core/module/theme/view/footer/footer.php +++ b/core/module/theme/view/footer/footer.php @@ -73,7 +73,7 @@
      'Taille', - 'help' => 'Proportionnelle à celle définie dans le site', + 'help' => 'Proportionnelle à celle définie dans le site.', 'selected' => $this->getData(['theme', 'footer', 'fontSize']) ]); ?>
      @@ -101,24 +101,11 @@ 'label' => 'Contenu (texte ou HTML)', 'value' => $this->getData(['theme', 'footer', 'text']) ]); ?> -
      -
      - $this->getData(['theme', 'footer', 'loginLink']), - 'help' => 'Visible seulement lorsque vous n\'êtes pas connecté.' - ]); ?> -
      -
      - $this->getData(['theme', 'footer','displayVersion']) - ]); ?> -
      -
  • -
    +

    Contenu personnalisé

    -
    +

    Réseaux sociaux

    -
    -
    -

    Copyright

    - 'Emplacement', - 'selected' => $this->getData(['theme', 'footer', 'copyrightPosition']) - ]); ?> - 'Alignement horizontal', - 'selected' => $this->getData(['theme', 'footer', 'copyrightAlign']) - ]); ?> -
    -
    - \ No newline at end of file +
    +
    +
    +

    Copyright

    +
    +
    + 'Emplacement', + 'selected' => $this->getData(['theme', 'footer', 'copyrightPosition']) + ]); ?> + 'Alignement horizontal', + 'selected' => $this->getData(['theme', 'footer', 'copyrightAlign']) + ]); ?> +
    +
    +

    Afficher les éléments suivants :

    +
    + $this->getData(['theme', 'footer','displayCopyright']) + ]); ?> +
    +
    + $this->getData(['theme', 'footer','displayVersion']) + ]); ?> +
    +
    + $this->getData(['theme', 'footer', 'displaySiteMap']), + 'help' => 'Un plan du site permet un meilleur référencement.' + ]); ?> +
    +
    + $this->getData(['theme', 'footer', 'loginLink']) + ]); ?> +
    +
    +
    +
    +
    +
    +
    + diff --git a/core/module/theme/view/header/header.php b/core/module/theme/view/header/header.php index 3ea3f5db..1c59a67a 100755 --- a/core/module/theme/view/header/header.php +++ b/core/module/theme/view/header/header.php @@ -20,7 +20,7 @@
    'colorPicker', - 'help' => 'Le curseur horizontal règle le niveau de transparence', + 'help' => 'Le curseur horizontal règle le niveau de transparence.', 'label' => 'Fond', 'value' => $this->getData(['theme', 'header', 'backgroundColor']) ]); ?> @@ -28,7 +28,7 @@
    'colorPicker', - 'help' => 'Le curseur horizontal règle le niveau de transparence', + 'help' => 'Le curseur horizontal règle le niveau de transparence.', 'label' => 'Texte', 'value' => $this->getData(['theme', 'header', 'textColor']) ]); ?> @@ -92,7 +92,7 @@
    'Taille', - 'help' => 'Proportionnelle à celle définie dans le site', + 'help' => 'Proportionnelle à celle définie dans le site.', 'selected' => $this->getData(['theme', 'header', 'fontSize']) ]); ?>
    diff --git a/core/module/theme/view/menu/menu.php b/core/module/theme/view/menu/menu.php index 2184b297..d9e3cb0b 100755 --- a/core/module/theme/view/menu/menu.php +++ b/core/module/theme/view/menu/menu.php @@ -20,7 +20,7 @@
    'colorPicker', - 'help' => 'Le curseur horizontal règle le niveau de transparence', + 'help' => 'Le curseur horizontal règle le niveau de transparence.', 'label' => 'Fond', 'value' => $this->getData(['theme', 'menu', 'backgroundColor']) ]); ?> @@ -28,7 +28,7 @@
    'colorPicker', - 'help' => 'Le curseur horizontal règle le niveau de transparence', + 'help' => 'Le curseur horizontal règle le niveau de transparence.', 'label' => 'Texte', 'value' => $this->getData(['theme', 'menu', 'textColor']) ]); ?> @@ -40,8 +40,7 @@

    Contenu

    $this->getData(['theme', 'menu', 'loginLink']), - 'help' => 'Visible seulement sur cette page et lorsque vous n\'êtes pas connecté (non recommandé).' + 'checked' => $this->getData(['theme', 'menu', 'loginLink']) ]); ?>
    @@ -125,4 +124,4 @@
    - \ No newline at end of file + diff --git a/core/module/theme/view/site/site.php b/core/module/theme/view/site/site.php index 2dd04060..a0c5a340 100755 --- a/core/module/theme/view/site/site.php +++ b/core/module/theme/view/site/site.php @@ -20,7 +20,7 @@
    'colorPicker', - 'help' => 'Le curseur horizontal règle le niveau de transparence', + 'help' => 'Le curseur horizontal règle le niveau de transparence.', 'label' => 'Fond', 'value' => $this->getData(['theme', 'site', 'backgroundColor']) ]); ?> @@ -28,7 +28,7 @@
    'colorPicker', - 'help' => 'Le curseur horizontal règle le niveau de transparence', + 'help' => 'Le curseur horizontal règle le niveau de transparence.', 'label' => 'Texte', 'value' => $this->getData(['theme', 'text', 'textColor']) ]); ?> @@ -36,7 +36,7 @@
    'colorPicker', - 'help' => 'Le curseur horizontal règle le niveau de transparence', + 'help' => 'Le curseur horizontal règle le niveau de transparence.', 'label' => 'Titres', 'value' => $this->getData(['theme', 'title', 'textColor']) ]); ?> @@ -46,7 +46,7 @@
    'colorPicker', - 'help' => 'Le curseur horizontal règle le niveau de transparence', + 'help' => 'Le curseur horizontal règle le niveau de transparence.', 'label' => 'Boutons', 'value' => $this->getData(['theme', 'button', 'backgroundColor']) ]); ?> @@ -54,7 +54,7 @@
    'colorPicker', - 'help' => 'Le curseur horizontal règle le niveau de transparence', + 'help' => 'Le curseur horizontal règle le niveau de transparence.', 'label' => 'Liens', 'value' => $this->getData(['theme', 'link', 'textColor']) ]); ?> diff --git a/core/vendor/sitemap/SitemapGenerator.php b/core/vendor/sitemap/SitemapGenerator.php new file mode 100644 index 00000000..f15350d0 --- /dev/null +++ b/core/vendor/sitemap/SitemapGenerator.php @@ -0,0 +1,540 @@ +urls = new \SplFixedArray(); + $this->baseURL = $baseURL; + $this->basePath = $basePath; + $this->document = new \DOMDocument("1.0"); + $this->document->preserveWhiteSpace = false; + $this->document->formatOutput = true; + } + + /** + * Use this to add many URL at one time. + * Each inside array can have 1 to 4 fields. + * @param $urlsArray + * @throws \InvalidArgumentException + */ + public function addUrls($urlsArray) + { + if (!is_array($urlsArray)) { + throw new \InvalidArgumentException("Array as argument should be given."); + } + foreach ($urlsArray as $url) { + $this->addUrl( + isset($url[0]) ? $url[0] : null, + isset($url[1]) ? $url[1] : null, + isset($url[2]) ? $url[2] : null, + isset($url[3]) ? $url[3] : null + ); + } + } + + /** + * Use this to add single URL to sitemap. + * @param string $url URL + * @param \DateTime $lastModified When it was modified, use ISO 8601 + * @param string $changeFrequency How often search engines should revisit this URL + * @param string $priority Priority of URL on You site + * @see http://en.wikipedia.org/wiki/ISO_8601 + * @see http://php.net/manual/en/function.date.php + * @throws \InvalidArgumentException + */ + public function addUrl($url, \DateTime $lastModified = null, $changeFrequency = null, $priority = null) + { + if ($url == null) { + throw new \InvalidArgumentException("URL is mandatory. At least one argument should be given."); + } + $urlLength = extension_loaded('mbstring') ? mb_strlen($url) : strlen($url); + if ($urlLength > 2048) { + throw new \InvalidArgumentException( + "URL length can't be bigger than 2048 characters. + Note, that precise url length check is guaranteed only using mb_string extension. + Make sure Your server allow to use mbstring extension." + ); + } + $tmp = new \SplFixedArray(1); + + $tmp[self::URL_PARAM_LOC] = $url; + + if (isset($lastModified)) { + $tmp->setSize(2); + $tmp[self::URL_PARAM_LASTMOD] = $lastModified->format(\DateTime::ATOM); + } + + if (isset($changeFrequency)) { + $tmp->setSize(3); + $tmp[self::URL_PARAM_CHANGEFREQ] = $changeFrequency; + } + + if (isset($priority)) { + $tmp->setSize(4); + $tmp[self::URL_PARAM_PRIORITY] = $priority; + } + + if ($this->urls->getSize() === 0) { + $this->urls->setSize(1); + } else { + if ($this->urls->getSize() === $this->urls->key()) { + $this->urls->setSize($this->urls->getSize() * 2); + } + } + + $this->urls[$this->urls->key()] = $tmp; + $this->urls->next(); + } + + + /** + * @throws \BadMethodCallException + * @throws \InvalidArgumentException + * @throws \LengthException + */ + public function createSitemap() + { + if (!isset($this->urls)) { + throw new \BadMethodCallException("To create sitemap, call addUrl or addUrls function first."); + } + if ($this->maxURLsPerSitemap > self::MAX_URLS_PER_SITEMAP) { + throw new \InvalidArgumentException( + "More than " . self::MAX_URLS_PER_SITEMAP . " URLs per single sitemap is not allowed." + ); + } + $generatorInfo = ''; + + + $sitemapHeader = '' . $generatorInfo . ' + + '; + + $sitemapIndexHeader = '' . $generatorInfo . ' + + '; + + + $nullUrls = 0; + foreach ($this->urls as $url) { + if (is_null($url)) { + $nullUrls++; + } + } + + $nonEmptyUrls = $this->urls->getSize() - $nullUrls; + + $chunks = ceil($nonEmptyUrls / $this->maxURLsPerSitemap); + + for ($chunkCounter = 0; $chunkCounter < $chunks; $chunkCounter++) { + $xml = new \SimpleXMLElement($sitemapHeader); + for ($urlCounter = $chunkCounter * $this->maxURLsPerSitemap; + $urlCounter < ($chunkCounter + 1) * $this->maxURLsPerSitemap && $urlCounter < $nonEmptyUrls; + $urlCounter++ + ) { + $row = $xml->addChild('url'); + + $row->addChild( + 'loc', + htmlspecialchars($this->baseURL . $this->urls[$urlCounter][self::URL_PARAM_LOC], ENT_QUOTES, 'UTF-8') + ); + + if ($this->urls[$urlCounter]->getSize() > 1) { + $row->addChild('lastmod', $this->urls[$urlCounter][self::URL_PARAM_LASTMOD]); + } + if ($this->urls[$urlCounter]->getSize() > 2) { + $row->addChild('changefreq', $this->urls[$urlCounter][self::URL_PARAM_CHANGEFREQ]); + } + if ($this->urls[$urlCounter]->getSize() > 3) { + $row->addChild('priority', $this->urls[$urlCounter][self::URL_PARAM_PRIORITY]); + } + } + if (strlen($xml->asXML()) > self::MAX_FILE_SIZE) { + throw new \LengthException( + "Sitemap size equals to " . strlen($xml->asXML()) + . " bytes is more than 10MB (" . self::MAX_FILE_SIZE . " bytes), + please decrease maxURLsPerSitemap variable." + ); + } + $this->sitemaps[] = $xml->asXML(); + } + if (count($this->sitemaps) > $this->maxSitemaps) { + throw new \LengthException( + "Sitemap index can contain {$this->maxSitemaps} sitemaps. + Perhaps You trying to submit too many maps." + ); + } + if (count($this->sitemaps) > 1) { + for ($i = 0; $i < count($this->sitemaps); $i++) { + $this->sitemaps[$i] = array( + str_replace(".xml", ($i + 1) . ".xml", $this->sitemapFileName), + $this->sitemaps[$i] + ); + } + $xml = new \SimpleXMLElement($sitemapIndexHeader); + foreach ($this->sitemaps as $sitemap) { + $row = $xml->addChild('sitemap'); + $row->addChild('loc', $this->baseURL . "/" . $this->getSitemapFileName(htmlentities($sitemap[0]))); + $row->addChild('lastmod', date('c')); + } + $this->sitemapFullURL = $this->baseURL . "/" . $this->sitemapIndexFileName; + $this->sitemapIndex = array( + $this->sitemapIndexFileName, + $xml->asXML() + ); + } else { + $this->sitemapFullURL = $this->baseURL . "/" . $this->getSitemapFileName(); + + $this->sitemaps[0] = array( + $this->sitemapFileName, + $this->sitemaps[0] + ); + } + } + + + /** + * Returns created sitemaps as array of strings. + * Use it You want to work with sitemap without saving it as files. + * @return array of strings + * @access public + */ + public function toArray() + { + if (isset($this->sitemapIndex)) { + return array_merge(array($this->sitemapIndex), $this->sitemaps); + } else { + return $this->sitemaps; + } + } + + /** + * Will write sitemaps as files. + * @access public + * @throws \BadMethodCallException + */ + public function writeSitemap() + { + if (!isset($this->sitemaps)) { + throw new \BadMethodCallException("To write sitemap, call createSitemap function first."); + } + if (isset($this->sitemapIndex)) { + $this->document->loadXML($this->sitemapIndex[1]); + $this->writeFile($this->document->saveXML(), $this->basePath, $this->sitemapIndex[0], true); + foreach ($this->sitemaps as $sitemap) { + $this->writeFile($sitemap[1], $this->basePath, $sitemap[0]); + } + } else { + $this->document->loadXML($this->sitemaps[0][1]); + $this->writeFile($this->document->saveXML(), $this->basePath, $this->sitemaps[0][0], true); + $this->writeFile($this->sitemaps[0][1], $this->basePath, $this->sitemaps[0][0]); + } + } + + + private function getSitemapFileName($name = null) + { + if (!$name) { + $name = $this->sitemapFileName; + } + if ($this->createGZipFile) { + $name .= ".gz"; + } + return $name; + } + + /** + * Save file. + * @param string $content + * @param string $filePath + * @param string $fileName + * @param bool $noGzip + * @return bool + * @access private + */ + private function writeFile($content, $filePath, $fileName, $noGzip = false) + { + if (!$noGzip && $this->createGZipFile) { + return $this->writeGZipFile($content, $filePath, $fileName); + } + $file = fopen($filePath . $fileName, 'w'); + fwrite($file, $content); + return fclose($file); + } + + /** + * Save GZipped file. + * @param string $content + * @param string $filePath + * @param string $fileName + * @return bool + * @access private + */ + private function writeGZipFile($content, $filePath, $fileName) + { + $fileName .= '.gz'; + $file = gzopen($filePath . $fileName, 'w'); + gzwrite($file, $content); + return gzclose($file); + } + + /** + * If robots.txt file exist, will update information about newly created sitemaps. + * If there is no robots.txt will, create one and put into it information about sitemaps. + * @access public + * @throws \BadMethodCallException + */ + public function updateRobots() + { + if (!isset($this->sitemaps)) { + throw new \BadMethodCallException("To update robots.txt, call createSitemap function first."); + } + $sampleRobotsFile = "User-agent: *\nAllow: /"; + if (file_exists($this->basePath . $this->robotsFileName)) { + $robotsFile = explode("\n", file_get_contents($this->basePath . $this->robotsFileName)); + $robotsFileContent = ""; + foreach ($robotsFile as $key => $value) { + if (substr($value, 0, 8) == 'Sitemap:') { + unset($robotsFile[$key]); + } else { + $robotsFileContent .= $value . "\n"; + } + } + $robotsFileContent .= "Sitemap: $this->sitemapFullURL"; + if (!isset($this->sitemapIndex)) { + $robotsFileContent .= "\nSitemap: " . $this->getSitemapFileName($this->sitemapFullURL); + } + file_put_contents($this->basePath . $this->robotsFileName, $robotsFileContent); + } else { + $sampleRobotsFile = $sampleRobotsFile . "\n\nSitemap: " . $this->sitemapFullURL; + if (!isset($this->sitemapIndex)) { + $sampleRobotsFile .= "\nSitemap: " . $this->getSitemapFileName($this->sitemapFullURL); + } + file_put_contents($this->basePath . $this->robotsFileName, $sampleRobotsFile); + } + } + + /** + * Will inform search engines about newly created sitemaps. + * Google, Ask, Bing and Yahoo will be noticed. + * If You don't pass yahooAppId, Yahoo still will be informed, + * but this method can be used once per day. If You will do this often, + * message that limit was exceeded will be returned from Yahoo. + * @param string $yahooAppId Your site Yahoo appid. + * @return array of messages and http codes from each search engine + * @access public + * @throws \BadMethodCallException + */ + public function submitSitemap($yahooAppId = null) + { + if (!isset($this->sitemaps)) { + throw new \BadMethodCallException("To submit sitemap, call createSitemap function first."); + } + if (!extension_loaded('curl')) { + throw new \BadMethodCallException("cURL library is needed to do submission."); + } + $searchEngines = $this->searchEngines; + $searchEngines[0] = isset($yahooAppId) ? + str_replace("USERID", $yahooAppId, $searchEngines[0][0]) : + $searchEngines[0][1]; + $result = array(); + for ($i = 0; $i < count($searchEngines); $i++) { + $submitSite = curl_init($searchEngines[$i] . htmlspecialchars($this->sitemapFullURL, ENT_QUOTES, 'UTF-8')); + curl_setopt($submitSite, CURLOPT_RETURNTRANSFER, true); + $responseContent = curl_exec($submitSite); + $response = curl_getinfo($submitSite); + $submitSiteShort = array_reverse(explode(".", parse_url($searchEngines[$i], PHP_URL_HOST))); + $result[] = array( + "site" => $submitSiteShort[1] . "." . $submitSiteShort[0], + "fullsite" => $searchEngines[$i] . htmlspecialchars($this->sitemapFullURL, ENT_QUOTES, 'UTF-8'), + "http_code" => $response['http_code'], + "message" => str_replace("\n", " ", strip_tags($responseContent)) + ); + } + return $result; + } + + + /** + * Returns array of URLs + * + * Converts internal SplFixedArray to array + * @return array + */ + public function getUrls() + { + $urls = $this->urls->toArray(); + + /** + * @var int $key + * @var \SplFixedArray $urlSplArr + */ + foreach ($urls as $key => $urlSplArr) { + if (!is_null($urlSplArr)) { + $urlArr = $urlSplArr->toArray(); + $url = []; + foreach ($urlArr as $paramIndex => $paramValue) { + switch ($paramIndex) { + case static::URL_PARAM_LOC: + $url['loc'] = $paramValue; + break; + case static::URL_PARAM_CHANGEFREQ: + $url['changefreq'] = $paramValue; + break; + case static::URL_PARAM_LASTMOD: + $url['lastmod'] = $paramValue; + break; + case static::URL_PARAM_PRIORITY: + $url['priority'] = $paramValue; + break; + default: + break; + } + } + $urls[$key] = $url; + } + } + + return $urls; + } + + public function countUrls() + { + return $this->urls->getSize(); + } +} diff --git a/core/vendor/swiper/inc.json b/core/vendor/swiper/inc.json new file mode 100644 index 00000000..2c5cbb8d --- /dev/null +++ b/core/vendor/swiper/inc.json @@ -0,0 +1,6 @@ +[ + "swiper.min.css", + "swiper.css.php", + "swiper.min.js", + "init.js" +] diff --git a/core/vendor/swiper/init.js b/core/vendor/swiper/init.js new file mode 100644 index 00000000..899fd334 --- /dev/null +++ b/core/vendor/swiper/init.js @@ -0,0 +1,23 @@ +$(document).ready(function() { + var mySwiper = new Swiper('.swiper-container', { + //direction: 'vertical', + speed:1000, + spaceBetween: 20, + roundLengths:true, + loop: true, + autoplay: { + //reverseDirection: true, + delay: 6000, + disableOnInteraction: false, + }, + navigation: { + nextEl: '.swiper-button-next', + prevEl: '.swiper-button-prev', + }, + keyboard: { + enabled: true, + }, + mousewheel: true, + }); +}); + diff --git a/core/vendor/swiper/swiper.css.php b/core/vendor/swiper/swiper.css.php new file mode 100644 index 00000000..55fbb16f --- /dev/null +++ b/core/vendor/swiper/swiper.css.php @@ -0,0 +1,2 @@ + + .swiper-container{margin:auto;max-width:;} diff --git a/core/vendor/swiper/swiper.min.css b/core/vendor/swiper/swiper.min.css new file mode 100644 index 00000000..dd051a0c --- /dev/null +++ b/core/vendor/swiper/swiper.min.css @@ -0,0 +1,25 @@ +/** + * Swiper 4.5.0 + * Most modern mobile touch slider and framework with hardware accelerated transitions + * http://www.idangero.us/swiper/ + * + * Copyright 2014-2019 Vladimir Kharlampidi + * + * Released under the MIT License + * + * Released on: February 22, 2019 + */ +.swiper-container{margin:0 auto;position:relative;overflow:hidden;list-style:none;padding:0;z-index:1}.swiper-container-no-flexbox .swiper-slide{float:left}.swiper-container-vertical>.swiper-wrapper{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.swiper-wrapper{position:relative;width:100%;height:100%;z-index:1;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;-o-transition-property:transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-box-sizing:content-box;box-sizing:content-box}.swiper-container-android .swiper-slide,.swiper-wrapper{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.swiper-container-multirow>.swiper-wrapper{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.swiper-container-free-mode>.swiper-wrapper{-webkit-transition-timing-function:ease-out;-o-transition-timing-function:ease-out;transition-timing-function:ease-out;margin:0 auto}.swiper-slide{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;width:100%;height:100%;position:relative;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;-o-transition-property:transform;transition-property:transform;transition-property:transform,-webkit-transform}.swiper-slide-invisible-blank{visibility:hidden}.swiper-container-autoheight,.swiper-container-autoheight .swiper-slide{height:auto}.swiper-container-autoheight .swiper-wrapper{-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;-webkit-transition-property:height,-webkit-transform;transition-property:height,-webkit-transform;-o-transition-property:transform,height;transition-property:transform,height;transition-property:transform,height,-webkit-transform}.swiper-container-3d{-webkit-perspective:1200px;perspective:1200px}.swiper-container-3d .swiper-cube-shadow,.swiper-container-3d .swiper-slide,.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top,.swiper-container-3d .swiper-wrapper{-webkit-transform-style:preserve-3d;transform-style:preserve-3d}.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top{position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none;z-index:10}.swiper-container-3d .swiper-slide-shadow-left{background-image:-webkit-gradient(linear,right top,left top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,0)));background-image:-webkit-linear-gradient(right,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-o-linear-gradient(right,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:linear-gradient(to left,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-3d .swiper-slide-shadow-right{background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,0)));background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-o-linear-gradient(left,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:linear-gradient(to right,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-3d .swiper-slide-shadow-top{background-image:-webkit-gradient(linear,left bottom,left top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,0)));background-image:-webkit-linear-gradient(bottom,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-o-linear-gradient(bottom,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:linear-gradient(to top,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-3d .swiper-slide-shadow-bottom{background-image:-webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,.5)),to(rgba(0,0,0,0)));background-image:-webkit-linear-gradient(top,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:-o-linear-gradient(top,rgba(0,0,0,.5),rgba(0,0,0,0));background-image:linear-gradient(to bottom,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-wp8-horizontal,.swiper-container-wp8-horizontal>.swiper-wrapper{-ms-touch-action:pan-y;touch-action:pan-y}.swiper-container-wp8-vertical,.swiper-container-wp8-vertical>.swiper-wrapper{-ms-touch-action:pan-x;touch-action:pan-x}.swiper-button-next,.swiper-button-prev{position:absolute;top:50%;width:27px;height:44px;margin-top:-22px;z-index:10;cursor:pointer;background-size:27px 44px;background-position:center;background-repeat:no-repeat}.swiper-button-next.swiper-button-disabled,.swiper-button-prev.swiper-button-disabled{opacity:.35;cursor:auto;pointer-events:none}.swiper-button-prev,.swiper-container-rtl .swiper-button-next{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E");left:10px;right:auto}.swiper-button-next,.swiper-container-rtl .swiper-button-prev{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E");right:10px;left:auto}.swiper-button-prev.swiper-button-white,.swiper-container-rtl .swiper-button-next.swiper-button-white{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E")}.swiper-button-next.swiper-button-white,.swiper-container-rtl .swiper-button-prev.swiper-button-white{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E")}.swiper-button-prev.swiper-button-black,.swiper-container-rtl .swiper-button-next.swiper-button-black{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E")}.swiper-button-next.swiper-button-black,.swiper-container-rtl .swiper-button-prev.swiper-button-black{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E")}.swiper-button-lock{display:none}.swiper-pagination{position:absolute;text-align:center;-webkit-transition:.3s opacity;-o-transition:.3s opacity;transition:.3s opacity;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);z-index:10}.swiper-pagination.swiper-pagination-hidden{opacity:0}.swiper-container-horizontal>.swiper-pagination-bullets,.swiper-pagination-custom,.swiper-pagination-fraction{bottom:10px;left:0;width:100%}.swiper-pagination-bullets-dynamic{overflow:hidden;font-size:0}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{-webkit-transform:scale(.33);-ms-transform:scale(.33);transform:scale(.33);position:relative}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-main{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev{-webkit-transform:scale(.66);-ms-transform:scale(.66);transform:scale(.66)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev-prev{-webkit-transform:scale(.33);-ms-transform:scale(.33);transform:scale(.33)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next{-webkit-transform:scale(.66);-ms-transform:scale(.66);transform:scale(.66)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next-next{-webkit-transform:scale(.33);-ms-transform:scale(.33);transform:scale(.33)}.swiper-pagination-bullet{width:8px;height:8px;display:inline-block;border-radius:100%;background:#000;opacity:.2}button.swiper-pagination-bullet{border:none;margin:0;padding:0;-webkit-box-shadow:none;box-shadow:none;-webkit-appearance:none;-moz-appearance:none;appearance:none}.swiper-pagination-clickable .swiper-pagination-bullet{cursor:pointer}.swiper-pagination-bullet-active{opacity:1;background:#007aff}.swiper-container-vertical>.swiper-pagination-bullets{right:10px;top:50%;-webkit-transform:translate3d(0,-50%,0);transform:translate3d(0,-50%,0)}.swiper-container-vertical>.swiper-pagination-bullets .swiper-pagination-bullet{margin:6px 0;display:block}.swiper-container-vertical>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic{top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);width:8px}.swiper-container-vertical>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{display:inline-block;-webkit-transition:.2s top,.2s -webkit-transform;transition:.2s top,.2s -webkit-transform;-o-transition:.2s transform,.2s top;transition:.2s transform,.2s top;transition:.2s transform,.2s top,.2s -webkit-transform}.swiper-container-horizontal>.swiper-pagination-bullets .swiper-pagination-bullet{margin:0 4px}.swiper-container-horizontal>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic{left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);white-space:nowrap}.swiper-container-horizontal>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{-webkit-transition:.2s left,.2s -webkit-transform;transition:.2s left,.2s -webkit-transform;-o-transition:.2s transform,.2s left;transition:.2s transform,.2s left;transition:.2s transform,.2s left,.2s -webkit-transform}.swiper-container-horizontal.swiper-container-rtl>.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{-webkit-transition:.2s right,.2s -webkit-transform;transition:.2s right,.2s -webkit-transform;-o-transition:.2s transform,.2s right;transition:.2s transform,.2s right;transition:.2s transform,.2s right,.2s -webkit-transform}.swiper-pagination-progressbar{background:rgba(0,0,0,.25);position:absolute}.swiper-pagination-progressbar .swiper-pagination-progressbar-fill{background:#007aff;position:absolute;left:0;top:0;width:100%;height:100%;-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0);-webkit-transform-origin:left top;-ms-transform-origin:left top;transform-origin:left top}.swiper-container-rtl .swiper-pagination-progressbar .swiper-pagination-progressbar-fill{-webkit-transform-origin:right top;-ms-transform-origin:right top;transform-origin:right top}.swiper-container-horizontal>.swiper-pagination-progressbar,.swiper-container-vertical>.swiper-pagination-progressbar.swiper-pagination-progressbar-opposite{width:100%;height:4px;left:0;top:0}.swiper-container-horizontal>.swiper-pagination-progressbar.swiper-pagination-progressbar-opposite,.swiper-container-vertical>.swiper-pagination-progressbar{width:4px;height:100%;left:0;top:0}.swiper-pagination-white .swiper-pagination-bullet-active{background:#fff}.swiper-pagination-progressbar.swiper-pagination-white{background:rgba(255,255,255,.25)}.swiper-pagination-progressbar.swiper-pagination-white .swiper-pagination-progressbar-fill{background:#fff}.swiper-pagination-black .swiper-pagination-bullet-active{background:#000}.swiper-pagination-progressbar.swiper-pagination-black{background:rgba(0,0,0,.25)}.swiper-pagination-progressbar.swiper-pagination-black .swiper-pagination-progressbar-fill{background:#000}.swiper-pagination-lock{display:none}.swiper-scrollbar{border-radius:10px;position:relative;-ms-touch-action:none;background:rgba(0,0,0,.1)}.swiper-container-horizontal>.swiper-scrollbar{position:absolute;left:1%;bottom:3px;z-index:50;height:5px;width:98%}.swiper-container-vertical>.swiper-scrollbar{position:absolute;right:3px;top:1%;z-index:50;width:5px;height:98%}.swiper-scrollbar-drag{height:100%;width:100%;position:relative;background:rgba(0,0,0,.5);border-radius:10px;left:0;top:0}.swiper-scrollbar-cursor-drag{cursor:move}.swiper-scrollbar-lock{display:none}.swiper-zoom-container{width:100%;height:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;text-align:center}.swiper-zoom-container>canvas,.swiper-zoom-container>img,.swiper-zoom-container>svg{max-width:100%;max-height:100%;-o-object-fit:contain;object-fit:contain}.swiper-slide-zoomed{cursor:move}.swiper-lazy-preloader{width:42px;height:42px;position:absolute;left:50%;top:50%;margin-left:-21px;margin-top:-21px;z-index:10;-webkit-transform-origin:50%;-ms-transform-origin:50%;transform-origin:50%;-webkit-animation:swiper-preloader-spin 1s steps(12,end) infinite;animation:swiper-preloader-spin 1s steps(12,end) infinite}.swiper-lazy-preloader:after{display:block;content:'';width:100%;height:100%;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%236c6c6c'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");background-position:50%;background-size:100%;background-repeat:no-repeat}.swiper-lazy-preloader-white:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%23fff'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E")}@-webkit-keyframes swiper-preloader-spin{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes swiper-preloader-spin{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.swiper-container .swiper-notification{position:absolute;left:0;top:0;pointer-events:none;opacity:0;z-index:-1000}.swiper-container-fade.swiper-container-free-mode .swiper-slide{-webkit-transition-timing-function:ease-out;-o-transition-timing-function:ease-out;transition-timing-function:ease-out}.swiper-container-fade .swiper-slide{pointer-events:none;-webkit-transition-property:opacity;-o-transition-property:opacity;transition-property:opacity}.swiper-container-fade .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-fade .swiper-slide-active,.swiper-container-fade .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-container-cube{overflow:visible}.swiper-container-cube .swiper-slide{pointer-events:none;-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:1;visibility:hidden;-webkit-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0;width:100%;height:100%}.swiper-container-cube .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-cube.swiper-container-rtl .swiper-slide{-webkit-transform-origin:100% 0;-ms-transform-origin:100% 0;transform-origin:100% 0}.swiper-container-cube .swiper-slide-active,.swiper-container-cube .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-container-cube .swiper-slide-active,.swiper-container-cube .swiper-slide-next,.swiper-container-cube .swiper-slide-next+.swiper-slide,.swiper-container-cube .swiper-slide-prev{pointer-events:auto;visibility:visible}.swiper-container-cube .swiper-slide-shadow-bottom,.swiper-container-cube .swiper-slide-shadow-left,.swiper-container-cube .swiper-slide-shadow-right,.swiper-container-cube .swiper-slide-shadow-top{z-index:0;-webkit-backface-visibility:hidden;backface-visibility:hidden}.swiper-container-cube .swiper-cube-shadow{position:absolute;left:0;bottom:0;width:100%;height:100%;background:#000;opacity:.6;-webkit-filter:blur(50px);filter:blur(50px);z-index:0}.swiper-container-flip{overflow:visible}.swiper-container-flip .swiper-slide{pointer-events:none;-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:1}.swiper-container-flip .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-flip .swiper-slide-active,.swiper-container-flip .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-container-flip .swiper-slide-shadow-bottom,.swiper-container-flip .swiper-slide-shadow-left,.swiper-container-flip .swiper-slide-shadow-right,.swiper-container-flip .swiper-slide-shadow-top{z-index:0;-webkit-backface-visibility:hidden;backface-visibility:hidden}.swiper-container-coverflow .swiper-wrapper{-ms-perspective:1200px} + +/* Swiper styling Stu Nicholls - CSS Play*/ +.swiper-slide{text-align:center;background:none;display:-webkit-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center; overflow:hidden;} +.swiper-slide img {display:block; width:100%;} +.swiper-slide .swiper-text {display:inline-block; padding:10px; background:rgba(0,0,0,0.5); border-radius:8px; color:#fff; font:300 25px/30px 'Lato', sans-serif; position:absolute; left:-100%; top:30px; transition:1s 1s;} +.swiper-slide-active .swiper-text {left:20px;} +.swiper-button-prev {top:50%;} +.swiper-button-next {top:50%;}@media only screen and (max-width: 800px) {/* make thumbnails wrap to two rows on tablets */.swiper-slide .swiper-text {font:300 20px/25px 'Lato', sans-serif;} +.swiper-button-prev {top:55%; height:30px;} +.swiper-button-next {top:55%; height:30px;}}@media only screen and (max-width: 480px) {/* make thumbnails wrap to three rows on mobiles */.swiper-slide .swiper-text {font:300 15px/18px 'Lato', sans-serif; top:10px; padding:5px;} +.swiper-slide-active .swiper-text {left:5px;} +.swiper-button-prev {top:60%; height:20px;} +.swiper-button-next {top:60%; height:20px;}} diff --git a/core/vendor/swiper/swiper.min.js b/core/vendor/swiper/swiper.min.js new file mode 100644 index 00000000..e2b7d5e1 --- /dev/null +++ b/core/vendor/swiper/swiper.min.js @@ -0,0 +1,13 @@ +/** + * Swiper 4.5.0 + * Most modern mobile touch slider and framework with hardware accelerated transitions + * http://www.idangero.us/swiper/ + * + * Copyright 2014-2019 Vladimir Kharlampidi + * + * Released under the MIT License + * + * Released on: February 22, 2019 + */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).Swiper=t()}(this,function(){"use strict";var f="undefined"==typeof document?{body:{},addEventListener:function(){},removeEventListener:function(){},activeElement:{blur:function(){},nodeName:""},querySelector:function(){return null},querySelectorAll:function(){return[]},getElementById:function(){return null},createEvent:function(){return{initEvent:function(){}}},createElement:function(){return{children:[],childNodes:[],style:{},setAttribute:function(){},getElementsByTagName:function(){return[]}}},location:{hash:""}}:document,J="undefined"==typeof window?{document:f,navigator:{userAgent:""},location:{},history:{},CustomEvent:function(){return this},addEventListener:function(){},removeEventListener:function(){},getComputedStyle:function(){return{getPropertyValue:function(){return""}}},Image:function(){},Date:function(){},screen:{},setTimeout:function(){},clearTimeout:function(){}}:window,l=function(e){for(var t=0;t")){var o="div";for(0===n.indexOf(":~]/)?(t||f).querySelectorAll(e.trim()):[f.getElementById(e.trim().split("#")[1])],i=0;ia.slides.length)break;i.push(a.slides.eq(r)[0])}else i.push(a.slides.eq(a.activeIndex)[0]);for(t=0;t=t.size)&&(t.visibleSlides.push(o),t.visibleSlidesIndexes.push(n),i.eq(n).addClass(a.slideVisibleClass))}o.progress=s?-l:l}t.visibleSlides=L(t.visibleSlides)}},updateProgress:function(e){void 0===e&&(e=this&&this.translate||0);var t=this,a=t.params,i=t.maxTranslate()-t.minTranslate(),s=t.progress,r=t.isBeginning,n=t.isEnd,o=r,l=n;0===i?n=r=!(s=0):(r=(s=(e-t.minTranslate())/i)<=0,n=1<=s),ee.extend(t,{progress:s,isBeginning:r,isEnd:n}),(a.watchSlidesProgress||a.watchSlidesVisibility)&&t.updateSlidesProgress(e),r&&!o&&t.emit("reachBeginning toEdge"),n&&!l&&t.emit("reachEnd toEdge"),(o&&!r||l&&!n)&&t.emit("fromEdge"),t.emit("progress",s)},updateSlidesClasses:function(){var e,t=this,a=t.slides,i=t.params,s=t.$wrapperEl,r=t.activeIndex,n=t.realIndex,o=t.virtual&&i.virtual.enabled;a.removeClass(i.slideActiveClass+" "+i.slideNextClass+" "+i.slidePrevClass+" "+i.slideDuplicateActiveClass+" "+i.slideDuplicateNextClass+" "+i.slideDuplicatePrevClass),(e=o?t.$wrapperEl.find("."+i.slideClass+'[data-swiper-slide-index="'+r+'"]'):a.eq(r)).addClass(i.slideActiveClass),i.loop&&(e.hasClass(i.slideDuplicateClass)?s.children("."+i.slideClass+":not(."+i.slideDuplicateClass+')[data-swiper-slide-index="'+n+'"]').addClass(i.slideDuplicateActiveClass):s.children("."+i.slideClass+"."+i.slideDuplicateClass+'[data-swiper-slide-index="'+n+'"]').addClass(i.slideDuplicateActiveClass));var l=e.nextAll("."+i.slideClass).eq(0).addClass(i.slideNextClass);i.loop&&0===l.length&&(l=a.eq(0)).addClass(i.slideNextClass);var d=e.prevAll("."+i.slideClass).eq(0).addClass(i.slidePrevClass);i.loop&&0===d.length&&(d=a.eq(-1)).addClass(i.slidePrevClass),i.loop&&(l.hasClass(i.slideDuplicateClass)?s.children("."+i.slideClass+":not(."+i.slideDuplicateClass+')[data-swiper-slide-index="'+l.attr("data-swiper-slide-index")+'"]').addClass(i.slideDuplicateNextClass):s.children("."+i.slideClass+"."+i.slideDuplicateClass+'[data-swiper-slide-index="'+l.attr("data-swiper-slide-index")+'"]').addClass(i.slideDuplicateNextClass),d.hasClass(i.slideDuplicateClass)?s.children("."+i.slideClass+":not(."+i.slideDuplicateClass+')[data-swiper-slide-index="'+d.attr("data-swiper-slide-index")+'"]').addClass(i.slideDuplicatePrevClass):s.children("."+i.slideClass+"."+i.slideDuplicateClass+'[data-swiper-slide-index="'+d.attr("data-swiper-slide-index")+'"]').addClass(i.slideDuplicatePrevClass))},updateActiveIndex:function(e){var t,a=this,i=a.rtlTranslate?a.translate:-a.translate,s=a.slidesGrid,r=a.snapGrid,n=a.params,o=a.activeIndex,l=a.realIndex,d=a.snapIndex,p=e;if(void 0===p){for(var c=0;c=s[c]&&i=s[c]&&i=s[c]&&(p=c);n.normalizeSlideIndex&&(p<0||void 0===p)&&(p=0)}if((t=0<=r.indexOf(i)?r.indexOf(i):Math.floor(p/n.slidesPerGroup))>=r.length&&(t=r.length-1),p!==o){var u=parseInt(a.slides.eq(p).attr("data-swiper-slide-index")||p,10);ee.extend(a,{snapIndex:t,realIndex:u,previousIndex:o,activeIndex:p}),a.emit("activeIndexChange"),a.emit("snapIndexChange"),l!==u&&a.emit("realIndexChange"),a.emit("slideChange")}else t!==d&&(a.snapIndex=t,a.emit("snapIndexChange"))},updateClickedSlide:function(e){var t=this,a=t.params,i=L(e.target).closest("."+a.slideClass)[0],s=!1;if(i)for(var r=0;r=o.length&&(u=o.length-1),(p||n.initialSlide||0)===(d||0)&&a&&s.emit("beforeSlideChangeStart");var h,v=-o[u];if(s.updateProgress(v),n.normalizeSlideIndex)for(var f=0;f=Math.floor(100*l[f])&&(r=f);if(s.initialized&&r!==p){if(!s.allowSlideNext&&vs.translate&&v>s.maxTranslate()&&(p||0)!==r)return!1}return h=pt.slides.length-t.loopedSlides+s/2?(t.loopFix(),r=i.children("."+a.slideClass+'[data-swiper-slide-index="'+e+'"]:not(.'+a.slideDuplicateClass+")").eq(0).index(),ee.nextTick(function(){t.slideTo(r)})):t.slideTo(r):r>t.slides.length-s?(t.loopFix(),r=i.children("."+a.slideClass+'[data-swiper-slide-index="'+e+'"]:not(.'+a.slideDuplicateClass+")").eq(0).index(),ee.nextTick(function(){t.slideTo(r)})):t.slideTo(r)}else t.slideTo(r)}};var h={loopCreate:function(){var i=this,e=i.params,t=i.$wrapperEl;t.children("."+e.slideClass+"."+e.slideDuplicateClass).remove();var s=t.children("."+e.slideClass);if(e.loopFillGroupWithBlank){var a=e.slidesPerGroup-s.length%e.slidesPerGroup;if(a!==e.slidesPerGroup){for(var r=0;rs.length&&(i.loopedSlides=s.length);var o=[],l=[];s.each(function(e,t){var a=L(t);e=s.length-i.loopedSlides&&o.push(t),a.attr("data-swiper-slide-index",e)});for(var d=0;d=s.length-r)&&(e=-s.length+i+r,e+=r,t.slideTo(e,0,!1,!0)&&0!==p&&t.setTranslate((d?-t.translate:t.translate)-p));t.allowSlidePrev=n,t.allowSlideNext=o},loopDestroy:function(){var e=this.$wrapperEl,t=this.params,a=this.slides;e.children("."+t.slideClass+"."+t.slideDuplicateClass+",."+t.slideClass+"."+t.slideBlankClass).remove(),a.removeAttr("data-swiper-slide-index")}};var v={setGrabCursor:function(e){if(!(te.touch||!this.params.simulateTouch||this.params.watchOverflow&&this.isLocked)){var t=this.el;t.style.cursor="move",t.style.cursor=e?"-webkit-grabbing":"-webkit-grab",t.style.cursor=e?"-moz-grabbin":"-moz-grab",t.style.cursor=e?"grabbing":"grab"}},unsetGrabCursor:function(){te.touch||this.params.watchOverflow&&this.isLocked||(this.el.style.cursor="")}};var m={appendSlide:function(e){var t=this,a=t.$wrapperEl,i=t.params;if(i.loop&&t.loopDestroy(),"object"==typeof e&&"length"in e)for(var s=0;s=J.screen.width-d)){if(ee.extend(a,{isTouched:!0,isMoved:!1,allowTouchCallbacks:!0,isScrolling:void 0,startMoving:void 0}),s.startX=n,s.startY=o,a.touchStartTime=ee.now(),t.allowClick=!0,t.updateSize(),t.swipeDirection=void 0,0s.startY&&t.translate>=t.minTranslate())return a.isTouched=!1,void(a.isMoved=!1)}else if(os.startX&&t.translate>=t.minTranslate())return;if(a.isTouchEvent&&f.activeElement&&n.target===f.activeElement&&L(n.target).is(a.formElements))return a.isMoved=!0,void(t.allowClick=!1);if(a.allowTouchCallbacks&&t.emit("touchMove",n),!(n.targetTouches&&1i.touchAngle:90-d>i.touchAngle)),a.isScrolling&&t.emit("touchMoveOpposite",n),void 0===a.startMoving&&(s.currentX===s.startX&&s.currentY===s.startY||(a.startMoving=!0)),a.isScrolling)a.isTouched=!1;else if(a.startMoving){t.allowClick=!1,n.preventDefault(),i.touchMoveStopPropagation&&!i.nested&&n.stopPropagation(),a.isMoved||(i.loop&&t.loopFix(),a.startTranslate=t.getTranslate(),t.setTransition(0),t.animating&&t.$wrapperEl.trigger("webkitTransitionEnd transitionend"),a.allowMomentumBounce=!1,!i.grabCursor||!0!==t.allowSlideNext&&!0!==t.allowSlidePrev||t.setGrabCursor(!0),t.emit("sliderFirstMove",n)),t.emit("sliderMove",n),a.isMoved=!0;var u=t.isHorizontal()?p:c;s.diff=u,u*=i.touchRatio,r&&(u=-u),t.swipeDirection=0t.minTranslate()?(h=!1,i.resistance&&(a.currentTranslate=t.minTranslate()-1+Math.pow(-t.minTranslate()+a.startTranslate+u,v))):u<0&&a.currentTranslatea.startTranslate&&(a.currentTranslate=a.startTranslate),0i.threshold||a.allowThresholdMove))return void(a.currentTranslate=a.startTranslate);if(!a.allowThresholdMove)return a.allowThresholdMove=!0,s.startX=s.currentX,s.startY=s.currentY,a.currentTranslate=a.startTranslate,void(s.diff=t.isHorizontal()?s.currentX-s.startX:s.currentY-s.startY)}i.followFinger&&((i.freeMode||i.watchSlidesProgress||i.watchSlidesVisibility)&&(t.updateActiveIndex(),t.updateSlidesClasses()),i.freeMode&&(0===a.velocities.length&&a.velocities.push({position:s[t.isHorizontal()?"startX":"startY"],time:a.touchStartTime}),a.velocities.push({position:s[t.isHorizontal()?"currentX":"currentY"],time:ee.now()})),t.updateProgress(a.currentTranslate),t.setTranslate(a.currentTranslate))}}}}else a.startMoving&&a.isScrolling&&t.emit("touchMoveOpposite",n)}.bind(e),e.onTouchEnd=function(e){var t=this,a=t.touchEventsData,i=t.params,s=t.touches,r=t.rtlTranslate,n=t.$wrapperEl,o=t.slidesGrid,l=t.snapGrid,d=e;if(d.originalEvent&&(d=d.originalEvent),a.allowTouchCallbacks&&t.emit("touchEnd",d),a.allowTouchCallbacks=!1,!a.isTouched)return a.isMoved&&i.grabCursor&&t.setGrabCursor(!1),a.isMoved=!1,void(a.startMoving=!1);i.grabCursor&&a.isMoved&&a.isTouched&&(!0===t.allowSlideNext||!0===t.allowSlidePrev)&&t.setGrabCursor(!1);var p,c=ee.now(),u=c-a.touchStartTime;if(t.allowClick&&(t.updateClickedSlide(d),t.emit("tap",d),u<300&&300-t.maxTranslate())return void(t.slides.lengtht.minTranslate())i.freeModeMomentumBounce?(w-t.minTranslate()>E&&(w=t.minTranslate()+E),y=t.minTranslate(),T=!0,a.allowMomentumBounce=!0):w=t.minTranslate(),i.loop&&i.centeredSlides&&(x=!0);else if(i.freeModeSticky){for(var S,C=0;C-w){S=C;break}w=-(w=Math.abs(l[S]-w)=i.longSwipesMs)&&(t.updateProgress(),t.updateActiveIndex(),t.updateSlidesClasses())}else{for(var M=0,z=t.slidesSizesGrid[0],P=0;P=o[P]&&p=o[P]&&(M=P,z=o[o.length-1]-o[o.length-2]);var k=(p-o[M])/z;if(u>i.longSwipesMs){if(!i.longSwipes)return void t.slideTo(t.activeIndex);"next"===t.swipeDirection&&(k>=i.longSwipesRatio?t.slideTo(M+i.slidesPerGroup):t.slideTo(M)),"prev"===t.swipeDirection&&(k>1-i.longSwipesRatio?t.slideTo(M+i.slidesPerGroup):t.slideTo(M))}else{if(!i.shortSwipes)return void t.slideTo(t.activeIndex);"next"===t.swipeDirection&&t.slideTo(M+i.slidesPerGroup),"prev"===t.swipeDirection&&t.slideTo(M)}}}.bind(e),e.onClick=function(e){this.allowClick||(this.params.preventClicks&&e.preventDefault(),this.params.preventClicksPropagation&&this.animating&&(e.stopPropagation(),e.stopImmediatePropagation()))}.bind(e);var r="container"===t.touchEventsTarget?i:s,n=!!t.nested;if(te.touch||!te.pointerEvents&&!te.prefixedPointerEvents){if(te.touch){var o=!("touchstart"!==a.start||!te.passiveListener||!t.passiveListeners)&&{passive:!0,capture:!1};r.addEventListener(a.start,e.onTouchStart,o),r.addEventListener(a.move,e.onTouchMove,te.passiveListener?{passive:!1,capture:n}:n),r.addEventListener(a.end,e.onTouchEnd,o)}(t.simulateTouch&&!g.ios&&!g.android||t.simulateTouch&&!te.touch&&g.ios)&&(r.addEventListener("mousedown",e.onTouchStart,!1),f.addEventListener("mousemove",e.onTouchMove,n),f.addEventListener("mouseup",e.onTouchEnd,!1))}else r.addEventListener(a.start,e.onTouchStart,!1),f.addEventListener(a.move,e.onTouchMove,n),f.addEventListener(a.end,e.onTouchEnd,!1);(t.preventClicks||t.preventClicksPropagation)&&r.addEventListener("click",e.onClick,!0),e.on(g.ios||g.android?"resize orientationchange observerUpdate":"resize observerUpdate",b,!0)},detachEvents:function(){var e=this,t=e.params,a=e.touchEvents,i=e.el,s=e.wrapperEl,r="container"===t.touchEventsTarget?i:s,n=!!t.nested;if(te.touch||!te.pointerEvents&&!te.prefixedPointerEvents){if(te.touch){var o=!("onTouchStart"!==a.start||!te.passiveListener||!t.passiveListeners)&&{passive:!0,capture:!1};r.removeEventListener(a.start,e.onTouchStart,o),r.removeEventListener(a.move,e.onTouchMove,n),r.removeEventListener(a.end,e.onTouchEnd,o)}(t.simulateTouch&&!g.ios&&!g.android||t.simulateTouch&&!te.touch&&g.ios)&&(r.removeEventListener("mousedown",e.onTouchStart,!1),f.removeEventListener("mousemove",e.onTouchMove,n),f.removeEventListener("mouseup",e.onTouchEnd,!1))}else r.removeEventListener(a.start,e.onTouchStart,!1),f.removeEventListener(a.move,e.onTouchMove,n),f.removeEventListener(a.end,e.onTouchEnd,!1);(t.preventClicks||t.preventClicksPropagation)&&r.removeEventListener("click",e.onClick,!0),e.off(g.ios||g.android?"resize orientationchange observerUpdate":"resize observerUpdate",b)}},breakpoints:{setBreakpoint:function(){var e=this,t=e.activeIndex,a=e.initialized,i=e.loopedSlides;void 0===i&&(i=0);var s=e.params,r=s.breakpoints;if(r&&(!r||0!==Object.keys(r).length)){var n=e.getBreakpoint(r);if(n&&e.currentBreakpoint!==n){var o=n in r?r[n]:void 0;o&&["slidesPerView","spaceBetween","slidesPerGroup"].forEach(function(e){var t=o[e];void 0!==t&&(o[e]="slidesPerView"!==e||"AUTO"!==t&&"auto"!==t?"slidesPerView"===e?parseFloat(t):parseInt(t,10):"auto")});var l=o||e.originalParams,d=l.direction&&l.direction!==s.direction,p=s.loop&&(l.slidesPerView!==s.slidesPerView||d);d&&a&&e.changeDirection(),ee.extend(e.params,l),ee.extend(e,{allowTouchMove:e.params.allowTouchMove,allowSlideNext:e.params.allowSlideNext,allowSlidePrev:e.params.allowSlidePrev}),e.currentBreakpoint=n,p&&a&&(e.loopDestroy(),e.loopCreate(),e.updateSlides(),e.slideTo(t-i+e.loopedSlides,0,!1)),e.emit("breakpoint",l)}}},getBreakpoint:function(e){if(e){var t=!1,a=[];Object.keys(e).forEach(function(e){a.push(e)}),a.sort(function(e,t){return parseInt(e,10)-parseInt(t,10)});for(var i=0;i=J.innerWidth&&!t&&(t=s)}return t||"max"}}},checkOverflow:{checkOverflow:function(){var e=this,t=e.isLocked;e.isLocked=1===e.snapGrid.length,e.allowSlideNext=!e.isLocked,e.allowSlidePrev=!e.isLocked,t!==e.isLocked&&e.emit(e.isLocked?"lock":"unlock"),t&&t!==e.isLocked&&(e.isEnd=!1,e.navigation.update())}},classes:{addClasses:function(){var t=this.classNames,a=this.params,e=this.rtl,i=this.$el,s=[];s.push("initialized"),s.push(a.direction),a.freeMode&&s.push("free-mode"),te.flexbox||s.push("no-flexbox"),a.autoHeight&&s.push("autoheight"),e&&s.push("rtl"),1'+e+"
    ");return s.attr("data-swiper-slide-index")||s.attr("data-swiper-slide-index",t),i.cache&&(a.virtual.cache[t]=s),s},appendSlide:function(e){if("object"==typeof e&&"length"in e)for(var t=0;tMath.abs(n.pixelY)))return!0;s=n.pixelX*r}else{if(!(Math.abs(n.pixelY)>Math.abs(n.pixelX)))return!0;s=n.pixelY}else s=Math.abs(n.pixelX)>Math.abs(n.pixelY)?-n.pixelX*r:-n.pixelY;if(0===s)return!0;if(i.invert&&(s=-s),a.params.freeMode){a.params.loop&&a.loopFix();var o=a.getTranslate()+s*i.sensitivity,l=a.isBeginning,d=a.isEnd;if(o>=a.minTranslate()&&(o=a.minTranslate()),o<=a.maxTranslate()&&(o=a.maxTranslate()),a.setTransition(0),a.setTranslate(o),a.updateProgress(),a.updateActiveIndex(),a.updateSlidesClasses(),(!l&&a.isBeginning||!d&&a.isEnd)&&a.updateSlidesClasses(),a.params.freeModeSticky&&(clearTimeout(a.mousewheel.timeout),a.mousewheel.timeout=ee.nextTick(function(){a.slideToClosest()},300)),a.emit("scroll",t),a.params.autoplay&&a.params.autoplayDisableOnInteraction&&a.autoplay.stop(),o===a.minTranslate()||o===a.maxTranslate())return!0}else{if(60a-1-2*e.loopedSlides&&(r-=a-2*e.loopedSlides),n-1s.dynamicMainBullets-1?e.pagination.dynamicBulletIndex=s.dynamicMainBullets-1:e.pagination.dynamicBulletIndex<0&&(e.pagination.dynamicBulletIndex=0)),o=r-e.pagination.dynamicBulletIndex,d=((l=o+(Math.min(p.length,s.dynamicMainBullets)-1))+o)/2),p.removeClass(s.bulletActiveClass+" "+s.bulletActiveClass+"-next "+s.bulletActiveClass+"-next-next "+s.bulletActiveClass+"-prev "+s.bulletActiveClass+"-prev-prev "+s.bulletActiveClass+"-main"),1";i.html(s),e.pagination.bullets=i.find("."+t.bulletClass)}"fraction"===t.type&&(s=t.renderFraction?t.renderFraction.call(e,t.currentClass,t.totalClass):' / ',i.html(s)),"progressbar"===t.type&&(s=t.renderProgressbar?t.renderProgressbar.call(e,t.progressbarFillClass):'',i.html(s)),"custom"!==t.type&&e.emit("paginationRender",e.pagination.$el[0])}},init:function(){var a=this,e=a.params.pagination;if(e.el){var t=L(e.el);0!==t.length&&(a.params.uniqueNavElements&&"string"==typeof e.el&&1
    '),s.append(r)),ee.extend(t,{$el:s,el:s[0],$dragEl:r,dragEl:r[0]}),i.draggable&&t.enableDraggable()}},destroy:function(){this.scrollbar.disableDraggable()}},B={setTransform:function(e,t){var a=this.rtl,i=L(e),s=a?-1:1,r=i.attr("data-swiper-parallax")||"0",n=i.attr("data-swiper-parallax-x"),o=i.attr("data-swiper-parallax-y"),l=i.attr("data-swiper-parallax-scale"),d=i.attr("data-swiper-parallax-opacity");if(n||o?(n=n||"0",o=o||"0"):this.isHorizontal()?(n=r,o="0"):(o=r,n="0"),n=0<=n.indexOf("%")?parseInt(n,10)*t*s+"%":n*t*s+"px",o=0<=o.indexOf("%")?parseInt(o,10)*t+"%":o*t+"px",null!=d){var p=d-(d-1)*(1-Math.abs(t));i[0].style.opacity=p}if(null==l)i.transform("translate3d("+n+", "+o+", 0px)");else{var c=l-(l-1)*(1-Math.abs(t));i.transform("translate3d("+n+", "+o+", 0px) scale("+c+")")}},setTranslate:function(){var i=this,e=i.$el,t=i.slides,s=i.progress,r=i.snapGrid;e.children("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y]").each(function(e,t){i.parallax.setTransform(t,s)}),t.each(function(e,t){var a=t.progress;1i.maxRatio&&(a.scale=i.maxRatio-1+Math.pow(a.scale-i.maxRatio+1,.5)),a.scales.touchesStart.x))return void(s.isTouched=!1);if(!t.isHorizontal()&&(Math.floor(s.minY)===Math.floor(s.startY)&&s.touchesCurrent.ys.touchesStart.y))return void(s.isTouched=!1)}e.preventDefault(),e.stopPropagation(),s.isMoved=!0,s.currentX=s.touchesCurrent.x-s.touchesStart.x+s.startX,s.currentY=s.touchesCurrent.y-s.touchesStart.y+s.startY,s.currentXs.maxX&&(s.currentX=s.maxX-1+Math.pow(s.currentX-s.maxX+1,.8)),s.currentYs.maxY&&(s.currentY=s.maxY-1+Math.pow(s.currentY-s.maxY+1,.8)),r.prevPositionX||(r.prevPositionX=s.touchesCurrent.x),r.prevPositionY||(r.prevPositionY=s.touchesCurrent.y),r.prevTime||(r.prevTime=Date.now()),r.x=(s.touchesCurrent.x-r.prevPositionX)/(Date.now()-r.prevTime)/2,r.y=(s.touchesCurrent.y-r.prevPositionY)/(Date.now()-r.prevTime)/2,Math.abs(s.touchesCurrent.x-r.prevPositionX)<2&&(r.x=0),Math.abs(s.touchesCurrent.y-r.prevPositionY)<2&&(r.y=0),r.prevPositionX=s.touchesCurrent.x,r.prevPositionY=s.touchesCurrent.y,r.prevTime=Date.now(),i.$imageWrapEl.transform("translate3d("+s.currentX+"px, "+s.currentY+"px,0)")}}},onTouchEnd:function(){var e=this.zoom,t=e.gesture,a=e.image,i=e.velocity;if(t.$imageEl&&0!==t.$imageEl.length){if(!a.isTouched||!a.isMoved)return a.isTouched=!1,void(a.isMoved=!1);a.isTouched=!1,a.isMoved=!1;var s=300,r=300,n=i.x*s,o=a.currentX+n,l=i.y*r,d=a.currentY+l;0!==i.x&&(s=Math.abs((o-a.currentX)/i.x)),0!==i.y&&(r=Math.abs((d-a.currentY)/i.y));var p=Math.max(s,r);a.currentX=o,a.currentY=d;var c=a.width*e.scale,u=a.height*e.scale;a.minX=Math.min(t.slideWidth/2-c/2,0),a.maxX=-a.minX,a.minY=Math.min(t.slideHeight/2-u/2,0),a.maxY=-a.minY,a.currentX=Math.max(Math.min(a.currentX,a.maxX),a.minX),a.currentY=Math.max(Math.min(a.currentY,a.maxY),a.minY),t.$imageWrapEl.transition(p).transform("translate3d("+a.currentX+"px, "+a.currentY+"px,0)")}},onTransitionEnd:function(){var e=this.zoom,t=e.gesture;t.$slideEl&&this.previousIndex!==this.activeIndex&&(t.$imageEl.transform("translate3d(0,0,0) scale(1)"),t.$imageWrapEl.transform("translate3d(0,0,0)"),e.scale=1,e.currentScale=1,t.$slideEl=void 0,t.$imageEl=void 0,t.$imageWrapEl=void 0)},toggle:function(e){var t=this.zoom;t.scale&&1!==t.scale?t.out():t.in(e)},in:function(e){var t,a,i,s,r,n,o,l,d,p,c,u,h,v,f,m,g=this,b=g.zoom,w=g.params.zoom,y=b.gesture,x=b.image;(y.$slideEl||(y.$slideEl=g.clickedSlide?L(g.clickedSlide):g.slides.eq(g.activeIndex),y.$imageEl=y.$slideEl.find("img, svg, canvas"),y.$imageWrapEl=y.$imageEl.parent("."+w.containerClass)),y.$imageEl&&0!==y.$imageEl.length)&&(y.$slideEl.addClass(""+w.zoomedSlideClass),void 0===x.touchesStart.x&&e?(t="touchend"===e.type?e.changedTouches[0].pageX:e.pageX,a="touchend"===e.type?e.changedTouches[0].pageY:e.pageY):(t=x.touchesStart.x,a=x.touchesStart.y),b.scale=y.$imageWrapEl.attr("data-swiper-zoom")||w.maxRatio,b.currentScale=y.$imageWrapEl.attr("data-swiper-zoom")||w.maxRatio,e?(f=y.$slideEl[0].offsetWidth,m=y.$slideEl[0].offsetHeight,i=y.$slideEl.offset().left+f/2-t,s=y.$slideEl.offset().top+m/2-a,o=y.$imageEl[0].offsetWidth,l=y.$imageEl[0].offsetHeight,d=o*b.scale,p=l*b.scale,h=-(c=Math.min(f/2-d/2,0)),v=-(u=Math.min(m/2-p/2,0)),(r=i*b.scale)>1]<=t?i=s:a=s;return a};return this.x=e,this.y=t,this.lastIndex=e.length-1,this.interpolate=function(e){return e?(n=o(this.x,e),r=n-1,(e-this.x[r])*(this.y[n]-this.y[r])/(this.x[n]-this.x[r])+this.y[r]):0},this},getInterpolateFunction:function(e){var t=this;t.controller.spline||(t.controller.spline=t.params.loop?new V.LinearSpline(t.slidesGrid,e.slidesGrid):new V.LinearSpline(t.snapGrid,e.snapGrid))},setTranslate:function(e,t){var a,i,s=this,r=s.controller.control;function n(e){var t=s.rtlTranslate?-s.translate:s.translate;"slide"===s.params.controller.by&&(s.controller.getInterpolateFunction(e),i=-s.controller.spline.interpolate(-t)),i&&"container"!==s.params.controller.by||(a=(e.maxTranslate()-e.minTranslate())/(s.maxTranslate()-s.minTranslate()),i=(t-s.minTranslate())*a+e.minTranslate()),s.params.controller.inverse&&(i=e.maxTranslate()-i),e.updateProgress(i),e.setTranslate(i,s),e.updateActiveIndex(),e.updateSlidesClasses()}if(Array.isArray(r))for(var o=0;o
    '),i.append(e)),e.css({height:r+"px"})):0===(e=a.find(".swiper-cube-shadow")).length&&(e=L('
    '),a.append(e)));for(var h=0;h
    '),v.append(E)),0===S.length&&(S=L('
    '),v.append(S)),E.length&&(E[0].style.opacity=Math.max(-b,0)),S.length&&(S[0].style.opacity=Math.max(b,0))}}if(i.css({"-webkit-transform-origin":"50% 50% -"+l/2+"px","-moz-transform-origin":"50% 50% -"+l/2+"px","-ms-transform-origin":"50% 50% -"+l/2+"px","transform-origin":"50% 50% -"+l/2+"px"}),d.shadow)if(p)e.transform("translate3d(0px, "+(r/2+d.shadowOffset)+"px, "+-r/2+"px) rotateX(90deg) rotateZ(0deg) scale("+d.shadowScale+")");else{var C=Math.abs(u)-90*Math.floor(Math.abs(u)/90),M=1.5-(Math.sin(2*C*Math.PI/360)/2+Math.cos(2*C*Math.PI/360)/2),z=d.shadowScale,P=d.shadowScale/M,k=d.shadowOffset;e.transform("scale3d("+z+", 1, "+P+") translate3d(0px, "+(n/2+k)+"px, "+-n/2/P+"px) rotateX(-90deg)")}var $=I.isSafari||I.isUiWebView?-l/2:0;i.transform("translate3d(0px,0,"+$+"px) rotateX("+(t.isHorizontal()?0:u)+"deg) rotateY("+(t.isHorizontal()?-u:0)+"deg)")},setTransition:function(e){var t=this.$el;this.slides.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e),this.params.cubeEffect.shadow&&!this.isHorizontal()&&t.find(".swiper-cube-shadow").transition(e)}},K={setTranslate:function(){for(var e=this,t=e.slides,a=e.rtlTranslate,i=0;i
    '),s.append(p)),0===c.length&&(c=L('
    '),s.append(c)),p.length&&(p[0].style.opacity=Math.max(-r,0)),c.length&&(c[0].style.opacity=Math.max(r,0))}s.transform("translate3d("+l+"px, "+d+"px, 0px) rotateX("+o+"deg) rotateY("+n+"deg)")}},setTransition:function(e){var a=this,t=a.slides,i=a.activeIndex,s=a.$wrapperEl;if(t.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e),a.params.virtualTranslate&&0!==e){var r=!1;t.eq(i).transitionEnd(function(){if(!r&&a&&!a.destroyed){r=!0,a.animating=!1;for(var e=["webkitTransitionEnd","transitionend"],t=0;t
    '),v.append(E)),0===S.length&&(S=L('
    '),v.append(S)),E.length&&(E[0].style.opacity=0')}}),Object.keys(F).forEach(function(e){t.a11y[e]=F[e].bind(t)})},on:{init:function(){this.params.a11y.enabled&&(this.a11y.init(),this.a11y.updateNavigation())},toEdge:function(){this.params.a11y.enabled&&this.a11y.updateNavigation()},fromEdge:function(){this.params.a11y.enabled&&this.a11y.updateNavigation()},paginationUpdate:function(){this.params.a11y.enabled&&this.a11y.updatePagination()},destroy:function(){this.params.a11y.enabled&&this.a11y.destroy()}}},{name:"history",params:{history:{enabled:!1,replaceState:!1,key:"slides"}},create:function(){var e=this;ee.extend(e,{history:{init:R.init.bind(e),setHistory:R.setHistory.bind(e),setHistoryPopState:R.setHistoryPopState.bind(e),scrollToSlide:R.scrollToSlide.bind(e),destroy:R.destroy.bind(e)}})},on:{init:function(){this.params.history.enabled&&this.history.init()},destroy:function(){this.params.history.enabled&&this.history.destroy()},transitionEnd:function(){this.history.initialized&&this.history.setHistory(this.params.history.key,this.activeIndex)}}},{name:"hash-navigation",params:{hashNavigation:{enabled:!1,replaceState:!1,watchState:!1}},create:function(){var e=this;ee.extend(e,{hashNavigation:{initialized:!1,init:q.init.bind(e),destroy:q.destroy.bind(e),setHash:q.setHash.bind(e),onHashCange:q.onHashCange.bind(e)}})},on:{init:function(){this.params.hashNavigation.enabled&&this.hashNavigation.init()},destroy:function(){this.params.hashNavigation.enabled&&this.hashNavigation.destroy()},transitionEnd:function(){this.hashNavigation.initialized&&this.hashNavigation.setHash()}}},{name:"autoplay",params:{autoplay:{enabled:!1,delay:3e3,waitForTransition:!0,disableOnInteraction:!0,stopOnLastSlide:!1,reverseDirection:!1}},create:function(){var t=this;ee.extend(t,{autoplay:{running:!1,paused:!1,run:W.run.bind(t),start:W.start.bind(t),stop:W.stop.bind(t),pause:W.pause.bind(t),onTransitionEnd:function(e){t&&!t.destroyed&&t.$wrapperEl&&e.target===this&&(t.$wrapperEl[0].removeEventListener("transitionend",t.autoplay.onTransitionEnd),t.$wrapperEl[0].removeEventListener("webkitTransitionEnd",t.autoplay.onTransitionEnd),t.autoplay.paused=!1,t.autoplay.running?t.autoplay.run():t.autoplay.stop())}}})},on:{init:function(){this.params.autoplay.enabled&&this.autoplay.start()},beforeTransitionStart:function(e,t){this.autoplay.running&&(t||!this.params.autoplay.disableOnInteraction?this.autoplay.pause(e):this.autoplay.stop())},sliderFirstMove:function(){this.autoplay.running&&(this.params.autoplay.disableOnInteraction?this.autoplay.stop():this.autoplay.pause())},destroy:function(){this.autoplay.running&&this.autoplay.stop()}}},{name:"effect-fade",params:{fadeEffect:{crossFade:!1}},create:function(){ee.extend(this,{fadeEffect:{setTranslate:j.setTranslate.bind(this),setTransition:j.setTransition.bind(this)}})},on:{beforeInit:function(){var e=this;if("fade"===e.params.effect){e.classNames.push(e.params.containerModifierClass+"fade");var t={slidesPerView:1,slidesPerColumn:1,slidesPerGroup:1,watchSlidesProgress:!0,spaceBetween:0,virtualTranslate:!0};ee.extend(e.params,t),ee.extend(e.originalParams,t)}},setTranslate:function(){"fade"===this.params.effect&&this.fadeEffect.setTranslate()},setTransition:function(e){"fade"===this.params.effect&&this.fadeEffect.setTransition(e)}}},{name:"effect-cube",params:{cubeEffect:{slideShadows:!0,shadow:!0,shadowOffset:20,shadowScale:.94}},create:function(){ee.extend(this,{cubeEffect:{setTranslate:U.setTranslate.bind(this),setTransition:U.setTransition.bind(this)}})},on:{beforeInit:function(){var e=this;if("cube"===e.params.effect){e.classNames.push(e.params.containerModifierClass+"cube"),e.classNames.push(e.params.containerModifierClass+"3d");var t={slidesPerView:1,slidesPerColumn:1,slidesPerGroup:1,watchSlidesProgress:!0,resistanceRatio:0,spaceBetween:0,centeredSlides:!1,virtualTranslate:!0};ee.extend(e.params,t),ee.extend(e.originalParams,t)}},setTranslate:function(){"cube"===this.params.effect&&this.cubeEffect.setTranslate()},setTransition:function(e){"cube"===this.params.effect&&this.cubeEffect.setTransition(e)}}},{name:"effect-flip",params:{flipEffect:{slideShadows:!0,limitRotation:!0}},create:function(){ee.extend(this,{flipEffect:{setTranslate:K.setTranslate.bind(this),setTransition:K.setTransition.bind(this)}})},on:{beforeInit:function(){var e=this;if("flip"===e.params.effect){e.classNames.push(e.params.containerModifierClass+"flip"),e.classNames.push(e.params.containerModifierClass+"3d");var t={slidesPerView:1,slidesPerColumn:1,slidesPerGroup:1,watchSlidesProgress:!0,spaceBetween:0,virtualTranslate:!0};ee.extend(e.params,t),ee.extend(e.originalParams,t)}},setTranslate:function(){"flip"===this.params.effect&&this.flipEffect.setTranslate()},setTransition:function(e){"flip"===this.params.effect&&this.flipEffect.setTransition(e)}}},{name:"effect-coverflow",params:{coverflowEffect:{rotate:50,stretch:0,depth:100,modifier:1,slideShadows:!0}},create:function(){ee.extend(this,{coverflowEffect:{setTranslate:_.setTranslate.bind(this),setTransition:_.setTransition.bind(this)}})},on:{beforeInit:function(){var e=this;"coverflow"===e.params.effect&&(e.classNames.push(e.params.containerModifierClass+"coverflow"),e.classNames.push(e.params.containerModifierClass+"3d"),e.params.watchSlidesProgress=!0,e.originalParams.watchSlidesProgress=!0)},setTranslate:function(){"coverflow"===this.params.effect&&this.coverflowEffect.setTranslate()},setTransition:function(e){"coverflow"===this.params.effect&&this.coverflowEffect.setTransition(e)}}},{name:"thumbs",params:{thumbs:{swiper:null,slideThumbActiveClass:"swiper-slide-thumb-active",thumbsContainerClass:"swiper-container-thumbs"}},create:function(){ee.extend(this,{thumbs:{swiper:null,init:Z.init.bind(this),update:Z.update.bind(this),onThumbClick:Z.onThumbClick.bind(this)}})},on:{beforeInit:function(){var e=this.params.thumbs;e&&e.swiper&&(this.thumbs.init(),this.thumbs.update(!0))},slideChange:function(){this.thumbs.swiper&&this.thumbs.update()},update:function(){this.thumbs.swiper&&this.thumbs.update()},resize:function(){this.thumbs.swiper&&this.thumbs.update()},observerUpdate:function(){this.thumbs.swiper&&this.thumbs.update()},setTransition:function(e){var t=this.thumbs.swiper;t&&t.setTransition(e)},beforeDestroy:function(){var e=this.thumbs.swiper;e&&this.thumbs.swiperCreated&&e&&e.destroy()}}}];return void 0===T.use&&(T.use=T.Class.use,T.installModule=T.Class.installModule),T.use(Q),T}); +//# sourceMappingURL=swiper.min.js.map diff --git a/core/vendor/tinymce/init.js b/core/vendor/tinymce/init.js index 07788c92..a64611f5 100755 --- a/core/vendor/tinymce/init.js +++ b/core/vendor/tinymce/init.js @@ -34,8 +34,8 @@ tinymce.init({ // Target pour lightbox rel_list: [ {title: 'None', value: ''}, - {title: 'Popup Lity', value: 'data-lity'}, - {title: 'Diaporama SimpleLightbox', value: 'gallery'} + {title: 'Popup intégrée (Lity)', value: 'data-lity'}, + {title: 'Diaporama d\'images (SimpleLightbox)', value: 'gallery'} ], // Titre des image image_title: true, @@ -155,6 +155,11 @@ tinymce.init({ title: "Grille asymétrique : 10 - 2", url: baseUrl + "core/vendor/tinymce/templates/col10-2.html", description: "Grille adaptative sur 12 colonnes, sur mobile elles passent les unes en dessous des autres." + }, + { + title: "Exemple Swiper", + url: baseUrl + "core/vendor/tinymce/templates/swiper.html", + description: "Exemple Swiper." } ] }); diff --git a/core/vendor/tinymce/link_list.json b/core/vendor/tinymce/link_list.json index 3a36bfa3..5f706e0b 100644 --- a/core/vendor/tinymce/link_list.json +++ b/core/vendor/tinymce/link_list.json @@ -1 +1 @@ -[{"title":"Accueil","value":"?accueil","menu":[{"title":"Enfant","value":"?enfant"},{"title":"Mise en page","value":"?mise-en-page"}]},{"title":"Blog","value":"?blog"},{"title":"Galeries","value":"?galeries"},{"title":"Site de Zwii","value":"?site-de-zwii"},{"title":"Contact","value":"?contact"}] \ No newline at end of file +[{"title":"Accueil","value":"?accueil","menu":[{"title":"Enfant","value":"?enfant"},{"title":"Mise en page","value":"?mise-en-page"},{"title":"Menu lat\u00e9ral","value":"?menu-lateral"}]},{"title":"Priv\u00e9e","value":"?privee"},{"title":"Blog","value":"?blog"},{"title":"Galeries","value":"?galeries"},{"title":"Site de Zwii","value":"?site-de-zwii"},{"title":"Contact","value":"?contact"}] diff --git a/core/vendor/tinymce/templates/swiper.html b/core/vendor/tinymce/templates/swiper.html new file mode 100644 index 00000000..f824264d --- /dev/null +++ b/core/vendor/tinymce/templates/swiper.html @@ -0,0 +1,19 @@ +

    Pour éditer ce slide d'images, basculez l'affichage en mode code source puis remplacez les noms des images par les vôtres en respectant les chemins d'accès.

    +
    +
    +
    +
    Le cosmos
    +
    +
    +
    Une nébuleuse
    +
    + +
    +
    +
    +
    \ No newline at end of file diff --git a/core/vendor/zwiico/css/animation.css b/core/vendor/zwiico/css/animation.css new file mode 100644 index 00000000..ac5a9562 --- /dev/null +++ b/core/vendor/zwiico/css/animation.css @@ -0,0 +1,85 @@ +/* + Animation example, for spinners +*/ +.animate-spin { + -moz-animation: spin 2s infinite linear; + -o-animation: spin 2s infinite linear; + -webkit-animation: spin 2s infinite linear; + animation: spin 2s infinite linear; + display: inline-block; +} +@-moz-keyframes spin { + 0% { + -moz-transform: rotate(0deg); + -o-transform: rotate(0deg); + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + + 100% { + -moz-transform: rotate(359deg); + -o-transform: rotate(359deg); + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +@-webkit-keyframes spin { + 0% { + -moz-transform: rotate(0deg); + -o-transform: rotate(0deg); + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + + 100% { + -moz-transform: rotate(359deg); + -o-transform: rotate(359deg); + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +@-o-keyframes spin { + 0% { + -moz-transform: rotate(0deg); + -o-transform: rotate(0deg); + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + + 100% { + -moz-transform: rotate(359deg); + -o-transform: rotate(359deg); + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +@-ms-keyframes spin { + 0% { + -moz-transform: rotate(0deg); + -o-transform: rotate(0deg); + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + + 100% { + -moz-transform: rotate(359deg); + -o-transform: rotate(359deg); + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +@keyframes spin { + 0% { + -moz-transform: rotate(0deg); + -o-transform: rotate(0deg); + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + + 100% { + -moz-transform: rotate(359deg); + -o-transform: rotate(359deg); + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} diff --git a/core/vendor/zwiico/css/zwiico-codes.css b/core/vendor/zwiico/css/zwiico-codes.css new file mode 100644 index 00000000..d997e91a --- /dev/null +++ b/core/vendor/zwiico/css/zwiico-codes.css @@ -0,0 +1,43 @@ + +.zwiico-logout:before { content: '\e800'; } /* '' */ +.zwiico-check:before { content: '\e801'; } /* '' */ +.zwiico-cancel:before { content: '\e802'; } /* '' */ +.zwiico-plus:before { content: '\e803'; } /* '' */ +.zwiico-minus:before { content: '\e804'; } /* '' */ +.zwiico-help:before { content: '\e805'; } /* '' */ +.zwiico-pencil:before { content: '\e806'; } /* '' */ +.zwiico-gear:before { content: '\e807'; } /* '' */ +.zwiico-eye:before { content: '\e808'; } /* '' */ +.zwiico-up:before { content: '\e809'; } /* '' */ +.zwiico-folder:before { content: '\e80a'; } /* '' */ +.zwiico-download:before { content: '\e80b'; } /* '' */ +.zwiico-left:before { content: '\e80c'; } /* '' */ +.zwiico-users:before { content: '\e80d'; } /* '' */ +.zwiico-user:before { content: '\e80e'; } /* '' */ +.zwiico-comment:before { content: '\e80f'; } /* '' */ +.zwiico-home:before { content: '\e810'; } /* '' */ +.zwiico-mimi:before { content: '\e811'; } /* '' */ +.zwiico-down:before { content: '\e812'; } /* '' */ +.zwiico-lock:before { content: '\e813'; } /* '' */ +.zwiico-chat:before { content: '\e814'; } /* '' */ +.zwiico-eye-off:before { content: '\e815'; } /* '' */ +.zwiico-update:before { content: '\e816'; } /* '' */ +.zwiico-upload:before { content: '\e817'; } /* '' */ +.zwiico-down-open:before { content: '\e818'; } /* '' */ +.zwiico-left-open:before { content: '\e819'; } /* '' */ +.zwiico-cogs:before { content: '\e81a'; } /* '' */ +.zwiico-cog-alt:before { content: '\e81b'; } /* '' */ +.zwiico-trash:before { content: '\e81c'; } /* '' */ +.zwiico-spin:before { content: '\e831'; } /* '' */ +.zwiico-twitter:before { content: '\f099'; } /* '' */ +.zwiico-facebook:before { content: '\f09a'; } /* '' */ +.zwiico-menu:before { content: '\f0c9'; } /* '' */ +.zwiico-sort:before { content: '\f0dc'; } /* '' */ +.zwiico-linkedin:before { content: '\f0e1'; } /* '' */ +.zwiico-download-cloud:before { content: '\f0ed'; } /* '' */ +.zwiico-upload-cloud:before { content: '\f0ee'; } /* '' */ +.zwiico-code:before { content: '\f121'; } /* '' */ +.zwiico-youtube:before { content: '\f167'; } /* '' */ +.zwiico-instagram:before { content: '\f16d'; } /* '' */ +.zwiico-brush:before { content: '\f1fc'; } /* '' */ +.zwiico-pinterest:before { content: '\f231'; } /* '' */ \ No newline at end of file diff --git a/core/vendor/zwiico/css/zwiico-embedded.css b/core/vendor/zwiico/css/zwiico-embedded.css new file mode 100644 index 00000000..65fa727d --- /dev/null +++ b/core/vendor/zwiico/css/zwiico-embedded.css @@ -0,0 +1,96 @@ +@font-face { + font-family: 'zwiico'; + src: url('../font/zwiico.eot?74374674'); + src: url('../font/zwiico.eot?74374674#iefix') format('embedded-opentype'), + url('../font/zwiico.svg?74374674#zwiico') format('svg'); + font-weight: normal; + font-style: normal; +} +@font-face { + font-family: 'zwiico'; + src: url('data:application/octet-stream;base64,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') format('woff'), + url('data:application/octet-stream;base64,AAEAAAAPAIAAAwBwR1NVQiCLJXoAAAD8AAAAVE9TLzI+IFM1AAABUAAAAFZjbWFwRc9GkgAAAagAAAQGY3Z0IAbh/wQAADiAAAAAIGZwZ22KkZBZAAA4oAAAC3BnYXNwAAAAEAAAOHgAAAAIZ2x5Zuw/9gEAAAWwAAAs8mhlYWQVGxDTAAAypAAAADZoaGVhB38DvwAAMtwAAAAkaG10eJOv//EAADMAAAAArGxvY2HHqNKRAAAzrAAAAFhtYXhwAfIMvgAANAQAAAAgbmFtZV3wt2MAADQkAAACtXBvc3TEA5qqAAA23AAAAZxwcmVw5UErvAAARBAAAACGAAEAAAAKADAAPgACREZMVAAObGF0bgAaAAQAAAAAAAAAAQAAAAQAAAAAAAAAAQAAAAFsaWdhAAgAAAABAAAAAQAEAAQAAAABAAgAAQAGAAAAAQAAAAEDbwGQAAUAAAJ6ArwAAACMAnoCvAAAAeAAMQECAAACAAUDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBmRWQAQOgA8jEDUv9qAFoDWACWAAAAAQAAAAAAAAAAAAUAAAADAAAALAAAAAQAAAH+AAEAAAAAAPgAAwABAAAALAADAAoAAAH+AAQAzAAAABoAEAADAAroHOgx8JrwyfDc8OHw7vEh8WfxbfH88jH//wAA6ADoMfCZ8Mnw3PDh8O3xIfFn8W3x/PIx//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAaAFIAUgBUAFQAVABUAFYAVgBWAFYAVgAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqAAABBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAIIAAAAAAAAACoAAOgAAADoAAAAAAEAAOgBAADoAQAAAAIAAOgCAADoAgAAAAMAAOgDAADoAwAAAAQAAOgEAADoBAAAAAUAAOgFAADoBQAAAAYAAOgGAADoBgAAAAcAAOgHAADoBwAAAAgAAOgIAADoCAAAAAkAAOgJAADoCQAAAAoAAOgKAADoCgAAAAsAAOgLAADoCwAAAAwAAOgMAADoDAAAAA0AAOgNAADoDQAAAA4AAOgOAADoDgAAAA8AAOgPAADoDwAAABAAAOgQAADoEAAAABEAAOgRAADoEQAAABIAAOgSAADoEgAAABMAAOgTAADoEwAAABQAAOgUAADoFAAAABUAAOgVAADoFQAAABYAAOgWAADoFgAAABcAAOgXAADoFwAAABgAAOgYAADoGAAAABkAAOgZAADoGQAAABoAAOgaAADoGgAAABsAAOgbAADoGwAAABwAAOgcAADoHAAAAB0AAOgxAADoMQAAAB4AAPCZAADwmQAAAB8AAPCaAADwmgAAACAAAPDJAADwyQAAACEAAPDcAADw3AAAACIAAPDhAADw4QAAACMAAPDtAADw7QAAACQAAPDuAADw7gAAACUAAPEhAADxIQAAACYAAPFnAADxZwAAACcAAPFtAADxbQAAACgAAPH8AADx/AAAACkAAPIxAADyMQAAACoAAAACAAD/+QNrAsMAJwBAAEJAPxQBAgEBRwAGAgUCBgVtAAUDAgUDawAEAwADBABtAAEAAgYBAmAAAwQAA1QAAwMAWAAAAwBMFiMZJSolJwcFGyslFBYPAQ4BByMiJjURNDY7ATIWFRcWDwEOAScjIgYHERQWFzMyHgIBFAcBBiImPQEjIiY9ATQ2NzM1NDYWFwEWAWUCAQIBCAiyQ15eQ7IICgEBAQIBCAiyJTQBNiS0BgIGAgIGC/7RCxwW+g4WFg76FhwLAS8LLgISBQ4JBAFeQwGIQ14KCAsJBg0HCAE0Jv54JTQBBAIIASwOC/7QChQPoRYO1g8UAaEOFgIJ/tAKAAAAAAEAAAAAA6UCmAAVAB1AGg8BAAEBRwACAQJvAAEAAW8AAABmFBcUAwUXKwEUBwEGIicBJjQ/ATYyHwEBNjIfARYDpRD+IBAsEP7qDw9MECwQpAFuECwQTBACFhYQ/iAPDwEWECwQTBAQpQFvEBBMDwABAAD/7wLUAoYAJAAeQBsiGRAHBAACAUcDAQIAAm8BAQAAZhQcFBQEBRgrJRQPAQYiLwEHBiIvASY0PwEnJjQ/ATYyHwE3NjIfARYUDwEXFgLUD0wQLBCkpBAsEEwQEKSkEBBMECwQpKQQLBBMDw+kpA9wFhBMDw+lpQ8PTBAsEKSkECwQTBAQpKQQEEwPLg+kpA8AAQAA//kDEgMLACMAKUAmAAQDBG8AAQABcAUBAwAAA1QFAQMDAFgCAQADAEwjMyUjMyMGBRorARUUBicjFRQGByMiJjc1IyImJzU0NjczNTQ2OwEyFhcVMzIWAxIgFuggFmsWIAHoFx4BIBboHhdrFx4B6BceAbdrFiAB6RYeASAV6R4XaxceAegWICAW6CAAAQAAAAADEgHtAA8AGEAVAAEAAAFUAAEBAFgAAAEATDUzAgUWKwEVFAYnISImJzU0NjchMhYDEiAW/VoXHgEgFgKmFx4Bt2sWIAEeF2sXHgEgAAAAA//9/7EDXwMLAA8ANwBEAEhARSkBBQMJAQIBAAJHAAQCAwIEA20AAwUCAwVrAAcAAgQHAmAABQAAAQUAYAABBgYBVAABAQZYAAYBBkwVHisTFiYmIwgFHCslNTQmKwEiBh0BFBY7ATI2EzQuASMiBwYfARYzMjc+ATIWFRQGBw4BFxUUFjsBMjY0Nj8BPgMXFA4BIi4CPgEyHgEB9AoIawgKCghrCAqPPlwxiEcJDUoEBgkFHiU4KhYbIzwBCghrCAoYEhwKHhQM13LG6MhuBnq89Lp+UmsICgoIawgKCgF/MVQudw0LNwQHJhseEhUaDA9CJRQICgoSIgsQBhocKFJ1xHR0xOrEdHTEAAQAAP+xA00C/wAGABQAGQAkAIZAFx4BAgUdFg4HBAMCGQMCAwADAQEBAARHS7ASUFhAJwAFAgVvAAIDAm8AAwADbwAAAQEAYwYBAQQEAVIGAQEBBFcABAEESxtAJgAFAgVvAAIDAm8AAwADbwAAAQBvBgEBBAQBUgYBAQEEVwAEAQRLWUASAAAhIBgXEA8JCAAGAAYUBwUVKxc3JwcVMxUBNCMiBwEGFRQzMjcBNicXASM1ARQPASc3NjIfARbLMoMzSAFfDAUE/tEEDQUEAS8DHuj+MOgDTRRd6F0UOxaDFAczgzM8RwIGDAT+0gQGDAQBLgRx6P4v6QGaHRVd6VwVFYMWAAAAAAIAAP+xA1oDCwAIAGoARUBCZVlMQQQABDsKAgEANCgbEAQDAQNHAAUEBW8GAQQABG8AAAEAbwABAwFvAAMCA28AAgJmXFtTUUlIKyoiIBMSBwUWKwE0JiIOARYyNiUVFAYPAQYHFhcWFAcOASciLwEGBwYHBisBIiY1JyYnBwYiJyYnJjQ3PgE3Ji8BLgEnNTQ2PwE2NyYnJjQ3PgEzMh8BNjc2NzY7ATIWHwEWFzc2MhcWFxYUBw4BBxYfAR4BAjtSeFICVnRWARwIB2gKCxMoBgUPUA0HB00ZGgkHBBB8CAwQGxdPBhAGRhYEBQgoCg8IZgcIAQoFaAgOFyUGBQ9QDQcITRgaCQgDEXwHDAEPHBdPBQ8HSBQEBAkoCg8IZgcKAV47VFR2VFR4fAcMARAeFRsyBg4GFVABBTwNCEwcEAoHZwkMPAUGQB4FDgYMMg8cGw8BDAd8BwwBEBkaIC0HDAcUUAU8DQhMHBAKB2cJCzsFBUMcBQ4GDDIPHBoQAQwAAAADAAD/+QPoAn0AEQAiADMARkBDCwICBAINAQADAkcABAIDAgQDbQADAAIDAGsAAAECAAFrAAYAAgQGAmAAAQUFAVQAAQEFWAAFAQVMFxYkFBUYFgcFGysBJicWFRQGLgE1NDcGBx4BIDYBNCYHIgYVFBYyNjU0NjMyNgUUBwYEICQnJjQ3NiwBBBcWA6FVgCKS0JIigFVL4AEE4v63EAtGZBAWEEQwCxAB2QtO/vj+2v74TgsLTgEIASYBCE4LATqEQTpDZ5QCkGlDOkGEcoiIAUkLEAFkRQsQEAswRBDMExOBmpqBEyYUgJoCnn4UAAABAAAAAAO2AkYAFAAZQBYFAQACAUcAAgACbwEBAABmFxQSAwUXKyUHBiInCQEGIi8BJjQ3ATYyFwEWFAOrXAseCv7Y/tgLHAtdCwsBngscCwGeC2tcCgoBKf7XCgpcCx4KAZ4KCv5iCxwAAAAC////+QQZAwsAEgApACxAKQADBANvAAECAAIBAG0AAABuAAQCAgRUAAQEAlgAAgQCTCM6IzY1BQUZKwEUDwEOASMhIi4BPwE+ATMhMhYnFSEiBg8CJyY3ETQ2OwEyFh0BITIWBBkSuxhWJv2hExwBEbwYViUCXxMewP4wNXIjvAIBAQFKM7MzSgEvNEgBPxEU3RwoDiIU3RwoDq9aNCndAwcFAgIYM0pKMxJKAAAAAAQAAP/5A6EDUgAIABEAJwA/AERAQTwBBwgJAAICAAJHCQEHCAMIBwNtAAYDBAMGBG0FAQMBAQACAwBgAAQAAgQCXAAICAwIST89JCUWIhIlORgSCgUdKyU0LgEOARY+ATc0LgEOARY+ATcVFAYHISImJzU0NjMhFxYyPwEhMhYDFg8BBiIvASY3NjsBNTQ2NzMyFgcVMzICyhQeFAIYGhiNFCASAhYcGEYgFvzLFx4BIBYBA0shViFMAQMWILYKEvoKHgr6EQkKF48WDo8OFgGPGGQPFAIYGhgCFA8PFAIYGhgCFIyzFh4BIBWzFiBMICBMIAEoFxD6Cwv6EBcV+g8UARYO+gAAAAEAAAAAAWcCfAANABdAFAABAAEBRwABAAFvAAAAZhcTAgUWKwERFAYiLwEmND8BNjIWAWUUIAn6Cgr6CxwYAlj+DA4WC/oLHAv6CxYAAAAABv///2oELwNSABEAMgA7AEQAVgBfAG9AbE8OAgMCAUcACwkICQsIbRABCAIJCAJrDwECAwkCA2sHAQUAAQAFAW0MCgIBBgABBmsABgQABgRrDgEDDQEABQMAYBEBCQkMSAAEBA0ESV5dWllWVFJQS0pJR0NCPz46ORkVFBk3IxMhEBIFHSsBBgcjIiY3NDMyHgE3MjcGFRQBFAYjISImJzQ+BTMyHgI+AT8BNjcyHgQXARQGIiY0NjIWARQGLgE+AhYFFAYnIyYnNjU0JxYzMj4BFzInFAYiJjQ2MhYBS1o6Sy1AAUUEKkIhJiUDAoNSQ/4YRFABBAwQICY6IQYkLkhQRhkpEAgiOCYgEA4B/cZUdlRUdlQBiX6wgAJ8tHoBQz4uSzlaLQMlJSFEKARFR1R2VFR2VAFeA0QsLMUWGgENFRBO/ltCTk5CHjhCODQmFhgcGgIWEBoKAhYmNDhCHAKPO1RUdlRU/u9ZfgJ6tngGhNMrLgFEA0FOEBUNGBgBjztUVHZUVAACAAD/sQLKAwwAFQAeACVAIgAFAQVvAwEBBAFvAAQCBG8AAgACbwAAAGYTFxERFzIGBRorJRQGIyEiJjU0PgMXFjI3Mh4DAxQGIi4BNh4BAspGMf4kMUYKGCo+LUnKSipCJhwIj3y0egSCrIRFPFhYPDBUVjwoAUhIJj5UVgHAWH5+sIACfAAAAQAA/5MD6AMpAAYAHUAaBQEBRAAAAQBvAwICAQFmAAAABgAGEREEBRYrNREhESEFNQPo/if+wGACyf03zc0AAAIAAP/5A5ICxQAQADEALkArLiYlGBUPDg0IAQMMAQABAkcEAQMBA28AAQABbwIBAABmKigjIiERFAUFFysBERQGByM1IxUjIiYnEQkBFjcHBgcjIicJAQYmLwEmNjcBNjIfATU0NjsBMhYdARcWFAMSFg7Wj9YPFAEBQQFBAXwiBQcCBwX+fv5+Bw0FIwQCBQGREjATiAoIawgKegYBKP71DxQB1tYWDgEPAQj++AEkKQUBAwFC/r4EAgUpBg4FAU4PD3FsCAoKCONmBBAAAAADAAD/agONA1IAFwAkAC0ANUAyAAMEAAQDAG0ABQAEAwUEYAYBAgIBWAABAQxIAAAADQBJGRgsKygnHx4YJBkkGxUHBRYrARQHBgcGIicmJyY1NDY3Njc2MhcWFx4BASIOARQeATI+ATQuARcUBiImNDYyFgONPjxnavZrZj0+Rz5BUFe0V09BPkf+OkV1RUV1inVERHUWNUw1NUw1AR53ZWM6Ozs6Y2V3WsdTWDI2NjJYU8cBMkR1inVFRXWKdUT+JjU1TDQ0AAEAAAAAAjwB7QAOABdAFAABAAEBRwABAAFvAAAAZjUUAgUWKwEUDwEGIi8BJjQ2MyEyFgI7CvoLHAv6CxYOAfQOFgHJDgv6Cwv6CxwWFgAAAgAA//kCgwMLAAcAHwAqQCcFAwIAAQIBAAJtAAICbgAEAQEEVAAEBAFYAAEEAUwjEyU2ExAGBRorEyE1NCYOARcFERQGByEiJicRNDYXMzU0NjIWBxUzMhazAR1UdlQBAdAgFv3pFx4BIBYRlMyWAhIXHgGlbDtUAlA9of6+Fh4BIBUBQhYgAWxmlJRmbB4AAgAA/7AD6ALDACUASwA/QDxJHAIAAT8BAwApAQIDA0cKAQMBRjIBAkQAAQABbwAAAwBvAAMCAgNUAAMDAlgAAgMCTEJAPjwjIiMEBRUrARQOASMiJwYHBgcjIiY1JjQ2NT8CNgc3PgI3LgEnND4BMh4BFxQGBx4BHwEWHwMUBw4BJyYnJicGIyInFjMyNjc+ASc0Jx4BAxJqtGswMkZVFRsCBgwBAgEEAwMBHAUODgRFTgFqtNa0atZQRAUMCBsJBAUEAwECCgccFFZGMjCXcCARWqRCRUwBDUhUAaVNhEwJMRcFBAoHAQQEAQMGAwMBHgUYEhAodENOhExMhNxDdicOFgohCwMFBgoBAggKAQQFFzEJSgMyLzSGSisqJ3gABQAA/8MD6AKxAAkAGgA+AEQAVwBXQFQ0GwIABFMGAgIAUkMCAQJQQiknCAEGBgEERwAFBAVvAAIAAQACAW0AAQYAAQZrAAYDAAYDawADA24ABAAABFQABAQAWAAABABMTEsTLhkkFB0HBRorJTcuATc0NwYHFgE0JgciBhUUFjI2NTQ2MzI2NxQVBgIPAQYjIicmNTQ3LgEnJjQ3PgEzMhc3NjMyFh8BFgcWExQGBxMWFxQHBgcOASM3PgE3Jic3HgEXFgE2KzA4ASKAVV4BahALRmQQFhBEMAsQyjvqOxwFCgdECRlQhjILC1b8lzIyHwUKAw4LJAsBCRVYSZ0E+gsWJ1TcfCl3yEVBXSM1YiALaU8jaj1DOkGEkAFnCxABZEULEBALMEQQdQQBaf5aaTIJJwYKByokeE0RKhKDmAo2CQYGFAYBBf79ToAbARgZXhMTJC1gakoKhGlkQD8kYjYTAAACAAD/sQNbAwsAJABHAF1AWkMlAgYJLwEFBhcBAwIIAQEDBEcACQgGCAkGbQcBBQYCBgUCbQQBAgMGAgNrAAEDAAMBAG0ACAAGBQgGYAADAQADVAADAwBYAAADAExGRSYlJTYlJjUUJAoFHSsBFBUOASMiJicHBiImPQE0NjsBMhYGDwEeATcyNjc2NzY7ATIWExUUBisBIiY2PwEmIyIGBwYHBisBIiY3NT4BMzIWFzc2MhYDSyTkmVGYPEgLHBYWDvoOFgIJTShkN0qCJwYYBAxrCAoOFBD6DhYCCU1ScEuCJwYXBQxvBwwBJOaZUZo8SAscGAEFAwGWuj45SAsWDvoOFhYcC00kKgFKPgo4DQwBuPoOFhYcC01NSj4KOA0MBgSWuj45SAsWAAAEAAD/sQOhAy4ACAARACkAQABGQEM1AQcGCQACAgACRwAJBglvCAEGBwZvAAcDB28ABAACBFQFAQMBAQACAwBgAAQEAlgAAgQCTD08IzMjIjIlORgSCgUdKyU0Jg4CHgE2NzQmDgIeATY3FRQGIyEiJic1NDYXMx4BOwEyNjczMhYDBisBFRQGByMiJic1IyImPwE2Mh8BFgLKFB4UAhgaGI0UIBICFhwYRiAW/MsXHgEgFu4MNiOPIjYN7hYgtgkYjxQPjw8UAY8XExH6Ch4K+hIdDhYCEiASBBoMDhYCEiASBBqJsxYgIBazFiABHygoHx4BUhb6DxQBFg76LBH6Cgr6EQAAAAABAAD/5wO2AikAFAAZQBYNAQABAUcCAQEAAW8AAABmFBcSAwUXKwkBBiInASY0PwE2MhcJATYyHwEWFAOr/mIKHgr+YgsLXQoeCgEoASgLHAxcCwGP/mMLCwGdCx4KXAsL/tgBKAsLXAscAAABAAD/wAKYA0QAFAAttQEBAAEBR0uwGVBYQAsAAAEAcAABAQwBSRtACQABAAFvAAAAZlm0FxcCBRYrCQIWFA8BBiInASY0NwE2Mh8BFhQCjv7XASkKCl0LHAv+YgsLAZ4KHgpdCgKq/tj+1woeCl0KCgGfCh4KAZ4LC10KHgAAAAYAAP+2A+gDBgAnADAAWACAAIsAlgC4QLVFDw4HBgUFAFZVU1FMSkkREAUECwMFaGVkY19eVFBPSxUUAQAOAgNpZ10lGAUIAoFtJCIbGQYHBn59e3l0cSMaCAEHBkdgAQJqAQgCRkJBQD89PDs4NzY1CwlFfHh3c3IFAUQACQAJbwAFAAMABQNtAAgCBgIIBm0ABgcCBgdrAAcBAgcBawQBAAADAgADYAACCAECVAACAgFWAAECAUqVk4qIb25bWkdGMzIvLisqHx4aCgUVKz0BNzY3JzcXNj8BMxcWFzcXBxYfARUHBgcXBycGDwEjJyYnByc3Jic3FBY+Ai4BBiU3FzY3JzcXNj8BFwcWFzcXBxYfAQcjBgcXBycGDwEnNSYnByc3JicDNzM2Nyc3FzY/ARcVFhc3FwcWHwEHIwYHFwcnBg8BJzUmJwcnNyYnNwYeAT4BJicjIgYTBh4BPgEmJyMiBl4IDzxEShodCGEKHRpKRDwQB15eBxA8REoaHQphCB0aSkQ8Dwh/NEwyAjZIOAFACEYIDCU2MRQVDkgCFhE5LTEKAkQIRAgOJzgvFhUORhQROy0xCAQlBjEGCBolJA0QCjAQDCkfIwYELwYxBAocKCMNEAoxDQ4pHyMGAkUEGCgcBhoSBhEcEgQkNioEIBwHGiT1YQgeGUpFPRAHXl4HED1FShkeCGEKHRpIRjwPCF5eCA88RkgaHTslNgIyTjAEOMtIAhYROS0xCgRCCEQIDic2MRQXDkYUETstMQgEQgZGCAwlNjEUFf5RMhAMKyElCAIwBTEGChspIw0QDDMPDCshJQgCMQYzBAocKSQNEBkVHgQWLhgGGAGwGyoIJjQsAiIAAAYAAP9yBC8DSQAIABIAGwB6ALYA8QCcQJnu2QIEDmpdAgUI0LxwAwAFvqygdVJMRSMdCQEAs55AAwIBOi0CBgKVgAILAwdH59sCDkWCAQtECgEICQUJCAVtAAYCBwIGB20ADgAECQ4EYAAJCAAJVAAFDQEAAQUAYAACBgECVAwBAQAHAwEHYAADCwsDVAADAwtYAAsDC0zl48fGqqiLim1sZGJaWTQyKyoTFBQUExIPBRorATQmIgYUFjI2BTQmDgEXFBYyNgM0JiIGHgEyNgcVFAYPAQYHFhcWFAcOASIvAQYHBgcGKwEiJjUnJicHBiInJjU0Nz4BNyYvAS4BPQE0Nj8BNjcmJyY0Nz4BMzIfATY3Njc2OwEyFh8BFhc3NjIXFhUUDwEGBxYfAR4BARUUBwYHFhUUBwYjIi8BBiInDgEHIicmNTQ3JicmPQE0NzY3JjU0PwE2MzIWFzcXNj8BMhcWFRQHFhcWERUUBwYHFhUUBwYjIiYnBiInDgEiJyY1NDcmJyY9ATQ3NjcmNTQ/ATYzMhYXNxc2PwEyFxYVFAcWFxYB9FR2VFR2VAGtLDgsASo6LAEsOCwBKjos2AgEVwYMEx8EBAxEEAVAFRYGBwQNaAYKDRMXQgQNBlAEBSQIDQdVBQgIBVYHCxMfBAQMRAoGBkATGAYHAw1oBgoBDRMXQQUNBVEEGBEIDQZVBgYBZlMGChwCRAEFFR0LDAsHLAMBRAMdCgdTUwcKHQM0EAEEKggRERwXBAJDAhwJB1NTBgocAkQBBSoICwwLBywERAMdCgdTUwcKHQM0EAEEKggRERwXBAJDAhwJB1MBXjtUVHZUVOMdLAIoHx0qKgJZHSoqOyoqzWcGCgEOExcbJQYMBBFCBDILBjwbDQgGVQYMMgQESw8FBQgsDBgWDQEIB2gFCgEOExcbJQYMBRBCBDIKCDwaDQgGVQYLMQQESw8EBh4VDRsTDAII/s9OCQgPDj8OAgIoGyUBAQs0ASgCAg4/Dg8ICU4JCRANPw4CAh4JNAwBASgXAScCAg4/DRAJAjNOCQkPDj8OAgInNAwBAQw0JwICDj8ODwkJTgkIEA0/DgICHgk0CwEBJxcBJwICDj8NEAgAAAMAAP+AAvgDQAALAB8AKwGYtQMBAAIBR0uwCVBYQCgABwUEBAdlAAACAQIAAW0GAQQAAgAEAmEABQUDWAADAwxIAAEBDQFJG0uwClBYQCYABwUEBAdlAAACAQIAAW0AAwAFBwMFYAYBBAACAAQCYQABAQ0BSRtLsA5QWEAoAAcFBAQHZQAAAgECAAFtBgEEAAIABAJhAAUFA1gAAwMMSAABAQ0BSRtLsA9QWEAmAAcFBAQHZQAAAgECAAFtAAMABQcDBWAGAQQAAgAEAmEAAQENAUkbS7ATUFhAKAAHBQQEB2UAAAIBAgABbQYBBAACAAQCYQAFBQNYAAMDDEgAAQENAUkbS7AVUFhAKQAHBQQFBwRtAAACAQIAAW0GAQQAAgAEAmEABQUDWAADAwxIAAEBDQFJG0uwF1BYQCcABwUEBQcEbQAAAgECAAFtAAMABQcDBWAGAQQAAgAEAmEAAQENAUkbQC4ABwUEBQcEbQAAAgECAAFtAAEBbgADAAUHAwVgBgEEAgIEUgYBBAQCWQACBAJNWVlZWVlZWUALERIyEjgaFREIBRwrExYgNwMOAiIuAScBHgEdARQGICY9ATQ2PwE2OwEyFwczLgErASIPATM3MzJ6AaB6NgJChpSERAIBsl6A4P7I4IBeKhYwXDQSDFRcGhJmFgpqVEBSAcpGRv4aDiwqKiwOAxISSiIKOlJSOgoiShIwGhqgbiAQfkIAAAAABf/6/2oD6QNYAB8APABaAHgAmABCQD9qAQUDkwEEAgJHKwEARQAAAQBvAAEDAW8AAwUDbwACBQQFAgRtAAUFBFgABAQNBEmRj399dXNnZUpIMC4GBRQrNzEjLgEnJjY3PgEXMhUXHgEHDgEHBhYXFg8BBiYnIjUTMTU2NzY3PgEXFhUHDgEnIwYHDgEHBiIvAS4BNyUxMxYXFhceARcWBgcnIiYnJi8BJicmJyY/AT4BFxMxMDEGBwYHDgEHBiYvAiY2Nz4BNzY3NjMXMhYVATEwMQYjIicuAScmND8BNhYXFhcWFxY3Mh8BFgYHBiMuAQsTBg4RIAIJBAJQBAICBwsDCAwTAwdQBAkDAXgVGR0WQ5hOCiABCAQoGg4zXygDCANPBAEDAk4BGBoQHjhMEAIGBWYEBgECBwUJBjBZBwIfAQkF9gYJDAohaUMECgIBHgEDBBAhDUsaAwhiBQb+Sh4eIhlNjToEBFIECQMUDBYMXmoJAx0CBAUBApAYPB1LmEcEAwIBOwIIBBApFDJnMAgFOAMCBAICPgETEhQLJh8JAgtgBAQBAgIIKyECAjoCCgRCDhIMGjSGTAUHAQEFBAoTDhUKXjgECVwEBQL96B4bIBdGcSYCAgQCXgQIAgobDUlnCAEGBf5yAwQJPzUDCQQ7AgEDEAcOBi8GCFwECAIBAAAAAQAA//cDiALDAC8ATUBKLiwqIAIFBQYZAQQFFhICAwQLAQECBEcABgUGbwAFBAVvAAQDBG8AAwIDbwACAQJvAAEAAAFUAAEBAFgAAAEATCQWFiMRIigHBRsrAQYHFRQOAyciJxYzMjcuAScWMzI3LgE9ARYXLgE0Nx4BFyY1NDY3Mhc2NwYHNgOIJTUqVnioYZd9Exh+YjtcEhMPGBg/UiYsJSwZRMBwBWpKTzU9NhU7NAJuNicXSZCGZEACUQJNAUY2AwYNYkICFQIZTmAqU2QFFRRLaAE5DCBAJAYAAAABAAD/sQIXA1IAFAAtQCoAAQAGAUcAAwIDcAUBAQQBAgMBAl4AAAAGWAAGBgwASSMREREREyEHBRsrARUjIgYdATMHIxEjESM1MzU0NjMyAhdXMCKkFo6rjo50YVIDS5MoKGql/lgBqKV6aHIAAAAAAwAA//kDWgLEAA8AHwAvADdANCgBBAUIAAIAAQJHAAUABAMFBGAAAwACAQMCYAABAAABVAABAQBYAAABAEwmNSY1JjMGBRorJRUUBgchIiYnNTQ2NyEyFgMVFAYnISImJzU0NhchMhYDFRQGIyEiJic1NDYXITIWA1kUEPzvDxQBFg4DEQ8WARQQ/O8PFAEWDgMRDxYBFBD87w8UARYOAxEPFmRHDxQBFg5HDxQBFgEQSA4WARQPSA4WARQBDkcOFhYORw8WARQAAAAAAv///9UCPALnAA4AHQAjQCAAAQABAUcAAwIDbwACAQJvAAEAAW8AAABmFTQmFAQFGCslFA8BBiIvASY0NjchMhYnFAYjISIuAT8BNjIfARYCOwr6CxwL+gsWDgH0DhYBFA/+DA8UAgz6Ch4K+grzDwr6Cwv6Ch4UARbIDhYWHAv6Cwv6CgAAAAMAAP/MA1kC/wADAA4AKgBKQEciAQUBAUcHCQIBCAUIAQVtBgQCAAUAcAADAAIIAwJgAAgBBQhUAAgIBVgABQgFTAAAKSchIBwbFhQREA0MCQYAAwADEQoFFSsTESMRNxQGKwEiJjQ2MhYBESMRNCYjIgYHBhURIzY9ASczFSM+AzcyFsO4xDouAS44Olw4Aou3LjAjLg0GuAEBuAELGCY8Il90AfX91wIpqyk2NlI2Nv5A/sMBKDtCJh0RHP7L34qlG1ASGiAQAX4AAAL////5BDADCwAYADMAQkA/KgEBBjEjBQMAAQJHAAYFAQUGAW0CAQABAwEAA20ABQABAAUBYAADBAQDVAADAwRYAAQDBEwjKDYWFCMiBwUbKwE0JisBNTQmKwEiBh0BIyIGFB8BFjI/ATYFFAYHISImNzQ2Nyc0NjMyFhc2MzIWFRQHHgECygoIfQoHbAcKfQgKBcQFEAXEBQFlfFr9oWeUAU5CAah2V5AhKDU7VBdIXgFMCArECAoKCMQKEAXEBQXEBnZZfAGSaEh8Hhh2qGJQI1Q7KyIRdgAAAAAC////+QQwAwsAGAAzAEVAQioBAAYxIwIBAA0BAgEDRwAGBQAFBgBtAwEBAAIAAQJtAAUAAAEFAGAAAgQEAlQAAgIEWAAEAgRMIyg1FCMlFAcFGysBNC8BJiIPAQYUFjsBFRQWOwEyNj0BMzI2BRQGByEiJjc0NjcnNDYzMhYXNjMyFhUUBx4BAsoFxAUQBcQFCgh9CgdsBwp9CAoBZXxa/aFnlAFOQgGodleQISg1O1QXSF4BcAgFxAUFxAYPCsQICgoIxAqZWXwBkmhIfB4YdqhiUCNUOysiEXYAAwAA/7kEFgK6ABQAJAA5AB5AGy4RAgABAUcDAQEAAW8CAQAAZjU0KCcXEgQFFislBwYiJwEmNDcBNjIfARYUDwEXFhQBAw4BLwEuATcTPgEfAR4BCQEGIi8BJjQ/AScmND8BNjIXARYUAVgcBQ4G/vwGBgEEBRAEHAYG29sGAUTQAg4GIggGAdECDAcjBwgBbP78Bg4GHAUF29sFBRwGDgYBBAVFHAUFAQUFDgYBBAYGHAUQBNzbBg4CTv0vBwgDCQMMCALQCAYBCgIO/o/++wUFHAYOBtvcBQ4GHAYG/vwFEAAACwAA/2oDSgNSAAkADwAXACoAOwBXAF8AeACEAJQApgNUQCSloYR+ewUWFZgBGxYxAQEJBgECAVY+PCAcBQYAEjYqAgcABkdLsAlQWEB0HwEbFh0WGx1tBgEEBQkFBAltEw0LAwkBBQljDwgCBwAMDAdlJCMhAx4AFRYeFWAiARYgAR0ZFh1gABkOAQUEGQVeAwEBAAISAQJeABIRCgIABxIAYBwBGhoMSBQQAgwMF1kAFxcNSBQQAgwMGFkAGBgNGEkbS7AKUFhAgCQjAiEeFR4hFW0fARsWHRYbHW0GAQQFDQUEDW0TAQ0JBQ1jCwEJAQUJYw8IAgcADAwHZQAeABUWHhVgIgEWIAEdGRYdYAAZDgEFBBkFXgMBAQACEgECXgASEQoCAAcSAGAcARoaDEgUEAIMDBdZABcXDUgUEAIMDBhZABgYDRhJG0uwC1BYQGoGAQQFCQUECW0TDQsDCQEFCWMkIyEDHgAVFh4VYCIBFiAfHQMbGRYbYAAZDgEFBBkFXgMBAQACEgECXgASEQoCAAcSAGAcARoaDEgUEA8MCAUHBxdYABcXDUgUEA8MCAUHBxhYABgYDRhJG0uwDlBYQHQfARsWHRYbHW0GAQQFCQUECW0TDQsDCQEFCWMPCAIHAAwMB2UkIyEDHgAVFh4VYCIBFiABHRkWHWAAGQ4BBQQZBV4DAQEAAhIBAl4AEhEKAgAHEgBgHAEaGgxIFBACDAwXWQAXFw1IFBACDAwYWQAYGA0YSRtLsCZQWEB1HwEbFh0WGx1tBgEEBQkFBAltEw0LAwkBBQkBaw8IAgcADAwHZSQjIQMeABUWHhVgIgEWIAEdGRYdYAAZDgEFBBkFXgMBAQACEgECXgASEQoCAAcSAGAcARoaDEgUEAIMDBdZABcXDUgUEAIMDBhZABgYDRhJG0BvHwEbFh0WGx1tBgEEBQkFBAltEw0LAwkBBQkBaw8IAgcADAwHZSQjIQMeABUWHhVgIgEWIAEdGRYdYAAZDgEFBBkFXgMBAQACEgECXgASEQoCAAcSAGAAFxgMF1UcARoaDEgUEAIMDBhZABgYDRhJWVlZWVlARpWVlaaVpqSioJ+bmZeWkpGKiYOCfXx6eXNyZ2ZlZF9eW1pTUktKRkVDQTk3NTQzMjAvKSgkIx8dGxoRERERERISIyIlBR0rJRUUIyInNTYzMhcVIzU0MiUzNSMVMxE7AhEjFQYjIicmPQEjFRQXFjI/ATU0JyYiBzUjETM1FjMyNzY3NSMUBwYjIj0BMzU0JyYiBwYdARQXFjI3Njc2ATU0Ih0BFDIBFAcOAQcGICcuAScmEDc+ATc2IBceARcWATMHFSM1JicmJzMfARUUBwYiJyY9ATQ3NjIXFjcRIzUGIyInJj0BMxUWMzI3NQIeFg0MDA0WvTMy/eU8rjs3oTIyEQ8KAQEyBQc0HvAFCjoYMjIZGx4KBbwzAQQSGmQPFksWDxAWThQKAgH+rTAwAZEOCDIgZv5iZyAyBw8PBzIgZwGeZiEyBw790zlDOAgaFRA8J/UQFUsWDw8WSxUQuzMeHBkIBDMCCg8RnHYlDKgMJhkZJlQ0NP7CARTTFwsCEsvaHA0VIjVuKQ4fHnn+jhsfHw8vBx0FFCYxOSwVHBwVLGAsFR0eDw8FAhl1Jyd1J/6Eg0AhLgIMDAMsIj4BCEAhLgMLCwQsIj4CQ9+XlypNOS+TJ2EuFB0dFS1hLRUcHBUu/ukfIxUNHdzhDBjVAAAAAAUAAP+xA1kDCwAIABEAGgBUAG0AY0BgEgEDBQFHAAoCBwcKZQANCw4CBgUNBmAABQAEAAUEYAADAAABAwBgAAEAAgoBAmAJCAIHDAwHVAkIAgcHDFkADAcMTSAbamVeWVJRPTw6OTg3NjUbVCBTExQTFBMSDwUaKwE0JiIOARYyNjcUBi4BPgIWNxQGIi4BNjIWJSIrASIOAQcOAQcOAhYGFgYWFB8BHgEXHgEyFjYWNhY+ATc+ATc+AiY2JjYmNC8BLgEnLgEiJgYBFAcOAQcGIicuAScmEDc+ATc2IBceARcWAjtSeFICVnRWS4C2ggJ+unw/HiwcAiAoIv7mBCc7FEQuERwqDAYIBAICAgICBgoMKhwQMEIqTApKLEA0DRwsCgYIBAICAgICBgoLKh0QLkYmUAGqAwWAczL+MnSABQMDBYB0MQEAMXR+BgMBXjtUVHZUVDtbggJ+un4CgooVHh4qHh5mBAYICyocEDBEJlAGUCZEGCgcKgsGCgQEBAQECAIKCyocEDBEJlAGUCZEGCgcKgsGCgQE/qKAMXSABQMDBn51MQEAMXSABQMDBn51MQAC////agPoA1IADwAoADRAMRwTAgMBAUcAAQADAAEDbQADAgADAmsEAQAADEgAAgINAkkBACIgGBYKCAAPAQ8FBRQrATIWBxQHAgcGIyIuATcBNgEeAR8BFgYjIi4CNxceAjMyNz4EA4UnPAEZuUs2Q0dkATQBZCH+LBZKLwEClHlEakAiARcTICAKFwgOJCo4OgNSNCcjMf6hRTNoji8BQx79vyo+Cyh2ljRackIRDhYSFCU0IBYGAAAAAAEAAP+xAsoDUwBKAD9APCMBBQITAQEDAkccAQFEAAIEBQQCBW0ABQMEBQNrAAMAAQMBXAAEBABYAAAADARJRUQ7OTEvKScoJQYFFisRND4DFzIeARUUDgMnIiYnBw4FDwEnJjU0Nj8BJjU0NjcyFhUUDgEWMzI+BDc0JiMiBhUUHgIVFAYjJy4DKkpgbjpYmF4UMEBgOiZKEQ8KCA4QEiISBwUJGBkdEjotIiYwATIkHzQkGhAGAXpjb5YOEA4QDQkdLBgMAgU8alA6HgFKjlk2ZmBGLgIkHz8pGDgWMCgcAwZYETOAYXEkOi9QAS4iJYpHLhwwOkA8GmBskG8ZLhoaBA8yAQksPjoAAAABAAAAAQAAdfHApV8PPPUACwPoAAAAANjo5pYAAAAA2Ojmlv/6/2oEMANYAAAACAACAAAAAAAAAAEAAANS/2oAAAQv//r/+gQwAAEAAAAAAAAAAAAAAAAAAAArA+gAAAOgAAAD6AAAAxEAAAMRAAADEQAAA1n//QNZAAADWQAAA+gAAAPoAAAEL///A6AAAAFlAAAEL///AsoAAAPoAAADoAAAA40AAAI7AAACggAAA+gAAAPoAAADWQAAA6AAAAPoAAACygAAA+gAAAQvAAAC+AAAA+j/+gOgAAACOwAAA1kAAAI7//8DWQAABC///wQv//8ELwAAA1kAAANZAAAD6P//AsoAAAAAAAAAggC6AQQBTAF2AfwCgANCA7oD8ARIBMwE9AW4BfwGHAaEBugHEAdYB+gImgkwCbQJ6goqC24NEg4kDyYPlg/OEDQQeBDeEUwRuhIsFLwVlhX0FnkAAQAAACsA8gALAAAAAAACAEoAWgBzAAAA/gtwAAAAAAAAABIA3gABAAAAAAAAADUAAAABAAAAAAABAAYANQABAAAAAAACAAcAOwABAAAAAAADAAYAQgABAAAAAAAEAAYASAABAAAAAAAFAAsATgABAAAAAAAGAAYAWQABAAAAAAAKACsAXwABAAAAAAALABMAigADAAEECQAAAGoAnQADAAEECQABAAwBBwADAAEECQACAA4BEwADAAEECQADAAwBIQADAAEECQAEAAwBLQADAAEECQAFABYBOQADAAEECQAGAAwBTwADAAEECQAKAFYBWwADAAEECQALACYBsUNvcHlyaWdodCAoQykgMjAxOSBieSBvcmlnaW5hbCBhdXRob3JzIEAgZm9udGVsbG8uY29tendpaWNvUmVndWxhcnp3aWljb3p3aWljb1ZlcnNpb24gMS4wendpaWNvR2VuZXJhdGVkIGJ5IHN2ZzJ0dGYgZnJvbSBGb250ZWxsbyBwcm9qZWN0Lmh0dHA6Ly9mb250ZWxsby5jb20AQwBvAHAAeQByAGkAZwBoAHQAIAAoAEMAKQAgADIAMAAxADkAIABiAHkAIABvAHIAaQBnAGkAbgBhAGwAIABhAHUAdABoAG8AcgBzACAAQAAgAGYAbwBuAHQAZQBsAGwAbwAuAGMAbwBtAHoAdwBpAGkAYwBvAFIAZQBnAHUAbABhAHIAegB3AGkAaQBjAG8AegB3AGkAaQBjAG8AVgBlAHIAcwBpAG8AbgAgADEALgAwAHoAdwBpAGkAYwBvAEcAZQBuAGUAcgBhAHQAZQBkACAAYgB5ACAAcwB2AGcAMgB0AHQAZgAgAGYAcgBvAG0AIABGAG8AbgB0AGUAbABsAG8AIABwAHIAbwBqAGUAYwB0AC4AaAB0AHQAcAA6AC8ALwBmAG8AbgB0AGUAbABsAG8ALgBjAG8AbQAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACsBAgEDAQQBBQEGAQcBCAEJAQoBCwEMAQ0BDgEPARABEQESARMBFAEVARYBFwEYARkBGgEbARwBHQEeAR8BIAEhASIBIwEkASUBJgEnASgBKQEqASsBLAAGbG9nb3V0BWNoZWNrBmNhbmNlbARwbHVzBW1pbnVzBGhlbHAGcGVuY2lsBGdlYXIDZXllAnVwBmZvbGRlcghkb3dubG9hZARsZWZ0BXVzZXJzBHVzZXIHY29tbWVudARob21lBG1pbWkEZG93bgRsb2NrBGNoYXQHZXllLW9mZgZ1cGRhdGUGdXBsb2FkCWRvd24tb3BlbglsZWZ0LW9wZW4EY29ncwdjb2ctYWx0BXRyYXNoBHNwaW4HdHdpdHRlcghmYWNlYm9vawRtZW51BHNvcnQIbGlua2VkaW4OZG93bmxvYWQtY2xvdWQMdXBsb2FkLWNsb3VkBGNvZGUHeW91dHViZQlpbnN0YWdyYW0FYnJ1c2gJcGludGVyZXN0AAAAAQAB//8ADwAAAAAAAAAAAAAAAAAAAAAAGAAYABgAGANY/2oDWP9qsAAsILAAVVhFWSAgS7gADlFLsAZTWliwNBuwKFlgZiCKVViwAiVhuQgACABjYyNiGyEhsABZsABDI0SyAAEAQ2BCLbABLLAgYGYtsAIsIGQgsMBQsAQmWrIoAQpDRWNFUltYISMhG4pYILBQUFghsEBZGyCwOFBYIbA4WVkgsQEKQ0VjRWFksChQWCGxAQpDRWNFILAwUFghsDBZGyCwwFBYIGYgiophILAKUFhgGyCwIFBYIbAKYBsgsDZQWCGwNmAbYFlZWRuwAStZWSOwAFBYZVlZLbADLCBFILAEJWFkILAFQ1BYsAUjQrAGI0IbISFZsAFgLbAELCMhIyEgZLEFYkIgsAYjQrEBCkNFY7EBCkOwAWBFY7ADKiEgsAZDIIogirABK7EwBSWwBCZRWGBQG2FSWVgjWSEgsEBTWLABKxshsEBZI7AAUFhlWS2wBSywB0MrsgACAENgQi2wBiywByNCIyCwACNCYbACYmawAWOwAWCwBSotsAcsICBFILALQ2O4BABiILAAUFiwQGBZZrABY2BEsAFgLbAILLIHCwBDRUIqIbIAAQBDYEItsAkssABDI0SyAAEAQ2BCLbAKLCAgRSCwASsjsABDsAQlYCBFiiNhIGQgsCBQWCGwABuwMFBYsCAbsEBZWSOwAFBYZVmwAyUjYUREsAFgLbALLCAgRSCwASsjsABDsAQlYCBFiiNhIGSwJFBYsAAbsEBZI7AAUFhlWbADJSNhRESwAWAtsAwsILAAI0KyCwoDRVghGyMhWSohLbANLLECAkWwZGFELbAOLLABYCAgsAxDSrAAUFggsAwjQlmwDUNKsABSWCCwDSNCWS2wDywgsBBiZrABYyC4BABjiiNhsA5DYCCKYCCwDiNCIy2wECxLVFixBGREWSSwDWUjeC2wESxLUVhLU1ixBGREWRshWSSwE2UjeC2wEiyxAA9DVVixDw9DsAFhQrAPK1mwAEOwAiVCsQwCJUKxDQIlQrABFiMgsAMlUFixAQBDYLAEJUKKiiCKI2GwDiohI7ABYSCKI2GwDiohG7EBAENgsAIlQrACJWGwDiohWbAMQ0ewDUNHYLACYiCwAFBYsEBgWWawAWMgsAtDY7gEAGIgsABQWLBAYFlmsAFjYLEAABMjRLABQ7AAPrIBAQFDYEItsBMsALEAAkVUWLAPI0IgRbALI0KwCiOwAWBCIGCwAWG1EBABAA4AQkKKYLESBiuwcisbIlktsBQssQATKy2wFSyxARMrLbAWLLECEystsBcssQMTKy2wGCyxBBMrLbAZLLEFEystsBossQYTKy2wGyyxBxMrLbAcLLEIEystsB0ssQkTKy2wHiwAsA0rsQACRVRYsA8jQiBFsAsjQrAKI7ABYEIgYLABYbUQEAEADgBCQopgsRIGK7ByKxsiWS2wHyyxAB4rLbAgLLEBHistsCEssQIeKy2wIiyxAx4rLbAjLLEEHistsCQssQUeKy2wJSyxBh4rLbAmLLEHHistsCcssQgeKy2wKCyxCR4rLbApLCA8sAFgLbAqLCBgsBBgIEMjsAFgQ7ACJWGwAWCwKSohLbArLLAqK7AqKi2wLCwgIEcgILALQ2O4BABiILAAUFiwQGBZZrABY2AjYTgjIIpVWCBHICCwC0NjuAQAYiCwAFBYsEBgWWawAWNgI2E4GyFZLbAtLACxAAJFVFiwARawLCqwARUwGyJZLbAuLACwDSuxAAJFVFiwARawLCqwARUwGyJZLbAvLCA1sAFgLbAwLACwAUVjuAQAYiCwAFBYsEBgWWawAWOwASuwC0NjuAQAYiCwAFBYsEBgWWawAWOwASuwABa0AAAAAABEPiM4sS8BFSotsDEsIDwgRyCwC0NjuAQAYiCwAFBYsEBgWWawAWNgsABDYTgtsDIsLhc8LbAzLCA8IEcgsAtDY7gEAGIgsABQWLBAYFlmsAFjYLAAQ2GwAUNjOC2wNCyxAgAWJSAuIEewACNCsAIlSYqKRyNHI2EgWGIbIVmwASNCsjMBARUUKi2wNSywABawBCWwBCVHI0cjYbAJQytlii4jICA8ijgtsDYssAAWsAQlsAQlIC5HI0cjYSCwBCNCsAlDKyCwYFBYILBAUVizAiADIBuzAiYDGllCQiMgsAhDIIojRyNHI2EjRmCwBEOwAmIgsABQWLBAYFlmsAFjYCCwASsgiophILACQ2BkI7ADQ2FkUFiwAkNhG7ADQ2BZsAMlsAJiILAAUFiwQGBZZrABY2EjICCwBCYjRmE4GyOwCENGsAIlsAhDRyNHI2FgILAEQ7ACYiCwAFBYsEBgWWawAWNgIyCwASsjsARDYLABK7AFJWGwBSWwAmIgsABQWLBAYFlmsAFjsAQmYSCwBCVgZCOwAyVgZFBYIRsjIVkjICCwBCYjRmE4WS2wNyywABYgICCwBSYgLkcjRyNhIzw4LbA4LLAAFiCwCCNCICAgRiNHsAErI2E4LbA5LLAAFrADJbACJUcjRyNhsABUWC4gPCMhG7ACJbACJUcjRyNhILAFJbAEJUcjRyNhsAYlsAUlSbACJWG5CAAIAGNjIyBYYhshWWO4BABiILAAUFiwQGBZZrABY2AjLiMgIDyKOCMhWS2wOiywABYgsAhDIC5HI0cjYSBgsCBgZrACYiCwAFBYsEBgWWawAWMjICA8ijgtsDssIyAuRrACJUZSWCA8WS6xKwEUKy2wPCwjIC5GsAIlRlBYIDxZLrErARQrLbA9LCMgLkawAiVGUlggPFkjIC5GsAIlRlBYIDxZLrErARQrLbA+LLA1KyMgLkawAiVGUlggPFkusSsBFCstsD8ssDYriiAgPLAEI0KKOCMgLkawAiVGUlggPFkusSsBFCuwBEMusCsrLbBALLAAFrAEJbAEJiAuRyNHI2GwCUMrIyA8IC4jOLErARQrLbBBLLEIBCVCsAAWsAQlsAQlIC5HI0cjYSCwBCNCsAlDKyCwYFBYILBAUVizAiADIBuzAiYDGllCQiMgR7AEQ7ACYiCwAFBYsEBgWWawAWNgILABKyCKimEgsAJDYGQjsANDYWRQWLACQ2EbsANDYFmwAyWwAmIgsABQWLBAYFlmsAFjYbACJUZhOCMgPCM4GyEgIEYjR7ABKyNhOCFZsSsBFCstsEIssDUrLrErARQrLbBDLLA2KyEjICA8sAQjQiM4sSsBFCuwBEMusCsrLbBELLAAFSBHsAAjQrIAAQEVFBMusDEqLbBFLLAAFSBHsAAjQrIAAQEVFBMusDEqLbBGLLEAARQTsDIqLbBHLLA0Ki2wSCywABZFIyAuIEaKI2E4sSsBFCstsEkssAgjQrBIKy2wSiyyAABBKy2wSyyyAAFBKy2wTCyyAQBBKy2wTSyyAQFBKy2wTiyyAABCKy2wTyyyAAFCKy2wUCyyAQBCKy2wUSyyAQFCKy2wUiyyAAA+Ky2wUyyyAAE+Ky2wVCyyAQA+Ky2wVSyyAQE+Ky2wViyyAABAKy2wVyyyAAFAKy2wWCyyAQBAKy2wWSyyAQFAKy2wWiyyAABDKy2wWyyyAAFDKy2wXCyyAQBDKy2wXSyyAQFDKy2wXiyyAAA/Ky2wXyyyAAE/Ky2wYCyyAQA/Ky2wYSyyAQE/Ky2wYiywNysusSsBFCstsGMssDcrsDsrLbBkLLA3K7A8Ky2wZSywABawNyuwPSstsGYssDgrLrErARQrLbBnLLA4K7A7Ky2waCywOCuwPCstsGkssDgrsD0rLbBqLLA5Ky6xKwEUKy2wayywOSuwOystsGwssDkrsDwrLbBtLLA5K7A9Ky2wbiywOisusSsBFCstsG8ssDorsDsrLbBwLLA6K7A8Ky2wcSywOiuwPSstsHIsswkEAgNFWCEbIyFZQiuwCGWwAyRQeLABFTAtAEu4AMhSWLEBAY5ZsAG5CAAIAGNwsQAFQrIAAQAqsQAFQrMKAgEIKrEABUKzDgABCCqxAAZCugLAAAEACSqxAAdCugBAAAEACSqxAwBEsSQBiFFYsECIWLEDZESxJgGIUVi6CIAAAQRAiGNUWLEDAERZWVlZswwCAQwquAH/hbAEjbECAEQAAA==') format('truetype'); +} +/* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */ +/* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */ +/* +@media screen and (-webkit-min-device-pixel-ratio:0) { + @font-face { + font-family: 'zwiico'; + src: url('../font/zwiico.svg?74374674#zwiico') format('svg'); + } +} +*/ + + [class^="zwiico-"]:before, [class*=" zwiico-"]:before { + font-family: "zwiico"; + font-style: normal; + font-weight: normal; + speak: none; + + display: inline-block; + text-decoration: inherit; + width: 1em; + margin-right: .2em; + text-align: center; + /* opacity: .8; */ + + /* For safety - reset parent styles, that can break glyph codes*/ + font-variant: normal; + text-transform: none; + + /* fix buttons height, for twitter bootstrap */ + line-height: 1em; + + /* Animation center compensation - margins should be symmetric */ + /* remove if not needed */ + margin-left: .2em; + + /* you can be more comfortable with increased icons size */ + /* font-size: 120%; */ + + /* Uncomment for 3D effect */ + /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */ +} +.zwiico-logout:before { content: '\e800'; } /* '' */ +.zwiico-check:before { content: '\e801'; } /* '' */ +.zwiico-cancel:before { content: '\e802'; } /* '' */ +.zwiico-plus:before { content: '\e803'; } /* '' */ +.zwiico-minus:before { content: '\e804'; } /* '' */ +.zwiico-help:before { content: '\e805'; } /* '' */ +.zwiico-pencil:before { content: '\e806'; } /* '' */ +.zwiico-gear:before { content: '\e807'; } /* '' */ +.zwiico-eye:before { content: '\e808'; } /* '' */ +.zwiico-up:before { content: '\e809'; } /* '' */ +.zwiico-folder:before { content: '\e80a'; } /* '' */ +.zwiico-download:before { content: '\e80b'; } /* '' */ +.zwiico-left:before { content: '\e80c'; } /* '' */ +.zwiico-users:before { content: '\e80d'; } /* '' */ +.zwiico-user:before { content: '\e80e'; } /* '' */ +.zwiico-comment:before { content: '\e80f'; } /* '' */ +.zwiico-home:before { content: '\e810'; } /* '' */ +.zwiico-mimi:before { content: '\e811'; } /* '' */ +.zwiico-down:before { content: '\e812'; } /* '' */ +.zwiico-lock:before { content: '\e813'; } /* '' */ +.zwiico-chat:before { content: '\e814'; } /* '' */ +.zwiico-eye-off:before { content: '\e815'; } /* '' */ +.zwiico-update:before { content: '\e816'; } /* '' */ +.zwiico-upload:before { content: '\e817'; } /* '' */ +.zwiico-down-open:before { content: '\e818'; } /* '' */ +.zwiico-left-open:before { content: '\e819'; } /* '' */ +.zwiico-cogs:before { content: '\e81a'; } /* '' */ +.zwiico-cog-alt:before { content: '\e81b'; } /* '' */ +.zwiico-trash:before { content: '\e81c'; } /* '' */ +.zwiico-spin:before { content: '\e831'; } /* '' */ +.zwiico-twitter:before { content: '\f099'; } /* '' */ +.zwiico-facebook:before { content: '\f09a'; } /* '' */ +.zwiico-menu:before { content: '\f0c9'; } /* '' */ +.zwiico-sort:before { content: '\f0dc'; } /* '' */ +.zwiico-linkedin:before { content: '\f0e1'; } /* '' */ +.zwiico-download-cloud:before { content: '\f0ed'; } /* '' */ +.zwiico-upload-cloud:before { content: '\f0ee'; } /* '' */ +.zwiico-code:before { content: '\f121'; } /* '' */ +.zwiico-youtube:before { content: '\f167'; } /* '' */ +.zwiico-instagram:before { content: '\f16d'; } /* '' */ +.zwiico-brush:before { content: '\f1fc'; } /* '' */ +.zwiico-pinterest:before { content: '\f231'; } /* '' */ \ No newline at end of file diff --git a/core/vendor/zwiico/css/zwiico-ie7-codes.css b/core/vendor/zwiico/css/zwiico-ie7-codes.css new file mode 100644 index 00000000..462a6cc5 --- /dev/null +++ b/core/vendor/zwiico/css/zwiico-ie7-codes.css @@ -0,0 +1,43 @@ + +.zwiico-logout { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-check { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-cancel { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-plus { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-minus { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-help { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-pencil { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-gear { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-eye { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-up { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-folder { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-download { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-left { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-users { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-user { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-comment { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-home { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-mimi { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-down { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-lock { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-chat { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-eye-off { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-update { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-upload { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-down-open { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-left-open { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-cogs { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-cog-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-trash { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-spin { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-twitter { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-facebook { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-menu { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-sort { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-linkedin { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-download-cloud { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-upload-cloud { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-code { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-youtube { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-instagram { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-brush { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-pinterest { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } \ No newline at end of file diff --git a/core/vendor/zwiico/css/zwiico-ie7.css b/core/vendor/zwiico/css/zwiico-ie7.css new file mode 100644 index 00000000..269e1dde --- /dev/null +++ b/core/vendor/zwiico/css/zwiico-ie7.css @@ -0,0 +1,54 @@ +[class^="zwiico-"], [class*=" zwiico-"] { + font-family: 'zwiico'; + font-style: normal; + font-weight: normal; + + /* fix buttons height */ + line-height: 1em; + + /* you can be more comfortable with increased icons size */ + /* font-size: 120%; */ +} + +.zwiico-logout { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-check { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-cancel { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-plus { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-minus { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-help { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-pencil { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-gear { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-eye { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-up { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-folder { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-download { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-left { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-users { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-user { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-comment { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-home { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-mimi { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-down { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-lock { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-chat { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-eye-off { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-update { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-upload { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-down-open { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-left-open { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-cogs { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-cog-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-trash { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-spin { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-twitter { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-facebook { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-menu { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-sort { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-linkedin { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-download-cloud { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-upload-cloud { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-code { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-youtube { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-instagram { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-brush { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.zwiico-pinterest { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } \ No newline at end of file diff --git a/core/vendor/zwiico/css/zwiico.css b/core/vendor/zwiico/css/zwiico.css new file mode 100644 index 00000000..bc4cd3b6 --- /dev/null +++ b/core/vendor/zwiico/css/zwiico.css @@ -0,0 +1,99 @@ +@font-face { + font-family: 'zwiico'; + src: url('../font/zwiico.eot?50739598'); + src: url('../font/zwiico.eot?50739598#iefix') format('embedded-opentype'), + url('../font/zwiico.woff2?50739598') format('woff2'), + url('../font/zwiico.woff?50739598') format('woff'), + url('../font/zwiico.ttf?50739598') format('truetype'), + url('../font/zwiico.svg?50739598#zwiico') format('svg'); + font-weight: normal; + font-style: normal; +} +/* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */ +/* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */ +/* +@media screen and (-webkit-min-device-pixel-ratio:0) { + @font-face { + font-family: 'zwiico'; + src: url('../font/zwiico.svg?50739598#zwiico') format('svg'); + } +} +*/ + + [class^="zwiico-"]:before, [class*=" zwiico-"]:before { + font-family: "zwiico"; + font-style: normal; + font-weight: normal; + speak: none; + + display: inline-block; + text-decoration: inherit; + width: 1em; + margin-right: .2em; + text-align: center; + /* opacity: .8; */ + + /* For safety - reset parent styles, that can break glyph codes*/ + font-variant: normal; + text-transform: none; + + /* fix buttons height, for twitter bootstrap */ + line-height: 1em; + + /* Animation center compensation - margins should be symmetric */ + /* remove if not needed */ + margin-left: .2em; + + /* you can be more comfortable with increased icons size */ + /* font-size: 120%; */ + + /* Font smoothing. That was taken from TWBS */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + + /* Uncomment for 3D effect */ + /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */ +} + +.zwiico-logout:before { content: '\e800'; } /* '' */ +.zwiico-check:before { content: '\e801'; } /* '' */ +.zwiico-cancel:before { content: '\e802'; } /* '' */ +.zwiico-plus:before { content: '\e803'; } /* '' */ +.zwiico-minus:before { content: '\e804'; } /* '' */ +.zwiico-help:before { content: '\e805'; } /* '' */ +.zwiico-pencil:before { content: '\e806'; } /* '' */ +.zwiico-gear:before { content: '\e807'; } /* '' */ +.zwiico-eye:before { content: '\e808'; } /* '' */ +.zwiico-up:before { content: '\e809'; } /* '' */ +.zwiico-folder:before { content: '\e80a'; } /* '' */ +.zwiico-download:before { content: '\e80b'; } /* '' */ +.zwiico-left:before { content: '\e80c'; } /* '' */ +.zwiico-users:before { content: '\e80d'; } /* '' */ +.zwiico-user:before { content: '\e80e'; } /* '' */ +.zwiico-comment:before { content: '\e80f'; } /* '' */ +.zwiico-home:before { content: '\e810'; } /* '' */ +.zwiico-mimi:before { content: '\e811'; } /* '' */ +.zwiico-down:before { content: '\e812'; } /* '' */ +.zwiico-lock:before { content: '\e813'; } /* '' */ +.zwiico-chat:before { content: '\e814'; } /* '' */ +.zwiico-eye-off:before { content: '\e815'; } /* '' */ +.zwiico-update:before { content: '\e816'; } /* '' */ +.zwiico-upload:before { content: '\e817'; } /* '' */ +.zwiico-down-open:before { content: '\e818'; } /* '' */ +.zwiico-left-open:before { content: '\e819'; } /* '' */ +.zwiico-cogs:before { content: '\e81a'; } /* '' */ +.zwiico-cog-alt:before { content: '\e81b'; } /* '' */ +.zwiico-trash:before { content: '\e81c'; } /* '' */ +.zwiico-spin:before { content: '\e831'; } /* '' */ +.zwiico-twitter:before { content: '\f099'; } /* '' */ +.zwiico-facebook:before { content: '\f09a'; } /* '' */ +.zwiico-menu:before { content: '\f0c9'; } /* '' */ +.zwiico-sort:before { content: '\f0dc'; } /* '' */ +.zwiico-linkedin:before { content: '\f0e1'; } /* '' */ +.zwiico-download-cloud:before { content: '\f0ed'; } /* '' */ +.zwiico-upload-cloud:before { content: '\f0ee'; } /* '' */ +.zwiico-code:before { content: '\f121'; } /* '' */ +.zwiico-youtube:before { content: '\f167'; } /* '' */ +.zwiico-instagram:before { content: '\f16d'; } /* '' */ +.zwiico-brush:before { content: '\f1fc'; } /* '' */ +.zwiico-pinterest:before { content: '\f231'; } /* '' */ \ No newline at end of file diff --git a/core/vendor/zwiico/font/zwiico.eot b/core/vendor/zwiico/font/zwiico.eot index 46187d24..d905b6df 100755 Binary files a/core/vendor/zwiico/font/zwiico.eot and b/core/vendor/zwiico/font/zwiico.eot differ diff --git a/core/vendor/zwiico/font/zwiico.svg b/core/vendor/zwiico/font/zwiico.svg index eeacd4eb..0fb0e68b 100755 --- a/core/vendor/zwiico/font/zwiico.svg +++ b/core/vendor/zwiico/font/zwiico.svg @@ -1,7 +1,7 @@ -Copyright (C) 2018 by original authors @ fontello.com +Copyright (C) 2019 by original authors @ fontello.com @@ -50,7 +50,19 @@ - + + + + + + + + + + + + + @@ -60,10 +72,14 @@ - - + + + + + + diff --git a/core/vendor/zwiico/font/zwiico.ttf b/core/vendor/zwiico/font/zwiico.ttf index 43f31c93..492b5cf9 100755 Binary files a/core/vendor/zwiico/font/zwiico.ttf and b/core/vendor/zwiico/font/zwiico.ttf differ diff --git a/core/vendor/zwiico/font/zwiico.woff b/core/vendor/zwiico/font/zwiico.woff index 1a242c9b..6bc37c75 100755 Binary files a/core/vendor/zwiico/font/zwiico.woff and b/core/vendor/zwiico/font/zwiico.woff differ diff --git a/core/vendor/zwiico/font/zwiico.woff2 b/core/vendor/zwiico/font/zwiico.woff2 index 191d349d..b3767745 100755 Binary files a/core/vendor/zwiico/font/zwiico.woff2 and b/core/vendor/zwiico/font/zwiico.woff2 differ diff --git a/core/vendor/zwiico/inc.json b/core/vendor/zwiico/inc.json index 423e54c5..2400778f 100755 --- a/core/vendor/zwiico/inc.json +++ b/core/vendor/zwiico/inc.json @@ -1,4 +1,4 @@ [ - "css/zwiico.min.css", + "css/zwiico.css", "init.css" ] \ No newline at end of file diff --git a/module/blog/blog.php b/module/blog/blog.php index c913123a..736fe3f2 100644 --- a/module/blog/blog.php +++ b/module/blog/blog.php @@ -37,7 +37,7 @@ class blog extends common { public static $users = []; - const BLOG_VERSION = '1.4'; + const BLOG_VERSION = '1.7'; /** * Édition @@ -52,6 +52,8 @@ class blog extends common { // Crée l'article $this->setData(['module', $this->getUrl(0), $articleId, [ 'closeComment' => $this->getInput('blogAddCloseComment', helper::FILTER_BOOLEAN), + 'mailNotification' => $this->getInput('blogEditMailNotification', helper::FILTER_BOOLEAN), + 'groupNotification' => $this->getInput('blogEditGroupNotification', helper::FILTER_INT), 'comment' => [], 'content' => $this->getInput('blogAddContent', null), 'picture' => $this->getInput('blogAddPicture', helper::FILTER_STRING_SHORT, true), @@ -258,6 +260,8 @@ class blog extends common { } $this->setData(['module', $this->getUrl(0), $articleId, [ 'closeComment' => $this->getInput('blogEditCloseComment'), + 'mailNotification' => $this->getInput('blogEditMailNotification', helper::FILTER_BOOLEAN), + 'groupNotification' => $this->getInput('blogEditGroupNotification', helper::FILTER_INT), 'comment' => $this->getData(['module', $this->getUrl(0), $this->getUrl(2), 'comment']), 'content' => $this->getInput('blogEditContent', null), 'picture' => $this->getInput('blogEditPicture', helper::FILTER_STRING_SHORT, true), @@ -333,12 +337,42 @@ class blog extends common { 'createdOn' => time(), 'userId' => $this->getInput('blogArticleUserId'), ]]); - // Valeurs en sortie - $this->addOutput([ - 'redirect' => helper::baseUrl() . $this->getUrl() . '#comment', - 'notification' => 'Commentaire ajouté', - 'state' => true - ]); + + // Envoi d'une notification aux administrateurs + // Init tableau + $to = []; + // Liste des destinataires + foreach($this->getData(['user']) as $userId => $user) { + if ($user['group'] >= $this->getData(['module', $this->getUrl(0), $this->getUrl(1), 'groupNotification']) ) { + $to[] = $user['mail']; + } + } + // Envoi du mail $sent code d'erreur ou de réusssite + if ($this->getData(['module', $this->getUrl(0), $this->getUrl(1), 'mailNotification']) === true) { + $sent = $this->sendMail( + $to, + 'Nouveau commentaire', + 'Bonjour' . ' ' . $user['firstname'] . ' ' . $user['lastname'] . ',

    ' . + 'Nouveau commentaire déposé sur la page "' . $this->getData(['page', $this->getUrl(0), 'title']) . '" :

    ' + ); + // Valeurs en sortie + $this->addOutput([ + 'redirect' => helper::baseUrl() . $this->getUrl() . '#comment', + //'notification' => 'Commentaire ajouté', + //'state' => true + 'notification' => ($sent === true ? 'Commentaire ajouté et une notification envoyée' : 'Commentaire ajouté, erreur de notification :
    ' . $sent), + 'state' => ($sent === true ? true : null) + ]); + + } else { + // Valeurs en sortie + $this->addOutput([ + 'redirect' => helper::baseUrl() . $this->getUrl() . '#comment', + 'notification' => 'Commentaire ajouté', + 'state' => true + ]); + } + } // Ids des commentaires par ordre de publication $commentIds = array_keys(helper::arrayCollumn($this->getData(['module', $this->getUrl(0), $this->getUrl(1), 'comment']), 'createdOn', 'SORT_DESC')); diff --git a/module/blog/view/edit/edit.js.php b/module/blog/view/edit/edit.js.php index 42491b76..837db768 100644 --- a/module/blog/view/edit/edit.js.php +++ b/module/blog/view/edit/edit.js.php @@ -10,6 +10,18 @@ * @link http://zwiicms.com/ */ + +// Lien de connexion +$("#blogEditMailNotification").on("change", function() { + if($(this).is(":checked")) { + $("#formConfigGroup").show(); + } + else { + $("#formConfigGroup").hide(); + } +}).trigger("change"); + + /** * Soumission du formulaire pour enregistrer en brouillon */ diff --git a/module/blog/view/edit/edit.php b/module/blog/view/edit/edit.php index a9c33c13..239963d5 100644 --- a/module/blog/view/edit/edit.php +++ b/module/blog/view/edit/edit.php @@ -78,6 +78,14 @@ $this->getData(['module', $this->getUrl(0), $this->getUrl(2), 'closeComment']) ]); ?> + $this->getData(['module', $this->getUrl(0), $this->getUrl(2), 'mailNotification']) + ]); ?> + '', + 'selected' => $this->getData(['module', $this->getUrl(0), $this->getUrl(2), 'groupNotification']), + 'help' => 'Editeurs = éditeurs + administrateurs
    Membres = membres + éditeurs + administrateurs' + ]); ?>
    diff --git a/module/form/form.php b/module/form/form.php index 08217f5e..db05a96c 100644 --- a/module/form/form.php +++ b/module/form/form.php @@ -329,7 +329,7 @@ class form extends common { $to = []; if ($group > 0){ foreach($this->getData(['user']) as $userId => $user) { - if($user['group'] === $group) { + if($user['group'] >= $group) { $to[] = $user['mail']; } } diff --git a/module/form/view/config/config.php b/module/form/view/config/config.php index 29808a2e..631af215 100644 --- a/module/form/view/config/config.php +++ b/module/form/view/config/config.php @@ -96,8 +96,9 @@
    'Un groupe de membres :', - 'selected' => $this->getData(['module', $this->getUrl(0), 'config', 'group']) + 'label' => 'Les groupes hiérarchiques à partir du groupe :', + 'selected' => $this->getData(['module', $this->getUrl(0), 'config', 'group']), + 'help' => 'Editeurs = éditeurs + administrateurs
    Membres = membres + éditeurs + administrateurs' ]); ?>
    diff --git a/site/backup/.htaccess b/site/backup/.htaccess index 90fe684b..acb89050 100755 --- a/site/backup/.htaccess +++ b/site/backup/.htaccess @@ -1,3 +1,3 @@ # Bloque l'accès aux sauvegardes Order deny,allow -Deny from all \ No newline at end of file +Deny from all diff --git a/site/data/.htaccess b/site/data/.htaccess index 7338ad7f..7337489f 100755 --- a/site/data/.htaccess +++ b/site/data/.htaccess @@ -7,4 +7,4 @@ Order deny,allow Deny from all - \ No newline at end of file + diff --git a/site/tmp/.htaccess b/site/tmp/.htaccess index 4a46a173..e4a2c105 100644 --- a/site/tmp/.htaccess +++ b/site/tmp/.htaccess @@ -1,5 +1,3 @@ -# Bloque l'accès htaccess - - Order deny,allow - Deny from all - +# Bloque l'accès aux sauvegardes +Order deny,allow +Deny from all