diff --git a/wowchemy/.prettierignore b/wowchemy/.prettierignore new file mode 100644 index 00000000..7fb72472 --- /dev/null +++ b/wowchemy/.prettierignore @@ -0,0 +1 @@ +assets/js/_vendor/ diff --git a/wowchemy/.prettierrc.js b/wowchemy/.prettierrc.js new file mode 100644 index 00000000..446a6303 --- /dev/null +++ b/wowchemy/.prettierrc.js @@ -0,0 +1,9 @@ +'use strict'; + +module.exports = { + bracketSpacing: false, + singleQuote: true, + jsxBracketSameLine: true, + trailingComma: 'all', + printWidth: 120, +}; diff --git a/wowchemy/assets/js/algolia-search.js b/wowchemy/assets/js/algolia-search.js index d38b328d..db9afbd8 100644 --- a/wowchemy/assets/js/algolia-search.js +++ b/wowchemy/assets/js/algolia-search.js @@ -5,7 +5,7 @@ * Algolia based search algorithm. **************************************************/ -if ((typeof instantsearch === 'function') && $('#search-box').length) { +if (typeof instantsearch === 'function' && $('#search-box').length) { function getTemplate(templateName) { return document.querySelector(`#${templateName}-template`).innerHTML; } @@ -16,17 +16,17 @@ if ((typeof instantsearch === 'function') && $('#search-box').length) { indexName: algoliaConfig.indexName, routing: true, searchParameters: { - hitsPerPage: 10 + hitsPerPage: 10, }, searchFunction: function (helper) { - let searchResults = document.querySelector('#search-hits') + let searchResults = document.querySelector('#search-hits'); if (helper.state.query === '') { searchResults.style.display = 'none'; return; } helper.search(); searchResults.style.display = 'block'; - } + }, }; const search = instantsearch(options); @@ -38,8 +38,8 @@ if ((typeof instantsearch === 'function') && $('#search-box').length) { autofocus: false, reset: true, poweredBy: algoliaConfig.poweredBy, - placeholder: i18n.placeholder - }) + placeholder: i18n.placeholder, + }), ); // Initialize search results. @@ -49,12 +49,12 @@ if ((typeof instantsearch === 'function') && $('#search-box').length) { escapeHits: true, templates: { empty: '
' + i18n.no_results + '
', - item: getTemplate('search-hit-algolia') + item: getTemplate('search-hit-algolia'), }, cssClasses: { - showmoreButton: 'btn btn-outline-primary' - } - }) + showmoreButton: 'btn btn-outline-primary', + }, + }), ); // On render search results, localize the content type metadata. diff --git a/wowchemy/assets/js/mathjax-config.js b/wowchemy/assets/js/mathjax-config.js index 20ea4999..2f039fdc 100644 --- a/wowchemy/assets/js/mathjax-config.js +++ b/wowchemy/assets/js/mathjax-config.js @@ -5,12 +5,18 @@ // - The TeX.noUndefined.attributes option is not yet implemented (but may be in a future release) window.MathJax = { tex: { - inlineMath: [['$', '$'], ['\\(', '\\)']], - displayMath: [['$$', '$$'], ['\\[', '\\]']], + inlineMath: [ + ['$', '$'], + ['\\(', '\\)'], + ], + displayMath: [ + ['$$', '$$'], + ['\\[', '\\]'], + ], processEscapes: false, - packages: {'[+]': ['noerrors']} + packages: {'[+]': ['noerrors']}, }, loader: { - load: ['[tex]/noerrors'] - } + load: ['[tex]/noerrors'], + }, }; diff --git a/wowchemy/assets/js/wowchemy-animation.js b/wowchemy/assets/js/wowchemy-animation.js index 2aea1e47..3a665655 100644 --- a/wowchemy/assets/js/wowchemy-animation.js +++ b/wowchemy/assets/js/wowchemy-animation.js @@ -9,7 +9,7 @@ function fadeIn(element, duration = 600) { element.style.display = ''; element.style.opacity = '0'; let last = +new Date(); - let tick = function() { + let tick = function () { element.style.opacity = (+element.style.opacity + (new Date() - last) / duration).toString(); last = +new Date(); if (+element.style.opacity < 1) { @@ -19,6 +19,4 @@ function fadeIn(element, duration = 600) { tick(); } -export { - fadeIn, -}; +export {fadeIn}; diff --git a/wowchemy/assets/js/wowchemy-init.js b/wowchemy/assets/js/wowchemy-init.js index 28f7cee8..10a27ed2 100644 --- a/wowchemy/assets/js/wowchemy-init.js +++ b/wowchemy/assets/js/wowchemy-init.js @@ -12,7 +12,7 @@ import {wcDarkLightEnabled, wcIsSiteThemeDark} from '@params'; window.wc = { darkLightEnabled: wcDarkLightEnabled, isSiteThemeDark: wcIsSiteThemeDark, -} +}; // Initialize theme variation and set body theme class. initThemeVariation(); diff --git a/wowchemy/assets/js/wowchemy-search.js b/wowchemy/assets/js/wowchemy-search.js index 1428a1df..136229f6 100644 --- a/wowchemy/assets/js/wowchemy-search.js +++ b/wowchemy/assets/js/wowchemy-search.js @@ -6,35 +6,35 @@ **************************************************/ /* --------------------------------------------------------------------------- -* Configuration. -* --------------------------------------------------------------------------- */ + * Configuration. + * --------------------------------------------------------------------------- */ // Configure Fuse. let fuseOptions = { shouldSort: true, includeMatches: true, tokenize: true, - threshold: search_config.threshold, // Set to ~0.3 for parsing diacritics and CJK languages. + threshold: search_config.threshold, // Set to ~0.3 for parsing diacritics and CJK languages. location: 0, distance: 100, maxPatternLength: 32, - minMatchCharLength: search_config.minLength, // Set to 1 for parsing CJK languages. + minMatchCharLength: search_config.minLength, // Set to 1 for parsing CJK languages. keys: [ - {name:'title', weight:0.99}, /* 1.0 doesn't work o_O */ - {name:'summary', weight:0.6}, - {name:'authors', weight:0.5}, - {name:'content', weight:0.2}, - {name:'tags', weight:0.5}, - {name:'categories', weight:0.5} - ] + {name: 'title', weight: 0.99} /* 1.0 doesn't work o_O */, + {name: 'summary', weight: 0.6}, + {name: 'authors', weight: 0.5}, + {name: 'content', weight: 0.2}, + {name: 'tags', weight: 0.5}, + {name: 'categories', weight: 0.5}, + ], }; // Configure summary. let summaryLength = 60; /* --------------------------------------------------------------------------- -* Functions. -* --------------------------------------------------------------------------- */ + * Functions. + * --------------------------------------------------------------------------- */ // Get query from URI. function getSearchQuery(name) { @@ -44,29 +44,35 @@ function getSearchQuery(name) { // Set query in URI without reloading the page. function updateURL(url) { if (history.replaceState) { - window.history.replaceState({path:url}, '', url); + window.history.replaceState({path: url}, '', url); } } // Pre-process new search query. function initSearch(force, fuse) { - let query = $("#search-query").val(); + let query = $('#search-query').val(); // If query deleted, clear results. - if ( query.length < 1) { + if (query.length < 1) { $('#search-hits').empty(); $('#search-common-queries').show(); } // Check for timer event (enter key not pressed) and query less than minimum length required. - if (!force && query.length < fuseOptions.minMatchCharLength) - return; + if (!force && query.length < fuseOptions.minMatchCharLength) return; // Do search. $('#search-hits').empty(); $('#search-common-queries').hide(); searchAcademic(query, fuse); - let newURL = window.location.protocol + "//" + window.location.host + window.location.pathname + '?q=' + encodeURIComponent(query) + window.location.hash; + let newURL = + window.location.protocol + + '//' + + window.location.host + + window.location.pathname + + '?q=' + + encodeURIComponent(query) + + window.location.hash; updateURL(newURL); } @@ -85,34 +91,42 @@ function searchAcademic(query, fuse) { // Parse search results. function parseResults(query, results) { - $.each( results, function(key, value) { + $.each(results, function (key, value) { let content_key = value.item.section; - let content = ""; - let snippet = ""; + let content = ''; + let snippet = ''; let snippetHighlights = []; // Show abstract in results for content types where the abstract is often the primary content. - if (["publication", "event"].includes(content_key)) { + if (['publication', 'event'].includes(content_key)) { content = value.item.summary; } else { content = value.item.content; } - if ( fuseOptions.tokenize ) { + if (fuseOptions.tokenize) { snippetHighlights.push(query); } else { - $.each( value.matches, function(matchKey, matchValue) { - if (matchValue.key == "content") { - let start = (matchValue.indices[0][0]-summaryLength>0) ? matchValue.indices[0][0]-summaryLength : 0; - let end = (matchValue.indices[0][1]+summaryLength 0 ? matchValue.indices[0][0] - summaryLength : 0; + let end = + matchValue.indices[0][1] + summaryLength < content.length + ? matchValue.indices[0][1] + summaryLength + : content.length; snippet += content.substring(start, end); - snippetHighlights.push(matchValue.value.substring(matchValue.indices[0][0], matchValue.indices[0][1]-matchValue.indices[0][0]+1)); + snippetHighlights.push( + matchValue.value.substring( + matchValue.indices[0][0], + matchValue.indices[0][1] - matchValue.indices[0][0] + 1, + ), + ); } }); } if (snippet.length < 1) { - snippet += value.item.summary; // Alternative fallback: `content.substring(0, summaryLength*2);` + snippet += value.item.summary; // Alternative fallback: `content.substring(0, summaryLength*2);` } // Load template. @@ -129,16 +143,15 @@ function parseResults(query, results) { title: value.item.title, type: content_key, relpermalink: value.item.relpermalink, - snippet: snippet + snippet: snippet, }; let output = render(template, templateData); $('#search-hits').append(output); // Highlight search terms in result. - $.each( snippetHighlights, function(hlKey, hlValue){ - $("#summary-"+key).mark(hlValue); + $.each(snippetHighlights, function (hlKey, hlValue) { + $('#summary-' + key).mark(hlValue); }); - }); } @@ -146,7 +159,7 @@ function render(template, data) { // Replace placeholders with their values. let key, find, re; for (key in data) { - find = '\\{\\{\\s*' + key + '\\s*\\}\\}'; // Expect placeholder in the form `{{x}}`. + find = '\\{\\{\\s*' + key + '\\s*\\}\\}'; // Expect placeholder in the form `{{x}}`. re = new RegExp(find, 'g'); template = template.replace(re, data[key]); } @@ -154,21 +167,21 @@ function render(template, data) { } /* --------------------------------------------------------------------------- -* Initialize. -* --------------------------------------------------------------------------- */ + * Initialize. + * --------------------------------------------------------------------------- */ // If Academic's in-built search is enabled and Fuse loaded, then initialize it. if (typeof Fuse === 'function') { -// Wait for Fuse to initialize. + // Wait for Fuse to initialize. $.getJSON(search_config.indexURI, function (search_index) { let fuse = new Fuse(search_index, fuseOptions); // On page load, check for search query in URL. - if (query = getSearchQuery('q')) { - $("body").addClass('searching'); - $('.search-results').css({opacity: 0, visibility: "visible"}).animate({opacity: 1},200); - $("#search-query").val(query); - $("#search-query").focus(); + if ((query = getSearchQuery('q'))) { + $('body').addClass('searching'); + $('.search-results').css({opacity: 0, visibility: 'visible'}).animate({opacity: 1}, 200); + $('#search-query').val(query); + $('#search-query').focus(); initSearch(true, fuse); } @@ -178,9 +191,12 @@ if (typeof Fuse === 'function') { if (e.keyCode == 13) { initSearch(true, fuse); } else { - $(this).data('searchTimer', setTimeout(function () { - initSearch(false, fuse); - }, 250)); + $(this).data( + 'searchTimer', + setTimeout(function () { + initSearch(false, fuse); + }, 250), + ); } }); }); diff --git a/wowchemy/assets/js/wowchemy-theming.js b/wowchemy/assets/js/wowchemy-theming.js index a08608f4..b1be77ab 100644 --- a/wowchemy/assets/js/wowchemy-theming.js +++ b/wowchemy/assets/js/wowchemy-theming.js @@ -34,7 +34,7 @@ function initThemeVariation() { let isDarkTheme; let currentThemeMode = getThemeMode(); - console.debug(`User's theme variation: ${currentThemeMode}`) + console.debug(`User's theme variation: ${currentThemeMode}`); switch (currentThemeMode) { case 0: @@ -59,10 +59,10 @@ function initThemeVariation() { if (isDarkTheme && !body.classList.contains('dark')) { console.debug('Applying Wowchemy dark theme'); - document.body.classList.add("dark"); + document.body.classList.add('dark'); } else if (!isDarkTheme && body.classList.contains('dark')) { console.debug('Applying Wowchemy light theme'); - document.body.classList.remove("dark"); + document.body.classList.remove('dark'); } return { @@ -149,7 +149,7 @@ function renderThemeVariation(isDarkTheme, themeMode = 2, init = false) { // Is code highlighting enabled in site config? const codeHlLight = document.querySelector('link[title=hl-light]'); const codeHlDark = document.querySelector('link[title=hl-dark]'); - const codeHlEnabled = (codeHlLight !== null) || (codeHlDark !== null); + const codeHlEnabled = codeHlLight !== null || codeHlDark !== null; const diagramEnabled = document.querySelector('script[title=mermaid]') !== null; // Update active theme mode in navbar theme selector. @@ -159,7 +159,10 @@ function renderThemeVariation(isDarkTheme, themeMode = 2, init = false) { if (!init) { // If request to render light when light variation already rendered, return. // If request to render dark when dark variation already rendered, return. - if ((isDarkTheme === false && !body.classList.contains('dark')) || (isDarkTheme === true && body.classList.contains('dark'))) { + if ( + (isDarkTheme === false && !body.classList.contains('dark')) || + (isDarkTheme === true && body.classList.contains('dark')) + ) { return; } } @@ -176,7 +179,7 @@ function renderThemeVariation(isDarkTheme, themeMode = 2, init = false) { if (codeHlLight) { codeHlLight.disabled = false; } - if (codeHlDark){ + if (codeHlDark) { codeHlDark.disabled = true; } } @@ -196,13 +199,13 @@ function renderThemeVariation(isDarkTheme, themeMode = 2, init = false) { Object.assign(document.body.style, {opacity: 0, visibility: 'visible'}); fadeIn(document.body, 600); } - body.classList.add("dark"); + body.classList.add('dark'); if (codeHlEnabled) { console.debug('Setting HLJS theme to dark'); if (codeHlLight) { codeHlLight.disabled = true; } - if (codeHlDark){ + if (codeHlDark) { codeHlDark.disabled = false; } } diff --git a/wowchemy/assets/js/wowchemy-utils.js b/wowchemy/assets/js/wowchemy-utils.js index 23f1a7fc..c38d9f9d 100644 --- a/wowchemy/assets/js/wowchemy-utils.js +++ b/wowchemy/assets/js/wowchemy-utils.js @@ -23,6 +23,4 @@ function fixMermaid() { } } -export { - fixMermaid, -}; +export {fixMermaid}; diff --git a/wowchemy/assets/js/wowchemy.js b/wowchemy/assets/js/wowchemy.js index a9a85329..d59fd72e 100644 --- a/wowchemy/assets/js/wowchemy.js +++ b/wowchemy/assets/js/wowchemy.js @@ -16,9 +16,9 @@ import { onMediaQueryListEvent, } from './wowchemy-theming'; -const searchEnabled = (typeof search_config !== 'undefined'); +const searchEnabled = typeof search_config !== 'undefined'; -console.debug(`Environment: ${hugoEnvironment}`) +console.debug(`Environment: ${hugoEnvironment}`); /* --------------------------------------------------------------------------- * Responsive scrolling for URL hashes. @@ -41,20 +41,25 @@ function getNavBarHeight() { function scrollToAnchor(target, duration = 600) { // If `target` is undefined or HashChangeEvent object, set it to window's hash. // Decode the hash as browsers can encode non-ASCII characters (e.g. Chinese symbols). - target = (typeof target === 'undefined' || typeof target === 'object') ? decodeURIComponent(window.location.hash) : target; + target = + typeof target === 'undefined' || typeof target === 'object' ? decodeURIComponent(window.location.hash) : target; // If target element exists, scroll to it taking into account fixed navigation bar offset. if ($(target).length) { // Escape special chars from IDs, such as colons found in Markdown footnote links. - target = '#' + $.escapeSelector(target.substring(1)); // Previously, `target = target.replace(/:/g, '\\:');` + target = '#' + $.escapeSelector(target.substring(1)); // Previously, `target = target.replace(/:/g, '\\:');` - let elementOffset = Math.ceil($(target).offset().top - getNavBarHeight()); // Round up to highlight right ID! + let elementOffset = Math.ceil($(target).offset().top - getNavBarHeight()); // Round up to highlight right ID! $('body').addClass('scrolling'); - $('html, body').animate({ - scrollTop: elementOffset - }, duration, function () { - $('body').removeClass('scrolling'); - }); + $('html, body').animate( + { + scrollTop: elementOffset, + }, + duration, + function () { + $('body').removeClass('scrolling'); + }, + ); } else { console.debug('Cannot scroll to target `#' + target + '`. ID not found!'); } @@ -73,13 +78,14 @@ function fixScrollspy() { function removeQueryParamsFromUrl() { if (window.history.replaceState) { - let urlWithoutSearchParams = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.hash; + let urlWithoutSearchParams = + window.location.protocol + '//' + window.location.host + window.location.pathname + window.location.hash; window.history.replaceState({path: urlWithoutSearchParams}, '', urlWithoutSearchParams); } } // Check for hash change event and fix responsive offset for hash links (e.g. Markdown footnotes). -window.addEventListener("hashchange", scrollToAnchor); +window.addEventListener('hashchange', scrollToAnchor); /* --------------------------------------------------------------------------- * Add smooth scrolling to all links inside the main navbar. @@ -90,22 +96,25 @@ $('#navbar-main li.nav-item a.nav-link, .js-scroll').on('click', function (event let hash = this.hash; // If we are on a widget page and the navbar link is to a section on the same page. - if (this.pathname === window.location.pathname && hash && $(hash).length && ($(".js-widget-page").length > 0)) { + if (this.pathname === window.location.pathname && hash && $(hash).length && $('.js-widget-page').length > 0) { // Prevent default click behavior. event.preventDefault(); // Use jQuery's animate() method for smooth page scrolling. // The numerical parameter specifies the time (ms) taken to scroll to the specified hash. - let elementOffset = Math.ceil($(hash).offset().top - getNavBarHeight()); // Round up to highlight right ID! + let elementOffset = Math.ceil($(hash).offset().top - getNavBarHeight()); // Round up to highlight right ID! // Uncomment to debug. // let scrollTop = $(window).scrollTop(); // let scrollDelta = (elementOffset - scrollTop); // console.debug('Scroll Delta: ' + scrollDelta); - $('html, body').animate({ - scrollTop: elementOffset - }, 800); + $('html, body').animate( + { + scrollTop: elementOffset, + }, + 800, + ); } }); @@ -145,21 +154,23 @@ if ($grid_pubs.length) { percentPosition: true, masonry: { // Use Bootstrap compatible grid layout. - columnWidth: '.grid-sizer' + columnWidth: '.grid-sizer', }, filter: function () { let $this = $(this); let searchResults = searchRegex ? $this.text().match(searchRegex) : true; let filterResults = filterValues ? $this.is(filterValues) : true; return searchResults && filterResults; - } + }, }); // Filter by search term. - let $quickSearch = $('.filter-search').keyup(debounce(function () { - searchRegex = new RegExp($quickSearch.val(), 'gi'); - $grid_pubs.isotope(); - })); + let $quickSearch = $('.filter-search').keyup( + debounce(function () { + searchRegex = new RegExp($quickSearch.val(), 'gi'); + $grid_pubs.isotope(); + }), + ); $('.pub-filters').on('change', function () { let $this = $(this); @@ -177,7 +188,7 @@ if ($grid_pubs.length) { $grid_pubs.isotope(); // If filtering by publication type, update the URL hash to enable direct linking to results. - if (filterGroup === "pubtype") { + if (filterGroup === 'pubtype') { // Set hash URL to current filter. let url = $(this).val(); if (url.substr(0, 9) === '.pubtype-') { @@ -218,8 +229,7 @@ function concatValues(obj) { // Filter publications according to hash in URL. function filter_publications() { // Check for Isotope publication layout. - if (!$grid_pubs.length) - return + if (!$grid_pubs.length) return; let urlHash = window.location.hash.replace('#', ''); let filterValue = '*'; @@ -242,8 +252,8 @@ function filter_publications() { } /* --------------------------------------------------------------------------- -* Google Maps or OpenStreetMap via Leaflet. -* --------------------------------------------------------------------------- */ + * Google Maps or OpenStreetMap via Leaflet. + * --------------------------------------------------------------------------- */ function initMap() { if ($('#map').length) { @@ -263,11 +273,11 @@ function initMap() { zoomControl: true, zoomControlOpt: { style: 'SMALL', - position: 'TOP_LEFT' + position: 'TOP_LEFT', }, streetViewControl: false, mapTypeControl: false, - gestureHandling: "cooperative", + gestureHandling: 'cooperative', }); map.addMarker({ @@ -275,30 +285,36 @@ function initMap() { lng: lng, click: function (e) { let url = 'https://www.google.com/maps/place/' + encodeURIComponent(address) + '/@' + lat + ',' + lng + '/'; - window.open(url, '_blank') + window.open(url, '_blank'); }, - title: address - }) + title: address, + }); } else { let map = new L.map('map').setView([lat, lng], zoom); if (map_provider == 3 && api_key.length) { L.tileLayer('https://api.mapbox.com/styles/v1/{id}/tiles/{z}/{x}/{y}?access_token={accessToken}', { - attribution: 'Map data © OpenStreetMap contributors, CC-BY-SA, Imagery © Mapbox', + attribution: + 'Map data © OpenStreetMap contributors, CC-BY-SA, Imagery © Mapbox', tileSize: 512, maxZoom: 18, zoomOffset: -1, id: 'mapbox/streets-v11', - accessToken: api_key + accessToken: api_key, }).addTo(map); } else { L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { maxZoom: 19, - attribution: '© OpenStreetMap' + attribution: '© OpenStreetMap', }).addTo(map); } let marker = L.marker([lat, lng]).addTo(map); let url = lat + ',' + lng + '#map=' + zoom + '/' + lat + '/' + lng + '&layers=N'; - marker.bindPopup(address + '

