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
+++ /dev/null
-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'
'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'
], (
DuplicationsHeaderView
SCMHeaderView
TestsHeaderView
- ExtensionsPopup
+ MoreActionsView
) ->
$ = jQuery
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'
@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) ->
--- /dev/null
+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
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"
@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
+++ /dev/null
-<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
{{/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}}
--- /dev/null
+<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
.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 {
<div>
<%= render :inline => @extension.getTarget().getTemplate() -%>
</div>
+
+<a class="js-extension-close extension-close link-action"><%= message('close') -%></a>