# Construct layout
App.addInitializer ->
@layout = new ApiDocumentationLayout app: App
- jQuery('#body').append @layout.render().el
+ jQuery('#api-documentation').append @layout.render().el
+ jQuery('#footer').addClass 'search-navigator-footer'
# Construct sidebar
App.addInitializer ->
'templates/api-documentation'
], ->
- class AppLayout extends Marionette.Layout
- className: 'navigator api-documentation-navigator'
+ $ = jQuery
+
+ class extends Marionette.Layout
template: Templates['api-documentation-layout']
+
regions:
- resultsRegion: '.navigator-results'
- detailsRegion: '.navigator-details'
+ resultsRegion: '.api-documentation-results'
+ detailsRegion: '.search-navigator-workspace'
+
events:
'change #api-documentation-show-internals': 'toggleInternals'
- toggleInternals: (event) ->
- @app.webServices.toggleInternals()
initialize: (app) ->
@app = app.app
@listenTo(@app.webServices, 'sync', @app.refresh)
+
+
+ onRender: ->
+ $('.search-navigator').addClass 'sticky'
+ top = $('.search-navigator').offset().top
+ @$('.search-navigator-side').css({ top: top }).isolatedScroll()
+
+
+ toggleInternals: (event) ->
+ @app.webServices.toggleInternals()
) ->
class ApiDocumentationActionView extends Marionette.ItemView
- tagName: 'div'
className: 'api-documentation-action'
template: Templates['api-documentation-action']
spinner: '<i class="spinner"></i>'
ApiDocumentationActionView
) ->
- class ApiDocumentationActionsListView extends Marionette.CompositeView
- tagName: 'div'
+ $ = jQuery
+
+ class extends Marionette.CompositeView
className: 'api-documentation-actions'
template: Templates['api-documentation-actions']
itemView: ApiDocumentationActionView
- itemViewContainer: '.api-documentation-actions-list'
+ itemViewContainer: '.search-navigator-workspace-list'
+
+ onRender: ->
+ top = $('.search-navigator').offset().top
+ @$('.search-navigator-workspace-header').css top: top
ApiDocumentationWebServiceView
) ->
- class ApiDocumentationListView extends Marionette.CollectionView
- tagName: 'ol'
- className: 'navigator-results-list'
+ class extends Marionette.CollectionView
+ className: 'list-group'
itemView: ApiDocumentationWebServiceView
+
itemViewOptions: (model) ->
app: @options.app
highlighted: model.get('path') == @highlighted
ApiDocumentationActionsListView
) ->
- class ApiDocumentationWebServiceView extends Marionette.ItemView
- tagName: 'li'
+ class extends Marionette.ItemView
+ tagName: 'a'
+ className: 'list-group-item'
template: Templates['api-documentation-web-service']
- spinner: '<i class="spinner"></i>'
+
modelEvents:
'change': 'render'
], ->
class QualityGateSidebarListItemView extends Marionette.ItemView
- className: 'facet search-navigator-facet'
+ tagName: 'a'
+ className: 'list-group-item'
template: Templates['quality-gate-sidebar-list-item']
) ->
class QualityGateSidebarListView extends Marionette.CollectionView
- className: 'search-navigator-facet-list'
+ className: 'list-group'
itemView: QualityGateSidebarListItemView
emptyView: QualityGateSidebarListEmptyView
-<div class="navigator-header">
- <h1 class="navigator-header-title">{{path}}</h1>
+<div class="search-navigator-workspace-header">
+ <h2 class="search-navigator-header-component">{{path}}</h2>
</div>
-<p>{{description}}</p>
-<div class="api-documentation-actions-list"></div>
\ No newline at end of file
+
+<div class="search-navigator-workspace-list"></div>
-<div class="navigator-content">
- <div class="navigator-side">
- <div class="navigator-actions">
- <h1 class="navigator-header-title">API Documentation</h1>
- </div>
- <div class="api-documentation-show-internals subtitle">
- <label for="api-documentation-show-internals">Show internal services</label>
- <input type="checkbox" id="api-documentation-show-internals"/>
- </div>
- <div class="navigator-results api-documentation-nav"></div>
+<div class="search-navigator-side search-navigator-side-light">
+ <div class="search-navigator-filters">
+ <h1 class="page-title">API Documentation</h1>
</div>
- <div class="navigator-main">
- <!--div class="navigator-header"></div-->
- <div class="navigator-details"></div>
- </div>
-</div>
\ No newline at end of file
+ <div class="api-documentation-results panel"></div>
+</div>
+
+<div class="search-navigator-workspace"></div>
-<div class="line line-small">
- <h1>{{path}}</h1>
- <span class="subtitle">{{{description}}}</span>
- {{#if internal}}<span class="subtitle internal">internal</span>{{/if}}
-</div>
+<h3 class="list-group-item-heading">{{path}}</h3>
+<p class="list-group-item-text">{{{description}}}</p>
+{{#if internal}}
+ <p class="note">internal</p>
+{{/if}}
-<span class="facet-name">
- {{name}}
-</span>
-
+{{name}}
{{#if default}}
- <span class="facet-stat">{{t 'default'}}</span>
+ <small class="note">{{t 'default'}}</small>
{{/if}}
-<div class="search-navigator-side quality-gates-side">
+<div class="search-navigator-side search-navigator-side-light">
<div class="search-navigator-filters"></div>
- <div class="quality-gates-results"></div>
+ <div class="quality-gates-results panel"></div>
</div>
<div class="search-navigator-workspace">
@import "components/login";
@import "components/graphics";
@import "components/bubble-popup";
+@import "components/list-groups";
+@import "components/panels";
--- /dev/null
+@import (reference) "../variables";
+@import (reference) "../mixins";
+
+.list-group {
+ margin-bottom: 20px;
+ padding-left: 0;
+}
+
+.list-group-item {
+ position: relative;
+ display: block;
+ margin-bottom: -1px;
+ padding: 5px 10px;
+ border: 1px solid transparent;
+
+ &:last-child {
+ margin-bottom: 0;
+ }
+
+ &.active,
+ &.active:hover,
+ &.active:focus {
+ z-index: 2;
+ border-color: @blue !important;
+ background-color: @lightBlue;
+ }
+}
+
+.list-group-item + .list-group-item {
+ border-top-color: @barBorderColor;
+}
+
+a.list-group-item {
+ color: @baseFontColor;
+}
+
+.list-group-item-heading {
+ margin-top: 0;
+ margin-bottom: 5px;
+}
+
+.list-group-item-text {
+ margin-bottom: 0;
+ line-height: 1.3;
+}
--- /dev/null
+@import (reference) "../variables";
+@import (reference) "../mixins";
+
+.panel {
+ padding: 10px;
+}
overflow-x: hidden;
}
+.search-navigator-side-light {
+ background-color: @barBackgroundColor;
+}
+
.search-navigator-facet-box {
background-color: @barBackgroundColor;
font-size: @baseFontSize;
@apiDocumentationSidebarWidth: 230px;
-.api-documentation-navigator {
-
- .navigator-side {
- display: table-cell;
- vertical-align: top;
- width: @apiDocumentationSidebarWidth + 2 * @navigatorPadding;
- min-width: 0;
- }
-
- .navigator-header {
- margin-left: 0;
- .spinner { margin-top: 9px; }
- }
-
- .navigator-actions {
- height: @navigatorHeaderHeight;
- width: @apiDocumentationSidebarWidth;
- margin: @navigatorPadding;
- padding: 0 @navigatorPadding;
-
- .navigator-header-title {
- color: @baseFontColor;
- font-size: 13px;
- font-weight: bold;
- text-transform: uppercase;
- }
- }
-
- .api-documentation-show-internals {
- margin: @navigatorPadding;
- padding: 0 @navigatorPadding;
- }
-
- .navigator-results {
- width: @apiDocumentationSidebarWidth;
- min-width: 0;
- }
-
- .navigator-details { margin-left: 0; }
-
- .internal {
- color: @navigatorBarBackground;
- background-color: rgb(127, 127, 127);
- border-radius: 2px;
- padding: 1px 5px;
- }
+.api-documentation-show-internals {
+ margin: @navigatorPadding;
+ padding: 0 @navigatorPadding;
}
-
-.api-documentation-nav {
-
- .navigator-results-list {
-
- & > li {
- border-color: transparent;
-
- &:hover:not(.active):not(.empty) {
- background-color: @navigatorBarBackground;
- }
-
- &.active {
- border-color: #4B9FD5;
- }
-
- &.empty {
- cursor: default;
- }
-
- .line {
- padding-top: 2px;
- padding-bottom: 2px;
- }
- }
- }
+.internal {
+ color: @navigatorBarBackground;
+ background-color: rgb(127, 127, 127);
+ border-radius: 2px;
+ padding: 1px 5px;
}
.api-documentation-actions {
- margin-top: 10px;
- margin-left: 5px;
ol {
li {
}
}
- .example-response {
- text-decoration: underline;
- }
-
.example-response-content {
margin: 10px 0;
padding: 5px;
background-color: @barBackgroundColor;
}
-.quality-gates-results {
- padding: 5px 0;
-}
-
@qualityGateSidebarWidth: 230px;
.quality-gates-navigator {
<script>require(['api-documentation/app']);</script>
<% end %>
-<div id="api-documentation-page-loader" class="navigator-page-loader">
- <i class="spinner"></i>
-</div>
+<div id="api-documentation" class="search-navigator"></div>