]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-10287 Use browser tooltips for descriptive hints
authorGrégoire Aubert <gregoire.aubert@sonarsource.com>
Fri, 8 Jun 2018 06:39:30 +0000 (08:39 +0200)
committerSonarTech <sonartech@sonarsource.com>
Tue, 12 Jun 2018 18:20:57 +0000 (20:20 +0200)
15 files changed:
server/sonar-web/src/main/js/app/components/nav/component/ComponentNavBranch.tsx
server/sonar-web/src/main/js/app/components/nav/component/ComponentNavBranchesMenuItem.tsx
server/sonar-web/src/main/js/app/components/nav/component/__tests__/__snapshots__/ComponentNavBranch-test.tsx.snap
server/sonar-web/src/main/js/app/components/nav/component/__tests__/__snapshots__/ComponentNavBranchesMenuItem-test.tsx.snap
server/sonar-web/src/main/js/apps/background-tasks/components/TaskComponent.tsx
server/sonar-web/src/main/js/apps/background-tasks/components/__tests__/__snapshots__/TaskComponent-test.tsx.snap
server/sonar-web/src/main/js/apps/coding-rules/components/ActivationFormModal.tsx
server/sonar-web/src/main/js/apps/coding-rules/components/RuleDetailsMeta.tsx
server/sonar-web/src/main/js/apps/coding-rules/components/SimilarRulesFilter.tsx
server/sonar-web/src/main/js/apps/coding-rules/components/__tests__/__snapshots__/RuleDetailsMeta-test.tsx.snap
server/sonar-web/src/main/js/apps/component-measures/sidebar/ProjectOverviewFacet.js
server/sonar-web/src/main/js/apps/overview/events/Event.tsx
server/sonar-web/src/main/js/apps/overview/events/__tests__/__snapshots__/Event-test.tsx.snap
server/sonar-web/src/main/js/apps/projectActivity/components/EventInner.js
server/sonar-web/src/main/js/components/measure/Measure.tsx

index 6a390a20932de1432335e8aef7e743b2833c0b01..8cba10a5dbcda86bc3d32246ab9aa6f0cbdba5df 100644 (file)
@@ -35,7 +35,6 @@ import { translate } from '../../../../helpers/l10n';
 import PlusCircleIcon from '../../../../components/icons-components/PlusCircleIcon';
 import HelpTooltip from '../../../../components/controls/HelpTooltip';
 import Toggler from '../../../../components/controls/Toggler';
-import Tooltip from '../../../../components/controls/Tooltip';
 import DropdownIcon from '../../../../components/icons-components/DropdownIcon';
 import { isSonarCloud } from '../../../../helpers/system';
 
@@ -184,9 +183,9 @@ export default class ComponentNavBranch extends React.PureComponent<Props, State
               href="#"
               onClick={this.handleClick}>
               <BranchIcon branchLike={currentBranchLike} className="little-spacer-right" />
-              <Tooltip mouseEnterDelay={1} overlay={displayName}>
-                <span className="text-limited text-top">{displayName}</span>
-              </Tooltip>
+              <span className="text-limited text-top" title={displayName}>
+                {displayName}
+              </span>
               <DropdownIcon className="little-spacer-left" />
             </a>
           </Toggler>
index 8788fe657c12f39affea5607d2c9171070c6cdc6..204014a567ef0ae11e5e81375af2207689bfd2d0 100644 (file)
@@ -32,7 +32,6 @@ import {
 } from '../../../../helpers/branches';
 import { translate } from '../../../../helpers/l10n';
 import { getBranchLikeUrl } from '../../../../helpers/urls';
-import Tooltip from '../../../../components/controls/Tooltip';
 
 export interface Props {
   branchLike: BranchLike;
@@ -58,18 +57,18 @@ export default function ComponentNavBranchesMenuItem({ branchLike, ...props }: P
           active: props.selected
         })}
         to={getBranchLikeUrl(props.component.key, branchLike)}>
