14cadd4f8SNickeau<?php 24cadd4f8SNickeau 34cadd4f8SNickeau 44cadd4f8SNickeaunamespace ComboStrap; 54cadd4f8SNickeau 64cadd4f8SNickeau 74cadd4f8SNickeauuse syntax_plugin_combo_button; 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 27*eb76b75dSgerardnico if(!is_array($tooltip)){ 28*eb76b75dSgerardnico LogUtility::msg("The tooltip value ($tooltip) is not an array."); 29*eb76b75dSgerardnico return; 30*eb76b75dSgerardnico } 31*eb76b75dSgerardnico 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); 484cadd4f8SNickeau } catch (ExceptionCombo $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 634cadd4f8SNickeau 644cadd4f8SNickeau if (empty($title)) { 654cadd4f8SNickeau $title = LogUtility::wrapInRedForHtml("The tooltip is empty"); 664cadd4f8SNickeau } 674cadd4f8SNickeau $tagAttributes->addOutputAttributeValue("title", $title); 684cadd4f8SNickeau 694cadd4f8SNickeau /** 704cadd4f8SNickeau * Snippet 714cadd4f8SNickeau */ 724cadd4f8SNickeau Tooltip::addToolTipSnippetIfNeeded(); 734cadd4f8SNickeau $tagAttributes->addOutputAttributeValue("data{$dataAttributeNamespace}-toggle", "tooltip"); 744cadd4f8SNickeau 754cadd4f8SNickeau /** 764cadd4f8SNickeau * Position 774cadd4f8SNickeau */ 784cadd4f8SNickeau $position = $tooltip[Tooltip::POSITION_ATTRIBUTE]; 794cadd4f8SNickeau if ($position === null) { 804cadd4f8SNickeau $position = "top"; 814cadd4f8SNickeau } 824cadd4f8SNickeau $tagAttributes->addOutputAttributeValue("data{$dataAttributeNamespace}-placement", "${position}"); 834cadd4f8SNickeau 844cadd4f8SNickeau 854cadd4f8SNickeau /** 864cadd4f8SNickeau * Keyboard user and assistive technology users 874cadd4f8SNickeau * If not button or link (ie span), add tabindex to make the element focusable 884cadd4f8SNickeau * in order to see the tooltip 894cadd4f8SNickeau * Not sure, if this is a good idea 904cadd4f8SNickeau * 914cadd4f8SNickeau * Arbitrary HTML elements (such as <span>s) can be made focusable by adding the tabindex="0" attribute 924cadd4f8SNickeau */ 934cadd4f8SNickeau $logicalTag = $tagAttributes->getLogicalTag(); 944cadd4f8SNickeau if (!in_array($logicalTag, [syntax_plugin_combo_link::TAG, syntax_plugin_combo_button::TAG])) { 954cadd4f8SNickeau $tagAttributes->addOutputAttributeValue("tabindex", "0"); 964cadd4f8SNickeau } 974cadd4f8SNickeau 984cadd4f8SNickeau 994cadd4f8SNickeau } 1004cadd4f8SNickeau 1014cadd4f8SNickeau /** 1024cadd4f8SNickeau * tooltip is used also in page protection 1034cadd4f8SNickeau */ 1044cadd4f8SNickeau public 1054cadd4f8SNickeau static function addToolTipSnippetIfNeeded() 1064cadd4f8SNickeau { 1074cadd4f8SNickeau PluginUtility::getSnippetManager()->attachInternalJavascriptForSlot(syntax_plugin_combo_tooltip::TAG); 1084cadd4f8SNickeau PluginUtility::getSnippetManager()->attachCssInternalStyleSheetForSlot(syntax_plugin_combo_tooltip::TAG); 1094cadd4f8SNickeau } 1104cadd4f8SNickeau} 111