]> source.dussan.org Git - sonarqube.git/commitdiff
apply feedback for the quality profiles page
authorStas Vilchik <vilchiks@gmail.com>
Thu, 7 Jul 2016 11:45:03 +0000 (13:45 +0200)
committerStas Vilchik <vilchiks@gmail.com>
Thu, 7 Jul 2016 11:45:20 +0000 (13:45 +0200)
server/sonar-web/src/main/js/apps/quality-profiles/details/ProfileHeader.js
server/sonar-web/src/main/js/apps/quality-profiles/home/EvolutionStagnant.js
server/sonar-web/src/main/js/apps/quality-profiles/home/ProfilesListRow.js
server/sonar-web/src/main/js/apps/quality-profiles/utils.js
server/sonar-web/src/main/less/components/badges.less

index bbf2913801e5b8aea2eae9e502840fdd7ba75b02..7f2c10f5abb3ec4294b7dae183fce493715c53ad 100644 (file)
@@ -19,6 +19,8 @@
  */
 import React from 'react';
 import { Link, IndexLink } from 'react-router';
+import classNames from 'classnames';
+import moment from 'moment';
 import ProfileLink from '../components/ProfileLink';
 import RenameProfileView from '../views/RenameProfileView';
 import CopyProfileView from '../views/CopyProfileView';
@@ -28,6 +30,7 @@ import { ProfileType } from '../propTypes';
 import { translate } from '../../../helpers/l10n';
 import { setDefaultProfile } from '../../../api/quality-profiles';
 import { getRulesUrl } from '../../../helpers/urls';
+import { isStagnant } from '../utils';
 
 export default class ProfileHeader extends React.Component {
   static propTypes = {
@@ -79,6 +82,21 @@ export default class ProfileHeader extends React.Component {
     }).render();
   }
 
+  renderUpdateDate () {
+    const { profile } = this.props;
+    const warning = isStagnant(profile);
+    const className = classNames('small spacer-right', {
+      'alert-warning': warning
+    });
+    return (
+        <li className={className}>
+          {translate('quality_profiles.updated_')}
+          {' '}
+          <ProfileDate date={profile.userUpdatedAt}/>
+        </li>
+    );
+  }
+
   render () {
     const { profile, canAdmin } = this.props;
 
@@ -115,11 +133,7 @@ export default class ProfileHeader extends React.Component {
 
           <div className="pull-right">
             <ul className="list-inline" style={{ lineHeight: '24px' }}>
-              <li className="small spacer-right">
-                {translate('quality_profiles.updated_')}
-                {' '}
-                <ProfileDate date={profile.userUpdatedAt}/>
-              </li>
+              {this.renderUpdateDate()}
               <li className="small big-spacer-right">
                 {translate('quality_profiles.used_')}
                 {' '}
index cdef6e1e9d07487693c809e36a17a81a395a9c70..e7bf236e86894abeb81b6aa438016454f9217f4c 100644 (file)
@@ -22,6 +22,7 @@ import moment from 'moment';
 import ProfileLink from '../components/ProfileLink';
 import { ProfilesListType } from '../propTypes';
 import { translate } from '../../../helpers/l10n';
+import { isStagnant } from '../utils';
 
 export default class EvolutionStagnant extends React.Component {
   static propTypes = {
@@ -31,16 +32,15 @@ export default class EvolutionStagnant extends React.Component {
   render () {
     // TODO filter built-in out
 
-    const outdated = this.props.profiles.filter(profile => (
-        moment().diff(moment(profile.rulesUpdatedAt), 'years') >= 1
-    ));
+    const outdated = this.props.profiles.filter(isStagnant);
 
     if (outdated.length === 0) {
       return null;
     }
 
     return (
-        <div className="quality-profile-box quality-profiles-evolution-stagnant">
+        <div
+            className="quality-profile-box quality-profiles-evolution-stagnant">
           <div className="spacer-bottom">
             <strong>{translate('quality_profiles.stagnant_profiles')}</strong>
           </div>
index 70276055fe5a2b39d6ad1ffa3ddf6d64a7d44c51..cda1762257c057c163cea15c0044064088c091c0 100644 (file)
@@ -24,6 +24,7 @@ import ProfileDate from '../components/ProfileDate';
 import { ProfileType } from '../propTypes';
 import { translate } from '../../../helpers/l10n';
 import { getRulesUrl } from '../../../helpers/urls';
+import { isStagnant } from '../utils';
 
 export default class ProfilesListRow extends React.Component {
   static propTypes = {
@@ -82,7 +83,7 @@ export default class ProfilesListRow extends React.Component {
         <div>
           {profile.activeDeprecatedRuleCount > 0 && (
               <span className="spacer-right">
-                <a className="badge badge-warning"
+                <a className="badge badge-focus"
                    href={deprecatedRulesUrl}
                    title={translate('quality_profiles.deprecated_rules')}
                    data-toggle="tooltip">
@@ -99,7 +100,12 @@ export default class ProfilesListRow extends React.Component {
   }
 
   renderUpdateDate () {
-    return <ProfileDate date={this.props.profile.userUpdatedAt}/>;
+    const date = <ProfileDate date={this.props.profile.userUpdatedAt}/>;
+    if (isStagnant(this.props.profile)) {
+      return <span className="badge badge-focus">{date}</span>;
+    } else {
+      return date;
+    }
   }
 
   renderUsageDate () {
index cba412ba81acc7cebe19de119c05861a0699d4d2..0bc023fdd4375ddac62b5a284279248967c584cb 100644 (file)
@@ -18,6 +18,7 @@
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 import sortBy from 'lodash/sortBy';
+import moment from 'moment';
 
 export function sortProfiles (profiles) {
   const result = [];
@@ -59,3 +60,7 @@ export function createFakeProfile (overrides) {
     ...overrides
   };
 }
+
+export function isStagnant (profile) {
+  return moment().diff(moment(profile.userUpdatedAt), 'years') >= 1;
+}
index 4068b58993714aee641babf441ac98feab094a9b..e130b6a6c047f83a8280a6186e3223b04fc77cea 100644 (file)
@@ -81,4 +81,6 @@
   background-color: #fcf8e3;
   color: #8a6d3b;
   font-weight: 400;
+
+  a&:hover, a&:focus, a&:active { color: #8a6d3b; }
 }