-        <Tooltip mouseEnterDelay={0.5} overlay={displayName} placement="left">
-          <div className="navbar-context-meta-branch-menu-item-name text-ellipsis">
-            <BranchIcon
-              branchLike={branchLike}
-              className={classNames('little-spacer-right', { 'big-spacer-left': shouldBeIndented })}
-            />
-            {displayName}
-            {isMainBranch(branchLike) && (
-              <div className="outline-badge spacer-left">{translate('branches.main_branch')}</div>
-            )}
-          </div>
-        </Tooltip>
+        <div
+          className="navbar-context-meta-branch-menu-item-name text-ellipsis"
+          title={displayName}>
+          <BranchIcon
+            branchLike={branchLike}
+            className={classNames('little-spacer-right', { 'big-spacer-left': shouldBeIndented })}
+          />
+          {displayName}
+          {isMainBranch(branchLike) && (
+            <div className="outline-badge spacer-left">{translate('branches.main_branch')}</div>
+          )}
+        </div>
         <div className="big-spacer-left note">
           <BranchStatus branchLike={branchLike} concise={true} />
         </div>
index 637e7d69a8e3076d18612e01e1bfdb4853bc5c49..72ce3a7917c7c5c9ca43a8b6e549397daed89de4 100644 (file)
@@ -50,16 +50,12 @@ exports[`renders main branch 1`] = `
           }
           className="little-spacer-right"
         />
-        <Tooltip
-          mouseEnterDelay={1}
-          overlay="master"
+        <span
+          className="text-limited text-top"
+          title="master"
         >
-          <span
-            className="text-limited text-top"
-          >
-            master
-          </span>
-        </Tooltip>
+          master
+        </span>
         <DropdownIcon
           className="little-spacer-left"
         />
@@ -140,16 +136,12 @@ exports[`renders pull request 1`] = `
           }
           className="little-spacer-right"
         />
-        <Tooltip
-          mouseEnterDelay={1}
-          overlay="1234 – Feature PR"
+        <span
+          className="text-limited text-top"
+          title="1234 – Feature PR"
         >
-          <span
-            className="text-limited text-top"
-          >
-            1234 – Feature PR
-          </span>
-        </Tooltip>
+          1234 – Feature PR
+        </span>
         <DropdownIcon
           className="little-spacer-left"
         />
@@ -251,16 +243,12 @@ exports[`renders short-living branch 1`] = `
           }
           className="little-spacer-right"
         />
-        <Tooltip
-          mouseEnterDelay={1}
-          overlay="foo"
+        <span
+          className="text-limited text-top"
+          title="foo"
         >
-          <span
-            className="text-limited text-top"
-          >
-            foo
-          </span>
-        </Tooltip>
+          foo
+        </span>
         <DropdownIcon
           className="little-spacer-left"
         />
index 463a43a173f59e754476b42729c2a56d856cad61..b4c9f37a5d33e6ba32c387a65d7bc36d70bfa6ee 100644 (file)
@@ -18,31 +18,26 @@ exports[`renders main branch 1`] = `
       }
     }
   >
-    <Tooltip
-      mouseEnterDelay={0.5}
-      overlay="master"
-      placement="left"
+    <div
+      className="navbar-context-meta-branch-menu-item-name text-ellipsis"
+      title="master"
     >
+      <BranchIcon
+        branchLike={
+          Object {
+            "isMain": true,
+            "name": "master",
+          }
+        }
+        className="little-spacer-right"
+      />
+      master
       <div
-        className="navbar-context-meta-branch-menu-item-name text-ellipsis"
+        className="outline-badge spacer-left"
       >
-        <BranchIcon
-          branchLike={
-            Object {
-              "isMain": true,
-              "name": "master",
-            }
-          }
-          className="little-spacer-right"
-        />
-        master
-        <div
-          className="outline-badge spacer-left"
-        >
-          branches.main_branch
-        </div>
+        branches.main_branch
       </div>
-    </Tooltip>
+    </div>
     <div
       className="big-spacer-left note"
     >
