diff --git a/htdocs/core/lib/functions2.lib.php b/htdocs/core/lib/functions2.lib.php index 9e632b948b4..22138be376a 100644 --- a/htdocs/core/lib/functions2.lib.php +++ b/htdocs/core/lib/functions2.lib.php @@ -2586,6 +2586,62 @@ function colorHexToRgb($hex, $alpha = false, $returnArray = false) } } +/** + * Color Hex to Hsl (used for style) + * + * @param string $hex Color in hex + * @param float|false $alpha 0 to 1 to add alpha channel + * @param bool $returnArray true=return an array instead, false=return string + * @return string|array String or array + */ +function colorHexToHsl($hex, $alpha = false, $returnArray = false) +{ + $hex = str_replace('#', '', $hex); + $red = hexdec(substr($hex, 0, 2)) / 255; + $green = hexdec(substr($hex, 2, 2)) / 255; + $blue = hexdec(substr($hex, 4, 2)) / 255; + + $cmin = min($red, $green, $blue); + $cmax = max($red, $green, $blue); + $delta = $cmax - $cmin; + + if ($delta == 0) { + $hue = 0; + } elseif ($cmax === $red) { + $hue = (($green - $blue) / $delta); + } elseif ($cmax === $green) { + $hue = ($blue - $red) / $delta + 2; + } else { + $hue = ($red - $green) / $delta + 4; + } + + $hue = round($hue * 60); + if ($hue < 0) { + $hue += 360; + } + + $lightness = (($cmax + $cmin) / 2); + $saturation = $delta === 0 ? 0 : ($delta / (1 - abs(2 * $lightness - 1))); + if ($saturation < 0) { + $saturation += 1; + } + + $lightness = round($lightness*100); + $saturation = round($saturation*100); + + if ($returnArray) { + return array( + 'h' => $hue, + 'l' => $lightness, + 's' => $saturation, + 'a' => $alpha === false ? 1 : $alpha + ); + } elseif ($alpha) { + return 'hsla('.$hue.', '.$saturation.', '.$lightness.' / '.$alpha.')'; + } else { + return 'hsl('.$hue.', '.$saturation.', '.$lightness.')'; + } +} /** * Applies the Cartesian product algorithm to an array diff --git a/htdocs/webportal/admin/setup.php b/htdocs/webportal/admin/setup.php index 41b62b8493a..2af4047e11a 100644 --- a/htdocs/webportal/admin/setup.php +++ b/htdocs/webportal/admin/setup.php @@ -103,6 +103,16 @@ $formSetup = new FormSetup($db); $item = $formSetup->newItem('WEBPORTAL_ROOT_URL')->setAsString(); $item->fieldAttr = array('placeholder' => 'https://'); $item->helpText = $langs->transnoentities('WebPortalRootUrlHelp'); +require_once __DIR__ . '/../public/class/context.class.php'; +$context = Context::getInstance(); +$item->fieldOutputOverride = ' '.$context->getControllerUrl().''; + + +$formSetup->newItem('WEBPORTAL_TITLE')->defaultFieldValue = getDolGlobalString('MAIN_INFO_SOCIETE_NOM'); + + + + // Enable access for the membership record $access_list = array( @@ -342,8 +352,7 @@ $head = webportalAdminPrepareHead(); print dol_get_fiche_head($head, 'settings', $langs->trans($page_name), -1, "webportal@webportal"); // Setup page goes here -echo '' . $langs->trans("WebPortalSetupPage") . '

'; - +echo '' . $langs->trans("WebPortalSetupPage") . ' : ' . $langs->trans('UserAccountForWebPortalAreInThirdPartyTabHelp') .'.

'; if ($action == 'edit') { print $formSetup->generateOutput(true); @@ -619,10 +628,6 @@ foreach ($myTmpObjects as $myTmpObjectKey => $myTmpObjectArray) { } } -if (empty($setupnotempty)) { - print '
' . $langs->trans("NothingToSetup"); -} - // Page end print dol_get_fiche_end(); diff --git a/htdocs/webportal/admin/setup_theme.php b/htdocs/webportal/admin/setup_theme.php new file mode 100644 index 00000000000..979258d3225 --- /dev/null +++ b/htdocs/webportal/admin/setup_theme.php @@ -0,0 +1,253 @@ + + * Copyright (C) 2023 Lionel Vessiller + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/** + * \file admin/setup.php + * \ingroup webportal + * \brief WebPortal setup page. + */ + +// Load Dolibarr environment +$res = 0; +// Try main.inc.php into web root known defined into CONTEXT_DOCUMENT_ROOT (not always defined) +if (!$res && !empty($_SERVER["CONTEXT_DOCUMENT_ROOT"])) { + $res = @include $_SERVER["CONTEXT_DOCUMENT_ROOT"] . "/main.inc.php"; +} +// Try main.inc.php into web root detected using web root calculated from SCRIPT_FILENAME +$tmp = empty($_SERVER['SCRIPT_FILENAME']) ? '' : $_SERVER['SCRIPT_FILENAME']; +$tmp2 = realpath(__FILE__); +$i = strlen($tmp) - 1; +$j = strlen($tmp2) - 1; +while ($i > 0 && $j > 0 && isset($tmp[$i]) && isset($tmp2[$j]) && $tmp[$i] == $tmp2[$j]) { + $i--; + $j--; +} +if (!$res && $i > 0 && file_exists(substr($tmp, 0, ($i + 1)) . "/main.inc.php")) { + $res = @include substr($tmp, 0, ($i + 1)) . "/main.inc.php"; +} +if (!$res && $i > 0 && file_exists(dirname(substr($tmp, 0, ($i + 1))) . "/main.inc.php")) { + $res = @include dirname(substr($tmp, 0, ($i + 1))) . "/main.inc.php"; +} +// Try main.inc.php using relative path +if (!$res && file_exists("../../main.inc.php")) { + $res = @include "../../main.inc.php"; +} +if (!$res && file_exists("../../../main.inc.php")) { + $res = @include "../../../main.inc.php"; +} +if (!$res) { + die("Include of main fails"); +} + +global $conf, $db, $hookmanager, $langs, $user; + +// Libraries +require_once DOL_DOCUMENT_ROOT . "/core/lib/admin.lib.php"; +dol_include_once('/webportal/lib/webportal.lib.php'); + +// Translations +$langs->loadLangs(array("admin", "webportal")); + +// Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context +$hookmanager->initHooks(array('webportalthemesetup', 'globalsetup')); + +// Access control +if (!$user->admin) { + accessforbidden(); +} + +// Parameters +$action = GETPOST('action', 'aZ09'); +$backtopage = GETPOST('backtopage', 'alpha'); +$modulepart = GETPOST('modulepart', 'aZ09'); // Used by actions_setmoduleoptions.inc.php + +$value = GETPOST('value', 'alpha'); +$label = GETPOST('label', 'alpha'); +$scandir = GETPOST('scan_dir', 'alpha'); +$type = 'myobject'; + + +$error = 0; +$setupnotempty = 0; + +// Set this to 1 to use the factory to manage constants. Warning, the generated module will be compatible with version v15+ only +$useFormSetup = 1; + +if (!class_exists('FormSetup')) { + // For retrocompatibility Dolibarr < 16.0 + if (floatval(DOL_VERSION) < 16.0 && !class_exists('FormSetup')) { + require_once __DIR__ . '/../backport/v16/core/class/html.formsetup.class.php'; + } else { + require_once DOL_DOCUMENT_ROOT . '/core/class/html.formsetup.class.php'; + } +} + +$formSetup = new FormSetup($db); + + +require_once __DIR__ . '/../public/class/webPortalTheme.class.php'; +$webPortalTheme = new WebPortalTheme(); + +// Setup conf for secondary color +$item = $formSetup->newItem('WEBPORTAL_PRIMARY_COLOR'); +$item->setAsColor(); +$item->defaultFieldValue = $webPortalTheme->primaryColorHex; + + +// Logo URL +$item = $formSetup->newItem('WEBPORTAL_LOGIN_LOGO_URL'); +$item->fieldAttr = array('type'=>'url', 'size'=> 50, 'placeholder'=>'http://'); + +$item = $formSetup->newItem('WEBPORTAL_MENU_LOGO_URL'); +$item->fieldAttr = array('type'=>'url', 'size'=> 50, 'placeholder'=>'http://'); + + + +// Background URL +$item = $formSetup->newItem('WEBPORTAL_LOGIN_BACKGROUND'); +$item->fieldAttr = array('type'=>'url', 'size'=> 50, 'placeholder'=>'http://'); + +$item = $formSetup->newItem('WEBPORTAL_BANNER_BACKGROUND'); +$item->fieldAttr = array('type'=>'url', 'size'=> 50, 'placeholder'=>'http://'); + + +$item = $formSetup->newItem('WEBPORTAL_BANNER_BACKGROUND_IS_DARK')->setAsYesNo(); + + +// HTTP HOST +//$item = $formSetup->newItem('NO_PARAM_JUST_TEXT'); +//$item->fieldOverride = (empty($_SERVER['HTTPS']) ? 'http://' : 'https://') . $_SERVER['HTTP_HOST']; +//$item->cssClass = 'minwidth500'; + +// Setup conf WEBPORTAL_MYPARAM1 as a simple string input +//$item = $formSetup->newItem('WEBPORTAL_MYPARAM1'); +//$item->defaultFieldValue = 'default value'; + +// Setup conf WEBPORTAL_MYPARAM2 as a simple textarea input but we replace the text of field title +//$item = $formSetup->newItem('WEBPORTAL_MYPARAM2'); +//$item->nameText = $item->getNameText().' more html text '; + +// Setup conf WEBPORTAL_MYPARAM3 +//$item = $formSetup->newItem('WEBPORTAL_MYPARAM3'); +//$item->setAsThirdpartyType(); + +// Setup conf WEBPORTAL_MYPARAM4 : exemple of quick define write style +//$formSetup->newItem('WEBPORTAL_MYPARAM4')->setAsYesNo(); + +// Setup conf WEBPORTAL_MYPARAM5 +//$formSetup->newItem('WEBPORTAL_MYPARAM5')->setAsEmailTemplate('thirdparty'); + +// Setup conf WEBPORTAL_MYPARAM6 +//$formSetup->newItem('WEBPORTAL_MYPARAM6')->setAsSecureKey()->enabled = 0; // disabled + +// Setup conf WEBPORTAL_MYPARAM7 +//$formSetup->newItem('WEBPORTAL_MYPARAM7')->setAsProduct(); + +//$formSetup->newItem('Title')->setAsTitle(); + +// Setup conf WEBPORTAL_MYPARAM8 +//$item = $formSetup->newItem('WEBPORTAL_MYPARAM8'); +//$TField = array( +// 'test01' => $langs->trans('test01'), +// 'test02' => $langs->trans('test02'), +// 'test03' => $langs->trans('test03'), +// 'test04' => $langs->trans('test04'), +// 'test05' => $langs->trans('test05'), +// 'test06' => $langs->trans('test06'), +//); +//$item->setAsMultiSelect($TField); +//$item->helpText = $langs->transnoentities('WEBPORTAL_MYPARAM8'); + + +// Setup conf WEBPORTAL_MYPARAM9 +//$formSetup->newItem('WEBPORTAL_MYPARAM9')->setAsSelect($TField); + + +// Setup conf WEBPORTAL_MYPARAM10 +//$item = $formSetup->newItem('WEBPORTAL_MYPARAM10'); +//$item->setAsColor(); +//$item->defaultFieldValue = '#FF0000'; +//$item->nameText = $item->getNameText().' more html text '; +//$item->fieldInputOverride = ''; +//$item->helpText = $langs->transnoentities('AnHelpMessage'); +//$item->fieldValue = ''; +//$item->fieldAttr = array() ; // fields attribute only for compatible fields like input text +//$item->fieldOverride = false; // set this var to override field output will override $fieldInputOverride and $fieldOutputOverride too +//$item->fieldInputOverride = false; // set this var to override field input +//$item->fieldOutputOverride = false; // set this var to override field output + + +$setupnotempty += count($formSetup->items); + + +$dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']); + + +/* + * Actions + */ + +// For retrocompatibility Dolibarr < 15.0 +if (versioncompare(explode('.', DOL_VERSION), array(15)) < 0 && $action == 'update' && !empty($user->admin)) { + $formSetup->saveConfFromPost(); +} + +include DOL_DOCUMENT_ROOT . '/core/actions_setmoduleoptions.inc.php'; + + +/* + * View + */ + +$form = new Form($db); + +$help_url = ''; +$page_name = "WebPortalSetup"; + +llxHeader('', $langs->trans($page_name), $help_url); + +// Subheader +$linkback = '' . $langs->trans("BackToModuleList") . ''; + +print load_fiche_titre($langs->trans($page_name), $linkback, 'title_setup'); + +// Configuration header +$head = webportalAdminPrepareHead(); +print dol_get_fiche_head($head, 'themesettings', $langs->trans($page_name), -1, "webportal@webportal"); + +// Setup page goes here +echo '' . $langs->trans("WebPortalSetupPage") . ' : ' . $langs->trans('UserAccountForWebPortalAreInThirdPartyTabHelp') .'.

