/* * SonarQube * Copyright (C) 2009-2016 SonarSource SA * mailto:contact AT sonarsource DOT com * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This program 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ import $ from 'jquery'; import _ from 'underscore'; import Controller from '../../components/navigator/controller'; import Rule from './models/rule'; import RuleDetailsView from './rule-details-view'; export default Controller.extend({ pageSize: 200, ruleFields: [ 'name', 'lang', 'langName', 'sysTags', 'tags', 'status', 'severity' ], _searchParameters () { const fields = this.ruleFields.slice(); const profile = this.app.state.get('query').qprofile; if (profile != null) { fields.push('actives'); fields.push('params'); fields.push('isTemplate'); fields.push('severity'); } const params = { p: this.app.state.get('page'), ps: this.pageSize, facets: this._facetsFromServer().join(), f: fields.join() }; if (this.app.state.get('query').q == null) { _.extend(params, { s: 'name', asc: true }); } return params; }, fetchList (firstPage) { firstPage = firstPage == null ? true : firstPage; if (firstPage) { this.app.state.set({ selectedIndex: 0, page: 1 }, { silent: true }); } this.hideDetails(firstPage); const that = this; const url = window.baseUrl + '/api/rules/search'; const options = _.extend(this._searchParameters(), this.app.state.get('query')); return $.get(url, options).done(function (r) { const rules = that.app.list.parseRules(r); if (firstPage) { that.app.list.reset(rules); } else { that.app.list.add(rules); } that.app.list.setIndex(); that.app.list.addExtraAttributes(that.app.languages, that.app.repositories); that.app.facets.reset(that._allFacets()); that.app.facets.add(r.facets, { merge: true }); that.enableFacets(that._enabledFacets()); that.app.state.set({ page: r.p, pageSize: r.ps, total: r.total, maxResultsReached: r.p * r.ps >= r.total }); if (firstPage && that.isRulePermalink()) { that.showDetails(that.app.list.first()); } }); }, isRulePermalink () { const query = this.app.state.get('query'); return query.rule_key != null && this.app.list.length === 1; }, requestFacet (id) { const url = window.baseUrl + '/api/rules/search'; const facet = this.app.facets.get(id); const options = _.extend({ facets: id, ps: 1 }, this.app.state.get('query')); return $.get(url, options).done(function (r) { const facetData = _.findWhere(r.facets, { property: id }); if (facetData) { facet.set(facetData); } }); }, parseQuery () { const q = Controller.prototype.parseQuery.apply(this, arguments); delete q.asc; delete q.s; return q; }, getRuleDetails (rule) { const that = this; const url = window.baseUrl + '/api/rules/show'; const options = { key: rule.id, actives: true }; return $.get(url, options).done(function (data) { rule.set(data.rule); rule.addExtraAttributes(that.app.repositories); }); }, showDetails (rule) { const that = this; const ruleModel = typeof rule === 'string' ? new Rule({ key: rule }) : rule; this.app.layout.workspaceDetailsRegion.reset(); this.getRuleDetails(ruleModel).done(function (data) { key.setScope('details'); that.app.workspaceListView.unbindScrollEvents(); that.app.state.set({ rule: ruleModel }); that.app.workspaceDetailsView = new RuleDetailsView({ app: that.app, model: ruleModel, actives: data.actives }); that.app.layout.showDetails(); that.app.layout.workspaceDetailsRegion.show(that.app.workspaceDetailsView); }); }, showDetailsForSelected () { const rule = this.app.list.at(this.app.state.get('selectedIndex')); this.showDetails(rule); }, hideDetails (firstPage) { key.setScope('list'); this.app.state.unset('rule'); this.app.layout.workspaceDetailsRegion.reset(); this.app.layout.hideDetails(); this.app.workspaceListView.bindScrollEvents(); if (firstPage) { this.app.workspaceListView.scrollTo(); } }, activateCurrent () { if (this.app.layout.detailsShow()) { this.app.workspaceDetailsView.$('#coding-rules-quality-profile-activate').click(); } else { const rule = this.app.list.at(this.app.state.get('selectedIndex')); const ruleView = this.app.workspaceListView.children.findByModel(rule); ruleView.$('.coding-rules-detail-quality-profile-activate').click(); } }, deactivateCurrent () { if (!this.app.layout.detailsShow()) { const rule = this.app.list.at(this.app.state.get('selectedIndex')); const ruleView = this.app.workspaceListView.children.findByModel(rule); ruleView.$('.coding-rules-detail-quality-profile-deactivate').click(); } } });