36 public $view = array();
43 public $menu = array();
50 public $summary = array();
60 public $baseUrl =
'admin/tools/ui';
87 $hookmanager->initHooks(array(
'uidocumentation'));
90 $this->menu[
'BackToDolibarr'] = array(
92 'icon' =>
'fas fa-arrow-left',
97 $this->menu[
'DocumentationHome'] = array(
99 'icon' =>
'fas fa-book',
100 'submenu' => array(),
104 $this->menu[
'Components'] = array(
105 'url' =>
dol_buildpath($this->baseUrl.
'/components/index.php', 1),
106 'icon' =>
'fas fa-th-large',
109 'url' =>
dol_buildpath($this->baseUrl.
'/components/badges.php', 1),
110 'icon' =>
'fas fa-certificate',
111 'submenu' => array(),
113 'DocBasicUsage' =>
'#badgesection-basicusage',
114 'DocBadgeContextualVariations' =>
'#badgesection-contextvariations',
115 'DocBadgeDefaultStatus' =>
'#badgesection-defaultstatus',
116 'DocBadgePillBadges' =>
'#badgesection-pill',
117 'DocBadgeDotBadges' =>
'#badgesection-dot',
118 'DocBadgeLinks' =>
'#badgesection-links',
119 'DocBadgeHelper' =>
'#badgesection-dolgetbadge'
123 'url' =>
dol_buildpath($this->baseUrl.
'/components/buttons.php', 1),
124 'icon' =>
'fas fa-mouse',
125 'submenu' => array(),
127 'DocBasicUsage' =>
'#buttonsection-basicusage',
128 'DocButtonModal' =>
'#buttonsection-modals',
129 'DocButtonSubmenu' =>
'#buttonsection-submenu',
133 'url' =>
dol_buildpath($this->baseUrl.
'/components/icons.php', 1),
134 'icon' =>
'far fa-flag',
135 'submenu' => array(),
137 'DocIconsList' =>
'#img-picto-section-list',
138 'DocIconsFontAwesomeList' =>
'#icon-section-list',
142 'url' =>
dol_buildpath($this->baseUrl.
'/components/progress-bars.php', 1),
143 'icon' =>
'fas fa-battery-half',
144 'submenu' => array(),
146 'DocBasicUsage' =>
'#progresse-section-basic-usage',
147 'DocColorVariants' =>
'#progress-section-color',
148 'DocStripedVariants' =>
'#progresse-section-stripped',
151 'Event Message' => array(
152 'url' =>
dol_buildpath($this->baseUrl.
'/components/event-message.php', 1),
153 'icon' =>
'fas fa-comments',
154 'submenu' => array(),
156 'DocBasicUsage' =>
'#seteventmessagesection-basicusage',
157 'DocSetEventMessageContextualVariations' =>
'#seteventmessagesection-contextvariations',
158 'DocSetEventMessageJsContext' =>
'#titlesection-tool-seteventmessage',
162 'url' =>
dol_buildpath($this->baseUrl.
'/components/inputs.php', 1),
163 'icon' =>
'far fa-edit',
164 'submenu' => array(),
166 'DocBasicUsage' =>
'#setinputssection-basicusage',
167 'DocHelperFunctionsInputUsage' =>
'#setinputssection-helperfunctions',
168 'DocHelperFunctionsGetSearchFilterToolInput' =>
'#setinputssection-getSearchFilterToolInput',
171 'ExperimentalUxInputAjaxFeedback' => array(
172 'url' =>
dol_buildpath($this->baseUrl.
'/content/input-feedback.php', 1),
173 'icon' =>
'far fa-share-square',
174 'submenu' => array(),
175 'summary' => array(),
181 $this->menu[
'Content'] = array(
182 'url' =>
dol_buildpath($this->baseUrl.
'/content/index.php', 1),
183 'icon' =>
'far fa-file-alt',
186 'url' =>
dol_buildpath(
'admin/tools/ui/content/titles.php', 1),
187 'icon' =>
'fas fa-heading',
188 'submenu' => array(),
190 'DocBasicUsage' =>
'#titlesection-basicusage',
191 'DocTitleWithFilters' =>
'#titlesection-withfilters',
195 'url' =>
dol_buildpath(
'admin/tools/ui/content/tables.php', 1),
196 'icon' =>
'fas fa-table',
197 'submenu' => array(),
199 'DocBasicUsage' =>
'#tablesection-basicusage',
200 'DocTableWithFilters' =>
'#tablesection-withfilters',
201 'DocTableBeforeFilters' =>
'#tablesection-beforefilters',
202 'DocTableCSSClass' =>
'#tablesection-cssclasses',
206 'TableRowIntuitiveSelect' => array(
207 'url' =>
dol_buildpath($this->baseUrl.
'/content/intuitive-table-row-select.php', 1),
208 'icon' =>
'far fa-check-square',
209 'submenu' => array(),
210 'summary' => array(),
213 'FreezeTooltip' => array(
214 'url' =>
dol_buildpath($this->baseUrl.
'/content/freeze-tooltip.php', 1),
215 'icon' =>
'far fa-comment',
216 'submenu' => array(),
217 'summary' => array(),
223 $this->menu[
'Resources'] = array(
224 'url' =>
dol_buildpath($this->baseUrl.
'/resources/index.php', 1),
225 'icon' =>
'fas fa-wrench',
227 'Contributing' => array(
228 'url' =>
dol_buildpath($this->baseUrl.
'/resources/contributing.php', 1),
229 'icon' =>
'fas fa-code',
230 'submenu' => array(),
232 'DocContributeStep1' =>
'#contributesection-step1',
233 'DocContributeStep2' =>
'#contributesection-step2',
234 'DocContributeStep3' =>
'#contributesection-step3',
241 $this->menu[
'UxDolibarrContext'] = array(
242 'url' =>
dol_buildpath($this->baseUrl.
'/dolibarr-context/index.php', 1),
243 'icon' =>
'fab fa-fort-awesome',
245 'UxDolibarrContextHowItWork' => array(
246 'url' =>
dol_buildpath($this->baseUrl.
'/dolibarr-context/index.php', 1),
247 'icon' =>
'fab fa-fort-awesome',
248 'submenu' => array(),
250 'Introduction' =>
'#titlesection-basicusage',
251 'ConsoleHelp' =>
'#titlesection-console-help',
252 'JSDolibarrhooks' =>
'#titlesection-hooks',
253 'JSDolibarrhooksReadyVsInit' =>
'#titlesection-event-init-vs-ready',
254 'JSDolibarrAwaitHooks' =>
'#titlesection-await-hooks',
255 'JSDolibarrhooksAjaxSpecial' =>
'#titlesection-dom-initnewcontent',
256 'ExampleOfCreatingNewContextTool' =>
'#titlesection-create-tool-example',
257 'SetEventMessageTool' =>
'#titlesection-tool-seteventmessage',
258 'SetAndUseContextVars' =>
'#titlesection-contextvars',
261 'UxDolibarrContextLangsTool' => array(
262 'url' =>
dol_buildpath($this->baseUrl.
'/dolibarr-context/langs-tool.php', 1),
263 'icon' =>
'far fa-flag',
264 'submenu' => array(),
265 'summary' => array(),
267 'UxDolibarrContextKnowsHooks' => array(
268 'url' =>
dol_buildpath($this->baseUrl.
'/dolibarr-context/knows-hooks.php', 1),
269 'icon' =>
'fa fa-anchor',
270 'submenu' => array(),
271 'summary' => array(),
277 $this->menu[
'ExperimentalUx'] = array(
278 'url' =>
dol_buildpath($this->baseUrl.
'/experimental/index.php', 1),
279 'icon' =>
'fas fa-flask',
281 'ExperimentalUxIntroductionMenu' => array(
282 'url' =>
dol_buildpath($this->baseUrl.
'/experimental/index.php', 1),
283 'icon' =>
'fas fa-flask',
284 'submenu' => array(),
287 'ExperimentalUxIntroductionTitle' =>
'#experimental-ux-introduction',
288 'ExperimentalUxContributionTitle' =>
'#experimental-ux-contribution',
291 'UxMenuTooltipTheme' => array(
292 'url' =>
dol_buildpath($this->baseUrl.
'/experimental/tooltip-themes/index.php', 1),
293 'icon' =>
'fas fa-comment',
294 'submenu' => array(),
296 'Introduction' =>
'#ux-introduction',
297 'TooltipThemesAndOrientation' =>
'#tooltip-themes',),
303 'baseUrl' => $this->baseUrl,
307 $reshook = $hookmanager->executeHooks(
'setMenu', $parameters, $this, $action);
324 public function docHeader($title =
'', $arrayofjs = [], $arrayofcss = [], $hidenavmenu =
'')
327 $title = (!empty($title)) ?
dol_escape_htmltag($title) : $langs->trans(
'Documentation');
329 $arrayofcss[] =
'admin/tools/ui/css/documentation.css';
331 top_htmlhead(
'', $title, 0, 0, $arrayofjs, $arrayofcss);
333 print
'<body class="dolibarr-doc'.($hidenavmenu ?
"-bis" :
"").
'">';
345 print
'<div id="documentation-scrollwrapper">';
346 print
'<div id="documentation-scroll"></div>';
350 print
'<script src="'.dol_buildpath(
'admin/tools/ui/js/documentation.js', 1).
'"></script>';
351 print
'<script src="'.DOL_URL_ROOT.
'/core/js/lib_foot.js.php?lang='.$langs->defaultlang.
'"></script>';
366 print
'<div class="doc-sidebar">';
369 print
'<div class="sidebar-logo">';
370 if (is_readable(DOL_DOCUMENT_ROOT.
'/theme/dolibarr_logo.svg')) {
371 $urllogo = DOL_URL_ROOT.
'/theme/dolibarr_logo.svg';
372 print
'<img src="'.$urllogo.
'" />';
378 if (!empty($this->menu)) {
399 foreach ($menu as $key => $item) {
400 $levelclass = (!empty($item[
'submenu'])) ?
'li-withsubmenu' :
'';
401 $levelclass .= (in_array($key, $this->view)) ?
' active' :
'';
402 $levelclass .= ($key ==
'BackToDolibarr') ?
' li-withseparator' :
'';
404 print
'<li class="'.trim($levelclass).
' level-'.$level.
'">';
405 print
'<a href="'.$item[
'url'].
'" class="'.((!empty($item[
'submenu'])) ?
'link-withsubmenu' :
'').
'">';
406 print ((!empty($item[
'icon'])) ?
'<i class="menu-icon '.$item[
'icon'].
' pictofixedwidth" aria-hidden="true"></i>' :
'');
407 print
'<span class="label">'.$langs->transnoentities($key).
'</span>';
408 print ((!empty($item[
'submenu'])) ?
'<i class="submenu-toggle fas fa-chevron-right" aria-hidden="true"></i>' :
'');
410 if (!empty($item[
'submenu'])) {
427 print
'<nav class="doc-breadcrumbs">';
429 print
'<li class="breadcrumb-item"><a href="'.$this->menu[
'DocumentationHome'][
'url'].
'"><i class="'.$this->menu[
'DocumentationHome'][
'icon'].
'" aria-hidden="true"></i></a></li>';
430 if (!empty($this->view)) {
431 $nb_entries = count($this->view);
434 $menu_entry = $this->menu;
435 foreach ($this->view as $page) {
437 if ($i < $nb_entries && isset($menu_entry[$page])) {
438 print
'<li class="breadcrumb-item"><a href="'.$menu_entry[$page][
'url'].
'">'.$langs->transnoentities($page).
'</a></li>';
439 $menu_entry = $menu_entry[$page][
'submenu'];
441 print
'<li class="breadcrumb-item">'.$langs->transnoentities($page).
'</li>';
445 print
'<li class="breadcrumb-item">'.$langs->trans(
'Documentation').
'</li>';
458 public function showSummary($showsubmenu = 1, $showsubmenu_summary = 1)
462 if (!empty($this->view)) {
464 foreach ($this->view as $view) {
467 $menu_entry = $this->menu[$view] ?? [];
469 $menu_entry = $menu_entry[
'submenu'][$view] ?? [];
474 if (!empty($menu_entry[
'summary']) || (!empty($menu_entry[
'submenu']) && $showsubmenu)) {
475 print
'<div class="summary-wrapper">';
491 public function displaySummary($menu, $level = 0, $showsubmenu = 1, $showsubmenu_summary = 1)
496 print
'<ul class="documentation-summary level-'.$level.
'"">';
498 if (!empty($menu[
'summary'])) {
499 foreach ($menu[
'summary'] as $summary_label => $summary_link) {
513 print
'<li><a href="'.$summary_link.
'">'.$langs->trans($summary_label).
'</a></li>';
517 if ($showsubmenu && !empty($menu[
'submenu'])) {
518 foreach ($menu[
'submenu'] as $key => $item) {
519 print
'<li class="summary-title ">';
521 if (!empty($item[
'url'])) {
522 print
'<h3 class="level-'.$level.
'"><a href="'.
dolBuildUrl($item[
'url']).
'" >'.$langs->trans($key).
'</a></h3>';
524 print
'<h3 class="level-'.$level.
'">'.$langs->trans($key).
'</h3>';
527 if ($showsubmenu_summary) {
543 public function showCode($lines = array(), $option =
'html')
545 require_once DOL_DOCUMENT_ROOT .
'/core/class/doleditor.class.php';
546 print
'<div class="documentation-code">';
548 if (isset($lines[0])) {
549 if ($option ===
'html' && strpos(strtolower($lines[0]),
'<!doctype') ===
false) {
550 array_unshift($lines,
'<!DOCTYPE html>',
'');
554 $content = implode(
"\n", $lines) .
"\n";
555 $doleditor =
new DolEditor(md5($content), $content,
'', 0,
'Basic',
'In',
true,
false,
'ace', 0,
'99%', 1);
556 print $doleditor->Create(1,
'',
false,
'', $option);
569 static public function generateLoremIpsum($paragraphCount = 3, $wordsPerParagraph = 50, $html =
true)
571 $baseText =
"Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua Ut enim ad minim veniam quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur Excepteur sint occaecat cupidatat non proident sunt in culpa qui officia deserunt mollit anim id est laborum";
573 $words = explode(
" ", $baseText);
576 for ($p = 0; $p < $paragraphCount; $p++) {
578 for ($i = 0; $i < $wordsPerParagraph; $i++) {
579 $word = $words[array_rand($words)];
582 if ($i > 2 && rand(0, 10) > 8) {
589 $paragraphText = ucfirst(implode(
" ", $sentence)) .
".";
591 $paragraphText =
"<p>$paragraphText</p>";
593 $paragraphs[] = $paragraphText;
596 return implode($html ?
"\n" :
"\n\n", $paragraphs);
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.
static generateLoremIpsum($paragraphCount=3, $wordsPerParagraph=50, $html=true)
Generate lorem ipsum.
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, $anchor='')
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.