text: /**
   * @provides javelin-behavior-phabricator-tooltips
   * @requires javelin-behavior
   *           javelin-behavior-device
   *           javelin-stratcom
   *           phabricator-tooltip
   * @javelin
   */
  
  JX.behavior('phabricator-tooltips', function() {
  
    JX.Stratcom.listen(
      ['mouseover', 'mouseout'],
      'has-tooltip',
      function (e) {
        if (e.getType() == 'mouseout') {
          JX.Tooltip.hide();
          return;
        }
  
        if (e.getIsTouchEvent()) {
          return;
        }
  
        var data = e.getNodeData('has-tooltip');
  
        JX.Tooltip.show(
          e.getNode('has-tooltip'),
          data.size || 160,
          data.align || 'N',
          data.tip);
      });
  
    function wipe() {
      JX.Tooltip.hide();
    }
  
    // Hide tips when any key is pressed. This prevents tips from ending up locked
    // on screen if you make a keypress which removes the underlying node (for
    // example, submitting an inline comment in Differential). See T4586.
    JX.Stratcom.listen('keydown', null, wipe);
  
  
    // Hide tips on mouseup. This removes tips on buttons in dialogs after the
    // buttons are clicked.
    JX.Stratcom.listen('mouseup', null, wipe);
  
    // When we leave the page, hide any visible tooltips. If we don't do this,
    // clicking a link with a tooltip and then hitting "back" will give you a
    // phantom tooltip.
    JX.Stratcom.listen('unload', null, wipe);
  
  });
  