]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-5209 More actions
authorStas Vilchik <vilchiks@gmail.com>
Thu, 26 Jun 2014 05:28:42 +0000 (11:28 +0600)
committerStas Vilchik <vilchiks@gmail.com>
Thu, 26 Jun 2014 05:28:42 +0000 (11:28 +0600)
sonar-core/src/main/resources/org/sonar/l10n/core.properties
sonar-server/src/main/coffee/component-viewer/extensions-popup.coffee [deleted file]
sonar-server/src/main/coffee/component-viewer/header.coffee
sonar-server/src/main/coffee/component-viewer/header/more-actions.coffee [new file with mode: 0644]
sonar-server/src/main/coffee/component-viewer/main.coffee
sonar-server/src/main/hbs/component-viewer/extensions-popup.hbs [deleted file]
sonar-server/src/main/hbs/component-viewer/header.hbs
sonar-server/src/main/hbs/component-viewer/more-actions.hbs [new file with mode: 0644]
sonar-server/src/main/less/component-viewer.less
sonar-server/src/main/webapp/WEB-INF/app/views/resource/_extension.html.erb

index 84ba7aa9a50cc3eee237caf0c2b6c6b02ae8da76..d3a8c178e7416f0b64e6210468812297d0bb63b7 100644 (file)
@@ -2660,6 +2660,9 @@ component_viewer.time_changes=Time Changes
 component_viewer.added=Added
 component_viewer.extensions=Extensions
 component_viewer.show_full_source=Show full source
+component_viewer.show_raw_source=Show raw source
+component_viewer.more_actions=More actions
+component_viewer.new_window=Open in new window
 
 component_viewer.workspace=Workspace
 component_viewer.workspace.tooltip=Keeps track of history of navigation