@@ -80,34 +75,29 @@ exports[`renders short-living branch 1`] = `
       }
     }
   >
-    <Tooltip
-      mouseEnterDelay={0.5}
-      overlay="foo"
-      placement="left"
+    <div
+      className="navbar-context-meta-branch-menu-item-name text-ellipsis"
+      title="foo"
     >
-      <div
-        className="navbar-context-meta-branch-menu-item-name text-ellipsis"
-      >
-        <BranchIcon
-          branchLike={
-            Object {
-              "isMain": false,
-              "mergeBranch": "master",
-              "name": "foo",
-              "status": Object {
-                "bugs": 1,
-                "codeSmells": 2,
-                "qualityGateStatus": "ERROR",
-                "vulnerabilities": 3,
-              },
-              "type": "SHORT",
-            }
+      <BranchIcon
+        branchLike={
+          Object {
+            "isMain": false,
+            "mergeBranch": "master",
+            "name": "foo",
+            "status": Object {
+              "bugs": 1,
+              "codeSmells": 2,
+              "qualityGateStatus": "ERROR",
+              "vulnerabilities": 3,
+            },
+            "type": "SHORT",
           }
-          className="little-spacer-right big-spacer-left"
-        />
-        foo
-      </div>
-    </Tooltip>
+        }
+        className="little-spacer-right big-spacer-left"
+      />
+      foo
+    </div>
     <div
       className="big-spacer-left note"
     >
@@ -153,35 +143,30 @@ exports[`renders short-living orhpan branch 1`] = `
       }
     }
   >
-    <Tooltip
-      mouseEnterDelay={0.5}
-      overlay="foo"
-      placement="left"
+    <div
+      className="navbar-context-meta-branch-menu-item-name text-ellipsis"
+      title="foo"
     >
-      <div
-        className="navbar-context-meta-branch-menu-item-name text-ellipsis"
-      >
-        <BranchIcon
-          branchLike={
-            Object {
-              "isMain": false,
-              "isOrphan": true,
-              "mergeBranch": "master",
-              "name": "foo",
-              "status": Object {
-                "bugs": 1,
-                "codeSmells": 2,
-                "qualityGateStatus": "ERROR",
-                "vulnerabilities": 3,
-              },
-              "type": "SHORT",
-            }
+      <BranchIcon
+        branchLike={
+          Object {
+            "isMain": false,
+            "isOrphan": true,
+            "mergeBranch": "master",
+            "name": "foo",
+            "status": Object {
+              "bugs": 1,
+              "codeSmells": 2,
+              "qualityGateStatus": "ERROR",
+              "vulnerabilities": 3,
+            },
+            "type": "SHORT",
           }
-          className="little-spacer-right"
-        />
-        foo
-      </div>
-    </Tooltip>
+        }
+        className="little-spacer-right"
+      />
+      foo
+    </div>
     <div
       className="big-spacer-left note"
     >
index 3a4c6d80fe1e0c9c0c47bd59430371d31865ec60..c3afacc324ab0b7c9d4bafc4551aec5a8491687e 100644 (file)
@@ -32,7 +32,6 @@ import {
 import ShortLivingBranchIcon from '../../../components/icons-components/ShortLivingBranchIcon';
 import LongLivingBranchIcon from '../../../components/icons-components/LongLivingBranchIcon';
 import PullRequestIcon from '../../../components/icons-components/PullRequestIcon';
-import Tooltip from '../../../components/controls/Tooltip';
 
 interface Props {
   task: Task;
@@ -76,12 +75,10 @@ export default function TaskComponent({ task }: Props) {
           )}
 
           {task.pullRequest && (
-            <Tooltip overlay={task.pullRequestTitle}>
-              <span className="text-limited text-text-top">
-                <span style={{ marginLeft: 5, marginRight: 5 }}>/</span>
-                {task.pullRequest}
-              </span>
-            </Tooltip>
+            <span className="text-limited text-text-top" title={task.pullRequestTitle}>
+              <span style={{ marginLeft: 5, marginRight: 5 }}>/</span>
+              {task.pullRequest}
+            </span>
           )}
         </Link>
       )}
