From 06b21a3efa5c5badc657cf806b9ddbc52d4e8cc7 Mon Sep 17 00:00:00 2001 From: Stas Vilchik Date: Mon, 30 Dec 2013 11:12:18 +0600 Subject: [PATCH] SONAR-4853 New design of the Issues page --- .../resources/org/sonar/l10n/core.properties | 3 + .../WEB-INF/app/views/issue/_issue.html.erb | 154 +- .../WEB-INF/app/views/issues/_list.html.erb | 153 +- .../WEB-INF/app/views/issues/search.html.erb | 58 +- .../app/views/issues/templates/_issue.hbs.erb | 22 + .../issues/templates/_issues_actions.hbs.erb | 7 + .../views/issues/templates/_no_issues.hbs.erb | 6 + .../WEB-INF/app/views/layouts/_head.html.erb | 9 + .../app/views/measures/search.html.erb | 2 +- .../navigator/_filter_templates.html.erb | 2 +- sonar-server/src/main/webapp/fonts/sonar.eot | Bin 0 -> 5512 bytes sonar-server/src/main/webapp/fonts/sonar.svg | 32 + sonar-server/src/main/webapp/fonts/sonar.ttf | Bin 0 -> 5356 bytes sonar-server/src/main/webapp/fonts/sonar.woff | Bin 0 -> 5432 bytes .../navigator/filters/ajax-select-filters.js | 20 + .../navigator/filters/base-filters.js | 13 +- .../navigator/filters/range-filters.js | 5 + .../navigator/filters/select-filters.js | 17 +- .../navigator/handlebars-extensions.js | 29 + .../javascripts/navigator/issues-app.js | 71 +- .../webapp/javascripts/navigator/issues.js | 239 ++ .../javascripts/third-party/handlebars.js | 2610 +++++++++++++++++ .../javascripts/third-party/jquery-ui.tabs.js | 832 ++++++ .../javascripts/third-party/moment.min.js | 6 + .../src/main/webapp/stylesheets/icons.css | 138 + .../src/main/webapp/stylesheets/icons.less | 145 + .../src/main/webapp/stylesheets/jquery-ui.css | 2 - .../src/main/webapp/stylesheets/mixins.css | 3 + .../src/main/webapp/stylesheets/navigator.css | 183 +- .../main/webapp/stylesheets/navigator.less | 284 +- .../webapp/stylesheets/navigator/base.css | 172 ++ .../webapp/stylesheets/navigator/base.less | 208 ++ .../webapp/stylesheets/navigator/config.css | 12 + .../webapp/stylesheets/navigator/config.less | 22 + .../webapp/stylesheets/navigator/filters.css | 238 ++ .../webapp/stylesheets/navigator/filters.less | 262 ++ .../main/webapp/stylesheets/select2-sonar.css | 3 + .../src/main/webapp/stylesheets/style.css | 73 +- .../src/main/webapp/stylesheets/ui.css | 3 + .../src/main/webapp/stylesheets/variables.css | 3 + .../main/webapp/stylesheets/variables.less | 28 + sonar-server/wro.xml | 10 + 42 files changed, 5552 insertions(+), 527 deletions(-) create mode 100644 sonar-server/src/main/webapp/WEB-INF/app/views/issues/templates/_issue.hbs.erb create mode 100644 sonar-server/src/main/webapp/WEB-INF/app/views/issues/templates/_issues_actions.hbs.erb create mode 100644 sonar-server/src/main/webapp/WEB-INF/app/views/issues/templates/_no_issues.hbs.erb create mode 100755 sonar-server/src/main/webapp/fonts/sonar.eot create mode 100755 sonar-server/src/main/webapp/fonts/sonar.svg create mode 100755 sonar-server/src/main/webapp/fonts/sonar.ttf create mode 100755 sonar-server/src/main/webapp/fonts/sonar.woff create mode 100644 sonar-server/src/main/webapp/javascripts/navigator/handlebars-extensions.js create mode 100644 sonar-server/src/main/webapp/javascripts/navigator/issues.js create mode 100644 sonar-server/src/main/webapp/javascripts/third-party/handlebars.js create mode 100644 sonar-server/src/main/webapp/javascripts/third-party/jquery-ui.tabs.js create mode 100644 sonar-server/src/main/webapp/javascripts/third-party/moment.min.js create mode 100644 sonar-server/src/main/webapp/stylesheets/icons.css create mode 100644 sonar-server/src/main/webapp/stylesheets/icons.less create mode 100644 sonar-server/src/main/webapp/stylesheets/navigator/base.css create mode 100644 sonar-server/src/main/webapp/stylesheets/navigator/base.less create mode 100644 sonar-server/src/main/webapp/stylesheets/navigator/config.css create mode 100644 sonar-server/src/main/webapp/stylesheets/navigator/config.less create mode 100644 sonar-server/src/main/webapp/stylesheets/navigator/filters.css create mode 100644 sonar-server/src/main/webapp/stylesheets/navigator/filters.less diff --git a/plugins/sonar-core-plugin/src/main/resources/org/sonar/l10n/core.properties b/plugins/sonar-core-plugin/src/main/resources/org/sonar/l10n/core.properties index 7aa1e6d3349..82a3b50914a 100644 --- a/plugins/sonar-core-plugin/src/main/resources/org/sonar/l10n/core.properties +++ b/plugins/sonar-core-plugin/src/main/resources/org/sonar/l10n/core.properties @@ -150,6 +150,7 @@ type=Type unfollow=Unfollow unit_test=Unit test unit_tests=Unit tests +unresolved=Unresolved unselect_all=Unselect all unselect_verb=Unselect updated=Updated @@ -545,6 +546,7 @@ issue.comment.submit=Comment issue.comment.delete_confirm_title=Delete Comment issue.comment.delete_confirm_message=Do you want to delete this comment? issue.comment.delete_confirm_button=Delete +issue.details=Issue Details issue.send_notifications=Send notifications issue.transition=Transition issue.transition.confirm=Confirm @@ -579,6 +581,7 @@ issue.reported_by=Reported by issue.authorLogin=Author: issue.component_deleted=Removed issue.technical_debt=Technical debt: +issue.technical_debt_clear=Technical debt issue.technical_debt.x_days={0} days issue.technical_debt.x_hours={0} hours issue.technical_debt.x_minutes={0} minutes diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/issue/_issue.html.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/issue/_issue.html.erb index 4e16f08f412..cd94b0cbc94 100644 --- a/sonar-server/src/main/webapp/WEB-INF/app/views/issue/_issue.html.erb +++ b/sonar-server/src/main/webapp/WEB-INF/app/views/issue/_issue.html.erb @@ -1,53 +1,29 @@ -
+
+
+ "> + <%= h @issue_results.rule(issue).getName() -%> +
+ <% unless issue.status == "OPEN" %> + <%= h message("issue.status.#{issue.status}") -%>  + <% end %> + <% if issue.resolution %> + <%= h message("issue.resolution.#{issue.resolution}") -%>  + <% end %> + + <%= distance_of_time_in_words_to_now(Api::Utils.java_to_ruby_datetime(issue.updateDate())) -%> +
- - "> -   - <%= h @issue_results.rule(issue).getName() -%> -   - <% if issue.resolution %> - -   - <%= message("issue.resolution.#{issue.resolution}") -%> -   - <% else %> - -   - <%= message("issue.status.#{issue.status}") -%> -   - <% end %> - -   - <%= message('issue.updated') -%> <%= distance_of_time_in_words_to_now(Api::Utils.java_to_ruby_datetime(issue.updateDate())) -%> -   - <% if issue.reporter %> - -   - <%= message('issue.reported_by') -%> <%= @issue_results.user(issue.reporter).name -%> -   - <% end %> - <% if issue.authorLogin %> - -   - <%= message('issue.authorLogin') -%> <%= issue.authorLogin -%> -   - <% end %> - <% if issue.technicalDebt %> - -   - <%= message('issue.technical_debt') -%> <%= Internal.technical_debt.format(issue.technicalDebt) -%> -   - <% end %>
- <% unless issue.message.blank? %>
@@ -55,6 +31,94 @@
<% end %> +
+ +
+
    +
  • +
    <%= message('severity') -%>
    +
    + <%= h message("severity.#{issue.severity}") -%> +
    +
  • +
  • +
    <%= message('status') -%>
    +
    + <%= h message("issue.status.#{issue.status}") -%> +
    +
  • +
  • +
    <%= message('resolution') -%>
    +
    + <% if issue.resolution %> + <%= h message("issue.resolution.#{issue.resolution}") -%>; + <% else %> + <%= message('unresolved') -%> + <% end %> +
    +
  • +
  • +
    <%= message('issue_filter.header.action_plan') -%>
    +
    + <% if issue.actionPlanKey %> + <%= h @issue_results.actionPlan(issue).name() -%> + <% else %> + <%= message('none') -%> + <% end %> +
    +
  • +
  • +
    <%= message('issue.technical_debt_clear') -%>
    +
    + <%= h Internal.technical_debt.format(issue.technicalDebt) -%> +
    +
  • + <% if issue.reporter %> +
  • +
    <%= message('reporter') -%>
    +
    <%= h @issue_results.user(issue.reporter).name -%>
    +
  • + <% end %> +
  • +
    <%= message('author') -%>
    +
    <%= h issue.authorLogin -%>
    +
  • +
  • +
    <%= message('assignee') -%>
    +
    + <% if issue.assignee %> + <%= h @issue_results.user(issue.assignee).name -%> + <% else %> + <%= message('unassigned') -%> + <% end %> +
    +
  • +
  • +
    <%= message('created') -%>
    +
    + <%= human_short_date(Api::Utils.java_to_ruby_datetime(issue.updateDate)) -%> +
    +
  • +
  • +
    <%= message('updated') -%>
    +
    + <%= human_short_date(Api::Utils.java_to_ruby_datetime(issue.creationDate)) -%> +
    +
  • +
