0byt3m1n1
Path:
/
data
/
applications
/
aps
/
typo3
/
4.5.5-0
/
standard
/
htdocs
/
t3lib
/
js
/
extjs
/
[
Home
]
File: contexthelp.js
/*************************************************************** * Copyright notice * * (c) 2010-2011 Steffen Kamper <steffen@typo3.org> * All rights reserved * * This script is part of the TYPO3 project. The TYPO3 project is * free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * The GNU General Public License can be found at * http://www.gnu.org/copyleft/gpl.html. * A copy is found in the textfile GPL.txt and important notices to the license * from the author is found in LICENSE.txt distributed with these scripts. * * * This script is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * This copyright notice MUST APPEAR in all copies of the script! ***************************************************************/ Ext.ns('TYPO3', 'TYPO3.CSH.ExtDirect'); /** * 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() { /** * Cache for CSH * @type {Ext.util.MixedCollection} */ var cshHelp = new Ext.util.MixedCollection(true), tip; /** * Shows the tooltip, triggered from mouseover event handler * */ function showToolTipHelp() { var link = tip.triggerElement; if (!link) { return false; } 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 { // If a table is defined, use ExtDirect call to get the tooltip's content if (table) { // Clear old tooltip contents updateTip({ description: top.TYPO3.LLL.core.csh_tooltip_loading, cshLink: '', moreInfo: '', title: '' }); // Load content TYPO3.CSH.ExtDirect.getTableContextHelp(table, function(response, options) { Ext.iterate(response, function(key, value){ cshHelp.add(value); if (key === field) { updateTip(value); // Need to re-position because the height may have increased tip.show(); } }); }, this); // No table was given, use directly title and description } else { updateTip({ description: link.getAttribute('data-description'), cshLink: '', moreInfo: '', title: link.getAttribute('data-title') }); } } } /** * Update tooltip message * * @param {Object} response */ function updateTip(response) { tip.body.dom.innerHTML = response.description; tip.cshLink = response.id; tip.moreInfo = response.moreInfo; if (tip.moreInfo) { tip.addClass('tipIsLinked'); } tip.setTitle(response.title); tip.doAutoWidth(); } return { /** * Constructor */ init: function() { tip = new Ext.ToolTip({ title: 'CSH', // needs a title for init because of the markup html: '', // The tooltip will appear above the label, if viewport allows anchor: 'bottom', minWidth: 160, maxWidth: 240, target: Ext.getBody(), delegate: 'span.t3-help-link', renderTo: Ext.getBody(), cls: 'typo3-csh-tooltip', shadow: false, dismissDelay: 0, // tooltip stays while mouse is over target autoHide: true, showDelay: 1000, // show after 1 second hideDelay: 300, // hide after 0.3 seconds closable: true, isMouseOver: false, listeners: { beforeshow: showToolTipHelp, render: function(tip) { tip.body.on({ 'click': { fn: function(event) { event.stopEvent(); if (tip.moreInfo) { try { top.TYPO3.ContextHelpWindow.open(tip.cshLink); } catch(e) { // do nothing } } tip.hide(); } } }); tip.el.on({ 'mouseover': { fn: function() { if (tip.moreInfo) { tip.isMouseOver = true; } } }, 'mouseout': { fn: function() { if (tip.moreInfo) { tip.isMouseOver = false; tip.hide.defer(tip.hideDelay, tip, []); } } } }); }, hide: function(tip) { tip.setTitle(''); tip.body.dom.innerHTML = ''; }, beforehide: function(tip) { return !tip.isMouseOver; }, scope: this } }); Ext.getBody().on({ 'keydown': { fn: function() { tip.hide(); } }, 'click': { fn: function() { tip.hide(); } } }); /** * Adds a sequence to Ext.TooltTip::showAt so as to increase vertical offset when anchor position is 'botton' * This positions the tip box closer to the target element when the anchor is on the bottom side of the box * When anchor position is 'top' or 'bottom', the anchor is pushed slightly to the left in order to align with the help icon, if any * */ Ext.ToolTip.prototype.showAt = Ext.ToolTip.prototype.showAt.createSequence( function() { var ap = this.getAnchorPosition().charAt(0); if (this.anchorToTarget && !this.trackMouse) { switch (ap) { case 'b': var xy = this.getPosition(); this.setPagePosition(xy[0]-10, xy[1]+5); break; case 't': var xy = this.getPosition(); this.setPagePosition(xy[0]-10, xy[1]); break; } } } ); }, /** * Opens the help window, triggered from click event handler * * @param {Event} event * @param {Node} link */ openHelpWindow: function(event, link) { var id = link.getAttribute('data-table') + '.' + link.getAttribute('data-field'); event.stopEvent(); top.TYPO3.ContextHelpWindow.open(id); } } }(); /** * Calls the init on Ext.onReady */ Ext.onReady(TYPO3.ContextHelp.init, TYPO3.ContextHelp);