]> source.dussan.org Git - sonarqube.git/commitdiff
Move ruby templates to handlebars
authorStas Vilchik <vilchiks@gmail.com>
Tue, 22 Jul 2014 10:03:41 +0000 (12:03 +0200)
committerStas Vilchik <vilchiks@gmail.com>
Tue, 22 Jul 2014 10:03:42 +0000 (12:03 +0200)
160 files changed:
server/sonar-web/Gruntfile.coffee
server/sonar-web/src/main/coffee/component-viewer/coverage-popup.coffee
server/sonar-web/src/main/coffee/component-viewer/covered-files-popup.coffee
server/sonar-web/src/main/coffee/component-viewer/duplication-popup.coffee
server/sonar-web/src/main/coffee/component-viewer/header.coffee
server/sonar-web/src/main/coffee/component-viewer/header/basic-header.coffee
server/sonar-web/src/main/coffee/component-viewer/header/coverage-header.coffee
server/sonar-web/src/main/coffee/component-viewer/header/duplications-header.coffee
server/sonar-web/src/main/coffee/component-viewer/header/issues-header.coffee
server/sonar-web/src/main/coffee/component-viewer/header/more-actions.coffee
server/sonar-web/src/main/coffee/component-viewer/header/scm-header.coffee
server/sonar-web/src/main/coffee/component-viewer/header/tests-header.coffee
server/sonar-web/src/main/coffee/component-viewer/line-actions-popup.coffee
server/sonar-web/src/main/coffee/component-viewer/main.coffee
server/sonar-web/src/main/coffee/component-viewer/source.coffee
server/sonar-web/src/main/coffee/component-viewer/time-changes-popup.coffee
server/sonar-web/src/main/coffee/component-viewer/workspace.coffee
server/sonar-web/src/main/coffee/issue/collections/action-plans.coffee [new file with mode: 0644]
server/sonar-web/src/main/coffee/issue/issue-view.coffee [new file with mode: 0644]
server/sonar-web/src/main/coffee/issue/manual-issue-view.coffee [new file with mode: 0644]
server/sonar-web/src/main/coffee/issue/models/change-log.coffee [new file with mode: 0644]
server/sonar-web/src/main/coffee/issue/models/issue.coffee [new file with mode: 0644]
server/sonar-web/src/main/coffee/issue/models/rule.coffee [new file with mode: 0644]
server/sonar-web/src/main/coffee/issue/views/assign-form-view.coffee [new file with mode: 0644]
server/sonar-web/src/main/coffee/issue/views/change-log-view.coffee [new file with mode: 0644]
server/sonar-web/src/main/coffee/issue/views/comment-form-view.coffee [new file with mode: 0644]
server/sonar-web/src/main/coffee/issue/views/plan-form-view.coffee [new file with mode: 0644]
server/sonar-web/src/main/coffee/issue/views/rule-view.coffee [new file with mode: 0644]
server/sonar-web/src/main/coffee/issue/views/set-severity-form-view.coffee [new file with mode: 0644]
server/sonar-web/src/main/coffee/issues/collections/action-plans.coffee [deleted file]
server/sonar-web/src/main/coffee/issues/issue-view.coffee [deleted file]
server/sonar-web/src/main/coffee/issues/manual-issue-view.coffee [deleted file]
server/sonar-web/src/main/coffee/issues/models/change-log.coffee [deleted file]
server/sonar-web/src/main/coffee/issues/models/issue.coffee [deleted file]
server/sonar-web/src/main/coffee/issues/models/rule.coffee [deleted file]
server/sonar-web/src/main/coffee/issues/views/assign-form-view.coffee [deleted file]
server/sonar-web/src/main/coffee/issues/views/change-log-view.coffee [deleted file]
server/sonar-web/src/main/coffee/issues/views/comment-form-view.coffee [deleted file]
server/sonar-web/src/main/coffee/issues/views/plan-form-view.coffee [deleted file]
server/sonar-web/src/main/coffee/issues/views/rule-view.coffee [deleted file]
server/sonar-web/src/main/coffee/issues/views/set-severity-form-view.coffee [deleted file]
server/sonar-web/src/main/hbs/component-viewer/code-expand.hbs [deleted file]
server/sonar-web/src/main/hbs/component-viewer/coveragePopup.hbs [deleted file]
server/sonar-web/src/main/hbs/component-viewer/cw-code-expand.hbs [new file with mode: 0644]
server/sonar-web/src/main/hbs/component-viewer/cw-coverage-popup.hbs [new file with mode: 0644]
server/sonar-web/src/main/hbs/component-viewer/cw-duplication-popup.hbs [new file with mode: 0644]
server/sonar-web/src/main/hbs/component-viewer/cw-header.hbs [new file with mode: 0644]
server/sonar-web/src/main/hbs/component-viewer/cw-layout.hbs [new file with mode: 0644]
server/sonar-web/src/main/hbs/component-viewer/cw-line-options-popup.hbs [new file with mode: 0644]
server/sonar-web/src/main/hbs/component-viewer/cw-more-actions.hbs [new file with mode: 0644]
server/sonar-web/src/main/hbs/component-viewer/cw-source.hbs [new file with mode: 0644]
server/sonar-web/src/main/hbs/component-viewer/cw-time-changes-popup.hbs [new file with mode: 0644]
server/sonar-web/src/main/hbs/component-viewer/cw-workspace.hbs [new file with mode: 0644]
server/sonar-web/src/main/hbs/component-viewer/duplicationPopup.hbs [deleted file]
server/sonar-web/src/main/hbs/component-viewer/header.hbs [deleted file]
server/sonar-web/src/main/hbs/component-viewer/header/_cw-header-item.hbs [new file with mode: 0644]
server/sonar-web/src/main/hbs/component-viewer/header/_cw-header-link.hbs [new file with mode: 0644]
server/sonar-web/src/main/hbs/component-viewer/header/_header-item.hbs [deleted file]
server/sonar-web/src/main/hbs/component-viewer/header/_header-link.hbs [deleted file]
server/sonar-web/src/main/hbs/component-viewer/header/basic-header.hbs [deleted file]
server/sonar-web/src/main/hbs/component-viewer/header/coverage-header.hbs [deleted file]
server/sonar-web/src/main/hbs/component-viewer/header/covered-files-popup.hbs [deleted file]
server/sonar-web/src/main/hbs/component-viewer/header/cw-basic-header.hbs [new file with mode: 0644]
server/sonar-web/src/main/hbs/component-viewer/header/cw-coverage-header.hbs [new file with mode: 0644]
server/sonar-web/src/main/hbs/component-viewer/header/cw-covered-files-popup.hbs [new file with mode: 0644]
server/sonar-web/src/main/hbs/component-viewer/header/cw-duplications-header.hbs [new file with mode: 0644]
server/sonar-web/src/main/hbs/component-viewer/header/cw-issues-header.hbs [new file with mode: 0644]
server/sonar-web/src/main/hbs/component-viewer/header/cw-scm-header.hbs [new file with mode: 0644]
server/sonar-web/src/main/hbs/component-viewer/header/cw-tests-header.hbs [new file with mode: 0644]
server/sonar-web/src/main/hbs/component-viewer/header/duplications-header.hbs [deleted file]
server/sonar-web/src/main/hbs/component-viewer/header/issues-header.hbs [deleted file]
server/sonar-web/src/main/hbs/component-viewer/header/scm-header.hbs [deleted file]
server/sonar-web/src/main/hbs/component-viewer/header/tests-header.hbs [deleted file]
server/sonar-web/src/main/hbs/component-viewer/layout.hbs [deleted file]
server/sonar-web/src/main/hbs/component-viewer/line-options-popup.hbs [deleted file]
server/sonar-web/src/main/hbs/component-viewer/more-actions.hbs [deleted file]
server/sonar-web/src/main/hbs/component-viewer/source.hbs [deleted file]
server/sonar-web/src/main/hbs/component-viewer/time-changes-popup.hbs [deleted file]
server/sonar-web/src/main/hbs/component-viewer/workspace.hbs [deleted file]
server/sonar-web/src/main/hbs/issue/assign-form.hbs [new file with mode: 0644]
server/sonar-web/src/main/hbs/issue/change-log.hbs [new file with mode: 0644]
server/sonar-web/src/main/hbs/issue/comment-form.hbs [new file with mode: 0644]
server/sonar-web/src/main/hbs/issue/issue.hbs [new file with mode: 0644]
server/sonar-web/src/main/hbs/issue/manual-issue.hbs [new file with mode: 0644]
server/sonar-web/src/main/hbs/issue/plan-form.hbs [new file with mode: 0644]
server/sonar-web/src/main/hbs/issue/rule.hbs [new file with mode: 0644]
server/sonar-web/src/main/hbs/issue/set-severity-form.hbs [new file with mode: 0644]
server/sonar-web/src/main/hbs/issues/assign-form.hbs [deleted file]
server/sonar-web/src/main/hbs/issues/change-log.hbs [deleted file]
server/sonar-web/src/main/hbs/issues/comment-form.hbs [deleted file]
server/sonar-web/src/main/hbs/issues/filter-bar.hbs [new file with mode: 0644]
server/sonar-web/src/main/hbs/issues/issue-detail.hbs [new file with mode: 0644]
server/sonar-web/src/main/hbs/issues/issue.hbs [deleted file]
server/sonar-web/src/main/hbs/issues/issues-actions.hbs [new file with mode: 0644]
server/sonar-web/src/main/hbs/issues/issues-details-favorite-filter.hbs [new file with mode: 0644]
server/sonar-web/src/main/hbs/issues/issues-header.hbs [new file with mode: 0644]
server/sonar-web/src/main/hbs/issues/issues.hbs [new file with mode: 0644]
server/sonar-web/src/main/hbs/issues/manual-issue.hbs [deleted file]
server/sonar-web/src/main/hbs/issues/no-issues.hbs [new file with mode: 0644]
server/sonar-web/src/main/hbs/issues/plan-form.hbs [deleted file]
server/sonar-web/src/main/hbs/issues/rule.hbs [deleted file]
server/sonar-web/src/main/hbs/issues/set-severity-form.hbs [deleted file]
server/sonar-web/src/main/hbs/navigator/ajax-select-filter.hbs [new file with mode: 0644]
server/sonar-web/src/main/hbs/navigator/base-details-filter.hbs [new file with mode: 0644]
server/sonar-web/src/main/hbs/navigator/base-filter.hbs [new file with mode: 0644]
server/sonar-web/src/main/hbs/navigator/checkbox-filter.hbs [new file with mode: 0644]
server/sonar-web/src/main/hbs/navigator/choice-filter-item.hbs [new file with mode: 0644]
server/sonar-web/src/main/hbs/navigator/choice-filter.hbs [new file with mode: 0644]
server/sonar-web/src/main/hbs/navigator/favorite-details-filter.hbs [new file with mode: 0644]
server/sonar-web/src/main/hbs/navigator/favorite-filter.hbs [new file with mode: 0644]
server/sonar-web/src/main/hbs/navigator/metric-filter.hbs [new file with mode: 0644]
server/sonar-web/src/main/hbs/navigator/more-criteria-details-filter.hbs [new file with mode: 0644]
server/sonar-web/src/main/hbs/navigator/more-criteria-filter.hbs [new file with mode: 0644]
server/sonar-web/src/main/hbs/navigator/range-filter.hbs [new file with mode: 0644]
server/sonar-web/src/main/hbs/navigator/string-filter.hbs [new file with mode: 0644]
server/sonar-web/src/main/js/common/handlebars-extensions.js
server/sonar-web/src/main/js/issues/extra.js
server/sonar-web/src/main/js/measures/app.js
server/sonar-web/src/main/js/measures/measures-filter-bar.js [new file with mode: 0644]
server/sonar-web/src/main/js/navigator/filters/ajax-select-filters.js
server/sonar-web/src/main/js/navigator/filters/base-filters.js
server/sonar-web/src/main/js/navigator/filters/checkbox-filters.js
server/sonar-web/src/main/js/navigator/filters/choice-filters.js
server/sonar-web/src/main/js/navigator/filters/favorite-filters.js
server/sonar-web/src/main/js/navigator/filters/filter-bar.js
server/sonar-web/src/main/js/navigator/filters/metric-filters.js
server/sonar-web/src/main/js/navigator/filters/more-criteria-filters.js
server/sonar-web/src/main/js/navigator/filters/range-filters.js
server/sonar-web/src/main/js/navigator/filters/string-filters.js
server/sonar-web/src/main/webapp/WEB-INF/app/views/coding_rules/index.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/issues/search.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/issues/templates/_filter_bar_template.hbs.erb [deleted file]
server/sonar-web/src/main/webapp/WEB-INF/app/views/issues/templates/_header.hbs.erb [deleted file]
server/sonar-web/src/main/webapp/WEB-INF/app/views/issues/templates/_issue.hbs.erb [deleted file]
server/sonar-web/src/main/webapp/WEB-INF/app/views/issues/templates/_issue_detail.hbs.erb [deleted file]
server/sonar-web/src/main/webapp/WEB-INF/app/views/issues/templates/_issue_detail_assign_form.hbs.erb [deleted file]
server/sonar-web/src/main/webapp/WEB-INF/app/views/issues/templates/_issue_detail_comment_form.hbs.erb [deleted file]
server/sonar-web/src/main/webapp/WEB-INF/app/views/issues/templates/_issue_detail_inner.hbs.erb [deleted file]
server/sonar-web/src/main/webapp/WEB-INF/app/views/issues/templates/_issue_detail_plan_form.hbs.erb [deleted file]
server/sonar-web/src/main/webapp/WEB-INF/app/views/issues/templates/_issue_detail_rule.hbs.erb [deleted file]
server/sonar-web/src/main/webapp/WEB-INF/app/views/issues/templates/_issue_detail_set_severity_form.hbs.erb [deleted file]
server/sonar-web/src/main/webapp/WEB-INF/app/views/issues/templates/_issues.hbs.erb [deleted file]
server/sonar-web/src/main/webapp/WEB-INF/app/views/issues/templates/_issues_actions.hbs.erb [deleted file]
server/sonar-web/src/main/webapp/WEB-INF/app/views/issues/templates/_issues_details_favorite_filter.hbs.erb [deleted file]
server/sonar-web/src/main/webapp/WEB-INF/app/views/issues/templates/_no_issues.hbs.erb [deleted file]
server/sonar-web/src/main/webapp/WEB-INF/app/views/measures/search.html.erb
server/sonar-web/src/main/webapp/WEB-INF/app/views/navigator/_filter_templates.html.erb [deleted file]
server/sonar-web/src/main/webapp/WEB-INF/app/views/navigator/templates/_ajax_select_filter_template.hbs.erb [deleted file]
server/sonar-web/src/main/webapp/WEB-INF/app/views/navigator/templates/_base_details_filter_template.hbs.erb [deleted file]
server/sonar-web/src/main/webapp/WEB-INF/app/views/navigator/templates/_base_filter_template.hbs.erb [deleted file]
server/sonar-web/src/main/webapp/WEB-INF/app/views/navigator/templates/_checkbox_filter_template.hbs.erb [deleted file]
server/sonar-web/src/main/webapp/WEB-INF/app/views/navigator/templates/_choice_filter_item_template.hbs.erb [deleted file]
server/sonar-web/src/main/webapp/WEB-INF/app/views/navigator/templates/_choice_filter_template.hbs.erb [deleted file]
server/sonar-web/src/main/webapp/WEB-INF/app/views/navigator/templates/_favorite_details_filter_template.hbs.erb [deleted file]
server/sonar-web/src/main/webapp/WEB-INF/app/views/navigator/templates/_favorite_filter_template.hbs.erb [deleted file]
server/sonar-web/src/main/webapp/WEB-INF/app/views/navigator/templates/_metric_filter_template.hbs.erb [deleted file]
server/sonar-web/src/main/webapp/WEB-INF/app/views/navigator/templates/_more_criteria_details_filter_template.hbs.erb [deleted file]
server/sonar-web/src/main/webapp/WEB-INF/app/views/navigator/templates/_more_criteria_filter_template.hbs.erb [deleted file]
server/sonar-web/src/main/webapp/WEB-INF/app/views/navigator/templates/_range_filter_template.hbs.erb [deleted file]
server/sonar-web/src/main/webapp/WEB-INF/app/views/navigator/templates/_string_filter_template.hbs.erb [deleted file]

index 96ac5583ac96796b7912811ebc640ee7076bb868..845cfb3669428a81ebd6dc69bde7c92c1111e2c1 100644 (file)
@@ -216,6 +216,9 @@ module.exports = (grunt) ->
 
       build:
         files:
