xref: /template/strap/ComboStrap/HistoricalBreadcrumbMenuItem.php (revision 37748cd8654635afbeca80942126742f0f4cc346)
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