id = $data['id']; } if (isset($data['selected'])) { $this->setSelected($data['selected']); } if (isset($data['disabled'])) { $this->setDisabled($data['disabled']); } parent::__construct(); $this->setId(zbx_formatDomId($this->id)); $this->addClass(ZBX_STYLE_TABLE_FORMS_CONTAINER); } public function setSelected($selected) { if ($selected == 0) { CCookieHelper::unset('tab'); } $this->selectedTab = $selected; return $this; } /** * Set javascript on tab change event. * * @param string $value Script body. * * @return CTabView */ public function onTabChange($value) { $this->tab_change_js = $value; return $this; } /** * Disable tabs * * @param array $disabled disabled tabs IDs (first tab - 0, second - 1...) */ public function setDisabled($disabled) { $this->disabledTabs = $disabled; return $this; } public function addTab($id, $header, $body, $indicator_type = false) { $this->headers[$id] = $header; $this->tabs[$id] = new CDiv($body); $this->tabs[$id]->setId(zbx_formatDomId($id)); if ($indicator_type) { $this->indicators[$id] = $indicator_type; } return $this; } public function setFooter($footer) { $this->footer = $footer; return $this; } public function toString($destroy = true) { // No header if we have only one Tab if (count($this->tabs) == 1) { $tab = reset($this->tabs); $this->addItem($tab); } else { $visible_tab = CCookieHelper::has('tab') ? (int) CCookieHelper::get('tab') : (int) $this->selectedTab; foreach (array_values($this->tabs) as $index => $tab) { if ($visible_tab == $index) { $tab->setAttribute('aria-hidden', 'false'); } else { $tab->addStyle('display: none'); $tab->setAttribute('aria-hidden', 'true'); } } $headersList = (new CList()) ->addClass('ui-tabs-nav') ->addClass(ZBX_STYLE_TABS_NAV); foreach ($this->headers as $id => $header) { $tabLink = (new CLink($header, '#'.$id)) ->setId('tab_'.$id); if (array_key_exists($id, $this->indicators)) { $tabLink->setAttribute('js-indicator', $this->indicators[$id]); } $headersList->addItem($tabLink); } $this->addItem($headersList); $this->addItem($this->tabs); zbx_add_post_js($this->makeJavascript()); zbx_add_post_js('try { new TabIndicators('.json_encode($this->id).'); } catch(e) { }'); } $this->addItem($this->footer); return parent::toString($destroy); } public function makeJavascript() { $tab_name = ':tab.'.$this->id; $create_event = ''; if ($this->selectedTab !== null) { $create_event = 'create: function() {'. 'sessionStorage.setItem(ZBX_SESSION_NAME + "'.$tab_name.'", '.json_encode($this->selectedTab).');'. '},'; $active_tab = 'active: '.json_encode($this->selectedTab).','; } else { $active_tab = 'active: function() {'. 'return sessionStorage.getItem(ZBX_SESSION_NAME + "'.$tab_name.'") || 0;'. '}(),'; } $disabled_tabs = ($this->disabledTabs === null) ? '' : 'disabled: '.json_encode($this->disabledTabs).','; return 'jQuery("#'.$this->id.'") .tabs({'. $create_event. $disabled_tabs. $active_tab. 'activate: function(event, ui) {'. 'sessionStorage.setItem(ZBX_SESSION_NAME + "'.$tab_name.'", ui.newTab.index().toString());'. 'jQuery.cookie("tab", ui.newTab.index().toString());'. $this->tab_change_js. '}'. '})'. // Prevent changing the cookie value in a different tab. '.parent().on("submit", function() {'. 'jQuery.cookie("tab", sessionStorage.getItem(ZBX_SESSION_NAME + "'.$tab_name.'") || 0);'. '});'; } }