Index: t3lib/js/extjs/contexthelp.js =================================================================== --- t3lib/js/extjs/contexthelp.js (revision 9176) +++ t3lib/js/extjs/contexthelp.js (revision ) @@ -30,80 +30,89 @@ * Class to show tooltips for links that have the css t3-help-link * need the tags data-table and data-field (HTML5) */ + + TYPO3.ContextHelp = function() { /** - * Tooltip - * @type {Ext.ToolTip} + * Cache for CSH + * @type {Ext.util.MixedCollection} */ - var tip; + var cshHelp = new Ext.util.MixedCollection(true), + tip; /** - * Cache for CSH - * @type {Ext.util.MixedCollection} + * Shows the tooltip, triggered from mouseover event handler + * */ - var cshHelp = new Ext.util.MixedCollection(true); + function showToolTipHelp() { + var link = tip.triggerElement; + var table = link.getAttribute('data-table'); + var field = link.getAttribute('data-field'); + var key = table + '.' + field; + var response = cshHelp.key(key); + tip.target = tip.triggerElement; + if (response ) { + updateTip(response); + } else { + TYPO3.CSH.ExtDirect.getContextHelp(table, field, function(response, options) { + cshHelp.add(response); + updateTip(response); + }, this); + } + } + /** + * Update tooltip message + * + * @param {Object} response + */ + function updateTip(response) { + tip.body.dom.innerHTML = response.description; + tip.cshLink = response.id; + tip.setTitle(response.title); + tip.syncShadow(); + } + + return { /** * Constructor */ init: function() { tip = new Ext.ToolTip({ - title: 'TYPO3 CSH', + title: 'CSH', // needs a title for init because of the markup html: '', - anchorToTarget: true, - width: 160, + anchor: 'left', + minWidth: 160, + maxWidth: 240, + target: Ext.getBody(), + delegate: 'a.t3-help-link', renderTo: Ext.getBody(), cls: 'typo3-csh-tooltip', - dismissDelay: 3000, // auto hide after 3 seconds - showsDelay: 2000, // show after 2 seconds + dismissDelay: 0, // tooltip stays while mouse is over target + showDelay: 1500, // show after 1.5 seconds + hideDelay: 1500, // hide after 1.5 seconds listeners: { - 'render': function(){ - this.body.on('click', function(e){ - e.stopEvent(); + beforeshow: showToolTipHelp, + render: function(tip) { + tip.body.on('click', function(event){ + event.stopEvent(); top.TYPO3.ContextHelpWindow.open(this.cshLink); - }, this); + }); + }, + hide: function(tip) { + tip.setTitle(''); + tip.body.dom.innerHTML = ''; + }, + scope: this - } + } - } - }); - Ext.select('div').on('mouseover', TYPO3.ContextHelp.showToolTipHelp, TYPO3.ContextHelp, {delegate: 'a.t3-help-link'}); Ext.select('div').on('click', TYPO3.ContextHelp.openHelpWindow, TYPO3.ContextHelp, {delegate: 'a.t3-help-link'}); }, - /** - * Shows the tooltip, triggered from mouseover event handler - * - * @param {Event} event - * @param {Node} link - */ - showToolTipHelp: function(event, link) { - event.stopEvent(); - var table = link.getAttribute('data-table'); - var field = link.getAttribute('data-field'); - var key = table + '.' + field; - var element = Ext.fly(link); - var response; - tip.target = element; - if (response = cshHelp.key(key)) { - tip.body.dom.innerHTML = response.description; - tip.cshLink = response.id; - tip.setTitle(response.title); - tip.showBy(element, 'tl-tr'); - } else { - TYPO3.CSH.ExtDirect.getContextHelp(table, field, function(response, options) { - cshHelp[table + '.' + field] = response; - tip.body.dom.innerHTML = response.description; - tip.cshLink = response.id; - tip.setTitle(response.title); - cshHelp.add(response); - tip.showAt(event.getXY()); - }, this); - } - }, /** * Opens the help window, triggered from click event handler