%body
!= render :haml, :'index/_css_and_js', :layout => false
.container
!= render :haml, :'index/_dashboard_navbar', :layout => false, locals: {tag_toggle: nil, base_url: base_url}
%div.mt-4
.row
.col
.row.my-0
.col.my-0{ style: "text-transform: uppercase; font-size: 70%"}
Consumer
.row.my-0
.col.my-0
%h2.page-header{ style: "margin-top: 0" }
= consumer_name
.col
.row
.col.my-0{ style: "text-transform: uppercase; font-size: 70%"}
Provider
.row.my-0
.col.my-0
%h2.page-header{ style: "margin-top: 0" }
= provider_name
- errors.each do | error |
%div.alert.alert-danger
= error
- if consumer && provider
%form
%div.mt-4.mb-2
%label.mr-2
View pacts by:
%div.form-check.form-check-inline
%input.form-check-input{ type: "radio", name: "view", id: "by_branch", value: "branch", checked: view == "branch" }
%label.form-check-label{ for:"by_branch"} branches
%div.form-check.form-check-inline
%input.form-check-input{ type: "radio", name: "view", id: "by_tag", value: "tag", checked: view == "tag"}
%label.form-check-label{ for:"by_tag"} tags
%div.form-check.form-check-inline
%input.form-check-input{ type: "radio", name: "view", id: "by_environment", value: "environment", checked: view == "environment"}
%label.form-check-label{ for:"by_environment"} environments
%div.form-check.form-check-inline
%input.form-check-input{ type: "radio", name: "view", id: "by_all", value: "all", checked: view == "all"}
%label.form-check-label{ for:"by_all"} no filter
%input{ type: "hidden", name: "page", value: page_number }
%input{ type: "hidden", name: "pageSize", value: page_size }
%table.table.table-bordered.table-striped{ id: 'relationships' }
%thead
%tr
%th.consumer-version-number
Consumer
Version
%span.sort-icon.relationships-sort
%th.provider-version-number
Provider
Version
%span.sort-icon.relationships-sort
%th.pact{ style: 'width: 40px' }
%th
Published
%span.sort-icon.relationships-sort
%th
Webhook
status
%th
Last
verified
%span.sort-icon.relationships-sort
%th
%tbody
- index_items.each do | index_item |
%tr{'data-pact-versions-url': index_item.pact_versions_url,
'data-consumer-name': index_item.consumer_name,
'data-provider-name': index_item.provider_name,
'data-integration-url': index_item.integration_url,
'data-pact-tags': index_item.pact_tags,
'data-pact-branches': index_item.pact_branches,
'data-view': view
}
%td.consumer-version-number{"data-text": index_item.consumer_version_order}
%div.clippable{"data-clippable": index_item.consumer_version_number}
= index_item.display_consumer_version_number
- if index_item.display_consumer_version_number
%button.clippy.invisible{ title: "Copy to clipboard" }
%span.copy-icon
- if view == "branch" || view == "all"
- index_item.consumer_version_branch_heads.each do | branch_head |
%div.clippable{"data-clippable": branch_head.branch_name}
%div{"class": "tag badge badge-dark", "title": branch_head.tooltip, "data-toggle": "tooltip", "data-placement": "right"}
= "branch: " + ellipsisize(branch_head.branch_name)
%button.clippy.invisible{ title: "Copy to clipboard" }
%span.copy-icon
- if view == "tag" || view == "all"
- index_item.consumer_version_latest_tag_names.each do | tag_name |
%div.clippable{"data-clippable": tag_name}
.tag.badge.badge-primary
= "tag: " + ellipsisize(tag_name)
%button.clippy.invisible{ title: "Copy to clipboard" }
%span.copy-icon
- if view == "environment" || view == "all"
- index_item.consumer_version_environment_names.each do | environment_name |
%div.clippable{"data-clippable": environment_name}
.tag.badge.badge-success
= "env: " + ellipsisize(environment_name)
%button.clippy.invisible{ title: "Copy to clipboard" }
%span.copy-icon
- if view == "all" && index_item.display_latest_label? && index_item.latest?
.tag.badge.bg-light
latest
%td.provider-version-number
%div.clippable{"data-clippable": index_item.provider_version_number}
= index_item.display_provider_version_number
- if index_item.display_provider_version_number
%button.clippy.invisible{ title: "Copy to clipboard" }
%span.copy-icon
- if view == "branch" || view == "all"
- index_item.provider_version_branch_heads.each do | branch_head |
%div.clippable{"data-clippable": branch_head.branch_name}
%div{"class": "tag badge badge-dark", "title": branch_head.tooltip, "data-toggle": "tooltip", "data-placement": "right"}
= "branch: " + ellipsisize(branch_head.branch_name)
%button.clippy.invisible{ title: "Copy to clipboard" }
%span.copy-icon
- if view == "tag" || view == "all"
- index_item.provider_version_latest_tag_names.each do | tag_name |
%div.clippable{"data-clippable": tag_name}
.tag.badge.badge-primary
= "tag: " + ellipsisize(tag_name)
%button.clippy.invisible{ title: "Copy to clipboard" }
%span.copy-icon
- if view == "environment" || view == "all"
- index_item.provider_version_environment_names.each do | environment_name |
%div.clippable{"data-clippable": environment_name}
.tag.badge.badge-success
= "env: " + ellipsisize(environment_name)
%button.clippy.invisible{ title: "Copy to clipboard" }
%span.copy-icon
%td.pact
%span.pact
%a{ href: index_item.pact_url, title: "View pact" }
%span.pact-matrix
%a{ href: index_item.pact_matrix_url, title: "View pact matrix" }
%td{"data-text": index_item.publication_date_of_latest_pact_order}
= index_item.publication_date_of_latest_pact.gsub("about ", "")
%td{ class: "table-#{index_item.webhook_status}" }
- if index_item.show_webhook_status?
%a{ href: index_item.webhook_url }
= index_item.webhook_label
%td{ class: "table-#{index_item.pseudo_branch_verification_status}", title: index_item.verification_tooltip, "data-toggle": "tooltip", "data-placement": "left" }
%div
= index_item.last_verified_date.gsub("about ", "")
- if index_item.warning?
%span.warning-icon{ 'aria-hidden': true }
- if index_item.failed_and_pact_pending?
%div
(pact pending)
%td
- if index_item.show_menu?
%span.integration-settings.kebab-horizontal{ 'aria-hidden': true }
%div.pagination.text-center
- pagination_locals = { page_number: page_number, page_size: page_size, pagination_record_count: pagination_record_count, current_page_size: current_page_size }
!= render :haml, :'index/_pagination', :layout => false, locals: pagination_locals
:javascript
$(function(){
$("#relationships").tablesorter();
});
$(document).ready(function(){
initializeClipper(".clippable");
$("span.pact a").load("#{base_url}/images/doc-text.svg");
$("span.pact-matrix a").load("#{base_url}/images/doc-matrix.svg");
$('td[data-toggle="tooltip"]').each(function(index, td){
//appended tooltip div screws up table if it's appended after a
//td, so need to append it to a div
$(td).tooltip({ container: $(td).first() });
});
// https://www.w3schools.com/bootstrap/bootstrap_ref_js_tooltip.asp
$('div[data-toggle="tooltip"]').each(function(index, div){
$(div).tooltip()
});
});
$(".reset-search").on("click", function() {
const url = new URL(window.location)
url.searchParams.delete('search')
window.location = url.toString();
})
$(".submit-search").on("click", function() {
search = $("#search").val();
const url = new URL(window.location)
url.searchParams.set('search', search)
window.location = url.toString();
})
$(".search").keypress(function(event) {
const enterKeyCode = 13;
const key = event.which;
if (key === enterKeyCode) {
event.preventDefault();
search = $("#search").val();
const url = new URL(window.location)
url.searchParams.set('search', search)
window.location = url.toString();
}
})
$("[name*='view']").change(function(event){
$("[name='page']").attr('disabled','disabled');
$(this.form).submit()
})