diff --git a/sonar-server/src/main/coffee/component-viewer/extensions-popup.coffee b/sonar-server/src/main/coffee/component-viewer/extensions-popup.coffee
deleted file mode 100644 (file)
index 0170110..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-define [
-  'backbone.marionette'
-  'templates/component-viewer'
-  'component-viewer/popup'
-], (
-  Marionette
-  Templates
-  Popup
-) ->
-
-  $ = jQuery
-
-
-  class extends Popup
-    template: Templates['extensions-popup']
-
-
-    events:
-      'click .js-extension': 'showExtension'
-
-
-    showExtension: (e) ->
-      e.preventDefault()
-      key = $(e.currentTarget).data 'key'
-      @trigger 'extension', key
-
-
-    serializeData: ->
-      _.extend super,
-        extensions: @options.main.state.get 'extensions'
index 7e6481e1ff9ffc207418bf3183d17ae4d2040983..5ded3d82d61bc39150f5a8a65ff6bd75c278ae7d 100644 (file)
@@ -8,7 +8,7 @@ define [
   'component-viewer/header/duplications-header'
   'component-viewer/header/scm-header'
   'component-viewer/header/tests-header'
-  'component-viewer/extensions-popup'
+  'component-viewer/header/more-actions'
 
   'common/handlebars-extensions'
 ], (
@@ -21,7 +21,7 @@ define [
   DuplicationsHeaderView
   SCMHeaderView
   TestsHeaderView
-  ExtensionsPopup
+  MoreActionsView
 ) ->
 
   $ = jQuery
@@ -55,7 +55,7 @@ define [
 
     events:
       'click .js-favorite': 'toggleFavorite'
-      'click .js-extensions': 'showExtensionsPopup'
+      'click .js-actions': 'showMoreActions'
       'click .js-extension-close': 'closeExtension'
       'click .js-permalink': 'getPermalink'
       'click @ui.expandLinks': 'showExpandedBar'
@@ -102,15 +102,11 @@ define [
           @render()
 
 
-    showExtensionsPopup: (e) ->
+    showMoreActions: (e) ->
       e.stopPropagation()
       $('body').click()
-      popup = new ExtensionsPopup
-        triggerEl: $(e.currentTarget)
-        main: @options.main
-        bottomRight: true
-      popup.render()
-      popup.on 'extension', (key) => @showExtension key
+      view = new MoreActionsView main: @options.main
+      view.render().$el.appendTo @$el
 
 
     showExtension: (key) ->
diff --git a/sonar-server/src/main/coffee/component-viewer/header/more-actions.coffee b/sonar-server/src/main/coffee/component-viewer/header/more-actions.coffee
new file mode 100644 (file)
index 0000000..a35e54f
--- /dev/null
@@ -0,0 +1,48 @@
+define [
+  'backbone.marionette'
+  'templates/component-viewer'
+], (
+  Marionette
+  Templates
+) ->
+
+  $ = jQuery
+
+
+  class extends Marionette.ItemView
+    className: 'component-viewer-header-more-actions'
+    template: Templates['more-actions']
+
+
+    events:
+      'click .js-new-window': 'openNewWindow'
+      'click .js-full-source': 'showFullSource'
+      'click .js-raw-source': 'showRawSource'
+      'click .js-extension': 'showExtension'
+
+
+    onRender: ->
+      $('body').on 'click.component-viewer-more-actions', =>
+        $('body').off 'click.component-viewer-more-actions'
+        @close()
+
+
+    openNewWindow: ->
+      @options.main.headerView.getPermalink()
+
+
+    showFullSource: ->
+      @options.main.showAllLines()
+
+
+    showRawSource: ->
+      @options.main.showRawSources()
+
+    showExtension: (e) ->
+      key = $(e.currentTarget).data 'key'
+      @options.main.headerView.showExtension key
+
+
+    serializeData: ->
+      _.extend super,
+        state: @options.main.state.toJSON()
\ No newline at end of file
index 4008a17489167293b32b1bd44c872afaf7fe9eed..c513e2dd71d53038e131df270a5da8895ceb6c93 100644 (file)
@@ -42,6 +42,7 @@ define [
 
   API_COMPONENT = "#{baseUrl}/api/components/app"
   API_SOURCES = "#{baseUrl}/api/sources/show"
+  API_RAW_SOURCES = "#{baseUrl}/api/sources"
   API_MEASURES = "#{baseUrl}/api/resources"
   API_TESTS = "#{baseUrl}/api/tests/show"
 
@@ -277,6 +278,12 @@ define [
       @sourceView.render()
 
 
+    showRawSources: ->
+      key = encodeURIComponent @component.get 'key'
+      url = "#{API_RAW_SOURCES}?resource=#{key}&format=txt"
+      location.href = url
+
+
     enablePeriod: (periodKey, activeHeaderItem) ->
       period = if periodKey == '' then null else @periods.findWhere key: periodKey
       @state.set 'period', period
diff --git a/sonar-server/src/main/hbs/component-viewer/extensions-popup.hbs b/sonar-server/src/main/hbs/component-viewer/extensions-popup.hbs
deleted file mode 100644 (file)
index e7ebf3b..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-<div class="component-viewer-popup-container">
-  <div class="component-viewer-popup-title">{{t 'component_viewer.extensions'}}</div>
-
-  <div class="component-viewer-popup-section fluid">
-    {{#each extensions}}
-      <a href="#" class="js-extension link-action" data-key="{{this.[0]}}">{{this.[1]}}</a>
-    {{/each}}
-  </div>
-</div>
-
-<div class="component-viewer-popup-arrow"></div>
\ No newline at end of file
index bb4383e366e684568806071a2792ef22647b11ff..3cb0753ce3c9b1b8b5ad0ad5b8fc146e45ec9ea0 100644 (file)
         {{/if}}
       </div>
     {{else}}
-    <div class="component-viewer-header-component-project removed">{{t 'issue.component_deleted'}}</div>
+      <div class="component-viewer-header-component-project removed">{{t 'issue.component_deleted'}}</div>
     {{/unless}}
   </div>
 
   {{#unless state.removed}}
-    <div class="component-viewer-header-links">
-      <a class="js-permalink" title="{{t 'new_window'}}"><i class="icon-detach"></i></a>
-      {{#ifNotEmpty state.extensions}}
-        <a class="js-extensions">
-          <i class="icon-extension"></i>
-          <i class="icon-dropdown"></i>
-        </a>
-      {{/ifNotEmpty}}
-    </div>
+    <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}}
diff --git a/sonar-server/src/main/hbs/component-viewer/more-actions.hbs b/sonar-server/src/main/hbs/component-viewer/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
index 115e5442e0a79c0918a63bbbfa3d15ac6e1ea5f2..20b57ddb7b0b1617a330abf9b77ab5e7c1e53772 100644 (file)
 
 
 .component-viewer-header {
+  position: relative;
   margin-bottom: 10px;
 }
 
   margin-top: 1px;
 }
 
-.component-viewer-header-links {
+.component-viewer-header-actions {
   float: right;
-  .component-viewer-header-two-lines-mixin;
+  display: block;
+  padding: 20px 10px;
+  font-size: @iconFontSize;
+}
 
-  & > a { display: block; }
+.component-viewer-header-more-actions {
+  position: absolute;
+  z-index: 100;
+  right: 0; top: 60px;
+  padding: 10px;
+  border: 1px solid @barBorderColor;
+  background-color: @white;
+  line-height: 1.8;
 }
 
 .component-viewer-header-expanded-bar {
index ccad5e6fd9ced546cd16b5cc3e09e05c61f47bfb..a19fdb490807007161f1b03bf6bad058745c3b5a 100644 (file)
@@ -1,3 +1,5 @@
 <div>
   <%= render :inline => @extension.getTarget().getTemplate() -%>
 </div>
+
+<a class="js-extension-close extension-close link-action"><%= message('close') -%></a>