index d1f54e342f5dc40094cba1c300653b1a23826155..88328a93b61d0cfa4f1063ebf3f945c042597650 100644 (file)
@@ -163,23 +163,21 @@ exports[`renders correctly for branches and pullrequest 3`] = `
     }
   >
     foo
-    <Tooltip>
+    <span
+      className="text-limited text-text-top"
+    >
       <span
-        className="text-limited text-text-top"
-      >
-        <span
-          style={
-            Object {
-              "marginLeft": 5,
-              "marginRight": 5,
-            }
+        style={
+          Object {
+            "marginLeft": 5,
+            "marginRight": 5,
           }
-        >
-          /
-        </span>
-        pr-89
+        }
+      >
+        /
       </span>
-    </Tooltip>
+      pr-89
+    </span>
   </Link>
   <TaskType
     type="REPORT"
index 9e3f2a258ecd61b3a1b6534dd5940814ae34dc50..3d265133d9591d87dfd0f578239907a4be43d684 100644 (file)
@@ -21,7 +21,6 @@ import * as React from 'react';
 import Modal from '../../../components/controls/Modal';
 import Select from '../../../components/controls/Select';
 import SeverityHelper from '../../../components/shared/SeverityHelper';
-import Tooltip from '../../../components/controls/Tooltip';
 import { activateRule, Profile as BaseProfile } from '../../../api/quality-profiles';
 import { Rule, RuleDetails, RuleActivation } from '../../../app/types';
 import { SEVERITIES } from '../../../helpers/constants';
@@ -207,11 +206,7 @@ export default class ActivationFormModal extends React.PureComponent<Props, Stat
             ) : (
               params.map(param => (
                 <div className="modal-field" key={param.key}>
-                  <label>
-                    <Tooltip overlay={param.key}>
-                      <span>{param.key}</span>
-                    </Tooltip>
-                  </label>
+                  <label title={param.key}>{param.key}</label>
                   {param.type === 'TEXT' ? (
                     <textarea
                       className="width100"
index c74e8ad3df669b104eb1263dd47db9ed41589b9e..110956c04fb00b4108da17cb39177f852cb4304c 100644 (file)
@@ -240,6 +240,7 @@ export default class RuleDetailsMeta extends React.PureComponent<Props> {
             {!ruleDetails.isExternal && (
               <Link
                 className="coding-rules-detail-permalink link-no-underline spacer-left text-middle"
+                title={translate('permalink')}
                 to={getRuleUrl(ruleDetails.key, this.props.organization)}>
                 <LinkIcon />
               </Link>
index 34c9041d05a14535e89ba1beee4d43c2eb83dafa..6d98a0959d44baad2fab6074a0263ab0ac7b502b 100644 (file)
@@ -110,7 +110,10 @@ export default class SimilarRulesFilter extends React.PureComponent<Props> {
             </ul>
           </>
         }>
-        <a className="js-rule-filter link-no-underline spacer-left dropdown-toggle" href="#">
+        <a
+          className="js-rule-filter link-no-underline spacer-left dropdown-toggle"
+          href="#"
+          title={translate('coding_rules.filter_similar_rules')}>
           <FilterIcon className="icon-half-transparent" />
           <DropdownIcon className="icon-half-transparent" />
         </a>
index 0e19fbe1472ea9a64dc712e050e1129de7bbdcd1..c0eb1b999fbecbe343e3369529b77aa619124ea2 100644 (file)
@@ -19,6 +19,7 @@ exports[`should display right meta info 1`] = `
         className="coding-rules-detail-permalink link-no-underline spacer-left text-middle"
         onlyActiveOnIndex={false}
         style={Object {}}
