diff --git a/src/assets/js/step-by-step-nav.js b/src/assets/js/step-by-step-nav.js deleted file mode 100644 index a87fd5122..000000000 --- a/src/assets/js/step-by-step-nav.js +++ /dev/null @@ -1,516 +0,0 @@ -//= require govuk/vendor/polyfills/Element/prototype/classList.js -//= require ../vendor/polyfills/closest.js -//= require ../vendor/polyfills/indexOf.js - -window.GOVUK = window.GOVUK || {} -window.GOVUK.Modules = window.GOVUK.Modules || {}; - -(function (Modules) { - function Gemstepnav ($module) { - this.$module = $module - this.$module.actions = {} // stores text for JS appended elements 'show' and 'hide' on steps, and 'show/hide all' button - this.$module.rememberShownStep = false - this.$module.stepNavSize = false - this.$module.sessionStoreLink = 'govuk-step-nav-active-link' - this.$module.activeLinkClass = 'gem-c-step-nav__list-item--active' - this.$module.activeStepClass = 'gem-c-step-nav__step--active' - this.$module.activeLinkHref = '#content' - this.$module.uniqueId = false - } - - Gemstepnav.prototype.init = function () { - // Indicate that js has worked - this.$module.classList.add('gem-c-step-nav--active') - - // Prevent FOUC, remove class hiding content - this.$module.classList.remove('js-hidden') - - this.$module.stepNavSize = this.$module.classList.contains('gem-c-step-nav--large') ? 'Big' : 'Small' - this.$module.rememberShownStep = !!this.$module.hasAttribute('data-remember') && this.$module.stepNavSize === 'Big' - - this.$module.steps = this.$module.querySelectorAll('.js-step') - this.$module.stepHeaders = this.$module.querySelectorAll('.js-toggle-panel') - this.$module.totalSteps = this.$module.querySelectorAll('.js-panel').length - this.$module.totalLinks = this.$module.querySelectorAll('.gem-c-step-nav__link').length - this.$module.showOrHideAllButton = false - - this.$module.uniqueId = this.$module.getAttribute('data-id') || false - - if (this.$module.uniqueId) { - this.$module.sessionStoreLink = this.$module.sessionStoreLink + '_' + this.$module.uniqueId - } - - const stepNavTracker = new this.StepNavTracker(this.$module.uniqueId, this.$module.totalSteps, this.$module.totalLinks) - - this.getTextForInsertedElements() - this.addButtonstoSteps() - this.addShowHideAllButton() - this.addShowHideToggle() - this.addAriaControlsAttrForShowHideAllButton() - - this.ensureOnlyOneActiveLink() - this.showPreviouslyOpenedSteps() - - this.bindToggleForSteps(stepNavTracker) - this.bindToggleShowHideAllButton(stepNavTracker) - this.bindComponentLinkClicks(stepNavTracker) - } - - Gemstepnav.prototype.getTextForInsertedElements = function () { - this.$module.actions.showText = this.$module.getAttribute('data-show-text') - this.$module.actions.hideText = this.$module.getAttribute('data-hide-text') - this.$module.actions.showAllText = this.$module.getAttribute('data-show-all-text') - this.$module.actions.hideAllText = this.$module.getAttribute('data-hide-all-text') - } - - Gemstepnav.prototype.addShowHideAllButton = function () { - const showAll = document.createElement('div') - const steps = this.$module.querySelectorAll('.gem-c-step-nav__steps')[0] - - showAll.className = 'gem-c-step-nav__controls govuk-!-display-none-print' - showAll.innerHTML = - '' - - this.$module.insertBefore(showAll, steps) - this.$module.showOrHideAllButton = this.$module.querySelectorAll('.js-step-controls-button')[0] - } - - Gemstepnav.prototype.addShowHideToggle = function () { - for (let i = 0; i < this.$module.stepHeaders.length; i++) { - const thisel = this.$module.stepHeaders[i] - - if (!thisel.querySelectorAll('.js-toggle-link').length) { - const showHideSpan = document.createElement('span') - const showHideSpanText = document.createElement('span') - const showHideSpanIcon = document.createElement('span') - const showHideSpanFocus = document.createElement('span') - const thisSectionSpan = document.createElement('span') - - showHideSpan.className = 'gem-c-step-nav__toggle-link js-toggle-link govuk-!-display-none-print' - showHideSpanText.className = 'gem-c-step-nav__button-text js-toggle-link-text' - showHideSpanIcon.className = 'gem-c-step-nav__chevron js-toggle-link-icon' - showHideSpanFocus.className = 'gem-c-step-nav__toggle-link-focus' - thisSectionSpan.className = 'govuk-visually-hidden' - - showHideSpan.appendChild(showHideSpanFocus) - showHideSpanFocus.appendChild(showHideSpanIcon) - showHideSpanFocus.appendChild(showHideSpanText) - - thisSectionSpan.innerHTML = ' this section' - showHideSpan.appendChild(thisSectionSpan) - - thisel.querySelectorAll('.js-step-title-button')[0].appendChild(showHideSpan) - } - } - } - - Gemstepnav.prototype.headerIsOpen = function (stepHeader) { - return (typeof stepHeader.parentNode.getAttribute('show') !== 'undefined') - } - - Gemstepnav.prototype.addAriaControlsAttrForShowHideAllButton = function () { - const ariaControlsValue = this.$module.querySelectorAll('.js-panel')[0].getAttribute('id') - - this.$module.showOrHideAllButton.setAttribute('aria-controls', ariaControlsValue) - } - - // called by show all/hide all, sets all steps accordingly - Gemstepnav.prototype.setAllStepsShownState = function (isShown) { - const data = [] - - for (let i = 0; i < this.$module.steps.length; i++) { - const stepView = new this.StepView(this.$module.steps[i], this.$module) - stepView.setIsShown(isShown) - - if (isShown) { - data.push(this.$module.steps[i].getAttribute('id')) - } - } - - if (isShown) { - this.saveToSessionStorage(this.$module.uniqueId, JSON.stringify(data)) - } else { - this.removeFromSessionStorage(this.$module.uniqueId) - } - } - - // called on load, determines whether each step should be open or closed - Gemstepnav.prototype.showPreviouslyOpenedSteps = function () { - const data = this.loadFromSessionStorage(this.$module.uniqueId) || [] - - for (let i = 0; i < this.$module.steps.length; i++) { - const thisel = this.$module.steps[i] - const id = thisel.getAttribute('id') - const stepView = new this.StepView(thisel, this.$module) - const shouldBeShown = thisel.hasAttribute('data-show') - - // show the step if it has been remembered or if it has the 'data-show' attribute - if ((this.$module.rememberShownStep && data.indexOf(id) > -1) || (shouldBeShown && shouldBeShown !== 'undefined')) { - stepView.setIsShown(true) - } else { - stepView.setIsShown(false) - } - } - - if (data.length > 0) { - this.$module.showOrHideAllButton.setAttribute('aria-expanded', true) - this.setShowHideAllText() - } - } - - Gemstepnav.prototype.addButtonstoSteps = function () { - for (let i = 0; i < this.$module.steps.length; i++) { - const thisel = this.$module.steps[i] - const title = thisel.querySelectorAll('.js-step-title')[0] - const contentId = thisel.querySelectorAll('.js-panel')[0].getAttribute('id') - const titleText = title.textContent || title.innerText // IE8 fallback - - title.outerHTML = - '' + - '' + - '' - } - } - - Gemstepnav.prototype.bindToggleForSteps = function (stepNavTracker) { - const that = this - const togglePanels = this.$module.querySelectorAll('.js-toggle-panel') - - for (let i = 0; i < togglePanels.length; i++) { - togglePanels[i].addEventListener('click', function (event) { - const stepView = new that.StepView(this.parentNode, that.$module) - stepView.toggle() - - const stepIsOptional = this.parentNode.hasAttribute('data-optional') - const toggleClick = new that.StepToggleClick(event, stepView, stepNavTracker, stepIsOptional, that.$module.stepNavSize) - toggleClick.trackClick() - - that.setShowHideAllText() - that.rememberStepState(this.parentNode) - }) - } - } - - // if the step is open, store its id in session store - // if the step is closed, remove its id from session store - Gemstepnav.prototype.rememberStepState = function (step) { - if (this.$module.rememberShownStep) { - const data = JSON.parse(this.loadFromSessionStorage(this.$module.uniqueId)) || [] - const thisstep = step.getAttribute('id') - const shown = step.classList.contains('step-is-shown') - - if (shown) { - data.push(thisstep) - } else { - const i = data.indexOf(thisstep) - if (i > -1) { - data.splice(i, 1) - } - } - this.saveToSessionStorage(this.$module.uniqueId, JSON.stringify(data)) - } - } - - // tracking click events on links in step content - Gemstepnav.prototype.bindComponentLinkClicks = function (stepNavTracker) { - const jsLinks = this.$module.querySelectorAll('.js-link') - const that = this - - for (let i = 0; i < jsLinks.length; i++) { - jsLinks[i].addEventListener('click', function (event) { - const dataPosition = this.getAttribute('data-position') - const linkClick = new that.ComponentLinkClick(event, stepNavTracker, dataPosition, that.$module.stepNavSize) - linkClick.trackClick() - - if (this.getAttribute('rel') !== 'external') { - that.saveToSessionStorage(that.$module.sessionStoreLink, dataPosition) - } - - if (this.getAttribute('href') === that.$module.activeLinkHref) { - that.setOnlyThisLinkActive(this) - that.setActiveStepClass() - } - }) - } - } - - Gemstepnav.prototype.saveToSessionStorage = function (key, value) { - window.sessionStorage.setItem(key, value) - } - - Gemstepnav.prototype.loadFromSessionStorage = function (key, value) { - return window.sessionStorage.getItem(key) - } - - Gemstepnav.prototype.removeFromSessionStorage = function (key) { - window.sessionStorage.removeItem(key) - } - - Gemstepnav.prototype.setOnlyThisLinkActive = function (clicked) { - const allActiveLinks = this.$module.querySelectorAll('.' + this.$module.activeLinkClass) - for (let i = 0; i < allActiveLinks.length; i++) { - allActiveLinks[i].classList.remove(this.$module.activeLinkClass) - } - clicked.parentNode.classList.add(this.$module.activeLinkClass) - } - - // if a link occurs more than once in a step nav, the backend doesn't know which one to highlight - // so it gives all those links the 'active' attribute and highlights the last step containing that link - // if the user clicked on one of those links previously, it will be in the session store - // this code ensures only that link and its corresponding step have the highlighting - // otherwise it accepts what the backend has already passed to the component - Gemstepnav.prototype.ensureOnlyOneActiveLink = function () { - const activeLinks = this.$module.querySelectorAll('.js-list-item.' + this.$module.activeLinkClass) - - if (activeLinks.length <= 1) { - return - } - - const loaded = this.loadFromSessionStorage(this.$module.sessionStoreLink) - const activeParent = this.$module.querySelectorAll('.' + this.$module.activeLinkClass)[0] - const activeChild = activeParent.firstChild - const foundLink = activeChild.getAttribute('data-position') - let lastClicked = loaded || foundLink // the value saved has priority - - // it's possible for the saved link position value to not match any of the currently duplicate highlighted links - // so check this otherwise it'll take the highlighting off all of them - const checkLink = this.$module.querySelectorAll('[data-position="' + lastClicked + '"]')[0] - - if (checkLink) { - if (!checkLink.parentNode.classList.contains(this.$module.activeLinkClass)) { - lastClicked = checkLink - } - } else { - lastClicked = foundLink - } - - this.removeActiveStateFromAllButCurrent(activeLinks, lastClicked) - this.setActiveStepClass() - } - - Gemstepnav.prototype.removeActiveStateFromAllButCurrent = function (activeLinks, current) { - for (let i = 0; i < activeLinks.length; i++) { - const thisel = activeLinks[i] - if (thisel.querySelectorAll('.js-link')[0].getAttribute('data-position').toString() !== current.toString()) { - thisel.classList.remove(this.$module.activeLinkClass) - const visuallyHidden = thisel.querySelectorAll('.visuallyhidden') - if (visuallyHidden.length) { - visuallyHidden[0].parentNode.removeChild(visuallyHidden[0]) - } - } - } - } - - Gemstepnav.prototype.setActiveStepClass = function () { - // remove the 'active/open' state from all steps - const allActiveSteps = this.$module.querySelectorAll('.' + this.$module.activeStepClass) - for (let i = 0; i < allActiveSteps.length; i++) { - allActiveSteps[i].classList.remove(this.$module.activeStepClass) - allActiveSteps[i].removeAttribute('data-show') - } - - // find the current page link and apply 'active/open' state to parent step - const activeLink = this.$module.querySelectorAll('.' + this.$module.activeLinkClass)[0] - if (activeLink) { - const activeStep = activeLink.closest('.gem-c-step-nav__step') - activeStep.classList.add(this.$module.activeStepClass) - activeStep.setAttribute('data-show', '') - } - } - - Gemstepnav.prototype.bindToggleShowHideAllButton = function (stepNavTracker) { - const that = this - - this.$module.showOrHideAllButton.addEventListener('click', function (event) { - const textContent = this.textContent || this.innerText - const shouldShowAll = textContent === that.$module.actions.showAllText - - // Fire GA click tracking - stepNavTracker.trackClick('pageElementInteraction', (shouldShowAll ? 'stepNavAllShown' : 'stepNavAllHidden'), { - label: (shouldShowAll ? that.$module.actions.showAllText : that.$module.actions.hideAllText) + ': ' + that.$module.stepNavSize - }) - - that.setAllStepsShownState(shouldShowAll) - that.$module.showOrHideAllButton.setAttribute('aria-expanded', shouldShowAll) - that.setShowHideAllText() - - return false - }) - } - - Gemstepnav.prototype.setShowHideAllText = function () { - const shownSteps = this.$module.querySelectorAll('.step-is-shown').length - const showAllChevon = this.$module.showOrHideAllButton.querySelector('.js-step-controls-button-icon') - const showAllButtonText = this.$module.showOrHideAllButton.querySelector('.js-step-controls-button-text') - // Find out if the number of is-opens == total number of steps - const shownStepsIsTotalSteps = shownSteps === this.$module.totalSteps - - if (shownStepsIsTotalSteps) { - showAllButtonText.innerHTML = this.$module.actions.hideAllText - showAllChevon.classList.remove('gem-c-step-nav__chevron--down') - } else { - showAllButtonText.innerHTML = this.$module.actions.showAllText - showAllChevon.classList.add('gem-c-step-nav__chevron--down') - } - } - - Gemstepnav.prototype.StepView = function (stepElement, $module) { - this.stepElement = stepElement - this.stepContent = this.stepElement.querySelectorAll('.js-panel')[0] - this.titleButton = this.stepElement.querySelectorAll('.js-step-title-button')[0] - const textElement = this.stepElement.querySelectorAll('.js-step-title-text')[0] - this.title = textElement.textContent || textElement.innerText - this.title = this.title.replace(/^\s+|\s+$/g, '') // this is 'trim' but supporting IE8 - this.showText = $module.actions.showText - this.hideText = $module.actions.hideText - this.upChevronSvg = $module.upChevronSvg - this.downChevronSvg = $module.downChevronSvg - - this.show = function () { - this.setIsShown(true) - } - - this.hide = function () { - this.setIsShown(false) - } - - this.toggle = function () { - this.setIsShown(this.isHidden()) - } - - this.setIsShown = function (isShown) { - const toggleLink = this.stepElement.querySelectorAll('.js-toggle-link')[0] - const toggleLinkText = toggleLink.querySelector('.js-toggle-link-text') - const stepChevron = toggleLink.querySelector('.js-toggle-link-icon') - - if (isShown) { - this.stepElement.classList.add('step-is-shown') - this.stepContent.classList.remove('js-hidden') - toggleLinkText.innerHTML = this.hideText - stepChevron.classList.remove('gem-c-step-nav__chevron--down') - this.stepContent.style.display = 'block' - } else { - this.stepElement.classList.remove('step-is-shown') - this.stepContent.classList.add('js-hidden') - toggleLinkText.innerHTML = this.showText - stepChevron.classList.add('gem-c-step-nav__chevron--down') - this.stepContent.style.display = 'none' - } - this.titleButton.setAttribute('aria-expanded', isShown) - } - - this.isShown = function () { - return this.stepElement.classList.contains('step-is-shown') - } - - this.isHidden = function () { - return !this.isShown() - } - - this.numberOfContentItems = function () { - return this.stepContent.querySelectorAll('.js-link').length - } - } - - Gemstepnav.prototype.StepToggleClick = function (event, stepView, stepNavTracker, stepIsOptional, stepNavSize) { - this.target = event.target - this.stepIsOptional = stepIsOptional - this.stepNavSize = stepNavSize - - this.trackClick = function () { - const trackingOptions = { label: this.trackingLabel(), dimension28: stepView.numberOfContentItems().toString() } - stepNavTracker.trackClick('pageElementInteraction', this.trackingAction(), trackingOptions) - } - - this.trackingLabel = function () { - const clickedNearbyToggle = this.target.closest('.js-step').querySelectorAll('.js-toggle-panel')[0] - return clickedNearbyToggle.getAttribute('data-position') + ' - ' + stepView.title + ' - ' + this.locateClickElement() + ': ' + this.stepNavSize + this.isOptional() - } - - // returns index of the clicked step in the overall number of steps - this.stepIndex = function () { // eslint-disable-line no-unused-vars - return this.$module.steps.index(stepView.element) + 1 - } - - this.trackingAction = function () { - return (stepView.isHidden() ? 'stepNavHidden' : 'stepNavShown') - } - - this.locateClickElement = function () { - if (this.clickedOnIcon()) { - return this.iconType() + ' click' - } else if (this.clickedOnHeading()) { - return 'Heading click' - } else { - return 'Elsewhere click' - } - } - - this.clickedOnIcon = function () { - return this.target.classList.contains('js-toggle-link') - } - - this.clickedOnHeading = function () { - return this.target.classList.contains('js-step-title-text') - } - - this.iconType = function () { - return (stepView.isHidden() ? 'Minus' : 'Plus') - } - - this.isOptional = function () { - return (this.stepIsOptional ? ' ; optional' : '') - } - } - - Gemstepnav.prototype.ComponentLinkClick = function (event, stepNavTracker, linkPosition, size) { - this.size = size - this.target = event.target - - this.trackClick = function () { - const trackingOptions = { label: this.target.getAttribute('href') + ' : ' + this.size } - const dimension28 = this.target.closest('.gem-c-step-nav__list').getAttribute('data-length') - - if (dimension28) { - trackingOptions.dimension28 = dimension28 - } - - stepNavTracker.trackClick('stepNavLinkClicked', linkPosition, trackingOptions) - } - } - - // A helper that sends a custom event request to Google Analytics if - // the GOVUK module is setup - Gemstepnav.prototype.StepNavTracker = function (uniqueId, totalSteps, totalLinks) { - this.totalSteps = totalSteps - this.totalLinks = totalLinks - this.uniqueId = uniqueId - - this.trackClick = function (category, action, options) { - // dimension26 records the total number of expand/collapse steps in this step nav - // dimension27 records the total number of links in this step nav - // dimension28 records the number of links in the step that was shown/hidden (handled in click event) - if (window.GOVUK.analytics && window.GOVUK.analytics.trackEvent) { - options = options || {} - options.dimension26 = options.dimension26 || this.totalSteps.toString() - options.dimension27 = options.dimension27 || this.totalLinks.toString() - options.dimension96 = options.dimension96 || this.uniqueId - window.GOVUK.analytics.trackEvent(category, action, options) - } - } - } - - Modules.Gemstepnav = Gemstepnav -})(window.GOVUK.Modules) diff --git a/src/assets/scss/components/_sub-navigation.scss b/src/assets/scss/components/_sub-navigation.scss index f63d0112f..d474b66e1 100644 --- a/src/assets/scss/components/_sub-navigation.scss +++ b/src/assets/scss/components/_sub-navigation.scss @@ -1,8 +1,19 @@ +.app-grid-row--flex { + display: flex; + flex-wrap: wrap; + + &::after { + display: none; + } +} + .app-subnav { // Since the back to top link is outside the flow of the document we need to create a space for it. // This number is magic and was determined by manually judging the visual spacing. margin-bottom: 100px; padding: 0 govuk-spacing(3) 0 0; + position: sticky; + top: govuk-spacing(3); @include govuk-font(16); } diff --git a/src/assets/scss/index.scss b/src/assets/scss/index.scss index 95cbd7998..25ec38cfd 100644 --- a/src/assets/scss/index.scss +++ b/src/assets/scss/index.scss @@ -4,7 +4,6 @@ $govuk-global-styles: true; @import "node_modules/@x-govuk/govuk-prototype-components/x-govuk/all"; @import "node_modules/maplibre-gl/dist/maplibre-gl"; @import "src/assets/scss/_scrollable-container.scss"; -@import "./step-by-step-nav.scss"; @import "./overrides"; @import "./components/dataset-navigation"; @import "./components/cookie-banner"; diff --git a/src/assets/scss/step-by-step-nav.scss b/src/assets/scss/step-by-step-nav.scss deleted file mode 100644 index 40d6318e3..000000000 --- a/src/assets/scss/step-by-step-nav.scss +++ /dev/null @@ -1,857 +0,0 @@ -.gem-c-step-nav { - margin-bottom: 30px -} - -@media(min-width: 40.0625em) { - .gem-c-step-nav.gem-c-step-nav--large { - margin-bottom:60px - } -} - -.js-enabled .gem-c-step-nav.js-hidden { - display: none -} - -.gem-c-step-nav__controls { - padding: 3px 3px 0 0 -} - -.gem-c-step-nav____title-text-focus { - margin-bottom: 13px; - display: inline-block -} - -.gem-c-step-nav__chevron { - box-sizing: border-box; - display: inline-block; - position: relative; - width: 1.25rem; - height: 1.25rem; - border: .0625rem solid; - border-radius: 50%; - vertical-align: text-top -} - -.gem-c-step-nav--large .gem-c-step-nav__chevron { - vertical-align: top -} - -.gem-c-step-nav__chevron::after { - content: ""; - box-sizing: border-box; - display: block; - position: absolute; - bottom: .3125rem; - left: .375rem; - width: .375rem; - height: .375rem; - -webkit-transform: rotate(-45deg); - -ms-transform: rotate(-45deg); - transform: rotate(-45deg); - border-top: .125rem solid; - border-right: .125rem solid -} - -.gem-c-step-nav__chevron--down { - -webkit-transform: rotate(180deg); - -ms-transform: rotate(180deg); - transform: rotate(180deg) -} - -.gem-c-step-nav__button { - color: #1d70b8; - cursor: pointer; - background: none; - border: 0; - margin: 0 -} - -.gem-c-step-nav__button:hover { - background: #f3f2f1 -} - -.gem-c-step-nav__button:hover .gem-c-step-nav__chevron { - color: #0b0c0c; - background: #0b0c0c -} - -.gem-c-step-nav__button:hover .gem-c-step-nav__chevron::after { - color: #f3f2f1 -} - -.gem-c-step-nav__button:hover .gem-c-step-nav__button-text { - color: #0b0c0c -} - -.gem-c-step-nav__button:focus { - outline: 0 -} - -.gem-c-step-nav__button:focus .gem-c-step-nav__chevron { - color: #0b0c0c; - background: #0b0c0c -} - -.gem-c-step-nav__button:focus .gem-c-step-nav__chevron::after { - color: #fd0 -} - -.gem-c-step-nav__button:focus .gem-c-step-nav____title-text-focus,.gem-c-step-nav__button:focus .gem-c-step-nav__toggle-link-focus { - outline: 3px solid rgba(0,0,0,0); - color: #0b0c0c; - background-color: #fd0; - box-shadow: 0 -2px #fd0,0 4px #0b0c0c; - text-decoration: none; - -webkit-box-decoration-break: clone; - box-decoration-break: clone -} - -.gem-c-step-nav__button:focus .gem-c-step-nav__toggle-link-focus { - padding-bottom: 2px -} - -.gem-c-step-nav__button::-moz-focus-inner { - border: 0 -} - -.gem-c-step-nav__button--title { - display: inline-block; - padding: 5px 0 0; - text-align: left; - color: #0b0c0c; - width: 100%; - font-size: 19px; - font-weight: bold; - line-height: 1.2; - font-family: "GDS Transport",arial,sans-serif; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale -} - -@media print { - .gem-c-step-nav__button--title { - font-family: sans-serif - } -} - -@media(min-width: 40.0625em) { - .gem-c-step-nav__button--title { - font-size:19px; - line-height: 1.2 - } -} - -.gem-c-step-nav--large .gem-c-step-nav__button--title { - font-size: 19px; - font-weight: bold; - line-height: 1.3; - font-family: "GDS Transport",arial,sans-serif; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale -} - -@media print { - .gem-c-step-nav--large .gem-c-step-nav__button--title { - font-family: sans-serif - } -} - -@media(min-width: 40.0625em) { - .gem-c-step-nav--large .gem-c-step-nav__button--title { - font-size:24px; - line-height: 1.3 - } -} - -@media(min-width: 40.0625em) { - .gem-c-step-nav--large .gem-c-step-nav__button--title { - padding-top:10px - } -} - -.gem-c-step-nav__button--controls { - position: relative; - z-index: 1; - margin: .5em 0 14px; - padding: 5px 0 5px; - font-size: 15px; - font-weight: normal; - line-height: 1.3; - font-family: "GDS Transport",arial,sans-serif; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale -} - -@media print { - .gem-c-step-nav__button--controls { - font-family: sans-serif - } -} - -@media(min-width: 40.0625em) { - .gem-c-step-nav__button--controls { - font-size:15px; - line-height: 1.3 - } -} - -.gem-c-step-nav--large .gem-c-step-nav__button--controls { - font-size: 15px; - font-weight: normal; - line-height: 1.3; - font-family: "GDS Transport",arial,sans-serif; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale -} - -@media print { - .gem-c-step-nav--large .gem-c-step-nav__button--controls { - font-family: sans-serif - } -} - -@media(min-width: 40.0625em) { - .gem-c-step-nav--large .gem-c-step-nav__button--controls { - font-size:19px; - line-height: 1.3 - } -} - -.gem-c-step-nav__button--controls:focus { - outline: 3px solid rgba(0,0,0,0); - color: #0b0c0c; - background-color: #fd0; - box-shadow: 0 -2px #fd0,0 4px #0b0c0c; - text-decoration: none; - -webkit-box-decoration-break: clone; - box-decoration-break: clone -} - -.gem-c-step-nav__button--controls:focus .gem-c-step-nav__button-text { - text-decoration: none -} - -.gem-c-step-nav__button-text { - display: inline-block; - text-align: left; - min-width: 2.5em; - margin-left: 5px -} - -.gem-c-step-nav--large .gem-c-step-nav__button-text { - min-width: 2.5em; - margin-left: 5px -} - -.gem-c-step-nav__button-text--all { - min-width: 6.2142857143em -} - -.gem-c-step-nav--large .gem-c-step-nav__button-text--all { - min-width: 6.25em -} - -.gem-c-step-nav__steps { - padding: 0; - margin: 0 -} - -.gem-c-step-nav__step { - position: relative; - padding-left: 2.8125em; - list-style: none -} - -.gem-c-step-nav__step::after { - content: ""; - position: absolute; - z-index: 2; - width: 0; - height: 100%; - border-left: solid 1px #b1b4b6; - background: #fff; - left: 0; - margin-left: .90625em; - top: .9375em -} - -@media(min-width: 40.0625em) { - .gem-c-step-nav--large .gem-c-step-nav__step { - padding-left:3.75em - } - - .gem-c-step-nav--large .gem-c-step-nav__step::after { - left: 0; - margin-left: 1.0625em; - top: 1.875em - } -} - -.gem-c-step-nav__step:last-child::before { - content: ""; - position: absolute; - z-index: 6; - bottom: 0; - left: 0; - margin-left: 7.5px; - width: 15px; - height: 0; - border-bottom: solid 1px #b1b4b6 -} - -.gem-c-step-nav__step:last-child::after { - height: -webkit-calc(100% - 15px); - height: calc(100% - 15px) -} - -.gem-c-step-nav__step:last-child .gem-c-step-nav__help::after { - height: 100% -} - -@media(min-width: 40.0625em) { - .gem-c-step-nav--large .gem-c-step-nav__step:last-child::before { - margin-left:8.75px; - width: 17.5px - } - - .gem-c-step-nav--large .gem-c-step-nav__step:last-child::after { - height: calc(100% - 30px) - } -} - -.gem-c-step-nav__step--active:last-child::before,.gem-c-step-nav__step--active .gem-c-step-nav__circle--number,.gem-c-step-nav__step--active::after,.gem-c-step-nav__step--active .gem-c-step-nav__help::after { - border-color: #0b0c0c -} - -.gem-c-step-nav__circle { - box-sizing: border-box; - position: absolute; - z-index: 5; - top: 3px; - left: 0; - width: 1.875em; - height: 1.875em; - color: #0b0c0c; - background: #fff; - border-radius: 100px; - text-align: center -} - -@media(min-width: 40.0625em) { - .gem-c-step-nav--large .gem-c-step-nav__circle { - top:11px; - width: 1.8421052632em; - height: 1.8421052632em - } -} - -.gem-c-step-nav__circle--number { - border: solid 1px #b1b4b6; - font-size: 16px; - font-weight: bold; - line-height: 29px; - font-family: "GDS Transport",arial,sans-serif; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale -} - -@media print { - .gem-c-step-nav__circle--number { - font-family: sans-serif - } -} - -@media(min-width: 40.0625em) { - .gem-c-step-nav__circle--number { - font-size:16px; - line-height: 29px - } -} - -.gem-c-step-nav--large .gem-c-step-nav__circle--number { - font-size: 16px; - font-weight: bold; - line-height: 29px; - font-family: "GDS Transport",arial,sans-serif; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale -} - -@media print { - .gem-c-step-nav--large .gem-c-step-nav__circle--number { - font-family: sans-serif - } -} - -@media(min-width: 40.0625em) { - .gem-c-step-nav--large .gem-c-step-nav__circle--number { - font-size:19px; - line-height: 34px - } -} - -.gem-c-step-nav__step--active .gem-c-step-nav__circle--number { - background-color: #0b0c0c -} - -.gem-c-step-nav__step--active .gem-c-step-nav__circle--number .gem-c-step-nav__circle-background { - text-shadow: none; - color: #fff -} - -.gem-c-step-nav__circle--logic { - left: 3px; - width: 1.5789473684em; - height: 1.5789473684em; - font-size: 19px; - font-weight: bold; - line-height: 28px; - font-family: "GDS Transport",arial,sans-serif; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale -} - -@media print { - .gem-c-step-nav__circle--logic { - font-family: sans-serif - } -} - -@media(min-width: 40.0625em) { - .gem-c-step-nav__circle--logic { - font-size:19px; - line-height: 28px - } -} - -.gem-c-step-nav--large .gem-c-step-nav__circle--logic { - font-size: 19px; - font-weight: bold; - line-height: 28px; - font-family: "GDS Transport",arial,sans-serif; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale -} - -@media print { - .gem-c-step-nav--large .gem-c-step-nav__circle--logic { - font-family: sans-serif - } -} - -@media(min-width: 40.0625em) { - .gem-c-step-nav--large .gem-c-step-nav__circle--logic { - font-size:24px; - line-height: 34px - } -} - -@media(min-width: 40.0625em) { - .gem-c-step-nav--large .gem-c-step-nav__circle--logic { - width:1.4583333333em; - height: 1.4583333333em - } -} - -.gem-c-step-nav__circle-inner { - float: right; - min-width: 100% -} - -.gem-c-step-nav__circle-background { - text-shadow: 0 -0.1em 0 #fff,.1em 0 0 #fff,0 .1em 0 #fff,-0.1em 0 0 #fff -} - -.gem-c-step-nav__circle-step-label,.gem-c-step-nav__circle-step-colon { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: 0 !important; - padding: 0 !important; - overflow: hidden !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(50%) !important; - clip-path: inset(50%) !important; - border: 0 !important; - white-space: nowrap !important; - -webkit-user-select: none; - -ms-user-select: none; - user-select: none -} - -.gem-c-step-nav__circle-step-label::before,.gem-c-step-nav__circle-step-colon::before { - content: " " -} - -.gem-c-step-nav__circle-step-label::after,.gem-c-step-nav__circle-step-colon::after { - content: " " -} - -.gem-c-step-nav__header { - border-top: solid 1px #b1b4b6; - padding: 5px 0 30px -} - -.gem-c-step-nav--large .gem-c-step-nav__header { - padding-top: 10px -} - -.js-enabled .gem-c-step-nav__header { - padding: 0 -} - -.gem-c-step-nav--active .gem-c-step-nav__header { - cursor: pointer -} - -.gem-c-step-nav__title { - margin: 0; - font-size: 19px; - font-weight: bold; - line-height: 1.4; - font-family: "GDS Transport",arial,sans-serif; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - color: #0b0c0c -} - -@media print { - .gem-c-step-nav__title { - font-family: sans-serif - } -} - -@media(min-width: 40.0625em) { - .gem-c-step-nav__title { - font-size:19px; - line-height: 1.4 - } -} - -@media print { - .gem-c-step-nav__title { - color: #000 - } -} - -.gem-c-step-nav--large .gem-c-step-nav__title { - font-size: 19px; - font-weight: bold; - line-height: 1.4; - font-family: "GDS Transport",arial,sans-serif; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale -} - -@media print { - .gem-c-step-nav--large .gem-c-step-nav__title { - font-family: sans-serif - } -} - -@media(min-width: 40.0625em) { - .gem-c-step-nav--large .gem-c-step-nav__title { - font-size:24px; - line-height: 1.4 - } -} - -.gem-c-step-nav__toggle-link { - display: block; - color: #1d70b8; - text-transform: capitalize; - padding-bottom: 30px; - font-size: 15px; - font-weight: normal; - line-height: 1.2; - font-family: "GDS Transport",arial,sans-serif; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale -} - -@media print { - .gem-c-step-nav__toggle-link { - font-family: sans-serif - } -} - -@media(min-width: 40.0625em) { - .gem-c-step-nav__toggle-link { - font-size:15px; - line-height: 1.2 - } -} - -.gem-c-step-nav--large .gem-c-step-nav__toggle-link { - font-size: 15px; - font-weight: normal; - line-height: 1.2; - font-family: "GDS Transport",arial,sans-serif; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale -} - -@media print { - .gem-c-step-nav--large .gem-c-step-nav__toggle-link { - font-family: sans-serif - } -} - -@media(min-width: 40.0625em) { - .gem-c-step-nav--large .gem-c-step-nav__toggle-link { - font-size:19px; - line-height: 1.2 - } -} - -.gem-c-step-nav__panel { - padding-bottom: 25px; - font-size: 16px; - font-weight: normal; - line-height: 1.3; - font-family: "GDS Transport",arial,sans-serif; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - color: #0b0c0c -} - -@media print { - .gem-c-step-nav__panel { - font-family: sans-serif - } -} - -@media(min-width: 40.0625em) { - .gem-c-step-nav__panel { - font-size:16px; - line-height: 1.3 - } -} - -@media print { - .gem-c-step-nav__panel { - color: #000 - } -} - -.gem-c-step-nav--large .gem-c-step-nav__panel { - font-size: 16px; - font-weight: normal; - line-height: 1.3; - font-family: "GDS Transport",arial,sans-serif; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale -} - -@media print { - .gem-c-step-nav--large .gem-c-step-nav__panel { - font-family: sans-serif - } -} - -@media(min-width: 40.0625em) { - .gem-c-step-nav--large .gem-c-step-nav__panel { - font-size:19px; - line-height: 1.3 - } -} - -.js-enabled .gem-c-step-nav__panel.js-hidden { - display: none -} - -.gem-c-step-nav__paragraph { - padding-bottom: 15px; - margin: 0; - font-size: inherit -} - -.gem-c-step-nav__paragraph+.gem-c-step-nav__list { - margin-top: -5px -} - -@media(min-width: 40.0625em) { - .gem-c-step-nav--large .gem-c-step-nav__paragraph { - padding-bottom:30px - } -} - -@media(min-width: 40.0625em) { - .gem-c-step-nav--large .gem-c-step-nav__paragraph+.gem-c-step-nav__list { - margin-top:-15px - } -} - -.gem-c-step-nav__list { - padding: 0; - padding-bottom: 10px; - list-style: none -} - -@media(min-width: 40.0625em) { - .gem-c-step-nav--large .gem-c-step-nav__list { - padding-bottom:20px - } -} - -.gem-c-step-nav__list--choice { - margin-left: 20px; - list-style: disc -} - -.gem-c-step-nav__list--choice .gem-c-step-nav__list-item--active::before { - left: -65px -} - -@media(min-width: 40.0625em) { - .gem-c-step-nav--large .gem-c-step-nav__list--choice .gem-c-step-nav__list-item--active::before { - left:-80px - } -} - -.gem-c-step-nav__list-item { - margin-bottom: 10px -} - -.gem-c-step-nav__link { - font-family: "GDS Transport",arial,sans-serif; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - text-decoration: underline; - text-decoration-thickness: max(1px, .0625rem); - text-underline-offset: .1578em -} - -@media print { - .gem-c-step-nav__link { - font-family: sans-serif - } -} - -.gem-c-step-nav__link:hover { - text-decoration-thickness: max(3px, .1875rem, .12em); - -webkit-text-decoration-skip-ink: none; - text-decoration-skip-ink: none; - -webkit-text-decoration-skip: none; - text-decoration-skip: none -} - -.gem-c-step-nav__link:focus { - outline: 3px solid rgba(0,0,0,0); - color: #0b0c0c; - background-color: #fd0; - box-shadow: 0 -2px #fd0,0 4px #0b0c0c; - text-decoration: none; - -webkit-box-decoration-break: clone; - box-decoration-break: clone -} - -.gem-c-step-nav__link:link { - color: #1d70b8 -} - -.gem-c-step-nav__link:visited { - color: #4c2c92 -} - -.gem-c-step-nav__link:hover { - color: #003078 -} - -.gem-c-step-nav__link:active { - color: #0b0c0c -} - -.gem-c-step-nav__link:focus { - color: #0b0c0c -} - -.gem-c-step-nav__link-active-context { - position: absolute !important; - width: 1px !important; - height: 1px !important; - margin: 0 !important; - padding: 0 !important; - overflow: hidden !important; - clip: rect(0 0 0 0) !important; - -webkit-clip-path: inset(50%) !important; - clip-path: inset(50%) !important; - border: 0 !important; - white-space: nowrap !important; - -webkit-user-select: none; - -ms-user-select: none; - user-select: none -} - -.gem-c-step-nav__link-active-context::before { - content: " " -} - -.gem-c-step-nav__link-active-context::after { - content: " " -} - -.gem-c-step-nav__list-item--active { - position: relative -} - -.gem-c-step-nav__list-item--active::before { - box-sizing: border-box; - content: ""; - position: absolute; - z-index: 5; - top: .6em; - left: -45px; - margin-top: -0.5px; - margin-left: 15px; - width: 15px; - height: 1px; - background: #0b0c0c -} - -@media(min-width: 40.0625em) { - .gem-c-step-nav--large .gem-c-step-nav__list-item--active::before { - left:-60px; - margin-left: 17.5px - } -} - -.gem-c-step-nav__list-item--active .gem-c-step-nav__link:link,.gem-c-step-nav__list-item--active .gem-c-step-nav__link:visited { - color: #0b0c0c -} - -@media print { - .gem-c-step-nav__list-item--active .gem-c-step-nav__link:link,.gem-c-step-nav__list-item--active .gem-c-step-nav__link:visited { - color: #000 - } -} - -.gem-c-step-nav__list-item--active .gem-c-step-nav__link:hover { - color: rgba(11,12,12,.99) -} - -.gem-c-step-nav__list-item--active .gem-c-step-nav__link:active,.gem-c-step-nav__list-item--active .gem-c-step-nav__link:focus { - color: #0b0c0c -} - -@media print { - .gem-c-step-nav__list-item--active .gem-c-step-nav__link:active,.gem-c-step-nav__list-item--active .gem-c-step-nav__link:focus { - color: #000 - } -} - -.gem-c-step-nav__context { - display: inline-block; - font-weight: normal; - color: #505a5f -} - -.gem-c-step-nav__context::before { - content: " – " -} - -@media print { - .gem-c-step-nav__panel { - display: block !important - } -} diff --git a/src/views/includes/_dataset-page-header.html b/src/views/includes/_dataset-page-header.html index 5f929868b..b56fad4be 100644 --- a/src/views/includes/_dataset-page-header.html +++ b/src/views/includes/_dataset-page-header.html @@ -1,4 +1,3 @@ -
Your data does not need to be complete or perfect to start. You can start with what you have and improve it over time.
+ {% if authority and authority === "some" %} +If we have data from alternative sources, you can download it from your dataset details page to help you get started.
+ {% endif %} + +Check your data to find out if it is ready to publish or if you need to make any changes.
+When your data is ready, you can publish it on your website.
+You can check your data using any of the following:
+You must publish your data:
+You can publish your data using any of the following:
+You must include a statement to confirm that you provided the data under the Open Government Licence.
+ +An endpoint URL is where anyone can download your data.
+Endpoints are usually either a:
+Help with providing data using an ArcGIS data layer
+An ArcGIS data layer URL usually looks like this:
+https://maps.example.gov.uk/arcgis/rest/services/Planning/LocalPlans/FeatureServer/0
This URL is made up of:
+You only need to make changes to your data at your endpoint URL. Do not change your endpoint URL when you make updates.
+ +For each dataset, your webpage must include a:
+Within your endpoint, you will need a documentation-url for each record in your dataset.
+ +Each record in your dataset needs a documentation-url, so that we can find the part of your webpage that includes the record.
+Each documentation-URL must be unique. There are 2 ways that you can create a unique URL.
+1. One page per record
+Give each record its own webpage, so that the documentation-url is the full page address. For example, www.yourwebsite.gov.uk/planning/article-4-directions/smith-road.
2. Multiple records
+List all records on a single page and add an anchor link for each one. For example, yourwebsite.gov.uk/planning/article-4-directions#smith-road.
You need to check that your publishing system supports anchor links (also called fragment identifiers).
+ +If a record is for a legal document, you need to add a document-url that links straight to the file. For example, a direction notice or order.
+ +View example webpages that show how to publish planning data.
+After you publish, you should provide your data to the Planning Data Platform.
+You need to submit:
+Providing your data will help to:
+Visit your organisation's dashboard anytime to view the data you have provided and the datasets you still need to provide.
+If there are any issues with your data after you provide it, we will let you know what you can do to improve it.
+If you use the check and provide your data service, you only need to make changes to your data at your endpoint URL. Planning.data.gov.uk will update automatically.
+If you create a new endpoint URL, you will need to provide your data again.
+