'; + +if ($action == 'edit') { + print $formSetup->generateOutput(true); + print '
'; +} elseif (!empty($formSetup->items)) { + print $formSetup->generateOutput(); + print '
'; + print '' . $langs->trans("Modify") . ''; + print '
'; +} else { + print '
' . $langs->trans("NothingToSetup"); +} + + +// Page end +print dol_get_fiche_end(); + +llxFooter(); +$db->close(); diff --git a/htdocs/webportal/core/modules/modWebPortal.class.php b/htdocs/webportal/core/modules/modWebPortal.class.php index 1ddabc32869..2ee440d0057 100644 --- a/htdocs/webportal/core/modules/modWebPortal.class.php +++ b/htdocs/webportal/core/modules/modWebPortal.class.php @@ -81,7 +81,7 @@ class modWebPortal extends DolibarrModules // If file is in theme/yourtheme/img directory under name object_pictovalue.png, use this->picto='pictovalue' // If file is in module/img directory under name object_pictovalue.png, use this->picto='pictovalue@module' // To use a supported fa-xxx css style of font awesome, use this->picto='xxx' - $this->picto = 'fa-file-o'; + $this->picto = 'fa-door-open_fa_#6c6aa8'; // Define some features supported by module (triggers, login, substitutions, menus, css, etc...) $this->module_parts = array( diff --git a/htdocs/webportal/langs/en_US/webportal.lang b/htdocs/webportal/langs/en_US/webportal.lang index b764cd3ee56..0f5d5305b8c 100644 --- a/htdocs/webportal/langs/en_US/webportal.lang +++ b/htdocs/webportal/langs/en_US/webportal.lang @@ -31,6 +31,7 @@ Settings = Settings WebPortalSetupPage = WebPortal setup page WEBPORTAL_ROOT_URL = Public access url WebPortalRootUrlHelp = Public access url (http or https) if you have a virtual host or keep empty +UserAccountForWebPortalAreInThirdPartyTabHelp = Users accounts for WebPortal can be set on each third party card in Website accounts tab WebPortalAccessHidden = Hidden WebPortalAccessVisible = Visible WebPortalAccessEdit = Editable @@ -67,6 +68,18 @@ WebPortalMemberCardDesc = Member card WebPortalPartnershipCardMenu = Partnership WebPortalPartnershipCardTitle = Partnership card WebPortalPartnershipCardDesc = Partnership card +loginWebportalUserName = User name / email +loginWebportalPassword = Password +LoginNow = Login now +RemoveSearchFilters = Remove search filters + + +# +# Aria accessibility +# +AriaPrevPage = Previous page +AriaNextPage = Next page +AriaPageX = Page %s # # Errors @@ -80,3 +93,16 @@ WebPortalErrorFetchLoggedUser = Error when loading user (Id : %s) WebPortalErrorFetchLoggedThirdParty = Error when loading third-party (Id : %s) WebPortalErrorFetchLoggedMember = Error when loading member (Id : %s) WebPortalErrorFetchLoggedPartnership = Error when loading partnership (Third-party Id : %s, Member Id : %s) + +# +# Color theme settings +# + +WEBPORTAL_PRIMARY_COLOR = Primary color +WEBPORTAL_SECONDARY_COLOR = Secondary color +WEBPORTAL_LOGIN_LOGO_URL = Login logo image URL +WEBPORTAL_MENU_LOGO_URL = Menu logo image URL +WEBPORTAL_MENU_LOGO_URLTooltip = Leave empty to use login logo +WEBPORTAL_LOGIN_BACKGROUND = Background login image URL +WEBPORTAL_BANNER_BACKGROUND = Background for banner +WEBPORTAL_BANNER_BACKGROUND_IS_DARK = Use dark theme for banner \ No newline at end of file diff --git a/htdocs/webportal/lib/webportal.lib.php b/htdocs/webportal/lib/webportal.lib.php index 62c8e341132..c0229ca9117 100644 --- a/htdocs/webportal/lib/webportal.lib.php +++ b/htdocs/webportal/lib/webportal.lib.php @@ -45,6 +45,11 @@ function webportalAdminPrepareHead() $head[$h][2] = 'settings'; $h++; + $head[$h][0] = dol_buildpath("/webportal/admin/setup_theme.php", 1); + $head[$h][1] = $langs->trans("SkinAndColors"); + $head[$h][2] = 'themesettings'; + $h++; + $head[$h][0] = dol_buildpath("/webportal/admin/configcss.php", 1); $head[$h][1] = $langs->trans("CSSPage"); $head[$h][2] = 'css'; diff --git a/htdocs/webportal/public/class/context.class.php b/htdocs/webportal/public/class/context.class.php index 42f9668c938..76834ce4b1a 100644 --- a/htdocs/webportal/public/class/context.class.php +++ b/htdocs/webportal/public/class/context.class.php @@ -1,6 +1,7 @@ rootUrl = self::getRootConfigUrl(); + + + $this->theme = new WebPortalTheme(); } /** diff --git a/htdocs/webportal/public/class/controller.class.php b/htdocs/webportal/public/class/controller.class.php index bf620a44198..520c4d090a2 100644 --- a/htdocs/webportal/public/class/controller.class.php +++ b/htdocs/webportal/public/class/controller.class.php @@ -186,6 +186,8 @@ class Controller return false; } + $controller = $this; // transmit controller to tpl + include $tplPath; return true; diff --git a/htdocs/webportal/public/class/html.formlistwebportal.class.php b/htdocs/webportal/public/class/html.formlistwebportal.class.php index 5d5a0b6fc9d..6f520c10ae1 100644 --- a/htdocs/webportal/public/class/html.formlistwebportal.class.php +++ b/htdocs/webportal/public/class/html.formlistwebportal.class.php @@ -433,17 +433,14 @@ class FormListWebPortal $html .= ''; - $html .= ''; + + /* Generate pagination list */ + $html .= static::generatePageListNav($url_file . $pagination_param, $nbpages, $page); + $html .= ''; // table with search filters and column titles - $html .= ''; + $html .= '
'; // title and desc for table //if ($titleKey != '') { // $html .= ''; // Action column // if (getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) { - $html .= ''; // } foreach ($object->fields as $key => $val) { if (!empty($arrayfields['t.' . $key]['checked'])) { - $html .= ''; // Action column // if (getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) { - $html .= ''; + $html .= ''; $totalarray['nbfield']++; // } foreach ($object->fields as $key => $val) { @@ -523,7 +520,7 @@ class FormListWebPortal $tableOrder = strtolower($sortList[$tableKey]); } $url_param = $url_file . '&sortfield=' . $tableKey . '&sortorder=' . ($tableOrder == 'desc' ? 'asc' : 'desc') . $param; - $html .= '
'; @@ -461,14 +458,14 @@ class FormListWebPortal $html .= '
'; - $html .= ''; - $html .= ''; + $html .= ''; + $html .= ' '; + $html .= ' '; $html .= ''; + $html .= ''; if (!empty($val['arrayofkeyval']) && is_array($val['arrayofkeyval'])) { $html .= $this->form->selectarray('search_' . $key, $val['arrayofkeyval'], (isset($search[$key]) ? $search[$key] : ''), $val['notnull'], 0, 0, '', 1, 0, 0, '', ''); } elseif (preg_match('/^(date|timestamp|datetime)/', $val['type'])) { @@ -512,7 +509,7 @@ class FormListWebPortal $html .= '
'; + $html .= ''; $html .= ''; $html .= $langs->trans($arrayfields['t.' . $key]['label']); $html .= ''; @@ -729,4 +726,53 @@ class FormListWebPortal return $html; } + + /** + * @param string $url url of curent page + * @param int $nbPages total of pages results + * @param int $currentPage number of current page + * @return string + */ + public static function generatePageListNav(string $url, int $nbPages, int $currentPage){ + + global $langs; + + + $pSep = strpos($url, '?') === false ? '?' : '&'; + + $html = '
    '; + + + if($currentPage > 1){ + $html .= '
  • '; + } + + $maxPaginItem = min($nbPages, 5); + $minPageNum = max(1, $currentPage-3); + $maxPageNum = min($nbPages, $currentPage+3); + + + if($minPageNum > 1){ + $html .= '
  • 1
  • '; + $html .= '
  • '; + } + + for($p=$minPageNum; $p <= $maxPageNum; $p++){ + $html .= '
  • ' . $p . '
  • '; + } + + if($maxPaginItem<$nbPages){ + $html .= '
  • '; + $html .= '
  • ' . $nbPages . '
  • '; + } + + + if($currentPage < $nbPages) { + $html .= '
  • = $nbPages ? ' disabled' : '').'>
  • '; + } + + $html .= '
