diff --git a/modules/localgov_services_landing/config/install/core.entity_form_display.node.localgov_services_landing.default.yml b/modules/localgov_services_landing/config/install/core.entity_form_display.node.localgov_services_landing.default.yml index 976d0d0..b155c45 100644 --- a/modules/localgov_services_landing/config/install/core.entity_form_display.node.localgov_services_landing.default.yml +++ b/modules/localgov_services_landing/config/install/core.entity_form_display.node.localgov_services_landing.default.yml @@ -30,7 +30,7 @@ third_party_settings: children: - title - body - label: Description + label: Content region: content parent_name: group_tabs weight: 1 diff --git a/modules/localgov_services_navigation/css/children.css b/modules/localgov_services_navigation/css/children.css index 56b5070..46995bb 100644 --- a/modules/localgov_services_navigation/css/children.css +++ b/modules/localgov_services_navigation/css/children.css @@ -4,13 +4,13 @@ */ div.localgov-services-children-list.item-list { - max-height: 20vh; - overflow-y: scroll; position: sticky; - top: 0; z-index: 100; - background-color: #dde; + top: 0; + overflow-y: scroll; + max-height: 20vh; padding: 0.5em; + background-color: #dde; } .localgov-services-children-list h3 { @@ -19,27 +19,27 @@ div.localgov-services-children-list.item-list { .localgov-services-children-list.item-list ul, .localgov-services-children-list.item-list ul li { - list-style-type: none; margin: 0; + list-style-type: none; } .localgov-services-children-list.item-list ul li { display: inline-block; - vertical-align: top; margin: 0.1em; + vertical-align: top; } div.localgov-child-drag { + position: relative; + top: 0; min-height: 5em; border: solid 1px black; background-color: #eef; - position: relative; - top: 0; } div.localgov-child-drag.draggable { - cursor: move; padding: 0 0.5em 0.2em 0.5em; + cursor: move; } .localgov-child-title { @@ -50,9 +50,9 @@ div.localgov-child-drag.draggable { .localgov-child-type { display: block; - font-weight: lighter; font-size: 0.8em; - font-style: italic; + font-weight: lighter; + font-style: italic; } .localgov-child-topics { @@ -62,10 +62,8 @@ div.localgov-child-drag.draggable { .localgov-child-info { display: block; - font-weight: lighter; - font-size: 0.8em; + text-align: right; color: #666; - text-align: right; - + font-size: 0.8em; + font-weight: lighter; } - diff --git a/modules/localgov_services_navigation/js/children.js b/modules/localgov_services_navigation/js/children.js index dd545e8..d21697c 100644 --- a/modules/localgov_services_navigation/js/children.js +++ b/modules/localgov_services_navigation/js/children.js @@ -15,109 +15,135 @@ * content for different field types, so for more compatibility maybe an * additional library would be required. */ -(function ($, Drupal) { - - var dragChild; +(function localgovServiceChildScript(Drupal, once) { + let dragChild; Drupal.behaviors.localgovServiceChild = { - attach: function attach(context, settings) { + attach: function attach(context) { // Add draggability to child items. - var child = $('.localgov-child-drag'); - child.each(function() { - this.setAttribute('draggable', true); - this.classList.add('draggable'); - this.addEventListener('dragstart', function (event) { - event.dataTransfer.dropEffect = "move"; - event.dataTransfer.effectAllowed = "move"; - dragChild = this; + const children = once( + 'allServicesChildren', + '.localgov-child-drag', + context, + ); + if (children) { + children.forEach((child) => { + child.setAttribute('draggable', true); + child.classList.add('draggable'); + child.addEventListener('dragstart', (event) => { + event.dataTransfer.dropEffect = 'move'; + event.dataTransfer.effectAllowed = 'move'; + dragChild = child; + }); }); - }); - } + } + }, }; Drupal.behaviors.localgovServiceTaskDrop = { - attach: function attach(context, settings) { + attach: function attach(context) { // Is it always a table. Maybe form-item and then parent? - var linkRow = $("[data-drupal-selector='edit-localgov-common-tasks'] tr"); - linkRow.each(function() { - this.addEventListener('dragover', function (event) { - var row = $(event.target).closest('tr'); - var url = $("input[data-drupal-selector$=uri]", row); - if (url.val() == '') { + const linkRows = once( + 'allServicesLinkRows', + '[data-drupal-selector="edit-localgov-common-tasks"] tr', + context, + ); + linkRows.forEach((row) => { + row.addEventListener('dragover', (event) => { + const targetRow = event.target.closest('tr'); + const url = targetRow.querySelector( + 'input[data-drupal-selector$=uri]', + ); + if (url.value === '') { event.preventDefault(); - event.dataTransfer.dropEffect = "move"; + event.dataTransfer.dropEffect = 'move'; } }); - this.addEventListener('drop', function(event) { - var row = $(event.target).closest('tr'); - var url = $("input[data-drupal-selector$=uri]", row); - if (url.val() == '') { + row.addEventListener('drop', (event) => { + const targetRow = event.target.closest('tr'); + const url = targetRow.querySelector( + 'input[data-drupal-selector$=uri]', + ); + if (url.value === '') { event.preventDefault(); - var title = $("input[data-drupal-selector$=title]", row); - title.val(dragChild.getAttribute('data-localgov-title')); - url.val(dragChild.getAttribute('data-localgov-url')); - $(dragChild).remove(); + const title = targetRow.querySelector( + 'input[data-drupal-selector$=title]', + ); + title.value = dragChild.getAttribute('data-localgov-title'); + url.value = dragChild.getAttribute('data-localgov-url'); + dragChild.remove(); } }); }); - } + }, }; Drupal.behaviors.localgovServiceChildDrop = { - attach: function attach(context, settings) { - var linkRow = $("[data-drupal-selector='edit-localgov-destinations'] tr"); - linkRow.each(function() { - this.addEventListener('dragover', function (event) { - var row = $(event.target).closest('tr'); - var ref = $("input[data-drupal-selector$=target-id]", row); - if (ref.val() == '') { + attach: function attach(context) { + const linkRows = once( + 'allServicesLinkRows', + '[data-drupal-selector="edit-localgov-destinations"] tr', + context, + ); + linkRows.forEach((row) => { + row.addEventListener('dragover', (event) => { + const ref = row.querySelector( + 'input[data-drupal-selector$=target-id]', + ); + if (ref.value === '') { event.preventDefault(); - event.dataTransfer.dropEffect = "move"; + event.dataTransfer.dropEffect = 'move'; } }); - this.addEventListener('drop', function(event) { - var row = $(event.target).closest('tr'); - var ref = $("input[data-drupal-selector$=target-id]", row); - if (ref.val() == '') { + row.addEventListener('drop', (event) => { + const ref = row.querySelector( + 'input[data-drupal-selector$=target-id]', + ); + if (ref.value === '') { event.preventDefault(); - ref.val(dragChild.getAttribute('data-localgov-reference')); - $(dragChild).remove(); + ref.value = dragChild.getAttribute('data-localgov-reference'); + dragChild.remove(); } }); }); - } + }, }; Drupal.behaviors.localgovServiceSubChildDrop = { - attach: function attach(context, settings) { - var linkRow = $("[data-drupal-selector$='-subform-topic-list-links'] tr"); - linkRow.each(function() { - this.addEventListener('dragover', function (event) { - var row = $(event.target).closest('tr'); - var url = $("input[data-drupal-selector$=uri]", row); - if (url.val() == '') { + attach: function attach(context) { + const linkRows = once( + 'allServicesLinkRows', + '[data-drupal-selector$="-subform-topic-list-links"] tr', + context, + ); + linkRows.forEach((row) => { + row.addEventListener('dragover', (event) => { + const url = row.querySelector('input[data-drupal-selector$=uri]'); + if (url.value === '') { event.preventDefault(); - event.dataTransfer.dropEffect = "move"; + event.dataTransfer.dropEffect = 'move'; } }); - this.addEventListener('drop', function(event) { - var row = $(event.target).closest('tr'); - var url = $("input[data-drupal-selector$=uri]", row); - if (url.val() == '') { + row.addEventListener('drop', (event) => { + const url = row.querySelector('input[data-drupal-selector$=uri]'); + if (url.value === '') { event.preventDefault(); - var title = $("input[data-drupal-selector$=title]", row); - title.val(dragChild.getAttribute('data-localgov-title')); - url.val(dragChild.getAttribute('data-localgov-url')); - $(dragChild).remove(); + const title = row.querySelector( + 'input[data-drupal-selector$=title]', + ); + title.value = dragChild.getAttribute('data-localgov-title'); + url.value = dragChild.getAttribute('data-localgov-url'); + dragChild.remove(); } }); }); - } + }, }; // Account for menus for sticky position. - $(document).on('drupalViewportOffsetChange', function () { - $('div.localgov-services-children-list.item-list').css('top', $('body').css('padding-top')); + document.addEventListener('drupalViewportOffsetChange', () => { + document.querySelector( + 'div.localgov-services-children-list.item-list', + ).style.top = getComputedStyle(document.body).paddingTop; }); - -})(jQuery, Drupal); +})(Drupal, once); diff --git a/modules/localgov_services_navigation/src/EntityChildRelationshipUi.php b/modules/localgov_services_navigation/src/EntityChildRelationshipUi.php index 5b46253..41697b3 100644 --- a/modules/localgov_services_navigation/src/EntityChildRelationshipUi.php +++ b/modules/localgov_services_navigation/src/EntityChildRelationshipUi.php @@ -4,6 +4,7 @@ use Drupal\Component\Utility\Html; use Drupal\Core\DependencyInjection\ContainerInjectionInterface; +use Drupal\Core\Entity\ContentEntityFormInterface; use Drupal\Core\Entity\EntityRepositoryInterface; use Drupal\Core\Entity\EntityTypeManagerInterface; use Drupal\Core\Extension\ModuleHandlerInterface; @@ -11,7 +12,6 @@ use Drupal\Core\Session\AccountInterface; use Drupal\Core\StringTranslation\StringTranslationTrait; use Drupal\Core\StringTranslation\TranslationInterface; -use Drupal\node\NodeForm; use Drupal\node\NodeInterface; use Drupal\taxonomy\TermInterface; use Symfony\Component\DependencyInjection\ContainerInterface; @@ -119,13 +119,21 @@ public function entityExtraFieldInfo() { */ public function formAlter(array &$form, FormStateInterface $form_state, $form_id) { $form_object = $form_state->getFormObject(); - if ( - $form_object instanceof NodeForm && - ($node = $form_object->getEntity()) && - in_array($node->bundle(), [ - 'localgov_services_landing', - 'localgov_services_sublanding', - ]) && + + // Must be a content entity form on a node. + if (!$form_object instanceof ContentEntityFormInterface) { + return; + } + + $node = $form_object->getEntity(); + if (!$node instanceof NodeInterface) { + return; + } + + if (in_array($node->bundle(), [ + 'localgov_services_landing', + 'localgov_services_sublanding', + ]) && $node->id() ) { $form['localgov_services_navigation_children'] = [ diff --git a/modules/localgov_services_navigation/tests/src/Kernel/ChildReferencesTest.php b/modules/localgov_services_navigation/tests/src/Kernel/ChildReferencesTest.php index 0f4362e..4fdbff3 100644 --- a/modules/localgov_services_navigation/tests/src/Kernel/ChildReferencesTest.php +++ b/modules/localgov_services_navigation/tests/src/Kernel/ChildReferencesTest.php @@ -278,8 +278,8 @@ public function testChildWithTaxonomy() { $node->save(); // Mock node form and form state classes. - $methods = get_class_methods('Drupal\node\NodeForm'); - $node_form = $this->getMockBuilder('Drupal\node\NodeForm') + $methods = get_class_methods('Drupal\Core\Entity\ContentEntityFormInterface'); + $node_form = $this->getMockBuilder('Drupal\Core\Entity\ContentEntityFormInterface') ->disableOriginalConstructor() ->onlyMethods($methods) ->getMock(); diff --git a/modules/localgov_services_status/css/extra-styling-from-site-theme.scss b/modules/localgov_services_status/css/extra-styling-from-site-theme.scss deleted file mode 100644 index 6b98df8..0000000 --- a/modules/localgov_services_status/css/extra-styling-from-site-theme.scss +++ /dev/null @@ -1,640 +0,0 @@ -//*** start _variables.scss *** - -// Primary Colours -$black: #000000 !default; -$white: #FFFFFF !default; -$red: #AE1100 !default; -$yellow: #FFBB00 !default; -$blue: #0059A4 !default; - -// General colours -$orange: #FF5500 !default; -$green: #77BB55 !default; -$purple: #880088 !default; -// $brown -// $magenta -$tan: #f2ba41 !default; -$cyan: #17A2B8 !default; -// $olive -// $maroon -// $navy -// $aquamarine -// $turquoise -// $silver -// $lime -$teal: #006263 !default; -$indigo: #540055 !default; -$violet: #F0E6ec !default; -$pink: #AD52AD !default; -$gray: #DBDFE3 !default; - -//custom -$gray-dark: #444444 !default; -$carbon: #121212 !default; -$graphite: #282828 !default; -$stonewash: #A0A0A0 !default; -$gray-tint: #EDEDED !default; -$gray-bs: #6C757D !default; -$gray-mid: #ABB4B6 !default; -$purple-tint: #F8EEF8 !default; -$green-tint: #EAF5E5 !default; -$green-alert: #338800 !default; -$indigo-tint: #EEE5EE !default; -$success: #338800 !default; -$danger: #ae1100 !default; -$light: #ededed !default; -$dark: #444444 !default; -$offwhite: #FAFAFA !default; - -// Site colours - -$primary: $purple !default; -$secondary: $carbon !default; // used to override the BS and formio colours applied as secondary -$tertiary: $green !default; - -$visited: $secondary !default; - -// grays -$gray-primary: $gray; -$gray-secondary: $gray-dark; -$gray-tertiary: $secondary; -$gray-quaternary: $graphite; -$gray-quinary: $stonewash; -$gray-senary: $gray-tint; - - -// Theme colours - SASS Map our varieables above, to 'theme-colours' -$theme-colors: ( // Bootstrap colours -'primary': $primary, 'secondary': $secondary, 'success': $success, 'info': $carbon, 'warning': $orange, 'danger': $red, 'light': $light, 'dark': $dark, // Map additional colours to 'theme colours' -'carbon': $carbon, 'graphite': $graphite, 'stonewash': $stonewash, 'gray-tint': $gray-tint, 'purple-tint': $purple-tint, 'green-tint': $green-tint, 'indigo-tint': $indigo-tint, // Map additional colours to 'theme colours' - can be used for backgrounds for example '.bg-green' -'blue': $blue, 'indigo': $indigo, 'purple': $purple, 'pink': $pink, 'red': $red, 'orange': $orange, 'yellow': $yellow, 'green': $green, 'teal': $teal, 'cyan': $cyan, 'gray': $gray, 'gray-dark': $gray-dark, 'white': $white, 'visited': $visited, ); - -// Breadcrumb navigation -$breadcrumb: $gray-tertiary; - -// Focus highlight colour -$focus: $yellow; - -// Link colours - -$link-hover-color: $indigo; - -// Background colours -$body-bg: $white !default; -$body-color: $secondary !default; -$breadcrumb-bg: $white !default; -$alert-bar-minor: $yellow !default; -$alert-bar-major: $red !default; -$alert-bar-notable: $carbon !default; - -// Set all border radius to 0 by default -$border-radius: 0 !default; -$border-radius-lg: 0 !default; -$border-radius-sm: 0 !default; - -// Font weights -$font-bold: 700; -$font-normal: 400; -$font-thin: 300; - -// Fonts -$font-family-base:'Source Sans Pro', Arial, Helvetica, sans-serif !default; // BS font variable -$font-family-sanserif:'Source Sans Pro', Arial, Helvetica, sans-serif !default; // BS font variable -$font-family-secondary: 'Fiendstar W01 Bold', 'Source Sans Pro', Arial, Helvetica, sans-serif !default; -$font-family-icons: 'Font Awesome 5 Free' !default; -$line-height-base: 1.5 !default; -$headings-font-family: $font-family-secondary; -$headings-line-height: 1.1 !default; -$headings-font-weight: $font-bold !default; // for fallbacks only - -// Font base size -$font-size-base: 1rem !default; // Assumes the browser default, typically 16px -// Font sizes -$font-size-ex-ex-lg: $font-size-base * 1.375 !default; // ~22px ~1.375rem -$font-size-ex-lg: $font-size-base * 1.25 !default; // ~20px ~1.25rem -$font-size-lg: $font-size-base * 1.1875 !default; // ~19px ~1.1875rem -$font-size-ex-med: $font-size-base * 1.125 !default; // ~18px ~1.125rem -$font-size-med: $font-size-base * 1.063 !default; // ~17px ~1.063rem -$font-size-sm: $font-size-base * .9375 !default; // ~15px ~.9375rem -$font-size-ex-sm: $font-size-base * .875 !default; // ~14px ~.875rem -$font-size-ex-ex-sm: $font-size-base * .8125 !default; // ~13px ~.0.8125rem - -// Heading sizes -$h1-font-size: $font-size-base * 2.375 !default; // ~38px ~2.375 -$h2-font-size: $font-size-base * 2 !default; // ~32px ~2rem -$h3-font-size: $font-size-base * 1.625 !default; // ~26px ~1.625rem -$h4-font-size: $font-size-base * 1.5 !default; // ~24px ~1.5rem -$h5-font-size: $font-size-ex-ex-lg !default; // ~22px ~1.375rem -$h6-font-size: $font-size-ex-lg !default; // ~20px ~1.25rem - -$btn-font-weight: $font-bold !default; // for fallbacks only - -//STANDARD BUTTONS -$input-btn-padding-y: .5rem !default; //8px -$input-btn-padding-x: .9375rem !default; //15px -$input-btn-font-size: 1.25rem !default; //20px -$input-btn-line-height: 1.5 !default; //10px - -//SMALL BUTTONS -$input-btn-padding-y-sm: .3125rem !default; //5px -$input-btn-padding-x-sm: .9375rem !default; //15px - -$input-btn-line-height-sm: 1.5 !default; //10px - -//LARGE BUTTONS -$input-btn-padding-y-lg: .75 !default; //12px -$input-btn-padding-x-lg: .9375rem !default; //15px -$input-btn-font-size-lg: 1.375rem !default; //22px -$input-btn-line-height-lg: 1.5 !default; //10px - -$button-icons: $yellow !default; -$link-button-primary: $green !default; -$link-button-primary-focus: $teal !default; -$link-button-secondary: $blue !default; -$link-button-secondary-focus: $cyan !default; -$link-button-tertiary: $orange !default; -$link-button-tertiary-focus: $yellow !default; - -// Hide default input focus -$input-btn-focus-width: 0 !default; -$component-active-bg: $yellow !default; -$input-btn-focus-color: rgba($component-active-bg, 1) !default; - - -// Main navigation links -$navbar-nav-link-padding-x: 0 !default; -$navbar-nav-link-padding-y: .5rem !default; //8px -$navbar-brand-font-size: 2.125rem !default; //34px -$navbar-dark-brand-color: $white !default; -$navbar-dark-brand-hover-color: rgba($white, .5) !default; -$navbar-dark-color: $white !default; -$navbar-dark-hover-color: $yellow !default; -$navbar-dark-active-color: $purple !default; -$navbar-dark-disabled-color: rgba($white, .8) !default; -$navbar-dark-toggler-icon-bg: $purple !default; -$navbar-dark-toggler-border-color: $white !default; -// Remove breadcrumb bottom margin -$breadcrumb-margin-bottom: 0 !default; -// Dropdown menu -$dropdown-min-width: 18.125rem !default; -$dropdown-padding-y: 0 !default; -$dropdown-margin-y: 0 !default; -$dropdown-bg: $purple !default; -$dropdown-border-width: 0 !default; -// $dropdown-border-color: !default; -$dropdown-border-radius: 0 !default; -$dropdown-box-shadow: none !default; -$nav-divider-color: $white !default; -$nav-divider-margin-y: 0 !default; -// Dropdown hovers -$dropdown-link-color: $white !default; -$dropdown-link-hover-color: $yellow !default; -$dropdown-link-hover-bg: $purple !default; -$dropdown-link-active-color: $white !default; -$dropdown-link-active-bg: $indigo !default; -$dropdown-item-padding-y: .625rem !default; -$dropdown-item-padding-x: 0 !default; -//Horizontal rule -$hr-margin-y: 1.25rem !default; // 20px -$hr-border: .0625rem; -$hr-color: $gray; -//Small tags -$small-font-size: 85% !default; -//Form input remove rounded corners -$input-border-radius: 0 !default; -$input-border-radius-sm: 0 !default; -$input-border-radius-lg: 0 !default; -$input-color: $gray-dark !default; -//Alert styles -$alert-border-width: .1875rem !default; //3px -$alert-bg-level: 0 !default; -$alert-border-level: 0 !default; -$alert-color-level: 0 !default; -$alert-link-font-weight: $font-bold !default; -$alert-font-weight: $font-bold !default; -//Jumbotron -$jumbo-welcome: 'Welcome to'; -$jumbo-font-regular: $font-size-base * 2.625 !default; // ~42px ~2.625rem -$jumbo-font-large: $font-size-base * 3.25 !default; // ~52px ~3.25rem -// Form validation -$form-feedback-valid-color: $success !default; -$form-feedback-invalid-color: $danger !default; -$form-feedback-font-size: 1.063rem !default; //17px -//Form input -$input-border-color: $stonewash !important !default; -// Global Half Margin -$half-margin: .5rem !default; // 8px -// Global Half Padding // 5px -$half-padding: .3125rem !default; -// Font Awesome Icons -$fa-times: '\f00d' !default; -$fa-font-weight: 900 !default; -$fa-close: $fa-times !default; -$fa-external: '\f35d' !default; -$fa-exclaim: '\f06a' !default; -$fa-check: '\f00c' !default; -$fa-info: '\f129' !default; -$fa-exclamation-triangle: '\f071' !default; -$fa-chevron-right: '\f054' !default; -$fa-chevron-down: '\f078' !default; -$fa-chevron-up: '\f077' !default; -$fa-print: '\f02f' !default; -$fa-save: '\f0c7' !default; -$fa-share: '\f064' !default; -$fa-play: '\f04b' !default; -$fa-youtube-square: '\f431' !default; -$fa-search: '\f002' !default; -$fa-info-circle: '\f05a' !default; -$fa-plus: '\f067' !default; -$fa-minus: '\f068' !default; - -// Alert Icons -$alert-success: $fa-check !default; -$alert-info: $fa-info !default; -$alert-primary: $fa-exclamation-triangle !default; -$alert-danger: $fa-exclamation-triangle !default; -$alert-fail: $fa-times !default; -$alert-warning: $fa-info-circle !default; -//Breadcrumb divider -$breadcrumb-divider: $fa-chevron-right !default; -$breadcrumb-divider-size: 0.75rem; -// *** End _variables.scss *** - -// *** Start _functions.scss *** -$rem-base: 16px; - -@function strip-unit($num) { - @return $num / ($num * 0 + 1); -} - -@mixin rem($property, $values...) { - $max: length($values); - $pxValues: ''; - $remValues: ''; - - @for $i from 1 through $max { - $value: strip-unit(nth($values, $i)); - $pxValues: #{$pxValues + $value}px; - - @if $i < $max { - $pxValues: #{$pxValues + ' '}; - } - } - - @for $i from 1 through $max { - $value: strip-unit(nth($values, $i)); - $remValues: #{$remValues + $value/strip-unit($rem-base)}rem; - - @if $i < $max { - $remValues: #{$remValues + ' '}; - } - } - - #{$property}: $pxValues; - #{$property}: $remValues; -} -// *** End _functions.scss *** - - -.service-status-overview { - header { - margin: 2rem 0; - } -} - -.service-head { - p { - margin: 0; - font-size: $font-size-ex-med; - } - - #toggleAccordions-show, - #toggleAccordions-hide { - a { - color: $blue; - font-weight: $font-normal; - } - } -} -.service-status { - padding: 0; - - main { - margin-top: 0; - - i { - padding-right: 0; - } - } - - .nav-tabs { - display: none; - } - - .card { - border-top: none; - border-bottom: 1px solid $gray-mid; - border-left: 0; - border-right: 0; - background: none; - - &:first-child { - border-top: 1px solid $gray-mid; - } - - .card-header { - background: none; - border: none; - @include rem(padding, 25, 20); - - .status-accordion-header { - @include rem(font-size, 26); - text-decoration: underline; - display: inline; - padding: 0; - - &:hover, - &:focus { - background: $yellow; - color: $carbon; - box-shadow: none; - text-decoration: none; - } - } - - a { - display: inline-block; - width: 100%; - text-decoration: none; - position: relative; - padding-right: 1.8rem; - - &:hover, - &:focus { - background: none; - box-shadow: none; - } - - &:after { - font-family: $font-family-icons; - font-weight: $fa-font-weight; // some font awesome icons require a specific font weight - content: $fa-minus; - width: 1.5rem; - height: 1.5rem; - position: absolute; - right: 0; - top: 0; - color: $carbon; - @include rem(font-size, 26); - } - - h2 { - color: $blue; - text-decoration: underline; - } - - &.collapsed { - &:after { - content: $fa-plus; - } - } - } - } - - } - - .service-status-info, - .service-status-warning, - .service-status-ok { - font-weight: $font-normal; - color: $carbon; - font-size: $font-size-base; - @include rem(margin-top, 5); - - &:hover, - &:focus { - background: none; - } - } - - .service-status__1-has-issues { - a { - &.active { - .service-status-info { - color: $orange; - font-weight: $font-bold; - } - } - &[aria-expanded="true"] { - .service-status-info { - display: none; - } - } - .service-status-info { - display: block; - i { - color: $orange; - } - } - .service-status-warning { - display: none; - } - .service-status-ok { - display: none; - } - } - } - - .service-status__2-no-issues { - a { - &.active { - .service-status-ok { - color: $green-alert; - font-weight: $font-bold; - } - } - &[aria-expanded="true"] { - .service-status-ok { - display: none; - } - } - .service-status-info { - display: none; - } - .service-status-warning { - display: none; - } - .service-status-ok { - display: block; - - i { - color: $green-alert; - } - } - } - } - - .service-status__0-severe-impact { - a { - &.active { - .service-status-warning { - color: $red; - font-weight: $font-bold; - } - } - &[aria-expanded="true"] { - .service-status-warning { - display: none; - } - } - .service-status-info { - display: none; - } - .service-status-warning { - display: block; - - i { - color: $red; - } - } - .service-status-ok { - display:none; - } - } - } -} - - -//@include media-breakpoint-up(md) { -@media (min-width: 767px) { - - .tab-content { - @include rem (min-height, 600); - border: 1px solid $gray-mid; - - } - - .service-status { - padding: inherit; - - .nav-tabs { - display: inline-block; - background: $offwhite; - margin: 0; - padding: 0; - border-bottom: 0; - border-top: 1px solid $gray-mid; - border-left: 1px solid $gray-mid; - - .nav-item { - display: inline-block; - margin: 0; - padding: 0; - border-bottom: 1px solid $gray-mid; - width: 100%; - - .nav-link { - display: inline-block; - width: 100%; - text-decoration: none; - color: $blue; - border: 0; - font-size: $font-size-lg; - white-space: normal; - line-height: 1.5rem; - transition: none; - - &:hover, - &:focus { - border: 0; - box-shadow: none; - color: $carbon; - text-decoration: none; - - .service-status-title { - background: $yellow; - } - } - - &.active { - position: relative; - background: $white; - border-right: 1px solid white; - border-top: 0; - border-left: 0; - border-radius: 0; - margin-left: 1px; - - .service-status-title { - color: $carbon; - background: $yellow; - text-decoration: none; - } - - > span { - margin-left: -1px; - } - - &:after { - content: ''; - z-index: 1000; - display: block; - position: absolute; - right: -2px; - top: 0; - height: 100%; - background: $white; - @include rem(width, 5); - } - } - - .service-status-title { - text-decoration: underline; - display: inline; - font-size: $font-size-ex-ex-lg; - padding: 0; - - &:hover, - &:focus { - background: $yellow; - box-shadow: none; - text-decoration: none; - } - } - } - } - } - - .card { - border: none; - - &:first-child { - border-top: none; - } - - .card-header { - display: none; - } - - .collapse { - display: block; - } - - .alert { - margin-top: 1rem; - } - } - } - -} - -@media (max-width: 767px) { - .tab-pane { - display: block !important; - opacity: 1; - } -} - -.fade:not(.show) { // fix weird BS inherited fade in - opacity: 1; -} diff --git a/modules/localgov_services_status/css/extra.css b/modules/localgov_services_status/css/extra.css index c67e891..dedee92 100644 --- a/modules/localgov_services_status/css/extra.css +++ b/modules/localgov_services_status/css/extra.css @@ -1,215 +1,272 @@ -@charset "UTF-8"; .service-status-overview header { - margin: 2rem 0; } + margin: 2rem 0; +} .service-head p { margin: 0; - font-size: 1.125rem; } + font-size: 1.125rem; +} -.service-head #toggleAccordions-show a, -.service-head #toggleAccordions-hide a { - color: #0059A4; - font-weight: 400; } +.service-head .toggle-accordions a { + color: #0059a4; + font-weight: 400; +} .service-status { - padding: 0; } - .service-status main { - margin-top: 0; } - .service-status main i { - padding-right: 0; } - .service-status .nav-tabs { - display: none; } - .service-status .card { - border-top: none; - border-bottom: 1px solid #ABB4B6; - border-left: 0; - border-right: 0; - background: none; } - .service-status .card:first-child { - border-top: 1px solid #ABB4B6; } - .service-status .card .card-header { - background: none; - border: none; - padding: 25px 20px; - padding: 1.5625rem 1.25rem; } - .service-status .card .card-header .status-accordion-header { - font-size: 26px; - font-size: 1.625rem; - text-decoration: underline; - display: inline; - padding: 0; } - .service-status .card .card-header .status-accordion-header:hover, .service-status .card .card-header .status-accordion-header:focus { - background: #FFBB00; - color: #121212; - box-shadow: none; - text-decoration: none; } - .service-status .card .card-header a { - display: inline-block; - width: 100%; - text-decoration: none; - position: relative; - padding-right: 1.8rem; } - .service-status .card .card-header a:hover, .service-status .card .card-header a:focus { - background: none; - box-shadow: none; } - .service-status .card .card-header a:after { - font-family: "Font Awesome 5 Free"; - font-weight: 900; - content: ""; - width: 1.5rem; - height: 1.5rem; - position: absolute; - right: 0; - top: 0; - color: #121212; - font-size: 26px; - font-size: 1.625rem; } - .service-status .card .card-header a h2 { - color: #0059A4; - text-decoration: underline; } - .service-status .card .card-header a.collapsed:after { - content: ""; } - .service-status .service-status-info, - .service-status .service-status-warning, - .service-status .service-status-ok { - font-weight: 400; - color: #121212; - font-size: 1rem; - margin-top: 5px; - margin-top: 0.3125rem; } - .service-status .service-status-info:hover, .service-status .service-status-info:focus, - .service-status .service-status-warning:hover, - .service-status .service-status-warning:focus, - .service-status .service-status-ok:hover, - .service-status .service-status-ok:focus { - background: none; } - .service-status .service-status__1-has-issues a.active .service-status-info { - color: #FF5500; - font-weight: 700; } - .service-status .service-status__1-has-issues a[aria-expanded="true"] .service-status-info { - display: none; } - .service-status .service-status__1-has-issues a .service-status-info { - display: block; } - .service-status .service-status__1-has-issues a .service-status-info i { - color: #FF5500; } - .service-status .service-status__1-has-issues a .service-status-warning { - display: none; } - .service-status .service-status__1-has-issues a .service-status-ok { - display: none; } - .service-status .service-status__2-no-issues a.active .service-status-ok { - color: #338800; - font-weight: 700; } - .service-status .service-status__2-no-issues a[aria-expanded="true"] .service-status-ok { - display: none; } - .service-status .service-status__2-no-issues a .service-status-info { - display: none; } - .service-status .service-status__2-no-issues a .service-status-warning { - display: none; } - .service-status .service-status__2-no-issues a .service-status-ok { - display: block; } - .service-status .service-status__2-no-issues a .service-status-ok i { - color: #338800; } - .service-status .service-status__0-severe-impact a.active .service-status-warning { - color: #AE1100; - font-weight: 700; } - .service-status .service-status__0-severe-impact a[aria-expanded="true"] .service-status-warning { - display: none; } - .service-status .service-status__0-severe-impact a .service-status-info { - display: none; } - .service-status .service-status__0-severe-impact a .service-status-warning { - display: block; } - .service-status .service-status__0-severe-impact a .service-status-warning i { - color: #AE1100; } - .service-status .service-status__0-severe-impact a .service-status-ok { - display: none; } + padding: 0; +} +.service-status main { + margin-top: 0; +} +.service-status main i { + padding-right: 0; +} +.service-status .nav-tabs { + display: none; +} +.service-status .card { + border-top: none; + border-right: 0; + border-bottom: 1px solid #abb4b6; + border-left: 0; + background: none; +} +.service-status .card:first-child { + border-top: 1px solid #abb4b6; +} +.service-status .card .card-header { + padding: 1.5625rem 1.25rem; + border: none; + background: none; +} +.service-status .card .card-header .status-accordion-header { + display: inline; + padding: 0; + text-decoration: underline; + font-size: 1.625rem; +} +.service-status .card .card-header .status-accordion-header:hover, +.service-status .card .card-header .status-accordion-header:focus { + text-decoration: none; + color: #121212; + background: #fb0; + box-shadow: none; +} +.service-status .card .card-header a { + position: relative; + display: inline-block; + width: 100%; + padding-right: 1.8rem; + text-decoration: none; +} +.service-status .card .card-header a:hover, +.service-status .card .card-header a:focus { + background: none; + box-shadow: none; +} +.service-status .card .card-header a::after { + position: absolute; + top: 0; + right: 0; + width: 1.5rem; + height: 1.5rem; + content: ""; + color: #121212; + font-family: "Font Awesome 5 Free", sans-serif; + font-size: 1.625rem; + font-weight: 900; +} +.service-status .card .card-header a h2 { + text-decoration: underline; + color: #0059a4; +} +.service-status .card .card-header a.collapsed::after { + content: ""; +} +.service-status .service-status-info, +.service-status .service-status-warning, +.service-status .service-status-ok { + margin-top: 0.3125rem; + color: #121212; + font-size: 1rem; + font-weight: 400; +} +.service-status .service-status-info:hover, +.service-status .service-status-info:focus, +.service-status .service-status-warning:hover, +.service-status .service-status-warning:focus, +.service-status .service-status-ok:hover, +.service-status .service-status-ok:focus { + background: none; +} +.service-status .service-status__1-has-issues a.active .service-status-info { + color: #f50; + font-weight: 700; +} +.service-status .service-status__1-has-issues a[aria-expanded="true"] .service-status-info { + display: none; +} +.service-status .service-status__1-has-issues a .service-status-info { + display: block; +} +.service-status .service-status__1-has-issues a .service-status-info i { + color: #f50; +} +.service-status .service-status__1-has-issues a .service-status-warning { + display: none; +} +.service-status .service-status__1-has-issues a .service-status-ok { + display: none; +} +.service-status .service-status__2-no-issues a.active .service-status-ok { + color: #380; + font-weight: 700; +} +.service-status .service-status__2-no-issues a[aria-expanded="true"] .service-status-ok { + display: none; +} +.service-status .service-status__2-no-issues a .service-status-info { + display: none; +} +.service-status .service-status__2-no-issues a .service-status-warning { + display: none; +} +.service-status .service-status__2-no-issues a .service-status-ok { + display: block; +} +.service-status .service-status__2-no-issues a .service-status-ok i { + color: #380; +} +.service-status .service-status__0-severe-impact a.active .service-status-warning { + color: #ae1100; + font-weight: 700; +} +.service-status .service-status__0-severe-impact a[aria-expanded="true"] .service-status-warning { + display: none; +} +.service-status .service-status__0-severe-impact a .service-status-info { + display: none; +} +.service-status .service-status__0-severe-impact a .service-status-warning { + display: block; +} +.service-status .service-status__0-severe-impact a .service-status-warning i { + color: #ae1100; +} +.service-status .service-status__0-severe-impact a .service-status-ok { + display: none; +} @media (min-width: 767px) { .tab-content { - min-height: 600px; min-height: 37.5rem; - border: 1px solid #ABB4B6; } + border: 1px solid #abb4b6; + } .service-status { - padding: inherit; } - .service-status .nav-tabs { - display: inline-block; - background: #FAFAFA; - margin: 0; - padding: 0; - border-bottom: 0; - border-top: 1px solid #ABB4B6; - border-left: 1px solid #ABB4B6; } - .service-status .nav-tabs .nav-item { - display: inline-block; - margin: 0; - padding: 0; - border-bottom: 1px solid #ABB4B6; - width: 100%; } - .service-status .nav-tabs .nav-item .nav-link { - display: inline-block; - width: 100%; - text-decoration: none; - color: #0059A4; - border: 0; - font-size: 1.1875rem; - white-space: normal; - line-height: 1.5rem; - transition: none; } - .service-status .nav-tabs .nav-item .nav-link:hover, .service-status .nav-tabs .nav-item .nav-link:focus { - border: 0; - box-shadow: none; - color: #121212; - text-decoration: none; } - .service-status .nav-tabs .nav-item .nav-link:hover .service-status-title, .service-status .nav-tabs .nav-item .nav-link:focus .service-status-title { - background: #FFBB00; } - .service-status .nav-tabs .nav-item .nav-link.active { - position: relative; - background: #FFFFFF; - border-right: 1px solid white; - border-top: 0; - border-left: 0; - border-radius: 0; - margin-left: 1px; } - .service-status .nav-tabs .nav-item .nav-link.active .service-status-title { - color: #121212; - background: #FFBB00; - text-decoration: none; } - .service-status .nav-tabs .nav-item .nav-link.active > span { - margin-left: -1px; } - .service-status .nav-tabs .nav-item .nav-link.active:after { - content: ''; - z-index: 1000; - display: block; - position: absolute; - right: -2px; - top: 0; - height: 100%; - background: #FFFFFF; - width: 5px; - width: 0.3125rem; } - .service-status .nav-tabs .nav-item .nav-link .service-status-title { - text-decoration: underline; - display: inline; - font-size: 1.375rem; - padding: 0; } - .service-status .nav-tabs .nav-item .nav-link .service-status-title:hover, .service-status .nav-tabs .nav-item .nav-link .service-status-title:focus { - background: #FFBB00; - box-shadow: none; - text-decoration: none; } - .service-status .card { - border: none; } - .service-status .card:first-child { - border-top: none; } - .service-status .card .card-header { - display: none; } - .service-status .card .collapse { - display: block; } - .service-status .card .alert { - margin-top: 1rem; } } + padding: inherit; + } + .service-status .nav-tabs { + display: inline-block; + margin: 0; + padding: 0; + border-top: 1px solid #abb4b6; + border-bottom: 0; + border-left: 1px solid #abb4b6; + background: #fafafa; + } + .service-status .nav-tabs .nav-item { + display: inline-block; + width: 100%; + margin: 0; + padding: 0; + border-bottom: 1px solid #abb4b6; + } + .service-status .nav-tabs .nav-item .nav-link { + display: inline-block; + width: 100%; + transition: none; + white-space: normal; + text-decoration: none; + color: #0059a4; + border: 0; + font-size: 1.1875rem; + line-height: 1.5rem; + } + .service-status .nav-tabs .nav-item .nav-link:hover, + .service-status .nav-tabs .nav-item .nav-link:focus { + text-decoration: none; + color: #121212; + border: 0; + box-shadow: none; + } + .service-status .nav-tabs .nav-item .nav-link:hover .service-status-title, + .service-status .nav-tabs .nav-item .nav-link:focus .service-status-title { + background: #fb0; + } + .service-status .nav-tabs .nav-item .nav-link.active { + position: relative; + margin-left: 1px; + border-top: 0; + border-right: 1px solid white; + border-left: 0; + border-radius: 0; + background: #fff; + } + .service-status .nav-tabs .nav-item .nav-link.active .service-status-title { + text-decoration: none; + color: #121212; + background: #fb0; + } + .service-status .nav-tabs .nav-item .nav-link.active > span { + margin-left: -1px; + } + .service-status .nav-tabs .nav-item .nav-link.active::after { + position: absolute; + z-index: 1000; + top: 0; + right: -2px; + display: block; + width: 0.3125rem; + height: 100%; + content: ""; + background: #fff; + } + .service-status .nav-tabs .nav-item .nav-link .service-status-title { + display: inline; + padding: 0; + text-decoration: underline; + font-size: 1.375rem; + } + .service-status .nav-tabs .nav-item .nav-link .service-status-title:hover, + .service-status .nav-tabs .nav-item .nav-link .service-status-title:focus { + text-decoration: none; + background: #fb0; + box-shadow: none; + } + .service-status .card { + border: none; + } + .service-status .card:first-child { + border-top: none; + } + .service-status .card .card-header { + display: none; + } + .service-status .card .collapse { + display: block; + } + .service-status .card .alert { + margin-top: 1rem; + } +} @media (max-width: 767px) { .tab-pane { display: block !important; - opacity: 1; } } + opacity: 1; + } +} .fade:not(.show) { - opacity: 1; } + opacity: 1; +} diff --git a/modules/localgov_services_status/css/localgov-services-status.css b/modules/localgov_services_status/css/localgov-services-status.css index c513a3d..0e0c6e0 100644 --- a/modules/localgov_services_status/css/localgov-services-status.css +++ b/modules/localgov_services_status/css/localgov-services-status.css @@ -15,9 +15,9 @@ .service-status .nav-tabs { display: flex; flex-flow: column nowrap; - border-bottom: none; - border-right: 1px solid #ddd; margin: 0 15px; + border-right: 1px solid #ddd; + border-bottom: none; } .nav-tabs .nav-item + .nav-item { margin-top: 0.25rem; @@ -27,19 +27,19 @@ white-space: nowrap; } .nav-tabs .nav-link:hover { - background-color: #f7f7f7; border-color: transparent; + background-color: #f7f7f7; } .nav-tabs .nav-link.active { - border-bottom-color: #ddd; + margin-right: -1px; border-right-color: #fff; - border-bottom-left-radius: 0.25rem; + border-bottom-color: #ddd; border-top-right-radius: 0; - margin-right: -1px; + border-bottom-left-radius: 0.25rem; } .nav-tabs .nav-link.active:hover { - background-color: #fff; border-color: #0275d8 #fff #0275d8 #0275d8; + background-color: #fff; } .service-status .card { diff --git a/modules/localgov_services_status/js/localgov-services-status.js b/modules/localgov_services_status/js/localgov-services-status.js index b5d9b41..6db0109 100644 --- a/modules/localgov_services_status/js/localgov-services-status.js +++ b/modules/localgov_services_status/js/localgov-services-status.js @@ -8,7 +8,7 @@ * Syntax: ES5 */ -/* eslint no-var: "off", prefer-template: "off", no-restricted-globals: "off" */ +/* eslint no-restricted-globals: 'off' */ (function jumpToStatusMsg(Drupal) { /** * Which status message are we after? @@ -20,14 +20,14 @@ * Integer or bool. */ function findTargetStatusMessageNumber() { - var isNum = false; - var statusNumber = ""; + let isNum = false; + let statusNumber = ''; if (!location.hash) { return false; } - statusNumber = location.hash.replace(/#status-mobile-|#status-/, ""); + statusNumber = location.hash.replace(/#status-mobile-|#status-/, ''); isNum = /\d+/.test(statusNumber); if (isNum) { @@ -52,20 +52,20 @@ * Reference to window.drupalSettings. */ attach(context) { - var statusNum = findTargetStatusMessageNumber(); + const statusNum = findTargetStatusMessageNumber(); - var tabSelector = 'a[href="#status-' + statusNum + '"]'; - var accordionSelector = "#heading-" + statusNum + " a"; + const tabSelector = `a[href="#status-${statusNum}"]`; + const accordionSelector = `#heading-${statusNum} a`; - var isTabVisible = document.getElementById("tabs").offsetParent; + const isTabVisible = document.getElementById('tabs').offsetParent; if (isTabVisible) { - jQuery(tabSelector, context).tab("show"); + jQuery(tabSelector, context).tab('show'); } else { // The Bootstrap collapse() method is giving inconsistent results in // some cases. So directly clicking the Accordion header. jQuery(accordionSelector, context).click(); } - } + }, }; })(Drupal); diff --git a/modules/localgov_services_status/templates/views-view-localgov-services-status.html.twig b/modules/localgov_services_status/templates/views-view-localgov-services-status.html.twig index 80e88e9..c0bf1d0 100644 --- a/modules/localgov_services_status/templates/views-view-localgov-services-status.html.twig +++ b/modules/localgov_services_status/templates/views-view-localgov-services-status.html.twig @@ -23,21 +23,21 @@
-
- +
- +
- + {% for index, row in rows %} {% set views_row_classes = view.style_plugin.getRowClass(index) %} {% set entity_id = view.result[index]._entity.id() %} @@ -103,7 +103,7 @@
{% endfor %} - +
diff --git a/modules/localgov_services_sublanding/css/child-pages.css b/modules/localgov_services_sublanding/css/child-pages.css index 12a3b95..f6b1091 100644 --- a/modules/localgov_services_sublanding/css/child-pages.css +++ b/modules/localgov_services_sublanding/css/child-pages.css @@ -4,14 +4,14 @@ */ .localgov-services-sublanding-child-entity--unpublished { - background-color: #FFCC33; + background-color: #fc3; } .localgov-services-sublanding-child-entity--unpublished::after { - content: 'Unpublished'; display: inline-block; - margin: .25em; - padding-left: .25em; - padding-right: .25em; + margin: 0.25em; + padding-right: 0.25em; + padding-left: 0.25em; + content: "Unpublished"; color: white; background-color: black; font-weight: bold;