const $ = require('jquery'); import 'jquery.easing'; class SearchTiles { constructor(tileWrapper) { this.tiles = tileWrapper.find('.tile a'); this.tiles.each((i, el) => { const tile = $(el); if (tile.text().length > 48) { tile.text( tile.text().substr(0, 48) + '…' ); } }) } } class ExtendedSearch { constructor(section) { this.section = section.addClass('initiated'); $('#search-expand-collapse').on('click', (e) => { e.preventDefault(); $(e.currentTarget).toggleClass('open'); this.section.stop().slideToggle(500, 'swing'); }); section.find('.ev-search-btn').on('click', (e) => { e.preventDefault(); $(e.currentTarget).toggleClass('open').next('.ev-filter').stop().slideToggle(400, 'easeOutQuad'); }); section.find('label.acc a').each((i, el) => { new FormAccordion($(el)); }); section.find('.reset').on('click', (e) => { e.preventDefault(); const form = $(e.currentTarget).closest('form'); form[0].reset(); form.find('.half-checked').removeClass('half-checked'); $('html, body').animate({ scrollTop: form.offset().top - 120 }, 500, 'easeOutQuad'); }); $('.datepicker').each((i, el) => { $(el).datepicker({ changeYear: true, changeMonth: true}); }); } } class FormAccordion{ constructor(toggle) { const t = this; this.toggle = toggle; this.label = this.toggle.parent('label'); this.checkbox = this.label.prev('input[type="checkbox"]'); this.subs = this.label.next('.ev-filter'); this.toggle.on('click', (e) => { e.preventDefault(); e.stopPropagation(); this.label.toggleClass('open'); this.subs.stop().slideToggle(400, 'swing'); }) this.subs.find('input[type="checkbox"]').on('change', () => { this.checkSelection(); }) this.checkbox.on('change', (e) => { const isChecked = $(e.currentTarget).removeClass('half-checked').prop('checked'); this.subs.find('input[type="checkbox"]').prop('checked', isChecked); }) this.checkSelection(); } checkSelection() { const checked = this.subs.find('input[type="checkbox"]:checked').length; const unchecked = this.subs.find('input[type="checkbox"]:not(:checked)').length; if (checked === 0) { this.checkbox.prop('checked', false).removeClass('half-checked'); } else if (unchecked === 0) { this.checkbox.prop('checked', true).removeClass('half-checked'); } else { this.checkbox.prop('checked', false).addClass('half-checked'); } } } $('body').on('ihk-init dynamic-component-loaded', function () { $('.extended-search:not(.initiated)').each(function(i) { new ExtendedSearch($(this)); }); $('.search:not(.initiated) .tiles').each(function () { new SearchTiles($(this)); }) })