1*37748cd8SNickeau<?php 2*37748cd8SNickeau/** 3*37748cd8SNickeau * Copyright (c) 2021. ComboStrap, Inc. and its affiliates. All Rights Reserved. 4*37748cd8SNickeau * 5*37748cd8SNickeau * This source code is licensed under the GPL license found in the 6*37748cd8SNickeau * COPYING file in the root directory of this source tree. 7*37748cd8SNickeau * 8*37748cd8SNickeau * @license GPL 3 (https://www.gnu.org/licenses/gpl-3.0.en.html) 9*37748cd8SNickeau * @author ComboStrap <support@combostrap.com> 10*37748cd8SNickeau * 11*37748cd8SNickeau */ 12*37748cd8SNickeau 13*37748cd8SNickeaunamespace ComboStrap; 14*37748cd8SNickeau 15*37748cd8SNickeau 16*37748cd8SNickeauuse dokuwiki\Menu\Item\AbstractItem; 17*37748cd8SNickeau 18*37748cd8SNickeau/** 19*37748cd8SNickeau * Class MenuItem 20*37748cd8SNickeau * * 21*37748cd8SNickeau * @package ComboStrap 22*37748cd8SNickeau * 23*37748cd8SNickeau * To be able to debug, disable the trigger data attribute 24*37748cd8SNickeau * The popover will stay on the page 25*37748cd8SNickeau */ 26*37748cd8SNickeauclass HistoricalBreadcrumbMenuItem extends AbstractItem 27*37748cd8SNickeau{ 28*37748cd8SNickeau 29*37748cd8SNickeau 30*37748cd8SNickeau const RECENT_PAGES_VISITED = "Recent Pages Visited"; 31*37748cd8SNickeau 32*37748cd8SNickeau /** 33*37748cd8SNickeau * This unique name should not be in the {@link \action_plugin_combo_historicalbreadcrumb} 34*37748cd8SNickeau * to avoid circular reference 35*37748cd8SNickeau */ 36*37748cd8SNickeau const HISTORICAL_BREADCRUMB_NAME = "historical-breadcrumb"; 37*37748cd8SNickeau 38*37748cd8SNickeau 39*37748cd8SNickeau /** 40*37748cd8SNickeau * 41*37748cd8SNickeau * @return string 42*37748cd8SNickeau */ 43*37748cd8SNickeau public function getLabel() 44*37748cd8SNickeau { 45*37748cd8SNickeau return self::RECENT_PAGES_VISITED; 46*37748cd8SNickeau } 47*37748cd8SNickeau 48*37748cd8SNickeau public function getLinkAttributes($classprefix = 'menuitem ') 49*37748cd8SNickeau { 50*37748cd8SNickeau 51*37748cd8SNickeau $linkAttributes = parent::getLinkAttributes($classprefix); 52*37748cd8SNickeau $linkAttributes['href'] = "#"; 53*37748cd8SNickeau $dataAttributeNamespace = Bootstrap::getDataNamespace(); 54*37748cd8SNickeau $linkAttributes["data{$dataAttributeNamespace}-toggle"] = "popover"; 55*37748cd8SNickeau $linkAttributes["data{$dataAttributeNamespace}-html"] = "true"; 56*37748cd8SNickeau global $lang; 57*37748cd8SNickeau $linkAttributes["data{$dataAttributeNamespace}-title"] = $lang['breadcrumb']; 58*37748cd8SNickeau 59*37748cd8SNickeau 60*37748cd8SNickeau $pages = array_reverse(breadcrumbs()); 61*37748cd8SNickeau 62*37748cd8SNickeau /** 63*37748cd8SNickeau * All page should be shown, 64*37748cd8SNickeau * also the actual 65*37748cd8SNickeau * because when the user is going 66*37748cd8SNickeau * in admin mode, it's an easy way to get back 67*37748cd8SNickeau */ 68*37748cd8SNickeau $actualPageId = array_keys($pages)[0]; 69*37748cd8SNickeau $actualPageName = array_shift($pages); 70*37748cd8SNickeau $html = $this->createLink($actualPageId,$actualPageName, self::HISTORICAL_BREADCRUMB_NAME ."-home"); 71*37748cd8SNickeau 72*37748cd8SNickeau $html .= '<ol>' . PHP_EOL; 73*37748cd8SNickeau foreach ($pages as $id => $name) { 74*37748cd8SNickeau 75*37748cd8SNickeau $html .= '<li>'; 76*37748cd8SNickeau $html .= $this->createLink($id,$name); 77*37748cd8SNickeau $html .= '</li>' . PHP_EOL; 78*37748cd8SNickeau 79*37748cd8SNickeau } 80*37748cd8SNickeau $html .= '</ol>' . PHP_EOL; 81*37748cd8SNickeau $html .= '</nav>' . PHP_EOL; 82*37748cd8SNickeau $linkAttributes["data{$dataAttributeNamespace}-content"] = $html; 83*37748cd8SNickeau 84*37748cd8SNickeau // Dismiss on next click 85*37748cd8SNickeau // To debug, just comment this line 86*37748cd8SNickeau $linkAttributes["data{$dataAttributeNamespace}-trigger"] = "focus"; 87*37748cd8SNickeau 88*37748cd8SNickeau // See for the tabindex 89*37748cd8SNickeau // https://getbootstrap.com/docs/5.1/components/popovers/#dismiss-on-next-click 90*37748cd8SNickeau $linkAttributes['tabindex'] = "0"; 91*37748cd8SNickeau 92*37748cd8SNickeau $linkAttributes["data{$dataAttributeNamespace}custom-class"] = "historical-breadcrumb"; 93*37748cd8SNickeau return $linkAttributes; 94*37748cd8SNickeau } 95*37748cd8SNickeau 96*37748cd8SNickeau public function getTitle() 97*37748cd8SNickeau { 98*37748cd8SNickeau /** 99*37748cd8SNickeau * The title (unfortunately) is deleted from the anchor 100*37748cd8SNickeau * and is used as header in the popover 101*37748cd8SNickeau */ 102*37748cd8SNickeau return self::RECENT_PAGES_VISITED; 103*37748cd8SNickeau } 104*37748cd8SNickeau 105*37748cd8SNickeau public function getSvg() 106*37748cd8SNickeau { 107*37748cd8SNickeau /** @var string icon file */ 108*37748cd8SNickeau return Resources::getImagesDirectory() . '/history.svg'; 109*37748cd8SNickeau } 110*37748cd8SNickeau 111*37748cd8SNickeau /** 112*37748cd8SNickeau * @param $id 113*37748cd8SNickeau * @param $name 114*37748cd8SNickeau * @param null $class 115*37748cd8SNickeau * @return string 116*37748cd8SNickeau */ 117*37748cd8SNickeau public function createLink($id,$name,$class=null) 118*37748cd8SNickeau { 119*37748cd8SNickeau $page = Page::createPageFromId($id); 120*37748cd8SNickeau if ($name == "start") { 121*37748cd8SNickeau $name = "Home Page"; 122*37748cd8SNickeau } else { 123*37748cd8SNickeau $name = $page->getTitleNotEmpty(); 124*37748cd8SNickeau } 125*37748cd8SNickeau $tagAttributes = null; 126*37748cd8SNickeau if($class!=null){ 127*37748cd8SNickeau $tagAttributes = TagAttributes::createEmpty(); 128*37748cd8SNickeau $tagAttributes->addClassName($class); 129*37748cd8SNickeau } 130*37748cd8SNickeau $link = LinkUtility::createFromPageId($id,$tagAttributes); 131*37748cd8SNickeau 132*37748cd8SNickeau return $link->renderOpenTag() . $name . $link->renderClosingTag(); 133*37748cd8SNickeau } 134*37748cd8SNickeau 135*37748cd8SNickeau 136*37748cd8SNickeau} 137