14cadd4f8SNickeau<?php 24cadd4f8SNickeau 34cadd4f8SNickeau 44cadd4f8SNickeaunamespace ComboStrap; 54cadd4f8SNickeau 64cadd4f8SNickeau 7*04fd306cSNickeauuse syntax_plugin_combo_xmlinlinetag; 84cadd4f8SNickeauuse syntax_plugin_combo_link; 94cadd4f8SNickeauuse syntax_plugin_combo_tooltip; 104cadd4f8SNickeau 114cadd4f8SNickeauclass Tooltip 124cadd4f8SNickeau{ 134cadd4f8SNickeau 144cadd4f8SNickeau 154cadd4f8SNickeau public const TOOLTIP_ATTRIBUTE = "tooltip"; 164cadd4f8SNickeau public const CALLSTACK = "callstack"; 174cadd4f8SNickeau public const POSITION_ATTRIBUTE = "position"; 184cadd4f8SNickeau 194cadd4f8SNickeau public static function processTooltip(TagAttributes &$tagAttributes) 204cadd4f8SNickeau { 214cadd4f8SNickeau 224cadd4f8SNickeau $tooltip = $tagAttributes->getValueAndRemove(self::TOOLTIP_ATTRIBUTE); 234cadd4f8SNickeau if ($tooltip === null) { 244cadd4f8SNickeau return; 254cadd4f8SNickeau } 264cadd4f8SNickeau 27eb76b75dSgerardnico if (!is_array($tooltip)) { 28eb76b75dSgerardnico LogUtility::msg("The tooltip value ($tooltip) is not an array."); 29eb76b75dSgerardnico return; 30eb76b75dSgerardnico } 31eb76b75dSgerardnico 324cadd4f8SNickeau /** 334cadd4f8SNickeau * Tooltip 344cadd4f8SNickeau */ 354cadd4f8SNickeau $dataAttributeNamespace = Bootstrap::getDataNamespace(); 364cadd4f8SNickeau 374cadd4f8SNickeau 384cadd4f8SNickeau /** 394cadd4f8SNickeau * Old tooltip syntax 404cadd4f8SNickeau */ 414cadd4f8SNickeau $title = $tooltip[syntax_plugin_combo_tooltip::TEXT_ATTRIBUTE]; 424cadd4f8SNickeau if ($title === null) { 434cadd4f8SNickeau 444cadd4f8SNickeau $callStack = $tooltip[Tooltip::CALLSTACK]; 454cadd4f8SNickeau if ($callStack !== null) { 464cadd4f8SNickeau try { 474cadd4f8SNickeau $title = PluginUtility::renderInstructionsToXhtml($callStack); 48*04fd306cSNickeau } catch (ExceptionCompile $e) { 494cadd4f8SNickeau $title = LogUtility::wrapInRedForHtml("Error while rendering the tooltip. Error: {$e->getMessage()}"); 504cadd4f8SNickeau } 514cadd4f8SNickeau 524cadd4f8SNickeau /** 534cadd4f8SNickeau * New Syntax 544cadd4f8SNickeau * (The new syntax add the attributes to the previous element 554cadd4f8SNickeau */ 564cadd4f8SNickeau $tagAttributes->addOutputAttributeValue("data{$dataAttributeNamespace}-html", "true"); 574cadd4f8SNickeau 584cadd4f8SNickeau } 594cadd4f8SNickeau } 604cadd4f8SNickeau 614cadd4f8SNickeau 624cadd4f8SNickeau if (empty($title)) { 634cadd4f8SNickeau $title = LogUtility::wrapInRedForHtml("The tooltip is empty"); 644cadd4f8SNickeau } 654cadd4f8SNickeau $tagAttributes->addOutputAttributeValue("title", $title); 664cadd4f8SNickeau 674cadd4f8SNickeau /** 684cadd4f8SNickeau * Snippet 694cadd4f8SNickeau */ 704cadd4f8SNickeau Tooltip::addToolTipSnippetIfNeeded(); 714cadd4f8SNickeau $tagAttributes->addOutputAttributeValue("data{$dataAttributeNamespace}-toggle", "tooltip"); 724cadd4f8SNickeau 734cadd4f8SNickeau /** 744cadd4f8SNickeau * Position 754cadd4f8SNickeau */ 764cadd4f8SNickeau $position = $tooltip[Tooltip::POSITION_ATTRIBUTE]; 774cadd4f8SNickeau if ($position === null) { 784cadd4f8SNickeau $position = "top"; 794cadd4f8SNickeau } 804cadd4f8SNickeau $tagAttributes->addOutputAttributeValue("data{$dataAttributeNamespace}-placement", "${position}"); 814cadd4f8SNickeau 824cadd4f8SNickeau 834cadd4f8SNickeau /** 844cadd4f8SNickeau * Keyboard user and assistive technology users 854cadd4f8SNickeau * If not button or link (ie span), add tabindex to make the element focusable 864cadd4f8SNickeau * in order to see the tooltip 874cadd4f8SNickeau * Not sure, if this is a good idea 884cadd4f8SNickeau * 894cadd4f8SNickeau * Arbitrary HTML elements (such as <span>s) can be made focusable by adding the tabindex="0" attribute 904cadd4f8SNickeau */ 914cadd4f8SNickeau $logicalTag = $tagAttributes->getLogicalTag(); 92*04fd306cSNickeau if (!in_array($logicalTag, [syntax_plugin_combo_link::TAG, ButtonTag::MARKUP_LONG])) { 934cadd4f8SNickeau $tagAttributes->addOutputAttributeValue("tabindex", "0"); 944cadd4f8SNickeau } 954cadd4f8SNickeau 964cadd4f8SNickeau 974cadd4f8SNickeau } 984cadd4f8SNickeau 994cadd4f8SNickeau /** 1004cadd4f8SNickeau * tooltip is used also in page protection 1014cadd4f8SNickeau */ 1024cadd4f8SNickeau public 1034cadd4f8SNickeau static function addToolTipSnippetIfNeeded() 1044cadd4f8SNickeau { 105*04fd306cSNickeau $snippetSystem = SnippetSystem::getFromContext(); 106*04fd306cSNickeau $snippetSystem->attachJavascriptFromComponentId(syntax_plugin_combo_tooltip::TAG); 107*04fd306cSNickeau $snippetSystem->attachCssInternalStyleSheet(syntax_plugin_combo_tooltip::TAG); 1084cadd4f8SNickeau } 1094cadd4f8SNickeau} 110