35 public $view = array();
42 public $menu = array();
49 public $summary = array();
59 public $baseUrl =
'admin/tools/ui';
86 $hookmanager->initHooks(array(
'uidocumentation'));
89 $this->menu[
'BackToDolibarr'] = array(
91 'icon' =>
'fas fa-arrow-left',
96 $this->menu[
'DocumentationHome'] = array(
98 'icon' =>
'fas fa-book',
103 $this->menu[
'Components'] = array(
104 'url' =>
dol_buildpath($this->baseUrl.
'/components/index.php', 1),
105 'icon' =>
'fas fa-th-large',
108 'url' =>
dol_buildpath($this->baseUrl.
'/components/badges.php', 1),
109 'icon' =>
'fas fa-certificate',
110 'submenu' => array(),
112 'DocBasicUsage' =>
'#badgesection-basicusage',
113 'DocBadgeContextualVariations' =>
'#badgesection-contextvariations',
114 'DocBadgeDefaultStatus' =>
'#badgesection-defaultstatus',
115 'DocBadgePillBadges' =>
'#badgesection-pill',
116 'DocBadgeDotBadges' =>
'#badgesection-dot',
117 'DocBadgeLinks' =>
'#badgesection-links',
118 'DocBadgeHelper' =>
'#badgesection-dolgetbadge'
122 'url' =>
dol_buildpath($this->baseUrl.
'/components/buttons.php', 1),
123 'icon' =>
'fas fa-mouse',
124 'submenu' => array(),
126 'DocBasicUsage' =>
'#buttonsection-basicusage',
127 'DocButtonModal' =>
'#buttonsection-modals',
128 'DocButtonSubmenu' =>
'#buttonsection-submenu',
132 'url' =>
dol_buildpath($this->baseUrl.
'/components/icons.php', 1),
133 'icon' =>
'far fa-flag',
134 'submenu' => array(),
136 'DocIconsList' =>
'#img-picto-section-list',
137 'DocIconsFontAwesomeList' =>
'#icon-section-list',
141 'url' =>
dol_buildpath($this->baseUrl.
'/components/progress-bars.php', 1),
142 'icon' =>
'fas fa-battery-half',
143 'submenu' => array(),
145 'DocBasicUsage' =>
'#progresse-section-basic-usage',
146 'DocColorVariants' =>
'#progress-section-color',
147 'DocStripedVariants' =>
'#progresse-section-stripped',
150 'Event Message' => array(
151 'url' =>
dol_buildpath($this->baseUrl.
'/components/event-message.php', 1),
152 'icon' =>
'fas fa-comments',
153 'submenu' => array(),
155 'DocBasicUsage' =>
'#seteventmessagesection-basicusage',
156 'DocSetEventMessageContextualVariations' =>
'#seteventmessagesection-contextvariations',
160 'url' =>
dol_buildpath($this->baseUrl.
'/components/inputs.php', 1),
161 'icon' =>
'fas fa-comments',
162 'submenu' => array(),
164 'DocBasicUsage' =>
'#setinputssection-basicusage',
165 'DocHelperFunctionsInputUsage' =>
'#setinputssection-helperfunctions',
166 'DocHelperFunctionsGetSearchFilterToolInput' =>
'#setinputssection-getSearchFilterToolInput',
173 $this->menu[
'Content'] = array(
174 'url' =>
dol_buildpath($this->baseUrl.
'/content/index.php', 1),
175 'icon' =>
'far fa-file-alt',
178 'url' =>
dol_buildpath(
'admin/tools/ui/content/titles.php', 1),
179 'icon' =>
'fas fa-heading',
180 'submenu' => array(),
182 'DocBasicUsage' =>
'#titlesection-basicusage',
183 'DocTitleWithFilters' =>
'#titlesection-withfilters',
187 'url' =>
dol_buildpath(
'admin/tools/ui/content/tables.php', 1),
188 'icon' =>
'fas fa-table',
189 'submenu' => array(),
191 'DocBasicUsage' =>
'#tablesection-basicusage',
192 'DocTableWithFilters' =>
'#tablesection-withfilters',
193 'DocTableBeforeFilters' =>
'#tablesection-beforefilters',
194 'DocTableCSSClass' =>
'#tablesection-cssclasses',
198 'TableRowIntuitiveSelect' => array(
199 'url' =>
dol_buildpath($this->baseUrl.
'/content/intuitive-table-row-select.php', 1),
200 'icon' =>
'far fa-check-square',
201 'submenu' => array(),
202 'summary' => array(),
205 'FreezeTooltip' => array(
206 'url' =>
dol_buildpath($this->baseUrl.
'/content/freeze-tooltip.php', 1),
207 'icon' =>
'far fa-comment',
208 'submenu' => array(),
209 'summary' => array(),
215 $this->menu[
'Resources'] = array(
216 'url' =>
dol_buildpath($this->baseUrl.
'/resources/index.php', 1),
217 'icon' =>
'fas fa-wrench',
219 'Contributing' => array(
220 'url' =>
dol_buildpath($this->baseUrl.
'/resources/contributing.php', 1),
221 'icon' =>
'fas fa-code',
222 'submenu' => array(),
224 'DocContributeStep1' =>
'#contributesection-step1',
225 'DocContributeStep2' =>
'#contributesection-step2',
226 'DocContributeStep3' =>
'#contributesection-step3',
235 $this->menu[
'ExperimentalUx'] = array(
236 'url' =>
dol_buildpath($this->baseUrl.
'/experimental/index.php', 1),
237 'icon' =>
'fas fa-flask',
239 'ExperimentalUxIntroductionMenu' => array(
240 'url' =>
dol_buildpath($this->baseUrl.
'/experimental/index.php', 1),
241 'icon' =>
'fas fa-flask',
242 'submenu' => array(),
245 'ExperimentalUxIntroductionTitle' =>
'#experimental-ux-introduction',
246 'ExperimentalUxContributionTitle' =>
'#experimental-ux-contribution',
249 'ExperimentalUxInputAjaxFeedback' => array(
250 'url' =>
dol_buildpath($this->baseUrl.
'/experimental/experiments/input-feedback/index.php', 1),
251 'icon' =>
'fas fa-flask',
252 'submenu' => array(),
253 'summary' => array(),
255 'UxDolibarrContext' => array(
256 'url' =>
dol_buildpath($this->baseUrl.
'/experimental/experiments/dolibarr-context/index.php', 1),
257 'icon' =>
'fas fa-flask',
259 'UxDolibarrContextHowItWork' => array(
260 'url' =>
dol_buildpath($this->baseUrl.
'/experimental/experiments/dolibarr-context/index.php', 1),
261 'icon' =>
'fas fa-flask',
262 'submenu' => array(),
264 'Introduction' =>
'#titlesection-basicusage',
265 'ConsoleHelp' =>
'#titlesection-console-help',
266 'JSDolibarrhooks' =>
'#titlesection-hooks',
267 'JSDolibarrhooksReadyVsInit' =>
'#titlesection-event-init-vs-ready',
268 'JSDolibarrAwaitHooks' =>
'#titlesection-await-hooks',
269 'ExampleOfCreatingNewContextTool' =>
'#titlesection-create-tool-example',
270 'SetEventMessageTool' =>
'#titlesection-tool-seteventmessage',
271 'SetAndUseContextVars' =>
'#titlesection-contextvars',
274 'UxDolibarrContextLangsTool' => array(
275 'url' =>
dol_buildpath($this->baseUrl.
'/experimental/experiments/dolibarr-context/langs-tool.php', 1),
276 'icon' =>
'fas fa-flask',
277 'submenu' => array(),
278 'summary' => array(),
281 'summary' => array(),
287 'baseUrl' => $this->baseUrl,
291 $reshook = $hookmanager->executeHooks(
'setMenu', $parameters, $this, $action);
306 public function docHeader($title =
'', $arrayofjs = [], $arrayofcss = [], $hidenavmenu =
'')
309 $title = (!empty($title)) ?
dol_escape_htmltag($title) : $langs->trans(
'Documentation');
311 $arrayofcss[] =
'admin/tools/ui/css/documentation.css';
313 top_htmlhead(
'', $title, 0, 0, $arrayofjs, $arrayofcss);
315 print
'<body class="dolibarr-doc'.($hidenavmenu ?
"-bis" :
"").
'">';
327 print
'<div id="documentation-scrollwrapper">';
328 print
'<div id="documentation-scroll"></div>';
332 print
'<script src="'.dol_buildpath(
'admin/tools/ui/js/documentation.js', 1).
'"></script>';
333 print
'<script src="'.DOL_URL_ROOT.
'/core/js/lib_foot.js.php?lang='.$langs->defaultlang.
'"></script>';
348 print
'<div class="doc-sidebar">';
351 print
'<div class="sidebar-logo">';
352 if (is_readable(DOL_DOCUMENT_ROOT.
'/theme/dolibarr_logo.svg')) {
353 $urllogo = DOL_URL_ROOT.
'/theme/dolibarr_logo.svg';
354 print
'<img src="'.$urllogo.
'" />';
360 if (!empty($this->menu)) {
381 foreach ($menu as $key => $item) {
382 $levelclass = (!empty($item[
'submenu'])) ?
'li-withsubmenu' :
'';
383 $levelclass .= (in_array($key, $this->view)) ?
' active' :
'';
384 $levelclass .= ($key ==
'BackToDolibarr') ?
' li-withseparator' :
'';
386 print
'<li class="'.trim($levelclass).
' level-'.$level.
'">';
387 print
'<a href="'.$item[
'url'].
'" class="'.((!empty($item[
'submenu'])) ?
'link-withsubmenu' :
'').
'">';
388 print ((!empty($item[
'icon'])) ?
'<i class="menu-icon '.$item[
'icon'].
' pictofixedwidth" aria-hidden="true"></i>' :
'');
389 print
'<span class="label">'.$langs->transnoentities($key).
'</span>';
390 print ((!empty($item[
'submenu'])) ?
'<i class="submenu-toggle fas fa-chevron-right" aria-hidden="true"></i>' :
'');
392 if (!empty($item[
'submenu'])) {
408 print
'<nav class="doc-breadcrumbs">';
410 print
'<li class="breadcrumb-item"><a href="'.$this->menu[
'DocumentationHome'][
'url'].
'"><i class="'.$this->menu[
'DocumentationHome'][
'icon'].
'" aria-hidden="true"></i></a></li>';
411 if (!empty($this->view)) {
412 $nb_entries = count($this->view);
415 $menu_entry = $this->menu;
416 foreach ($this->view as $page) {
418 if ($i < $nb_entries && isset($menu_entry[$page])) {
419 print
'<li class="breadcrumb-item"><a href="'.$menu_entry[$page][
'url'].
'">'.$langs->transnoentities($page).
'</a></li>';
420 $menu_entry = $menu_entry[$page][
'submenu'];
422 print
'<li class="breadcrumb-item">'.$langs->transnoentities($page).
'</li>';
426 print
'<li class="breadcrumb-item">'.$langs->trans(
'Documentation').
'</li>';
439 public function showSummary($showsubmenu = 1, $showsubmenu_summary = 1)
443 if (!empty($this->view)) {
445 foreach ($this->view as $view) {
448 $menu_entry = $this->menu[$view];
450 $menu_entry = $menu_entry[
'submenu'][$view];
455 if (!empty($menu_entry[
'summary']) || (!empty($menu_entry[
'submenu']) && $showsubmenu)) {
456 print
'<div class="summary-wrapper">';
472 public function displaySummary($menu, $level = 0, $showsubmenu = 1, $showsubmenu_summary = 1)
477 print
'<ul class="documentation-summary level-'.$level.
'"">';
479 if (!empty($menu[
'summary'])) {
480 foreach ($menu[
'summary'] as $summary_label => $summary_link) {
494 print
'<li><a href="'.$summary_link.
'">'.$langs->trans($summary_label).
'</a></li>';
498 if ($showsubmenu && !empty($menu[
'submenu'])) {
499 foreach ($menu[
'submenu'] as $key => $item) {
500 print
'<li class="summary-title ">';
502 if (!empty($item[
'url'])) {
503 print
'<h3 class="level-'.$level.
'"><a href="'.
dolBuildUrl($item[
'url']).
'" >'.$langs->trans($key).
'</a></h3>';
505 print
'<h3 class="level-'.$level.
'">'.$langs->trans($key).
'</h3>';
508 if ($showsubmenu_summary) {
524 public function showCode($lines = array(), $option =
'html')
526 require_once DOL_DOCUMENT_ROOT .
'/core/class/doleditor.class.php';
527 print
'<div class="documentation-code">';
529 if (isset($lines[0])) {
530 if ($option ===
'html' && strpos(strtolower($lines[0]),
'<!doctype') ===
false) {
531 array_unshift($lines,
'<!DOCTYPE html>',
'');
535 $content = implode(
"\n", $lines) .
"\n";
536 $doleditor =
new DolEditor(md5($content), $content,
'', 0,
'Basic',
'In',
true,
false,
'ace', 0,
'99%', 1);
537 print $doleditor->Create(1,
'',
false,
'', $option);
Class to manage UI documentation.
showBreadcrumb()
Output breadcrumb.
displayMenu($menu, $level=0)
Recursive function to set Menu.
showSummary($showsubmenu=1, $showsubmenu_summary=1)
Output summary.
docFooter()
Output close body + html.
showCode($lines=array(), $option='html')
Output a View Code area.
docHeader($title='', $arrayofjs=[], $arrayofcss=[], $hidenavmenu='')
Output header + body.
showSidebar()
Output sidebar.
__construct(DoliDB $db)
Constructor.
setMenu()
Set Documentation Menu.
displaySummary($menu, $level=0, $showsubmenu=1, $showsubmenu_summary=1)
Recursive function for Automatic Summary.
Class to manage a WYSIWYG editor.
Class to manage Dolibarr database access.
dolBuildUrl($url, $params=[], $addtoken=false)
Return path of url.
dol_htmloutput_events($disabledoutputofmessages=0)
Print formatted messages to output (Used to show messages on html output).
dol_buildpath($path, $type=0, $returnemptyifnotfound=0)
Return path of url or filesystem.
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0, $cleanalsojavascript=0)
Returns text escaped for inclusion in HTML alt or title or value tags, or into values of HTML input f...
top_htmlhead($head, $title='', $disablejs=0, $disablehead=0, $arrayofjs=array(), $arrayofcss=array(), $disableforlogin=0, $disablenofollow=0, $disablenoindex=0)
Output html header of a page.