diff options
author | Simon Brandhof <simon.brandhof@sonarsource.com> | 2014-07-11 17:10:13 +0200 |
---|---|---|
committer | Simon Brandhof <simon.brandhof@sonarsource.com> | 2014-07-11 17:10:13 +0200 |
commit | 1de4e949ef73b086e5ff5cef2b39fdb3c3553d41 (patch) | |
tree | 5f53797f1a21cc7854db1db5f4a4010322e8db45 /server/sonar-web/src/main/js/issues/app.js | |
parent | d67483d12ef1768adda8f87db349915891f3b19a (diff) | |
download | sonarqube-1de4e949ef73b086e5ff5cef2b39fdb3c3553d41.tar.gz sonarqube-1de4e949ef73b086e5ff5cef2b39fdb3c3553d41.zip |
SONAR-5408 extract sonar-web from sonar-server
Diffstat (limited to 'server/sonar-web/src/main/js/issues/app.js')
-rw-r--r-- | server/sonar-web/src/main/js/issues/app.js | 493 |
1 files changed, 493 insertions, 0 deletions
diff --git a/server/sonar-web/src/main/js/issues/app.js b/server/sonar-web/src/main/js/issues/app.js new file mode 100644 index 00000000000..31715516a2d --- /dev/null +++ b/server/sonar-web/src/main/js/issues/app.js @@ -0,0 +1,493 @@ +requirejs.config({ + baseUrl: baseUrl + '/js', + + paths: { + 'backbone': 'third-party/backbone', + 'backbone.marionette': 'third-party/backbone.marionette', + 'handlebars': 'third-party/handlebars', + 'moment': 'third-party/moment' + }, + + shim: { + 'backbone.marionette': { + deps: ['backbone'], + exports: 'Marionette' + }, + 'backbone': { + exports: 'Backbone' + }, + 'handlebars': { + exports: 'Handlebars' + }, + 'moment': { + exports: 'moment' + } + } + +}); + +requirejs( + [ + 'backbone', 'backbone.marionette', 'handlebars', 'moment', + 'issues/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, moment, 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 () { + var projectFilter = new BaseFilters.Filter({ + name: window.SS.phrases.project, + property: 'componentRoots', + type: AjaxSelectFilters.ProjectFilterView, + enabled: true, + optional: false + }); + this.filters.add(projectFilter); + + 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' + } + }), + + 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' + } + }), + + new BaseFilters.Filter({ + name: window.SS.phrases.assignee, + property: 'assignees', + type: AjaxSelectFilters.AssigneeFilterView, + enabled: true, + optional: false, + choices: { + '!assigned': window.SS.phrases.unassigned + } + }), + + 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 + } + }), + + new BaseFilters.Filter({ + name: window.SS.phrases.actionPlan, + property: 'actionPlans', + type: ActionPlanFilterView, + enabled: false, + optional: true, + projectFilter: projectFilter, + choices: { + '!planned': window.SS.phrases.unplanned + } + }), + + new BaseFilters.Filter({ + name: window.SS.phrases.created, + propertyFrom: 'createdAfter', + propertyTo: 'createdBefore', + type: RangeFilters.DateRangeFilterView, + enabled: false, + optional: true + }), + + 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'); } + }), + + new BaseFilters.Filter({ + name: window.SS.phrases.language, + property: 'languages', + type: ChoiceFilters.ChoiceFilterView, + enabled: false, + optional: true, + choices: window.SS.languages + }), + + new BaseFilters.Filter({ + name: window.SS.phrases.reporter, + property: 'reporters', + type: AjaxSelectFilters.ReporterFilterView, + enabled: false, + optional: true + }), + + new BaseFilters.Filter({ + name: window.SS.phrases.rule, + property: 'rules', + type: RuleFilterView, + enabled: false, + optional: true + }) + ]); + + + 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), + 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) { + var query = this.filterBarView.getQuery(); + if (!withoutId && this.favoriteFilter.id) { + query['id'] = this.favoriteFilter.id; + } + return query; + }; + + + 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(); + }); + + }); |