+          '<%= pkg.assets %>js/templates/navigator.js': [
+            '<%= pkg.sources %>hbs/navigator/**/*.hbs'
+          ]
           '<%= pkg.assets %>js/templates/coding-rules.js': [
             '<%= pkg.sources %>hbs/common/**/*.hbs'
             '<%= pkg.sources %>hbs/coding-rules/**/*.hbs'
@@ -226,8 +229,11 @@ module.exports = (grunt) ->
           '<%= pkg.assets %>js/templates/component-viewer.js': [
             '<%= pkg.sources %>hbs/component-viewer/**/*.hbs'
           ]
-          '<%= pkg.assets %>js/templates/issues.js': [
+          '<%= pkg.assets %>js/templates/issue.js': [
             '<%= pkg.sources %>hbs/common/**/*.hbs'
+            '<%= pkg.sources %>hbs/issue/**/*.hbs'
+          ]
+          '<%= pkg.assets %>js/templates/issues.js': [
             '<%= pkg.sources %>hbs/issues/**/*.hbs'
           ]
           '<%= pkg.assets %>js/templates/api-documentation.js': [
index 9311fef5b1c0aac03985d2fe977f46e3fb2ba976..f91747cbeecf63d2939b400b7676ca33cff3aa0f 100644 (file)
@@ -14,7 +14,7 @@ define [
 
 
   class CoveragePopupView extends Popup
-    template: Templates['coveragePopup']
+    template: Templates['cw-coverage-popup']
 
 
     events:
index 2d6a37a135b2b7a041549e396a886c663916cbfb..cd25938830500fa4fe3594e735eb596fc14156b4 100644 (file)
@@ -14,7 +14,7 @@ define [
 
 
   class CoveredFilesPopupView extends Popup
-    template: Templates['covered-files-popup']
+    template: Templates['cw-covered-files-popup']
 
 
     events:
index 108da019e95dcc0e3295a07c8ea2a0a51ffcd31f..cd24e404ac4ced8545496d12d3be9298921180fc 100644 (file)
@@ -14,7 +14,7 @@ define [
 
 
   class DuplicationPopupView extends Popup
-    template: Templates['duplicationPopup']
+    template: Templates['cw-duplication-popup']
 
 
     events:
index 6695c5be3247e3ac5c85d0a20a81095957dd1594..44fdef9b4e672538edf5d37781c7c4917aa2a4c9 100644 (file)
@@ -39,7 +39,7 @@ define [
 
 
   class extends Marionette.Layout
-    template: Templates['header']
+    template: Templates['cw-header']
 
 
     regions:
index 74ce85f372d509fe3f37fdd8c6cdad0d7e90a681..2f8a2300b39fd9045f79ce26acf9e06309005590 100644 (file)
@@ -10,4 +10,4 @@ define [
 
 
   class extends BaseHeaderView
-    template: Templates['basic-header']
\ No newline at end of file
+    template: Templates['cw-basic-header']
index 03c408fa8889c43f0948e73756cee846a9214df8..9f77bc9dd7db997c4f8b1a249b8a48aac4cc6364 100644 (file)
@@ -14,7 +14,7 @@ define [
 
 
   class extends BaseHeaderView
-    template: Templates['coverage-header']
+    template: Templates['cw-coverage-header']
 
 
     events:
@@ -82,4 +82,4 @@ define [
 
 
     serializeData: ->
-      _.extend super, period: @state.get('period')?.toJSON()
\ No newline at end of file
+      _.extend super, period: @state.get('period')?.toJSON()
index 8722adf27d8ffd8c840372db059c8f5e8b41871c..8cb931878af532fd2f6ddc7ce4af77d6206dc70c 100644 (file)
@@ -10,7 +10,7 @@ define [
 
 
   class extends BaseHeaderView
-    template: Templates['duplications-header']
+    template: Templates['cw-duplications-header']
 
 
     events:
index ecfa4b5a9187d1130588795c981181b144856a9b..f7d24a90601748f6902350ecaf165507904067b4 100644 (file)
@@ -14,7 +14,7 @@ define [
 
 
   class extends BaseHeaderView
-    template: Templates['issues-header']
+    template: Templates['cw-issues-header']
 
 
     events:
index a35e54f62e96f70a37ff70db4be2122d7b6c9f53..1de367f55e0877c2584d0289bece10974f302d64 100644 (file)
@@ -11,7 +11,7 @@ define [
 
   class extends Marionette.ItemView
     className: 'component-viewer-header-more-actions'
-    template: Templates['more-actions']
+    template: Templates['cw-more-actions']
 
 
     events:
@@ -45,4 +45,4 @@ define [
 
     serializeData: ->
       _.extend super,
-        state: @options.main.state.toJSON()
\ No newline at end of file
+        state: @options.main.state.toJSON()
index 29e44cfa472412ad18084314f1d30a4487c2d968..66b43636a47593cb7f449b2d92273517e8e261f9 100644 (file)
@@ -14,7 +14,7 @@ define [
 
 
   class extends BaseHeaderView
-    template: Templates['scm-header']
+    template: Templates['cw-scm-header']
 
 
     events:
index d297e53bc3555e0413e10ff3f471fb2a4b3b259b..76e196c66c78e007d191c24b9fb82fb08f0d8251 100644 (file)
@@ -15,7 +15,7 @@ define [
 
 
   class extends BaseHeaderView
-    template: Templates['tests-header']
+    template: Templates['cw-tests-header']
 
 
     ui:
index f0de0ac50c58b12d690858addac79c7578293696..9e79833a32d31d0a8977f01576fed8f3df470753 100644 (file)
@@ -2,7 +2,7 @@ define [
   'backbone.marionette'
   'templates/component-viewer'
   'common/popup'
-  'issues/manual-issue-view'
+  'issue/manual-issue-view'
 ], (
   Marionette
   Templates
@@ -14,7 +14,7 @@ define [
 
 
   class extends Popup
-    template: Templates['line-options-popup']
+    template: Templates['cw-line-options-popup']
 
 
     events:
index 969ccd32f96ac8ba0dc5a625c7a20d73051e248f..ff35d806b79e7c554206e68297e28cacc11848a5 100644 (file)
@@ -69,7 +69,7 @@ define [
 
   class ComponentViewer extends utils.mixOf Marionette.Layout, IssuesMixin, CoverageMixin, DuplicationsMixin, SCMMixin
     className: 'component-viewer'
-    template: Templates['layout']
+    template: Templates['cw-layout']
 
 
     regions:
index 7d47af82001b755598af0e7d1578247253bd8874..a9f612367bdc943f9d5ae884e6f5ac4b74da7c37 100644 (file)
@@ -5,8 +5,8 @@ define [
   'component-viewer/duplication-popup'
   'component-viewer/time-changes-popup'
   'component-viewer/line-actions-popup'
-  'issues/issue-view'
-  'issues/models/issue'
+  'issue/issue-view'
+  'issue/models/issue'
   'common/handlebars-extensions'
 ], (
   Marionette
@@ -26,8 +26,8 @@ define [
 
 
   class SourceView extends Marionette.ItemView
-    template: Templates['source']
-    expandTemplate: Templates['code-expand']
+    template: Templates['cw-source']
+    expandTemplate: Templates['cw-code-expand']
 
     LINES_AROUND_ISSUE = 4
     LINES_AROUND_COVERED_LINE = 1
index 0854f1b91e653917c4923f450be196ed13e58e05..6d8aa77860e9d3d47e8d2e079680d91dc1833f5c 100644 (file)
@@ -12,7 +12,7 @@ define [
 
 
   class TimeChangesPopupView extends Popup
-    template: Templates['time-changes-popup']
+    template: Templates['cw-time-changes-popup']
 
 
     events:
index 7432414d2583c4db2f9d612c86905fbe2b11b4b3..3f8fac9861e6ee686b7649738ed7f7a47dd5efe9 100644 (file)
@@ -10,7 +10,7 @@ define [
 
 
   class WorkspaceView extends Marionette.ItemView
-    template: Templates['workspace']
+    template: Templates['cw-workspace']
 
 
     events:
diff --git a/server/sonar-web/src/main/coffee/issue/collections/action-plans.coffee b/server/sonar-web/src/main/coffee/issue/collections/action-plans.coffee
new file mode 100644 (file)
index 0000000..69e0d45
--- /dev/null
@@ -0,0 +1,14 @@
+define [
+  'backbone'
+], (
+  Backbone
+) ->
+
+  class ActionPlans extends Backbone.Collection
+
+    url: ->
+      "#{baseUrl}/api/action_plans/search"
+
+
+    parse: (r) ->
+      r.actionPlans
\ No newline at end of file
diff --git a/server/sonar-web/src/main/coffee/issue/issue-view.coffee b/server/sonar-web/src/main/coffee/issue/issue-view.coffee
new file mode 100644 (file)
index 0000000..2be7d31
--- /dev/null
@@ -0,0 +1,274 @@
+define [
+  'backbone.marionette'
+  'templates/issue'
+
+  'issue/models/rule'
+  'issue/views/rule-view'
+
+  'issue/models/change-log'
+  'issue/views/change-log-view'
+
+  'issue/collections/action-plans'
+
+  'issue/views/assign-form-view'
+  'issue/views/comment-form-view'
+  'issue/views/plan-form-view'
+  'issue/views/set-severity-form-view'
+
+], (
+  Marionette
+  Templates
+
+  Rule
+  RuleView
+
+  ChangeLog
+  ChangeLogView
+
+  ActionPlans
+
+  AssignFormView
+  CommentFormView
+  PlanFormView
+  SetSeverityFormView
+
+) ->
+
+  $ = jQuery
+
+
+  class IssueView extends Marionette.Layout
+    className: 'code-issues'
+    template: Templates['issue']
+
+
+    regions:
+      formRegion: '.code-issue-form'
+      ruleRegion: '#tab-issue-rule'
+      changeLogRegion: '#tab-issue-changelog'
+
+
+    modelEvents:
+      'change': 'render'
+
+
+    events:
+      'click': 'setDetailScope',
+
+      'click .code-issue-toggle': 'toggleCollapsed',
+
+      'click [href=#tab-issue-rule]': 'showRuleTab',
+      'click [href=#tab-issue-changelog]': 'showChangeLogTab',
+
+      'click #issue-comment': 'comment',
+      'click .issue-comment-edit': 'editComment',
+      'click .issue-comment-delete': 'deleteComment',
+      'click .issue-transition': 'transition',
+      'click #issue-set-severity': 'setSeverity',
+      'click #issue-assign': 'assign',
+      'click #issue-assign-to-me': 'assignToMe',
+      'click #issue-plan': 'plan',
+      'click .issue-action': 'action'
+
+
+    onRender: ->
+      @rule = new Rule key: this.model.get('rule')
+      @ruleRegion.show new RuleView model: @rule, issue: @model
+      @changeLog = new ChangeLog()
+      @changeLogRegion.show new ChangeLogView collection: @changeLog, issue: @model
+
+
+    setDetailScope: ->
+      key.setScope 'detail'
+
+
+    setListScope: ->
+      key.setScope 'list'
+
+
+    onClose: ->
+      @ruleRegion.reset() if @ruleRegion
+
+
+    resetIssue: (options) ->
+      @setListScope()
+      key = @model.get 'key'
+      @model.clear silent: true
+      @model.set { key: key }, { silent: true }
+      @model.fetch(options).done => @trigger 'reset'
+
+
+    toggleCollapsed: ->
+      @$('.code-issue').toggleClass 'code-issue-collapsed'
+      unless @$('.code-issue').is '.code-issue-collapsed'
+        @showRuleTab()
+
+
+    hideTabs: ->
+      @$('.js-tab-link').removeClass 'active-link'
+      @$('.js-tab').hide()
+
+
+    showTab: (tab) ->
+      @hideTabs()
+      s = "#tab-issue-#{tab}"
+      @$(s).show()
+      @$("[href=#{s}]").addClass 'active-link'
+
+
+    showRuleTab: (e) ->
+      e?.preventDefault()
+      @showTab 'rule'
+      unless @rule.has 'name'
+        @$('#tab-issue-rule').addClass 'navigator-fetching'
+        @rule.fetch
+          success: => @$('#tab-issue-rule').removeClass 'navigator-fetching'
+
+
+    showChangeLogTab: (e) ->
+      e?.preventDefault()
+      @showTab 'changelog'
+      unless @changeLog.length > 0
+        @$('#tab-issue-changeLog').addClass 'navigator-fetching'
+        @changeLog.fetch
+          data: issue: @model.get 'key'
+          success: => @$('#tab-issue-changelog').removeClass 'navigator-fetching'
+
+
+    showActionView: (view) ->
+      @$('.code-issue-actions').hide()
+      @$('.code-issue-form').show()
+      @formRegion.show view
+
+
+    showActionSpinner: ->
+      @$('.code-issue-actions').addClass 'navigator-fetching'
+
+
+    hideActionSpinner: ->
+      @$('.code-issue-actions').removeClass 'navigator-fetching'
+
+
+    updateAfterAction: (fetch) ->
+      @formRegion.reset()
+      @$('.code-issue-actions').show()
+      @$('.code-issue-form').hide()
+      @$('[data-comment-key]').show()
+
+      if fetch
+        $.when(@resetIssue()).done => @hideActionSpinner()
+
+
+    comment: ->
+      commentFormView = new CommentFormView
+        issue: @model
+        detailView: @
+      @showActionView commentFormView
+
+
+    editComment: (e) ->
+      commentEl = $(e.target).closest '[data-comment-key]'
+      commentKey = commentEl.data 'comment-key'
+      comment = _.findWhere this.model.get('comments'), { key: commentKey }
+
+      commentEl.hide();
+
+      commentFormView = new CommentFormView
+        model: new Backbone.Model comment
+        issue: @model
+        detailView: @
+      @showActionView commentFormView
+
+
+    deleteComment: (e) ->
+      commentKey = $(e.target).closest('[data-comment-key]').data 'comment-key'
+      confirmMsg = $(e.target).data 'confirm-msg'
+
+      if confirm(confirmMsg)
+        @showActionSpinner()
+        $.ajax
+          type: "POST"
+          url: baseUrl + "/issue/delete_comment?id=" + commentKey
+        .done => @updateAfterAction true
+        .fail (r) =>
+          alert  _.pluck(r.responseJSON.errors, 'msg').join(' ')
+          @hideActionSpinner()
+
+
+    transition: (e) ->
+      @showActionSpinner();
+      $.ajax
+        type: 'POST',
+        url: baseUrl + '/api/issues/do_transition',
+        data:
+          issue: @model.get('key')
+          transition: $(e.target).data('transition')
+      .done => @resetIssue()
+      .fail (r) =>
+        alert  _.pluck(r.responseJSON.errors, 'msg').join(' ')
+        @hideActionSpinner()
+
+
+    setSeverity: ->
+      setSeverityFormView = new SetSeverityFormView
+        issue: @model
+        detailView: @
+      @showActionView setSeverityFormView
+
+
+    assign: ->
+      assignFormView = new AssignFormView
+        issue: @model
+        detailView: this
+      @showActionView assignFormView
+
+
+    assignToMe: ->
+      @showActionSpinner()
+      $.ajax
+        type: 'POST'
+        url: baseUrl + '/api/issues/assign'
+        data:
+          issue: @model.get('key')
+          me: true
+      .done => @resetIssue()
+      .fail (r) =>
+        alert  _.pluck(r.responseJSON.errors, 'msg').join(' ')
+        @hideActionSpinner()
+
+
+    plan: ->
+      actionPlans = new ActionPlans()
+      planFormView = new PlanFormView
+        collection: actionPlans
+        issue: @model
+        detailView: @
+      @showActionSpinner()
+      actionPlans.fetch
+        reset: true
+        data: project: @model.get('project')
+        success: =>
+          @hideActionSpinner()
+          @showActionView planFormView
+
+
+    action: (e) ->
+      actionKey = $(e.target).data 'action'
+      @showActionSpinner()
+      $.ajax
+        type: 'POST'
+        url: baseUrl + '/api/issues/do_action'
+        data:
+          issue: @model.get('key')
+          actionKey: actionKey
+      .done => @resetIssue()
+      .fail (r) =>
+        alert  _.pluck(r.responseJSON.errors, 'msg').join(' ')
+        @hideActionSpinner()
+
+
+    serializeData: ->
+      componentKey = encodeURIComponent @model.get 'component'
+      issueKey = encodeURIComponent @model.get 'key'
+      _.extend super,
+        permalink: "#{baseUrl}/component/index#component=#{componentKey}&currentIssue=#{issueKey}"
diff --git a/server/sonar-web/src/main/coffee/issue/manual-issue-view.coffee b/server/sonar-web/src/main/coffee/issue/manual-issue-view.coffee
new file mode 100644 (file)
index 0000000..cf570fe
--- /dev/null
@@ -0,0 +1,89 @@
+define [
+  'backbone.marionette'
+  'templates/issue'
+], (
+  Marionette
+  Templates
+) ->
+
+  $ = jQuery
+  API_ISSUE = "#{baseUrl}/api/issues/show"
+  API_ADD_MANUAL_ISSUE = "#{baseUrl}/api/issues/create"
+
+
+  class extends Marionette.ItemView
+    template: Templates['manual-issue']
+
+
+    events:
+      'submit .js-manual-issue-form': 'formSubmit'
+      'click .js-cancel': 'cancel'
+
+
+    onRender: ->
+      @delegateEvents()
+      @$('[name=rule]').select2
+        width: '250px'
+        minimumResultsForSearch: 10
+      @$('[name=rule]').select2 'open'
+      if key?
+        @key = key.getScope()
+        key.setScope ''
+
+
+    onClose: ->
+      key.setScope @key if key? && @key?
+
+
+    showSpinner: ->
+      @$('.js-submit').hide()
+      @$('.js-spinner').show()
+
+
+    hideSpinner: ->
+      @$('.js-submit').show()
+      @$('.js-spinner').hide()
+
+
+    validateFields: ->
+      message = @$('[name=message]')
+      unless message.val()
+        message.addClass('invalid').focus()
+        return false
+      return true
+
+
+    formSubmit: (e) ->
+      e.preventDefault()
+      return unless @validateFields()
+      @showSpinner()
+      data = $(e.currentTarget).serialize()
+      $.post API_ADD_MANUAL_ISSUE, data
+        .done (r) =>
+          @addIssue r.issue.key
+        .fail (r) =>
+          @hideSpinner()
+          if r.responseJSON?.errors?
+            @showError _.pluck(r.responseJSON.errors, 'msg').join '. '
+
+
+    addIssue: (key) ->
+      $.get API_ISSUE, key: key, (r) =>
+        @trigger 'add', r.issue
+        @close()
+
+
+    showError: (msg) ->
+      @$('.code-issue-errors').removeClass('hidden').text msg
+
+
+    cancel: (e) ->
+      e.preventDefault()
+      @close()
+
+
+    serializeData: ->
+      _.extend super,
+        line: @options.line
+        component: @options.component
+        rules: _.sortBy @options.rules, 'name'
diff --git a/server/sonar-web/src/main/coffee/issue/models/change-log.coffee b/server/sonar-web/src/main/coffee/issue/models/change-log.coffee
new file mode 100644 (file)
index 0000000..eda1d6f
--- /dev/null
@@ -0,0 +1,14 @@
+define [
+  'backbone'
+], (
+  Backbone
+) ->
+
+  class ChangeLog extends Backbone.Collection
+
+    url: ->
+      "#{baseUrl}/api/issues/changelog"
+
+
+    parse: (r) ->
+      return r.changelog
\ No newline at end of file
diff --git a/server/sonar-web/src/main/coffee/issue/models/issue.coffee b/server/sonar-web/src/main/coffee/issue/models/issue.coffee
new file mode 100644 (file)
index 0000000..9011a28
--- /dev/null
@@ -0,0 +1,14 @@
+define [
+  'backbone'
+], (
+  Backbone
+) ->
+
+  class Issue extends Backbone.Model
+
+    url: ->
+      "#{baseUrl}/api/issues/show?key=#{@get('key')}"
+
+
+    parse: (r) ->
+      if r.issue then r.issue else r
\ No newline at end of file
diff --git a/server/sonar-web/src/main/coffee/issue/models/rule.coffee b/server/sonar-web/src/main/coffee/issue/models/rule.coffee
new file mode 100644 (file)
index 0000000..570feb8
--- /dev/null
@@ -0,0 +1,14 @@
+define [
+  'backbone'
+], (
+  Backbone
+) ->
+
+  class Rule extends Backbone.Model
+
+    url: ->
+      "#{baseUrl}/api/rules/show/?key=#{@get('key')}"
+
+
+    parse: (r) ->
+      if r.rule then r.rule else r
\ No newline at end of file
diff --git a/server/sonar-web/src/main/coffee/issue/views/assign-form-view.coffee b/server/sonar-web/src/main/coffee/issue/views/assign-form-view.coffee
new file mode 100644 (file)
index 0000000..2e2b669
--- /dev/null
@@ -0,0 +1,81 @@
+define [
+  'backbone.marionette'
+  'templates/issue'
+], (
+  Marionette
+  Templates
+) ->
+
+  $ = jQuery
+  ME = '#me#'
+
+
+  class AssignFormView extends Marionette.ItemView
+    template: Templates['assign-form']
+
+
+    ui:
+      select: '#issue-assignee-select'
+
+
+    events:
+      'click #issue-assign-cancel': 'cancel'
+      'click #issue-assign-submit': 'submit'
+
+
+    onRender: ->
+      currentUser = window.SS.currentUser
+      assignee = @options.issue.get('assignee')
+      additionalChoices = []
+
+      if !assignee || currentUser != assignee
+        additionalChoices.push id: ME, text: t('assigned_to_me')
+
+      if !!assignee
+        additionalChoices.push id: '', text: t('unassigned')
+
+      select2Options =
+        allowClear: false
+        width: '250px'
+        formatNoMatches: -> t('select2.noMatches')
+        formatSearching: -> t('select2.searching')
+        formatInputTooShort: -> t('select2.tooShort')
+
+      if additionalChoices.length > 0
+        select2Options.minimumInputLength = 0
+        select2Options.query = (query) ->
+          if query.term.length == 0
+            query.callback results: additionalChoices
+          else if query.term.length >= 2
+            $.ajax
+              url: baseUrl + '/api/users/search?f=s2'
+              data: s: query.term
+              dataType: 'jsonp'
+            .done (data) -> query.callback data
+      else
+        select2Options.minimumInputLength = 2
+        select2Options.ajax =
+          quietMillis: 300
+          url: baseUrl + '/api/users/search?f=s2'
+          data: (term, page) -> s: term, p: page
+          results: (data) -> more: data.more, results: data.results
+
+      @ui.select.select2(select2Options).select2 'open'
+
+
+    cancel: ->
+      @options.detailView.updateAfterAction false
+
+
+    submit: ->
+      @options.detailView.showActionSpinner()
+      data = issue: @options.issue.get('key')
+      if @ui.select.val() == ME then data.me = true else data.assignee = @ui.select.val()
+      $.ajax
+        type: 'POST'
+        url: baseUrl + '/api/issues/assign'
+        data: data
+      .done => @options.detailView.updateAfterAction true
+      .fail (r) =>
+        alert _.pluck(r.responseJSON.errors, 'msg').join(' ')
+        @options.detailView.hideActionSpinner()
diff --git a/server/sonar-web/src/main/coffee/issue/views/change-log-view.coffee b/server/sonar-web/src/main/coffee/issue/views/change-log-view.coffee
new file mode 100644 (file)
index 0000000..5978c9b
--- /dev/null
@@ -0,0 +1,19 @@
+define [
+  'backbone.marionette'
+  'templates/issue'
+], (
+  Marionette
+  Templates
+) ->
+
+  class IssueDetailChangeLogView extends Marionette.ItemView
+    template: Templates['change-log']
+
+
+    collectionEvents:
+      'sync': 'render'
+
+
+    serializeData: ->
+      _.extend super,
+        issue: @options.issue.toJSON()
diff --git a/server/sonar-web/src/main/coffee/issue/views/comment-form-view.coffee b/server/sonar-web/src/main/coffee/issue/views/comment-form-view.coffee
new file mode 100644 (file)
index 0000000..240865e
--- /dev/null
@@ -0,0 +1,60 @@
+define [
+  'backbone.marionette'
+  'templates/issue'
+], (
+  Marionette
+  Templates
+) ->
+
+  $ = jQuery
+  
+
+  class IssueDetailCommentFormView extends Marionette.ItemView
+    template: Templates['comment-form']
+
+
+    ui:
+      textarea: '#issue-comment-text'
+      cancelButton: '#issue-comment-cancel'
+      submitButton: '#issue-comment-submit'
+
+
+    events:
+      'keyup #issue-comment-text': 'toggleSubmit'
+      'click #issue-comment-cancel': 'cancel'
+      'click #issue-comment-submit': 'submit'
+
+
+    onDomRefresh: ->
+      @ui.textarea.focus()
+
+
+    toggleSubmit: ->
+      @ui.submitButton.prop 'disabled', @ui.textarea.val().length == 0
+
+
+    cancel: ->
+      @options.detailView.updateAfterAction false
+
+
+    submit: ->
+      text = @ui.textarea.val()
+      update = @model && @model.has('key')
+      url = baseUrl + '/api/issues/' + (if update then 'edit_comment' else 'add_comment')
+      data = text: text
+
+      if update
+        data.key = @model.get('key')
+      else
+        data.issue = @options.issue.get('key')
+
+      @options.detailView.showActionSpinner()
+
+      $.ajax
+        type: 'POST'
+        url: url
+        data: data
+      .done => @options.detailView.updateAfterAction true
+      .fail (r) =>
+        alert _.pluck(r.responseJSON.errors 'msg').join(' ')
+        @options.detailView.hideActionSpinner()
diff --git a/server/sonar-web/src/main/coffee/issue/views/plan-form-view.coffee b/server/sonar-web/src/main/coffee/issue/views/plan-form-view.coffee
new file mode 100644 (file)
index 0000000..1e0c6b3
--- /dev/null
@@ -0,0 +1,59 @@
+define [
+  'backbone.marionette'
+  'templates/issue'
+], (
+  Marionette
+  Templates
+) ->
+
+  $ = jQuery
+
+
+  class PlanFormView extends Marionette.ItemView
+    template: Templates['plan-form']
+
+
+    collectionEvents:
+      'reset': 'render'
+
+
+    ui:
+      select: '#issue-detail-plan-select'
+
+
+    events:
+      'click #issue-plan-cancel': 'cancel'
+      'click #issue-plan-submit': 'submit'
+
+
+    onRender: ->
+      @ui.select.select2
+        width: '250px'
+        minimumResultsForSearch: 100
+
+      @$('.error a').prop('href', baseUrl + '/action_plans/index/' + this.options.issue.get('project'))
+
+
+    cancel: ->
+      @options.detailView.updateAfterAction(false);
+
+
+    submit: ->
+      plan = @ui.select.val()
+      @options.detailView.showActionSpinner()
+
+      $.ajax
+        type: 'POST'
+        url: baseUrl + '/api/issues/plan'
+        data:
+          issue: this.options.issue.get('key'),
+          plan: if plan == '#unplan' then '' else plan
+      .done => @options.detailView.updateAfterAction true
+      .fail (r) =>
+        alert _.pluck(r.responseJSON.errors, 'msg').join(' ')
+        @options.detailView.hideActionSpinner()
+
+
+    serializeData: ->
+      items: @collection.toJSON()
+      issue: @options.issue.toJSON()
diff --git a/server/sonar-web/src/main/coffee/issue/views/rule-view.coffee b/server/sonar-web/src/main/coffee/issue/views/rule-view.coffee
new file mode 100644 (file)
index 0000000..dee2010
--- /dev/null
@@ -0,0 +1,19 @@
+define [
+  'backbone.marionette'
+  'templates/issue'
+], (
+  Marionette
+  Templates
+) ->
+
+  class IssueDetailRuleView extends Marionette.ItemView
+    template: Templates['rule']
+
+    modelEvents:
+      'change': 'render'
+
+
+    serializeData: ->
+      _.extend super,
+        characteristic: this.options.issue.get 'characteristic'
+        subCharacteristic: this.options.issue.get 'subCharacteristic'
diff --git a/server/sonar-web/src/main/coffee/issue/views/set-severity-form-view.coffee b/server/sonar-web/src/main/coffee/issue/views/set-severity-form-view.coffee
new file mode 100644 (file)
index 0000000..3842a2d
--- /dev/null
@@ -0,0 +1,52 @@
+define [
+  'backbone.marionette'
+  'templates/issue'
+], (
+  Marionette
+  Templates
+) ->
+
+  $ = jQuery
+  
+
+  class SetSeverityFormView extends Marionette.ItemView
+    template: Templates['set-severity-form']
+
+
+    ui:
+      select: '#issue-set-severity-select'
+
+
+    events:
+      'click #issue-set-severity-cancel': 'cancel'
+      'click #issue-set-severity-submit': 'submit'
+
+
+    onRender: ->
+     format = (state) ->
+       return state.text unless state.id
+       '<i class="icon-severity-' + state.id.toLowerCase() + '"></i> ' + state.text
+
+     @ui.select.select2
+       minimumResultsForSearch: 100
+       formatResult: format
+       formatSelection: format
+       escapeMarkup: (m) -> m
+
+
+    cancel: ->
+      @options.detailView.updateAfterAction false
+
+
+    submit: ->
+      @options.detailView.showActionSpinner()
+      $.ajax
+        type: 'POST'
+        url: baseUrl + '/api/issues/set_severity'
+        data:
+          issue: @options.issue.get('key')
+          severity: @ui.select.val()
+      .done => @options.detailView.updateAfterAction true
+      .fail (r) =>
+        alert _.pluck(r.responseJSON.errors, 'msg').join(' ')
+        @options.detailView.hideActionSpinner()
diff --git a/server/sonar-web/src/main/coffee/issues/collections/action-plans.coffee b/server/sonar-web/src/main/coffee/issues/collections/action-plans.coffee
deleted file mode 100644 (file)
index 69e0d45..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-define [
-  'backbone'
-], (
-  Backbone
-) ->
-
-  class ActionPlans extends Backbone.Collection
-
-    url: ->
-      "#{baseUrl}/api/action_plans/search"
-
-
-    parse: (r) ->
-      r.actionPlans
\ No newline at end of file
diff --git a/server/sonar-web/src/main/coffee/issues/issue-view.coffee b/server/sonar-web/src/main/coffee/issues/issue-view.coffee
deleted file mode 100644 (file)
index 6f9022f..0000000
+++ /dev/null
@@ -1,274 +0,0 @@
-define [
-  'backbone.marionette'
-  'templates/issues'
-
-  'issues/models/rule'
-  'issues/views/rule-view'
-
-  'issues/models/change-log'
-  'issues/views/change-log-view'
-
-  'issues/collections/action-plans'
-
-  'issues/views/assign-form-view'
-  'issues/views/comment-form-view'
-  'issues/views/plan-form-view'
-  'issues/views/set-severity-form-view'
-
-], (
-  Marionette
-  Templates
-
-  Rule
-  RuleView
-
-  ChangeLog
-  ChangeLogView
-
-  ActionPlans
-
-  AssignFormView
-  CommentFormView
-  PlanFormView
-  SetSeverityFormView
-
-) ->
-
-  $ = jQuery
-
-
-  class IssueView extends Marionette.Layout
-    className: 'code-issues'
-    template: Templates['issue']
-
-
-    regions:
-      formRegion: '.code-issue-form'
-      ruleRegion: '#tab-issue-rule'
-      changeLogRegion: '#tab-issue-changelog'
-
-
-    modelEvents:
-      'change': 'render'
-
-
-    events:
-      'click': 'setDetailScope',
-
-      'click .code-issue-toggle': 'toggleCollapsed',
-
-      'click [href=#tab-issue-rule]': 'showRuleTab',
-      'click [href=#tab-issue-changelog]': 'showChangeLogTab',
-
-      'click #issue-comment': 'comment',
-      'click .issue-comment-edit': 'editComment',
-      'click .issue-comment-delete': 'deleteComment',
-      'click .issue-transition': 'transition',
-      'click #issue-set-severity': 'setSeverity',
-      'click #issue-assign': 'assign',
-      'click #issue-assign-to-me': 'assignToMe',
-      'click #issue-plan': 'plan',
-      'click .issue-action': 'action'
-
-
-    onRender: ->
-      @rule = new Rule key: this.model.get('rule')
-      @ruleRegion.show new RuleView model: @rule, issue: @model
-      @changeLog = new ChangeLog()
-      @changeLogRegion.show new ChangeLogView collection: @changeLog, issue: @model
-
-
-    setDetailScope: ->
-      key.setScope 'detail'
-
-
-    setListScope: ->
-      key.setScope 'list'
-
-
-    onClose: ->
-      @ruleRegion.reset() if @ruleRegion
-
-
-    resetIssue: (options) ->
-      @setListScope()
-      key = @model.get 'key'
-      @model.clear silent: true
-      @model.set { key: key }, { silent: true }
-      @model.fetch(options).done => @trigger 'reset'
-
-
-    toggleCollapsed: ->
-      @$('.code-issue').toggleClass 'code-issue-collapsed'
-      unless @$('.code-issue').is '.code-issue-collapsed'
-        @showRuleTab()
-
-
-    hideTabs: ->
-      @$('.js-tab-link').removeClass 'active-link'
-      @$('.js-tab').hide()
-
-
-    showTab: (tab) ->
-      @hideTabs()
-      s = "#tab-issue-#{tab}"
-      @$(s).show()
-      @$("[href=#{s}]").addClass 'active-link'
-
-
-    showRuleTab: (e) ->
-      e?.preventDefault()
-      @showTab 'rule'
-      unless @rule.has 'name'
-        @$('#tab-issue-rule').addClass 'navigator-fetching'
-        @rule.fetch
-          success: => @$('#tab-issue-rule').removeClass 'navigator-fetching'
-
-
-    showChangeLogTab: (e) ->
-      e?.preventDefault()
-      @showTab 'changelog'
-      unless @changeLog.length > 0
-        @$('#tab-issue-changeLog').addClass 'navigator-fetching'
-        @changeLog.fetch
-          data: issue: @model.get 'key'
-          success: => @$('#tab-issue-changelog').removeClass 'navigator-fetching'
-
-
-    showActionView: (view) ->
-      @$('.code-issue-actions').hide()
-      @$('.code-issue-form').show()
-      @formRegion.show view
-
-
-    showActionSpinner: ->
-      @$('.code-issue-actions').addClass 'navigator-fetching'
-
-
-    hideActionSpinner: ->
-      @$('.code-issue-actions').removeClass 'navigator-fetching'
-
-
-    updateAfterAction: (fetch) ->
-      @formRegion.reset()
-      @$('.code-issue-actions').show()
-      @$('.code-issue-form').hide()
-      @$('[data-comment-key]').show()
-
-      if fetch
-        $.when(@resetIssue()).done => @hideActionSpinner()
-
-
-    comment: ->
-      commentFormView = new CommentFormView
-        issue: @model
-        detailView: @
-      @showActionView commentFormView
-
-
-    editComment: (e) ->
-      commentEl = $(e.target).closest '[data-comment-key]'
-      commentKey = commentEl.data 'comment-key'
-      comment = _.findWhere this.model.get('comments'), { key: commentKey }
-
-      commentEl.hide();
-
-      commentFormView = new CommentFormView
-        model: new Backbone.Model comment
-        issue: @model
-        detailView: @
-      @showActionView commentFormView
-
-
-    deleteComment: (e) ->
-      commentKey = $(e.target).closest('[data-comment-key]').data 'comment-key'
-      confirmMsg = $(e.target).data 'confirm-msg'
-
-      if confirm(confirmMsg)
-        @showActionSpinner()
-        $.ajax
-          type: "POST"
-          url: baseUrl + "/issue/delete_comment?id=" + commentKey
-        .done => @updateAfterAction true
-        .fail (r) =>
-          alert  _.pluck(r.responseJSON.errors, 'msg').join(' ')
-          @hideActionSpinner()
-
-
-    transition: (e) ->
-      @showActionSpinner();
-      $.ajax
-        type: 'POST',
-        url: baseUrl + '/api/issues/do_transition',
-        data:
-          issue: @model.get('key')
-          transition: $(e.target).data('transition')
-      .done => @resetIssue()
-      .fail (r) =>
-        alert  _.pluck(r.responseJSON.errors, 'msg').join(' ')
-        @hideActionSpinner()
-
-
-    setSeverity: ->
-      setSeverityFormView = new SetSeverityFormView
-        issue: @model
-        detailView: @
-      @showActionView setSeverityFormView
-
-
-    assign: ->
-      assignFormView = new AssignFormView
-        issue: @model
-        detailView: this
-      @showActionView assignFormView
-
-
-    assignToMe: ->
-      @showActionSpinner()
-      $.ajax
-        type: 'POST'
-        url: baseUrl + '/api/issues/assign'
-        data:
-          issue: @model.get('key')
-          me: true
-      .done => @resetIssue()
-      .fail (r) =>
-        alert  _.pluck(r.responseJSON.errors, 'msg').join(' ')
-        @hideActionSpinner()
-
-
-    plan: ->
-      actionPlans = new ActionPlans()
-      planFormView = new PlanFormView
-        collection: actionPlans
-        issue: @model
-        detailView: @
-      @showActionSpinner()
-      actionPlans.fetch
-        reset: true
-        data: project: @model.get('project')
-        success: =>
-          @hideActionSpinner()
-          @showActionView planFormView
-
-
-    action: (e) ->
-      actionKey = $(e.target).data 'action'
-      @showActionSpinner()
-      $.ajax
-        type: 'POST'
-        url: baseUrl + '/api/issues/do_action'
-        data:
-          issue: @model.get('key')
-          actionKey: actionKey
-      .done => @resetIssue()
-      .fail (r) =>
-        alert  _.pluck(r.responseJSON.errors, 'msg').join(' ')
-        @hideActionSpinner()
-
-
-    serializeData: ->
-      componentKey = encodeURIComponent @model.get 'component'
-      issueKey = encodeURIComponent @model.get 'key'
-      _.extend super,
-        permalink: "#{baseUrl}/component/index#component=#{componentKey}&currentIssue=#{issueKey}"
diff --git a/server/sonar-web/src/main/coffee/issues/manual-issue-view.coffee b/server/sonar-web/src/main/coffee/issues/manual-issue-view.coffee
deleted file mode 100644 (file)
index 4b066d0..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-define [
-  'backbone.marionette'
-  'templates/issues'
-], (
-  Marionette
-  Templates
-) ->
-
-  $ = jQuery
-  API_ISSUE = "#{baseUrl}/api/issues/show"
-  API_ADD_MANUAL_ISSUE = "#{baseUrl}/api/issues/create"
-
-
-  class extends Marionette.ItemView
-    template: Templates['manual-issue']
-
-
-    events:
-      'submit .js-manual-issue-form': 'formSubmit'
-      'click .js-cancel': 'cancel'
-
-
-    onRender: ->
-      @delegateEvents()
-      @$('[name=rule]').select2
-        width: '250px'
-        minimumResultsForSearch: 10
-      @$('[name=rule]').select2 'open'
-      if key?
-        @key = key.getScope()
-        key.setScope ''
-
-
-    onClose: ->
-      key.setScope @key if key? && @key?
-
-
-    showSpinner: ->
-      @$('.js-submit').hide()
-      @$('.js-spinner').show()
-
-
-    hideSpinner: ->
-      @$('.js-submit').show()
-      @$('.js-spinner').hide()
-
-
-    validateFields: ->
-      message = @$('[name=message]')
-      unless message.val()
-        message.addClass('invalid').focus()
-        return false
-      return true
-
-
-    formSubmit: (e) ->
-      e.preventDefault()
-      return unless @validateFields()
-      @showSpinner()
-      data = $(e.currentTarget).serialize()
-      $.post API_ADD_MANUAL_ISSUE, data
-        .done (r) =>
-          @addIssue r.issue.key
-        .fail (r) =>
-          @hideSpinner()
-          if r.responseJSON?.errors?
-            @showError _.pluck(r.responseJSON.errors, 'msg').join '. '
-
-
-    addIssue: (key) ->
-      $.get API_ISSUE, key: key, (r) =>
-        @trigger 'add', r.issue
-        @close()
-
-
-    showError: (msg) ->
-      @$('.code-issue-errors').removeClass('hidden').text msg
-
-
-    cancel: (e) ->
-      e.preventDefault()
-      @close()
-
-
-    serializeData: ->
-      _.extend super,
-        line: @options.line
-        component: @options.component
-        rules: _.sortBy @options.rules, 'name'
diff --git a/server/sonar-web/src/main/coffee/issues/models/change-log.coffee b/server/sonar-web/src/main/coffee/issues/models/change-log.coffee
deleted file mode 100644 (file)
index eda1d6f..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-define [
-  'backbone'
-], (
-  Backbone
-) ->
-
-  class ChangeLog extends Backbone.Collection
-
-    url: ->
-      "#{baseUrl}/api/issues/changelog"
-
-
-    parse: (r) ->
-      return r.changelog
\ No newline at end of file
diff --git a/server/sonar-web/src/main/coffee/issues/models/issue.coffee b/server/sonar-web/src/main/coffee/issues/models/issue.coffee
deleted file mode 100644 (file)
index 9011a28..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-define [
-  'backbone'
-], (
-  Backbone
-) ->
-
-  class Issue extends Backbone.Model
-
-    url: ->
-      "#{baseUrl}/api/issues/show?key=#{@get('key')}"
-
-
-    parse: (r) ->
-      if r.issue then r.issue else r
\ No newline at end of file
diff --git a/server/sonar-web/src/main/coffee/issues/models/rule.coffee b/server/sonar-web/src/main/coffee/issues/models/rule.coffee
deleted file mode 100644 (file)
index 570feb8..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-define [
-  'backbone'
-], (
-  Backbone
-) ->
-
-  class Rule extends Backbone.Model
-
-    url: ->
-      "#{baseUrl}/api/rules/show/?key=#{@get('key')}"
-
-
-    parse: (r) ->
-      if r.rule then r.rule else r
\ No newline at end of file
diff --git a/server/sonar-web/src/main/coffee/issues/views/assign-form-view.coffee b/server/sonar-web/src/main/coffee/issues/views/assign-form-view.coffee
deleted file mode 100644 (file)
index b51435b..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-define [
-  'backbone.marionette'
-  'templates/issues'
-], (
-  Marionette
-  Templates
-) ->
-
-  $ = jQuery
-  ME = '#me#'
-
-
-  class AssignFormView extends Marionette.ItemView
-    template: Templates['assign-form']
-
-
-    ui:
-      select: '#issue-assignee-select'
-
-
-    events:
-      'click #issue-assign-cancel': 'cancel'
-      'click #issue-assign-submit': 'submit'
-
-
-    onRender: ->
-      currentUser = window.SS.currentUser
-      assignee = @options.issue.get('assignee')
-      additionalChoices = []
-
-      if !assignee || currentUser != assignee
-        additionalChoices.push id: ME, text: t('assigned_to_me')
-
-      if !!assignee
-        additionalChoices.push id: '', text: t('unassigned')
-
-      select2Options =
-        allowClear: false
-        width: '250px'
-        formatNoMatches: -> t('select2.noMatches')
-        formatSearching: -> t('select2.searching')
-        formatInputTooShort: -> t('select2.tooShort')
-
-      if additionalChoices.length > 0
-        select2Options.minimumInputLength = 0
-        select2Options.query = (query) ->
-          if query.term.length == 0
-            query.callback results: additionalChoices
-          else if query.term.length >= 2
-            $.ajax
-              url: baseUrl + '/api/users/search?f=s2'
-              data: s: query.term
-              dataType: 'jsonp'
-            .done (data) -> query.callback data
-      else
-        select2Options.minimumInputLength = 2
-        select2Options.ajax =
-          quietMillis: 300
-          url: baseUrl + '/api/users/search?f=s2'
-          data: (term, page) -> s: term, p: page
-          results: (data) -> more: data.more, results: data.results
-
-      @ui.select.select2(select2Options).select2 'open'
-
-
-    cancel: ->
-      @options.detailView.updateAfterAction false
-
-
-    submit: ->
-      @options.detailView.showActionSpinner()
-      data = issue: @options.issue.get('key')
-      if @ui.select.val() == ME then data.me = true else data.assignee = @ui.select.val()
-      $.ajax
-        type: 'POST'
-        url: baseUrl + '/api/issues/assign'
-        data: data
-      .done => @options.detailView.updateAfterAction true
-      .fail (r) =>
-        alert _.pluck(r.responseJSON.errors, 'msg').join(' ')
-        @options.detailView.hideActionSpinner()
diff --git a/server/sonar-web/src/main/coffee/issues/views/change-log-view.coffee b/server/sonar-web/src/main/coffee/issues/views/change-log-view.coffee
deleted file mode 100644 (file)
index 8cdb57d..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-define [
-  'backbone.marionette'
-  'templates/issues'
-], (
-  Marionette
-  Templates
-) ->
-
-  class IssueDetailChangeLogView extends Marionette.ItemView
-    template: Templates['change-log']
-
-
-    collectionEvents:
-      'sync': 'render'
-
-
-    serializeData: ->
-      _.extend super,
-        issue: @options.issue.toJSON()
\ No newline at end of file
diff --git a/server/sonar-web/src/main/coffee/issues/views/comment-form-view.coffee b/server/sonar-web/src/main/coffee/issues/views/comment-form-view.coffee
deleted file mode 100644 (file)
index 57c0393..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-define [
-  'backbone.marionette'
-  'templates/issues'
-], (
-  Marionette
-  Templates
-) ->
-
-  $ = jQuery
-  
-
-  class IssueDetailCommentFormView extends Marionette.ItemView
-    template: Templates['comment-form']
-
-
-    ui:
-      textarea: '#issue-comment-text'
-      cancelButton: '#issue-comment-cancel'
-      submitButton: '#issue-comment-submit'
-
-
-    events:
-      'keyup #issue-comment-text': 'toggleSubmit'
-      'click #issue-comment-cancel': 'cancel'
-      'click #issue-comment-submit': 'submit'
-
-
-    onDomRefresh: ->
-      @ui.textarea.focus()
-
-
-    toggleSubmit: ->
-      @ui.submitButton.prop 'disabled', @ui.textarea.val().length == 0
-
-
-    cancel: ->
-      @options.detailView.updateAfterAction false
-
-
-    submit: ->
-      text = @ui.textarea.val()
-      update = @model && @model.has('key')
-      url = baseUrl + '/api/issues/' + (if update then 'edit_comment' else 'add_comment')
-      data = text: text
-
-      if update
-        data.key = @model.get('key')
-      else
-        data.issue = @options.issue.get('key')
-
-      @options.detailView.showActionSpinner()
-
-      $.ajax
-        type: 'POST'
-        url: url
-        data: data
-      .done => @options.detailView.updateAfterAction true
-      .fail (r) =>
-        alert _.pluck(r.responseJSON.errors 'msg').join(' ')
-        @options.detailView.hideActionSpinner()
\ No newline at end of file
diff --git a/server/sonar-web/src/main/coffee/issues/views/plan-form-view.coffee b/server/sonar-web/src/main/coffee/issues/views/plan-form-view.coffee
deleted file mode 100644 (file)
index c713020..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-define [
-  'backbone.marionette'
-  'templates/issues'
-], (
-  Marionette
-  Templates
-) ->
-
-  $ = jQuery
-
-
-  class PlanFormView extends Marionette.ItemView
-    template: Templates['plan-form']
-
-
-    collectionEvents:
-      'reset': 'render'
-
-
-    ui:
-      select: '#issue-detail-plan-select'
-
-
-    events:
-      'click #issue-plan-cancel': 'cancel'
-      'click #issue-plan-submit': 'submit'
-
-
-    onRender: ->
-      @ui.select.select2
-        width: '250px'
-        minimumResultsForSearch: 100
-
-      @$('.error a').prop('href', baseUrl + '/action_plans/index/' + this.options.issue.get('project'))
-
-
-    cancel: ->
-      @options.detailView.updateAfterAction(false);
-
-
-    submit: ->
-      plan = @ui.select.val()
-      @options.detailView.showActionSpinner()
-
-      $.ajax
-        type: 'POST'
-        url: baseUrl + '/api/issues/plan'
-        data:
-          issue: this.options.issue.get('key'),
-          plan: if plan == '#unplan' then '' else plan
-      .done => @options.detailView.updateAfterAction true
-      .fail (r) =>
-        alert _.pluck(r.responseJSON.errors, 'msg').join(' ')
-        @options.detailView.hideActionSpinner()
-
-
-    serializeData: ->
-      items: @collection.toJSON()
-      issue: @options.issue.toJSON()
\ No newline at end of file
diff --git a/server/sonar-web/src/main/coffee/issues/views/rule-view.coffee b/server/sonar-web/src/main/coffee/issues/views/rule-view.coffee
deleted file mode 100644 (file)
index 25038b0..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-define [
-  'backbone.marionette'
-  'templates/issues'
-], (
-  Marionette
-  Templates
-) ->
-
-  class IssueDetailRuleView extends Marionette.ItemView
-    template: Templates['rule']
-
-    modelEvents:
-      'change': 'render'
-
-
-    serializeData: ->
-      _.extend super,
-        characteristic: this.options.issue.get 'characteristic'
-        subCharacteristic: this.options.issue.get 'subCharacteristic'
\ No newline at end of file
diff --git a/server/sonar-web/src/main/coffee/issues/views/set-severity-form-view.coffee b/server/sonar-web/src/main/coffee/issues/views/set-severity-form-view.coffee
deleted file mode 100644 (file)
index 96d756d..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-define [
-  'backbone.marionette'
-  'templates/issues'
-], (
-  Marionette
-  Templates
-) ->
-
-  $ = jQuery
-  
-
-  class SetSeverityFormView extends Marionette.ItemView
-    template: Templates['set-severity-form']
-
-
-    ui:
-      select: '#issue-set-severity-select'
-
-
-    events:
-      'click #issue-set-severity-cancel': 'cancel'
-      'click #issue-set-severity-submit': 'submit'
-
-
-    onRender: ->
-     format = (state) ->
-       return state.text unless state.id
-       '<i class="icon-severity-' + state.id.toLowerCase() + '"></i> ' + state.text
-
-     @ui.select.select2
-       minimumResultsForSearch: 100
-       formatResult: format
-       formatSelection: format
-       escapeMarkup: (m) -> m
-
-
-    cancel: ->
-      @options.detailView.updateAfterAction false
-
-
-    submit: ->
-      @options.detailView.showActionSpinner()
-      $.ajax
-        type: 'POST'
-        url: baseUrl + '/api/issues/set_severity'
-        data:
-          issue: @options.issue.get('key')
-          severity: @ui.select.val()
-      .done => @options.detailView.updateAfterAction true
-      .fail (r) =>
-        alert _.pluck(r.responseJSON.errors, 'msg').join(' ')
-        @options.detailView.hideActionSpinner()
\ No newline at end of file
diff --git a/server/sonar-web/src/main/hbs/component-viewer/code-expand.hbs b/server/sonar-web/src/main/hbs/component-viewer/code-expand.hbs
deleted file mode 100644 (file)
index 0bfd742..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-<tr class="row row-expand">
-  {{#if settings.coverage}}
-    <td class="stat coverage-tests"></td>
-    <td class="stat coverage-conditions"></td>
-  {{/if}}
-  {{#if settings.duplications}}
-    <td class="stat"></td>
-  {{/if}}
-  {{#if settings.scm}}
-    <td class="stat"></td>
-  {{/if}}
-  <td class="stat lid">
-    <button class="button-clean js-expand" data-from="{{from}}" data-to="{{to}}"><i class="icon-expand"></i></button>
-  </td>
-  <td class="line"></td>
-</tr>
diff --git a/server/sonar-web/src/main/hbs/component-viewer/coveragePopup.hbs b/server/sonar-web/src/main/hbs/component-viewer/coveragePopup.hbs
deleted file mode 100644 (file)
index be7d99c..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-<div class="bubble-popup-container">
-  <div class="bubble-popup-title">{{t 'component_viewer.transition.coverage'}}</div>
-
-  {{#each testFiles}}
-    <div class="bubble-popup-section">
-      <a class="component-viewer-popup-test-file link-action" data-key="{{file.key}}" title="{{file.longName}}">
-        {{file.longName}}
-      </a>
-      <ul class="bubble-popup-list">
-        {{#each tests}}
-          <li class="component-viewer-popup-test" title="{{name}}">
-            <i class="component-viewer-popup-test-status {{testStatusIconClass status}}"></i>
-            <span class="component-viewer-popup-test-name">
-              <a class="component-viewer-popup-test-file link-action" title="{{name}}"
-                 data-key="{{../file.key}}" data-method="{{name}}">
-                {{name}}
-              </a>
-            </span>
-            <span class="component-viewer-popup-test-duration">{{durationInMs}}ms</span>
-          </li>
-        {{/each}}
-      </ul>
-    </div>
-  {{/each}}
-</div>
-
-<div class="bubble-popup-arrow"></div>
diff --git a/server/sonar-web/src/main/hbs/component-viewer/cw-code-expand.hbs b/server/sonar-web/src/main/hbs/component-viewer/cw-code-expand.hbs
new file mode 100644 (file)
index 0000000..0bfd742
--- /dev/null
@@ -0,0 +1,16 @@
+<tr class="row row-expand">
+  {{#if settings.coverage}}
+    <td class="stat coverage-tests"></td>
+    <td class="stat coverage-conditions"></td>
+  {{/if}}
+  {{#if settings.duplications}}
+    <td class="stat"></td>
+  {{/if}}
+  {{#if settings.scm}}
+    <td class="stat"></td>
+  {{/if}}
+  <td class="stat lid">
+    <button class="button-clean js-expand" data-from="{{from}}" data-to="{{to}}"><i class="icon-expand"></i></button>
+  </td>
+  <td class="line"></td>
+</tr>
diff --git a/server/sonar-web/src/main/hbs/component-viewer/cw-coverage-popup.hbs b/server/sonar-web/src/main/hbs/component-viewer/cw-coverage-popup.hbs
new file mode 100644 (file)
index 0000000..be7d99c
--- /dev/null
@@ -0,0 +1,27 @@
+<div class="bubble-popup-container">
+  <div class="bubble-popup-title">{{t 'component_viewer.transition.coverage'}}</div>
+
+  {{#each testFiles}}
+    <div class="bubble-popup-section">
+      <a class="component-viewer-popup-test-file link-action" data-key="{{file.key}}" title="{{file.longName}}">
+        {{file.longName}}
+      </a>
+      <ul class="bubble-popup-list">
+        {{#each tests}}
+          <li class="component-viewer-popup-test" title="{{name}}">
+            <i class="component-viewer-popup-test-status {{testStatusIconClass status}}"></i>
+            <span class="component-viewer-popup-test-name">
+              <a class="component-viewer-popup-test-file link-action" title="{{name}}"
+                 data-key="{{../file.key}}" data-method="{{name}}">
+                {{name}}
+              </a>
+            </span>
+            <span class="component-viewer-popup-test-duration">{{durationInMs}}ms</span>
+          </li>
+        {{/each}}
+      </ul>
+    </div>
+  {{/each}}
+</div>
+
+<div class="bubble-popup-arrow"></div>
diff --git a/server/sonar-web/src/main/hbs/component-viewer/cw-duplication-popup.hbs b/server/sonar-web/src/main/hbs/component-viewer/cw-duplication-popup.hbs
new file mode 100644 (file)
index 0000000..8161966
--- /dev/null
@@ -0,0 +1,26 @@
+<div class="bubble-popup-container">
+  <div class="bubble-popup-title">{{t 'component_viewer.transition.duplication'}}</div>
+  {{#each duplications}}
+    <div class="bubble-popup-section">
+      {{#notEq file.projectName ../component.projectName}}
+        <span class="component-viewer-popup-label">{{file.projectName}}</span>
+      {{/notEq}}
+      <a class="link-action" data-key="{{file.key}}" title="{{file.name}}">
+        {{file.name}}
+      </a>
+
+      <div class="component-viewer-popup-duplications">
+        Lines:
+        {{#joinEach blocks ','}}
+          <a class="link-action" data-key="{{../file.key}}" data-line="{{from}}">
+            {{from}} â€“ {{sum from size}}
+          </a>
+        {{/joinEach}}
+      </div>
+    </div>
+  {{else}}
+    {{t 'duplications.block_was_duplicated_by_a_deleted_resource'}}
+  {{/each}}
+</div>
+
+<div class="bubble-popup-arrow"></div>
diff --git a/server/sonar-web/src/main/hbs/component-viewer/cw-header.hbs b/server/sonar-web/src/main/hbs/component-viewer/cw-header.hbs
new file mode 100644 (file)
index 0000000..441fdc9
--- /dev/null
@@ -0,0 +1,147 @@
+<div class="component-viewer-header-bar">
+  <div class="component-viewer-header-component">
+    {{#unless state.removed}}
+      {{#if component.projectName}}
+        <div class="component-viewer-header-component-project">
+          {{qualifierIcon 'TRK'}}
+          <a class="link-action" href="{{dashboardUrl component.project}}">{{component.projectName}}</a>
+          {{#if component.subProjectName}}
+            / <a class="link-action" href="{{dashboardUrl component.subProject}}">{{component.subProjectName}}</a>
+          {{/if}}
+        </div>
+      {{/if}}
+
+      <div class="component-viewer-header-component-name">
+        {{qualifierIcon component.q}} {{default component.path component.longName}}
+
+        {{#if state.canMarkAsFavourite}}
+          <a class="js-favorite component-viewer-header-favorite"
+             title="{{#if component.fav}}{{t 'click_to_remove_from_favorites'}}{{else}}{{t 'click_to_add_to_favorites'}}{{/if}}">
+            <i class="{{#if component.fav}}icon-favorite{{else}}icon-not-favorite{{/if}}"></i>
+          </a>
+        {{/if}}
+      </div>
+    {{else}}
+      <div class="component-viewer-header-component-project removed">{{state.removedMessage}}</div>
+    {{/unless}}
+  </div>
+
+  {{#unless state.removed}}
+    <a class="js-actions component-viewer-header-actions" title="{{t 'component_viewer.more_actions'}}">
+      <i class="icon-list"></i>
+    </a>
+
+    <div class="component-viewer-header-measures">
+      {{#if component.isUnitTest}}
+        <div class="component-viewer-header-measures-scope">
+          <a data-scope="tests" class="component-viewer-header-measures-expand js-header-tab-tests">
+            <div class="component-viewer-header-measure">
+              <span class="component-viewer-header-measure-value">{{component.measures.fTests}}</span>
+              <span class="component-viewer-header-measure-label">{{t 'metric.tests.name'}}</span>
+            </div>
+            <i class="icon-dropdown"></i>
+          </a>
+        </div>
+      {{/if}}
+
+      {{#unless component.isUnitTest}}
+        <div class="component-viewer-header-measures-scope">
+          <span data-scope="basic" class="js-toggle-coverage component-viewer-header-measures-toggle-scope inactive"></span>
+          <a data-scope="basic" class="component-viewer-header-measures-expand js-header-tab-basic">
+            <div class="component-viewer-header-measure">
+              <span class="component-viewer-header-measure-value">{{default component.measures.fNcloc '–'}}</span>
+              <span class="component-viewer-header-measure-label">{{t 'metric.ncloc.name'}}</span>
+            </div>
+            <i class="icon-dropdown"></i>
+          </a>
+        </div>
+      {{/unless}}
+
+      <div class="component-viewer-header-measures-scope">
+        <a data-scope="issues" class="component-viewer-header-measures-expand js-header-tab-issues">
+          {{#if component.measures.fSqaleRating}}
+            <div class="component-viewer-header-measure">
+              <span class="rating rating-{{component.measures.fSqaleRating}}"
+                    {{#if component.measures.fSqaleDebtRatio}}title="{{t 'metric.sqale_debt_ratio.name'}}: {{component.measures.fSqaleDebtRatio}}"{{/if}}>
+                {{component.measures.fSqaleRating}}
+              </span>
+            </div>
+          {{/if}}
+          <div class="component-viewer-header-measure">
+            <span class="component-viewer-header-measure-value">{{default component.measures.fDebt '0'}}</span>
+            <span class="component-viewer-header-measure-label">{{t 'component_viewer.header.debt'}}</span>
+          </div>
+          {{#if component.measures.fIssues}}
+            <div class="component-viewer-header-measure">
+              <span class="component-viewer-header-measure-value">{{component.measures.fIssues}}</span>
+              <span class="component-viewer-header-measure-label">{{t 'metric.violations.name'}}</span>
+            </div>
+          {{/if}}
+          {{#if component.measures.fIssues}}
+            <div class="component-viewer-header-measure">
+              <div class="component-viewer-header-measure-issues">
+                <div class="component-viewer-header-measure-issue s-blocker"
+                     style="width: {{percent component.measures.fBlockerIssues component.measures.maxIssues}};"></div>
+                <div class="component-viewer-header-measure-issue s-critical"
+                     style="width: {{percent component.measures.fCriticalIssues component.measures.maxIssues}};"></div>
+                <div class="component-viewer-header-measure-issue s-major"
+                     style="width: {{percent component.measures.fMajorIssues component.measures.maxIssues}};"></div>
+                <div class="component-viewer-header-measure-issue s-minor"
+                     style="width: {{percent component.measures.fMinorIssues component.measures.maxIssues}};"></div>
+                <div class="component-viewer-header-measure-issue s-info"
+                     style="width: {{percent component.measures.fInfoIssues component.measures.maxIssues}};"></div>
+              </div>
+            </div>
+          {{/if}}
+          <i class="icon-dropdown"></i>
+        </a>
+        <a data-scope="issues" title="{{t 'component_viewer.header.toggle_issues'}}"
+           class="js-toggle-issues component-viewer-header-measures-toggle-scope {{#if settings.issues}}active{{/if}}"></a>
+      </div>
+
+      {{#inArray state.tabs 'coverage'}}
+        <div class="component-viewer-header-measures-scope">
+          <a data-scope="coverage" class="component-viewer-header-measures-expand js-header-tab-coverage">
+              <div class="component-viewer-header-measure">
+                <span class="component-viewer-header-measure-value">{{default component.measures.fCoverage '–'}}</span>
+                <span class="component-viewer-header-measure-label">{{t 'metric.coverage.name'}}</span>
+              </div>
+            <i class="icon-dropdown"></i>
+          </a>
+          <a data-scope="coverage" title="{{t 'component_viewer.header.toggle_coverage'}}"
+             class="js-toggle-coverage component-viewer-header-measures-toggle-scope {{#if settings.coverage}}active{{/if}}"></a>
+        </div>
+      {{/inArray}}
+
+      {{#inArray state.tabs 'duplications'}}
+        <div class="component-viewer-header-measures-scope">
+          <a data-scope="duplications" class="component-viewer-header-measures-expand js-header-tab-duplications">
+              <div class="component-viewer-header-measure">
+                <span class="component-viewer-header-measure-value">{{default component.measures.fDuplicationDensity '–'}}</span>
+                <span class="component-viewer-header-measure-label">{{t 'metric.duplicated_lines_density.name'}}</span>
+              </div>
+            <i class="icon-dropdown"></i>
+          </a>
+          <a data-scope="duplications" title="{{t 'component_viewer.header.toggle_duplications'}}"
+             class="js-toggle-duplications component-viewer-header-measures-toggle-scope {{#if settings.duplications}}active{{/if}}"></a>
+        </div>
+      {{/inArray}}
+
+      {{#inArray state.tabs 'scm'}}
+        <div class="component-viewer-header-measures-scope">
+          <a data-scope="scm" class="component-viewer-header-measures-expand js-header-tab-scm">
+            <div class="component-viewer-header-measure">
+              <span class="component-viewer-header-measure-value"><i class="icon-calendar"></i></span>
+              <span class="component-viewer-header-measure-label">SCM</span>
+            </div>
+            <i class="icon-dropdown"></i>
+          </a>
+          <a data-scope="scm" title="{{t 'component_viewer.header.toggle_scm'}}"
+             class="js-toggle-scm component-viewer-header-measures-toggle-scope {{#if settings.scm}}active{{/if}}"></a>
+        </div>
+      {{/inArray}}
+    </div>
+  {{/unless}}
+</div>
+
+<div class="component-viewer-header-expanded-bar"></div>
diff --git a/server/sonar-web/src/main/hbs/component-viewer/cw-layout.hbs b/server/sonar-web/src/main/hbs/component-viewer/cw-layout.hbs
new file mode 100644 (file)
index 0000000..a010e4c
--- /dev/null
@@ -0,0 +1,3 @@
+<div class="component-viewer-header"></div>
+<div class="component-viewer-workspace"></div>
+<div class="component-viewer-source"></div>
\ No newline at end of file
diff --git a/server/sonar-web/src/main/hbs/component-viewer/cw-line-options-popup.hbs b/server/sonar-web/src/main/hbs/component-viewer/cw-line-options-popup.hbs
new file mode 100644 (file)
index 0000000..fa9aae4
--- /dev/null
@@ -0,0 +1,15 @@
+<div class="bubble-popup-container">
+  <div class="bubble-popup-title">{{t 'component_viewer.line_actions'}}</div>
+
+  <div class="bubble-popup-section">
+    <a href="#" class="js-get-permalink link-action">{{t 'component_viewer.get_permalink'}}</a>
+  </div>
+
+  {{#if state.canCreateManualIssue}}
+    <div class="bubble-popup-section">
+      <a href="#" class="js-add-manual-issue link-action">{{t 'component_viewer.add_manual_issue'}}</a>
+    </div>
+  {{/if}}
+</div>
+
+<div class="bubble-popup-arrow"></div>
diff --git a/server/sonar-web/src/main/hbs/component-viewer/cw-more-actions.hbs b/server/sonar-web/src/main/hbs/component-viewer/cw-more-actions.hbs
new file mode 100644 (file)
index 0000000..354436d
--- /dev/null
@@ -0,0 +1,10 @@
+<a class="js-new-window underlined-link">{{t 'component_viewer.new_window'}}</a>
+<br>
+<a class="js-full-source underlined-link">{{t 'component_viewer.show_full_source'}}</a>
+<br>
+<a class="js-raw-source underlined-link">{{t 'component_viewer.show_raw_source'}}</a>
+
+{{#each state.extensions}}
+  <br>
+  <a class="js-extension underlined-link" data-key="{{this.[0]}}">{{this.[1]}}</a>
+{{/each}}
\ No newline at end of file
diff --git a/server/sonar-web/src/main/hbs/component-viewer/cw-source.hbs b/server/sonar-web/src/main/hbs/component-viewer/cw-source.hbs
new file mode 100644 (file)
index 0000000..79c44c4
--- /dev/null
@@ -0,0 +1,84 @@
+{{#if state.sourceSecurity}}
+
+  <p>{{t 'code_viewer.no_source_code_displayed_due_to_security'}}</p>
+
+{{else}}
+
+  {{#if state.duplicationsInDeletedFiles}}
+    <p class="marginbottom10">{{t 'duplications.dups_found_on_deleted_resource'}}</p>
+  {{/if}}
+
+  {{#if issuesLimitReached}}
+    <p class="message-alert marginbottom10">{{tp 'component_viewer.issues_limit_reached' issuesLimit}}</p>
+  {{/if}}
+
+  <table class="code">
+    {{#if showZeroLine}}
+      <tr class="row row-hidden" data-line-number="0" id="{{uid}}-0">
+        {{#if settings.coverage}}
+          <td class="stat coverage-tests"></td>
+          <td class="stat coverage-conditions"></td>
+        {{/if}}
+        {{#if settings.duplications}}
+          <td class="stat"></td>
+        {{/if}}
+        {{#if settings.scm}}
+          <td class="stat"></td>
+        {{/if}}
+        <td class="stat lid"></td>
+        <td class="line"></td>
+      </tr>
+    {{/if}}
+
+    {{#each source}}
+      {{#if show}}
+        <tr class="row" data-line-number="{{lineNumber}}" id="{{../../uid}}-{{lineNumber}}">
+
+          {{#if ../../settings.scm}}
+            <td class="stat {{#if scm}}scm{{/if}}">
+              {{#if scm}}
+                {{#ifSCMChanged ../../../../source ../../../lineNumber}}
+                  <span class="scm-date">{{scm.date}}</span>
+                  <span class="scm-author" title="{{scm.author}}">{{scm.author}}</span>
+                {{/ifSCMChanged}}
+              {{/if}}
+            </td>
+          {{/if}}
+
+          {{#if ../../settings.duplications}}
+            <td class="stat duplications">
+              {{#each duplications}}
+                <span class="duplication {{#if this}}duplication-exists{{/if}}" data-index="{{this}}"></span>
+              {{/each}}
+            </td>
+          {{/if}}
+
+          {{#if ../../settings.coverage}}
+            <td class="stat {{#if coverage}}coverage-{{#if coverage.covered}}green{{else}}red{{/if}}{{/if}}">
+              {{#if coverage}}
+                <span class="coverage-tests" title="{{tp 'coverage_viewer.line_covered_by_x_tests' coverage.testCases}}">
+                  {{coverage.testCases}}
+                </span>
+              {{/if}}
+            </td>
+
+            <td class="stat {{#if coverage}}{{#if coverage.branchCoverageStatus}}coverage-{{coverage.branchCoverageStatus}}{{/if}}{{/if}}">
+              {{#if coverage}}
+                {{#if coverage.branches}}
+                  <span class="coverage-branches" title="{{tp 'coverage_viewer.x_covered_branches' coverage.coveredBranches}}">
+                    {{coverage.coveredBranches}}/{{coverage.branches}}
+                  </span>
+                {{/if}}
+              {{/if}}
+            </td>
+          {{/if}}
+
+          <td class="stat lid js-line-actions" title="{{t 'component_viewer.line_actions'}}">{{lineNumber}}</td>
+
+          <td class="line"><pre>{{{code}}}</pre></td>
+        </tr>
+      {{/if}}
+    {{/each}}
+  </table>
+
+{{/if}}
diff --git a/server/sonar-web/src/main/hbs/component-viewer/cw-time-changes-popup.hbs b/server/sonar-web/src/main/hbs/component-viewer/cw-time-changes-popup.hbs
new file mode 100644 (file)
index 0000000..f7dc2c3
--- /dev/null
@@ -0,0 +1,9 @@
+<div class="bubble-popup-title">Time Changes</div>
+
+<ul class="bubble-popup-list">
+  {{#each periods}}
+    <li><a class="link-action" data-period="{{key}}">{{#if key}}{{../../prefix}}{{/if}} {{label}}</a></li>
+  {{/each}}
+</ul>
+
+<div class="bubble-popup-arrow"></div>
diff --git a/server/sonar-web/src/main/hbs/component-viewer/cw-workspace.hbs b/server/sonar-web/src/main/hbs/component-viewer/cw-workspace.hbs
new file mode 100644 (file)
index 0000000..32d2e67
--- /dev/null
@@ -0,0 +1,35 @@
+<div class="component-viewer-workspace-header">
+  <div class="component-viewer-workspace-title"
+       title="{{t 'component_viewer.workspace.tooltip'}}">{{t 'component_viewer.workspace'}}</div>
+  <button class="button-clean component-viewer-workspace-toggle js-toggle-workspace"
+          title="{{#if settings.workspace}}{{t 'component_viewer.workspace.hide_workspace'}}{{else}}{{t 'component_viewer.workspace.show_workspace'}}{{/if}}">
+    {{#if settings.workspace}}
+      <i class="icon-double-chevron-left"></i>
+    {{else}}
+      <i class="icon-double-chevron-right"></i>
+    {{/if}}
+  </button>
+</div>
+
+<ul class="component-viewer-workspace-list">
+  {{#eachReverse workspace}}
+    <li class="component-viewer-workspace-item {{#if active}}active{{/if}}">
+      {{qualifierIcon component.q}}
+      <a class="link-action" data-key="{{component.key}}">{{component.name}}</a>
+      {{#if component.dir}}
+        <div class="text-ellipsis subtitle">{{component.dir}}</div>
+      {{/if}}
+      {{#if options}}
+        <div class="component-viewer-workspace-transition">{{t 'component_viewer.transition' ../transition}}</div>
+        <ul class="component-viewer-workspace-options">
+          {{#each options}}
+            <li class="component-viewer-workspace-option text-ellipsis {{#if active}}active{{/if}}" title="{{name}}">
+              <a class="link-action" data-workspace-key="{{../component.key}}" data-key="{{key}}">{{name}}</a>
+              {{#if subname}}<div class="text-ellipsis subtitle" title="{{subname}}">{{subname}}</div>{{/if}}
+            </li>
+          {{/each}}
+        </ul>
+      {{/if}}
+    </li>
+  {{/eachReverse}}
+</ul>
\ No newline at end of file
diff --git a/server/sonar-web/src/main/hbs/component-viewer/duplicationPopup.hbs b/server/sonar-web/src/main/hbs/component-viewer/duplicationPopup.hbs
deleted file mode 100644 (file)
index 8161966..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-<div class="bubble-popup-container">
-  <div class="bubble-popup-title">{{t 'component_viewer.transition.duplication'}}</div>
-  {{#each duplications}}
-    <div class="bubble-popup-section">
-      {{#notEq file.projectName ../component.projectName}}
-        <span class="component-viewer-popup-label">{{file.projectName}}</span>
-      {{/notEq}}
-      <a class="link-action" data-key="{{file.key}}" title="{{file.name}}">
-        {{file.name}}
-      </a>
-
-      <div class="component-viewer-popup-duplications">
-        Lines:
-        {{#joinEach blocks ','}}
-          <a class="link-action" data-key="{{../file.key}}" data-line="{{from}}">
-            {{from}} â€“ {{sum from size}}
-          </a>
-        {{/joinEach}}
-      </div>
-    </div>
-  {{else}}
-    {{t 'duplications.block_was_duplicated_by_a_deleted_resource'}}
-  {{/each}}
-</div>
-
-<div class="bubble-popup-arrow"></div>
diff --git a/server/sonar-web/src/main/hbs/component-viewer/header.hbs b/server/sonar-web/src/main/hbs/component-viewer/header.hbs
deleted file mode 100644 (file)
index 441fdc9..0000000
+++ /dev/null
@@ -1,147 +0,0 @@
-<div class="component-viewer-header-bar">
-  <div class="component-viewer-header-component">
-    {{#unless state.removed}}
-      {{#if component.projectName}}
-        <div class="component-viewer-header-component-project">
-          {{qualifierIcon 'TRK'}}
-          <a class="link-action" href="{{dashboardUrl component.project}}">{{component.projectName}}</a>
-          {{#if component.subProjectName}}
-            / <a class="link-action" href="{{dashboardUrl component.subProject}}">{{component.subProjectName}}</a>
-          {{/if}}
-        </div>
-      {{/if}}
-
-      <div class="component-viewer-header-component-name">
-        {{qualifierIcon component.q}} {{default component.path component.longName}}
-
-        {{#if state.canMarkAsFavourite}}
-          <a class="js-favorite component-viewer-header-favorite"
-             title="{{#if component.fav}}{{t 'click_to_remove_from_favorites'}}{{else}}{{t 'click_to_add_to_favorites'}}{{/if}}">
-            <i class="{{#if component.fav}}icon-favorite{{else}}icon-not-favorite{{/if}}"></i>
-          </a>
-        {{/if}}
-      </div>
-    {{else}}
-      <div class="component-viewer-header-component-project removed">{{state.removedMessage}}</div>
-    {{/unless}}
-  </div>
-
-  {{#unless state.removed}}
-    <a class="js-actions component-viewer-header-actions" title="{{t 'component_viewer.more_actions'}}">
-      <i class="icon-list"></i>
-    </a>
-
-    <div class="component-viewer-header-measures">
-      {{#if component.isUnitTest}}
-        <div class="component-viewer-header-measures-scope">
-          <a data-scope="tests" class="component-viewer-header-measures-expand js-header-tab-tests">
-            <div class="component-viewer-header-measure">
-              <span class="component-viewer-header-measure-value">{{component.measures.fTests}}</span>
-              <span class="component-viewer-header-measure-label">{{t 'metric.tests.name'}}</span>
-            </div>
-            <i class="icon-dropdown"></i>
-          </a>
-        </div>
-      {{/if}}
-
-      {{#unless component.isUnitTest}}
-        <div class="component-viewer-header-measures-scope">
-          <span data-scope="basic" class="js-toggle-coverage component-viewer-header-measures-toggle-scope inactive"></span>
-          <a data-scope="basic" class="component-viewer-header-measures-expand js-header-tab-basic">
-            <div class="component-viewer-header-measure">
-              <span class="component-viewer-header-measure-value">{{default component.measures.fNcloc '–'}}</span>
-              <span class="component-viewer-header-measure-label">{{t 'metric.ncloc.name'}}</span>
-            </div>
-            <i class="icon-dropdown"></i>
-          </a>
-        </div>
-      {{/unless}}
-
-      <div class="component-viewer-header-measures-scope">
-        <a data-scope="issues" class="component-viewer-header-measures-expand js-header-tab-issues">
-          {{#if component.measures.fSqaleRating}}
-            <div class="component-viewer-header-measure">
-              <span class="rating rating-{{component.measures.fSqaleRating}}"
-                    {{#if component.measures.fSqaleDebtRatio}}title="{{t 'metric.sqale_debt_ratio.name'}}: {{component.measures.fSqaleDebtRatio}}"{{/if}}>
-                {{component.measures.fSqaleRating}}
-              </span>
-            </div>
-          {{/if}}
-          <div class="component-viewer-header-measure">
-            <span class="component-viewer-header-measure-value">{{default component.measures.fDebt '0'}}</span>
-            <span class="component-viewer-header-measure-label">{{t 'component_viewer.header.debt'}}</span>
-          </div>
-          {{#if component.measures.fIssues}}
-            <div class="component-viewer-header-measure">
-              <span class="component-viewer-header-measure-value">{{component.measures.fIssues}}</span>
-              <span class="component-viewer-header-measure-label">{{t 'metric.violations.name'}}</span>
-            </div>
-          {{/if}}
-          {{#if component.measures.fIssues}}
-            <div class="component-viewer-header-measure">
-              <div class="component-viewer-header-measure-issues">
-                <div class="component-viewer-header-measure-issue s-blocker"
-                     style="width: {{percent component.measures.fBlockerIssues component.measures.maxIssues}};"></div>
-                <div class="component-viewer-header-measure-issue s-critical"
-                     style="width: {{percent component.measures.fCriticalIssues component.measures.maxIssues}};"></div>
-                <div class="component-viewer-header-measure-issue s-major"
-                     style="width: {{percent component.measures.fMajorIssues component.measures.maxIssues}};"></div>
-                <div class="component-viewer-header-measure-issue s-minor"
-                     style="width: {{percent component.measures.fMinorIssues component.measures.maxIssues}};"></div>
-                <div class="component-viewer-header-measure-issue s-info"
-                     style="width: {{percent component.measures.fInfoIssues component.measures.maxIssues}};"></div>
-              </div>
-            </div>
-          {{/if}}
-          <i class="icon-dropdown"></i>
-        </a>
-        <a data-scope="issues" title="{{t 'component_viewer.header.toggle_issues'}}"
-           class="js-toggle-issues component-viewer-header-measures-toggle-scope {{#if settings.issues}}active{{/if}}"></a>
-      </div>
-
-      {{#inArray state.tabs 'coverage'}}
-        <div class="component-viewer-header-measures-scope">
-          <a data-scope="coverage" class="component-viewer-header-measures-expand js-header-tab-coverage">
-              <div class="component-viewer-header-measure">
-                <span class="component-viewer-header-measure-value">{{default component.measures.fCoverage '–'}}</span>
-                <span class="component-viewer-header-measure-label">{{t 'metric.coverage.name'}}</span>
-              </div>
-            <i class="icon-dropdown"></i>
-          </a>
-          <a data-scope="coverage" title="{{t 'component_viewer.header.toggle_coverage'}}"
-             class="js-toggle-coverage component-viewer-header-measures-toggle-scope {{#if settings.coverage}}active{{/if}}"></a>
-        </div>
-      {{/inArray}}
-
-      {{#inArray state.tabs 'duplications'}}
-        <div class="component-viewer-header-measures-scope">
-          <a data-scope="duplications" class="component-viewer-header-measures-expand js-header-tab-duplications">
-              <div class="component-viewer-header-measure">
-                <span class="component-viewer-header-measure-value">{{default component.measures.fDuplicationDensity '–'}}</span>
-                <span class="component-viewer-header-measure-label">{{t 'metric.duplicated_lines_density.name'}}</span>
-              </div>
-            <i class="icon-dropdown"></i>
-          </a>
-          <a data-scope="duplications" title="{{t 'component_viewer.header.toggle_duplications'}}"
-             class="js-toggle-duplications component-viewer-header-measures-toggle-scope {{#if settings.duplications}}active{{/if}}"></a>
-        </div>
-      {{/inArray}}
-
-      {{#inArray state.tabs 'scm'}}
-        <div class="component-viewer-header-measures-scope">
-          <a data-scope="scm" class="component-viewer-header-measures-expand js-header-tab-scm">
-            <div class="component-viewer-header-measure">
-              <span class="component-viewer-header-measure-value"><i class="icon-calendar"></i></span>
-              <span class="component-viewer-header-measure-label">SCM</span>
-            </div>
-            <i class="icon-dropdown"></i>
-          </a>
-          <a data-scope="scm" title="{{t 'component_viewer.header.toggle_scm'}}"
-             class="js-toggle-scm component-viewer-header-measures-toggle-scope {{#if settings.scm}}active{{/if}}"></a>
-        </div>
-      {{/inArray}}
-    </div>
-  {{/unless}}
-</div>
-
-<div class="component-viewer-header-expanded-bar"></div>
diff --git a/server/sonar-web/src/main/hbs/component-viewer/header/_cw-header-item.hbs b/server/sonar-web/src/main/hbs/component-viewer/header/_cw-header-item.hbs
new file mode 100644 (file)
index 0000000..dba6921
--- /dev/null
@@ -0,0 +1,4 @@
+<li><span class="item" data-metric="{{label}}">
+  <span class="label">{{t 'metric' label 'name'}}</span>
+  <span class="number">{{value}}</span>
+</span></li>
\ No newline at end of file
diff --git a/server/sonar-web/src/main/hbs/component-viewer/header/_cw-header-link.hbs b/server/sonar-web/src/main/hbs/component-viewer/header/_cw-header-link.hbs
new file mode 100644 (file)
index 0000000..70f6649
--- /dev/null
@@ -0,0 +1,5 @@
+<li><a class="item {{cl}}" data-metric="{{label}}">
+  <span class="label">{{t 'metric' label 'name'}}</span>
+  <span class="number">{{value}}</span>
+  <i class="icon-chevron-right"></i>
+</a></li>
\ No newline at end of file
diff --git a/server/sonar-web/src/main/hbs/component-viewer/header/_header-item.hbs b/server/sonar-web/src/main/hbs/component-viewer/header/_header-item.hbs
deleted file mode 100644 (file)
index dba6921..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<li><span class="item" data-metric="{{label}}">
-  <span class="label">{{t 'metric' label 'name'}}</span>
-  <span class="number">{{value}}</span>
-</span></li>
\ No newline at end of file
diff --git a/server/sonar-web/src/main/hbs/component-viewer/header/_header-link.hbs b/server/sonar-web/src/main/hbs/component-viewer/header/_header-link.hbs
deleted file mode 100644 (file)
index 70f6649..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<li><a class="item {{cl}}" data-metric="{{label}}">
-  <span class="label">{{t 'metric' label 'name'}}</span>
-  <span class="number">{{value}}</span>
-  <i class="icon-chevron-right"></i>
-</a></li>
\ No newline at end of file
diff --git a/server/sonar-web/src/main/hbs/component-viewer/header/basic-header.hbs b/server/sonar-web/src/main/hbs/component-viewer/header/basic-header.hbs
deleted file mode 100644 (file)
index 0e9a933..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-{{#with component.measures}}
-  <div class="component-viewer-header-expanded-bar-section">
-    <div class="component-viewer-header-expanded-bar-section-title">
-      {{t 'component_viewer.measure_section.size'}}
-    </div>
-    <ul class="component-viewer-header-expanded-bar-section-list">
-      {{{componentViewerHeaderItem lines 'lines'}}}
-      {{{componentViewerHeaderItem ncloc 'ncloc'}}}
-      {{{componentViewerHeaderItem generated_lines 'generated_lines'}}}
-      {{{componentViewerHeaderItem generated_ncloc 'generated_ncloc'}}}
-    </ul>
-  </div>
-
-  <div class="component-viewer-header-expanded-bar-section">
-    <div class="component-viewer-header-expanded-bar-section-title">
-      {{t 'component_viewer.measure_section.complexity'}}
-    </div>
-    <ul class="component-viewer-header-expanded-bar-section-list">
-      {{{componentViewerHeaderItem complexity 'complexity'}}}
-      {{{componentViewerHeaderItem function_complexity 'function_complexity'}}}
-    </ul>
-  </div>
-
-  <div class="component-viewer-header-expanded-bar-section">
-    <div class="component-viewer-header-expanded-bar-section-title">
-      {{t 'component_viewer.measure_section.structure'}}
-    </div>
-    <ul class="component-viewer-header-expanded-bar-section-list">
-      {{{componentViewerHeaderItem classes 'classes'}}}
-      {{{componentViewerHeaderItem functions 'functions'}}}
-      {{{componentViewerHeaderItem accessors 'accessors'}}}
-      {{{componentViewerHeaderItem statements 'statements'}}}
-    </ul>
-  </div>
-
-  <div class="component-viewer-header-expanded-bar-section">
-    <div class="component-viewer-header-expanded-bar-section-title">
-      {{t 'component_viewer.measure_section.documentation'}}
-    </div>
-    <ul class="component-viewer-header-expanded-bar-section-list">
-      {{{componentViewerHeaderItem comment_lines 'comment_lines'}}}
-      {{{componentViewerHeaderItem comment_lines_density 'comment_lines_density'}}}
-      {{{componentViewerHeaderItem public_api 'public_api'}}}
-      {{{componentViewerHeaderItem public_undocumented_api 'public_undocumented_api'}}}
-      {{{componentViewerHeaderItem public_documented_api_density 'public_documented_api_density'}}}
-    </ul>
-  </div>
-{{/with}}
\ No newline at end of file
diff --git a/server/sonar-web/src/main/hbs/component-viewer/header/coverage-header.hbs b/server/sonar-web/src/main/hbs/component-viewer/header/coverage-header.hbs
deleted file mode 100644 (file)
index f43fcf3..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-{{#if state.hasSource}}
-  <div class="component-viewer-header-time-changes">
-    <a class="highlighted-link js-coverage-time-changes">
-      {{#if period}}Δ {{period.label}}{{else}}<i class="icon-period"></i> {{t 'component_viewer.time_changes'}}{{/if}}
-    </a>
-  </div>
-{{/if}}
-
-{{#with component.measures}}
-  {{#any coverage line_coverage lines_to_cover covered_lines uncovered_lines branch_coverage conditions_to_cover covered_conditions uncovered_conditions it_coverage it_line_coverage it_lines_to_cover it_covered_lines it_uncovered_lines it_branch_coverage it_conditions_to_cover it_covered_conditions it_uncovered_conditions}}
-  {{else}}
-    <div class="component-viewer-header-expanded-bar-section">
-      <div class="component-viewer-header-expanded-bar-section-title">
-        {{t 'component_viewer.no_coverage'}}
-      </div>
-  {{/any}}
-
-  <span class="nowrap">
-    {{#any coverage line_coverage lines_to_cover covered_lines uncovered_lines}}
-      <div class="component-viewer-header-expanded-bar-section">
-        <div class="component-viewer-header-expanded-bar-section-title">
-          {{t 'component_viewer.measure_section.unit_tests'}}
-        </div>
-        <ul class="component-viewer-header-expanded-bar-section-list">
-          {{{componentViewerHeaderItem coverage 'coverage'}}}
-          {{{componentViewerHeaderItem line_coverage 'line_coverage'}}}
-          {{#if ../../state.hasSource}}
-            {{{componentViewerHeaderLink lines_to_cover 'lines_to_cover' 'js-filter-lines-to-cover'}}}
-            {{{componentViewerHeaderLink uncovered_lines 'uncovered_lines' 'js-filter-uncovered-lines'}}}
-          {{else}}
-            {{{componentViewerHeaderItem lines_to_cover 'lines_to_cover'}}}
-            {{{componentViewerHeaderItem uncovered_lines 'uncovered_lines'}}}
-          {{/if}}
-        </ul>
-      </div>
-    {{/any}}
-
-    {{#any branch_coverage conditions_to_cover covered_conditions uncovered_conditions}}
-      <div class="component-viewer-header-expanded-bar-section">
-        <div class="component-viewer-header-expanded-bar-section-title">
-          {{#any coverage line_coverage lines_to_cover covered_lines uncovered_lines}}
-            &nbsp;
-          {{else}}
-            {{t 'component_viewer.measure_section.unit_tests'}}
-          {{/any}}
-        </div>
-        <ul class="component-viewer-header-expanded-bar-section-list">
-          {{#any coverage line_coverage lines_to_cover covered_lines uncovered_lines}}
-            <li><span class="item">&nbsp;</span></li>
-          {{/any}}
-          {{{componentViewerHeaderItem branch_coverage 'branch_coverage'}}}
-          {{#if ../../state.hasSource}}
-            {{{componentViewerHeaderLink conditions_to_cover 'conditions_to_cover' 'js-filter-branches-to-cover'}}}
-            {{{componentViewerHeaderLink uncovered_conditions 'uncovered_conditions' 'js-filter-uncovered-branches'}}}
-          {{else}}
-            {{{componentViewerHeaderItem conditions_to_cover 'conditions_to_cover'}}}
-            {{{componentViewerHeaderItem uncovered_conditions 'uncovered_conditions'}}}
-          {{/if}}
-        </ul>
-      </div>
-    {{/any}}
-  </span>
-
-  <span class="nowrap">
-    {{#any it_coverage it_line_coverage it_lines_to_cover it_covered_lines it_uncovered_lines}}
-      <div class="component-viewer-header-expanded-bar-section">
-        <div class="component-viewer-header-expanded-bar-section-title">
-          {{t 'component_viewer.measure_section.integration_tests'}}
-        </div>
-        <ul class="component-viewer-header-expanded-bar-section-list">
-          {{{componentViewerHeaderItem it_coverage 'coverage'}}}
-          {{{componentViewerHeaderItem it_line_coverage 'line_coverage'}}}
-          {{#if ../../state.hasSource}}
-            {{{componentViewerHeaderLink it_lines_to_cover 'lines_to_cover' 'js-filter-lines-to-cover-it'}}}
-            {{{componentViewerHeaderLink it_uncovered_lines 'uncovered_lines' 'js-filter-uncovered-lines-it'}}}
-          {{else}}
-            {{{componentViewerHeaderItem it_lines_to_cover 'lines_to_cover'}}}
-            {{{componentViewerHeaderItem it_uncovered_lines 'uncovered_lines'}}}
-          {{/if}}
-        </ul>
-      </div>
-    {{/any}}
-
-    {{#any it_branch_coverage it_conditions_to_cover it_covered_conditions it_uncovered_conditions}}
-      <div class="component-viewer-header-expanded-bar-section">
-        <div class="component-viewer-header-expanded-bar-section-title">
-          {{#any it_coverage it_line_coverage it_lines_to_cover it_covered_lines it_uncovered_lines}}
-            &nbsp;
-          {{else}}
-            {{t 'component_viewer.measure_section.integration_tests'}}
-          {{/any}}
-        </div>
-        <ul class="component-viewer-header-expanded-bar-section-list">
-          {{#any it_coverage it_line_coverage it_lines_to_cover it_covered_lines it_uncovered_lines}}
-              <li><span class="item">&nbsp;</span></li>
-          {{/any}}
-          {{{componentViewerHeaderItem it_branch_coverage 'branch_coverage'}}}
-          {{#if ../../state.hasSource}}
-            {{{componentViewerHeaderLink it_conditions_to_cover 'conditions_to_cover' 'js-filter-branches-to-cover-it'}}}
-            {{{componentViewerHeaderLink it_uncovered_conditions 'uncovered_conditions' 'js-filter-uncovered-branches-it'}}}
-          {{else}}
-            {{{componentViewerHeaderItem it_conditions_to_cover 'conditions_to_cover'}}}
-            {{{componentViewerHeaderItem it_uncovered_conditions 'uncovered_conditions'}}}
-          {{/if}}
-        </ul>
-      </div>
-    {{/any}}
-  </span>
-{{/with}}
diff --git a/server/sonar-web/src/main/hbs/component-viewer/header/covered-files-popup.hbs b/server/sonar-web/src/main/hbs/component-viewer/header/covered-files-popup.hbs
deleted file mode 100644 (file)
index 4d72fef..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-<div class="bubble-popup-container">
-  {{#notEq test.status 'ERROR'}}
-    {{#notEq test.status 'FAILURE'}}
-      <div class="bubble-popup-title">{{t 'component_viewer.transition.covers'}}</div>
-      {{#each items}}
-        <div class="bubble-popup-section">
-          <a class="component-viewer-popup-test-file link-action" data-key="{{key}}" title="{{name}}">{{name}}</a>
-          <span class="subtitle">{{tp 'component_viewer.x_lines_are_covered' coveredLines}}</span>
-          <br><span class="subtitle" title="{{dir}}">{{dir}}</span>
-        </div>
-      {{else}}
-        {{t 'none'}}
-      {{/each}}
-    {{/notEq}}
-  {{/notEq}}
-
-  {{#notEq test.status 'OK'}}
-    <div class="bubble-popup-title">{{t 'component_viewer.details'}}</div>
-    {{#if test.message}}
-      <pre>{{test.message}}</pre>
-    {{/if}}
-    <pre>{{test.stackTrace}}</pre>
-  {{/notEq}}
-
-</div>
-
-<div class="bubble-popup-arrow"></div>
diff --git a/server/sonar-web/src/main/hbs/component-viewer/header/cw-basic-header.hbs b/server/sonar-web/src/main/hbs/component-viewer/header/cw-basic-header.hbs
new file mode 100644 (file)
index 0000000..0e9a933
--- /dev/null
@@ -0,0 +1,48 @@
+{{#with component.measures}}
+  <div class="component-viewer-header-expanded-bar-section">
+    <div class="component-viewer-header-expanded-bar-section-title">
+      {{t 'component_viewer.measure_section.size'}}
+    </div>
+    <ul class="component-viewer-header-expanded-bar-section-list">
+      {{{componentViewerHeaderItem lines 'lines'}}}
+      {{{componentViewerHeaderItem ncloc 'ncloc'}}}
+      {{{componentViewerHeaderItem generated_lines 'generated_lines'}}}
+      {{{componentViewerHeaderItem generated_ncloc 'generated_ncloc'}}}
+    </ul>
+  </div>
+
+  <div class="component-viewer-header-expanded-bar-section">
+    <div class="component-viewer-header-expanded-bar-section-title">
+      {{t 'component_viewer.measure_section.complexity'}}
+    </div>
+    <ul class="component-viewer-header-expanded-bar-section-list">
+      {{{componentViewerHeaderItem complexity 'complexity'}}}
+      {{{componentViewerHeaderItem function_complexity 'function_complexity'}}}
+    </ul>
+  </div>
+
+  <div class="component-viewer-header-expanded-bar-section">
+    <div class="component-viewer-header-expanded-bar-section-title">
+      {{t 'component_viewer.measure_section.structure'}}
+    </div>
+    <ul class="component-viewer-header-expanded-bar-section-list">
+      {{{componentViewerHeaderItem classes 'classes'}}}
+      {{{componentViewerHeaderItem functions 'functions'}}}
+      {{{componentViewerHeaderItem accessors 'accessors'}}}
+      {{{componentViewerHeaderItem statements 'statements'}}}
+    </ul>
+  </div>
+
+  <div class="component-viewer-header-expanded-bar-section">
+    <div class="component-viewer-header-expanded-bar-section-title">
+      {{t 'component_viewer.measure_section.documentation'}}
+    </div>
+    <ul class="component-viewer-header-expanded-bar-section-list">
+      {{{componentViewerHeaderItem comment_lines 'comment_lines'}}}
+      {{{componentViewerHeaderItem comment_lines_density 'comment_lines_density'}}}
+      {{{componentViewerHeaderItem public_api 'public_api'}}}
+      {{{componentViewerHeaderItem public_undocumented_api 'public_undocumented_api'}}}
+      {{{componentViewerHeaderItem public_documented_api_density 'public_documented_api_density'}}}
+    </ul>
+  </div>
+{{/with}}
\ No newline at end of file
diff --git a/server/sonar-web/src/main/hbs/component-viewer/header/cw-coverage-header.hbs b/server/sonar-web/src/main/hbs/component-viewer/header/cw-coverage-header.hbs
new file mode 100644 (file)
index 0000000..f43fcf3
--- /dev/null
@@ -0,0 +1,109 @@
+{{#if state.hasSource}}
+  <div class="component-viewer-header-time-changes">
+    <a class="highlighted-link js-coverage-time-changes">
+      {{#if period}}Δ {{period.label}}{{else}}<i class="icon-period"></i> {{t 'component_viewer.time_changes'}}{{/if}}
+    </a>
+  </div>
+{{/if}}
+
+{{#with component.measures}}
+  {{#any coverage line_coverage lines_to_cover covered_lines uncovered_lines branch_coverage conditions_to_cover covered_conditions uncovered_conditions it_coverage it_line_coverage it_lines_to_cover it_covered_lines it_uncovered_lines it_branch_coverage it_conditions_to_cover it_covered_conditions it_uncovered_conditions}}
+  {{else}}
+    <div class="component-viewer-header-expanded-bar-section">
+      <div class="component-viewer-header-expanded-bar-section-title">
+        {{t 'component_viewer.no_coverage'}}
+      </div>
+  {{/any}}
+
+  <span class="nowrap">
+    {{#any coverage line_coverage lines_to_cover covered_lines uncovered_lines}}
+      <div class="component-viewer-header-expanded-bar-section">
+        <div class="component-viewer-header-expanded-bar-section-title">
+          {{t 'component_viewer.measure_section.unit_tests'}}
+        </div>
+        <ul class="component-viewer-header-expanded-bar-section-list">
+          {{{componentViewerHeaderItem coverage 'coverage'}}}
+          {{{componentViewerHeaderItem line_coverage 'line_coverage'}}}
+          {{#if ../../state.hasSource}}
+            {{{componentViewerHeaderLink lines_to_cover 'lines_to_cover' 'js-filter-lines-to-cover'}}}
+            {{{componentViewerHeaderLink uncovered_lines 'uncovered_lines' 'js-filter-uncovered-lines'}}}
+          {{else}}
+            {{{componentViewerHeaderItem lines_to_cover 'lines_to_cover'}}}
+            {{{componentViewerHeaderItem uncovered_lines 'uncovered_lines'}}}
+          {{/if}}
+        </ul>
+      </div>
+    {{/any}}
+
+    {{#any branch_coverage conditions_to_cover covered_conditions uncovered_conditions}}
+      <div class="component-viewer-header-expanded-bar-section">
+        <div class="component-viewer-header-expanded-bar-section-title">
+          {{#any coverage line_coverage lines_to_cover covered_lines uncovered_lines}}
+            &nbsp;
+          {{else}}
+            {{t 'component_viewer.measure_section.unit_tests'}}
+          {{/any}}
+        </div>
+        <ul class="component-viewer-header-expanded-bar-section-list">
+          {{#any coverage line_coverage lines_to_cover covered_lines uncovered_lines}}
+            <li><span class="item">&nbsp;</span></li>
+          {{/any}}
+          {{{componentViewerHeaderItem branch_coverage 'branch_coverage'}}}
+          {{#if ../../state.hasSource}}
+            {{{componentViewerHeaderLink conditions_to_cover 'conditions_to_cover' 'js-filter-branches-to-cover'}}}
+            {{{componentViewerHeaderLink uncovered_conditions 'uncovered_conditions' 'js-filter-uncovered-branches'}}}
+          {{else}}
+            {{{componentViewerHeaderItem conditions_to_cover 'conditions_to_cover'}}}
+            {{{componentViewerHeaderItem uncovered_conditions 'uncovered_conditions'}}}
+          {{/if}}
+        </ul>
+      </div>
+    {{/any}}
+  </span>
+
+  <span class="nowrap">
+    {{#any it_coverage it_line_coverage it_lines_to_cover it_covered_lines it_uncovered_lines}}
+      <div class="component-viewer-header-expanded-bar-section">
+        <div class="component-viewer-header-expanded-bar-section-title">
+          {{t 'component_viewer.measure_section.integration_tests'}}
+        </div>
+        <ul class="component-viewer-header-expanded-bar-section-list">
+          {{{componentViewerHeaderItem it_coverage 'coverage'}}}
+          {{{componentViewerHeaderItem it_line_coverage 'line_coverage'}}}
+          {{#if ../../state.hasSource}}
+            {{{componentViewerHeaderLink it_lines_to_cover 'lines_to_cover' 'js-filter-lines-to-cover-it'}}}
+            {{{componentViewerHeaderLink it_uncovered_lines 'uncovered_lines' 'js-filter-uncovered-lines-it'}}}
+          {{else}}
+            {{{componentViewerHeaderItem it_lines_to_cover 'lines_to_cover'}}}
+            {{{componentViewerHeaderItem it_uncovered_lines 'uncovered_lines'}}}
+          {{/if}}
+        </ul>
+      </div>
+    {{/any}}
+
+    {{#any it_branch_coverage it_conditions_to_cover it_covered_conditions it_uncovered_conditions}}
+      <div class="component-viewer-header-expanded-bar-section">
+        <div class="component-viewer-header-expanded-bar-section-title">
+          {{#any it_coverage it_line_coverage it_lines_to_cover it_covered_lines it_uncovered_lines}}
+            &nbsp;
+          {{else}}
+            {{t 'component_viewer.measure_section.integration_tests'}}
+          {{/any}}
+        </div>
+        <ul class="component-viewer-header-expanded-bar-section-list">
+          {{#any it_coverage it_line_coverage it_lines_to_cover it_covered_lines it_uncovered_lines}}
+              <li><span class="item">&nbsp;</span></li>
+          {{/any}}
+          {{{componentViewerHeaderItem it_branch_coverage 'branch_coverage'}}}
+          {{#if ../../state.hasSource}}
+            {{{componentViewerHeaderLink it_conditions_to_cover 'conditions_to_cover' 'js-filter-branches-to-cover-it'}}}
+            {{{componentViewerHeaderLink it_uncovered_conditions 'uncovered_conditions' 'js-filter-uncovered-branches-it'}}}
+          {{else}}
+            {{{componentViewerHeaderItem it_conditions_to_cover 'conditions_to_cover'}}}
+            {{{componentViewerHeaderItem it_uncovered_conditions 'uncovered_conditions'}}}
+          {{/if}}
+        </ul>
+      </div>
+    {{/any}}
+  </span>
+{{/with}}
diff --git a/server/sonar-web/src/main/hbs/component-viewer/header/cw-covered-files-popup.hbs b/server/sonar-web/src/main/hbs/component-viewer/header/cw-covered-files-popup.hbs
new file mode 100644 (file)
index 0000000..4d72fef
--- /dev/null
@@ -0,0 +1,27 @@
+<div class="bubble-popup-container">
+  {{#notEq test.status 'ERROR'}}
+    {{#notEq test.status 'FAILURE'}}
+      <div class="bubble-popup-title">{{t 'component_viewer.transition.covers'}}</div>
+      {{#each items}}
+        <div class="bubble-popup-section">
+          <a class="component-viewer-popup-test-file link-action" data-key="{{key}}" title="{{name}}">{{name}}</a>
+          <span class="subtitle">{{tp 'component_viewer.x_lines_are_covered' coveredLines}}</span>
+          <br><span class="subtitle" title="{{dir}}">{{dir}}</span>
+        </div>
+      {{else}}
+        {{t 'none'}}
+      {{/each}}
+    {{/notEq}}
+  {{/notEq}}
+
+  {{#notEq test.status 'OK'}}
+    <div class="bubble-popup-title">{{t 'component_viewer.details'}}</div>
+    {{#if test.message}}
+      <pre>{{test.message}}</pre>
+    {{/if}}
+    <pre>{{test.stackTrace}}</pre>
+  {{/notEq}}
+
+</div>
+
+<div class="bubble-popup-arrow"></div>
diff --git a/server/sonar-web/src/main/hbs/component-viewer/header/cw-duplications-header.hbs b/server/sonar-web/src/main/hbs/component-viewer/header/cw-duplications-header.hbs
new file mode 100644 (file)
index 0000000..f6f599f
--- /dev/null
@@ -0,0 +1,13 @@
+{{#with component.measures}}
+  <div class="component-viewer-header-expanded-bar-section">
+    <div class="component-viewer-header-expanded-bar-section-title">{{t 'duplications'}}</div>
+    <ul class="component-viewer-header-expanded-bar-section-list">
+      {{#if ../state.hasSource}}
+        {{{componentViewerHeaderLink duplicated_blocks 'duplicated_blocks' 'js-filter-duplications'}}}
+      {{else}}
+        {{{componentViewerHeaderItem duplicated_blocks 'duplicated_blocks'}}}
+      {{/if}}
+      {{{componentViewerHeaderItem duplicated_lines 'duplicated_lines'}}}
+    </ul>
+  </div>
+{{/with}}
\ No newline at end of file
diff --git a/server/sonar-web/src/main/hbs/component-viewer/header/cw-issues-header.hbs b/server/sonar-web/src/main/hbs/component-viewer/header/cw-issues-header.hbs
new file mode 100644 (file)
index 0000000..91ba1ec
--- /dev/null
@@ -0,0 +1,106 @@
+{{#if state.hasSource}}
+  <div class="component-viewer-header-time-changes">
+    <a class="link-action js-issues-time-changes">
+      {{#if period}}{{t 'component_viewer.added'}} {{period.label}}{{else}}<i class="icon-period"></i> {{t 'component_viewer.time_changes'}}{{/if}}
+    </a>
+  </div>
+{{/if}}
+
+<div class="component-viewer-header-expanded-bar-section">
+  <div class="component-viewer-header-expanded-bar-section-title">
+    {{#if hasIssues}}{{t 'component_viewer.measure_section.filters'}}{{else}}{{t 'component_viewer.no_issues'}}{{/if}}
+  </div>
+  <ul class="component-viewer-header-expanded-bar-section-list">
+    {{#if currentIssue}}
+      <li><a class="item js-filter-current-issue">
+        <span>{{t 'component_viewer.issues.current_issue'}}</span>
+        <i class="icon-chevron-right"></i>
+      </a></li>
+    {{/if}}
+    {{#unless state.removed}}
+      <li><a class="item js-filter-unresolved-issues">
+        <span>{{t 'component_viewer.issues.unresolved_issues'}}</span>
+        <i class="icon-chevron-right"></i>
+      </a></li>
+    {{/unless}}
+    {{#unless state.removed}}
+      <li><a class="item js-filter-open-issues">
+        <span>{{t 'component_viewer.issues.open_issues'}}</span>
+        <i class="icon-chevron-right"></i>
+      </a></li>
+    {{/unless}}
+    {{#unless state.removed}}
+      <li><a class="item js-filter-fixed-issues">
+        <span>{{t 'component_viewer.issues.fixed_issues'}}</span>
+        <i class="icon-chevron-right"></i>
+      </a></li>
+    {{/unless}}
+    {{#unless state.removed}}
+      <li><a class="item js-filter-false-positive-issues">
+        <span>{{t 'component_viewer.issues.false_positive_issues'}}</span>
+        <i class="icon-chevron-right"></i>
+      </a></li>
+    {{/unless}}
+  </ul>
+</div>
+
+{{#ifNotEmpty state.severities}}
+  <div class="component-viewer-header-expanded-bar-section">
+    <div class="component-viewer-header-expanded-bar-section-title">
+      {{t 'component_viewer.measure_section.severities'}}
+    </div>
+    <ul class="component-viewer-header-expanded-bar-section-list">
+      {{#each state.severities}}
+        {{#unless ../../state.removed}}
+          <li><a class="item js-filter-{{key}}-issues">
+            <span>{{severityIcon key}} {{name}}</span>
+            <span class="number">{{count}}</span>
+            <i class="icon-chevron-right"></i>
+          </a></li>
+        {{else}}
+          <li><span class="item">
+            <span>{{severityIcon key}} {{name}}</span>
+            <span class="number">{{count}}</span>
+          </span></li>
+        {{/unless}}
+      {{/each}}
+    </ul>
+  </div>
+{{/ifNotEmpty}}
+
+{{#ifNotEmpty state.rules}}
+  <div class="component-viewer-header-expanded-bar-section">
+    <div class="component-viewer-header-expanded-bar-section-title">
+      {{t 'component_viewer.measure_section.rules'}}
+    </div>
+    <ul class="component-viewer-header-expanded-bar-section-list">
+      {{#each state.rules}}
+        {{#unless ../../state.removed}}
+          <li><a class="item js-filter-rule" data-rule="{{key}}" title="{{name}}">
+            <span>{{name}}</span>
+            <span class="number">{{count}}</span>
+            <i class="icon-chevron-right"></i>
+          </a></li>
+        {{else}}
+          <li><span class="item">
+            <span>{{name}}</span>
+            <span class="number">{{count}}</span>
+          </span></li>
+        {{/unless}}
+      {{/each}}
+    </ul>
+  </div>
+{{/ifNotEmpty}}
+
+{{#if hasIssues}}
+  <div class="component-viewer-header-expanded-bar-section component-viewer-header-expanded-bar-section-actions">
+    <div class="component-viewer-header-expanded-bar-section-title">&nbsp;</div>
+    <ul class="component-viewer-header-expanded-bar-section-list">
+      {{#if state.canBulkChange}}
+        <li><a class="link-action js-issues-bulk-change">
+          <span><i class="icon-bulk-change"></i> {{t 'bulk_change'}}</span>
+        </a></li>
+      {{/if}}
+    </ul>
+  </div>
+{{/if}}
diff --git a/server/sonar-web/src/main/hbs/component-viewer/header/cw-scm-header.hbs b/server/sonar-web/src/main/hbs/component-viewer/header/cw-scm-header.hbs
new file mode 100644 (file)
index 0000000..d5802ab
--- /dev/null
@@ -0,0 +1,5 @@
+<div class="component-viewer-header-time-changes">
+  <a class="highlighted-link js-scm-time-changes">
+    {{#if period}}Δ {{period.label}}{{else}}<i class="icon-period"></i> {{t 'component_viewer.time_changes'}}{{/if}}
+  </a>
+</div>
\ No newline at end of file
diff --git a/server/sonar-web/src/main/hbs/component-viewer/header/cw-tests-header.hbs b/server/sonar-web/src/main/hbs/component-viewer/header/cw-tests-header.hbs
new file mode 100644 (file)
index 0000000..0b8659b
--- /dev/null
@@ -0,0 +1,85 @@
+{{#with component.measures}}
+  <span class="nowrap">
+    {{#any test_success_density test_failures test_errors test_execution_time}}
+      <div class="component-viewer-header-expanded-bar-section">
+        <div class="component-viewer-header-expanded-bar-section-title">
+          {{t 'component_viewer.measure_section.tests'}}
+        </div>
+        <ul class="component-viewer-header-expanded-bar-section-list">
+          {{#if test_success_density}}
+            <li><span class="item" data-metric="test_success_density">
+              <span class="label">{{t 'metric.test_success_density.short_name'}}</span>
+              <span class="number">{{test_success_density}}</span>
+            </span></li>
+          {{/if}}
+          {{#if skipped_tests}}
+            <li><span class="item" data-metric="skipped_tests">
+              <span class="label">{{t 'metric.skipped_tests.short_name'}}</span>
+              <span class="number">{{skipped_tests}}</span>
+            </span></li>
+          {{/if}}
+          {{#if test_failures}}
+            <li><span class="item" data-metric="test_failures">
+              <span class="label">{{t 'metric.test_failures.short_name'}}</span>
+              <span class="number">{{test_failures}}</span>
+            </span></li>
+          {{/if}}
+          {{#if test_errors}}
+            <li><span class="item" data-metric="test_errors">
+              <span class="label">{{t 'metric.test_errors.short_name'}}</span>
+              <span class="number">{{test_errors}}</span>
+            </span></li>
+          {{/if}}
+          {{#if test_execution_time}}
+            <li><span class="item" data-metric="test_execution_time">
+              <span class="label">{{t 'metric.test_execution_time.short_name'}}</span>
+              <span class="number">{{test_execution_time}}</span>
+            </span></li>
+          {{/if}}
+        </ul>
+      </div>
+    {{/any}}
+  </span>
+{{/with}}
+
+<div class="component-viewer-header-expanded-bar-section large">
+  <div class="component-viewer-header-expanded-bar-section-title justify">
+    <span class="ib">{{t 'component_viewer.measure_section.test_names'}}</span>
+    {{#if hasCoveragePerTestData}}
+      <span class="ib">{{t 'component_viewer.covered_lines'}}</span>
+    {{/if}}
+  </div>
+  <ul class="component-viewer-header-expanded-bar-section-list">
+    {{#each tests}}
+      {{#eq status 'SKIPPED'}}
+        <li><span class="item" title="{{name}}" data-status="{{status}}">
+        <span class="label">{{testStatusIcon status}}
+          <span class="duration subtitle"></span>
+          {{name}}</span>
+        </span></li>
+      {{else}}
+        {{#ifTestData this}}
+          <li><a class="item js-unit-test" data-name="{{name}}" data-status="{{status}}" title="{{name}}">
+          <span class="label">{{testStatusIcon status}}
+            <span class="duration subtitle">{{durationInMs}}ms</span>
+            {{name}}</span>
+            {{#if coveredLines}}
+              <span class="number">{{coveredLines}}</span>
+            {{/if}}
+            <i class="icon-chevron-right"></i>
+          </a></li>
+        {{else}}
+          <li><span class="item" data-name="{{name}}" data-status="{{status}}" title="{{name}}">
+          <span class="label">{{testStatusIcon status}}
+            <span class="duration subtitle">{{durationInMs}}ms</span> {{name}}</span>
+          </span></li>
+        {{/ifTestData}}
+      {{/eq}}
+    {{/each}}
+  </ul>
+  <div class="component-viewer-header-expanded-bar-section-title">
+    <span>{{t 'component_viewer.tests.sort_by'}}</span>
+    <a class="js-sort-tests-name underlined-link">{{t 'component_viewer.tests.test_name'}}</a>
+    <a class="js-sort-tests-duration underlined-link">{{t 'component_viewer.tests.duration'}}</a>
+  </div>
+</div>
diff --git a/server/sonar-web/src/main/hbs/component-viewer/header/duplications-header.hbs b/server/sonar-web/src/main/hbs/component-viewer/header/duplications-header.hbs
deleted file mode 100644 (file)
index f6f599f..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-{{#with component.measures}}
-  <div class="component-viewer-header-expanded-bar-section">
-    <div class="component-viewer-header-expanded-bar-section-title">{{t 'duplications'}}</div>
-    <ul class="component-viewer-header-expanded-bar-section-list">
-      {{#if ../state.hasSource}}
-        {{{componentViewerHeaderLink duplicated_blocks 'duplicated_blocks' 'js-filter-duplications'}}}
-      {{else}}
-        {{{componentViewerHeaderItem duplicated_blocks 'duplicated_blocks'}}}
-      {{/if}}
-      {{{componentViewerHeaderItem duplicated_lines 'duplicated_lines'}}}
-    </ul>
-  </div>
-{{/with}}
\ No newline at end of file
diff --git a/server/sonar-web/src/main/hbs/component-viewer/header/issues-header.hbs b/server/sonar-web/src/main/hbs/component-viewer/header/issues-header.hbs
deleted file mode 100644 (file)
index 91ba1ec..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-{{#if state.hasSource}}
-  <div class="component-viewer-header-time-changes">
-    <a class="link-action js-issues-time-changes">
-      {{#if period}}{{t 'component_viewer.added'}} {{period.label}}{{else}}<i class="icon-period"></i> {{t 'component_viewer.time_changes'}}{{/if}}
-    </a>
-  </div>
-{{/if}}
-
-<div class="component-viewer-header-expanded-bar-section">
-  <div class="component-viewer-header-expanded-bar-section-title">
-    {{#if hasIssues}}{{t 'component_viewer.measure_section.filters'}}{{else}}{{t 'component_viewer.no_issues'}}{{/if}}
-  </div>
-  <ul class="component-viewer-header-expanded-bar-section-list">
-    {{#if currentIssue}}
-      <li><a class="item js-filter-current-issue">
-        <span>{{t 'component_viewer.issues.current_issue'}}</span>
-        <i class="icon-chevron-right"></i>
-      </a></li>
-    {{/if}}
-    {{#unless state.removed}}
-      <li><a class="item js-filter-unresolved-issues">
-        <span>{{t 'component_viewer.issues.unresolved_issues'}}</span>
-        <i class="icon-chevron-right"></i>
-      </a></li>
-    {{/unless}}
-    {{#unless state.removed}}
-      <li><a class="item js-filter-open-issues">
-        <span>{{t 'component_viewer.issues.open_issues'}}</span>
-        <i class="icon-chevron-right"></i>
-      </a></li>
-    {{/unless}}
-    {{#unless state.removed}}
-      <li><a class="item js-filter-fixed-issues">
-        <span>{{t 'component_viewer.issues.fixed_issues'}}</span>
-        <i class="icon-chevron-right"></i>
-      </a></li>
-    {{/unless}}
-    {{#unless state.removed}}
-      <li><a class="item js-filter-false-positive-issues">
-        <span>{{t 'component_viewer.issues.false_positive_issues'}}</span>
-        <i class="icon-chevron-right"></i>
-      </a></li>
-    {{/unless}}
-  </ul>
-</div>
-
-{{#ifNotEmpty state.severities}}
-  <div class="component-viewer-header-expanded-bar-section">
-    <div class="component-viewer-header-expanded-bar-section-title">
-      {{t 'component_viewer.measure_section.severities'}}
-    </div>
-    <ul class="component-viewer-header-expanded-bar-section-list">
-      {{#each state.severities}}
-        {{#unless ../../state.removed}}
-          <li><a class="item js-filter-{{key}}-issues">
-            <span>{{severityIcon key}} {{name}}</span>
-            <span class="number">{{count}}</span>
-            <i class="icon-chevron-right"></i>
-          </a></li>
-        {{else}}
-          <li><span class="item">
-            <span>{{severityIcon key}} {{name}}</span>
-            <span class="number">{{count}}</span>
-          </span></li>
-        {{/unless}}
-      {{/each}}
-    </ul>
-  </div>
-{{/ifNotEmpty}}
-
-{{#ifNotEmpty state.rules}}
-  <div class="component-viewer-header-expanded-bar-section">
-    <div class="component-viewer-header-expanded-bar-section-title">
-      {{t 'component_viewer.measure_section.rules'}}
-    </div>
-    <ul class="component-viewer-header-expanded-bar-section-list">
-      {{#each state.rules}}
-        {{#unless ../../state.removed}}
-          <li><a class="item js-filter-rule" data-rule="{{key}}" title="{{name}}">
-            <span>{{name}}</span>
-            <span class="number">{{count}}</span>
-            <i class="icon-chevron-right"></i>
-          </a></li>
-        {{else}}
-          <li><span class="item">
-            <span>{{name}}</span>
-            <span class="number">{{count}}</span>
-          </span></li>
-        {{/unless}}
-      {{/each}}
-    </ul>
-  </div>
-{{/ifNotEmpty}}
-
-{{#if hasIssues}}
-  <div class="component-viewer-header-expanded-bar-section component-viewer-header-expanded-bar-section-actions">
-    <div class="component-viewer-header-expanded-bar-section-title">&nbsp;</div>
-    <ul class="component-viewer-header-expanded-bar-section-list">
-      {{#if state.canBulkChange}}
-        <li><a class="link-action js-issues-bulk-change">
-          <span><i class="icon-bulk-change"></i> {{t 'bulk_change'}}</span>
-        </a></li>
-      {{/if}}
-    </ul>
-  </div>
-{{/if}}
diff --git a/server/sonar-web/src/main/hbs/component-viewer/header/scm-header.hbs b/server/sonar-web/src/main/hbs/component-viewer/header/scm-header.hbs
deleted file mode 100644 (file)
index d5802ab..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<div class="component-viewer-header-time-changes">
-  <a class="highlighted-link js-scm-time-changes">
-    {{#if period}}Δ {{period.label}}{{else}}<i class="icon-period"></i> {{t 'component_viewer.time_changes'}}{{/if}}
-  </a>
-</div>
\ No newline at end of file
diff --git a/server/sonar-web/src/main/hbs/component-viewer/header/tests-header.hbs b/server/sonar-web/src/main/hbs/component-viewer/header/tests-header.hbs
deleted file mode 100644 (file)
index 0b8659b..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-{{#with component.measures}}
-  <span class="nowrap">
-    {{#any test_success_density test_failures test_errors test_execution_time}}
-      <div class="component-viewer-header-expanded-bar-section">
-        <div class="component-viewer-header-expanded-bar-section-title">
-          {{t 'component_viewer.measure_section.tests'}}
-        </div>
-        <ul class="component-viewer-header-expanded-bar-section-list">
-          {{#if test_success_density}}
-            <li><span class="item" data-metric="test_success_density">
-              <span class="label">{{t 'metric.test_success_density.short_name'}}</span>
-              <span class="number">{{test_success_density}}</span>
-            </span></li>
-          {{/if}}
-          {{#if skipped_tests}}
-            <li><span class="item" data-metric="skipped_tests">
-              <span class="label">{{t 'metric.skipped_tests.short_name'}}</span>
-              <span class="number">{{skipped_tests}}</span>
-            </span></li>
-          {{/if}}
-          {{#if test_failures}}
-            <li><span class="item" data-metric="test_failures">
-              <span class="label">{{t 'metric.test_failures.short_name'}}</span>
-              <span class="number">{{test_failures}}</span>
-            </span></li>
-          {{/if}}
-          {{#if test_errors}}
-            <li><span class="item" data-metric="test_errors">
-              <span class="label">{{t 'metric.test_errors.short_name'}}</span>
-              <span class="number">{{test_errors}}</span>
-            </span></li>
-          {{/if}}
-          {{#if test_execution_time}}
-            <li><span class="item" data-metric="test_execution_time">
-              <span class="label">{{t 'metric.test_execution_time.short_name'}}</span>
-              <span class="number">{{test_execution_time}}</span>
-            </span></li>
-          {{/if}}
-        </ul>
-      </div>
-    {{/any}}
-  </span>
-{{/with}}
-
-<div class="component-viewer-header-expanded-bar-section large">
-  <div class="component-viewer-header-expanded-bar-section-title justify">
-    <span class="ib">{{t 'component_viewer.measure_section.test_names'}}</span>
-    {{#if hasCoveragePerTestData}}
-      <span class="ib">{{t 'component_viewer.covered_lines'}}</span>
-    {{/if}}
-  </div>
-  <ul class="component-viewer-header-expanded-bar-section-list">
-    {{#each tests}}
-      {{#eq status 'SKIPPED'}}
-        <li><span class="item" title="{{name}}" data-status="{{status}}">
-        <span class="label">{{testStatusIcon status}}
-          <span class="duration subtitle"></span>
-          {{name}}</span>
-        </span></li>
-      {{else}}
-        {{#ifTestData this}}
-          <li><a class="item js-unit-test" data-name="{{name}}" data-status="{{status}}" title="{{name}}">
-          <span class="label">{{testStatusIcon status}}
-            <span class="duration subtitle">{{durationInMs}}ms</span>
-            {{name}}</span>
-            {{#if coveredLines}}
-              <span class="number">{{coveredLines}}</span>
-            {{/if}}
-            <i class="icon-chevron-right"></i>
-          </a></li>
-        {{else}}
-          <li><span class="item" data-name="{{name}}" data-status="{{status}}" title="{{name}}">
-          <span class="label">{{testStatusIcon status}}
-            <span class="duration subtitle">{{durationInMs}}ms</span> {{name}}</span>
-          </span></li>
-        {{/ifTestData}}
-      {{/eq}}
-    {{/each}}
-  </ul>
-  <div class="component-viewer-header-expanded-bar-section-title">
-    <span>{{t 'component_viewer.tests.sort_by'}}</span>
-    <a class="js-sort-tests-name underlined-link">{{t 'component_viewer.tests.test_name'}}</a>
-    <a class="js-sort-tests-duration underlined-link">{{t 'component_viewer.tests.duration'}}</a>
-  </div>
-</div>
diff --git a/server/sonar-web/src/main/hbs/component-viewer/layout.hbs b/server/sonar-web/src/main/hbs/component-viewer/layout.hbs
deleted file mode 100644 (file)
index a010e4c..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<div class="component-viewer-header"></div>
-<div class="component-viewer-workspace"></div>
-<div class="component-viewer-source"></div>
\ No newline at end of file
diff --git a/server/sonar-web/src/main/hbs/component-viewer/line-options-popup.hbs b/server/sonar-web/src/main/hbs/component-viewer/line-options-popup.hbs
deleted file mode 100644 (file)
index fa9aae4..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-<div class="bubble-popup-container">
-  <div class="bubble-popup-title">{{t 'component_viewer.line_actions'}}</div>
-
-  <div class="bubble-popup-section">
-    <a href="#" class="js-get-permalink link-action">{{t 'component_viewer.get_permalink'}}</a>
-  </div>
-
-  {{#if state.canCreateManualIssue}}
-    <div class="bubble-popup-section">
-      <a href="#" class="js-add-manual-issue link-action">{{t 'component_viewer.add_manual_issue'}}</a>
-    </div>
-  {{/if}}
-</div>
-
-<div class="bubble-popup-arrow"></div>
diff --git a/server/sonar-web/src/main/hbs/component-viewer/more-actions.hbs b/server/sonar-web/src/main/hbs/component-viewer/more-actions.hbs
deleted file mode 100644 (file)
index 354436d..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-<a class="js-new-window underlined-link">{{t 'component_viewer.new_window'}}</a>
-<br>
-<a class="js-full-source underlined-link">{{t 'component_viewer.show_full_source'}}</a>
-<br>
-<a class="js-raw-source underlined-link">{{t 'component_viewer.show_raw_source'}}</a>
-
-{{#each state.extensions}}
-  <br>
-  <a class="js-extension underlined-link" data-key="{{this.[0]}}">{{this.[1]}}</a>
-{{/each}}
\ No newline at end of file
diff --git a/server/sonar-web/src/main/hbs/component-viewer/source.hbs b/server/sonar-web/src/main/hbs/component-viewer/source.hbs
deleted file mode 100644 (file)
index 79c44c4..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-{{#if state.sourceSecurity}}
-
-  <p>{{t 'code_viewer.no_source_code_displayed_due_to_security'}}</p>
-
-{{else}}
-
-  {{#if state.duplicationsInDeletedFiles}}
-    <p class="marginbottom10">{{t 'duplications.dups_found_on_deleted_resource'}}</p>
-  {{/if}}
-
-  {{#if issuesLimitReached}}
-    <p class="message-alert marginbottom10">{{tp 'component_viewer.issues_limit_reached' issuesLimit}}</p>
-  {{/if}}
-
-  <table class="code">
-    {{#if showZeroLine}}
-      <tr class="row row-hidden" data-line-number="0" id="{{uid}}-0">
-        {{#if settings.coverage}}
-          <td class="stat coverage-tests"></td>
-          <td class="stat coverage-conditions"></td>
-        {{/if}}
-        {{#if settings.duplications}}
-          <td class="stat"></td>
-        {{/if}}
-        {{#if settings.scm}}
-          <td class="stat"></td>
-        {{/if}}
-        <td class="stat lid"></td>
-        <td class="line"></td>
-      </tr>
-    {{/if}}
-
-    {{#each source}}
-      {{#if show}}
-        <tr class="row" data-line-number="{{lineNumber}}" id="{{../../uid}}-{{lineNumber}}">
-
-          {{#if ../../settings.scm}}
-            <td class="stat {{#if scm}}scm{{/if}}">
-              {{#if scm}}
-                {{#ifSCMChanged ../../../../source ../../../lineNumber}}
-                  <span class="scm-date">{{scm.date}}</span>
-                  <span class="scm-author" title="{{scm.author}}">{{scm.author}}</span>
-                {{/ifSCMChanged}}
-              {{/if}}
-            </td>
-          {{/if}}
-
-          {{#if ../../settings.duplications}}
-            <td class="stat duplications">
-              {{#each duplications}}
-                <span class="duplication {{#if this}}duplication-exists{{/if}}" data-index="{{this}}"></span>
-              {{/each}}
-            </td>
-          {{/if}}
-
-          {{#if ../../settings.coverage}}
-            <td class="stat {{#if coverage}}coverage-{{#if coverage.covered}}green{{else}}red{{/if}}{{/if}}">
-              {{#if coverage}}
-                <span class="coverage-tests" title="{{tp 'coverage_viewer.line_covered_by_x_tests' coverage.testCases}}">
-                  {{coverage.testCases}}
-                </span>
-              {{/if}}
-            </td>
-
-            <td class="stat {{#if coverage}}{{#if coverage.branchCoverageStatus}}coverage-{{coverage.branchCoverageStatus}}{{/if}}{{/if}}">
-              {{#if coverage}}
-                {{#if coverage.branches}}
-                  <span class="coverage-branches" title="{{tp 'coverage_viewer.x_covered_branches' coverage.coveredBranches}}">
-                    {{coverage.coveredBranches}}/{{coverage.branches}}
-                  </span>
-                {{/if}}
-              {{/if}}
-            </td>
-          {{/if}}
-
-          <td class="stat lid js-line-actions" title="{{t 'component_viewer.line_actions'}}">{{lineNumber}}</td>
-
-          <td class="line"><pre>{{{code}}}</pre></td>
-        </tr>
-      {{/if}}
-    {{/each}}
-  </table>
-
-{{/if}}
diff --git a/server/sonar-web/src/main/hbs/component-viewer/time-changes-popup.hbs b/server/sonar-web/src/main/hbs/component-viewer/time-changes-popup.hbs
deleted file mode 100644 (file)
index f7dc2c3..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-<div class="bubble-popup-title">Time Changes</div>
-
-<ul class="bubble-popup-list">
-  {{#each periods}}
-    <li><a class="link-action" data-period="{{key}}">{{#if key}}{{../../prefix}}{{/if}} {{label}}</a></li>
-  {{/each}}
-</ul>
-
-<div class="bubble-popup-arrow"></div>
diff --git a/server/sonar-web/src/main/hbs/component-viewer/workspace.hbs b/server/sonar-web/src/main/hbs/component-viewer/workspace.hbs
deleted file mode 100644 (file)
index 32d2e67..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-<div class="component-viewer-workspace-header">
-  <div class="component-viewer-workspace-title"
-       title="{{t 'component_viewer.workspace.tooltip'}}">{{t 'component_viewer.workspace'}}</div>
-  <button class="button-clean component-viewer-workspace-toggle js-toggle-workspace"
-          title="{{#if settings.workspace}}{{t 'component_viewer.workspace.hide_workspace'}}{{else}}{{t 'component_viewer.workspace.show_workspace'}}{{/if}}">
-    {{#if settings.workspace}}
-      <i class="icon-double-chevron-left"></i>
-    {{else}}
-      <i class="icon-double-chevron-right"></i>
-    {{/if}}
-  </button>
-</div>
-
-<ul class="component-viewer-workspace-list">
-  {{#eachReverse workspace}}
-    <li class="component-viewer-workspace-item {{#if active}}active{{/if}}">
-      {{qualifierIcon component.q}}
-      <a class="link-action" data-key="{{component.key}}">{{component.name}}</a>
-      {{#if component.dir}}
-        <div class="text-ellipsis subtitle">{{component.dir}}</div>
-      {{/if}}
-      {{#if options}}
-        <div class="component-viewer-workspace-transition">{{t 'component_viewer.transition' ../transition}}</div>
-        <ul class="component-viewer-workspace-options">
-          {{#each options}}
-            <li class="component-viewer-workspace-option text-ellipsis {{#if active}}active{{/if}}" title="{{name}}">
-              <a class="link-action" data-workspace-key="{{../component.key}}" data-key="{{key}}">{{name}}</a>
-              {{#if subname}}<div class="text-ellipsis subtitle" title="{{subname}}">{{subname}}</div>{{/if}}
-            </li>
-          {{/each}}
-        </ul>
-      {{/if}}
-    </li>
-  {{/eachReverse}}
-</ul>
\ No newline at end of file
diff --git a/server/sonar-web/src/main/hbs/issue/assign-form.hbs b/server/sonar-web/src/main/hbs/issue/assign-form.hbs
new file mode 100644 (file)
index 0000000..f25a050
--- /dev/null
@@ -0,0 +1,9 @@
+<table class="width100">
+  <tr>
+    <td>
+      <input type="text" id="issue-assignee-select">
+      <input id="issue-assign-submit" type="submit" value="{{t 'issue.assign.submit'}}">&nbsp;
+      <a id="issue-assign-cancel" class="action">{{t 'cancel'}}</a>
+    </td>
+  </tr>
+</table>
\ No newline at end of file
diff --git a/server/sonar-web/src/main/hbs/issue/change-log.hbs b/server/sonar-web/src/main/hbs/issue/change-log.hbs
new file mode 100644 (file)
index 0000000..256414e
--- /dev/null
@@ -0,0 +1,20 @@
+<table class="spaced">
+  <tbody>
+  <tr>
+    <td class="thin left top" nowrap>{{dt issue.creationDate}}</td>
+    <td class="thin left top" nowrap></td>
+    <td class="left top">{{t 'created'}}</td>
+  </tr>
+  {{#each items}}
+    <tr>
+      <td class="thin left top" nowrap>{{dt creationDate}}</td>
+      <td class="thin left top" nowrap>{{userName}}</td>
+      <td class="left top">
+        {{#each diffs}}
+          {{changelog this}}<br>
+        {{/each}}
+      </td>
+    </tr>
+  {{/each}}
+  </tbody>
+</table>
\ No newline at end of file
diff --git a/server/sonar-web/src/main/hbs/issue/comment-form.hbs b/server/sonar-web/src/main/hbs/issue/comment-form.hbs
new file mode 100644 (file)
index 0000000..a431ea9
--- /dev/null
@@ -0,0 +1,17 @@
+<table class="width100">
+  <tr>
+    <td style="vertical-align:top" colspan="2">
+      <textarea id="issue-comment-text" rows="4" name="text" style="width: 100%">{{show raw markdown}}</textarea>
+    </td>
+  </tr>
+  <tr>
+    <td style="padding-top: 5px">
+      <input id="issue-comment-submit" type="submit"
+             value="{{#if id}}{{t 'save'}}{{else}}{{t 'issue.comment.submit'}}{{/if}}" disabled>
+      <a id="issue-comment-cancel" class="action">{{t 'cancel'}}</a>
+    </td>
+    <td align="right">
+      {{> '_markdown-tips' }}
+    </td>
+  </tr>
+</table>
\ No newline at end of file
diff --git a/server/sonar-web/src/main/hbs/issue/issue.hbs b/server/sonar-web/src/main/hbs/issue/issue.hbs
new file mode 100644 (file)
index 0000000..ac3a80f
--- /dev/null
@@ -0,0 +1,142 @@
+<div class="code-issue code-issue-collapsed" data-issue-key="{{key}}" data-issue-component="{{component}}" data-issue-rule="{{rule}}">
+  <div class="code-issue-name code-issue-toggle">
+    <div class="code-issue-name-rule">
+      {{severityIcon severity}}&nbsp;<span class="rulename">{{message}}</span>
+    </div>
+
+    <div class="code-issue-permalink">
+      <a target="_blank" href="{{permalink}}">
+        <i class="icon-link"></i>
+      </a>
+    </div>
+  </div>
+
+
+  <ul class="code-issue-actions code-issue-list">
+    {{#inArray actions "comment"}}
+      <li>
+        <a id="issue-comment" class="link-action">{{t 'issue.comment.formlink' }}</a>
+      </li>
+    {{/inArray}}
+
+
+    <li>
+      {{statusIcon status}}{{t 'issue.status' status}}
+      {{#if resolution}}({{t 'issue.resolution' resolution}}){{/if}}
+
+      {{#ifNotEmpty transitions}}
+        {{#each transitions}}
+          <a class="link-action issue-transition spacer-left" data-transition="{{this}}">{{t 'issue.transition' this}}</a>
+        {{/each}}
+      {{/ifNotEmpty}}
+    </li>
+
+
+    {{#inArray actions "assign"}}
+    <li>
+      {{#if assigneeName}}
+        <a id="issue-assign" class="link-action">{{t 'assigned_to'}}</a> {{assigneeName}}</li>
+      {{else}}
+        <a id="issue-assign" class="link-action">{{t 'issue.assign.formlink' }}</a>
+        {{#inArray actions "assign_to_me"}}
+          [<a id="issue-assign-to-me" class="link-action">{{t 'issue.assign.to_me' }}</a>]
+        {{/inArray}}
+      {{/if}}
+      </li>
+    {{else}}
+      {{#if assigneeName}}
+        <li>{{t 'assigned_to'}} <strong>{{assigneeName}}</strong></li>
+      {{/if}}
+    {{/inArray}}
+
+
+    {{#inArray actions "plan"}}
+      <li>
+        {{#if actionPlanName}}
+          <a id="issue-plan" class="link-action">{{t 'issue.planned_for'}}</a> {{actionPlanName}}
+        {{else}}
+          <a id="issue-plan" class="link-action">{{t 'issue.do_plan'}}</a>
+        {{/if}}
+      </li>
+    {{else}}
+      {{#if actionPlanName}}
+        <li>{{t 'issue.planned_for'}} <strong>{{actionPlanName}}</strong></li>
+      {{/if}}
+    {{/inArray}}
+
+
+    {{#ifHasExtraActions actions}}
+      <li>
+        <div class="dropdown">
+          <a class="link-action link-more" onclick="showDropdownMenuOnElement($j(this).next('.dropdown-menu')); return false;">{{t 'more_actions'}}</a>
+          <ul style="display: none" class="dropdown-menu">
+            {{#inArray actions "set_severity"}}
+              <li>
+                <a id="issue-set-severity" class="link-action spacer-right">{{t "issue.set_severity"}}</a>
+              </li>
+            {{/inArray}}
+            {{#pluginActions actions}}
+              <li>
+                <a class="link-action spacer-right issue-action" data-action="{{this}}">{{t "issue.action" this "formlink"}}</a>
+              </li>
+            {{/pluginActions}}
+          </ul>
+        </div>
+      </li>
+    {{else}}
+      {{#inArray actions "set_severity"}}
+        <li>
+          <a id="issue-set-severity" class="link-action">{{t "issue.set_severity"}}</a>
+        </li>
+      {{/inArray}}
+    {{/ifHasExtraActions}}
+
+    {{#if debt}}
+      <li>{{t 'issue.technical_debt_short'}}: {{debt}}</li>
+    {{/if}}
+
+    {{#if reporterName}}<li>{{t 'reporter'}}: {{reporterName}}</li>{{/if}}
+    {{#if author}}<li>{{t 'author'}}: {{author}}</li>{{/if}}
+  </ul>
+
+  <div class="code-issue-form" style="display: none;"></div>
+
+
+  <div class="code-issue-details">
+    <ul class="code-issue-tabs">
+      <li>
+        <a class="js-tab-link underlined-link" href="#tab-issue-rule">{{t 'rule'}}</a>
+      </li>
+      <li>
+        <a class="js-tab-link underlined-link" href="#tab-issue-changelog">{{t 'changelog'}}</a>
+      </li>
+    </ul>
+
+    <div id="tab-issue-rule" class="js-tab">
+      <div class="rule-desc"></div>
+    </div>
+
+    <div id="tab-issue-changelog" class="js-tab"></div>
+  </div>
+
+
+  <div class="code-issue-comments">
+    {{#each comments}}
+      <div class="code-issue-comment" data-comment-key="{{key}}">
+        <h4>
+          <i class="icon-comment"></i>
+          <b>{{userName}}</b>
+          ({{fromNow createdAt}})
+
+          {{#if updatable}}
+            &nbsp;&nbsp;
+            <a class="link-action issue-comment-edit">{{t 'edit'}}</a>&nbsp;
+            <a class="link-action link-red spacer-right issue-comment-delete"
+               data-confirm-msg="{{t 'issue.comment.delete_confirm_message'}}">{{t 'delete'}}</a>
+          {{/if}}
+        </h4>
+        <div class="markdown">{{{show html htmlText}}}</div>
+      </div>
+    {{/each}}
+  </div>
+</div>
diff --git a/server/sonar-web/src/main/hbs/issue/manual-issue.hbs b/server/sonar-web/src/main/hbs/issue/manual-issue.hbs
new file mode 100644 (file)
index 0000000..5c567da
--- /dev/null
@@ -0,0 +1,44 @@
+<form action="" class="js-manual-issue-form code-issue-create-form">
+  {{! no manual rules }}
+  {{! <div class="warning" style="margin: 10px"> }}
+  {{!   <% if is_admin %> }}
+  {{!   <%= message('issue.manual.no_rules.admin') -%> }}
+  {{!   &nbsp;<a href="<%= ApplicationController.root_context -%>/manual_rules/index"><%= message('manage') -%></a> }}
+  {{!   <% else %> }}
+  {{!   <%= message('issue.manual.no_rules.non_admin') -%> }}
+  {{!   <% end %> }}
+  {{!   &nbsp;<%= link_to_function message('cancel'), 'closeCreateIssueForm(this)' -%> }}
+  {{! </div> }}
+
+  <input type="hidden" name="line" value="{{line}}">
+  <input type="hidden" name="component" value="{{component}}">
+
+  <div class="code-issue-name">
+    <select name="rule">
+      {{#each rules}}
+        <option value="{{key}}">{{name}}</option>
+      {{/each}}
+    </select>
+  </div>
+
+  <div class="code-issue-msg">
+    <table class="width100">
+      <tr>
+        <td>
+          <textarea rows="4" name="message" class="width100 marginbottom5"></textarea>
+        </td>
+      </tr>
+      <tr>
+        <td class="js-submit">
+          <input type="submit" value="{{t 'create'}}">
+          <a class="js-cancel" href="#">{{t 'cancel'}}</a>
+        </td>
+        <td class="js-spinner" style="display: none;">
+          <i class="spinner"></i>
+        </td>
+      </tr>
+    </table>
+    <div class="code-issue-errors error hidden"></div>
+  </div>
+
+</form>
diff --git a/server/sonar-web/src/main/hbs/issue/plan-form.hbs b/server/sonar-web/src/main/hbs/issue/plan-form.hbs
new file mode 100644 (file)
index 0000000..341068e
--- /dev/null
@@ -0,0 +1,16 @@
+{{#if items}}
+  <select id="issue-detail-plan-select">
+    {{#if issue.actionPlan}}
+      <option value="#unplan">{{t 'issue.unplan.submit'}}</option>
+    {{/if}}
+    {{#each items}}
+      {{#notEq this.status 'CLOSED'}}
+        <option value="{{this.key}}">{{this.name}} {{#if this.fDeadLine}}({{this.fDeadLine}}){{/if}}</option>
+      {{/notEq}}
+    {{/each}}
+  </select>
+  <input id="issue-plan-submit" type="submit" value="{{t 'issue.plan.submit'}}">&nbsp;
+{{else}}
+  <span class="error">{{t 'issue.plan.error.plan_must_be_created_first'}}</span>
+{{/if}}
+<a id="issue-plan-cancel" class="action">{{t 'cancel'}}</a>
diff --git a/server/sonar-web/src/main/hbs/issue/rule.hbs b/server/sonar-web/src/main/hbs/issue/rule.hbs
new file mode 100644 (file)
index 0000000..ba73797
--- /dev/null
@@ -0,0 +1,14 @@
+<div class="rule-desc">
+  <h1 class="marginbottom10">{{name}}</h1>
+  <div class="marginbottom10">{{{htmlDesc}}}</div>
+  {{#if htmlNote}}<div class="marginbottom10">{{{htmlNote}}}</div>{{/if}}
+</div>
+
+<ul class="note code-issue-bar">
+  <li>{{key}}</li>
+  {{#all debtCharName debtSubCharName}}
+    <li>{{debtCharName}} > {{debtSubCharName}}</li>
+  {{else}}
+    <li>{{t 'issue.technical_debt_deleted'}}</li>
+  {{/all}}
+</ul>
diff --git a/server/sonar-web/src/main/hbs/issue/set-severity-form.hbs b/server/sonar-web/src/main/hbs/issue/set-severity-form.hbs
new file mode 100644 (file)
index 0000000..e85c027
--- /dev/null
@@ -0,0 +1,16 @@
+<table class="width100">
+  <tr>
+    <td style="vertical-align:top">
+      <select id="issue-set-severity-select" autofocus>
+        <option class="sev_BLOCKER" value="BLOCKER">{{t 'severity.BLOCKER'}}</option>
+        <option class="sev_CRITICAL" value="CRITICAL">{{t 'severity.CRITICAL'}}</option>
+        <option class="sev_MAJOR" value="MAJOR" selected>{{t 'severity.MAJOR'}}</option>
+        <option class="sev_MINOR" value="MINOR">{{t 'severity.MINOR'}}</option>
+        <option class="sev_INFO" value="INFO">{{t 'severity.INFO'}}</option>
+      </select>
+
+      <input id="issue-set-severity-submit" type="submit" value="{{t 'issue.set_severity.submit'}}">
+      <a id="issue-set-severity-cancel" class="action">{{t 'cancel'}}</a>
+    </td>
+  </tr>
+</table>
\ No newline at end of file
diff --git a/server/sonar-web/src/main/hbs/issues/assign-form.hbs b/server/sonar-web/src/main/hbs/issues/assign-form.hbs
deleted file mode 100644 (file)
index f25a050..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-<table class="width100">
-  <tr>
-    <td>
-      <input type="text" id="issue-assignee-select">
-      <input id="issue-assign-submit" type="submit" value="{{t 'issue.assign.submit'}}">&nbsp;
-      <a id="issue-assign-cancel" class="action">{{t 'cancel'}}</a>
-    </td>
-  </tr>
-</table>
\ No newline at end of file
diff --git a/server/sonar-web/src/main/hbs/issues/change-log.hbs b/server/sonar-web/src/main/hbs/issues/change-log.hbs
deleted file mode 100644 (file)
index 256414e..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-<table class="spaced">
-  <tbody>
-  <tr>
-    <td class="thin left top" nowrap>{{dt issue.creationDate}}</td>
-    <td class="thin left top" nowrap></td>
-    <td class="left top">{{t 'created'}}</td>
-  </tr>
-  {{#each items}}
-    <tr>
-      <td class="thin left top" nowrap>{{dt creationDate}}</td>
-      <td class="thin left top" nowrap>{{userName}}</td>
-      <td class="left top">
-        {{#each diffs}}
-          {{changelog this}}<br>
-        {{/each}}
-      </td>
-    </tr>
-  {{/each}}
-  </tbody>
-</table>
\ No newline at end of file
diff --git a/server/sonar-web/src/main/hbs/issues/comment-form.hbs b/server/sonar-web/src/main/hbs/issues/comment-form.hbs
deleted file mode 100644 (file)
index a431ea9..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-<table class="width100">
-  <tr>
-    <td style="vertical-align:top" colspan="2">
-      <textarea id="issue-comment-text" rows="4" name="text" style="width: 100%">{{show raw markdown}}</textarea>
-    </td>
-  </tr>
-  <tr>
-    <td style="padding-top: 5px">
-      <input id="issue-comment-submit" type="submit"
-             value="{{#if id}}{{t 'save'}}{{else}}{{t 'issue.comment.submit'}}{{/if}}" disabled>
-      <a id="issue-comment-cancel" class="action">{{t 'cancel'}}</a>
-    </td>
-    <td align="right">
-      {{> '_markdown-tips' }}
-    </td>
-  </tr>
-</table>
\ No newline at end of file
diff --git a/server/sonar-web/src/main/hbs/issues/filter-bar.hbs b/server/sonar-web/src/main/hbs/issues/filter-bar.hbs
new file mode 100644 (file)
index 0000000..4f19079
--- /dev/null
@@ -0,0 +1,2 @@
+<div class="navigator-filters-list"></div>
+<button class="navigator-filter-submit">{{t 'search_verb'}}</button>
diff --git a/server/sonar-web/src/main/hbs/issues/issue-detail.hbs b/server/sonar-web/src/main/hbs/issues/issue-detail.hbs
new file mode 100644 (file)
index 0000000..c746f72
--- /dev/null
@@ -0,0 +1,20 @@
+<div class="line line-small">
+  {{severityIcon severity}}{{translate "severities" severity}}&nbsp;
+  {{statusIcon status}}{{translate "statuses" status}}
+  {{#if resolution}}({{translate "resolutions" resolution}}){{/if}}
+
+  <div class="line-right">
+    {{fUpdateAge}}
+  </div>
+</div>
+
+<div class="line line-nowrap" title="{{message}}">
+  {{message}}
+</div>
+
+<div class="line">
+  {{#unless singleProject}}
+    <div class="subtitle line-nowrap">{{default projectLongName projectName}}</div>
+  {{/unless}}
+  <div class="subtitle line-nowrap">{{componentLongName}}</div>
+</div>
diff --git a/server/sonar-web/src/main/hbs/issues/issue.hbs b/server/sonar-web/src/main/hbs/issues/issue.hbs
deleted file mode 100644 (file)
index ac3a80f..0000000
+++ /dev/null
@@ -1,142 +0,0 @@
-<div class="code-issue code-issue-collapsed" data-issue-key="{{key}}" data-issue-component="{{component}}" data-issue-rule="{{rule}}">
-  <div class="code-issue-name code-issue-toggle">
-    <div class="code-issue-name-rule">
-      {{severityIcon severity}}&nbsp;<span class="rulename">{{message}}</span>
-    </div>
-
-    <div class="code-issue-permalink">
-      <a target="_blank" href="{{permalink}}">
-        <i class="icon-link"></i>
-      </a>
-    </div>
-  </div>
-
-
-  <ul class="code-issue-actions code-issue-list">
-    {{#inArray actions "comment"}}
-      <li>
-        <a id="issue-comment" class="link-action">{{t 'issue.comment.formlink' }}</a>
-      </li>
-    {{/inArray}}
-
-
-    <li>
-      {{statusIcon status}}{{t 'issue.status' status}}
-      {{#if resolution}}({{t 'issue.resolution' resolution}}){{/if}}
-
-      {{#ifNotEmpty transitions}}
-        {{#each transitions}}
-          <a class="link-action issue-transition spacer-left" data-transition="{{this}}">{{t 'issue.transition' this}}</a>
-        {{/each}}
-      {{/ifNotEmpty}}
-    </li>
-
-
-    {{#inArray actions "assign"}}
-    <li>
-      {{#if assigneeName}}
-        <a id="issue-assign" class="link-action">{{t 'assigned_to'}}</a> {{assigneeName}}</li>
-      {{else}}
-        <a id="issue-assign" class="link-action">{{t 'issue.assign.formlink' }}</a>
-        {{#inArray actions "assign_to_me"}}
-          [<a id="issue-assign-to-me" class="link-action">{{t 'issue.assign.to_me' }}</a>]
-        {{/inArray}}
-      {{/if}}
-      </li>
-    {{else}}
-      {{#if assigneeName}}
-        <li>{{t 'assigned_to'}} <strong>{{assigneeName}}</strong></li>
-      {{/if}}
-    {{/inArray}}
-
-
-    {{#inArray actions "plan"}}
-      <li>
-        {{#if actionPlanName}}
-          <a id="issue-plan" class="link-action">{{t 'issue.planned_for'}}</a> {{actionPlanName}}
-        {{else}}
-          <a id="issue-plan" class="link-action">{{t 'issue.do_plan'}}</a>
-        {{/if}}
-      </li>
-    {{else}}
-      {{#if actionPlanName}}
-        <li>{{t 'issue.planned_for'}} <strong>{{actionPlanName}}</strong></li>
-      {{/if}}
-    {{/inArray}}
-
-
-    {{#ifHasExtraActions actions}}
-      <li>
-        <div class="dropdown">
-          <a class="link-action link-more" onclick="showDropdownMenuOnElement($j(this).next('.dropdown-menu')); return false;">{{t 'more_actions'}}</a>
-          <ul style="display: none" class="dropdown-menu">
-            {{#inArray actions "set_severity"}}
-              <li>
-                <a id="issue-set-severity" class="link-action spacer-right">{{t "issue.set_severity"}}</a>
-              </li>
-            {{/inArray}}
-            {{#pluginActions actions}}
-              <li>
-                <a class="link-action spacer-right issue-action" data-action="{{this}}">{{t "issue.action" this "formlink"}}</a>
-              </li>
-            {{/pluginActions}}
-          </ul>
-        </div>
-      </li>
-    {{else}}
-      {{#inArray actions "set_severity"}}
-        <li>
-          <a id="issue-set-severity" class="link-action">{{t "issue.set_severity"}}</a>
-        </li>
-      {{/inArray}}
-    {{/ifHasExtraActions}}
-
-    {{#if debt}}
-      <li>{{t 'issue.technical_debt_short'}}: {{debt}}</li>
-    {{/if}}
-
-    {{#if reporterName}}<li>{{t 'reporter'}}: {{reporterName}}</li>{{/if}}
-    {{#if author}}<li>{{t 'author'}}: {{author}}</li>{{/if}}
-  </ul>
-
-  <div class="code-issue-form" style="display: none;"></div>
-
-
-  <div class="code-issue-details">
-    <ul class="code-issue-tabs">
-      <li>
-        <a class="js-tab-link underlined-link" href="#tab-issue-rule">{{t 'rule'}}</a>
-      </li>
-      <li>
-        <a class="js-tab-link underlined-link" href="#tab-issue-changelog">{{t 'changelog'}}</a>
-      </li>
-    </ul>
-
-    <div id="tab-issue-rule" class="js-tab">
-      <div class="rule-desc"></div>
-    </div>
-
-    <div id="tab-issue-changelog" class="js-tab"></div>
-  </div>
-
-
-  <div class="code-issue-comments">
-    {{#each comments}}
-      <div class="code-issue-comment" data-comment-key="{{key}}">
-        <h4>
-          <i class="icon-comment"></i>
-          <b>{{userName}}</b>
-          ({{fromNow createdAt}})
-
-          {{#if updatable}}
-            &nbsp;&nbsp;
-            <a class="link-action issue-comment-edit">{{t 'edit'}}</a>&nbsp;
-            <a class="link-action link-red spacer-right issue-comment-delete"
-               data-confirm-msg="{{t 'issue.comment.delete_confirm_message'}}">{{t 'delete'}}</a>
-          {{/if}}
-        </h4>
-        <div class="markdown">{{{show html htmlText}}}</div>
-      </div>
-    {{/each}}
-  </div>
-</div>
diff --git a/server/sonar-web/src/main/hbs/issues/issues-actions.hbs b/server/sonar-web/src/main/hbs/issues/issues-actions.hbs
new file mode 100644 (file)
index 0000000..1f01db4
--- /dev/null
@@ -0,0 +1,27 @@
+{{#unless maxResultsReached}}
+  <div class="navigator-actions-order">
+    {{#if sorting}}
+      {{t 'issues.ordered_by'}} <strong class="navigator-actions-ordered-by">{{sorting.sortText}}</strong> {{#if sorting.asc}}<i class="icon-sort-asc"></i>{{else}}<i class="icon-sort-desc"></i>{{/if}}
+    {{else}}
+      Order
+    {{/if}}
+  </div>
+  <ul class="navigator-actions-order-choices">
+    <li data-sort="UPDATE_DATE" data-asc="true">{{t 'issues.sort.update_date'}} <i class="icon-sort-asc"></i></li>
+    <li data-sort="UPDATE_DATE" data-asc="false">{{t 'issues.sort.update_date'}} <i class="icon-sort-desc"></i></li>
+    <li data-sort="SEVERITY" data-asc="true">{{t 'issues.sort.severity'}} <i class="icon-sort-asc"></i></li>
+    <li data-sort="SEVERITY" data-asc="false">{{t 'issues.sort.severity'}} <i class="icon-sort-desc"></i></li>
+    <li data-sort="STATUS" data-asc="true">{{t 'issues.sort.status'}} <i class="icon-sort-asc"></i></li>
+    <li data-sort="STATUS" data-asc="false">{{t 'issues.sort.status'}} <i class="icon-sort-desc"></i></li>
+  </ul>
+{{/unless}}
+<div class="navigator-actions-total">
+  {{t 'issues.found'}}: <strong>{{paging.fTotal}}</strong>
+  {{#notEq paging.fTotal 0}}
+    {{#if appState.canBulkChange}}
+      <a href="{{bulkChangeUrl}}?{{query}}"
+         class="navigator-actions-bulk"
+         title="{{t 'bulk_change'}}"><i class="icon-bulk-change"></i></a>
+    {{/if}}
+  {{/notEq}}
+</div>
diff --git a/server/sonar-web/src/main/hbs/issues/issues-details-favorite-filter.hbs b/server/sonar-web/src/main/hbs/issues/issues-details-favorite-filter.hbs
new file mode 100644 (file)
index 0000000..125f21c
--- /dev/null
@@ -0,0 +1,13 @@
+<ul class="navigator-filter-select-list">
+  {{#if items}}
+    {{#each items}}
+      <li>
+        <label data-id="{{id}}">{{{name}}}</label>
+      </li>
+    {{/each}}
+    <li class="line"></li>
+  {{/if}}
+  <li class="manage">
+    <label id="manage-favorites">{{t 'manage'}}</label>
+  </li>
+</ul>
diff --git a/server/sonar-web/src/main/hbs/issues/issues-header.hbs b/server/sonar-web/src/main/hbs/issues/issues-header.hbs
new file mode 100644 (file)
index 0000000..bb44852
--- /dev/null
@@ -0,0 +1,39 @@
+<h1 class="navigator-header-title">
+  {{#if name}}
+    {{name}}
+    <span class="navigator-header-title-note">
+      {{#unless shared}}
+        [{{t 'issue_filter.private'}}]
+      {{else}}
+        {{#eq user currentUser}}
+          [{{t 'issue_filter.shared_with_all_users'}}]
+        {{else}}
+          {{#if user}}
+            [{{t 'issue_filter.shared'}}]
+          {{/if}}
+        {{/eq}}
+      {{/unless}}
+    </span>
+  {{else}}
+    {{t 'issues'}}
+  {{/if}}
+</h1>
+
+  <div class="navigator-header-actions button-group">
+    <button id="issues-new-search">{{t 'issue_filter.new_search'}}</button>
+
+    {{#if appState.canManageFilters}}
+      {{#if canModify}}
+        {{#if canSave}}<button id="issues-filter-save">{{t 'save'}}</button>{{/if}}
+      {{/if}}
+      {{#unless id}}<button id="issues-filter-save-as">{{t 'save_as'}}</button>{{/unless}}
+      {{#if id}}<button id="issues-filter-copy">{{t 'copy'}}</button>{{/if}}
+      {{#if canModify}}
+        {{#if id}}<button id="issues-filter-edit">{{t 'edit'}}</button>{{/if}}
+      {{/if}}
+    {{/if}}
+  </div>
+
+{{#if description}}
+  <div class="navigator-header-description">{{description}}</div>
+{{/if}}
diff --git a/server/sonar-web/src/main/hbs/issues/issues.hbs b/server/sonar-web/src/main/hbs/issues/issues.hbs
new file mode 100644 (file)
index 0000000..50dba46
--- /dev/null
@@ -0,0 +1,4 @@
+<ol class="navigator-results-list"></ol>
+<div class="navigator-results-loader">
+  <i class="spinner"></i>
+</div>
diff --git a/server/sonar-web/src/main/hbs/issues/manual-issue.hbs b/server/sonar-web/src/main/hbs/issues/manual-issue.hbs
deleted file mode 100644 (file)
index 5c567da..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-<form action="" class="js-manual-issue-form code-issue-create-form">
-  {{! no manual rules }}
-  {{! <div class="warning" style="margin: 10px"> }}
-  {{!   <% if is_admin %> }}
-  {{!   <%= message('issue.manual.no_rules.admin') -%> }}
-  {{!   &nbsp;<a href="<%= ApplicationController.root_context -%>/manual_rules/index"><%= message('manage') -%></a> }}
-  {{!   <% else %> }}
-  {{!   <%= message('issue.manual.no_rules.non_admin') -%> }}
-  {{!   <% end %> }}
-  {{!   &nbsp;<%= link_to_function message('cancel'), 'closeCreateIssueForm(this)' -%> }}
-  {{! </div> }}
-
-  <input type="hidden" name="line" value="{{line}}">
-  <input type="hidden" name="component" value="{{component}}">
-
-  <div class="code-issue-name">
-    <select name="rule">
-      {{#each rules}}
-        <option value="{{key}}">{{name}}</option>
-      {{/each}}
-    </select>
-  </div>
-
-  <div class="code-issue-msg">
-    <table class="width100">
-      <tr>
-        <td>
-          <textarea rows="4" name="message" class="width100 marginbottom5"></textarea>
-        </td>
-      </tr>
-      <tr>
-        <td class="js-submit">
-          <input type="submit" value="{{t 'create'}}">
-          <a class="js-cancel" href="#">{{t 'cancel'}}</a>
-        </td>
-        <td class="js-spinner" style="display: none;">
-          <i class="spinner"></i>
-        </td>
-      </tr>
-    </table>
-    <div class="code-issue-errors error hidden"></div>
-  </div>
-
-</form>
diff --git a/server/sonar-web/src/main/hbs/issues/no-issues.hbs b/server/sonar-web/src/main/hbs/issues/no-issues.hbs
new file mode 100644 (file)
index 0000000..33ec191
--- /dev/null
@@ -0,0 +1 @@
+{{t 'issue_filter.no_issues'}}
diff --git a/server/sonar-web/src/main/hbs/issues/plan-form.hbs b/server/sonar-web/src/main/hbs/issues/plan-form.hbs
deleted file mode 100644 (file)
index 341068e..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-{{#if items}}
-  <select id="issue-detail-plan-select">
-    {{#if issue.actionPlan}}
-      <option value="#unplan">{{t 'issue.unplan.submit'}}</option>
-    {{/if}}
-    {{#each items}}
-      {{#notEq this.status 'CLOSED'}}
-        <option value="{{this.key}}">{{this.name}} {{#if this.fDeadLine}}({{this.fDeadLine}}){{/if}}</option>
-      {{/notEq}}
-    {{/each}}
-  </select>
-  <input id="issue-plan-submit" type="submit" value="{{t 'issue.plan.submit'}}">&nbsp;
-{{else}}
-  <span class="error">{{t 'issue.plan.error.plan_must_be_created_first'}}</span>
-{{/if}}
-<a id="issue-plan-cancel" class="action">{{t 'cancel'}}</a>
diff --git a/server/sonar-web/src/main/hbs/issues/rule.hbs b/server/sonar-web/src/main/hbs/issues/rule.hbs
deleted file mode 100644 (file)
index ba73797..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-<div class="rule-desc">
-  <h1 class="marginbottom10">{{name}}</h1>
-  <div class="marginbottom10">{{{htmlDesc}}}</div>
-  {{#if htmlNote}}<div class="marginbottom10">{{{htmlNote}}}</div>{{/if}}
-</div>
-
-<ul class="note code-issue-bar">
-  <li>{{key}}</li>
-  {{#all debtCharName debtSubCharName}}
-    <li>{{debtCharName}} > {{debtSubCharName}}</li>
-  {{else}}
-    <li>{{t 'issue.technical_debt_deleted'}}</li>
-  {{/all}}
-</ul>
diff --git a/server/sonar-web/src/main/hbs/issues/set-severity-form.hbs b/server/sonar-web/src/main/hbs/issues/set-severity-form.hbs
deleted file mode 100644 (file)
index e85c027..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-<table class="width100">
-  <tr>
-    <td style="vertical-align:top">
-      <select id="issue-set-severity-select" autofocus>
-        <option class="sev_BLOCKER" value="BLOCKER">{{t 'severity.BLOCKER'}}</option>
-        <option class="sev_CRITICAL" value="CRITICAL">{{t 'severity.CRITICAL'}}</option>
-        <option class="sev_MAJOR" value="MAJOR" selected>{{t 'severity.MAJOR'}}</option>
-        <option class="sev_MINOR" value="MINOR">{{t 'severity.MINOR'}}</option>
-        <option class="sev_INFO" value="INFO">{{t 'severity.INFO'}}</option>
-      </select>
-
-      <input id="issue-set-severity-submit" type="submit" value="{{t 'issue.set_severity.submit'}}">
-      <a id="issue-set-severity-cancel" class="action">{{t 'cancel'}}</a>
-    </td>
-  </tr>
-</table>
\ No newline at end of file
diff --git a/server/sonar-web/src/main/hbs/navigator/ajax-select-filter.hbs b/server/sonar-web/src/main/hbs/navigator/ajax-select-filter.hbs
new file mode 100644 (file)
index 0000000..97f4be3
--- /dev/null
@@ -0,0 +1,5 @@
+<div class="navigator-filter-search">
+  <input type="text">
+</div>
+<ul class="navigator-filter-select-list choices"></ul>
+<ul class="navigator-filter-select-list opposite"></ul>
diff --git a/server/sonar-web/src/main/hbs/navigator/base-details-filter.hbs b/server/sonar-web/src/main/hbs/navigator/base-details-filter.hbs
new file mode 100644 (file)
index 0000000..40114bb
--- /dev/null
@@ -0,0 +1 @@
+<div class="navigator-filter-details-inner"></div>
diff --git a/server/sonar-web/src/main/hbs/navigator/base-filter.hbs b/server/sonar-web/src/main/hbs/navigator/base-filter.hbs
new file mode 100644 (file)
index 0000000..b20fcf2
--- /dev/null
@@ -0,0 +1,5 @@
+<div class="navigator-filter-label">{{name}}</div>
+<div class="navigator-filter-value {{#if defaultValue}}default{{/if}}">{{value}}</div>
+{{#if optional}}
+  <div class="navigator-filter-disable">&times;</div>
+{{/if}}
diff --git a/server/sonar-web/src/main/hbs/navigator/checkbox-filter.hbs b/server/sonar-web/src/main/hbs/navigator/checkbox-filter.hbs
new file mode 100644 (file)
index 0000000..158884d
--- /dev/null
@@ -0,0 +1,4 @@
+<div class="navigator-filter-label">{{name}}</div>
+{{#if optional}}
+  <div class="navigator-filter-disable">&times;</div>
+{{/if}}
diff --git a/server/sonar-web/src/main/hbs/navigator/choice-filter-item.hbs b/server/sonar-web/src/main/hbs/navigator/choice-filter-item.hbs
new file mode 100644 (file)
index 0000000..c8b4b59
--- /dev/null
@@ -0,0 +1,13 @@
+<li>
+  <label title="{{text}}" data-id="{{id}}">
+    <i class="icon-checkbox {{#if checked}}icon-checkbox-checked{{/if}} {{#unless multiple}}icon-checkbox-single{{/unless}}"></i>
+      {{#if icon}}<i class="icon-{{icon}}"></i>{{/if}}
+    <span>
+        {{text}}
+      {{#if category}}
+        <br>
+          <span class="subtitle">{{category}}</span>
+      {{/if}}
+      </span>
+  </label>
+</li>
diff --git a/server/sonar-web/src/main/hbs/navigator/choice-filter.hbs b/server/sonar-web/src/main/hbs/navigator/choice-filter.hbs
new file mode 100644 (file)
index 0000000..12fd1f0
--- /dev/null
@@ -0,0 +1,2 @@
+<ul class="navigator-filter-select-list choices"></ul>
+<ul class="navigator-filter-select-list opposite"></ul>
diff --git a/server/sonar-web/src/main/hbs/navigator/favorite-details-filter.hbs b/server/sonar-web/src/main/hbs/navigator/favorite-details-filter.hbs
new file mode 100644 (file)
index 0000000..e567f50
--- /dev/null
@@ -0,0 +1,13 @@
+<ul class="navigator-filter-select-list">
+  {{#ifNotEmpty choicesArray}}
+    {{#each choicesArray}}
+      <li>
+        <label data-id="{{k}}">{{v}}</label>
+      </li>
+    {{/each}}
+    <li class="line"></li>
+  {{/ifNotEmpty}}
+  <li class="manage">
+    <label id="manage-favorites">{{translate "manage" }}</label>
+  </li>
+</ul>
diff --git a/server/sonar-web/src/main/hbs/navigator/favorite-filter.hbs b/server/sonar-web/src/main/hbs/navigator/favorite-filter.hbs
new file mode 100644 (file)
index 0000000..52e00b0
--- /dev/null
@@ -0,0 +1 @@
+<div class="navigator-filter-favorite-toggle" title="{{translate 'filtersList' }}"></div>
diff --git a/server/sonar-web/src/main/hbs/navigator/metric-filter.hbs b/server/sonar-web/src/main/hbs/navigator/metric-filter.hbs
new file mode 100644 (file)
index 0000000..ae19cec
--- /dev/null
@@ -0,0 +1,27 @@
+<div class="navigator-filter-details-inner">
+  <select name="metric">
+    <option></option>
+    {{#each groupedMetrics}}
+      <optgroup label="{{domain}}">
+        {{#each metrics}}
+          <option value="{{name}}">{{short_name}}</option>
+        {{/each}}
+      </optgroup>
+    {{/each}}
+  </select>
+
+  <select name="period">
+    <option value="0">{{translate "value"}}</option>
+    {{#each periods}}
+      <option value="{{@key}}">{{this}}</option>
+    {{/each}}
+  </select>
+
+  <select name="op">
+    {{#each operations}}
+      <option value="{{@key}}">{{this}}</option>
+    {{/each}}
+  </select>
+
+  <input type="text" name="val">
+</div>
diff --git a/server/sonar-web/src/main/hbs/navigator/more-criteria-details-filter.hbs b/server/sonar-web/src/main/hbs/navigator/more-criteria-details-filter.hbs
new file mode 100644 (file)
index 0000000..252cacc
--- /dev/null
@@ -0,0 +1,9 @@
+<ul class="navigator-filter-select-list">
+  {{#each filters}}
+    <li>
+      <label data-id="{{id}}" {{#if inactive}}class="inactive"{{/if}} {{#if title}}title="{{title}}"{{/if}}>
+        {{name}}
+      </label>
+    </li>
+  {{/each}}
+</ul>
diff --git a/server/sonar-web/src/main/hbs/navigator/more-criteria-filter.hbs b/server/sonar-web/src/main/hbs/navigator/more-criteria-filter.hbs
new file mode 100644 (file)
index 0000000..e6a6771
--- /dev/null
@@ -0,0 +1 @@
+{{t "moreCriteria"}}
diff --git a/server/sonar-web/src/main/hbs/navigator/range-filter.hbs b/server/sonar-web/src/main/hbs/navigator/range-filter.hbs
new file mode 100644 (file)
index 0000000..a13fdff
--- /dev/null
@@ -0,0 +1,5 @@
+<div class="navigator-filter-details-inner">
+  <input class="navigator-filter-range-input" type="text" name="{{propertyFrom}}" placeholder="{{placeholder}}">
+  <label>{{translate "to"}}</label>
+  <input class="navigator-filter-range-input" type="text" name="{{propertyTo}}" placeholder="{{placeholder}}">
+</div>
diff --git a/server/sonar-web/src/main/hbs/navigator/string-filter.hbs b/server/sonar-web/src/main/hbs/navigator/string-filter.hbs
new file mode 100644 (file)
index 0000000..ab1978c
--- /dev/null
@@ -0,0 +1,3 @@
+<div class="navigator-filter-details-inner">
+  <input type="text" name="{{property}}" value="{{value}}">
+</div>
index 5451f4d5d9f2f0dcaa71f17e2435c15cfed189d9..cf16e5968ca2cb7eb8051da17a09e76fd73b0ac7 100644 (file)
@@ -292,7 +292,7 @@ define(['handlebars', 'moment'], function (Handlebars, moment) {
   });
 
   Handlebars.registerHelper('componentViewerHeaderLink', function(value, label, cl, hash) {
-    var name = '_header-link';
+    var name = '_cw-header-link';
     if (value != null) {
       var ps = Handlebars.partials;
       if (typeof ps[name] !== 'function') {
@@ -303,7 +303,7 @@ define(['handlebars', 'moment'], function (Handlebars, moment) {
   });
 
   Handlebars.registerHelper('componentViewerHeaderItem', function(value, label, hash) {
-    var name = '_header-item';
+    var name = '_cw-header-item';
     if (value != null) {
       var ps = Handlebars.partials;
       if (typeof ps[name] !== 'function') {
index 93dd15f7b798e587a8505188b8210124a3212159..6f7700c336b4d9bf4a0f34f3e84803e7b7bfe0a9 100644 (file)
@@ -1,14 +1,16 @@
 define(
     [
-      'backbone', 'backbone.marionette',
-      '../navigator/filters/filter-bar',
+      'backbone',
+      'backbone.marionette',
+      'navigator/filters/filter-bar',
       'navigator/filters/base-filters',
       'navigator/filters/favorite-filters',
       'navigator/filters/read-only-filters',
-      'component-viewer/main'
+      'component-viewer/main',
+      'templates/issues'
     ],
     function (Backbone, Marionette, FilterBarView, BaseFilters, FavoriteFiltersModule, ReadOnlyFilterView,
-              ComponentViewer) {
+              ComponentViewer, Templates) {
 
       var AppState = Backbone.Model.extend({
 
@@ -119,7 +121,7 @@ define(
 
 
       var IssueView = Marionette.ItemView.extend({
-        template: Handlebars.compile(jQuery('#issue-template').html() || ''),
+        template: Templates['issue-detail'],
         tagName: 'li',
 
 
@@ -190,12 +192,12 @@ define(
       var NoIssuesView = Marionette.ItemView.extend({
         tagName: 'li',
         className: 'navigator-results-no-results',
-        template: Handlebars.compile(jQuery('#no-issues-template').html() || '')
+        template: Templates['no-issues']
       });
 
 
       var IssuesView = Marionette.CompositeView.extend({
-        template: Handlebars.compile(jQuery('#issues-template').html() || ''),
+        template: Templates['issues'],
         itemViewContainer: '.navigator-results-list',
         itemView: IssueView,
         emptyView: NoIssuesView,
@@ -304,7 +306,7 @@ define(
 
 
       var IssuesActionsView = Marionette.ItemView.extend({
-        template: Handlebars.compile(jQuery('#issues-actions-template').html() || ''),
+        template: Templates['issues-actions'],
 
 
         collectionEvents: {
@@ -376,6 +378,7 @@ define(
             sorting: this.collection.sorting,
             maxResultsReached: this.collection.maxResultsReached,
             appState: window.SS.appState.toJSON(),
+            bulkChangeUrl: baseUrl + '/issues/bulk_change_form',
             query: (Backbone.history.fragment || '').replace(/\|/g, '&')
           });
         }
@@ -384,7 +387,7 @@ define(
 
 
       var IssuesDetailsFavoriteFilterView = FavoriteFiltersModule.DetailsFavoriteFilterView.extend({
-        template: Handlebars.compile(jQuery('#issues-details-favorite-filter-template').html() || ''),
+        template: Templates['issues-details-favorite-filter'],
 
 
         applyFavorite: function (e) {
@@ -435,6 +438,7 @@ define(
 
 
       var IssuesFilterBarView = FilterBarView.extend({
+        template: Templates['filter-bar'],
 
         collectionEvents: {
           'change:enabled': 'changeEnabled'
@@ -511,7 +515,7 @@ define(
 
 
       var IssuesHeaderView = Marionette.ItemView.extend({
-        template: Handlebars.compile(jQuery('#issues-header-template').html() || ''),
+        template: Templates['issues-header'],
 
 
         modelEvents: {
index eef2662fd896504f8f2a602300de105d32e97956..fbb4d2e4d81e14682f5d87b399a626db87424b2a 100644 (file)
@@ -25,7 +25,7 @@ requirejs.config({
 requirejs(
     [
       'backbone', 'backbone.marionette',
-      'navigator/filters/filter-bar',
+      'measures/measures-filter-bar',
       'navigator/filters/base-filters',
       'navigator/filters/checkbox-filters',
       'navigator/filters/choice-filters',
diff --git a/server/sonar-web/src/main/js/measures/measures-filter-bar.js b/server/sonar-web/src/main/js/measures/measures-filter-bar.js
new file mode 100644 (file)
index 0000000..5b5c6b6
--- /dev/null
@@ -0,0 +1,7 @@
+define(['navigator/filters/filter-bar', 'common/handlebars-extensions'], function (FilterBarView) {
+
+  return FilterBarView.extend({
+    template: getTemplate('#filter-bar-template')
+  });
+
+});
index f8866e1b31af58384eed9c855ae8d70b5090b569..d32cf80bdf664d877ee289933152637ad29933b4 100644 (file)
@@ -2,8 +2,9 @@ define([
   'backbone',
   'navigator/filters/base-filters',
   'navigator/filters/choice-filters',
+  'templates/navigator',
   'common/handlebars-extensions'
-], function (Backbone, BaseFilters, ChoiceFilters) {
+], function (Backbone, BaseFilters, ChoiceFilters, Templates) {
 
   var PAGE_SIZE = 100;
 
@@ -96,7 +97,7 @@ define([
 
 
   var AjaxSelectDetailsFilterView = ChoiceFilters.DetailsChoiceFilterView.extend({
-    template: getTemplate('#ajax-select-filter-template'),
+    template: Templates['ajax-select-filter'],
     listTemplate: getTemplate('#choice-filter-template'),
     searchKey: 's',
 
index ac8372585ea6adeac0e732d670346bda885c3a50..fcff56586a483c3b3243b44b967128d8d035060f 100644 (file)
@@ -1,4 +1,9 @@
-define(['backbone', 'backbone.marionette', 'common/handlebars-extensions'], function (Backbone, Marionette) {
+define([
+  'backbone',
+  'backbone.marionette',
+  'templates/navigator',
+  'common/handlebars-extensions'
+], function (Backbone, Marionette, Templates) {
 
   var Filter = Backbone.Model.extend({
 
@@ -20,7 +25,7 @@ define(['backbone', 'backbone.marionette', 'common/handlebars-extensions'], func
 
 
   var DetailsFilterView = Marionette.ItemView.extend({
-    template: getTemplate('#base-details-filter-template'),
+    template: Templates['base-details-filter'],
     className: 'navigator-filter-details',
 
 
@@ -38,7 +43,7 @@ define(['backbone', 'backbone.marionette', 'common/handlebars-extensions'], func
 
 
   var BaseFilterView = Marionette.ItemView.extend({
-    template: getTemplate('#base-filter-template'),
+    template: Templates['base-filter'],
     className: 'navigator-filter',
 
 
index 49e3490309a1b5bf06566c2a5f618ad5618f24fe..7bae1e0b47d9e6f2ba4244ac2af4ee666b4562be 100644 (file)
@@ -2,11 +2,12 @@ define([
   'backbone',
   'backbone.marionette',
   'navigator/filters/base-filters',
+  'templates/navigator',
   'common/handlebars-extensions'
-], function (Backbone, Marionette, BaseFilters) {
+], function (Backbone, Marionette, BaseFilters, Templates) {
 
   return BaseFilters.BaseFilterView.extend({
-    template: getTemplate('#checkbox-filter-template'),
+    template: Templates['checkbox-filter'],
     className: 'navigator-filter navigator-filter-inline',
 
 
index 823ab260a260feef94878c9f631ee4c8714e8f16..b368384be9c5247b2d8d56ccb4099b12b82c531d 100644 (file)
@@ -1,12 +1,13 @@
 define([
   'handlebars',
   'navigator/filters/base-filters',
+  'templates/navigator',
   'common/handlebars-extensions'
-], function (Handlebars, BaseFilters) {
+], function (Handlebars, BaseFilters, Templates) {
 
   var DetailsChoiceFilterView = BaseFilters.DetailsFilterView.extend({
-    template: getTemplate('#choice-filter-template'),
-    itemTemplate: getTemplate('#choice-filter-item-template'),
+    template: Templates['choice-filter'],
+    itemTemplate: Templates['choice-filter-item'],
 
 
     events: function() {
index eda16b3cb661e0f814cecc5dc50aaeb29463c351..4852e30a66659437d04c7b0e45fd17789e6f2695 100644 (file)
@@ -3,11 +3,12 @@ define([
   'backbone.marionette',
   'navigator/filters/base-filters',
   'navigator/filters/choice-filters',
+  'templates/navigator',
   'common/handlebars-extensions'
-], function (Backbone, Marionette, BaseFilters, ChoiceFilters) {
+], function (Backbone, Marionette, BaseFilters, ChoiceFilters, Templates) {
 
   var DetailsFavoriteFilterView = BaseFilters.DetailsFilterView.extend({
-    template: getTemplate('#favorite-details-filter-template'),
+    template: Templates['favorite-details-filter'],
 
 
     events: {
@@ -46,7 +47,7 @@ define([
 
 
   var FavoriteFilterView = ChoiceFilters.ChoiceFilterView.extend({
-    template: getTemplate('#favorite-filter-template'),
+    template: Templates['favorite-filter'],
     className: 'navigator-filter navigator-filter-favorite',
 
 
index b753bd6ff09e1b1407a5afb5367081aabae02a8e..4bcec144adfbf5c40cc3d9ff9bd56c2f4392ab79 100644 (file)
@@ -9,7 +9,6 @@ define(
     function (Marionette, BaseFilters) {
 
       return Marionette.CompositeView.extend({
-        template: getTemplate('#filter-bar-template'),
         itemViewContainer: '.navigator-filters-list',
 
 
index f2e7663b3804f15fee36b4104173ae21dc5e3095..0bb84819e0bf8d966ffdf710a80c50aa5b2cd591 100644 (file)
@@ -1,7 +1,11 @@
-define(['navigator/filters/base-filters', 'common/handlebars-extensions'], function (BaseFilters) {
+define([
+  'navigator/filters/base-filters',
+  'templates/navigator',
+  'common/handlebars-extensions'
+], function (BaseFilters, Templates) {
 
   var DetailsMetricFilterView = BaseFilters.DetailsFilterView.extend({
-    template: getTemplate('#metric-filter-template'),
+    template: Templates['metric-filter'],
 
 
     events: {
index 384c9281367c565e9de726cf092d58b65a9df791..8a376d5f751c60b18333e4240cc8bd7059bd6f52 100644 (file)
@@ -1,11 +1,12 @@
 define([
   'navigator/filters/base-filters',
   'navigator/filters/choice-filters',
+  'templates/navigator',
   'common/handlebars-extensions'
-], function (BaseFilters, ChoiceFilters) {
+], function (BaseFilters, ChoiceFilters, Templates) {
 
   var DetailsMoreCriteriaFilterView = ChoiceFilters.DetailsChoiceFilterView.extend({
-    template: getTemplate('#more-criteria-details-filter-template'),
+    template: Templates['more-criteria-details-filter'],
 
 
     events: {
@@ -58,7 +59,7 @@ define([
 
 
   var MoreCriteriaFilterView = ChoiceFilters.ChoiceFilterView.extend({
-    template: getTemplate('#more-criteria-filter-template'),
+    template: Templates['more-criteria-filter'],
     className: 'navigator-filter navigator-filter-more-criteria',
 
 
index 5d42e5f3d0328e4ad80f0d912161bab4bf40e05c..7056df8135280771d4dca94d8f6c56aca72a44cd 100644 (file)
@@ -1,7 +1,11 @@
-define(['navigator/filters/base-filters', 'common/handlebars-extensions'], function (BaseFilters) {
+define([
+  'navigator/filters/base-filters',
+  'templates/navigator',
+  'common/handlebars-extensions'
+], function (BaseFilters, Templates) {
 
   var DetailsRangeFilterView = BaseFilters.DetailsFilterView.extend({
-    template: getTemplate('#range-filter-template'),
+    template: Templates['range-filter'],
 
 
     events: {
index 2e1278f350f0672344e30aed66846426685df818..252d06750825daa6e72a606622e33798e7801738 100644 (file)
@@ -1,7 +1,11 @@
-define(['navigator/filters/base-filters', 'common/handlebars-extensions'], function (BaseFilters) {
+define([
+  'navigator/filters/base-filters',
+  'templates/navigator',
+  'common/handlebars-extensions'
+], function (BaseFilters, Templates) {
 
   var DetailsStringFilterView = BaseFilters.DetailsFilterView.extend({
-    template: getTemplate('#string-filter-template'),
+    template: Templates['string-filter'],
 
 
     events: {
index 4bafe530c122834a716d3f7037a647529325752d..0d190ef7d3c72a23dec5687dd03c3816601881f3 100644 (file)
@@ -6,6 +6,3 @@
 <div id="coding-rules-page-loader" class="navigator-page-loader">
   <i class="spinner"></i>
 </div>
-
-
-<%= render :partial => '/navigator/filter_templates' -%>
\ No newline at end of file
index cb04ad4c7a6935724b8d96f09542c4afd7f652b4..c76a3a81826397501e4e905cd860817131fb02a5 100644 (file)
   </div>
 </div>
 
-<%= render :partial => '/navigator/filter_templates' -%>
-<%= render :partial => '/issues/templates/filter_bar_template.hbs' -%>
-<%= render :partial => '/issues/templates/header.hbs' -%>
-<%= render :partial => '/issues/templates/issue.hbs' -%>
-<%= render :partial => '/issues/templates/issues_actions.hbs' -%>
-<%= render :partial => '/issues/templates/issues.hbs' -%>
-<%= render :partial => '/issues/templates/no_issues.hbs' -%>
-<%= render :partial => '/issues/templates/issues_details_favorite_filter.hbs' -%>
-<%= render :partial => '/issues/templates/issue_detail.hbs' -%>
-<%= render :partial => '/issues/templates/issue_detail_inner.hbs' -%>
-<%= render :partial => '/issues/templates/issue_detail_comment_form.hbs' -%>
-<%= render :partial => '/issues/templates/issue_detail_rule.hbs' -%>
-<%= render :partial => '/issues/templates/issue_detail_set_severity_form.hbs' -%>
-<%= render :partial => '/issues/templates/issue_detail_assign_form.hbs' -%>
-<%= render :partial => '/issues/templates/issue_detail_plan_form.hbs' -%>
 
 <script>
   window.SS = {};
diff --git a/server/sonar-web/src/main/webapp/WEB-INF/app/views/issues/templates/_filter_bar_template.hbs.erb b/server/sonar-web/src/main/webapp/WEB-INF/app/views/issues/templates/_filter_bar_template.hbs.erb
deleted file mode 100644 (file)
index 8857705..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<script id="filter-bar-template" type="text/x-handlebars-template">
-  <div class="navigator-filters-list"></div>
-  <button class="navigator-filter-submit"><%= message('search_verb') -%></button>
-</script>
diff --git a/server/sonar-web/src/main/webapp/WEB-INF/app/views/issues/templates/_header.hbs.erb b/server/sonar-web/src/main/webapp/WEB-INF/app/views/issues/templates/_header.hbs.erb
deleted file mode 100644 (file)
index e2187aa..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-<script id="issues-header-template" type="text/x-handlebars-template">
-  <h1 class="navigator-header-title">
-    {{#if name}}
-      {{name}}
-      <span class="navigator-header-title-note">
-        {{#unless shared}}
-          [<%= message 'issue_filter.private' -%>]
-        {{else}}
-          {{#eq user currentUser}}
-            [<%= message 'issue_filter.shared_with_all_users' -%>]
-          {{else}}
-            {{#if user}}
-              [<%= message 'issue_filter.shared' -%>]
-            {{/if}}
-          {{/eq}}
-        {{/unless}}
-      </span>
-    {{else}}
-      <%= message ('issues') -%>
-    {{/if}}
-  </h1>
-
-    <div class="navigator-header-actions button-group">
-      <button id="issues-new-search"><%= message ('issue_filter.new_search') -%></button>
-
-      {{#if appState.canManageFilters}}
-        {{#if canModify}}
-          {{#if canSave}}<button id="issues-filter-save"><%= message('save') -%></button>{{/if}}
-        {{/if}}
-        {{#unless id}}<button id="issues-filter-save-as"><%= message('save_as') -%></button>{{/unless}}
-        {{#if id}}<button id="issues-filter-copy"><%= message('copy') -%></button>{{/if}}
-        {{#if canModify}}
-          {{#if id}}<button id="issues-filter-edit"><%= message('edit') -%></button>{{/if}}
-        {{/if}}
-      {{/if}}
-    </div>
-
-  {{#if description}}
-    <div class="navigator-header-description">{{description}}</div>
-  {{/if}}
-</script>
diff --git a/server/sonar-web/src/main/webapp/WEB-INF/app/views/issues/templates/_issue.hbs.erb b/server/sonar-web/src/main/webapp/WEB-INF/app/views/issues/templates/_issue.hbs.erb
deleted file mode 100644 (file)
index 3ae908c..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-<script id="issue-template" type="text/x-handlebars-template">
-  <div class="line line-small">
-      {{severityIcon severity}}{{translate "severities" severity}}&nbsp;
-      {{statusIcon status}}{{translate "statuses" status}}
-      {{#if resolution}}({{translate "resolutions" resolution}}){{/if}}
-
-      <div class="line-right">
-        {{fUpdateAge}}
-      </div>
-    </div>
-
-    <div class="line line-nowrap" title="{{message}}">
-      {{message}}
-    </div>
-
-    <div class="line">
-      {{#unless singleProject}}
-        <div class="subtitle line-nowrap">{{default projectLongName projectName}}</div>
-      {{/unless}}
-      <div class="subtitle line-nowrap">{{componentLongName}}</div>
-    </div>
-</script>
diff --git a/server/sonar-web/src/main/webapp/WEB-INF/app/views/issues/templates/_issue_detail.hbs.erb b/server/sonar-web/src/main/webapp/WEB-INF/app/views/issues/templates/_issue_detail.hbs.erb
deleted file mode 100644 (file)
index b2fa6c4..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-<script id="issue-detail-template" type="text/x-handlebars-template">
-  <div class="source_title">
-    <div class="subtitle">{{projectName}} {{#if subProjectName}}/ {{subProjectName}}{{/if}}</div>
-    <span class="h1">
-      {{#if componentQualifier}}
-        {{qualifierIcon componentQualifier}}
-      {{/if}}
-
-      {{#if componentLongName}}
-        {{#if componentQualifier}}
-          <a target="_blank" href="<%= ApplicationController.root_context -%>{{dashboardUrl component componentQualifier}}">{{componentLongName}}</a>
-        {{else}}
-          {{componentLongName}}
-        {{/if}}
-      {{else}}
-        {{component}}
-      {{/if}}
-    </span>
-  </div>
-
-  {{#if source}}
-    {{#unless line}}
-      {{> detailInnerTemplate }}
-    {{/unless}}
-
-    <div class="source">
-      <table id="sources_{{key}}" class="sources2 code" cellpadding="0" cellspacing="0">
-        {{#sources source scm}}
-          <tr class="row">
-            <td class="scm {{#if scm}}revision{{/if}}" {{#if first}}style="border-top:none;"{{/if}}>
-              <span class="date"><a>{{scm.date}}</a></span>
-              <span class="author" title="{{scm.author}}">{{scm.author}}</span>
-            </td>
-            <td class="lid L{{lineNumber}}"><a>{{lineNumber}}</a></td>
-            <td class="line {{#eq ../line lineNumber}}ko{{/eq}}"><pre>{{{code}}}</pre></td>
-          </tr>
-          {{#eq ../line lineNumber}}
-            <tr>
-              <td class="scm"></td>
-              <td class="lid"></td>
-              <td class="code-issues">{{> detailInnerTemplate ../..}}</td>
-            </tr>
-          {{/eq}}
-        {{/sources}}
-      </table>
-    </div>
-  {{else}}
-    {{> detailInnerTemplate}}
-  {{/if}}
-
-</script>
diff --git a/server/sonar-web/src/main/webapp/WEB-INF/app/views/issues/templates/_issue_detail_assign_form.hbs.erb b/server/sonar-web/src/main/webapp/WEB-INF/app/views/issues/templates/_issue_detail_assign_form.hbs.erb
deleted file mode 100644 (file)
index e7c7899..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-<script id="issue-detail-assign-form-template" type="text/x-handlebars-template">
-  <table class="width100">
-    <tr>
-      <td>
-        <input type="text" id="issue-assignee-select">
-        <input id="issue-assign-submit" type="submit" value="<%= message('issue.assign.submit') -%>">&nbsp;
-        <a id="issue-assign-cancel" class="action"><%= message('cancel') -%></a>
-      </td>
-    </tr>
-  </table>
-</script>
diff --git a/server/sonar-web/src/main/webapp/WEB-INF/app/views/issues/templates/_issue_detail_comment_form.hbs.erb b/server/sonar-web/src/main/webapp/WEB-INF/app/views/issues/templates/_issue_detail_comment_form.hbs.erb
deleted file mode 100644 (file)
index f408ed8..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-<script id="issue-detail-comment-form-template" type="text/x-handlebars-template">
-  <table class="width100">
-    <tr>
-      <td style="vertical-align:top" colspan="2">
-        <textarea id="issue-comment-text" rows="4" name="text"style="width: 100%">{{raw}}</textarea>
-      </td>
-    </tr>
-    <tr>
-      <td style="padding-top: 5px">
-        <input id="issue-comment-submit" type="submit" value="{{#if id}}<%= message('save') -%>{{else}}<%= message('issue.comment.submit') -%>{{/if}}" disabled>
-        <a id="issue-comment-cancel" class="action"><%= message('cancel') -%></a>
-      </td>
-      <td align="right">
-        <%= render :partial => 'markdown/tips' -%>
-      </td>
-    </tr>
-  </table>
-</script>
diff --git a/server/sonar-web/src/main/webapp/WEB-INF/app/views/issues/templates/_issue_detail_inner.hbs.erb b/server/sonar-web/src/main/webapp/WEB-INF/app/views/issues/templates/_issue_detail_inner.hbs.erb
deleted file mode 100644 (file)
index 50575b8..0000000
+++ /dev/null
@@ -1,166 +0,0 @@
-<script id="issue-detail-inner-template" type="text/x-handlebars-template">
-  <div class="code-issue code-issue-collapsed" data-issue-key="{{key}}" data-issue-component="{{component}}" data-issue-rule="{{rule}}">
-    <div class="code-issue-name code-issue-toggle">
-      <div class="code-issue-name-rule">
-        {{severityIcon severity}}&nbsp;<span class="rulename">{{message}}</span>
-      </div>
-
-      <div class="code-issue-permalink">
-        <a target="_blank" href="<%= ApplicationController.root_context -%>/issue/show/{{key}}?layout=false"><img src="<%= ApplicationController.root_context -%>/images/new-window-16.gif"></a>
-      </div>
-    </div>
-
-
-    <ul class="code-issue-actions code-issue-list">
-      {{#inArray actions "comment"}}
-        <li>
-          <a id="issue-comment" class="link-action">{{translate "actions.comment" }}</a>
-        </li>
-      {{/inArray}}
-
-
-      <li>
-        {{statusIcon status}}{{translate "statuses" status}}
-        {{#if resolution}}({{translate "resolutions" resolution}}){{/if}}
-
-        {{#ifNotEmpty transitions}}
-          {{#withFirst transitions}}
-            <a class="link-action issue-transition spacer-left" data-transition="{{this}}">{{translate "transitions" this}}</a>
-          {{/withFirst}}
-
-          {{#ifHasExtraTransitions transitions}}
-            <div class="dropdown">
-              <a class="link-action link-more" onclick="showDropdownMenuOnElement($j(this).next('.dropdown-menu')); return false;"></a>
-              <ul style="display: none" class="dropdown-menu">
-                {{#withoutFirst transitions}}
-                  <li>
-                    <a class="link-action issue-transition" data-transition="{{this}}">{{translate "transitions" this}}</a>
-                  </li>
-                {{/withoutFirst}}
-              </ul>
-            </div>
-
-          {{/ifHasExtraTransitions}}
-        {{/ifNotEmpty}}
-      </li>
-
-
-      {{#inArray actions "assign"}}
-      <li>
-        {{#if assigneeName}}
-          <a id="issue-assign" class="link-action"><%= message('assigned_to') -%></a> {{assigneeName}}</li>
-        {{else}}
-          <a id="issue-assign" class="link-action">{{translate "actions.assign" }}</a>
-          {{#inArray actions "assign_to_me"}}
-            [<a id="issue-assign-to-me" class="link-action">{{translate "actions.assign_to_me" }}</a>]
-          {{/inArray}}
-        {{/if}}
-        </li>
-      {{else}}
-        {{#if assigneeName}}
-          <li><%= message('assigned_to') -%> <strong>{{assigneeName}}</strong></li>
-        {{/if}}
-      {{/inArray}}
-
-
-      {{#inArray actions "plan"}}
-        <li>
-          {{#if actionPlanName}}
-            <a id="issue-plan" class="link-action"><%= message('issue.planned_for') -%></a> {{actionPlanName}}
-          {{else}}
-            <a id="issue-plan" class="link-action"><%= message('issue.do_plan') -%></a>
-          {{/if}}
-        </li>
-      {{else}}
-        {{#if actionPlanName}}
-          <li><%= message('issue.planned_for') -%> <strong>{{actionPlanName}}</strong></li>
-        {{/if}}
-      {{/inArray}}
-
-
-      {{#ifHasExtraActions actions}}
-        <li>
-          <div class="dropdown">
-            <a class="link-action link-more" onclick="showDropdownMenuOnElement($j(this).next('.dropdown-menu')); return false;"><%= message('more_actions') -%></a>
-            <ul style="display: none" class="dropdown-menu">
-              {{#inArray actions "set_severity"}}
-                <li>
-                  <a id="issue-set-severity" class="link-action spacer-right">{{translate "actions.set_severity"}}</a>
-                </li>
-              {{/inArray}}
-              {{#pluginActions actions}}
-                <li>
-                  <a class="link-action spacer-right issue-action" data-action="{{this}}">{{translate "actions" this}}</a>
-                </li>
-              {{/pluginActions}}
-            </ul>
-          </div>
-        </li>
-      {{/ifHasExtraActions}}
-
-      {{#if debt}}
-        <li><%= message('issue.technical_debt_short') -%>: {{debt}}</li>
-      {{/if}}
-
-      {{#if reporterName}}<li><%= message('reporter') -%>: {{reporterName}}</li>{{/if}}
-      {{#if author}}<li><%= message('author') -%>: {{author}}</li>{{/if}}
-    </ul>
-
-    <div class="code-issue-form"></div>
-
-
-    <div class="code-issue-details">
-      <ul class="tabs">
-        <li>
-          <a href="#tab-issue-rule"><%= message('rule') -%></a>
-        </li>
-        <li>
-          <a href="#tab-issue-changelog"><%= message('changelog') -%></a>
-        </li>
-      </ul>
-
-      <div id="tab-issue-rule">
-        <div class="rule-desc"></div>
-      </div>
-
-      <div id="tab-issue-changelog">
-        <table class="spaced">
-          <tbody>
-          {{#each changelog}}
-            <tr>
-              <td class="thin left top" nowrap>{{fCreationDate}}</td>
-              <td class="thin left top" nowrap>{{userName}}</td>
-              <td class="left top">
-                {{#each diffs}}
-                  {{this}}<br>
-                {{/each}}
-              </td>
-            </tr>
-          {{/each}}
-          </tbody>
-        </table>
-      </div>
-    </div>
-
-
-    <div class="code-issue-comments">
-      {{#each comments}}
-        <div class="code-issue-comment" data-comment-key="{{key}}">
-          <h4>
-            <%= image_tag('reviews/comment.png') -%>
-            <b>{{userName}}</b>
-            ({{fCreatedAge}})
-
-            {{#if updatable}}
-              &nbsp;<%= image_tag 'sep12.png' -%>&nbsp;
-              <a class="link-action issue-comment-edit"><%= message('edit') -%></a>
-              <a class="link-action link-red spacer-right issue-comment-delete"
-                 data-confirm-msg="<%= h message('issue.comment.delete_confirm_message') -%>"><%= message('delete') -%></a>
-            {{/if}}
-          </h4>
-          {{{html}}}
-        </div>
-      {{/each}}
-    </div>
-  </div>
-</script>
diff --git a/server/sonar-web/src/main/webapp/WEB-INF/app/views/issues/templates/_issue_detail_plan_form.hbs.erb b/server/sonar-web/src/main/webapp/WEB-INF/app/views/issues/templates/_issue_detail_plan_form.hbs.erb
deleted file mode 100644 (file)
index 33e2415..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-<script id="issue-detail-plan-form-template" type="text/x-handlebars-template">
-  {{#if items}}
-    <select id="issue-detail-plan-select">
-      {{#if issue.actionPlan}}
-        <option value="#unplan"><%= message('issue.unplan.submit') -%></option>
-      {{/if}}
-      {{#each items}}
-        {{#notEq this.status 'CLOSED'}}
-          <option value="{{this.key}}">{{this.name}} {{#if this.fDeadLine}}({{this.fDeadLine}}){{/if}}</option>
-        {{/notEq}}
-      {{/each}}
-    </select>
-    <input id="issue-plan-submit" type="submit" value="<%= message('issue.plan.submit') -%>">&nbsp;
-  {{else}}
-    <% if is_admin? %>
-      <span class="error"><%= message('issue.plan.error.plan_must_be_created_first_for_admin') -%></span>
-    <% else %>
-      <span class="error"><%= message('issue.plan.error.plan_must_be_created_first_for_other') -%></span>
-    <% end %>
-  {{/if}}
-  <a id="issue-plan-cancel" class="action"><%= message('cancel') -%></a>
-</script>
diff --git a/server/sonar-web/src/main/webapp/WEB-INF/app/views/issues/templates/_issue_detail_rule.hbs.erb b/server/sonar-web/src/main/webapp/WEB-INF/app/views/issues/templates/_issue_detail_rule.hbs.erb
deleted file mode 100644 (file)
index cf8b173..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-<script id="issue-detail-rule-template" type="text/x-handlebars-template">
-  <h1 class="marginbottom10">{{name}}</h1>
-  <div class="marginbottom10">{{{description}}}</div>
-  <p class="note">
-    <span class="spacer-right">{{key}}</span>
-    <%= image_tag 'sep12.png', :class => 'spacer-right' -%>
-    {{#all characteristic subCharacteristic}}{{characteristic}} > {{subCharacteristic}}{{else}}<%= message('issue.technical_debt_deleted') -%>{{/all}}
-  </p>
-</script>
diff --git a/server/sonar-web/src/main/webapp/WEB-INF/app/views/issues/templates/_issue_detail_set_severity_form.hbs.erb b/server/sonar-web/src/main/webapp/WEB-INF/app/views/issues/templates/_issue_detail_set_severity_form.hbs.erb
deleted file mode 100644 (file)
index cba491c..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-<script id="issue-detail-set-severity-form-template" type="text/x-handlebars-template">
-  <table class="width100">
-    <tr>
-      <td style="vertical-align:top">
-        <select id="issue-set-severity-select" autofocus>
-          <% Severity::KEYS.each do |severity| %>
-          <option class="sev_<%= severity -%>" value="<%= severity -%>" <%= 'selected' if severity==Severity::MAJOR -%>><%= message("severity.#{severity}") -%></option>
-          <% end %>
-        </select>
-
-        <input id="issue-set-severity-submit" type="submit" value="<%= message('issue.set_severity.submit') -%>">
-        <a id="issue-set-severity-cancel" class="action"><%= message('cancel') -%></a>
-      </td>
-    </tr>
-  </table>
-</script>
diff --git a/server/sonar-web/src/main/webapp/WEB-INF/app/views/issues/templates/_issues.hbs.erb b/server/sonar-web/src/main/webapp/WEB-INF/app/views/issues/templates/_issues.hbs.erb
deleted file mode 100644 (file)
index a4c8b45..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<script id="issues-template" type="text/x-handlebars-template">
-  <ol class="navigator-results-list"></ol>
-  <div class="navigator-results-loader">
-    <i class="spinner"></i>
-  </div>
-</script>
diff --git a/server/sonar-web/src/main/webapp/WEB-INF/app/views/issues/templates/_issues_actions.hbs.erb b/server/sonar-web/src/main/webapp/WEB-INF/app/views/issues/templates/_issues_actions.hbs.erb
deleted file mode 100644 (file)
index b7c75c9..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-<script id="issues-actions-template" type="text/x-handlebars-template">
-  {{#unless maxResultsReached}}
-    <div class="navigator-actions-order">
-      {{#if sorting}}
-        <%= message('issues.ordered_by') -%> <strong class="navigator-actions-ordered-by">{{sorting.sortText}}</strong> {{#if sorting.asc}}<i class="icon-sort-asc"></i>{{else}}<i class="icon-sort-desc"></i>{{/if}}
-      {{else}}
-        Order
-      {{/if}}
-    </div>
-    <ul class="navigator-actions-order-choices">
-      <li data-sort="UPDATE_DATE" data-asc="true"><%= message('issues.sort.update_date') -%> <i class="icon-sort-asc"></i></li>
-      <li data-sort="UPDATE_DATE" data-asc="false"><%= message('issues.sort.update_date') -%> <i class="icon-sort-desc"></i></li>
-      <li data-sort="SEVERITY" data-asc="true"><%= message('issues.sort.severity') -%> <i class="icon-sort-asc"></i></li>
-      <li data-sort="SEVERITY" data-asc="false"><%= message('issues.sort.severity') -%> <i class="icon-sort-desc"></i></li>
-      <li data-sort="STATUS" data-asc="true"><%= message('issues.sort.status') -%> <i class="icon-sort-asc"></i></li>
-      <li data-sort="STATUS" data-asc="false"><%= message('issues.sort.status') -%> <i class="icon-sort-desc"></i></li>
-    </ul>
-  {{/unless}}
-  <div class="navigator-actions-total">
-    <%= message('issues.found') -%>: <strong>{{paging.fTotal}}</strong>
-    {{#notEq paging.fTotal 0}}
-      {{#if appState.canBulkChange}}
-        <a href="<%= url_for params.merge({:action => 'bulk_change_form'}) -%>?{{query}}"
-           class="navigator-actions-bulk"
-           title="<%= message('bulk_change') -%>"><i class="icon-bulk-change"></i></a>
-      {{/if}}
-    {{/notEq}}
-  </div>
-</script>
diff --git a/server/sonar-web/src/main/webapp/WEB-INF/app/views/issues/templates/_issues_details_favorite_filter.hbs.erb b/server/sonar-web/src/main/webapp/WEB-INF/app/views/issues/templates/_issues_details_favorite_filter.hbs.erb
deleted file mode 100644 (file)
index 19019dd..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-<script id="issues-details-favorite-filter-template" type="text/x-handlebars-template">
-  <ul class="navigator-filter-select-list">
-    {{#if items}}
-      {{#each items}}
-        <li>
-          <label data-id="{{id}}">{{{name}}}</label>
-        </li>
-      {{/each}}
-      <li class="line"></li>
-    {{/if}}
-    <li class="manage">
-      <label id="manage-favorites"><%= message('manage') -%></label>
-    </li>
-  </ul>
-</script>
diff --git a/server/sonar-web/src/main/webapp/WEB-INF/app/views/issues/templates/_no_issues.hbs.erb b/server/sonar-web/src/main/webapp/WEB-INF/app/views/issues/templates/_no_issues.hbs.erb
deleted file mode 100644 (file)
index fe95614..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<script id="no-issues-template" type="text/x-handlebars-template">
-  <%= message('issue_filter.no_issues') -%>
-</script>
index f2794919597e9bd6839a8d2a1744a08feb04139d..13fbbdfdbf1a2907747b3c10c4985237c0630a7e 100644 (file)
@@ -48,8 +48,6 @@
 </script>
 
 
-<%= render :partial => '/navigator/filter_templates' -%>
-
 
 <script>
   jQuery('html').addClass('navigator-page measures-page');
diff --git a/server/sonar-web/src/main/webapp/WEB-INF/app/views/navigator/_filter_templates.html.erb b/server/sonar-web/src/main/webapp/WEB-INF/app/views/navigator/_filter_templates.html.erb
deleted file mode 100644 (file)
index de88906..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-<%= render :partial => '/navigator/templates/base_filter_template.hbs' -%>
-<%= render :partial => '/navigator/templates/base_details_filter_template.hbs' -%>
-<%= render :partial => '/navigator/templates/choice_filter_template.hbs' -%>
-<%= render :partial => '/navigator/templates/choice_filter_item_template.hbs' -%>
-<%= render :partial => '/navigator/templates/ajax_select_filter_template.hbs' -%>
-<%= render :partial => '/navigator/templates/range_filter_template.hbs' -%>
-<%= render :partial => '/navigator/templates/checkbox_filter_template.hbs' -%>
-<%= render :partial => '/navigator/templates/string_filter_template.hbs' -%>
-<%= render :partial => '/navigator/templates/metric_filter_template.hbs' -%>
-<%= render :partial => '/navigator/templates/favorite_filter_template.hbs' -%>
-<%= render :partial => '/navigator/templates/favorite_details_filter_template.hbs' -%>
-<%= render :partial => '/navigator/templates/more_criteria_filter_template.hbs' -%>
-<%= render :partial => '/navigator/templates/more_criteria_details_filter_template.hbs' -%>
diff --git a/server/sonar-web/src/main/webapp/WEB-INF/app/views/navigator/templates/_ajax_select_filter_template.hbs.erb b/server/sonar-web/src/main/webapp/WEB-INF/app/views/navigator/templates/_ajax_select_filter_template.hbs.erb
deleted file mode 100644 (file)
index f3b18bb..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<script id="ajax-select-filter-template" type="text/x-handlebars-template">
-  <div class="navigator-filter-search">
-    <input type="text">
-  </div>
-  <ul class="navigator-filter-select-list choices"></ul>
-  <ul class="navigator-filter-select-list opposite"></ul>
-</script>
diff --git a/server/sonar-web/src/main/webapp/WEB-INF/app/views/navigator/templates/_base_details_filter_template.hbs.erb b/server/sonar-web/src/main/webapp/WEB-INF/app/views/navigator/templates/_base_details_filter_template.hbs.erb
deleted file mode 100644 (file)
index 1b9dd5a..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<script id="base-details-filter-template" type="text/x-handlebars-template">
-  <div class="navigator-filter-details-inner"></div>
-</script>
diff --git a/server/sonar-web/src/main/webapp/WEB-INF/app/views/navigator/templates/_base_filter_template.hbs.erb b/server/sonar-web/src/main/webapp/WEB-INF/app/views/navigator/templates/_base_filter_template.hbs.erb
deleted file mode 100644 (file)
index bf2ffba..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<script id="base-filter-template" type="text/x-handlebars-template">
-  <div class="navigator-filter-label">{{name}}</div>
-  <div class="navigator-filter-value {{#if defaultValue}}default{{/if}}">{{value}}</div>
-  {{#if optional}}
-    <div class="navigator-filter-disable">&times;</div>
-  {{/if}}
-</script>
diff --git a/server/sonar-web/src/main/webapp/WEB-INF/app/views/navigator/templates/_checkbox_filter_template.hbs.erb b/server/sonar-web/src/main/webapp/WEB-INF/app/views/navigator/templates/_checkbox_filter_template.hbs.erb
deleted file mode 100644 (file)
index 2671fbb..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<script id="checkbox-filter-template" type="text/x-handlebars-template">
-  <div class="navigator-filter-label">{{name}}</div>
-  {{#if optional}}
-    <div class="navigator-filter-disable">&times;</div>
-  {{/if}}
-</script>
diff --git a/server/sonar-web/src/main/webapp/WEB-INF/app/views/navigator/templates/_choice_filter_item_template.hbs.erb b/server/sonar-web/src/main/webapp/WEB-INF/app/views/navigator/templates/_choice_filter_item_template.hbs.erb
deleted file mode 100644 (file)
index e2a6152..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-<script id="choice-filter-item-template" type="text/x-handlebars-template">
-  <li>
-    <label title="{{text}}" data-id="{{id}}">
-      <i class="icon-checkbox {{#if checked}}icon-checkbox-checked{{/if}} {{#unless multiple}}icon-checkbox-single{{/unless}}"></i>
-      {{#if icon}}<i class="icon-{{icon}}"></i>{{/if}}
-      <span>
-        {{text}}
-        {{#if category}}
-          <br>
-          <span class="subtitle">{{category}}</span>
-        {{/if}}
-      </span>
-    </label>
-  </li>
-</script>
diff --git a/server/sonar-web/src/main/webapp/WEB-INF/app/views/navigator/templates/_choice_filter_template.hbs.erb b/server/sonar-web/src/main/webapp/WEB-INF/app/views/navigator/templates/_choice_filter_template.hbs.erb
deleted file mode 100644 (file)
index dc8b90d..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<script id="choice-filter-template" type="text/x-handlebars-template">
-  <ul class="navigator-filter-select-list choices"></ul>
-  <ul class="navigator-filter-select-list opposite"></ul>
-</script>
diff --git a/server/sonar-web/src/main/webapp/WEB-INF/app/views/navigator/templates/_favorite_details_filter_template.hbs.erb b/server/sonar-web/src/main/webapp/WEB-INF/app/views/navigator/templates/_favorite_details_filter_template.hbs.erb
deleted file mode 100644 (file)
index cdc70e6..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-<script id="favorite-details-filter-template" type="text/x-handlebars-template">
-  <ul class="navigator-filter-select-list">
-    {{#ifNotEmpty choicesArray}}
-      {{#each choicesArray}}
-        <li>
-          <label data-id="{{k}}">{{v}}</label>
-        </li>
-      {{/each}}
-      <li class="line"></li>
-    {{/ifNotEmpty}}
-    <li class="manage">
-      <label id="manage-favorites">{{translate "manage" }}</label>
-    </li>
-  </ul>
-</script>
diff --git a/server/sonar-web/src/main/webapp/WEB-INF/app/views/navigator/templates/_favorite_filter_template.hbs.erb b/server/sonar-web/src/main/webapp/WEB-INF/app/views/navigator/templates/_favorite_filter_template.hbs.erb
deleted file mode 100644 (file)
index 8848d04..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<script id="favorite-filter-template" type="text/x-handlebars-template">
-  <div class="navigator-filter-favorite-toggle" title="{{translate 'filtersList' }}"></div>
-</script>
diff --git a/server/sonar-web/src/main/webapp/WEB-INF/app/views/navigator/templates/_metric_filter_template.hbs.erb b/server/sonar-web/src/main/webapp/WEB-INF/app/views/navigator/templates/_metric_filter_template.hbs.erb
deleted file mode 100644 (file)
index 414e81d..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-<script id="metric-filter-template" type="text/x-handlebars-template">
-  <div class="navigator-filter-details-inner">
-    <select name="metric">
-      <option></option>
-      {{#each groupedMetrics}}
-        <optgroup label="{{domain}}">
-          {{#each metrics}}
-            <option value="{{name}}">{{short_name}}</option>
-          {{/each}}
-        </optgroup>
-      {{/each}}
-    </select>
-
-    <select name="period">
-      <option value="0">{{translate "value"}}</option>
-      {{#each periods}}
-        <option value="{{@key}}">{{this}}</option>
-      {{/each}}
-    </select>
-
-    <select name="op">
-      {{#each operations}}
-        <option value="{{@key}}">{{this}}</option>
-      {{/each}}
-    </select>
-
-    <input type="text" name="val">
-  </div>
-</script>
diff --git a/server/sonar-web/src/main/webapp/WEB-INF/app/views/navigator/templates/_more_criteria_details_filter_template.hbs.erb b/server/sonar-web/src/main/webapp/WEB-INF/app/views/navigator/templates/_more_criteria_details_filter_template.hbs.erb
deleted file mode 100644 (file)
index 2817d01..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-<script id="more-criteria-details-filter-template" type="text/x-handlebars-template">
-  <ul class="navigator-filter-select-list">
-    {{#each filters}}
-      <li>
-        <label data-id="{{id}}" {{#if inactive}}class="inactive"{{/if}} {{#if title}}title="{{title}}"{{/if}}>
-          {{name}}
-        </label>
-      </li>
-    {{/each}}
-  </ul>
-</script>
diff --git a/server/sonar-web/src/main/webapp/WEB-INF/app/views/navigator/templates/_more_criteria_filter_template.hbs.erb b/server/sonar-web/src/main/webapp/WEB-INF/app/views/navigator/templates/_more_criteria_filter_template.hbs.erb
deleted file mode 100644 (file)
index c1159ab..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<script id="more-criteria-filter-template" type="text/x-handlebars-template">
-  {{t "moreCriteria"}}
-</script>
diff --git a/server/sonar-web/src/main/webapp/WEB-INF/app/views/navigator/templates/_range_filter_template.hbs.erb b/server/sonar-web/src/main/webapp/WEB-INF/app/views/navigator/templates/_range_filter_template.hbs.erb
deleted file mode 100644 (file)
index 0b9992d..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<script id="range-filter-template" type="text/x-handlebars-template">
-  <div class="navigator-filter-details-inner">
-    <input class="navigator-filter-range-input" type="text" name="{{propertyFrom}}" placeholder="{{placeholder}}">
-    <label>{{translate "to"}}</label>
-    <input class="navigator-filter-range-input" type="text" name="{{propertyTo}}" placeholder="{{placeholder}}">
-  </div>
-</script>
diff --git a/server/sonar-web/src/main/webapp/WEB-INF/app/views/navigator/templates/_string_filter_template.hbs.erb b/server/sonar-web/src/main/webapp/WEB-INF/app/views/navigator/templates/_string_filter_template.hbs.erb
deleted file mode 100644 (file)
index 62693a4..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<script id="string-filter-template" type="text/x-handlebars-template">
-  <div class="navigator-filter-details-inner">
-    <input type="text" name="{{property}}" value="{{value}}">
-  </div>
-</script>