From ad23fc889606b8d9e5c08ed5c165928e876f6384 Mon Sep 17 00:00:00 2001 From: Stas Vilchik Date: Wed, 24 Sep 2014 12:27:41 +0600 Subject: [PATCH] SONAR-5646 Support of project-level widgets --- .../sonar-web/src/main/es6/dashboard/app.js | 8 ++++-- .../main/es6/dashboard/collections/widgets.js | 6 ++++- .../src/main/es6/dashboard/mockjax.js | 8 ++++++ .../main/es6/dashboard/views/widget-view.js | 25 ++++++++----------- .../main/es6/dashboard/views/widgets-view.js | 4 +++ .../app/views/dashboard2/index.html.erb | 3 +++ .../app/views/measures/_display_list.html.erb | 4 +-- 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 @@ -31,6 +31,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 @@ 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 @@
-<% content_for :script do %> -<% - end + <% display_favourites = logged_in? colspan = filter.display.columns.size colspan += 1 if display_favourites -- 2.39.5