. **/ /** * Class for rendering html page head part. */ class CHtmlPageHeader { /** * Page title. */ protected string $title; /** * Language attribute. */ protected string $lang; /** * Theme attribute. */ protected string $theme = ZBX_DEFAULT_THEME; /** * CSS files list. */ protected array $css_files = []; /** * Inline CSS styles. */ protected array $styles = []; /** * JavaScripts to render before JS files. */ protected array $js = []; /** * JS files list. */ protected array $js_files = []; public function __construct(string $title, string $lang) { $this->title = $title; $this->lang = $lang; } public function setTheme(string $theme): self { $this->theme = $theme; return $this; } public function getTheme(): string { return $this->theme; } /** * Add path to css file to render in page head. */ public function addCssFile(string $css_file): self { $this->css_files[$css_file] = $css_file; return $this; } /** * Add css style to render in page head. */ public function addStyle(string $style): self { $this->styles[] = $style; return $this; } /** * Add JavaScript to render in page head before js file includes are rendered. */ public function addJavaScript(string $js): self { $this->js[] = $js; return $this; } /** * Add path to js file to render in page head. */ public function addJsFile(string $js_file): self { $this->js_files[$js_file] = $js_file; return $this; } public function addJsTranslationStrings(array $translations_strings): self { foreach ($translations_strings as $orig_string => $string) { $this->addJavaScript('locale[\''.$orig_string.'\'] = '.json_encode($string, JSON_THROW_ON_ERROR).';'); } return $this; } /** * Show page head html. */ public function show(): CHtmlPageHeader { echo ''; echo (new CTag('html')) ->setAttribute('lang', $this->lang) ->setAttribute('theme', $this->theme) ->setAttribute('color-scheme', APP::getColorScheme($this->theme)); echo << HTML; if ($this->title !== '') { echo (new CTag('title', true))->addItem($this->title); } echo << HTML; foreach ($this->css_files as $path) { if (parse_url($path, PHP_URL_QUERY) === null) { $path .= '?'.(int) filemtime($path); } echo (new CTag('link')) ->setAttribute('rel', 'stylesheet') ->setAttribute('type', 'text/css') ->setAttribute('href', $path); } if ($this->styles) { echo ''; } if ($this->js) { echo ''; } foreach ($this->js_files as $path) { if (parse_url($path, PHP_URL_QUERY) === null) { $path .= '?'.(int) filemtime($path); } echo (new CTag('script', true))->setAttribute('src', $path); } echo ''."\n"; return $this; } }