+
+
+ <% issue.comments.each do |comment| comment_html_id = "comment-#{comment.key}-#{rand(100)}" @@ -164,3 +228,9 @@
<% end %>
+ + diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/issues/_list.html.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/issues/_list.html.erb index 731a60c1913..864bb2ea1af 100644 --- a/sonar-server/src/main/webapp/WEB-INF/app/views/issues/_list.html.erb +++ b/sonar-server/src/main/webapp/WEB-INF/app/views/issues/_list.html.erb @@ -1,126 +1,41 @@ -<% - if @issues_result.issues && !@issues_result.issues.empty? - colspan = 6 -%> -
- - - - - - - - - - - - - - <% - @issues_result.issues.each do |issue| - %> - - - - - - - - - - <% - end - %> - - <%= if @ajax_mode - paginate_java(@issues_result.paging, :colspan => colspan, :id => 'issue-filter-foot', :include_loading_icon => true, - :url_results => url_for({:controller => 'issues', :action => 'search'}.merge(params))) { |label, page_id| - link_to_function label, "refreshList('#{@issues_query.sort}', #{@issues_query.asc}, #{page_id})" - } - else - paginate_java(@issues_result.paging, :colspan => colspan, :id => 'issue-filter-foot', :include_loading_icon => true) { |label, page_id| - link_to(label, params.merge({:pageIndex => page_id})) - } - end - %> -
- <%= column_html(@issues_query, @issues_result, message('severity_abbreviated'), message('severity'), 'SEVERITY') %> - - <%= column_html(@issues_query, @issues_result, message('status'), message('status'), 'STATUS') %> - - <%= message('description') -%> - - <%= message('component') -%> - - <%= column_html(@issues_query, @issues_result, message('issue_filter.header.assignee'), message('issue_filter.header.assignee'), 'ASSIGNEE') %> - - <%= message('issue_filter.header.action_plan') -%> - - <%= column_html(@issues_query, @issues_result, message('issue_filter.header.update_date'), message('issue_filter.header.update_date'), 'UPDATE_DATE') %> -
- - - <%= message("issue.status.#{issue.status}") -%> - <% if issue.resolution %> - [<%= message("issue.resolution.#{issue.resolution}") -%>] - <% end %> - - 'show', :id => issue.key, :modal => true -%>'> - <%= h truncate(issue.message, :length => 100) -%> - - <% project = @issues_result.project(issue) - component = @issues_result.component(issue) -%> -
<%= h (truncate(project.name, :length => 100)) -%>
- <% if component %> - - <% if component.key != project.key %> - <%= h component.longName() -%> - <% end %> - <% else %> - <%= h issue.componentKey() %> - <% end %> -
- <%= h @issues_result.user(issue.assignee).name if issue.assignee -%> - - <%= h @issues_result.actionPlan(issue).name if issue.actionPlanKey() -%> - - <%= human_short_date(Api::Utils.java_to_ruby_datetime(issue.updateDate())) -%> -
-
-<% - end -%> + diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/issues/search.html.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/issues/search.html.erb index 972321c274d..0fd737aefb6 100644 --- a/sonar-server/src/main/webapp/WEB-INF/app/views/issues/search.html.erb +++ b/sonar-server/src/main/webapp/WEB-INF/app/views/issues/search.html.erb @@ -1,47 +1,27 @@ - <%= render :partial => '/navigator/filter_templates' -%> +<%= render :partial => '/issues/templates/issue.hbs' -%> +<%= render :partial => '/issues/templates/issues_actions.hbs' -%> +<%= render :partial => '/issues/templates/no_issues.hbs' -%> -<% - component_labels = Project.by_keys(@issues_query.componentRoots).map{|c| c ? c.name : nil} - assignee_keys = @issues_query.assignees - assignee_labels = user_labels(@issues_query.assignees) - if @issues_query.assigned==false - assignee_keys = [''] + assignee_keys - assignee_labels = [message('unassigned')] + assignee_labels - end - reporter_labels = user_labels(@issues_query.reporters) -%> diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/issues/templates/_issue.hbs.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/issues/templates/_issue.hbs.erb new file mode 100644 index 00000000000..74cca976847 --- /dev/null +++ b/sonar-server/src/main/webapp/WEB-INF/app/views/issues/templates/_issue.hbs.erb @@ -0,0 +1,22 @@ + diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/issues/templates/_issues_actions.hbs.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/issues/templates/_issues_actions.hbs.erb new file mode 100644 index 00000000000..3f5aea023b4 --- /dev/null +++ b/sonar-server/src/main/webapp/WEB-INF/app/views/issues/templates/_issues_actions.hbs.erb @@ -0,0 +1,7 @@ + diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/issues/templates/_no_issues.hbs.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/issues/templates/_no_issues.hbs.erb new file mode 100644 index 00000000000..1ff2e0ec3b5 --- /dev/null +++ b/sonar-server/src/main/webapp/WEB-INF/app/views/issues/templates/_no_issues.hbs.erb @@ -0,0 +1,6 @@ + diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/layouts/_head.html.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/layouts/_head.html.erb index 77d4b16e06d..e0669ded869 100644 --- a/sonar-server/src/main/webapp/WEB-INF/app/views/layouts/_head.html.erb +++ b/sonar-server/src/main/webapp/WEB-INF/app/views/layouts/_head.html.erb @@ -29,6 +29,7 @@ <%= stylesheet_link_tag 'select2-sonar', :media => 'all' %> <%= stylesheet_link_tag 'layout', :media => 'all' %> <%= stylesheet_link_tag 'style', :media => 'all' %> + <%= stylesheet_link_tag 'icons', :media => 'all' %> <%= stylesheet_link_tag 'ui', :media => 'all' %> <%= stylesheet_link_tag 'sonar-colorizer', :media => 'all' %> <%= stylesheet_link_tag 'dashboard', :media => 'all' %> @@ -44,8 +45,10 @@ <%= javascript_include_tag 'third-party/underscore-min' %> <%= javascript_include_tag 'third-party/backbone-min' %> <%= javascript_include_tag 'third-party/backbone.marionette.min' %> + <%= javascript_include_tag 'third-party/handlebars' %> <%= javascript_include_tag 'third-party/jquery.ba-throttle-debounce.min.js' %> <%= javascript_include_tag 'third-party/select2.min' %> + <%= javascript_include_tag 'third-party/moment.min' %> <%= javascript_include_tag 'widgets/widget' %> <%= javascript_include_tag 'widgets/bubble-chart' %> @@ -53,9 +56,12 @@ <%= javascript_include_tag 'widgets/stack-area' %> <%= javascript_include_tag 'widgets/pie-chart' %> <%= javascript_include_tag 'widgets/histogram' %> + <%= javascript_include_tag 'widgets/word-cloud' %> <%= javascript_include_tag 'select-list' %> + <%= javascript_include_tag 'navigator/handlebars-extensions' %> + <%= javascript_include_tag 'navigator/filters/base-filters' %> <%= javascript_include_tag 'navigator/filters/select-filters' %> <%= javascript_include_tag 'navigator/filters/ajax-select-filters' %> @@ -65,7 +71,10 @@ <%= javascript_include_tag 'navigator/filters/metric-filters' %> <%= javascript_include_tag 'navigator/filters/favorite-filters' %> <%= javascript_include_tag 'navigator/filters/more-criteria-filters' %> + + <%= javascript_include_tag 'navigator/issues' %> <%= javascript_include_tag 'navigator/issues-app' %> + <%= javascript_include_tag 'navigator/measures-app' %> <%= javascript_include_tag 'application' %> diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/measures/search.html.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/measures/search.html.erb index 4696464cc94..709e1caf4d3 100644 --- a/sonar-server/src/main/webapp/WEB-INF/app/views/measures/search.html.erb +++ b/sonar-server/src/main/webapp/WEB-INF/app/views/measures/search.html.erb @@ -1,4 +1,4 @@ -