From 47da216738b40b31c00062932bb22d14b2f9cd39 Mon Sep 17 00:00:00 2001 From: Miraty Date: Fri, 6 Mar 2020 21:34:31 +0100 Subject: [PATCH] =?UTF-8?q?backend=20en=20anglais=20+=20v=C3=A9rification?= =?UTF-8?q?=20am=C3=A9lior=C3=A9e=20des=20params?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + README.md | 39 +- aide.svg | 4 +- options.inc.php => config.inc.php | 42 +- index.php | 431 +-- manifest.php | 41 +- opensearch.php | 8 +- phpqrcode.php | 2354 ++++++++--------- style.less | 411 ++- style.min.css | 1 + temp/.gitkeep | 1 + ...6SrkUx5hTlzXLuNkt96TFSTtbmnLkyyuvB8Feu.png | Bin 392 -> 0 bytes ...4K8V67igQozAaw7fOTStC8IO5gcMLd3OyW1r0b.png | Bin 401 -> 0 bytes themes/dark/icons/128.png | Bin 0 -> 612 bytes themes/dark/icons/16.png | Bin 0 -> 433 bytes themes/dark/icons/192.png | Bin 0 -> 760 bytes themes/dark/icons/256.png | Bin 0 -> 1024 bytes themes/dark/icons/32.png | Bin 0 -> 480 bytes themes/dark/icons/384.png | Bin 0 -> 1363 bytes themes/dark/icons/48.png | Bin 0 -> 495 bytes themes/dark/icons/512.png | Bin 0 -> 1797 bytes themes/dark/icons/64.png | Bin 0 -> 532 bytes themes/dark/icons/96.png | Bin 0 -> 587 bytes themes/dark/icons/source.png | Bin 0 -> 6388 bytes themes/dark/theme.php | 17 + themes/defaut/defaut.php | 17 - themes/defaut/favicons/128.png | Bin 1940 -> 0 bytes themes/defaut/favicons/16.png | Bin 1647 -> 0 bytes themes/defaut/favicons/192.png | Bin 2112 -> 0 bytes themes/defaut/favicons/256.png | Bin 2353 -> 0 bytes themes/defaut/favicons/32.png | Bin 1685 -> 0 bytes themes/defaut/favicons/384.png | Bin 2873 -> 0 bytes themes/defaut/favicons/48.png | Bin 1718 -> 0 bytes themes/defaut/favicons/512.png | Bin 3528 -> 0 bytes themes/defaut/favicons/64.png | Bin 1768 -> 0 bytes themes/defaut/favicons/96.png | Bin 1848 -> 0 bytes themes/defaut/theme.php | 17 - themes/light/icons/128.png | Bin 0 -> 209 bytes themes/light/icons/16.png | Bin 0 -> 159 bytes themes/light/icons/192.png | Bin 0 -> 242 bytes themes/light/icons/256.png | Bin 0 -> 242 bytes themes/light/icons/32.png | Bin 0 -> 183 bytes themes/light/icons/384.png | Bin 0 -> 287 bytes themes/light/icons/48.png | Bin 0 -> 214 bytes themes/light/icons/512.png | Bin 0 -> 335 bytes themes/light/icons/64.png | Bin 0 -> 192 bytes themes/light/icons/96.png | Bin 0 -> 226 bytes themes/light/icons/source.png | Bin 0 -> 6386 bytes themes/light/theme.php | 17 + themes/parinux/favicons/128.png | Bin 1515 -> 0 bytes themes/parinux/favicons/16.png | Bin 1229 -> 0 bytes themes/parinux/favicons/192.png | Bin 1684 -> 0 bytes themes/parinux/favicons/256.png | Bin 1929 -> 0 bytes themes/parinux/favicons/32.png | Bin 1260 -> 0 bytes themes/parinux/favicons/384.png | Bin 2446 -> 0 bytes themes/parinux/favicons/48.png | Bin 1294 -> 0 bytes themes/parinux/favicons/512.png | Bin 3102 -> 0 bytes themes/parinux/favicons/64.png | Bin 1343 -> 0 bytes themes/parinux/favicons/96.png | Bin 1422 -> 0 bytes themes/parinux/icons/128.png | Bin 0 -> 209 bytes themes/parinux/icons/16.png | Bin 0 -> 159 bytes themes/parinux/icons/192.png | Bin 0 -> 242 bytes themes/parinux/icons/256.png | Bin 0 -> 242 bytes themes/parinux/icons/32.png | Bin 0 -> 183 bytes themes/parinux/icons/384.png | Bin 0 -> 287 bytes themes/parinux/icons/48.png | Bin 0 -> 214 bytes themes/parinux/icons/512.png | Bin 0 -> 335 bytes themes/parinux/icons/64.png | Bin 0 -> 192 bytes themes/parinux/icons/96.png | Bin 0 -> 226 bytes themes/parinux/icons/source.png | Bin 0 -> 6414 bytes themes/parinux/parinux.php | 17 - themes/parinux/theme.php | 20 +- themes/resize.php | 31 + ubuntu/.gitignore | 2 - ubuntu/site/.bowerrc | 3 - ubuntu/site/.gitignore | 3 - ubuntu/site/_config.yml | 20 - ubuntu/site/_includes/footer.html | 12 - ubuntu/site/_includes/head.html | 17 - ubuntu/site/_includes/header.html | 7 - ubuntu/site/_layouts/default.html | 13 - ubuntu/site/_sass/_layout.scss | 75 - ubuntu/site/_sass/_syntax-highlighting.scss | 66 - ubuntu/site/about.md | 14 - ubuntu/site/bower.json | 36 - ubuntu/site/css/ubuntu-fontface-site.scss | 6 - ubuntu/site/index.html | 67 - ubuntu/ubuntu.min.css | 2 +- 88 files changed, 1840 insertions(+), 1972 deletions(-) create mode 100755 .gitignore rename options.inc.php => config.inc.php (51%) create mode 100644 style.min.css create mode 100755 temp/.gitkeep delete mode 100644 temp/6MBFnPdqJOHR6SrkUx5hTlzXLuNkt96TFSTtbmnLkyyuvB8Feu.png delete mode 100755 temp/UoD3X0SUSLDF4K8V67igQozAaw7fOTStC8IO5gcMLd3OyW1r0b.png create mode 100644 themes/dark/icons/128.png create mode 100644 themes/dark/icons/16.png create mode 100644 themes/dark/icons/192.png create mode 100644 themes/dark/icons/256.png create mode 100644 themes/dark/icons/32.png create mode 100644 themes/dark/icons/384.png create mode 100644 themes/dark/icons/48.png create mode 100644 themes/dark/icons/512.png create mode 100644 themes/dark/icons/64.png create mode 100644 themes/dark/icons/96.png create mode 100644 themes/dark/icons/source.png create mode 100755 themes/dark/theme.php delete mode 100644 themes/defaut/defaut.php delete mode 100755 themes/defaut/favicons/128.png delete mode 100755 themes/defaut/favicons/16.png delete mode 100755 themes/defaut/favicons/192.png delete mode 100755 themes/defaut/favicons/256.png delete mode 100755 themes/defaut/favicons/32.png delete mode 100755 themes/defaut/favicons/384.png delete mode 100755 themes/defaut/favicons/48.png delete mode 100755 themes/defaut/favicons/512.png delete mode 100755 themes/defaut/favicons/64.png delete mode 100755 themes/defaut/favicons/96.png delete mode 100644 themes/defaut/theme.php create mode 100644 themes/light/icons/128.png create mode 100644 themes/light/icons/16.png create mode 100644 themes/light/icons/192.png create mode 100644 themes/light/icons/256.png create mode 100644 themes/light/icons/32.png create mode 100644 themes/light/icons/384.png create mode 100644 themes/light/icons/48.png create mode 100644 themes/light/icons/512.png create mode 100644 themes/light/icons/64.png create mode 100644 themes/light/icons/96.png create mode 100644 themes/light/icons/source.png create mode 100755 themes/light/theme.php delete mode 100755 themes/parinux/favicons/128.png delete mode 100755 themes/parinux/favicons/16.png delete mode 100755 themes/parinux/favicons/192.png delete mode 100755 themes/parinux/favicons/256.png delete mode 100755 themes/parinux/favicons/32.png delete mode 100755 themes/parinux/favicons/384.png delete mode 100755 themes/parinux/favicons/48.png delete mode 100755 themes/parinux/favicons/512.png delete mode 100755 themes/parinux/favicons/64.png delete mode 100755 themes/parinux/favicons/96.png create mode 100644 themes/parinux/icons/128.png create mode 100644 themes/parinux/icons/16.png create mode 100644 themes/parinux/icons/192.png create mode 100644 themes/parinux/icons/256.png create mode 100644 themes/parinux/icons/32.png create mode 100644 themes/parinux/icons/384.png create mode 100644 themes/parinux/icons/48.png create mode 100644 themes/parinux/icons/512.png create mode 100644 themes/parinux/icons/64.png create mode 100644 themes/parinux/icons/96.png create mode 100644 themes/parinux/icons/source.png delete mode 100644 themes/parinux/parinux.php mode change 100644 => 100755 themes/parinux/theme.php create mode 100755 themes/resize.php delete mode 100755 ubuntu/.gitignore delete mode 100755 ubuntu/site/.bowerrc delete mode 100755 ubuntu/site/.gitignore delete mode 100755 ubuntu/site/_config.yml delete mode 100755 ubuntu/site/_includes/footer.html delete mode 100755 ubuntu/site/_includes/head.html delete mode 100755 ubuntu/site/_includes/header.html delete mode 100755 ubuntu/site/_layouts/default.html delete mode 100755 ubuntu/site/_sass/_layout.scss delete mode 100755 ubuntu/site/_sass/_syntax-highlighting.scss delete mode 100755 ubuntu/site/about.md delete mode 100755 ubuntu/site/bower.json delete mode 100755 ubuntu/site/css/ubuntu-fontface-site.scss delete mode 100755 ubuntu/site/index.html diff --git a/.gitignore b/.gitignore new file mode 100755 index 0000000..727bc05 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.directory diff --git a/README.md b/README.md index 1d401a4..78ed5da 100755 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# ![Logo](themes/defaut/favicons/32.png) Générateur de codes QR +# ![](themes/dark/favicons/32.png) LibreQR ## Présentation @@ -10,12 +10,11 @@ Une instance de ce service est disponible à l'adresse [https://qr.antopie.org]( ## Fonctionnement -Le Générateur de codes QR inclus un plugin [OpenSearch](https://developer.mozilla.org/docs/Web/OpenSearch), ce qui permet de l'ajouter comme moteur de recherche dans Firefox. -Vous pouvez ainsi générer un code QR directement depuis la barre de recherche. +LibreQR inclus un plugin [OpenSearch](https://developer.mozilla.org/docs/Web/OpenSearch), ce qui permet de l'ajouter comme moteur de recherche dans Firefox et de sauvegarder vos paramètres. +Vous pouvez ainsi générer un code QR directement depuis la barre de recherche avec les réglages de LibreQR utilisés lors de l'ajout comme moteur de recherche. Un [WebManifest](https://developer.mozilla.org/docs/Web/Manifest) est également inclus, ce qui permet de mieux l'intégrer au système via Fennec (Firefox Android) ou Chromium. - ## Installation ### Générique @@ -26,7 +25,9 @@ Placez ce code source dans un serveur Web avec PHP, tout simplement. ### YunoHost -J'ai créé un [paquet](https://code.antopie.org/miraty/qr_ynh/) [YunoHost](https://yunohost.org/). +J'ai créé un [paquet](https://code.antopie.org/miraty/qr_ynh/) pour [YunoHost](https://yunohost.org/). + +Vous pouvez l'installer depuis l'interface d'administration ou avec cette commande : ``` sudo yunohost app install https://code.antopie.org/miraty/qr_ynh/ @@ -36,18 +37,28 @@ sudo yunohost app install https://code.antopie.org/miraty/qr_ynh/ ### Changer de thème -Dans options.inc.php, donnez à $theme le nom du thème voulu. +Dans config.inc.php, donnez à $theme le nom du thème voulu. -Par défaut, deux thèmes sont proposés : +Par défaut, trois thèmes sont proposés : -* defaut, le thème par défaut, sombre. Il est utilisé ici : -* parinux, un thème bleu, créé pour [Bastet](https://bastet.parinux.org/), le chaton de [Parinux](https://parinux.org/). Il est utilisé ici : +* dark, le thème par défaut, sombre. Il est utilisé ici : +* light, thème clair +* parinux, un thème bleu, créé pour [Bastet](https://bastet.parinux.org/), le CHATON de [Parinux](https://parinux.org/). Il est utilisé ici : ### Créer un thème -* Copiez themes/defaut vers themes/[nom de votre thème] -* Depuis ce nouveau dossier, créez les icônes dans favicons/[longueur du côté de l'icone].png -* Complétez theme.php en fonctions des favicons créées précédemment et des couleurs CSS voulues dans l'interface +* Copiez themes/dark vers themes/[nom de votre thème] +* Complétez theme.php en fonction des couleurs CSS voulues dans l'interface +* Modifiez l'image source.png en fonction de votre thème + +* Pour générer automatiquement les icônes aux tailles correctes, utilisez + +``` +php themes/resize.php [nom de votre thème] +``` + +Cela nécessitera d'avoir installé [ImageMagick](https://imagemagick.org) et +[pngquant](https://pngquant.org). ## Bibliothèques tierces @@ -61,8 +72,8 @@ Ce code source inclus : [AGPLv3+](https://code.antopie.org/miraty/qr/src/branch/master/LICENSE) -Ce générateur de codes QR est un logiciel libre ; vous pouvez le diffuser et le modifier suivant les termes de la GNU Affero General Public License telle que publiée par la Free Software Foundation ; soit la version 3 de cette licence, soit (à votre convenance) une version ultérieure. +LibreQR est un logiciel libre ; vous pouvez le diffuser et le modifier suivant les termes de la GNU Affero General Public License telle que publiée par la Free Software Foundation ; soit la version 3 de cette licence, soit (à votre convenance) une version ultérieure. -Ce générateur de codes QR est diffusé dans l’espoir qu’il sera utile, mais SANS AUCUNE GARANTIE ; sans même une garantie implicite de COMMERCIALISATION ou d’ADÉQUATION À UN USAGE PARTICULIER. Voyez la GNU Affero General Public License pour plus de détails. +LibreQR est diffusé dans l’espoir qu’il sera utile, mais SANS AUCUNE GARANTIE ; sans même une garantie implicite de COMMERCIALISATION ou d’ADÉQUATION À UN USAGE PARTICULIER. Voyez la GNU Affero General Public License pour plus de détails. Vous devriez avoir reçu une copie de la GNU Affero General Public License avec ce code. Sinon, consultez diff --git a/aide.svg b/aide.svg index b6cba09..b57a54f 100755 --- a/aide.svg +++ b/aide.svg @@ -2,8 +2,8 @@ - " stroke-width="2" cx="12" cy="12" r="10"> - "> + " stroke-width="2" cx="12" cy="12" r="10"> + "> diff --git a/options.inc.php b/config.inc.php similarity index 51% rename from options.inc.php rename to config.inc.php index 44386bf..f062654 100755 --- a/options.inc.php +++ b/config.inc.php @@ -1,28 +1,24 @@ getFilename() != "." AND $listeCodesQR->getFilename() != ".." AND $listeCodesQR->getFilename() != "UoD3X0SUSLDF4K8V67igQozAaw7fOTStC8IO5gcMLd3OyW1r0b.png") { + if ($listeCodesQR->getFilename() != "." AND $listeCodesQR->getFilename() != ".." AND $listeCodesQR->getFilename() != ".gitkeep") { if ((time() - filemtime("temp/" . $listeCodesQR->getFilename())) > $tempsDeSuppression) { // Si le temps actuel (en heure Posix) moins la date de dernière modification de l'image est supérieur à la durée de vie demandée de l'image unlink("temp/" . $listeCodesQR->getFilename()); // Alors supprimer cette image } } } } - - -?> diff --git a/index.php b/index.php index b62e830..1efa567 100755 --- a/index.php +++ b/index.php @@ -1,242 +1,303 @@ - + - + + + Générateur de codes QR - + - - - ' . "\n"; - } ?> + foreach($themeDimensionsIcons as $dimFav) { // Indique toutes les dimensions d'icones + echo ' ' . "\n"; + } ?> - + + +
-

Générateur de codes QR

+ + +
+

LibreQR

+

Générateur de codes QR

+
+
- +
- +
-
- - - - Vous pouvez encoder ce que vous voulez sous forme de texte. - -
- +
+ + - ?>
+
-
- -
- - - - Par combien les dimensions de l'image seront-elles multipliées ? - -
-
- "> -
-
- -
- - - - Nombre de pixels des bandes blanches autour du code QR. - -
-
- "> -
-
- -
- - -
-
- +
-
-
- - + $cheminImage = "temp/" . generateRandomString($fileNameLenght) . ".png"; + QRcode::png($_GET['txt'], $cheminImage, $_GET['redondancy'], $_GET['size'], $_GET['margin'], false, hexdec($_GET['bgColor']), hexdec($_GET['mainColor'])); + ?> + - -

