No notes defined.
{# <div class="uol-col-container uol-example-col-container uol-col-debug"> #}
<div class="uol-filters-panel {{ 'uol-filters-panel--open' if open }}" id="search-filters" aria-labelledby="filters-panel-title" role="group">
<div class="dialog-overlay" tabindex="-1" data-a11y-dialog-hide></div>
<h2 id="filters-panel-title" class="uol-filters-panel__title">Filters</h2>
{% for input in filter_inputs %}
{% render '@uol-form-input', input %}
{% endfor %}
<div class="uol-filters-panel__footer">
{% render '@uol-button', {
"type": "button",
"content": "Clear all filters",
"icon": "mdiDeleteForeverOutline",
"large_icon": true,
"style": "secondary",
"id": "clear_filter_panel"
} %}
{% render '@uol-button', results_button %}
</div>
</div>
<div class="uol-filters-panel__overlay"></div>
{# </div> #}
<div class="uol-filters-panel " id="search-filters" aria-labelledby="filters-panel-title" role="group">
<div class="dialog-overlay" tabindex="-1" data-a11y-dialog-hide></div>
<h2 id="filters-panel-title" class="uol-filters-panel__title">Filters</h2>
<div class="uol-form__input-container
">
<div role="group" aria-labelledby="filter-study-mode-group filter-study-mode-group-hint" class="uol-form__custom-fieldset">
<span id="filter-study-mode-group" class="uol-form__custom__legend">Mode of study</span>
<span class="uol-form__input-label__hint" id="filter-study-mode-group-hint">Select all that apply </span>
<div class="uol-form__input--checkbox-wrapper">
<input class="uol-form__input--checkbox" type="checkbox" id="filter-study-mode-1" name="filter-study-mode-group" value="">
<label class="uol-form__input--checkbox-label" for="filter-study-mode-1" id="filter-study-mode-1-label">Full time</label>
<span class="uol-form__input--checkbox-custom">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="38" height="38" focusable="false" aria-hidden="true">
<path fill="#000" fill-rule="nonzero" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path>
</svg>
</span>
</div>
<div class="uol-form__input--checkbox-wrapper">
<input class="uol-form__input--checkbox" type="checkbox" id="filter-study-mode-2" name="filter-study-mode-group" value="">
<label class="uol-form__input--checkbox-label" for="filter-study-mode-2" id="filter-study-mode-2-label">Part time</label>
<span class="uol-form__input--checkbox-custom">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="38" height="38" focusable="false" aria-hidden="true">
<path fill="#000" fill-rule="nonzero" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path>
</svg>
</span>
</div>
</div>
</div>
<div class="uol-form__input-container
">
<div role="group" aria-labelledby="filter-delivery-type-group filter-delivery-type-group-hint" class="uol-form__custom-fieldset">
<span id="filter-delivery-type-group" class="uol-form__custom__legend">Delivery type</span>
<span class="uol-form__input-label__hint" id="filter-delivery-type-group-hint">Select all that apply </span>
<div class="uol-form__input--checkbox-wrapper">
<input class="uol-form__input--checkbox" type="checkbox" id="filter-delivery-type-campus" name="filter-delivery-type-campus" value="">
<label class="uol-form__input--checkbox-label" for="filter-delivery-type-campus" id="filter-delivery-type-campus-label">On campus</label>
<span class="uol-form__input--checkbox-custom">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="38" height="38" focusable="false" aria-hidden="true">
<path fill="#000" fill-rule="nonzero" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path>
</svg>
</span>
</div>
<div class="uol-form__input--checkbox-wrapper">
<input class="uol-form__input--checkbox" type="checkbox" id="filter-delivery-type-blended" name="filter-delivery-type-blended" value="">
<label class="uol-form__input--checkbox-label" for="filter-delivery-type-blended" id="filter-delivery-type-blended-label">Blended learning</label>
<span class="uol-form__input--checkbox-custom">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="38" height="38" focusable="false" aria-hidden="true">
<path fill="#000" fill-rule="nonzero" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path>
</svg>
</span>
</div>
<div class="uol-form__input--checkbox-wrapper">
<input class="uol-form__input--checkbox" type="checkbox" id="filter-delivery-type-online" name="filter-delivery-type-online" value="">
<label class="uol-form__input--checkbox-label" for="filter-delivery-type-online" id="filter-delivery-type-online-label">Online exclusive</label>
<span class="uol-form__input--checkbox-custom">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="38" height="38" focusable="false" aria-hidden="true">
<path fill="#000" fill-rule="nonzero" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path>
</svg>
</span>
</div>
</div>
</div>
<div class="uol-form__input-container
">
<div role="group" aria-labelledby="filter-course-type filter-course-type-hint" class="uol-form__custom-fieldset">
<span id="filter-course-type" class="uol-form__custom__legend">Course type</span>
<span class="uol-form__input-label__hint" id="filter-course-type-hint">Select all that apply </span>
<div class="uol-form__input--checkbox-wrapper">
<input class="uol-form__input--checkbox" type="checkbox" id="filter-course-type-foundation" name="filter-course-type-foundation" value="">
<label class="uol-form__input--checkbox-label" for="filter-course-type-foundation" id="filter-course-type-foundation-label">Foundation year</label>
<span class="uol-form__input--checkbox-custom">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="38" height="38" focusable="false" aria-hidden="true">
<path fill="#000" fill-rule="nonzero" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path>
</svg>
</span>
</div>
<div class="uol-form__input--checkbox-wrapper">
<input class="uol-form__input--checkbox" type="checkbox" id="filter-course-type-apprenticeship" name="filter-course-type-apprenticeship" value="">
<label class="uol-form__input--checkbox-label" for="filter-course-type-apprenticeship" id="filter-course-type-apprenticeship-label">Apprenticeships</label>
<span class="uol-form__input--checkbox-custom">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="38" height="38" focusable="false" aria-hidden="true">
<path fill="#000" fill-rule="nonzero" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path>
</svg>
</span>
</div>
<div class="uol-form__input--checkbox-wrapper">
<input class="uol-form__input--checkbox" type="checkbox" id="filter-course-type-intercalated" name="filter-course-type-intercalated" value="">
<label class="uol-form__input--checkbox-label" for="filter-course-type-intercalated" id="filter-course-type-intercalated-label">Intercalated degree</label>
<span class="uol-form__input--checkbox-custom">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="38" height="38" focusable="false" aria-hidden="true">
<path fill="#000" fill-rule="nonzero" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path>
</svg>
</span>
</div>
</div>
</div>
<div class="uol-form__input-container
">
<label class="uol-form__input-label " for="filter-subject" id="filter-subject-label">
<span class="uol-form__input-label__text">Subject</span>
<span class="uol-form__input-label__hint" id="filter-subject-hint">Select one option </span>
</label>
<div class="uol-form__input-wrapper " data-field-invalid=false>
<select class="uol-form__input uol-form__input--select " name="filter-subject" id="filter-subject" aria-label="Select Subject">
<option value="">Select an option</option>
<option value="art_design_media_and_communication">Art, Design, Media and Communication</option>
<option value="biological_biomedical_and_sports_sciences">Biological, Biomedical and Sports Sciences</option>
<option value="business_management_finance_and_economics">Business, Management, Finance and Economics</option>
<option value="chemistry_food_science_and_nutrition">Chemistry, Food Science and Nutrition</option>
<option value="education_sociology_and_social_policy">Education, Sociology and Social Policy</option>
<option value="engineering_and_computing">Engineering and Computing</option>
<option value="english_history_and_humanities">English, History and Humanities</option>
<option value="geography_environment_and_earth_sciences">Geography, Environment and Earth Sciences</option>
<option value="languages_cultures_and_societies">Languages, Cultures and Societies</option>
<option value="law_criminology_and_politics">Law, Criminology and Politics</option>
<option value="mathematics_and_physics">Mathematics and Physics</option>
<option value="medicine_dentistry_psychology_and_healthcare">Medicine, Dentistry, Psychology and Healthcare</option>
<option value="music_theatre_and_performance">Music, Theatre and Performance</option>
</select>
<svg class="uol-form__input__chevron" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24" focusable="false" aria-hidden="true">
<path fill="none" d="M7.41,8.58L12,13.17L16.59,8.58L18,10L12,16L6,10L7.41,8.58Z" />
</svg>
</div>
</div>
<div class="uol-filters-panel__footer">
<button id="clear_filter_panel" class="uol-button uol-button--secondary
uol-icon uol-icon--mdiDeleteForeverOutline
uol-icon--icon-only--large
" type="button">Clear all filters</button>
<button id="show_search_results" class="uol-button uol-button--primary
" type="button">Show 14 search results</button>
</div>
</div>
<div class="uol-filters-panel__overlay"></div>
$filters-z-index: 1000;
.uol-filters-panel {
box-sizing: border-box;
top: 0;
bottom: 0;
left: 0;
background-color: $color-white;
width: 100%;
box-shadow: 0 15px 25px 0 rgba(#000, 0), 0 5px 10px 0 rgba(#000, 0);
transition: all 0.7s ease;
opacity: 1;
z-index: $filters-z-index;
.uol-form__custom__legend {
margin-bottom: $spacing-1;
}
.uol-form__input-label__hint {
padding-bottom: $spacing-3;
}
.js & {
@include media("<uol-media-l") {
padding: $spacing-4 $spacing-4 $spacing-5;
position: fixed;
transform: translateX(-100%);
overflow-y: auto;
}
}
@media (prefers-reduced-motion) {
transition: none;
}
@include media(">=uol-media-m") {
.js & {
width: calc((100% - #{$spacing-4}) / 12 * 9);
}
}
// Like remove all this to accommodate in normal flow
.js & {
@include media(">=uol-media-l") {
position: relative;
width: auto;
transform: translateX(0);
// width: calc((100% - #{$spacing-5}) / 12 * 8);
}
}
.uol-form__input-container {
padding-bottom: $spacing-3;
@include media(">=uol-media-l") {
padding-bottom: calc(#{$spacing-3} + #{$spacing-2}); // increase by 8px, gives 20px
}
&:after {
content: "";
display: block;
position: absolute;
right: 0;
bottom: -#{$spacing-4};
left: 0;
height: 2px;
background: $color-border--light;
}
}
.uol-form__custom-fieldset {
margin-bottom: 0;
> *:last-child {
margin-bottom: 0;
}
}
}
.uol-filters-panel--open {
.js & {
transform: translateX(0);
box-shadow: 0 15px 25px 0 rgba(#000, 0.15), 0 5px 10px 0 rgba(#000, 0.5);
}
@include media(">=uol-media-l") {
box-shadow: none;
}
.uol-form__input-wrapper__num-of-selected-message {
top: 11px;
}
}
// TODO: Remove ID dependency
#filters-close-button {
position: absolute;
top: $spacing-4;
right: $spacing-4;
@include media(">=uol-media-l") {
display: none;
}
}
// TODO: Remove ID dependency
#show_search_results {
@include media(">=uol-media-l") {
display: none;
}
}
// fix so filter panel text fits on one line
#clear_filter_panel {
padding: 0.8em 2.1em;
}
.uol-filters-panel__title {
@extend %text-size-heading-4;
@extend %uol-font-sans-serif;
font-weight: $font-weight-bold--sans-serif;
margin-top: 0;
}
.uol-filters-panel__title__count {
@extend %text-size-heading-6;
}
.uol-filters-panel__footer {
button {
display: block;
width: auto;
margin-bottom: $spacing-5;
&:first-of-type {
margin-top: $spacing-4;
}
&:last-of-type {
margin-bottom: 0;
}
}
}
.uol-filters-panel__overlay {
position: fixed;
top: -100%;
left: 0;
right: 0;
height: 100%;
background: rgba($color-black--dark, 0);
transition: background 0.7s ease;
.uol-filters-panel--open + & {
position: fixed;
top: 0;
left: 0;
bottom: 0;
right: 0;
background: rgba($color-black--dark, 0.78);
z-index: ($filters-z-index - 1);
}
}
// No max width for small input within filter panel
.uol-filters-panel {
.uol-form__input-container--small {
max-width: none;
}
}
//Checkbox within filters panel
.uol-filters-panel {
.uol-form__input--checkbox-custom {
svg {
height: 20px;
width: 20px;
}
}
}
.uol-filters-panel--open {
.uol-form__input--checkbox-custom {
svg {
height: 36px;
width: 36px;
}
}
}
export const uolFiltersPanel = () => {
const filtersPanel = document.querySelector('.uol-filters-panel')
if (filtersPanel) {
const btnCloseFilters = document.createElement('button');
btnCloseFilters.id = 'filters-close-button';
btnCloseFilters.type = 'button';
btnCloseFilters.classList.add('uol-button');
btnCloseFilters.classList.add('uol-button--secondary');
btnCloseFilters.classList.add('uol-icon');
btnCloseFilters.classList.add('uol-icon--icon-only');
btnCloseFilters.classList.add('uol-icon--icon-only--large');
btnCloseFilters.innerHTML = `
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" focusable="false" aria-hidden="true">
<path fill="#000000" fill-rule="nonzero" d="M19,6.41L17.59,5L12,10.59L6.41,5L5,6.41L10.59,12L5,17.59L6.41,19L12,13.41L17.59,19L19,17.59L13.41,12L19,6.41Z"></path> </svg>
<span class="uol-icon__label">Close filter panel</span>
`;
filtersPanel.insertAdjacentElement('afterbegin', btnCloseFilters);
// Change text of clear filters button and filters title text for if single or plural
const numOfFilters = filtersPanel.getElementsByClassName("uol-form__input-container").length;
const clearFiltersButtonText = document.getElementById('clear_filter_panel').getElementsByTagName('span')[0];
const filtersTitleText = document.getElementById('filters-panel-title');
clearFiltersButtonText.innerHTML = (numOfFilters == 1) ? "Clear filter" : "Clear all filters";
filtersTitleText.innerHTML = (numOfFilters == 1) ? "Filter" : "Filters";
// in DS environment show chips placeholder
if (window.location.href.indexOf('/components/') > -1) {
const para = document.createElement("div");
para.classList.add("uol-chips-ds-container");
const node = document.createTextNode("Placeholder for chips: Filter selections will add chips to this area in live environment.");
para.appendChild(node);
const resultsItems = document.getElementsByClassName("uol-results")[0];
const searchResults = document.getElementsByClassName("uol-search-results__results")[0];
searchResults.insertBefore(para, resultsItems);
}
// Clear Filter panel on click of Clear all filters button
const clearFiltersBtn = document.querySelector('#clear_filter_panel')
clearFiltersBtn.onclick = () => {
//Get all checkboxes within the filter panel and clear
const checkboxes = filtersPanel.querySelectorAll('input[type=checkbox]')
checkboxes.forEach(checkbox => checkbox.checked = false);
// Get all radios within the filter panel and clear
const radios = filtersPanel.querySelectorAll('input[type=radio]')
radios.forEach(radio => radio.checked = false);
//Get all selects and set back to default
const selects = filtersPanel.querySelectorAll('select')
selects.forEach(select => select.selectedIndex = -1);
//Get all selects and set back to default
const customSelects = filtersPanel.querySelectorAll('input[type=text]')
customSelects.forEach(customSelect => customSelect.value = "");
//Get all li elements in filter panel and clear them
const listItems = filtersPanel.querySelectorAll('li')
listItems.forEach(listItem => {
listItem.setAttribute('data-option-value', 'false');
listItem.setAttribute('aria-selected', 'false');
listItem.removeAttribute('data-filter-hidden');
if (listItem.getElementsByTagName('svg')[0]) {
listItem.getElementsByTagName('svg')[0].remove();
}
});
}
}
}
{
"open": false,
"filter_inputs": [
{
"id": "filter-study-mode",
"name": "filter-study-mode",
"label": "Mode of study",
"type": "checkbox",
"legend": "Mode of study",
"hint": "Select all that apply",
"heading_level": "h3",
"group_label_id": "filter-study-mode-group",
"options": [
{
"id": "filter-study-mode-1",
"name": "filter-study-mode-group",
"value": "full-time",
"label": "Full time"
},
{
"id": "filter-study-mode-2",
"name": "filter-study-mode-group",
"value": "part-time",
"label": "Part time"
}
]
},
{
"id": "filter-delivery-type",
"name": "filter-delivery-type",
"label": "Delivery type",
"type": "checkbox",
"legend": "Delivery type",
"hint": "Select all that apply",
"heading_level": "h3",
"group_label_id": "filter-delivery-type-group",
"options": [
{
"id": "filter-delivery-type-campus",
"name": "filter-delivery-type-campus",
"value": "campus",
"label": "On campus"
},
{
"id": "filter-delivery-type-blended",
"name": "filter-delivery-type-blended",
"value": "blended",
"label": "Blended learning"
},
{
"id": "filter-delivery-type-online",
"name": "filter-delivery-type-online",
"value": "online",
"label": "Online exclusive"
}
]
},
{
"id": "filter-course-type",
"name": "filter-course-type",
"label": "Course type",
"type": "checkbox",
"legend": "Course type",
"hint": "Select all that apply",
"heading_level": "h3",
"group_label_id": "filter-course-type",
"options": [
{
"id": "filter-course-type-foundation",
"name": "filter-course-type-foundation",
"value": "foundation",
"label": "Foundation year"
},
{
"id": "filter-course-type-apprenticeship",
"name": "filter-course-type-apprenticeship",
"value": "apprenticeship",
"label": "Apprenticeships"
},
{
"id": "filter-course-type-intercalated",
"name": "filter-course-type-intercalated",
"value": "intercalated",
"label": "Intercalated degree"
}
]
},
{
"type": "select",
"label": "Subject",
"hint": "Select one option",
"name": "filter-subject",
"id": "filter-subject",
"invalid": false,
"options": [
{
"value": "art_design_media_and_communication",
"label": "Art, Design, Media and Communication"
},
{
"value": "biological_biomedical_and_sports_sciences",
"label": "Biological, Biomedical and Sports Sciences"
},
{
"value": "business_management_finance_and_economics",
"label": "Business, Management, Finance and Economics"
},
{
"value": "chemistry_food_science_and_nutrition",
"label": "Chemistry, Food Science and Nutrition"
},
{
"value": "education_sociology_and_social_policy",
"label": "Education, Sociology and Social Policy"
},
{
"value": "engineering_and_computing",
"label": "Engineering and Computing"
},
{
"value": "english_history_and_humanities",
"label": "English, History and Humanities"
},
{
"value": "geography_environment_and_earth_sciences",
"label": "Geography, Environment and Earth Sciences"
},
{
"value": "languages_cultures_and_societies",
"label": "Languages, Cultures and Societies"
},
{
"value": "law_criminology_and_politics",
"label": "Law, Criminology and Politics"
},
{
"value": "mathematics_and_physics",
"label": "Mathematics and Physics"
},
{
"value": "medicine_dentistry_psychology_and_healthcare",
"label": "Medicine, Dentistry, Psychology and Healthcare"
},
{
"value": "music_theatre_and_performance",
"label": "Music, Theatre and Performance"
}
]
}
],
"results_button": {
"type": "button",
"content": "Show 14 search results",
"style": "primary",
"id": "show_search_results"
}
}