'; + + return $html; + } } diff --git a/htdocs/webportal/public/class/webPortalTheme.class.php b/htdocs/webportal/public/class/webPortalTheme.class.php new file mode 100644 index 00000000000..0cb9376333c --- /dev/null +++ b/htdocs/webportal/public/class/webPortalTheme.class.php @@ -0,0 +1,150 @@ + + * Copyright (C) 2023 Lionel Vessiller + * Copyright (C) 2023 John Botella + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + + +/** + * \file htdocs/webportal/public/class/webPortalTheme.class.php + * \ingroup webportal + * \brief File of class with theme definition for WebPortal + */ + +require_once DOL_DOCUMENT_ROOT . '/core/lib/functions2.lib.php'; // used for color functions + +class WebPortalTheme{ + + + public $primaryColorHex = '#263c5c'; + public $primaryColorHsl = array( + 'h' => 216, // Hue + 'l' => 42, // lightness + 's' => 25, // Saturation + 'a' => 1 // Alfa + ); + + + public $loginLogoUrl; + public $menuLogoUrl; + public $loginBackground; + + + public function __construct() { + $this->loadPrimaryColor(); + + $this->loginLogoUrl = getDolGlobalString('WEBPORTAL_LOGIN_LOGO_URL'); + $this->menuLogoUrl = getDolGlobalString('WEBPORTAL_MENU_LOGO_URL',$this->loginLogoUrl); + $this->loginBackground = getDolGlobalString('WEBPORTAL_LOGIN_BACKGROUND'); + $this->bannerBackground = getDolGlobalString('WEBPORTAL_BANNER_BACKGROUND'); + $this->bannerUseDarkTheme = getDolGlobalInt('WEBPORTAL_BANNER_BACKGROUND_IS_DARK'); + + } + + /** + * return hex of primary theme color + * + * @return string + */ + public function loadPrimaryColor(){ + global $conf; + + $outColor = ''; + + if(!empty($conf->global->WEBPORTAL_PRIMARY_COLOR)){ + $outColor = $conf->global->WEBPORTAL_PRIMARY_COLOR; + }elseif(!empty($conf->global->THEME_ELDY_TOPMENU_BACK1)){ + $outColor = '#'.colorArrayToHex(colorStringToArray($conf->global->THEME_ELDY_TOPMENU_BACK1)); + } + + if(empty($outColor) || !colorValidateHex($outColor)){ + $outColor = '#263c5c'; + } + + $this->primaryColorHex = $outColor; + $this->primaryColorHsl = $this->colorHexToHsl($outColor, true, true); + } + + + + + + /** + * @param string $hex color in hex + * @param float|false $alpha 0 to 1 to add alpha channel + * @param bool $returnArray true=return an array instead, false=return string + * @return string|array String or array + */ + function colorHexToHsl($hex, $alpha = false, $returnArray = false) + { + + if(function_exists('colorHexToHsl')){ + return colorHexToHsl($hex, $alpha, $returnArray); + } + + + // For retro compatibility + // TODO : Remove this when webportal is included in DOLIBARR standard + $hex = str_replace('#', '', $hex); + $red = hexdec(substr($hex, 0, 2)) / 255; + $green = hexdec(substr($hex, 2, 2)) / 255; + $blue = hexdec(substr($hex, 4, 2)) / 255; + + $cmin = min($red, $green, $blue); + $cmax = max($red, $green, $blue); + $delta = $cmax - $cmin; + + if ($delta == 0) { + $hue = 0; + } elseif ($cmax === $red) { + $hue = (($green - $blue) / $delta); + } elseif ($cmax === $green) { + $hue = ($blue - $red) / $delta + 2; + } else { + $hue = ($red - $green) / $delta + 4; + } + + $hue = round($hue * 60); + if ($hue < 0) { + $hue += 360; + } + + $lightness = (($cmax + $cmin) / 2); + $saturation = $delta === 0 ? 0 : ($delta / (1 - abs(2 * $lightness - 1))); + if ($saturation < 0) { + $saturation += 1; + } + + $lightness = round($lightness*100); + $saturation = round($saturation*100); + + if ($returnArray) { + return array( + 'h' => $hue, + 'l' => $lightness, + 's' => $saturation, + 'a' => $alpha === false ? 1 : $alpha + ); + } + else if($alpha){ + return 'hsla('.$hue.', '.$saturation.', '.$lightness.' / '.$alpha.')'; + } + else { + return 'hsl('.$hue.', '.$saturation.', '.$lightness.')'; + } + } + +} \ No newline at end of file diff --git a/htdocs/webportal/public/controllers/default.controller.php b/htdocs/webportal/public/controllers/default.controller.php index ec1502c9695..9f06d3bb7d8 100644 --- a/htdocs/webportal/public/controllers/default.controller.php +++ b/htdocs/webportal/public/controllers/default.controller.php @@ -54,6 +54,7 @@ class DefaultController extends Controller $this->loadTemplate('header'); $this->loadTemplate('menu'); + $this->loadTemplate('hero-header-banner'); $hookRes = $this->hookPrintPageView(); diff --git a/htdocs/webportal/public/controllers/invoicelist.controller.php b/htdocs/webportal/public/controllers/invoicelist.controller.php index e3ea2cdac2b..9e9df8c8ee7 100644 --- a/htdocs/webportal/public/controllers/invoicelist.controller.php +++ b/htdocs/webportal/public/controllers/invoicelist.controller.php @@ -97,6 +97,7 @@ class InvoiceListController extends Controller $this->loadTemplate('header'); $this->loadTemplate('menu'); + $this->loadTemplate('hero-header-banner'); $hookRes = $this->hookPrintPageView(); if (empty($hookRes)) { diff --git a/htdocs/webportal/public/controllers/membercard.controller.php b/htdocs/webportal/public/controllers/membercard.controller.php index b03570cbd0e..b1101e30e0c 100644 --- a/htdocs/webportal/public/controllers/membercard.controller.php +++ b/htdocs/webportal/public/controllers/membercard.controller.php @@ -104,6 +104,7 @@ class MemberCardController extends Controller $this->loadTemplate('header'); $this->loadTemplate('menu'); + $this->loadTemplate('hero-header-banner'); $hookRes = $this->hookPrintPageView(); if (empty($hookRes)) { diff --git a/htdocs/webportal/public/controllers/orderlist.controller.php b/htdocs/webportal/public/controllers/orderlist.controller.php index 1476acca5b9..8671458e347 100644 --- a/htdocs/webportal/public/controllers/orderlist.controller.php +++ b/htdocs/webportal/public/controllers/orderlist.controller.php @@ -97,6 +97,7 @@ class OrderListController extends Controller $this->loadTemplate('header'); $this->loadTemplate('menu'); + $this->loadTemplate('hero-header-banner'); $hookRes = $this->hookPrintPageView(); if (empty($hookRes)) { diff --git a/htdocs/webportal/public/controllers/partnershipcard.controller.php b/htdocs/webportal/public/controllers/partnershipcard.controller.php index 4d7a6988b9d..74910129d55 100644 --- a/htdocs/webportal/public/controllers/partnershipcard.controller.php +++ b/htdocs/webportal/public/controllers/partnershipcard.controller.php @@ -104,6 +104,7 @@ class PartnershipCardController extends Controller $this->loadTemplate('header'); $this->loadTemplate('menu'); + $this->loadTemplate('hero-header-banner'); $hookRes = $this->hookPrintPageView(); if (empty($hookRes)) { diff --git a/htdocs/webportal/public/controllers/propallist.controller.php b/htdocs/webportal/public/controllers/propallist.controller.php index 913a38ff094..8a531f6cde5 100644 --- a/htdocs/webportal/public/controllers/propallist.controller.php +++ b/htdocs/webportal/public/controllers/propallist.controller.php @@ -100,6 +100,7 @@ class PropalListController extends Controller $this->loadTemplate('header'); $this->loadTemplate('menu'); + $this->loadTemplate('hero-header-banner'); $hookRes = $this->hookPrintPageView(); if (empty($hookRes)) { diff --git a/htdocs/webportal/public/css/global.css b/htdocs/webportal/public/css/global.css index faa9a45cb2c..dfecfe391b4 100644 --- a/htdocs/webportal/public/css/global.css +++ b/htdocs/webportal/public/css/global.css @@ -1,9 +1,13 @@ @charset "UTF-8"; + @import "pico.css"; @import "mixin.css"; @import "login.css"; +@import "./themes/custom.css.php"; - +/** +This file car overwrite default pico css + */ /** @@ -18,11 +22,28 @@ body > nav { top: 0; right: 0; left: 0; - backdrop-filter: saturate(180%) blur(10px); + backdrop-filter: blur(60px) ; background-color: var(--nav-background-color); box-shadow: 0px 1px 0 var(--nav-border-color); } +.primary-top-nav{ + --border-radius: 0; +} + +/** + NAV BRAND LOGO + */ +.brand__logo-link{ + max-height: 100%; + margin: 0; + padding: 0; +} + +.brand__logo-link:focus{ + background: none; +} + .spacer{ --spacer-margin: calc(var(--font-size) * 2); margin-top: var(--spacer-margin); @@ -35,4 +56,90 @@ html{ #main-container{ padding-top: 200px; +} + + +.pages-nav-list__icon::after { + display: block; + width: 1rem; + height: 1rem; + -webkit-margin-start: calc(var(--spacing, 1rem) * 0.5); + margin-inline-start: calc(var(--spacing, 1rem) * 0.5); + float: right; + background-image: var(--icon-chevron); + background-position: right center; + background-size: 1rem auto; + background-repeat: no-repeat; + content: ""; + transition: transform var(--transition); +} + +.pages-nav-list__icon.--prev::after { + transform: rotate(90deg); +} +.pages-nav-list__icon.--next::after { + transform: rotate(-90deg); +} + +.pages-nav-list__link.--active{ + outline: 1px solid hsla(var(--primary-color-hue), var(--primary-color-saturation), var(--primary-color-lightness), 0.3); +} + +.hero-header{ + background-color: #f2f2f2; + background-image: var(--banner-background); + padding: 120px 0 64px 0; + margin: 0; + + background-position: center center; + background-size: cover; + background-repeat: no-repeat; +} + +/** + Search list + */ +[role="search-row"] :is(button, input[type=submit], input[type=button], [role=button]) { + --background-color: #ededed; + --border-color: #ededed; + --color: #666; +} + +.btn-filter-icon{ + --icon-url : var(--icon-time); + --icon-size : 16px; + + display: inline-block; + width: auto; +} + +.btn-filter-icon::before{ + content: " "; + display: inline-block; + height: var(--icon-size); + width: var(--icon-size); + background-color: transparent; + background-image: var(--icon-url); + background-repeat: no-repeat; + background-size: var(--icon-size) var(--icon-size); + background-position: center; +} + +.btn-filter-icon.btn-remove-search-filters-icon::before { + --icon-url : var(--icon-close); +} + +.btn-filter-icon.btn-search-filters-icon::before { + --icon-url : var(--icon-search); +} + +[role="search-row"] [data-col="row-checkbox"]{ + white-space: nowrap; +} + +/** +Home Styles + */ +.home-links-card{ + } \ No newline at end of file diff --git a/htdocs/webportal/public/css/pico.css b/htdocs/webportal/public/css/pico.css index 08cc7b94b49..a54091bc0ec 100644 --- a/htdocs/webportal/public/css/pico.css +++ b/htdocs/webportal/public/css/pico.css @@ -209,8 +209,7 @@ kbd { --font-weight: bolder; } -[data-theme=light], -:root:not([data-theme=dark]) { +:where(:root) { --background-color: #fff; --color: hsl(205, 20%, 32%); --h1-color: hsl(205, 30%, 15%); @@ -222,12 +221,13 @@ kbd { --muted-color: hsl(205, 10%, 50%); --muted-border-color: hsl(205, 20%, 94%); + --banner-background : #ededed; --primary-color-hue : 200; --primary-color-saturation : 45%; --primary-color-lightness : 50%; --primary : hsl(var(--primary-color-hue), var(--primary-color-saturation), var(--primary-color-lightness)); --primary-hover: hsl(var(--primary-color-hue), 90%, 32%); - --primary-focus: rgba(16, 149, 193, 0.125); + --primary-focus: hsl(var(--primary-color-hue), var(--primary-color-saturation), var(--primary-color-lightness), 0.125); --primary-inverse: #fff; --secondary: hsl(205, 15%, 41%); --secondary-hover: hsl(205, 20%, 32%); @@ -305,12 +305,13 @@ kbd { --loading-spinner-opacity: 0.5; --tooltip-background-color: var(--contrast); --tooltip-color: var(--contrast-inverse); + + /** SVG Images */ --icon-checkbox: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E"); --icon-chevron: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(65, 84, 98)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E"); --icon-chevron-button: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E"); --icon-chevron-button-inverse: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E"); --icon-caret: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='-96 0 10.24 10.24' style='fill:rgba(65, 84, 98)'%3E%3Cpath d='M-96 1.92h10.24l-5.12 6.4z' /%3E%3C/svg%3E"); - --icon-close: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(115, 130, 140)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='18' y1='6' x2='6' y2='18'%3E%3C/line%3E%3Cline x1='6' y1='6' x2='18' y2='18'%3E%3C/line%3E%3C/svg%3E"); --icon-date: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(65, 84, 98)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E"); --icon-invalid: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(198, 40, 40)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12.01' y2='16'%3E%3C/line%3E%3C/svg%3E"); @@ -319,8 +320,8 @@ kbd { --icon-time: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(65, 84, 98)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cpolyline points='12 6 12 12 16 14'%3E%3C/polyline%3E%3C/svg%3E"); --icon-valid: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(56, 142, 60)' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E"); - --nav-background-color: rgba(255,255,255,0.3); - --nav-border-color: var(--table-border-color); + --nav-background-color: rgba(255,255,255,0.8); + --nav-border-color: rgba(127,127,127,0.3); color-scheme: light; @@ -445,111 +446,115 @@ kbd { /* color-scheme: dark;*/ /* }*/ /*}*/ -/*[data-theme=dark] {*/ -/* --background-color: #11191f;*/ -/* --color: hsl(205, 16%, 77%);*/ -/* --h1-color: hsl(205, 20%, 94%);*/ -/* --h2-color: #e1e6eb;*/ -/* --h3-color: hsl(205, 18%, 86%);*/ -/* --h4-color: #c8d1d8;*/ -/* --h5-color: hsl(205, 16%, 77%);*/ -/* --h6-color: #afbbc4;*/ -/* --muted-color: hsl(205, 10%, 50%);*/ -/* --muted-border-color: #1f2d38;*/ -/* --primary: hsl(195, 85%, 41%);*/ -/* --primary-hover: hsl(195, 80%, 50%);*/ -/* --primary-focus: rgba(16, 149, 193, 0.25);*/ -/* --primary-inverse: #fff;*/ -/* --secondary: hsl(205, 15%, 41%);*/ -/* --secondary-hover: hsl(205, 10%, 50%);*/ -/* --secondary-focus: rgba(115, 130, 140, 0.25);*/ -/* --secondary-inverse: #fff;*/ -/* --contrast: hsl(205, 20%, 94%);*/ -/* --contrast-hover: #fff;*/ -/* --contrast-focus: rgba(115, 130, 140, 0.25);*/ -/* --contrast-inverse: #000;*/ -/* --mark-background-color: #d1c284;*/ -/* --mark-color: #11191f;*/ -/* --ins-color: #388e3c;*/ -/* --del-color: #c62828;*/ -/* --blockquote-border-color: var(--muted-border-color);*/ -/* --blockquote-footer-color: var(--muted-color);*/ -/* --button-box-shadow: 0 0 0 rgba(0, 0, 0, 0);*/ -/* --button-hover-box-shadow: 0 0 0 rgba(0, 0, 0, 0);*/ -/* --form-element-background-color: #11191f;*/ -/* --form-element-border-color: #374956;*/ -/* --form-element-color: var(--color);*/ -/* --form-element-placeholder-color: var(--muted-color);*/ -/* --form-element-active-background-color: var(--form-element-background-color);*/ -/* --form-element-active-border-color: var(--primary);*/ -/* --form-element-focus-color: var(--primary-focus);*/ -/* --form-element-disabled-background-color: hsl(205, 25%, 23%);*/ -/* --form-element-disabled-border-color: hsl(205, 20%, 32%);*/ -/* --form-element-disabled-opacity: 0.5;*/ -/* --form-element-invalid-border-color: #b71c1c;*/ -/* --form-element-invalid-active-border-color: #c62828;*/ -/* --form-element-invalid-focus-color: rgba(198, 40, 40, 0.25);*/ -/* --form-element-valid-border-color: #2e7d32;*/ -/* --form-element-valid-active-border-color: #388e3c;*/ -/* --form-element-valid-focus-color: rgba(56, 142, 60, 0.25);*/ -/* --switch-background-color: #374956;*/ -/* --switch-color: var(--primary-inverse);*/ -/* --switch-checked-background-color: var(--primary);*/ -/* --range-border-color: #24333e;*/ -/* --range-active-border-color: hsl(205, 25%, 23%);*/ -/* --range-thumb-border-color: var(--background-color);*/ -/* --range-thumb-color: var(--secondary);*/ -/* --range-thumb-hover-color: var(--secondary-hover);*/ -/* --range-thumb-active-color: var(--primary);*/ -/* --table-border-color: var(--muted-border-color);*/ -/* --table-row-stripped-background-color: rgba(115, 130, 140, 0.05);*/ -/* --code-background-color: #18232c;*/ -/* --code-color: var(--muted-color);*/ -/* --code-kbd-background-color: var(--contrast);*/ -/* --code-kbd-color: var(--contrast-inverse);*/ -/* --code-tag-color: hsl(330, 30%, 50%);*/ -/* --code-property-color: hsl(185, 30%, 50%);*/ -/* --code-value-color: hsl(40, 10%, 50%);*/ -/* --code-comment-color: #4d606d;*/ -/* --accordion-border-color: var(--muted-border-color);*/ -/* --accordion-active-summary-color: var(--primary);*/ -/* --accordion-close-summary-color: var(--color);*/ -/* --accordion-open-summary-color: var(--muted-color);*/ -/* --card-background-color: #141e26;*/ -/* --card-border-color: var(--card-background-color);*/ -/* --card-box-shadow:*/ -/* 0.0145rem 0.029rem 0.174rem rgba(0, 0, 0, 0.01698),*/ -/* 0.0335rem 0.067rem 0.402rem rgba(0, 0, 0, 0.024),*/ -/* 0.0625rem 0.125rem 0.75rem rgba(0, 0, 0, 0.03),*/ -/* 0.1125rem 0.225rem 1.35rem rgba(0, 0, 0, 0.036),*/ -/* 0.2085rem 0.417rem 2.502rem rgba(0, 0, 0, 0.04302),*/ -/* 0.5rem 1rem 6rem rgba(0, 0, 0, 0.06),*/ -/* 0 0 0 0.0625rem rgba(0, 0, 0, 0.015);*/ -/* --card-sectionning-background-color: #18232c;*/ -/* --dropdown-background-color: hsl(205, 30%, 15%);*/ -/* --dropdown-border-color: #24333e;*/ -/* --dropdown-box-shadow: var(--card-box-shadow);*/ -/* --dropdown-color: var(--color);*/ -/* --dropdown-hover-background-color: rgba(36, 51, 62, 0.75);*/ -/* --modal-overlay-background-color: rgba(36, 51, 62, 0.8);*/ -/* --progress-background-color: #24333e;*/ -/* --progress-color: var(--primary);*/ -/* --loading-spinner-opacity: 0.5;*/ -/* --tooltip-background-color: var(--contrast);*/ -/* --tooltip-color: var(--contrast-inverse);*/ -/* --icon-checkbox: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E");*/ -/* --icon-chevron: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(162, 175, 185)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");*/ -/* --icon-chevron-button: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");*/ -/* --icon-chevron-button-inverse: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(0, 0, 0)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");*/ -/* --icon-close: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(115, 130, 140)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='18' y1='6' x2='6' y2='18'%3E%3C/line%3E%3Cline x1='6' y1='6' x2='18' y2='18'%3E%3C/line%3E%3C/svg%3E");*/ -/* --icon-date: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(162, 175, 185)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E");*/ -/* --icon-invalid: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(183, 28, 28)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12.01' y2='16'%3E%3C/line%3E%3C/svg%3E");*/ -/* --icon-minus: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='5' y1='12' x2='19' y2='12'%3E%3C/line%3E%3C/svg%3E");*/ -/* --icon-search: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(162, 175, 185)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E");*/ -/* --icon-time: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(162, 175, 185)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cpolyline points='12 6 12 12 16 14'%3E%3C/polyline%3E%3C/svg%3E");*/ -/* --icon-valid: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(46, 125, 50)' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E");*/ -/* color-scheme: dark;*/ -/*}*/ + +[data-theme=dark] { + --background-color: #11191f; + --color: hsl(205, 16%, 77%); + --h1-color: hsl(205, 20%, 94%); + --h2-color: #e1e6eb; + --h3-color: hsl(205, 18%, 86%); + --h4-color: #c8d1d8; + --h5-color: hsl(205, 16%, 77%); + --h6-color: #afbbc4; + --muted-color: hsl(205, 10%, 50%); + --muted-border-color: #1f2d38; + /*--primary: hsl(195, 85%, 41%);*/ + /*--primary-hover: hsl(195, 80%, 50%);*/ + /*--primary-focus: rgba(16, 149, 193, 0.25);*/ + /*--primary-inverse: #fff;*/ + --secondary: hsl(205, 15%, 41%); + --secondary-hover: hsl(205, 10%, 50%); + --secondary-focus: rgba(115, 130, 140, 0.25); + --secondary-inverse: #fff; + --contrast: hsl(205, 20%, 94%); + --contrast-hover: #fff; + --contrast-focus: rgba(115, 130, 140, 0.25); + --contrast-inverse: #000; + --mark-background-color: #d1c284; + --mark-color: #11191f; + --ins-color: #388e3c; + --del-color: #c62828; + --blockquote-border-color: var(--muted-border-color); + --blockquote-footer-color: var(--muted-color); + --button-box-shadow: 0 0 0 rgba(0, 0, 0, 0); + --button-hover-box-shadow: 0 0 0 rgba(0, 0, 0, 0); + --form-element-background-color: #11191f; + --form-element-border-color: #374956; + --form-element-color: var(--color); + --form-element-placeholder-color: var(--muted-color); + --form-element-active-background-color: var(--form-element-background-color); + --form-element-active-border-color: var(--primary); + --form-element-focus-color: var(--primary-focus); + --form-element-disabled-background-color: hsl(205, 25%, 23%); + --form-element-disabled-border-color: hsl(205, 20%, 32%); + --form-element-disabled-opacity: 0.5; + --form-element-invalid-border-color: #b71c1c; + --form-element-invalid-active-border-color: #c62828; + --form-element-invalid-focus-color: rgba(198, 40, 40, 0.25); + --form-element-valid-border-color: #2e7d32; + --form-element-valid-active-border-color: #388e3c; + --form-element-valid-focus-color: rgba(56, 142, 60, 0.25); + --switch-background-color: #374956; + --switch-color: var(--primary-inverse); + --switch-checked-background-color: var(--primary); + --range-border-color: #24333e; + --range-active-border-color: hsl(205, 25%, 23%); + --range-thumb-border-color: var(--background-color); + --range-thumb-color: var(--secondary); + --range-thumb-hover-color: var(--secondary-hover); + --range-thumb-active-color: var(--primary); + --table-border-color: var(--muted-border-color); + --table-row-stripped-background-color: rgba(115, 130, 140, 0.05); + --code-background-color: #18232c; + --code-color: var(--muted-color); + --code-kbd-background-color: var(--contrast); + --code-kbd-color: var(--contrast-inverse); + --code-tag-color: hsl(330, 30%, 50%); + --code-property-color: hsl(185, 30%, 50%); + --code-value-color: hsl(40, 10%, 50%); + --code-comment-color: #4d606d; + --accordion-border-color: var(--muted-border-color); + --accordion-active-summary-color: var(--primary); + --accordion-close-summary-color: var(--color); + --accordion-open-summary-color: var(--muted-color); + --card-background-color: #141e26; + --card-border-color: var(--card-background-color); + --card-box-shadow: + 0.0145rem 0.029rem 0.174rem rgba(0, 0, 0, 0.01698), + 0.0335rem 0.067rem 0.402rem rgba(0, 0, 0, 0.024), + 0.0625rem 0.125rem 0.75rem rgba(0, 0, 0, 0.03), + 0.1125rem 0.225rem 1.35rem rgba(0, 0, 0, 0.036), + 0.2085rem 0.417rem 2.502rem rgba(0, 0, 0, 0.04302), + 0.5rem 1rem 6rem rgba(0, 0, 0, 0.06), + 0 0 0 0.0625rem rgba(0, 0, 0, 0.015); + --card-sectionning-background-color: #18232c; + --dropdown-background-color: hsl(205, 30%, 15%); + --dropdown-border-color: #24333e; + --dropdown-box-shadow: var(--card-box-shadow); + --dropdown-color: var(--color); + --dropdown-hover-background-color: rgba(36, 51, 62, 0.75); + --modal-overlay-background-color: rgba(36, 51, 62, 0.8); + --progress-background-color: #24333e; + --progress-color: var(--primary); + --loading-spinner-opacity: 0.5; + --tooltip-background-color: var(--contrast); + --tooltip-color: var(--contrast-inverse); + + + /** SVG Images */ + --icon-checkbox: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E"); + --icon-chevron: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(162, 175, 185)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E"); + --icon-chevron-button: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E"); + --icon-chevron-button-inverse: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(0, 0, 0)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E"); + --icon-close: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(115, 130, 140)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='18' y1='6' x2='6' y2='18'%3E%3C/line%3E%3Cline x1='6' y1='6' x2='18' y2='18'%3E%3C/line%3E%3C/svg%3E"); + --icon-date: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(162, 175, 185)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E"); + --icon-invalid: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(183, 28, 28)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12.01' y2='16'%3E%3C/line%3E%3C/svg%3E"); + --icon-minus: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='5' y1='12' x2='19' y2='12'%3E%3C/line%3E%3C/svg%3E"); + --icon-search: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(162, 175, 185)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E"); + --icon-time: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(162, 175, 185)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cpolyline points='12 6 12 12 16 14'%3E%3C/polyline%3E%3C/svg%3E"); + --icon-valid: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(46, 125, 50)' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E"); + color-scheme: dark; +} progress, [type=checkbox], diff --git a/htdocs/webportal/public/css/themes/custom.css.php b/htdocs/webportal/public/css/themes/custom.css.php index 6bcfbd285a0..c84bcfb15a6 100644 --- a/htdocs/webportal/public/css/themes/custom.css.php +++ b/htdocs/webportal/public/css/themes/custom.css.php @@ -22,8 +22,7 @@ if (!defined('NOREQUIREAJAX')) { session_cache_limiter('public'); -// require_once __DIR__.'/../main.inc.php'; -// require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php'; +require_once __DIR__.'/../../../webportal.main.inc.php'; // Define css type // top_httphead('text/css'); @@ -39,5 +38,30 @@ header("X-Frame-Options: SAMEORIGIN"); } */ +require_once __DIR__ . '/../../class/webPortalTheme.class.php'; +$webPortalTheme = new WebPortalTheme(); + +?> +[data-theme="custom"], :root{ + --primary-color-hue : primaryColorHsl['h']; ?>; + --primary-color-saturation : primaryColorHsl['s']; ?>%; + --primary-color-lightness : primaryColorHsl['l']; ?>%; + --banner-background : url(bannerBackground) ? $webPortalTheme->bannerBackground : '../img/banner.svg' ?>); +} + +.login-page { + loginBackground)){ + print '--login-background: rgba(0, 0, 0, 0.4) url("'.$webPortalTheme->loginBackground.'");'."\n"; + } + + if(!empty($webPortalTheme->loginLogoUrl)){ + print '--login-logo: url("'.$webPortalTheme->loginLogoUrl.'"); /* for relative path, must be relative od the css file or use full url starting by http:// */'."\n"; + } + ?> +} + + header, - body > main, - body > footer, - section { - --block-spacing-vertical: calc(var(--spacing) * 2.5); - } -} -@media (min-width: 768px) { - body > header, - body > main, - body > footer, - section { - --block-spacing-vertical: calc(var(--spacing) * 3); - } -} -@media (min-width: 992px) { - body > header, - body > main, - body > footer, - section { - --block-spacing-vertical: calc(var(--spacing) * 3.5); - } -} -@media (min-width: 1200px) { - body > header, - body > main, - body > footer, - section { - --block-spacing-vertical: calc(var(--spacing) * 4); - } -} - -@media (min-width: 576px) { - article { - --block-spacing-horizontal: calc(var(--spacing) * 1.25); - } -} -@media (min-width: 768px) { - article { - --block-spacing-horizontal: calc(var(--spacing) * 1.5); - } -} -@media (min-width: 992px) { - article { - --block-spacing-horizontal: calc(var(--spacing) * 1.75); - } -} -@media (min-width: 1200px) { - article { - --block-spacing-horizontal: calc(var(--spacing) * 2); - } -} - -dialog > article { - --block-spacing-vertical: calc(var(--spacing) * 2); - --block-spacing-horizontal: var(--spacing); -} -@media (min-width: 576px) { - dialog > article { - --block-spacing-vertical: calc(var(--spacing) * 2.5); - --block-spacing-horizontal: calc(var(--spacing) * 1.25); - } -} -@media (min-width: 768px) { - dialog > article { - --block-spacing-vertical: calc(var(--spacing) * 3); - --block-spacing-horizontal: calc(var(--spacing) * 1.5); - } -} - -a { - --text-decoration: none; -} -a.secondary, a.contrast { - --text-decoration: underline; -} - -small { - --font-size: 0.875em; -} - -h1, -h2, -h3, -h4, -h5, -h6 { - --font-weight: 700; -} - -h1 { - --font-size: 2rem; - --typography-spacing-vertical: 3rem; -} - -h2 { - --font-size: 1.75rem; - --typography-spacing-vertical: 2.625rem; -} - -h3 { - --font-size: 1.5rem; - --typography-spacing-vertical: 2.25rem; -} - -h4 { - --font-size: 1.25rem; - --typography-spacing-vertical: 1.874rem; -} - -h5 { - --font-size: 1.125rem; - --typography-spacing-vertical: 1.6875rem; -} - -[type=checkbox], -[type=radio] { - --border-width: 2px; -} - -[type=checkbox][role=switch] { - --border-width: 3px; -} - -thead th, -thead td, -tfoot th, -tfoot td { - --border-width: 3px; -} - -:not(thead, tfoot) > * > td { - --font-size: 0.875em; -} - -pre, -code, -kbd, -samp { - --font-family: "Menlo", "Consolas", "Roboto Mono", "Ubuntu Monospace", - "Noto Mono", "Oxygen Mono", "Liberation Mono", monospace, - "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; -} - -kbd { - --font-weight: bolder; -} - -[data-theme=light], -:root:not([data-theme=dark]) { - --background-color: #fff; - --color: hsl(205, 20%, 32%); - --h1-color: hsl(205, 30%, 15%); - --h2-color: #24333e; - --h3-color: hsl(205, 25%, 23%); - --h4-color: #374956; - --h5-color: hsl(205, 20%, 32%); - --h6-color: #4d606d; - --muted-color: hsl(205, 10%, 50%); - --muted-border-color: hsl(205, 20%, 94%); - --primary: hsl(195, 85%, 41%); - --primary-hover: hsl(195, 90%, 32%); - --primary-focus: rgba(16, 149, 193, 0.125); - --primary-inverse: #fff; - --secondary: hsl(205, 15%, 41%); - --secondary-hover: hsl(205, 20%, 32%); - --secondary-focus: rgba(89, 107, 120, 0.125); - --secondary-inverse: #fff; - --contrast: hsl(205, 30%, 15%); - --contrast-hover: #000; - --contrast-focus: rgba(89, 107, 120, 0.125); - --contrast-inverse: #fff; - --mark-background-color: #fff2ca; - --mark-color: #543a26; - --ins-color: #388e3c; - --del-color: #c62828; - --blockquote-border-color: var(--muted-border-color); - --blockquote-footer-color: var(--muted-color); - --button-box-shadow: 0 0 0 rgba(0, 0, 0, 0); - --button-hover-box-shadow: 0 0 0 rgba(0, 0, 0, 0); - --form-element-background-color: transparent; - --form-element-border-color: hsl(205, 14%, 68%); - --form-element-color: var(--color); - --form-element-placeholder-color: var(--muted-color); - --form-element-active-background-color: transparent; - --form-element-active-border-color: var(--primary); - --form-element-focus-color: var(--primary-focus); - --form-element-disabled-background-color: hsl(205, 18%, 86%); - --form-element-disabled-border-color: hsl(205, 14%, 68%); - --form-element-disabled-opacity: 0.5; - --form-element-invalid-border-color: #c62828; - --form-element-invalid-active-border-color: #d32f2f; - --form-element-invalid-focus-color: rgba(211, 47, 47, 0.125); - --form-element-valid-border-color: #388e3c; - --form-element-valid-active-border-color: #43a047; - --form-element-valid-focus-color: rgba(67, 160, 71, 0.125); - --switch-background-color: hsl(205, 16%, 77%); - --switch-color: var(--primary-inverse); - --switch-checked-background-color: var(--primary); - --range-border-color: hsl(205, 18%, 86%); - --range-active-border-color: hsl(205, 16%, 77%); - --range-thumb-border-color: var(--background-color); - --range-thumb-color: var(--secondary); - --range-thumb-hover-color: var(--secondary-hover); - --range-thumb-active-color: var(--primary); - --table-border-color: var(--muted-border-color); - --table-row-stripped-background-color: #f6f8f9; - --code-background-color: hsl(205, 20%, 94%); - --code-color: var(--muted-color); - --code-kbd-background-color: var(--contrast); - --code-kbd-color: var(--contrast-inverse); - --code-tag-color: hsl(330, 40%, 50%); - --code-property-color: hsl(185, 40%, 40%); - --code-value-color: hsl(40, 20%, 50%); - --code-comment-color: hsl(205, 14%, 68%); - --accordion-border-color: var(--muted-border-color); - --accordion-close-summary-color: var(--color); - --accordion-open-summary-color: var(--muted-color); - --card-background-color: var(--background-color); - --card-border-color: var(--muted-border-color); - --card-box-shadow: - 0.0145rem 0.029rem 0.174rem rgba(27, 40, 50, 0.01698), - 0.0335rem 0.067rem 0.402rem rgba(27, 40, 50, 0.024), - 0.0625rem 0.125rem 0.75rem rgba(27, 40, 50, 0.03), - 0.1125rem 0.225rem 1.35rem rgba(27, 40, 50, 0.036), - 0.2085rem 0.417rem 2.502rem rgba(27, 40, 50, 0.04302), - 0.5rem 1rem 6rem rgba(27, 40, 50, 0.06), - 0 0 0 0.0625rem rgba(27, 40, 50, 0.015); - --card-sectionning-background-color: #fbfbfc; - --dropdown-background-color: #fbfbfc; - --dropdown-border-color: #e1e6eb; - --dropdown-box-shadow: var(--card-box-shadow); - --dropdown-color: var(--color); - --dropdown-hover-background-color: hsl(205, 20%, 94%); - --modal-overlay-background-color: rgba(213, 220, 226, 0.7); - --progress-background-color: hsl(205, 18%, 86%); - --progress-color: var(--primary); - --loading-spinner-opacity: 0.5; - --tooltip-background-color: var(--contrast); - --tooltip-color: var(--contrast-inverse); - --icon-checkbox: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E"); - --icon-chevron: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(65, 84, 98)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E"); - --icon-chevron-button: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E"); - --icon-chevron-button-inverse: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E"); - --icon-close: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(115, 130, 140)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='18' y1='6' x2='6' y2='18'%3E%3C/line%3E%3Cline x1='6' y1='6' x2='18' y2='18'%3E%3C/line%3E%3C/svg%3E"); - --icon-date: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(65, 84, 98)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E"); - --icon-invalid: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(198, 40, 40)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12.01' y2='16'%3E%3C/line%3E%3C/svg%3E"); - --icon-minus: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='5' y1='12' x2='19' y2='12'%3E%3C/line%3E%3C/svg%3E"); - --icon-search: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(65, 84, 98)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E"); - --icon-time: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(65, 84, 98)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cpolyline points='12 6 12 12 16 14'%3E%3C/polyline%3E%3C/svg%3E"); - --icon-valid: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(56, 142, 60)' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E"); - color-scheme: light; -} - -@media only screen and (prefers-color-scheme: dark) { - :root:not([data-theme]) { - --background-color: #11191f; - --color: hsl(205, 16%, 77%); - --h1-color: hsl(205, 20%, 94%); - --h2-color: #e1e6eb; - --h3-color: hsl(205, 18%, 86%); - --h4-color: #c8d1d8; - --h5-color: hsl(205, 16%, 77%); - --h6-color: #afbbc4; - --muted-color: hsl(205, 10%, 50%); - --muted-border-color: #1f2d38; - --primary: hsl(195, 85%, 41%); - --primary-hover: hsl(195, 80%, 50%); - --primary-focus: rgba(16, 149, 193, 0.25); - --primary-inverse: #fff; - --secondary: hsl(205, 15%, 41%); - --secondary-hover: hsl(205, 10%, 50%); - --secondary-focus: rgba(115, 130, 140, 0.25); - --secondary-inverse: #fff; - --contrast: hsl(205, 20%, 94%); - --contrast-hover: #fff; - --contrast-focus: rgba(115, 130, 140, 0.25); - --contrast-inverse: #000; - --mark-background-color: #d1c284; - --mark-color: #11191f; - --ins-color: #388e3c; - --del-color: #c62828; - --blockquote-border-color: var(--muted-border-color); - --blockquote-footer-color: var(--muted-color); - --button-box-shadow: 0 0 0 rgba(0, 0, 0, 0); - --button-hover-box-shadow: 0 0 0 rgba(0, 0, 0, 0); - --form-element-background-color: #11191f; - --form-element-border-color: #374956; - --form-element-color: var(--color); - --form-element-placeholder-color: var(--muted-color); - --form-element-active-background-color: var(--form-element-background-color); - --form-element-active-border-color: var(--primary); - --form-element-focus-color: var(--primary-focus); - --form-element-disabled-background-color: hsl(205, 25%, 23%); - --form-element-disabled-border-color: hsl(205, 20%, 32%); - --form-element-disabled-opacity: 0.5; - --form-element-invalid-border-color: #b71c1c; - --form-element-invalid-active-border-color: #c62828; - --form-element-invalid-focus-color: rgba(198, 40, 40, 0.25); - --form-element-valid-border-color: #2e7d32; - --form-element-valid-active-border-color: #388e3c; - --form-element-valid-focus-color: rgba(56, 142, 60, 0.25); - --switch-background-color: #374956; - --switch-color: var(--primary-inverse); - --switch-checked-background-color: var(--primary); - --range-border-color: #24333e; - --range-active-border-color: hsl(205, 25%, 23%); - --range-thumb-border-color: var(--background-color); - --range-thumb-color: var(--secondary); - --range-thumb-hover-color: var(--secondary-hover); - --range-thumb-active-color: var(--primary); - --table-border-color: var(--muted-border-color); - --table-row-stripped-background-color: rgba(115, 130, 140, 0.05); - --code-background-color: #18232c; - --code-color: var(--muted-color); - --code-kbd-background-color: var(--contrast); - --code-kbd-color: var(--contrast-inverse); - --code-tag-color: hsl(330, 30%, 50%); - --code-property-color: hsl(185, 30%, 50%); - --code-value-color: hsl(40, 10%, 50%); - --code-comment-color: #4d606d; - --accordion-border-color: var(--muted-border-color); - --accordion-active-summary-color: var(--primary); - --accordion-close-summary-color: var(--color); - --accordion-open-summary-color: var(--muted-color); - --card-background-color: #141e26; - --card-border-color: var(--card-background-color); - --card-box-shadow: - 0.0145rem 0.029rem 0.174rem rgba(0, 0, 0, 0.01698), - 0.0335rem 0.067rem 0.402rem rgba(0, 0, 0, 0.024), - 0.0625rem 0.125rem 0.75rem rgba(0, 0, 0, 0.03), - 0.1125rem 0.225rem 1.35rem rgba(0, 0, 0, 0.036), - 0.2085rem 0.417rem 2.502rem rgba(0, 0, 0, 0.04302), - 0.5rem 1rem 6rem rgba(0, 0, 0, 0.06), - 0 0 0 0.0625rem rgba(0, 0, 0, 0.015); - --card-sectionning-background-color: #18232c; - --dropdown-background-color: hsl(205, 30%, 15%); - --dropdown-border-color: #24333e; - --dropdown-box-shadow: var(--card-box-shadow); - --dropdown-color: var(--color); - --dropdown-hover-background-color: rgba(36, 51, 62, 0.75); - --modal-overlay-background-color: rgba(36, 51, 62, 0.8); - --progress-background-color: #24333e; - --progress-color: var(--primary); - --loading-spinner-opacity: 0.5; - --tooltip-background-color: var(--contrast); - --tooltip-color: var(--contrast-inverse); - --icon-checkbox: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E"); - --icon-chevron: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(162, 175, 185)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E"); - --icon-chevron-button: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E"); - --icon-chevron-button-inverse: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(0, 0, 0)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E"); - --icon-close: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(115, 130, 140)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='18' y1='6' x2='6' y2='18'%3E%3C/line%3E%3Cline x1='6' y1='6' x2='18' y2='18'%3E%3C/line%3E%3C/svg%3E"); - --icon-date: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(162, 175, 185)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E"); - --icon-invalid: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(183, 28, 28)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12.01' y2='16'%3E%3C/line%3E%3C/svg%3E"); - --icon-minus: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='5' y1='12' x2='19' y2='12'%3E%3C/line%3E%3C/svg%3E"); - --icon-search: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(162, 175, 185)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E"); - --icon-time: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(162, 175, 185)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cpolyline points='12 6 12 12 16 14'%3E%3C/polyline%3E%3C/svg%3E"); - --icon-valid: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(46, 125, 50)' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E"); - color-scheme: dark; - } -} -[data-theme=dark] { - --background-color: #11191f; - --color: hsl(205, 16%, 77%); - --h1-color: hsl(205, 20%, 94%); - --h2-color: #e1e6eb; - --h3-color: hsl(205, 18%, 86%); - --h4-color: #c8d1d8; - --h5-color: hsl(205, 16%, 77%); - --h6-color: #afbbc4; - --muted-color: hsl(205, 10%, 50%); - --muted-border-color: #1f2d38; - --primary: hsl(195, 85%, 41%); - --primary-hover: hsl(195, 80%, 50%); - --primary-focus: rgba(16, 149, 193, 0.25); - --primary-inverse: #fff; - --secondary: hsl(205, 15%, 41%); - --secondary-hover: hsl(205, 10%, 50%); - --secondary-focus: rgba(115, 130, 140, 0.25); - --secondary-inverse: #fff; - --contrast: hsl(205, 20%, 94%); - --contrast-hover: #fff; - --contrast-focus: rgba(115, 130, 140, 0.25); - --contrast-inverse: #000; - --mark-background-color: #d1c284; - --mark-color: #11191f; - --ins-color: #388e3c; - --del-color: #c62828; - --blockquote-border-color: var(--muted-border-color); - --blockquote-footer-color: var(--muted-color); - --button-box-shadow: 0 0 0 rgba(0, 0, 0, 0); - --button-hover-box-shadow: 0 0 0 rgba(0, 0, 0, 0); - --form-element-background-color: #11191f; - --form-element-border-color: #374956; - --form-element-color: var(--color); - --form-element-placeholder-color: var(--muted-color); - --form-element-active-background-color: var(--form-element-background-color); - --form-element-active-border-color: var(--primary); - --form-element-focus-color: var(--primary-focus); - --form-element-disabled-background-color: hsl(205, 25%, 23%); - --form-element-disabled-border-color: hsl(205, 20%, 32%); - --form-element-disabled-opacity: 0.5; - --form-element-invalid-border-color: #b71c1c; - --form-element-invalid-active-border-color: #c62828; - --form-element-invalid-focus-color: rgba(198, 40, 40, 0.25); - --form-element-valid-border-color: #2e7d32; - --form-element-valid-active-border-color: #388e3c; - --form-element-valid-focus-color: rgba(56, 142, 60, 0.25); - --switch-background-color: #374956; - --switch-color: var(--primary-inverse); - --switch-checked-background-color: var(--primary); - --range-border-color: #24333e; - --range-active-border-color: hsl(205, 25%, 23%); - --range-thumb-border-color: var(--background-color); - --range-thumb-color: var(--secondary); - --range-thumb-hover-color: var(--secondary-hover); - --range-thumb-active-color: var(--primary); - --table-border-color: var(--muted-border-color); - --table-row-stripped-background-color: rgba(115, 130, 140, 0.05); - --code-background-color: #18232c; - --code-color: var(--muted-color); - --code-kbd-background-color: var(--contrast); - --code-kbd-color: var(--contrast-inverse); - --code-tag-color: hsl(330, 30%, 50%); - --code-property-color: hsl(185, 30%, 50%); - --code-value-color: hsl(40, 10%, 50%); - --code-comment-color: #4d606d; - --accordion-border-color: var(--muted-border-color); - --accordion-active-summary-color: var(--primary); - --accordion-close-summary-color: var(--color); - --accordion-open-summary-color: var(--muted-color); - --card-background-color: #141e26; - --card-border-color: var(--card-background-color); - --card-box-shadow: - 0.0145rem 0.029rem 0.174rem rgba(0, 0, 0, 0.01698), - 0.0335rem 0.067rem 0.402rem rgba(0, 0, 0, 0.024), - 0.0625rem 0.125rem 0.75rem rgba(0, 0, 0, 0.03), - 0.1125rem 0.225rem 1.35rem rgba(0, 0, 0, 0.036), - 0.2085rem 0.417rem 2.502rem rgba(0, 0, 0, 0.04302), - 0.5rem 1rem 6rem rgba(0, 0, 0, 0.06), - 0 0 0 0.0625rem rgba(0, 0, 0, 0.015); - --card-sectionning-background-color: #18232c; - --dropdown-background-color: hsl(205, 30%, 15%); - --dropdown-border-color: #24333e; - --dropdown-box-shadow: var(--card-box-shadow); - --dropdown-color: var(--color); - --dropdown-hover-background-color: rgba(36, 51, 62, 0.75); - --modal-overlay-background-color: rgba(36, 51, 62, 0.8); - --progress-background-color: #24333e; - --progress-color: var(--primary); - --loading-spinner-opacity: 0.5; - --tooltip-background-color: var(--contrast); - --tooltip-color: var(--contrast-inverse); - --icon-checkbox: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E"); - --icon-chevron: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(162, 175, 185)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E"); - --icon-chevron-button: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E"); - --icon-chevron-button-inverse: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(0, 0, 0)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E"); - --icon-close: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(115, 130, 140)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='18' y1='6' x2='6' y2='18'%3E%3C/line%3E%3Cline x1='6' y1='6' x2='18' y2='18'%3E%3C/line%3E%3C/svg%3E"); - --icon-date: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(162, 175, 185)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E"); - --icon-invalid: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(183, 28, 28)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12.01' y2='16'%3E%3C/line%3E%3C/svg%3E"); - --icon-minus: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(255, 255, 255)' stroke-width='4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='5' y1='12' x2='19' y2='12'%3E%3C/line%3E%3C/svg%3E"); - --icon-search: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(162, 175, 185)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E"); - --icon-time: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(162, 175, 185)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cpolyline points='12 6 12 12 16 14'%3E%3C/polyline%3E%3C/svg%3E"); - --icon-valid: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='rgb(46, 125, 50)' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E"); - color-scheme: dark; -} - -progress, -[type=checkbox], -[type=radio], -[type=range] { - accent-color: var(--primary); -} - -/*# sourceMappingURL=default.css.map */ \ No newline at end of file diff --git a/htdocs/webportal/public/img/banner.svg b/htdocs/webportal/public/img/banner.svg new file mode 100644 index 00000000000..64fd2954237 --- /dev/null +++ b/htdocs/webportal/public/img/banner.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/htdocs/webportal/public/tpl/dolibarr_logo.svg b/htdocs/webportal/public/img/dolibarr_logo.svg similarity index 100% rename from htdocs/webportal/public/tpl/dolibarr_logo.svg rename to htdocs/webportal/public/img/dolibarr_logo.svg diff --git a/htdocs/webportal/public/includes/jquery/plugins/jnotify/jquery.jnotify.css b/htdocs/webportal/public/includes/jquery/plugins/jnotify/jquery.jnotify.css index b3547afbd2a..6f13ba3de8f 100644 --- a/htdocs/webportal/public/includes/jquery/plugins/jnotify/jquery.jnotify.css +++ b/htdocs/webportal/public/includes/jquery/plugins/jnotify/jquery.jnotify.css @@ -1,8 +1,9 @@ .jnotify-container { position: fixed; top: 0; - left: 0; - width: 100%; + right: 0; + width: min(100%, 640px); + max-height: min(0.9vh, 480px) ; z-index: 100000; } @@ -34,7 +35,7 @@ padding: 0 5px; font: bold 1.4em Arial,Helvetica,sans-serif; line-height: 1em; - color: #567b1b; + color: #497900; text-decoration: none; z-index: 3; cursor: pointer; @@ -45,8 +46,8 @@ z-index: 2; padding: 20px; text-align: center; - color: #567b1b; - font: bold 1.4em Arial,Helvetica,sans-serif; + color: #649a00; + font: bold 1em Arial,Helvetica,sans-serif; line-height: 1.2em; } @@ -56,12 +57,13 @@ /* notification type == "error" */ .jnotify-container .jnotify-notification-error .jnotify-background { - background-color: #d79eac; + background-color: rgba(192, 0, 0, 0.8); + backdrop-filter: blur(5px); } .jnotify-container .jnotify-notification-error .jnotify-close, .jnotify-container .jnotify-notification-error .jnotify-message { - color: #a72947 !important; + color: #ffffff !important; } /* notification type == "warning" */ diff --git a/htdocs/webportal/public/lib/webportal.lib.php b/htdocs/webportal/public/lib/webportal.lib.php index 2c67c129ef8..60eba7f81a8 100644 --- a/htdocs/webportal/public/lib/webportal.lib.php +++ b/htdocs/webportal/public/lib/webportal.lib.php @@ -26,6 +26,7 @@ function getNav($Tmenu) /** * Get nav item * + * TODO : Dropdown is actually not css implemented * @param array $item Item of menu * @param int $deep Level of deep * @return string @@ -47,6 +48,11 @@ function getNavItem($item, $deep = 0) $item['active'] = true; } + if(!isset($item['class'])){ + $item['class'] = '--item-' . preg_replace( '/[^a-z0-9 ]/i','-', $item['id']); + } + + if (!empty($item['overrride'])) { $menu .= $item['overrride']; } elseif (!empty($item['children'])) { @@ -70,7 +76,7 @@ function getNavItem($item, $deep = 0) $menuChildren .= getNavItem($child, $deep + 1); $menuChildren .= "\n\r" . '' . "\n\r"; } else { - $menuChildren .= ''; + $menuChildren .= ''; } } @@ -79,12 +85,12 @@ function getNavItem($item, $deep = 0) $active = 'active'; } - $menu .= ''; } else { - $menu .= '
  • ' . $item['name'] . '
  • '; + $menu .= '
  • ' . $item['name'] . '
  • '; } return $menu; diff --git a/htdocs/webportal/public/tpl/footer.tpl.php b/htdocs/webportal/public/tpl/footer.tpl.php index 7604e0d8076..5774cb0753e 100644 --- a/htdocs/webportal/public/tpl/footer.tpl.php +++ b/htdocs/webportal/public/tpl/footer.tpl.php @@ -94,7 +94,9 @@ if ($jsOut) { $js .= ''; print $js; } + +print ''; ?> - + diff --git a/htdocs/webportal/public/tpl/header.tpl.php b/htdocs/webportal/public/tpl/header.tpl.php index ece64247e68..d6919d22592 100644 --- a/htdocs/webportal/public/tpl/header.tpl.php +++ b/htdocs/webportal/public/tpl/header.tpl.php @@ -39,4 +39,7 @@ global $langs; print ''; ?> - + diff --git a/htdocs/webportal/public/tpl/header_login.tpl.php b/htdocs/webportal/public/tpl/header_login.tpl.php index 11a869ab077..5560ab9dadd 100644 --- a/htdocs/webportal/public/tpl/header_login.tpl.php +++ b/htdocs/webportal/public/tpl/header_login.tpl.php @@ -27,16 +27,7 @@ global $langs; rootUrl . 'includes/jquery/plugins/jnotify/jquery.jnotify.css">'; - ?> - - rootUrl . 'includes/jquery/js/jquery.js">'; // JNotify diff --git a/htdocs/webportal/public/tpl/hero-header-banner.tpl.php b/htdocs/webportal/public/tpl/hero-header-banner.tpl.php new file mode 100644 index 00000000000..a4c694a106b --- /dev/null +++ b/htdocs/webportal/public/tpl/hero-header-banner.tpl.php @@ -0,0 +1,6 @@ +
    theme->bannerUseDarkTheme) ? ' data-theme="dark" ': '' ?> > +
    +

    title; ?>

    +
    desc; ?>
    +
    +
    \ No newline at end of file diff --git a/htdocs/webportal/public/tpl/home.tpl.php b/htdocs/webportal/public/tpl/home.tpl.php index 5dd4354dd80..a0c201ca6dc 100644 --- a/htdocs/webportal/public/tpl/home.tpl.php +++ b/htdocs/webportal/public/tpl/home.tpl.php @@ -6,31 +6,29 @@ if (empty($context) || !is_object($context)) { } global $conf, $langs; + ?> +
    -
    -
    + -
    diff --git a/htdocs/webportal/public/tpl/login.tpl.php b/htdocs/webportal/public/tpl/login.tpl.php index 1f5195d7c21..728040c21d4 100644 --- a/htdocs/webportal/public/tpl/login.tpl.php +++ b/htdocs/webportal/public/tpl/login.tpl.php @@ -4,6 +4,10 @@ if (empty($context) || !is_object($context)) { print "Error, template page can't be called as URL"; exit; } + + + + ?>