diff options
Diffstat (limited to 'server/sonar-web/src/main/js/apps')
24 files changed, 1 insertions, 1362 deletions
diff --git a/server/sonar-web/src/main/js/apps/marketplace/components/PluginChangeLogItem.tsx b/server/sonar-web/src/main/js/apps/marketplace/components/PluginChangeLogItem.tsx index 5093609838c..e3b927807cb 100644 --- a/server/sonar-web/src/main/js/apps/marketplace/components/PluginChangeLogItem.tsx +++ b/server/sonar-web/src/main/js/apps/marketplace/components/PluginChangeLogItem.tsx @@ -48,7 +48,7 @@ export default function PluginChangeLogItem({ release, update }: Props) { </span> {release.changeLogUrl && ( <a className="js-plugin-changelog-link" href={release.changeLogUrl} target="_blank"> - {translate('update_center.release_notes')} + {translate('marketplace.release_notes')} </a> )} </div> diff --git a/server/sonar-web/src/main/js/apps/update-center/components/UpdateCenterAppContainer.js b/server/sonar-web/src/main/js/apps/update-center/components/UpdateCenterAppContainer.js deleted file mode 100644 index 454396e0a87..00000000000 --- a/server/sonar-web/src/main/js/apps/update-center/components/UpdateCenterAppContainer.js +++ /dev/null @@ -1,54 +0,0 @@ -/* - * SonarQube - * Copyright (C) 2009-2017 SonarSource SA - * mailto:info 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 React from 'react'; -import Helmet from 'react-helmet'; -import { connect } from 'react-redux'; -import init from '../init'; -import { getGlobalSettingValue } from '../../../store/rootReducer'; -import { translate } from '../../../helpers/l10n'; - -class UpdateCenterAppContainer extends React.PureComponent { - componentDidMount() { - this.stop = init(this.refs.container, this.props.updateCenterActive); - } - - componentWillUnmount() { - this.stop(); - } - - render() { - // placing container inside div is required, - // because when backbone.marionette's layout is destroyed, - // it also destroys the root element, - // but react wants it to be there to unmount it - return ( - <div> - <Helmet title={translate('update_center.page')} /> - <div ref="container" /> - </div> - ); - } -} - -const mapStateToProps = state => ({ - updateCenterActive: (getGlobalSettingValue(state, 'sonar.updatecenter.activate') || {}).value -}); - -export default connect(mapStateToProps)(UpdateCenterAppContainer); diff --git a/server/sonar-web/src/main/js/apps/update-center/controller.js b/server/sonar-web/src/main/js/apps/update-center/controller.js deleted file mode 100644 index 79a2d133b76..00000000000 --- a/server/sonar-web/src/main/js/apps/update-center/controller.js +++ /dev/null @@ -1,47 +0,0 @@ -/* - * SonarQube - * Copyright (C) 2009-2017 SonarSource SA - * mailto:info 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 Marionette from 'backbone.marionette'; - -export default Marionette.Controller.extend({ - initialize(options) { - this.collection = options.collection; - this.state = options.state; - }, - - showInstalled() { - this.state.set({ section: 'installed' }); - this.collection.fetchInstalled(); - }, - - showUpdates() { - this.state.set({ section: 'updates' }); - this.collection.fetchUpdates(); - }, - - showAvailable() { - this.state.set({ section: 'available' }); - this.collection.fetchAvailable(); - }, - - showSystemUpgrades() { - this.state.set({ section: 'system' }); - this.collection.fetchSystemUpgrades(); - } -}); diff --git a/server/sonar-web/src/main/js/apps/update-center/footer-view.js b/server/sonar-web/src/main/js/apps/update-center/footer-view.js deleted file mode 100644 index aa4a117cc06..00000000000 --- a/server/sonar-web/src/main/js/apps/update-center/footer-view.js +++ /dev/null @@ -1,36 +0,0 @@ -/* - * SonarQube - * Copyright (C) 2009-2017 SonarSource SA - * mailto:info 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 Marionette from 'backbone.marionette'; -import Template from './templates/update-center-footer.hbs'; - -export default Marionette.ItemView.extend({ - template: Template, - - collectionEvents: { - all: 'render' - }, - - serializeData() { - return { - ...Marionette.ItemView.prototype.serializeData.apply(this, arguments), - total: this.collection.where({ _hidden: false }).length - }; - } -}); diff --git a/server/sonar-web/src/main/js/apps/update-center/header-view.js b/server/sonar-web/src/main/js/apps/update-center/header-view.js deleted file mode 100644 index cc0ac80a8c1..00000000000 --- a/server/sonar-web/src/main/js/apps/update-center/header-view.js +++ /dev/null @@ -1,52 +0,0 @@ -/* - * SonarQube - * Copyright (C) 2009-2017 SonarSource SA - * mailto:info 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 Marionette from 'backbone.marionette'; -import Template from './templates/update-center-header.hbs'; -import RestartModal from '../../components/RestartModal'; - -export default Marionette.ItemView.extend({ - template: Template, - - collectionEvents: { - all: 'render' - }, - - events: { - 'click .js-restart': 'restart', - 'click .js-cancel-all': 'cancelAll' - }, - - restart() { - new RestartModal().render(); - }, - - cancelAll() { - this.collection.cancelAll(); - }, - - serializeData() { - return { - ...Marionette.ItemView.prototype.serializeData.apply(this, arguments), - installing: this.collection._installedCount, - updating: this.collection._updatedCount, - uninstalling: this.collection._uninstalledCount - }; - } -}); diff --git a/server/sonar-web/src/main/js/apps/update-center/init.js b/server/sonar-web/src/main/js/apps/update-center/init.js deleted file mode 100644 index 36595131ccb..00000000000 --- a/server/sonar-web/src/main/js/apps/update-center/init.js +++ /dev/null @@ -1,87 +0,0 @@ -/* - * SonarQube - * Copyright (C) 2009-2017 SonarSource SA - * mailto:info 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 Backbone from 'backbone'; -import Marionette from 'backbone.marionette'; -import Layout from './layout'; -import HeaderView from './header-view'; -import SearchView from './search-view'; -import ListView from './list-view'; -import FooterView from './footer-view'; -import Controller from './controller'; -import Router from './router'; -import Plugins from './plugins'; - -const App = new Marionette.Application(); - -const init = function({ el, updateCenterActive }) { - // State - this.state = new Backbone.Model({ updateCenterActive }); - - // Layout - this.layout = new Layout({ el }); - this.layout.render(); - - // Plugins - this.plugins = new Plugins(); - - // Controller - this.controller = new Controller({ collection: this.plugins, state: this.state }); - - // Router - this.router = new Router({ controller: this.controller }); - - // Header - this.headerView = new HeaderView({ collection: this.plugins }); - this.layout.headerRegion.show(this.headerView); - - // Search - this.searchView = new SearchView({ - collection: this.plugins, - router: this.router, - state: this.state - }); - this.layout.searchRegion.show(this.searchView); - this.searchView.focusSearch(); - - // List - this.listView = new ListView({ collection: this.plugins }); - this.layout.listRegion.show(this.listView); - - // Footer - this.footerView = new FooterView({ collection: this.plugins }); - this.layout.footerRegion.show(this.footerView); - - // Go - Backbone.history.start({ - pushState: true, - root: window.baseUrl + '/admin/update_center' - }); -}; - -App.on('start', options => init.call(App, options)); - -export default function(el, updateCenterActive) { - App.start({ el, updateCenterActive }); - - return () => { - Backbone.history.stop(); - App.layout.destroy(); - }; -} diff --git a/server/sonar-web/src/main/js/apps/update-center/layout.js b/server/sonar-web/src/main/js/apps/update-center/layout.js deleted file mode 100644 index 329ce8499c6..00000000000 --- a/server/sonar-web/src/main/js/apps/update-center/layout.js +++ /dev/null @@ -1,32 +0,0 @@ -/* - * SonarQube - * Copyright (C) 2009-2017 SonarSource SA - * mailto:info 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 Marionette from 'backbone.marionette'; -import Template from './templates/update-center-layout.hbs'; - -export default Marionette.LayoutView.extend({ - template: Template, - - regions: { - headerRegion: '#update-center-header', - searchRegion: '#update-center-search', - listRegion: '#update-center-plugins', - footerRegion: '#update-center-footer' - } -}); diff --git a/server/sonar-web/src/main/js/apps/update-center/list-item-view.js b/server/sonar-web/src/main/js/apps/update-center/list-item-view.js deleted file mode 100644 index 30802397395..00000000000 --- a/server/sonar-web/src/main/js/apps/update-center/list-item-view.js +++ /dev/null @@ -1,118 +0,0 @@ -/* - * SonarQube - * Copyright (C) 2009-2017 SonarSource SA - * mailto:info 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 Backbone from 'backbone'; -import Marionette from 'backbone.marionette'; -import PluginChangelogView from './plugin-changelog-view'; -import Template from './templates/update-center-plugin.hbs'; -import SystemTemplate from './templates/update-center-system-update.hbs'; - -export default Marionette.ItemView.extend({ - tagName: 'li', - className: 'panel panel-vertical', - template: Template, - systemTemplate: SystemTemplate, - - modelEvents: { - 'change:_hidden': 'toggleDisplay', - change: 'onModelChange', - request: 'onRequest' - }, - - events: { - 'click .js-changelog': 'onChangelogClick', - 'click .js-install': 'install', - 'click .js-update': 'update', - 'click .js-uninstall': 'uninstall', - 'change .js-terms': 'onTermsChange', - 'click .js-plugin-category': 'onCategoryClick' - }, - - getTemplate() { - return this.model.get('_system') ? this.systemTemplate : this.template; - }, - - onRender() { - this.$el.attr('data-id', this.model.id); - if (this.model.get('_system')) { - this.$el.attr('data-system', ''); - } - this.$('[data-toggle="tooltip"]').tooltip({ container: 'body', placement: 'bottom' }); - }, - - onDestroy() { - this.$('[data-toggle="tooltip"]').tooltip('destroy'); - }, - - onModelChange() { - if (!this.model.hasChanged('_hidden')) { - this.render(); - } - }, - - onChangelogClick(e) { - e.preventDefault(); - e.stopPropagation(); - $('body').click(); - const index = $(e.currentTarget).data('idx'); - - // if show changelog of update, show details of this update - // otherwise show changelog of the available release - const update = this.model.has('release') - ? this.model.toJSON() - : this.model.get('updates')[index]; - const popup = new PluginChangelogView({ - triggerEl: $(e.currentTarget), - model: new Backbone.Model(update) - }); - popup.render(); - }, - - onRequest() { - this.$('.js-actions').addClass('hidden'); - this.$('.js-spinner').removeClass('hidden'); - }, - - toggleDisplay() { - this.$el.toggleClass('hidden', this.model.get('_hidden')); - }, - - install() { - this.model.install(); - }, - - update() { - this.model.update(); - }, - - uninstall() { - this.model.uninstall(); - }, - - onTermsChange() { - const isAccepted = this.$('.js-terms').is(':checked'); - this.$('.js-install').prop('disabled', !isAccepted); - }, - - onCategoryClick(e) { - e.preventDefault(); - this.model.trigger('filter', this.model); - } -}); diff --git a/server/sonar-web/src/main/js/apps/update-center/list-view.js b/server/sonar-web/src/main/js/apps/update-center/list-view.js deleted file mode 100644 index 3746db3f037..00000000000 --- a/server/sonar-web/src/main/js/apps/update-center/list-view.js +++ /dev/null @@ -1,26 +0,0 @@ -/* - * SonarQube - * Copyright (C) 2009-2017 SonarSource SA - * mailto:info 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 Marionette from 'backbone.marionette'; -import ListItemView from './list-item-view'; - -export default Marionette.CollectionView.extend({ - tagName: 'ul', - childView: ListItemView -}); diff --git a/server/sonar-web/src/main/js/apps/update-center/plugin-changelog-view.js b/server/sonar-web/src/main/js/apps/update-center/plugin-changelog-view.js deleted file mode 100644 index e28db827b42..00000000000 --- a/server/sonar-web/src/main/js/apps/update-center/plugin-changelog-view.js +++ /dev/null @@ -1,45 +0,0 @@ -/* - * SonarQube - * Copyright (C) 2009-2017 SonarSource SA - * mailto:info 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 Popup from '../../components/common/popup'; -import Template from './templates/update-center-plugin-changelog.hbs'; - -export default Popup.extend({ - template: Template, - - onRender() { - Popup.prototype.onRender.apply(this, arguments); - this.$('.bubble-popup-container').isolatedScroll(); - this.$('[data-toggle="tooltip"]').tooltip({ container: 'body', placement: 'bottom' }); - }, - - onDestroy() { - Popup.prototype.onDestroy.apply(this, arguments); - this.$('[data-toggle="tooltip"]').tooltip('destroy'); - }, - - serializeData() { - return { - ...Popup.prototype.serializeData.apply(this, arguments), - // if there is no status, this is a new plugin - // => force COMPATIBLE status - status: this.model.get('status') || 'COMPATIBLE' - }; - } -}); diff --git a/server/sonar-web/src/main/js/apps/update-center/plugin.js b/server/sonar-web/src/main/js/apps/update-center/plugin.js deleted file mode 100644 index 3bbfe655277..00000000000 --- a/server/sonar-web/src/main/js/apps/update-center/plugin.js +++ /dev/null @@ -1,87 +0,0 @@ -/* - * SonarQube - * Copyright (C) 2009-2017 SonarSource SA - * mailto:info 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 Backbone from 'backbone'; - -export default Backbone.Model.extend({ - idAttribute: 'key', - - defaults: { - _hidden: false, - _system: false - }, - - _matchAttribute(attr, query) { - const value = this.get(attr) || ''; - return value.toLowerCase().includes(query.toLowerCase()); - }, - - match(query) { - return ( - this._matchAttribute('name', query) || - this._matchAttribute('category', query) || - this._matchAttribute('description', query) - ); - }, - - _action(options) { - const that = this; - const opts = { - ...options, - type: 'POST', - data: { key: this.id }, - success() { - options.success(that); - }, - error(jqXHR) { - that.set({ _status: 'failed', _errors: jqXHR.responseJSON.errors }); - } - }; - const xhr = Backbone.ajax(opts); - this.trigger('request', this, xhr); - return xhr; - }, - - install() { - return this._action({ - url: window.baseUrl + '/api/plugins/install', - success(model) { - model.set({ _status: 'installing' }); - } - }); - }, - - update() { - return this._action({ - url: window.baseUrl + '/api/plugins/update', - success(model) { - model.set({ _status: 'updating' }); - } - }); - }, - - uninstall() { - return this._action({ - url: window.baseUrl + '/api/plugins/uninstall', - success(model) { - model.set({ _status: 'uninstalling' }); - } - }); - } -}); diff --git a/server/sonar-web/src/main/js/apps/update-center/plugins.js b/server/sonar-web/src/main/js/apps/update-center/plugins.js deleted file mode 100644 index 7389bc4179d..00000000000 --- a/server/sonar-web/src/main/js/apps/update-center/plugins.js +++ /dev/null @@ -1,233 +0,0 @@ -/* - * SonarQube - * Copyright (C) 2009-2017 SonarSource SA - * mailto:info 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 { findLastIndex } from 'lodash'; -import Backbone from 'backbone'; -import Plugin from './plugin'; - -const Plugins = Backbone.Collection.extend({ - model: Plugin, - - comparator(model) { - return model.get('name') || ''; - }, - - initialize() { - this._installedCount = 0; - this._updatedCount = 0; - this._uninstalledCount = 0; - this.listenTo(this, 'change:_status', this.onStatusChange); - }, - - parse(r) { - const that = this; - return r.plugins.map(plugin => { - let updates = [ - that._getLastWithStatus(plugin.updates, 'COMPATIBLE'), - that._getLastWithStatus(plugin.updates, 'REQUIRES_SYSTEM_UPGRADE'), - that._getLastWithStatus(plugin.updates, 'DEPS_REQUIRE_SYSTEM_UPGRADE') - ].filter(update => update); - updates = updates.map(update => that._extendChangelog(plugin.updates, update)); - return { ...plugin, updates }; - }); - }, - - _getLastWithStatus(updates, status) { - const index = findLastIndex(updates, update => update.status === status); - return index !== -1 ? updates[index] : null; - }, - - _extendChangelog(updates, update) { - const index = updates.indexOf(update); - const previousUpdates = index > 0 ? updates.slice(0, index) : []; - return { ...update, previousUpdates }; - }, - - _fetchInstalled() { - if (this._installed) { - return $.Deferred() - .resolve() - .promise(); - } - const that = this; - const opts = { - type: 'GET', - url: window.baseUrl + '/api/plugins/installed?f=category', - success(r) { - that._installed = that.parse(r); - } - }; - return Backbone.ajax(opts); - }, - - _fetchUpdates() { - if (this._updates) { - return $.Deferred() - .resolve() - .promise(); - } - const that = this; - const opts = { - type: 'GET', - url: window.baseUrl + '/api/plugins/updates', - success(r) { - that._updates = that.parse(r); - } - }; - return Backbone.ajax(opts); - }, - - _fetchAvailable() { - if (this._available) { - return $.Deferred() - .resolve() - .promise(); - } - const that = this; - const opts = { - type: 'GET', - url: window.baseUrl + '/api/plugins/available', - success(r) { - that._available = that.parse(r); - } - }; - return Backbone.ajax(opts); - }, - - _fetchPending() { - const that = this; - const opts = { - type: 'GET', - url: window.baseUrl + '/api/plugins/pending', - success(r) { - const installing = r.installing.map(plugin => { - return { key: plugin.key, _status: 'installing' }; - }); - const updating = r.updating.map(plugin => { - return { key: plugin.key, _status: 'updating' }; - }); - const uninstalling = r.removing.map(plugin => { - return { key: plugin.key, _status: 'uninstalling' }; - }); - that._installedCount = installing.length; - that._updatedCount = updating.length; - that._uninstalledCount = uninstalling.length; - that._pending = new Plugins([].concat(installing, updating, uninstalling)).models; - } - }; - return Backbone.ajax(opts); - }, - - _fetchSystemUpgrades() { - if (this._systemUpdates) { - return $.Deferred() - .resolve() - .promise(); - } - const that = this; - const opts = { - type: 'GET', - url: window.baseUrl + '/api/system/upgrades', - success(r) { - that._systemUpdates = r.upgrades.map(update => ({ ...update, _system: true })); - } - }; - return Backbone.ajax(opts); - }, - - fetchInstalled() { - const that = this; - return $.when(this._fetchInstalled(), this._fetchUpdates(), this._fetchPending()).done(() => { - const plugins = new Plugins(); - plugins.set(that._installed); - plugins.set(that._updates, { remove: false }); - plugins.set(that._pending, { add: false, remove: false }); - that.reset(plugins.models); - }); - }, - - fetchUpdates() { - const that = this; - return $.when(this._fetchInstalled(), this._fetchUpdates(), this._fetchPending()).done(() => { - const plugins = new Plugins(); - plugins.set(that._installed); - plugins.set(that._updates, { remove: true }); - plugins.set(that._pending, { add: false, remove: false }); - that.reset(plugins.models); - }); - }, - - fetchAvailable() { - const that = this; - return $.when(this._fetchAvailable(), this._fetchPending()).done(() => { - const plugins = new Plugins(); - plugins.set(that._available); - plugins.set(that._pending, { add: false, remove: false }); - that.reset(plugins.models); - }); - }, - - fetchSystemUpgrades() { - const that = this; - return $.when(this._fetchSystemUpgrades()).done(() => { - that.reset(that._systemUpdates); - }); - }, - - search(query) { - /* eslint-disable array-callback-return */ - this.filter(model => { - model.set({ _hidden: !model.match(query) }); - }); - }, - - cancelAll() { - const that = this; - const opts = { - type: 'POST', - url: window.baseUrl + '/api/plugins/cancel_all', - success() { - that._installedCount = 0; - that._updatedCount = 0; - that._uninstalledCount = 0; - that.forEach(model => { - model.unset('_status'); - }); - that.trigger('change'); - } - }; - return Backbone.ajax(opts); - }, - - onStatusChange(model, status) { - if (status === 'installing') { - this._installedCount++; - } - if (status === 'updating') { - this._updatedCount++; - } - if (status === 'uninstalling') { - this._uninstalledCount++; - } - this.trigger('change'); - } -}); - -export default Plugins; diff --git a/server/sonar-web/src/main/js/apps/update-center/router.js b/server/sonar-web/src/main/js/apps/update-center/router.js deleted file mode 100644 index a4c92fc2dc6..00000000000 --- a/server/sonar-web/src/main/js/apps/update-center/router.js +++ /dev/null @@ -1,54 +0,0 @@ -/* - * SonarQube - * Copyright (C) 2009-2017 SonarSource SA - * mailto:info 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 Backbone from 'backbone'; - -export default Backbone.Router.extend({ - routes: { - '': 'index', - installed: 'showInstalled', - updates: 'showUpdates', - available: 'showAvailable', - system: 'showSystemUpgrades' - }, - - initialize(options) { - this.controller = options.controller; - }, - - index() { - this.navigate('installed', { trigger: true, replace: true }); - }, - - showInstalled() { - this.controller.showInstalled(); - }, - - showUpdates() { - this.controller.showUpdates(); - }, - - showAvailable() { - this.controller.showAvailable(); - }, - - showSystemUpgrades() { - this.controller.showSystemUpgrades(); - } -}); diff --git a/server/sonar-web/src/main/js/apps/update-center/routes.ts b/server/sonar-web/src/main/js/apps/update-center/routes.ts deleted file mode 100644 index e41cfdc073a..00000000000 --- a/server/sonar-web/src/main/js/apps/update-center/routes.ts +++ /dev/null @@ -1,56 +0,0 @@ -/* - * SonarQube - * Copyright (C) 2009-2017 SonarSource SA - * mailto:info 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 { RouterState, RouteComponent, IndexRouteProps } from 'react-router'; - -const routes = [ - { - getIndexRoute(_: RouterState, callback: (err: any, route: IndexRouteProps) => any) { - import('./components/UpdateCenterAppContainer').then(i => - callback(null, { component: i.default }) - ); - } - }, - { - path: 'installed', - getComponent(_: RouterState, callback: (err: any, component: RouteComponent) => any) { - import('./components/UpdateCenterAppContainer').then(i => callback(null, i.default)); - } - }, - { - path: 'updates', - getComponent(_: RouterState, callback: (err: any, component: RouteComponent) => any) { - import('./components/UpdateCenterAppContainer').then(i => callback(null, i.default)); - } - }, - { - path: 'available', - getComponent(_: RouterState, callback: (err: any, component: RouteComponent) => any) { - import('./components/UpdateCenterAppContainer').then(i => callback(null, i.default)); - } - }, - { - path: 'system', - getComponent(_: RouterState, callback: (err: any, component: RouteComponent) => any) { - import('./components/UpdateCenterAppContainer').then(i => callback(null, i.default)); - } - } -]; - -export default routes; diff --git a/server/sonar-web/src/main/js/apps/update-center/search-view.js b/server/sonar-web/src/main/js/apps/update-center/search-view.js deleted file mode 100644 index a181e17a44c..00000000000 --- a/server/sonar-web/src/main/js/apps/update-center/search-view.js +++ /dev/null @@ -1,104 +0,0 @@ -/* - * SonarQube - * Copyright (C) 2009-2017 SonarSource SA - * mailto:info 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 { debounce } from 'lodash'; -import Marionette from 'backbone.marionette'; -import Template from './templates/update-center-search.hbs'; - -export default Marionette.ItemView.extend({ - template: Template, - - events: { - 'change [name="update-center-filter"]': 'onFilterChange', - - 'submit #update-center-search-form': 'onFormSubmit', - 'search #update-center-search-query': 'onKeyUp', - 'keyup #update-center-search-query': 'onKeyUp', - 'change #update-center-search-query': 'onKeyUp' - }, - - collectionEvents: { - filter: 'onFilter' - }, - - initialize() { - this._bufferedValue = null; - this.search = debounce(this.search, 50); - this.listenTo(this.options.state, 'change', this.render); - }, - - onRender() { - this.$('[data-toggle="tooltip"]').tooltip({ container: 'body', placement: 'bottom' }); - }, - - onDestroy() { - this.$('[data-toggle="tooltip"]').tooltip('destroy'); - }, - - onFilterChange() { - const value = this.$('[name="update-center-filter"]:checked').val(); - this.filter(value); - }, - - filter(value) { - this.options.router.navigate(value, { trigger: true }); - }, - - onFormSubmit(e) { - e.preventDefault(); - this.debouncedOnKeyUp(); - }, - - onKeyUp() { - const q = this.getQuery(); - if (q === this._bufferedValue) { - return; - } - this._bufferedValue = this.getQuery(); - this.search(q); - }, - - getQuery() { - return this.$('#update-center-search-query').val(); - }, - - search(q) { - this.collection.search(q); - }, - - focusSearch() { - const that = this; - setTimeout(() => { - that.$('#update-center-search-query').focus(); - }, 0); - }, - - onFilter(model) { - const q = model.get('category'); - this.$('#update-center-search-query').val(q); - this.search(q); - }, - - serializeData() { - return { - ...Marionette.ItemView.prototype.serializeData.apply(this, arguments), - state: this.options.state.toJSON() - }; - } -}); diff --git a/server/sonar-web/src/main/js/apps/update-center/templates/_update-center-plugin-actions.hbs b/server/sonar-web/src/main/js/apps/update-center/templates/_update-center-plugin-actions.hbs deleted file mode 100644 index bda3b53a5d5..00000000000 --- a/server/sonar-web/src/main/js/apps/update-center/templates/_update-center-plugin-actions.hbs +++ /dev/null @@ -1,29 +0,0 @@ -<div class="js-actions"> - {{#if version}} - - <div class="button-group"> - {{#each updates}} - {{#eq status 'COMPATIBLE'}} - <button class="js-update" data-verion="{{release.version}}">{{tp 'update_center.update_to_x' release.version}}</button> - {{/eq}} - {{/each}} - <button class="js-uninstall button-red">{{t 'update_center.uninstall'}}</button> - </div> - - {{else}} - - {{#if termsAndConditionsUrl}} - <p class="little-spacer-bottom"> - <input class="js-terms" type="checkbox" name="plugin-terms" id="plugin-terms-{{key}}"> - <label for="plugin-terms-{{key}}"> - {{t 'update_center.i_accept_the'}} - <a class="js-plugin-terms nowrap" href="{{termsAndConditionsUrl}}" target="_blank">{{t 'update_center.terms_and_conditions'}}</a> - </label> - </p> - <button class="js-install" disabled>{{t 'update_center.install'}}</button> - {{else}} - <button class="js-install">{{t 'update_center.install'}}</button> - {{/if}} - - {{/if}} -</div> diff --git a/server/sonar-web/src/main/js/apps/update-center/templates/_update-center-plugin-changelog-entry.hbs b/server/sonar-web/src/main/js/apps/update-center/templates/_update-center-plugin-changelog-entry.hbs deleted file mode 100644 index a1ea88ce680..00000000000 --- a/server/sonar-web/src/main/js/apps/update-center/templates/_update-center-plugin-changelog-entry.hbs +++ /dev/null @@ -1,13 +0,0 @@ -<div class="little-spacer-bottom"> - {{#notEq status 'COMPATIBLE'}} - <span class="js-plugin-changelog-version badge badge-warning spacer-right" data-toggle="tooltip" - title="{{t 'update_center.status' status}}">{{release.version}}</span> - {{else}} - <span class="js-plugin-changelog-version badge badge-success spacer-right">{{release.version}}</span> - {{/notEq}} - <span class="js-plugin-changelog-date note spacer-right">{{d release.date}}</span> - {{#if release.changeLogUrl}} - <a class="js-plugin-changelog-link" href="{{release.changeLogUrl}}" target="_blank">{{t 'update_center.release_notes'}}</a> - {{/if}} -</div> -<div class="js-plugin-changelog-description">{{{release.description}}}</div> diff --git a/server/sonar-web/src/main/js/apps/update-center/templates/update-center-footer.hbs b/server/sonar-web/src/main/js/apps/update-center/templates/update-center-footer.hbs deleted file mode 100644 index c2ce68490d7..00000000000 --- a/server/sonar-web/src/main/js/apps/update-center/templates/update-center-footer.hbs +++ /dev/null @@ -1,3 +0,0 @@ -<footer class="spacer-top note text-center"> - {{tp 'x_show' total}} -</footer> diff --git a/server/sonar-web/src/main/js/apps/update-center/templates/update-center-header.hbs b/server/sonar-web/src/main/js/apps/update-center/templates/update-center-header.hbs deleted file mode 100644 index e2eb7f9cefc..00000000000 --- a/server/sonar-web/src/main/js/apps/update-center/templates/update-center-header.hbs +++ /dev/null @@ -1,36 +0,0 @@ -<header class="page-header"> - <h1 class="page-title">{{t 'update_center.page'}}</h1> - <p class="page-description">{{t 'update_center.page.description'}}</p> -</header> - -{{#any installing updating uninstalling}} - <div class="js-pending panel panel-warning big-spacer-bottom"> - <div class="display-inline-block"> - <p>{{t 'update_center.sonarqube_needs_to_be_restarted_to'}}</p> - <ul class="list-styled spacer-top"> - {{#if installing}} - <li> - {{t 'update_center._install'}} - <strong class="big text-success little-spacer-left little-spacer-right">{{installing}}</strong> plugins - </li> - {{/if}} - {{#if updating}} - <li> - {{t 'update_center._update'}} - <strong class="big text-success little-spacer-left little-spacer-right">{{updating}}</strong> plugins - </li> - {{/if}} - {{#if uninstalling}} - <li> - {{t 'update_center._uninstall'}} - <strong class="big text-danger little-spacer-left little-spacer-right">{{uninstalling}}</strong> plugins - </li> - {{/if}} - </ul> - </div> - <div class="pull-right"> - <button class="js-restart">{{t 'update_center.restart'}}</button> - <button class="js-cancel-all button-red">{{t 'update_center.revert'}}</button> - </div> - </div> -{{/any}} diff --git a/server/sonar-web/src/main/js/apps/update-center/templates/update-center-layout.hbs b/server/sonar-web/src/main/js/apps/update-center/templates/update-center-layout.hbs deleted file mode 100644 index 599f049ef0b..00000000000 --- a/server/sonar-web/src/main/js/apps/update-center/templates/update-center-layout.hbs +++ /dev/null @@ -1,6 +0,0 @@ -<div class="page page-limited"> - <div id="update-center-header"></div> - <div id="update-center-search"></div> - <div id="update-center-plugins"></div> - <div id="update-center-footer"></div> -</div> diff --git a/server/sonar-web/src/main/js/apps/update-center/templates/update-center-plugin-changelog.hbs b/server/sonar-web/src/main/js/apps/update-center/templates/update-center-plugin-changelog.hbs deleted file mode 100644 index b75523b983c..00000000000 --- a/server/sonar-web/src/main/js/apps/update-center/templates/update-center-plugin-changelog.hbs +++ /dev/null @@ -1,16 +0,0 @@ -<div class="bubble-popup-container"> - <div class="bubble-popup-title">{{t 'changelog'}}</div> - - <ul class="js-plugin-changelog-list"> - {{#each previousUpdates}} - <li class="big-spacer-bottom"> - {{> '_update-center-plugin-changelog-entry'}} - </li> - {{/each}} - <li class="spacer-bottom"> - {{> '_update-center-plugin-changelog-entry'}} - </li> - </ul> -</div> - -<div class="bubble-popup-arrow"></div> diff --git a/server/sonar-web/src/main/js/apps/update-center/templates/update-center-plugin.hbs b/server/sonar-web/src/main/js/apps/update-center/templates/update-center-plugin.hbs deleted file mode 100644 index 0a6f40d4b1f..00000000000 --- a/server/sonar-web/src/main/js/apps/update-center/templates/update-center-plugin.hbs +++ /dev/null @@ -1,122 +0,0 @@ -<table class="width-100"> - <tr> - <td class="text-top width-20 big-spacer-right"> - <div> - <strong class="js-plugin-name">{{name}}</strong> - {{#if category}} - <a class="js-plugin-category badge spacer-left" href="#">{{category}}</a> - {{/if}} - </div> - <div class="js-plugin-description little-spacer-top">{{{description}}}</div> - </td> - - <td class="text-top big-spacer-right"> - <ul> - {{#if version}} - <li class="little-spacer-bottom"> - <strong class="js-plugin-installed-version">{{version}}</strong> {{t 'update_center._installed'}} - </li> - {{/if}} - {{#notEmpty updates}} - <li class="little-spacer-bottom spacer-top"> - <strong>{{t 'update_center.updates'}}:</strong> - </li> - {{#each updates}} - <li class="little-spacer-bottom"> - <div class="pull-left spacer-right"> - {{#notEq status 'COMPATIBLE'}} - <span class="js-update-version badge badge-warning" data-toggle="tooltip" - title="{{t 'update_center.status' status}}">{{release.version}}</span> - {{else}} - <span class="js-update-version badge badge-success">{{release.version}}</span> - {{/notEq}} - </div> - <div class="overflow-hidden"> - {{{release.description}}} - <button class="button-link js-changelog issue-rule icon-ellipsis-h" data-idx="{{@index}}"></button> - </div> - </li> - {{/each}} - {{/notEmpty}} - {{#if release}} - <li class="little-spacer-bottom"> - <div class="pull-left spacer-right"> - <span class="badge badge-success">{{release.version}}</span> - </div> - <div class="overflow-hidden"> - {{{release.description}}} - <button class="button-link js-changelog issue-rule icon-ellipsis-h" data-idx="{{@index}}"></button> - {{#notEmpty update.requires}} - <p class="little-spacer-top"> - <strong>{{t 'update_center.installing_this_plugin_will_also_install'}}</strong>: {{#each update.requires}} {{name}}{{/each}} - </p> - {{/notEmpty}} - </div> - </li> - {{/if}} - </ul> - </td> - - <td class="text-top width-20 big-spacer-right"> - <ul> - {{#any homepageUrl issueTrackerUrl termsAndConditionsUrl}} - <li class="little-spacer-bottom"> - <ul class="list-inline"> - {{#if homepageUrl}} - <li><a class="js-plugin-homepage" href="{{homepageUrl}}" target="_blank">{{t 'update_center.homepage'}}</a></li> - {{/if}} - {{#if issueTrackerUrl}} - <li><a class="js-plugin-issues" href="{{issueTrackerUrl}}" target="_blank">{{t 'update_center.issue_tracker'}}</a></li> - {{/if}} - </ul> - </li> - {{/any}} - - {{#if license}} - <li class="little-spacer-bottom text-limited" title="{{license}}"> - {{t 'update_center.licensed_under'}} - <span class="js-plugin-license">{{license}}</span> - </li> - {{/if}} - - {{#if organizationName}} - <li class="little-spacer-bottom"> - {{t 'update_center.developed_by'}} - {{#if organizationUrl}} - <a class="js-plugin-organization" href="{{organizationUrl}}" target="_blank">{{organizationName}}</a> - {{else}} - <span class="js-plugin-organization">{{organizationName}}</span> - {{/if}} - </li> - {{/if}} - </ul> - </td> - - <td class="text-top text-right width-20"> - {{#eq _status 'installing'}} - <p class="text-success">{{t 'update_center.install_pending'}}</p> - {{/eq}} - - {{#eq _status 'updating'}} - <p class="text-success">{{t 'update_center.update_pending'}}</p> - {{/eq}} - - {{#eq _status 'uninstalling'}} - <p class="text-danger">{{t 'update_center.uninstall_pending'}}</p> - {{/eq}} - - {{#eq _status 'failed'}} - <span class="text-danger"> - {{#each _errors}} - {{msg}} - {{/each}} - </span> - {{/eq}} - - {{#unless _status}} - <i class="js-spinner spinner hidden"></i> - {{> '_update-center-plugin-actions'}} - {{/unless}} - </td> - </tr> -</table> diff --git a/server/sonar-web/src/main/js/apps/update-center/templates/update-center-search.hbs b/server/sonar-web/src/main/js/apps/update-center/templates/update-center-search.hbs deleted file mode 100644 index 5a2b91a6d81..00000000000 --- a/server/sonar-web/src/main/js/apps/update-center/templates/update-center-search.hbs +++ /dev/null @@ -1,47 +0,0 @@ -<div class="panel panel-vertical bordered-bottom spacer-bottom"> - <div class="display-inline-block text-top nowrap big-spacer-right"> - <ul class="radio-toggle"> - <li> - <input type="radio" name="update-center-filter" value="installed" id="update-center-filter-installed" - {{#eq state.section 'installed'}}checked{{/eq}}> - <label for="update-center-filter-installed">{{t 'update_center.installed'}}</label> - </li> - <li> - <input type="radio" name="update-center-filter" value="updates" id="update-center-filter-updates" - {{#eq state.section 'updates'}}checked{{/eq}} {{#unless state.updateCenterActive}}disabled{{/unless}}> - <label for="update-center-filter-updates" - {{#unless state.updateCenterActive}}data-toggle="tooltip" title="{{t 'update_center.not_activated'}}"{{/unless}}> - {{t 'update_center.updates_only'}} - </label> - </li> - <li> - <input type="radio" name="update-center-filter" value="available" id="update-center-filter-available" - {{#eq state.section 'available'}}checked{{/eq}} {{#unless state.updateCenterActive}}disabled{{/unless}}> - <label for="update-center-filter-available" - {{#unless state.updateCenterActive}}data-toggle="tooltip" title="{{t 'update_center.not_activated'}}"{{/unless}}> - {{t 'update_center.available'}} - </label> - </li> - </ul> - - <ul class="radio-toggle"> - <li> - <input type="radio" name="update-center-filter" value="system" id="update-center-filter-system" - {{#eq state.section 'system'}}checked{{/eq}} {{#unless state.updateCenterActive}}disabled{{/unless}}> - <label for="update-center-filter-system" - {{#unless state.updateCenterActive}}data-toggle="tooltip" title="{{t 'update_center.not_activated'}}"{{/unless}}> - {{t 'update_center.system_upgrades'}} - </label> - </li> - </ul> - </div> - - {{#notEq state.section 'system'}} - <form id="update-center-search-form" class="search-box display-inline-block text-top"> - <button id="update-center-search-submit" class="search-box-submit button-clean"><i class="icon-search"></i> - </button> - <input id="update-center-search-query" class="search-box-input" type="search" name="q" placeholder="{{t 'search_verb'}}" - maxlength="100" autocomplete="off"> - </form> - {{/notEq}} -</div> diff --git a/server/sonar-web/src/main/js/apps/update-center/templates/update-center-system-update.hbs b/server/sonar-web/src/main/js/apps/update-center/templates/update-center-system-update.hbs deleted file mode 100644 index 0a8f1e1838a..00000000000 --- a/server/sonar-web/src/main/js/apps/update-center/templates/update-center-system-update.hbs +++ /dev/null @@ -1,58 +0,0 @@ -<table class="width-100"> - <tr> - <td class="text-top thin big-spacer-right"> - <svg width="60" height="60" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:1.41421;"> - <g id="Layer1"> - <path d="M52.0841,58.4777L48.8003,58.4777C48.8003,32.0551 26.9663,10.4603 0,10.4603L0,7.06778C28.7278,7.06778 52.1493,30.2719 52.1493,58.4777L52.084,58.4777L52.0841,58.4777Z" style="fill:rgb(75,159,213);fill-rule:nonzero;"/> - <path d="M54.3675,40.7974C50.4096,24.2044 36.97,10.2646 20.0072,5.45851L20.7684,2.7619C38.6228,7.95943 52.8453,22.5952 56.9554,40.2755L54.3675,40.7974L54.3675,40.7974L54.3675,40.7974Z" style="fill:rgb(75,159,213);fill-rule:nonzero;"/> - <path d="M58.0863,25.27C53.9978,16.332 47.1475,8.65532 38.5792,3.47949L39.6666,1.52228C48.561,6.87202 55.8898,15.0924 60,24.3784L58.0863,25.27L58.0863,25.27L58.0863,25.27L58.0863,25.27Z" style="fill:rgb(75,159,213);fill-rule:nonzero;"/> - </g> - </svg> - </td> - - <td class="text-top width-20 big-spacer-right"> - <div> - <strong class="js-plugin-name">SonarQube {{version}}</strong> - <span class="js-plugin-category badge badge-success spacer-left">{{t 'update_center.system_upgrade'}}</span> - </div> - <div class="js-plugin-description little-spacer-top">{{{description}}}</div> - - <ul class="big-spacer-top"> - {{#if changeLogUrl}} - <li class="little-spacer-bottom"> - <a class="js-plugin-release-notes" href="{{changeLogUrl}}" target="_blank">{{t 'update_center.release_notes'}}</a> - </li> - {{/if}} - {{#if releaseDate}} - <li class="little-spacer-bottom">{{t 'update_center.released'}}: <span class="js-plugin-date">{{d releaseDate}}</span></li> - {{/if}} - </ul> - </td> - - <td class="text-top width-60"> - <div class="pull-left spacer-right"> - <strong>{{t 'update_center.how_to_upgrade'}}</strong> - </div> - <ol class="js-plugin-update-steps list-styled overflow-hidden bordered-left"> - <li class="little-spacer-bottom"> - {{t 'update_center.how_to_upgrade.1'}} - </li> - <li class="little-spacer-bottom"> - {{t 'update_center.how_to_upgrade.2'}} - </li> - <li class="little-spacer-bottom"> - {{t 'update_center.how_to_upgrade.3'}} - </li> - <li class="little-spacer-bottom"> - {{t 'update_center.how_to_upgrade.4'}} - </li> - <li class="little-spacer-bottom"> - {{t 'update_center.how_to_upgrade.5'}} - </li> - <li> - {{t 'update_center.how_to_upgrade.6'}} - </li> - </ol> - </td> - </tr> -</table> |