Routing via OpenStreetMap

'); + marker.bindPopup( + address + + '

Routing via OpenStreetMap

', + ); } } } @@ -309,19 +325,21 @@ function initMap() { function printLatestRelease(selector, repo) { if (hugoEnvironment === 'production') { - $.getJSON('https://api.github.com/repos/' + repo + '/tags').done(function (json) { - let release = json[0]; - $(selector).append(' ' + release.name); - }).fail(function (jqxhr, textStatus, error) { - let err = textStatus + ", " + error; - console.log("Request Failed: " + err); - }); + $.getJSON('https://api.github.com/repos/' + repo + '/tags') + .done(function (json) { + let release = json[0]; + $(selector).append(' ' + release.name); + }) + .fail(function (jqxhr, textStatus, error) { + let err = textStatus + ', ' + error; + console.log('Request Failed: ' + err); + }); } } /* --------------------------------------------------------------------------- -* Toggle search dialog. -* --------------------------------------------------------------------------- */ + * Toggle search dialog. + * --------------------------------------------------------------------------- */ function toggleSearchDialog() { if ($('body').hasClass('searching')) { @@ -339,8 +357,8 @@ function toggleSearchDialog() { if (!$('#fancybox-style-noscroll').length && document.body.scrollHeight > window.innerHeight) { $('head').append( '' + (window.innerWidth - document.documentElement.clientWidth) + + 'px;}', ); $('body').addClass('compensate-for-scrollbar'); } @@ -353,8 +371,8 @@ function toggleSearchDialog() { } /* --------------------------------------------------------------------------- -* Normalize Bootstrap Carousel Slide Heights. -* --------------------------------------------------------------------------- */ + * Normalize Bootstrap Carousel Slide Heights. + * --------------------------------------------------------------------------- */ function normalizeCarouselSlideHeights() { $('.carousel').each(function () { @@ -363,16 +381,21 @@ function normalizeCarouselSlideHeights() { // Reset all slide heights. items.css('min-height', 0); // Normalize all slide heights. - let maxHeight = Math.max.apply(null, items.map(function () { - return $(this).outerHeight() - }).get()); + let maxHeight = Math.max.apply( + null, + items + .map(function () { + return $(this).outerHeight(); + }) + .get(), + ); items.css('min-height', maxHeight + 'px'); - }) + }); } /* --------------------------------------------------------------------------- -* Fix Hugo's Goldmark output and Mermaid code blocks. -* --------------------------------------------------------------------------- */ + * Fix Hugo's Goldmark output and Mermaid code blocks. + * --------------------------------------------------------------------------- */ /** * Fix Hugo's Goldmark output. @@ -453,30 +476,32 @@ $(window).on('load', function () { itemSelector: '.isotope-item', layoutMode: layout, masonry: { - gutter: 20 + gutter: 20, }, - filter: filterText + filter: filterText, }); // Filter Isotope items when a toolbar filter button is clicked. let isoFilterButtons = isoSection.querySelectorAll('.project-filters a'); - isoFilterButtons.forEach(button => button.addEventListener('click', (e) => { - e.preventDefault(); - let selector = button.getAttribute('data-filter'); + isoFilterButtons.forEach((button) => + button.addEventListener('click', (e) => { + e.preventDefault(); + let selector = button.getAttribute('data-filter'); - // Apply filter - console.debug(`Updating Isotope filter to ${selector}`); - iso.arrange({filter: selector}); + // Apply filter + console.debug(`Updating Isotope filter to ${selector}`); + iso.arrange({filter: selector}); - // Update active toolbar filter button - button.classList.remove('active'); - button.classList.add('active'); - let buttonSiblings = getSiblings(button); - buttonSiblings.forEach(buttonSibling => { - buttonSibling.classList.remove('active'); - buttonSibling.classList.remove('all'); - }); - })); + // Update active toolbar filter button + button.classList.remove('active'); + button.classList.add('active'); + let buttonSiblings = getSiblings(button); + buttonSiblings.forEach((buttonSibling) => { + buttonSibling.classList.remove('active'); + buttonSibling.classList.remove('all'); + }); + }), + ); // Check if all Isotope instances have loaded. incrementIsotopeCounter(); @@ -513,8 +538,8 @@ $(window).on('load', function () { let modal = $('#modal'); modal.find('.modal-body code').load(filename, function (response, status, xhr) { if (status == 'error') { - let msg = "Error: "; - $('#modal-error').html(msg + xhr.status + " " + xhr.statusText); + let msg = 'Error: '; + $('#modal-error').html(msg + xhr.status + ' ' + xhr.statusText); } else { $('.js-download-cite').attr('href', filename); } @@ -551,7 +576,7 @@ $(window).on('load', function () { // Parse Wowchemy keyboard shortcuts. document.addEventListener('keyup', (event) => { - if (event.code === "Escape") { + if (event.code === 'Escape') { const body = document.body; if (body.classList.contains('searching')) { // Close search dialog. @@ -559,13 +584,13 @@ $(window).on('load', function () { } } // Use `key` to check for slash. Otherwise, with `code` we need to check for modifiers. - if (event.key === "/" ) { - let focusedElement = ( - document.hasFocus() && - document.activeElement !== document.body && - document.activeElement !== document.documentElement && - document.activeElement - ) || null; + if (event.key === '/') { + let focusedElement = + (document.hasFocus() && + document.activeElement !== document.body && + document.activeElement !== document.documentElement && + document.activeElement) || + null; let isInputFocused = focusedElement instanceof HTMLInputElement || focusedElement instanceof HTMLTextAreaElement; if (searchEnabled && !isInputFocused) { // Open search dialog. @@ -597,15 +622,15 @@ let linkLight = document.querySelector('.js-set-theme-light'); let linkDark = document.querySelector('.js-set-theme-dark'); let linkAuto = document.querySelector('.js-set-theme-auto'); if (linkLight && linkDark && linkAuto) { - linkLight.addEventListener('click', event => { + linkLight.addEventListener('click', (event) => { event.preventDefault(); changeThemeModeClick(0); }); - linkDark.addEventListener('click', event => { + linkDark.addEventListener('click', (event) => { event.preventDefault(); changeThemeModeClick(1); }); - linkAuto.addEventListener('click', event => { + linkAuto.addEventListener('click', (event) => { event.preventDefault(); changeThemeModeClick(2); }); @@ -615,7 +640,7 @@ if (linkLight && linkDark && linkAuto) { // Live update of day/night mode on system preferences update (no refresh required). // Note: since we listen only for *dark* events, we won't detect other scheme changes such as light to no-preference. const darkModeMediaQuery = window.matchMedia('(prefers-color-scheme: dark)'); -darkModeMediaQuery.addEventListener("change", (event) => { +darkModeMediaQuery.addEventListener('change', (event) => { onMediaQueryListEvent(event); }); diff --git a/wowchemy/package.json b/wowchemy/package.json index ab8cf082..5561a33a 100644 --- a/wowchemy/package.json +++ b/wowchemy/package.json @@ -7,7 +7,9 @@ "bootstrap": "^4.4.1", "instant.page": "^5.1.0" }, - "devDependencies": {}, + "devDependencies": { + "prettier": "2.2.1" + }, "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, diff --git a/wowchemy/yarn.lock b/wowchemy/yarn.lock index 88978c84..5d55df90 100644 --- a/wowchemy/yarn.lock +++ b/wowchemy/yarn.lock @@ -11,3 +11,8 @@ instant.page@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/instant.page/-/instant.page-5.1.0.tgz#ee0b5c341eda6c16d63def214bb6126701d7154d" integrity sha512-7tz0vkrbj6rN08+C56UDTs1Z71ATPNjMv2eCFaYnIIn3jlkEF6HZCaUtsigjaN2hVaYiuu06vu1usDMnu+OEFg== + +prettier@2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.2.1.tgz#795a1a78dd52f073da0cd42b21f9c91381923ff5" + integrity sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q==