+        title="permalink"
         to={
           Object {
             "pathname": "/coding_rules",
index 723551831bbc50691a9f07096d61e15fd858ed67..c0877081176a9af2561bdd21c116f0641bbcfe10 100644 (file)
@@ -22,7 +22,6 @@ import React from 'react';
 import FacetBox from '../../../components/facet/FacetBox';
 import FacetItem from '../../../components/facet/FacetItem';
 import FacetItemsList from '../../../components/facet/FacetItemsList';
-import Tooltip from '../../../components/controls/Tooltip';
 import { translate } from '../../../helpers/l10n';
 
 /*:: type Props = {|
@@ -41,9 +40,9 @@ export default function ProjectOverviewFacet({ value, selected, onChange } /*: P
           disabled={false}
           key={value}
           name={
-            <Tooltip overlay={facetName} mouseEnterDelay={0.5}>
-              <strong id={`measure-overview-${value}-name`}>{facetName}</strong>
-            </Tooltip>
+            <strong id={`measure-overview-${value}-name`} title={facetName}>
+              {facetName}
+            </strong>
           }
           onClick={onChange}
           value={value}
index 96f7699b1d98f1b509f76fc48b449421597b2d9e..f74c0d7ad19402b8821c05bc05cf7f341e3d425b 100644 (file)
@@ -18,7 +18,6 @@
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 import * as React from 'react';
-import Tooltip from '../../../components/controls/Tooltip';
 import { Event as IEvent } from '../../../api/projectActivity';
 import { translate } from '../../../helpers/l10n';
 
@@ -29,9 +28,11 @@ interface Props {
 export default function Event({ event }: Props) {
   if (event.category === 'VERSION') {
     return (
-      <Tooltip mouseEnterDelay={0.5} overlay={`${translate('version')} ${event.name}`}>
-        <span className="overview-analysis-event badge">{event.name}</span>
-      </Tooltip>
+      <span
+        className="overview-analysis-event badge"
+        title={`${translate('version')} ${event.name}`}>
+        {event.name}
+      </span>
     );
   }
 
@@ -39,9 +40,7 @@ export default function Event({ event }: Props) {
     <div className="overview-analysis-event">
       <span className="note">{translate('event.category', event.category)}:</span>{' '}
       {event.description ? (
-        <Tooltip mouseEnterDelay={0.5} overlay={event.description}>
-          <strong>{event.name}</strong>
-        </Tooltip>
+        <strong title={event.description}>{event.name}</strong>
       ) : (
         <strong>{event.name}</strong>
       )}
index 85ed92a24ce920bddeb1ea4a875bef3e1c6734ca..5af2a4e8b9b30d717c5c5920db23eb63b32ea9d0 100644 (file)
@@ -1,16 +1,12 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
 exports[`should render a version correctly 1`] = `
-<Tooltip
-  mouseEnterDelay={0.5}
-  overlay="version 6.5-SNAPSHOT"
+<span
+  className="overview-analysis-event badge"
+  title="version 6.5-SNAPSHOT"
 >
-  <span
-    className="overview-analysis-event badge"
-  >
-    6.5-SNAPSHOT
-  </span>
-</Tooltip>
+  6.5-SNAPSHOT
+</span>
 `;
 
 exports[`should render an event correctly 1`] = `
index afaa7609b3c49fed25e417f86b9d64bf213d013d..f28daa51ef4e7eb6d982c6e997e3b37517a2f2d6 100644 (file)
@@ -19,7 +19,6 @@
  */
 // @flow
 import React from 'react';
-import Tooltip from '../../../components/controls/Tooltip';
 import ProjectEventIcon from '../../../components/icons-components/ProjectEventIcon';
 import { translate } from '../../../helpers/l10n';
 /*:: import type { Event as EventType } from '../types'; */
@@ -34,12 +33,10 @@ export default function EventInner(props /*: { event: EventType } */) {
           className={'project-activity-event-icon margin-align ' + event.category}
         />
       </div>
-      <Tooltip mouseEnterDelay={0.5} overlay={event.name}>
-        <span className="project-activity-event-inner-text">
-          <span className="note">{translate('event.category', event.category)}:</span>{' '}
-          <strong title={event.description}>{event.name}</strong>
-        </span>
-      </Tooltip>
+      <span className="project-activity-event-inner-text">
+        <span className="note">{translate('event.category', event.category)}:</span>{' '}
+        <strong title={event.description}>{event.name}</strong>
+      </span>
     </div>
   );
 }
index 8cccb3cd5d64308aeaea51d0e0655f54fbebff28..4078388c3ed6dcdfc02fdcaa68f3971130cc5ebd 100644 (file)
@@ -21,7 +21,7 @@ import * as React from 'react';
 import { getRatingTooltip } from './utils';
 import Rating from '../ui/Rating';
 import Level from '../ui/Level';
-import Tooltips from '../controls/Tooltip';
+import Tooltip from '../controls/Tooltip';
 import { formatMeasure } from '../../helpers/measures';
 
 interface Props {
@@ -58,9 +58,9 @@ export default function Measure({
   const rating = <Rating small={small} value={value} />;
   if (tooltip) {
     return (
-      <Tooltips overlay={tooltip}>
+      <Tooltip overlay={tooltip}>
         <span className={className}>{rating}</span>
-      </Tooltips>
+      </Tooltip>
     );
   }
   return rating;