- - + Un code QR contenant "<?php echo htmlspecialchars($_GET["' id="qrCode" src=""/> +
+ + ?> - - if (empty($_GET["texte"])) { // Si rien n'a été recherché ?> +
- Erreur : vous ne pouvez pas générer un code QR vide ! - - - -
- - Vous avez créé un code QR contenant : -
- -
- - -

- - - - - - -
- Qu'est-ce qu'un code QR ?
- Un code QR est une image en 2 dimensions dans laquelle est inscrite en binaire des informations textuelles.
- Un pixel blanc représente un 0 et un pixel noir représente un 1.
- Code QR sur Wikipédia -
- - +
+

Qu'est-ce qu'un code QR ?

+ Un code QR est un code-barres en 2 dimensions dans lequel est inscrit en binaire du texte. Il peut être décodé avec un appareil muni d'un capteur photo et d'un logiciel adéquat. + Code QR sur Wikipédia +
+
+ LibreQR 1.2.0 est un logiciel libre dont le code source est disponible + selon les termes de l'AGPLv3+. +
+
diff --git a/manifest.php b/manifest.php index 7e78eed..685593a 100755 --- a/manifest.php +++ b/manifest.php @@ -1,33 +1,28 @@ - + { "dir": "ltr", - "lang": "fr-FR", - "name": "Générateur de code QR", - "short_name": "Code QR", - "description": "Générez un code QR rapidement", - "start_url": "", - "scope": "", + "lang": "fr", + "name": "LibreQR", + "short_name": "LibreQR", + "description": "Générer un code QR rapidement", + "start_url": "", + "scope": "", "display": "standalone", - "theme_color": "", - "background_color": "", + "theme_color": "", + "background_color": "", "orientation": "portrait", "icons": [ - - { - "src": "themes//favicons/.png", - "sizes": "x", - "type": "image/png" - }, - - + { - "src": "themes//favicons/.png", - "sizes": "x", + "src": "themes//icons/.png", + "sizes": "x", + "type": "image/png" + }, + + { + "src": "themes//icons/.png", + "sizes": "x", "type": "image/png" } ] diff --git a/opensearch.php b/opensearch.php index 9d9833b..835b020 100755 --- a/opensearch.php +++ b/opensearch.php @@ -1,15 +1,15 @@ - + Générer un code QR Générez des codes QR depuis votre barre de recherche ou d'adresse ' . $cheminInstall . 'themes/' . $theme . '/favicons/' . $dimFav . '.png' . "\n"; + echo ' ' . $instPath . 'themes/' . $theme . '/icons/' . $dimFav . '.png' . "\n"; } ?> fr UTF-8 - - + + diff --git a/phpqrcode.php b/phpqrcode.php index c3afc9d..c2c92f0 100755 --- a/phpqrcode.php +++ b/phpqrcode.php @@ -34,19 +34,19 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ - - -/* - * Version: 1.1.4 - * Build: 2010100721 - */ - - - -//---- qrconst.php ----------------------------- - - - + + +/* + * Version: 1.1.4 + * Build: 2010100721 + */ + + + +//---- qrconst.php ----------------------------- + + + /* @@ -100,14 +100,14 @@ public static function set(&$srctab, $x, $y, $repl, $replLen = false) { $srctab[$y] = substr_replace($srctab[$y], ($replLen !== false)?substr($repl,0,$replLen):$repl, $x, ($replLen !== false)?$replLen:strlen($repl)); } - } - - - -//---- merged_config.php ----------------------------- - - - + } + + + +//---- merged_config.php ----------------------------- + + + /* * PHP QR Code encoder @@ -124,206 +124,206 @@ define('QR_DEFAULT_MASK', 2); // when QR_FIND_BEST_MASK === false define('QR_PNG_MAXIMUM_SIZE', 1024); // maximum allowed png image width (in pixels), tune to make sure GD and PHP can handle such big images - - - - -//---- qrtools.php ----------------------------- - - - - -/* - * PHP QR Code encoder - * - * Toolset, handy and debug utilites. - * - * PHP QR Code is distributed under LGPL 3 - * Copyright (C) 2010 Dominik Dzienia - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - class QRtools { - - //---------------------------------------------------------------------- - public static function binarize($frame) - { - $len = count($frame); - foreach ($frame as &$frameLine) { - - for($i=0; $i<$len; $i++) { - $frameLine[$i] = (ord($frameLine[$i])&1)?'1':'0'; - } - } - - return $frame; - } - - //---------------------------------------------------------------------- - public static function tcpdfBarcodeArray($code, $mode = 'QR,L', $tcPdfVersion = '4.5.037') - { - $barcode_array = array(); - - if (!is_array($mode)) - $mode = explode(',', $mode); - - $eccLevel = 'L'; - - if (count($mode) > 1) { - $eccLevel = $mode[1]; - } - - $qrTab = QRcode::text($code, false, $eccLevel); - $size = count($qrTab); - - $barcode_array['num_rows'] = $size; - $barcode_array['num_cols'] = $size; - $barcode_array['bcode'] = array(); - - foreach ($qrTab as $line) { - $arrAdd = array(); - foreach(str_split($line) as $char) - $arrAdd[] = ($char=='1')?1:0; - $barcode_array['bcode'][] = $arrAdd; - } - - return $barcode_array; - } - - //---------------------------------------------------------------------- - public static function clearCache() - { - self::$frames = array(); - } - - //---------------------------------------------------------------------- - public static function buildCache() - { - QRtools::markTime('before_build_cache'); - - $mask = new QRmask(); - for ($a=1; $a <= QRSPEC_VERSION_MAX; $a++) { - $frame = QRspec::newFrame($a); - if (QR_IMAGE) { - $fileName = QR_CACHE_DIR.'frame_'.$a.'.png'; - QRimage::png(self::binarize($frame), $fileName, 1, 0); - } - - $width = count($frame); - $bitMask = array_fill(0, $width, array_fill(0, $width, 0)); - for ($maskNo=0; $maskNo<8; $maskNo++) - $mask->makeMaskNo($maskNo, $width, $frame, $bitMask, true); - } - - QRtools::markTime('after_build_cache'); - } - - //---------------------------------------------------------------------- - public static function log($outfile, $err) - { - if (QR_LOG_DIR !== false) { - if ($err != '') { - if ($outfile !== false) { - file_put_contents(QR_LOG_DIR.basename($outfile).'-errors.txt', date('Y-m-d H:i:s').': '.$err, FILE_APPEND); - } else { - file_put_contents(QR_LOG_DIR.'errors.txt', date('Y-m-d H:i:s').': '.$err, FILE_APPEND); - } - } - } - } - - //---------------------------------------------------------------------- - public static function dumpMask($frame) - { - $width = count($frame); - for($y=0;$y<$width;$y++) { - for($x=0;$x<$width;$x++) { - echo ord($frame[$y][$x]).','; - } - } - } - - //---------------------------------------------------------------------- - public static function markTime($markerId) - { - list($usec, $sec) = explode(" ", microtime()); - $time = ((float)$usec + (float)$sec); - - if (!isset($GLOBALS['qr_time_bench'])) - $GLOBALS['qr_time_bench'] = array(); - - $GLOBALS['qr_time_bench'][$markerId] = $time; - } - - //---------------------------------------------------------------------- - public static function timeBenchmark() - { - self::markTime('finish'); - - $lastTime = 0; - $startTime = 0; - $p = 0; - - echo ' - - '; - - foreach($GLOBALS['qr_time_bench'] as $markerId=>$thisTime) { - if ($p > 0) { - echo ''; - } else { - $startTime = $thisTime; - } - - $p++; - $lastTime = $thisTime; - } - - echo ' - - -
BENCHMARK
till '.$markerId.': '.number_format($thisTime-$lastTime, 6).'s
TOTAL: '.number_format($lastTime-$startTime, 6).'s
'; - } - - public static function save($content, $filename_path) - { - try { - $handle = fopen($filename_path, "w"); - fwrite($handle, $content); - fclose($handle); - return true; - } catch (Exception $e) { - echo 'Exception reçue : ', $e->getMessage(), "\n"; - } - - } - - } - - //########################################################################## - - QRtools::markTime('start'); - - - - -//---- qrspec.php ----------------------------- - - - + + + + +//---- qrtools.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Toolset, handy and debug utilites. + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + class QRtools { + + //---------------------------------------------------------------------- + public static function binarize($frame) + { + $len = count($frame); + foreach ($frame as &$frameLine) { + + for($i=0; $i<$len; $i++) { + $frameLine[$i] = (ord($frameLine[$i])&1)?'1':'0'; + } + } + + return $frame; + } + + //---------------------------------------------------------------------- + public static function tcpdfBarcodeArray($code, $mode = 'QR,L', $tcPdfVersion = '4.5.037') + { + $barcode_array = array(); + + if (!is_array($mode)) + $mode = explode(',', $mode); + + $eccLevel = 'L'; + + if (count($mode) > 1) { + $eccLevel = $mode[1]; + } + + $qrTab = QRcode::text($code, false, $eccLevel); + $size = count($qrTab); + + $barcode_array['num_rows'] = $size; + $barcode_array['num_cols'] = $size; + $barcode_array['bcode'] = array(); + + foreach ($qrTab as $line) { + $arrAdd = array(); + foreach(str_split($line) as $char) + $arrAdd[] = ($char=='1')?1:0; + $barcode_array['bcode'][] = $arrAdd; + } + + return $barcode_array; + } + + //---------------------------------------------------------------------- + public static function clearCache() + { + self::$frames = array(); + } + + //---------------------------------------------------------------------- + public static function buildCache() + { + QRtools::markTime('before_build_cache'); + + $mask = new QRmask(); + for ($a=1; $a <= QRSPEC_VERSION_MAX; $a++) { + $frame = QRspec::newFrame($a); + if (QR_IMAGE) { + $fileName = QR_CACHE_DIR.'frame_'.$a.'.png'; + QRimage::png(self::binarize($frame), $fileName, 1, 0); + } + + $width = count($frame); + $bitMask = array_fill(0, $width, array_fill(0, $width, 0)); + for ($maskNo=0; $maskNo<8; $maskNo++) + $mask->makeMaskNo($maskNo, $width, $frame, $bitMask, true); + } + + QRtools::markTime('after_build_cache'); + } + + //---------------------------------------------------------------------- + public static function log($outfile, $err) + { + if (QR_LOG_DIR !== false) { + if ($err != '') { + if ($outfile !== false) { + file_put_contents(QR_LOG_DIR.basename($outfile).'-errors.txt', date('Y-m-d H:i:s').': '.$err, FILE_APPEND); + } else { + file_put_contents(QR_LOG_DIR.'errors.txt', date('Y-m-d H:i:s').': '.$err, FILE_APPEND); + } + } + } + } + + //---------------------------------------------------------------------- + public static function dumpMask($frame) + { + $width = count($frame); + for($y=0;$y<$width;$y++) { + for($x=0;$x<$width;$x++) { + echo ord($frame[$y][$x]).','; + } + } + } + + //---------------------------------------------------------------------- + public static function markTime($markerId) + { + list($usec, $sec) = explode(" ", microtime()); + $time = ((float)$usec + (float)$sec); + + if (!isset($GLOBALS['qr_time_bench'])) + $GLOBALS['qr_time_bench'] = array(); + + $GLOBALS['qr_time_bench'][$markerId] = $time; + } + + //---------------------------------------------------------------------- + public static function timeBenchmark() + { + self::markTime('finish'); + + $lastTime = 0; + $startTime = 0; + $p = 0; + + echo ' + + '; + + foreach($GLOBALS['qr_time_bench'] as $markerId=>$thisTime) { + if ($p > 0) { + echo ''; + } else { + $startTime = $thisTime; + } + + $p++; + $lastTime = $thisTime; + } + + echo ' + + +
BENCHMARK
till '.$markerId.': '.number_format($thisTime-$lastTime, 6).'s
TOTAL: '.number_format($lastTime-$startTime, 6).'s
'; + } + + public static function save($content, $filename_path) + { + try { + $handle = fopen($filename_path, "w"); + fwrite($handle, $content); + fclose($handle); + return true; + } catch (Exception $e) { + echo 'Exception reçue : ', $e->getMessage(), "\n"; + } + + } + + } + + //########################################################################## + + QRtools::markTime('start'); + + + + +//---- qrspec.php ----------------------------- + + + /* * PHP QR Code encoder @@ -915,129 +915,129 @@ public static function rsDataLength($spec) { return ($spec[0] * $spec[1]) + ($spec[3] * $spec[4]); } public static function rsEccLength($spec) { return ($spec[0] + $spec[3]) * $spec[2]; } - } - - - -//---- qrimage.php ----------------------------- - - - - -/* - * PHP QR Code encoder - * - * Image output of code using GD2 - * - * PHP QR Code is distributed under LGPL 3 - * Copyright (C) 2010 Dominik Dzienia - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - define('QR_IMAGE', true); - - class QRimage { - - //---------------------------------------------------------------------- - public static function png($frame, $filename = false, $pixelPerPoint = 4, $outerFrame = 4,$saveandprint=FALSE, $back_color, $fore_color) - { - $image = self::image($frame, $pixelPerPoint, $outerFrame, $back_color, $fore_color); - - if ($filename === false) { - Header("Content-type: image/png"); - ImagePng($image); - } else { - if($saveandprint===TRUE){ - ImagePng($image, $filename); - header("Content-type: image/png"); - ImagePng($image); - }else{ - ImagePng($image, $filename); - } - } - - ImageDestroy($image); - } - - //---------------------------------------------------------------------- - public static function jpg($frame, $filename = false, $pixelPerPoint = 8, $outerFrame = 4, $q = 85) - { - $image = self::image($frame, $pixelPerPoint, $outerFrame); - - if ($filename === false) { - Header("Content-type: image/jpeg"); - ImageJpeg($image, null, $q); - } else { - ImageJpeg($image, $filename, $q); - } - - ImageDestroy($image); - } - - //---------------------------------------------------------------------- - private static function image($frame, $pixelPerPoint = 4, $outerFrame = 4, $back_color = 0xFFFFFF, $fore_color = 0x000000) - { - $h = count($frame); - $w = strlen($frame[0]); - - $imgW = $w + 2*$outerFrame; - $imgH = $h + 2*$outerFrame; - - $base_image =ImageCreate($imgW, $imgH); - - // convert a hexadecimal color code into decimal format (red = 255 0 0, green = 0 255 0, blue = 0 0 255) - $r1 = round((($fore_color & 0xFF0000) >> 16), 5); - $g1 = round((($fore_color & 0x00FF00) >> 8), 5); - $b1 = round(($fore_color & 0x0000FF), 5); - - // convert a hexadecimal color code into decimal format (red = 255 0 0, green = 0 255 0, blue = 0 0 255) - $r2 = round((($back_color & 0xFF0000) >> 16), 5); - $g2 = round((($back_color & 0x00FF00) >> 8), 5); - $b2 = round(($back_color & 0x0000FF), 5); - - - - $col[0] = ImageColorAllocate($base_image, $r2, $g2, $b2); - $col[1] = ImageColorAllocate($base_image, $r1, $g1, $b1); - - imagefill($base_image, 0, 0, $col[0]); - - for($y=0; $y<$h; $y++) { - for($x=0; $x<$w; $x++) { - if ($frame[$y][$x] == '1') { - ImageSetPixel($base_image,$x+$outerFrame,$y+$outerFrame,$col[1]); - } - } - } - - $target_image =ImageCreate($imgW * $pixelPerPoint, $imgH * $pixelPerPoint); - ImageCopyResized($target_image, $base_image, 0, 0, 0, 0, $imgW * $pixelPerPoint, $imgH * $pixelPerPoint, $imgW, $imgH); - ImageDestroy($base_image); - - return $target_image; - } - } - - - - -//---- qrinput.php ----------------------------- - - - + } + + + +//---- qrimage.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Image output of code using GD2 + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + define('QR_IMAGE', true); + + class QRimage { + + //---------------------------------------------------------------------- + public static function png($frame, $filename = false, $pixelPerPoint = 4, $outerFrame = 4,$saveandprint=FALSE, $back_color, $fore_color) + { + $image = self::image($frame, $pixelPerPoint, $outerFrame, $back_color, $fore_color); + + if ($filename === false) { + Header("Content-type: image/png"); + ImagePng($image); + } else { + if($saveandprint===TRUE){ + ImagePng($image, $filename); + header("Content-type: image/png"); + ImagePng($image); + }else{ + ImagePng($image, $filename); + } + } + + ImageDestroy($image); + } + + //---------------------------------------------------------------------- + public static function jpg($frame, $filename = false, $pixelPerPoint = 8, $outerFrame = 4, $q = 85) + { + $image = self::image($frame, $pixelPerPoint, $outerFrame); + + if ($filename === false) { + Header("Content-type: image/jpeg"); + ImageJpeg($image, null, $q); + } else { + ImageJpeg($image, $filename, $q); + } + + ImageDestroy($image); + } + + //---------------------------------------------------------------------- + private static function image($frame, $pixelPerPoint = 4, $outerFrame = 4, $back_color = 0xFFFFFF, $fore_color = 0x000000) + { + $h = count($frame); + $w = strlen($frame[0]); + + $imgW = $w + 2*$outerFrame; + $imgH = $h + 2*$outerFrame; + + $base_image =ImageCreate($imgW, $imgH); + + // convert a hexadecimal color code into decimal format (red = 255 0 0, green = 0 255 0, blue = 0 0 255) + $r1 = round((($fore_color & 0xFF0000) >> 16), 5); + $g1 = round((($fore_color & 0x00FF00) >> 8), 5); + $b1 = round(($fore_color & 0x0000FF), 5); + + // convert a hexadecimal color code into decimal format (red = 255 0 0, green = 0 255 0, blue = 0 0 255) + $r2 = round((($back_color & 0xFF0000) >> 16), 5); + $g2 = round((($back_color & 0x00FF00) >> 8), 5); + $b2 = round(($back_color & 0x0000FF), 5); + + + + $col[0] = ImageColorAllocate($base_image, $r2, $g2, $b2); + $col[1] = ImageColorAllocate($base_image, $r1, $g1, $b1); + + imagefill($base_image, 0, 0, $col[0]); + + for($y=0; $y<$h; $y++) { + for($x=0; $x<$w; $x++) { + if ($frame[$y][$x] == '1') { + ImageSetPixel($base_image,$x+$outerFrame,$y+$outerFrame,$col[1]); + } + } + } + + $target_image =ImageCreate($imgW * $pixelPerPoint, $imgH * $pixelPerPoint); + ImageCopyResized($target_image, $base_image, 0, 0, 0, 0, $imgW * $pixelPerPoint, $imgH * $pixelPerPoint, $imgW, $imgH); + ImageDestroy($base_image); + + return $target_image; + } + } + + + + +//---- qrinput.php ----------------------------- + + + /* * PHP QR Code encoder @@ -1763,14 +1763,14 @@ } - - - - -//---- qrbitstream.php ----------------------------- - - - + + + + +//---- qrbitstream.php ----------------------------- + + + /* * PHP QR Code encoder @@ -1951,14 +1951,14 @@ } } - - - - -//---- qrsplit.php ----------------------------- - - - + + + + +//---- qrsplit.php ----------------------------- + + + /* * PHP QR Code encoder @@ -2269,14 +2269,14 @@ return $split->splitString(); } - } - - - -//---- qrrscode.php ----------------------------- - - - + } + + + +//---- qrrscode.php ----------------------------- + + + /* * PHP QR Code encoder @@ -2486,14 +2486,14 @@ return $rs; } - } - - - -//---- qrmask.php ----------------------------- - - - + } + + + +//---- qrmask.php ----------------------------- + + + /* * PHP QR Code encoder @@ -2822,804 +2822,804 @@ //---------------------------------------------------------------------- } - - - - -//---- qrencode.php ----------------------------- - - - - -/* - * PHP QR Code encoder - * - * Main encoder classes. - * - * Based on libqrencode C library distributed under LGPL 2.1 - * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi - * - * PHP QR Code is distributed under LGPL 3 - * Copyright (C) 2010 Dominik Dzienia - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - class QRrsblock { - public $dataLength; - public $data = array(); - public $eccLength; - public $ecc = array(); - - public function __construct($dl, $data, $el, &$ecc, QRrsItem $rs) - { - $rs->encode_rs_char($data, $ecc); - - $this->dataLength = $dl; - $this->data = $data; - $this->eccLength = $el; - $this->ecc = $ecc; - } - }; - - //########################################################################## - - class QRrawcode { - public $version; - public $datacode = array(); - public $ecccode = array(); - public $blocks; - public $rsblocks = array(); //of RSblock - public $count; - public $dataLength; - public $eccLength; - public $b1; - - //---------------------------------------------------------------------- - public function __construct(QRinput $input) - { - $spec = array(0,0,0,0,0); - - $this->datacode = $input->getByteStream(); - if(is_null($this->datacode)) { - throw new Exception('null imput string'); - } - - QRspec::getEccSpec($input->getVersion(), $input->getErrorCorrectionLevel(), $spec); - - $this->version = $input->getVersion(); - $this->b1 = QRspec::rsBlockNum1($spec); - $this->dataLength = QRspec::rsDataLength($spec); - $this->eccLength = QRspec::rsEccLength($spec); - $this->ecccode = array_fill(0, $this->eccLength, 0); - $this->blocks = QRspec::rsBlockNum($spec); - - $ret = $this->init($spec); - if($ret < 0) { - throw new Exception('block alloc error'); - return null; - } - - $this->count = 0; - } - - //---------------------------------------------------------------------- - public function init(array $spec) - { - $dl = QRspec::rsDataCodes1($spec); - $el = QRspec::rsEccCodes1($spec); - $rs = QRrs::init_rs(8, 0x11d, 0, 1, $el, 255 - $dl - $el); - - - $blockNo = 0; - $dataPos = 0; - $eccPos = 0; - for($i=0; $iecccode,$eccPos); - $this->rsblocks[$blockNo] = new QRrsblock($dl, array_slice($this->datacode, $dataPos), $el, $ecc, $rs); - $this->ecccode = array_merge(array_slice($this->ecccode,0, $eccPos), $ecc); - - $dataPos += $dl; - $eccPos += $el; - $blockNo++; - } - - if(QRspec::rsBlockNum2($spec) == 0) - return 0; - - $dl = QRspec::rsDataCodes2($spec); - $el = QRspec::rsEccCodes2($spec); - $rs = QRrs::init_rs(8, 0x11d, 0, 1, $el, 255 - $dl - $el); - - if($rs == NULL) return -1; - - for($i=0; $iecccode,$eccPos); - $this->rsblocks[$blockNo] = new QRrsblock($dl, array_slice($this->datacode, $dataPos), $el, $ecc, $rs); - $this->ecccode = array_merge(array_slice($this->ecccode,0, $eccPos), $ecc); - - $dataPos += $dl; - $eccPos += $el; - $blockNo++; - } - - return 0; - } - - //---------------------------------------------------------------------- - public function getCode() - { - $ret; - - if($this->count < $this->dataLength) { - $row = $this->count % $this->blocks; - $col = $this->count / $this->blocks; - if($col >= $this->rsblocks[0]->dataLength) { - $row += $this->b1; - } - $ret = $this->rsblocks[$row]->data[$col]; - } else if($this->count < $this->dataLength + $this->eccLength) { - $row = ($this->count - $this->dataLength) % $this->blocks; - $col = ($this->count - $this->dataLength) / $this->blocks; - $ret = $this->rsblocks[$row]->ecc[$col]; - } else { - return 0; - } - $this->count++; - - return $ret; - } - } - - //########################################################################## - - class QRcode { - - public $version; - public $width; - public $data; - - //---------------------------------------------------------------------- - public function encodeMask(QRinput $input, $mask) - { - if($input->getVersion() < 0 || $input->getVersion() > QRSPEC_VERSION_MAX) { - throw new Exception('wrong version'); - } - if($input->getErrorCorrectionLevel() > QR_ECLEVEL_H) { - throw new Exception('wrong level'); - } - - $raw = new QRrawcode($input); - - QRtools::markTime('after_raw'); - - $version = $raw->version; - $width = QRspec::getWidth($version); - $frame = QRspec::newFrame($version); - - $filler = new FrameFiller($width, $frame); - if(is_null($filler)) { - return NULL; - } - - // inteleaved data and ecc codes - for($i=0; $i<$raw->dataLength + $raw->eccLength; $i++) { - $code = $raw->getCode(); - $bit = 0x80; - for($j=0; $j<8; $j++) { - $addr = $filler->next(); - $filler->setFrameAt($addr, 0x02 | (($bit & $code) != 0)); - $bit = $bit >> 1; - } - } - - QRtools::markTime('after_filler'); - - unset($raw); - - // remainder bits - $j = QRspec::getRemainder($version); - for($i=0; $i<$j; $i++) { - $addr = $filler->next(); - $filler->setFrameAt($addr, 0x02); - } - - $frame = $filler->frame; - unset($filler); - - - // masking - $maskObj = new QRmask(); - if($mask < 0) { - - if (QR_FIND_BEST_MASK) { - $masked = $maskObj->mask($width, $frame, $input->getErrorCorrectionLevel()); - } else { - $masked = $maskObj->makeMask($width, $frame, (intval(QR_DEFAULT_MASK) % 8), $input->getErrorCorrectionLevel()); - } - } else { - $masked = $maskObj->makeMask($width, $frame, $mask, $input->getErrorCorrectionLevel()); - } - - if($masked == NULL) { - return NULL; - } - - QRtools::markTime('after_mask'); - - $this->version = $version; - $this->width = $width; - $this->data = $masked; - - return $this; - } - - //---------------------------------------------------------------------- - public function encodeInput(QRinput $input) - { - return $this->encodeMask($input, -1); - } - - //---------------------------------------------------------------------- - public function encodeString8bit($string, $version, $level) - { - if($string == NULL) { - throw new Exception('empty string!'); - return NULL; - } - - $input = new QRinput($version, $level); - if($input == NULL) return NULL; - - $ret = $input->append($input, QR_MODE_8, strlen($string), str_split($string)); - if($ret < 0) { - unset($input); - return NULL; - } - return $this->encodeInput($input); - } - - //---------------------------------------------------------------------- - public function encodeString($string, $version, $level, $hint, $casesensitive) - { - - if($hint != QR_MODE_8 && $hint != QR_MODE_KANJI) { - throw new Exception('bad hint'); - return NULL; - } - - $input = new QRinput($version, $level); - if($input == NULL) return NULL; - - $ret = QRsplit::splitStringToQRinput($string, $input, $hint, $casesensitive); - if($ret < 0) { - return NULL; - } - - return $this->encodeInput($input); - } - - //---------------------------------------------------------------------- - public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false, $back_color = 0xFFFFFF, $fore_color = 0x000000) - { - $enc = QRencode::factory($level, $size, $margin, $back_color, $fore_color); - return $enc->encodePNG($text, $outfile, $saveandprint=false); - } - - //---------------------------------------------------------------------- - public static function text($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4) - { - $enc = QRencode::factory($level, $size, $margin); - return $enc->encode($text, $outfile); - } - - //---------------------------------------------------------------------- - public static function eps($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false, $back_color = 0xFFFFFF, $fore_color = 0x000000, $cmyk = false) - { - $enc = QRencode::factory($level, $size, $margin, $back_color, $fore_color, $cmyk); - return $enc->encodeEPS($text, $outfile, $saveandprint=false); - } - - //---------------------------------------------------------------------- - public static function svg($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false, $back_color = 0xFFFFFF, $fore_color = 0x000000) - { - $enc = QRencode::factory($level, $size, $margin, $back_color, $fore_color); - return $enc->encodeSVG($text, $outfile, $saveandprint=false); - } - - //---------------------------------------------------------------------- - public static function raw($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4) - { - $enc = QRencode::factory($level, $size, $margin); - return $enc->encodeRAW($text, $outfile); - } - } - - //########################################################################## - - class FrameFiller { - - public $width; - public $frame; - public $x; - public $y; - public $dir; - public $bit; - - //---------------------------------------------------------------------- - public function __construct($width, &$frame) - { - $this->width = $width; - $this->frame = $frame; - $this->x = $width - 1; - $this->y = $width - 1; - $this->dir = -1; - $this->bit = -1; - } - - //---------------------------------------------------------------------- - public function setFrameAt($at, $val) - { - $this->frame[$at['y']][$at['x']] = chr($val); - } - - //---------------------------------------------------------------------- - public function getFrameAt($at) - { - return ord($this->frame[$at['y']][$at['x']]); - } - - //---------------------------------------------------------------------- - public function next() - { - do { - - if($this->bit == -1) { - $this->bit = 0; - return array('x'=>$this->x, 'y'=>$this->y); - } - - $x = $this->x; - $y = $this->y; - $w = $this->width; - - if($this->bit == 0) { - $x--; - $this->bit++; - } else { - $x++; - $y += $this->dir; - $this->bit--; - } - - if($this->dir < 0) { - if($y < 0) { - $y = 0; - $x -= 2; - $this->dir = 1; - if($x == 6) { - $x--; - $y = 9; - } - } - } else { - if($y == $w) { - $y = $w - 1; - $x -= 2; - $this->dir = -1; - if($x == 6) { - $x--; - $y -= 8; - } - } - } - if($x < 0 || $y < 0) return null; - - $this->x = $x; - $this->y = $y; - - } while(ord($this->frame[$y][$x]) & 0x80); - - return array('x'=>$x, 'y'=>$y); - } - - } ; - - //########################################################################## - - class QRencode { - - public $casesensitive = true; - public $eightbit = false; - - public $version = 0; - public $size = 3; - public $margin = 4; - public $back_color = 0xFFFFFF; - public $fore_color = 0x000000; - - public $structured = 0; // not supported yet - - public $level = QR_ECLEVEL_L; - public $hint = QR_MODE_8; - - //---------------------------------------------------------------------- - public static function factory($level = QR_ECLEVEL_L, $size = 3, $margin = 4, $back_color = 0xFFFFFF, $fore_color = 0x000000, $cmyk = false) - { - $enc = new QRencode(); - $enc->size = $size; - $enc->margin = $margin; - $enc->fore_color = $fore_color; - $enc->back_color = $back_color; - $enc->cmyk = $cmyk; - - switch ($level.'') { - case '0': - case '1': - case '2': - case '3': - $enc->level = $level; - break; - case 'l': - case 'L': - $enc->level = QR_ECLEVEL_L; - break; - case 'm': - case 'M': - $enc->level = QR_ECLEVEL_M; - break; - case 'q': - case 'Q': - $enc->level = QR_ECLEVEL_Q; - break; - case 'h': - case 'H': - $enc->level = QR_ECLEVEL_H; - break; - } - - return $enc; - } - - //---------------------------------------------------------------------- - public function encodeRAW($intext, $outfile = false) - { - $code = new QRcode(); - - if($this->eightbit) { - $code->encodeString8bit($intext, $this->version, $this->level); - } else { - $code->encodeString($intext, $this->version, $this->level, $this->hint, $this->casesensitive); - } - - return $code->data; - } - - //---------------------------------------------------------------------- - public function encode($intext, $outfile = false) - { - $code = new QRcode(); - - if($this->eightbit) { - $code->encodeString8bit($intext, $this->version, $this->level); - } else { - $code->encodeString($intext, $this->version, $this->level, $this->hint, $this->casesensitive); - } - - QRtools::markTime('after_encode'); - - if ($outfile!== false) { - file_put_contents($outfile, join("\n", QRtools::binarize($code->data))); - } else { - return QRtools::binarize($code->data); - } - } - - //---------------------------------------------------------------------- - public function encodePNG($intext, $outfile = false,$saveandprint=false) - { - try { - - ob_start(); - $tab = $this->encode($intext); - $err = ob_get_contents(); - ob_end_clean(); - - if ($err != '') - QRtools::log($outfile, $err); - - $maxSize = (int)(QR_PNG_MAXIMUM_SIZE / (count($tab)+2*$this->margin)); - - QRimage::png($tab, $outfile, min(max(1, $this->size), $maxSize), $this->margin,$saveandprint, $this->back_color, $this->fore_color); - - } catch (Exception $e) { - - QRtools::log($outfile, $e->getMessage()); - - } - } - - //---------------------------------------------------------------------- - public function encodeEPS($intext, $outfile = false,$saveandprint=false) - { - try { - - ob_start(); - $tab = $this->encode($intext); - $err = ob_get_contents(); - ob_end_clean(); - - if ($err != '') - QRtools::log($outfile, $err); - - $maxSize = (int)(QR_PNG_MAXIMUM_SIZE / (count($tab)+2*$this->margin)); - - QRvect::eps($tab, $outfile, min(max(1, $this->size), $maxSize), $this->margin,$saveandprint, $this->back_color, $this->fore_color, $this->cmyk); - - } catch (Exception $e) { - - QRtools::log($outfile, $e->getMessage()); - - } - } - - //---------------------------------------------------------------------- - public function encodeSVG($intext, $outfile = false,$saveandprint=false) - { - try { - - ob_start(); - $tab = $this->encode($intext); - $err = ob_get_contents(); - ob_end_clean(); - - if ($err != '') - QRtools::log($outfile, $err); - - $maxSize = (int)(QR_PNG_MAXIMUM_SIZE / (count($tab)+2*$this->margin)); - - QRvect::svg($tab, $outfile, min(max(1, $this->size), $maxSize), $this->margin,$saveandprint, $this->back_color, $this->fore_color); - - } catch (Exception $e) { - - QRtools::log($outfile, $e->getMessage()); - - } - } - } - - - - -//---- qrvect.php ----------------------------- - - - - -/* - * PHP QR Code encoder - * - * Image output of code using GD2 - * - * PHP QR Code is distributed under LGPL 3 - * Copyright (C) 2010 Dominik Dzienia - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - define('QR_VECT', true); - - class QRvect { - - //---------------------------------------------------------------------- - public static function eps($frame, $filename = false, $pixelPerPoint = 4, $outerFrame = 4,$saveandprint=FALSE, $back_color = 0xFFFFFF, $fore_color = 0x000000, $cmyk = false) - { - $vect = self::vectEPS($frame, $pixelPerPoint, $outerFrame, $back_color, $fore_color, $cmyk); - - if ($filename === false) { - header("Content-Type: application/postscript"); - header('Content-Disposition: filename="qrcode.eps"'); - echo $vect; - } else { - if($saveandprint===TRUE){ - QRtools::save($vect, $filename); - header("Content-Type: application/postscript"); - header('Content-Disposition: filename="qrcode.eps"'); - echo $vect; - }else{ - QRtools::save($vect, $filename); - } - } - } - - - //---------------------------------------------------------------------- - private static function vectEPS($frame, $pixelPerPoint = 4, $outerFrame = 4, $back_color = 0xFFFFFF, $fore_color = 0x000000, $cmyk = false) - { - $h = count($frame); - $w = strlen($frame[0]); - - $imgW = $w + 2*$outerFrame; - $imgH = $h + 2*$outerFrame; - - if ($cmyk) - { - // convert color value into decimal eps format - $c = round((($fore_color & 0xFF000000) >> 16) / 255, 5); - $m = round((($fore_color & 0x00FF0000) >> 16) / 255, 5); - $y = round((($fore_color & 0x0000FF00) >> 8) / 255, 5); - $k = round(($fore_color & 0x000000FF) / 255, 5); - $fore_color_string = $c.' '.$m.' '.$y.' '.$k.' setcmykcolor'."\n"; - - // convert color value into decimal eps format - $c = round((($back_color & 0xFF000000) >> 16) / 255, 5); - $m = round((($back_color & 0x00FF0000) >> 16) / 255, 5); - $y = round((($back_color & 0x0000FF00) >> 8) / 255, 5); - $k = round(($back_color & 0x000000FF) / 255, 5); - $back_color_string = $c.' '.$m.' '.$y.' '.$k.' setcmykcolor'."\n"; - } - else - { - // convert a hexadecimal color code into decimal eps format (green = 0 1 0, blue = 0 0 1, ...) - $r = round((($fore_color & 0xFF0000) >> 16) / 255, 5); - $b = round((($fore_color & 0x00FF00) >> 8) / 255, 5); - $g = round(($fore_color & 0x0000FF) / 255, 5); - $fore_color_string = $r.' '.$b.' '.$g.' setrgbcolor'."\n"; - - // convert a hexadecimal color code into decimal eps format (green = 0 1 0, blue = 0 0 1, ...) - $r = round((($back_color & 0xFF0000) >> 16) / 255, 5); - $b = round((($back_color & 0x00FF00) >> 8) / 255, 5); - $g = round(($back_color & 0x0000FF) / 255, 5); - $back_color_string = $r.' '.$b.' '.$g.' setrgbcolor'."\n"; - } - - $output = - '%!PS-Adobe EPSF-3.0'."\n". - '%%Creator: PHPQrcodeLib'."\n". - '%%Title: QRcode'."\n". - '%%CreationDate: '.date('Y-m-d')."\n". - '%%DocumentData: Clean7Bit'."\n". - '%%LanguageLevel: 2'."\n". - '%%Pages: 1'."\n". - '%%BoundingBox: 0 0 '.$imgW * $pixelPerPoint.' '.$imgH * $pixelPerPoint."\n"; - - // set the scale - $output .= $pixelPerPoint.' '.$pixelPerPoint.' scale'."\n"; - // position the center of the coordinate system - - $output .= $outerFrame.' '.$outerFrame.' translate'."\n"; - - - - - // redefine the 'rectfill' operator to shorten the syntax - $output .= '/F { rectfill } def'."\n"; - - // set the symbol color - $output .= $back_color_string; - $output .= '-'.$outerFrame.' -'.$outerFrame.' '.($w + 2*$outerFrame).' '.($h + 2*$outerFrame).' F'."\n"; - - - // set the symbol color - $output .= $fore_color_string; - - // Convert the matrix into pixels - - for($i=0; $i<$h; $i++) { - for($j=0; $j<$w; $j++) { - if( $frame[$i][$j] == '1') { - $y = $h - 1 - $i; - $x = $j; - $output .= $x.' '.$y.' 1 1 F'."\n"; - } - } - } - - - $output .='%%EOF'; - - return $output; - } - - //---------------------------------------------------------------------- - public static function svg($frame, $filename = false, $pixelPerPoint = 4, $outerFrame = 4,$saveandprint=FALSE, $back_color, $fore_color) - { - $vect = self::vectSVG($frame, $pixelPerPoint, $outerFrame, $back_color, $fore_color); - - if ($filename === false) { - header("Content-Type: image/svg+xml"); - //header('Content-Disposition: attachment, filename="qrcode.svg"'); - echo $vect; - } else { - if($saveandprint===TRUE){ - QRtools::save($vect, $filename); - header("Content-Type: image/svg+xml"); - //header('Content-Disposition: filename="'.$filename.'"'); - echo $vect; - }else{ - QRtools::save($vect, $filename); - } - } - } - - - //---------------------------------------------------------------------- - private static function vectSVG($frame, $pixelPerPoint = 4, $outerFrame = 4, $back_color = 0xFFFFFF, $fore_color = 0x000000) - { - $h = count($frame); - $w = strlen($frame[0]); - - $imgW = $w + 2*$outerFrame; - $imgH = $h + 2*$outerFrame; - - - $output = - ''."\n". - ''."\n". - ''."\n"; - - $output = - ''."\n". - ''."\n". - ''."\n". - ''."\n"; - - if(!empty($back_color)) { - $backgroundcolor = str_pad(dechex($back_color), 6, "0", STR_PAD_LEFT); - $output .= ''."\n"; - } - - $output .= - ''."\n". - ''."\n". - ''."\n". - ''."\n"; - - - // Convert the matrix into pixels - - for($i=0; $i<$h; $i++) { - for($j=0; $j<$w; $j++) { - if( $frame[$i][$j] == '1') { - $y = ($i + $outerFrame) * $pixelPerPoint; - $x = ($j + $outerFrame) * $pixelPerPoint; - $output .= ''."\n"; - } - } - } - $output .= - ''."\n". - ''; - - return $output; - } - } - - - - + + + + +//---- qrencode.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Main encoder classes. + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + class QRrsblock { + public $dataLength; + public $data = array(); + public $eccLength; + public $ecc = array(); + + public function __construct($dl, $data, $el, &$ecc, QRrsItem $rs) + { + $rs->encode_rs_char($data, $ecc); + + $this->dataLength = $dl; + $this->data = $data; + $this->eccLength = $el; + $this->ecc = $ecc; + } + }; + + //########################################################################## + + class QRrawcode { + public $version; + public $datacode = array(); + public $ecccode = array(); + public $blocks; + public $rsblocks = array(); //of RSblock + public $count; + public $dataLength; + public $eccLength; + public $b1; + + //---------------------------------------------------------------------- + public function __construct(QRinput $input) + { + $spec = array(0,0,0,0,0); + + $this->datacode = $input->getByteStream(); + if(is_null($this->datacode)) { + throw new Exception('null imput string'); + } + + QRspec::getEccSpec($input->getVersion(), $input->getErrorCorrectionLevel(), $spec); + + $this->version = $input->getVersion(); + $this->b1 = QRspec::rsBlockNum1($spec); + $this->dataLength = QRspec::rsDataLength($spec); + $this->eccLength = QRspec::rsEccLength($spec); + $this->ecccode = array_fill(0, $this->eccLength, 0); + $this->blocks = QRspec::rsBlockNum($spec); + + $ret = $this->init($spec); + if($ret < 0) { + throw new Exception('block alloc error'); + return null; + } + + $this->count = 0; + } + + //---------------------------------------------------------------------- + public function init(array $spec) + { + $dl = QRspec::rsDataCodes1($spec); + $el = QRspec::rsEccCodes1($spec); + $rs = QRrs::init_rs(8, 0x11d, 0, 1, $el, 255 - $dl - $el); + + + $blockNo = 0; + $dataPos = 0; + $eccPos = 0; + for($i=0; $iecccode,$eccPos); + $this->rsblocks[$blockNo] = new QRrsblock($dl, array_slice($this->datacode, $dataPos), $el, $ecc, $rs); + $this->ecccode = array_merge(array_slice($this->ecccode,0, $eccPos), $ecc); + + $dataPos += $dl; + $eccPos += $el; + $blockNo++; + } + + if(QRspec::rsBlockNum2($spec) == 0) + return 0; + + $dl = QRspec::rsDataCodes2($spec); + $el = QRspec::rsEccCodes2($spec); + $rs = QRrs::init_rs(8, 0x11d, 0, 1, $el, 255 - $dl - $el); + + if($rs == NULL) return -1; + + for($i=0; $iecccode,$eccPos); + $this->rsblocks[$blockNo] = new QRrsblock($dl, array_slice($this->datacode, $dataPos), $el, $ecc, $rs); + $this->ecccode = array_merge(array_slice($this->ecccode,0, $eccPos), $ecc); + + $dataPos += $dl; + $eccPos += $el; + $blockNo++; + } + + return 0; + } + + //---------------------------------------------------------------------- + public function getCode() + { + $ret; + + if($this->count < $this->dataLength) { + $row = $this->count % $this->blocks; + $col = $this->count / $this->blocks; + if($col >= $this->rsblocks[0]->dataLength) { + $row += $this->b1; + } + $ret = $this->rsblocks[$row]->data[$col]; + } else if($this->count < $this->dataLength + $this->eccLength) { + $row = ($this->count - $this->dataLength) % $this->blocks; + $col = ($this->count - $this->dataLength) / $this->blocks; + $ret = $this->rsblocks[$row]->ecc[$col]; + } else { + return 0; + } + $this->count++; + + return $ret; + } + } + + //########################################################################## + + class QRcode { + + public $version; + public $width; + public $data; + + //---------------------------------------------------------------------- + public function encodeMask(QRinput $input, $mask) + { + if($input->getVersion() < 0 || $input->getVersion() > QRSPEC_VERSION_MAX) { + throw new Exception('wrong version'); + } + if($input->getErrorCorrectionLevel() > QR_ECLEVEL_H) { + throw new Exception('wrong level'); + } + + $raw = new QRrawcode($input); + + QRtools::markTime('after_raw'); + + $version = $raw->version; + $width = QRspec::getWidth($version); + $frame = QRspec::newFrame($version); + + $filler = new FrameFiller($width, $frame); + if(is_null($filler)) { + return NULL; + } + + // inteleaved data and ecc codes + for($i=0; $i<$raw->dataLength + $raw->eccLength; $i++) { + $code = $raw->getCode(); + $bit = 0x80; + for($j=0; $j<8; $j++) { + $addr = $filler->next(); + $filler->setFrameAt($addr, 0x02 | (($bit & $code) != 0)); + $bit = $bit >> 1; + } + } + + QRtools::markTime('after_filler'); + + unset($raw); + + // remainder bits + $j = QRspec::getRemainder($version); + for($i=0; $i<$j; $i++) { + $addr = $filler->next(); + $filler->setFrameAt($addr, 0x02); + } + + $frame = $filler->frame; + unset($filler); + + + // masking + $maskObj = new QRmask(); + if($mask < 0) { + + if (QR_FIND_BEST_MASK) { + $masked = $maskObj->mask($width, $frame, $input->getErrorCorrectionLevel()); + } else { + $masked = $maskObj->makeMask($width, $frame, (intval(QR_DEFAULT_MASK) % 8), $input->getErrorCorrectionLevel()); + } + } else { + $masked = $maskObj->makeMask($width, $frame, $mask, $input->getErrorCorrectionLevel()); + } + + if($masked == NULL) { + return NULL; + } + + QRtools::markTime('after_mask'); + + $this->version = $version; + $this->width = $width; + $this->data = $masked; + + return $this; + } + + //---------------------------------------------------------------------- + public function encodeInput(QRinput $input) + { + return $this->encodeMask($input, -1); + } + + //---------------------------------------------------------------------- + public function encodeString8bit($string, $version, $level) + { + if($string == NULL) { + throw new Exception('empty string!'); + return NULL; + } + + $input = new QRinput($version, $level); + if($input == NULL) return NULL; + + $ret = $input->append($input, QR_MODE_8, strlen($string), str_split($string)); + if($ret < 0) { + unset($input); + return NULL; + } + return $this->encodeInput($input); + } + + //---------------------------------------------------------------------- + public function encodeString($string, $version, $level, $hint, $casesensitive) + { + + if($hint != QR_MODE_8 && $hint != QR_MODE_KANJI) { + throw new Exception('bad hint'); + return NULL; + } + + $input = new QRinput($version, $level); + if($input == NULL) return NULL; + + $ret = QRsplit::splitStringToQRinput($string, $input, $hint, $casesensitive); + if($ret < 0) { + return NULL; + } + + return $this->encodeInput($input); + } + + //---------------------------------------------------------------------- + public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false, $back_color = 0xFFFFFF, $fore_color = 0x000000) + { + $enc = QRencode::factory($level, $size, $margin, $back_color, $fore_color); + return $enc->encodePNG($text, $outfile, $saveandprint=false); + } + + //---------------------------------------------------------------------- + public static function text($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4) + { + $enc = QRencode::factory($level, $size, $margin); + return $enc->encode($text, $outfile); + } + + //---------------------------------------------------------------------- + public static function eps($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false, $back_color = 0xFFFFFF, $fore_color = 0x000000, $cmyk = false) + { + $enc = QRencode::factory($level, $size, $margin, $back_color, $fore_color, $cmyk); + return $enc->encodeEPS($text, $outfile, $saveandprint=false); + } + + //---------------------------------------------------------------------- + public static function svg($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false, $back_color = 0xFFFFFF, $fore_color = 0x000000) + { + $enc = QRencode::factory($level, $size, $margin, $back_color, $fore_color); + return $enc->encodeSVG($text, $outfile, $saveandprint=false); + } + + //---------------------------------------------------------------------- + public static function raw($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4) + { + $enc = QRencode::factory($level, $size, $margin); + return $enc->encodeRAW($text, $outfile); + } + } + + //########################################################################## + + class FrameFiller { + + public $width; + public $frame; + public $x; + public $y; + public $dir; + public $bit; + + //---------------------------------------------------------------------- + public function __construct($width, &$frame) + { + $this->width = $width; + $this->frame = $frame; + $this->x = $width - 1; + $this->y = $width - 1; + $this->dir = -1; + $this->bit = -1; + } + + //---------------------------------------------------------------------- + public function setFrameAt($at, $val) + { + $this->frame[$at['y']][$at['x']] = chr($val); + } + + //---------------------------------------------------------------------- + public function getFrameAt($at) + { + return ord($this->frame[$at['y']][$at['x']]); + } + + //---------------------------------------------------------------------- + public function next() + { + do { + + if($this->bit == -1) { + $this->bit = 0; + return array('x'=>$this->x, 'y'=>$this->y); + } + + $x = $this->x; + $y = $this->y; + $w = $this->width; + + if($this->bit == 0) { + $x--; + $this->bit++; + } else { + $x++; + $y += $this->dir; + $this->bit--; + } + + if($this->dir < 0) { + if($y < 0) { + $y = 0; + $x -= 2; + $this->dir = 1; + if($x == 6) { + $x--; + $y = 9; + } + } + } else { + if($y == $w) { + $y = $w - 1; + $x -= 2; + $this->dir = -1; + if($x == 6) { + $x--; + $y -= 8; + } + } + } + if($x < 0 || $y < 0) return null; + + $this->x = $x; + $this->y = $y; + + } while(ord($this->frame[$y][$x]) & 0x80); + + return array('x'=>$x, 'y'=>$y); + } + + } ; + + //########################################################################## + + class QRencode { + + public $casesensitive = true; + public $eightbit = false; + + public $version = 0; + public $size = 3; + public $margin = 4; + public $back_color = 0xFFFFFF; + public $fore_color = 0x000000; + + public $structured = 0; // not supported yet + + public $level = QR_ECLEVEL_L; + public $hint = QR_MODE_8; + + //---------------------------------------------------------------------- + public static function factory($level = QR_ECLEVEL_L, $size = 3, $margin = 4, $back_color = 0xFFFFFF, $fore_color = 0x000000, $cmyk = false) + { + $enc = new QRencode(); + $enc->size = $size; + $enc->margin = $margin; + $enc->fore_color = $fore_color; + $enc->back_color = $back_color; + $enc->cmyk = $cmyk; + + switch ($level.'') { + case '0': + case '1': + case '2': + case '3': + $enc->level = $level; + break; + case 'l': + case 'L': + $enc->level = QR_ECLEVEL_L; + break; + case 'm': + case 'M': + $enc->level = QR_ECLEVEL_M; + break; + case 'q': + case 'Q': + $enc->level = QR_ECLEVEL_Q; + break; + case 'h': + case 'H': + $enc->level = QR_ECLEVEL_H; + break; + } + + return $enc; + } + + //---------------------------------------------------------------------- + public function encodeRAW($intext, $outfile = false) + { + $code = new QRcode(); + + if($this->eightbit) { + $code->encodeString8bit($intext, $this->version, $this->level); + } else { + $code->encodeString($intext, $this->version, $this->level, $this->hint, $this->casesensitive); + } + + return $code->data; + } + + //---------------------------------------------------------------------- + public function encode($intext, $outfile = false) + { + $code = new QRcode(); + + if($this->eightbit) { + $code->encodeString8bit($intext, $this->version, $this->level); + } else { + $code->encodeString($intext, $this->version, $this->level, $this->hint, $this->casesensitive); + } + + QRtools::markTime('after_encode'); + + if ($outfile!== false) { + file_put_contents($outfile, join("\n", QRtools::binarize($code->data))); + } else { + return QRtools::binarize($code->data); + } + } + + //---------------------------------------------------------------------- + public function encodePNG($intext, $outfile = false,$saveandprint=false) + { + try { + + ob_start(); + $tab = $this->encode($intext); + $err = ob_get_contents(); + ob_end_clean(); + + if ($err != '') + QRtools::log($outfile, $err); + + $maxSize = (int)(QR_PNG_MAXIMUM_SIZE / (count($tab)+2*$this->margin)); + + QRimage::png($tab, $outfile, min(max(1, $this->size), $maxSize), $this->margin,$saveandprint, $this->back_color, $this->fore_color); + + } catch (Exception $e) { + + QRtools::log($outfile, $e->getMessage()); + + } + } + + //---------------------------------------------------------------------- + public function encodeEPS($intext, $outfile = false,$saveandprint=false) + { + try { + + ob_start(); + $tab = $this->encode($intext); + $err = ob_get_contents(); + ob_end_clean(); + + if ($err != '') + QRtools::log($outfile, $err); + + $maxSize = (int)(QR_PNG_MAXIMUM_SIZE / (count($tab)+2*$this->margin)); + + QRvect::eps($tab, $outfile, min(max(1, $this->size), $maxSize), $this->margin,$saveandprint, $this->back_color, $this->fore_color, $this->cmyk); + + } catch (Exception $e) { + + QRtools::log($outfile, $e->getMessage()); + + } + } + + //---------------------------------------------------------------------- + public function encodeSVG($intext, $outfile = false,$saveandprint=false) + { + try { + + ob_start(); + $tab = $this->encode($intext); + $err = ob_get_contents(); + ob_end_clean(); + + if ($err != '') + QRtools::log($outfile, $err); + + $maxSize = (int)(QR_PNG_MAXIMUM_SIZE / (count($tab)+2*$this->margin)); + + QRvect::svg($tab, $outfile, min(max(1, $this->size), $maxSize), $this->margin,$saveandprint, $this->back_color, $this->fore_color); + + } catch (Exception $e) { + + QRtools::log($outfile, $e->getMessage()); + + } + } + } + + + + +//---- qrvect.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Image output of code using GD2 + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + define('QR_VECT', true); + + class QRvect { + + //---------------------------------------------------------------------- + public static function eps($frame, $filename = false, $pixelPerPoint = 4, $outerFrame = 4,$saveandprint=FALSE, $back_color = 0xFFFFFF, $fore_color = 0x000000, $cmyk = false) + { + $vect = self::vectEPS($frame, $pixelPerPoint, $outerFrame, $back_color, $fore_color, $cmyk); + + if ($filename === false) { + header("Content-Type: application/postscript"); + header('Content-Disposition: filename="qrcode.eps"'); + echo $vect; + } else { + if($saveandprint===TRUE){ + QRtools::save($vect, $filename); + header("Content-Type: application/postscript"); + header('Content-Disposition: filename="qrcode.eps"'); + echo $vect; + }else{ + QRtools::save($vect, $filename); + } + } + } + + + //---------------------------------------------------------------------- + private static function vectEPS($frame, $pixelPerPoint = 4, $outerFrame = 4, $back_color = 0xFFFFFF, $fore_color = 0x000000, $cmyk = false) + { + $h = count($frame); + $w = strlen($frame[0]); + + $imgW = $w + 2*$outerFrame; + $imgH = $h + 2*$outerFrame; + + if ($cmyk) + { + // convert color value into decimal eps format + $c = round((($fore_color & 0xFF000000) >> 16) / 255, 5); + $m = round((($fore_color & 0x00FF0000) >> 16) / 255, 5); + $y = round((($fore_color & 0x0000FF00) >> 8) / 255, 5); + $k = round(($fore_color & 0x000000FF) / 255, 5); + $fore_color_string = $c.' '.$m.' '.$y.' '.$k.' setcmykcolor'."\n"; + + // convert color value into decimal eps format + $c = round((($back_color & 0xFF000000) >> 16) / 255, 5); + $m = round((($back_color & 0x00FF0000) >> 16) / 255, 5); + $y = round((($back_color & 0x0000FF00) >> 8) / 255, 5); + $k = round(($back_color & 0x000000FF) / 255, 5); + $back_color_string = $c.' '.$m.' '.$y.' '.$k.' setcmykcolor'."\n"; + } + else + { + // convert a hexadecimal color code into decimal eps format (green = 0 1 0, blue = 0 0 1, ...) + $r = round((($fore_color & 0xFF0000) >> 16) / 255, 5); + $b = round((($fore_color & 0x00FF00) >> 8) / 255, 5); + $g = round(($fore_color & 0x0000FF) / 255, 5); + $fore_color_string = $r.' '.$b.' '.$g.' setrgbcolor'."\n"; + + // convert a hexadecimal color code into decimal eps format (green = 0 1 0, blue = 0 0 1, ...) + $r = round((($back_color & 0xFF0000) >> 16) / 255, 5); + $b = round((($back_color & 0x00FF00) >> 8) / 255, 5); + $g = round(($back_color & 0x0000FF) / 255, 5); + $back_color_string = $r.' '.$b.' '.$g.' setrgbcolor'."\n"; + } + + $output = + '%!PS-Adobe EPSF-3.0'."\n". + '%%Creator: PHPQrcodeLib'."\n". + '%%Title: QRcode'."\n". + '%%CreationDate: '.date('Y-m-d')."\n". + '%%DocumentData: Clean7Bit'."\n". + '%%LanguageLevel: 2'."\n". + '%%Pages: 1'."\n". + '%%BoundingBox: 0 0 '.$imgW * $pixelPerPoint.' '.$imgH * $pixelPerPoint."\n"; + + // set the scale + $output .= $pixelPerPoint.' '.$pixelPerPoint.' scale'."\n"; + // position the center of the coordinate system + + $output .= $outerFrame.' '.$outerFrame.' translate'."\n"; + + + + + // redefine the 'rectfill' operator to shorten the syntax + $output .= '/F { rectfill } def'."\n"; + + // set the symbol color + $output .= $back_color_string; + $output .= '-'.$outerFrame.' -'.$outerFrame.' '.($w + 2*$outerFrame).' '.($h + 2*$outerFrame).' F'."\n"; + + + // set the symbol color + $output .= $fore_color_string; + + // Convert the matrix into pixels + + for($i=0; $i<$h; $i++) { + for($j=0; $j<$w; $j++) { + if( $frame[$i][$j] == '1') { + $y = $h - 1 - $i; + $x = $j; + $output .= $x.' '.$y.' 1 1 F'."\n"; + } + } + } + + + $output .='%%EOF'; + + return $output; + } + + //---------------------------------------------------------------------- + public static function svg($frame, $filename = false, $pixelPerPoint = 4, $outerFrame = 4,$saveandprint=FALSE, $back_color, $fore_color) + { + $vect = self::vectSVG($frame, $pixelPerPoint, $outerFrame, $back_color, $fore_color); + + if ($filename === false) { + header("Content-Type: image/svg+xml"); + //header('Content-Disposition: attachment, filename="qrcode.svg"'); + echo $vect; + } else { + if($saveandprint===TRUE){ + QRtools::save($vect, $filename); + header("Content-Type: image/svg+xml"); + //header('Content-Disposition: filename="'.$filename.'"'); + echo $vect; + }else{ + QRtools::save($vect, $filename); + } + } + } + + + //---------------------------------------------------------------------- + private static function vectSVG($frame, $pixelPerPoint = 4, $outerFrame = 4, $back_color = 0xFFFFFF, $fore_color = 0x000000) + { + $h = count($frame); + $w = strlen($frame[0]); + + $imgW = $w + 2*$outerFrame; + $imgH = $h + 2*$outerFrame; + + + $output = + ''."\n". + ''."\n". + ''."\n"; + + $output = + ''."\n". + ''."\n". + ''."\n". + ''."\n"; + + if(!empty($back_color)) { + $backgroundcolor = str_pad(dechex($back_color), 6, "0", STR_PAD_LEFT); + $output .= ''."\n"; + } + + $output .= + ''."\n". + ''."\n". + ''."\n". + ''."\n"; + + + // Convert the matrix into pixels + + for($i=0; $i<$h; $i++) { + for($j=0; $j<$w; $j++) { + if( $frame[$i][$j] == '1') { + $y = ($i + $outerFrame) * $pixelPerPoint; + $x = ($j + $outerFrame) * $pixelPerPoint; + $output .= ''."\n"; + } + } + } + $output .= + ''."\n". + ''; + + return $output; + } + } + + + + diff --git a/style.less b/style.less index dc27feb..690fe31 100755 --- a/style.less +++ b/style.less @@ -1,56 +1,84 @@ +/* + +Ce fichier fait partie de LibreQR. + + LibreQR est un logiciel libre ; vous pouvez le redistribuer ou le modifier + suivant les termes de la GNU Affero General Public License + telle que publiée par la Free Software Foundation ; soit la version 3 + de la licence, soit (à votre gré) toute version ultérieure. + + LibreQR est distribué dans l'espoir qu'il sera utile, + mais SANS AUCUNE GARANTIE ; sans même la garantie tacite de + QUALITÉ MARCHANDE ou d'ADÉQUATION à UN BUT PARTICULIER. + Consultez la GNU Affero General Public License pour plus de détails. + + Vous devez avoir reçu une copie de la GNU Affero General Public License + en même temps que LibreQR ; si ce n'est pas le cas, + consultez . + +*/ + * { font-family: "Ubuntu", sans-serif; + scrollbar-color: @text @bg; + scrollbar-width: auto; } -h1 { - font-weight: 700; +a { + color: @text; + text-decoration: underline; + + &:hover { + text-decoration: none; + } +} + +#firstWrapper { + display: flex; + flex-direction: row; } #menusDeroulants { text-align: center; + margin-left: 20px; } -#codeQR { - max-width: 500px; -} - -#lienCodeQR { - text-align: center; +#qrCode { + max-width: 480px; } .centrer { text-align: center; } -.topRight { - position: fixed; - top: 5px; - right: 5px; -} - .bouton { padding: 3px 10px 3px 10px; + text-decoration: none; } form { - display: flex; - flex-direction: column; - display: inline; - padding: 0px; - margin: 0px; + display: block; + margin-bottom: 30px; } -html, body { - width: 500px; +.center { + display: flex; + flex-direction: column; + justify-content: center; margin-left: auto; margin-right: auto; - background-color: @fond; - color: @texte; + width: 814px; +} + +body { + margin: 18px; + background-color: @bg; + color: @text; font-weight: normal; - font-size: 1em; + font-size: 20px; & h1 { - color: @texte; + color: @text; text-decoration: none; } @@ -58,36 +86,48 @@ html, body { label { font-size: 20px; - height: 60px; -} - -.topRight { - color: @texteLienCodeSource; - font-size: 12px; - margin-bottom: -20px; - text-align: right; - transition: color 0.2s; - - &:hover { - color: lighten(@texteLienCodeSource, 10%); - } } header { text-align: center; padding: 0px; margin: 0px; - height: 48px; + height: 64px; } -header > a { +#logo { + width: 64px; + height: 64px; +} + +#titres { + margin-left: 20px; +} + +h1, h2, h3, h4, h5, h6 { + margin: 0px; + font-weight: normal; +} + +h1 { + padding: auto; + font-size: 33px; +} + +h2 { + font-size: 22px; +} + +#lienTitres { + text-align: left; + justify-content: center; + text-decoration: none; display: flex; flex-direction: row; } -h1, #logo { - margin: auto; - font-size: 35px; +#showOnlyQR { + margin-top: 30px; } .param { @@ -98,181 +138,272 @@ h1, #logo { margin-right: 0px; } -@media (max-width: 640px) { // Version mobile - - html { - margin: 10px; - width: 100%; - } - - #texte { - width: 90%; - } - - h1 { - font-size: 25px; - } - -} - -#logo { - width: 48px; - height: 48px; -} - .conteneurInputColor { display: flex; flex-direction: row; justify-content: center; - width: 250px; } ::selection { - color: @fond; - background-color: @texte; + color: @bg; + background-color: @text; } -:link { - text-decoration: none; +label[for=txt] { + padding-left: 22px; } -#couleurs { +#colors { display: flex; flex-direction: row; justify-content: space-between; text-align: center; + + & .param { + text-align: center; + display: flex; + justify-content: center; + flex-direction: column; + width: 100%; + } } -.info { - color: grey; - position: absolute; +.metaText { + color: @secondaryText; + text-align: left; + transition: color 0.12s cubic-bezier(0.42, 0.0, 1.0, 1.0); + position: fixed; + width: 400px; + + & a:link { + transition: color 0.12s cubic-bezier(0.42, 0.0, 1.0, 1.0); + color: @secondaryText; + text-decoration: underline; + } + + &:hover, &:hover a:link { + color: @text; + } + +} + +footer { + font-size: 14px; + bottom: 20px; + left: 20px; +} + +#info { + font-size: 16px; bottom: 20px; right: 20px; - width: 300px; + margin: 0px; - & a { - color: grey; + & h3 { + font-size: 20px; + font-weight: normal; + padding-bottom: 10px; } - - &:hover, &:hover a { - color: @texte; - } - } + /* Inputs */ -#redondance, #marge, #texte, #taille, input[type=color], input[type=submit], .bouton { - border: 2px @bordure solid; +#redondancy, #margin, #txt, #size, input[type=color], input[type=submit], .bouton { + border: 2px @border solid; border-radius: 10px; font-size: 20px; padding-left: 10px; font-weight: normal; - color: @texteForm; + color: @text; transition: border 0.1s linear; - background-color: @fondChamp; + background-color: @bgField; margin-top: 8px; &:hover { - border: 2px @bordureHover solid; + border: 2px @borderHover solid; } &:focus { - border: 2px @bordureFocus solid; + border: 2px @borderFocus solid; + outline: none; } } -#redondance, #taille, #marge { - background-color: @fondChamp; +#redondancy, #size, #margin { + background-color: @bgField; width: 250px; height: 40px; } -#texte { - background-color: @fondChampTexte; - color: @texteForm; - padding-top: 6px; +#txt { + background-color: @bgTextField; + color: @text; + padding: 10px; + margin: 10px; width: 500px; + scrollbar-color: @text @bgTextField; + scrollbar-width: auto; } -#redondance:hover, #marge:hover, #texte:hover, #taille:hover, input[type=submit]:hover, .bouton:hover { - +input[type=submit] { + font-size: 28px; + padding: 10px; + padding-left: 14px; + padding-right: 14px; } -#texte:focus, input[type=submit]:focus, .bouton:focus { - -} - -#texte::placeholder { - color: lighten(@fondChampTexte, 40%); +#txt::placeholder { + color: @secondaryText; opacity: 1; - font-family: "Ubuntu"; + font-family: "Ubuntu", sans-serif; font-weight: normal; font-size: 1em; } input[type=color] { - height: 50px; - width: 50px; + height: 60px; + width: 84px; padding: 5px; - background-color: @fondChamp; - border: 2px @bordure solid; -} - -input[type=color]:hover { - border: 2px @bordureHover solid; -} - -input[type=color]:focus { - border: 2px @bordureFocus solid; + border: 2px @border solid; } /* Infobulle */ svg { - width: 18px; - height: 18px; + width: 20px; + height: 20px; + margin-bottom: -3px; + margin-left: 5px; } .boutonAide { - height: 18px; - width: 18px; - color: @texte; + height: 0px; + width: 0px; + color: @text; cursor: help; } -.contenuAide { - max-width: 500px; -} - -.conteneurAide { - color: #ccc; -} - -.conteneurAide:hover, .conteneurAide:focus { - background: rgba(0,0,0,.4); -} - .conteneurAide .contenuAide { position: absolute; transform: scale(0) rotate(-12deg); - color: #FFFFFF; - background: rgba(0,0,0,1); + color: @text; + background: @bgHelp; padding: 15px; - border-radius: 3px; - box-shadow: 0 0 2px rgba(0,0,0,.5); + border-radius: 10px; + box-shadow: 0 0 10px rgba(0,0,0,.5); margin-top: 23px; margin-left: -35px; transition: all .25s; opacity: 0; + max-width: 500px; + font-size: 20px; + text-align: left; + + @media (max-width: 500px) { + width: 300px; + } + } -.conteneurAide:hover .contenuAide, .conteneurAide:focus .contenuAide { +.conteneurAide:hover .contenuAide, .conteneurAide:focus-within .contenuAide { transform: scale(1) rotate(0); opacity: 1; } -.conteneurAide, .conteneurAide:hover { - background-color: @fond; - text-decoration: none; +/* Media queries */ + +@media (max-width: 1400px) { + .metaText { + width: 250px; + } +} + +@media (max-width: 1050px) { + + #metaTexts { + display: flex; + flex-direction: row; + } + + .metaText { + width: 100%; + position: static; + font-size: 20px; + } + + footer { + margin-top: 50px; + } + + #info { + color: @text; + margin-bottom: 20px; + padding-top: 30px; + + & a:link { + color: @text; + } + } +} + +@media (max-width: 850px) { + + #metaTexts { + flex-direction: column; + width: 480px; + justify-content: center; + margin-left: auto; + margin-right: auto; + } + + .center { + width: auto; + } + + #firstWrapper { + flex-direction: column; + } + + body { + margin: 10px; + } + + #txt { + width: 92%; + } + +} + +@media (max-width: 500px) { // Version mobile + + #metaTexts { + width: auto; + } + + #colors { + flex-direction: column; + } + + h1 { + font-size: 28px; + padding-top: 6px; + } + + #txt { + width: 85%; + } + + #qrCode { + max-width: 94%; + } + +} + +@media (max-width: 415px) { + + h1 { + padding: 0px; + } + } diff --git a/style.min.css b/style.min.css new file mode 100644 index 0000000..f412dde --- /dev/null +++ b/style.min.css @@ -0,0 +1 @@ +*{font-family:"Ubuntu", sans-serif;scrollbar-color:#d5f3ff #157097;scrollbar-width:auto;}a{color:#d5f3ff;text-decoration:underline;}a:hover{text-decoration:none;}#firstWrapper{display:flex;flex-direction:row;}#menusDeroulants{text-align:center;margin-left:20px;}#qrCode{max-width:480px;}.centrer{text-align:center;}.bouton{padding:3px 10px 3px 10px;text-decoration:none;}form{display:block;margin-bottom:30px;}.center{display:flex;flex-direction:column;justify-content:center;margin-left:auto;margin-right:auto;width:814px;}body{margin:18px;background-color:#157097;color:#d5f3ff;font-weight:normal;font-size:20px;}body h1{color:#d5f3ff;text-decoration:none;}label{font-size:20px;}header{text-align:center;padding:0px;margin:0px;height:64px;}#logo{width:64px;height:64px;}#titres{margin-left:20px;}h1,h2,h3,h4,h5,h6{margin:0px;font-weight:normal;}h1{padding:auto;font-size:33px;}h2{font-size:22px;}#lienTitres{text-align:left;justify-content:center;text-decoration:none;display:flex;flex-direction:row;}#showOnlyQR{margin-top:30px;}.param{padding:10px;padding-left:0px;margin-left:0px;padding-right:0px;margin-right:0px;}.conteneurInputColor{display:flex;flex-direction:row;justify-content:center;}::selection{color:#157097;background-color:#d5f3ff;}label[for=txt]{padding-left:22px;}#colors{display:flex;flex-direction:row;justify-content:space-between;text-align:center;}#colors .param{text-align:center;display:flex;justify-content:center;flex-direction:column;width:100%;}.metaText{color:#65b7da;text-align:left;transition:color 0.12s cubic-bezier(0.42,0.0,1.0,1.0);position:fixed;width:400px;}.metaText a:link{transition:color 0.12s cubic-bezier(0.42,0.0,1.0,1.0);color:#65b7da;text-decoration:underline;}.metaText:hover,.metaText:hover a:link{color:#d5f3ff;}footer{font-size:14px;bottom:20px;left:20px;}#info{font-size:16px;bottom:20px;right:20px;margin:0px;}#info h3{font-size:20px;font-weight:normal;padding-bottom:10px;}#redondancy,#margin,#txt,#size,input[type=color],input[type=submit],.bouton{border:2px #48aed9 solid;border-radius:10px;font-size:20px;padding-left:10px;font-weight:normal;color:#d5f3ff;transition:border 0.1s linear;background-color:#2794c2;margin-top:8px;}#redondancy:hover,#margin:hover,#txt:hover,#size:hover,input[type=color]:hover,input[type=submit]:hover,.bouton:hover{border:2px #87d1f1 solid;}#redondancy:focus,#margin:focus,#txt:focus,#size:focus,input[type=color]:focus,input[type=submit]:focus,.bouton:focus{border:2px #e2f6ff solid;outline:none;}#redondancy,#size,#margin{background-color:#2794c2;width:250px;height:40px;}#txt{background-color:#2794c2;color:#d5f3ff;padding:10px;margin:10px;width:500px;scrollbar-color:#d5f3ff #2794c2;scrollbar-width:auto;}input[type=submit]{font-size:28px;padding:10px;padding-left:14px;padding-right:14px;}#txt::placeholder{color:#65b7da;opacity:1;font-family:"Ubuntu", sans-serif;font-weight:normal;font-size:1em;}input[type=color]{height:60px;width:84px;padding:5px;border:2px #48aed9 solid;}svg{width:20px;height:20px;margin-bottom:-3px;margin-left:5px;}.boutonAide{height:0px;width:0px;color:#d5f3ff;cursor:help;}.conteneurAide .contenuAide{position:absolute;transform:scale(0) rotate(-12deg);color:#d5f3ff;background:#118abe;padding:15px;border-radius:10px;box-shadow:0 0 10px rgba(0,0,0,0.5);margin-top:23px;margin-left:-35px;transition:all .25s;opacity:0;max-width:500px;font-size:20px;text-align:left;}@media (max-width: 500px){.conteneurAide .contenuAide{width:300px;}}.conteneurAide:hover .contenuAide,.conteneurAide:focus-within .contenuAide{transform:scale(1) rotate(0);opacity:1;}@media (max-width: 1400px){.metaText{width:250px;}}@media (max-width: 1050px){#metaTexts{display:flex;flex-direction:row;}.metaText{width:100%;position:static;font-size:20px;}footer{margin-top:50px;}#info{color:#d5f3ff;margin-bottom:20px;padding-top:30px;}#info a:link{color:#d5f3ff;}}@media (max-width: 850px){#metaTexts{flex-direction:column;width:480px;justify-content:center;margin-left:auto;margin-right:auto;}.center{width:auto;}#firstWrapper{flex-direction:column;}body{margin:10px;}#txt{width:92%;}}@media (max-width: 500px){#metaTexts{width:auto;}#colors{flex-direction:column;}h1{font-size:28px;padding-top:6px;}#txt{width:85%;}#qrCode{max-width:94%;}}@media (max-width: 415px){h1{padding:0px;}} \ No newline at end of file diff --git a/temp/.gitkeep b/temp/.gitkeep new file mode 100755 index 0000000..8d1c8b6 --- /dev/null +++ b/temp/.gitkeep @@ -0,0 +1 @@ + diff --git a/temp/6MBFnPdqJOHR6SrkUx5hTlzXLuNkt96TFSTtbmnLkyyuvB8Feu.png b/temp/6MBFnPdqJOHR6SrkUx5hTlzXLuNkt96TFSTtbmnLkyyuvB8Feu.png deleted file mode 100644 index 897d0f45e1c9585ac2d14058edec5c185bb4433c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 392 zcmV;30eAk1P)5Y*({D=Ju0+K4>(S5VyAPilBn*8InzTCKV9kLU z3V}F7R^Ah&MtbTJu-&eJC<3rj=HpC3S#7Ke**VajL&I{mJ+japODSuLi65eL??QGw zanN|*q!T7qe mkH;P>WbTnqpI9qpzdb&84Zx-O=ErCN0000g{7@y1E9_Xa^bVH5tt8AY;>Az?41?9$=hI_A#bx_190Z zJy}#ORVkA!-|?s0Ewg9%-y!zzqgys!2GSgd2F!7R4*;xI#-t7hh{=RAHn#St2&7Xv zD+V&S@;x=UXU%jaJG{=>#yw-A?Q-%r89imx2hzt2ZPgQ2_BNlPW2|EaO`V5wk(xSW zC40LB{L&UeHY$SLD82dIA+toKBM}Z#rd@mQ*vW@XH5g|siE2`|4AkB|b`K_O-6&Fh zon27dVu-NfqYcQR}pK!FsQVv v#u0N37- diff --git a/themes/dark/icons/128.png b/themes/dark/icons/128.png new file mode 100644 index 0000000000000000000000000000000000000000..b80ec55076947f4a312976b1ad28458389788429 GIT binary patch literal 612 zcmeAS@N?(olHy`uVBq!ia0vp^4Is<`Bp9BB+KB@xrX+877l!}s{b%+AdF&;gzOL*~ znAwC3)ZJ8+_AxLpN_e_BhE&{od&`mQu!2BqVz7b@j2o5g;A`7h7@r65qmVQ#)j;KuIkQ2Sf{RV+Y(fUC^r z=N2FRI$4ep$U9;4;8=Z$?1NvP{XibWG$42Dulo6)ol52_*fIe{cFg+~x8NK1-F-=5 z-3t4~@67$ay2jwTKSaaNhEwcM(`=`TUs47cuv4$2ulV}8tq|FLl?uDon|DQh-~D_I zHv@wO--pkZi+=vg+nuZgRNIhhci~Lw7MJJTV3!{FW~nq?{LT-1J&?UO?A%SdZkv}p zXYcC-87yb*{$)GJLkHL+Uu(rCN<0q-a#TxPBT7;dOH!?pi&B9UgOP!efv$nEu7O#I zp@o%+g_W_Twt=CQfr0g>we2Vxa`RI%(<*Um@LDfw4b&hFvLQ1$*(y1|pt2}4J)?vn zpfo8bGg-kUKQ}QmZ`(w}XrMABn6i}A;^d;tf|AVqJO+19-vEWA(#)I^-ON0N;vjb? zpL9oIplVT=>fFS<(zL|nlG38oBCv9wc@s_n74X3olFzk+>Y&caWFGkcUZq^;))H`mI$r+~;_d*Yu=vr*+z|%+)SE z!`&v(U)eC{J%fJ20ZC)Yy^^oD9WgX~wQpsRs_l#$YWFsJ3#1*~u*KWgz>vM?P2oYO zruHj`%RCM{9J~B!G5_IL_O3SWL8U+oRZCnWN>UO_QmvAUQh^kMk%5tcu7R@^HVa@DsgM@S}$r1)F2JAAu~DIDmlNPvM4h>ql6)# zG$|)DS-~YgH!(AB+eE`?pfV+xvXs=~20EMK|%$yS4%shqSAa^I9 zbVp&JYEhW#+{C=nw8Z3+(xTKNuyUVy6HWmY@WB=2r=;dEfV4&@csc`R7(8A5T-G@y GGywpDyNdJx literal 0 HcmV?d00001 diff --git a/themes/dark/icons/192.png b/themes/dark/icons/192.png new file mode 100644 index 0000000000000000000000000000000000000000..26142a5b976cd386d6728123fb2879da40a9cfba GIT binary patch literal 760 zcmeAS@N?(olHy`uVBq!ia0vp^2SAtuNHCOdH@*#|n3BBRT^Rni_n+AhO?eg z?(0rhO?{qK`E7BVRav$I#g2bZ-k&f!9~eIWV4giA#Bh-P(|*a`d{rGcvovta{BObr zVE2G+e^|Qk%&v^+KX=batwc5`>XqEhGq;xQI{)h5ZDg1JUE7*AFHtUa-p`eJ?`=12 zH-Z|qq(-1kvy)=dO@&*L|z1T=tV zF>bkiZ>z;ByWrT`{TEREwfKEh%tB-b-r~>Sq;1ST?4ZaLklYt3oBzwZ39Cq0|V<%YuiyYL#5>RT|kN{$=lt9;eUJonf*W>dx@v7 zEBg~>HX#FbHx;FQK>016E{-7;x8B}$^pi0ZVYnzzIP1wj_lI^j&Aata%f%fC^_F-M z^fLcVX8HcVKTFN`Z*5q{5akfepu0e`LF|Hv19t}30#*~&3rw?^G8oVP{>(1luK%I@ z$KT^0eun>!v1f$J_%d$6(0Fe-zt8KR>X(1jM*Xkfdj6|$0CrPBdeiRkS8Uon&;IN> z0_rO56UzVA|FStiNZ}p+8?o!x*VWs<6`xZ#?*LxgpS`WG-hbfLXV&uh;T3;b(0q;T zx5&Ev4g2obm)0lz`hVTu0gJC;!S(T9!_~iyo#FrYU;W$kT73bYQ2kWdc=`3uyRYBI z{r|63j-{M>gTW7Z`+!1IJY5_^EKbjzbW!lI0*~|5nB|?{y+#6SM55>7=3uk zilSitr}JITW_#~ol-#BD{??|FWT5+0OI#yLQW8s2t&)pUffR$0fsui(fw8WES%{&9 zm5GIwv8A?wp_PGw^{2J%C>nC}Q!>*kacl5eFKP|cAPur1GdbBRIlrK?C^J2ygdw0b zDJL^o!6iR8F*9%5M8jyHG9{R@l+@znqRfJl%=|nCcTe8{g{0EVoD$v4JcZ&QcPF28 zM`569QJCu7#Jtk9#N?9FqSPX=a-Vq4Eq~a*Is;`GJYD@<);T3K F0RRsprCk63 literal 0 HcmV?d00001 diff --git a/themes/dark/icons/384.png b/themes/dark/icons/384.png new file mode 100644 index 0000000000000000000000000000000000000000..9b8037417dc253ade3feae9b91d88c6b5d342e59 GIT binary patch literal 1363 zcmeAS@N?(olHy`uVBq!ia0y~yU~B+k4xj)-tUU2Kdye1879pHg*kw&B7A zG+-Fn|5AKewYB=?zjI#xJ0D-UPK`7NupT&8?Wlgc+WOSDVpB#UT@7|4K_lVDiG zTn&w$$F+`^e;5DzRlP6oEw}Ia%Pd4h7qSsIe(YNi{o5({{kQu3w}PaH-CNtFto-!f zb8bJ+XCf-CAS{2gLww8Mf9qGilsorr-lZ>b3nr5s>vEU%SA1{st$%*^T;(Nlyng-D zbJ0@yK$6qzh( zt^7jWI!C8<`)MX5lF!N|bKK-a)n*T5{q(89{Z!phiE+rZGu zz`**`+IAETx%nxXX_dG&c&!(;25OK7*^rr>Y?Yi}P+63jo>9UOP@0sJnXKTFpPQJO zw{4p;ya}g(3i#j(@>5cC7(iO16Fi-PG7O%selF{r5}E+nNT@;p literal 0 HcmV?d00001 diff --git a/themes/dark/icons/48.png b/themes/dark/icons/48.png new file mode 100644 index 0000000000000000000000000000000000000000..1caeb160cd0ecc847bcb15101fa36859057a03bf GIT binary patch literal 495 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZAUKMch)atdkRj+^p^dDH-}pNp4T^;CV31WJAjG{}WH0 zKDP7l%@3z~XY-z3>9cxLaN?&7tEux2s`BVL?J9iwiigLDf6+u0kH;%q&M2i#TbVN1 z-ediZX)CszbBdbE7TB5bN$TJ?x2NXu5&H_5ukmQ^<@9!p1Ugr>#5JNMC9x#cD!C{X zNHG{07#Zjq80#9Cg&0~`nOImETWT8^S{WEve_Gp)q9HdwB{QuOw+65EqSinS(jXf$ zlasBI^9w4AGSf3k7y?R@ax#+@T=H`hGxN4hGz0~#5=>c2YH@N=W{tOLOMGnoV=(+vi%(umAOT`TqNM`>ALA^VqltU;Z_$z5lOf z`FC#WrMl?%>@#Y9*Zh0?efQsge&l8hjDSA&mtpzy`~J7jUB7=X-{5Y2b*(yuc@JU5 z{I{%r|LcEW{>|xk{{H>C{hd?{W!bt7z!?1d{eIr=_=Mm8F8`fNjdBC*_FBLD3D)xa z_x^kNmudU+|J&zK&E&P;neWWYpFiiGzroCX=imNiqFy}C`~FS1U@G+jSUxU6H&%A# z2OC7#SED=o%R78kmI`T3DG_SQ%St8yH#{7+8N=+m50k zH$NpatrE8eul1tVKn>C$8#0rVt&;N#DvL7HGfEf&N|SOjlNDU@a}zW3woNpQ1}am6 zDN9K$PATW7Z`+!0xJY5_^A`ai3=FQijz~j>W(WL7C;sSZ|Nj_>{CmUF}m}{+7c^|nT zwR>Oo%RhBZoYy)!X0d$x9C!ZtY8m^cV~j?NCwo1P?2~tVu8@3A@7zb_3|WKvZEP0D z`xg`+So355?Cu=@56UI}0r%!`@6i7g_tO2sJZ}H3{c^W<$UBC!zfhDrcA-_?akrRJ zT3_Lv{sn~r`b|5&{ru~m{cxLmQe5BJ#s#aJZQuP)`qEPR&|TuX@<#4w^Vt()`j7ZU z@$LSgTyt6ZZ0`lzgN*7)ns;rMTAu>?Nwvf^q9i4;B-JXpC>2OC7#SED=o%R78kmI` zT3DG_SQ%St8yH#{7+8N=+m50kH$NpatrE8eul1tVKn>C$8#0rVt&;N#DvL7HGfEf& zN|SOjlNDU@a}zW3woNpQ1}am6DN9K$PAn3BBRT^Rni_n+AhC z!Yl6fzm5GHS7*;C&#>h6@)?eiJ>4^2MvB_Ivh48s?Em1R@I-9HAqG_3x6(|p#tje)FkAXBnx7WdwZ zx#ex7R@cQ*5IWcOmiO%k!Eaam&{R4Q`q*vr-6o~L8j$&~$^u_v`|D^oGWD zi|4%ToU?_Q=^FE@%^J-cb$|DC%~xWIDJ_+qxOhVSvUd#)UmMn~d#oCgxw!7)5?O%_ zavwIl{;?3mC}3iV)ROg%GSUMEg=&dwL`h0wNvc(HQ7VvPFfuSQ&^0jDH82Y?w6HR< zurjvPHZZg@FtGl#wjD)7ZhlH;S|x4`Uh74zff}SiHe@CzTP5cgR2F5XXOu7mlqTh5 zCM&q)=O$+6ZJTHq4OFHCQnwe9go0+Fj9OUlglkO-C zR4ocqotv0fnwFScQd*Q+1Xk`dZ^9{{0zSBc{FKxj29Vb11W#w641=eupUXO@geCwh CuGp;r literal 0 HcmV?d00001 diff --git a/themes/dark/icons/source.png b/themes/dark/icons/source.png new file mode 100644 index 0000000000000000000000000000000000000000..8732795f21bc6406995141f0479590ce399e52d0 GIT binary patch literal 6388 zcmeAS@N?(olHy`uVBq!ia0y~yU;#2&7&zE~RK2WrGXn!-OQy4PfTy#wLP1e}T4qiv z1B1rI+KILvhaF^&#s_az5*4)Wut-_qC+6xZvz5zrg+Nwon5>W9Ux8UBDw=wIP1y$z z_8(o<+`V}n-?}D+AB>Nlyjb!=N%fz;=9Z3+4|d4Ee`ovd9;4IRBPOeJc`lUP_ECM5 zq_$hBEl$vdy~>cwF>RWmwx{QhzV+2CKdQtZNB(>MPv&mcxg-Y%m3fJ6nZoOZ{c~@z zJ+FPlp?ym0qvgjAPjQvHC%Ybflz!fHn(2JcjF(qr3R@y{wrsd`XiY}ek;z8_LoaK_ zpQu<*@QaUoWOde2WkZ9jhrq%GO}tYQl-*YQb+wATJzo2Vd0o8H zbfliQ3UlKk$>I=t^`0)Su ze|d?A+@OdV1i8|I!2pzNNbxCpYEl4s1taXhq75J!A`MpntEJfR1F7pdBc>hUc<^uj zm1~L&=j{`E^g$*&fQ=`vG@)6%901v`0Cov+9vuYn(tyXg)Ay>~xONQ`)>Dos7W}>Y zzs~-ENIXabL>F<+R{&|io`5h!i8HYQVqya)kahsG2RPzEZlF9>=~bVzoG;1Hpqjh9 zzFz41{jbM=mj7e_2~JAHc@Pp9qxB?uGEx9V5JqAvxVhWTA$oa2gwS*O4}X}S-~WC8 z>-XO?AB+~>#DyRBPz8%N0D~K|W;l>~-txKe;dR^GB!ESD#lMF?+2_^2s|TiZ`Oz8^ zqaIZNhaqtl30Q3dSOa?8K?0q5^)0Ey2q9&Ld-V_g@*CHH%Lt0i#%?3nF&McGyC?_4 zFza;fcw_mz<}~w`QZ5EIRl}z5_V4QN{6A+OJR0H{-Dy(lG_YFiRqT#8rU$pFxFv)| zD?j*C{lD?I{EX4kgr=oQwA_NXUl=_;J^!`)-#U9>ky7#h@xTAI`@rQ7%~~HI(}^>j zg+UmowgIF8BOI`cDu9#{U1R~3Hh|ORL`D<&-SauvrQ{G0h`v`vT}f(qc!#vX!L zMX^T@w0QzF?2p-K*U|wTs7MtfaRnYy#fYRA#BBKg_Qpn#p$8P|Uq`;t>VXuYXP69Z VyME*xd1D8X^K|udS?83{1OU4wC7b{N literal 0 HcmV?d00001 diff --git a/themes/dark/theme.php b/themes/dark/theme.php new file mode 100755 index 0000000..1af0f9b --- /dev/null +++ b/themes/dark/theme.php @@ -0,0 +1,17 @@ + "#2a2a2a", + "bgField" => "#31363B", + "bgTextField" => "#232629", + "bgHelp" => "#151616", + "border" => "#5f5f5f", + "borderHover" => "#808080", + "borderFocus" => "white", + "text" => "white", + "secondaryText" => "#868686" +); // Définit les couleurs du thème + +?> diff --git a/themes/defaut/defaut.php b/themes/defaut/defaut.php deleted file mode 100644 index 234c4c3..0000000 --- a/themes/defaut/defaut.php +++ /dev/null @@ -1,17 +0,0 @@ - "#2D2F34", - "fondChamp" => "#31363B", - "fondChampTexte" => "#232629", - "bordure" => "#5f5f5f", - "bordureHover" => "#808080", - "bordureFocus" => "#b6b6b6", - "texte" => "white", - "texteForm" => "white", - "texteLienCodeSource" => "#868686" -); // Définit les couleurs du thème - -?> diff --git a/themes/defaut/favicons/128.png b/themes/defaut/favicons/128.png deleted file mode 100755 index b939267c88622afd2553ee1c5b912ca174acb8d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1940 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 diff --git a/themes/defaut/favicons/192.png b/themes/defaut/favicons/192.png deleted file mode 100755 index bb0978a94bbf63a3ef7bfad19d7cc033d96a0026..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2112 zcmZux2{hDe8~+>2jCCwGS!>*BAyZ7agBY^TeD>XFt}JJYM8jB;Y(B<4)U*EaTd!F|_?{j|dv;CguO|-Q(7Zs8d0suf1i!rg^ zIh%F`BCxaDk6r`=0B`4IN7rC`&oCG<=+Zggiv(D31d#wEg!`TYfbfx07ypbBWs$91 zryfa+(T1y7Qntpa@b27Xw>KI7zPPoA7V1XmB`cPuRrI$1IyCF4?y9r{T}fLrH!33* z8)R|DER;-U_~Q-UZ<$*6K|y!C2Bx(v7dW67TNe|^ccJA$Nz@})>Z8xC#(AOLvDjaK z!|y9b1i4SBbe~l5lwxrF@;{uY^!&3bnl0hs7>C~XUo6j?RXjqauD^so|GkPF;Z7(v zx{@-n@k)xu3*h9BNe4XR6|Je+i!zO}g{9^Qo9@cbnB?Such5Jfv)mqJ z%qBtkYFgw5;OP<9<6{OE>W)7&-xOKXX5Y-g2f|&ckPsM(b(mzs=*UssAE4JeMTg_p zPYSZ6@7M)r9B#@bWMeFXIoUltWtj+>a13mVe{;WZ?WEC}$?9_N=Jm6_UYVA~k)U<+k9Xa$h zHzcl2+uiV*Z$IRMts$&Ca*gM6MygS~W$y#rQ=hKNyAPYe!b)xZeZ`Vm93Nzxj6+Yw zAuBXaNQIIfbPQKHDWmaHsWUr>QP|}3iJvAkxE~@Q8@v)H>X~3Hw`yxv&^K!?-zw9o z`LV*W*e#IHR#a=yk#te zS1U7deqj>oC*HYX+q|V+!H|`a>hsVG6-e!8>W~ua?=kQ*Jp?;@t*iG2yNX9;dE>}l z6&*H9*%F%F;^-99T0Nlv5S&=yI`?$;}M5De9>lo z<10hUnP=cH)KJ^bKl$N4j^7$9cI5a+=snl8TnnB(JQk*eG@f^85zW)ZMw)ynbstd~ zUl;>dRzG{ydW*qs9A+o@Nga&JpP@&MOa)bJm&(${!z9LOw;JNvsbrLDb9_U}#H{|K z=yLYhhNQu-Q=6G+&e^*(*}2e`IxL{;?Ir)#NuP;TB0oswf^?N1OBu}RIarH5>h9To z%CgbmBJ#^ODamQ;QV&OiZeDQ)-2<3h5t<7vxTDQn_QmAsiCLZ1+X0Sm=d4WGC=Ly& zfw<|qcATmcZY^gs{(W{sU0X<29L9quITdDfdY`;F!BhP5l7QsbnJi5J0Qq7~PCJH=ERHo>@gl{q+r^GrLvHj(^WeorV)cCW;gYA$c1!9>3F?9`en zhZ{CTVn@`eo%#{;54=f6bqmaVrdi8;hMXHdu-q;7&BzZno1~~Cydk-TnG`O!l9vVH z`^V3BNK9P%1O9pRJB>wo_pyn4ihw!n{{q?tDjY%!4@31I-tI0=2&XroI#ACq>)Tv*K3b0s1r)CSyAG)v^@eZG-C%Aue&ud1 z@q_jVtFB}e)k5iI2A}O)TDSyml7M_K&>m?R!T=Ba84uStl4;0hv z%z;{Rue)#}N{ST!N5(fRpqQhRY|tX3%#pkG+Ol?tE*1k9|ADl>ablHE^lhsnFVXts zLUI=?c=up;rE&w&Ulketr1xaugbN!7KLw;1e)sZs2fzSr`WIA7(_U;EVx!w!;vspC S!>pY?1hA&oCS^t*v3~*QWr9Qi diff --git a/themes/defaut/favicons/256.png b/themes/defaut/favicons/256.png deleted file mode 100755 index 32c46e65de3fbb544ca754939d436f57755bc0c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2353 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 diff --git a/themes/defaut/favicons/32.png b/themes/defaut/favicons/32.png deleted file mode 100755 index c70d1ce0cd9afbc51ce1bed07059556efce2ad22..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1685 zcmV;G25R| zaB^>EX>4U6ba`-PAZ2)IW&i+q+O1bxmg^`C{MRaG2}nXbmV=EsXLfLxKZQ-wiQBQ0 z%!Q7@GU!ny!D(9l{M+asG+}k*EvAq|aA-dJECrL~wziGz{Q6v*j8AxflGFWzK%^LT zdkxE2Um&-i4bczz^em@14?Srp8Xs;7wOj7i>Tq%>QrYA@-YE~4N_Yro{MszJi)`9H z?caR_7}cOpg=A4cwLLdW3NJKk!Dx7jM!8As_WX?>-Jv@G@IKq&=jI{TA2>Eex3Izv zry*xM#&1RG(Ib|-WqI^Si;M2DJ>u7DYHit~D?Sk53L~gnDC-Oh0jbw@TR@Na8Rl{A z89lk;X0TQf>O^kBOXi-OjXhT`+;~~XnP<4@Wf8zFBD3f!OMpMiyprO3=O&TBL)8Rs zW-zA^%iR}V?dEO|#u6-7#!6u*W9)e9v=@BapA@y$)129*J67;Zddk9$&RlreoQVB6pfD;RKr)i|(= zB9R$5Ch$|>xu};346u<&g_q)01IS6zZDUX5b*-3eVjM3Z!Zc_EH7FF2<-PfUdP_*5 zLZ;@;ELgN;*-FshgM|=c=;u_48hx}FVvH%~Sdu26EQJ(PN;#D*S#gXR<&a}eIpYpS`Hg%_mK;ul-O z5|^~(r8MMP)8?DC&|*t1w{mA~u=>o}p1E_@c(5ibQGH$fVGZIKZz{MSC)POwW8xW% z$Ibu}S~_PgvG>xM>zuhPN~$LC(mFYnJ7ZwbFD%yh&fO1lFL@)N`zdd7#2j_%{swc@ zse54VH*W{5)v_M9x)Ri@5SZeGRFq$nrAUH5vuAJk>-Wq@Be^d({#F!g+2-EO-KkXi zZFxMlG%f3N>LuNGAu&VhQ^F0Qx=6c4_N`vpDcvp z?$aKZi}f$f(DlBH@WwX!7T!bp-Kqo^`WU~_dqn?U@2l}Ce!9l_J$>}QD)nKcj}zua z0?-)~kAYp)Bb^lDw+Xo~po4-s@srLo<>Vl`%EX>4Tx0C=2z zkv&MmKpe$i)0T=5ykfAzR5ET(8twIqhgj%6h2a`)bgeDD1i;JV+T5#}VvFhOB ztgC~oAP9bdxVSngx=4xtOA0MwJUH&hyL*qjcYshYG0h5$0-9biQ;E2k$*zc@R|GMD z9!w)3Gs~Ejq$E7Y*FAiEy^HZI?{j~SE;VN{z$X&VFvF}6uM~S<%#pCy1k}rc=I*5I_d9-xTnf21z{oL=GBn7JAN&t~ zcWdRx$K0fF90@T(>l3 z54hX``koBglpV=WQ^@Cm_cQvYEYN!kbgsI+HTQA)0Hmp_y{D4^000SaNLh0L04^f{04^f|c%?sf z00007bV*G`2jc}B5j#7Bp;I{k006;BL_t(o!`+uT4uCKa0}0|g90mOU0W^pYL6w3? z#^zESw&F-u?8JKz+J4-sj8<2ft%(=wGD{n}VLIH$eewBKKRyIdgoscY`CUKR3BV6n zmsvi~Gh=@IG{DXM2rZFy!?qst&D6Q f_}@fS?BDSY&tivqrVyR400000NkvXXu0mjfQ~MyO diff --git a/themes/defaut/favicons/384.png b/themes/defaut/favicons/384.png deleted file mode 100755 index d41122f25020f20f1f1c22ea887857603c70091c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2873 zcmbu92UJsO7RMh*F9L!TQ4COW_L zmx~TADrM9JP&)gztfzu1!nO*teVD9Hmnu19Wy{98_KhSLMr8U#`r!Vbaw%uVY)WX> zjnszU>hn>zb7!x~i8Qt64?}LoB&Fhp^#er470fz}=~119USS&UWW+_V5p!3#KE1O@ zS0%)x@4}SAj@Vlwp=sUP2WK`h83y!{->~7?2qq~=SW$!EbborgGy@yHEPh6^NcU7J zG#%z@@~X})4r8VkRFQX});6kKK96(5TD7p5_jr$d`#IXMf7~tQH=o?JTptnppjtcK z$Nx!CO$XKA+sk;D4jrM~J7GLJ0)P|FTSCiy+eBU8w&`87@@Ep-?9Hcs@ezZz*=TM) ze$7o5tc6_8Fw9~#`_B{r)+YnFpo|Y%dQ@N}t`_tM4FVz-Ef8x65DM zH&vXjeP;l_KN*%8*n6tXvEEObxFx8(>{pa#k;Bi~cg{*V6%6K(1|5Qr-abESkp`(B ze^OX~bL7nEr{2QaPTgPw#Ss=wJlLTtdher4hpOpns)`I>lSna#{=oy`snk5W7poV2 z+|kfHXSAnmTx~-l)~~uVYJPh!bt(flPkPX!5I$VC3hF&h3h5ZPf4$M2jD8(*QS*M( z4k&G7SwO3%Q&v*64deCVGsZ3a&SrfT-ae&ZkIvT_hwnRc17r4hZYhm1=H$+k9SA!< z?s${rP+0QHV0Bb)PG(_lUU7^&_WX?vYvx2bWxBox|FAk-$#gEPnZO^E^{%2I&U@QT zv||vhw=W7M3aAVGhwSA zI`V!%d|PC!;{fZ(8#KB#p0kx^OA=~TbIao(9~EqS#j&0Naqlruoca=b6))9x{;>*w zt~7F%)pFA|!cE}qD}k1l4oFMOuXYxgxZqOOVMGUfEA7Nk?lottS@65-#Rom)H!EmW zSSajHLKVA+XWN=3Y04tg((W=*p^K-g-!Ui4$%$mJ1QyrSbWo=Sk;=D~g7}#j&v#KU zcuEw`K_Av9l`fp`19M7kBJ@3ViJE{>Y^e$PU9e5Rh^ z8CaXvCI+;lT)s-tKEzdqzWP|fHOFN#d{QA>53$yLkv45a7riQ4qy`%*J1{9x?H+LI zUWUiOaEeyS-G7uiJ-i;~G5vt%q3hzYRJ3;GO~Jzlk1ysYB7B9?u7fSiH>+zGC#Y5& z)KPY<11&EuAHt@3Nj2|p>xSVC_H}21*5t5J!P8w`<0YY6B_2Ni)Fm(fLUfDaOP*=N zT&E;6UaXRn+v+7=YKp9?uVX9pQ)Rup8uy{)n#P5=MKWVK+j{Jsx>=W(_i{`3^kbwW zDqEMZz8yYGhqoR%Jd;4nJ9CaO2IyND9>F5PAT26aJFlNR4Y>!w0{LeR$ zO3D^wBtsD%;Q*kg@p%bF-!qF8B*i0;N3F%*imGn{RPY%g6aWzQM_QRXN57bRW*%|{ ztOP%P?s;Z6{8KBSnIt>b++%c9-7hO#xgRgbmYrz;v4q_XLw35JKMisvl76$PL=LO;M#<>)yxdX^b+ z#DF9AIH%BJH8@_pkk6i376u48->riHJU0RCBv{;NkXr0I41Jp&ckJnkpeXzc_}@dl z2!I2*H?A9FcyKZ;XGK7N{|sn-?KYpn`f(Km9LPI0q#2 zaB^>EX>4U6ba`-PAZ2)IW&i+q+O1bC2$Xz7-q9xea;-RLhgVRhs!rjSE$Xg>Qa1(W2qwvFuk`dpiiPk4Wk)BS@$q>q(h z8S4w=_Sg{pkWa62iu2HuhNAJ|rck?O!K4l+ha#0t&f}f3Y?Bh6!Wq9dOYS0@wom(a z9|1-+=u;tC6i{u?&62_k%~~)To}y7UX_stI`4d07Lw5k+eYV5T%|osaI5tJMu)+?f zA!j?rZ$;_ZBbK{md7-+v=$_j%eyyg~mMyyC0|Blug1UvW&ae=WdR?~#^oXBf9@n1H zlPhipYZakR|T+__NF_DZY1Z5()fNO<-jP za|*HCec{z^?)G3T!E$A+6oxX!j+ah*!LR*AQENTTnO(YL1;3iieTWYzLJ8Og0SJw8-owLS+HCc)3>*9koh-18|;C`G~=M0RAXD}W+ z14wA;oVmo_OJ}Zg=CUZMn!rozeT%o%u%QA ziMc;{J7BGr^|;lQpk9T*6epyj{F*F968xDxd&6J9XTBQA{kZW@MX{D`?%mv-N~PbH z$74&=vQDR7(tQ^aGo(Hx+z_gZv|D7q>ZP6Hz21Ew&vu^laHI46Z}#2ddWw&J(R1WJ z?QywS|JDp$@4EE^zZe)8(-q5Yn(sRNB^l(pGNvRVcsMF zoiXto*i}8!Ng@84koy8UD5w)Z={!?T4x-D<{;=RrGy5!~ul%Nqlk^jy+;)t7Rsxp* z()$ehu5{^)iH|aJ;6cCWIr5LbsIb$UioU-JFEjh|tLMmHI(7I%zxqhuB+S{>O+S?W zp0Q_}{73O#cE?py#W^`!RX|00D(*LqkwWLqi}?Qcp%nOho_yc$|Ha zJxIeq9K~PLmWotF>>%opp*mR*6%i+`LJ=y2TA@`3lS@B@CJjl8i=*ILaPVWX>fqw6 ztAnc`2!4RLxH>7iNQwVT3N2zhIPS;0dyl(!fKV?n%?gYHnqDzeiMW`_u85&m1Tlaf zOd}vO%b1mkam6Hjhd49@$+5muB{;&b8= zlP*a7$aTf#H_ioz1)do()2TV)2(egbW2KE*(bR}1h@+~eQ@)UKS>?RNSu0gp^Pc>L z;hes_#C4j3NMHerkRU=q6&om_f*7qjDHc++ANTP0JAR2=3b{7G$T5#HG{}x0{11M2 zYvsqs+@x?E2)@|%#}E+O1sXNm{yw(t#tGnm2Cnp$zg!2VK1r{&wCEAgy$xJkw=`uB zxZDByo($QP9m!8q$mfCgGy0}1(0dDXuDZQ7_i_3Fq^Yaq4RCM>3>PSS&Ewr2?Y;eb zrrF;QeNA$!TffR^00006VoOIv0RI600RN!9r;`8x010qNS#tmYE+YT{E+YYWr9XB6 z000McNliru;{_WM00QDrickOm0OLtSK~!ko?b$mHgD?;TP>8rrK1Fi>1Eh&^p`>+z zr5VOfcBI)31h$Z$_9NEw_5N9m#>=!R|u6Qq>xa8-7ADF2(fIGg2nC?LS+fDM~`HW9xbIW3ZZ|;`pbz7X|36|JcKMJ zve|_R;nZ6vgvw?igcDl?*>@3IA!Jd=6cS3Wm5I!bkkZy7N6%73dZZ94JCP{`i)Elp zf+18k3n6_-g{&1qWwX$zscICPWFb33Gk&=$#V-HItS7RZKt7-!U)2?Z=*(~EG2Yk&HB)216`h5iV!B^cmwog4S(dR2Eis)ApO|~Yx zqlPg{Q_ptr#@iO_Kb@bS_iru;>Yy^iP`PmxH{n#N7bq`0Cxt{Gu|DOE9(dICu66#h zc_nS8pjf*&(o#f&G@E!o5Y7F-x7%JqCLoEgC7)S|2Xe%xp2V5(JSNaajRYfH55z_0 zUrN;PSH0RDp81_3&V_&lBBsCkj1}~7NycQ`+Bim03*3%3c%5*U5NsKE=DDY1^kKi9 zEyKo?Xlm?V&&7szG@T&4QGca}n((s|!5A=j$Bqt(1zf9-bs$Q0g?s?-za<})z!sy+ z=MJ^pGYB7d5vn~Pl`~#s3~IF;O&DEnHI)jRhUd{LNw@{d9a()U z=`qD1W_Lrf(_I<&Kbp@ND(5CzG{^7kPd@$AvCoM<3Y=y!iocyzszE6?WrZO;;kuF? zaZv{!-aMhz_jAM1JY{_D$*$W6z{`(I@=`rg0(Im~gP+Qqc%QV$IH^liy;5zx{lM>? z*Y*W;pF5Xn-LDeRCQd49HnGeUMHFf88f)cPoPMq5=3t^8HrFeL(l(~Om07S;^GR2^ zuW!`FaoR>U|C$>wFa1`%_|OZi(qjA(wu;O@_8PoBoj-$9GDxrB^U=C~+<{2AUfGqB zH5gI5!id6A14_Q*oknJ@XDN<7_@Kaae#tsv<* zMs`Mp3+wpB`?pNlRz6p$Dyuwoanj8>N+O+vE14nm?A4+-w4MI`yz!G0%lL>dc}9xt zCl<7Qb~p3t;ZXLVq@iAohd8grq?>Oti@k%}e_>kWUzH9*D=G4TZOOfR{k!nK9nnJ~ zAFD%t5}%MZQzIoN#Ew6GI^_AC`bM*Gys-R>lWY)|T$$&d+0t4W@LNTwrpE;}=TYKq z^jwzLlw`dD!ngN}k$xs3;(ij7Me*68n7)nSioVbx%jx6qOBE&J#_wx-P@_FISVVFub*5%yYm= z{pd_%B^F;90GcZ*xANR!OSMzBxK*CqTpXQ!ot>9qpYG za@nCj6V>EJ&OApfeqB5sd<)I<;&5$~GXCJ9rn?9Re{g`ur^dz)k1&$(>fVJ$0f9bF zan*j7=I_%D+{3tS#oq`uXs$d>BU0(}alv6=c;#Z#wYkN#RF63gqF^1MY0HCmE^$!co)$)fHxqOXG^|{74C4>O+IdvguM03p>>1kUA z_D%P`yz&|;fT9Rc?kaOpaWJ$1-!Yks!iW>yRXw!|>{j-PV^uSX05Zu7$_N7hH~^ra zjL@(b000nr;{X68^w@mse>e`-6jE>wBzI9bm2OC8jW3I8;D!(fGjUJ@#>M?5(kA@2 zO5!WJRTJ!vvJkjLa%Z;H%<@-j*=>xw3E<{i>-jglt3dE|pGPDsc(QIUIE$afi~cRY zA>{SaqaYa@xG*f-1$QddV1qEz&LZdSmd>bIrm;pK<2Pxbzr%9o%{X(i4%+UrBIlMf^SYkmpeP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O1bxmg^`C{MRaG2}nXbmV=EsXLfLxKZQ-wiQBQ0 z%!Q7@GU!ny!D(9l{M+asG+}k*EvAq|aA-dJECrL~wziGz{Q6v*AD{64B&Yiafk-jx z_8OM4zCdn28{*i&)3co7JoKcYXneRS)NWZYsl&;kNM)1rc&9Aeq=biX#;?tiyU3>P z)BfE@fKd(lR7e&DRNHg2r0_zs7L10cXp~LbCEL^g#*gmM9RPTr?eKH+kn0Z|o1$A- zVTaR@vmN8NqV(ty%iXd(dZfig_t+lsYc;jDY|#}T2ylfF)Gd^ChJ}FC>$)wVNBj)) zxb}>mTyZm4s|a->H{m67PtL}kD;I9OtmDixT=cRC;1-ctbd@E*pJiT2@x61CNZ_Yx z0xL6^Q;6m63$J!_w+CYhmMdeWFqAQNJayU&zU@znTI*@f?9v@8_$57M;YMe!Kd}mg za2uG~iZ9bPxP9xyDj2jC=7a!?n>H1b@lS5)%CkBnEcK(LIo6>75W%*=8CEdh0;_Rg z7eyj7a7^H*z;jVA6BuA4lL{}zs|Jvhq}#@x$m?1$*~ByoN~^k zz-aLWx(e182qu|y@{>(ric^~MRA!{l>}Q+99OpFWxm2lIaRg8eHP%#fEekJ5rNu9{ zge5L%$xCU-wWiHCYoW!KT5jde+FgKTfQ32FAoQ z7>}I+B(!wSTw?E~GuJtDS(H>w;H7nPDtE@fpkG+5@twOL=3eqfK=)JLC{WQ??PgR)Te|SLUoaLi|kvyv{Ss-yAR~i&VwFqbiV(^zFS-m@zFPW zj@+j`E*I-xnxX4`7vYU<^ew!H^t)9FF7z>eqxXpZz1~;jQ~Y#|^LzT}e^u(kNFOK6 ziv*xECLRO3sz*90#BURFUqA;1b>b(TXUfSzbeY+27W`>upJnuw-*j=3z5|roj*<6D z;1WQ3ok5?KE}b#)Rz?my=o>vp{?P{&c6w9M=U3rnX1{;+9QjM94!`MFAL)~XIlH>) zi_$-|OP`hK>ybX)aG?nQJGGkWKa=(6uNi#kTmS$8g=s@WP)S2WAaHVTW@&6?004NL zeUUv#!$2IxU(=R~R7C6`>X4y2Sr8QwC#^yeDui00RR@zxKZGU?NsEi4;979-W3lSs z;;gHKs~`w|fVj9iDY{6B|4RxjVmvtR$GdxvyLW(4FEPyui~^coF;j`Sn8~h)p;rVk zfF4XEAT!IDm82v*$Jaf4e7%eDEbnuFjxIH4F~BDh&oINR5U&$YZdMG=`@|7elvUz$ z;t`WBNc_lk#pO571&0Nm88OqTIpPShSZHIVjakvuh$o1ns-{!Eka1b%yv127Rax_% z{DtA1zP!YBnuADS0gI3zLO~T9D4~KFtvV?dQnVlU@b^1@iChY~Ho(X+k1{mKjvxFF zes^o-$H&~Ha2yD}*!IT|5ZVPAHQW9^w(Z6V;C}|L^p?L|2c|wrueG%35zxI2TwJ#_ zWe>RA0s5W{*_0j0PgBU}f%h}|rYz8V3v{l!y*2l7`T(S+o67`yYS};zF>` zB9Udcfac8-N*h@`$1_ov^Y#92h3nLc7XnllVC_G6Js;5rTyER&`~G?T^?R=e1P}lZ z@EBG-WXAl_>j41-zyq4al*(kf-1UF}0^kAJY_I;_&HC5`J;CiQ-215>0Rjks2WY)O zn&I?3f^z{7KmgAJ(la-eQP*SCc>xF@0P}$CzN&hNd%o{_76>2!IbfUv)c*S4as&t< z068Gb;OzQze@_ko0R-6B1CD-&DBU~oz5oayfYuA}4?q9}C{-WgBZLUDkfR>}0000< KMNUMnLSTX+Y)(Z0 diff --git a/themes/defaut/favicons/96.png b/themes/defaut/favicons/96.png deleted file mode 100755 index a075087e1751e346f32cd4338ee134204b1947c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1848 zcmV-82gmq{P) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O1b>lJh7G{I65&5s-v<90waywKv$~Z(}nV$Dd;- z*@cP0GU(AQK@Bbc{N3m;G+}k*EvAq|aA-dJECrL~wziGz{Q6v57@zR|B&Wv*fk-jx z*szTC1#CG5f(zcx$mBAd2P z$9EqAMm6YDAz2hqZO_e;!VAq>FdCksQ8sCp^e3zSi61?nI|1-9JK*Q$A=h6x=!uGO zz-h?Y&hcAO+Iz(Euq=Czw7BT@ZI558skLQ`uJ}NJD~zCiLRn{62uS^gMnI4F8Rl{A z89lk;X0TQf>O^kBOXi-OjXhT`+;~~XnP<4@Wf8zFBD3f!OMpMiyprO3=O&TBPt^og zW-zA^%flC5?dEO|#u6-7#!6u*W9)e9bQFBspA@y$)129*2UhS)ddk9$&RlreoQVB6pfD;RKr)i|(= zB9R$5Ch$|>xu};346u<&g_q)01IS6zZDUX5b*-3eVjM3Z!Zc_EH7FpE<-PfUdP_*5 zLZ;@;ELgN;*-FshgM|=c=;u_48hx}FVvH%~Sdu26EQJ(PN;#D*S#gXR<&a}eIpYpS`Hg%_mK;ul-O z5|^~(r8MMP)8?DC&|*t1xAI_Zu=>o}k-2Nuc(5ibQGH$fWewsOe^hWkPONhV#>6ui zkDUP|v~Pk?rLSTv$Qc-?QmLduM%$~jBuirBtjpV-E_@|;+%Qp9J?oOrB zZ_D$srD<8GQ!nYh3yB$0pAv2e)kWG*WZ&wggW{v!V<3AwJ3ZX!djE@kKXL8iqi^(_ zxlc!2Zq~mvL-+e`!W-M@TX;|DcdHUy=wtjw?-~6^y|2cn_~{_JQ5iBV82Yw+VSHpp$~S@RP1H<>DZ^&FnV|{xY+#GWyPMx;aVT0m^O1$a^Jl z3n0DDpwCK|u9$c$BL^Pzjh-|A=z|Koys7B(tME3n-@kg!{H05W-}I}G^hv^8UETCW z>7UxA&r0<5NS|)FQH1}UTFvw?)`jP@R_`(K0004nX+uL$Nkc;*aB^>EX>4Tx0C=2z zkv&MmKpe$i)0T=5ykfAzR5ET(8twIqhgj%6h2a`)bgeDD1i;JV+T5#}VvFhOB ztgC~oAP9bdxVSngx=4xtOA0MwJUH&hyL*qjcYshYG0h5$0-9biQ;E2k$*zc@R|GMD z9!w)3Gs~Ejq$E7Y*FAiEy^HZI?{j~SE;VN{z$X&VFvF}6uM~S<%#pCy1k}rc=I*5I_d9-xTnf21z{oL=GBn7JAN&t~ zcWdRx$K0fF90@T(>l3 z54hX``koBglpV=WQ^@Cm_cQvYEYN!kbgsI+HTQA)0Hmp_y{D4^000SaNLh0L04^f{04^f|c%?sf z00007bV*G`2jc}B5&#Wy@0Y;<00Cr4L_t(|+U?y-3Iah4MNt*E<7c4zUw{*FL%M<% z0tu-!=S~%^^76u?E!*Se_V^yq#>q!O00AI?0Q7L)df@YZwJhj*e}FoFmG0R&)53tFwERIjso z{SsgV5dZ=Rz-le1>$GrI>!@yJS?7o(zz8A$1Q38G#@scrx{Xw?Qv!@25I_J3Sd8$s zpse#St~E)35d;DVAONi_ch|(~)>PegB)|v)0R(`6y|$n!|FW93uj>QN&pBT00a<#zx)83ID|+(FjQp#0000 "#2D2F34", - "fondChamp" => "#31363B", - "fondChampTexte" => "#232629", - "bordure" => "#5f5f5f", - "bordureHover" => "#808080", - "bordureFocus" => "#b6b6b6", - "texte" => "white", - "texteForm" => "white", - "texteLienCodeSource" => "#868686" -); // Définit les couleurs du thème - -?> diff --git a/themes/light/icons/128.png b/themes/light/icons/128.png new file mode 100644 index 0000000000000000000000000000000000000000..fa275394fd419c184eb3b0923f7a2be63e1776e7 GIT binary patch literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?O3?zSk_}l@cSkfJR9T^xl_H+M9WCijWi-X*q z7}lMWc?smO1^9%x{{R19OH1p@3DIppkxWk)#}JR>XQu@69Z=wK-uZv2_3|k%`3_8O zahPY%YudYG>6dE~aRvs_aSjU18xy|O$*}1(*PZ*?{A;}#H&fK4edQc3^G@C}5cm|p z!v4hNW2?r5w5d)!F9eP^`usFb{pI+yV_U*&_VO#te{xN}RmXpR1GJRE)78&qol`;+ E0PkB)egFUf literal 0 HcmV?d00001 diff --git a/themes/light/icons/16.png b/themes/light/icons/16.png new file mode 100644 index 0000000000000000000000000000000000000000..25d6f371be32be638efab1818742faff4636a211 GIT binary patch literal 159 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!D3?x-;bCrM;OS+@4BLl<6e(pbstUx|vage(c z!@6@aFM%Ak0G|-o|NsAMX=z!lvI6;x#X;^) z4C~IxyaaOC0(?ST|NsB5rKNS{gy=S)NSCLJV@Sl|x7RQ79#G(52{0@8uY0q>Y?1o5 z^hXTtKFPIpf(x(u6w2!w-OJq3D=uDeqUY%n{h1FqBxbsc&q=g<9w;os$a->h7{iU< zHM)TZ#iJC;f0rHPukuY|ubSDwG%ZVCSU{sU=go=p4Gjmi0`;H!J1p$a*J2e>>(>t8 l=xgYH^eb94AmGk1W}XY`QErnzu>oDh;OXk;vd$@?2>{L6Re}Hj literal 0 HcmV?d00001 diff --git a/themes/light/icons/256.png b/themes/light/icons/256.png new file mode 100644 index 0000000000000000000000000000000000000000..a2a3166465dbda4acf57b61ee0ba54e7e1a6d721 GIT binary patch literal 242 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K585o&?RN5XZRUpNZ?&#~tz_78O`%fY(NVYi0 z-HBn{IhmJ04qJdvi0l9V|FyKVuAC6v1{CS?ba4#HxcBzPLEZ)f9_Nd1_M6BA%)T)( z;=p~OrfJ7@m2y{eOtdk-eJK4?PGIkbpDg6;2<(Xzh)w%2lK8289HBCIGAolgmE%HYRI$RQovB@(7$Qz oN`^xR?D`_4gB*Aio;+in_UZD~IF|WOfv#fkboFyt=akR{0Ca*@s{jB1 literal 0 HcmV?d00001 diff --git a/themes/light/icons/32.png b/themes/light/icons/32.png new file mode 100644 index 0000000000000000000000000000000000000000..f30300f8bd78ad1a990bebad3ade19a38023aa57 GIT binary patch literal 183 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnL3?x0byx0z;SkfJR9T^xl_H+M9WCijWi-X*q z7}lMWc?smO1^9%x{{R19OH1p@3DIpp5r0n?#}JO|wx=A~7#w+AE>6gOv0CJ2TZ}Dx z#xpHThZ!@&zQo&f3GGa^cYcs|Z(btiIVPik{pF~z5pRqW| z-HBn{IhmJ04qJdvi0l9V|FyKVuAC6v1{B%u>EaktaqI0ZZ@y*&9#)5U^)Ji9m;O@- zU8O7bS&U6Ct1Y9LU<4MxW2SAkNqA3R&X?Avjmh6Y0grB6%tFlq(f VS!>7;5)G7O@O1TaS?83{1OPXiU`qf1 literal 0 HcmV?d00001 diff --git a/themes/light/icons/48.png b/themes/light/icons/48.png new file mode 100644 index 0000000000000000000000000000000000000000..66c39e61c132385b0959567afe3bc87f0f3b0e38 GIT binary patch literal 214 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDH3?y^UWFG-iEa{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaOC0(?ST|NsB5rKNS{gy=S)NS>#QV~E7%+zT6d8x#auA1aHKZD8QcHkhW9 zkiZz**=Onzb70b;ilm$`2k+P1J^i%9Ez-|A{6L3JvvbX~>~;?sfzw}Qe_t}%%>3q< zo1jAfN)7f4PM?$(_}-qupqzD4cAjOJ%adT`x2#`cz9nDb?P4sPp*CGY6KFGor>mdK II;Vst0J&yMc>n+a literal 0 HcmV?d00001 diff --git a/themes/light/icons/512.png b/themes/light/icons/512.png new file mode 100644 index 0000000000000000000000000000000000000000..7379b01ae1bc5ea18c08ece3194e1e9f8341ebc5 GIT binary patch literal 335 zcmeAS@N?(olHy`uVBq!ia0y~yU;;9k7#Nv>)VXbLJAo8Sx}&cn1H;CC?mvmFKt5w} zkh>GZx^prwfgH8~pAgso|Nm=gX7$ zvXx%(EYbBhuPHsWQ1P79b#Bq`tuN((>VaV90W1AA&v#ctcqzAoaq@cqI`;DqeL)I5UHx3vIVCg!07?j3r2qf` literal 0 HcmV?d00001 diff --git a/themes/light/icons/64.png b/themes/light/icons/64.png new file mode 100644 index 0000000000000000000000000000000000000000..e9f77bcf7f2ab7a2bb826c1f422b6bcd5f7b8323 GIT binary patch literal 192 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0P3?wHke>@jRv7|ftIx;Y9?C1WI$O_~$76-XI zF|0c$^AgBm3-AeX{r~^JmX_9)6QbLIA`zZ0jv*T7d(T}IJYc}V6kwL{U-xFiqFnpK zNB``3(!muYl6xYI)q_J;W`*+c`|FjBKFqH>^v*V!d&UzxkpqQhs~^Ou)g04t+o+tm mG@JE)g=@x+!?(9SS|k@KfBbE+=28iu9SokXelF{r5}E)!RYckV literal 0 HcmV?d00001 diff --git a/themes/light/icons/96.png b/themes/light/icons/96.png new file mode 100644 index 0000000000000000000000000000000000000000..4c03902294d1fb103eed772edd16eaeb7e87439b GIT binary patch literal 226 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeK3?y%aJ*@^(Ea{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaOC0(?ST|NsB5rKNS{gy=S)NR_9HV~EA+wUaOMGAMF5d&(S`7;$%^%z-80 z56<1OH&yxcM`7uLnO}GqZl8Oym1TouUa>330q#CFC8wn<0=)liG7egIzuLpg+#R~| z>yw7r3BqaTbbQ`8r`4Rg6ssYuIX#MX!{Xv=t!#h7!W|5<{{NaVe_B}G>N`v?D;eHZ WKCAh+h$kB83I literal 0 HcmV?d00001 diff --git a/themes/light/icons/source.png b/themes/light/icons/source.png new file mode 100644 index 0000000000000000000000000000000000000000..41c0467b3c9eb4b7445d17718bd639d791292dd4 GIT binary patch literal 6386 zcmeAS@N?(olHy`uVBq!ia0y~yU;#2&7&zE~RK2WrGXn!-OQy4PfTy#wLP1e}T4qiv z1B1rI+KILvhaF^&#z${mB-&mkAb2uhu1-gnMV4q+fZ`RdwN^7?ezE#WO%f4zKe+Y5 zgX2k84<3ySXAgH2_`^_GR1#D&QRx44k*FgT1$X+(zsr@sXQq;sqVV54||L;fPPIpUC77GV$L(eEh0+Z1bM;e=UDanRAk1zJtx_lEX^(6z1LA zQgZJ15y7x2B9Dq688+*A{5es2^Qrkc*7myKQfeaSBwht=lqf ze-L|`o#*$F7@eNwc!MZ0cF1&yDP9CWF!}7oB zOh8%yh=FknA_y`;NrJ%vM1WHVUM6uSf~_RdL?qj3WH`Y9Kv#g>4^KE8BYHlyXyZ@e^GE5)-FdzE?HW`$K85}?a13@Ou;>8DKJqaFd0I4T3 z!z+N*5@$G4coE0MZuo~A=}ozwJ)p48m1Vkq|L^V#5z4@84~0{KhM(B{8?R;ko?0`UgLs|119+`+u~;WM}|~F;Zlc5ZsU$ zM$(JKwE4Dsw=whTNfL<>(aH?>>L2{&H?9GfRU}w|;W#7<(3uKgj}T`#2ZI_&HN{1z z1K3Wak{-;YRUXD;c*UFY^6fUjQiUNQAX>TN|Koqh|GxiYd{i9dKn1WXi47T`;s&q= z^Z>>XCC)?zkYNoB2_V(93K<$jqyxz5*i%WvaXaCh>}-}aRYRt8`@hTY_}?fw+WKw) z2N+VqAt8wnDomo~6i$9&%=mr&E3o9QXV~-q12B#M|32DI!Ki1E!k;*%0yx^x;|kae zXPUOvlvz4WNJ_vWX5+i_i-$j1K&Ndt)QWi~|bwuOr`R d^+4*-Gfev>=jBH-Ih+T{dAj "white", + "bgField" => "#eeeeee", + "bgTextField" => "#e5e5e5", + "bgHelp" => "#ececec", + "border" => "#65666b", + "borderHover" => "#46484e", + "borderFocus" => "#2D2F34", + "text" => "#2D2F34", + "secondaryText" => "#868686" +); // Définit les couleurs du thème + +?> diff --git a/themes/parinux/favicons/128.png b/themes/parinux/favicons/128.png deleted file mode 100755 index 014b9b870c44c83f4e9c7c564d3dc12e15a61a44..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1515 zcmZ8g2{hDO82`^0OO~N0*^((~Qr5`Q%UB|09h@*?MnzME#@G#0DPhDT!@(d+ma-%~ zhLOIH&jSJ>UJ#`Q7h#zu)gW=O#KiSV@Q~hynm0VPkFK z%+JK_5E0^^od} zXm!=qnZZf1-pv@*vVNjz2{SZWoG_@BHX3QpYKdtkyF6{7)GLk%$BKVrsW%O?`vR?f zGgh|jA`9Gpyuz(6me)Z?>m|P2LFk|Psqkt>R-Dxw&b4^ zM^~Z*2Bn8nTe>MHS}xYOm}!0&{c_Z*C2xLhtV*6rx=+uq5sJd~dUFpeI^)mMecCK4ort}$udylnA%O#PcOoK1*`72nG z2en6&g1g&vWk9bZdum#%9*BRF@8Y@AqE9VX3`!JvfSFdgI)qN&c;BV{pUeq`w zf2{G8VdFU944J%#aW`uhe5fZJhCFgoC3R1X=wVrQ9TCX2xvYRGRsi7LtQ4c)+`M## zy9`l4haMK95CCicYr@H-7yi*n=ai%0esxq`fGT$BrMZYsk8Y(!3IZjr^Lk&1x=n^7 z**reQ%5N%I95cDwZXhFJEtU$?f`4 zDNFwdd$9ZlLT7Xx)s>Q_!w$kh`|9odG@q@V?6&vQ6w|-Er~H|{VG3MFibZ)PR4_#8 zR>G;Q1l`QAn!*-w#Bh4O^HU4WT=S|-c1qES!e+6n4ixBt0AuUp>m+xp3vL7OwLr%L zhgRJZCDUoHb8_RB9XcAD8>K7wBO|-IXRMsYh=0&}z$mh@o{K7z(ZvdT&-L3S;vnG=^+hK|vs-ys9=tupB3=_j;Rrd%YFdsAqZ%U}%m zAx3;sC+g9zzYromPab+imm9AkwoTUN>JyqC{>or2_|G7xSQ`aT=JMO3b14nX2EtZr z*`heJU3uD$C(x{(MWL!lVJbyLlE%PXC+HywDJ10K*{f;k9s}C> zr&hdU!ZCCG)nRm#{@Kk4W$YYtp9lbg0T3b}1yFiyO_r$WdkEsny!r@9fnVlA|7F96z=gn36G_VUnZZr;o99B9$ZqzFcIXOIxn6SIqA?IOEP0gyIHa)F$9 Uu*ovU8{jV+O9zW;bIk3(0Z^2k2mk;8 diff --git a/themes/parinux/favicons/16.png b/themes/parinux/favicons/16.png deleted file mode 100755 index dc32f1ea8bdaded9906a388c2c380c7a62f66a45..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1229 zcmV;;1Ty=HP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O3x9)x#(ZMgOacDFI2Wf7GVR1^=wx{s)Ztk$n0j#oxY?w$)|pktt7eQKzM>BPb%BR@Z4BE#T|SFg;pA zi&$a-u?m_CS|Ls>$aZJTl{0s4YhSn^L@P}KdXXZ!%Ay8IQdTH-H0~0Br;mvqH}qOJ>^|9O^WH6v4McFsvY8JgZ~RCWr)P zDQ7s% zFr6_wLnG%!7G3P(7QcigE@{aH%NB`d+Pa2ZBo6Z#yfJy)Ob=G#O$gUF4Q0n;belxapDFu5EIKF9tHsv zvjSb9>hSRQuUO%P3Sk{*8FC*ALrC({ii0FyYgYu-$ z`8?L5_U>kSkth0oQ@pXXZ+iN*7~kA$FX-);_GV@dBc=8yhltrK`)LKeI2WHCBOgq= zkCi@S^V}$X63bC+bi5Vci{_`j_UssWQ~h}c>GR{`)zZG&Vb9*QKU5NZdEnn6q3;;o zuYi8vu$wl0xs*HO^yzEoS>*KnpR3!RetVl;wCKHk{<^2%3~0w6=0yJkSFD$b(i9YC z00006VoOIv0RI600RN!9r;`8x010qNS#tmYE+YT{E+YYWr9XB6000McNliru;{p~F z4K5_E_5=U`0H#SqK~y-)rBlHT#2^d{6)Uh$$GIm9^wlBgI9=iy-0n~ zIKhccNV&NE5z)--+&^7n-43g{bvuTb$OYK27SAvXc2u`;FeWP6c;*7eSjxq}KbK$4 zjW8(}4^LFUMe=eR749fwllp&Ak|BVV;AJ)=Ad}hlF&|PcK9UbvD5i~!$|Pz8zHDkF rbfjX@H5l1e6?RUXJt#GfRN+lrM$f5XpRGtE00000NkvXXu0mjf^))*? diff --git a/themes/parinux/favicons/192.png b/themes/parinux/favicons/192.png deleted file mode 100755 index 8abffa4e68cfc0bc91eba7c4e796388a12c0ff6e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1684 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 uhBe9h3L@h7Gp5BG+t+_N87P1wFDr@; zaB^>EX>4U6ba`-PAZ2)IW&i+q+O3vZmcu9vMgO&mUILOBmxCG3=^ga)`+=#96=y1w z1X~D6=n5Qa|NYzPA6%kF$hr`H^4{RG$tKCTiDtj{o{gQq^O7}$=PNm#1_UBSulu8K zOFu*I&J%)N^6gqqp)5Ob8CnBB26cEI-j-fmhE#SruV+eYUbYv@S>Ik{4!dn1x_!0* z$*2zYR7jdKa@8~rFNz2>Y1VO{@fF#n8FD)%{Cn=`bbFJ$)7?$(OkQ%mP6Zji6#Pw& zmYm)1xtkffjEK*kuLfE)!CYRKx$8Cd-uBgH>yar>Yf(Q-nRie`I<3xW9xdSO%rHG# zLW@{p0kI028(JYwEXa0e%at>CZnH035TcbP0li2;mWM2AkR)Y7v7>R906dj6fA;geEjv8%r(Z>*DOfe@(iX+S=p8}T94HYpS_%Ln$@eT=Olo z*iy?Kwbr%U?z-=x$DVpVQCn26sqqcDV`{vp4Pticg)=pXL-;Yl<2Z4H8HkBx5D$X@ z3R(s;6WLlB`d}4PdcgT&LeT$nsB1Z$=Uy!4LZjrm^ z_6xO|=Nm;Qps@=_PK|aPY|Tr|`1DYEQj_PCdAFxeC*B#-1|Z{pD_LuMrmxM{UA;O5 z{F9ij%-pEG9d|zjeYli6y{D4^000SaNLh0L04^f{04^f|c%?sf00007bV*G`2jc=3 z6Al%=h)m-E006{EL_t(o!`+v=4S+BZLjkb@`!EhA3s7YU7>CWENsLE6wy%i%umi_fq6@gaaBM1<1F@A}D30Diz42KhYCjQR1? z06W9ttM)XSw|NXq5_xU{k_w&5Z^LxL~8}-X}8yTsEQUCxM z+bvd(0EiH0ri8fAlU{wh8~{iLVJG^Co81dO15!lUSVS>NK&)reMEABTRawRut$)mCB&n7}OXMW;l`%*94(GJB4=oJ# zee*6)HvT$j%Lpqp;BR9-?G4(b?422UU#7`zsT#8oeHOhgksK{bja}8IZi=dFz4e5# z@0OhDI>)3aseubfl-*8kB{T7(j`y6x)6TE3j<(;Hfc6`=Z^Bj{N?w_$eMR-&=0SXg zZll^?RM>YEtL1u&;WE~<#Pj!{6vGW_60usMuaJ8~@p1hyPZv9lJCCGw})*Q-ee^&>xyt(`hiH=r%C`r*{ zwD6!3O;?icYJ!oD@XOVXN(+~cA8{Q@+k}z9?H_)BbKN?{xWvlt%f@3{*ZBnnd!@;IUL03+~${#5xJHLpF-U=y!deDbaospl zbu&9QopZ9|V!I|nP9Tq9X+a?!*jQ5dVXcum9?WxH147EdJZ-+scJ*T>t(a6QFUPAl z$~l?cPBXj|+Fv7wfEc_>h+`D)8gI97{^MqDWqD+GeI1Fle0$fU+VhlMdrV?_E0&e= z2U}N^(uN5Ord{`V-n+*wz*KfQ7Kr5xT1$451i1Mqy6v94P^=x#%!3F~eOI>wd6L51ig<`8`NDnU-6 zW~BbHfdNl1+6HgF{RDDZWer3iDS655Ln&nR?*3gq#*B;0IsLs}2lf1o1)RRHQ~XZ% zU8@6g8n6xhmqp$Ulh#)X?l>o0hGUohENonH*R3{IKrk~>%V-p#N78T0?f?LEwPvPB z;5D;S+#4_m9vI|Es~7N*ZhxC(KH54ti`<+Kf~D@yag zBBOl1cFS6yNMyZgD(rYF7F{%D34xvQM3zc=dO{uN6%M-;tyu;DmfTnX#~n+{3mrI51K>|MPOcRoh2B zW^LdqTMLM&IOmXoNw;jv2HMDYa07elz37iB_bK|vl_;6j7Ix_&2rY;!nVzEF9BRYP z^^;Q!fnq7wumI;5)rASy95P zem*FaBBL(n!QRs@g4aFlNw(?SRahY8fO^xplxb%W0qx<0Y)EnWue~X3kS~1n@!1f>HJdzSRutAr9~pb=^FerX)57Q!g*mX>rK3_=M!l)I(KrPar&&H4!kWd{ zEZG0?G|c)t3axsr(P)=P)>95x7Xf4EFh`Dk5SYz5QO}NH&RTKs?+%!C{%7cX!K6Mz Ys11`BUm`5<0>aN0x!o$;V&92B0cy?zcmMzZ diff --git a/themes/parinux/favicons/48.png b/themes/parinux/favicons/48.png deleted file mode 100755 index 5b48f00d07832c579bb8c115d8e61980c33cda5a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1294 zcmV+p1@ZccP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O3vZmcu9vMgO&mUILOBmxCG3=^ga)`+=#96=y1w z1X~D6=n5Qa|NYzPA6%kF$hr`H^4{RG$tKCTiDtj{o{gQq^U^hh=PNm#1_UBKYx=hI zGvw|(A=o9~uH_WUvJ;n~HSl9lhiAdf(u>QG$}Z>iOli%__F_5f+l$O$x9vl>&o&?# z)xn+$NmE9yn#SQp5rHPnI_@*RBD*w0Zt<&{e$O49Zf}xzy1U7p$xE)+sUYK*g1^bp zlC%3gcQZqm5%Jmc)j*3Tn9J)jcfH2m+rGMNJu>BKE$U|}^A3tgr`0*lqXm4O8Ky@| zXc0>+AXY(hLo39I1=;RwxpL;tZT5u=LbTE(pcg5kQx-Kyk}{##(YQ+ho=O@)rGT13 zET>p_`c2bc;Rw%_p(zYwJZRoF`c3#rI~nSIlrFQ0r(7W}88wYC2D$MIEdb%Za_VM& zXQPX{F&AJJ1l>$?!~(O~b`zW9b8YG5tk84DlG(Qghq??PMeywq3@Zp2&+6E-2_k_R zd5qwb5xJ<94FuRZsZ1SgR6XEC8NM+m@YEG2yBJ3cKsfapfCd`~u&i~cpI{?uC_8nQ zoO9j<7hQ7MtGC{H?}Hy_R1O+!aKVQVVn`uJjW)XIV~8=Pn3E*M5$2Llfl^E<`4(Di zspXDZ>)LI1-S^OAPd%TgEvnbl_=emuHD1&PF+26bnHt0){FvZzoVdXZ#Kba)hd}@Z zErXefY^@A(gPBQ!P2mL8*bO+92Qd(|jm337u{)DH2;sSM(H)R=cDu&%i5FuVFb6M^ewF?5j`+^P@eQY zpWn5py}Fs6!Y~j7&;+Fg`k@?-G{A`>pd31bs}Hd>ld)k(n!P1T zY(;+BkFuU`&(C5Ur^P(%KVWMw-jD0yg)aBk?)`Sn_L)(8g-|I%2nmE-kIjs|LZ~bu zg@h99ULj;bh-IS`EOxIDDocnxdL(=FXeoVB2>m3)vBx@yk^ycKJtUJ(1-E@&Wz$0RR91007*qoM6N<$ Ef~(CR9 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 BeMtZS diff --git a/themes/parinux/favicons/96.png b/themes/parinux/favicons/96.png deleted file mode 100755 index 63d624413c70230e83a4dd06c4d0887d80abaf2f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1422 zcmV;91#$X`P) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O3w`mBT0uhTm1imVhL#XurKn-hOwNJCmneZ&N`#27i~M zDQEY4?nZ{LBjStan}HflFxS_0?pleh)opdzdSuGeT-47}#vK%qPOD>@M+^8m(@po5 z&?1(&f>;5~1#KlxEXa0a%Y`#HuA^UhMTl0a1oR@S=#WJXl4KoFY;W8o08b%}AhCj) zLM(eMJp88NZ{-Njg`p`7W87)pH~LL@rtOAW>!r(V;+`wSCB3E*Mkm*Qp#>n^W=`G6 z?`U*YH|7egf}k5|j#ywe%VuJ6e5oxRoE3V`STftz;83OkqzJwpf?)*#<5AM=*#wcm zj66p0$%tIk$^ruHoD`-8HmV+QqIBPw6L{!~lTD1H1t6Sy4M2kp1X$KO)K9PxHI$t? zOU^m(f{QM>?A2TEy!XNPGb#rSHn`wJ2r;CPqedHD^fAO3Q_M+{;s|rer$8yDlyZjC z4AU92GcOuhaR@&qxF093GXpWP4C0{^ zKtW4qW+GcFom^*Tl3-If0X23VPT@`r1Z`z;jdykza);c=*^ju%Gji0?{RKJd=q9;G zZog0~dAw0{0P4H2=hSG!!B)M*j86+|OKS3XGN1NzcH)B}tpL*Rmo;mtuk^M0vZ)uR zfWM3B#>}1CCr;?d%aM~;OFNF~z$Lx!^Vlf8r}lc3{$g2MvQI{EKT6-ydJ)kRqX*?l zpY!=$i|V_Z=|!IC{HAzgX=i%+wiw^sYcJ^CFYV3D97am@PYw~YRrb>gdT}m3J4Qa3 z_82RD#^$+E`XrX4*ywmGz8B3`d+pgV@}~Op4ASSv$E&5C+F{S$v|m&bojmX#kkC0s zk1L?>H|(ZOCztYIoIZW+Jd2#p|GB#D>ASbtMT_3s=dXME&VV-jVNUcvEsU3y+3sX? z00006VoOIv0RI600RN!9r;`8x010qNS#tmYE+YT{E+YYWr9XB6000McNliru;{p~F z4;`sU^^gDn0cS}>K~#9!?cLD{0znK#Q59RTAItI62K=%JEyvEZf)xS@nJnl2Dmvrk zg~vLs$IJcoJ)n(~kAMIIKmY;g;k@<0=Xq;c(Dm^SJ%4MRTd%X)z9hg1A^-#sfYn-1 zR!hlhS<$vLWnU6t1Q7rN2*8vU)YVeDsNRI-kK>z>% diff --git a/themes/parinux/icons/128.png b/themes/parinux/icons/128.png new file mode 100644 index 0000000000000000000000000000000000000000..9ebecec354c28886494c744901158d3884e9996f GIT binary patch literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?O3?zSk_}l@cSkfJR9T^xl_H+M9WCijWi-X*q z7}lMWc?smO1^9%xiWW@&|Np;!yQw-*B-7KyF~sBe*(rg12NXD*cm7{$y?n|`z5|n6 z9Ol{cn)dEk`sJELoPj}foPz@M#)NNmGHg1{b?3e||5|Ux%@j3hUpa@%ypy*K1U?0@ zus?D6*s3uhZK@N`3xVT}K0l39e>pzw*p~2`z5ELEpInn~)$yO-04-(kboFyt=akR{ E0F4bz#{d8T literal 0 HcmV?d00001 diff --git a/themes/parinux/icons/16.png b/themes/parinux/icons/16.png new file mode 100644 index 0000000000000000000000000000000000000000..815a179649ed5ec446a93e3068e8d0d4810b5247 GIT binary patch literal 159 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!D3?x-;bCrM;OS+@4BLl<6e(pbstUx|vage(c z!@6@aFM%Ak0G|+7(Sqs!|Nqx-H&q9Un0vZ7hHzX@PDn^tar5|tRYwF?9ewbrV_}{= zv$KHnKKABB@#Yp*=UA@hXnyA(#%$M%c}$%gwlZ+M!lvI6;x#X;^) z4C~IxyaaOC0(?STMGL0?|NmdV-BcYY(&g#m7!q;#?e&Yi2NXD10?Z2j>)vcITco}% z{Skw^PjYRY;KHjuh4Q*a_cC|%ii;PV=y|$Cf93-YiJ9)=a}w>I2MWtDvYuQW#&F|z zjc(vU@hFAz-(?5+t9+B#t7bMZP0P|37SQO;d2`}?L&HI>K>g?b4h#G9wOB>e`n3Z% l`Wm_){fZV12)J{MndgFfl-uM_Y(Q5rc)I$ztaD0e0svF=RLcMW literal 0 HcmV?d00001 diff --git a/themes/parinux/icons/256.png b/themes/parinux/icons/256.png new file mode 100644 index 0000000000000000000000000000000000000000..46d3d6cd8e287d67fb565ef39814d3d152f49a93 GIT binary patch literal 242 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K585o&?RN5XZRUpNZ?&#~tz_78O`%fY(NVYi0 z-HBn{IhmJ04qJdvh^uJ9^#A|=>$jV#14X(#T^vI)?!CQnkhj5r$NA!${U$O2vu{j{ zIB;L6Y1(mJrQFpV6K%}zpGarOT(BzsCy#>QnbYnKHW$8se9X|&bkm{Enooh@&DW*o zVh%zUtw!E%``BC>o&RJiIEc*9ubIf`!My80hR#UHx3vIVCg!0Q!zq^Z)<= literal 0 HcmV?d00001 diff --git a/themes/parinux/icons/32.png b/themes/parinux/icons/32.png new file mode 100644 index 0000000000000000000000000000000000000000..4fd49da76c5eec1592f9017012d7424e5244b222 GIT binary patch literal 183 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnL3?x0byx0z;SkfJR9T^xl_H+M9WCijWi-X*q z7}lMWc?smO1^9%xiWW@&|Np;!yQw-*#NX4!F@)o~?I}k#21g#3ixYBRtQNW17Gukv z@l4CoVaCj`FYz{ALOWCKogbtfxogIF%;VfoS(iH=do(s}F}oP$TExT>==Z(btiIVPik{pF~z5pRqW| z-HBn{IhmJ04qJdvh^uJ9^#A|=>$jV#14Xubx;TbZ+*}^I;CHh8VJ;IgOTz1RiM=D2hY|o`*s|tp}|l=>C=)uj9P(r V)*3Q|L<1!mJYD@<);T3K0RWwRUz7j< literal 0 HcmV?d00001 diff --git a/themes/parinux/icons/48.png b/themes/parinux/icons/48.png new file mode 100644 index 0000000000000000000000000000000000000000..db4f3e75c0830fbb66d4477b61766ce307d874b1 GIT binary patch literal 214 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDH3?y^UWFG-iEa{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaOC0(?STMGL0?|NmdV-BcYYlIQ8-7$R{w_rgZr1_goEhsq*l8yGmV4W{WN zBrwKy_L+Lb9GG;dA}Qy~!TU9LPe1K&i}bS&KhUAm>|8S~yWK-Z;PhA7-79yBG^+s7;s91lr8t>FVdQ I&MBb@08@oZ!T)VXbLJAo8Sx}&cn1H;CC?mvmFKt5w} zkh>GZx^prwfgH8~pAc8kg6aSN|JQFfRR@YZ_jGX#skrs__HMow10Gk$fB%;+be$-x zY^7H`OLYCsYf29-R6Hkjom=#K>q|MHdLWp2z)FA3^WD`DUJCQw_a(ewwu4@P>~wt@ zi1;6-7h(!=>kA;fA0{7C{y*B1zzF6la7VCr<(8tyh7wP=BGI#|o(t>3WmL3leISj+f9!N9<9f_+!wqUu1X fRnikwJa?5cPG0X{$A12yFGzu>tDnm{r-UW|jhR~R literal 0 HcmV?d00001 diff --git a/themes/parinux/icons/64.png b/themes/parinux/icons/64.png new file mode 100644 index 0000000000000000000000000000000000000000..f20b5000aa02cde5d9eacb7831d7ee311d96e739 GIT binary patch literal 192 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0P3?wHke>@jRv7|ftIx;Y9?C1WI$O_~$76-XI zF|0c$^AgBm3-AeX6)l+l|Nnpec2jkrNQ9@0V~EE2-g6fP4;XMT1(+rL*S*=WDA)e* z(LZ~hba2Ip>IX4uHOF+^HY#T> m&1St{;hM4I@a?US7Rg1*AAeh{xl{sZ2ZN`ppUXO@geCyyA4DSn literal 0 HcmV?d00001 diff --git a/themes/parinux/icons/96.png b/themes/parinux/icons/96.png new file mode 100644 index 0000000000000000000000000000000000000000..a1b29dcd93e1a64279c437de6561a3e7c2583da0 GIT binary patch literal 226 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeK3?y%aJ*@^(Ea{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaOC0(?STMGL0?|NmdV-BcYYQswF57-DgH?c|HR42m4io-zj}M%Uu(jg2B_(&t;ucLK6TuV^n4U literal 0 HcmV?d00001 diff --git a/themes/parinux/icons/source.png b/themes/parinux/icons/source.png new file mode 100644 index 0000000000000000000000000000000000000000..4da327619d6a83cfa40a571eb2ae7e27643505b2 GIT binary patch literal 6414 zcmeAS@N?(olHy`uVBq!ia0y~yU;#2&7&zE~RK2WrGXn!-OQy4PfTy#wLP1e}T4qiv z1B1rI+KILvhaF^&#z${e5}jBkPu1-gnRhDR1fZ`RdwN^7?ezE#WO%f4zKe+Y5 zgX2k84<3ySXAgH2_`^_GR1#D&QRx44k*FgT1$X+(zsr@sXQq;sqVV54||P<%mzMpUC77GV$L(eEh0+Z1bM;e=Vz~&N<02-@)c|$zi2?3iEDl zDLME1h+x6dPT299tM9L#G6^wMwj&(o_rDBLDpZzg6AD z7^9tD2~Q#%ShZA+^Z#StzuWY)@Z-E74Zf0nH@+P=5V*rCWqSLc-L|*KI0Y)$)@_-# zKZrfe&U5|NEiVKwZ0C)M*=|zFzvB)g+q{yK6J#_UF3&&D{677QZ=^yE_m?$0_nLk$ z{Kc?jEA{y0qAK$(EcJJTnWjF8hC(kWf_;jH4>Cysh#44|K!gH_z{lhO$v1!q27*lDOjH1w)c_(0n}}p3jSN=+JA`7x9o9~> zI}mwTlR@e0&fW)qpa0qYk73?_#~MbE@f4fh0Cpr&V1StlU{T@>=U`9+sRlbo0IZJ? z(*djslw24HGKn)0VmomrB3X&uaE)s|6V{&3Wl5TA+VkL7^}puN{P*gQd|(B+7d@aF zK!P|#i3>gjkO2)K0*5i^Rw^*e04XNLvxFi9De@dZW)o>R_Ta-Kirw%95yp%s&q-a} zzyJJO0fvVE_W%AnaKwY0(EuWd4i=DF;=&v~NE<*}aoEGuzzLLd04bnBu+S(L@#Tju zQ{f3~fXTbyzq?ho1@6Qh(>8iU;7P?uxdn-dJ%s?%w&S+VZGs2>%C7{b?j8T$ z)$f;A=+XzJChR(}i<06Tbgy7H5hBWX0Hj(0h-s2{K*lP72!a{20j!Foj0w`A0M>?- z>yNJcU1@L3z~BijP=4+HXYv1By~1dD;s6dRq{Kl&tpG{qNP3Z&U0c5}o|E!(++er; zGk?Xu#?SBnzW??6ughqKiBVsWl8eD=G2#py?h9^|+P_b4i%I8IW_evK&3NA4=Kq1u z=Yhe#`=8=yyAYCCk-{1&u@c8b(u>5@D7$<9_sqr+Sg?Qi$Nav&;~_UFUm+ "#157097", - "fondChamp" => "#2794c2", - "fondChampTexte" => "#2794c2", - "bordure" => "#48aed9", - "bordureHover" => "#87d1f1", - "bordureFocus" => "#e2f6ff", - "texte" => "#d5f3ff", - "texteForm" => "#e2f6ff", - "texteLienCodeSource" => "#3da3cf" -); // Définit les couleurs du thème - -?> diff --git a/themes/parinux/theme.php b/themes/parinux/theme.php old mode 100644 new mode 100755 index 6df427f..9ab93cb --- a/themes/parinux/theme.php +++ b/themes/parinux/theme.php @@ -1,17 +1,17 @@ "#157097", - "fondChamp" => "#2794c2", - "fondChampTexte" => "#2794c2", - "bordure" => "#48aed9", - "bordureHover" => "#87d1f1", - "bordureFocus" => "#e2f6ff", - "texte" => "#d5f3ff", - "texteForm" => "#e2f6ff", - "texteLienCodeSource" => "#3da3cf" + "bg" => "#157097", + "bgField" => "#2794c2", + "bgTextField" => "#2794c2", + "bgHelp" => "#118abe", + "border" => "#48aed9", + "borderHover" => "#87d1f1", + "borderFocus" => "#e2f6ff", + "text" => "#d5f3ff", + "secondaryText" => "#65b7da" ); // Définit les couleurs du thème ?> diff --git a/themes/resize.php b/themes/resize.php new file mode 100755 index 0000000..89a72ba --- /dev/null +++ b/themes/resize.php @@ -0,0 +1,31 @@ +\n"; + } + +} else { + echo "Available only via CLI for security reasons. Use 'php themes/resize.php'"; +} diff --git a/ubuntu/.gitignore b/ubuntu/.gitignore deleted file mode 100755 index ee9cdde..0000000 --- a/ubuntu/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -.DS_Store -webify diff --git a/ubuntu/site/.bowerrc b/ubuntu/site/.bowerrc deleted file mode 100755 index 235775b..0000000 --- a/ubuntu/site/.bowerrc +++ /dev/null @@ -1,3 +0,0 @@ -{ - "directory": "_build/components" -} diff --git a/ubuntu/site/.gitignore b/ubuntu/site/.gitignore deleted file mode 100755 index 9b7101b..0000000 --- a/ubuntu/site/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -_build -.git -.sass-cache diff --git a/ubuntu/site/_config.yml b/ubuntu/site/_config.yml deleted file mode 100755 index c35160a..0000000 --- a/ubuntu/site/_config.yml +++ /dev/null @@ -1,20 +0,0 @@ -# Site settings -title: Ubuntu Font (Bower project) -email: earaujoassis@gmail.com -description: Ubuntu Font Family Bower-ready -baseurl: "/ubuntu-fontface" -url: "https://earaujoassis.github.io" -creators_website: "http://earaujoassis.com" -twitter_username: earaujoassis -github_username: earaujoassis -github_project: evolve -source: . -destination: ./_build - -# Build settings -exclude: ['Gemfile', 'Gemfile.lock', 'bower.json', 'README.md'] -keep_files: ['components', '.git'] -markdown: kramdown -sass: - style: :compressed - sass_dir: _sass diff --git a/ubuntu/site/_includes/footer.html b/ubuntu/site/_includes/footer.html deleted file mode 100755 index 25c97c6..0000000 --- a/ubuntu/site/_includes/footer.html +++ /dev/null @@ -1,12 +0,0 @@ -
-
-
-

Created and maintained by Ewerton Assis © {{ site.time | date: '%Y' }}

-
-
- - - -
-
-
diff --git a/ubuntu/site/_includes/head.html b/ubuntu/site/_includes/head.html deleted file mode 100755 index 6857742..0000000 --- a/ubuntu/site/_includes/head.html +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - {% if page.title %}{{ page.title }}{% else %}{{ site.title }}{% endif %} - - - - - - - - - - - diff --git a/ubuntu/site/_includes/header.html b/ubuntu/site/_includes/header.html deleted file mode 100755 index 745318c..0000000 --- a/ubuntu/site/_includes/header.html +++ /dev/null @@ -1,7 +0,0 @@ - diff --git a/ubuntu/site/_layouts/default.html b/ubuntu/site/_layouts/default.html deleted file mode 100755 index 95b71e0..0000000 --- a/ubuntu/site/_layouts/default.html +++ /dev/null @@ -1,13 +0,0 @@ - - - {% include head.html %} - - {% include header.html %} -
-
- {{ content }} -
-
- {% include footer.html %} - - diff --git a/ubuntu/site/_sass/_layout.scss b/ubuntu/site/_sass/_layout.scss deleted file mode 100755 index 7071914..0000000 --- a/ubuntu/site/_sass/_layout.scss +++ /dev/null @@ -1,75 +0,0 @@ -body { - font-family: "Ubuntu", sans-serif; - background: #fff; - color: #444; -} - -h1, h2, h3, h4, h5, h6, p { - font-family: inherit; - color: inherit; - font-weight: 300; -} - -.button, button { - &.github { - margin: 0px; - padding: 0.5rem 1.4rem; - border-radius: 4px; - background: #f3f3f3 none repeat scroll 0% 0%; - box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.25); - } -} - -.page-content, .site-footer { - .button, button { - &.button { - background: #dbdbdb none repeat scroll 0% 0%; - color: #777; - box-shadow: none; - } - } -} - -pre, code { - font-family: "Ubuntu Monospace", sans-serif; -} - -.site-header { - text-align: center; - background: #dd4814; - background: -moz-linear-gradient(left, #dd4814 0%, #772953 100%); - background: -webkit-gradient(linear, left top, right top, color-stop(0%,#dd4814), color-stop(100%,#772953)); - background: -webkit-linear-gradient(left, #dd4814 0%,#772953 100%); - background: -o-linear-gradient(left, #dd4814 0%,#772953 100%); - background: -ms-linear-gradient(left, #dd4814 0%,#772953 100%); - background: linear-gradient(to right, #dd4814 0%,#772953 100%); - filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#dd4814', endColorstr='#772953',GradientType=1 ); - box-shadow: 0px 3px 10px rgba(0, 0, 0, 0.25); - - h1 { - margin: 120px 0; - color: #fff; - font-weight: 300; - } -} - -.page-content { - padding: 50px 0 25px; - - blockquote { - margin-left: 30px; - } - - section ~ section { - margin-top: 25px; - } -} - -.site-footer { - padding: 25px 0 50px; - color: #b6b6b6; - - a { - color: #777; - } -} diff --git a/ubuntu/site/_sass/_syntax-highlighting.scss b/ubuntu/site/_sass/_syntax-highlighting.scss deleted file mode 100755 index 7e2530c..0000000 --- a/ubuntu/site/_sass/_syntax-highlighting.scss +++ /dev/null @@ -1,66 +0,0 @@ -/** - * Syntax highlighting styles - */ -.highlight { - background: #fff; - - .c { color: #998; font-style: italic } // Comment - .err { color: #a61717; background-color: #e3d2d2 } // Error - .k { font-weight: 300 } // Keyword - .o { font-weight: 300 } // Operator - .cm { color: #998; font-style: italic } // Comment.Multiline - .cp { color: #999; font-weight: 300 } // Comment.Preproc - .c1 { color: #998; font-style: italic } // Comment.Single - .cs { color: #999; font-weight: 300; font-style: italic } // Comment.Special - .gd { color: #000; background-color: #fdd } // Generic.Deleted - .gd .x { color: #000; background-color: #faa } // Generic.Deleted.Specific - .ge { font-style: italic } // Generic.Emph - .gr { color: #a00 } // Generic.Error - .gh { color: #999 } // Generic.Heading - .gi { color: #000; background-color: #dfd } // Generic.Inserted - .gi .x { color: #000; background-color: #afa } // Generic.Inserted.Specific - .go { color: #888 } // Generic.Output - .gp { color: #555 } // Generic.Prompt - .gs { font-weight: 300 } // Generic.Strong - .gu { color: #aaa } // Generic.Subheading - .gt { color: #a00 } // Generic.Traceback - .kc { font-weight: 300 } // Keyword.Constant - .kd { font-weight: 300 } // Keyword.Declaration - .kp { font-weight: 300 } // Keyword.Pseudo - .kr { font-weight: 300 } // Keyword.Reserved - .kt { color: #458; font-weight: 300 } // Keyword.Type - .m { color: #099 } // Literal.Number - .s { color: #d14 } // Literal.String - .na { color: #008080 } // Name.Attribute - .nb { color: #0086B3 } // Name.Builtin - .nc { color: #458; font-weight: 300 } // Name.Class - .no { color: #008080 } // Name.Constant - .ni { color: #800080 } // Name.Entity - .ne { color: #900; font-weight: 300 } // Name.Exception - .nf { color: #900; font-weight: 300 } // Name.Function - .nn { color: #555 } // Name.Namespace - .nt { color: #000080 } // Name.Tag - .nv { color: #008080 } // Name.Variable - .ow { font-weight: 300 } // Operator.Word - .w { color: #bbb } // Text.Whitespace - .mf { color: #099 } // Literal.Number.Float - .mh { color: #099 } // Literal.Number.Hex - .mi { color: #099 } // Literal.Number.Integer - .mo { color: #099 } // Literal.Number.Oct - .sb { color: #d14 } // Literal.String.Backtick - .sc { color: #d14 } // Literal.String.Char - .sd { color: #d14 } // Literal.String.Doc - .s2 { color: #d14 } // Literal.String.Double - .se { color: #d14 } // Literal.String.Escape - .sh { color: #d14 } // Literal.String.Heredoc - .si { color: #d14 } // Literal.String.Interpol - .sx { color: #d14 } // Literal.String.Other - .sr { color: #009926 } // Literal.String.Regex - .s1 { color: #d14 } // Literal.String.Single - .ss { color: #990073 } // Literal.String.Symbol - .bp { color: #999 } // Name.Builtin.Pseudo - .vc { color: #008080 } // Name.Variable.Class - .vg { color: #008080 } // Name.Variable.Global - .vi { color: #008080 } // Name.Variable.Instance - .il { color: #099 } // Literal.Number.Integer.Long -} diff --git a/ubuntu/site/about.md b/ubuntu/site/about.md deleted file mode 100755 index 894d1bd..0000000 --- a/ubuntu/site/about.md +++ /dev/null @@ -1,14 +0,0 @@ -# Ubuntu Font Family - -> Ubuntu Font Family Bower-ready (also SCSS-ready, LESS-ready, and plain CSS-ready) - -**Requirements** - - * Ruby 1.9+ + `$ gem install jekyll` - * Bower (Node.js + NPM) + `$ bower install` - -To test the web page locally, run `$ jekyll serve` and open the browser in http://localhost:400/ubuntu-fontface/. - -## License - -Code under [MIT License](http://earaujoassis.mit-license.org/) © Ewerton Assis diff --git a/ubuntu/site/bower.json b/ubuntu/site/bower.json deleted file mode 100755 index 3f56fbf..0000000 --- a/ubuntu/site/bower.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "name": "ubuntu-fontface/site", - "version": "0.1.13", - "homepage": "https://github.com/earaujoassis/ubuntu-fontface", - "authors": [ - "Ewerton Assis " - ], - "description": "Static website for the ubuntu-fontface project", - "keywords": [ - "ubuntu", - "font", - "fontface", - "css", - "sass", - "less", - "web", - "design" - ], - "main": "none", - "moduleType": [], - "license": "MIT", - "private": true, - "ignore": [ - "**/.*", - "node_modules", - "bower_components", - "_build/components", - "test", - "tests" - ], - "dependencies": { - "foundation": "~5.5.2", - "octicons": "~3.1.0", - "ubuntu-fontface": "~0.1.13" - } -} diff --git a/ubuntu/site/css/ubuntu-fontface-site.scss b/ubuntu/site/css/ubuntu-fontface-site.scss deleted file mode 100755 index 862a049..0000000 --- a/ubuntu/site/css/ubuntu-fontface-site.scss +++ /dev/null @@ -1,6 +0,0 @@ ---- -# Only the main Sass file needs front matter (the dashes are enough) ---- -@charset "utf-8"; - -@import "layout", "syntax-highlighting"; diff --git a/ubuntu/site/index.html b/ubuntu/site/index.html deleted file mode 100755 index 0f1ed59..0000000 --- a/ubuntu/site/index.html +++ /dev/null @@ -1,67 +0,0 @@ ---- -layout: default ---- -
-
-
-
-

How to use it

-
-
- - - -
-
-
-
-
    -
  1. -

    Install it from Bower

    -
    -  $ bower install [--save] ubuntu-fontface
    -            
    -
  2. -
  3. -

    Import it on SCSS/LESS/CSS source code. Assuming {BOWER_PATH} is bower_components; - {SUFFIX} options are -base, -condensed and -mono; - {EXTENSION} options are css, less, scss, - depending whether you're using pure CSS, SCSS or LESS. The {SUFFIX} is not available if you're importing the pure CSS file. - A minified file is available for the pure CSS version.

    -
    -  @import "{BOWER_PATH}/ubuntu-fontface/ubuntu{SUFFIX}.{EXTENSION}";
    -            
    -
  4. -
  5. -

    If you need any help (or have found any bug 🐞), please post it on /issues. Thank you!

    -
  6. -
-
-
-
-
-
-

Examples

-
-

Любо́вь сильне́е сме́рти и стра́ха сме́рти. То́лько е́ю, то́лько любо́вью де́ржится и движется жизнь.

-
И.С.Тургенев (1818 – 1883)
-
-
-

θάνατος οὐδὲν διαφέρει τοῦ ζῆν.

-
Θαλῆς (ὁ Μιλήσιος) (c. 624 – c. 546 BC)
-
-
-

Außerordentliche Übel erfordern außerordentliche Mittel

-
Unknown author
-
-
-

Those who make quick decisions are not also safe.

-
Unknown author
-
-
-

Plus ça change, plus c'est la même chose.

- -
-
-
-
diff --git a/ubuntu/ubuntu.min.css b/ubuntu/ubuntu.min.css index 49b00c6..c9cee06 100755 --- a/ubuntu/ubuntu.min.css +++ b/ubuntu/ubuntu.min.css @@ -1,2 +1,2 @@ /* Ubuntu Font Family Bower-ready v0.1.13 */ -@font-face{font-family:'Ubuntu';src:url(ubuntu/fonts/ubuntu-light-webfont.eot);src:url(ubuntu/fonts/ubuntu-light-webfont.eot?#iefix) format('embedded-opentype'),url(ubuntu/fonts/ubuntu-light-webfont.woff2) format('woff2'),url(ubuntu/fonts/ubuntu-light-webfont.woff) format('woff'),url(ubuntu/fonts/ubuntu-light-webfont.ttf) format('truetype'),url(ubuntu/fonts/ubuntu-light-webfont.svg#ubuntulight) format('svg');font-weight:300;font-style:normal}@font-face{font-family:'Ubuntu';src:url(ubuntu/fonts/ubuntu-light-italic-webfont.eot);src:url(ubuntu/fonts/ubuntu-light-italic-webfont.eot?#iefix) format('embedded-opentype'),url(ubuntu/fonts/ubuntu-light-italic-webfont.woff2) format('woff2'),url(ubuntu/fonts/ubuntu-light-italic-webfont.woff) format('woff'),url(ubuntu/fonts/ubuntu-light-italic-webfont.ttf) format('truetype'),url(ubuntu/fonts/ubuntu-light-italic-webfont.svg#ubuntulight_italic) format('svg');font-weight:300;font-style:italic}@font-face{font-family:'Ubuntu';src:url(ubuntu/fonts/ubuntu-regular-webfont.eot);src:url(ubuntu/fonts/ubuntu-regular-webfont.eot?#iefix) format('embedded-opentype'),url(ubuntu/fonts/ubuntu-regular-webfont.woff2) format('woff2'),url(ubuntu/fonts/ubuntu-regular-webfont.woff) format('woff'),url(ubuntu/fonts/ubuntu-regular-webfont.ttf) format('truetype'),url(ubuntu/fonts/ubuntu-regular-webfont.svg#ubunturegular) format('svg');font-weight:normal;font-style:normal}@font-face{font-family:'Ubuntu';src:url(ubuntu/fonts/ubuntu-regular-italic-webfont.eot);src:url(ubuntu/fonts/ubuntu-regular-italic-webfont.eot?#iefix) format('embedded-opentype'),url(ubuntu/fonts/ubuntu-regular-italic-webfont.woff2) format('woff2'),url(ubuntu/fonts/ubuntu-regular-italic-webfont.woff) format('woff'),url(ubuntu/fonts/ubuntu-regular-italic-webfont.ttf) format('truetype'),url(ubuntu/fonts/ubuntu-regular-italic-webfont.svg#ubuntuitalic) format('svg');font-weight:normal;font-style:italic}@font-face{font-family:'Ubuntu';src:url(ubuntu/fonts/ubuntu-medium-webfont.eot);src:url(ubuntu/fonts/ubuntu-medium-webfont.eot?#iefix) format('embedded-opentype'),url(ubuntu/fonts/ubuntu-medium-webfont.woff2) format('woff2'),url(ubuntu/fonts/ubuntu-medium-webfont.woff) format('woff'),url(ubuntu/fonts/ubuntu-medium-webfont.ttf) format('truetype'),url(ubuntu/fonts/ubuntu-medium-webfont.svg#ubuntumedium) format('svg');font-weight:500;font-style:normal}@font-face{font-family:'Ubuntu';src:url(ubuntu/fonts/ubuntu-medium-italic-webfont.eot);src:url(ubuntu/fonts/ubuntu-medium-italic-webfont.eot?#iefix) format('embedded-opentype'),url(ubuntu/fonts/ubuntu-medium-italic-webfont.woff2) format('woff2'),url(ubuntu/fonts/ubuntu-medium-italic-webfont.woff) format('woff'),url(ubuntu/fonts/ubuntu-medium-italic-webfont.ttf) format('truetype'),url(ubuntu/fonts/ubuntu-medium-italic-webfont.svg#ubuntumedium_italic) format('svg');font-weight:500;font-style:italic}@font-face{font-family:'Ubuntu';src:url(ubuntu/fonts/ubuntu-bold-webfont.eot);src:url(ubuntu/fonts/ubuntu-bold-webfont.eot?#iefix) format('embedded-opentype'),url(ubuntu/fonts/ubuntu-bold-webfont.woff2) format('woff2'),url(ubuntu/fonts/ubuntu-bold-webfont.woff) format('woff'),url(ubuntu/fonts/ubuntu-bold-webfont.ttf) format('truetype'),url(ubuntu/fonts/ubuntu-bold-webfont.svg#ubuntubold) format('svg');font-weight:bold;font-style:normal}@font-face{font-family:'Ubuntu';src:url(ubuntu/fonts/ubuntu-bold-italic-webfont.eot);src:url(ubuntu/fonts/ubuntu-bold-italic-webfont.eot?#iefix) format('embedded-opentype'),url(ubuntu/fonts/ubuntu-bold-italic-webfont.woff2) format('woff2'),url(ubuntu/fonts/ubuntu-bold-italic-webfont.woff) format('woff'),url(ubuntu/fonts/ubuntu-bold-italic-webfont.ttf) format('truetype'),url(ubuntu/fonts/ubuntu-bold-italic-webfont.svg#ubuntubold_italic) format('svg');font-weight:bold;font-style:italic}@font-face{font-family:'Ubuntu Condensed';src:url(ubuntu/fonts/ubuntu-condensed-webfont.eot);src:url(ubuntu/fonts/ubuntu-condensed-webfont.eot?#iefix) format('embedded-opentype'),url(ubuntu/fonts/ubuntu-condensed-webfont.woff2) format('woff2'),url(ubuntu/fonts/ubuntu-condensed-webfont.woff) format('woff'),url(ubuntu/fonts/ubuntu-condensed-webfont.ttf) format('truetype'),url(ubuntu/fonts/ubuntu-condensed-webfont.svg#ubuntu_condensedregular) format('svg');font-weight:normal;font-style:normal}@font-face{font-family:'Ubuntu Monospace';src:url(ubuntu/fonts/ubuntumono-regular-webfont.eot);src:url(ubuntu/fonts/ubuntumono-regular-webfont.eot?#iefix) format('embedded-opentype'),url(ubuntu/fonts/ubuntumono-regular-webfont.woff2) format('woff2'),url(ubuntu/fonts/ubuntumono-regular-webfont.woff) format('woff'),url(ubuntu/fonts/ubuntumono-regular-webfont.ttf) format('truetype'),url(ubuntu/fonts/ubuntumono-regular-webfont.svg#ubuntu_monoregular) format('svg');font-weight:normal;font-style:normal}@font-face{font-family:'Ubuntu Monospace';src:url(ubuntu/fonts/ubuntumono-regular-italic-webfont.eot);src:url(ubuntu/fonts/ubuntumono-regular-italic-webfont.eot?#iefix) format('embedded-opentype'),url(ubuntu/fonts/ubuntumono-regular-italic-webfont.woff2) format('woff2'),url(ubuntu/fonts/ubuntumono-regular-italic-webfont.woff) format('woff'),url(ubuntu/fonts/ubuntumono-regular-italic-webfont.ttf) format('truetype'),url(ubuntu/fonts/ubuntumono-regular-italic-webfont.svg#ubuntu_monoitalic) format('svg');font-weight:normal;font-style:italic}@font-face{font-family:'Ubuntu Monospace';src:url(ubuntu/fonts/ubuntumono-bold-webfont.eot);src:url(ubuntu/fonts/ubuntumono-bold-webfont.eot?#iefix) format('embedded-opentype'),url(ubuntu/fonts/ubuntumono-bold-webfont.woff2) format('woff2'),url(ubuntu/fonts/ubuntumono-bold-webfont.woff) format('woff'),url(ubuntu/fonts/ubuntumono-bold-webfont.ttf) format('truetype'),url(ubuntu/fonts/ubuntumono-bold-webfont.svg#ubuntu_monobold) format('svg');font-weight:bold;font-style:normal}@font-face{font-family:'Ubuntu Monospace';src:url(ubuntu/fonts/ubuntumono-bold-italic-webfont.eot);src:url(ubuntu/fonts/ubuntumono-bold-italic-webfont.eot?#iefix) format('embedded-opentype'),url(ubuntu/fonts/ubuntumono-bold-italic-webfont.woff2) format('woff2'),url(ubuntu/fonts/ubuntumono-bold-italic-webfont.woff) format('woff'),url(ubuntu/fonts/ubuntumono-bold-italic-webfont.ttf) format('truetype'),url(ubuntu/fonts/ubuntumono-bold-italic-webfont.svg#ubuntu_monobold_italic) format('svg');font-weight:bold;font-style:italic} +@font-face{font-family:'Ubuntu';src:url(fonts/ubuntu-light-webfont.eot);src:url(fonts/ubuntu-light-webfont.eot?#iefix) format('embedded-opentype'),url(fonts/ubuntu-light-webfont.woff2) format('woff2'),url(fonts/ubuntu-light-webfont.woff) format('woff'),url(fonts/ubuntu-light-webfont.ttf) format('truetype'),url(fonts/ubuntu-light-webfont.svg#ubuntulight) format('svg');font-weight:300;font-style:normal}@font-face{font-family:'Ubuntu';src:url(fonts/ubuntu-light-italic-webfont.eot);src:url(fonts/ubuntu-light-italic-webfont.eot?#iefix) format('embedded-opentype'),url(fonts/ubuntu-light-italic-webfont.woff2) format('woff2'),url(fonts/ubuntu-light-italic-webfont.woff) format('woff'),url(fonts/ubuntu-light-italic-webfont.ttf) format('truetype'),url(fonts/ubuntu-light-italic-webfont.svg#ubuntulight_italic) format('svg');font-weight:300;font-style:italic}@font-face{font-family:'Ubuntu';src:url(fonts/ubuntu-regular-webfont.eot);src:url(fonts/ubuntu-regular-webfont.eot?#iefix) format('embedded-opentype'),url(fonts/ubuntu-regular-webfont.woff2) format('woff2'),url(fonts/ubuntu-regular-webfont.woff) format('woff'),url(fonts/ubuntu-regular-webfont.ttf) format('truetype'),url(fonts/ubuntu-regular-webfont.svg#ubunturegular) format('svg');font-weight:normal;font-style:normal}@font-face{font-family:'Ubuntu';src:url(fonts/ubuntu-regular-italic-webfont.eot);src:url(fonts/ubuntu-regular-italic-webfont.eot?#iefix) format('embedded-opentype'),url(fonts/ubuntu-regular-italic-webfont.woff2) format('woff2'),url(fonts/ubuntu-regular-italic-webfont.woff) format('woff'),url(fonts/ubuntu-regular-italic-webfont.ttf) format('truetype'),url(fonts/ubuntu-regular-italic-webfont.svg#ubuntuitalic) format('svg');font-weight:normal;font-style:italic}@font-face{font-family:'Ubuntu';src:url(fonts/ubuntu-medium-webfont.eot);src:url(fonts/ubuntu-medium-webfont.eot?#iefix) format('embedded-opentype'),url(fonts/ubuntu-medium-webfont.woff2) format('woff2'),url(fonts/ubuntu-medium-webfont.woff) format('woff'),url(fonts/ubuntu-medium-webfont.ttf) format('truetype'),url(fonts/ubuntu-medium-webfont.svg#ubuntumedium) format('svg');font-weight:500;font-style:normal}@font-face{font-family:'Ubuntu';src:url(fonts/ubuntu-medium-italic-webfont.eot);src:url(fonts/ubuntu-medium-italic-webfont.eot?#iefix) format('embedded-opentype'),url(fonts/ubuntu-medium-italic-webfont.woff2) format('woff2'),url(fonts/ubuntu-medium-italic-webfont.woff) format('woff'),url(fonts/ubuntu-medium-italic-webfont.ttf) format('truetype'),url(fonts/ubuntu-medium-italic-webfont.svg#ubuntumedium_italic) format('svg');font-weight:500;font-style:italic}@font-face{font-family:'Ubuntu';src:url(fonts/ubuntu-bold-webfont.eot);src:url(fonts/ubuntu-bold-webfont.eot?#iefix) format('embedded-opentype'),url(fonts/ubuntu-bold-webfont.woff2) format('woff2'),url(fonts/ubuntu-bold-webfont.woff) format('woff'),url(fonts/ubuntu-bold-webfont.ttf) format('truetype'),url(fonts/ubuntu-bold-webfont.svg#ubuntubold) format('svg');font-weight:bold;font-style:normal}@font-face{font-family:'Ubuntu';src:url(fonts/ubuntu-bold-italic-webfont.eot);src:url(fonts/ubuntu-bold-italic-webfont.eot?#iefix) format('embedded-opentype'),url(fonts/ubuntu-bold-italic-webfont.woff2) format('woff2'),url(fonts/ubuntu-bold-italic-webfont.woff) format('woff'),url(fonts/ubuntu-bold-italic-webfont.ttf) format('truetype'),url(fonts/ubuntu-bold-italic-webfont.svg#ubuntubold_italic) format('svg');font-weight:bold;font-style:italic}@font-face{font-family:'Ubuntu Condensed';src:url(fonts/ubuntu-condensed-webfont.eot);src:url(fonts/ubuntu-condensed-webfont.eot?#iefix) format('embedded-opentype'),url(fonts/ubuntu-condensed-webfont.woff2) format('woff2'),url(fonts/ubuntu-condensed-webfont.woff) format('woff'),url(fonts/ubuntu-condensed-webfont.ttf) format('truetype'),url(fonts/ubuntu-condensed-webfont.svg#ubuntu_condensedregular) format('svg');font-weight:normal;font-style:normal}@font-face{font-family:'Ubuntu Monospace';src:url(fonts/ubuntumono-regular-webfont.eot);src:url(fonts/ubuntumono-regular-webfont.eot?#iefix) format('embedded-opentype'),url(fonts/ubuntumono-regular-webfont.woff2) format('woff2'),url(fonts/ubuntumono-regular-webfont.woff) format('woff'),url(fonts/ubuntumono-regular-webfont.ttf) format('truetype'),url(fonts/ubuntumono-regular-webfont.svg#ubuntu_monoregular) format('svg');font-weight:normal;font-style:normal}@font-face{font-family:'Ubuntu Monospace';src:url(fonts/ubuntumono-regular-italic-webfont.eot);src:url(fonts/ubuntumono-regular-italic-webfont.eot?#iefix) format('embedded-opentype'),url(fonts/ubuntumono-regular-italic-webfont.woff2) format('woff2'),url(fonts/ubuntumono-regular-italic-webfont.woff) format('woff'),url(fonts/ubuntumono-regular-italic-webfont.ttf) format('truetype'),url(fonts/ubuntumono-regular-italic-webfont.svg#ubuntu_monoitalic) format('svg');font-weight:normal;font-style:italic}@font-face{font-family:'Ubuntu Monospace';src:url(fonts/ubuntumono-bold-webfont.eot);src:url(fonts/ubuntumono-bold-webfont.eot?#iefix) format('embedded-opentype'),url(fonts/ubuntumono-bold-webfont.woff2) format('woff2'),url(fonts/ubuntumono-bold-webfont.woff) format('woff'),url(fonts/ubuntumono-bold-webfont.ttf) format('truetype'),url(fonts/ubuntumono-bold-webfont.svg#ubuntu_monobold) format('svg');font-weight:bold;font-style:normal}@font-face{font-family:'Ubuntu Monospace';src:url(fonts/ubuntumono-bold-italic-webfont.eot);src:url(fonts/ubuntumono-bold-italic-webfont.eot?#iefix) format('embedded-opentype'),url(fonts/ubuntumono-bold-italic-webfont.woff2) format('woff2'),url(fonts/ubuntumono-bold-italic-webfont.woff) format('woff'),url(fonts/ubuntumono-bold-italic-webfont.ttf) format('truetype'),url(fonts/ubuntumono-bold-italic-webfont.svg#ubuntu_monobold_italic) format('svg');font-weight:bold;font-style:italic}