(function () { 'use strict'; function noop() {} function assign(target) { var arguments$1 = arguments; var k, source, i = 1, len = arguments.length; for (; i < len; i++) { source = arguments$1[i]; for (k in source) { target[k] = source[k]; } } return target; } function appendNode(node, target) { target.appendChild(node); } function insertNode(node, target, anchor) { target.insertBefore(node, anchor); } function detachNode(node) { node.parentNode.removeChild(node); } function destroyEach(iterations) { for (var i = 0; i < iterations.length; i += 1) { if (iterations[i]) { iterations[i].d(); } } } function createElement(name) { return document.createElement(name); } function createText(data) { return document.createTextNode(data); } function createComment() { return document.createComment(''); } function addListener(node, event, handler) { node.addEventListener(event, handler, false); } function removeListener(node, event, handler) { node.removeEventListener(event, handler, false); } function setAttribute(node, attribute, value) { node.setAttribute(attribute, value); } function setStyle(node, key, value) { node.style.setProperty(key, value); } function selectOption(select, value) { for (var i = 0; i < select.options.length; i += 1) { var option = select.options[i]; if (option.__value === value) { option.selected = true; return; } } } function selectValue(select) { var selectedOption = select.querySelector(':checked') || select.options[0]; return selectedOption && selectedOption.__value; } function blankObject() { return Object.create(null); } function destroy(detach) { this.destroy = noop; this.fire('destroy'); this.set = this.get = noop; if (detach !== false) { this._fragment.u(); } this._fragment.d(); this._fragment = this._state = null; } function differs(a, b) { return ( a !== b || (a && typeof a === 'object') || typeof a === 'function' ); } function dispatchObservers(component, group, changed, newState, oldState) { for (var key in group) { if (!changed[key]) { continue; } var newValue = newState[key]; var oldValue = oldState[key]; var callbacks = group[key]; if (!callbacks) { continue; } for (var i = 0; i < callbacks.length; i += 1) { var callback = callbacks[i]; if (callback.__calling) { continue; } callback.__calling = true; callback.call(component, newValue, oldValue); callback.__calling = false; } } } function fire(eventName, data) { var this$1 = this; var handlers = eventName in this._handlers && this._handlers[eventName].slice(); if (!handlers) { return; } for (var i = 0; i < handlers.length; i += 1) { handlers[i].call(this$1, data); } } function get(key) { return key ? this._state[key] : this._state; } function init(component, options) { component._observers = { pre: blankObject(), post: blankObject() }; component._handlers = blankObject(); component._bind = options._bind; component.options = options; component.root = options.root || component; component.store = component.root.store || options.store; } function observe(key, callback, options) { var group = options && options.defer ? this._observers.post : this._observers.pre; (group[key] || (group[key] = [])).push(callback); if (!options || options.init !== false) { callback.__calling = true; callback.call(this, this._state[key]); callback.__calling = false; } return { cancel: function () { var index = group[key].indexOf(callback); if (~index) { group[key].splice(index, 1); } }, }; } function on(eventName, handler) { if (eventName === 'teardown') { return this.on('destroy', handler); } var handlers = this._handlers[eventName] || (this._handlers[eventName] = []); handlers.push(handler); return { cancel: function () { var index = handlers.indexOf(handler); if (~index) { handlers.splice(index, 1); } }, }; } function set(newState) { this._set(assign({}, newState)); if (this.root._lock) { return; } this.root._lock = true; callAll(this.root._beforecreate); callAll(this.root._oncreate); callAll(this.root._aftercreate); this.root._lock = false; } function _set(newState) { var oldState = this._state, changed = {}, dirty = false; for (var key in newState) { if (differs(newState[key], oldState[key])) { changed[key] = dirty = true; } } if (!dirty) { return; } this._state = assign({}, oldState, newState); this._recompute(changed, this._state); if (this._bind) { this._bind(changed, this._state); } if (this._fragment) { dispatchObservers( this, this._observers.pre, changed, this._state, oldState ); this._fragment.p(changed, this._state); dispatchObservers( this, this._observers.post, changed, this._state, oldState ); } } function callAll(fns) { while (fns && fns.length) { fns.pop()(); } } function _mount(target, anchor) { this._fragment.m(target, anchor); } function _unmount() { if (this._fragment) { this._fragment.u(); } } var proto = { destroy: destroy, get: get, fire: fire, observe: observe, on: on, set: set, teardown: destroy, _recompute: noop, _set: _set, _mount: _mount, _unmount: _unmount, }; /* client/source/app/components/Loader.html generated by Svelte v1.50.0 */ function data() { return { class: 'off', }; } function oncreate$1() { var this$1 = this; setTimeout(function () { return this$1.set({ class: 'on' }); }, 0); } function create_main_fragment$1(state, component) { var div, div_class_value; return { c: function create() { div = createElement('div'); div.textContent = 'loading'; this.h(); }, h: function hydrate() { div.className = div_class_value = 'loader ' + state.class; }, m: function mount(target, anchor) { insertNode(div, target, anchor); }, p: function update(changed, state) { if ( changed.class && div_class_value !== (div_class_value = 'loader ' + state.class) ) { div.className = div_class_value; } }, u: function unmount() { detachNode(div); }, d: noop, }; } function Loader(options) { init(this, options); this._state = assign(data(), options.data); var _oncreate = oncreate$1.bind(this); if (!options.root) { this._oncreate = [_oncreate]; } else { this.root._oncreate.push(_oncreate); } this._fragment = create_main_fragment$1(this._state, this); if (options.target) { this._fragment.c(); this._fragment.m(options.target, options.anchor || null); callAll(this._oncreate); } } assign(Loader.prototype, proto); /** * @category Common Helpers * @summary Is the given argument an instance of Date? * * @description * Is the given argument an instance of Date? * * @param {*} argument - the argument to check * @returns {Boolean} the given argument is an instance of Date * * @example * // Is 'mayonnaise' a Date? * var result = isDate('mayonnaise') * //=> false */ function isDate(argument) { return argument instanceof Date; } var is_date = isDate; var MILLISECONDS_IN_HOUR = 3600000; var MILLISECONDS_IN_MINUTE = 60000; var DEFAULT_ADDITIONAL_DIGITS = 2; var parseTokenDateTimeDelimeter = /[T ]/; var parseTokenPlainTime = /:/; // year tokens var parseTokenYY = /^(\d{2})$/; var parseTokensYYY = [ /^([+-]\d{2})$/, // 0 additional digits /^([+-]\d{3})$/, // 1 additional digit /^([+-]\d{4})$/, // 2 additional digits ]; var parseTokenYYYY = /^(\d{4})/; var parseTokensYYYYY = [ /^([+-]\d{4})/, // 0 additional digits /^([+-]\d{5})/, // 1 additional digit /^([+-]\d{6})/, // 2 additional digits ]; // date tokens var parseTokenMM = /^-(\d{2})$/; var parseTokenDDD = /^-?(\d{3})$/; var parseTokenMMDD = /^-?(\d{2})-?(\d{2})$/; var parseTokenWww = /^-?W(\d{2})$/; var parseTokenWwwD = /^-?W(\d{2})-?(\d{1})$/; // time tokens var parseTokenHH = /^(\d{2}([.,]\d*)?)$/; var parseTokenHHMM = /^(\d{2}):?(\d{2}([.,]\d*)?)$/; var parseTokenHHMMSS = /^(\d{2}):?(\d{2}):?(\d{2}([.,]\d*)?)$/; // timezone tokens var parseTokenTimezone = /([Z+-].*)$/; var parseTokenTimezoneZ = /^(Z)$/; var parseTokenTimezoneHH = /^([+-])(\d{2})$/; var parseTokenTimezoneHHMM = /^([+-])(\d{2}):?(\d{2})$/; /** * @category Common Helpers * @summary Convert the given argument to an instance of Date. * * @description * Convert the given argument to an instance of Date. * * If the argument is an instance of Date, the function returns its clone. * * If the argument is a number, it is treated as a timestamp. * * If an argument is a string, the function tries to parse it. * Function accepts complete ISO 8601 formats as well as partial implementations. * ISO 8601: http://en.wikipedia.org/wiki/ISO_8601 * * If all above fails, the function passes the given argument to Date constructor. * * @param {Date|String|Number} argument - the value to convert * @param {Object} [options] - the object with options * @param {0 | 1 | 2} [options.additionalDigits=2] - the additional number of digits in the extended year format * @returns {Date} the parsed date in the local time zone * * @example * // Convert string '2014-02-11T11:30:30' to date: * var result = parse('2014-02-11T11:30:30') * //=> Tue Feb 11 2014 11:30:30 * * @example * // Parse string '+02014101', * // if the additional number of digits in the extended year format is 1: * var result = parse('+02014101', {additionalDigits: 1}) * //=> Fri Apr 11 2014 00:00:00 */ function parse(argument, dirtyOptions) { if (is_date(argument)) { // Prevent the date to lose the milliseconds when passed to new Date() in IE10 return new Date(argument.getTime()); } else if (typeof argument !== 'string') { return new Date(argument); } var options = dirtyOptions || {}; var additionalDigits = options.additionalDigits; if (additionalDigits == null) { additionalDigits = DEFAULT_ADDITIONAL_DIGITS; } else { additionalDigits = Number(additionalDigits); } var dateStrings = splitDateString(argument); var parseYearResult = parseYear(dateStrings.date, additionalDigits); var year = parseYearResult.year; var restDateString = parseYearResult.restDateString; var date = parseDate(restDateString, year); if (date) { var timestamp = date.getTime(); var time = 0; var offset; if (dateStrings.time) { time = parseTime(dateStrings.time); } if (dateStrings.timezone) { offset = parseTimezone(dateStrings.timezone); } else { // get offset accurate to hour in timezones that change offset offset = new Date(timestamp + time).getTimezoneOffset(); offset = new Date( timestamp + time + offset * MILLISECONDS_IN_MINUTE ).getTimezoneOffset(); } return new Date(timestamp + time + offset * MILLISECONDS_IN_MINUTE); } else { return new Date(argument); } } function splitDateString(dateString) { var dateStrings = {}; var array = dateString.split(parseTokenDateTimeDelimeter); var timeString; if (parseTokenPlainTime.test(array[0])) { dateStrings.date = null; timeString = array[0]; } else { dateStrings.date = array[0]; timeString = array[1]; } if (timeString) { var token = parseTokenTimezone.exec(timeString); if (token) { dateStrings.time = timeString.replace(token[1], ''); dateStrings.timezone = token[1]; } else { dateStrings.time = timeString; } } return dateStrings; } function parseYear(dateString, additionalDigits) { var parseTokenYYY = parseTokensYYY[additionalDigits]; var parseTokenYYYYY = parseTokensYYYYY[additionalDigits]; var token; // YYYY or ±YYYYY token = parseTokenYYYY.exec(dateString) || parseTokenYYYYY.exec(dateString); if (token) { var yearString = token[1]; return { year: parseInt(yearString, 10), restDateString: dateString.slice(yearString.length), }; } // YY or ±YYY token = parseTokenYY.exec(dateString) || parseTokenYYY.exec(dateString); if (token) { var centuryString = token[1]; return { year: parseInt(centuryString, 10) * 100, restDateString: dateString.slice(centuryString.length), }; } // Invalid ISO-formatted year return { year: null, }; } function parseDate(dateString, year) { // Invalid ISO-formatted year if (year === null) { return null; } var token; var date; var month; var week; // YYYY if (dateString.length === 0) { date = new Date(0); date.setUTCFullYear(year); return date; } // YYYY-MM token = parseTokenMM.exec(dateString); if (token) { date = new Date(0); month = parseInt(token[1], 10) - 1; date.setUTCFullYear(year, month); return date; } // YYYY-DDD or YYYYDDD token = parseTokenDDD.exec(dateString); if (token) { date = new Date(0); var dayOfYear = parseInt(token[1], 10); date.setUTCFullYear(year, 0, dayOfYear); return date; } // YYYY-MM-DD or YYYYMMDD token = parseTokenMMDD.exec(dateString); if (token) { date = new Date(0); month = parseInt(token[1], 10) - 1; var day = parseInt(token[2], 10); date.setUTCFullYear(year, month, day); return date; } // YYYY-Www or YYYYWww token = parseTokenWww.exec(dateString); if (token) { week = parseInt(token[1], 10) - 1; return dayOfISOYear(year, week); } // YYYY-Www-D or YYYYWwwD token = parseTokenWwwD.exec(dateString); if (token) { week = parseInt(token[1], 10) - 1; var dayOfWeek = parseInt(token[2], 10) - 1; return dayOfISOYear(year, week, dayOfWeek); } // Invalid ISO-formatted date return null; } function parseTime(timeString) { var token; var hours; var minutes; // hh token = parseTokenHH.exec(timeString); if (token) { hours = parseFloat(token[1].replace(',', '.')); return (hours % 24) * MILLISECONDS_IN_HOUR; } // hh:mm or hhmm token = parseTokenHHMM.exec(timeString); if (token) { hours = parseInt(token[1], 10); minutes = parseFloat(token[2].replace(',', '.')); return ( (hours % 24) * MILLISECONDS_IN_HOUR + minutes * MILLISECONDS_IN_MINUTE ); } // hh:mm:ss or hhmmss token = parseTokenHHMMSS.exec(timeString); if (token) { hours = parseInt(token[1], 10); minutes = parseInt(token[2], 10); var seconds = parseFloat(token[3].replace(',', '.')); return ( (hours % 24) * MILLISECONDS_IN_HOUR + minutes * MILLISECONDS_IN_MINUTE + seconds * 1000 ); } // Invalid ISO-formatted time return null; } function parseTimezone(timezoneString) { var token; var absoluteOffset; // Z token = parseTokenTimezoneZ.exec(timezoneString); if (token) { return 0; } // ±hh token = parseTokenTimezoneHH.exec(timezoneString); if (token) { absoluteOffset = parseInt(token[2], 10) * 60; return token[1] === '+' ? -absoluteOffset : absoluteOffset; } // ±hh:mm or ±hhmm token = parseTokenTimezoneHHMM.exec(timezoneString); if (token) { absoluteOffset = parseInt(token[2], 10) * 60 + parseInt(token[3], 10); return token[1] === '+' ? -absoluteOffset : absoluteOffset; } return 0; } function dayOfISOYear(isoYear, week, day) { week = week || 0; day = day || 0; var date = new Date(0); date.setUTCFullYear(isoYear, 0, 4); var fourthOfJanuaryDay = date.getUTCDay() || 7; var diff = week * 7 + day + 1 - fourthOfJanuaryDay; date.setUTCDate(date.getUTCDate() + diff); return date; } var parse_1 = parse; /** * @category Year Helpers * @summary Return the start of a year for the given date. * * @description * Return the start of a year for the given date. * The result will be in the local timezone. * * @param {Date|String|Number} date - the original date * @returns {Date} the start of a year * * @example * // The start of a year for 2 September 2014 11:55:00: * var result = startOfYear(new Date(2014, 8, 2, 11, 55, 00)) * //=> Wed Jan 01 2014 00:00:00 */ function startOfYear(dirtyDate) { var cleanDate = parse_1(dirtyDate); var date = new Date(0); date.setFullYear(cleanDate.getFullYear(), 0, 1); date.setHours(0, 0, 0, 0); return date; } var start_of_year = startOfYear; /** * @category Day Helpers * @summary Return the start of a day for the given date. * * @description * Return the start of a day for the given date. * The result will be in the local timezone. * * @param {Date|String|Number} date - the original date * @returns {Date} the start of a day * * @example * // The start of a day for 2 September 2014 11:55:00: * var result = startOfDay(new Date(2014, 8, 2, 11, 55, 0)) * //=> Tue Sep 02 2014 00:00:00 */ function startOfDay(dirtyDate) { var date = parse_1(dirtyDate); date.setHours(0, 0, 0, 0); return date; } var start_of_day = startOfDay; var MILLISECONDS_IN_MINUTE$1 = 60000; var MILLISECONDS_IN_DAY = 86400000; /** * @category Day Helpers * @summary Get the number of calendar days between the given dates. * * @description * Get the number of calendar days between the given dates. * * @param {Date|String|Number} dateLeft - the later date * @param {Date|String|Number} dateRight - the earlier date * @returns {Number} the number of calendar days * * @example * // How many calendar days are between * // 2 July 2011 23:00:00 and 2 July 2012 00:00:00? * var result = differenceInCalendarDays( * new Date(2012, 6, 2, 0, 0), * new Date(2011, 6, 2, 23, 0) * ) * //=> 366 */ function differenceInCalendarDays(dirtyDateLeft, dirtyDateRight) { var startOfDayLeft = start_of_day(dirtyDateLeft); var startOfDayRight = start_of_day(dirtyDateRight); var timestampLeft = startOfDayLeft.getTime() - startOfDayLeft.getTimezoneOffset() * MILLISECONDS_IN_MINUTE$1; var timestampRight = startOfDayRight.getTime() - startOfDayRight.getTimezoneOffset() * MILLISECONDS_IN_MINUTE$1; // Round the number of days to the nearest integer // because the number of milliseconds in a day is not constant // (e.g. it's different in the day of the daylight saving time clock shift) return Math.round( (timestampLeft - timestampRight) / MILLISECONDS_IN_DAY ); } var difference_in_calendar_days = differenceInCalendarDays; /** * @category Day Helpers * @summary Get the day of the year of the given date. * * @description * Get the day of the year of the given date. * * @param {Date|String|Number} date - the given date * @returns {Number} the day of year * * @example * // Which day of the year is 2 July 2014? * var result = getDayOfYear(new Date(2014, 6, 2)) * //=> 183 */ function getDayOfYear(dirtyDate) { var date = parse_1(dirtyDate); var diff = difference_in_calendar_days(date, start_of_year(date)); var dayOfYear = diff + 1; return dayOfYear; } var get_day_of_year = getDayOfYear; /** * @category Week Helpers * @summary Return the start of a week for the given date. * * @description * Return the start of a week for the given date. * The result will be in the local timezone. * * @param {Date|String|Number} date - the original date * @param {Object} [options] - the object with options * @param {Number} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday) * @returns {Date} the start of a week * * @example * // The start of a week for 2 September 2014 11:55:00: * var result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0)) * //=> Sun Aug 31 2014 00:00:00 * * @example * // If the week starts on Monday, the start of the week for 2 September 2014 11:55:00: * var result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0), {weekStartsOn: 1}) * //=> Mon Sep 01 2014 00:00:00 */ function startOfWeek(dirtyDate, dirtyOptions) { var weekStartsOn = dirtyOptions ? Number(dirtyOptions.weekStartsOn) || 0 : 0; var date = parse_1(dirtyDate); var day = date.getDay(); var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn; date.setDate(date.getDate() - diff); date.setHours(0, 0, 0, 0); return date; } var start_of_week = startOfWeek; /** * @category ISO Week Helpers * @summary Return the start of an ISO week for the given date. * * @description * Return the start of an ISO week for the given date. * The result will be in the local timezone. * * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date * * @param {Date|String|Number} date - the original date * @returns {Date} the start of an ISO week * * @example * // The start of an ISO week for 2 September 2014 11:55:00: * var result = startOfISOWeek(new Date(2014, 8, 2, 11, 55, 0)) * //=> Mon Sep 01 2014 00:00:00 */ function startOfISOWeek(dirtyDate) { return start_of_week(dirtyDate, { weekStartsOn: 1 }); } var start_of_iso_week = startOfISOWeek; /** * @category ISO Week-Numbering Year Helpers * @summary Get the ISO week-numbering year of the given date. * * @description * Get the ISO week-numbering year of the given date, * which always starts 3 days before the year's first Thursday. * * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date * * @param {Date|String|Number} date - the given date * @returns {Number} the ISO week-numbering year * * @example * // Which ISO-week numbering year is 2 January 2005? * var result = getISOYear(new Date(2005, 0, 2)) * //=> 2004 */ function getISOYear(dirtyDate) { var date = parse_1(dirtyDate); var year = date.getFullYear(); var fourthOfJanuaryOfNextYear = new Date(0); fourthOfJanuaryOfNextYear.setFullYear(year + 1, 0, 4); fourthOfJanuaryOfNextYear.setHours(0, 0, 0, 0); var startOfNextYear = start_of_iso_week(fourthOfJanuaryOfNextYear); var fourthOfJanuaryOfThisYear = new Date(0); fourthOfJanuaryOfThisYear.setFullYear(year, 0, 4); fourthOfJanuaryOfThisYear.setHours(0, 0, 0, 0); var startOfThisYear = start_of_iso_week(fourthOfJanuaryOfThisYear); if (date.getTime() >= startOfNextYear.getTime()) { return year + 1; } else if (date.getTime() >= startOfThisYear.getTime()) { return year; } else { return year - 1; } } var get_iso_year = getISOYear; /** * @category ISO Week-Numbering Year Helpers * @summary Return the start of an ISO week-numbering year for the given date. * * @description * Return the start of an ISO week-numbering year, * which always starts 3 days before the year's first Thursday. * The result will be in the local timezone. * * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date * * @param {Date|String|Number} date - the original date * @returns {Date} the start of an ISO year * * @example * // The start of an ISO week-numbering year for 2 July 2005: * var result = startOfISOYear(new Date(2005, 6, 2)) * //=> Mon Jan 03 2005 00:00:00 */ function startOfISOYear(dirtyDate) { var year = get_iso_year(dirtyDate); var fourthOfJanuary = new Date(0); fourthOfJanuary.setFullYear(year, 0, 4); fourthOfJanuary.setHours(0, 0, 0, 0); var date = start_of_iso_week(fourthOfJanuary); return date; } var start_of_iso_year = startOfISOYear; var MILLISECONDS_IN_WEEK = 604800000; /** * @category ISO Week Helpers * @summary Get the ISO week of the given date. * * @description * Get the ISO week of the given date. * * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date * * @param {Date|String|Number} date - the given date * @returns {Number} the ISO week * * @example * // Which week of the ISO-week numbering year is 2 January 2005? * var result = getISOWeek(new Date(2005, 0, 2)) * //=> 53 */ function getISOWeek(dirtyDate) { var date = parse_1(dirtyDate); var diff = start_of_iso_week(date).getTime() - start_of_iso_year(date).getTime(); // Round the number of days to the nearest integer // because the number of milliseconds in a week is not constant // (e.g. it's different in the week of the daylight saving time clock shift) return Math.round(diff / MILLISECONDS_IN_WEEK) + 1; } var get_iso_week = getISOWeek; /** * @category Common Helpers * @summary Is the given date valid? * * @description * Returns false if argument is Invalid Date and true otherwise. * Invalid Date is a Date, whose time value is NaN. * * Time value of Date: http://es5.github.io/#x15.9.1.1 * * @param {Date} date - the date to check * @returns {Boolean} the date is valid * @throws {TypeError} argument must be an instance of Date * * @example * // For the valid date: * var result = isValid(new Date(2014, 1, 31)) * //=> true * * @example * // For the invalid date: * var result = isValid(new Date('')) * //=> false */ function isValid(dirtyDate) { if (is_date(dirtyDate)) { return !isNaN(dirtyDate); } else { throw new TypeError( toString.call(dirtyDate) + ' is not an instance of Date' ); } } var is_valid = isValid; function buildDistanceInWordsLocale() { var distanceInWordsLocale = { lessThanXSeconds: { one: 'less than a second', other: 'less than {{count}} seconds', }, xSeconds: { one: '1 second', other: '{{count}} seconds', }, halfAMinute: 'half a minute', lessThanXMinutes: { one: 'less than a minute', other: 'less than {{count}} minutes', }, xMinutes: { one: '1 minute', other: '{{count}} minutes', }, aboutXHours: { one: 'about 1 hour', other: 'about {{count}} hours', }, xHours: { one: '1 hour', other: '{{count}} hours', }, xDays: { one: '1 day', other: '{{count}} days', }, aboutXMonths: { one: 'about 1 month', other: 'about {{count}} months', }, xMonths: { one: '1 month', other: '{{count}} months', }, aboutXYears: { one: 'about 1 year', other: 'about {{count}} years', }, xYears: { one: '1 year', other: '{{count}} years', }, overXYears: { one: 'over 1 year', other: 'over {{count}} years', }, almostXYears: { one: 'almost 1 year', other: 'almost {{count}} years', }, }; function localize(token, count, options) { options = options || {}; var result; if (typeof distanceInWordsLocale[token] === 'string') { result = distanceInWordsLocale[token]; } else if (count === 1) { result = distanceInWordsLocale[token].one; } else { result = distanceInWordsLocale[token].other.replace( '{{count}}', count ); } if (options.addSuffix) { if (options.comparison > 0) { return 'in ' + result; } else { return result + ' ago'; } } return result; } return { localize: localize, }; } var build_distance_in_words_locale = buildDistanceInWordsLocale; var commonFormatterKeys = [ 'M', 'MM', 'Q', 'D', 'DD', 'DDD', 'DDDD', 'd', 'E', 'W', 'WW', 'YY', 'YYYY', 'GG', 'GGGG', 'H', 'HH', 'h', 'hh', 'm', 'mm', 's', 'ss', 'S', 'SS', 'SSS', 'Z', 'ZZ', 'X', 'x', ]; function buildFormattingTokensRegExp(formatters) { var formatterKeys = []; for (var key in formatters) { if (formatters.hasOwnProperty(key)) { formatterKeys.push(key); } } var formattingTokens = commonFormatterKeys .concat(formatterKeys) .sort() .reverse(); var formattingTokensRegExp = new RegExp( '(\\[[^\\[]*\\])|(\\\\)?' + '(' + formattingTokens.join('|') + '|.)', 'g' ); return formattingTokensRegExp; } var build_formatting_tokens_reg_exp = buildFormattingTokensRegExp; function buildFormatLocale() { // Note: in English, the names of days of the week and months are capitalized. // If you are making a new locale based on this one, check if the same is true for the language you're working on. // Generally, formatted dates should look like they are in the middle of a sentence, // e.g. in Spanish language the weekdays and months should be in the lowercase. var months3char = [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec', ]; var monthsFull = [ 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December', ]; var weekdays2char = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa']; var weekdays3char = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']; var weekdaysFull = [ 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', ]; var meridiemUppercase = ['AM', 'PM']; var meridiemLowercase = ['am', 'pm']; var meridiemFull = ['a.m.', 'p.m.']; var formatters = { // Month: Jan, Feb, ..., Dec MMM: function (date) { return months3char[date.getMonth()]; }, // Month: January, February, ..., December MMMM: function (date) { return monthsFull[date.getMonth()]; }, // Day of week: Su, Mo, ..., Sa dd: function (date) { return weekdays2char[date.getDay()]; }, // Day of week: Sun, Mon, ..., Sat ddd: function (date) { return weekdays3char[date.getDay()]; }, // Day of week: Sunday, Monday, ..., Saturday dddd: function (date) { return weekdaysFull[date.getDay()]; }, // AM, PM A: function (date) { return date.getHours() / 12 >= 1 ? meridiemUppercase[1] : meridiemUppercase[0]; }, // am, pm a: function (date) { return date.getHours() / 12 >= 1 ? meridiemLowercase[1] : meridiemLowercase[0]; }, // a.m., p.m. aa: function (date) { return date.getHours() / 12 >= 1 ? meridiemFull[1] : meridiemFull[0]; }, }; // Generate ordinal version of formatters: M -> Mo, D -> Do, etc. var ordinalFormatters = ['M', 'D', 'DDD', 'd', 'Q', 'W']; ordinalFormatters.forEach(function (formatterToken) { formatters[formatterToken + 'o'] = function (date, formatters) { return ordinal(formatters[formatterToken](date)); }; }); return { formatters: formatters, formattingTokensRegExp: build_formatting_tokens_reg_exp(formatters), }; } function ordinal(number) { var rem100 = number % 100; if (rem100 > 20 || rem100 < 10) { switch (rem100 % 10) { case 1: return number + 'st'; case 2: return number + 'nd'; case 3: return number + 'rd'; } } return number + 'th'; } var build_format_locale = buildFormatLocale; /** * @category Locales * @summary English locale. */ var en = { distanceInWords: build_distance_in_words_locale(), format: build_format_locale(), }; /** * @category Common Helpers * @summary Format the date. * * @description * Return the formatted date string in the given format. * * Accepted tokens: * | Unit | Token | Result examples | * |-------------------------|-------|----------------------------------| * | Month | M | 1, 2, ..., 12 | * | | Mo | 1st, 2nd, ..., 12th | * | | MM | 01, 02, ..., 12 | * | | MMM | Jan, Feb, ..., Dec | * | | MMMM | January, February, ..., December | * | Quarter | Q | 1, 2, 3, 4 | * | | Qo | 1st, 2nd, 3rd, 4th | * | Day of month | D | 1, 2, ..., 31 | * | | Do | 1st, 2nd, ..., 31st | * | | DD | 01, 02, ..., 31 | * | Day of year | DDD | 1, 2, ..., 366 | * | | DDDo | 1st, 2nd, ..., 366th | * | | DDDD | 001, 002, ..., 366 | * | Day of week | d | 0, 1, ..., 6 | * | | do | 0th, 1st, ..., 6th | * | | dd | Su, Mo, ..., Sa | * | | ddd | Sun, Mon, ..., Sat | * | | dddd | Sunday, Monday, ..., Saturday | * | Day of ISO week | E | 1, 2, ..., 7 | * | ISO week | W | 1, 2, ..., 53 | * | | Wo | 1st, 2nd, ..., 53rd | * | | WW | 01, 02, ..., 53 | * | Year | YY | 00, 01, ..., 99 | * | | YYYY | 1900, 1901, ..., 2099 | * | ISO week-numbering year | GG | 00, 01, ..., 99 | * | | GGGG | 1900, 1901, ..., 2099 | * | AM/PM | A | AM, PM | * | | a | am, pm | * | | aa | a.m., p.m. | * | Hour | H | 0, 1, ... 23 | * | | HH | 00, 01, ... 23 | * | | h | 1, 2, ..., 12 | * | | hh | 01, 02, ..., 12 | * | Minute | m | 0, 1, ..., 59 | * | | mm | 00, 01, ..., 59 | * | Second | s | 0, 1, ..., 59 | * | | ss | 00, 01, ..., 59 | * | 1/10 of second | S | 0, 1, ..., 9 | * | 1/100 of second | SS | 00, 01, ..., 99 | * | Millisecond | SSS | 000, 001, ..., 999 | * | Timezone | Z | -01:00, +00:00, ... +12:00 | * | | ZZ | -0100, +0000, ..., +1200 | * | Seconds timestamp | X | 512969520 | * | Milliseconds timestamp | x | 512969520900 | * * The characters wrapped in square brackets are escaped. * * The result may vary by locale. * * @param {Date|String|Number} date - the original date * @param {String} [format='YYYY-MM-DDTHH:mm:ss.SSSZ'] - the string of tokens * @param {Object} [options] - the object with options * @param {Object} [options.locale=enLocale] - the locale object * @returns {String} the formatted date string * * @example * // Represent 11 February 2014 in middle-endian format: * var result = format( * new Date(2014, 1, 11), * 'MM/DD/YYYY' * ) * //=> '02/11/2014' * * @example * // Represent 2 July 2014 in Esperanto: * var eoLocale = require('date-fns/locale/eo') * var result = format( * new Date(2014, 6, 2), * 'Do [de] MMMM YYYY', * {locale: eoLocale} * ) * //=> '2-a de julio 2014' */ function format(dirtyDate, dirtyFormatStr, dirtyOptions) { var formatStr = dirtyFormatStr ? String(dirtyFormatStr) : 'YYYY-MM-DDTHH:mm:ss.SSSZ'; var options = dirtyOptions || {}; var locale = options.locale; var localeFormatters = en.format.formatters; var formattingTokensRegExp = en.format.formattingTokensRegExp; if (locale && locale.format && locale.format.formatters) { localeFormatters = locale.format.formatters; if (locale.format.formattingTokensRegExp) { formattingTokensRegExp = locale.format.formattingTokensRegExp; } } var date = parse_1(dirtyDate); if (!is_valid(date)) { return 'Invalid Date'; } var formatFn = buildFormatFn( formatStr, localeFormatters, formattingTokensRegExp ); return formatFn(date); } var formatters = { // Month: 1, 2, ..., 12 M: function (date) { return date.getMonth() + 1; }, // Month: 01, 02, ..., 12 MM: function (date) { return addLeadingZeros(date.getMonth() + 1, 2); }, // Quarter: 1, 2, 3, 4 Q: function (date) { return Math.ceil((date.getMonth() + 1) / 3); }, // Day of month: 1, 2, ..., 31 D: function (date) { return date.getDate(); }, // Day of month: 01, 02, ..., 31 DD: function (date) { return addLeadingZeros(date.getDate(), 2); }, // Day of year: 1, 2, ..., 366 DDD: function (date) { return get_day_of_year(date); }, // Day of year: 001, 002, ..., 366 DDDD: function (date) { return addLeadingZeros(get_day_of_year(date), 3); }, // Day of week: 0, 1, ..., 6 d: function (date) { return date.getDay(); }, // Day of ISO week: 1, 2, ..., 7 E: function (date) { return date.getDay() || 7; }, // ISO week: 1, 2, ..., 53 W: function (date) { return get_iso_week(date); }, // ISO week: 01, 02, ..., 53 WW: function (date) { return addLeadingZeros(get_iso_week(date), 2); }, // Year: 00, 01, ..., 99 YY: function (date) { return addLeadingZeros(date.getFullYear(), 4).substr(2); }, // Year: 1900, 1901, ..., 2099 YYYY: function (date) { return addLeadingZeros(date.getFullYear(), 4); }, // ISO week-numbering year: 00, 01, ..., 99 GG: function (date) { return String(get_iso_year(date)).substr(2); }, // ISO week-numbering year: 1900, 1901, ..., 2099 GGGG: function (date) { return get_iso_year(date); }, // Hour: 0, 1, ... 23 H: function (date) { return date.getHours(); }, // Hour: 00, 01, ..., 23 HH: function (date) { return addLeadingZeros(date.getHours(), 2); }, // Hour: 1, 2, ..., 12 h: function (date) { var hours = date.getHours(); if (hours === 0) { return 12; } else if (hours > 12) { return hours % 12; } else { return hours; } }, // Hour: 01, 02, ..., 12 hh: function (date) { return addLeadingZeros(formatters['h'](date), 2); }, // Minute: 0, 1, ..., 59 m: function (date) { return date.getMinutes(); }, // Minute: 00, 01, ..., 59 mm: function (date) { return addLeadingZeros(date.getMinutes(), 2); }, // Second: 0, 1, ..., 59 s: function (date) { return date.getSeconds(); }, // Second: 00, 01, ..., 59 ss: function (date) { return addLeadingZeros(date.getSeconds(), 2); }, // 1/10 of second: 0, 1, ..., 9 S: function (date) { return Math.floor(date.getMilliseconds() / 100); }, // 1/100 of second: 00, 01, ..., 99 SS: function (date) { return addLeadingZeros(Math.floor(date.getMilliseconds() / 10), 2); }, // Millisecond: 000, 001, ..., 999 SSS: function (date) { return addLeadingZeros(date.getMilliseconds(), 3); }, // Timezone: -01:00, +00:00, ... +12:00 Z: function (date) { return formatTimezone(date.getTimezoneOffset(), ':'); }, // Timezone: -0100, +0000, ... +1200 ZZ: function (date) { return formatTimezone(date.getTimezoneOffset()); }, // Seconds timestamp: 512969520 X: function (date) { return Math.floor(date.getTime() / 1000); }, // Milliseconds timestamp: 512969520900 x: function (date) { return date.getTime(); }, }; function buildFormatFn( formatStr, localeFormatters, formattingTokensRegExp ) { var array = formatStr.match(formattingTokensRegExp); var length = array.length; var i; var formatter; for (i = 0; i < length; i++) { formatter = localeFormatters[array[i]] || formatters[array[i]]; if (formatter) { array[i] = formatter; } else { array[i] = removeFormattingTokens(array[i]); } } return function (date) { var output = ''; for (var i = 0; i < length; i++) { if (array[i] instanceof Function) { output += array[i](date, formatters); } else { output += array[i]; } } return output; }; } function removeFormattingTokens(input) { if (input.match(/\[[\s\S]/)) { return input.replace(/^\[|]$/g, ''); } return input.replace(/\\/g, ''); } function formatTimezone(offset, delimeter) { delimeter = delimeter || ''; var sign = offset > 0 ? '-' : '+'; var absOffset = Math.abs(offset); var hours = Math.floor(absOffset / 60); var minutes = absOffset % 60; return ( sign + addLeadingZeros(hours, 2) + delimeter + addLeadingZeros(minutes, 2) ); } function addLeadingZeros(number, targetLength) { var output = Math.abs(number).toString(); while (output.length < targetLength) { output = '0' + output; } return output; } var format_1 = format; /** * @category Millisecond Helpers * @summary Get the number of milliseconds between the given dates. * * @description * Get the number of milliseconds between the given dates. * * @param {Date|String|Number} dateLeft - the later date * @param {Date|String|Number} dateRight - the earlier date * @returns {Number} the number of milliseconds * * @example * // How many milliseconds are between * // 2 July 2014 12:30:20.600 and 2 July 2014 12:30:21.700? * var result = differenceInMilliseconds( * new Date(2014, 6, 2, 12, 30, 21, 700), * new Date(2014, 6, 2, 12, 30, 20, 600) * ) * //=> 1100 */ function differenceInMilliseconds(dirtyDateLeft, dirtyDateRight) { var dateLeft = parse_1(dirtyDateLeft); var dateRight = parse_1(dirtyDateRight); return dateLeft.getTime() - dateRight.getTime(); } var difference_in_milliseconds = differenceInMilliseconds; var MILLISECONDS_IN_HOUR$1 = 3600000; /** * @category Hour Helpers * @summary Get the number of hours between the given dates. * * @description * Get the number of hours between the given dates. * * @param {Date|String|Number} dateLeft - the later date * @param {Date|String|Number} dateRight - the earlier date * @returns {Number} the number of hours * * @example * // How many hours are between 2 July 2014 06:50:00 and 2 July 2014 19:00:00? * var result = differenceInHours( * new Date(2014, 6, 2, 19, 0), * new Date(2014, 6, 2, 6, 50) * ) * //=> 12 */ function differenceInHours(dirtyDateLeft, dirtyDateRight) { var diff = difference_in_milliseconds(dirtyDateLeft, dirtyDateRight) / MILLISECONDS_IN_HOUR$1; return diff > 0 ? Math.floor(diff) : Math.ceil(diff); } var difference_in_hours = differenceInHours; var MILLISECONDS_IN_MINUTE$2 = 60000; /** * @category Minute Helpers * @summary Get the number of minutes between the given dates. * * @description * Get the number of minutes between the given dates. * * @param {Date|String|Number} dateLeft - the later date * @param {Date|String|Number} dateRight - the earlier date * @returns {Number} the number of minutes * * @example * // How many minutes are between 2 July 2014 12:07:59 and 2 July 2014 12:20:00? * var result = differenceInMinutes( * new Date(2014, 6, 2, 12, 20, 0), * new Date(2014, 6, 2, 12, 7, 59) * ) * //=> 12 */ function differenceInMinutes(dirtyDateLeft, dirtyDateRight) { var diff = difference_in_milliseconds(dirtyDateLeft, dirtyDateRight) / MILLISECONDS_IN_MINUTE$2; return diff > 0 ? Math.floor(diff) : Math.ceil(diff); } var difference_in_minutes = differenceInMinutes; /** * @category Second Helpers * @summary Get the number of seconds between the given dates. * * @description * Get the number of seconds between the given dates. * * @param {Date|String|Number} dateLeft - the later date * @param {Date|String|Number} dateRight - the earlier date * @returns {Number} the number of seconds * * @example * // How many seconds are between * // 2 July 2014 12:30:07.999 and 2 July 2014 12:30:20.000? * var result = differenceInSeconds( * new Date(2014, 6, 2, 12, 30, 20, 0), * new Date(2014, 6, 2, 12, 30, 7, 999) * ) * //=> 12 */ function differenceInSeconds(dirtyDateLeft, dirtyDateRight) { var diff = difference_in_milliseconds(dirtyDateLeft, dirtyDateRight) / 1000; return diff > 0 ? Math.floor(diff) : Math.ceil(diff); } var difference_in_seconds = differenceInSeconds; /* client/source/app/components/TwitterBlock.html generated by Svelte v1.50.0 */ /* eslint-disable */ /** * NOTE: the following was hoisted from Tweetie.js * https://github.com/sonnyt/tweetie */ var linking = function (tweet) { var twit = tweet .replace( /(https?:\/\/([-\w\.]+)+(:\d+)?(\/([\w\/_\.]*(\?\S+)?)?)?)/gi, '$1' ) .replace( /#([a-zA-Z0-9_]+)/g, '#$1' ) .replace( /@([a-zA-Z0-9_]+)/g, '@$1' ); return twit; }; // END OF HOIST! /* eslint-enable */ function loaded(stories) { return !!stories; } function oncreate() { var this$1 = this; // one time fetch fetch(this.get('url')) .then(function (response) { return response.json(); }) .then(function (json) { var stories = _.map( _.filter(json, function (story) { /* eslint-disable camelcase */ // return !story.retweeted && !story.in_reply_to_screen_name return !story.in_reply_to_screen_name; /* eslint-enable */ }), function (story) { var then = parse_1(story.created_at); var now = new Date(); var timestamp = ''; var diff = difference_in_hours(now, then); if (diff < 24) { if (diff < 1) { diff = difference_in_minutes(now, then); if (diff < 1) { diff = difference_in_seconds(now, then); timestamp = diff + 's'; } else { timestamp = diff + 'm'; } } else { timestamp = diff + 'h'; } } else { timestamp = format_1(then, 'MMM d'); } return { timestamp: timestamp, href: 'https://twitter.com/' + story.user.screen_name + '/status/' + story.id_str, html: story.retweeted ? linking( 'RT @' + story.user.screen_name + ': ' + story.retweeted_status.text ) : linking(story.text), }; } ); this$1.set({ username: linking('@' + json[0].user.screen_name), stories: stories.slice(0, 3), }); }); // TODO: handle errors gracefully? // .catch(ex => console.log('parsing failed', ex)) // unfortunately, this is necessary to make sure // any page setup elsewhere is recalibrated this.observe('loaded', function () { setTimeout(function () { var resizeEvent = window.document.createEvent('UIEvents'); resizeEvent.initUIEvent('resize', true, false, window, 0); window.dispatchEvent(resizeEvent); }, 0); }); } function create_main_fragment(state, component) { var if_block_anchor; var current_block_type = select_block_type(state); var if_block = current_block_type(state, component); return { c: function create() { if_block.c(); if_block_anchor = createComment(); }, m: function mount(target, anchor) { if_block.m(target, anchor); insertNode(if_block_anchor, target, anchor); }, p: function update(changed, state) { if ( current_block_type === (current_block_type = select_block_type(state)) && if_block ) { if_block.p(changed, state); } else { if_block.u(); if_block.d(); if_block = current_block_type(state, component); if_block.c(); if_block.m(if_block_anchor.parentNode, if_block_anchor); } }, u: function unmount() { if_block.u(); detachNode(if_block_anchor); }, d: function destroy$$1() { if_block.d(); }, }; } // (99:40) {{#each stories as story}} function create_each_block(state, stories, story, story_index, component) { var div, div_1, raw_value = story.html, a, text_value = story.timestamp, text, a_href_value; return { c: function create() { div = createElement('div'); div_1 = createElement('div'); a = createElement('a'); text = createText(text_value); this.h(); }, h: function hydrate() { div_1.className = 'tweet'; a.className = 'timestamp'; a.href = a_href_value = story.href; a.target = '_blank'; div.className = 'item cell small-12 medium-4'; }, m: function mount(target, anchor) { insertNode(div, target, anchor); appendNode(div_1, div); div_1.innerHTML = raw_value; appendNode(a, div); appendNode(text, a); }, p: function update(changed, state, stories, story, story_index) { if (changed.stories && raw_value !== (raw_value = story.html)) { div_1.innerHTML = raw_value; } if ( changed.stories && text_value !== (text_value = story.timestamp) ) { text.data = text_value; } if ( changed.stories && a_href_value !== (a_href_value = story.href) ) { a.href = a_href_value; } }, u: function unmount() { div_1.innerHTML = ''; detachNode(div); }, d: noop, }; } // (97:9) {{#if loaded}} function create_if_block(state, component) { var h2, text, div; var stories = state.stories; var each_blocks = []; for (var i = 0; i < stories.length; i += 1) { each_blocks[i] = create_each_block( state, stories, stories[i], i, component ); } return { c: function create() { h2 = createElement('h2'); text = createText('\r\n'); div = createElement('div'); for (var i = 0; i < each_blocks.length; i += 1) { each_blocks[i].c(); } this.h(); }, h: function hydrate() { div.className = 'items grid-x grid-margin-x'; }, m: function mount(target, anchor) { insertNode(h2, target, anchor); h2.innerHTML = state.username; insertNode(text, target, anchor); insertNode(div, target, anchor); for (var i = 0; i < each_blocks.length; i += 1) { each_blocks[i].m(div, null); } }, p: function update(changed, state) { if (changed.username) { h2.innerHTML = state.username; } var stories = state.stories; if (changed.stories) { for (var i = 0; i < stories.length; i += 1) { if (each_blocks[i]) { each_blocks[i].p( changed, state, stories, stories[i], i ); } else { each_blocks[i] = create_each_block( state, stories, stories[i], i, component ); each_blocks[i].c(); each_blocks[i].m(div, null); } } for (; i < each_blocks.length; i += 1) { each_blocks[i].u(); each_blocks[i].d(); } each_blocks.length = stories.length; } }, u: function unmount() { h2.innerHTML = ''; detachNode(h2); detachNode(text); detachNode(div); for (var i = 0; i < each_blocks.length; i += 1) { each_blocks[i].u(); } }, d: function destroy$$1() { destroyEach(each_blocks); }, }; } // (103:6) {{else}} function create_if_block_1(state, component) { var loader = new Loader({ root: component.root, }); return { c: function create() { loader._fragment.c(); }, m: function mount(target, anchor) { loader._mount(target, anchor); }, p: noop, u: function unmount() { loader._unmount(); }, d: function destroy$$1() { loader.destroy(false); }, }; } function select_block_type(state) { if (state.loaded) { return create_if_block; } return create_if_block_1; } function TwitterBlock(options) { init(this, options); this._state = assign({}, options.data); this._recompute({ stories: 1 }, this._state); var _oncreate = oncreate.bind(this); if (!options.root) { this._oncreate = [_oncreate]; this._beforecreate = []; this._aftercreate = []; } else { this.root._oncreate.push(_oncreate); } this._fragment = create_main_fragment(this._state, this); if (options.target) { this._fragment.c(); this._fragment.m(options.target, options.anchor || null); this._lock = true; callAll(this._beforecreate); callAll(this._oncreate); callAll(this._aftercreate); this._lock = false; } } assign(TwitterBlock.prototype, proto); TwitterBlock.prototype._recompute = function _recompute(changed, state) { if (changed.stories) { if (differs(state.loaded, (state.loaded = loaded(state.stories)))) { changed.loaded = true; } } }; function isDate$2(obj) { return Object.prototype.toString.call(obj) === '[object Date]'; } var scheduler = { components: [], running: false, add: function (component) { if (~scheduler.components.indexOf(component)) { return; } scheduler.components.push(component); if (!scheduler.running) { scheduler.running = true; requestAnimationFrame(scheduler.next); } }, next: function () { var now = window.performance.now(); var hasComponents = false; var i = scheduler.components.length; while (i--) { var component = scheduler.components[i]; var data = {}; var hasTweens = false; for (var key in component._currentTweens) { var t = component._currentTweens[key]; if (now >= t.end) { data[key] = t.to; delete component._currentTweens[key]; t.fulfil(); } else { hasTweens = true; hasComponents = true; if (now >= t.start) { var p = (now - t.start) / t.duration; data[key] = t.value(t.ease(p)); } } } component._tweening = true; component.set(data); component._tweening = false; if (!hasTweens) { scheduler.components.splice(i, 1); } } if (hasComponents) { requestAnimationFrame(scheduler.next); } else { scheduler.running = false; } }, }; function snap(to) { return function () { return to; }; } function interpolate(a, b) { if (a === b || a !== a) { return snap(a); } var type = typeof a; if (type !== typeof b || Array.isArray(a) !== Array.isArray(b)) { throw new Error('Cannot interpolate values of different type'); } if (Array.isArray(a)) { var arr_1 = b.map(function (bi, i) { return interpolate(a[i], bi); }); return function (t) { return arr_1.map(function (fn) { return fn(t); }); }; } if (type === 'object') { if (!a || !b) { throw new Error('Object cannot be null'); } if (isDate$2(a) && isDate$2(b)) { a = a.getTime(); b = b.getTime(); var delta_1 = b - a; return function (t) { return new Date(a + t * delta_1); }; } var keys_1 = Object.keys(b); var interpolators_1 = {}; var result_1 = {}; keys_1.forEach(function (key) { interpolators_1[key] = interpolate(a[key], b[key]); }); return function (t) { keys_1.forEach(function (key) { result_1[key] = interpolators_1[key](t); }); return result_1; }; } if (type === 'number') { var delta_2 = b - a; return function (t) { return a + t * delta_2; }; } throw new Error('Cannot interpolate ' + type + ' values'); } function linear$1(x) { return x; } function tween(key, to, options) { var _this = this; if (options === void 0) { options = {}; } if (!this._currentTweens) { this._currentTweens = Object.create(null); this._tweening = false; var set_1 = this.set; this.set = function (data) { if (!_this._tweening) { for (var key_1 in data) { if (_this._currentTweens[key_1]) { _this._currentTweens[key_1].abort(); } } } set_1.call(_this, data); }; } if (this._currentTweens[key]) { this._currentTweens[key].abort(); } var start = window.performance.now() + (options.delay || 0); var duration = options.duration || 400; var end = start + duration; var t = { key: key, value: (options.interpolate || interpolate)(this.get(key), to), to: to, start: start, end: end, duration: duration, ease: options.easing || linear$1, running: true, abort: function () { t.running = false; delete _this._currentTweens[key]; }, }; this._currentTweens[key] = t; scheduler.add(this); var promise = new Promise(function (fulfil) { t.fulfil = fulfil; }); promise.abort = t.abort; return promise; } function cubicOut(t) { var f = t - 1.0; return f * f * f + 1.0; } function setFocus($element) { $element = $element || document.body; // NOTE: if I need to repair any bugs, see: // https://stackoverflow.com/questions/1599660/which-html-elements-can-receive-focus // var xPos = window.scrollX // var yPos = window.scrollY var $$focusable = $element.querySelectorAll( 'a[href], button, [role="button"], [tabindex]:not([tabindex="-1"])' ); if ($$focusable.length) { $$focusable[0].focus(); } // window.scrollTo(xPos, yPos) } // see: https://stackoverflow.com/questions/1248081/get-the-browser-viewport-dimensions-with-javascript function viewportDimensions() { var docEl = document.documentElement; return { width: Math.max(docEl.clientWidth, window.innerWidth || 0), height: Math.max(docEl.clientHeight, window.innerHeight || 0), }; } /** * Get an element's distance from the top of the page * @param {Node} elem The element * @return {Number} Distance from the top of the page * SEE: https://gomakethings.com/ditching-jquery/#get-distances-to-the-top-of-the-document */ function getElementOffset(element) { var location = 0; if (element.offsetParent) { do { location += element.offsetTop; element = element.offsetParent; } while (element); } return location >= 0 ? location : 0; } /* client/source/app/components/ProgramsList.html generated by Svelte v1.50.0 */ function loaded$1(json) { return !!json; } function filteredPrograms(loaded, json, programTypeFilter, collegeFilter) { if (loaded && json.programs && json.programs.length) { var programs = json.programs.slice(); if (programTypeFilter !== 'all') { programs = _.filter(programs, { programTypeFilter: programTypeFilter, }); } if (collegeFilter !== 'all') { programs = _.filter(programs, { collegeKey: collegeFilter }); } return programs; } return []; } function programGroups(filteredPrograms, json) { if (filteredPrograms && filteredPrograms.length) { var programs = _.groupBy(filteredPrograms, 'departmentKey'); programs = _.map(programs, function (list, key) { var department = _.find(json.departments, { key: key }); return { title: department.value, list: list, }; }); programs = _.orderBy(programs, 'title', 'asc'); return programs; } return []; } function alphabeticPrograms(filteredPrograms) { return _.orderBy(filteredPrograms, 'title', 'asc'); } function resultsCount(filteredPrograms) { return filteredPrograms.length; } function resultsClass(groupsOffset, windowHeight, yPos) { return groupsOffset >= windowHeight + yPos ? 'sticky' : ''; } var methods = { tween: tween, setSizedVars: function setSizedVars() { this.set({ groupsOffset: getElementOffset(this.refs.groups) }); }, scrollToResults: function scrollToResults() { this.set({ yPosMirror: this.get('yPos') }); this.tween('yPosMirror', getElementOffset(this.refs.groups), { duration: 1000, easing: cubicOut, }); // focus first item setFocus(this.refs.groups); }, checkState: function checkState(paramName, value, defaultValue) { var params = new URLSearchParams(window.location.search); var param = params.get(paramName); if (value) { params.set(paramName, value); history.replaceState( null, '', window.location.pathname + '?' + params.toString() ); } else { var setter = {}; if (param) { setter[paramName] = param; this.set(setter); } else { setter[paramName] = defaultValue; this.set(setter); params.set(paramName, defaultValue); history.replaceState( null, '', window.location.pathname + '?' + params.toString() ); } } }, }; function oncreate$2() { var this$1 = this; this.set({ yPos: window.pageYOffset }); window.addEventListener('scroll', function () { return this$1.set({ yPos: window.pageYOffset }); }); // results button scroll handling this.observe('loaded', function (loaded) { if (loaded) { // we have to wait for the component to register in the DOM // because we use an `if` statement to render the DOM setTimeout(function () { return this$1.setSizedVars(); }, 0); } }); // just some simple state management this.observe('programTypeFilter', function (programTypeFilter) { return this$1.checkState( 'programTypeFilter', programTypeFilter, 'all' ); }); this.observe('collegeFilter', function (collegeFilter) { return this$1.checkState('collegeFilter', collegeFilter, 'all'); }); this.observe('sortFilter', function (sortFilter) { return this$1.checkState('sortFilter', sortFilter, 'department'); }); // one time fetch fetch(this.get('url')) .then(function (response) { return response.json(); }) .then(function (json) { this$1.set({ json: json }); }); // TODO: handle errors gracefully? // .catch(ex => console.log('parsing failed', ex)) // I hate this indirection, but it works... this.observe( 'yPosMirror', function (yPos) { window.scrollTo(0, yPos); }, { init: false } ); } function create_main_fragment$2(state, component) { var if_block_anchor; function onwindowresize(event) { component.setSizedVars(); } window.addEventListener('resize', onwindowresize); function onwindowresize_1(event) { component.set({ windowHeight: this.innerHeight, }); } window.addEventListener('resize', onwindowresize_1); var current_block_type = select_block_type_1(state); var if_block = current_block_type(state, component); return { c: function create() { if_block.c(); if_block_anchor = createComment(); }, m: function mount(target, anchor) { if_block.m(target, anchor); insertNode(if_block_anchor, target, anchor); }, p: function update(changed, state) { if ( current_block_type === (current_block_type = select_block_type_1(state)) && if_block ) { if_block.p(changed, state); } else { if_block.u(); if_block.d(); if_block = current_block_type(state, component); if_block.c(); if_block.m(if_block_anchor.parentNode, if_block_anchor); } }, u: function unmount() { if_block.u(); detachNode(if_block_anchor); }, d: function destroy$$1() { window.removeEventListener('resize', onwindowresize); window.removeEventListener('resize', onwindowresize_1); if_block.d(); }, }; } // (130:12) {{#each json.programTypeFilters as filter, index}} function create_each_block$1( state, programTypeFilters, filter, index, component ) { var div, input, input_value_value, input_id_value, text, label, text_1_value = filter.value, text_1, label_for_value; function input_change_handler() { component.set({ programTypeFilter: input.__value }); } return { c: function create() { div = createElement('div'); input = createElement('input'); text = createText('\r\n '); label = createElement('label'); text_1 = createText(text_1_value); this.h(); }, h: function hydrate() { component._bindingGroups[0].push(input); addListener(input, 'change', input_change_handler); input.type = 'radio'; input.__value = input_value_value = filter.key; input.value = input.__value; input.id = input_id_value = 'program-type-' + (index + 1); input.name = 'program-types'; label.htmlFor = label_for_value = 'program-type-' + (index + 1); div.className = 'radio'; }, m: function mount(target, anchor) { insertNode(div, target, anchor); appendNode(input, div); input.checked = input.__value === state.programTypeFilter; appendNode(text, div); appendNode(label, div); appendNode(text_1, label); }, p: function update( changed, state, programTypeFilters, filter, index ) { input.checked = input.__value === state.programTypeFilter; if ( changed.json && input_value_value !== (input_value_value = filter.key) ) { input.__value = input_value_value; } input.value = input.__value; if ( changed.json && text_1_value !== (text_1_value = filter.value) ) { text_1.data = text_1_value; } }, u: function unmount() { detachNode(div); }, d: function destroy$$1() { component._bindingGroups[0].splice( component._bindingGroups[0].indexOf(input), 1 ); removeListener(input, 'change', input_change_handler); }, }; } // (143:12) {{#each json.colleges as college, index}} function create_each_block_1(state, colleges, college, index, component) { var div, input, input_value_value, input_id_value, text, label, text_1_value = college.value, text_1, label_for_value; function input_change_handler() { component.set({ collegeFilter: input.__value }); } return { c: function create() { div = createElement('div'); input = createElement('input'); text = createText('\r\n '); label = createElement('label'); text_1 = createText(text_1_value); this.h(); }, h: function hydrate() { component._bindingGroups[1].push(input); addListener(input, 'change', input_change_handler); input.type = 'radio'; input.__value = input_value_value = college.key; input.value = input.__value; input.id = input_id_value = 'college-' + (index + 1); input.name = 'colleges'; label.htmlFor = label_for_value = 'college-' + (index + 1); div.className = 'radio'; }, m: function mount(target, anchor) { insertNode(div, target, anchor); appendNode(input, div); input.checked = input.__value === state.collegeFilter; appendNode(text, div); appendNode(label, div); appendNode(text_1, label); }, p: function update(changed, state, colleges, college, index) { input.checked = input.__value === state.collegeFilter; if ( changed.json && input_value_value !== (input_value_value = college.key) ) { input.__value = input_value_value; } input.value = input.__value; if ( changed.json && text_1_value !== (text_1_value = college.value) ) { text_1.data = text_1_value; } }, u: function unmount() { detachNode(div); }, d: function destroy$$1() { component._bindingGroups[1].splice( component._bindingGroups[1].indexOf(input), 1 ); removeListener(input, 'change', input_change_handler); }, }; } // (165:41) {{#each programGroups as programGroup, index}} function create_each_block_2( state, programGroups_1, programGroup, index, component ) { var div, h2, text_value = programGroup.title, text, text_1, ul; var list = programGroup.list; var each_blocks = []; for (var i = 0; i < list.length; i += 1) { each_blocks[i] = create_each_block_3( state, programGroups_1, programGroup, index, list, list[i], i, component ); } return { c: function create() { div = createElement('div'); h2 = createElement('h2'); text = createText(text_value); text_1 = createText('\r\n '); ul = createElement('ul'); for (var i = 0; i < each_blocks.length; i += 1) { each_blocks[i].c(); } this.h(); }, h: function hydrate() { h2.className = 'h4 title'; div.className = 'group fullwidth'; }, m: function mount(target, anchor) { insertNode(div, target, anchor); appendNode(h2, div); appendNode(text, h2); appendNode(text_1, div); appendNode(ul, div); for (var i = 0; i < each_blocks.length; i += 1) { each_blocks[i].m(ul, null); } }, p: function update( changed, state, programGroups_1, programGroup, index ) { if ( changed.programGroups && text_value !== (text_value = programGroup.title) ) { text.data = text_value; } var list = programGroup.list; if (changed.programGroups) { for (var i = 0; i < list.length; i += 1) { if (each_blocks[i]) { each_blocks[i].p( changed, state, programGroups_1, programGroup, index, list, list[i], i ); } else { each_blocks[i] = create_each_block_3( state, programGroups_1, programGroup, index, list, list[i], i, component ); each_blocks[i].c(); each_blocks[i].m(ul, null); } } for (; i < each_blocks.length; i += 1) { each_blocks[i].u(); each_blocks[i].d(); } each_blocks.length = list.length; } }, u: function unmount() { detachNode(div); for (var i = 0; i < each_blocks.length; i += 1) { each_blocks[i].u(); } }, d: function destroy$$1() { destroyEach(each_blocks); }, }; } // (168:8) {{#each programGroup.list as list}} function create_each_block_3( state, programGroups_1, programGroup, index, list, list_1, list_index, component ) { var li, a, text_value = list_1.title, text, a_href_value; return { c: function create() { li = createElement('li'); a = createElement('a'); text = createText(text_value); this.h(); }, h: function hydrate() { a.href = a_href_value = list_1.url; }, m: function mount(target, anchor) { insertNode(li, target, anchor); appendNode(a, li); appendNode(text, a); }, p: function update( changed, state, programGroups_1, programGroup, index, list, list_1, list_index ) { if ( changed.programGroups && text_value !== (text_value = list_1.title) ) { text.data = text_value; } if ( changed.programGroups && a_href_value !== (a_href_value = list_1.url) ) { a.href = a_href_value; } }, u: function unmount() { detachNode(li); }, d: noop, }; } // (176:8) {{#each alphabeticPrograms as program, index}} function create_each_block_4( state, alphabeticPrograms_1, program, index, component ) { var li, a, text_value = program.title, text, a_href_value; return { c: function create() { li = createElement('li'); a = createElement('a'); text = createText(text_value); this.h(); }, h: function hydrate() { a.href = a_href_value = program.url; }, m: function mount(target, anchor) { insertNode(li, target, anchor); appendNode(a, li); appendNode(text, a); }, p: function update( changed, state, alphabeticPrograms_1, program, index ) { if ( changed.alphabeticPrograms && text_value !== (text_value = program.title) ) { text.data = text_value; } if ( changed.alphabeticPrograms && a_href_value !== (a_href_value = program.url) ) { a.href = a_href_value; } }, u: function unmount() { detachNode(li); }, d: noop, }; } // (164:6) {{#if sortFilter === 'department'}} function create_if_block_1$1(state, component) { var div; var programGroups_1 = state.programGroups; var each_blocks = []; for (var i = 0; i < programGroups_1.length; i += 1) { each_blocks[i] = create_each_block_2( state, programGroups_1, programGroups_1[i], i, component ); } return { c: function create() { div = createElement('div'); for (var i = 0; i < each_blocks.length; i += 1) { each_blocks[i].c(); } this.h(); }, h: function hydrate() { div.className = 'groups fullwidth'; }, m: function mount(target, anchor) { insertNode(div, target, anchor); for (var i = 0; i < each_blocks.length; i += 1) { each_blocks[i].m(div, null); } component.refs.groups = div; }, p: function update(changed, state) { var programGroups_1 = state.programGroups; if (changed.programGroups) { for (var i = 0; i < programGroups_1.length; i += 1) { if (each_blocks[i]) { each_blocks[i].p( changed, state, programGroups_1, programGroups_1[i], i ); } else { each_blocks[i] = create_each_block_2( state, programGroups_1, programGroups_1[i], i, component ); each_blocks[i].c(); each_blocks[i].m(div, null); } } for (; i < each_blocks.length; i += 1) { each_blocks[i].u(); each_blocks[i].d(); } each_blocks.length = programGroups_1.length; } }, u: function unmount() { detachNode(div); for (var i = 0; i < each_blocks.length; i += 1) { each_blocks[i].u(); } }, d: function destroy$$1() { destroyEach(each_blocks); if (component.refs.groups === div) { component.refs.groups = null; } }, }; } // (172:6) {{else}} function create_if_block_2(state, component) { var div, div_1, h2, text_1, ul; var alphabeticPrograms_1 = state.alphabeticPrograms; var each_blocks = []; for (var i = 0; i < alphabeticPrograms_1.length; i += 1) { each_blocks[i] = create_each_block_4( state, alphabeticPrograms_1, alphabeticPrograms_1[i], i, component ); } return { c: function create() { div = createElement('div'); div_1 = createElement('div'); h2 = createElement('h2'); h2.textContent = '(Sorted by Alphabetical Order)'; text_1 = createText('\r\n '); ul = createElement('ul'); for (var i = 0; i < each_blocks.length; i += 1) { each_blocks[i].c(); } this.h(); }, h: function hydrate() { h2.className = 'h4 title'; div_1.className = 'group'; div.className = 'groups'; }, m: function mount(target, anchor) { insertNode(div, target, anchor); appendNode(div_1, div); appendNode(h2, div_1); appendNode(text_1, div_1); appendNode(ul, div_1); for (var i = 0; i < each_blocks.length; i += 1) { each_blocks[i].m(ul, null); } component.refs.groups = div; }, p: function update(changed, state) { var alphabeticPrograms_1 = state.alphabeticPrograms; if (changed.alphabeticPrograms) { for (var i = 0; i < alphabeticPrograms_1.length; i += 1) { if (each_blocks[i]) { each_blocks[i].p( changed, state, alphabeticPrograms_1, alphabeticPrograms_1[i], i ); } else { each_blocks[i] = create_each_block_4( state, alphabeticPrograms_1, alphabeticPrograms_1[i], i, component ); each_blocks[i].c(); each_blocks[i].m(ul, null); } } for (; i < each_blocks.length; i += 1) { each_blocks[i].u(); each_blocks[i].d(); } each_blocks.length = alphabeticPrograms_1.length; } }, u: function unmount() { detachNode(div); for (var i = 0; i < each_blocks.length; i += 1) { each_blocks[i].u(); } }, d: function destroy$$1() { destroyEach(each_blocks); if (component.refs.groups === div) { component.refs.groups = null; } }, }; } // (122:78) {{#if loaded}} function create_if_block$1(state, component) { var div, div_1, fieldset, legend, text_1, div_2, input, text_2, label, text_4, text_7, div_3, fieldset_1, legend_1, text_9, div_4, input_1, text_10, label_1, text_12, text_15, div_5, fieldset_2, legend_2, text_17, div_6, input_2, text_18, label_2, text_21, div_7, input_3, text_22, label_3, text_27, button, span, text_28, text_29, button_class_value, text_30, if_block_anchor; function input_change_handler() { component.set({ programTypeFilter: input.__value }); } var programTypeFilters = state.json.programTypeFilters; var each_blocks = []; for (var i = 0; i < programTypeFilters.length; i += 1) { each_blocks[i] = create_each_block$1( state, programTypeFilters, programTypeFilters[i], i, component ); } function input_1_change_handler() { component.set({ collegeFilter: input_1.__value }); } var colleges = state.json.colleges; var each_1_blocks = []; for (var i = 0; i < colleges.length; i += 1) { each_1_blocks[i] = create_each_block_1( state, colleges, colleges[i], i, component ); } function input_2_change_handler() { component.set({ sortFilter: input_2.__value }); } function input_3_change_handler() { component.set({ sortFilter: input_3.__value }); } function click_handler(event) { component.scrollToResults(); } var current_block_type = select_block_type$1(state); var if_block = current_block_type(state, component); return { c: function create() { div = createElement('div'); div_1 = createElement('div'); fieldset = createElement('fieldset'); legend = createElement('legend'); legend.textContent = 'Show Me'; text_1 = createText('\r\n '); div_2 = createElement('div'); input = createElement('input'); text_2 = createText('\r\n '); label = createElement('label'); label.textContent = 'All Program Types'; text_4 = createText('\r\n '); for (var i = 0; i < each_blocks.length; i += 1) { each_blocks[i].c(); } text_7 = createText('\r\n '); div_3 = createElement('div'); fieldset_1 = createElement('fieldset'); legend_1 = createElement('legend'); legend_1.textContent = 'From'; text_9 = createText('\r\n '); div_4 = createElement('div'); input_1 = createElement('input'); text_10 = createText('\r\n '); label_1 = createElement('label'); label_1.textContent = 'All Colleges'; text_12 = createText('\r\n '); for (var i = 0; i < each_1_blocks.length; i += 1) { each_1_blocks[i].c(); } text_15 = createText('\r\n '); div_5 = createElement('div'); fieldset_2 = createElement('fieldset'); legend_2 = createElement('legend'); legend_2.textContent = 'Sorted By'; text_17 = createText('\r\n '); div_6 = createElement('div'); input_2 = createElement('input'); text_18 = createText('\r\n '); label_2 = createElement('label'); label_2.textContent = 'Department'; text_21 = createText('\r\n '); div_7 = createElement('div'); input_3 = createElement('input'); text_22 = createText('\r\n '); label_3 = createElement('label'); label_3.textContent = 'Alphabetical Order'; text_27 = createText('\r\n '); button = createElement('button'); span = createElement('span'); text_28 = createText(state.resultsCount); text_29 = createText(' Results'); text_30 = createText('\r\n'); if_block.c(); if_block_anchor = createComment(); this.h(); }, h: function hydrate() { legend.className = 'h6'; component._bindingGroups[0].push(input); addListener(input, 'change', input_change_handler); input.id = 'program-type-0'; input.type = 'radio'; input.__value = 'all'; input.value = input.__value; input.name = 'program-types'; label.htmlFor = 'program-type-0'; div_2.className = 'radio'; div_1.className = 'control small-12 medium-4'; legend_1.className = 'h6'; component._bindingGroups[1].push(input_1); addListener(input_1, 'change', input_1_change_handler); input_1.id = 'college-0'; input_1.type = 'radio'; input_1.__value = 'all'; input_1.value = input_1.__value; input_1.name = 'colleges'; label_1.htmlFor = 'college-0'; div_4.className = 'radio'; div_3.className = 'control small-12 medium-4'; legend_2.className = 'h6'; component._bindingGroups[2].push(input_2); addListener(input_2, 'change', input_2_change_handler); input_2.id = 'sort-0'; input_2.type = 'radio'; input_2.__value = 'department'; input_2.value = input_2.__value; input_2.name = 'sort'; label_2.htmlFor = 'sort-0'; div_6.className = 'radio'; component._bindingGroups[2].push(input_3); addListener(input_3, 'change', input_3_change_handler); input_3.id = 'sort-1'; input_3.type = 'radio'; input_3.__value = 'alphabet'; input_3.value = input_3.__value; input_3.name = 'sort'; label_3.htmlFor = 'sort-1'; div_7.className = 'radio'; div_5.className = 'control small-12 medium-4'; button.className = button_class_value = 'results ' + state.resultsClass; addListener(button, 'click', click_handler); div.className = 'controls grid-x grid-margin-x fullwidth'; }, m: function mount(target, anchor) { insertNode(div, target, anchor); appendNode(div_1, div); appendNode(fieldset, div_1); appendNode(legend, fieldset); appendNode(text_1, fieldset); appendNode(div_2, fieldset); appendNode(input, div_2); input.checked = input.__value === state.programTypeFilter; appendNode(text_2, div_2); appendNode(label, div_2); appendNode(text_4, div_2); for (var i = 0; i < each_blocks.length; i += 1) { each_blocks[i].m(fieldset, null); } appendNode(text_7, div); appendNode(div_3, div); appendNode(fieldset_1, div_3); appendNode(legend_1, fieldset_1); appendNode(text_9, fieldset_1); appendNode(div_4, fieldset_1); appendNode(input_1, div_4); input_1.checked = input_1.__value === state.collegeFilter; appendNode(text_10, div_4); appendNode(label_1, div_4); appendNode(text_12, div_4); for (var i = 0; i < each_1_blocks.length; i += 1) { each_1_blocks[i].m(fieldset_1, null); } appendNode(text_15, div); appendNode(div_5, div); appendNode(fieldset_2, div_5); appendNode(legend_2, fieldset_2); appendNode(text_17, fieldset_2); appendNode(div_6, fieldset_2); appendNode(input_2, div_6); input_2.checked = input_2.__value === state.sortFilter; appendNode(text_18, div_6); appendNode(label_2, div_6); appendNode(text_21, fieldset_2); appendNode(div_7, fieldset_2); appendNode(input_3, div_7); input_3.checked = input_3.__value === state.sortFilter; appendNode(text_22, div_7); appendNode(label_3, div_7); appendNode(text_27, div); appendNode(button, div); appendNode(span, button); appendNode(text_28, span); appendNode(text_29, span); component.refs.results = button; appendNode(text_30, div); if_block.m(target, anchor); insertNode(if_block_anchor, target, anchor); }, p: function update(changed, state) { input.checked = input.__value === state.programTypeFilter; var programTypeFilters = state.json.programTypeFilters; if (changed.json || changed.programTypeFilter) { for (var i = 0; i < programTypeFilters.length; i += 1) { if (each_blocks[i]) { each_blocks[i].p( changed, state, programTypeFilters, programTypeFilters[i], i ); } else { each_blocks[i] = create_each_block$1( state, programTypeFilters, programTypeFilters[i], i, component ); each_blocks[i].c(); each_blocks[i].m(fieldset, null); } } for (; i < each_blocks.length; i += 1) { each_blocks[i].u(); each_blocks[i].d(); } each_blocks.length = programTypeFilters.length; } input_1.checked = input_1.__value === state.collegeFilter; var colleges = state.json.colleges; if (changed.json || changed.collegeFilter) { for (var i = 0; i < colleges.length; i += 1) { if (each_1_blocks[i]) { each_1_blocks[i].p( changed, state, colleges, colleges[i], i ); } else { each_1_blocks[i] = create_each_block_1( state, colleges, colleges[i], i, component ); each_1_blocks[i].c(); each_1_blocks[i].m(fieldset_1, null); } } for (; i < each_1_blocks.length; i += 1) { each_1_blocks[i].u(); each_1_blocks[i].d(); } each_1_blocks.length = colleges.length; } input_2.checked = input_2.__value === state.sortFilter; input_3.checked = input_3.__value === state.sortFilter; if (changed.resultsCount) { text_28.data = state.resultsCount; } if ( changed.resultsClass && button_class_value !== (button_class_value = 'results ' + state.resultsClass) ) { button.className = button_class_value; } if ( current_block_type === (current_block_type = select_block_type$1(state)) && if_block ) { if_block.p(changed, state); } else { if_block.u(); if_block.d(); if_block = current_block_type(state, component); if_block.c(); if_block.m(if_block_anchor.parentNode, if_block_anchor); } }, u: function unmount() { detachNode(div); for (var i = 0; i < each_blocks.length; i += 1) { each_blocks[i].u(); } for (var i = 0; i < each_1_blocks.length; i += 1) { each_1_blocks[i].u(); } if_block.u(); detachNode(if_block_anchor); }, d: function destroy$$1() { component._bindingGroups[0].splice( component._bindingGroups[0].indexOf(input), 1 ); removeListener(input, 'change', input_change_handler); destroyEach(each_blocks); component._bindingGroups[1].splice( component._bindingGroups[1].indexOf(input_1), 1 ); removeListener(input_1, 'change', input_1_change_handler); destroyEach(each_1_blocks); component._bindingGroups[2].splice( component._bindingGroups[2].indexOf(input_2), 1 ); removeListener(input_2, 'change', input_2_change_handler); component._bindingGroups[2].splice( component._bindingGroups[2].indexOf(input_3), 1 ); removeListener(input_3, 'change', input_3_change_handler); removeListener(button, 'click', click_handler); if (component.refs.results === button) { component.refs.results = null; } if_block.d(); }, }; } // (180:13) {{else}} function create_if_block_3(state, component) { var loader = new Loader({ root: component.root, }); return { c: function create() { loader._fragment.c(); }, m: function mount(target, anchor) { loader._mount(target, anchor); }, p: noop, u: function unmount() { loader._unmount(); }, d: function destroy$$1() { loader.destroy(false); }, }; } function select_block_type$1(state) { if (state.sortFilter === 'department') { return create_if_block_1$1; } return create_if_block_2; } function select_block_type_1(state) { if (state.loaded) { return create_if_block$1; } return create_if_block_3; } function ProgramsList(options) { init(this, options); this.refs = {}; this._state = assign({}, options.data); this._state.windowHeight = window.innerHeight; this._recompute( { json: 1, loaded: 1, programTypeFilter: 1, collegeFilter: 1, filteredPrograms: 1, groupsOffset: 1, windowHeight: 1, yPos: 1, }, this._state ); this._bindingGroups = [[], [], []]; var _oncreate = oncreate$2.bind(this); if (!options.root) { this._oncreate = [_oncreate]; this._beforecreate = []; this._aftercreate = []; } else { this.root._oncreate.push(_oncreate); } this._fragment = create_main_fragment$2(this._state, this); if (options.target) { this._fragment.c(); this._fragment.m(options.target, options.anchor || null); this._lock = true; callAll(this._beforecreate); callAll(this._oncreate); callAll(this._aftercreate); this._lock = false; } } assign(ProgramsList.prototype, methods, proto); ProgramsList.prototype._recompute = function _recompute(changed, state) { if (changed.json) { if (differs(state.loaded, (state.loaded = loaded$1(state.json)))) { changed.loaded = true; } } if ( changed.loaded || changed.json || changed.programTypeFilter || changed.collegeFilter ) { if ( differs( state.filteredPrograms, (state.filteredPrograms = filteredPrograms( state.loaded, state.json, state.programTypeFilter, state.collegeFilter )) ) ) { changed.filteredPrograms = true; } } if (changed.filteredPrograms || changed.json) { if ( differs( state.programGroups, (state.programGroups = programGroups( state.filteredPrograms, state.json )) ) ) { changed.programGroups = true; } } if (changed.filteredPrograms) { if ( differs( state.alphabeticPrograms, (state.alphabeticPrograms = alphabeticPrograms( state.filteredPrograms )) ) ) { changed.alphabeticPrograms = true; } if ( differs( state.resultsCount, (state.resultsCount = resultsCount(state.filteredPrograms)) ) ) { changed.resultsCount = true; } } if (changed.groupsOffset || changed.windowHeight || changed.yPos) { if ( differs( state.resultsClass, (state.resultsClass = resultsClass( state.groupsOffset, state.windowHeight, state.yPos )) ) ) { changed.resultsClass = true; } } }; /** * Computed navItems property for list pagination */ function navItems(filteredItems, page, navRange) { var length = navRange.length; var pageIndex = page - 1; // some crazy pagination gatekeeping here, watch out... // 1 (2) 3 4 5 ✅ // 1 … 3 (4) 5 … 7 ✅ // 1 (2) 3 … 6 ✅ // 1 2 (3) 4 … 6 ✅ // 1 … 3 (4) 5 6 ✅ // 1 … 4 (5) 6 ✅ var navItems = _.map(navRange, function (value, index) { var navItem = { value: value }; if (index === pageIndex) { navItem.on = true; } if (length > 5) { // more than 5 pages means put `...` somewhere navItem.use = false; // default if (index === pageIndex - 1) { navItem.use = true; } if (index === pageIndex) { navItem.use = true; } if (index === pageIndex + 1) { navItem.use = true; } } else { // five or less just show them all navItem.use = true; } return navItem; }); if (length > 5) { if (page === 1) { navItems[2].use = true; navItems[3].etc = true; navItems[length - 1].use = true; } else if (page === 2) { navItems[4].etc = true; navItems[length - 1].use = true; } else if (page === 3) { navItems[0].use = true; navItems[4].etc = true; navItems[length - 1].use = true; } else if (pageIndex === length - 1) { navItems[0].use = true; navItems[length - 4].etc = true; navItems[length - 3].use = true; } else if (pageIndex === length - 2) { navItems[0].use = true; navItems[length - 4].etc = true; } else if (pageIndex === length - 3) { navItems[0].use = true; navItems[length - 5].etc = true; navItems[length - 1].use = true; } else { navItems[0].use = true; navItems[1].etc = true; navItems[length - 2].etc = true; navItems[length - 1].use = true; } } navItems = _.filter(navItems, function (item) { return item.use || item.etc || item.on; }); return navItems; } /** * Navigation helper for lists */ function navigate(event, direction) { event.preventDefault(); var page = this.get('page'); if (direction === 'previous') { --page; } else if (direction === 'next') { ++page; } else { page = direction; } this.set({ page: page }); // scroll up this.set({ yPosMirror: this.get('yPos') }); this.tween('yPosMirror', 0, { duration: 1000, easing: cubicOut, }); // focus first item setFocus(this.refs.list); } /** * Helper for checking state management on lists */ function checkState(paramName, value, defaultValue) { var params = new URLSearchParams(window.location.search); var param = params.get(paramName); if (_.isNil(value)) { var setter = {}; if (_.isNil(param)) { setter[paramName] = defaultValue; this.set(setter); params.set(paramName, defaultValue); history.replaceState( null, '', window.location.pathname + '?' + params.toString() ); } else { setter[paramName] = param; this.set(setter); } } else { params.set(paramName, value); history.replaceState( null, '', window.location.pathname + '?' + params.toString() ); } } /* client/source/app/components/NewsList.html generated by Svelte v1.50.0 */ function filteredItems(items, tag) { // filter, truncate, and sort if (tag) { items = _.filter(items, function (item) { var lowerTags = _.map(item.tags, function (item) { return item.toLowerCase(); }); return lowerTags.indexOf(tag.toLowerCase()) > -1; }); } items = _.map(items, function (item) { if (item.summary && item.summary.length > 200) { var pieces = item.summary.slice(0, 200).split(' '); pieces.pop(); item.summary = pieces.join(' ') + ' . . .'; } return item; }); // return items return _.orderBy(items, 'timestamp', 'desc'); } function paginatedItems(filteredItems, page, pagesize) { var start = (page - 1) * pagesize; filteredItems = filteredItems.slice(start, start + pagesize); return filteredItems; } function navRange(filteredItems, pagesize) { return _.range(1, filteredItems.length / pagesize + 1); } function navItems_1(filteredItems, page, navRange) { return navItems(filteredItems, page, navRange); } function data$1() { return { pagesize: 10, }; } var methods$1 = { tween: tween, navigate: navigate, checkState: checkState, }; function oncreate$3() { var this$1 = this; // just some simple state management this.observe('tag', function (tag) { return this$1.checkState('tag', tag, ''); }); this.observe('page', function (page) { return this$1.checkState('page', page, 1); }); // one time fetch fetch(this.get('url')) .then(function (response) { return response.json(); }) .then(function (json) { return this$1.set({ items: json }); }); // TODO: handle errors gracefully? // .catch(ex => console.log('parsing failed', ex)) // I hate this indirection, but it works... this.observe( 'yPosMirror', function (yPos) { this$1.set({ yPos: yPos }); }, { init: false } ); } function create_main_fragment$3(state, component) { var window_updating = false, text, div, div_1, text_1; function onwindowscroll(event) { window_updating = true; component.set({ yPos: this.scrollY, }); window_updating = false; } window.addEventListener('scroll', onwindowscroll); component.observe('yPos', function (y) { if (window_updating) { return; } window.scrollTo(window.scrollX, y); }); var if_block = state.tag && create_if_block$2(state, component); var current_block_type = select_block_type_1$1(state); var if_block_1 = current_block_type(state, component); var if_block_2 = state.navItems.length > 1 && state.paginatedItems.length && create_if_block_5(state, component); return { c: function create() { if (if_block) { if_block.c(); } text = createText('\r\n'); div = createElement('div'); div_1 = createElement('div'); if_block_1.c(); text_1 = createText('\r\n '); if (if_block_2) { if_block_2.c(); } this.h(); }, h: function hydrate() { div_1.className = 'list'; div.className = 'news-list media-objects block'; }, m: function mount(target, anchor) { if (if_block) { if_block.m(target, anchor); } insertNode(text, target, anchor); insertNode(div, target, anchor); appendNode(div_1, div); if_block_1.m(div_1, null); appendNode(text_1, div_1); if (if_block_2) { if_block_2.m(div, null); } component.refs.list = div; }, p: function update(changed, state) { if (state.tag) { if (if_block) { if_block.p(changed, state); } else { if_block = create_if_block$2(state, component); if_block.c(); if_block.m(text.parentNode, text); } } else if (if_block) { if_block.u(); if_block.d(); if_block = null; } if ( current_block_type === (current_block_type = select_block_type_1$1(state)) && if_block_1 ) { if_block_1.p(changed, state); } else { if_block_1.u(); if_block_1.d(); if_block_1 = current_block_type(state, component); if_block_1.c(); if_block_1.m(div_1, text_1); } if (state.navItems.length > 1 && state.paginatedItems.length) { if (if_block_2) { if_block_2.p(changed, state); } else { if_block_2 = create_if_block_5(state, component); if_block_2.c(); if_block_2.m(div, null); } } else if (if_block_2) { if_block_2.u(); if_block_2.d(); if_block_2 = null; } }, u: function unmount() { if (if_block) { if_block.u(); } detachNode(text); detachNode(div); if_block_1.u(); if (if_block_2) { if_block_2.u(); } }, d: function destroy$$1() { window.removeEventListener('scroll', onwindowscroll); if (if_block) { if_block.d(); } if_block_1.d(); if (if_block_2) { if_block_2.d(); } if (component.refs.list === div) { component.refs.list = null; } }, }; } // (74:39) {{#if tag}} function create_if_block$2(state, component) { var div, div_1, h2, text, text_1, text_2, button; function click_handler(event) { component.set({ page: 1, tag: '' }); } return { c: function create() { div = createElement('div'); div_1 = createElement('div'); h2 = createElement('h2'); text = createText('Results For: '); text_1 = createText(state.tag); text_2 = createText('\r\n '); button = createElement('button'); button.textContent = 'All News'; this.h(); }, h: function hydrate() { h2.className = 'h6 results'; button.className = 'button'; setAttribute(button, 'aria-label', 'Load all news'); addListener(button, 'click', click_handler); div_1.className = 'wrap'; div.className = 'listing-toolbar fullwidth'; }, m: function mount(target, anchor) { insertNode(div, target, anchor); appendNode(div_1, div); appendNode(h2, div_1); appendNode(text, h2); appendNode(text_1, h2); appendNode(text_2, div_1); appendNode(button, div_1); }, p: function update(changed, state) { if (changed.tag) { text_1.data = state.tag; } }, u: function unmount() { detachNode(div); }, d: function destroy$$1() { removeListener(button, 'click', click_handler); }, }; } // (82:49) {{#each paginatedItems as item}} function create_each_block$2( state, paginatedItems_1, item, item_index, component ) { var div, div_1, text_1, div_2, div_3, text_2_value = item.timestampFormatted, text_2, text_3, h2, a, text_4_value = item.title, text_4, a_href_value, text_5, div_4, text_6_value = item.summary, text_6; var current_block_type = select_block_type$2( state, paginatedItems_1, item, item_index ); var if_block = current_block_type( state, paginatedItems_1, item, item_index, component ); return { c: function create() { div = createElement('div'); div_1 = createElement('div'); if_block.c(); text_1 = createText('\r\n '); div_2 = createElement('div'); div_3 = createElement('div'); text_2 = createText(text_2_value); text_3 = createText('\r\n '); h2 = createElement('h2'); a = createElement('a'); text_4 = createText(text_4_value); text_5 = createText('\r\n '); div_4 = createElement('div'); text_6 = createText(text_6_value); this.h(); }, h: function hydrate() { div_1.className = 'img media-object-section'; div_3.className = 'date'; a.href = a_href_value = item.url; h2.className = 'h6 title'; div_4.className = 'body'; div_2.className = 'content media-object-section'; div.className = 'media-object stack-for-small'; }, m: function mount(target, anchor) { insertNode(div, target, anchor); appendNode(div_1, div); if_block.m(div_1, null); appendNode(text_1, div); appendNode(div_2, div); appendNode(div_3, div_2); appendNode(text_2, div_3); appendNode(text_3, div_2); appendNode(h2, div_2); appendNode(a, h2); appendNode(text_4, a); appendNode(text_5, div_2); appendNode(div_4, div_2); appendNode(text_6, div_4); }, p: function update( changed, state, paginatedItems_1, item, item_index ) { if ( current_block_type === (current_block_type = select_block_type$2( state, paginatedItems_1, item, item_index )) && if_block ) { if_block.p( changed, state, paginatedItems_1, item, item_index ); } else { if_block.u(); if_block.d(); if_block = current_block_type( state, paginatedItems_1, item, item_index, component ); if_block.c(); if_block.m(div_1, null); } if ( changed.paginatedItems && text_2_value !== (text_2_value = item.timestampFormatted) ) { text_2.data = text_2_value; } if ( changed.paginatedItems && text_4_value !== (text_4_value = item.title) ) { text_4.data = text_4_value; } if ( changed.paginatedItems && a_href_value !== (a_href_value = item.url) ) { a.href = a_href_value; } if ( changed.paginatedItems && text_6_value !== (text_6_value = item.summary) ) { text_6.data = text_6_value; } }, u: function unmount() { detachNode(div); if_block.u(); }, d: function destroy$$1() { if_block.d(); }, }; } // (84:44) {{#if item.image}} function create_if_block_2$1( state, paginatedItems_1, item, item_index, component ) { var img, img_src_value, img_alt_value; return { c: function create() { img = createElement('img'); this.h(); }, h: function hydrate() { img.src = img_src_value = item.image; img.alt = img_alt_value = item.imageAlt; }, m: function mount(target, anchor) { insertNode(img, target, anchor); }, p: function update( changed, state, paginatedItems_1, item, item_index ) { if ( changed.paginatedItems && img_src_value !== (img_src_value = item.image) ) { img.src = img_src_value; } if ( changed.paginatedItems && img_alt_value !== (img_alt_value = item.imageAlt) ) { img.alt = img_alt_value; } }, u: function unmount() { detachNode(img); }, d: noop, }; } // (84:112) {{else}} function create_if_block_3$1( state, paginatedItems_1, item, item_index, component ) { var img; return { c: function create() { img = createElement('img'); this.h(); }, h: function hydrate() { img.src = 'https://dummyimage.com/333x187/f2f3f2/f2f3f2.png'; setAttribute(img, 'aria-hidden', 'true'); img.alt = ''; }, m: function mount(target, anchor) { insertNode(img, target, anchor); }, p: noop, u: function unmount() { detachNode(img); }, d: noop, }; } // (82:20) {{#if paginatedItems.length}} function create_if_block_1$2(state, component) { var each_anchor; var paginatedItems_1 = state.paginatedItems; var each_blocks = []; for (var i = 0; i < paginatedItems_1.length; i += 1) { each_blocks[i] = create_each_block$2( state, paginatedItems_1, paginatedItems_1[i], i, component ); } return { c: function create() { for (var i = 0; i < each_blocks.length; i += 1) { each_blocks[i].c(); } each_anchor = createComment(); }, m: function mount(target, anchor) { for (var i = 0; i < each_blocks.length; i += 1) { each_blocks[i].m(target, anchor); } insertNode(each_anchor, target, anchor); }, p: function update(changed, state) { var paginatedItems_1 = state.paginatedItems; if (changed.paginatedItems) { for (var i = 0; i < paginatedItems_1.length; i += 1) { if (each_blocks[i]) { each_blocks[i].p( changed, state, paginatedItems_1, paginatedItems_1[i], i ); } else { each_blocks[i] = create_each_block$2( state, paginatedItems_1, paginatedItems_1[i], i, component ); each_blocks[i].c(); each_blocks[i].m( each_anchor.parentNode, each_anchor ); } } for (; i < each_blocks.length; i += 1) { each_blocks[i].u(); each_blocks[i].d(); } each_blocks.length = paginatedItems_1.length; } }, u: function unmount() { for (var i = 0; i < each_blocks.length; i += 1) { each_blocks[i].u(); } detachNode(each_anchor); }, d: function destroy$$1() { destroyEach(each_blocks); }, }; } // (91:19) {{else}} function create_if_block_4(state, component) { var loader = new Loader({ root: component.root, }); return { c: function create() { loader._fragment.c(); }, m: function mount(target, anchor) { loader._mount(target, anchor); }, p: noop, u: function unmount() { loader._unmount(); }, d: function destroy$$1() { loader.destroy(false); }, }; } // (95:27) {{#if page <= 1}} function create_if_block_6(state, component) { var li; return { c: function create() { li = createElement('li'); li.innerHTML = 'Previous page'; this.h(); }, h: function hydrate() { li.className = 'pagination-previous disabled'; }, m: function mount(target, anchor) { insertNode(li, target, anchor); }, u: function unmount() { detachNode(li); }, d: noop, }; } // (96:98) {{else}} function create_if_block_7(state, component) { var li, a; function click_handler(event) { component.navigate(event, 'previous'); } return { c: function create() { li = createElement('li'); a = createElement('a'); a.innerHTML = 'Previous page'; this.h(); }, h: function hydrate() { a.href = '/'; setAttribute(a, 'aria-label', 'Previous page'); addListener(a, 'click', click_handler); li.className = 'pagination-previous'; }, m: function mount(target, anchor) { insertNode(li, target, anchor); appendNode(a, li); }, u: function unmount() { detachNode(li); }, d: function destroy$$1() { removeListener(a, 'click', click_handler); }, }; } // (97:178) {{#each navItems as item}} function create_each_block_1$1( state, navItems_2, item, item_index, component ) { var if_block_anchor; var current_block_type = select_block_type_3( state, navItems_2, item, item_index ); var if_block = current_block_type( state, navItems_2, item, item_index, component ); return { c: function create() { if_block.c(); if_block_anchor = createComment(); }, m: function mount(target, anchor) { if_block.m(target, anchor); insertNode(if_block_anchor, target, anchor); }, p: function update(changed, state, navItems_2, item, item_index) { if ( current_block_type === (current_block_type = select_block_type_3( state, navItems_2, item, item_index )) && if_block ) { if_block.p(changed, state, navItems_2, item, item_index); } else { if_block.u(); if_block.d(); if_block = current_block_type( state, navItems_2, item, item_index, component ); if_block.c(); if_block.m(if_block_anchor.parentNode, if_block_anchor); } }, u: function unmount() { if_block.u(); detachNode(if_block_anchor); }, d: function destroy$$1() { if_block.d(); }, }; } // (97:204) {{#if item.on}} function create_if_block_8(state, navItems_2, item, item_index, component) { var li, span, text_1_value = item.value, text_1; return { c: function create() { li = createElement('li'); span = createElement('span'); span.textContent = "You're on page "; text_1 = createText(text_1_value); this.h(); }, h: function hydrate() { span.className = 'show-for-sr'; li.className = 'current'; }, m: function mount(target, anchor) { insertNode(li, target, anchor); appendNode(span, li); appendNode(text_1, li); }, p: function update(changed, state, navItems_2, item, item_index) { if ( changed.navItems && text_1_value !== (text_1_value = item.value) ) { text_1.data = text_1_value; } }, u: function unmount() { detachNode(li); }, d: noop, }; } // (98:112) function create_if_block_9(state, navItems_2, item, item_index, component) { var li; return { c: function create() { li = createElement('li'); this.h(); }, h: function hydrate() { li.className = 'ellipsis'; setAttribute(li, 'aria-hidden', 'true'); }, m: function mount(target, anchor) { insertNode(li, target, anchor); }, p: noop, u: function unmount() { detachNode(li); }, d: noop, }; } // (99:51) {{else}} function create_if_block_10( state, navItems_2, item, item_index, component ) { var li, a, text_value = item.value, text, a_aria_label_value; return { c: function create() { li = createElement('li'); a = createElement('a'); text = createText(text_value); this.h(); }, h: function hydrate() { a.href = '/'; setAttribute( a, 'aria-label', (a_aria_label_value = 'Page ' + item.value) ); addListener(a, 'click', click_handler); a._svelte = { component: component, navItems_2: navItems_2, item_index: item_index, }; }, m: function mount(target, anchor) { insertNode(li, target, anchor); appendNode(a, li); appendNode(text, a); }, p: function update(changed, state, navItems_2, item, item_index) { if ( changed.navItems && text_value !== (text_value = item.value) ) { text.data = text_value; } if ( changed.navItems && a_aria_label_value !== (a_aria_label_value = 'Page ' + item.value) ) { setAttribute(a, 'aria-label', a_aria_label_value); } a._svelte.navItems_2 = navItems_2; a._svelte.item_index = item_index; }, u: function unmount() { detachNode(li); }, d: function destroy$$1() { removeListener(a, 'click', click_handler); }, }; } // (100:133) {{#if page >= navRange.length}} function create_if_block_11(state, component) { var li; return { c: function create() { li = createElement('li'); li.innerHTML = 'Next page'; this.h(); }, h: function hydrate() { li.className = 'pagination-next disabled'; }, m: function mount(target, anchor) { insertNode(li, target, anchor); }, u: function unmount() { detachNode(li); }, d: noop, }; } // (101:90) {{else}} function create_if_block_12(state, component) { var li, a; function click_handler_1(event) { component.navigate(event, 'next'); } return { c: function create() { li = createElement('li'); a = createElement('a'); a.innerHTML = 'Next page'; this.h(); }, h: function hydrate() { a.href = '/'; setAttribute(a, 'aria-label', 'Next page'); addListener(a, 'click', click_handler_1); li.className = 'pagination-next'; }, m: function mount(target, anchor) { insertNode(li, target, anchor); appendNode(a, li); }, u: function unmount() { detachNode(li); }, d: function destroy$$1() { removeListener(a, 'click', click_handler_1); }, }; } // (93:8) {{#if navItems.length > 1 && paginatedItems.length}} function create_if_block_5(state, component) { var nav, ul, if_block_anchor, each_anchor; var current_block_type = select_block_type_2(state); var if_block = current_block_type(state, component); var navItems_2 = state.navItems; var each_blocks = []; for (var i = 0; i < navItems_2.length; i += 1) { each_blocks[i] = create_each_block_1$1( state, navItems_2, navItems_2[i], i, component ); } var current_block_type_1 = select_block_type_4(state); var if_block_1 = current_block_type_1(state, component); return { c: function create() { nav = createElement('nav'); ul = createElement('ul'); if_block.c(); if_block_anchor = createComment(); for (var i = 0; i < each_blocks.length; i += 1) { each_blocks[i].c(); } each_anchor = createComment(); if_block_1.c(); this.h(); }, h: function hydrate() { ul.className = 'pagination'; nav.className = 'list-navigation'; setAttribute(nav, 'role', 'navigation'); setAttribute(nav, 'aria-label', 'News list pagination'); }, m: function mount(target, anchor) { insertNode(nav, target, anchor); appendNode(ul, nav); if_block.m(ul, null); appendNode(if_block_anchor, ul); for (var i = 0; i < each_blocks.length; i += 1) { each_blocks[i].m(ul, null); } appendNode(each_anchor, ul); if_block_1.m(ul, null); }, p: function update(changed, state) { if ( current_block_type !== (current_block_type = select_block_type_2(state)) ) { if_block.u(); if_block.d(); if_block = current_block_type(state, component); if_block.c(); if_block.m(ul, if_block_anchor); } var navItems_2 = state.navItems; if (changed.navItems) { for (var i = 0; i < navItems_2.length; i += 1) { if (each_blocks[i]) { each_blocks[i].p( changed, state, navItems_2, navItems_2[i], i ); } else { each_blocks[i] = create_each_block_1$1( state, navItems_2, navItems_2[i], i, component ); each_blocks[i].c(); each_blocks[i].m(ul, each_anchor); } } for (; i < each_blocks.length; i += 1) { each_blocks[i].u(); each_blocks[i].d(); } each_blocks.length = navItems_2.length; } if ( current_block_type_1 !== (current_block_type_1 = select_block_type_4(state)) ) { if_block_1.u(); if_block_1.d(); if_block_1 = current_block_type_1(state, component); if_block_1.c(); if_block_1.m(ul, null); } }, u: function unmount() { detachNode(nav); if_block.u(); for (var i = 0; i < each_blocks.length; i += 1) { each_blocks[i].u(); } if_block_1.u(); }, d: function destroy$$1() { if_block.d(); destroyEach(each_blocks); if_block_1.d(); }, }; } function select_block_type$2(state, paginatedItems_1, item, item_index) { if (item.image) { return create_if_block_2$1; } return create_if_block_3$1; } function select_block_type_1$1(state) { if (state.paginatedItems.length) { return create_if_block_1$2; } return create_if_block_4; } function select_block_type_2(state) { if (state.page <= 1) { return create_if_block_6; } return create_if_block_7; } function click_handler(event) { var component = this._svelte.component; var navItems_2 = this._svelte.navItems_2, item_index = this._svelte.item_index, item = navItems_2[item_index]; component.navigate(event, item.value); } function select_block_type_3(state, navItems_2, item, item_index) { if (item.on) { return create_if_block_8; } if (item.etc) { return create_if_block_9; } return create_if_block_10; } function select_block_type_4(state) { if (state.page >= state.navRange.length) { return create_if_block_11; } return create_if_block_12; } function NewsList(options) { init(this, options); this.refs = {}; this._state = assign(data$1(), options.data); this._state.yPos = window.scrollY; this._recompute( { items: 1, tag: 1, filteredItems: 1, page: 1, pagesize: 1, navRange: 1, }, this._state ); var _oncreate = oncreate$3.bind(this); if (!options.root) { this._oncreate = [_oncreate]; this._beforecreate = []; this._aftercreate = []; } else { this.root._oncreate.push(_oncreate); } this._fragment = create_main_fragment$3(this._state, this); if (options.target) { this._fragment.c(); this._fragment.m(options.target, options.anchor || null); this._lock = true; callAll(this._beforecreate); callAll(this._oncreate); callAll(this._aftercreate); this._lock = false; } } assign(NewsList.prototype, methods$1, proto); NewsList.prototype._recompute = function _recompute(changed, state) { if (changed.items || changed.tag) { if ( differs( state.filteredItems, (state.filteredItems = filteredItems( state.items, state.tag )) ) ) { changed.filteredItems = true; } } if (changed.filteredItems || changed.page || changed.pagesize) { if ( differs( state.paginatedItems, (state.paginatedItems = paginatedItems( state.filteredItems, state.page, state.pagesize )) ) ) { changed.paginatedItems = true; } } if (changed.filteredItems || changed.pagesize) { if ( differs( state.navRange, (state.navRange = navRange( state.filteredItems, state.pagesize )) ) ) { changed.navRange = true; } } if (changed.filteredItems || changed.page || changed.navRange) { if ( differs( state.navItems, (state.navItems = navItems_1( state.filteredItems, state.page, state.navRange )) ) ) { changed.navItems = true; } } }; /* client/source/app/components/EventsList.html generated by Svelte v1.50.0 */ function filteredItems$1(items, tag) { // filter and sort if (tag) { items = _.filter(items, function (item) { var lowerTags = _.map(item.tags, function (item) { return item.toLowerCase(); }); return lowerTags.indexOf(tag.toLowerCase()) > -1; }); } return _.sortBy(items, 'timestamp'); } function paginatedItems$1(filteredItems, page, pagesize) { var start = (page - 1) * pagesize; filteredItems = filteredItems.slice(start, start + pagesize); return filteredItems; } function navRange$1(filteredItems, pagesize) { return _.range(1, filteredItems.length / pagesize + 1); } function navItems_1$1(filteredItems, page, navRange) { return navItems(filteredItems, page, navRange); } function data$2() { return { pagesize: 10, }; } var methods$2 = { tween: tween, navigate: navigate, checkState: checkState, }; function oncreate$4() { var this$1 = this; // just some simple state management this.observe('tag', function (tag) { return this$1.checkState('tag', tag, ''); }); this.observe('page', function (page) { return this$1.checkState('page', page, 1); }); // one time fetch fetch(this.get('url')) .then(function (response) { return response.json(); }) .then(function (json) { return this$1.set({ items: json }); }) // TODO: handle errors gracefully? .catch(function (ex) { return console.log('parsing failed', ex); }); // I hate this indirection, but it works... this.observe( 'yPosMirror', function (yPos) { this$1.set({ yPos: yPos }); }, { init: false } ); } function create_main_fragment$4(state, component) { var window_updating = false, text, div, ul; function onwindowscroll(event) { window_updating = true; component.set({ yPos: this.scrollY, }); window_updating = false; } window.addEventListener('scroll', onwindowscroll); component.observe('yPos', function (y) { if (window_updating) { return; } window.scrollTo(window.scrollX, y); }); var if_block = state.tag && create_if_block$3(state, component); var current_block_type = select_block_type$3(state); var if_block_1 = current_block_type(state, component); var if_block_2 = state.navItems.length > 1 && state.paginatedItems.length && create_if_block_3$2(state, component); return { c: function create() { if (if_block) { if_block.c(); } text = createText('\r\n'); div = createElement('div'); ul = createElement('ul'); if_block_1.c(); if (if_block_2) { if_block_2.c(); } this.h(); }, h: function hydrate() { ul.className = 'list'; div.className = 'events-list media-objects block'; }, m: function mount(target, anchor) { if (if_block) { if_block.m(target, anchor); } insertNode(text, target, anchor); insertNode(div, target, anchor); appendNode(ul, div); if_block_1.m(ul, null); if (if_block_2) { if_block_2.m(div, null); } component.refs.list = div; }, p: function update(changed, state) { if (state.tag) { if (if_block) { if_block.p(changed, state); } else { if_block = create_if_block$3(state, component); if_block.c(); if_block.m(text.parentNode, text); } } else if (if_block) { if_block.u(); if_block.d(); if_block = null; } if ( current_block_type === (current_block_type = select_block_type$3(state)) && if_block_1 ) { if_block_1.p(changed, state); } else { if_block_1.u(); if_block_1.d(); if_block_1 = current_block_type(state, component); if_block_1.c(); if_block_1.m(ul, null); } if (state.navItems.length > 1 && state.paginatedItems.length) { if (if_block_2) { if_block_2.p(changed, state); } else { if_block_2 = create_if_block_3$2(state, component); if_block_2.c(); if_block_2.m(div, null); } } else if (if_block_2) { if_block_2.u(); if_block_2.d(); if_block_2 = null; } }, u: function unmount() { if (if_block) { if_block.u(); } detachNode(text); detachNode(div); if_block_1.u(); if (if_block_2) { if_block_2.u(); } }, d: function destroy$$1() { window.removeEventListener('scroll', onwindowscroll); if (if_block) { if_block.d(); } if_block_1.d(); if (if_block_2) { if_block_2.d(); } if (component.refs.list === div) { component.refs.list = null; } }, }; } // (65:39) {{#if tag}} function create_if_block$3(state, component) { var div, div_1, h2, text, text_1, text_2, button; function click_handler(event) { component.set({ page: 1, tag: '' }); } return { c: function create() { div = createElement('div'); div_1 = createElement('div'); h2 = createElement('h2'); text = createText('Events Tagged as: '); text_1 = createText(state.tag); text_2 = createText('\r\n '); button = createElement('button'); button.textContent = 'All Events'; this.h(); }, h: function hydrate() { h2.className = 'h6 results'; button.className = 'button'; setAttribute(button, 'aria-label', 'Load all events'); addListener(button, 'click', click_handler); div_1.className = 'wrap'; div.className = 'listing-toolbar fullwidth'; }, m: function mount(target, anchor) { insertNode(div, target, anchor); appendNode(div_1, div); appendNode(h2, div_1); appendNode(text, h2); appendNode(text_1, h2); appendNode(text_2, div_1); appendNode(button, div_1); }, p: function update(changed, state) { if (changed.tag) { text_1.data = state.tag; } }, u: function unmount() { detachNode(div); }, d: function destroy$$1() { removeListener(button, 'click', click_handler); }, }; } // (73:48) {{#each paginatedItems as item}} function create_each_block$3( state, paginatedItems_1, item, item_index, component ) { var li, div, div_1, text_value = item.month, text, text_1, div_2, text_2_value = item.date, text_2, text_4, div_3, div_4, text_5_value = item.timestampFormatted, text_5, text_6, h2, a, text_7_value = item.title, text_7, a_href_value, text_8, div_5, text_9_value = item.summary, text_9; return { c: function create() { li = createElement('li'); div = createElement('div'); div_1 = createElement('div'); text = createText(text_value); text_1 = createText('\r\n '); div_2 = createElement('div'); text_2 = createText(text_2_value); text_4 = createText('\r\n '); div_3 = createElement('div'); div_4 = createElement('div'); text_5 = createText(text_5_value); text_6 = createText('\r\n '); h2 = createElement('h2'); a = createElement('a'); text_7 = createText(text_7_value); text_8 = createText('\r\n '); div_5 = createElement('div'); text_9 = createText(text_9_value); this.h(); }, h: function hydrate() { div_1.className = 'db-month'; div_2.className = 'db-date'; div.className = 'date-block media-object-section'; setAttribute(div, 'aria-hidden', 'true'); div_4.className = 'date'; a.href = a_href_value = item.url; h2.className = 'h6 title'; div_5.className = 'body'; div_3.className = 'content media-object-section'; li.className = 'media-object'; }, m: function mount(target, anchor) { insertNode(li, target, anchor); appendNode(div, li); appendNode(div_1, div); appendNode(text, div_1); appendNode(text_1, div); appendNode(div_2, div); appendNode(text_2, div_2); appendNode(text_4, li); appendNode(div_3, li); appendNode(div_4, div_3); appendNode(text_5, div_4); appendNode(text_6, div_3); appendNode(h2, div_3); appendNode(a, h2); appendNode(text_7, a); appendNode(text_8, div_3); appendNode(div_5, div_3); appendNode(text_9, div_5); }, p: function update( changed, state, paginatedItems_1, item, item_index ) { if ( changed.paginatedItems && text_value !== (text_value = item.month) ) { text.data = text_value; } if ( changed.paginatedItems && text_2_value !== (text_2_value = item.date) ) { text_2.data = text_2_value; } if ( changed.paginatedItems && text_5_value !== (text_5_value = item.timestampFormatted) ) { text_5.data = text_5_value; } if ( changed.paginatedItems && text_7_value !== (text_7_value = item.title) ) { text_7.data = text_7_value; } if ( changed.paginatedItems && a_href_value !== (a_href_value = item.url) ) { a.href = a_href_value; } if ( changed.paginatedItems && text_9_value !== (text_9_value = item.summary) ) { text_9.data = text_9_value; } }, u: function unmount() { detachNode(li); }, d: noop, }; } // (73:19) {{#if paginatedItems.length}} function create_if_block_1$3(state, component) { var each_anchor; var paginatedItems_1 = state.paginatedItems; var each_blocks = []; for (var i = 0; i < paginatedItems_1.length; i += 1) { each_blocks[i] = create_each_block$3( state, paginatedItems_1, paginatedItems_1[i], i, component ); } return { c: function create() { for (var i = 0; i < each_blocks.length; i += 1) { each_blocks[i].c(); } each_anchor = createComment(); }, m: function mount(target, anchor) { for (var i = 0; i < each_blocks.length; i += 1) { each_blocks[i].m(target, anchor); } insertNode(each_anchor, target, anchor); }, p: function update(changed, state) { var paginatedItems_1 = state.paginatedItems; if (changed.paginatedItems) { for (var i = 0; i < paginatedItems_1.length; i += 1) { if (each_blocks[i]) { each_blocks[i].p( changed, state, paginatedItems_1, paginatedItems_1[i], i ); } else { each_blocks[i] = create_each_block$3( state, paginatedItems_1, paginatedItems_1[i], i, component ); each_blocks[i].c(); each_blocks[i].m( each_anchor.parentNode, each_anchor ); } } for (; i < each_blocks.length; i += 1) { each_blocks[i].u(); each_blocks[i].d(); } each_blocks.length = paginatedItems_1.length; } }, u: function unmount() { for (var i = 0; i < each_blocks.length; i += 1) { each_blocks[i].u(); } detachNode(each_anchor); }, d: function destroy$$1() { destroyEach(each_blocks); }, }; } // (84:18) {{else}} function create_if_block_2$2(state, component) { var loader = new Loader({ root: component.root, }); return { c: function create() { loader._fragment.c(); }, m: function mount(target, anchor) { loader._mount(target, anchor); }, p: noop, u: function unmount() { loader._unmount(); }, d: function destroy$$1() { loader.destroy(false); }, }; } // (88:27) {{#if page <= 1}} function create_if_block_4$1(state, component) { var li; return { c: function create() { li = createElement('li'); li.innerHTML = 'Previous page'; this.h(); }, h: function hydrate() { li.className = 'pagination-previous disabled'; }, m: function mount(target, anchor) { insertNode(li, target, anchor); }, u: function unmount() { detachNode(li); }, d: noop, }; } // (89:98) {{else}} function create_if_block_5$1(state, component) { var li, a; function click_handler(event) { component.navigate(event, 'previous'); } return { c: function create() { li = createElement('li'); a = createElement('a'); a.innerHTML = 'Previous page'; this.h(); }, h: function hydrate() { a.href = '/'; setAttribute(a, 'aria-label', 'Previous page'); addListener(a, 'click', click_handler); li.className = 'pagination-previous'; }, m: function mount(target, anchor) { insertNode(li, target, anchor); appendNode(a, li); }, u: function unmount() { detachNode(li); }, d: function destroy$$1() { removeListener(a, 'click', click_handler); }, }; } // (90:178) {{#each navItems as item}} function create_each_block_1$2( state, navItems_2, item, item_index, component ) { var if_block_anchor; var current_block_type = select_block_type_2$1( state, navItems_2, item, item_index ); var if_block = current_block_type( state, navItems_2, item, item_index, component ); return { c: function create() { if_block.c(); if_block_anchor = createComment(); }, m: function mount(target, anchor) { if_block.m(target, anchor); insertNode(if_block_anchor, target, anchor); }, p: function update(changed, state, navItems_2, item, item_index) { if ( current_block_type === (current_block_type = select_block_type_2$1( state, navItems_2, item, item_index )) && if_block ) { if_block.p(changed, state, navItems_2, item, item_index); } else { if_block.u(); if_block.d(); if_block = current_block_type( state, navItems_2, item, item_index, component ); if_block.c(); if_block.m(if_block_anchor.parentNode, if_block_anchor); } }, u: function unmount() { if_block.u(); detachNode(if_block_anchor); }, d: function destroy$$1() { if_block.d(); }, }; } // (90:204) {{#if item.on}} function create_if_block_6$1( state, navItems_2, item, item_index, component ) { var li, span, text_1_value = item.value, text_1; return { c: function create() { li = createElement('li'); span = createElement('span'); span.textContent = "You're on page "; text_1 = createText(text_1_value); this.h(); }, h: function hydrate() { span.className = 'show-for-sr'; li.className = 'current'; }, m: function mount(target, anchor) { insertNode(li, target, anchor); appendNode(span, li); appendNode(text_1, li); }, p: function update(changed, state, navItems_2, item, item_index) { if ( changed.navItems && text_1_value !== (text_1_value = item.value) ) { text_1.data = text_1_value; } }, u: function unmount() { detachNode(li); }, d: noop, }; } // (91:112) function create_if_block_7$1( state, navItems_2, item, item_index, component ) { var li; return { c: function create() { li = createElement('li'); this.h(); }, h: function hydrate() { li.className = 'ellipsis'; setAttribute(li, 'aria-hidden', 'true'); }, m: function mount(target, anchor) { insertNode(li, target, anchor); }, p: noop, u: function unmount() { detachNode(li); }, d: noop, }; } // (92:51) {{else}} function create_if_block_8$1( state, navItems_2, item, item_index, component ) { var li, a, text_value = item.value, text, a_aria_label_value; return { c: function create() { li = createElement('li'); a = createElement('a'); text = createText(text_value); this.h(); }, h: function hydrate() { a.href = '/'; setAttribute( a, 'aria-label', (a_aria_label_value = 'Page ' + item.value) ); addListener(a, 'click', click_handler$1); a._svelte = { component: component, navItems_2: navItems_2, item_index: item_index, }; }, m: function mount(target, anchor) { insertNode(li, target, anchor); appendNode(a, li); appendNode(text, a); }, p: function update(changed, state, navItems_2, item, item_index) { if ( changed.navItems && text_value !== (text_value = item.value) ) { text.data = text_value; } if ( changed.navItems && a_aria_label_value !== (a_aria_label_value = 'Page ' + item.value) ) { setAttribute(a, 'aria-label', a_aria_label_value); } a._svelte.navItems_2 = navItems_2; a._svelte.item_index = item_index; }, u: function unmount() { detachNode(li); }, d: function destroy$$1() { removeListener(a, 'click', click_handler$1); }, }; } // (93:133) {{#if page >= navRange.length}} function create_if_block_9$1(state, component) { var li; return { c: function create() { li = createElement('li'); li.innerHTML = 'Next page'; this.h(); }, h: function hydrate() { li.className = 'pagination-next disabled'; }, m: function mount(target, anchor) { insertNode(li, target, anchor); }, u: function unmount() { detachNode(li); }, d: noop, }; } // (94:90) {{else}} function create_if_block_10$1(state, component) { var li, a; function click_handler_1(event) { component.navigate(event, 'next'); } return { c: function create() { li = createElement('li'); a = createElement('a'); a.innerHTML = 'Next page'; this.h(); }, h: function hydrate() { a.href = '/'; setAttribute(a, 'aria-label', 'Next page'); addListener(a, 'click', click_handler_1); li.className = 'pagination-next'; }, m: function mount(target, anchor) { insertNode(li, target, anchor); appendNode(a, li); }, u: function unmount() { detachNode(li); }, d: function destroy$$1() { removeListener(a, 'click', click_handler_1); }, }; } // (86:7) {{#if navItems.length > 1 && paginatedItems.length}} function create_if_block_3$2(state, component) { var nav, ul, if_block_anchor, each_anchor; var current_block_type = select_block_type_1$2(state); var if_block = current_block_type(state, component); var navItems_2 = state.navItems; var each_blocks = []; for (var i = 0; i < navItems_2.length; i += 1) { each_blocks[i] = create_each_block_1$2( state, navItems_2, navItems_2[i], i, component ); } var current_block_type_1 = select_block_type_3$1(state); var if_block_1 = current_block_type_1(state, component); return { c: function create() { nav = createElement('nav'); ul = createElement('ul'); if_block.c(); if_block_anchor = createComment(); for (var i = 0; i < each_blocks.length; i += 1) { each_blocks[i].c(); } each_anchor = createComment(); if_block_1.c(); this.h(); }, h: function hydrate() { ul.className = 'pagination'; nav.className = 'list-navigation'; setAttribute(nav, 'role', 'navigation'); setAttribute(nav, 'aria-label', 'Events list pagination'); }, m: function mount(target, anchor) { insertNode(nav, target, anchor); appendNode(ul, nav); if_block.m(ul, null); appendNode(if_block_anchor, ul); for (var i = 0; i < each_blocks.length; i += 1) { each_blocks[i].m(ul, null); } appendNode(each_anchor, ul); if_block_1.m(ul, null); }, p: function update(changed, state) { if ( current_block_type !== (current_block_type = select_block_type_1$2(state)) ) { if_block.u(); if_block.d(); if_block = current_block_type(state, component); if_block.c(); if_block.m(ul, if_block_anchor); } var navItems_2 = state.navItems; if (changed.navItems) { for (var i = 0; i < navItems_2.length; i += 1) { if (each_blocks[i]) { each_blocks[i].p( changed, state, navItems_2, navItems_2[i], i ); } else { each_blocks[i] = create_each_block_1$2( state, navItems_2, navItems_2[i], i, component ); each_blocks[i].c(); each_blocks[i].m(ul, each_anchor); } } for (; i < each_blocks.length; i += 1) { each_blocks[i].u(); each_blocks[i].d(); } each_blocks.length = navItems_2.length; } if ( current_block_type_1 !== (current_block_type_1 = select_block_type_3$1(state)) ) { if_block_1.u(); if_block_1.d(); if_block_1 = current_block_type_1(state, component); if_block_1.c(); if_block_1.m(ul, null); } }, u: function unmount() { detachNode(nav); if_block.u(); for (var i = 0; i < each_blocks.length; i += 1) { each_blocks[i].u(); } if_block_1.u(); }, d: function destroy$$1() { if_block.d(); destroyEach(each_blocks); if_block_1.d(); }, }; } function select_block_type$3(state) { if (state.paginatedItems.length) { return create_if_block_1$3; } return create_if_block_2$2; } function select_block_type_1$2(state) { if (state.page <= 1) { return create_if_block_4$1; } return create_if_block_5$1; } function click_handler$1(event) { var component = this._svelte.component; var navItems_2 = this._svelte.navItems_2, item_index = this._svelte.item_index, item = navItems_2[item_index]; component.navigate(event, item.value); } function select_block_type_2$1(state, navItems_2, item, item_index) { if (item.on) { return create_if_block_6$1; } if (item.etc) { return create_if_block_7$1; } return create_if_block_8$1; } function select_block_type_3$1(state) { if (state.page >= state.navRange.length) { return create_if_block_9$1; } return create_if_block_10$1; } function EventsList(options) { init(this, options); this.refs = {}; this._state = assign(data$2(), options.data); this._state.yPos = window.scrollY; this._recompute( { items: 1, tag: 1, filteredItems: 1, page: 1, pagesize: 1, navRange: 1, }, this._state ); var _oncreate = oncreate$4.bind(this); if (!options.root) { this._oncreate = [_oncreate]; this._beforecreate = []; this._aftercreate = []; } else { this.root._oncreate.push(_oncreate); } this._fragment = create_main_fragment$4(this._state, this); if (options.target) { this._fragment.c(); this._fragment.m(options.target, options.anchor || null); this._lock = true; callAll(this._beforecreate); callAll(this._oncreate); callAll(this._aftercreate); this._lock = false; } } assign(EventsList.prototype, methods$2, proto); EventsList.prototype._recompute = function _recompute(changed, state) { if (changed.items || changed.tag) { if ( differs( state.filteredItems, (state.filteredItems = filteredItems$1( state.items, state.tag )) ) ) { changed.filteredItems = true; } } if (changed.filteredItems || changed.page || changed.pagesize) { if ( differs( state.paginatedItems, (state.paginatedItems = paginatedItems$1( state.filteredItems, state.page, state.pagesize )) ) ) { changed.paginatedItems = true; } } if (changed.filteredItems || changed.pagesize) { if ( differs( state.navRange, (state.navRange = navRange$1( state.filteredItems, state.pagesize )) ) ) { changed.navRange = true; } } if (changed.filteredItems || changed.page || changed.navRange) { if ( differs( state.navItems, (state.navItems = navItems_1$1( state.filteredItems, state.page, state.navRange )) ) ) { changed.navItems = true; } } }; /* client/source/app/components/Directory.html generated by Svelte v1.50.0 */ function loaded$2(items) { return !!items; } function pagesize(windowWidth) { if (windowWidth < 700) { return 8; } else if (windowWidth < 1024) { return 6; } return 8; } function filteredItems$2(items, query, departmentFilter) { // filter and sort if (query && query.trim()) { var fuse = new Fuse(items.slice(), { // shouldSort: true, keys: ['name'], threshold: 0.5, }); items = fuse.search(query); } if (departmentFilter !== 'all') { items = _.filter(items, { departmentKey: departmentFilter }); } return _.sortBy(items, ['last', 'first']); } function paginatedItems$2(filteredItems, page, pagesize) { var start = (page - 1) * pagesize; filteredItems = filteredItems.slice(start, start + pagesize); return filteredItems; } function navRange$2(filteredItems, pagesize) { return _.range(1, filteredItems.length / pagesize + 1); } function navItems_1$2(filteredItems, page, navRange) { return navItems(filteredItems, page, navRange); } function data$3() { return { preQuery: '', }; } var methods$3 = { tween: tween, submitFilters: function submitFilters(event, preQuery) { event.preventDefault(); this.set({ query: preQuery }); this.getOptionSize(); }, navigate: function navigate$$1(event, direction) { event.preventDefault(); var page = this.get('page'); if (direction === 'previous') { --page; } else if (direction === 'next') { ++page; } else { page = direction; } this.set({ page: page }); // scroll up if (this.get('windowWidth') < 700) { this.set({ yPosMirror: this.get('yPos') }); this.tween( 'yPosMirror', getElementOffset(this.refs.list) - 100, { duration: 1000, easing: cubicOut, } ); } // focus first item setFocus(this.refs.list); }, checkPagination: function checkPagination(navRange, page) { if (navRange.length < parseInt(page)) { this.set({ page: navRange.length }); } }, checkState: checkState, getOptionSize: function getOptionSize() { var this$1 = this; this.set({ optionText: this.refs.select.querySelector('option:checked') .textContent, }); // wait for DOM setTimeout(function () { this$1.set({ optionTextSize: this$1.refs.optionText.getBoundingClientRect().width, }); }, 0); }, }; function oncreate$5() { var this$1 = this; this.getOptionSize(); // just some simple state management this.observe('departmentFilter', function (departmentFilter) { return this$1.checkState( 'departmentFilter', departmentFilter, 'all' ); }); this.observe('query', function (query) { return this$1.checkState('query', query, ''); }); this.observe('page', function (page) { return this$1.checkState('page', page, 1); }); // one time fetch fetch(this.get('url')) .then(function (response) { return response.json(); }) .then(function (json) { this$1.set({ items: json.directory, departments: json.departments, }); }); // TODO: handle errors gracefully? // .catch(ex => console.log('parsing failed', ex)) // I hate this indirection, but it works... this.observe( 'yPosMirror', function (yPos) { this$1.set({ yPos: yPos }); }, { init: false } ); } function create_main_fragment$5(state, component) { var window_updating = false, div, form, div_1, div_2, div_3, text, text_2, label, text_3, span, select, option, text_4, select_updating = false, text_6, div_4, label_1, div_5, text_8, input, input_updating = false, text_9, button, text_15, div_6, div_7, text_16; function onwindowresize(event) { var state = component.get(); component.checkPagination(state.navRange, state.page); } window.addEventListener('resize', onwindowresize); function onwindowscroll(event) { window_updating = true; component.set({ yPos: this.scrollY, }); window_updating = false; } window.addEventListener('scroll', onwindowscroll); function onwindowresize_1(event) { component.set({ windowWidth: this.innerWidth, }); } window.addEventListener('resize', onwindowresize_1); component.observe('yPos', function (y) { if (window_updating) { return; } window.scrollTo(window.scrollX, y); }); var if_block = state.loaded && create_if_block$4(state, component); function select_change_handler() { select_updating = true; component.set({ departmentFilter: selectValue(select) }); select_updating = false; } function change_handler(event) { component.getOptionSize(); } function input_input_handler() { input_updating = true; component.set({ preQuery: input.value }); input_updating = false; } function submit_handler(event) { var state = component.get(); component.submitFilters(event, state.preQuery); } var current_block_type = select_block_type$4(state); var if_block_1 = current_block_type(state, component); var if_block_2 = state.navItems.length > 1 && state.paginatedItems.length && create_if_block_3$3(state, component); return { c: function create() { div = createElement('div'); form = createElement('form'); div_1 = createElement('div'); div_2 = createElement('div'); div_3 = createElement('div'); text = createText(state.optionText); text_2 = createText('\r\n '); label = createElement('label'); text_3 = createText('Department'); span = createElement('span'); select = createElement('select'); option = createElement('option'); text_4 = createText('All'); if (if_block) { if_block.c(); } text_6 = createText('\r\n '); div_4 = createElement('div'); label_1 = createElement('label'); div_5 = createElement('div'); div_5.textContent = 'Search Directory:'; text_8 = createText('\r\n '); input = createElement('input'); text_9 = createText('\r\n '); button = createElement('button'); button.innerHTML = 'Search'; text_15 = createText('\r\n'); div_6 = createElement('div'); div_7 = createElement('div'); if_block_1.c(); text_16 = createText('\r\n '); if (if_block_2) { if_block_2.c(); } this.h(); }, h: function hydrate() { div_3.className = 'option-text'; div_2.className = 'option-text-wrap'; option.__value = 'all'; option.value = option.__value; addListener(select, 'change', select_change_handler); if (!('departmentFilter' in state)) { component.root._beforecreate.push(select_change_handler); } addListener(select, 'change', change_handler); span.className = 'select-box'; setStyle( span, 'width', '' + (state.optionTextSize + 25) + 'px' ); div_1.className = 'group filter-group'; div_5.className = 'ghost'; addListener(input, 'input', input_input_handler); input.type = 'text'; button.type = 'submit'; label_1.className = 'input-box'; div_4.className = 'group query-group'; form.className = 'directory-filters'; addListener(form, 'submit', submit_handler); div.className = 'listing-toolbar fullwidth'; div_7.className = 'items grid-x grid-margin-x'; div_6.className = 'directory block'; }, m: function mount(target, anchor) { insertNode(div, target, anchor); appendNode(form, div); appendNode(div_1, form); appendNode(div_2, div_1); appendNode(div_3, div_2); appendNode(text, div_3); component.refs.optionText = div_3; appendNode(text_2, div_1); appendNode(label, div_1); appendNode(text_3, label); appendNode(span, label); appendNode(select, span); appendNode(option, select); appendNode(text_4, option); if (if_block) { if_block.m(select, null); } component.refs.select = select; selectOption(select, state.departmentFilter); appendNode(text_6, form); appendNode(div_4, form); appendNode(label_1, div_4); appendNode(div_5, label_1); appendNode(text_8, label_1); appendNode(input, label_1); input.value = state.preQuery; appendNode(text_9, label_1); appendNode(button, label_1); insertNode(text_15, target, anchor); insertNode(div_6, target, anchor); appendNode(div_7, div_6); if_block_1.m(div_7, null); appendNode(text_16, div_7); if (if_block_2) { if_block_2.m(div_6, null); } component.refs.list = div_6; }, p: function update(changed, state) { if (changed.optionText) { text.data = state.optionText; } if (state.loaded) { if (if_block) { if_block.p(changed, state); } else { if_block = create_if_block$4(state, component); if_block.c(); if_block.m(select, null); } } else if (if_block) { if_block.u(); if_block.d(); if_block = null; } if (!select_updating) { selectOption(select, state.departmentFilter); } if (changed.optionTextSize) { setStyle( span, 'width', '' + (state.optionTextSize + 25) + 'px' ); } if (!input_updating) { input.value = state.preQuery; } if ( current_block_type === (current_block_type = select_block_type$4(state)) && if_block_1 ) { if_block_1.p(changed, state); } else { if_block_1.u(); if_block_1.d(); if_block_1 = current_block_type(state, component); if_block_1.c(); if_block_1.m(div_7, text_16); } if (state.navItems.length > 1 && state.paginatedItems.length) { if (if_block_2) { if_block_2.p(changed, state); } else { if_block_2 = create_if_block_3$3(state, component); if_block_2.c(); if_block_2.m(div_6, null); } } else if (if_block_2) { if_block_2.u(); if_block_2.d(); if_block_2 = null; } }, u: function unmount() { detachNode(div); if (if_block) { if_block.u(); } detachNode(text_15); detachNode(div_6); if_block_1.u(); if (if_block_2) { if_block_2.u(); } }, d: function destroy$$1() { window.removeEventListener('resize', onwindowresize); window.removeEventListener('scroll', onwindowscroll); window.removeEventListener('resize', onwindowresize_1); if (component.refs.optionText === div_3) { component.refs.optionText = null; } if (if_block) { if_block.d(); } removeListener(select, 'change', select_change_handler); removeListener(select, 'change', change_handler); if (component.refs.select === select) { component.refs.select = null; } removeListener(input, 'input', input_input_handler); removeListener(form, 'submit', submit_handler); if_block_1.d(); if (if_block_2) { if_block_2.d(); } if (component.refs.list === div_6) { component.refs.list = null; } }, }; } // (141:58) {{#each departments as dept}} function create_each_block$4( state, departments, dept, dept_index, component ) { var option, text_value = dept.value, text, option_value_value; return { c: function create() { option = createElement('option'); text = createText(text_value); this.h(); }, h: function hydrate() { option.__value = option_value_value = dept.key; option.value = option.__value; }, m: function mount(target, anchor) { insertNode(option, target, anchor); appendNode(text, option); }, p: function update(changed, state, departments, dept, dept_index) { if ( changed.departments && text_value !== (text_value = dept.value) ) { text.data = text_value; } if ( changed.departments && option_value_value !== (option_value_value = dept.key) ) { option.__value = option_value_value; } option.value = option.__value; }, u: function unmount() { detachNode(option); }, d: noop, }; } // (141:44) {{#if loaded}} function create_if_block$4(state, component) { var each_anchor; var departments = state.departments; var each_blocks = []; for (var i = 0; i < departments.length; i += 1) { each_blocks[i] = create_each_block$4( state, departments, departments[i], i, component ); } return { c: function create() { for (var i = 0; i < each_blocks.length; i += 1) { each_blocks[i].c(); } each_anchor = createComment(); }, m: function mount(target, anchor) { for (var i = 0; i < each_blocks.length; i += 1) { each_blocks[i].m(target, anchor); } insertNode(each_anchor, target, anchor); }, p: function update(changed, state) { var departments = state.departments; if (changed.departments) { for (var i = 0; i < departments.length; i += 1) { if (each_blocks[i]) { each_blocks[i].p( changed, state, departments, departments[i], i ); } else { each_blocks[i] = create_each_block$4( state, departments, departments[i], i, component ); each_blocks[i].c(); each_blocks[i].m( each_anchor.parentNode, each_anchor ); } } for (; i < each_blocks.length; i += 1) { each_blocks[i].u(); each_blocks[i].d(); } each_blocks.length = departments.length; } }, u: function unmount() { for (var i = 0; i < each_blocks.length; i += 1) { each_blocks[i].u(); } detachNode(each_anchor); }, d: function destroy$$1() { destroyEach(each_blocks); }, }; } // (155:71) {{#each paginatedItems as item}} function create_each_block_1$3( state, paginatedItems_1, item, item_index, component ) { var div, div_1, div_2, div_3, img, img_src_value, img_alt_value, text_1, div_4, h2, a, text_2_value = item.name, text_2, a_href_value, text_3, div_5, text_4_value = item.jobTitle, text_4, text_5, div_6, text_6_value = item.department, text_6; return { c: function create() { div = createElement('div'); div_1 = createElement('div'); div_2 = createElement('div'); div_3 = createElement('div'); img = createElement('img'); text_1 = createText('\r\n '); div_4 = createElement('div'); h2 = createElement('h2'); a = createElement('a'); text_2 = createText(text_2_value); text_3 = createText('\r\n '); div_5 = createElement('div'); text_4 = createText(text_4_value); text_5 = createText('\r\n '); div_6 = createElement('div'); text_6 = createText(text_6_value); this.h(); }, h: function hydrate() { img.src = img_src_value = item.image; img.alt = img_alt_value = item.imageAlt; div_3.className = 'bg'; setStyle(div_3, 'background-image', 'url(' + item.image + ')'); div_2.className = 'card-divider'; a.href = a_href_value = item.url; h2.className = 'title'; div_5.className = 'job-title'; div_6.className = 'department'; div_4.className = 'card-section'; div_1.className = 'card'; div.className = 'item cell small-12 medium-4 large-3'; }, m: function mount(target, anchor) { insertNode(div, target, anchor); appendNode(div_1, div); appendNode(div_2, div_1); appendNode(div_3, div_2); appendNode(img, div_3); appendNode(text_1, div_1); appendNode(div_4, div_1); appendNode(h2, div_4); appendNode(a, h2); appendNode(text_2, a); appendNode(text_3, div_4); appendNode(div_5, div_4); appendNode(text_4, div_5); appendNode(text_5, div_4); appendNode(div_6, div_4); appendNode(text_6, div_6); }, p: function update( changed, state, paginatedItems_1, item, item_index ) { if ( changed.paginatedItems && img_src_value !== (img_src_value = item.image) ) { img.src = img_src_value; } if ( changed.paginatedItems && img_alt_value !== (img_alt_value = item.imageAlt) ) { img.alt = img_alt_value; } if (changed.paginatedItems) { setStyle( div_3, 'background-image', 'url(' + item.image + ')' ); } if ( changed.paginatedItems && text_2_value !== (text_2_value = item.name) ) { text_2.data = text_2_value; } if ( changed.paginatedItems && a_href_value !== (a_href_value = item.url) ) { a.href = a_href_value; } if ( changed.paginatedItems && text_4_value !== (text_4_value = item.jobTitle) ) { text_4.data = text_4_value; } if ( changed.paginatedItems && text_6_value !== (text_6_value = item.department) ) { text_6.data = text_6_value; } }, u: function unmount() { detachNode(div); }, d: noop, }; } // (155:42) {{#if paginatedItems.length}} function create_if_block_1$4(state, component) { var each_anchor; var paginatedItems_1 = state.paginatedItems; var each_blocks = []; for (var i = 0; i < paginatedItems_1.length; i += 1) { each_blocks[i] = create_each_block_1$3( state, paginatedItems_1, paginatedItems_1[i], i, component ); } return { c: function create() { for (var i = 0; i < each_blocks.length; i += 1) { each_blocks[i].c(); } each_anchor = createComment(); }, m: function mount(target, anchor) { for (var i = 0; i < each_blocks.length; i += 1) { each_blocks[i].m(target, anchor); } insertNode(each_anchor, target, anchor); }, p: function update(changed, state) { var paginatedItems_1 = state.paginatedItems; if (changed.paginatedItems) { for (var i = 0; i < paginatedItems_1.length; i += 1) { if (each_blocks[i]) { each_blocks[i].p( changed, state, paginatedItems_1, paginatedItems_1[i], i ); } else { each_blocks[i] = create_each_block_1$3( state, paginatedItems_1, paginatedItems_1[i], i, component ); each_blocks[i].c(); each_blocks[i].m( each_anchor.parentNode, each_anchor ); } } for (; i < each_blocks.length; i += 1) { each_blocks[i].u(); each_blocks[i].d(); } each_blocks.length = paginatedItems_1.length; } }, u: function unmount() { for (var i = 0; i < each_blocks.length; i += 1) { each_blocks[i].u(); } detachNode(each_anchor); }, d: function destroy$$1() { destroyEach(each_blocks); }, }; } // (167:19) {{else}} function create_if_block_2$3(state, component) { var loader = new Loader({ root: component.root, }); return { c: function create() { loader._fragment.c(); }, m: function mount(target, anchor) { loader._mount(target, anchor); }, p: noop, u: function unmount() { loader._unmount(); }, d: function destroy$$1() { loader.destroy(false); }, }; } // (171:27) {{#if page <= 1}} function create_if_block_4$2(state, component) { var li; return { c: function create() { li = createElement('li'); li.innerHTML = 'Previous page'; this.h(); }, h: function hydrate() { li.className = 'pagination-previous disabled'; }, m: function mount(target, anchor) { insertNode(li, target, anchor); }, u: function unmount() { detachNode(li); }, d: noop, }; } // (172:98) {{else}} function create_if_block_5$2(state, component) { var li, a; function click_handler(event) { component.navigate(event, 'previous'); } return { c: function create() { li = createElement('li'); a = createElement('a'); a.innerHTML = 'Previous page'; this.h(); }, h: function hydrate() { a.href = '/'; setAttribute(a, 'aria-label', 'Previous page'); addListener(a, 'click', click_handler); li.className = 'pagination-previous'; }, m: function mount(target, anchor) { insertNode(li, target, anchor); appendNode(a, li); }, u: function unmount() { detachNode(li); }, d: function destroy$$1() { removeListener(a, 'click', click_handler); }, }; } // (173:178) {{#each navItems as item}} function create_each_block_2$1( state, navItems_2, item, item_index, component ) { var if_block_anchor; var current_block_type = select_block_type_2$2( state, navItems_2, item, item_index ); var if_block = current_block_type( state, navItems_2, item, item_index, component ); return { c: function create() { if_block.c(); if_block_anchor = createComment(); }, m: function mount(target, anchor) { if_block.m(target, anchor); insertNode(if_block_anchor, target, anchor); }, p: function update(changed, state, navItems_2, item, item_index) { if ( current_block_type === (current_block_type = select_block_type_2$2( state, navItems_2, item, item_index )) && if_block ) { if_block.p(changed, state, navItems_2, item, item_index); } else { if_block.u(); if_block.d(); if_block = current_block_type( state, navItems_2, item, item_index, component ); if_block.c(); if_block.m(if_block_anchor.parentNode, if_block_anchor); } }, u: function unmount() { if_block.u(); detachNode(if_block_anchor); }, d: function destroy$$1() { if_block.d(); }, }; } // (173:204) {{#if item.on}} function create_if_block_6$2( state, navItems_2, item, item_index, component ) { var li, span, text_1_value = item.value, text_1; return { c: function create() { li = createElement('li'); span = createElement('span'); span.textContent = "You're on page "; text_1 = createText(text_1_value); this.h(); }, h: function hydrate() { span.className = 'show-for-sr'; li.className = 'current'; }, m: function mount(target, anchor) { insertNode(li, target, anchor); appendNode(span, li); appendNode(text_1, li); }, p: function update(changed, state, navItems_2, item, item_index) { if ( changed.navItems && text_1_value !== (text_1_value = item.value) ) { text_1.data = text_1_value; } }, u: function unmount() { detachNode(li); }, d: noop, }; } // (174:112) function create_if_block_7$2( state, navItems_2, item, item_index, component ) { var li; return { c: function create() { li = createElement('li'); this.h(); }, h: function hydrate() { li.className = 'ellipsis'; setAttribute(li, 'aria-hidden', 'true'); }, m: function mount(target, anchor) { insertNode(li, target, anchor); }, p: noop, u: function unmount() { detachNode(li); }, d: noop, }; } // (175:51) {{else}} function create_if_block_8$2( state, navItems_2, item, item_index, component ) { var li, a, text_value = item.value, text, a_aria_label_value; return { c: function create() { li = createElement('li'); a = createElement('a'); text = createText(text_value); this.h(); }, h: function hydrate() { a.href = '/'; setAttribute( a, 'aria-label', (a_aria_label_value = 'Page ' + item.value) ); addListener(a, 'click', click_handler$2); a._svelte = { component: component, navItems_2: navItems_2, item_index: item_index, }; }, m: function mount(target, anchor) { insertNode(li, target, anchor); appendNode(a, li); appendNode(text, a); }, p: function update(changed, state, navItems_2, item, item_index) { if ( changed.navItems && text_value !== (text_value = item.value) ) { text.data = text_value; } if ( changed.navItems && a_aria_label_value !== (a_aria_label_value = 'Page ' + item.value) ) { setAttribute(a, 'aria-label', a_aria_label_value); } a._svelte.navItems_2 = navItems_2; a._svelte.item_index = item_index; }, u: function unmount() { detachNode(li); }, d: function destroy$$1() { removeListener(a, 'click', click_handler$2); }, }; } // (176:133) {{#if page >= navRange.length}} function create_if_block_9$2(state, component) { var li; return { c: function create() { li = createElement('li'); li.innerHTML = 'Next page'; this.h(); }, h: function hydrate() { li.className = 'pagination-next disabled'; }, m: function mount(target, anchor) { insertNode(li, target, anchor); }, u: function unmount() { detachNode(li); }, d: noop, }; } // (177:90) {{else}} function create_if_block_10$2(state, component) { var li, a; function click_handler_1(event) { component.navigate(event, 'next'); } return { c: function create() { li = createElement('li'); a = createElement('a'); a.innerHTML = 'Next page'; this.h(); }, h: function hydrate() { a.href = '/'; setAttribute(a, 'aria-label', 'Next page'); addListener(a, 'click', click_handler_1); li.className = 'pagination-next'; }, m: function mount(target, anchor) { insertNode(li, target, anchor); appendNode(a, li); }, u: function unmount() { detachNode(li); }, d: function destroy$$1() { removeListener(a, 'click', click_handler_1); }, }; } // (169:8) {{#if navItems.length > 1 && paginatedItems.length}} function create_if_block_3$3(state, component) { var nav, ul, if_block_anchor, each_anchor; var current_block_type = select_block_type_1$3(state); var if_block = current_block_type(state, component); var navItems_2 = state.navItems; var each_blocks = []; for (var i = 0; i < navItems_2.length; i += 1) { each_blocks[i] = create_each_block_2$1( state, navItems_2, navItems_2[i], i, component ); } var current_block_type_1 = select_block_type_3$2(state); var if_block_1 = current_block_type_1(state, component); return { c: function create() { nav = createElement('nav'); ul = createElement('ul'); if_block.c(); if_block_anchor = createComment(); for (var i = 0; i < each_blocks.length; i += 1) { each_blocks[i].c(); } each_anchor = createComment(); if_block_1.c(); this.h(); }, h: function hydrate() { ul.className = 'pagination'; nav.className = 'list-navigation'; setAttribute(nav, 'role', 'navigation'); setAttribute(nav, 'aria-label', 'Directory list pagination'); }, m: function mount(target, anchor) { insertNode(nav, target, anchor); appendNode(ul, nav); if_block.m(ul, null); appendNode(if_block_anchor, ul); for (var i = 0; i < each_blocks.length; i += 1) { each_blocks[i].m(ul, null); } appendNode(each_anchor, ul); if_block_1.m(ul, null); }, p: function update(changed, state) { if ( current_block_type !== (current_block_type = select_block_type_1$3(state)) ) { if_block.u(); if_block.d(); if_block = current_block_type(state, component); if_block.c(); if_block.m(ul, if_block_anchor); } var navItems_2 = state.navItems; if (changed.navItems) { for (var i = 0; i < navItems_2.length; i += 1) { if (each_blocks[i]) { each_blocks[i].p( changed, state, navItems_2, navItems_2[i], i ); } else { each_blocks[i] = create_each_block_2$1( state, navItems_2, navItems_2[i], i, component ); each_blocks[i].c(); each_blocks[i].m(ul, each_anchor); } } for (; i < each_blocks.length; i += 1) { each_blocks[i].u(); each_blocks[i].d(); } each_blocks.length = navItems_2.length; } if ( current_block_type_1 !== (current_block_type_1 = select_block_type_3$2(state)) ) { if_block_1.u(); if_block_1.d(); if_block_1 = current_block_type_1(state, component); if_block_1.c(); if_block_1.m(ul, null); } }, u: function unmount() { detachNode(nav); if_block.u(); for (var i = 0; i < each_blocks.length; i += 1) { each_blocks[i].u(); } if_block_1.u(); }, d: function destroy$$1() { if_block.d(); destroyEach(each_blocks); if_block_1.d(); }, }; } function select_block_type$4(state) { if (state.paginatedItems.length) { return create_if_block_1$4; } return create_if_block_2$3; } function select_block_type_1$3(state) { if (state.page <= 1) { return create_if_block_4$2; } return create_if_block_5$2; } function click_handler$2(event) { var component = this._svelte.component; var navItems_2 = this._svelte.navItems_2, item_index = this._svelte.item_index, item = navItems_2[item_index]; component.navigate(event, item.value); } function select_block_type_2$2(state, navItems_2, item, item_index) { if (item.on) { return create_if_block_6$2; } if (item.etc) { return create_if_block_7$2; } return create_if_block_8$2; } function select_block_type_3$2(state) { if (state.page >= state.navRange.length) { return create_if_block_9$2; } return create_if_block_10$2; } function Directory(options) { init(this, options); this.refs = {}; this._state = assign(data$3(), options.data); this._state.yPos = window.scrollY; this._state.windowWidth = window.innerWidth; this._recompute( { items: 1, windowWidth: 1, query: 1, departmentFilter: 1, filteredItems: 1, page: 1, pagesize: 1, navRange: 1, }, this._state ); var _oncreate = oncreate$5.bind(this); if (!options.root) { this._oncreate = [_oncreate]; this._beforecreate = []; this._aftercreate = []; } else { this.root._oncreate.push(_oncreate); } this._fragment = create_main_fragment$5(this._state, this); if (options.target) { this._fragment.c(); this._fragment.m(options.target, options.anchor || null); this._lock = true; callAll(this._beforecreate); callAll(this._oncreate); callAll(this._aftercreate); this._lock = false; } } assign(Directory.prototype, methods$3, proto); Directory.prototype._recompute = function _recompute(changed, state) { if (changed.items) { if (differs(state.loaded, (state.loaded = loaded$2(state.items)))) { changed.loaded = true; } } if (changed.windowWidth) { if ( differs( state.pagesize, (state.pagesize = pagesize(state.windowWidth)) ) ) { changed.pagesize = true; } } if (changed.items || changed.query || changed.departmentFilter) { if ( differs( state.filteredItems, (state.filteredItems = filteredItems$2( state.items, state.query, state.departmentFilter )) ) ) { changed.filteredItems = true; } } if (changed.filteredItems || changed.page || changed.pagesize) { if ( differs( state.paginatedItems, (state.paginatedItems = paginatedItems$2( state.filteredItems, state.page, state.pagesize )) ) ) { changed.paginatedItems = true; } } if (changed.filteredItems || changed.pagesize) { if ( differs( state.navRange, (state.navRange = navRange$2( state.filteredItems, state.pagesize )) ) ) { changed.navRange = true; } } if (changed.filteredItems || changed.page || changed.navRange) { if ( differs( state.navItems, (state.navItems = navItems_1$2( state.filteredItems, state.page, state.navRange )) ) ) { changed.navItems = true; } } }; /* client/source/app/components/ResponsiveCarousel.html generated by Svelte v1.50.0 */ // import { tween } from 'svelte-extras' function loaded$3(items) { return !!items; } function isSmallScreen(windowWidth) { return windowWidth < 700 ? true : false; } function transitionStyle(isSmallScreen, windowWidth, selectedIndex) { if (isSmallScreen) { var itemWidth = windowWidth - 60 + 15; return 'transform:translateX(' + itemWidth * -selectedIndex + 'px)'; } return ''; } function data$4() { return { frozen: false, }; } var methods$4 = { // tween, freezeTransitions: function freezeTransitions() { this.set({ frozen: true }); this.debounceResizeEnd(this); }, debounceResizeEnd: (function () { return _.debounce(function () { this.set({ frozen: false }); }, 250); })(), }; function oncreate$6() { var this$1 = this; // one time fetch fetch(this.get('url')) .then(function (response) { return response.json(); }) .then(function (json) { // console.log(json) this$1.set({ selectedIndex: 0, items: json, }); }); // TODO: handle errors gracefully? // .catch(ex => console.log('parsing failed', ex)) } function create_main_fragment$6(state, component) { var div, div_class_value; function onwindowresize(event) { component.freezeTransitions(); } window.addEventListener('resize', onwindowresize); function onwindowresize_1(event) { component.set({ windowWidth: this.innerWidth, }); } window.addEventListener('resize', onwindowresize_1); var current_block_type = select_block_type$5(state); var if_block = current_block_type(state, component); return { c: function create() { div = createElement('div'); if_block.c(); this.h(); }, h: function hydrate() { div.className = div_class_value = 'responsive-carousel ' + (state.isSmallScreen ? 'is-small-screen' : '') + ' ' + (state.frozen ? 'frozen' : ''); }, m: function mount(target, anchor) { insertNode(div, target, anchor); if_block.m(div, null); }, p: function update(changed, state) { if ( current_block_type === (current_block_type = select_block_type$5(state)) && if_block ) { if_block.p(changed, state); } else { if_block.u(); if_block.d(); if_block = current_block_type(state, component); if_block.c(); if_block.m(div, null); } if ( (changed.isSmallScreen || changed.frozen) && div_class_value !== (div_class_value = 'responsive-carousel ' + (state.isSmallScreen ? 'is-small-screen' : '') + ' ' + (state.frozen ? 'frozen' : '')) ) { div.className = div_class_value; } }, u: function unmount() { detachNode(div); if_block.u(); }, d: function destroy$$1() { window.removeEventListener('resize', onwindowresize); window.removeEventListener('resize', onwindowresize_1); if_block.d(); }, }; } // (61:23) {{#each items as item, index}} function create_each_block$5(state, items, item, index, component) { var button, div, text, text_1, button_class_value; return { c: function create() { button = createElement('button'); div = createElement('div'); text = createText('Carousel slide '); text_1 = createText(index); this.h(); }, h: function hydrate() { div.className = 'ghost'; button.className = button_class_value = index === state.selectedIndex ? 'on' : ''; addListener(button, 'click', click_handler$3); button._svelte = { component: component, items: items, index: index, }; }, m: function mount(target, anchor) { insertNode(button, target, anchor); appendNode(div, button); appendNode(text, div); appendNode(text_1, div); }, p: function update(changed, state, items, item, index) { if ( changed.selectedIndex && button_class_value !== (button_class_value = index === state.selectedIndex ? 'on' : '') ) { button.className = button_class_value; } button._svelte.items = items; button._svelte.index = index; }, u: function unmount() { detachNode(button); }, d: function destroy$$1() { removeListener(button, 'click', click_handler$3); }, }; } // (67:73) {{#each items as item, index}} function create_each_block_1$4(state, items_1, item_1, index, component) { var a, h3, text_value = item_1.formattedMonth, text, text_1, strong, text_2_value = item_1.formattedDay, text_2, text_3, h4, text_4_value = item_1.title, text_4, text_5, p, text_6_value = item_1.formattedTime, text_6, text_7, p_1, text_8_value = item_1.text, text_8, a_class_value, a_href_value; return { c: function create() { a = createElement('a'); h3 = createElement('h3'); text = createText(text_value); text_1 = createText(' '); strong = createElement('strong'); text_2 = createText(text_2_value); text_3 = createText('\r\n '); h4 = createElement('h4'); text_4 = createText(text_4_value); text_5 = createText('\r\n '); p = createElement('p'); text_6 = createText(text_6_value); text_7 = createText('\r\n '); p_1 = createElement('p'); text_8 = createText(text_8_value); this.h(); }, h: function hydrate() { h3.className = 'date'; h4.className = 'item-title'; p.className = 'time'; p_1.className = 'text'; a.className = a_class_value = 'item cell medium-4 ' + item_1.type + ' ' + (index === state.selectedIndex ? 'on' : ''); a.href = a_href_value = item_1.url; }, m: function mount(target, anchor) { insertNode(a, target, anchor); appendNode(h3, a); appendNode(text, h3); appendNode(text_1, h3); appendNode(strong, h3); appendNode(text_2, strong); appendNode(text_3, a); appendNode(h4, a); appendNode(text_4, h4); appendNode(text_5, a); appendNode(p, a); appendNode(text_6, p); appendNode(text_7, a); appendNode(p_1, a); appendNode(text_8, p_1); }, p: function update(changed, state, items_1, item_1, index) { if ( changed.items && text_value !== (text_value = item_1.formattedMonth) ) { text.data = text_value; } if ( changed.items && text_2_value !== (text_2_value = item_1.formattedDay) ) { text_2.data = text_2_value; } if ( changed.items && text_4_value !== (text_4_value = item_1.title) ) { text_4.data = text_4_value; } if ( changed.items && text_6_value !== (text_6_value = item_1.formattedTime) ) { text_6.data = text_6_value; } if ( changed.items && text_8_value !== (text_8_value = item_1.text) ) { text_8.data = text_8_value; } if ( (changed.items || changed.selectedIndex) && a_class_value !== (a_class_value = 'item cell medium-4 ' + item_1.type + ' ' + (index === state.selectedIndex ? 'on' : '')) ) { a.className = a_class_value; } if ( changed.items && a_href_value !== (a_href_value = item_1.url) ) { a.href = a_href_value; } }, u: function unmount() { detachNode(a); }, d: noop, }; } // (60:103) {{#if loaded}} function create_if_block$5(state, component) { var div, text_1, div_1, div_2, div_2_style_value; var items = state.items; var each_blocks = []; for (var i = 0; i < items.length; i += 1) { each_blocks[i] = create_each_block$5( state, items, items[i], i, component ); } var items_1 = state.items; var each_1_blocks = []; for (var i = 0; i < items_1.length; i += 1) { each_1_blocks[i] = create_each_block_1$4( state, items_1, items_1[i], i, component ); } return { c: function create() { div = createElement('div'); for (var i = 0; i < each_blocks.length; i += 1) { each_blocks[i].c(); } text_1 = createText('\r\n '); div_1 = createElement('div'); div_2 = createElement('div'); for (var i = 0; i < each_1_blocks.length; i += 1) { each_1_blocks[i].c(); } this.h(); }, h: function hydrate() { div.className = 'indices'; div_2.className = 'items grid-x grid-margin-x'; div_2.style.cssText = div_2_style_value = '' + state.transitionStyle + ';'; div_1.className = 'gutter'; }, m: function mount(target, anchor) { insertNode(div, target, anchor); for (var i = 0; i < each_blocks.length; i += 1) { each_blocks[i].m(div, null); } insertNode(text_1, target, anchor); insertNode(div_1, target, anchor); appendNode(div_2, div_1); for (var i = 0; i < each_1_blocks.length; i += 1) { each_1_blocks[i].m(div_2, null); } }, p: function update(changed, state) { var items = state.items; if (changed.selectedIndex || changed.items) { for (var i = 0; i < items.length; i += 1) { if (each_blocks[i]) { each_blocks[i].p( changed, state, items, items[i], i ); } else { each_blocks[i] = create_each_block$5( state, items, items[i], i, component ); each_blocks[i].c(); each_blocks[i].m(div, null); } } for (; i < each_blocks.length; i += 1) { each_blocks[i].u(); each_blocks[i].d(); } each_blocks.length = items.length; } var items_1 = state.items; if (changed.items || changed.selectedIndex) { for (var i = 0; i < items_1.length; i += 1) { if (each_1_blocks[i]) { each_1_blocks[i].p( changed, state, items_1, items_1[i], i ); } else { each_1_blocks[i] = create_each_block_1$4( state, items_1, items_1[i], i, component ); each_1_blocks[i].c(); each_1_blocks[i].m(div_2, null); } } for (; i < each_1_blocks.length; i += 1) { each_1_blocks[i].u(); each_1_blocks[i].d(); } each_1_blocks.length = items_1.length; } if ( changed.transitionStyle && div_2_style_value !== (div_2_style_value = '' + state.transitionStyle + ';') ) { div_2.style.cssText = div_2_style_value; } }, u: function unmount() { detachNode(div); for (var i = 0; i < each_blocks.length; i += 1) { each_blocks[i].u(); } detachNode(text_1); detachNode(div_1); for (var i = 0; i < each_1_blocks.length; i += 1) { each_1_blocks[i].u(); } }, d: function destroy$$1() { destroyEach(each_blocks); destroyEach(each_1_blocks); }, }; } // (73:8) {{else}} function create_if_block_1$5(state, component) { var loader = new Loader({ root: component.root, }); return { c: function create() { loader._fragment.c(); }, m: function mount(target, anchor) { loader._mount(target, anchor); }, p: noop, u: function unmount() { loader._unmount(); }, d: function destroy$$1() { loader.destroy(false); }, }; } function click_handler$3(event) { var component = this._svelte.component; var items = this._svelte.items, index = this._svelte.index, item = items[index]; component.set({ selectedIndex: index }); } function select_block_type$5(state) { if (state.loaded) { return create_if_block$5; } return create_if_block_1$5; } function ResponsiveCarousel(options) { init(this, options); this._state = assign(data$4(), options.data); this._state.windowWidth = window.innerWidth; this._recompute( { items: 1, windowWidth: 1, isSmallScreen: 1, selectedIndex: 1 }, this._state ); var _oncreate = oncreate$6.bind(this); if (!options.root) { this._oncreate = [_oncreate]; this._beforecreate = []; this._aftercreate = []; } else { this.root._oncreate.push(_oncreate); } this._fragment = create_main_fragment$6(this._state, this); if (options.target) { this._fragment.c(); this._fragment.m(options.target, options.anchor || null); this._lock = true; callAll(this._beforecreate); callAll(this._oncreate); callAll(this._aftercreate); this._lock = false; } } assign(ResponsiveCarousel.prototype, methods$4, proto); ResponsiveCarousel.prototype._recompute = function _recompute( changed, state ) { if (changed.items) { if (differs(state.loaded, (state.loaded = loaded$3(state.items)))) { changed.loaded = true; } } if (changed.windowWidth) { if ( differs( state.isSmallScreen, (state.isSmallScreen = isSmallScreen(state.windowWidth)) ) ) { changed.isSmallScreen = true; } } if ( changed.isSmallScreen || changed.windowWidth || changed.selectedIndex ) { if ( differs( state.transitionStyle, (state.transitionStyle = transitionStyle( state.isSmallScreen, state.windowWidth, state.selectedIndex )) ) ) { changed.transitionStyle = true; } } }; /* client/source/app/components/ResponsiveHomeCarousel.html generated by Svelte v1.50.0 */ // import { tween } from 'svelte-extras' function loaded$4(items) { return !!items; } function isSmallScreen$1(windowWidth) { return windowWidth < 700 ? true : false; } function eventsTransitionStyle( isSmallScreen, windowWidth, eventsSelectedIndex ) { if (isSmallScreen) { var itemWidth = windowWidth - 60 + 15; return ( 'transform:translateX(' + itemWidth * -eventsSelectedIndex + 'px)' ); } return ''; } function newsTransitionStyle( isSmallScreen, windowWidth, newsSelectedIndex ) { if (isSmallScreen) { var itemWidth = windowWidth - 60 + 15; return ( 'transform:translateX(' + itemWidth * -newsSelectedIndex + 'px)' ); } return ''; } function eventItems(items) { return _.filter(items, { type: 'event' }); } function newsItems(items) { return _.filter(items, { type: 'news' }); } function data$5() { return { frozen: false, }; } var methods$5 = { // tween, freezeTransitions: function freezeTransitions() { this.set({ frozen: true }); this.debounceResizeEnd(this); }, debounceResizeEnd: (function () { return _.debounce(function () { this.set({ frozen: false }); }, 250); })(), }; function oncreate$7() { var this$1 = this; // one time fetch fetch(this.get('url')) .then(function (response) { return response.json(); }) .then(function (json) { // console.log(json) this$1.set({ eventsSelectedIndex: 0, newsSelectedIndex: 0, items: json, }); }); // TODO: handle errors gracefully? // .catch(ex => console.log('parsing failed', ex)) } function create_main_fragment$7(state, component) { var if_block_anchor; function onwindowresize(event) { component.freezeTransitions(); } window.addEventListener('resize', onwindowresize); function onwindowresize_1(event) { component.set({ windowWidth: this.innerWidth, }); } window.addEventListener('resize', onwindowresize_1); var current_block_type = select_block_type_2$3(state); var if_block = current_block_type(state, component); return { c: function create() { if_block.c(); if_block_anchor = createComment(); }, m: function mount(target, anchor) { if_block.m(target, anchor); insertNode(if_block_anchor, target, anchor); }, p: function update(changed, state) { if ( current_block_type === (current_block_type = select_block_type_2$3(state)) && if_block ) { if_block.p(changed, state); } else { if_block.u(); if_block.d(); if_block = current_block_type(state, component); if_block.c(); if_block.m(if_block_anchor.parentNode, if_block_anchor); } }, u: function unmount() { if_block.u(); detachNode(if_block_anchor); }, d: function destroy$$1() { window.removeEventListener('resize', onwindowresize); window.removeEventListener('resize', onwindowresize_1); if_block.d(); }, }; } // (71:23) {{#each eventItems as item, index}} function create_each_block$6(state, eventItems_1, item, index, component) { var button, div, text, text_1, button_class_value; return { c: function create() { button = createElement('button'); div = createElement('div'); text = createText('Carousel slide '); text_1 = createText(index); this.h(); }, h: function hydrate() { div.className = 'ghost'; button.className = button_class_value = index === state.eventsSelectedIndex ? 'on' : ''; addListener(button, 'click', click_handler$4); button._svelte = { component: component, eventItems_1: eventItems_1, index: index, }; }, m: function mount(target, anchor) { insertNode(button, target, anchor); appendNode(div, button); appendNode(text, div); appendNode(text_1, div); }, p: function update(changed, state, eventItems_1, item, index) { if ( changed.eventsSelectedIndex && button_class_value !== (button_class_value = index === state.eventsSelectedIndex ? 'on' : '') ) { button.className = button_class_value; } button._svelte.eventItems_1 = eventItems_1; button._svelte.index = index; }, u: function unmount() { detachNode(button); }, d: function destroy$$1() { removeListener(button, 'click', click_handler$4); }, }; } // (77:79) {{#each eventItems as item, index}} function create_each_block_1$5( state, eventItems_2, item_1, index, component ) { var a, h3, text_value = item_1.formattedMonth, text, text_1, strong, text_2_value = item_1.formattedDay, text_2, text_3, h4, text_4_value = item_1.title, text_4, text_5, p, text_6_value = item_1.formattedTime, text_6, text_7, p_1, text_8_value = item_1.text, text_8, a_class_value, a_href_value; return { c: function create() { a = createElement('a'); h3 = createElement('h3'); text = createText(text_value); text_1 = createText(' '); strong = createElement('strong'); text_2 = createText(text_2_value); text_3 = createText('\r\n '); h4 = createElement('h4'); text_4 = createText(text_4_value); text_5 = createText('\r\n '); p = createElement('p'); text_6 = createText(text_6_value); text_7 = createText('\r\n '); p_1 = createElement('p'); text_8 = createText(text_8_value); this.h(); }, h: function hydrate() { h3.className = 'date'; h4.className = 'item-title'; p.className = 'time'; p_1.className = 'text'; a.className = a_class_value = 'item cell medium-4 event ' + (index === state.eventsSelectedIndex ? 'on' : ''); a.href = a_href_value = item_1.url; }, m: function mount(target, anchor) { insertNode(a, target, anchor); appendNode(h3, a); appendNode(text, h3); appendNode(text_1, h3); appendNode(strong, h3); appendNode(text_2, strong); appendNode(text_3, a); appendNode(h4, a); appendNode(text_4, h4); appendNode(text_5, a); appendNode(p, a); appendNode(text_6, p); appendNode(text_7, a); appendNode(p_1, a); appendNode(text_8, p_1); }, p: function update(changed, state, eventItems_2, item_1, index) { if ( changed.eventItems && text_value !== (text_value = item_1.formattedMonth) ) { text.data = text_value; } if ( changed.eventItems && text_2_value !== (text_2_value = item_1.formattedDay) ) { text_2.data = text_2_value; } if ( changed.eventItems && text_4_value !== (text_4_value = item_1.title) ) { text_4.data = text_4_value; } if ( changed.eventItems && text_6_value !== (text_6_value = item_1.formattedTime) ) { text_6.data = text_6_value; } if ( changed.eventItems && text_8_value !== (text_8_value = item_1.text) ) { text_8.data = text_8_value; } if ( changed.eventsSelectedIndex && a_class_value !== (a_class_value = 'item cell medium-4 event ' + (index === state.eventsSelectedIndex ? 'on' : '')) ) { a.className = a_class_value; } if ( changed.eventItems && a_href_value !== (a_href_value = item_1.url) ) { a.href = a_href_value; } }, u: function unmount() { detachNode(a); }, d: noop, }; } // (87:23) {{#each newsItems as item, index}} function create_each_block_2$2( state, newsItems_1, item_2, index, component ) { var button, div, text, text_1, button_class_value; return { c: function create() { button = createElement('button'); div = createElement('div'); text = createText('Carousel slide '); text_1 = createText(index); this.h(); }, h: function hydrate() { div.className = 'ghost'; button.className = button_class_value = index === state.newsSelectedIndex ? 'on' : ''; addListener(button, 'click', click_handler_1); button._svelte = { component: component, newsItems_1: newsItems_1, index: index, }; }, m: function mount(target, anchor) { insertNode(button, target, anchor); appendNode(div, button); appendNode(text, div); appendNode(text_1, div); }, p: function update(changed, state, newsItems_1, item_2, index) { if ( changed.newsSelectedIndex && button_class_value !== (button_class_value = index === state.newsSelectedIndex ? 'on' : '') ) { button.className = button_class_value; } button._svelte.newsItems_1 = newsItems_1; button._svelte.index = index; }, u: function unmount() { detachNode(button); }, d: function destroy$$1() { removeListener(button, 'click', click_handler_1); }, }; } // (93:77) {{#each newsItems as item, index}} function create_each_block_3$1( state, newsItems_2, item_3, index, component ) { var a, div, text_value = item_3.imgAlt, text, text_1, div_1, h2, text_2_value = item_3.title, text_2, text_3, h3, text_4_value = item_3.formattedDate, text_4, a_class_value, a_href_value; return { c: function create() { a = createElement('a'); div = createElement('div'); text = createText(text_value); text_1 = createText('\r\n '); div_1 = createElement('div'); h2 = createElement('h2'); text_2 = createText(text_2_value); text_3 = createText('\r\n '); h3 = createElement('h3'); text_4 = createText(text_4_value); this.h(); }, h: function hydrate() { div.className = 'ghost'; h2.className = 'item-title'; h3.className = 'date'; div_1.className = 'fold'; a.className = a_class_value = 'item cell medium-4 news ' + (index === state.newsSelectedIndex ? 'on' : ''); setStyle(a, 'background-image', 'url(' + item_3.imgSrc + ')'); a.href = a_href_value = item_3.url; }, m: function mount(target, anchor) { insertNode(a, target, anchor); appendNode(div, a); appendNode(text, div); appendNode(text_1, a); appendNode(div_1, a); appendNode(h2, div_1); appendNode(text_2, h2); appendNode(text_3, div_1); appendNode(h3, div_1); appendNode(text_4, h3); }, p: function update(changed, state, newsItems_2, item_3, index) { if ( changed.newsItems && text_value !== (text_value = item_3.imgAlt) ) { text.data = text_value; } if ( changed.newsItems && text_2_value !== (text_2_value = item_3.title) ) { text_2.data = text_2_value; } if ( changed.newsItems && text_4_value !== (text_4_value = item_3.formattedDate) ) { text_4.data = text_4_value; } if ( changed.newsSelectedIndex && a_class_value !== (a_class_value = 'item cell medium-4 news ' + (index === state.newsSelectedIndex ? 'on' : '')) ) { a.className = a_class_value; } if (changed.newsItems) { setStyle( a, 'background-image', 'url(' + item_3.imgSrc + ')' ); } if ( changed.newsItems && a_href_value !== (a_href_value = item_3.url) ) { a.href = a_href_value; } }, u: function unmount() { detachNode(a); }, d: noop, }; } // (105:44) {{#each items as item, index}} function create_each_block_4$1(state, items, item, index, component) { var if_block_anchor; var current_block_type = select_block_type$6(state, items, item, index); var if_block = current_block_type(state, items, item, index, component); return { c: function create() { if_block.c(); if_block_anchor = createComment(); }, m: function mount(target, anchor) { if_block.m(target, anchor); insertNode(if_block_anchor, target, anchor); }, p: function update(changed, state, items, item, index) { if ( current_block_type === (current_block_type = select_block_type$6( state, items, item, index )) && if_block ) { if_block.p(changed, state, items, item, index); } else { if_block.u(); if_block.d(); if_block = current_block_type( state, items, item, index, component ); if_block.c(); if_block.m(if_block_anchor.parentNode, if_block_anchor); } }, u: function unmount() { if_block.u(); detachNode(if_block_anchor); }, d: function destroy$$1() { if_block.d(); }, }; } // (105:74) {{#if item.type === 'event'}} function create_if_block_3$4(state, items, item, index, component) { var a, h3, text_value = item.formattedMonth, text, text_1, strong, text_2_value = item.formattedDay, text_2, text_3, h4, text_4_value = item.title, text_4, text_5, p, text_6_value = item.formattedTime, text_6, text_7, p_1, text_8_value = item.text, text_8, a_href_value; return { c: function create() { a = createElement('a'); h3 = createElement('h3'); text = createText(text_value); text_1 = createText(' '); strong = createElement('strong'); text_2 = createText(text_2_value); text_3 = createText('\r\n '); h4 = createElement('h4'); text_4 = createText(text_4_value); text_5 = createText('\r\n '); p = createElement('p'); text_6 = createText(text_6_value); text_7 = createText('\r\n '); p_1 = createElement('p'); text_8 = createText(text_8_value); this.h(); }, h: function hydrate() { h3.className = 'date'; h4.className = 'item-title'; p.className = 'time'; p_1.className = 'text'; a.className = 'item cell medium-4 event'; a.href = a_href_value = item.url; }, m: function mount(target, anchor) { insertNode(a, target, anchor); appendNode(h3, a); appendNode(text, h3); appendNode(text_1, h3); appendNode(strong, h3); appendNode(text_2, strong); appendNode(text_3, a); appendNode(h4, a); appendNode(text_4, h4); appendNode(text_5, a); appendNode(p, a); appendNode(text_6, p); appendNode(text_7, a); appendNode(p_1, a); appendNode(text_8, p_1); }, p: function update(changed, state, items, item, index) { if ( changed.items && text_value !== (text_value = item.formattedMonth) ) { text.data = text_value; } if ( changed.items && text_2_value !== (text_2_value = item.formattedDay) ) { text_2.data = text_2_value; } if ( changed.items && text_4_value !== (text_4_value = item.title) ) { text_4.data = text_4_value; } if ( changed.items && text_6_value !== (text_6_value = item.formattedTime) ) { text_6.data = text_6_value; } if ( changed.items && text_8_value !== (text_8_value = item.text) ) { text_8.data = text_8_value; } if ( changed.items && a_href_value !== (a_href_value = item.url) ) { a.href = a_href_value; } }, u: function unmount() { detachNode(a); }, d: noop, }; } // (109:46) {{else}} function create_if_block_4$3(state, items, item, index, component) { var a, div, text_value = item.imgAlt, text, text_1, div_1, h3, text_2_value = item.title, text_2, text_3, h4, text_4_value = item.formattedDate, text_4, a_href_value; return { c: function create() { a = createElement('a'); div = createElement('div'); text = createText(text_value); text_1 = createText('\r\n '); div_1 = createElement('div'); h3 = createElement('h3'); text_2 = createText(text_2_value); text_3 = createText('\r\n '); h4 = createElement('h4'); text_4 = createText(text_4_value); this.h(); }, h: function hydrate() { div.className = 'ghost'; h3.className = 'item-title'; h4.className = 'date'; div_1.className = 'fold'; a.className = 'item cell medium-4 news'; setStyle(a, 'background-image', 'url(' + item.imgSrc + ')'); a.href = a_href_value = item.url; }, m: function mount(target, anchor) { insertNode(a, target, anchor); appendNode(div, a); appendNode(text, div); appendNode(text_1, a); appendNode(div_1, a); appendNode(h3, div_1); appendNode(text_2, h3); appendNode(text_3, div_1); appendNode(h4, div_1); appendNode(text_4, h4); }, p: function update(changed, state, items, item, index) { if ( changed.items && text_value !== (text_value = item.imgAlt) ) { text.data = text_value; } if ( changed.items && text_2_value !== (text_2_value = item.title) ) { text_2.data = text_2_value; } if ( changed.items && text_4_value !== (text_4_value = item.formattedDate) ) { text_4.data = text_4_value; } if (changed.items) { setStyle(a, 'background-image', 'url(' + item.imgSrc + ')'); } if ( changed.items && a_href_value !== (a_href_value = item.url) ) { a.href = a_href_value; } }, u: function unmount() { detachNode(a); }, d: noop, }; } // (69:95) {{#if isSmallScreen}} function create_if_block_1$6(state, component) { var div, div_1, text_1, div_2, div_3, div_3_style_value, text_4, div_4, a, span, text_5, text_6_value = state.itemsIndex === 0 ? 'Events' : 'News', text_6, div_class_value, text_8, div_5, div_6, text_10, div_7, div_8, div_8_style_value, text_13, div_9, a_1, span_1, text_14, text_15_value = state.itemsIndex === 0 ? 'Events' : 'News', text_15, div_5_class_value; var eventItems_1 = state.eventItems; var each_blocks = []; for (var i = 0; i < eventItems_1.length; i += 1) { each_blocks[i] = create_each_block$6( state, eventItems_1, eventItems_1[i], i, component ); } var eventItems_2 = state.eventItems; var each_1_blocks = []; for (var i = 0; i < eventItems_2.length; i += 1) { each_1_blocks[i] = create_each_block_1$5( state, eventItems_2, eventItems_2[i], i, component ); } var newsItems_1 = state.newsItems; var each_2_blocks = []; for (var i = 0; i < newsItems_1.length; i += 1) { each_2_blocks[i] = create_each_block_2$2( state, newsItems_1, newsItems_1[i], i, component ); } var newsItems_2 = state.newsItems; var each_3_blocks = []; for (var i = 0; i < newsItems_2.length; i += 1) { each_3_blocks[i] = create_each_block_3$1( state, newsItems_2, newsItems_2[i], i, component ); } return { c: function create() { div = createElement('div'); div_1 = createElement('div'); for (var i = 0; i < each_blocks.length; i += 1) { each_blocks[i].c(); } text_1 = createText('\r\n '); div_2 = createElement('div'); div_3 = createElement('div'); for (var i = 0; i < each_1_blocks.length; i += 1) { each_1_blocks[i].c(); } text_4 = createText('\r\n '); div_4 = createElement('div'); a = createElement('a'); span = createElement('span'); text_5 = createText('All '); text_6 = createText(text_6_value); text_8 = createText('\r\n'); div_5 = createElement('div'); div_6 = createElement('div'); for (var i = 0; i < each_2_blocks.length; i += 1) { each_2_blocks[i].c(); } text_10 = createText('\r\n '); div_7 = createElement('div'); div_8 = createElement('div'); for (var i = 0; i < each_3_blocks.length; i += 1) { each_3_blocks[i].c(); } text_13 = createText('\r\n '); div_9 = createElement('div'); a_1 = createElement('a'); span_1 = createElement('span'); text_14 = createText('All '); text_15 = createText(text_15_value); this.h(); }, h: function hydrate() { div_1.className = 'indices'; div_3.className = 'items grid-x grid-margin-x'; div_3.style.cssText = div_3_style_value = '' + state.eventsTransitionStyle + ';'; div_2.className = 'gutter'; a.className = 'button'; a.href = '/all-events'; div_4.className = 'button-group'; div.className = div_class_value = 'responsive-carousel events-carousel is-small-screen ' + (state.frozen ? 'frozen' : ''); div_6.className = 'indices'; div_8.className = 'items grid-x grid-margin-x'; div_8.style.cssText = div_8_style_value = '' + state.newsTransitionStyle + ';'; div_7.className = 'gutter'; a_1.className = 'button'; a_1.href = '/all-events'; div_9.className = 'button-group'; div_5.className = div_5_class_value = 'responsive-carousel news-carousel is-small-screen ' + (state.frozen ? 'frozen' : ''); }, m: function mount(target, anchor) { insertNode(div, target, anchor); appendNode(div_1, div); for (var i = 0; i < each_blocks.length; i += 1) { each_blocks[i].m(div_1, null); } appendNode(text_1, div); appendNode(div_2, div); appendNode(div_3, div_2); for (var i = 0; i < each_1_blocks.length; i += 1) { each_1_blocks[i].m(div_3, null); } appendNode(text_4, div); appendNode(div_4, div); appendNode(a, div_4); appendNode(span, a); appendNode(text_5, span); appendNode(text_6, span); insertNode(text_8, target, anchor); insertNode(div_5, target, anchor); appendNode(div_6, div_5); for (var i = 0; i < each_2_blocks.length; i += 1) { each_2_blocks[i].m(div_6, null); } appendNode(text_10, div_5); appendNode(div_7, div_5); appendNode(div_8, div_7); for (var i = 0; i < each_3_blocks.length; i += 1) { each_3_blocks[i].m(div_8, null); } appendNode(text_13, div_5); appendNode(div_9, div_5); appendNode(a_1, div_9); appendNode(span_1, a_1); appendNode(text_14, span_1); appendNode(text_15, span_1); }, p: function update(changed, state) { var eventItems_1 = state.eventItems; if (changed.eventsSelectedIndex || changed.eventItems) { for (var i = 0; i < eventItems_1.length; i += 1) { if (each_blocks[i]) { each_blocks[i].p( changed, state, eventItems_1, eventItems_1[i], i ); } else { each_blocks[i] = create_each_block$6( state, eventItems_1, eventItems_1[i], i, component ); each_blocks[i].c(); each_blocks[i].m(div_1, null); } } for (; i < each_blocks.length; i += 1) { each_blocks[i].u(); each_blocks[i].d(); } each_blocks.length = eventItems_1.length; } var eventItems_2 = state.eventItems; if (changed.eventsSelectedIndex || changed.eventItems) { for (var i = 0; i < eventItems_2.length; i += 1) { if (each_1_blocks[i]) { each_1_blocks[i].p( changed, state, eventItems_2, eventItems_2[i], i ); } else { each_1_blocks[i] = create_each_block_1$5( state, eventItems_2, eventItems_2[i], i, component ); each_1_blocks[i].c(); each_1_blocks[i].m(div_3, null); } } for (; i < each_1_blocks.length; i += 1) { each_1_blocks[i].u(); each_1_blocks[i].d(); } each_1_blocks.length = eventItems_2.length; } if ( changed.eventsTransitionStyle && div_3_style_value !== (div_3_style_value = '' + state.eventsTransitionStyle + ';') ) { div_3.style.cssText = div_3_style_value; } if ( changed.itemsIndex && text_6_value !== (text_6_value = state.itemsIndex === 0 ? 'Events' : 'News') ) { text_6.data = text_6_value; } if ( changed.frozen && div_class_value !== (div_class_value = 'responsive-carousel events-carousel is-small-screen ' + (state.frozen ? 'frozen' : '')) ) { div.className = div_class_value; } var newsItems_1 = state.newsItems; if (changed.newsSelectedIndex || changed.newsItems) { for (var i = 0; i < newsItems_1.length; i += 1) { if (each_2_blocks[i]) { each_2_blocks[i].p( changed, state, newsItems_1, newsItems_1[i], i ); } else { each_2_blocks[i] = create_each_block_2$2( state, newsItems_1, newsItems_1[i], i, component ); each_2_blocks[i].c(); each_2_blocks[i].m(div_6, null); } } for (; i < each_2_blocks.length; i += 1) { each_2_blocks[i].u(); each_2_blocks[i].d(); } each_2_blocks.length = newsItems_1.length; } var newsItems_2 = state.newsItems; if (changed.newsSelectedIndex || changed.newsItems) { for (var i = 0; i < newsItems_2.length; i += 1) { if (each_3_blocks[i]) { each_3_blocks[i].p( changed, state, newsItems_2, newsItems_2[i], i ); } else { each_3_blocks[i] = create_each_block_3$1( state, newsItems_2, newsItems_2[i], i, component ); each_3_blocks[i].c(); each_3_blocks[i].m(div_8, null); } } for (; i < each_3_blocks.length; i += 1) { each_3_blocks[i].u(); each_3_blocks[i].d(); } each_3_blocks.length = newsItems_2.length; } if ( changed.newsTransitionStyle && div_8_style_value !== (div_8_style_value = '' + state.newsTransitionStyle + ';') ) { div_8.style.cssText = div_8_style_value; } if ( changed.itemsIndex && text_15_value !== (text_15_value = state.itemsIndex === 0 ? 'Events' : 'News') ) { text_15.data = text_15_value; } if ( changed.frozen && div_5_class_value !== (div_5_class_value = 'responsive-carousel news-carousel is-small-screen ' + (state.frozen ? 'frozen' : '')) ) { div_5.className = div_5_class_value; } }, u: function unmount() { detachNode(div); for (var i = 0; i < each_blocks.length; i += 1) { each_blocks[i].u(); } for (var i = 0; i < each_1_blocks.length; i += 1) { each_1_blocks[i].u(); } detachNode(text_8); detachNode(div_5); for (var i = 0; i < each_2_blocks.length; i += 1) { each_2_blocks[i].u(); } for (var i = 0; i < each_3_blocks.length; i += 1) { each_3_blocks[i].u(); } }, d: function destroy$$1() { destroyEach(each_blocks); destroyEach(each_1_blocks); destroyEach(each_2_blocks); destroyEach(each_3_blocks); }, }; } // (102:6) {{else}} function create_if_block_2$4(state, component) { var div, div_1, div_2, div_class_value; var items = state.items; var each_blocks = []; for (var i = 0; i < items.length; i += 1) { each_blocks[i] = create_each_block_4$1( state, items, items[i], i, component ); } return { c: function create() { div = createElement('div'); div_1 = createElement('div'); div_2 = createElement('div'); for (var i = 0; i < each_blocks.length; i += 1) { each_blocks[i].c(); } this.h(); }, h: function hydrate() { div_2.className = 'items grid-x grid-margin-x'; div_1.className = 'gutter'; div.className = div_class_value = 'responsive-carousel ' + (state.frozen ? 'frozen' : ''); }, m: function mount(target, anchor) { insertNode(div, target, anchor); appendNode(div_1, div); appendNode(div_2, div_1); for (var i = 0; i < each_blocks.length; i += 1) { each_blocks[i].m(div_2, null); } }, p: function update(changed, state) { var items = state.items; if (changed.items) { for (var i = 0; i < items.length; i += 1) { if (each_blocks[i]) { each_blocks[i].p( changed, state, items, items[i], i ); } else { each_blocks[i] = create_each_block_4$1( state, items, items[i], i, component ); each_blocks[i].c(); each_blocks[i].m(div_2, null); } } for (; i < each_blocks.length; i += 1) { each_blocks[i].u(); each_blocks[i].d(); } each_blocks.length = items.length; } if ( changed.frozen && div_class_value !== (div_class_value = 'responsive-carousel ' + (state.frozen ? 'frozen' : '')) ) { div.className = div_class_value; } }, u: function unmount() { detachNode(div); for (var i = 0; i < each_blocks.length; i += 1) { each_blocks[i].u(); } }, d: function destroy$$1() { destroyEach(each_blocks); }, }; } // (69:81) {{#if loaded}} function create_if_block$6(state, component) { var if_block_anchor; var current_block_type = select_block_type_1$4(state); var if_block = current_block_type(state, component); return { c: function create() { if_block.c(); if_block_anchor = createComment(); }, m: function mount(target, anchor) { if_block.m(target, anchor); insertNode(if_block_anchor, target, anchor); }, p: function update(changed, state) { if ( current_block_type === (current_block_type = select_block_type_1$4(state)) && if_block ) { if_block.p(changed, state); } else { if_block.u(); if_block.d(); if_block = current_block_type(state, component); if_block.c(); if_block.m(if_block_anchor.parentNode, if_block_anchor); } }, u: function unmount() { if_block.u(); detachNode(if_block_anchor); }, d: function destroy$$1() { if_block.d(); }, }; } // (117:13) {{else}} function create_if_block_5$3(state, component) { var loader = new Loader({ root: component.root, }); return { c: function create() { loader._fragment.c(); }, m: function mount(target, anchor) { loader._mount(target, anchor); }, p: noop, u: function unmount() { loader._unmount(); }, d: function destroy$$1() { loader.destroy(false); }, }; } function click_handler$4(event) { var component = this._svelte.component; var eventItems_1 = this._svelte.eventItems_1, index = this._svelte.index, item = eventItems_1[index]; component.set({ eventsSelectedIndex: index }); } function click_handler_1(event) { var component = this._svelte.component; var newsItems_1 = this._svelte.newsItems_1, index = this._svelte.index, item_2 = newsItems_1[index]; component.set({ newsSelectedIndex: index }); } function select_block_type$6(state, items, item, index) { if (item.type === 'event') { return create_if_block_3$4; } return create_if_block_4$3; } function select_block_type_1$4(state) { if (state.isSmallScreen) { return create_if_block_1$6; } return create_if_block_2$4; } function select_block_type_2$3(state) { if (state.loaded) { return create_if_block$6; } return create_if_block_5$3; } function ResponsiveHomeCarousel(options) { init(this, options); this._state = assign(data$5(), options.data); this._state.windowWidth = window.innerWidth; this._recompute( { items: 1, windowWidth: 1, isSmallScreen: 1, eventsSelectedIndex: 1, newsSelectedIndex: 1, }, this._state ); var _oncreate = oncreate$7.bind(this); if (!options.root) { this._oncreate = [_oncreate]; this._beforecreate = []; this._aftercreate = []; } else { this.root._oncreate.push(_oncreate); } this._fragment = create_main_fragment$7(this._state, this); if (options.target) { this._fragment.c(); this._fragment.m(options.target, options.anchor || null); this._lock = true; callAll(this._beforecreate); callAll(this._oncreate); callAll(this._aftercreate); this._lock = false; } } assign(ResponsiveHomeCarousel.prototype, methods$5, proto); ResponsiveHomeCarousel.prototype._recompute = function _recompute( changed, state ) { if (changed.items) { if (differs(state.loaded, (state.loaded = loaded$4(state.items)))) { changed.loaded = true; } } if (changed.windowWidth) { if ( differs( state.isSmallScreen, (state.isSmallScreen = isSmallScreen$1(state.windowWidth)) ) ) { changed.isSmallScreen = true; } } if ( changed.isSmallScreen || changed.windowWidth || changed.eventsSelectedIndex ) { if ( differs( state.eventsTransitionStyle, (state.eventsTransitionStyle = eventsTransitionStyle( state.isSmallScreen, state.windowWidth, state.eventsSelectedIndex )) ) ) { changed.eventsTransitionStyle = true; } } if ( changed.isSmallScreen || changed.windowWidth || changed.newsSelectedIndex ) { if ( differs( state.newsTransitionStyle, (state.newsTransitionStyle = newsTransitionStyle( state.isSmallScreen, state.windowWidth, state.newsSelectedIndex )) ) ) { changed.newsTransitionStyle = true; } } if (changed.items) { if ( differs( state.eventItems, (state.eventItems = eventItems(state.items)) ) ) { changed.eventItems = true; } if ( differs( state.newsItems, (state.newsItems = newsItems(state.items)) ) ) { changed.newsItems = true; } } }; /** >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> * Component: `.reveal` * Used to contain reveal content *** >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/ var $html = document.querySelector('html'); var $reveal = document.querySelector('.reveal'); var $body = document.querySelector('.reveal .body'); var $fReveal = $($reveal); var Reveal = { $body: $body, open: function open(options) { options = options || {}; $html.classList.remove('header-up'); $fReveal.foundation('open'); if (options.classes) { _.each(options.classes, function (className) { return $reveal.classList.add(className); }); } setFocus($reveal); $(document).on('closed.zf.reveal', function () { $fReveal.foundation('close'); if (options.classes) { _.each(options.classes, function (className) { return $reveal.classList.remove(className); }); } if (options.onClose) { options.onClose(options.payload); } $(document).off('closed.zf.reveal'); }); }, }; /** >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> * Component: `.video` * for playing video on pages and in carousels *** >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/ function Video() { // trigger playing videos var $player; _.each(document.querySelectorAll('.video-media'), function ($video) { var $button = $video.querySelector('button'); var $content = $video.querySelector('.video-reveal-content'); var $frame = $video.querySelector('.video-frame'); // inject youtube api script if (!window.ifactoryYouTubeInjected) { window.ifactoryYouTubeInjected = true; var script = document.createElement('script'); script.src = '//www.youtube.com/iframe_api'; document.querySelector('.hidden-js').appendChild(script); } $button.addEventListener('click', function (event) { event.preventDefault(); $content.removeAttribute('aria-hidden'); Reveal.$body.appendChild($content); var $replace = document.createElement('div'); $replace.id = 'youtube-player'; $frame.appendChild($replace); $player = new YT.Player('youtube-player', { width: '560', height: '315', videoId: $content.dataset.youtubeid, // host: 'https://www.youtube.com', playerVars: { rel: 0, showinfo: 0, autoplay: 0, }, events: { onReady: function onReady() { $player.playVideo(); }, }, }); // this craziness accounts for aspect ratio changes on different display heights / widths var resizeVideo = _.throttle(function () { var dimensions = viewportDimensions(); var revealAspect; if (dimensions.width < 700) { revealAspect = (dimensions.height - 120) / dimensions.width; } else if (dimensions.width < 1024) { revealAspect = (dimensions.height - 60) / (dimensions.width - 60); } else { revealAspect = (dimensions.height - 60) / (dimensions.width - 80); } // aspect ratio = 16:9 = 100 * 9/16 if (revealAspect < 9 / 16) { $frame.style.paddingBottom = revealAspect * 100 + '%'; } else { $frame.removeAttribute('style'); } }, 100); resizeVideo(); window.addEventListener('resize', resizeVideo); Reveal.open({ classes: ['video-reveal'], onClose: function onClose() { var $iframe = document.querySelector('#youtube-player'); $iframe.parentNode.removeChild($iframe); $content.setAttribute('aria-hidden', 'true'); $video.appendChild($content); window.removeEventListener('resize', resizeVideo); setFocus($video); }, }); }); }); } // import parse from 'date-fns/parse' // import differenceInHours from 'date-fns/difference_in_hours' // import differenceInMinutes from 'date-fns/difference_in_minutes' // import differenceInSeconds from 'date-fns/difference_in_seconds' /** >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> * This YavaScript is a helper for the Calendar page/module *** >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/ function Calendar() { window.addEventListener('DOMContentLoaded', function () { // for CSS purposes, the elements need to be in a particular order, with wrappers var $catCol = document.querySelector('#hcFilter .catCol'); var $$catLabels = $catCol.querySelectorAll('label'); _.each($$catLabels, function ($label) { var $div = document.createElement('div'); $div.classList.add('checkbox'); $label.parentNode.insertBefore($div, $label); $div.appendChild($label); var $input = $label.querySelector('input'); $div.insertBefore($input, $label); }); var $$headers = document.querySelectorAll('#events .header'); _.each($$headers, function ($header) { var $ul = $header.nextElementSibling; var $div = document.createElement('div'); $div.classList.add('day-group'); $header.parentNode.insertBefore($div, $header); $div.appendChild($header); $div.appendChild($ul); }); var $eventsWrap = document.createElement('div'); $eventsWrap.classList.add('events-wrap'); var $$groups = document.querySelectorAll('#events .day-group'); $$groups[0].parentNode.insertBefore($eventsWrap, $$groups[0]); _.each($$groups, function ($group) { $eventsWrap.appendChild($group); }); var then; var $$times = document.querySelectorAll( '#events .events-wrap time' ); _.each($$times, function ($time) { // create day/year wrapper var $div = document.createElement('div'); $div.classList.add('day-year'); var thenString = $time.getAttribute('datetime'); var ref = thenString.substr(0, 10).split('-'); var year = ref[0]; var month = ref[1]; var day = ref[2]; then = new Date(year, month - 1, day); $div.innerHTML = format_1(then, 'MMM') + ' ' + format_1(then, 'D') + ''; $time.parentNode.insertBefore($div, $time); $time.innerHTML = format_1(then, 'MMMM D, YYYY') + '
' + $time.textContent; // wrap all other elements var $content = document.createElement('div'); $content.classList.add('content'); $time.parentNode.insertBefore($content, $time); var $elem = $time; var $elemToMove; while ($elem) { $elemToMove = $elem; $elem = $elem.nextElementSibling; $content.appendChild($elemToMove); } }); var $$navs = document.querySelectorAll('#events .event-list-nav'); _.each($$navs, function ($nav) { var $divider = document.createElement('li'); $divider.classList.add('divider'); $nav.insertBefore($divider, $nav.childNodes[6]); var $month = document.createElement('li'); $month.classList.add('month-name'); $month.textContent = format_1(then, 'MMMM'); $nav.appendChild($month); }); var $layoutWrap = document.createElement('div'); $layoutWrap.classList.add('layout-wrap'); var $calendar = document.querySelector('.calendar-section'); var $filter = document.querySelector('.calendar-section > #filter'); var $aside = document.querySelector('.calendar-section > aside'); var $events = document.querySelector('.calendar-section > #events'); $calendar.appendChild($layoutWrap); $calendar.appendChild($events); $layoutWrap.appendChild($aside); $layoutWrap.appendChild($filter); document .querySelector('.calendar-section') .classList.add('fouc-done'); }); } /** >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> * Global `window.app` object * @global {object} app - contains components and other global functionality * @function TwitterBlock * @function ProgramsList * @function NewsList * @function EventsList * @function Directory * @function ResponsiveCarousel * @function ResponsiveHomeCarousel * @function Video * @function Calendar * * To invoke a specific component on any given specific page, invoke it by namespace: * * * NOTE: componenents reuire a`selector` as the first argument: * * * This use of components allows minification of JS files into a single file, * without needing to break them up for different pages. *** >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/ window.app = { TwitterBlock: function (target, url) { return new TwitterBlock({ target: document.querySelector(target), data: { url: url }, }); }, ProgramsList: function (target, url) { return new ProgramsList({ target: document.querySelector(target), data: { url: url }, }); }, NewsList: function (target, url) { return new NewsList({ target: document.querySelector(target), data: { url: url }, }); }, EventsList: function (target, url) { return new EventsList({ target: document.querySelector(target), data: { url: url }, }); }, Directory: function (target, url) { return new Directory({ target: document.querySelector(target), data: { url: url }, }); }, ResponsiveCarousel: function (target, url) { return new ResponsiveCarousel({ target: document.querySelector(target), data: { url: url }, }); }, ResponsiveHomeCarousel: function (target, url) { return new ResponsiveHomeCarousel({ target: document.querySelector(target), data: { url: url }, }); }, Video: Video, Calendar: Calendar, }; /** >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> * Component: `.accordion-block` * This expands / collapses all accordions *** >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/ _.each( document.querySelectorAll('.accordion-block'), function ($accordionBlock) { var $expandAll = $accordionBlock.querySelector('.expand-all'); var $collapseAll = $accordionBlock.querySelector('.collapse-all'); var $$toggles = $accordionBlock.querySelectorAll('.accordion-title'); if ($expandAll && $collapseAll) { _.each($$toggles, function ($toggle) { $toggle.addEventListener('click', function () { var expanded = $toggle.getAttribute('aria-expanded') === 'true'; if (expanded) { $collapseAll.removeAttribute('aria-expanded'); $collapseAll.disabled = false; if ( _.map($$toggles, function ($toggle) { return $toggle.getAttribute( 'aria-expanded' ); }).indexOf('false') < 0 ) { $expandAll.setAttribute( 'aria-expanded', 'true' ); $expandAll.disabled = true; } } else { $expandAll.removeAttribute('aria-expanded'); $expandAll.disabled = false; if ( _.map($$toggles, function ($toggle) { return $toggle.getAttribute( 'aria-expanded' ); }).indexOf('true') < 0 ) { $collapseAll.setAttribute( 'aria-expanded', 'false' ); $collapseAll.disabled = true; } } }); $toggle.addEventListener('keydown', function () { if (event.keyCode === 13 || event.keyCode === 32) { var expanded = $toggle.getAttribute('aria-expanded') === 'true'; if (expanded) { $collapseAll.removeAttribute('aria-expanded'); $collapseAll.disabled = false; if ( _.map($$toggles, function ($toggle) { return $toggle.getAttribute( 'aria-expanded' ); }).indexOf('false') < 0 ) { $expandAll.setAttribute( 'aria-expanded', 'true' ); $expandAll.disabled = true; } } else { $expandAll.removeAttribute('aria-expanded'); $expandAll.disabled = false; if ( _.map($$toggles, function ($toggle) { return $toggle.getAttribute( 'aria-expanded' ); }).indexOf('true') < 0 ) { $collapseAll.setAttribute( 'aria-expanded', 'false' ); $collapseAll.disabled = true; } } } }); }); $expandAll.addEventListener('click', function () { $expandAll.setAttribute('aria-expanded', 'true'); $expandAll.disabled = true; $collapseAll.removeAttribute('aria-expanded'); $collapseAll.disabled = false; _.each($$toggles, function ($toggle) { if ($toggle.getAttribute('aria-expanded') === 'false') { $($toggle).click(); } }); }); $collapseAll.addEventListener('click', function () { $collapseAll.setAttribute('aria-expanded', 'false'); $collapseAll.disabled = true; $expandAll.removeAttribute('aria-expanded'); $expandAll.disabled = false; _.each($$toggles, function ($toggle) { if ($toggle.getAttribute('aria-expanded') === 'true') { $($toggle).click(); } }); }); } // jump to the top of any given accordion _.each( $accordionBlock.querySelectorAll('.back-to-top'), function ($backToTop) { $backToTop.addEventListener('click', function (event) { event.preventDefault(); window.scroll( 0, $accordionBlock.getBoundingClientRect().top + window.pageYOffset - 125 ); }); } ); } ); /** >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> * GENERAL LAYOUT FUNCTIONALITY *** >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/ /** >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> * RESPONSIVE CLASSES *** >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/ var $html$1 = document.querySelector('html'); function resizeClassChanger() { $html$1.classList.remove('resp-sm'); $html$1.classList.remove('resp-md'); $html$1.classList.remove('resp-lg'); if (viewportDimensions().width < 700) { $html$1.classList.add('resp-sm'); } else if (viewportDimensions().width < 1024) { $html$1.classList.add('resp-md'); } else { $html$1.classList.add('resp-lg'); } } resizeClassChanger(); window.addEventListener('resize', _.debounce(resizeClassChanger, 150)); var transitionTimer; window.addEventListener('resize', function () { $html$1.classList.add('no-transitions'); transitionTimer = setTimeout(function () { clearTimeout(transitionTimer); $html$1.classList.remove('no-transitions'); }, 1500); }); /** >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> * STICKY HEADER JAVASCRIPT *** >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/ var lastScrollTop = 0; var delta = 5; var $header = document.querySelector('.header'); var headerHeight = $header.clientHeight; window.addEventListener( 'scroll', _.throttle(function () { var scrollTop = window.pageYOffset; // make sure they scroll more than delta if (Math.abs(lastScrollTop - scrollTop) <= delta + headerHeight) { return; } if (scrollTop > lastScrollTop && scrollTop > headerHeight) { var $openMenu = document.querySelector( '.menus .menu > [aria-expanded="true"]' ); // only hide the menu if something is not open if (!$openMenu) { $html$1.classList.add('header-up'); // scroll down } } else { $html$1.classList.remove('header-up'); // scroll up } lastScrollTop = scrollTop; }, 100) ); window.addEventListener('resize', function () { return (headerHeight = $header.clientHeight); }); /** >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> * RESPONSIVE UTILITY LINKS JAVASCRIPT * Moves the DOM around at large size *** >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/ var $menus = $header.querySelector('.menus'); var $topNav = $header.querySelector('nav.top'); var $links = document.querySelector('.utility-links'); function responsiveUtilityLinks() { var isLargeView = viewportDimensions().width >= 1024; var $nextElement = isLargeView ? $topNav.nextElementSibling : $menus.nextElementSibling; if ($nextElement === $links) { if (isLargeView) { // move it up $menus.insertAdjacentElement('afterend', $links); } else { // move it back $topNav.insertAdjacentElement('afterend', $links); } } } responsiveUtilityLinks(); window.addEventListener('resize', function () { return responsiveUtilityLinks(); }); /** >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> * RESPONSIVE HEADER JAVASCRIPT * main navigation toggles on `click` medium and small, but not large *** >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/ var $mainMenuIcon = document.querySelector('.header .main-menu > .icon'); var $mainMenuDropdown = document.querySelector('.header .dropdown-menu'); function responsiveHeaderDropdown() { if (viewportDimensions().width >= 1024) { var haspopup = $mainMenuIcon.getAttribute('aria-haspopup'); var expanded = $mainMenuIcon.getAttribute('aria-expanded'); var hidden = $mainMenuDropdown.getAttribute('aria-hidden'); if (haspopup && expanded && hidden) { $mainMenuIcon.setAttribute('temp-haspopup', haspopup); $mainMenuIcon.setAttribute('temp-expanded', expanded); $mainMenuDropdown.setAttribute('temp-hidden', hidden); } $mainMenuIcon.removeAttribute('aria-haspopup'); $mainMenuIcon.removeAttribute('aria-expanded'); $mainMenuDropdown.removeAttribute('aria-hidden'); $mainMenuDropdown.classList.remove('visibility-hidden'); } else if ($mainMenuDropdown.classList.contains('visibility-hidden')) { var haspopup$1 = $mainMenuIcon.getAttribute('temp-haspopup'); var expanded$1 = $mainMenuIcon.getAttribute('temp-expanded'); var hidden$1 = $mainMenuDropdown.getAttribute('temp-hidden'); if (haspopup$1 && expanded$1 && hidden$1) { $mainMenuIcon.setAttribute('aria-haspopup', haspopup$1); $mainMenuIcon.setAttribute('aria-expanded', expanded$1); $mainMenuDropdown.setAttribute('aria-hidden', hidden$1); } $mainMenuIcon.removeAttribute('temp-haspopup'); $mainMenuIcon.removeAttribute('temp-expanded'); $mainMenuDropdown.removeAttribute('temp-hidden'); $mainMenuDropdown.classList.add('visibility-hidden'); } } responsiveHeaderDropdown(); window.addEventListener('resize', function () { responsiveHeaderDropdown(); }); /** >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> * RESPONSIVE HEADER JAVASCRIPT * plus/minus main navigation on medium and small *** >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/ var $$mainMenuToggles = document.querySelectorAll('.dropdown-menu .toggle'); _.each($$mainMenuToggles, function ($toggle) { $toggle.addEventListener('click', function () { var $section = $toggle.closest('.section'); var $content = $section.querySelector('.content'); var expanded = $toggle.getAttribute('aria-expanded') === 'true'; $toggle.setAttribute('aria-expanded', !expanded); $section.dataset.expanded = !expanded; $content.classList[expanded ? 'add' : 'remove']( 'visibility-hidden' ); }); }); /** >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> * RESPONSIVE HEADER JAVASCRIPT * focus main navigation on large *** >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/ var $dropdownMenuNav = document.querySelector('.dropdown-menu-nav'); var $$mainMenuSections = $dropdownMenuNav.querySelectorAll('.section'); var $$mainMenuTitles = $dropdownMenuNav.querySelectorAll('.title a'); var $$mainMenuUls = $dropdownMenuNav.querySelectorAll('.content'); /*function responsiveHeaderSections() { const isLargeView = viewportDimensions().width >= 1024 if (isLargeView) { // using jQuery for convenience here $('body').on('focus.dropdown-menu-nav', '*', mainNavCheckMouseOut) } else { // using jQuery for convenience here $('body').off('focus.dropdown-menu-nav', '*', mainNavCheckMouseOut) } _.each($$mainMenuTitles, $title => { const $section = $title.closest('.section') const $toggle = $section.querySelector('.toggle') const $ul = $section.querySelector('.content') if (isLargeView) { const haspopup = $toggle.getAttribute('temp-haspopup') if (haspopup) { $toggle.setAttribute('aria-haspopup', haspopup) } $toggle.removeAttribute('temp-haspopup') $toggle.setAttribute('aria-expanded', 'false') $section.dataset.expanded = 'false' $ul.classList.remove('visibility-hidden') document.addEventListener('click', closeMainMenuSections) } else if ($mainMenuDropdown.classList.contains('visibility-hidden')) { const haspopup = $toggle.getAttribute('aria-haspopup') if (haspopup) { $toggle.setAttribute('temp-haspopup', haspopup) } $section.removeAttribute('aria-haspopup') $ul.classList.add('visibility-hidden') document.removeEventListener('click', closeMainMenuSections) } }) } responsiveHeaderSections() window.addEventListener('resize', () => responsiveHeaderSections())*/ /** >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> * Main & Search Navigation *** >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/ var $menuToggle = document.querySelector('.header .main-menu > button'); var $menuDropdown = document.querySelector('.header .dropdown-menu'); var $searchToggle = document.querySelector('.header .search > button'); var $searchDropdown = document.querySelector('.header .dropdown-search'); function menuItemToggle(menuClass, $toggle, $dropdown) { return function () { var expanded = $toggle.getAttribute('aria-expanded') === 'true'; if (expanded) { // it is open, so close it $html$1.classList.remove('menu-item-open'); $html$1.classList.remove(menuClass); $dropdown.setAttribute('aria-hidden', 'true'); $toggle.setAttribute('aria-expanded', !expanded); $dropdown.classList.add('visibility-hidden'); } else { if ($html$1.classList.contains('menu-item-open')) { // resetting everything $html$1.classList.remove('menu-main-open'); $html$1.classList.remove('menu-search-open'); $menuToggle.setAttribute('aria-expanded', 'false'); $searchToggle.setAttribute('aria-expanded', 'false'); $menuDropdown.setAttribute('aria-hidden', 'true'); $searchDropdown.setAttribute('aria-hidden', 'true'); $menuDropdown.classList.add('visibility-hidden'); $searchDropdown.classList.add('visibility-hidden'); // now open the menu $html$1.classList.add(menuClass); $dropdown.removeAttribute('aria-hidden'); $toggle.setAttribute('aria-expanded', !expanded); $dropdown.classList.remove('visibility-hidden'); } else { // it is not open elsewhere, so open it $html$1.classList.add('menu-item-open'); $html$1.classList.add(menuClass); $dropdown.removeAttribute('aria-hidden'); $toggle.setAttribute('aria-expanded', !expanded); $dropdown.classList.remove('visibility-hidden'); } if (menuClass === 'menu-search-open') { $dropdown.querySelector('input').focus(); } } }; } $menuToggle.addEventListener( 'click', menuItemToggle('menu-main-open', $menuToggle, $menuDropdown) ); $searchToggle.addEventListener( 'click', menuItemToggle('menu-search-open', $searchToggle, $searchDropdown) ); /** >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> * Accessibility tab loops for main menu * (both forward and backward loops) *** >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/ var isMediumOrSmallerView = viewportDimensions().width < 1024; window.addEventListener('resize', function () { return (isMediumOrSmallerView = viewportDimensions().width < 1024); }); var $menuFocusFirst = document.querySelector('#menu-focus-first'); var $menuFocusLast = document.querySelector('#menu-focus-last'); $menuFocusLast.addEventListener('keydown', function (event) { if ( isMediumOrSmallerView && !event.shiftKey && event.keyCode === 9 && !$menuDropdown.classList.contains('visibility-hidden') ) { event.preventDefault(); $menuFocusFirst.focus(); } }); $menuFocusFirst.addEventListener('keydown', function (event) { if ( isMediumOrSmallerView && event.shiftKey && event.keyCode === 9 && !$menuDropdown.classList.contains('visibility-hidden') ) { event.preventDefault(); $menuFocusLast.focus(); } }); /** >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> * Tabs *** >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/ var $$tabs = document.querySelectorAll('.tabs button'); _.each($$tabs, function ($tab) { $tab.addEventListener('click', function (event) { var $thisTabBlock = event.target.closest('.tab-block'); var tabId = event.target.dataset.tabsTarget; tabsSetAllInactive($thisTabBlock); tabsSetActiveTab($thisTabBlock, tabId); }); }); function tabsSetAllInactive($tabBlock) { var $$tabs = $tabBlock.querySelectorAll('.tabs-title'); _.each($$tabs, function ($tab) { $tab.classList.remove('is-active'); $tab.querySelectorAll('button')[0].removeAttribute('aria-selected'); }); var $$tabsPanels = $tabBlock.querySelectorAll('.tabs-panel'); _.each($$tabsPanels, function ($tabPanel) { $tabPanel.classList.remove('is-active'); }); } function tabsSetActiveTab($tabBlock, tabId) { var $activeTab = $tabBlock.querySelectorAll( '[data-tabs-target="' + tabId + '"]' )[0]; $activeTab.setAttribute('aria-selected', true); $activeTab.closest('.tabs-title').classList.add('is-active'); $tabBlock .querySelectorAll('[data-tab="' + tabId + '"]')[0] .classList.add('is-active'); } /** >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> * "Resources For" Responsive Dropdown *** >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/ var $$subUtilityNavs = document.querySelectorAll('.sub-utility'); var $$subUtilityToggles = document.querySelectorAll('.sub-utility .toggle'); function closeUtilityLinks(event) { if (!event.target.closest('.sub-utility')) { _.each($$subUtilityNavs, function ($nav) { return ($nav.dataset.expanded = 'false'); }); _.each($$subUtilityToggles, function ($nav) { return $nav.setAttribute('aria-expanded', 'false'); }); } } function responsiveResourcesFor() { var isLarge = viewportDimensions().width >= 1024; _.each($$subUtilityNavs, function ($nav) { var $toggle = $nav.querySelector('.toggle'); if (isLarge) { var expanded = $toggle.getAttribute('temp-expanded'); if (expanded) { $nav.dataset.expanded = expanded; $toggle.setAttribute('aria-expanded', expanded); } $toggle.removeAttribute('temp-expanded'); document.addEventListener('click', closeUtilityLinks); } else { var expanded$1 = $toggle.getAttribute('aria-expanded'); if (expanded$1) { $toggle.setAttribute('temp-expanded', expanded$1); } $nav.removeAttribute('data-expanded'); $toggle.removeAttribute('aria-expanded'); document.removeEventListener('click', closeUtilityLinks); } }); } responsiveResourcesFor(); window.addEventListener('resize', function () { return responsiveResourcesFor(); }); _.each($$subUtilityToggles, function ($toggle) { var $nav = $toggle.closest('.sub-utility'); $toggle.addEventListener('click', function () { var expanded = $toggle.getAttribute('aria-expanded') === 'true'; $nav.dataset.expanded = !expanded; $toggle.setAttribute('aria-expanded', !expanded); }); }); /** >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> * Sub Navigation *** >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/ var $subNavToggle = document.querySelector('.nav-sub-bar .main-toggle'); if ($subNavToggle) { var $subNavDropdown = document.querySelector('.nav-sub-bar .dropdown'); $subNavToggle.addEventListener('click', function () { var expanded = $subNavToggle.getAttribute('aria-expanded') === 'true'; if (expanded) { $subNavDropdown.setAttribute('aria-hidden', 'true'); $subNavDropdown.classList.add('visibility-hidden'); } else { $subNavDropdown.removeAttribute('aria-hidden'); $subNavDropdown.classList.remove('visibility-hidden'); } $subNavToggle.setAttribute('aria-expanded', !expanded); }); var $subNav = document.querySelector('.nav-sub'); document.addEventListener('click', function (event) { if (!$subNav.contains(event.target)) { $subNavDropdown.setAttribute('aria-hidden', 'true'); $subNavToggle.setAttribute('aria-expanded', 'false'); $subNavDropdown.classList.add('visibility-hidden'); } }); // toggling on each section var $$toggles = document.querySelectorAll( '.nav-sub .dropdown [aria-controls]' ); _.each($$toggles, function ($toggle) { $toggle.addEventListener('click', function () { var $li = $toggle.closest('li'); var expanded = $toggle.getAttribute('aria-expanded') === 'true'; $toggle.setAttribute('aria-expanded', !expanded); $li.dataset.expanded = !expanded; }); }); } /** >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> * RESPONSIVE FOOTER JAVASCRIPT * the use case is here for changing functionality * at different responsive dimensions to * match CSS responsive dimensions *** >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/ var $$footerGroups = document.querySelectorAll('.footer-nav .group'); function responsiveFooter() { var isSmall = viewportDimensions().width < 700; _.each($$footerGroups, function ($group) { var $toggle = $group.querySelector('.toggle'); if (isSmall) { var expanded = $toggle.getAttribute('temp-expanded'); if (expanded) { $group.dataset.expanded = expanded; $toggle.setAttribute('aria-expanded', expanded); } $toggle.removeAttribute('temp-expanded'); } else { var expanded$1 = $toggle.getAttribute('aria-expanded'); if (expanded$1) { $toggle.setAttribute('temp-expanded', expanded$1); } $group.removeAttribute('data-expanded'); $toggle.removeAttribute('aria-expanded'); } }); } responsiveFooter(); window.addEventListener('resize', function () { return responsiveFooter(); }); // toggling on each section var $$footerToggles = document.querySelectorAll('.footer-nav .toggle'); _.each($$footerToggles, function ($toggle) { $toggle.addEventListener('click', function () { var $group = $toggle.closest('.group'); var expanded = $toggle.getAttribute('aria-expanded') === 'true'; $toggle.setAttribute('aria-expanded', !expanded); $group.dataset.expanded = !expanded; }); }); // /** >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> // * Responsive tables NO LONGER USING IN FAVOR OF FOUNDATION // *** >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/ // $('table.table').basictable({ // breakpoint: 700, // }) /** >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> * Jump to top of page button in footer *** >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/ document .querySelector('#back-to-top-footer') .addEventListener('click', function (event) { event.preventDefault(); window.scroll(0, 0); document.body.focus(); }); /** >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> * Auto Close Inside AAMU on last item * When pressing tab on the last item in the menu, the menu closes. *** >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/ var insideAamuItems = document.querySelectorAll( '.sub-utility > ul > li:last-of-type a' ); for (var i = 0; i < insideAamuItems.length; i++) { insideAamuItems[i].addEventListener('keydown', function (event) { var sibl = event.target.previousElementSibling; var attrVal = null; if (sibl) { attrVal = event.target.previousElementSibling.getAttribute( 'aria-expanded' ); attrVal = attrVal === 'true'; } if (!attrVal || attrVal == null) { if (event.keyCode === 9 && !event.shiftKey) { document.querySelector('.sub-utility .toggle').click(); } } }); } /** >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> * Auto Close Section Navigation on last item * When pressing tab on the last item in the menu, the menu closes. *** >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/ var lastItems = document.querySelectorAll( '.nav-sub-bar .dropdown > ul > li:last-of-type a' ); for (var i = 0; i < lastItems.length; i++) { lastItems[i].addEventListener('keydown', function (event) { var sibl = event.target.previousElementSibling; var attrVal = null; if (sibl) { attrVal = event.target.previousElementSibling.getAttribute( 'aria-expanded' ); attrVal = attrVal === 'true'; } if (!attrVal || attrVal == null) { if (event.keyCode === 9 && !event.shiftKey) { document.querySelector('.nav-sub .main-toggle').click(); } } }); } const searchInput = document.querySelector('input[type=search]'); const searchToggleBttn = document.querySelector('#menu-focus-last'); function toggleSearchBttnStateText() { if (searchToggleBttn.getAttribute('aria-expanded') == 'true') { searchToggleBttn.querySelector('span').innerHTML = 'Close Search'; } else { searchToggleBttn.querySelector('span').innerHTML = 'Open Search'; } } document.onload = toggleSearchBttnStateText(); searchInput.addEventListener('keydown', function (e) { if (e.keyCode === 9 && e.shiftKey) { searchToggleBttn.click(); } }); searchToggleBttn.addEventListener('keydown', function (e) { if (e.keyCode === 9 && !e.shiftKey) { var attrVal = e.target.getAttribute('aria-expanded'); attrVal = attrVal === 'true'; console.log(attrVal); if (attrVal) { searchToggleBttn.click(); } } }); searchToggleBttn.addEventListener('click', function (e) { toggleSearchBttnStateText(); searchInput.focus(); }); })(); //# sourceMappingURL=app.js.map