From: Stas Vilchik Date: Fri, 28 Nov 2014 10:43:34 +0000 (+0100) Subject: SONAR-5718 Drop old issues page X-Git-Tag: 5.0-RC1~176 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=9c85293cc40420355c1253f7cf9fc36488951898;p=sonarqube.git SONAR-5718 Drop old issues page --- diff --git a/server/sonar-web/Gruntfile.coffee b/server/sonar-web/Gruntfile.coffee index 1127dbaf1cf..6d576c94900 100644 --- a/server/sonar-web/Gruntfile.coffee +++ b/server/sonar-web/Gruntfile.coffee @@ -180,10 +180,6 @@ module.exports = (grunt) -> name: 'issues/app' out: '<%= pkg.assets %>build/js/issues/app.js' - issuesOld: options: - name: 'issues-old/app' - out: '<%= pkg.assets %>build/js/issues-old/app.js' - measures: options: name: 'measures/app' out: '<%= pkg.assets %>build/js/measures/app.js' @@ -263,9 +259,6 @@ module.exports = (grunt) -> '<%= pkg.assets %>js/templates/issues.js': [ '<%= pkg.sources %>hbs/issues/**/*.hbs' ] - '<%= pkg.assets %>js/templates/issues-old.js': [ - '<%= pkg.sources %>hbs/issues-old/**/*.hbs' - ] '<%= pkg.assets %>js/templates/api-documentation.js': [ '<%= pkg.sources %>hbs/api-documentation/**/*.hbs' ] diff --git a/server/sonar-web/src/main/hbs/issues-old/filter-bar.hbs b/server/sonar-web/src/main/hbs/issues-old/filter-bar.hbs deleted file mode 100644 index 4f1907964c7..00000000000 --- a/server/sonar-web/src/main/hbs/issues-old/filter-bar.hbs +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/server/sonar-web/src/main/hbs/issues-old/issue-detail.hbs b/server/sonar-web/src/main/hbs/issues-old/issue-detail.hbs deleted file mode 100644 index c746f72148c..00000000000 --- a/server/sonar-web/src/main/hbs/issues-old/issue-detail.hbs +++ /dev/null @@ -1,20 +0,0 @@ -
- {{severityIcon severity}}{{translate "severities" severity}}  - {{statusIcon status}}{{translate "statuses" status}} - {{#if resolution}}({{translate "resolutions" resolution}}){{/if}} - -
- {{fUpdateAge}} -
-
- -
- {{message}} -
- -
- {{#unless singleProject}} -
{{default projectLongName projectName}}
- {{/unless}} -
{{componentLongName}}
-
diff --git a/server/sonar-web/src/main/hbs/issues-old/issues-actions.hbs b/server/sonar-web/src/main/hbs/issues-old/issues-actions.hbs deleted file mode 100644 index 351d6d4d25c..00000000000 --- a/server/sonar-web/src/main/hbs/issues-old/issues-actions.hbs +++ /dev/null @@ -1,26 +0,0 @@ -{{#unless maxResultsReached}} - - -{{/unless}} - diff --git a/server/sonar-web/src/main/hbs/issues-old/issues-details-favorite-filter.hbs b/server/sonar-web/src/main/hbs/issues-old/issues-details-favorite-filter.hbs deleted file mode 100644 index 84c265857f0..00000000000 --- a/server/sonar-web/src/main/hbs/issues-old/issues-details-favorite-filter.hbs +++ /dev/null @@ -1,14 +0,0 @@ -{{#if items}} - -{{/if}} - diff --git a/server/sonar-web/src/main/hbs/issues-old/issues-header.hbs b/server/sonar-web/src/main/hbs/issues-old/issues-header.hbs deleted file mode 100644 index bb44852c45e..00000000000 --- a/server/sonar-web/src/main/hbs/issues-old/issues-header.hbs +++ /dev/null @@ -1,39 +0,0 @@ -

- {{#if name}} - {{name}} - - {{#unless shared}} - [{{t 'issue_filter.private'}}] - {{else}} - {{#eq user currentUser}} - [{{t 'issue_filter.shared_with_all_users'}}] - {{else}} - {{#if user}} - [{{t 'issue_filter.shared'}}] - {{/if}} - {{/eq}} - {{/unless}} - - {{else}} - {{t 'issues'}} - {{/if}} -

- - - -{{#if description}} - -{{/if}} diff --git a/server/sonar-web/src/main/hbs/issues-old/issues.hbs b/server/sonar-web/src/main/hbs/issues-old/issues.hbs deleted file mode 100644 index 50dba468b50..00000000000 --- a/server/sonar-web/src/main/hbs/issues-old/issues.hbs +++ /dev/null @@ -1,4 +0,0 @@ - - diff --git a/server/sonar-web/src/main/hbs/issues-old/no-issues.hbs b/server/sonar-web/src/main/hbs/issues-old/no-issues.hbs deleted file mode 100644 index 33ec1914d28..00000000000 --- a/server/sonar-web/src/main/hbs/issues-old/no-issues.hbs +++ /dev/null @@ -1 +0,0 @@ -{{t 'issue_filter.no_issues'}} diff --git a/server/sonar-web/src/main/js/issues-old/app.js b/server/sonar-web/src/main/js/issues-old/app.js deleted file mode 100644 index 2d45ffdce75..00000000000 --- a/server/sonar-web/src/main/js/issues-old/app.js +++ /dev/null @@ -1,551 +0,0 @@ -requirejs.config({ - baseUrl: baseUrl + '/js', - - paths: { - 'backbone': 'third-party/backbone', - 'backbone.marionette': 'third-party/backbone.marionette', - 'handlebars': 'third-party/handlebars' - }, - - shim: { - 'backbone.marionette': { - deps: ['backbone'], - exports: 'Marionette' - }, - 'backbone': { - exports: 'Backbone' - }, - 'handlebars': { - exports: 'Handlebars' - } - } - -}); - -requirejs( - [ - 'backbone', 'backbone.marionette', 'handlebars', - 'issues-old/extra', - 'navigator/filters/filter-bar', - 'navigator/filters/base-filters', - 'navigator/filters/checkbox-filters', - 'navigator/filters/choice-filters', - 'navigator/filters/ajax-select-filters', - 'navigator/filters/favorite-filters', - 'navigator/filters/range-filters', - 'navigator/filters/context-filters', - 'navigator/filters/read-only-filters', - 'navigator/filters/action-plan-filters', - 'navigator/filters/rule-filters', - - 'common/handlebars-extensions' - ], - function (Backbone, Marionette, Handlebars, Extra, FilterBar, BaseFilters, CheckboxFilterView, - ChoiceFilters, AjaxSelectFilters, FavoriteFilters, RangeFilters, ContextFilterView, - ReadOnlyFilterView, ActionPlanFilterView, RuleFilterView) { - Handlebars.registerPartial('detailInnerTemplate', jQuery('#issue-detail-inner-template').html()); - - var NavigatorApp = new Marionette.Application(); - - - NavigatorApp.addRegions({ - headerRegion: '.navigator-header', - filtersRegion: '.navigator-filters', - resultsRegion: '.navigator-results', - actionsRegion: '.navigator-actions', - detailsRegion: '.navigator-details' - }); - - - NavigatorApp.addInitializer(function () { - jQuery('html').addClass('navigator-page issues-page'); - - this.appState = new Extra.AppState(); - window.SS.appState = this.appState; - - this.state = new Backbone.Model({ - query: '' - }); - - this.issues = new Extra.Issues(); - this.issues.sorting = { - sort: 'UPDATE_DATE', - asc: false - }; - this.issuesPage = 1; - - this.filters = new BaseFilters.Filters(); - - this.favoriteFilter = new Extra.FavoriteFilter(); - this.issuesHeaderView = new Extra.IssuesHeaderView({ - app: this, - model: this.favoriteFilter - }); - this.headerRegion.show(this.issuesHeaderView); - - this.issuesView = new Extra.IssuesView({ - app: this, - collection: this.issues - }); - this.resultsRegion.show(this.issuesView); - - this.issuesActionsView = new Extra.IssuesActionsView({ - app: this, - collection: this.issues - }); - this.actionsRegion.show(this.issuesActionsView); - }); - - - NavigatorApp.addInitializer(function () { - this.projectFilter = new BaseFilters.Filter({ - name: window.SS.phrases.project, - property: 'componentRoots', - type: AjaxSelectFilters.ProjectFilterView, - enabled: true, - optional: false - }); - this.filters.add(this.projectFilter); - - this.assigneeChoices = { - '!assigned': window.SS.phrases.unassigned - }; - this.reporterChoices = {}; - if (window.SS.currentUser) { - this.assigneeChoices[window.SS.currentUser] = window.SS.currentUserName + ' (' + window.SS.currentUser + ')'; - this.reporterChoices[window.SS.currentUser] = window.SS.currentUserName + ' (' + window.SS.currentUser + ')'; - } - }); - - - NavigatorApp.addInitializer(function () { - this.filters.add([ - new BaseFilters.Filter({ - name: window.SS.phrases.severity, - property: 'severities', - type: ChoiceFilters.ChoiceFilterView, - enabled: true, - optional: false, - choices: { - 'BLOCKER': window.SS.phrases.severities.BLOCKER, - 'CRITICAL': window.SS.phrases.severities.CRITICAL, - 'MAJOR': window.SS.phrases.severities.MAJOR, - 'MINOR': window.SS.phrases.severities.MINOR, - 'INFO': window.SS.phrases.severities.INFO - }, - choiceIcons: { - 'BLOCKER': 'severity-blocker', - 'CRITICAL': 'severity-critical', - 'MAJOR': 'severity-major', - 'MINOR': 'severity-minor', - 'INFO': 'severity-info' - } - }) - ]); - }); - - - NavigatorApp.addInitializer(function () { - this.filters.add([ - new BaseFilters.Filter({ - name: window.SS.phrases.status, - property: 'statuses', - type: ChoiceFilters.ChoiceFilterView, - enabled: true, - optional: false, - choices: { - 'OPEN': window.SS.phrases.statuses.OPEN, - 'CONFIRMED': window.SS.phrases.statuses.CONFIRMED, - 'REOPENED': window.SS.phrases.statuses.REOPENED, - 'RESOLVED': window.SS.phrases.statuses.RESOLVED, - 'CLOSED': window.SS.phrases.statuses.CLOSED - }, - choiceIcons: { - 'OPEN': 'status-open', - 'CONFIRMED': 'status-confirmed', - 'REOPENED': 'status-reopened', - 'RESOLVED': 'status-resolved', - 'CLOSED': 'status-closed' - } - }) - ]); - }); - - - NavigatorApp.addInitializer(function () { - this.filters.add([ - new BaseFilters.Filter({ - name: window.SS.phrases.assignee, - property: 'assignees', - type: AjaxSelectFilters.AssigneeFilterView, - enabled: true, - optional: false, - choices: this.assigneeChoices - }) - ]); - }); - - - NavigatorApp.addInitializer(function () { - this.filters.add([ - new BaseFilters.Filter({ - name: window.SS.phrases.resolution, - property: 'resolutions', - type: ChoiceFilters.ChoiceFilterView, - enabled: true, - optional: false, - choices: { - '!resolved=true': window.SS.phrases.resolutions.RESOLVED, - '!resolved=false': window.SS.phrases.resolutions.UNRESOLVED, - 'FALSE-POSITIVE': window.SS.phrases.resolutions['FALSE-POSITIVE'], - 'FIXED': window.SS.phrases.resolutions.FIXED, - 'REMOVED': window.SS.phrases.resolutions.REMOVED - } - }) - ]); - }); - - - NavigatorApp.addInitializer(function () { - this.filters.add([ - new BaseFilters.Filter({ - name: window.SS.phrases.actionPlan, - property: 'actionPlans', - type: ActionPlanFilterView, - enabled: false, - optional: true, - projectFilter: this.projectFilter, - choices: { - '!planned': window.SS.phrases.unplanned - } - }) - ]); - }); - - - NavigatorApp.addInitializer(function () { - this.filters.add([ - new BaseFilters.Filter({ - name: window.SS.phrases.created, - propertyFrom: 'createdAfter', - propertyTo: 'createdBefore', - type: RangeFilters.DateRangeFilterView, - enabled: false, - optional: true - }) - ]); - }); - - - NavigatorApp.addInitializer(function () { - this.filters.add([ - new BaseFilters.Filter({ - name: window.SS.phrases.createdAt, - property: 'createdAt', - type: ReadOnlyFilterView, - enabled: false, - optional: true, - format: function(value) { return moment(value).format('YYYY-MM-DD HH:mm'); } - }) - ]); - }); - - - NavigatorApp.addInitializer(function () { - this.filters.add([ - new BaseFilters.Filter({ - name: window.SS.phrases.language, - property: 'languages', - type: ChoiceFilters.ChoiceFilterView, - enabled: false, - optional: true, - choices: window.SS.languages - }) - ]); - }); - - - NavigatorApp.addInitializer(function () { - this.filters.add([ - new BaseFilters.Filter({ - name: window.SS.phrases.reporter, - property: 'reporters', - type: AjaxSelectFilters.ReporterFilterView, - enabled: false, - optional: true, - choices: this.reporterChoices - }) - ]); - }); - - - NavigatorApp.addInitializer(function () { - this.filters.add([ - new BaseFilters.Filter({ - name: window.SS.phrases.rule, - property: 'rules', - type: RuleFilterView, - enabled: false, - optional: true - }) - ]); - }); - - - NavigatorApp.addInitializer(function () { - this.filterBarView = new Extra.IssuesFilterBarView({ - app: this, - collection: this.filters, - extra: { - sort: '', - asc: false - } - }); - - this.filtersRegion.show(this.filterBarView); - }); - - - NavigatorApp.addInitializer(function () { - var app = this; - - jQuery.when(this.appState.fetch()).done(function () { - - if (app.appState.get('favorites')) { - app.filters.unshift( - new BaseFilters.Filter({ - type: Extra.IssuesFavoriteFilterView, - enabled: true, - optional: false, - choices: app.appState.get('favorites'), - manageUrl: '/issues/manage' - }) - ); - } - - app.router = new Extra.IssuesRouter({ - app: app - }); - Backbone.history.start(); - - app.favoriteFilter.on('change:query', function (model, query) { - app.router.navigate(query, { trigger: true, replace: true }); - }); - }); - }); - - - NavigatorApp.addInitializer(function () { - var app = this; - - window.onBulkIssues = function () { - app.fetchFirstPage(); - jQuery('#modal').dialog('close'); - }; - - window.onSaveAs = window.onCopy = window.onEdit = function (id) { - jQuery('#modal').dialog('close'); - app.appState.fetch(); - - var filter = new Extra.FavoriteFilter({ id: id }); - filter.fetch({ - success: function () { - app.state.set('search', false); - app.favoriteFilter.set(filter.toJSON()); - app.fetchFirstPage(); - } - }); - }; - }); - - - NavigatorApp.addInitializer(function () { - this.onResize = function() { - var footerEl = jQuery('#footer'), - footerHeight = footerEl.outerHeight(true); - - var resultsEl = jQuery('.navigator-results'), - resultsHeight = jQuery(window).height() - resultsEl.offset().top - - parseInt(resultsEl.css('margin-bottom'), 10) - footerHeight; - resultsEl.height(resultsHeight); - - var detailsEl = jQuery('.navigator-details'), - detailsWidth = jQuery(window).width() - detailsEl.offset().left - - parseInt(detailsEl.css('margin-right'), 10) - 20, - detailsHeight = jQuery(window).height() - detailsEl.offset().top - - parseInt(detailsEl.css('margin-bottom'), 10) - footerHeight; - detailsEl.width(detailsWidth).height(detailsHeight); - - var resultsLoadingEl = jQuery('.navigator-results-loader'); - resultsLoadingEl - .css('top', resultsEl.offset().top) - .css('left', resultsEl.offset().left) - .width(resultsEl.width() + 10) - .height(resultsEl.height() + 10); - }; - jQuery(window).on('resize', this.onResize); - this.onResize(); - }); - - - NavigatorApp.addInitializer(function () { - var that = this; - jQuery('body') - .on('mousemove', function (e) { - that.processResize(e); - }) - .on('mouseup', function () { - that.stopResize(); - }); - jQuery('.navigator-resizer').on('mousedown', function (e) { - that.startResize(e); - }); - - var resultsWidth = localStorage.getItem('issuesResultsWidth'); - if (resultsWidth) { - jQuery('.navigator-results').width(+resultsWidth); - jQuery('.navigator-side').width(+resultsWidth + 20); - this.onResize(); - } - }); - - - NavigatorApp.startResize = function (e) { - this.isResize = true; - this.originalWidth = jQuery('.navigator-results').width(); - this.x = e.clientX; - jQuery('html').attr('unselectable', 'on').css('user-select', 'none').on('selectstart', false); - }; - - - NavigatorApp.processResize = function (e) { - if (this.isResize) { - var delta = e.clientX - this.x; - jQuery('.navigator-results').width(this.originalWidth + delta); - jQuery('.navigator-side').width(this.originalWidth + 20 + delta); - localStorage.setItem('issuesResultsWidth', jQuery('.navigator-results').width()); - this.onResize(); - } - }; - - - NavigatorApp.stopResize = function() { - if (this.isResize) { - jQuery('html').attr('unselectable', 'off').css('user-select', 'text').off('selectstart'); - } - this.isResize = false; - }; - - - NavigatorApp.getQuery = function (withoutId) { - if (this.filterBarView) { - var query = this.filterBarView.getQuery(); - if (!withoutId && this.favoriteFilter.id) { - query['id'] = this.favoriteFilter.id; - } - return query; - } else { - return {}; - } - }; - - - NavigatorApp.storeQuery = function (query, sorting) { - if (sorting) { - _.extend(query, { - sort: sorting.sort, - asc: '' + sorting.asc - }); - } - - var queryString = _.map(query,function (v, k) { - return [k, encodeURIComponent(v)].join('='); - }).join('|'); - this.router.navigate(queryString, { replace: true }); - }; - - - NavigatorApp.restoreSorting = function (query) { - var sort = _.findWhere(query, { key: 'sort' }), - asc = _.findWhere(query, { key: 'asc' }); - - if (sort && asc) { - this.issues.sorting = { - sort: sort.value, - sortText: jQuery('[data-sort=' + sort.value + ']:first').text(), - asc: asc.value === 'true' - }; - } - }; - - - NavigatorApp.fetchIssues = function (firstPage) { - var query = this.getQuery(), - fetchQuery = _.extend({ - pageIndex: this.issuesPage - }, query); - - // SONAR-5086 - if (fetchQuery['actionPlans'] && fetchQuery['componentRoots']) { - delete fetchQuery['componentRoots']; - } - - if (this.issues.sorting) { - _.extend(fetchQuery, { - sort: this.issues.sorting.sort, - asc: this.issues.sorting.asc - }); - } - - _.extend(fetchQuery, { - hideRules: true - }); - - if (this.favoriteFilter.id) { - query['id'] = this.favoriteFilter.id; - fetchQuery['id'] = this.favoriteFilter.id; - } - - this.storeQuery(query, this.issues.sorting); - - var that = this; - jQuery('.navigator-results').addClass('fetching'); - if (firstPage) { - this.issues.fetch({ - data: fetchQuery, - success: function () { - jQuery('.navigator-results').removeClass('fetching'); - that.issuesView.selectFirst(); - } - }); - this.detailsRegion.reset(); - } else { - this.issues.fetch({ - data: fetchQuery, - remove: false, - success: function () { - jQuery('.navigator-results').removeClass('fetching'); - } - }); - } - }; - - - NavigatorApp.fetchFirstPage = function () { - this.issuesPage = 1; - this.fetchIssues(true); - }; - - - NavigatorApp.fetchNextPage = function () { - if (this.issuesPage < this.issues.paging.pages) { - this.issuesPage++; - this.fetchIssues(false); - } - }; - - window.requestMessages().done(function () { - NavigatorApp.start(); - }); - - }); diff --git a/server/sonar-web/src/main/js/issues-old/extra.js b/server/sonar-web/src/main/js/issues-old/extra.js deleted file mode 100644 index ba1c35a7642..00000000000 --- a/server/sonar-web/src/main/js/issues-old/extra.js +++ /dev/null @@ -1,673 +0,0 @@ -define( - [ - 'backbone', - 'backbone.marionette', - 'navigator/filters/filter-bar', - 'navigator/filters/base-filters', - 'navigator/filters/favorite-filters', - 'navigator/filters/read-only-filters', - 'component-viewer/main', - 'templates/issues-old' - ], - function (Backbone, Marionette, FilterBarView, BaseFilters, FavoriteFiltersModule, ReadOnlyFilterView, - ComponentViewer, Templates) { - - var AppState = Backbone.Model.extend({ - - defaults: { - canManageFilters: false, - canBulkChange: false - }, - - - url: function () { - return baseUrl + '/api/issue_filters/app'; - } - - }); - - - var Issue = Backbone.Model.extend({ - - url: function () { - return baseUrl + '/api/issues/show?key=' + this.get('key'); - }, - - - parse: function (r) { - return r.issue ? r.issue : r; - } - - }); - - - var Issues = Backbone.Collection.extend({ - model: Issue, - - - url: function () { - return baseUrl + '/api/issues/search'; - }, - - - parse: function (r) { - - function find(source, key, keyField) { - var searchDict = {}; - searchDict[keyField || 'key'] = key; - return _.findWhere(source, searchDict) || key; - } - - this.paging = r.paging; - this.maxResultsReached = r.maxResultsReached; - - return r.issues.map(function (issue) { - var component = find(r.components, issue.component), - project = find(r.projects, issue.project), - rule = find(r.rules, issue.rule); - - if (component) { - _.extend(issue, { - componentLongName: component.longName, - componentQualifier: component.qualifier - }); - } - - if (project) { - _.extend(issue, { - projectLongName: project.longName - }); - } - - if (rule) { - _.extend(issue, { - ruleName: rule.name - }); - } - - return issue; - }); - - } - }); - - - var FavoriteFilter = Backbone.Model.extend({ - - url: function () { - return baseUrl + '/api/issue_filters/show/' + this.get('id'); - }, - - - parse: function (r) { - return r.filter ? r.filter : r; - } - }); - - - var FavoriteFilters = Backbone.Collection.extend({ - model: FavoriteFilter, - - - url: function () { - return baseUrl + '/api/issue_filters/favorites'; - }, - - - parse: function (r) { - return r.favoriteFilters; - } - }); - - - var IssueView = Marionette.ItemView.extend({ - template: Templates['issue-detail'], - tagName: 'li', - - - ui: { - component: '.component' - }, - - - events: { - 'click': 'showDetails' - }, - - - modelEvents: { - 'change': 'render' - }, - - - showDetails: function () { - key.setScope('list'); - this.options.issuesView.selected = this.$el.parent().children().index(this.$el); - - this.options.issuesView.selectIssue(this.$el, false); - - var that = this, - app = this.options.app, - settings = localStorage.getItem('componentViewerSettings'), - navigatorDetails = jQuery('.navigator-details'), - componentViewer = new ComponentViewer({ - settings: settings, - shouldStoreSettings: true, - elementToFit: navigatorDetails, - component: { - project: this.model.get('project'), - projectLongName: this.model.get('projectLongName') - } - }), - showCallback = function () { - navigatorDetails.removeClass('navigator-fetching'); - app.detailsRegion.show(componentViewer); - componentViewer.settings.set('issues', false); - componentViewer.open(that.model.get('component')); - componentViewer.on('loaded', function() { - componentViewer.off('loaded'); - componentViewer.showIssues(false, that.model.toJSON()); - }); - }; - - navigatorDetails.empty().addClass('navigator-fetching'); - var issueKey = this.model.get('key'); - this.model.clear({ silent: true }); - this.model.set({ key: issueKey }, { silent: true }); - jQuery.when(this.model.fetch()).done(showCallback); - }, - - - serializeData: function () { - var projectFilter = this.options.app.filters.findWhere({ property: 'componentRoots' }), - singleProject = _.isArray(projectFilter.get('value')) && projectFilter.get('value').length === 1; - - return _.extend({ - singleProject: singleProject - }, this.model.toJSON()); - } - }); - - - var NoIssuesView = Marionette.ItemView.extend({ - tagName: 'li', - className: 'navigator-results-no-results', - template: Templates['no-issues'] - }); - - - var IssuesView = Marionette.CompositeView.extend({ - template: Templates['issues'], - itemViewContainer: '.navigator-results-list', - itemView: IssueView, - emptyView: NoIssuesView, - - - initialize: function() { - var openIssue = function(el) { - el.click(); - }; - this.openIssue = _.debounce(openIssue, 300); - }, - - - itemViewOptions: function () { - return { - issuesView: this, - app: this.options.app - }; - }, - - - selectIssue: function(el, open) { - this.$('.active').removeClass('active'); - el.addClass('active'); - if (open) { - this.openIssue(el); - } - }, - - - selectFirst: function() { - this.selected = -1; - this.selectNext(); - }, - - - selectNext: function() { - if (this.selected < this.collection.length - 1) { - this.selected++; - var child = this.$(this.itemViewContainer).children().eq(this.selected), - container = jQuery('.navigator-results'), - containerHeight = container.height(), - bottom = child.position().top + child.outerHeight(); - if (bottom > containerHeight) { - container.scrollTop(container.scrollTop() - containerHeight + bottom); - } - this.selectIssue(child, true); - } - }, - - - selectPrev: function() { - if (this.selected > 0) { - this.selected--; - var child = this.$(this.itemViewContainer).children().eq(this.selected), - container = jQuery('.navigator-results'), - top = child.position().top; - if (top < 0) { - container.scrollTop(container.scrollTop() + top); - } - this.selectIssue(child, true); - } - }, - - - onRender: function () { - var that = this, - $scrollEl = jQuery('.navigator-results'), - scrollEl = $scrollEl.get(0), - onScroll = function () { - if (scrollEl.offsetHeight + scrollEl.scrollTop >= scrollEl.scrollHeight) { - that.options.app.fetchNextPage(); - } - }, - throttledScroll = _.throttle(onScroll, 300); - $scrollEl.off('scroll').on('scroll', throttledScroll); - this.bindShortcuts(); - }, - - - onAfterItemAdded: function () { - var showLimitNotes = this.collection.maxResultsReached != null && this.collection.maxResultsReached; - jQuery('.navigator').toggleClass('navigator-with-notes', showLimitNotes); - jQuery('.navigator-notes').toggle(showLimitNotes); - }, - - - close: function () { - var scrollEl = jQuery('.navigator-results'); - scrollEl.off('scroll'); - Marionette.CollectionView.prototype.close.call(this); - }, - - - bindShortcuts: function () { - var that = this; - key('up', 'list', function() { - that.selectPrev(); - }); - key('down', 'list', function() { - that.selectNext(); - }); - } - - }); - - - var IssuesActionsView = Marionette.ItemView.extend({ - template: Templates['issues-actions'], - - - collectionEvents: { - 'sync': 'render' - }, - - - events: { - 'click .navigator-actions-order': 'toggleOrderChoices', - 'click .navigator-actions-order-choices': 'sort', - 'click .navigator-actions-bulk': 'bulkChange' - }, - - - ui: { - orderChoices: '.navigator-actions-order-choices' - }, - - - onRender: function () { - if (!this.collection.sorting.sortText) { - this.collection.sorting.sortText = this.$('[data-sort=' + this.collection.sorting.sort + ']:first').text(); - this.$('.navigator-actions-ordered-by').text(this.collection.sorting.sortText); - } - }, - - - toggleOrderChoices: function (e) { - e.stopPropagation(); - this.ui.orderChoices.toggleClass('open'); - if (this.ui.orderChoices.is('.open')) { - var that = this; - jQuery('body').on('click.issues_actions', function () { - that.ui.orderChoices.removeClass('open'); - }); - } - }, - - - sort: function (e) { - e.stopPropagation(); - this.ui.orderChoices.removeClass('open'); - jQuery('body').off('click.issues_actions'); - var el = jQuery(e.target), - sort = el.data('sort'), - asc = el.data('asc'); - - if (sort != null && asc != null) { - this.collection.sorting = { - sort: sort, - sortText: el.text(), - asc: asc - }; - this.options.app.fetchFirstPage(); - } - }, - - - bulkChange: function(e) { - e.preventDefault(); - openModalWindow(jQuery(e.currentTarget).prop('href'), {}); - }, - - - serializeData: function () { - var data = Marionette.ItemView.prototype.serializeData.apply(this, arguments), - bulkChangeData = this.options.app.getQuery(true), - bulkChangeQuery = _.map(bulkChangeData,function (v, k) { - return [k, encodeURIComponent(v)].join('='); - }).join('&'); - return _.extend(data || {}, { - paging: this.collection.paging, - sorting: this.collection.sorting, - maxResultsReached: this.collection.maxResultsReached, - appState: window.SS.appState.toJSON(), - bulkChangeUrl: baseUrl + '/issues/bulk_change_form', - query: bulkChangeQuery - }); - } - }); - - - - var IssuesDetailsFavoriteFilterView = FavoriteFiltersModule.DetailsFavoriteFilterView.extend({ - template: Templates['issues-details-favorite-filter'], - - - applyFavorite: function (e) { - var id = $j(e.target).data('id'), - filter = new FavoriteFilter({ id: id }), - app = this.options.filterView.options.app; - - filter.fetch({ - success: function () { - app.state.set('search', false); - app.favoriteFilter.clear({ silent: true }); - app.favoriteFilter.set(filter.toJSON()); - } - }); - - this.options.filterView.hideDetails(); - }, - - - serializeData: function () { - return _.extend({}, this.model.toJSON(), { - items: _.sortBy(this.model.get('choices'), function(item) { - return item.name.toLowerCase(); - }) - }); - } - }); - - - - var IssuesFavoriteFilterView = FavoriteFiltersModule.FavoriteFilterView.extend({ - - initialize: function () { - BaseFilters.BaseFilterView.prototype.initialize.call(this, { - detailsView: IssuesDetailsFavoriteFilterView - }); - - this.listenTo(window.SS.appState, 'change:favorites', this.updateFavorites); - }, - - - updateFavorites: function () { - this.model.set('choices', window.SS.appState.get('favorites')); - this.render(); - } - }); - - - - var IssuesFilterBarView = FilterBarView.extend({ - template: Templates['filter-bar'], - - collectionEvents: { - 'change:enabled': 'changeEnabled' - }, - - - events: { - 'click .navigator-filter-submit': 'search' - }, - - - getQuery: function () { - var query = {}; - this.collection.each(function (filter) { - _.extend(query, filter.view.formatValue()); - }); - return query; - }, - - - onAfterItemAdded: function (itemView) { - if (itemView.model.get('type') === FavoriteFiltersModule.FavoriteFilterView || - itemView.model.get('type') === IssuesFavoriteFilterView) { - jQuery('.navigator-header').addClass('navigator-header-favorite'); - } - }, - - - addMoreCriteriaFilter: function() { - var readOnlyFilters = this.collection.where({ type: ReadOnlyFilterView }), - disabledFilters = _.difference(this.collection.where({ enabled: false }), readOnlyFilters); - this.moreCriteriaFilter = new BaseFilters.Filter({ - type: require('navigator/filters/more-criteria-filters').MoreCriteriaFilterView, - enabled: true, - optional: false, - filters: disabledFilters - }); - this.collection.add(this.moreCriteriaFilter); - }, - - - changeEnabled: function () { - var disabledFilters = _.reject(this.collection.where({ enabled: false }), function (filter) { - return filter.get('type') === - require('navigator/filters/more-criteria-filters').MoreCriteriaFilterView || - filter.get('type') === ReadOnlyFilterView; - }); - - if (disabledFilters.length === 0) { - this.moreCriteriaFilter.set({ enabled: false }, { silent: true }); - } else { - this.moreCriteriaFilter.set({ enabled: true }, { silent: true }); - } - this.moreCriteriaFilter.set({ filters: disabledFilters }, { silent: true }); - this.moreCriteriaFilter.trigger('change:filters'); - }, - - - search: function () { - this.$('.navigator-filter-submit').blur(); - this.options.app.state.set({ - query: this.options.app.getQuery(), - search: true - }); - this.options.app.fetchFirstPage(); - }, - - - fetchNextPage: function () { - this.options.app.fetchNextPage(); - } - - }); - - - var IssuesHeaderView = Marionette.ItemView.extend({ - template: Templates['issues-header'], - - - modelEvents: { - 'change': 'render' - }, - - - events: { - 'click #issues-new-search': 'newSearch', - 'click #issues-filter-save-as': 'saveAs', - 'click #issues-filter-save': 'save', - 'click #issues-filter-copy': 'copy', - 'click #issues-filter-edit': 'edit' - }, - - - initialize: function (options) { - Marionette.ItemView.prototype.initialize.apply(this, arguments); - this.listenTo(options.app.state, 'change', this.render); - }, - - - newSearch: function () { - this.model.clear(); - this.options.app.router.navigate('resolved=false', { trigger: true, replace: true }); - }, - - - saveAs: function () { - var url = baseUrl + '/issues/save_as_form?' + (Backbone.history.fragment || '').replace(/\|/g, '&'); - openModalWindow(url, {}); - }, - - - save: function () { - var that = this; - url = baseUrl + '/issues/save/' + this.model.id + '?' + (Backbone.history.fragment || '').replace(/\|/g, '&'); - jQuery.ajax({ - type: 'POST', - url: url - }).done(function () { - that.options.app.state.set('search', false); - }); - }, - - - copy: function () { - var url = baseUrl + '/issues/copy_form/' + this.model.id; - openModalWindow(url, {}); - }, - - - edit: function () { - var url = baseUrl + '/issues/edit_form/' + this.model.id; - openModalWindow(url, {}); - }, - - - serializeData: function () { - return _.extend({ - canSave: this.model.id && this.options.app.state.get('search'), - appState: window.SS.appState.toJSON(), - currentUser: window.SS.currentUser - }, this.model.toJSON()); - } - - }); - - - - var IssuesRouter = Backbone.Router.extend({ - - routes: { - '': 'emptyQuery', - ':query': 'index' - }, - - - initialize: function (options) { - this.app = options.app; - }, - - - parseQuery: function (query, separator) { - return (query || '').split(separator || '|').map(function (t) { - var tokens = t.split('='); - return { - key: tokens[0], - value: decodeURIComponent(tokens[1]) - }; - }); - }, - - - emptyQuery: function () { - this.navigate('resolved=false', { trigger: true, replace: true }); - }, - - - index: function (query) { - var params = this.parseQuery(query); - - var idObj = _.findWhere(params, { key: 'id' }); - if (idObj) { - var that = this, - f = this.app.favoriteFilter; - this.app.canSave = false; - f.set('id', idObj.value); - f.fetch({ - success: function () { - var parsedFilter = that.parseQuery(f.get('query')); - params = _.extend({}, params); - params = _.extent(params, parsedFilter); - that.loadResults(params); - } - }); - } else { - this.loadResults(params); - } - }, - - - loadResults: function (params) { - this.app.filterBarView.restoreFromQuery(params); - this.app.restoreSorting(params); - this.app.fetchFirstPage(); - } - - }); - - - /* - * Export public classes - */ - - return { - AppState: AppState, - Issue: Issue, - Issues: Issues, - FavoriteFilter: FavoriteFilter, - FavoriteFilters: FavoriteFilters, - IssueView: IssueView, - IssuesView: IssuesView, - IssuesActionsView: IssuesActionsView, - IssuesFilterBarView: IssuesFilterBarView, - IssuesHeaderView: IssuesHeaderView, - IssuesFavoriteFilterView: IssuesFavoriteFilterView, - IssuesRouter: IssuesRouter - }; - - }); diff --git a/server/sonar-web/src/main/webapp/WEB-INF/app/views/layouts/_layout.html.erb b/server/sonar-web/src/main/webapp/WEB-INF/app/views/layouts/_layout.html.erb index ecf608e904f..fd4844050c6 100644 --- a/server/sonar-web/src/main/webapp/WEB-INF/app/views/layouts/_layout.html.erb +++ b/server/sonar-web/src/main/webapp/WEB-INF/app/views/layouts/_layout.html.erb @@ -21,9 +21,6 @@
  • <%= message('issues.page') -%>
  • -
  • - Old Issues -
  • <%= message('coding_rules.page') -%>