- @no_container = true - page_title "Cycle Analytics" - content_for :page_specific_javascripts do = page_specific_javascript_bundle_tag('common_vue') = page_specific_javascript_bundle_tag('locale') = page_specific_javascript_bundle_tag('cycle_analytics') = render "projects/head" #cycle-analytics{ class: container_class, "v-cloak" => "true", data: { request_path: project_cycle_analytics_path(@project) } } - if @cycle_analytics_no_data .bordered-box.landing.content-block{ "v-if" => "!isOverviewDialogDismissed" } = icon("times", class: "dismiss-icon", "@click" => "dismissOverviewDialog()") .row .col-sm-3.col-xs-12.svg-container = custom_icon('icon_cycle_analytics_splash') .col-sm-8.col-xs-12.inner-content %h4 {{ 'Introducing Cycle Analytics' | translate }} %p {{ 'Cycle Analytics gives an overview of how much time it takes to go from idea to production in your project.' | translate }} = link_to help_page_path('user/project/cycle_analytics'), target: '_blank', class: 'btn' do {{ 'Read more' | translate }} = icon("spinner spin", "v-show" => "isLoading") .wrapper{ "v-show" => "!isLoading && !hasError" } .panel.panel-default .panel-heading Pipeline Health .content-block .container-fluid .row .col-sm-3.col-xs-12.column{ "v-for" => "item in state.summary" } %h3.header {{ item.value }} %p.text {{ item.title }} .col-sm-3.col-xs-12.column .dropdown.inline.js-ca-dropdown %button.dropdown-menu-toggle{ "data-toggle" => "dropdown", :type => "button" } %span.dropdown-label {{ 'Last 30 days' | translate }} %i.fa.fa-chevron-down %ul.dropdown-menu.dropdown-menu-align-right %li %a{ "href" => "#", "data-value" => "30" } {{ 'Last 30 days' | translate }} %li %a{ "href" => "#", "data-value" => "90" } {{ 'Last 30 days' | translate }} .stage-panel-container .panel.panel-default.stage-panel .panel-heading %nav.col-headers %ul %li.stage-header %span.stage-name {{ 'Stage' | translate }} %i.has-tooltip.fa.fa-question-circle{ "data-placement" => "top", title: "The phase of the development lifecycle.", "aria-hidden" => "true" } %li.median-header %span.stage-name {{ 'Median' | translate }} %i.has-tooltip.fa.fa-question-circle{ "data-placement" => "top", title: "The value lying at the midpoint of a series of observed values. E.g., between 3, 5, 9, the median is 5. Between 3, 5, 7, 8, the median is (5+7)/2 = 6.", "aria-hidden" => "true" } %li.event-header %span.stage-name {{ currentStage ? currentStage.legend : 'Related Issues' | translate }} %i.has-tooltip.fa.fa-question-circle{ "data-placement" => "top", title: "The collection of events added to the data gathered for that stage.", "aria-hidden" => "true" } %li.total-time-header %span.stage-name {{ 'Total Time' | translate }} %i.has-tooltip.fa.fa-question-circle{ "data-placement" => "top", title: "The time taken by each data entry gathered by that stage.", "aria-hidden" => "true" } .stage-panel-body %nav.stage-nav %ul %li.stage-nav-item{ ':class' => '{ active: stage.active }', '@click' => 'selectStage(stage)', "v-for" => "stage in state.stages" } .stage-nav-item-cell.stage-name {{ stage.title }} .stage-nav-item-cell.stage-median %template{ "v-if" => "stage.isUserAllowed" } %span{ "v-if" => "stage.value" } {{ stage.value }} %span.stage-empty{ "v-else" => true } {{ 'Not enough data' | translate }} %template{ "v-else" => true } %span.not-available {{ 'Not available' | translate }} .section.stage-events %template{ "v-if" => "isLoadingStage" } = icon("spinner spin") %template{ "v-if" => "currentStage && !currentStage.isUserAllowed" } = render partial: "no_access" %template{ "v-else" => true } %template{ "v-if" => "isEmptyStage && !isLoadingStage" } = render partial: "empty_stage" %template{ "v-if" => "state.events.length && !isLoadingStage && !isEmptyStage" } %component{ ":is" => "currentStage.component", ":stage" => "currentStage", ":items" => "state.events" }