diff options
author | Stas Vilchik <vilchiks@gmail.com> | 2014-09-24 12:27:41 +0600 |
---|---|---|
committer | Stas Vilchik <vilchiks@gmail.com> | 2014-09-24 12:27:48 +0600 |
commit | ad23fc889606b8d9e5c08ed5c165928e876f6384 (patch) | |
tree | 1dcfa971ba575e52e0e8be9d5860969226cbdf88 | |
parent | 1540fa46087dd1b5d26bc660a1989834b7def20f (diff) | |
download | sonarqube-ad23fc889606b8d9e5c08ed5c165928e876f6384.tar.gz sonarqube-ad23fc889606b8d9e5c08ed5c165928e876f6384.zip |
SONAR-5646 Support of project-level widgets
7 files changed, 38 insertions, 20 deletions
diff --git a/server/sonar-web/src/main/es6/dashboard/app.js b/server/sonar-web/src/main/es6/dashboard/app.js index 7239062ac5a..323a0b9495a 100644 --- a/server/sonar-web/src/main/es6/dashboard/app.js +++ b/server/sonar-web/src/main/es6/dashboard/app.js @@ -34,17 +34,21 @@ requirejs([ var App = new Marionette.Application(), $ = jQuery; + App.dashboard = window.did; + App.resource = window.resource; + App.addInitializer(function () { this.widgetsView = new WidgetsView({ collection: this.widgets, dashboard: this.dashboard, - el: $('#dashboard') + el: $('#dashboard'), + app: this }); this.widgetsView.render(); }); var requestDetails = function () { - return $.get(`${baseUrl}/api/dashboards/details`, { did: window.did }, function (data) { + return $.get(`${baseUrl}/api/dashboards/details`, { did: App.dashboard }, function (data) { console.log(JSON.stringify(data)); App.dashboard = new Backbone.Model(_.omit(data, 'widgets')); App.widgets = new Widgets(data.widgets); diff --git a/server/sonar-web/src/main/es6/dashboard/collections/widgets.js b/server/sonar-web/src/main/es6/dashboard/collections/widgets.js index 03826f31482..255ad8b4e1e 100644 --- a/server/sonar-web/src/main/es6/dashboard/collections/widgets.js +++ b/server/sonar-web/src/main/es6/dashboard/collections/widgets.js @@ -6,7 +6,11 @@ define([ Widget) { return Backbone.Collection.extend({ - model: Widget + model: Widget, + + comparator: function(model) { + return model.get('layout').row; + } }); }); diff --git a/server/sonar-web/src/main/es6/dashboard/mockjax.js b/server/sonar-web/src/main/es6/dashboard/mockjax.js index b3cce8f4d42..04b30fbec36 100644 --- a/server/sonar-web/src/main/es6/dashboard/mockjax.js +++ b/server/sonar-web/src/main/es6/dashboard/mockjax.js @@ -32,6 +32,14 @@ define(['third-party/jquery.mockjax'], function () { key: 'my_reviews', props: [], layout: { + column: 1, + row: 2 + } + }, + { + key: 'hotspot_most_violated_rules', + props: [], + layout: { column: 2, row: 1 } diff --git a/server/sonar-web/src/main/es6/dashboard/views/widget-view.js b/server/sonar-web/src/main/es6/dashboard/views/widget-view.js index 0507d5933b4..9aaa53b9359 100644 --- a/server/sonar-web/src/main/es6/dashboard/views/widget-view.js +++ b/server/sonar-web/src/main/es6/dashboard/views/widget-view.js @@ -13,27 +13,24 @@ define([ } requestContent() { - var props = this.getWidgetProps(); - $.get(`${baseUrl}/widget/show?id=${this.model.id}&${props}`, (html) => { + var payload = { id: this.model.id }; + if (this.options.app.resource) { + payload.resource = this.options.app.resource; + } + _.extend(payload, this.getWidgetProps()); + $.get(`${baseUrl}/widget/show`, payload, (html) => { this.model.set('html', html); this.render(); }); } getWidgetProps() { - var props = this.model.get('props') - .map(function (prop) { - return `${prop.key}=${encodeURIComponent(prop.value)}`; - }) - .join('&'); - return props; - } - - serializeData() { - var props = this.getWidgetProps(); - return _.extend(super.serializeData(), { - url: `${baseUrl}/widget?id=${this.model.id}&${props}` + var props = this.model.get('props'), + r = {}; + props.forEach(function (prop) { + r[prop.key] = prop.value; }); + return r; } } diff --git a/server/sonar-web/src/main/es6/dashboard/views/widgets-view.js b/server/sonar-web/src/main/es6/dashboard/views/widgets-view.js index ce8692d38a7..8df38b79f8c 100644 --- a/server/sonar-web/src/main/es6/dashboard/views/widgets-view.js +++ b/server/sonar-web/src/main/es6/dashboard/views/widgets-view.js @@ -13,6 +13,10 @@ define([ $container.eq(column).append(itemView.el); } + itemViewOptions() { + return { app: this.options.app }; + } + serializeData() { return _.extend(super.serializeData(), { dashboard: this.options.dashboard.toJSON(), diff --git a/server/sonar-web/src/main/webapp/WEB-INF/app/views/dashboard2/index.html.erb b/server/sonar-web/src/main/webapp/WEB-INF/app/views/dashboard2/index.html.erb index 8dd759d6cf1..57b4def8b11 100644 --- a/server/sonar-web/src/main/webapp/WEB-INF/app/views/dashboard2/index.html.erb +++ b/server/sonar-web/src/main/webapp/WEB-INF/app/views/dashboard2/index.html.erb @@ -8,5 +8,8 @@ <script> window.did = '<%= @dashboard.id -%>'; + <% if @resource %> + window.resource = '<%= @resource.key -%>'; + <% end %> jQuery('html').addClass('dashboard-page'); </script> diff --git a/server/sonar-web/src/main/webapp/WEB-INF/app/views/measures/_display_list.html.erb b/server/sonar-web/src/main/webapp/WEB-INF/app/views/measures/_display_list.html.erb index 3dae12f9a0e..91ecee1c111 100644 --- a/server/sonar-web/src/main/webapp/WEB-INF/app/views/measures/_display_list.html.erb +++ b/server/sonar-web/src/main/webapp/WEB-INF/app/views/measures/_display_list.html.erb @@ -1,5 +1,4 @@ <div id="measure_filter_list<%= widget_id -%>"> -<% content_for :script do %> <script> var filterCriteria<%= widget_id -%> = <%= json_escape(filter.criteria.to_json) -%>; @@ -20,9 +19,8 @@ return false; } </script> -<% - end + <% display_favourites = logged_in? colspan = filter.display.columns.size colspan += 1 if display_favourites |