From bb56e8cffa4489bedcef72d4f4308cf53a180458 Mon Sep 17 00:00:00 2001 From: Erik Golinelli Date: Sat, 28 Jan 2023 18:38:01 +0100 Subject: [PATCH 001/264] Moves assets into root js third party removed updated scrollControl.js in order to work with rAF styles springclean --- assets/dist/img/elements/loader.svg | 1 - assets/dist/scripts/scripts | 6894 ----------------- assets/dist/scripts/scripts.asset.php | 1 - assets/dist/scripts/scripts.js | 157 - assets/dist/scripts/scripts.js.map | 1 - assets/dist/styles/admin | 67 - assets/dist/styles/admin.css | 64 - assets/dist/styles/admin.css.map | 1 - assets/dist/styles/atf | 67 - assets/dist/styles/atf.css | 1291 --- assets/dist/styles/atf.css.map | 1 - assets/dist/styles/editor | 67 - assets/dist/styles/editor.css | 656 -- assets/dist/styles/editor.css.map | 1 - assets/dist/styles/late-style | 67 - assets/dist/styles/late-style.css | 1706 ---- assets/dist/styles/late-style.css.map | 1 - assets/dist/styles/main | 67 - assets/dist/styles/main.css | 4076 ---------- assets/dist/styles/main.css.map | 1 - assets/dist/styles/woo | 67 - assets/dist/styles/woo.css | 345 - assets/dist/styles/woo.css.map | 1 - assets/src/scripts/scripts.js | 8 - assets/src/scripts/user/index.js | 104 - assets/src/scripts/user/masonry.js | 31 - assets/src/scripts/user/menu.js | 15 - assets/src/scripts/user/scrollControl.js | 93 - assets/src/scripts/user/woo.js | 38 - assets/src/scripts/vendor/fancybox.js | 5632 -------------- assets/src/scripts/vendor/slick.js | 3011 ------- assets/src/styles/components/content.scss | 216 - assets/src/styles/components/header.scss | 347 - assets/src/styles/editor.scss | 40 - assets/src/styles/late-style.js | 1 - assets/src/styles/late-style.scss | 51 - assets/src/styles/main/typography.scss | 93 - assets/src/styles/vendor/fancybox.scss | 898 --- assets/src/styles/vendor/masonry.scss | 118 - assets/src/styles/vendor/slick.scss | 244 - assets/src/styles/woo/woo-base.scss | 14 - {assets/src => src}/img/elements/loader.svg | 0 src/scripts/scripts.js | 3 + src/scripts/user/index.js | 0 src/scripts/user/menu.js | 0 src/scripts/user/scrollControl.js | 59 + {assets/src => src}/styles/admin.js | 0 {assets/src => src}/styles/admin.scss | 3 - {assets/src => src}/styles/atf.js | 0 {assets/src => src}/styles/atf.scss | 0 .../styles/components/accessibility.scss | 6 +- .../styles/components/animations.scss | 4 +- .../src => src}/styles/components/blocks.scss | 226 +- .../styles/components/comments.scss | 64 +- .../styles/components/content-header.scss | 18 +- src/styles/components/content.scss | 127 + .../src => src}/styles/components/extras.scss | 116 +- .../src => src}/styles/components/footer.scss | 44 +- .../styles/components/hamburger.scss | 0 src/styles/components/header.scss | 19 + .../styles/components/navigation.scss | 18 +- .../styles/components/search-form.scss | 6 +- .../styles/components/sidebar.scss | 12 +- {assets/src => src}/styles/editor.js | 0 src/styles/editor.scss | 14 + {assets/src => src}/styles/main.js | 0 {assets/src => src}/styles/main.scss | 11 +- {assets/src => src}/styles/main/base.scss | 0 {assets/src => src}/styles/main/buttons.scss | 6 +- {assets/src => src}/styles/main/colors.scss | 0 {assets/src => src}/styles/main/fonts.scss | 0 {assets/src => src}/styles/main/helpers.scss | 0 {assets/src => src}/styles/main/images.scss | 22 +- {assets/src => src}/styles/main/inputs.scss | 14 +- .../src => src}/styles/main/scrollbar.scss | 0 {assets/src => src}/styles/main/table.scss | 2 +- .../styles/main/typography-extras.scss | 30 +- src/styles/main/typography.scss | 87 + {assets/src => src}/styles/pages/archive.scss | 24 +- {assets/src => src}/styles/pages/author.scss | 18 +- .../src => src}/styles/pages/homepage.scss | 30 +- {assets/src => src}/styles/pages/page.scss | 0 {assets/src => src}/styles/pages/single.scss | 0 {assets/src => src}/styles/utils/icons.scss | 0 .../styles/utils/media-queries.scss | 0 .../src => src}/styles/utils/normalize.scss | 0 {assets/src => src}/styles/utils/print.scss | 0 {assets/src => src}/styles/utils/vars.scss | 0 {assets/src => src}/styles/woo.js | 0 {assets/src => src}/styles/woo.scss | 0 src/styles/woo/woo-base.scss | 14 + .../src => src}/styles/woo/woo-common.scss | 16 +- {assets/src => src}/styles/woo/woo-pages.scss | 38 +- .../src => src}/styles/woo/woo-sidebar.scss | 14 +- 94 files changed, 562 insertions(+), 27057 deletions(-) delete mode 100644 assets/dist/img/elements/loader.svg delete mode 100644 assets/dist/scripts/scripts delete mode 100644 assets/dist/scripts/scripts.asset.php delete mode 100644 assets/dist/scripts/scripts.js delete mode 100644 assets/dist/scripts/scripts.js.map delete mode 100644 assets/dist/styles/admin delete mode 100644 assets/dist/styles/admin.css delete mode 100644 assets/dist/styles/admin.css.map delete mode 100644 assets/dist/styles/atf delete mode 100644 assets/dist/styles/atf.css delete mode 100644 assets/dist/styles/atf.css.map delete mode 100644 assets/dist/styles/editor delete mode 100644 assets/dist/styles/editor.css delete mode 100644 assets/dist/styles/editor.css.map delete mode 100644 assets/dist/styles/late-style delete mode 100644 assets/dist/styles/late-style.css delete mode 100644 assets/dist/styles/late-style.css.map delete mode 100644 assets/dist/styles/main delete mode 100644 assets/dist/styles/main.css delete mode 100644 assets/dist/styles/main.css.map delete mode 100644 assets/dist/styles/woo delete mode 100644 assets/dist/styles/woo.css delete mode 100644 assets/dist/styles/woo.css.map delete mode 100644 assets/src/scripts/scripts.js delete mode 100644 assets/src/scripts/user/index.js delete mode 100644 assets/src/scripts/user/masonry.js delete mode 100644 assets/src/scripts/user/menu.js delete mode 100644 assets/src/scripts/user/scrollControl.js delete mode 100644 assets/src/scripts/user/woo.js delete mode 100644 assets/src/scripts/vendor/fancybox.js delete mode 100644 assets/src/scripts/vendor/slick.js delete mode 100644 assets/src/styles/components/content.scss delete mode 100644 assets/src/styles/components/header.scss delete mode 100644 assets/src/styles/editor.scss delete mode 100644 assets/src/styles/late-style.js delete mode 100644 assets/src/styles/late-style.scss delete mode 100644 assets/src/styles/main/typography.scss delete mode 100644 assets/src/styles/vendor/fancybox.scss delete mode 100644 assets/src/styles/vendor/masonry.scss delete mode 100644 assets/src/styles/vendor/slick.scss delete mode 100644 assets/src/styles/woo/woo-base.scss rename {assets/src => src}/img/elements/loader.svg (100%) create mode 100644 src/scripts/scripts.js create mode 100644 src/scripts/user/index.js create mode 100644 src/scripts/user/menu.js create mode 100644 src/scripts/user/scrollControl.js rename {assets/src => src}/styles/admin.js (100%) rename {assets/src => src}/styles/admin.scss (93%) rename {assets/src => src}/styles/atf.js (100%) rename {assets/src => src}/styles/atf.scss (100%) rename {assets/src => src}/styles/components/accessibility.scss (86%) rename {assets/src => src}/styles/components/animations.scss (90%) rename {assets/src => src}/styles/components/blocks.scss (52%) rename {assets/src => src}/styles/components/comments.scss (62%) rename {assets/src => src}/styles/components/content-header.scss (74%) create mode 100644 src/styles/components/content.scss rename {assets/src => src}/styles/components/extras.scss (57%) rename {assets/src => src}/styles/components/footer.scss (62%) rename {assets/src => src}/styles/components/hamburger.scss (100%) create mode 100644 src/styles/components/header.scss rename {assets/src => src}/styles/components/navigation.scss (87%) rename {assets/src => src}/styles/components/search-form.scss (83%) rename {assets/src => src}/styles/components/sidebar.scss (66%) rename {assets/src => src}/styles/editor.js (100%) create mode 100644 src/styles/editor.scss rename {assets/src => src}/styles/main.js (100%) rename {assets/src => src}/styles/main.scss (90%) rename {assets/src => src}/styles/main/base.scss (100%) rename {assets/src => src}/styles/main/buttons.scss (90%) rename {assets/src => src}/styles/main/colors.scss (100%) rename {assets/src => src}/styles/main/fonts.scss (100%) rename {assets/src => src}/styles/main/helpers.scss (100%) rename {assets/src => src}/styles/main/images.scss (50%) rename {assets/src => src}/styles/main/inputs.scss (75%) rename {assets/src => src}/styles/main/scrollbar.scss (100%) rename {assets/src => src}/styles/main/table.scss (86%) rename {assets/src => src}/styles/main/typography-extras.scss (79%) create mode 100644 src/styles/main/typography.scss rename {assets/src => src}/styles/pages/archive.scss (71%) rename {assets/src => src}/styles/pages/author.scss (54%) rename {assets/src => src}/styles/pages/homepage.scss (75%) rename {assets/src => src}/styles/pages/page.scss (100%) rename {assets/src => src}/styles/pages/single.scss (100%) rename {assets/src => src}/styles/utils/icons.scss (100%) rename {assets/src => src}/styles/utils/media-queries.scss (100%) rename {assets/src => src}/styles/utils/normalize.scss (100%) rename {assets/src => src}/styles/utils/print.scss (100%) rename {assets/src => src}/styles/utils/vars.scss (100%) rename {assets/src => src}/styles/woo.js (100%) rename {assets/src => src}/styles/woo.scss (100%) create mode 100644 src/styles/woo/woo-base.scss rename {assets/src => src}/styles/woo/woo-common.scss (67%) rename {assets/src => src}/styles/woo/woo-pages.scss (77%) rename {assets/src => src}/styles/woo/woo-sidebar.scss (80%) diff --git a/assets/dist/img/elements/loader.svg b/assets/dist/img/elements/loader.svg deleted file mode 100644 index da15174c..00000000 --- a/assets/dist/img/elements/loader.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/assets/dist/scripts/scripts b/assets/dist/scripts/scripts deleted file mode 100644 index c2a380fe..00000000 --- a/assets/dist/scripts/scripts +++ /dev/null @@ -1,6894 +0,0 @@ -/******/ (function() { // webpackBootstrap -/******/ var __webpack_modules__ = ({ - -/***/ "./assets/src/scripts/user/index.js": -/*!******************************************!*\ - !*** ./assets/src/scripts/user/index.js ***! - \******************************************/ -/***/ (function() { - -jQuery(document).ready(function ($) { - // a slick slider - var sliders = document.getElementsByClassName("slider"); - if (sliders.length) { - for (var i = 0; i < sliders.length; i++) { - if (sliders[i].classList.contains('slider-single')) { - $(sliders[i]).children('ul').slick({ - infinite: true, - slidesToShow: 1, - autoplay: true - }); - } else if (sliders[i].classList.contains('slider-multi')) { - $(sliders[i]).children('ul').slick({ - lazyLoad: 'ondemand', - dots: true, - infinite: true, - slidesToShow: 3, - autoplay: true, - centerMode: true, - responsive: [{ - breakpoint: 600, - settings: { - slidesToShow: 2, - slidesToScroll: 1, - infinite: true, - dots: false - } - }, { - breakpoint: 400, - settings: { - slidesToShow: 1, - slidesToScroll: 1, - infinite: true, - dots: false - } - }] - }); - } - } - } - if ($('.lightbox')) { - $('.lightbox a').fancybox({ - caption: function caption() { - var altcaption = $(this).children('img').attr('alt').length ? $(this).children('img').attr('alt') : ''; - var figcaption = $(this).next('figcaption').length > 0 ? $(this).next('figcaption').text() : ''; - var imgcaption = figcaption !== '' ? figcaption : altcaption !== '' ? altcaption : ''; - return imgcaption; - } - }); - } - if ($('.lightbox-gallery')) { - $('.lightbox-gallery a').click(function () { - var galleryImages, index; - if ($(this).closest('.wp-block-gallery').hasClass('slider')) { - galleryImages = $(this).closest('.wp-block-gallery').find('.slick-slide:not(".slick-cloned") a'); - index = $(this).closest('.slick-slide').attr('data-slick-index'); - } else { - galleryImages = $(this).closest('.wp-block-gallery').find('a'); - index = $(this).closest('li').index(); - } - var gallery = []; - galleryImages.each(function (index, galleryItem) { - var altcaption = $(this).children('img').attr('alt').length ? $(this).children('img').attr('alt') : ''; - var figcaption = $(this).next('figcaption').length > 0 ? $(this).next('figcaption').text() : ''; - var imgcaption = figcaption !== '' ? figcaption : altcaption !== '' ? altcaption : ''; - gallery.push({ - src: galleryItem.href, - opts: { - caption: imgcaption + '
of ' - } - }); - }); - $.fancybox.open(gallery, { - loop: false, - index: index - }); - return false; - }); - } -}); - -/***/ }), - -/***/ "./assets/src/scripts/user/masonry.js": -/*!********************************************!*\ - !*** ./assets/src/scripts/user/masonry.js ***! - \********************************************/ -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var infinite_scroll_dist_infinite_scroll_pkgd_min__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! infinite-scroll/dist/infinite-scroll.pkgd.min */ "./node_modules/infinite-scroll/dist/infinite-scroll.pkgd.min.js"); -/* harmony import */ var infinite_scroll_dist_infinite_scroll_pkgd_min__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(infinite_scroll_dist_infinite_scroll_pkgd_min__WEBPACK_IMPORTED_MODULE_0__); - -jQuery(document).ready(function ($) { - var $container = document.getElementById('masonry-wrapper'); - if ($container) { - var msnry = new Masonry($container, { - // Masonry options... - itemSelector: '.grid__item', - // select none at first - columnWidth: '.grid__col-sizer', - gutter: '.grid__gutter-sizer', - transitionDuration: '0.8s' - }); - - // init Infinite Scroll - var infScroll = new (infinite_scroll_dist_infinite_scroll_pkgd_min__WEBPACK_IMPORTED_MODULE_0___default())($container, { - // Infinite Scroll options... - path: '.navigation a', - // selector for the NEXT link (to page 2) - append: '.grid__item', - // selector for all items you'll retrieve - outlayer: msnry, - history: false, - status: '.page-load-status' - }); - imagesLoaded($container, function (instance) { - msnry.layout(); - }); - } -}); - -/***/ }), - -/***/ "./assets/src/scripts/user/menu.js": -/*!*****************************************!*\ - !*** ./assets/src/scripts/user/menu.js ***! - \*****************************************/ -/***/ (function() { - -// Change 'hover' to 'click' if you want to -jQuery(document).ready(function ($) { - $('nav li > .sub-menu').parent().hover(function () { - var submenu = $(this).children('.sub-menu'); - if (!$(submenu).hasClass("active")) { - $(submenu).addClass("active"); - } else { - $(submenu).removeClass("active"); - } - }); -}); - -/***/ }), - -/***/ "./assets/src/scripts/user/scrollControl.js": -/*!**************************************************!*\ - !*** ./assets/src/scripts/user/scrollControl.js ***! - \**************************************************/ -/***/ (function() { - -"use strict"; - - -var parallaxDefaultSpeed = 0.3; -var shiftView = 200; // make the elements triggered before fully in the viewport - -var vScrollTop = 0; -var lastScroll = 0; -var viewHeight = Math.max(document.documentElement.clientHeight, window.innerHeight); -var headerHeight = document.getElementById('masthead').clientHeight; -var scrollOffset = headerHeight; // the screen height where the header resize was triggered -var headerDistanceFromTop = document.getElementById("masthead").offsetTop; -var isInViewport = function isInViewport(elem) { - var rect = elem.getBoundingClientRect(); - return !(rect.bottom < 0 || rect.top - viewHeight >= 0); -}; -var isFullyVisible = function isFullyVisible(elem) { - var rect = elem.getBoundingClientRect(); - var rectBottom; - rect.bottom - rect.top > viewHeight ? rectBottom = rect.top + viewHeight : rectBottom = rect.bottom; - return rect.top + shiftView >= 0 && rectBottom - shiftView <= document.documentElement.clientHeight; -}; -function VisibleItemsTrigger(top) { - var animated = document.getElementsByClassName("interactive"); - var arr = [].slice.call(animated); - arr.forEach(function (entry) { - if (isFullyVisible(entry)) { - entry.classList.add('visible'); - entry.classList.add('already-see'); - } else { - entry.classList.remove('visible'); - } - if (isInViewport(entry)) { - // Parallax images - // check if interactive box have a img child and get the distance from top - if (entry.classList.contains('parallax')) { - var firstTop = window.pageYOffset + entry.getBoundingClientRect().top - headerDistanceFromTop; - var moveTopItem = -(firstTop - top) * parallaxDefaultSpeed; - entry.getElementsByTagName('img')[0].style.transform = "translateY(" + moveTopItem + "px)"; - } - } - }); -} -function throttle(fn, wait) { - var time = Date.now(); - return function () { - if (time + wait - Date.now() < 0) { - fn(); - time = Date.now(); - } - }; -} -function scrollCallback() { - vScrollTop = window.pageYOffset; - headerHeight = document.getElementById('masthead').clientHeight; - if (lastScroll > vScrollTop) { - document.body.classList.remove('scrolled'); - } else { - vScrollTop > scrollOffset ? document.body.classList.add('scrolled') : document.body.classList.remove('scrolled'); - } - if (vScrollTop < 5) { - document.body.classList.add('top'); - } else { - document.body.classList.remove('top'); - } - VisibleItemsTrigger(vScrollTop); - lastScroll = vScrollTop; -} -document.addEventListener("DOMContentLoaded", function (event) { - scrollCallback(); - window.addEventListener('scroll', throttle(scrollCallback, 5), true); // 1 time every 5ms - window.addEventListener('resize', scrollCallback, true); -}); - -/***/ }), - -/***/ "./assets/src/scripts/user/woo.js": -/*!****************************************!*\ - !*** ./assets/src/scripts/user/woo.js ***! - \****************************************/ -/***/ (function() { - -// WooCommerce category accordion -jQuery(document).ready(function ($) { - if ($('.sidebar ul.product-categories').length > 0) { - $('.sidebar .product-categories li.cat-parent > a').prepend('arrow_forward'); - $('.sidebar .product-categories .children').hide(); - $('.sidebar .product-categories li.current-cat-parent > .children, .product-categories li.current-cat > .children').show(); - $('.sidebar .product-categories li.current-cat, .product-categories li.current-cat-parent').addClass('active'); - $(function () { - $('.sidebar .product-categories').find('a').on('click', function (e) { - var catItem = $(this).parent('.cat-item'); - if (!catItem.hasClass('active')) { - catItem.addClass('active'); - if (catItem.hasClass('cat-parent') || catItem.hasClass('current-cat')) { - e.preventDefault(); - } - $(this).parents('li.cat-parent').siblings().removeClass('active'); - $(this).siblings('.children').stop(true, true).slideToggle().parents('.cat-item').siblings().children('.children').stop(true, true).slideUp(); - } - }); - }); - } -}); - -/***/ }), - -/***/ "./assets/src/scripts/vendor/fancybox.js": -/*!***********************************************!*\ - !*** ./assets/src/scripts/vendor/fancybox.js ***! - \***********************************************/ -/***/ (function() { - -// ================================================== -// fancyBox v3.5.7 -// -// Licensed GPLv3 for open source use -// or fancyBox Commercial License for commercial use -// -// http://fancyapps.com/fancybox/ -// Copyright 2019 fancyApps -// -// ================================================== -(function (window, document, $, undefined) { - "use strict"; - - window.console = window.console || { - info: function info(stuff) {} - }; - - // If there's no jQuery, fancyBox can't work - // ========================================= - - if (!$) { - return; - } - - // Check if fancyBox is already initialized - // ======================================== - - if ($.fn.fancybox) { - console.info("fancyBox already initialized"); - return; - } - - // Private default settings - // ======================== - - var defaults = { - // Close existing modals - // Set this to false if you do not need to stack multiple instances - closeExisting: false, - // Enable infinite gallery navigation - loop: false, - // Horizontal space between slides - gutter: 50, - // Enable keyboard navigation - keyboard: true, - // Should allow caption to overlap the content - preventCaptionOverlap: true, - // Should display navigation arrows at the screen edges - arrows: true, - // Should display counter at the top left corner - infobar: true, - // Should display close button (using `btnTpl.smallBtn` template) over the content - // Can be true, false, "auto" - // If "auto" - will be automatically enabled for "html", "inline" or "ajax" items - smallBtn: "auto", - // Should display toolbar (buttons at the top) - // Can be true, false, "auto" - // If "auto" - will be automatically hidden if "smallBtn" is enabled - toolbar: "auto", - // What buttons should appear in the top right corner. - // Buttons will be created using templates from `btnTpl` option - // and they will be placed into toolbar (class="fancybox-toolbar"` element) - buttons: ["zoom", - //"share", - "slideShow", - //"fullScreen", - //"download", - "thumbs", "close"], - // Detect "idle" time in seconds - idleTime: 3, - // Disable right-click and use simple image protection for images - protect: false, - // Shortcut to make content "modal" - disable keyboard navigtion, hide buttons, etc - modal: false, - image: { - // Wait for images to load before displaying - // true - wait for image to load and then display; - // false - display thumbnail and load the full-sized image over top, - // requires predefined image dimensions (`data-width` and `data-height` attributes) - preload: false - }, - ajax: { - // Object containing settings for ajax request - settings: { - // This helps to indicate that request comes from the modal - // Feel free to change naming - data: { - fancybox: true - } - } - }, - iframe: { - // Iframe template - tpl: '', - // Preload iframe before displaying it - // This allows to calculate iframe content width and height - // (note: Due to "Same Origin Policy", you can't get cross domain data). - preload: true, - // Custom CSS styling for iframe wrapping element - // You can use this to set custom iframe dimensions - css: {}, - // Iframe tag attributes - attr: { - scrolling: "auto" - } - }, - // For HTML5 video only - video: { - tpl: '", - format: "", - // custom video format - autoStart: true - }, - // Default content type if cannot be detected automatically - defaultType: "image", - // Open/close animation type - // Possible values: - // false - disable - // "zoom" - zoom images from/to thumbnail - // "fade" - // "zoom-in-out" - // - animationEffect: "zoom", - // Duration in ms for open/close animation - animationDuration: 366, - // Should image change opacity while zooming - // If opacity is "auto", then opacity will be changed if image and thumbnail have different aspect ratios - zoomOpacity: "auto", - // Transition effect between slides - // - // Possible values: - // false - disable - // "fade' - // "slide' - // "circular' - // "tube' - // "zoom-in-out' - // "rotate' - // - transitionEffect: "fade", - // Duration in ms for transition animation - transitionDuration: 366, - // Custom CSS class for slide element - slideClass: "", - // Custom CSS class for layout - baseClass: "", - // Base template for layout - baseTpl: '", - // Loading indicator template - spinnerTpl: '
', - // Error message template - errorTpl: '

{{ERROR}}

', - btnTpl: { - download: '' + '' + "", - zoom: '", - close: '", - // Arrows - arrowLeft: '", - arrowRight: '", - // This small close button will be appended to your html/inline/ajax content by default, - // if "smallBtn" option is not set to false - smallBtn: '" - }, - // Container is injected into this element - parentEl: "body", - // Hide browser vertical scrollbars; use at your own risk - hideScrollbar: true, - // Focus handling - // ============== - - // Try to focus on the first focusable element after opening - autoFocus: true, - // Put focus back to active element after closing - backFocus: true, - // Do not let user to focus on element outside modal content - trapFocus: true, - // Module specific options - // ======================= - - fullScreen: { - autoStart: false - }, - // Set `touch: false` to disable panning/swiping - touch: { - vertical: true, - // Allow to drag content vertically - momentum: true // Continue movement after releasing mouse/touch when panning - }, - - // Hash value when initializing manually, - // set `false` to disable hash change - hash: null, - // Customize or add new media types - // Example: - /* - media : { - youtube : { - params : { - autoplay : 0 - } - } - } - */ - media: {}, - slideShow: { - autoStart: false, - speed: 3000 - }, - thumbs: { - autoStart: false, - // Display thumbnails on opening - hideOnClose: true, - // Hide thumbnail grid when closing animation starts - parentEl: ".fancybox-container", - // Container is injected into this element - axis: "y" // Vertical (y) or horizontal (x) scrolling - }, - - // Use mousewheel to navigate gallery - // If 'auto' - enabled for images only - wheel: "auto", - // Callbacks - //========== - - // See Documentation/API/Events for more information - // Example: - /* - afterShow: function( instance, current ) { - console.info( 'Clicked element:' ); - console.info( current.opts.$orig ); - } - */ - - onInit: $.noop, - // When instance has been initialized - - beforeLoad: $.noop, - // Before the content of a slide is being loaded - afterLoad: $.noop, - // When the content of a slide is done loading - - beforeShow: $.noop, - // Before open animation starts - afterShow: $.noop, - // When content is done loading and animating - - beforeClose: $.noop, - // Before the instance attempts to close. Return false to cancel the close. - afterClose: $.noop, - // After instance has been closed - - onActivate: $.noop, - // When instance is brought to front - onDeactivate: $.noop, - // When other instance has been activated - - // Interaction - // =========== - - // Use options below to customize taken action when user clicks or double clicks on the fancyBox area, - // each option can be string or method that returns value. - // - // Possible values: - // "close" - close instance - // "next" - move to next gallery item - // "nextOrClose" - move to next gallery item or close if gallery has only one item - // "toggleControls" - show/hide controls - // "zoom" - zoom image (if loaded) - // false - do nothing - - // Clicked on the content - clickContent: function clickContent(current, event) { - return current.type === "image" ? "zoom" : false; - }, - // Clicked on the slide - clickSlide: "close", - // Clicked on the background (backdrop) element; - // if you have not changed the layout, then most likely you need to use `clickSlide` option - clickOutside: "close", - // Same as previous two, but for double click - dblclickContent: false, - dblclickSlide: false, - dblclickOutside: false, - // Custom options when mobile device is detected - // ============================================= - - mobile: { - preventCaptionOverlap: false, - idleTime: false, - clickContent: function clickContent(current, event) { - return current.type === "image" ? "toggleControls" : false; - }, - clickSlide: function clickSlide(current, event) { - return current.type === "image" ? "toggleControls" : "close"; - }, - dblclickContent: function dblclickContent(current, event) { - return current.type === "image" ? "zoom" : false; - }, - dblclickSlide: function dblclickSlide(current, event) { - return current.type === "image" ? "zoom" : false; - } - }, - // Internationalization - // ==================== - - lang: "en", - i18n: { - en: { - CLOSE: "Close", - NEXT: "Next", - PREV: "Previous", - ERROR: "The requested content cannot be loaded.
Please try again later.", - PLAY_START: "Start slideshow", - PLAY_STOP: "Pause slideshow", - FULL_SCREEN: "Full screen", - THUMBS: "Thumbnails", - DOWNLOAD: "Download", - SHARE: "Share", - ZOOM: "Zoom" - }, - de: { - CLOSE: "Schließen", - NEXT: "Weiter", - PREV: "Zurück", - ERROR: "Die angeforderten Daten konnten nicht geladen werden.
Bitte versuchen Sie es später nochmal.", - PLAY_START: "Diaschau starten", - PLAY_STOP: "Diaschau beenden", - FULL_SCREEN: "Vollbild", - THUMBS: "Vorschaubilder", - DOWNLOAD: "Herunterladen", - SHARE: "Teilen", - ZOOM: "Vergrößern" - } - } - }; - - // Few useful variables and methods - // ================================ - - var $W = $(window); - var $D = $(document); - var called = 0; - - // Check if an object is a jQuery object and not a native JavaScript object - // ======================================================================== - var isQuery = function isQuery(obj) { - return obj && obj.hasOwnProperty && obj instanceof $; - }; - - // Handle multiple browsers for "requestAnimationFrame" and "cancelAnimationFrame" - // =============================================================================== - var requestAFrame = function () { - return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || - // if all else fails, use setTimeout - function (callback) { - return window.setTimeout(callback, 1000 / 60); - }; - }(); - var cancelAFrame = function () { - return window.cancelAnimationFrame || window.webkitCancelAnimationFrame || window.mozCancelAnimationFrame || window.oCancelAnimationFrame || function (id) { - window.clearTimeout(id); - }; - }(); - - // Detect the supported transition-end event property name - // ======================================================= - var transitionEnd = function () { - var el = document.createElement("fakeelement"), - t; - var transitions = { - transition: "transitionend", - OTransition: "oTransitionEnd", - MozTransition: "transitionend", - WebkitTransition: "webkitTransitionEnd" - }; - for (t in transitions) { - if (el.style[t] !== undefined) { - return transitions[t]; - } - } - return "transitionend"; - }(); - - // Force redraw on an element. - // This helps in cases where the browser doesn't redraw an updated element properly - // ================================================================================ - var forceRedraw = function forceRedraw($el) { - return $el && $el.length && $el[0].offsetHeight; - }; - - // Exclude array (`buttons`) options from deep merging - // =================================================== - var mergeOpts = function mergeOpts(opts1, opts2) { - var rez = $.extend(true, {}, opts1, opts2); - $.each(opts2, function (key, value) { - if ($.isArray(value)) { - rez[key] = value; - } - }); - return rez; - }; - - // How much of an element is visible in viewport - // ============================================= - - var inViewport = function inViewport(elem) { - var elemCenter, rez; - if (!elem || elem.ownerDocument !== document) { - return false; - } - $(".fancybox-container").css("pointer-events", "none"); - elemCenter = { - x: elem.getBoundingClientRect().left + elem.offsetWidth / 2, - y: elem.getBoundingClientRect().top + elem.offsetHeight / 2 - }; - rez = document.elementFromPoint(elemCenter.x, elemCenter.y) === elem; - $(".fancybox-container").css("pointer-events", ""); - return rez; - }; - - // Class definition - // ================ - - var FancyBox = function FancyBox(content, opts, index) { - var self = this; - self.opts = mergeOpts({ - index: index - }, $.fancybox.defaults); - if ($.isPlainObject(opts)) { - self.opts = mergeOpts(self.opts, opts); - } - if ($.fancybox.isMobile) { - self.opts = mergeOpts(self.opts, self.opts.mobile); - } - self.id = self.opts.id || ++called; - self.currIndex = parseInt(self.opts.index, 10) || 0; - self.prevIndex = null; - self.prevPos = null; - self.currPos = 0; - self.firstRun = true; - - // All group items - self.group = []; - - // Existing slides (for current, next and previous gallery items) - self.slides = {}; - - // Create group elements - self.addContent(content); - if (!self.group.length) { - return; - } - self.init(); - }; - $.extend(FancyBox.prototype, { - // Create DOM structure - // ==================== - - init: function init() { - var self = this, - firstItem = self.group[self.currIndex], - firstItemOpts = firstItem.opts, - $container, - buttonStr; - if (firstItemOpts.closeExisting) { - $.fancybox.close(true); - } - - // Hide scrollbars - // =============== - - $("body").addClass("fancybox-active"); - if (!$.fancybox.getInstance() && firstItemOpts.hideScrollbar !== false && !$.fancybox.isMobile && document.body.scrollHeight > window.innerHeight) { - $("head").append('"); - $("body").addClass("compensate-for-scrollbar"); - } - - // Build html markup and set references - // ==================================== - - // Build html code for buttons and insert into main template - buttonStr = ""; - $.each(firstItemOpts.buttons, function (index, value) { - buttonStr += firstItemOpts.btnTpl[value] || ""; - }); - - // Create markup from base template, it will be initially hidden to - // avoid unnecessary work like painting while initializing is not complete - $container = $(self.translate(self, firstItemOpts.baseTpl.replace("{{buttons}}", buttonStr).replace("{{arrows}}", firstItemOpts.btnTpl.arrowLeft + firstItemOpts.btnTpl.arrowRight))).attr("id", "fancybox-container-" + self.id).addClass(firstItemOpts.baseClass).data("FancyBox", self).appendTo(firstItemOpts.parentEl); - - // Create object holding references to jQuery wrapped nodes - self.$refs = { - container: $container - }; - ["bg", "inner", "infobar", "toolbar", "stage", "caption", "navigation"].forEach(function (item) { - self.$refs[item] = $container.find(".fancybox-" + item); - }); - self.trigger("onInit"); - - // Enable events, deactive previous instances - self.activate(); - - // Build slides, load and reveal content - self.jumpTo(self.currIndex); - }, - // Simple i18n support - replaces object keys found in template - // with corresponding values - // ============================================================ - - translate: function translate(obj, str) { - var arr = obj.opts.i18n[obj.opts.lang] || obj.opts.i18n.en; - return str.replace(/\{\{(\w+)\}\}/g, function (match, n) { - return arr[n] === undefined ? match : arr[n]; - }); - }, - // Populate current group with fresh content - // Check if each object has valid type and content - // =============================================== - - addContent: function addContent(content) { - var self = this, - items = $.makeArray(content), - thumbs; - $.each(items, function (i, item) { - var obj = {}, - opts = {}, - $item, - type, - found, - src, - srcParts; - - // Step 1 - Make sure we have an object - // ==================================== - - if ($.isPlainObject(item)) { - // We probably have manual usage here, something like - // $.fancybox.open( [ { src : "image.jpg", type : "image" } ] ) - - obj = item; - opts = item.opts || item; - } else if ($.type(item) === "object" && $(item).length) { - // Here we probably have jQuery collection returned by some selector - $item = $(item); - - // Support attributes like `data-options='{"touch" : false}'` and `data-touch='false'` - opts = $item.data() || {}; - opts = $.extend(true, {}, opts, opts.options); - - // Here we store clicked element - opts.$orig = $item; - obj.src = self.opts.src || opts.src || $item.attr("href"); - - // Assume that simple syntax is used, for example: - // `$.fancybox.open( $("#test"), {} );` - if (!obj.type && !obj.src) { - obj.type = "inline"; - obj.src = item; - } - } else { - // Assume we have a simple html code, for example: - // $.fancybox.open( '

Hi!

' ); - obj = { - type: "html", - src: item + "" - }; - } - - // Each gallery object has full collection of options - obj.opts = $.extend(true, {}, self.opts, opts); - - // Do not merge buttons array - if ($.isArray(opts.buttons)) { - obj.opts.buttons = opts.buttons; - } - if ($.fancybox.isMobile && obj.opts.mobile) { - obj.opts = mergeOpts(obj.opts, obj.opts.mobile); - } - - // Step 2 - Make sure we have content type, if not - try to guess - // ============================================================== - - type = obj.type || obj.opts.type; - src = obj.src || ""; - if (!type && src) { - if (found = src.match(/\.(mp4|mov|ogv|webm)((\?|#).*)?$/i)) { - type = "video"; - if (!obj.opts.video.format) { - obj.opts.video.format = "video/" + (found[1] === "ogv" ? "ogg" : found[1]); - } - } else if (src.match(/(^data:image\/[a-z0-9+\/=]*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp|svg|ico)((\?|#).*)?$)/i)) { - type = "image"; - } else if (src.match(/\.(pdf)((\?|#).*)?$/i)) { - type = "iframe"; - obj = $.extend(true, obj, { - contentType: "pdf", - opts: { - iframe: { - preload: false - } - } - }); - } else if (src.charAt(0) === "#") { - type = "inline"; - } - } - if (type) { - obj.type = type; - } else { - self.trigger("objectNeedsType", obj); - } - if (!obj.contentType) { - obj.contentType = $.inArray(obj.type, ["html", "inline", "ajax"]) > -1 ? "html" : obj.type; - } - - // Step 3 - Some adjustments - // ========================= - - obj.index = self.group.length; - if (obj.opts.smallBtn == "auto") { - obj.opts.smallBtn = $.inArray(obj.type, ["html", "inline", "ajax"]) > -1; - } - if (obj.opts.toolbar === "auto") { - obj.opts.toolbar = !obj.opts.smallBtn; - } - - // Find thumbnail image, check if exists and if is in the viewport - obj.$thumb = obj.opts.$thumb || null; - if (obj.opts.$trigger && obj.index === self.opts.index) { - obj.$thumb = obj.opts.$trigger.find("img:first"); - if (obj.$thumb.length) { - obj.opts.$orig = obj.opts.$trigger; - } - } - if (!(obj.$thumb && obj.$thumb.length) && obj.opts.$orig) { - obj.$thumb = obj.opts.$orig.find("img:first"); - } - if (obj.$thumb && !obj.$thumb.length) { - obj.$thumb = null; - } - obj.thumb = obj.opts.thumb || (obj.$thumb ? obj.$thumb[0].src : null); - - // "caption" is a "special" option, it can be used to customize caption per gallery item - if ($.type(obj.opts.caption) === "function") { - obj.opts.caption = obj.opts.caption.apply(item, [self, obj]); - } - if ($.type(self.opts.caption) === "function") { - obj.opts.caption = self.opts.caption.apply(item, [self, obj]); - } - - // Make sure we have caption as a string or jQuery object - if (!(obj.opts.caption instanceof $)) { - obj.opts.caption = obj.opts.caption === undefined ? "" : obj.opts.caption + ""; - } - - // Check if url contains "filter" used to filter the content - // Example: "ajax.html #something" - if (obj.type === "ajax") { - srcParts = src.split(/\s+/, 2); - if (srcParts.length > 1) { - obj.src = srcParts.shift(); - obj.opts.filter = srcParts.shift(); - } - } - - // Hide all buttons and disable interactivity for modal items - if (obj.opts.modal) { - obj.opts = $.extend(true, obj.opts, { - trapFocus: true, - // Remove buttons - infobar: 0, - toolbar: 0, - smallBtn: 0, - // Disable keyboard navigation - keyboard: 0, - // Disable some modules - slideShow: 0, - fullScreen: 0, - thumbs: 0, - touch: 0, - // Disable click event handlers - clickContent: false, - clickSlide: false, - clickOutside: false, - dblclickContent: false, - dblclickSlide: false, - dblclickOutside: false - }); - } - - // Step 4 - Add processed object to group - // ====================================== - - self.group.push(obj); - }); - - // Update controls if gallery is already opened - if (Object.keys(self.slides).length) { - self.updateControls(); - - // Update thumbnails, if needed - thumbs = self.Thumbs; - if (thumbs && thumbs.isActive) { - thumbs.create(); - thumbs.focus(); - } - } - }, - // Attach an event handler functions for: - // - navigation buttons - // - browser scrolling, resizing; - // - focusing - // - keyboard - // - detecting inactivity - // ====================================== - - addEvents: function addEvents() { - var self = this; - self.removeEvents(); - - // Make navigation elements clickable - // ================================== - - self.$refs.container.on("click.fb-close", "[data-fancybox-close]", function (e) { - e.stopPropagation(); - e.preventDefault(); - self.close(e); - }).on("touchstart.fb-prev click.fb-prev", "[data-fancybox-prev]", function (e) { - e.stopPropagation(); - e.preventDefault(); - self.previous(); - }).on("touchstart.fb-next click.fb-next", "[data-fancybox-next]", function (e) { - e.stopPropagation(); - e.preventDefault(); - self.next(); - }).on("click.fb", "[data-fancybox-zoom]", function (e) { - // Click handler for zoom button - self[self.isScaledDown() ? "scaleToActual" : "scaleToFit"](); - }); - - // Handle page scrolling and browser resizing - // ========================================== - - $W.on("orientationchange.fb resize.fb", function (e) { - if (e && e.originalEvent && e.originalEvent.type === "resize") { - if (self.requestId) { - cancelAFrame(self.requestId); - } - self.requestId = requestAFrame(function () { - self.update(e); - }); - } else { - if (self.current && self.current.type === "iframe") { - self.$refs.stage.hide(); - } - setTimeout(function () { - self.$refs.stage.show(); - self.update(e); - }, $.fancybox.isMobile ? 600 : 250); - } - }); - $D.on("keydown.fb", function (e) { - var instance = $.fancybox ? $.fancybox.getInstance() : null, - current = instance.current, - keycode = e.keyCode || e.which; - - // Trap keyboard focus inside of the modal - // ======================================= - - if (keycode == 9) { - if (current.opts.trapFocus) { - self.focus(e); - } - return; - } - - // Enable keyboard navigation - // ========================== - - if (!current.opts.keyboard || e.ctrlKey || e.altKey || e.shiftKey || $(e.target).is("input,textarea,video,audio,select")) { - return; - } - - // Backspace and Esc keys - if (keycode === 8 || keycode === 27) { - e.preventDefault(); - self.close(e); - return; - } - - // Left arrow and Up arrow - if (keycode === 37 || keycode === 38) { - e.preventDefault(); - self.previous(); - return; - } - - // Righ arrow and Down arrow - if (keycode === 39 || keycode === 40) { - e.preventDefault(); - self.next(); - return; - } - self.trigger("afterKeydown", e, keycode); - }); - - // Hide controls after some inactivity period - if (self.group[self.currIndex].opts.idleTime) { - self.idleSecondsCounter = 0; - $D.on("mousemove.fb-idle mouseleave.fb-idle mousedown.fb-idle touchstart.fb-idle touchmove.fb-idle scroll.fb-idle keydown.fb-idle", function (e) { - self.idleSecondsCounter = 0; - if (self.isIdle) { - self.showControls(); - } - self.isIdle = false; - }); - self.idleInterval = window.setInterval(function () { - self.idleSecondsCounter++; - if (self.idleSecondsCounter >= self.group[self.currIndex].opts.idleTime && !self.isDragging) { - self.isIdle = true; - self.idleSecondsCounter = 0; - self.hideControls(); - } - }, 1000); - } - }, - // Remove events added by the core - // =============================== - - removeEvents: function removeEvents() { - var self = this; - $W.off("orientationchange.fb resize.fb"); - $D.off("keydown.fb .fb-idle"); - this.$refs.container.off(".fb-close .fb-prev .fb-next"); - if (self.idleInterval) { - window.clearInterval(self.idleInterval); - self.idleInterval = null; - } - }, - // Change to previous gallery item - // =============================== - - previous: function previous(duration) { - return this.jumpTo(this.currPos - 1, duration); - }, - // Change to next gallery item - // =========================== - - next: function next(duration) { - return this.jumpTo(this.currPos + 1, duration); - }, - // Switch to selected gallery item - // =============================== - - jumpTo: function jumpTo(pos, duration) { - var self = this, - groupLen = self.group.length, - firstRun, - isMoved, - loop, - current, - previous, - slidePos, - stagePos, - prop, - diff; - if (self.isDragging || self.isClosing || self.isAnimating && self.firstRun) { - return; - } - - // Should loop? - pos = parseInt(pos, 10); - loop = self.current ? self.current.opts.loop : self.opts.loop; - if (!loop && (pos < 0 || pos >= groupLen)) { - return false; - } - - // Check if opening for the first time; this helps to speed things up - firstRun = self.firstRun = !Object.keys(self.slides).length; - - // Create slides - previous = self.current; - self.prevIndex = self.currIndex; - self.prevPos = self.currPos; - current = self.createSlide(pos); - if (groupLen > 1) { - if (loop || current.index < groupLen - 1) { - self.createSlide(pos + 1); - } - if (loop || current.index > 0) { - self.createSlide(pos - 1); - } - } - self.current = current; - self.currIndex = current.index; - self.currPos = current.pos; - self.trigger("beforeShow", firstRun); - self.updateControls(); - - // Validate duration length - current.forcedDuration = undefined; - if ($.isNumeric(duration)) { - current.forcedDuration = duration; - } else { - duration = current.opts[firstRun ? "animationDuration" : "transitionDuration"]; - } - duration = parseInt(duration, 10); - - // Check if user has swiped the slides or if still animating - isMoved = self.isMoved(current); - - // Make sure current slide is visible - current.$slide.addClass("fancybox-slide--current"); - - // Fresh start - reveal container, current slide and start loading content - if (firstRun) { - if (current.opts.animationEffect && duration) { - self.$refs.container.css("transition-duration", duration + "ms"); - } - self.$refs.container.addClass("fancybox-is-open").trigger("focus"); - - // Attempt to load content into slide - // This will later call `afterLoad` -> `revealContent` - self.loadSlide(current); - self.preload("image"); - return; - } - - // Get actual slide/stage positions (before cleaning up) - slidePos = $.fancybox.getTranslate(previous.$slide); - stagePos = $.fancybox.getTranslate(self.$refs.stage); - - // Clean up all slides - $.each(self.slides, function (index, slide) { - $.fancybox.stop(slide.$slide, true); - }); - if (previous.pos !== current.pos) { - previous.isComplete = false; - } - previous.$slide.removeClass("fancybox-slide--complete fancybox-slide--current"); - - // If slides are out of place, then animate them to correct position - if (isMoved) { - // Calculate horizontal swipe distance - diff = slidePos.left - (previous.pos * slidePos.width + previous.pos * previous.opts.gutter); - $.each(self.slides, function (index, slide) { - slide.$slide.removeClass("fancybox-animated").removeClass(function (index, className) { - return (className.match(/(^|\s)fancybox-fx-\S+/g) || []).join(" "); - }); - - // Make sure that each slide is in equal distance - // This is mostly needed for freshly added slides, because they are not yet positioned - var leftPos = slide.pos * slidePos.width + slide.pos * slide.opts.gutter; - $.fancybox.setTranslate(slide.$slide, { - top: 0, - left: leftPos - stagePos.left + diff - }); - if (slide.pos !== current.pos) { - slide.$slide.addClass("fancybox-slide--" + (slide.pos > current.pos ? "next" : "previous")); - } - - // Redraw to make sure that transition will start - forceRedraw(slide.$slide); - - // Animate the slide - $.fancybox.animate(slide.$slide, { - top: 0, - left: (slide.pos - current.pos) * slidePos.width + (slide.pos - current.pos) * slide.opts.gutter - }, duration, function () { - slide.$slide.css({ - transform: "", - opacity: "" - }).removeClass("fancybox-slide--next fancybox-slide--previous"); - if (slide.pos === self.currPos) { - self.complete(); - } - }); - }); - } else if (duration && current.opts.transitionEffect) { - // Set transition effect for previously active slide - prop = "fancybox-animated fancybox-fx-" + current.opts.transitionEffect; - previous.$slide.addClass("fancybox-slide--" + (previous.pos > current.pos ? "next" : "previous")); - $.fancybox.animate(previous.$slide, prop, duration, function () { - previous.$slide.removeClass(prop).removeClass("fancybox-slide--next fancybox-slide--previous"); - }, false); - } - if (current.isLoaded) { - self.revealContent(current); - } else { - self.loadSlide(current); - } - self.preload("image"); - }, - // Create new "slide" element - // These are gallery items that are actually added to DOM - // ======================================================= - - createSlide: function createSlide(pos) { - var self = this, - $slide, - index; - index = pos % self.group.length; - index = index < 0 ? self.group.length + index : index; - if (!self.slides[pos] && self.group[index]) { - $slide = $('
').appendTo(self.$refs.stage); - self.slides[pos] = $.extend(true, {}, self.group[index], { - pos: pos, - $slide: $slide, - isLoaded: false - }); - self.updateSlide(self.slides[pos]); - } - return self.slides[pos]; - }, - // Scale image to the actual size of the image; - // x and y values should be relative to the slide - // ============================================== - - scaleToActual: function scaleToActual(x, y, duration) { - var self = this, - current = self.current, - $content = current.$content, - canvasWidth = $.fancybox.getTranslate(current.$slide).width, - canvasHeight = $.fancybox.getTranslate(current.$slide).height, - newImgWidth = current.width, - newImgHeight = current.height, - imgPos, - posX, - posY, - scaleX, - scaleY; - if (self.isAnimating || self.isMoved() || !$content || !(current.type == "image" && current.isLoaded && !current.hasError)) { - return; - } - self.isAnimating = true; - $.fancybox.stop($content); - x = x === undefined ? canvasWidth * 0.5 : x; - y = y === undefined ? canvasHeight * 0.5 : y; - imgPos = $.fancybox.getTranslate($content); - imgPos.top -= $.fancybox.getTranslate(current.$slide).top; - imgPos.left -= $.fancybox.getTranslate(current.$slide).left; - scaleX = newImgWidth / imgPos.width; - scaleY = newImgHeight / imgPos.height; - - // Get center position for original image - posX = canvasWidth * 0.5 - newImgWidth * 0.5; - posY = canvasHeight * 0.5 - newImgHeight * 0.5; - - // Make sure image does not move away from edges - if (newImgWidth > canvasWidth) { - posX = imgPos.left * scaleX - (x * scaleX - x); - if (posX > 0) { - posX = 0; - } - if (posX < canvasWidth - newImgWidth) { - posX = canvasWidth - newImgWidth; - } - } - if (newImgHeight > canvasHeight) { - posY = imgPos.top * scaleY - (y * scaleY - y); - if (posY > 0) { - posY = 0; - } - if (posY < canvasHeight - newImgHeight) { - posY = canvasHeight - newImgHeight; - } - } - self.updateCursor(newImgWidth, newImgHeight); - $.fancybox.animate($content, { - top: posY, - left: posX, - scaleX: scaleX, - scaleY: scaleY - }, duration || 366, function () { - self.isAnimating = false; - }); - - // Stop slideshow - if (self.SlideShow && self.SlideShow.isActive) { - self.SlideShow.stop(); - } - }, - // Scale image to fit inside parent element - // ======================================== - - scaleToFit: function scaleToFit(duration) { - var self = this, - current = self.current, - $content = current.$content, - end; - if (self.isAnimating || self.isMoved() || !$content || !(current.type == "image" && current.isLoaded && !current.hasError)) { - return; - } - self.isAnimating = true; - $.fancybox.stop($content); - end = self.getFitPos(current); - self.updateCursor(end.width, end.height); - $.fancybox.animate($content, { - top: end.top, - left: end.left, - scaleX: end.width / $content.width(), - scaleY: end.height / $content.height() - }, duration || 366, function () { - self.isAnimating = false; - }); - }, - // Calculate image size to fit inside viewport - // =========================================== - - getFitPos: function getFitPos(slide) { - var self = this, - $content = slide.$content, - $slide = slide.$slide, - width = slide.width || slide.opts.width, - height = slide.height || slide.opts.height, - maxWidth, - maxHeight, - minRatio, - aspectRatio, - rez = {}; - if (!slide.isLoaded || !$content || !$content.length) { - return false; - } - maxWidth = $.fancybox.getTranslate(self.$refs.stage).width; - maxHeight = $.fancybox.getTranslate(self.$refs.stage).height; - maxWidth -= parseFloat($slide.css("paddingLeft")) + parseFloat($slide.css("paddingRight")) + parseFloat($content.css("marginLeft")) + parseFloat($content.css("marginRight")); - maxHeight -= parseFloat($slide.css("paddingTop")) + parseFloat($slide.css("paddingBottom")) + parseFloat($content.css("marginTop")) + parseFloat($content.css("marginBottom")); - if (!width || !height) { - width = maxWidth; - height = maxHeight; - } - minRatio = Math.min(1, maxWidth / width, maxHeight / height); - width = minRatio * width; - height = minRatio * height; - - // Adjust width/height to precisely fit into container - if (width > maxWidth - 0.5) { - width = maxWidth; - } - if (height > maxHeight - 0.5) { - height = maxHeight; - } - if (slide.type === "image") { - rez.top = Math.floor((maxHeight - height) * 0.5) + parseFloat($slide.css("paddingTop")); - rez.left = Math.floor((maxWidth - width) * 0.5) + parseFloat($slide.css("paddingLeft")); - } else if (slide.contentType === "video") { - // Force aspect ratio for the video - // "I say the whole world must learn of our peaceful ways… by force!" - aspectRatio = slide.opts.width && slide.opts.height ? width / height : slide.opts.ratio || 16 / 9; - if (height > width / aspectRatio) { - height = width / aspectRatio; - } else if (width > height * aspectRatio) { - width = height * aspectRatio; - } - } - rez.width = width; - rez.height = height; - return rez; - }, - // Update content size and position for all slides - // ============================================== - - update: function update(e) { - var self = this; - $.each(self.slides, function (key, slide) { - self.updateSlide(slide, e); - }); - }, - // Update slide content position and size - // ====================================== - - updateSlide: function updateSlide(slide, e) { - var self = this, - $content = slide && slide.$content, - width = slide.width || slide.opts.width, - height = slide.height || slide.opts.height, - $slide = slide.$slide; - - // First, prevent caption overlap, if needed - self.adjustCaption(slide); - - // Then resize content to fit inside the slide - if ($content && (width || height || slide.contentType === "video") && !slide.hasError) { - $.fancybox.stop($content); - $.fancybox.setTranslate($content, self.getFitPos(slide)); - if (slide.pos === self.currPos) { - self.isAnimating = false; - self.updateCursor(); - } - } - - // Then some adjustments - self.adjustLayout(slide); - if ($slide.length) { - $slide.trigger("refresh"); - if (slide.pos === self.currPos) { - self.$refs.toolbar.add(self.$refs.navigation.find(".fancybox-button--arrow_right")).toggleClass("compensate-for-scrollbar", $slide.get(0).scrollHeight > $slide.get(0).clientHeight); - } - } - self.trigger("onUpdate", slide, e); - }, - // Horizontally center slide - // ========================= - - centerSlide: function centerSlide(duration) { - var self = this, - current = self.current, - $slide = current.$slide; - if (self.isClosing || !current) { - return; - } - $slide.siblings().css({ - transform: "", - opacity: "" - }); - $slide.parent().children().removeClass("fancybox-slide--previous fancybox-slide--next"); - $.fancybox.animate($slide, { - top: 0, - left: 0, - opacity: 1 - }, duration === undefined ? 0 : duration, function () { - // Clean up - $slide.css({ - transform: "", - opacity: "" - }); - if (!current.isComplete) { - self.complete(); - } - }, false); - }, - // Check if current slide is moved (swiped) - // ======================================== - - isMoved: function isMoved(slide) { - var current = slide || this.current, - slidePos, - stagePos; - if (!current) { - return false; - } - stagePos = $.fancybox.getTranslate(this.$refs.stage); - slidePos = $.fancybox.getTranslate(current.$slide); - return !current.$slide.hasClass("fancybox-animated") && (Math.abs(slidePos.top - stagePos.top) > 0.5 || Math.abs(slidePos.left - stagePos.left) > 0.5); - }, - // Update cursor style depending if content can be zoomed - // ====================================================== - - updateCursor: function updateCursor(nextWidth, nextHeight) { - var self = this, - current = self.current, - $container = self.$refs.container, - canPan, - isZoomable; - if (!current || self.isClosing || !self.Guestures) { - return; - } - $container.removeClass("fancybox-is-zoomable fancybox-can-zoomIn fancybox-can-zoomOut fancybox-can-swipe fancybox-can-pan"); - canPan = self.canPan(nextWidth, nextHeight); - isZoomable = canPan ? true : self.isZoomable(); - $container.toggleClass("fancybox-is-zoomable", isZoomable); - $("[data-fancybox-zoom]").prop("disabled", !isZoomable); - if (canPan) { - $container.addClass("fancybox-can-pan"); - } else if (isZoomable && (current.opts.clickContent === "zoom" || $.isFunction(current.opts.clickContent) && current.opts.clickContent(current) == "zoom")) { - $container.addClass("fancybox-can-zoomIn"); - } else if (current.opts.touch && (current.opts.touch.vertical || self.group.length > 1) && current.contentType !== "video") { - $container.addClass("fancybox-can-swipe"); - } - }, - // Check if current slide is zoomable - // ================================== - - isZoomable: function isZoomable() { - var self = this, - current = self.current, - fitPos; - - // Assume that slide is zoomable if: - // - image is still loading - // - actual size of the image is smaller than available area - if (current && !self.isClosing && current.type === "image" && !current.hasError) { - if (!current.isLoaded) { - return true; - } - fitPos = self.getFitPos(current); - if (fitPos && (current.width > fitPos.width || current.height > fitPos.height)) { - return true; - } - } - return false; - }, - // Check if current image dimensions are smaller than actual - // ========================================================= - - isScaledDown: function isScaledDown(nextWidth, nextHeight) { - var self = this, - rez = false, - current = self.current, - $content = current.$content; - if (nextWidth !== undefined && nextHeight !== undefined) { - rez = nextWidth < current.width && nextHeight < current.height; - } else if ($content) { - rez = $.fancybox.getTranslate($content); - rez = rez.width < current.width && rez.height < current.height; - } - return rez; - }, - // Check if image dimensions exceed parent element - // =============================================== - - canPan: function canPan(nextWidth, nextHeight) { - var self = this, - current = self.current, - pos = null, - rez = false; - if (current.type === "image" && (current.isComplete || nextWidth && nextHeight) && !current.hasError) { - rez = self.getFitPos(current); - if (nextWidth !== undefined && nextHeight !== undefined) { - pos = { - width: nextWidth, - height: nextHeight - }; - } else if (current.isComplete) { - pos = $.fancybox.getTranslate(current.$content); - } - if (pos && rez) { - rez = Math.abs(pos.width - rez.width) > 1.5 || Math.abs(pos.height - rez.height) > 1.5; - } - } - return rez; - }, - // Load content into the slide - // =========================== - - loadSlide: function loadSlide(slide) { - var self = this, - type, - $slide, - ajaxLoad; - if (slide.isLoading || slide.isLoaded) { - return; - } - slide.isLoading = true; - if (self.trigger("beforeLoad", slide) === false) { - slide.isLoading = false; - return false; - } - type = slide.type; - $slide = slide.$slide; - $slide.off("refresh").trigger("onReset").addClass(slide.opts.slideClass); - - // Create content depending on the type - switch (type) { - case "image": - self.setImage(slide); - break; - case "iframe": - self.setIframe(slide); - break; - case "html": - self.setContent(slide, slide.src || slide.content); - break; - case "video": - self.setContent(slide, slide.opts.video.tpl.replace(/\{\{src\}\}/gi, slide.src).replace("{{format}}", slide.opts.videoFormat || slide.opts.video.format || "").replace("{{poster}}", slide.thumb || "")); - break; - case "inline": - if ($(slide.src).length) { - self.setContent(slide, $(slide.src)); - } else { - self.setError(slide); - } - break; - case "ajax": - self.showLoading(slide); - ajaxLoad = $.ajax($.extend({}, slide.opts.ajax.settings, { - url: slide.src, - success: function success(data, textStatus) { - if (textStatus === "success") { - self.setContent(slide, data); - } - }, - error: function error(jqXHR, textStatus) { - if (jqXHR && textStatus !== "abort") { - self.setError(slide); - } - } - })); - $slide.one("onReset", function () { - ajaxLoad.abort(); - }); - break; - default: - self.setError(slide); - break; - } - return true; - }, - // Use thumbnail image, if possible - // ================================ - - setImage: function setImage(slide) { - var self = this, - ghost; - - // Check if need to show loading icon - setTimeout(function () { - var $img = slide.$image; - if (!self.isClosing && slide.isLoading && (!$img || !$img.length || !$img[0].complete) && !slide.hasError) { - self.showLoading(slide); - } - }, 50); - - //Check if image has srcset - self.checkSrcset(slide); - - // This will be wrapper containing both ghost and actual image - slide.$content = $('
').addClass("fancybox-is-hidden").appendTo(slide.$slide.addClass("fancybox-slide--image")); - - // If we have a thumbnail, we can display it while actual image is loading - // Users will not stare at black screen and actual image will appear gradually - if (slide.opts.preload !== false && slide.opts.width && slide.opts.height && slide.thumb) { - slide.width = slide.opts.width; - slide.height = slide.opts.height; - ghost = document.createElement("img"); - ghost.onerror = function () { - $(this).remove(); - slide.$ghost = null; - }; - ghost.onload = function () { - self.afterLoad(slide); - }; - slide.$ghost = $(ghost).addClass("fancybox-image").appendTo(slide.$content).attr("src", slide.thumb); - } - - // Start loading actual image - self.setBigImage(slide); - }, - // Check if image has srcset and get the source - // ============================================ - checkSrcset: function checkSrcset(slide) { - var srcset = slide.opts.srcset || slide.opts.image.srcset, - found, - temp, - pxRatio, - windowWidth; - - // If we have "srcset", then we need to find first matching "src" value. - // This is necessary, because when you set an src attribute, the browser will preload the image - // before any javascript or even CSS is applied. - if (srcset) { - pxRatio = window.devicePixelRatio || 1; - windowWidth = window.innerWidth * pxRatio; - temp = srcset.split(",").map(function (el) { - var ret = {}; - el.trim().split(/\s+/).forEach(function (el, i) { - var value = parseInt(el.substring(0, el.length - 1), 10); - if (i === 0) { - return ret.url = el; - } - if (value) { - ret.value = value; - ret.postfix = el[el.length - 1]; - } - }); - return ret; - }); - - // Sort by value - temp.sort(function (a, b) { - return a.value - b.value; - }); - - // Ok, now we have an array of all srcset values - for (var j = 0; j < temp.length; j++) { - var el = temp[j]; - if (el.postfix === "w" && el.value >= windowWidth || el.postfix === "x" && el.value >= pxRatio) { - found = el; - break; - } - } - - // If not found, take the last one - if (!found && temp.length) { - found = temp[temp.length - 1]; - } - if (found) { - slide.src = found.url; - - // If we have default width/height values, we can calculate height for matching source - if (slide.width && slide.height && found.postfix == "w") { - slide.height = slide.width / slide.height * found.value; - slide.width = found.value; - } - slide.opts.srcset = srcset; - } - } - }, - // Create full-size image - // ====================== - - setBigImage: function setBigImage(slide) { - var self = this, - img = document.createElement("img"), - $img = $(img); - slide.$image = $img.one("error", function () { - self.setError(slide); - }).one("load", function () { - var sizes; - if (!slide.$ghost) { - self.resolveImageSlideSize(slide, this.naturalWidth, this.naturalHeight); - self.afterLoad(slide); - } - if (self.isClosing) { - return; - } - if (slide.opts.srcset) { - sizes = slide.opts.sizes; - if (!sizes || sizes === "auto") { - sizes = (slide.width / slide.height > 1 && $W.width() / $W.height() > 1 ? "100" : Math.round(slide.width / slide.height * 100)) + "vw"; - } - $img.attr("sizes", sizes).attr("srcset", slide.opts.srcset); - } - - // Hide temporary image after some delay - if (slide.$ghost) { - setTimeout(function () { - if (slide.$ghost && !self.isClosing) { - slide.$ghost.hide(); - } - }, Math.min(300, Math.max(1000, slide.height / 1600))); - } - self.hideLoading(slide); - }).addClass("fancybox-image").attr("src", slide.src).appendTo(slide.$content); - if ((img.complete || img.readyState == "complete") && $img.naturalWidth && $img.naturalHeight) { - $img.trigger("load"); - } else if (img.error) { - $img.trigger("error"); - } - }, - // Computes the slide size from image size and maxWidth/maxHeight - // ============================================================== - - resolveImageSlideSize: function resolveImageSlideSize(slide, imgWidth, imgHeight) { - var maxWidth = parseInt(slide.opts.width, 10), - maxHeight = parseInt(slide.opts.height, 10); - - // Sets the default values from the image - slide.width = imgWidth; - slide.height = imgHeight; - if (maxWidth > 0) { - slide.width = maxWidth; - slide.height = Math.floor(maxWidth * imgHeight / imgWidth); - } - if (maxHeight > 0) { - slide.width = Math.floor(maxHeight * imgWidth / imgHeight); - slide.height = maxHeight; - } - }, - // Create iframe wrapper, iframe and bindings - // ========================================== - - setIframe: function setIframe(slide) { - var self = this, - opts = slide.opts.iframe, - $slide = slide.$slide, - $iframe; - slide.$content = $('
').css(opts.css).appendTo($slide); - $slide.addClass("fancybox-slide--" + slide.contentType); - slide.$iframe = $iframe = $(opts.tpl.replace(/\{rnd\}/g, new Date().getTime())).attr(opts.attr).appendTo(slide.$content); - if (opts.preload) { - self.showLoading(slide); - - // Unfortunately, it is not always possible to determine if iframe is successfully loaded - // (due to browser security policy) - - $iframe.on("load.fb error.fb", function (e) { - this.isReady = 1; - slide.$slide.trigger("refresh"); - self.afterLoad(slide); - }); - - // Recalculate iframe content size - // =============================== - - $slide.on("refresh.fb", function () { - var $content = slide.$content, - frameWidth = opts.css.width, - frameHeight = opts.css.height, - $contents, - $body; - if ($iframe[0].isReady !== 1) { - return; - } - try { - $contents = $iframe.contents(); - $body = $contents.find("body"); - } catch (ignore) {} - - // Calculate content dimensions, if it is accessible - if ($body && $body.length && $body.children().length) { - // Avoid scrolling to top (if multiple instances) - $slide.css("overflow", "visible"); - $content.css({ - width: "100%", - "max-width": "100%", - height: "9999px" - }); - if (frameWidth === undefined) { - frameWidth = Math.ceil(Math.max($body[0].clientWidth, $body.outerWidth(true))); - } - $content.css("width", frameWidth ? frameWidth : "").css("max-width", ""); - if (frameHeight === undefined) { - frameHeight = Math.ceil(Math.max($body[0].clientHeight, $body.outerHeight(true))); - } - $content.css("height", frameHeight ? frameHeight : ""); - $slide.css("overflow", "auto"); - } - $content.removeClass("fancybox-is-hidden"); - }); - } else { - self.afterLoad(slide); - } - $iframe.attr("src", slide.src); - - // Remove iframe if closing or changing gallery item - $slide.one("onReset", function () { - // This helps IE not to throw errors when closing - try { - $(this).find("iframe").hide().unbind().attr("src", "//about:blank"); - } catch (ignore) {} - $(this).off("refresh.fb").empty(); - slide.isLoaded = false; - slide.isRevealed = false; - }); - }, - // Wrap and append content to the slide - // ====================================== - - setContent: function setContent(slide, content) { - var self = this; - if (self.isClosing) { - return; - } - self.hideLoading(slide); - if (slide.$content) { - $.fancybox.stop(slide.$content); - } - slide.$slide.empty(); - - // If content is a jQuery object, then it will be moved to the slide. - // The placeholder is created so we will know where to put it back. - if (isQuery(content) && content.parent().length) { - // Make sure content is not already moved to fancyBox - if (content.hasClass("fancybox-content") || content.parent().hasClass("fancybox-content")) { - content.parents(".fancybox-slide").trigger("onReset"); - } - - // Create temporary element marking original place of the content - slide.$placeholder = $("
").hide().insertAfter(content); - - // Make sure content is visible - content.css("display", "inline-block"); - } else if (!slide.hasError) { - // If content is just a plain text, try to convert it to html - if ($.type(content) === "string") { - content = $("
").append($.trim(content)).contents(); - } - - // If "filter" option is provided, then filter content - if (slide.opts.filter) { - content = $("
").html(content).find(slide.opts.filter); - } - } - slide.$slide.one("onReset", function () { - // Pause all html5 video/audio - $(this).find("video,audio").trigger("pause"); - - // Put content back - if (slide.$placeholder) { - slide.$placeholder.after(content.removeClass("fancybox-content").hide()).remove(); - slide.$placeholder = null; - } - - // Remove custom close button - if (slide.$smallBtn) { - slide.$smallBtn.remove(); - slide.$smallBtn = null; - } - - // Remove content and mark slide as not loaded - if (!slide.hasError) { - $(this).empty(); - slide.isLoaded = false; - slide.isRevealed = false; - } - }); - $(content).appendTo(slide.$slide); - if ($(content).is("video,audio")) { - $(content).addClass("fancybox-video"); - $(content).wrap("
"); - slide.contentType = "video"; - slide.opts.width = slide.opts.width || $(content).attr("width"); - slide.opts.height = slide.opts.height || $(content).attr("height"); - } - slide.$content = slide.$slide.children().filter("div,form,main,video,audio,article,.fancybox-content").first(); - slide.$content.siblings().hide(); - - // Re-check if there is a valid content - // (in some cases, ajax response can contain various elements or plain text) - if (!slide.$content.length) { - slide.$content = slide.$slide.wrapInner("
").children().first(); - } - slide.$content.addClass("fancybox-content"); - slide.$slide.addClass("fancybox-slide--" + slide.contentType); - self.afterLoad(slide); - }, - // Display error message - // ===================== - - setError: function setError(slide) { - slide.hasError = true; - slide.$slide.trigger("onReset").removeClass("fancybox-slide--" + slide.contentType).addClass("fancybox-slide--error"); - slide.contentType = "html"; - this.setContent(slide, this.translate(slide, slide.opts.errorTpl)); - if (slide.pos === this.currPos) { - this.isAnimating = false; - } - }, - // Show loading icon inside the slide - // ================================== - - showLoading: function showLoading(slide) { - var self = this; - slide = slide || self.current; - if (slide && !slide.$spinner) { - slide.$spinner = $(self.translate(self, self.opts.spinnerTpl)).appendTo(slide.$slide).hide().fadeIn("fast"); - } - }, - // Remove loading icon from the slide - // ================================== - - hideLoading: function hideLoading(slide) { - var self = this; - slide = slide || self.current; - if (slide && slide.$spinner) { - slide.$spinner.stop().remove(); - delete slide.$spinner; - } - }, - // Adjustments after slide content has been loaded - // =============================================== - - afterLoad: function afterLoad(slide) { - var self = this; - if (self.isClosing) { - return; - } - slide.isLoading = false; - slide.isLoaded = true; - self.trigger("afterLoad", slide); - self.hideLoading(slide); - - // Add small close button - if (slide.opts.smallBtn && (!slide.$smallBtn || !slide.$smallBtn.length)) { - slide.$smallBtn = $(self.translate(slide, slide.opts.btnTpl.smallBtn)).appendTo(slide.$content); - } - - // Disable right click - if (slide.opts.protect && slide.$content && !slide.hasError) { - slide.$content.on("contextmenu.fb", function (e) { - if (e.button == 2) { - e.preventDefault(); - } - return true; - }); - - // Add fake element on top of the image - // This makes a bit harder for user to select image - if (slide.type === "image") { - $('
').appendTo(slide.$content); - } - } - self.adjustCaption(slide); - self.adjustLayout(slide); - if (slide.pos === self.currPos) { - self.updateCursor(); - } - self.revealContent(slide); - }, - // Prevent caption overlap, - // fix css inconsistency across browsers - // ===================================== - - adjustCaption: function adjustCaption(slide) { - var self = this, - current = slide || self.current, - caption = current.opts.caption, - preventOverlap = current.opts.preventCaptionOverlap, - $caption = self.$refs.caption, - $clone, - captionH = false; - $caption.toggleClass("fancybox-caption--separate", preventOverlap); - if (preventOverlap && caption && caption.length) { - if (current.pos !== self.currPos) { - $clone = $caption.clone().appendTo($caption.parent()); - $clone.children().eq(0).empty().html(caption); - captionH = $clone.outerHeight(true); - $clone.empty().remove(); - } else if (self.$caption) { - captionH = self.$caption.outerHeight(true); - } - current.$slide.css("padding-bottom", captionH || ""); - } - }, - // Simple hack to fix inconsistency across browsers, described here (affects Edge, too): - // https://bugzilla.mozilla.org/show_bug.cgi?id=748518 - // ==================================================================================== - - adjustLayout: function adjustLayout(slide) { - var self = this, - current = slide || self.current, - scrollHeight, - marginBottom, - inlinePadding, - actualPadding; - if (current.isLoaded && current.opts.disableLayoutFix !== true) { - current.$content.css("margin-bottom", ""); - - // If we would always set margin-bottom for the content, - // then it would potentially break vertical align - if (current.$content.outerHeight() > current.$slide.height() + 0.5) { - inlinePadding = current.$slide[0].style["padding-bottom"]; - actualPadding = current.$slide.css("padding-bottom"); - if (parseFloat(actualPadding) > 0) { - scrollHeight = current.$slide[0].scrollHeight; - current.$slide.css("padding-bottom", 0); - if (Math.abs(scrollHeight - current.$slide[0].scrollHeight) < 1) { - marginBottom = actualPadding; - } - current.$slide.css("padding-bottom", inlinePadding); - } - } - current.$content.css("margin-bottom", marginBottom); - } - }, - // Make content visible - // This method is called right after content has been loaded or - // user navigates gallery and transition should start - // ============================================================ - - revealContent: function revealContent(slide) { - var self = this, - $slide = slide.$slide, - end = false, - start = false, - isMoved = self.isMoved(slide), - isRevealed = slide.isRevealed, - effect, - effectClassName, - duration, - opacity; - slide.isRevealed = true; - effect = slide.opts[self.firstRun ? "animationEffect" : "transitionEffect"]; - duration = slide.opts[self.firstRun ? "animationDuration" : "transitionDuration"]; - duration = parseInt(slide.forcedDuration === undefined ? duration : slide.forcedDuration, 10); - if (isMoved || slide.pos !== self.currPos || !duration) { - effect = false; - } - - // Check if can zoom - if (effect === "zoom") { - if (slide.pos === self.currPos && duration && slide.type === "image" && !slide.hasError && (start = self.getThumbPos(slide))) { - end = self.getFitPos(slide); - } else { - effect = "fade"; - } - } - - // Zoom animation - // ============== - if (effect === "zoom") { - self.isAnimating = true; - end.scaleX = end.width / start.width; - end.scaleY = end.height / start.height; - - // Check if we need to animate opacity - opacity = slide.opts.zoomOpacity; - if (opacity == "auto") { - opacity = Math.abs(slide.width / slide.height - start.width / start.height) > 0.1; - } - if (opacity) { - start.opacity = 0.1; - end.opacity = 1; - } - - // Draw image at start position - $.fancybox.setTranslate(slide.$content.removeClass("fancybox-is-hidden"), start); - forceRedraw(slide.$content); - - // Start animation - $.fancybox.animate(slide.$content, end, duration, function () { - self.isAnimating = false; - self.complete(); - }); - return; - } - self.updateSlide(slide); - - // Simply show content if no effect - // ================================ - if (!effect) { - slide.$content.removeClass("fancybox-is-hidden"); - if (!isRevealed && isMoved && slide.type === "image" && !slide.hasError) { - slide.$content.hide().fadeIn("fast"); - } - if (slide.pos === self.currPos) { - self.complete(); - } - return; - } - - // Prepare for CSS transiton - // ========================= - $.fancybox.stop($slide); - - //effectClassName = "fancybox-animated fancybox-slide--" + (slide.pos >= self.prevPos ? "next" : "previous") + " fancybox-fx-" + effect; - effectClassName = "fancybox-slide--" + (slide.pos >= self.prevPos ? "next" : "previous") + " fancybox-animated fancybox-fx-" + effect; - $slide.addClass(effectClassName).removeClass("fancybox-slide--current"); //.addClass(effectClassName); - - slide.$content.removeClass("fancybox-is-hidden"); - - // Force reflow - forceRedraw($slide); - if (slide.type !== "image") { - slide.$content.hide().show(0); - } - $.fancybox.animate($slide, "fancybox-slide--current", duration, function () { - $slide.removeClass(effectClassName).css({ - transform: "", - opacity: "" - }); - if (slide.pos === self.currPos) { - self.complete(); - } - }, true); - }, - // Check if we can and have to zoom from thumbnail - //================================================ - - getThumbPos: function getThumbPos(slide) { - var rez = false, - $thumb = slide.$thumb, - thumbPos, - btw, - brw, - bbw, - blw; - if (!$thumb || !inViewport($thumb[0])) { - return false; - } - thumbPos = $.fancybox.getTranslate($thumb); - btw = parseFloat($thumb.css("border-top-width") || 0); - brw = parseFloat($thumb.css("border-right-width") || 0); - bbw = parseFloat($thumb.css("border-bottom-width") || 0); - blw = parseFloat($thumb.css("border-left-width") || 0); - rez = { - top: thumbPos.top + btw, - left: thumbPos.left + blw, - width: thumbPos.width - brw - blw, - height: thumbPos.height - btw - bbw, - scaleX: 1, - scaleY: 1 - }; - return thumbPos.width > 0 && thumbPos.height > 0 ? rez : false; - }, - // Final adjustments after current gallery item is moved to position - // and it`s content is loaded - // ================================================================== - - complete: function complete() { - var self = this, - current = self.current, - slides = {}, - $el; - if (self.isMoved() || !current.isLoaded) { - return; - } - if (!current.isComplete) { - current.isComplete = true; - current.$slide.siblings().trigger("onReset"); - self.preload("inline"); - - // Trigger any CSS transiton inside the slide - forceRedraw(current.$slide); - current.$slide.addClass("fancybox-slide--complete"); - - // Remove unnecessary slides - $.each(self.slides, function (key, slide) { - if (slide.pos >= self.currPos - 1 && slide.pos <= self.currPos + 1) { - slides[slide.pos] = slide; - } else if (slide) { - $.fancybox.stop(slide.$slide); - slide.$slide.off().remove(); - } - }); - self.slides = slides; - } - self.isAnimating = false; - self.updateCursor(); - self.trigger("afterShow"); - - // Autoplay first html5 video/audio - if (!!current.opts.video.autoStart) { - current.$slide.find("video,audio").filter(":visible:first").trigger("play").one("ended", function () { - if (Document.exitFullscreen) { - Document.exitFullscreen(); - } else if (this.webkitExitFullscreen) { - this.webkitExitFullscreen(); - } - self.next(); - }); - } - - // Try to focus on the first focusable element - if (current.opts.autoFocus && current.contentType === "html") { - // Look for the first input with autofocus attribute - $el = current.$content.find("input[autofocus]:enabled:visible:first"); - if ($el.length) { - $el.trigger("focus"); - } else { - self.focus(null, true); - } - } - - // Avoid jumping - current.$slide.scrollTop(0).scrollLeft(0); - }, - // Preload next and previous slides - // ================================ - - preload: function preload(type) { - var self = this, - prev, - next; - if (self.group.length < 2) { - return; - } - next = self.slides[self.currPos + 1]; - prev = self.slides[self.currPos - 1]; - if (prev && prev.type === type) { - self.loadSlide(prev); - } - if (next && next.type === type) { - self.loadSlide(next); - } - }, - // Try to find and focus on the first focusable element - // ==================================================== - - focus: function focus(e, firstRun) { - var self = this, - focusableStr = ["a[href]", "area[href]", 'input:not([disabled]):not([type="hidden"]):not([aria-hidden])', "select:not([disabled]):not([aria-hidden])", "textarea:not([disabled]):not([aria-hidden])", "button:not([disabled]):not([aria-hidden])", "iframe", "object", "embed", "video", "audio", "[contenteditable]", '[tabindex]:not([tabindex^="-"])'].join(","), - focusableItems, - focusedItemIndex; - if (self.isClosing) { - return; - } - if (e || !self.current || !self.current.isComplete) { - // Focus on any element inside fancybox - focusableItems = self.$refs.container.find("*:visible"); - } else { - // Focus inside current slide - focusableItems = self.current.$slide.find("*:visible" + (firstRun ? ":not(.fancybox-close-small)" : "")); - } - focusableItems = focusableItems.filter(focusableStr).filter(function () { - return $(this).css("visibility") !== "hidden" && !$(this).hasClass("disabled"); - }); - if (focusableItems.length) { - focusedItemIndex = focusableItems.index(document.activeElement); - if (e && e.shiftKey) { - // Back tab - if (focusedItemIndex < 0 || focusedItemIndex == 0) { - e.preventDefault(); - focusableItems.eq(focusableItems.length - 1).trigger("focus"); - } - } else { - // Outside or Forward tab - if (focusedItemIndex < 0 || focusedItemIndex == focusableItems.length - 1) { - if (e) { - e.preventDefault(); - } - focusableItems.eq(0).trigger("focus"); - } - } - } else { - self.$refs.container.trigger("focus"); - } - }, - // Activates current instance - brings container to the front and enables keyboard, - // notifies other instances about deactivating - // ================================================================================= - - activate: function activate() { - var self = this; - - // Deactivate all instances - $(".fancybox-container").each(function () { - var instance = $(this).data("FancyBox"); - - // Skip self and closing instances - if (instance && instance.id !== self.id && !instance.isClosing) { - instance.trigger("onDeactivate"); - instance.removeEvents(); - instance.isVisible = false; - } - }); - self.isVisible = true; - if (self.current || self.isIdle) { - self.update(); - self.updateControls(); - } - self.trigger("onActivate"); - self.addEvents(); - }, - // Start closing procedure - // This will start "zoom-out" animation if needed and clean everything up afterwards - // ================================================================================= - - close: function close(e, d) { - var self = this, - current = self.current, - effect, - duration, - $content, - domRect, - opacity, - start, - end; - var done = function done() { - self.cleanUp(e); - }; - if (self.isClosing) { - return false; - } - self.isClosing = true; - - // If beforeClose callback prevents closing, make sure content is centered - if (self.trigger("beforeClose", e) === false) { - self.isClosing = false; - requestAFrame(function () { - self.update(); - }); - return false; - } - - // Remove all events - // If there are multiple instances, they will be set again by "activate" method - self.removeEvents(); - $content = current.$content; - effect = current.opts.animationEffect; - duration = $.isNumeric(d) ? d : effect ? current.opts.animationDuration : 0; - current.$slide.removeClass("fancybox-slide--complete fancybox-slide--next fancybox-slide--previous fancybox-animated"); - if (e !== true) { - $.fancybox.stop(current.$slide); - } else { - effect = false; - } - - // Remove other slides - current.$slide.siblings().trigger("onReset").remove(); - - // Trigger animations - if (duration) { - self.$refs.container.removeClass("fancybox-is-open").addClass("fancybox-is-closing").css("transition-duration", duration + "ms"); - } - - // Clean up - self.hideLoading(current); - self.hideControls(true); - self.updateCursor(); - - // Check if possible to zoom-out - if (effect === "zoom" && !($content && duration && current.type === "image" && !self.isMoved() && !current.hasError && (end = self.getThumbPos(current)))) { - effect = "fade"; - } - if (effect === "zoom") { - $.fancybox.stop($content); - domRect = $.fancybox.getTranslate($content); - start = { - top: domRect.top, - left: domRect.left, - scaleX: domRect.width / end.width, - scaleY: domRect.height / end.height, - width: end.width, - height: end.height - }; - - // Check if we need to animate opacity - opacity = current.opts.zoomOpacity; - if (opacity == "auto") { - opacity = Math.abs(current.width / current.height - end.width / end.height) > 0.1; - } - if (opacity) { - end.opacity = 0; - } - $.fancybox.setTranslate($content, start); - forceRedraw($content); - $.fancybox.animate($content, end, duration, done); - return true; - } - if (effect && duration) { - $.fancybox.animate(current.$slide.addClass("fancybox-slide--previous").removeClass("fancybox-slide--current"), "fancybox-animated fancybox-fx-" + effect, duration, done); - } else { - // If skip animation - if (e === true) { - setTimeout(done, duration); - } else { - done(); - } - } - return true; - }, - // Final adjustments after removing the instance - // ============================================= - - cleanUp: function cleanUp(e) { - var self = this, - instance, - $focus = self.current.opts.$orig, - x, - y; - self.current.$slide.trigger("onReset"); - self.$refs.container.empty().remove(); - self.trigger("afterClose", e); - - // Place back focus - if (!!self.current.opts.backFocus) { - if (!$focus || !$focus.length || !$focus.is(":visible")) { - $focus = self.$trigger; - } - if ($focus && $focus.length) { - x = window.scrollX; - y = window.scrollY; - $focus.trigger("focus"); - $("html, body").scrollTop(y).scrollLeft(x); - } - } - self.current = null; - - // Check if there are other instances - instance = $.fancybox.getInstance(); - if (instance) { - instance.activate(); - } else { - $("body").removeClass("fancybox-active compensate-for-scrollbar"); - $("#fancybox-style-noscroll").remove(); - } - }, - // Call callback and trigger an event - // ================================== - - trigger: function trigger(name, slide) { - var args = Array.prototype.slice.call(arguments, 1), - self = this, - obj = slide && slide.opts ? slide : self.current, - rez; - if (obj) { - args.unshift(obj); - } else { - obj = self; - } - args.unshift(self); - if ($.isFunction(obj.opts[name])) { - rez = obj.opts[name].apply(obj, args); - } - if (rez === false) { - return rez; - } - if (name === "afterClose" || !self.$refs) { - $D.trigger(name + ".fb", args); - } else { - self.$refs.container.trigger(name + ".fb", args); - } - }, - // Update infobar values, navigation button states and reveal caption - // ================================================================== - - updateControls: function updateControls() { - var self = this, - current = self.current, - index = current.index, - $container = self.$refs.container, - $caption = self.$refs.caption, - caption = current.opts.caption; - - // Recalculate content dimensions - current.$slide.trigger("refresh"); - - // Set caption - if (caption && caption.length) { - self.$caption = $caption; - $caption.children().eq(0).html(caption); - } else { - self.$caption = null; - } - if (!self.hasHiddenControls && !self.isIdle) { - self.showControls(); - } - - // Update info and navigation elements - $container.find("[data-fancybox-count]").html(self.group.length); - $container.find("[data-fancybox-index]").html(index + 1); - $container.find("[data-fancybox-prev]").prop("disabled", !current.opts.loop && index <= 0); - $container.find("[data-fancybox-next]").prop("disabled", !current.opts.loop && index >= self.group.length - 1); - if (current.type === "image") { - // Re-enable buttons; update download button source - $container.find("[data-fancybox-zoom]").show().end().find("[data-fancybox-download]").attr("href", current.opts.image.src || current.src).show(); - } else if (current.opts.toolbar) { - $container.find("[data-fancybox-download],[data-fancybox-zoom]").hide(); - } - - // Make sure focus is not on disabled button/element - if ($(document.activeElement).is(":hidden,[disabled]")) { - self.$refs.container.trigger("focus"); - } - }, - // Hide toolbar and caption - // ======================== - - hideControls: function hideControls(andCaption) { - var self = this, - arr = ["infobar", "toolbar", "nav"]; - if (andCaption || !self.current.opts.preventCaptionOverlap) { - arr.push("caption"); - } - this.$refs.container.removeClass(arr.map(function (i) { - return "fancybox-show-" + i; - }).join(" ")); - this.hasHiddenControls = true; - }, - showControls: function showControls() { - var self = this, - opts = self.current ? self.current.opts : self.opts, - $container = self.$refs.container; - self.hasHiddenControls = false; - self.idleSecondsCounter = 0; - $container.toggleClass("fancybox-show-toolbar", !!(opts.toolbar && opts.buttons)).toggleClass("fancybox-show-infobar", !!(opts.infobar && self.group.length > 1)).toggleClass("fancybox-show-caption", !!self.$caption).toggleClass("fancybox-show-nav", !!(opts.arrows && self.group.length > 1)).toggleClass("fancybox-is-modal", !!opts.modal); - }, - // Toggle toolbar and caption - // ========================== - - toggleControls: function toggleControls() { - if (this.hasHiddenControls) { - this.showControls(); - } else { - this.hideControls(); - } - } - }); - $.fancybox = { - version: "3.5.7", - defaults: defaults, - // Get current instance and execute a command. - // - // Examples of usage: - // - // $instance = $.fancybox.getInstance(); - // $.fancybox.getInstance().jumpTo( 1 ); - // $.fancybox.getInstance( 'jumpTo', 1 ); - // $.fancybox.getInstance( function() { - // console.info( this.currIndex ); - // }); - // ====================================================== - - getInstance: function getInstance(command) { - var instance = $('.fancybox-container:not(".fancybox-is-closing"):last').data("FancyBox"), - args = Array.prototype.slice.call(arguments, 1); - if (instance instanceof FancyBox) { - if ($.type(command) === "string") { - instance[command].apply(instance, args); - } else if ($.type(command) === "function") { - command.apply(instance, args); - } - return instance; - } - return false; - }, - // Create new instance - // =================== - - open: function open(items, opts, index) { - return new FancyBox(items, opts, index); - }, - // Close current or all instances - // ============================== - - close: function close(all) { - var instance = this.getInstance(); - if (instance) { - instance.close(); - - // Try to find and close next instance - if (all === true) { - this.close(all); - } - } - }, - // Close all instances and unbind all events - // ========================================= - - destroy: function destroy() { - this.close(true); - $D.add("body").off("click.fb-start", "**"); - }, - // Try to detect mobile devices - // ============================ - - isMobile: /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent), - // Detect if 'translate3d' support is available - // ============================================ - - use3d: function () { - var div = document.createElement("div"); - return window.getComputedStyle && window.getComputedStyle(div) && window.getComputedStyle(div).getPropertyValue("transform") && !(document.documentMode && document.documentMode < 11); - }(), - // Helper function to get current visual state of an element - // returns array[ top, left, horizontal-scale, vertical-scale, opacity ] - // ===================================================================== - - getTranslate: function getTranslate($el) { - var domRect; - if (!$el || !$el.length) { - return false; - } - domRect = $el[0].getBoundingClientRect(); - return { - top: domRect.top || 0, - left: domRect.left || 0, - width: domRect.width, - height: domRect.height, - opacity: parseFloat($el.css("opacity")) - }; - }, - // Shortcut for setting "translate3d" properties for element - // Can set be used to set opacity, too - // ======================================================== - - setTranslate: function setTranslate($el, props) { - var str = "", - css = {}; - if (!$el || !props) { - return; - } - if (props.left !== undefined || props.top !== undefined) { - str = (props.left === undefined ? $el.position().left : props.left) + "px, " + (props.top === undefined ? $el.position().top : props.top) + "px"; - if (this.use3d) { - str = "translate3d(" + str + ", 0px)"; - } else { - str = "translate(" + str + ")"; - } - } - if (props.scaleX !== undefined && props.scaleY !== undefined) { - str += " scale(" + props.scaleX + ", " + props.scaleY + ")"; - } else if (props.scaleX !== undefined) { - str += " scaleX(" + props.scaleX + ")"; - } - if (str.length) { - css.transform = str; - } - if (props.opacity !== undefined) { - css.opacity = props.opacity; - } - if (props.width !== undefined) { - css.width = props.width; - } - if (props.height !== undefined) { - css.height = props.height; - } - return $el.css(css); - }, - // Simple CSS transition handler - // ============================= - - animate: function animate($el, to, duration, callback, leaveAnimationName) { - var self = this, - from; - if ($.isFunction(duration)) { - callback = duration; - duration = null; - } - self.stop($el); - from = self.getTranslate($el); - $el.on(transitionEnd, function (e) { - // Skip events from child elements and z-index change - if (e && e.originalEvent && (!$el.is(e.originalEvent.target) || e.originalEvent.propertyName == "z-index")) { - return; - } - self.stop($el); - if ($.isNumeric(duration)) { - $el.css("transition-duration", ""); - } - if ($.isPlainObject(to)) { - if (to.scaleX !== undefined && to.scaleY !== undefined) { - self.setTranslate($el, { - top: to.top, - left: to.left, - width: from.width * to.scaleX, - height: from.height * to.scaleY, - scaleX: 1, - scaleY: 1 - }); - } - } else if (leaveAnimationName !== true) { - $el.removeClass(to); - } - if ($.isFunction(callback)) { - callback(e); - } - }); - if ($.isNumeric(duration)) { - $el.css("transition-duration", duration + "ms"); - } - - // Start animation by changing CSS properties or class name - if ($.isPlainObject(to)) { - if (to.scaleX !== undefined && to.scaleY !== undefined) { - delete to.width; - delete to.height; - if ($el.parent().hasClass("fancybox-slide--image")) { - $el.parent().addClass("fancybox-is-scaling"); - } - } - $.fancybox.setTranslate($el, to); - } else { - $el.addClass(to); - } - - // Make sure that `transitionend` callback gets fired - $el.data("timer", setTimeout(function () { - $el.trigger(transitionEnd); - }, duration + 33)); - }, - stop: function stop($el, callCallback) { - if ($el && $el.length) { - clearTimeout($el.data("timer")); - if (callCallback) { - $el.trigger(transitionEnd); - } - $el.off(transitionEnd).css("transition-duration", ""); - $el.parent().removeClass("fancybox-is-scaling"); - } - } - }; - - // Default click handler for "fancyboxed" links - // ============================================ - - function _run(e, opts) { - var items = [], - index = 0, - $target, - value, - instance; - - // Avoid opening multiple times - if (e && e.isDefaultPrevented()) { - return; - } - e.preventDefault(); - opts = opts || {}; - if (e && e.data) { - opts = mergeOpts(e.data.options, opts); - } - $target = opts.$target || $(e.currentTarget).trigger("blur"); - instance = $.fancybox.getInstance(); - if (instance && instance.$trigger && instance.$trigger.is($target)) { - return; - } - if (opts.selector) { - items = $(opts.selector); - } else { - // Get all related items and find index for clicked one - value = $target.attr("data-fancybox") || ""; - if (value) { - items = e.data ? e.data.items : []; - items = items.length ? items.filter('[data-fancybox="' + value + '"]') : $('[data-fancybox="' + value + '"]'); - } else { - items = [$target]; - } - } - index = $(items).index($target); - - // Sometimes current item can not be found - if (index < 0) { - index = 0; - } - instance = $.fancybox.open(items, opts, index); - - // Save last active element - instance.$trigger = $target; - } - - // Create a jQuery plugin - // ====================== - - $.fn.fancybox = function (options) { - var selector; - options = options || {}; - selector = options.selector || false; - if (selector) { - // Use body element instead of document so it executes first - $("body").off("click.fb-start", selector).on("click.fb-start", selector, { - options: options - }, _run); - } else { - this.off("click.fb-start").on("click.fb-start", { - items: this, - options: options - }, _run); - } - return this; - }; - - // Self initializing plugin for all elements having `data-fancybox` attribute - // ========================================================================== - - $D.on("click.fb-start", "[data-fancybox]", _run); - - // Enable "trigger elements" - // ========================= - - $D.on("click.fb-start", "[data-fancybox-trigger]", function (e) { - $('[data-fancybox="' + $(this).attr("data-fancybox-trigger") + '"]').eq($(this).attr("data-fancybox-index") || 0).trigger("click.fb-start", { - $trigger: $(this) - }); - }); - - // Track focus event for better accessibility styling - // ================================================== - (function () { - var buttonStr = ".fancybox-button", - focusStr = "fancybox-focus", - $pressed = null; - $D.on("mousedown mouseup focus blur", buttonStr, function (e) { - switch (e.type) { - case "mousedown": - $pressed = $(this); - break; - case "mouseup": - $pressed = null; - break; - case "focusin": - $(buttonStr).removeClass(focusStr); - if (!$(this).is($pressed) && !$(this).is("[disabled]")) { - $(this).addClass(focusStr); - } - break; - case "focusout": - $(buttonStr).removeClass(focusStr); - break; - } - }); - })(); -})(window, document, jQuery); -// ========================================================================== -// -// Media -// Adds additional media type support -// -// ========================================================================== -(function ($) { - "use strict"; - - // Object containing properties for each media type - var defaults = { - youtube: { - matcher: /(youtube\.com|youtu\.be|youtube\-nocookie\.com)\/(watch\?(.*&)?v=|v\/|u\/|embed\/?)?(videoseries\?list=(.*)|[\w-]{11}|\?listType=(.*)&list=(.*))(.*)/i, - params: { - autoplay: 1, - autohide: 1, - fs: 1, - rel: 0, - hd: 1, - wmode: "transparent", - enablejsapi: 1, - html5: 1 - }, - paramPlace: 8, - type: "iframe", - url: "https://www.youtube-nocookie.com/embed/$4", - thumb: "https://img.youtube.com/vi/$4/hqdefault.jpg" - }, - vimeo: { - matcher: /^.+vimeo.com\/(.*\/)?([\d]+)(.*)?/, - params: { - autoplay: 1, - hd: 1, - show_title: 1, - show_byline: 1, - show_portrait: 0, - fullscreen: 1 - }, - paramPlace: 3, - type: "iframe", - url: "//player.vimeo.com/video/$2" - }, - instagram: { - matcher: /(instagr\.am|instagram\.com)\/p\/([a-zA-Z0-9_\-]+)\/?/i, - type: "image", - url: "//$1/p/$2/media/?size=l" - }, - // Examples: - // http://maps.google.com/?ll=48.857995,2.294297&spn=0.007666,0.021136&t=m&z=16 - // https://www.google.com/maps/@37.7852006,-122.4146355,14.65z - // https://www.google.com/maps/@52.2111123,2.9237542,6.61z?hl=en - // https://www.google.com/maps/place/Googleplex/@37.4220041,-122.0833494,17z/data=!4m5!3m4!1s0x0:0x6c296c66619367e0!8m2!3d37.4219998!4d-122.0840572 - gmap_place: { - matcher: /(maps\.)?google\.([a-z]{2,3}(\.[a-z]{2})?)\/(((maps\/(place\/(.*)\/)?\@(.*),(\d+.?\d+?)z))|(\?ll=))(.*)?/i, - type: "iframe", - url: function url(rez) { - return "//maps.google." + rez[2] + "/?ll=" + (rez[9] ? rez[9] + "&z=" + Math.floor(rez[10]) + (rez[12] ? rez[12].replace(/^\//, "&") : "") : rez[12] + "").replace(/\?/, "&") + "&output=" + (rez[12] && rez[12].indexOf("layer=c") > 0 ? "svembed" : "embed"); - } - }, - // Examples: - // https://www.google.com/maps/search/Empire+State+Building/ - // https://www.google.com/maps/search/?api=1&query=centurylink+field - // https://www.google.com/maps/search/?api=1&query=47.5951518,-122.3316393 - gmap_search: { - matcher: /(maps\.)?google\.([a-z]{2,3}(\.[a-z]{2})?)\/(maps\/search\/)(.*)/i, - type: "iframe", - url: function url(rez) { - return "//maps.google." + rez[2] + "/maps?q=" + rez[5].replace("query=", "q=").replace("api=1", "") + "&output=embed"; - } - } - }; - - // Formats matching url to final form - var format = function format(url, rez, params) { - if (!url) { - return; - } - params = params || ""; - if ($.type(params) === "object") { - params = $.param(params, true); - } - $.each(rez, function (key, value) { - url = url.replace("$" + key, value || ""); - }); - if (params.length) { - url += (url.indexOf("?") > 0 ? "&" : "?") + params; - } - return url; - }; - $(document).on("objectNeedsType.fb", function (e, instance, item) { - var url = item.src || "", - type = false, - media, - thumb, - rez, - params, - urlParams, - paramObj, - provider; - media = $.extend(true, {}, defaults, item.opts.media); - - // Look for any matching media type - $.each(media, function (providerName, providerOpts) { - rez = url.match(providerOpts.matcher); - if (!rez) { - return; - } - type = providerOpts.type; - provider = providerName; - paramObj = {}; - if (providerOpts.paramPlace && rez[providerOpts.paramPlace]) { - urlParams = rez[providerOpts.paramPlace]; - if (urlParams[0] == "?") { - urlParams = urlParams.substring(1); - } - urlParams = urlParams.split("&"); - for (var m = 0; m < urlParams.length; ++m) { - var p = urlParams[m].split("=", 2); - if (p.length == 2) { - paramObj[p[0]] = decodeURIComponent(p[1].replace(/\+/g, " ")); - } - } - } - params = $.extend(true, {}, providerOpts.params, item.opts[providerName], paramObj); - url = $.type(providerOpts.url) === "function" ? providerOpts.url.call(this, rez, params, item) : format(providerOpts.url, rez, params); - thumb = $.type(providerOpts.thumb) === "function" ? providerOpts.thumb.call(this, rez, params, item) : format(providerOpts.thumb, rez); - if (providerName === "youtube") { - url = url.replace(/&t=((\d+)m)?(\d+)s/, function (match, p1, m, s) { - return "&start=" + ((m ? parseInt(m, 10) * 60 : 0) + parseInt(s, 10)); - }); - } else if (providerName === "vimeo") { - url = url.replace("&%23", "#"); - } - return false; - }); - - // If it is found, then change content type and update the url - - if (type) { - if (!item.opts.thumb && !(item.opts.$thumb && item.opts.$thumb.length)) { - item.opts.thumb = thumb; - } - if (type === "iframe") { - item.opts = $.extend(true, item.opts, { - iframe: { - preload: false, - attr: { - scrolling: "no" - } - } - }); - } - $.extend(item, { - type: type, - src: url, - origSrc: item.src, - contentSource: provider, - contentType: type === "image" ? "image" : provider == "gmap_place" || provider == "gmap_search" ? "map" : "video" - }); - } else if (url) { - item.type = item.opts.defaultType; - } - }); - - // Load YouTube/Video API on request to detect when video finished playing - var VideoAPILoader = { - youtube: { - src: "https://www.youtube.com/iframe_api", - class: "YT", - loading: false, - loaded: false - }, - vimeo: { - src: "https://player.vimeo.com/api/player.js", - class: "Vimeo", - loading: false, - loaded: false - }, - load: function load(vendor) { - var _this = this, - script; - if (this[vendor].loaded) { - setTimeout(function () { - _this.done(vendor); - }); - return; - } - if (this[vendor].loading) { - return; - } - this[vendor].loading = true; - script = document.createElement("script"); - script.type = "text/javascript"; - script.src = this[vendor].src; - if (vendor === "youtube") { - window.onYouTubeIframeAPIReady = function () { - _this[vendor].loaded = true; - _this.done(vendor); - }; - } else { - script.onload = function () { - _this[vendor].loaded = true; - _this.done(vendor); - }; - } - document.body.appendChild(script); - }, - done: function done(vendor) { - var instance, $el, player; - if (vendor === "youtube") { - delete window.onYouTubeIframeAPIReady; - } - instance = $.fancybox.getInstance(); - if (instance) { - $el = instance.current.$content.find("iframe"); - if (vendor === "youtube" && YT !== undefined && YT) { - player = new YT.Player($el.attr("id"), { - events: { - onStateChange: function onStateChange(e) { - if (e.data == 0) { - instance.next(); - } - } - } - }); - } else if (vendor === "vimeo" && Vimeo !== undefined && Vimeo) { - player = new Vimeo.Player($el); - player.on("ended", function () { - instance.next(); - }); - } - } - } - }; - $(document).on({ - "afterShow.fb": function afterShowFb(e, instance, current) { - if (instance.group.length > 1 && (current.contentSource === "youtube" || current.contentSource === "vimeo")) { - VideoAPILoader.load(current.contentSource); - } - } - }); -})(jQuery); -// ========================================================================== -// -// Guestures -// Adds touch guestures, handles click and tap events -// -// ========================================================================== -(function (window, document, $) { - "use strict"; - - var requestAFrame = function () { - return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || - // if all else fails, use setTimeout - function (callback) { - return window.setTimeout(callback, 1000 / 60); - }; - }(); - var cancelAFrame = function () { - return window.cancelAnimationFrame || window.webkitCancelAnimationFrame || window.mozCancelAnimationFrame || window.oCancelAnimationFrame || function (id) { - window.clearTimeout(id); - }; - }(); - var getPointerXY = function getPointerXY(e) { - var result = []; - e = e.originalEvent || e || window.e; - e = e.touches && e.touches.length ? e.touches : e.changedTouches && e.changedTouches.length ? e.changedTouches : [e]; - for (var key in e) { - if (e[key].pageX) { - result.push({ - x: e[key].pageX, - y: e[key].pageY - }); - } else if (e[key].clientX) { - result.push({ - x: e[key].clientX, - y: e[key].clientY - }); - } - } - return result; - }; - var distance = function distance(point2, point1, what) { - if (!point1 || !point2) { - return 0; - } - if (what === "x") { - return point2.x - point1.x; - } else if (what === "y") { - return point2.y - point1.y; - } - return Math.sqrt(Math.pow(point2.x - point1.x, 2) + Math.pow(point2.y - point1.y, 2)); - }; - var isClickable = function isClickable($el) { - if ($el.is('a,area,button,[role="button"],input,label,select,summary,textarea,video,audio,iframe') || $.isFunction($el.get(0).onclick) || $el.data("selectable")) { - return true; - } - - // Check for attributes like data-fancybox-next or data-fancybox-close - for (var i = 0, atts = $el[0].attributes, n = atts.length; i < n; i++) { - if (atts[i].nodeName.substr(0, 14) === "data-fancybox-") { - return true; - } - } - return false; - }; - var hasScrollbars = function hasScrollbars(el) { - var overflowY = window.getComputedStyle(el)["overflow-y"], - overflowX = window.getComputedStyle(el)["overflow-x"], - vertical = (overflowY === "scroll" || overflowY === "auto") && el.scrollHeight > el.clientHeight, - horizontal = (overflowX === "scroll" || overflowX === "auto") && el.scrollWidth > el.clientWidth; - return vertical || horizontal; - }; - var isScrollable = function isScrollable($el) { - var rez = false; - while (true) { - rez = hasScrollbars($el.get(0)); - if (rez) { - break; - } - $el = $el.parent(); - if (!$el.length || $el.hasClass("fancybox-stage") || $el.is("body")) { - break; - } - } - return rez; - }; - var Guestures = function Guestures(instance) { - var self = this; - self.instance = instance; - self.$bg = instance.$refs.bg; - self.$stage = instance.$refs.stage; - self.$container = instance.$refs.container; - self.destroy(); - self.$container.on("touchstart.fb.touch mousedown.fb.touch", $.proxy(self, "ontouchstart")); - }; - Guestures.prototype.destroy = function () { - var self = this; - self.$container.off(".fb.touch"); - $(document).off(".fb.touch"); - if (self.requestId) { - cancelAFrame(self.requestId); - self.requestId = null; - } - if (self.tapped) { - clearTimeout(self.tapped); - self.tapped = null; - } - }; - Guestures.prototype.ontouchstart = function (e) { - var self = this, - $target = $(e.target), - instance = self.instance, - current = instance.current, - $slide = current.$slide, - $content = current.$content, - isTouchDevice = e.type == "touchstart"; - - // Do not respond to both (touch and mouse) events - if (isTouchDevice) { - self.$container.off("mousedown.fb.touch"); - } - - // Ignore right click - if (e.originalEvent && e.originalEvent.button == 2) { - return; - } - - // Ignore taping on links, buttons, input elements - if (!$slide.length || !$target.length || isClickable($target) || isClickable($target.parent())) { - return; - } - // Ignore clicks on the scrollbar - if (!$target.is("img") && e.originalEvent.clientX > $target[0].clientWidth + $target.offset().left) { - return; - } - - // Ignore clicks while zooming or closing - if (!current || instance.isAnimating || current.$slide.hasClass("fancybox-animated")) { - e.stopPropagation(); - e.preventDefault(); - return; - } - self.realPoints = self.startPoints = getPointerXY(e); - if (!self.startPoints.length) { - return; - } - - // Allow other scripts to catch touch event if "touch" is set to false - if (current.touch) { - e.stopPropagation(); - } - self.startEvent = e; - self.canTap = true; - self.$target = $target; - self.$content = $content; - self.opts = current.opts.touch; - self.isPanning = false; - self.isSwiping = false; - self.isZooming = false; - self.isScrolling = false; - self.canPan = instance.canPan(); - self.startTime = new Date().getTime(); - self.distanceX = self.distanceY = self.distance = 0; - self.canvasWidth = Math.round($slide[0].clientWidth); - self.canvasHeight = Math.round($slide[0].clientHeight); - self.contentLastPos = null; - self.contentStartPos = $.fancybox.getTranslate(self.$content) || { - top: 0, - left: 0 - }; - self.sliderStartPos = $.fancybox.getTranslate($slide); - - // Since position will be absolute, but we need to make it relative to the stage - self.stagePos = $.fancybox.getTranslate(instance.$refs.stage); - self.sliderStartPos.top -= self.stagePos.top; - self.sliderStartPos.left -= self.stagePos.left; - self.contentStartPos.top -= self.stagePos.top; - self.contentStartPos.left -= self.stagePos.left; - $(document).off(".fb.touch").on(isTouchDevice ? "touchend.fb.touch touchcancel.fb.touch" : "mouseup.fb.touch mouseleave.fb.touch", $.proxy(self, "ontouchend")).on(isTouchDevice ? "touchmove.fb.touch" : "mousemove.fb.touch", $.proxy(self, "ontouchmove")); - if ($.fancybox.isMobile) { - document.addEventListener("scroll", self.onscroll, true); - } - - // Skip if clicked outside the sliding area - if (!(self.opts || self.canPan) || !($target.is(self.$stage) || self.$stage.find($target).length)) { - if ($target.is(".fancybox-image")) { - e.preventDefault(); - } - if (!($.fancybox.isMobile && $target.parents(".fancybox-caption").length)) { - return; - } - } - self.isScrollable = isScrollable($target) || isScrollable($target.parent()); - - // Check if element is scrollable and try to prevent default behavior (scrolling) - if (!($.fancybox.isMobile && self.isScrollable)) { - e.preventDefault(); - } - - // One finger or mouse click - swipe or pan an image - if (self.startPoints.length === 1 || current.hasError) { - if (self.canPan) { - $.fancybox.stop(self.$content); - self.isPanning = true; - } else { - self.isSwiping = true; - } - self.$container.addClass("fancybox-is-grabbing"); - } - - // Two fingers - zoom image - if (self.startPoints.length === 2 && current.type === "image" && (current.isLoaded || current.$ghost)) { - self.canTap = false; - self.isSwiping = false; - self.isPanning = false; - self.isZooming = true; - $.fancybox.stop(self.$content); - self.centerPointStartX = (self.startPoints[0].x + self.startPoints[1].x) * 0.5 - $(window).scrollLeft(); - self.centerPointStartY = (self.startPoints[0].y + self.startPoints[1].y) * 0.5 - $(window).scrollTop(); - self.percentageOfImageAtPinchPointX = (self.centerPointStartX - self.contentStartPos.left) / self.contentStartPos.width; - self.percentageOfImageAtPinchPointY = (self.centerPointStartY - self.contentStartPos.top) / self.contentStartPos.height; - self.startDistanceBetweenFingers = distance(self.startPoints[0], self.startPoints[1]); - } - }; - Guestures.prototype.onscroll = function (e) { - var self = this; - self.isScrolling = true; - document.removeEventListener("scroll", self.onscroll, true); - }; - Guestures.prototype.ontouchmove = function (e) { - var self = this; - - // Make sure user has not released over iframe or disabled element - if (e.originalEvent.buttons !== undefined && e.originalEvent.buttons === 0) { - self.ontouchend(e); - return; - } - if (self.isScrolling) { - self.canTap = false; - return; - } - self.newPoints = getPointerXY(e); - if (!(self.opts || self.canPan) || !self.newPoints.length || !self.newPoints.length) { - return; - } - if (!(self.isSwiping && self.isSwiping === true)) { - e.preventDefault(); - } - self.distanceX = distance(self.newPoints[0], self.startPoints[0], "x"); - self.distanceY = distance(self.newPoints[0], self.startPoints[0], "y"); - self.distance = distance(self.newPoints[0], self.startPoints[0]); - - // Skip false ontouchmove events (Chrome) - if (self.distance > 0) { - if (self.isSwiping) { - self.onSwipe(e); - } else if (self.isPanning) { - self.onPan(); - } else if (self.isZooming) { - self.onZoom(); - } - } - }; - Guestures.prototype.onSwipe = function (e) { - var self = this, - instance = self.instance, - swiping = self.isSwiping, - left = self.sliderStartPos.left || 0, - angle; - - // If direction is not yet determined - if (swiping === true) { - // We need at least 10px distance to correctly calculate an angle - if (Math.abs(self.distance) > 10) { - self.canTap = false; - if (instance.group.length < 2 && self.opts.vertical) { - self.isSwiping = "y"; - } else if (instance.isDragging || self.opts.vertical === false || self.opts.vertical === "auto" && $(window).width() > 800) { - self.isSwiping = "x"; - } else { - angle = Math.abs(Math.atan2(self.distanceY, self.distanceX) * 180 / Math.PI); - self.isSwiping = angle > 45 && angle < 135 ? "y" : "x"; - } - if (self.isSwiping === "y" && $.fancybox.isMobile && self.isScrollable) { - self.isScrolling = true; - return; - } - instance.isDragging = self.isSwiping; - - // Reset points to avoid jumping, because we dropped first swipes to calculate the angle - self.startPoints = self.newPoints; - $.each(instance.slides, function (index, slide) { - var slidePos, stagePos; - $.fancybox.stop(slide.$slide); - slidePos = $.fancybox.getTranslate(slide.$slide); - stagePos = $.fancybox.getTranslate(instance.$refs.stage); - slide.$slide.css({ - transform: "", - opacity: "", - "transition-duration": "" - }).removeClass("fancybox-animated").removeClass(function (index, className) { - return (className.match(/(^|\s)fancybox-fx-\S+/g) || []).join(" "); - }); - if (slide.pos === instance.current.pos) { - self.sliderStartPos.top = slidePos.top - stagePos.top; - self.sliderStartPos.left = slidePos.left - stagePos.left; - } - $.fancybox.setTranslate(slide.$slide, { - top: slidePos.top - stagePos.top, - left: slidePos.left - stagePos.left - }); - }); - - // Stop slideshow - if (instance.SlideShow && instance.SlideShow.isActive) { - instance.SlideShow.stop(); - } - } - return; - } - - // Sticky edges - if (swiping == "x") { - if (self.distanceX > 0 && (self.instance.group.length < 2 || self.instance.current.index === 0 && !self.instance.current.opts.loop)) { - left = left + Math.pow(self.distanceX, 0.8); - } else if (self.distanceX < 0 && (self.instance.group.length < 2 || self.instance.current.index === self.instance.group.length - 1 && !self.instance.current.opts.loop)) { - left = left - Math.pow(-self.distanceX, 0.8); - } else { - left = left + self.distanceX; - } - } - self.sliderLastPos = { - top: swiping == "x" ? 0 : self.sliderStartPos.top + self.distanceY, - left: left - }; - if (self.requestId) { - cancelAFrame(self.requestId); - self.requestId = null; - } - self.requestId = requestAFrame(function () { - if (self.sliderLastPos) { - $.each(self.instance.slides, function (index, slide) { - var pos = slide.pos - self.instance.currPos; - $.fancybox.setTranslate(slide.$slide, { - top: self.sliderLastPos.top, - left: self.sliderLastPos.left + pos * self.canvasWidth + pos * slide.opts.gutter - }); - }); - self.$container.addClass("fancybox-is-sliding"); - } - }); - }; - Guestures.prototype.onPan = function () { - var self = this; - - // Prevent accidental movement (sometimes, when tapping casually, finger can move a bit) - if (distance(self.newPoints[0], self.realPoints[0]) < ($.fancybox.isMobile ? 10 : 5)) { - self.startPoints = self.newPoints; - return; - } - self.canTap = false; - self.contentLastPos = self.limitMovement(); - if (self.requestId) { - cancelAFrame(self.requestId); - } - self.requestId = requestAFrame(function () { - $.fancybox.setTranslate(self.$content, self.contentLastPos); - }); - }; - - // Make panning sticky to the edges - Guestures.prototype.limitMovement = function () { - var self = this; - var canvasWidth = self.canvasWidth; - var canvasHeight = self.canvasHeight; - var distanceX = self.distanceX; - var distanceY = self.distanceY; - var contentStartPos = self.contentStartPos; - var currentOffsetX = contentStartPos.left; - var currentOffsetY = contentStartPos.top; - var currentWidth = contentStartPos.width; - var currentHeight = contentStartPos.height; - var minTranslateX, minTranslateY, maxTranslateX, maxTranslateY, newOffsetX, newOffsetY; - if (currentWidth > canvasWidth) { - newOffsetX = currentOffsetX + distanceX; - } else { - newOffsetX = currentOffsetX; - } - newOffsetY = currentOffsetY + distanceY; - - // Slow down proportionally to traveled distance - minTranslateX = Math.max(0, canvasWidth * 0.5 - currentWidth * 0.5); - minTranslateY = Math.max(0, canvasHeight * 0.5 - currentHeight * 0.5); - maxTranslateX = Math.min(canvasWidth - currentWidth, canvasWidth * 0.5 - currentWidth * 0.5); - maxTranslateY = Math.min(canvasHeight - currentHeight, canvasHeight * 0.5 - currentHeight * 0.5); - - // -> - if (distanceX > 0 && newOffsetX > minTranslateX) { - newOffsetX = minTranslateX - 1 + Math.pow(-minTranslateX + currentOffsetX + distanceX, 0.8) || 0; - } - - // <- - if (distanceX < 0 && newOffsetX < maxTranslateX) { - newOffsetX = maxTranslateX + 1 - Math.pow(maxTranslateX - currentOffsetX - distanceX, 0.8) || 0; - } - - // \/ - if (distanceY > 0 && newOffsetY > minTranslateY) { - newOffsetY = minTranslateY - 1 + Math.pow(-minTranslateY + currentOffsetY + distanceY, 0.8) || 0; - } - - // /\ - if (distanceY < 0 && newOffsetY < maxTranslateY) { - newOffsetY = maxTranslateY + 1 - Math.pow(maxTranslateY - currentOffsetY - distanceY, 0.8) || 0; - } - return { - top: newOffsetY, - left: newOffsetX - }; - }; - Guestures.prototype.limitPosition = function (newOffsetX, newOffsetY, newWidth, newHeight) { - var self = this; - var canvasWidth = self.canvasWidth; - var canvasHeight = self.canvasHeight; - if (newWidth > canvasWidth) { - newOffsetX = newOffsetX > 0 ? 0 : newOffsetX; - newOffsetX = newOffsetX < canvasWidth - newWidth ? canvasWidth - newWidth : newOffsetX; - } else { - // Center horizontally - newOffsetX = Math.max(0, canvasWidth / 2 - newWidth / 2); - } - if (newHeight > canvasHeight) { - newOffsetY = newOffsetY > 0 ? 0 : newOffsetY; - newOffsetY = newOffsetY < canvasHeight - newHeight ? canvasHeight - newHeight : newOffsetY; - } else { - // Center vertically - newOffsetY = Math.max(0, canvasHeight / 2 - newHeight / 2); - } - return { - top: newOffsetY, - left: newOffsetX - }; - }; - Guestures.prototype.onZoom = function () { - var self = this; - - // Calculate current distance between points to get pinch ratio and new width and height - var contentStartPos = self.contentStartPos; - var currentWidth = contentStartPos.width; - var currentHeight = contentStartPos.height; - var currentOffsetX = contentStartPos.left; - var currentOffsetY = contentStartPos.top; - var endDistanceBetweenFingers = distance(self.newPoints[0], self.newPoints[1]); - var pinchRatio = endDistanceBetweenFingers / self.startDistanceBetweenFingers; - var newWidth = Math.floor(currentWidth * pinchRatio); - var newHeight = Math.floor(currentHeight * pinchRatio); - - // This is the translation due to pinch-zooming - var translateFromZoomingX = (currentWidth - newWidth) * self.percentageOfImageAtPinchPointX; - var translateFromZoomingY = (currentHeight - newHeight) * self.percentageOfImageAtPinchPointY; - - // Point between the two touches - var centerPointEndX = (self.newPoints[0].x + self.newPoints[1].x) / 2 - $(window).scrollLeft(); - var centerPointEndY = (self.newPoints[0].y + self.newPoints[1].y) / 2 - $(window).scrollTop(); - - // And this is the translation due to translation of the centerpoint - // between the two fingers - var translateFromTranslatingX = centerPointEndX - self.centerPointStartX; - var translateFromTranslatingY = centerPointEndY - self.centerPointStartY; - - // The new offset is the old/current one plus the total translation - var newOffsetX = currentOffsetX + (translateFromZoomingX + translateFromTranslatingX); - var newOffsetY = currentOffsetY + (translateFromZoomingY + translateFromTranslatingY); - var newPos = { - top: newOffsetY, - left: newOffsetX, - scaleX: pinchRatio, - scaleY: pinchRatio - }; - self.canTap = false; - self.newWidth = newWidth; - self.newHeight = newHeight; - self.contentLastPos = newPos; - if (self.requestId) { - cancelAFrame(self.requestId); - } - self.requestId = requestAFrame(function () { - $.fancybox.setTranslate(self.$content, self.contentLastPos); - }); - }; - Guestures.prototype.ontouchend = function (e) { - var self = this; - var swiping = self.isSwiping; - var panning = self.isPanning; - var zooming = self.isZooming; - var scrolling = self.isScrolling; - self.endPoints = getPointerXY(e); - self.dMs = Math.max(new Date().getTime() - self.startTime, 1); - self.$container.removeClass("fancybox-is-grabbing"); - $(document).off(".fb.touch"); - document.removeEventListener("scroll", self.onscroll, true); - if (self.requestId) { - cancelAFrame(self.requestId); - self.requestId = null; - } - self.isSwiping = false; - self.isPanning = false; - self.isZooming = false; - self.isScrolling = false; - self.instance.isDragging = false; - if (self.canTap) { - return self.onTap(e); - } - self.speed = 100; - - // Speed in px/ms - self.velocityX = self.distanceX / self.dMs * 0.5; - self.velocityY = self.distanceY / self.dMs * 0.5; - if (panning) { - self.endPanning(); - } else if (zooming) { - self.endZooming(); - } else { - self.endSwiping(swiping, scrolling); - } - }; - Guestures.prototype.endSwiping = function (swiping, scrolling) { - var self = this, - ret = false, - len = self.instance.group.length, - distanceX = Math.abs(self.distanceX), - canAdvance = swiping == "x" && len > 1 && (self.dMs > 130 && distanceX > 10 || distanceX > 50), - speedX = 300; - self.sliderLastPos = null; - - // Close if swiped vertically / navigate if horizontally - if (swiping == "y" && !scrolling && Math.abs(self.distanceY) > 50) { - // Continue vertical movement - $.fancybox.animate(self.instance.current.$slide, { - top: self.sliderStartPos.top + self.distanceY + self.velocityY * 150, - opacity: 0 - }, 200); - ret = self.instance.close(true, 250); - } else if (canAdvance && self.distanceX > 0) { - ret = self.instance.previous(speedX); - } else if (canAdvance && self.distanceX < 0) { - ret = self.instance.next(speedX); - } - if (ret === false && (swiping == "x" || swiping == "y")) { - self.instance.centerSlide(200); - } - self.$container.removeClass("fancybox-is-sliding"); - }; - - // Limit panning from edges - // ======================== - Guestures.prototype.endPanning = function () { - var self = this, - newOffsetX, - newOffsetY, - newPos; - if (!self.contentLastPos) { - return; - } - if (self.opts.momentum === false || self.dMs > 350) { - newOffsetX = self.contentLastPos.left; - newOffsetY = self.contentLastPos.top; - } else { - // Continue movement - newOffsetX = self.contentLastPos.left + self.velocityX * 500; - newOffsetY = self.contentLastPos.top + self.velocityY * 500; - } - newPos = self.limitPosition(newOffsetX, newOffsetY, self.contentStartPos.width, self.contentStartPos.height); - newPos.width = self.contentStartPos.width; - newPos.height = self.contentStartPos.height; - $.fancybox.animate(self.$content, newPos, 366); - }; - Guestures.prototype.endZooming = function () { - var self = this; - var current = self.instance.current; - var newOffsetX, newOffsetY, newPos, reset; - var newWidth = self.newWidth; - var newHeight = self.newHeight; - if (!self.contentLastPos) { - return; - } - newOffsetX = self.contentLastPos.left; - newOffsetY = self.contentLastPos.top; - reset = { - top: newOffsetY, - left: newOffsetX, - width: newWidth, - height: newHeight, - scaleX: 1, - scaleY: 1 - }; - - // Reset scalex/scaleY values; this helps for perfomance and does not break animation - $.fancybox.setTranslate(self.$content, reset); - if (newWidth < self.canvasWidth && newHeight < self.canvasHeight) { - self.instance.scaleToFit(150); - } else if (newWidth > current.width || newHeight > current.height) { - self.instance.scaleToActual(self.centerPointStartX, self.centerPointStartY, 150); - } else { - newPos = self.limitPosition(newOffsetX, newOffsetY, newWidth, newHeight); - $.fancybox.animate(self.$content, newPos, 150); - } - }; - Guestures.prototype.onTap = function (e) { - var self = this; - var $target = $(e.target); - var instance = self.instance; - var current = instance.current; - var endPoints = e && getPointerXY(e) || self.startPoints; - var tapX = endPoints[0] ? endPoints[0].x - $(window).scrollLeft() - self.stagePos.left : 0; - var tapY = endPoints[0] ? endPoints[0].y - $(window).scrollTop() - self.stagePos.top : 0; - var where; - var process = function process(prefix) { - var action = current.opts[prefix]; - if ($.isFunction(action)) { - action = action.apply(instance, [current, e]); - } - if (!action) { - return; - } - switch (action) { - case "close": - instance.close(self.startEvent); - break; - case "toggleControls": - instance.toggleControls(); - break; - case "next": - instance.next(); - break; - case "nextOrClose": - if (instance.group.length > 1) { - instance.next(); - } else { - instance.close(self.startEvent); - } - break; - case "zoom": - if (current.type == "image" && (current.isLoaded || current.$ghost)) { - if (instance.canPan()) { - instance.scaleToFit(); - } else if (instance.isScaledDown()) { - instance.scaleToActual(tapX, tapY); - } else if (instance.group.length < 2) { - instance.close(self.startEvent); - } - } - break; - } - }; - - // Ignore right click - if (e.originalEvent && e.originalEvent.button == 2) { - return; - } - - // Skip if clicked on the scrollbar - if (!$target.is("img") && tapX > $target[0].clientWidth + $target.offset().left) { - return; - } - - // Check where is clicked - if ($target.is(".fancybox-bg,.fancybox-inner,.fancybox-outer,.fancybox-container")) { - where = "Outside"; - } else if ($target.is(".fancybox-slide")) { - where = "Slide"; - } else if (instance.current.$content && instance.current.$content.find($target).addBack().filter($target).length) { - where = "Content"; - } else { - return; - } - - // Check if this is a double tap - if (self.tapped) { - // Stop previously created single tap - clearTimeout(self.tapped); - self.tapped = null; - - // Skip if distance between taps is too big - if (Math.abs(tapX - self.tapX) > 50 || Math.abs(tapY - self.tapY) > 50) { - return this; - } - - // OK, now we assume that this is a double-tap - process("dblclick" + where); - } else { - // Single tap will be processed if user has not clicked second time within 300ms - // or there is no need to wait for double-tap - self.tapX = tapX; - self.tapY = tapY; - if (current.opts["dblclick" + where] && current.opts["dblclick" + where] !== current.opts["click" + where]) { - self.tapped = setTimeout(function () { - self.tapped = null; - if (!instance.isAnimating) { - process("click" + where); - } - }, 500); - } else { - process("click" + where); - } - } - return this; - }; - $(document).on("onActivate.fb", function (e, instance) { - if (instance && !instance.Guestures) { - instance.Guestures = new Guestures(instance); - } - }).on("beforeClose.fb", function (e, instance) { - if (instance && instance.Guestures) { - instance.Guestures.destroy(); - } - }); -})(window, document, jQuery); -// ========================================================================== -// -// SlideShow -// Enables slideshow functionality -// -// Example of usage: -// $.fancybox.getInstance().SlideShow.start() -// -// ========================================================================== -(function (document, $) { - "use strict"; - - $.extend(true, $.fancybox.defaults, { - btnTpl: { - slideShow: '" - }, - slideShow: { - autoStart: false, - speed: 3000, - progress: true - } - }); - var SlideShow = function SlideShow(instance) { - this.instance = instance; - this.init(); - }; - $.extend(SlideShow.prototype, { - timer: null, - isActive: false, - $button: null, - init: function init() { - var self = this, - instance = self.instance, - opts = instance.group[instance.currIndex].opts.slideShow; - self.$button = instance.$refs.toolbar.find("[data-fancybox-play]").on("click", function () { - self.toggle(); - }); - if (instance.group.length < 2 || !opts) { - self.$button.hide(); - } else if (opts.progress) { - self.$progress = $('
').appendTo(instance.$refs.inner); - } - }, - set: function set(force) { - var self = this, - instance = self.instance, - current = instance.current; - - // Check if reached last element - if (current && (force === true || current.opts.loop || instance.currIndex < instance.group.length - 1)) { - if (self.isActive && current.contentType !== "video") { - if (self.$progress) { - $.fancybox.animate(self.$progress.show(), { - scaleX: 1 - }, current.opts.slideShow.speed); - } - self.timer = setTimeout(function () { - if (!instance.current.opts.loop && instance.current.index == instance.group.length - 1) { - instance.jumpTo(0); - } else { - instance.next(); - } - }, current.opts.slideShow.speed); - } - } else { - self.stop(); - instance.idleSecondsCounter = 0; - instance.showControls(); - } - }, - clear: function clear() { - var self = this; - clearTimeout(self.timer); - self.timer = null; - if (self.$progress) { - self.$progress.removeAttr("style").hide(); - } - }, - start: function start() { - var self = this, - current = self.instance.current; - if (current) { - self.$button.attr("title", (current.opts.i18n[current.opts.lang] || current.opts.i18n.en).PLAY_STOP).removeClass("fancybox-button--play").addClass("fancybox-button--pause"); - self.isActive = true; - if (current.isComplete) { - self.set(true); - } - self.instance.trigger("onSlideShowChange", true); - } - }, - stop: function stop() { - var self = this, - current = self.instance.current; - self.clear(); - self.$button.attr("title", (current.opts.i18n[current.opts.lang] || current.opts.i18n.en).PLAY_START).removeClass("fancybox-button--pause").addClass("fancybox-button--play"); - self.isActive = false; - self.instance.trigger("onSlideShowChange", false); - if (self.$progress) { - self.$progress.removeAttr("style").hide(); - } - }, - toggle: function toggle() { - var self = this; - if (self.isActive) { - self.stop(); - } else { - self.start(); - } - } - }); - $(document).on({ - "onInit.fb": function onInitFb(e, instance) { - if (instance && !instance.SlideShow) { - instance.SlideShow = new SlideShow(instance); - } - }, - "beforeShow.fb": function beforeShowFb(e, instance, current, firstRun) { - var SlideShow = instance && instance.SlideShow; - if (firstRun) { - if (SlideShow && current.opts.slideShow.autoStart) { - SlideShow.start(); - } - } else if (SlideShow && SlideShow.isActive) { - SlideShow.clear(); - } - }, - "afterShow.fb": function afterShowFb(e, instance, current) { - var SlideShow = instance && instance.SlideShow; - if (SlideShow && SlideShow.isActive) { - SlideShow.set(); - } - }, - "afterKeydown.fb": function afterKeydownFb(e, instance, current, keypress, keycode) { - var SlideShow = instance && instance.SlideShow; - - // "P" or Spacebar - if (SlideShow && current.opts.slideShow && (keycode === 80 || keycode === 32) && !$(document.activeElement).is("button,a,input")) { - keypress.preventDefault(); - SlideShow.toggle(); - } - }, - "beforeClose.fb onDeactivate.fb": function beforeCloseFbOnDeactivateFb(e, instance) { - var SlideShow = instance && instance.SlideShow; - if (SlideShow) { - SlideShow.stop(); - } - } - }); - - // Page Visibility API to pause slideshow when window is not active - $(document).on("visibilitychange", function () { - var instance = $.fancybox.getInstance(), - SlideShow = instance && instance.SlideShow; - if (SlideShow && SlideShow.isActive) { - if (document.hidden) { - SlideShow.clear(); - } else { - SlideShow.set(); - } - } - }); -})(document, jQuery); -// ========================================================================== -// -// FullScreen -// Adds fullscreen functionality -// -// ========================================================================== -(function (document, $) { - "use strict"; - - // Collection of methods supported by user browser - var fn = function () { - var fnMap = [["requestFullscreen", "exitFullscreen", "fullscreenElement", "fullscreenEnabled", "fullscreenchange", "fullscreenerror"], - // new WebKit - ["webkitRequestFullscreen", "webkitExitFullscreen", "webkitFullscreenElement", "webkitFullscreenEnabled", "webkitfullscreenchange", "webkitfullscreenerror"], - // old WebKit (Safari 5.1) - ["webkitRequestFullScreen", "webkitCancelFullScreen", "webkitCurrentFullScreenElement", "webkitCancelFullScreen", "webkitfullscreenchange", "webkitfullscreenerror"], ["mozRequestFullScreen", "mozCancelFullScreen", "mozFullScreenElement", "mozFullScreenEnabled", "mozfullscreenchange", "mozfullscreenerror"], ["msRequestFullscreen", "msExitFullscreen", "msFullscreenElement", "msFullscreenEnabled", "MSFullscreenChange", "MSFullscreenError"]]; - var ret = {}; - for (var i = 0; i < fnMap.length; i++) { - var val = fnMap[i]; - if (val && val[1] in document) { - for (var j = 0; j < val.length; j++) { - ret[fnMap[0][j]] = val[j]; - } - return ret; - } - } - return false; - }(); - if (fn) { - var FullScreen = { - request: function request(elem) { - elem = elem || document.documentElement; - elem[fn.requestFullscreen](elem.ALLOW_KEYBOARD_INPUT); - }, - exit: function exit() { - document[fn.exitFullscreen](); - }, - toggle: function toggle(elem) { - elem = elem || document.documentElement; - if (this.isFullscreen()) { - this.exit(); - } else { - this.request(elem); - } - }, - isFullscreen: function isFullscreen() { - return Boolean(document[fn.fullscreenElement]); - }, - enabled: function enabled() { - return Boolean(document[fn.fullscreenEnabled]); - } - }; - $.extend(true, $.fancybox.defaults, { - btnTpl: { - fullScreen: '" - }, - fullScreen: { - autoStart: false - } - }); - $(document).on(fn.fullscreenchange, function () { - var isFullscreen = FullScreen.isFullscreen(), - instance = $.fancybox.getInstance(); - if (instance) { - // If image is zooming, then force to stop and reposition properly - if (instance.current && instance.current.type === "image" && instance.isAnimating) { - instance.isAnimating = false; - instance.update(true, true, 0); - if (!instance.isComplete) { - instance.complete(); - } - } - instance.trigger("onFullscreenChange", isFullscreen); - instance.$refs.container.toggleClass("fancybox-is-fullscreen", isFullscreen); - instance.$refs.toolbar.find("[data-fancybox-fullscreen]").toggleClass("fancybox-button--fsenter", !isFullscreen).toggleClass("fancybox-button--fsexit", isFullscreen); - } - }); - } - $(document).on({ - "onInit.fb": function onInitFb(e, instance) { - var $container; - if (!fn) { - instance.$refs.toolbar.find("[data-fancybox-fullscreen]").remove(); - return; - } - if (instance && instance.group[instance.currIndex].opts.fullScreen) { - $container = instance.$refs.container; - $container.on("click.fb-fullscreen", "[data-fancybox-fullscreen]", function (e) { - e.stopPropagation(); - e.preventDefault(); - FullScreen.toggle(); - }); - if (instance.opts.fullScreen && instance.opts.fullScreen.autoStart === true) { - FullScreen.request(); - } - - // Expose API - instance.FullScreen = FullScreen; - } else if (instance) { - instance.$refs.toolbar.find("[data-fancybox-fullscreen]").hide(); - } - }, - "afterKeydown.fb": function afterKeydownFb(e, instance, current, keypress, keycode) { - // "F" - if (instance && instance.FullScreen && keycode === 70) { - keypress.preventDefault(); - instance.FullScreen.toggle(); - } - }, - "beforeClose.fb": function beforeCloseFb(e, instance) { - if (instance && instance.FullScreen && instance.$refs.container.hasClass("fancybox-is-fullscreen")) { - FullScreen.exit(); - } - } - }); -})(document, jQuery); -// ========================================================================== -// -// Thumbs -// Displays thumbnails in a grid -// -// ========================================================================== -(function (document, $) { - "use strict"; - - var CLASS = "fancybox-thumbs", - CLASS_ACTIVE = CLASS + "-active"; - - // Make sure there are default values - $.fancybox.defaults = $.extend(true, { - btnTpl: { - thumbs: '" - }, - thumbs: { - autoStart: false, - // Display thumbnails on opening - hideOnClose: true, - // Hide thumbnail grid when closing animation starts - parentEl: ".fancybox-container", - // Container is injected into this element - axis: "y" // Vertical (y) or horizontal (x) scrolling - } - }, $.fancybox.defaults); - var FancyThumbs = function FancyThumbs(instance) { - this.init(instance); - }; - $.extend(FancyThumbs.prototype, { - $button: null, - $grid: null, - $list: null, - isVisible: false, - isActive: false, - init: function init(instance) { - var self = this, - group = instance.group, - enabled = 0; - self.instance = instance; - self.opts = group[instance.currIndex].opts.thumbs; - instance.Thumbs = self; - self.$button = instance.$refs.toolbar.find("[data-fancybox-thumbs]"); - - // Enable thumbs if at least two group items have thumbnails - for (var i = 0, len = group.length; i < len; i++) { - if (group[i].thumb) { - enabled++; - } - if (enabled > 1) { - break; - } - } - if (enabled > 1 && !!self.opts) { - self.$button.removeAttr("style").on("click", function () { - self.toggle(); - }); - self.isActive = true; - } else { - self.$button.hide(); - } - }, - create: function create() { - var self = this, - instance = self.instance, - parentEl = self.opts.parentEl, - list = [], - src; - if (!self.$grid) { - // Create main element - self.$grid = $('
').appendTo(instance.$refs.container.find(parentEl).addBack().filter(parentEl)); - - // Add "click" event that performs gallery navigation - self.$grid.on("click", "a", function () { - instance.jumpTo($(this).attr("data-index")); - }); - } - - // Build the list - if (!self.$list) { - self.$list = $('
').appendTo(self.$grid); - } - $.each(instance.group, function (i, item) { - src = item.thumb; - if (!src && item.type === "image") { - src = item.src; - } - list.push('"); - }); - self.$list[0].innerHTML = list.join(""); - if (self.opts.axis === "x") { - // Set fixed width for list element to enable horizontal scrolling - self.$list.width(parseInt(self.$grid.css("padding-right"), 10) + instance.group.length * self.$list.children().eq(0).outerWidth(true)); - } - }, - focus: function focus(duration) { - var self = this, - $list = self.$list, - $grid = self.$grid, - thumb, - thumbPos; - if (!self.instance.current) { - return; - } - thumb = $list.children().removeClass(CLASS_ACTIVE).filter('[data-index="' + self.instance.current.index + '"]').addClass(CLASS_ACTIVE); - thumbPos = thumb.position(); - - // Check if need to scroll to make current thumb visible - if (self.opts.axis === "y" && (thumbPos.top < 0 || thumbPos.top > $list.height() - thumb.outerHeight())) { - $list.stop().animate({ - scrollTop: $list.scrollTop() + thumbPos.top - }, duration); - } else if (self.opts.axis === "x" && (thumbPos.left < $grid.scrollLeft() || thumbPos.left > $grid.scrollLeft() + ($grid.width() - thumb.outerWidth()))) { - $list.parent().stop().animate({ - scrollLeft: thumbPos.left - }, duration); - } - }, - update: function update() { - var that = this; - that.instance.$refs.container.toggleClass("fancybox-show-thumbs", this.isVisible); - if (that.isVisible) { - if (!that.$grid) { - that.create(); - } - that.instance.trigger("onThumbsShow"); - that.focus(0); - } else if (that.$grid) { - that.instance.trigger("onThumbsHide"); - } - - // Update content position - that.instance.update(); - }, - hide: function hide() { - this.isVisible = false; - this.update(); - }, - show: function show() { - this.isVisible = true; - this.update(); - }, - toggle: function toggle() { - this.isVisible = !this.isVisible; - this.update(); - } - }); - $(document).on({ - "onInit.fb": function onInitFb(e, instance) { - var Thumbs; - if (instance && !instance.Thumbs) { - Thumbs = new FancyThumbs(instance); - if (Thumbs.isActive && Thumbs.opts.autoStart === true) { - Thumbs.show(); - } - } - }, - "beforeShow.fb": function beforeShowFb(e, instance, item, firstRun) { - var Thumbs = instance && instance.Thumbs; - if (Thumbs && Thumbs.isVisible) { - Thumbs.focus(firstRun ? 0 : 250); - } - }, - "afterKeydown.fb": function afterKeydownFb(e, instance, current, keypress, keycode) { - var Thumbs = instance && instance.Thumbs; - - // "G" - if (Thumbs && Thumbs.isActive && keycode === 71) { - keypress.preventDefault(); - Thumbs.toggle(); - } - }, - "beforeClose.fb": function beforeCloseFb(e, instance) { - var Thumbs = instance && instance.Thumbs; - if (Thumbs && Thumbs.isVisible && Thumbs.opts.hideOnClose !== false) { - Thumbs.$grid.hide(); - } - } - }); -})(document, jQuery); -//// ========================================================================== -// -// Share -// Displays simple form for sharing current url -// -// ========================================================================== -(function (document, $) { - "use strict"; - - $.extend(true, $.fancybox.defaults, { - btnTpl: { - share: '" - }, - share: { - url: function url(instance, item) { - return (!instance.currentHash && !(item.type === "inline" || item.type === "html") ? item.origSrc || item.src : false) || window.location; - }, - tpl: '
' + "

{{SHARE}}

" + "

" + '' + '' + "Facebook" + "" + '' + '' + "Twitter" + "" + '' + '' + "Pinterest" + "" + "

" + '

' + "
" - } - }); - function escapeHtml(string) { - var entityMap = { - "&": "&", - "<": "<", - ">": ">", - '"': """, - "'": "'", - "/": "/", - "`": "`", - "=": "=" - }; - return String(string).replace(/[&<>"'`=\/]/g, function (s) { - return entityMap[s]; - }); - } - $(document).on("click", "[data-fancybox-share]", function () { - var instance = $.fancybox.getInstance(), - current = instance.current || null, - url, - tpl; - if (!current) { - return; - } - if ($.type(current.opts.share.url) === "function") { - url = current.opts.share.url.apply(current, [instance, current]); - } - tpl = current.opts.share.tpl.replace(/\{\{media\}\}/g, current.type === "image" ? encodeURIComponent(current.src) : "").replace(/\{\{url\}\}/g, encodeURIComponent(url)).replace(/\{\{url_raw\}\}/g, escapeHtml(url)).replace(/\{\{descr\}\}/g, instance.$caption ? encodeURIComponent(instance.$caption.text()) : ""); - $.fancybox.open({ - src: instance.translate(instance, tpl), - type: "html", - opts: { - touch: false, - animationEffect: false, - afterLoad: function afterLoad(shareInstance, shareCurrent) { - // Close self if parent instance is closing - instance.$refs.container.one("beforeClose.fb", function () { - shareInstance.close(null, 0); - }); - - // Opening links in a popup window - shareCurrent.$content.find(".fancybox-share__button").click(function () { - window.open(this.href, "Share", "width=550, height=450"); - return false; - }); - }, - mobile: { - autoFocus: false - } - } - }); - }); -})(document, jQuery); -// ========================================================================== -// -// Hash -// Enables linking to each modal -// -// ========================================================================== -(function (window, document, $) { - "use strict"; - - // Simple $.escapeSelector polyfill (for jQuery prior v3) - if (!$.escapeSelector) { - $.escapeSelector = function (sel) { - var rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g; - var fcssescape = function fcssescape(ch, asCodePoint) { - if (asCodePoint) { - // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER - if (ch === "\0") { - return "\uFFFD"; - } - - // Control characters and (dependent upon position) numbers get escaped as code points - return ch.slice(0, -1) + "\\" + ch.charCodeAt(ch.length - 1).toString(16) + " "; - } - - // Other potentially-special ASCII characters get backslash-escaped - return "\\" + ch; - }; - return (sel + "").replace(rcssescape, fcssescape); - }; - } - - // Get info about gallery name and current index from url - function parseUrl() { - var hash = window.location.hash.substr(1), - rez = hash.split("-"), - index = rez.length > 1 && /^\+?\d+$/.test(rez[rez.length - 1]) ? parseInt(rez.pop(-1), 10) || 1 : 1, - gallery = rez.join("-"); - return { - hash: hash, - /* Index is starting from 1 */ - index: index < 1 ? 1 : index, - gallery: gallery - }; - } - - // Trigger click evnt on links to open new fancyBox instance - function triggerFromUrl(url) { - if (url.gallery !== "") { - // If we can find element matching 'data-fancybox' atribute, - // then triggering click event should start fancyBox - $("[data-fancybox='" + $.escapeSelector(url.gallery) + "']").eq(url.index - 1).focus().trigger("click.fb-start"); - } - } - - // Get gallery name from current instance - function getGalleryID(instance) { - var opts, ret; - if (!instance) { - return false; - } - opts = instance.current ? instance.current.opts : instance.opts; - ret = opts.hash || (opts.$orig ? opts.$orig.data("fancybox") || opts.$orig.data("fancybox-trigger") : ""); - return ret === "" ? false : ret; - } - - // Start when DOM becomes ready - $(function () { - // Check if user has disabled this module - if ($.fancybox.defaults.hash === false) { - return; - } - - // Update hash when opening/closing fancyBox - $(document).on({ - "onInit.fb": function onInitFb(e, instance) { - var url, gallery; - if (instance.group[instance.currIndex].opts.hash === false) { - return; - } - url = parseUrl(); - gallery = getGalleryID(instance); - - // Make sure gallery start index matches index from hash - if (gallery && url.gallery && gallery == url.gallery) { - instance.currIndex = url.index - 1; - } - }, - "beforeShow.fb": function beforeShowFb(e, instance, current, firstRun) { - var gallery; - if (!current || current.opts.hash === false) { - return; - } - - // Check if need to update window hash - gallery = getGalleryID(instance); - if (!gallery) { - return; - } - - // Variable containing last hash value set by fancyBox - // It will be used to determine if fancyBox needs to close after hash change is detected - instance.currentHash = gallery + (instance.group.length > 1 ? "-" + (current.index + 1) : ""); - - // If current hash is the same (this instance most likely is opened by hashchange), then do nothing - if (window.location.hash === "#" + instance.currentHash) { - return; - } - if (firstRun && !instance.origHash) { - instance.origHash = window.location.hash; - } - if (instance.hashTimer) { - clearTimeout(instance.hashTimer); - } - - // Update hash - instance.hashTimer = setTimeout(function () { - if ("replaceState" in window.history) { - window.history[firstRun ? "pushState" : "replaceState"]({}, document.title, window.location.pathname + window.location.search + "#" + instance.currentHash); - if (firstRun) { - instance.hasCreatedHistory = true; - } - } else { - window.location.hash = instance.currentHash; - } - instance.hashTimer = null; - }, 300); - }, - "beforeClose.fb": function beforeCloseFb(e, instance, current) { - if (!current || current.opts.hash === false) { - return; - } - clearTimeout(instance.hashTimer); - - // Goto previous history entry - if (instance.currentHash && instance.hasCreatedHistory) { - window.history.back(); - } else if (instance.currentHash) { - if ("replaceState" in window.history) { - window.history.replaceState({}, document.title, window.location.pathname + window.location.search + (instance.origHash || "")); - } else { - window.location.hash = instance.origHash; - } - } - instance.currentHash = null; - } - }); - - // Check if need to start/close after url has changed - $(window).on("hashchange.fb", function () { - var url = parseUrl(), - fb = null; - - // Find last fancyBox instance that has "hash" - $.each($(".fancybox-container").get().reverse(), function (index, value) { - var tmp = $(value).data("FancyBox"); - if (tmp && tmp.currentHash) { - fb = tmp; - return false; - } - }); - if (fb) { - // Now, compare hash values - if (fb.currentHash !== url.gallery + "-" + url.index && !(url.index === 1 && fb.currentHash == url.gallery)) { - fb.currentHash = null; - fb.close(); - } - } else if (url.gallery !== "") { - triggerFromUrl(url); - } - }); - - // Check current hash and trigger click event on matching element to start fancyBox, if needed - setTimeout(function () { - if (!$.fancybox.getInstance()) { - triggerFromUrl(parseUrl()); - } - }, 50); - }); -})(window, document, jQuery); -// ========================================================================== -// -// Wheel -// Basic mouse weheel support for gallery navigation -// -// ========================================================================== -(function (document, $) { - "use strict"; - - var prevTime = new Date().getTime(); - $(document).on({ - "onInit.fb": function onInitFb(e, instance, current) { - instance.$refs.stage.on("mousewheel DOMMouseScroll wheel MozMousePixelScroll", function (e) { - var current = instance.current, - currTime = new Date().getTime(); - if (instance.group.length < 2 || current.opts.wheel === false || current.opts.wheel === "auto" && current.type !== "image") { - return; - } - e.preventDefault(); - e.stopPropagation(); - if (current.$slide.hasClass("fancybox-animated")) { - return; - } - e = e.originalEvent || e; - if (currTime - prevTime < 250) { - return; - } - prevTime = currTime; - instance[(-e.deltaY || -e.deltaX || e.wheelDelta || -e.detail) < 0 ? "next" : "previous"](); - }); - } - }); -})(document, jQuery); - -/***/ }), - -/***/ "./assets/src/scripts/vendor/slick.js": -/*!********************************************!*\ - !*** ./assets/src/scripts/vendor/slick.js ***! - \********************************************/ -/***/ (function(module, exports, __webpack_require__) { - -var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/* - _ _ _ _ - ___| (_) ___| | __ (_)___ -/ __| | |/ __| |/ / | / __| -\__ \ | | (__| < _ | \__ \ -|___/_|_|\___|_|\_(_)/ |___/ - |__/ - - Version: 1.8.0 - Author: Ken Wheeler - Website: http://kenwheeler.github.io - Docs: http://kenwheeler.github.io/slick - Repo: http://github.com/kenwheeler/slick - Issues: http://github.com/kenwheeler/slick/issues - - */ -/* global window, document, define, jQuery, setInterval, clearInterval */ -; -(function (factory) { - 'use strict'; - - if (true) { - !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! jquery */ "jquery")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), - __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? - (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), - __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); - } else {} -})(function ($) { - 'use strict'; - - var Slick = window.Slick || {}; - Slick = function () { - var instanceUid = 0; - function Slick(element, settings) { - var _ = this, - dataSettings; - _.defaults = { - accessibility: true, - adaptiveHeight: false, - appendArrows: $(element), - appendDots: $(element), - arrows: true, - asNavFor: null, - prevArrow: '', - nextArrow: '', - autoplay: false, - autoplaySpeed: 3000, - centerMode: false, - centerPadding: '50px', - cssEase: 'ease', - customPaging: function customPaging(slider, i) { - return $('\",\r\n\r\n close: '\",\r\n\r\n // Arrows\r\n arrowLeft: '\",\r\n\r\n arrowRight: '\",\r\n\r\n // This small close button will be appended to your html/inline/ajax content by default,\r\n // if \"smallBtn\" option is not set to false\r\n smallBtn: '\"\r\n },\r\n\r\n // Container is injected into this element\r\n parentEl: \"body\",\r\n\r\n // Hide browser vertical scrollbars; use at your own risk\r\n hideScrollbar: true,\r\n\r\n // Focus handling\r\n // ==============\r\n\r\n // Try to focus on the first focusable element after opening\r\n autoFocus: true,\r\n\r\n // Put focus back to active element after closing\r\n backFocus: true,\r\n\r\n // Do not let user to focus on element outside modal content\r\n trapFocus: true,\r\n\r\n // Module specific options\r\n // =======================\r\n\r\n fullScreen: {\r\n autoStart: false\r\n },\r\n\r\n // Set `touch: false` to disable panning/swiping\r\n touch: {\r\n vertical: true, // Allow to drag content vertically\r\n momentum: true // Continue movement after releasing mouse/touch when panning\r\n },\r\n\r\n // Hash value when initializing manually,\r\n // set `false` to disable hash change\r\n hash: null,\r\n\r\n // Customize or add new media types\r\n // Example:\r\n /*\r\n media : {\r\n youtube : {\r\n params : {\r\n autoplay : 0\r\n }\r\n }\r\n }\r\n */\r\n media: {},\r\n\r\n slideShow: {\r\n autoStart: false,\r\n speed: 3000\r\n },\r\n\r\n thumbs: {\r\n autoStart: false, // Display thumbnails on opening\r\n hideOnClose: true, // Hide thumbnail grid when closing animation starts\r\n parentEl: \".fancybox-container\", // Container is injected into this element\r\n axis: \"y\" // Vertical (y) or horizontal (x) scrolling\r\n },\r\n\r\n // Use mousewheel to navigate gallery\r\n // If 'auto' - enabled for images only\r\n wheel: \"auto\",\r\n\r\n // Callbacks\r\n //==========\r\n\r\n // See Documentation/API/Events for more information\r\n // Example:\r\n /*\r\n afterShow: function( instance, current ) {\r\n console.info( 'Clicked element:' );\r\n console.info( current.opts.$orig );\r\n }\r\n */\r\n\r\n onInit: $.noop, // When instance has been initialized\r\n\r\n beforeLoad: $.noop, // Before the content of a slide is being loaded\r\n afterLoad: $.noop, // When the content of a slide is done loading\r\n\r\n beforeShow: $.noop, // Before open animation starts\r\n afterShow: $.noop, // When content is done loading and animating\r\n\r\n beforeClose: $.noop, // Before the instance attempts to close. Return false to cancel the close.\r\n afterClose: $.noop, // After instance has been closed\r\n\r\n onActivate: $.noop, // When instance is brought to front\r\n onDeactivate: $.noop, // When other instance has been activated\r\n\r\n // Interaction\r\n // ===========\r\n\r\n // Use options below to customize taken action when user clicks or double clicks on the fancyBox area,\r\n // each option can be string or method that returns value.\r\n //\r\n // Possible values:\r\n // \"close\" - close instance\r\n // \"next\" - move to next gallery item\r\n // \"nextOrClose\" - move to next gallery item or close if gallery has only one item\r\n // \"toggleControls\" - show/hide controls\r\n // \"zoom\" - zoom image (if loaded)\r\n // false - do nothing\r\n\r\n // Clicked on the content\r\n clickContent: function (current, event) {\r\n return current.type === \"image\" ? \"zoom\" : false;\r\n },\r\n\r\n // Clicked on the slide\r\n clickSlide: \"close\",\r\n\r\n // Clicked on the background (backdrop) element;\r\n // if you have not changed the layout, then most likely you need to use `clickSlide` option\r\n clickOutside: \"close\",\r\n\r\n // Same as previous two, but for double click\r\n dblclickContent: false,\r\n dblclickSlide: false,\r\n dblclickOutside: false,\r\n\r\n // Custom options when mobile device is detected\r\n // =============================================\r\n\r\n mobile: {\r\n preventCaptionOverlap: false,\r\n idleTime: false,\r\n clickContent: function (current, event) {\r\n return current.type === \"image\" ? \"toggleControls\" : false;\r\n },\r\n clickSlide: function (current, event) {\r\n return current.type === \"image\" ? \"toggleControls\" : \"close\";\r\n },\r\n dblclickContent: function (current, event) {\r\n return current.type === \"image\" ? \"zoom\" : false;\r\n },\r\n dblclickSlide: function (current, event) {\r\n return current.type === \"image\" ? \"zoom\" : false;\r\n }\r\n },\r\n\r\n // Internationalization\r\n // ====================\r\n\r\n lang: \"en\",\r\n i18n: {\r\n en: {\r\n CLOSE: \"Close\",\r\n NEXT: \"Next\",\r\n PREV: \"Previous\",\r\n ERROR: \"The requested content cannot be loaded.
Please try again later.\",\r\n PLAY_START: \"Start slideshow\",\r\n PLAY_STOP: \"Pause slideshow\",\r\n FULL_SCREEN: \"Full screen\",\r\n THUMBS: \"Thumbnails\",\r\n DOWNLOAD: \"Download\",\r\n SHARE: \"Share\",\r\n ZOOM: \"Zoom\"\r\n },\r\n de: {\r\n CLOSE: \"Schließen\",\r\n NEXT: \"Weiter\",\r\n PREV: \"Zurück\",\r\n ERROR: \"Die angeforderten Daten konnten nicht geladen werden.
Bitte versuchen Sie es später nochmal.\",\r\n PLAY_START: \"Diaschau starten\",\r\n PLAY_STOP: \"Diaschau beenden\",\r\n FULL_SCREEN: \"Vollbild\",\r\n THUMBS: \"Vorschaubilder\",\r\n DOWNLOAD: \"Herunterladen\",\r\n SHARE: \"Teilen\",\r\n ZOOM: \"Vergrößern\"\r\n }\r\n }\r\n };\r\n\r\n // Few useful variables and methods\r\n // ================================\r\n\r\n var $W = $(window);\r\n var $D = $(document);\r\n\r\n var called = 0;\r\n\r\n // Check if an object is a jQuery object and not a native JavaScript object\r\n // ========================================================================\r\n var isQuery = function (obj) {\r\n return obj && obj.hasOwnProperty && obj instanceof $;\r\n };\r\n\r\n // Handle multiple browsers for \"requestAnimationFrame\" and \"cancelAnimationFrame\"\r\n // ===============================================================================\r\n var requestAFrame = (function () {\r\n return (\r\n window.requestAnimationFrame ||\r\n window.webkitRequestAnimationFrame ||\r\n window.mozRequestAnimationFrame ||\r\n window.oRequestAnimationFrame ||\r\n // if all else fails, use setTimeout\r\n function (callback) {\r\n return window.setTimeout(callback, 1000 / 60);\r\n }\r\n );\r\n })();\r\n\r\n var cancelAFrame = (function () {\r\n return (\r\n window.cancelAnimationFrame ||\r\n window.webkitCancelAnimationFrame ||\r\n window.mozCancelAnimationFrame ||\r\n window.oCancelAnimationFrame ||\r\n function (id) {\r\n window.clearTimeout(id);\r\n }\r\n );\r\n })();\r\n\r\n // Detect the supported transition-end event property name\r\n // =======================================================\r\n var transitionEnd = (function () {\r\n var el = document.createElement(\"fakeelement\"),\r\n t;\r\n\r\n var transitions = {\r\n transition: \"transitionend\",\r\n OTransition: \"oTransitionEnd\",\r\n MozTransition: \"transitionend\",\r\n WebkitTransition: \"webkitTransitionEnd\"\r\n };\r\n\r\n for (t in transitions) {\r\n if (el.style[t] !== undefined) {\r\n return transitions[t];\r\n }\r\n }\r\n\r\n return \"transitionend\";\r\n })();\r\n\r\n // Force redraw on an element.\r\n // This helps in cases where the browser doesn't redraw an updated element properly\r\n // ================================================================================\r\n var forceRedraw = function ($el) {\r\n return $el && $el.length && $el[0].offsetHeight;\r\n };\r\n\r\n // Exclude array (`buttons`) options from deep merging\r\n // ===================================================\r\n var mergeOpts = function (opts1, opts2) {\r\n var rez = $.extend(true, {}, opts1, opts2);\r\n\r\n $.each(opts2, function (key, value) {\r\n if ($.isArray(value)) {\r\n rez[key] = value;\r\n }\r\n });\r\n\r\n return rez;\r\n };\r\n\r\n // How much of an element is visible in viewport\r\n // =============================================\r\n\r\n var inViewport = function (elem) {\r\n var elemCenter, rez;\r\n\r\n if (!elem || elem.ownerDocument !== document) {\r\n return false;\r\n }\r\n\r\n $(\".fancybox-container\").css(\"pointer-events\", \"none\");\r\n\r\n elemCenter = {\r\n x: elem.getBoundingClientRect().left + elem.offsetWidth / 2,\r\n y: elem.getBoundingClientRect().top + elem.offsetHeight / 2\r\n };\r\n\r\n rez = document.elementFromPoint(elemCenter.x, elemCenter.y) === elem;\r\n\r\n $(\".fancybox-container\").css(\"pointer-events\", \"\");\r\n\r\n return rez;\r\n };\r\n\r\n // Class definition\r\n // ================\r\n\r\n var FancyBox = function (content, opts, index) {\r\n var self = this;\r\n\r\n self.opts = mergeOpts({\r\n index: index\r\n }, $.fancybox.defaults);\r\n\r\n if ($.isPlainObject(opts)) {\r\n self.opts = mergeOpts(self.opts, opts);\r\n }\r\n\r\n if ($.fancybox.isMobile) {\r\n self.opts = mergeOpts(self.opts, self.opts.mobile);\r\n }\r\n\r\n self.id = self.opts.id || ++called;\r\n\r\n self.currIndex = parseInt(self.opts.index, 10) || 0;\r\n self.prevIndex = null;\r\n\r\n self.prevPos = null;\r\n self.currPos = 0;\r\n\r\n self.firstRun = true;\r\n\r\n // All group items\r\n self.group = [];\r\n\r\n // Existing slides (for current, next and previous gallery items)\r\n self.slides = {};\r\n\r\n // Create group elements\r\n self.addContent(content);\r\n\r\n if (!self.group.length) {\r\n return;\r\n }\r\n\r\n self.init();\r\n };\r\n\r\n $.extend(FancyBox.prototype, {\r\n // Create DOM structure\r\n // ====================\r\n\r\n init: function () {\r\n var self = this,\r\n firstItem = self.group[self.currIndex],\r\n firstItemOpts = firstItem.opts,\r\n $container,\r\n buttonStr;\r\n\r\n if (firstItemOpts.closeExisting) {\r\n $.fancybox.close(true);\r\n }\r\n\r\n // Hide scrollbars\r\n // ===============\r\n\r\n $(\"body\").addClass(\"fancybox-active\");\r\n\r\n if (\r\n !$.fancybox.getInstance() &&\r\n firstItemOpts.hideScrollbar !== false &&\r\n !$.fancybox.isMobile &&\r\n document.body.scrollHeight > window.innerHeight\r\n ) {\r\n $(\"head\").append(\r\n '\"\r\n );\r\n\r\n $(\"body\").addClass(\"compensate-for-scrollbar\");\r\n }\r\n\r\n // Build html markup and set references\r\n // ====================================\r\n\r\n // Build html code for buttons and insert into main template\r\n buttonStr = \"\";\r\n\r\n $.each(firstItemOpts.buttons, function (index, value) {\r\n buttonStr += firstItemOpts.btnTpl[value] || \"\";\r\n });\r\n\r\n // Create markup from base template, it will be initially hidden to\r\n // avoid unnecessary work like painting while initializing is not complete\r\n $container = $(\r\n self.translate(\r\n self,\r\n firstItemOpts.baseTpl\r\n .replace(\"{{buttons}}\", buttonStr)\r\n .replace(\"{{arrows}}\", firstItemOpts.btnTpl.arrowLeft + firstItemOpts.btnTpl.arrowRight)\r\n )\r\n )\r\n .attr(\"id\", \"fancybox-container-\" + self.id)\r\n .addClass(firstItemOpts.baseClass)\r\n .data(\"FancyBox\", self)\r\n .appendTo(firstItemOpts.parentEl);\r\n\r\n // Create object holding references to jQuery wrapped nodes\r\n self.$refs = {\r\n container: $container\r\n };\r\n\r\n [\"bg\", \"inner\", \"infobar\", \"toolbar\", \"stage\", \"caption\", \"navigation\"].forEach(function (item) {\r\n self.$refs[item] = $container.find(\".fancybox-\" + item);\r\n });\r\n\r\n self.trigger(\"onInit\");\r\n\r\n // Enable events, deactive previous instances\r\n self.activate();\r\n\r\n // Build slides, load and reveal content\r\n self.jumpTo(self.currIndex);\r\n },\r\n\r\n // Simple i18n support - replaces object keys found in template\r\n // with corresponding values\r\n // ============================================================\r\n\r\n translate: function (obj, str) {\r\n var arr = obj.opts.i18n[obj.opts.lang] || obj.opts.i18n.en;\r\n\r\n return str.replace(/\\{\\{(\\w+)\\}\\}/g, function (match, n) {\r\n return arr[n] === undefined ? match : arr[n];\r\n });\r\n },\r\n\r\n // Populate current group with fresh content\r\n // Check if each object has valid type and content\r\n // ===============================================\r\n\r\n addContent: function (content) {\r\n var self = this,\r\n items = $.makeArray(content),\r\n thumbs;\r\n\r\n $.each(items, function (i, item) {\r\n var obj = {},\r\n opts = {},\r\n $item,\r\n type,\r\n found,\r\n src,\r\n srcParts;\r\n\r\n // Step 1 - Make sure we have an object\r\n // ====================================\r\n\r\n if ($.isPlainObject(item)) {\r\n // We probably have manual usage here, something like\r\n // $.fancybox.open( [ { src : \"image.jpg\", type : \"image\" } ] )\r\n\r\n obj = item;\r\n opts = item.opts || item;\r\n } else if ($.type(item) === \"object\" && $(item).length) {\r\n // Here we probably have jQuery collection returned by some selector\r\n $item = $(item);\r\n\r\n // Support attributes like `data-options='{\"touch\" : false}'` and `data-touch='false'`\r\n opts = $item.data() || {};\r\n opts = $.extend(true, {}, opts, opts.options);\r\n\r\n // Here we store clicked element\r\n opts.$orig = $item;\r\n\r\n obj.src = self.opts.src || opts.src || $item.attr(\"href\");\r\n\r\n // Assume that simple syntax is used, for example:\r\n // `$.fancybox.open( $(\"#test\"), {} );`\r\n if (!obj.type && !obj.src) {\r\n obj.type = \"inline\";\r\n obj.src = item;\r\n }\r\n } else {\r\n // Assume we have a simple html code, for example:\r\n // $.fancybox.open( '

Hi!

' );\r\n obj = {\r\n type: \"html\",\r\n src: item + \"\"\r\n };\r\n }\r\n\r\n // Each gallery object has full collection of options\r\n obj.opts = $.extend(true, {}, self.opts, opts);\r\n\r\n // Do not merge buttons array\r\n if ($.isArray(opts.buttons)) {\r\n obj.opts.buttons = opts.buttons;\r\n }\r\n\r\n if ($.fancybox.isMobile && obj.opts.mobile) {\r\n obj.opts = mergeOpts(obj.opts, obj.opts.mobile);\r\n }\r\n\r\n // Step 2 - Make sure we have content type, if not - try to guess\r\n // ==============================================================\r\n\r\n type = obj.type || obj.opts.type;\r\n src = obj.src || \"\";\r\n\r\n if (!type && src) {\r\n if ((found = src.match(/\\.(mp4|mov|ogv|webm)((\\?|#).*)?$/i))) {\r\n type = \"video\";\r\n\r\n if (!obj.opts.video.format) {\r\n obj.opts.video.format = \"video/\" + (found[1] === \"ogv\" ? \"ogg\" : found[1]);\r\n }\r\n } else if (src.match(/(^data:image\\/[a-z0-9+\\/=]*,)|(\\.(jp(e|g|eg)|gif|png|bmp|webp|svg|ico)((\\?|#).*)?$)/i)) {\r\n type = \"image\";\r\n } else if (src.match(/\\.(pdf)((\\?|#).*)?$/i)) {\r\n type = \"iframe\";\r\n obj = $.extend(true, obj, {\r\n contentType: \"pdf\",\r\n opts: {\r\n iframe: {\r\n preload: false\r\n }\r\n }\r\n });\r\n } else if (src.charAt(0) === \"#\") {\r\n type = \"inline\";\r\n }\r\n }\r\n\r\n if (type) {\r\n obj.type = type;\r\n } else {\r\n self.trigger(\"objectNeedsType\", obj);\r\n }\r\n\r\n if (!obj.contentType) {\r\n obj.contentType = $.inArray(obj.type, [\"html\", \"inline\", \"ajax\"]) > -1 ? \"html\" : obj.type;\r\n }\r\n\r\n // Step 3 - Some adjustments\r\n // =========================\r\n\r\n obj.index = self.group.length;\r\n\r\n if (obj.opts.smallBtn == \"auto\") {\r\n obj.opts.smallBtn = $.inArray(obj.type, [\"html\", \"inline\", \"ajax\"]) > -1;\r\n }\r\n\r\n if (obj.opts.toolbar === \"auto\") {\r\n obj.opts.toolbar = !obj.opts.smallBtn;\r\n }\r\n\r\n // Find thumbnail image, check if exists and if is in the viewport\r\n obj.$thumb = obj.opts.$thumb || null;\r\n\r\n if (obj.opts.$trigger && obj.index === self.opts.index) {\r\n obj.$thumb = obj.opts.$trigger.find(\"img:first\");\r\n\r\n if (obj.$thumb.length) {\r\n obj.opts.$orig = obj.opts.$trigger;\r\n }\r\n }\r\n\r\n if (!(obj.$thumb && obj.$thumb.length) && obj.opts.$orig) {\r\n obj.$thumb = obj.opts.$orig.find(\"img:first\");\r\n }\r\n\r\n if (obj.$thumb && !obj.$thumb.length) {\r\n obj.$thumb = null;\r\n }\r\n\r\n obj.thumb = obj.opts.thumb || (obj.$thumb ? obj.$thumb[0].src : null);\r\n\r\n // \"caption\" is a \"special\" option, it can be used to customize caption per gallery item\r\n if ($.type(obj.opts.caption) === \"function\") {\r\n obj.opts.caption = obj.opts.caption.apply(item, [self, obj]);\r\n }\r\n\r\n if ($.type(self.opts.caption) === \"function\") {\r\n obj.opts.caption = self.opts.caption.apply(item, [self, obj]);\r\n }\r\n\r\n // Make sure we have caption as a string or jQuery object\r\n if (!(obj.opts.caption instanceof $)) {\r\n obj.opts.caption = obj.opts.caption === undefined ? \"\" : obj.opts.caption + \"\";\r\n }\r\n\r\n // Check if url contains \"filter\" used to filter the content\r\n // Example: \"ajax.html #something\"\r\n if (obj.type === \"ajax\") {\r\n srcParts = src.split(/\\s+/, 2);\r\n\r\n if (srcParts.length > 1) {\r\n obj.src = srcParts.shift();\r\n\r\n obj.opts.filter = srcParts.shift();\r\n }\r\n }\r\n\r\n // Hide all buttons and disable interactivity for modal items\r\n if (obj.opts.modal) {\r\n obj.opts = $.extend(true, obj.opts, {\r\n trapFocus: true,\r\n // Remove buttons\r\n infobar: 0,\r\n toolbar: 0,\r\n\r\n smallBtn: 0,\r\n\r\n // Disable keyboard navigation\r\n keyboard: 0,\r\n\r\n // Disable some modules\r\n slideShow: 0,\r\n fullScreen: 0,\r\n thumbs: 0,\r\n touch: 0,\r\n\r\n // Disable click event handlers\r\n clickContent: false,\r\n clickSlide: false,\r\n clickOutside: false,\r\n dblclickContent: false,\r\n dblclickSlide: false,\r\n dblclickOutside: false\r\n });\r\n }\r\n\r\n // Step 4 - Add processed object to group\r\n // ======================================\r\n\r\n self.group.push(obj);\r\n });\r\n\r\n // Update controls if gallery is already opened\r\n if (Object.keys(self.slides).length) {\r\n self.updateControls();\r\n\r\n // Update thumbnails, if needed\r\n thumbs = self.Thumbs;\r\n\r\n if (thumbs && thumbs.isActive) {\r\n thumbs.create();\r\n\r\n thumbs.focus();\r\n }\r\n }\r\n },\r\n\r\n // Attach an event handler functions for:\r\n // - navigation buttons\r\n // - browser scrolling, resizing;\r\n // - focusing\r\n // - keyboard\r\n // - detecting inactivity\r\n // ======================================\r\n\r\n addEvents: function () {\r\n var self = this;\r\n\r\n self.removeEvents();\r\n\r\n // Make navigation elements clickable\r\n // ==================================\r\n\r\n self.$refs.container\r\n .on(\"click.fb-close\", \"[data-fancybox-close]\", function (e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n\r\n self.close(e);\r\n })\r\n .on(\"touchstart.fb-prev click.fb-prev\", \"[data-fancybox-prev]\", function (e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n\r\n self.previous();\r\n })\r\n .on(\"touchstart.fb-next click.fb-next\", \"[data-fancybox-next]\", function (e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n\r\n self.next();\r\n })\r\n .on(\"click.fb\", \"[data-fancybox-zoom]\", function (e) {\r\n // Click handler for zoom button\r\n self[self.isScaledDown() ? \"scaleToActual\" : \"scaleToFit\"]();\r\n });\r\n\r\n // Handle page scrolling and browser resizing\r\n // ==========================================\r\n\r\n $W.on(\"orientationchange.fb resize.fb\", function (e) {\r\n if (e && e.originalEvent && e.originalEvent.type === \"resize\") {\r\n if (self.requestId) {\r\n cancelAFrame(self.requestId);\r\n }\r\n\r\n self.requestId = requestAFrame(function () {\r\n self.update(e);\r\n });\r\n } else {\r\n if (self.current && self.current.type === \"iframe\") {\r\n self.$refs.stage.hide();\r\n }\r\n\r\n setTimeout(\r\n function () {\r\n self.$refs.stage.show();\r\n\r\n self.update(e);\r\n },\r\n $.fancybox.isMobile ? 600 : 250\r\n );\r\n }\r\n });\r\n\r\n $D.on(\"keydown.fb\", function (e) {\r\n var instance = $.fancybox ? $.fancybox.getInstance() : null,\r\n current = instance.current,\r\n keycode = e.keyCode || e.which;\r\n\r\n // Trap keyboard focus inside of the modal\r\n // =======================================\r\n\r\n if (keycode == 9) {\r\n if (current.opts.trapFocus) {\r\n self.focus(e);\r\n }\r\n\r\n return;\r\n }\r\n\r\n // Enable keyboard navigation\r\n // ==========================\r\n\r\n if (!current.opts.keyboard || e.ctrlKey || e.altKey || e.shiftKey || $(e.target).is(\"input,textarea,video,audio,select\")) {\r\n return;\r\n }\r\n\r\n // Backspace and Esc keys\r\n if (keycode === 8 || keycode === 27) {\r\n e.preventDefault();\r\n\r\n self.close(e);\r\n\r\n return;\r\n }\r\n\r\n // Left arrow and Up arrow\r\n if (keycode === 37 || keycode === 38) {\r\n e.preventDefault();\r\n\r\n self.previous();\r\n\r\n return;\r\n }\r\n\r\n // Righ arrow and Down arrow\r\n if (keycode === 39 || keycode === 40) {\r\n e.preventDefault();\r\n\r\n self.next();\r\n\r\n return;\r\n }\r\n\r\n self.trigger(\"afterKeydown\", e, keycode);\r\n });\r\n\r\n // Hide controls after some inactivity period\r\n if (self.group[self.currIndex].opts.idleTime) {\r\n self.idleSecondsCounter = 0;\r\n\r\n $D.on(\r\n \"mousemove.fb-idle mouseleave.fb-idle mousedown.fb-idle touchstart.fb-idle touchmove.fb-idle scroll.fb-idle keydown.fb-idle\",\r\n function (e) {\r\n self.idleSecondsCounter = 0;\r\n\r\n if (self.isIdle) {\r\n self.showControls();\r\n }\r\n\r\n self.isIdle = false;\r\n }\r\n );\r\n\r\n self.idleInterval = window.setInterval(function () {\r\n self.idleSecondsCounter++;\r\n\r\n if (self.idleSecondsCounter >= self.group[self.currIndex].opts.idleTime && !self.isDragging) {\r\n self.isIdle = true;\r\n self.idleSecondsCounter = 0;\r\n\r\n self.hideControls();\r\n }\r\n }, 1000);\r\n }\r\n },\r\n\r\n // Remove events added by the core\r\n // ===============================\r\n\r\n removeEvents: function () {\r\n var self = this;\r\n\r\n $W.off(\"orientationchange.fb resize.fb\");\r\n $D.off(\"keydown.fb .fb-idle\");\r\n\r\n this.$refs.container.off(\".fb-close .fb-prev .fb-next\");\r\n\r\n if (self.idleInterval) {\r\n window.clearInterval(self.idleInterval);\r\n\r\n self.idleInterval = null;\r\n }\r\n },\r\n\r\n // Change to previous gallery item\r\n // ===============================\r\n\r\n previous: function (duration) {\r\n return this.jumpTo(this.currPos - 1, duration);\r\n },\r\n\r\n // Change to next gallery item\r\n // ===========================\r\n\r\n next: function (duration) {\r\n return this.jumpTo(this.currPos + 1, duration);\r\n },\r\n\r\n // Switch to selected gallery item\r\n // ===============================\r\n\r\n jumpTo: function (pos, duration) {\r\n var self = this,\r\n groupLen = self.group.length,\r\n firstRun,\r\n isMoved,\r\n loop,\r\n current,\r\n previous,\r\n slidePos,\r\n stagePos,\r\n prop,\r\n diff;\r\n\r\n if (self.isDragging || self.isClosing || (self.isAnimating && self.firstRun)) {\r\n return;\r\n }\r\n\r\n // Should loop?\r\n pos = parseInt(pos, 10);\r\n loop = self.current ? self.current.opts.loop : self.opts.loop;\r\n\r\n if (!loop && (pos < 0 || pos >= groupLen)) {\r\n return false;\r\n }\r\n\r\n // Check if opening for the first time; this helps to speed things up\r\n firstRun = self.firstRun = !Object.keys(self.slides).length;\r\n\r\n // Create slides\r\n previous = self.current;\r\n\r\n self.prevIndex = self.currIndex;\r\n self.prevPos = self.currPos;\r\n\r\n current = self.createSlide(pos);\r\n\r\n if (groupLen > 1) {\r\n if (loop || current.index < groupLen - 1) {\r\n self.createSlide(pos + 1);\r\n }\r\n\r\n if (loop || current.index > 0) {\r\n self.createSlide(pos - 1);\r\n }\r\n }\r\n\r\n self.current = current;\r\n self.currIndex = current.index;\r\n self.currPos = current.pos;\r\n\r\n self.trigger(\"beforeShow\", firstRun);\r\n\r\n self.updateControls();\r\n\r\n // Validate duration length\r\n current.forcedDuration = undefined;\r\n\r\n if ($.isNumeric(duration)) {\r\n current.forcedDuration = duration;\r\n } else {\r\n duration = current.opts[firstRun ? \"animationDuration\" : \"transitionDuration\"];\r\n }\r\n\r\n duration = parseInt(duration, 10);\r\n\r\n // Check if user has swiped the slides or if still animating\r\n isMoved = self.isMoved(current);\r\n\r\n // Make sure current slide is visible\r\n current.$slide.addClass(\"fancybox-slide--current\");\r\n\r\n // Fresh start - reveal container, current slide and start loading content\r\n if (firstRun) {\r\n if (current.opts.animationEffect && duration) {\r\n self.$refs.container.css(\"transition-duration\", duration + \"ms\");\r\n }\r\n\r\n self.$refs.container.addClass(\"fancybox-is-open\").trigger(\"focus\");\r\n\r\n // Attempt to load content into slide\r\n // This will later call `afterLoad` -> `revealContent`\r\n self.loadSlide(current);\r\n\r\n self.preload(\"image\");\r\n\r\n return;\r\n }\r\n\r\n // Get actual slide/stage positions (before cleaning up)\r\n slidePos = $.fancybox.getTranslate(previous.$slide);\r\n stagePos = $.fancybox.getTranslate(self.$refs.stage);\r\n\r\n // Clean up all slides\r\n $.each(self.slides, function (index, slide) {\r\n $.fancybox.stop(slide.$slide, true);\r\n });\r\n\r\n if (previous.pos !== current.pos) {\r\n previous.isComplete = false;\r\n }\r\n\r\n previous.$slide.removeClass(\"fancybox-slide--complete fancybox-slide--current\");\r\n\r\n // If slides are out of place, then animate them to correct position\r\n if (isMoved) {\r\n // Calculate horizontal swipe distance\r\n diff = slidePos.left - (previous.pos * slidePos.width + previous.pos * previous.opts.gutter);\r\n\r\n $.each(self.slides, function (index, slide) {\r\n slide.$slide.removeClass(\"fancybox-animated\").removeClass(function (index, className) {\r\n return (className.match(/(^|\\s)fancybox-fx-\\S+/g) || []).join(\" \");\r\n });\r\n\r\n // Make sure that each slide is in equal distance\r\n // This is mostly needed for freshly added slides, because they are not yet positioned\r\n var leftPos = slide.pos * slidePos.width + slide.pos * slide.opts.gutter;\r\n\r\n $.fancybox.setTranslate(slide.$slide, {\r\n top: 0,\r\n left: leftPos - stagePos.left + diff\r\n });\r\n\r\n if (slide.pos !== current.pos) {\r\n slide.$slide.addClass(\"fancybox-slide--\" + (slide.pos > current.pos ? \"next\" : \"previous\"));\r\n }\r\n\r\n // Redraw to make sure that transition will start\r\n forceRedraw(slide.$slide);\r\n\r\n // Animate the slide\r\n $.fancybox.animate(\r\n slide.$slide, {\r\n top: 0,\r\n left: (slide.pos - current.pos) * slidePos.width + (slide.pos - current.pos) * slide.opts.gutter\r\n },\r\n duration,\r\n function () {\r\n slide.$slide\r\n .css({\r\n transform: \"\",\r\n opacity: \"\"\r\n })\r\n .removeClass(\"fancybox-slide--next fancybox-slide--previous\");\r\n\r\n if (slide.pos === self.currPos) {\r\n self.complete();\r\n }\r\n }\r\n );\r\n });\r\n } else if (duration && current.opts.transitionEffect) {\r\n // Set transition effect for previously active slide\r\n prop = \"fancybox-animated fancybox-fx-\" + current.opts.transitionEffect;\r\n\r\n previous.$slide.addClass(\"fancybox-slide--\" + (previous.pos > current.pos ? \"next\" : \"previous\"));\r\n\r\n $.fancybox.animate(\r\n previous.$slide,\r\n prop,\r\n duration,\r\n function () {\r\n previous.$slide.removeClass(prop).removeClass(\"fancybox-slide--next fancybox-slide--previous\");\r\n },\r\n false\r\n );\r\n }\r\n\r\n if (current.isLoaded) {\r\n self.revealContent(current);\r\n } else {\r\n self.loadSlide(current);\r\n }\r\n\r\n self.preload(\"image\");\r\n },\r\n\r\n // Create new \"slide\" element\r\n // These are gallery items that are actually added to DOM\r\n // =======================================================\r\n\r\n createSlide: function (pos) {\r\n var self = this,\r\n $slide,\r\n index;\r\n\r\n index = pos % self.group.length;\r\n index = index < 0 ? self.group.length + index : index;\r\n\r\n if (!self.slides[pos] && self.group[index]) {\r\n $slide = $('
').appendTo(self.$refs.stage);\r\n\r\n self.slides[pos] = $.extend(true, {}, self.group[index], {\r\n pos: pos,\r\n $slide: $slide,\r\n isLoaded: false\r\n });\r\n\r\n self.updateSlide(self.slides[pos]);\r\n }\r\n\r\n return self.slides[pos];\r\n },\r\n\r\n // Scale image to the actual size of the image;\r\n // x and y values should be relative to the slide\r\n // ==============================================\r\n\r\n scaleToActual: function (x, y, duration) {\r\n var self = this,\r\n current = self.current,\r\n $content = current.$content,\r\n canvasWidth = $.fancybox.getTranslate(current.$slide).width,\r\n canvasHeight = $.fancybox.getTranslate(current.$slide).height,\r\n newImgWidth = current.width,\r\n newImgHeight = current.height,\r\n imgPos,\r\n posX,\r\n posY,\r\n scaleX,\r\n scaleY;\r\n\r\n if (self.isAnimating || self.isMoved() || !$content || !(current.type == \"image\" && current.isLoaded && !current.hasError)) {\r\n return;\r\n }\r\n\r\n self.isAnimating = true;\r\n\r\n $.fancybox.stop($content);\r\n\r\n x = x === undefined ? canvasWidth * 0.5 : x;\r\n y = y === undefined ? canvasHeight * 0.5 : y;\r\n\r\n imgPos = $.fancybox.getTranslate($content);\r\n\r\n imgPos.top -= $.fancybox.getTranslate(current.$slide).top;\r\n imgPos.left -= $.fancybox.getTranslate(current.$slide).left;\r\n\r\n scaleX = newImgWidth / imgPos.width;\r\n scaleY = newImgHeight / imgPos.height;\r\n\r\n // Get center position for original image\r\n posX = canvasWidth * 0.5 - newImgWidth * 0.5;\r\n posY = canvasHeight * 0.5 - newImgHeight * 0.5;\r\n\r\n // Make sure image does not move away from edges\r\n if (newImgWidth > canvasWidth) {\r\n posX = imgPos.left * scaleX - (x * scaleX - x);\r\n\r\n if (posX > 0) {\r\n posX = 0;\r\n }\r\n\r\n if (posX < canvasWidth - newImgWidth) {\r\n posX = canvasWidth - newImgWidth;\r\n }\r\n }\r\n\r\n if (newImgHeight > canvasHeight) {\r\n posY = imgPos.top * scaleY - (y * scaleY - y);\r\n\r\n if (posY > 0) {\r\n posY = 0;\r\n }\r\n\r\n if (posY < canvasHeight - newImgHeight) {\r\n posY = canvasHeight - newImgHeight;\r\n }\r\n }\r\n\r\n self.updateCursor(newImgWidth, newImgHeight);\r\n\r\n $.fancybox.animate(\r\n $content, {\r\n top: posY,\r\n left: posX,\r\n scaleX: scaleX,\r\n scaleY: scaleY\r\n },\r\n duration || 366,\r\n function () {\r\n self.isAnimating = false;\r\n }\r\n );\r\n\r\n // Stop slideshow\r\n if (self.SlideShow && self.SlideShow.isActive) {\r\n self.SlideShow.stop();\r\n }\r\n },\r\n\r\n // Scale image to fit inside parent element\r\n // ========================================\r\n\r\n scaleToFit: function (duration) {\r\n var self = this,\r\n current = self.current,\r\n $content = current.$content,\r\n end;\r\n\r\n if (self.isAnimating || self.isMoved() || !$content || !(current.type == \"image\" && current.isLoaded && !current.hasError)) {\r\n return;\r\n }\r\n\r\n self.isAnimating = true;\r\n\r\n $.fancybox.stop($content);\r\n\r\n end = self.getFitPos(current);\r\n\r\n self.updateCursor(end.width, end.height);\r\n\r\n $.fancybox.animate(\r\n $content, {\r\n top: end.top,\r\n left: end.left,\r\n scaleX: end.width / $content.width(),\r\n scaleY: end.height / $content.height()\r\n },\r\n duration || 366,\r\n function () {\r\n self.isAnimating = false;\r\n }\r\n );\r\n },\r\n\r\n // Calculate image size to fit inside viewport\r\n // ===========================================\r\n\r\n getFitPos: function (slide) {\r\n var self = this,\r\n $content = slide.$content,\r\n $slide = slide.$slide,\r\n width = slide.width || slide.opts.width,\r\n height = slide.height || slide.opts.height,\r\n maxWidth,\r\n maxHeight,\r\n minRatio,\r\n aspectRatio,\r\n rez = {};\r\n\r\n if (!slide.isLoaded || !$content || !$content.length) {\r\n return false;\r\n }\r\n\r\n maxWidth = $.fancybox.getTranslate(self.$refs.stage).width;\r\n maxHeight = $.fancybox.getTranslate(self.$refs.stage).height;\r\n\r\n maxWidth -=\r\n parseFloat($slide.css(\"paddingLeft\")) +\r\n parseFloat($slide.css(\"paddingRight\")) +\r\n parseFloat($content.css(\"marginLeft\")) +\r\n parseFloat($content.css(\"marginRight\"));\r\n\r\n maxHeight -=\r\n parseFloat($slide.css(\"paddingTop\")) +\r\n parseFloat($slide.css(\"paddingBottom\")) +\r\n parseFloat($content.css(\"marginTop\")) +\r\n parseFloat($content.css(\"marginBottom\"));\r\n\r\n if (!width || !height) {\r\n width = maxWidth;\r\n height = maxHeight;\r\n }\r\n\r\n minRatio = Math.min(1, maxWidth / width, maxHeight / height);\r\n\r\n width = minRatio * width;\r\n height = minRatio * height;\r\n\r\n // Adjust width/height to precisely fit into container\r\n if (width > maxWidth - 0.5) {\r\n width = maxWidth;\r\n }\r\n\r\n if (height > maxHeight - 0.5) {\r\n height = maxHeight;\r\n }\r\n\r\n if (slide.type === \"image\") {\r\n rez.top = Math.floor((maxHeight - height) * 0.5) + parseFloat($slide.css(\"paddingTop\"));\r\n rez.left = Math.floor((maxWidth - width) * 0.5) + parseFloat($slide.css(\"paddingLeft\"));\r\n } else if (slide.contentType === \"video\") {\r\n // Force aspect ratio for the video\r\n // \"I say the whole world must learn of our peaceful ways… by force!\"\r\n aspectRatio = slide.opts.width && slide.opts.height ? width / height : slide.opts.ratio || 16 / 9;\r\n\r\n if (height > width / aspectRatio) {\r\n height = width / aspectRatio;\r\n } else if (width > height * aspectRatio) {\r\n width = height * aspectRatio;\r\n }\r\n }\r\n\r\n rez.width = width;\r\n rez.height = height;\r\n\r\n return rez;\r\n },\r\n\r\n // Update content size and position for all slides\r\n // ==============================================\r\n\r\n update: function (e) {\r\n var self = this;\r\n\r\n $.each(self.slides, function (key, slide) {\r\n self.updateSlide(slide, e);\r\n });\r\n },\r\n\r\n // Update slide content position and size\r\n // ======================================\r\n\r\n updateSlide: function (slide, e) {\r\n var self = this,\r\n $content = slide && slide.$content,\r\n width = slide.width || slide.opts.width,\r\n height = slide.height || slide.opts.height,\r\n $slide = slide.$slide;\r\n\r\n // First, prevent caption overlap, if needed\r\n self.adjustCaption(slide);\r\n\r\n // Then resize content to fit inside the slide\r\n if ($content && (width || height || slide.contentType === \"video\") && !slide.hasError) {\r\n $.fancybox.stop($content);\r\n\r\n $.fancybox.setTranslate($content, self.getFitPos(slide));\r\n\r\n if (slide.pos === self.currPos) {\r\n self.isAnimating = false;\r\n\r\n self.updateCursor();\r\n }\r\n }\r\n\r\n // Then some adjustments\r\n self.adjustLayout(slide);\r\n\r\n if ($slide.length) {\r\n $slide.trigger(\"refresh\");\r\n\r\n if (slide.pos === self.currPos) {\r\n self.$refs.toolbar\r\n .add(self.$refs.navigation.find(\".fancybox-button--arrow_right\"))\r\n .toggleClass(\"compensate-for-scrollbar\", $slide.get(0).scrollHeight > $slide.get(0).clientHeight);\r\n }\r\n }\r\n\r\n self.trigger(\"onUpdate\", slide, e);\r\n },\r\n\r\n // Horizontally center slide\r\n // =========================\r\n\r\n centerSlide: function (duration) {\r\n var self = this,\r\n current = self.current,\r\n $slide = current.$slide;\r\n\r\n if (self.isClosing || !current) {\r\n return;\r\n }\r\n\r\n $slide.siblings().css({\r\n transform: \"\",\r\n opacity: \"\"\r\n });\r\n\r\n $slide\r\n .parent()\r\n .children()\r\n .removeClass(\"fancybox-slide--previous fancybox-slide--next\");\r\n\r\n $.fancybox.animate(\r\n $slide, {\r\n top: 0,\r\n left: 0,\r\n opacity: 1\r\n },\r\n duration === undefined ? 0 : duration,\r\n function () {\r\n // Clean up\r\n $slide.css({\r\n transform: \"\",\r\n opacity: \"\"\r\n });\r\n\r\n if (!current.isComplete) {\r\n self.complete();\r\n }\r\n },\r\n false\r\n );\r\n },\r\n\r\n // Check if current slide is moved (swiped)\r\n // ========================================\r\n\r\n isMoved: function (slide) {\r\n var current = slide || this.current,\r\n slidePos,\r\n stagePos;\r\n\r\n if (!current) {\r\n return false;\r\n }\r\n\r\n stagePos = $.fancybox.getTranslate(this.$refs.stage);\r\n slidePos = $.fancybox.getTranslate(current.$slide);\r\n\r\n return (\r\n !current.$slide.hasClass(\"fancybox-animated\") &&\r\n (Math.abs(slidePos.top - stagePos.top) > 0.5 || Math.abs(slidePos.left - stagePos.left) > 0.5)\r\n );\r\n },\r\n\r\n // Update cursor style depending if content can be zoomed\r\n // ======================================================\r\n\r\n updateCursor: function (nextWidth, nextHeight) {\r\n var self = this,\r\n current = self.current,\r\n $container = self.$refs.container,\r\n canPan,\r\n isZoomable;\r\n\r\n if (!current || self.isClosing || !self.Guestures) {\r\n return;\r\n }\r\n\r\n $container.removeClass(\"fancybox-is-zoomable fancybox-can-zoomIn fancybox-can-zoomOut fancybox-can-swipe fancybox-can-pan\");\r\n\r\n canPan = self.canPan(nextWidth, nextHeight);\r\n\r\n isZoomable = canPan ? true : self.isZoomable();\r\n\r\n $container.toggleClass(\"fancybox-is-zoomable\", isZoomable);\r\n\r\n $(\"[data-fancybox-zoom]\").prop(\"disabled\", !isZoomable);\r\n\r\n if (canPan) {\r\n $container.addClass(\"fancybox-can-pan\");\r\n } else if (\r\n isZoomable &&\r\n (current.opts.clickContent === \"zoom\" || ($.isFunction(current.opts.clickContent) && current.opts.clickContent(current) == \"zoom\"))\r\n ) {\r\n $container.addClass(\"fancybox-can-zoomIn\");\r\n } else if (current.opts.touch && (current.opts.touch.vertical || self.group.length > 1) && current.contentType !== \"video\") {\r\n $container.addClass(\"fancybox-can-swipe\");\r\n }\r\n },\r\n\r\n // Check if current slide is zoomable\r\n // ==================================\r\n\r\n isZoomable: function () {\r\n var self = this,\r\n current = self.current,\r\n fitPos;\r\n\r\n // Assume that slide is zoomable if:\r\n // - image is still loading\r\n // - actual size of the image is smaller than available area\r\n if (current && !self.isClosing && current.type === \"image\" && !current.hasError) {\r\n if (!current.isLoaded) {\r\n return true;\r\n }\r\n\r\n fitPos = self.getFitPos(current);\r\n\r\n if (fitPos && (current.width > fitPos.width || current.height > fitPos.height)) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n },\r\n\r\n // Check if current image dimensions are smaller than actual\r\n // =========================================================\r\n\r\n isScaledDown: function (nextWidth, nextHeight) {\r\n var self = this,\r\n rez = false,\r\n current = self.current,\r\n $content = current.$content;\r\n\r\n if (nextWidth !== undefined && nextHeight !== undefined) {\r\n rez = nextWidth < current.width && nextHeight < current.height;\r\n } else if ($content) {\r\n rez = $.fancybox.getTranslate($content);\r\n rez = rez.width < current.width && rez.height < current.height;\r\n }\r\n\r\n return rez;\r\n },\r\n\r\n // Check if image dimensions exceed parent element\r\n // ===============================================\r\n\r\n canPan: function (nextWidth, nextHeight) {\r\n var self = this,\r\n current = self.current,\r\n pos = null,\r\n rez = false;\r\n\r\n if (current.type === \"image\" && (current.isComplete || (nextWidth && nextHeight)) && !current.hasError) {\r\n rez = self.getFitPos(current);\r\n\r\n if (nextWidth !== undefined && nextHeight !== undefined) {\r\n pos = {\r\n width: nextWidth,\r\n height: nextHeight\r\n };\r\n } else if (current.isComplete) {\r\n pos = $.fancybox.getTranslate(current.$content);\r\n }\r\n\r\n if (pos && rez) {\r\n rez = Math.abs(pos.width - rez.width) > 1.5 || Math.abs(pos.height - rez.height) > 1.5;\r\n }\r\n }\r\n\r\n return rez;\r\n },\r\n\r\n // Load content into the slide\r\n // ===========================\r\n\r\n loadSlide: function (slide) {\r\n var self = this,\r\n type,\r\n $slide,\r\n ajaxLoad;\r\n\r\n if (slide.isLoading || slide.isLoaded) {\r\n return;\r\n }\r\n\r\n slide.isLoading = true;\r\n\r\n if (self.trigger(\"beforeLoad\", slide) === false) {\r\n slide.isLoading = false;\r\n\r\n return false;\r\n }\r\n\r\n type = slide.type;\r\n $slide = slide.$slide;\r\n\r\n $slide\r\n .off(\"refresh\")\r\n .trigger(\"onReset\")\r\n .addClass(slide.opts.slideClass);\r\n\r\n // Create content depending on the type\r\n switch (type) {\r\n case \"image\":\r\n self.setImage(slide);\r\n\r\n break;\r\n\r\n case \"iframe\":\r\n self.setIframe(slide);\r\n\r\n break;\r\n\r\n case \"html\":\r\n self.setContent(slide, slide.src || slide.content);\r\n\r\n break;\r\n\r\n case \"video\":\r\n self.setContent(\r\n slide,\r\n slide.opts.video.tpl\r\n .replace(/\\{\\{src\\}\\}/gi, slide.src)\r\n .replace(\"{{format}}\", slide.opts.videoFormat || slide.opts.video.format || \"\")\r\n .replace(\"{{poster}}\", slide.thumb || \"\")\r\n );\r\n\r\n break;\r\n\r\n case \"inline\":\r\n if ($(slide.src).length) {\r\n self.setContent(slide, $(slide.src));\r\n } else {\r\n self.setError(slide);\r\n }\r\n\r\n break;\r\n\r\n case \"ajax\":\r\n self.showLoading(slide);\r\n\r\n ajaxLoad = $.ajax(\r\n $.extend({}, slide.opts.ajax.settings, {\r\n url: slide.src,\r\n success: function (data, textStatus) {\r\n if (textStatus === \"success\") {\r\n self.setContent(slide, data);\r\n }\r\n },\r\n error: function (jqXHR, textStatus) {\r\n if (jqXHR && textStatus !== \"abort\") {\r\n self.setError(slide);\r\n }\r\n }\r\n })\r\n );\r\n\r\n $slide.one(\"onReset\", function () {\r\n ajaxLoad.abort();\r\n });\r\n\r\n break;\r\n\r\n default:\r\n self.setError(slide);\r\n\r\n break;\r\n }\r\n\r\n return true;\r\n },\r\n\r\n // Use thumbnail image, if possible\r\n // ================================\r\n\r\n setImage: function (slide) {\r\n var self = this,\r\n ghost;\r\n\r\n // Check if need to show loading icon\r\n setTimeout(function () {\r\n var $img = slide.$image;\r\n\r\n if (!self.isClosing && slide.isLoading && (!$img || !$img.length || !$img[0].complete) && !slide.hasError) {\r\n self.showLoading(slide);\r\n }\r\n }, 50);\r\n\r\n //Check if image has srcset\r\n self.checkSrcset(slide);\r\n\r\n // This will be wrapper containing both ghost and actual image\r\n slide.$content = $('
')\r\n .addClass(\"fancybox-is-hidden\")\r\n .appendTo(slide.$slide.addClass(\"fancybox-slide--image\"));\r\n\r\n // If we have a thumbnail, we can display it while actual image is loading\r\n // Users will not stare at black screen and actual image will appear gradually\r\n if (slide.opts.preload !== false && slide.opts.width && slide.opts.height && slide.thumb) {\r\n slide.width = slide.opts.width;\r\n slide.height = slide.opts.height;\r\n\r\n ghost = document.createElement(\"img\");\r\n\r\n ghost.onerror = function () {\r\n $(this).remove();\r\n\r\n slide.$ghost = null;\r\n };\r\n\r\n ghost.onload = function () {\r\n self.afterLoad(slide);\r\n };\r\n\r\n slide.$ghost = $(ghost)\r\n .addClass(\"fancybox-image\")\r\n .appendTo(slide.$content)\r\n .attr(\"src\", slide.thumb);\r\n }\r\n\r\n // Start loading actual image\r\n self.setBigImage(slide);\r\n },\r\n\r\n // Check if image has srcset and get the source\r\n // ============================================\r\n checkSrcset: function (slide) {\r\n var srcset = slide.opts.srcset || slide.opts.image.srcset,\r\n found,\r\n temp,\r\n pxRatio,\r\n windowWidth;\r\n\r\n // If we have \"srcset\", then we need to find first matching \"src\" value.\r\n // This is necessary, because when you set an src attribute, the browser will preload the image\r\n // before any javascript or even CSS is applied.\r\n if (srcset) {\r\n pxRatio = window.devicePixelRatio || 1;\r\n windowWidth = window.innerWidth * pxRatio;\r\n\r\n temp = srcset.split(\",\").map(function (el) {\r\n var ret = {};\r\n\r\n el.trim()\r\n .split(/\\s+/)\r\n .forEach(function (el, i) {\r\n var value = parseInt(el.substring(0, el.length - 1), 10);\r\n\r\n if (i === 0) {\r\n return (ret.url = el);\r\n }\r\n\r\n if (value) {\r\n ret.value = value;\r\n ret.postfix = el[el.length - 1];\r\n }\r\n });\r\n\r\n return ret;\r\n });\r\n\r\n // Sort by value\r\n temp.sort(function (a, b) {\r\n return a.value - b.value;\r\n });\r\n\r\n // Ok, now we have an array of all srcset values\r\n for (var j = 0; j < temp.length; j++) {\r\n var el = temp[j];\r\n\r\n if ((el.postfix === \"w\" && el.value >= windowWidth) || (el.postfix === \"x\" && el.value >= pxRatio)) {\r\n found = el;\r\n break;\r\n }\r\n }\r\n\r\n // If not found, take the last one\r\n if (!found && temp.length) {\r\n found = temp[temp.length - 1];\r\n }\r\n\r\n if (found) {\r\n slide.src = found.url;\r\n\r\n // If we have default width/height values, we can calculate height for matching source\r\n if (slide.width && slide.height && found.postfix == \"w\") {\r\n slide.height = (slide.width / slide.height) * found.value;\r\n slide.width = found.value;\r\n }\r\n\r\n slide.opts.srcset = srcset;\r\n }\r\n }\r\n },\r\n\r\n // Create full-size image\r\n // ======================\r\n\r\n setBigImage: function (slide) {\r\n var self = this,\r\n img = document.createElement(\"img\"),\r\n $img = $(img);\r\n\r\n slide.$image = $img\r\n .one(\"error\", function () {\r\n self.setError(slide);\r\n })\r\n .one(\"load\", function () {\r\n var sizes;\r\n\r\n if (!slide.$ghost) {\r\n self.resolveImageSlideSize(slide, this.naturalWidth, this.naturalHeight);\r\n\r\n self.afterLoad(slide);\r\n }\r\n\r\n if (self.isClosing) {\r\n return;\r\n }\r\n\r\n if (slide.opts.srcset) {\r\n sizes = slide.opts.sizes;\r\n\r\n if (!sizes || sizes === \"auto\") {\r\n sizes =\r\n (slide.width / slide.height > 1 && $W.width() / $W.height() > 1 ? \"100\" : Math.round((slide.width / slide.height) * 100)) +\r\n \"vw\";\r\n }\r\n\r\n $img.attr(\"sizes\", sizes).attr(\"srcset\", slide.opts.srcset);\r\n }\r\n\r\n // Hide temporary image after some delay\r\n if (slide.$ghost) {\r\n setTimeout(function () {\r\n if (slide.$ghost && !self.isClosing) {\r\n slide.$ghost.hide();\r\n }\r\n }, Math.min(300, Math.max(1000, slide.height / 1600)));\r\n }\r\n\r\n self.hideLoading(slide);\r\n })\r\n .addClass(\"fancybox-image\")\r\n .attr(\"src\", slide.src)\r\n .appendTo(slide.$content);\r\n\r\n if ((img.complete || img.readyState == \"complete\") && $img.naturalWidth && $img.naturalHeight) {\r\n $img.trigger(\"load\");\r\n } else if (img.error) {\r\n $img.trigger(\"error\");\r\n }\r\n },\r\n\r\n // Computes the slide size from image size and maxWidth/maxHeight\r\n // ==============================================================\r\n\r\n resolveImageSlideSize: function (slide, imgWidth, imgHeight) {\r\n var maxWidth = parseInt(slide.opts.width, 10),\r\n maxHeight = parseInt(slide.opts.height, 10);\r\n\r\n // Sets the default values from the image\r\n slide.width = imgWidth;\r\n slide.height = imgHeight;\r\n\r\n if (maxWidth > 0) {\r\n slide.width = maxWidth;\r\n slide.height = Math.floor((maxWidth * imgHeight) / imgWidth);\r\n }\r\n\r\n if (maxHeight > 0) {\r\n slide.width = Math.floor((maxHeight * imgWidth) / imgHeight);\r\n slide.height = maxHeight;\r\n }\r\n },\r\n\r\n // Create iframe wrapper, iframe and bindings\r\n // ==========================================\r\n\r\n setIframe: function (slide) {\r\n var self = this,\r\n opts = slide.opts.iframe,\r\n $slide = slide.$slide,\r\n $iframe;\r\n\r\n slide.$content = $('
')\r\n .css(opts.css)\r\n .appendTo($slide);\r\n\r\n $slide.addClass(\"fancybox-slide--\" + slide.contentType);\r\n\r\n slide.$iframe = $iframe = $(opts.tpl.replace(/\\{rnd\\}/g, new Date().getTime()))\r\n .attr(opts.attr)\r\n .appendTo(slide.$content);\r\n\r\n if (opts.preload) {\r\n self.showLoading(slide);\r\n\r\n // Unfortunately, it is not always possible to determine if iframe is successfully loaded\r\n // (due to browser security policy)\r\n\r\n $iframe.on(\"load.fb error.fb\", function (e) {\r\n this.isReady = 1;\r\n\r\n slide.$slide.trigger(\"refresh\");\r\n\r\n self.afterLoad(slide);\r\n });\r\n\r\n // Recalculate iframe content size\r\n // ===============================\r\n\r\n $slide.on(\"refresh.fb\", function () {\r\n var $content = slide.$content,\r\n frameWidth = opts.css.width,\r\n frameHeight = opts.css.height,\r\n $contents,\r\n $body;\r\n\r\n if ($iframe[0].isReady !== 1) {\r\n return;\r\n }\r\n\r\n try {\r\n $contents = $iframe.contents();\r\n $body = $contents.find(\"body\");\r\n } catch (ignore) {}\r\n\r\n // Calculate content dimensions, if it is accessible\r\n if ($body && $body.length && $body.children().length) {\r\n // Avoid scrolling to top (if multiple instances)\r\n $slide.css(\"overflow\", \"visible\");\r\n\r\n $content.css({\r\n width: \"100%\",\r\n \"max-width\": \"100%\",\r\n height: \"9999px\"\r\n });\r\n\r\n if (frameWidth === undefined) {\r\n frameWidth = Math.ceil(Math.max($body[0].clientWidth, $body.outerWidth(true)));\r\n }\r\n\r\n $content.css(\"width\", frameWidth ? frameWidth : \"\").css(\"max-width\", \"\");\r\n\r\n if (frameHeight === undefined) {\r\n frameHeight = Math.ceil(Math.max($body[0].clientHeight, $body.outerHeight(true)));\r\n }\r\n\r\n $content.css(\"height\", frameHeight ? frameHeight : \"\");\r\n\r\n $slide.css(\"overflow\", \"auto\");\r\n }\r\n\r\n $content.removeClass(\"fancybox-is-hidden\");\r\n });\r\n } else {\r\n self.afterLoad(slide);\r\n }\r\n\r\n $iframe.attr(\"src\", slide.src);\r\n\r\n // Remove iframe if closing or changing gallery item\r\n $slide.one(\"onReset\", function () {\r\n // This helps IE not to throw errors when closing\r\n try {\r\n $(this)\r\n .find(\"iframe\")\r\n .hide()\r\n .unbind()\r\n .attr(\"src\", \"//about:blank\");\r\n } catch (ignore) {}\r\n\r\n $(this)\r\n .off(\"refresh.fb\")\r\n .empty();\r\n\r\n slide.isLoaded = false;\r\n slide.isRevealed = false;\r\n });\r\n },\r\n\r\n // Wrap and append content to the slide\r\n // ======================================\r\n\r\n setContent: function (slide, content) {\r\n var self = this;\r\n\r\n if (self.isClosing) {\r\n return;\r\n }\r\n\r\n self.hideLoading(slide);\r\n\r\n if (slide.$content) {\r\n $.fancybox.stop(slide.$content);\r\n }\r\n\r\n slide.$slide.empty();\r\n\r\n // If content is a jQuery object, then it will be moved to the slide.\r\n // The placeholder is created so we will know where to put it back.\r\n if (isQuery(content) && content.parent().length) {\r\n // Make sure content is not already moved to fancyBox\r\n if (content.hasClass(\"fancybox-content\") || content.parent().hasClass(\"fancybox-content\")) {\r\n content.parents(\".fancybox-slide\").trigger(\"onReset\");\r\n }\r\n\r\n // Create temporary element marking original place of the content\r\n slide.$placeholder = $(\"
\")\r\n .hide()\r\n .insertAfter(content);\r\n\r\n // Make sure content is visible\r\n content.css(\"display\", \"inline-block\");\r\n } else if (!slide.hasError) {\r\n // If content is just a plain text, try to convert it to html\r\n if ($.type(content) === \"string\") {\r\n content = $(\"
\")\r\n .append($.trim(content))\r\n .contents();\r\n }\r\n\r\n // If \"filter\" option is provided, then filter content\r\n if (slide.opts.filter) {\r\n content = $(\"
\")\r\n .html(content)\r\n .find(slide.opts.filter);\r\n }\r\n }\r\n\r\n slide.$slide.one(\"onReset\", function () {\r\n // Pause all html5 video/audio\r\n $(this)\r\n .find(\"video,audio\")\r\n .trigger(\"pause\");\r\n\r\n // Put content back\r\n if (slide.$placeholder) {\r\n slide.$placeholder.after(content.removeClass(\"fancybox-content\").hide()).remove();\r\n\r\n slide.$placeholder = null;\r\n }\r\n\r\n // Remove custom close button\r\n if (slide.$smallBtn) {\r\n slide.$smallBtn.remove();\r\n\r\n slide.$smallBtn = null;\r\n }\r\n\r\n // Remove content and mark slide as not loaded\r\n if (!slide.hasError) {\r\n $(this).empty();\r\n\r\n slide.isLoaded = false;\r\n slide.isRevealed = false;\r\n }\r\n });\r\n\r\n $(content).appendTo(slide.$slide);\r\n\r\n if ($(content).is(\"video,audio\")) {\r\n $(content).addClass(\"fancybox-video\");\r\n\r\n $(content).wrap(\"
\");\r\n\r\n slide.contentType = \"video\";\r\n\r\n slide.opts.width = slide.opts.width || $(content).attr(\"width\");\r\n slide.opts.height = slide.opts.height || $(content).attr(\"height\");\r\n }\r\n\r\n slide.$content = slide.$slide\r\n .children()\r\n .filter(\"div,form,main,video,audio,article,.fancybox-content\")\r\n .first();\r\n\r\n slide.$content.siblings().hide();\r\n\r\n // Re-check if there is a valid content\r\n // (in some cases, ajax response can contain various elements or plain text)\r\n if (!slide.$content.length) {\r\n slide.$content = slide.$slide\r\n .wrapInner(\"
\")\r\n .children()\r\n .first();\r\n }\r\n\r\n slide.$content.addClass(\"fancybox-content\");\r\n\r\n slide.$slide.addClass(\"fancybox-slide--\" + slide.contentType);\r\n\r\n self.afterLoad(slide);\r\n },\r\n\r\n // Display error message\r\n // =====================\r\n\r\n setError: function (slide) {\r\n slide.hasError = true;\r\n\r\n slide.$slide\r\n .trigger(\"onReset\")\r\n .removeClass(\"fancybox-slide--\" + slide.contentType)\r\n .addClass(\"fancybox-slide--error\");\r\n\r\n slide.contentType = \"html\";\r\n\r\n this.setContent(slide, this.translate(slide, slide.opts.errorTpl));\r\n\r\n if (slide.pos === this.currPos) {\r\n this.isAnimating = false;\r\n }\r\n },\r\n\r\n // Show loading icon inside the slide\r\n // ==================================\r\n\r\n showLoading: function (slide) {\r\n var self = this;\r\n\r\n slide = slide || self.current;\r\n\r\n if (slide && !slide.$spinner) {\r\n slide.$spinner = $(self.translate(self, self.opts.spinnerTpl))\r\n .appendTo(slide.$slide)\r\n .hide()\r\n .fadeIn(\"fast\");\r\n }\r\n },\r\n\r\n // Remove loading icon from the slide\r\n // ==================================\r\n\r\n hideLoading: function (slide) {\r\n var self = this;\r\n\r\n slide = slide || self.current;\r\n\r\n if (slide && slide.$spinner) {\r\n slide.$spinner.stop().remove();\r\n\r\n delete slide.$spinner;\r\n }\r\n },\r\n\r\n // Adjustments after slide content has been loaded\r\n // ===============================================\r\n\r\n afterLoad: function (slide) {\r\n var self = this;\r\n\r\n if (self.isClosing) {\r\n return;\r\n }\r\n\r\n slide.isLoading = false;\r\n slide.isLoaded = true;\r\n\r\n self.trigger(\"afterLoad\", slide);\r\n\r\n self.hideLoading(slide);\r\n\r\n // Add small close button\r\n if (slide.opts.smallBtn && (!slide.$smallBtn || !slide.$smallBtn.length)) {\r\n slide.$smallBtn = $(self.translate(slide, slide.opts.btnTpl.smallBtn)).appendTo(slide.$content);\r\n }\r\n\r\n // Disable right click\r\n if (slide.opts.protect && slide.$content && !slide.hasError) {\r\n slide.$content.on(\"contextmenu.fb\", function (e) {\r\n if (e.button == 2) {\r\n e.preventDefault();\r\n }\r\n\r\n return true;\r\n });\r\n\r\n // Add fake element on top of the image\r\n // This makes a bit harder for user to select image\r\n if (slide.type === \"image\") {\r\n $('
').appendTo(slide.$content);\r\n }\r\n }\r\n\r\n self.adjustCaption(slide);\r\n\r\n self.adjustLayout(slide);\r\n\r\n if (slide.pos === self.currPos) {\r\n self.updateCursor();\r\n }\r\n\r\n self.revealContent(slide);\r\n },\r\n\r\n // Prevent caption overlap,\r\n // fix css inconsistency across browsers\r\n // =====================================\r\n\r\n adjustCaption: function (slide) {\r\n var self = this,\r\n current = slide || self.current,\r\n caption = current.opts.caption,\r\n preventOverlap = current.opts.preventCaptionOverlap,\r\n $caption = self.$refs.caption,\r\n $clone,\r\n captionH = false;\r\n\r\n $caption.toggleClass(\"fancybox-caption--separate\", preventOverlap);\r\n\r\n if (preventOverlap && caption && caption.length) {\r\n if (current.pos !== self.currPos) {\r\n $clone = $caption.clone().appendTo($caption.parent());\r\n\r\n $clone\r\n .children()\r\n .eq(0)\r\n .empty()\r\n .html(caption);\r\n\r\n captionH = $clone.outerHeight(true);\r\n\r\n $clone.empty().remove();\r\n } else if (self.$caption) {\r\n captionH = self.$caption.outerHeight(true);\r\n }\r\n\r\n current.$slide.css(\"padding-bottom\", captionH || \"\");\r\n }\r\n },\r\n\r\n // Simple hack to fix inconsistency across browsers, described here (affects Edge, too):\r\n // https://bugzilla.mozilla.org/show_bug.cgi?id=748518\r\n // ====================================================================================\r\n\r\n adjustLayout: function (slide) {\r\n var self = this,\r\n current = slide || self.current,\r\n scrollHeight,\r\n marginBottom,\r\n inlinePadding,\r\n actualPadding;\r\n\r\n if (current.isLoaded && current.opts.disableLayoutFix !== true) {\r\n current.$content.css(\"margin-bottom\", \"\");\r\n\r\n // If we would always set margin-bottom for the content,\r\n // then it would potentially break vertical align\r\n if (current.$content.outerHeight() > current.$slide.height() + 0.5) {\r\n inlinePadding = current.$slide[0].style[\"padding-bottom\"];\r\n actualPadding = current.$slide.css(\"padding-bottom\");\r\n\r\n if (parseFloat(actualPadding) > 0) {\r\n scrollHeight = current.$slide[0].scrollHeight;\r\n\r\n current.$slide.css(\"padding-bottom\", 0);\r\n\r\n if (Math.abs(scrollHeight - current.$slide[0].scrollHeight) < 1) {\r\n marginBottom = actualPadding;\r\n }\r\n\r\n current.$slide.css(\"padding-bottom\", inlinePadding);\r\n }\r\n }\r\n\r\n current.$content.css(\"margin-bottom\", marginBottom);\r\n }\r\n },\r\n\r\n // Make content visible\r\n // This method is called right after content has been loaded or\r\n // user navigates gallery and transition should start\r\n // ============================================================\r\n\r\n revealContent: function (slide) {\r\n var self = this,\r\n $slide = slide.$slide,\r\n end = false,\r\n start = false,\r\n isMoved = self.isMoved(slide),\r\n isRevealed = slide.isRevealed,\r\n effect,\r\n effectClassName,\r\n duration,\r\n opacity;\r\n\r\n slide.isRevealed = true;\r\n\r\n effect = slide.opts[self.firstRun ? \"animationEffect\" : \"transitionEffect\"];\r\n duration = slide.opts[self.firstRun ? \"animationDuration\" : \"transitionDuration\"];\r\n\r\n duration = parseInt(slide.forcedDuration === undefined ? duration : slide.forcedDuration, 10);\r\n\r\n if (isMoved || slide.pos !== self.currPos || !duration) {\r\n effect = false;\r\n }\r\n\r\n // Check if can zoom\r\n if (effect === \"zoom\") {\r\n if (slide.pos === self.currPos && duration && slide.type === \"image\" && !slide.hasError && (start = self.getThumbPos(slide))) {\r\n end = self.getFitPos(slide);\r\n } else {\r\n effect = \"fade\";\r\n }\r\n }\r\n\r\n // Zoom animation\r\n // ==============\r\n if (effect === \"zoom\") {\r\n self.isAnimating = true;\r\n\r\n end.scaleX = end.width / start.width;\r\n end.scaleY = end.height / start.height;\r\n\r\n // Check if we need to animate opacity\r\n opacity = slide.opts.zoomOpacity;\r\n\r\n if (opacity == \"auto\") {\r\n opacity = Math.abs(slide.width / slide.height - start.width / start.height) > 0.1;\r\n }\r\n\r\n if (opacity) {\r\n start.opacity = 0.1;\r\n end.opacity = 1;\r\n }\r\n\r\n // Draw image at start position\r\n $.fancybox.setTranslate(slide.$content.removeClass(\"fancybox-is-hidden\"), start);\r\n\r\n forceRedraw(slide.$content);\r\n\r\n // Start animation\r\n $.fancybox.animate(slide.$content, end, duration, function () {\r\n self.isAnimating = false;\r\n\r\n self.complete();\r\n });\r\n\r\n return;\r\n }\r\n\r\n self.updateSlide(slide);\r\n\r\n // Simply show content if no effect\r\n // ================================\r\n if (!effect) {\r\n slide.$content.removeClass(\"fancybox-is-hidden\");\r\n\r\n if (!isRevealed && isMoved && slide.type === \"image\" && !slide.hasError) {\r\n slide.$content.hide().fadeIn(\"fast\");\r\n }\r\n\r\n if (slide.pos === self.currPos) {\r\n self.complete();\r\n }\r\n\r\n return;\r\n }\r\n\r\n // Prepare for CSS transiton\r\n // =========================\r\n $.fancybox.stop($slide);\r\n\r\n //effectClassName = \"fancybox-animated fancybox-slide--\" + (slide.pos >= self.prevPos ? \"next\" : \"previous\") + \" fancybox-fx-\" + effect;\r\n effectClassName = \"fancybox-slide--\" + (slide.pos >= self.prevPos ? \"next\" : \"previous\") + \" fancybox-animated fancybox-fx-\" + effect;\r\n\r\n $slide.addClass(effectClassName).removeClass(\"fancybox-slide--current\"); //.addClass(effectClassName);\r\n\r\n slide.$content.removeClass(\"fancybox-is-hidden\");\r\n\r\n // Force reflow\r\n forceRedraw($slide);\r\n\r\n if (slide.type !== \"image\") {\r\n slide.$content.hide().show(0);\r\n }\r\n\r\n $.fancybox.animate(\r\n $slide,\r\n \"fancybox-slide--current\",\r\n duration,\r\n function () {\r\n $slide.removeClass(effectClassName).css({\r\n transform: \"\",\r\n opacity: \"\"\r\n });\r\n\r\n if (slide.pos === self.currPos) {\r\n self.complete();\r\n }\r\n },\r\n true\r\n );\r\n },\r\n\r\n // Check if we can and have to zoom from thumbnail\r\n //================================================\r\n\r\n getThumbPos: function (slide) {\r\n var rez = false,\r\n $thumb = slide.$thumb,\r\n thumbPos,\r\n btw,\r\n brw,\r\n bbw,\r\n blw;\r\n\r\n if (!$thumb || !inViewport($thumb[0])) {\r\n return false;\r\n }\r\n\r\n thumbPos = $.fancybox.getTranslate($thumb);\r\n\r\n btw = parseFloat($thumb.css(\"border-top-width\") || 0);\r\n brw = parseFloat($thumb.css(\"border-right-width\") || 0);\r\n bbw = parseFloat($thumb.css(\"border-bottom-width\") || 0);\r\n blw = parseFloat($thumb.css(\"border-left-width\") || 0);\r\n\r\n rez = {\r\n top: thumbPos.top + btw,\r\n left: thumbPos.left + blw,\r\n width: thumbPos.width - brw - blw,\r\n height: thumbPos.height - btw - bbw,\r\n scaleX: 1,\r\n scaleY: 1\r\n };\r\n\r\n return thumbPos.width > 0 && thumbPos.height > 0 ? rez : false;\r\n },\r\n\r\n // Final adjustments after current gallery item is moved to position\r\n // and it`s content is loaded\r\n // ==================================================================\r\n\r\n complete: function () {\r\n var self = this,\r\n current = self.current,\r\n slides = {},\r\n $el;\r\n\r\n if (self.isMoved() || !current.isLoaded) {\r\n return;\r\n }\r\n\r\n if (!current.isComplete) {\r\n current.isComplete = true;\r\n\r\n current.$slide.siblings().trigger(\"onReset\");\r\n\r\n self.preload(\"inline\");\r\n\r\n // Trigger any CSS transiton inside the slide\r\n forceRedraw(current.$slide);\r\n\r\n current.$slide.addClass(\"fancybox-slide--complete\");\r\n\r\n // Remove unnecessary slides\r\n $.each(self.slides, function (key, slide) {\r\n if (slide.pos >= self.currPos - 1 && slide.pos <= self.currPos + 1) {\r\n slides[slide.pos] = slide;\r\n } else if (slide) {\r\n $.fancybox.stop(slide.$slide);\r\n\r\n slide.$slide.off().remove();\r\n }\r\n });\r\n\r\n self.slides = slides;\r\n }\r\n\r\n self.isAnimating = false;\r\n\r\n self.updateCursor();\r\n\r\n self.trigger(\"afterShow\");\r\n\r\n // Autoplay first html5 video/audio\r\n if (!!current.opts.video.autoStart) {\r\n current.$slide\r\n .find(\"video,audio\")\r\n .filter(\":visible:first\")\r\n .trigger(\"play\")\r\n .one(\"ended\", function () {\r\n if (Document.exitFullscreen) {\r\n Document.exitFullscreen();\r\n } else if (this.webkitExitFullscreen) {\r\n this.webkitExitFullscreen();\r\n }\r\n\r\n self.next();\r\n });\r\n }\r\n\r\n // Try to focus on the first focusable element\r\n if (current.opts.autoFocus && current.contentType === \"html\") {\r\n // Look for the first input with autofocus attribute\r\n $el = current.$content.find(\"input[autofocus]:enabled:visible:first\");\r\n\r\n if ($el.length) {\r\n $el.trigger(\"focus\");\r\n } else {\r\n self.focus(null, true);\r\n }\r\n }\r\n\r\n // Avoid jumping\r\n current.$slide.scrollTop(0).scrollLeft(0);\r\n },\r\n\r\n // Preload next and previous slides\r\n // ================================\r\n\r\n preload: function (type) {\r\n var self = this,\r\n prev,\r\n next;\r\n\r\n if (self.group.length < 2) {\r\n return;\r\n }\r\n\r\n next = self.slides[self.currPos + 1];\r\n prev = self.slides[self.currPos - 1];\r\n\r\n if (prev && prev.type === type) {\r\n self.loadSlide(prev);\r\n }\r\n\r\n if (next && next.type === type) {\r\n self.loadSlide(next);\r\n }\r\n },\r\n\r\n // Try to find and focus on the first focusable element\r\n // ====================================================\r\n\r\n focus: function (e, firstRun) {\r\n var self = this,\r\n focusableStr = [\r\n \"a[href]\",\r\n \"area[href]\",\r\n 'input:not([disabled]):not([type=\"hidden\"]):not([aria-hidden])',\r\n \"select:not([disabled]):not([aria-hidden])\",\r\n \"textarea:not([disabled]):not([aria-hidden])\",\r\n \"button:not([disabled]):not([aria-hidden])\",\r\n \"iframe\",\r\n \"object\",\r\n \"embed\",\r\n \"video\",\r\n \"audio\",\r\n \"[contenteditable]\",\r\n '[tabindex]:not([tabindex^=\"-\"])'\r\n ].join(\",\"),\r\n focusableItems,\r\n focusedItemIndex;\r\n\r\n if (self.isClosing) {\r\n return;\r\n }\r\n\r\n if (e || !self.current || !self.current.isComplete) {\r\n // Focus on any element inside fancybox\r\n focusableItems = self.$refs.container.find(\"*:visible\");\r\n } else {\r\n // Focus inside current slide\r\n focusableItems = self.current.$slide.find(\"*:visible\" + (firstRun ? \":not(.fancybox-close-small)\" : \"\"));\r\n }\r\n\r\n focusableItems = focusableItems.filter(focusableStr).filter(function () {\r\n return $(this).css(\"visibility\") !== \"hidden\" && !$(this).hasClass(\"disabled\");\r\n });\r\n\r\n if (focusableItems.length) {\r\n focusedItemIndex = focusableItems.index(document.activeElement);\r\n\r\n if (e && e.shiftKey) {\r\n // Back tab\r\n if (focusedItemIndex < 0 || focusedItemIndex == 0) {\r\n e.preventDefault();\r\n\r\n focusableItems.eq(focusableItems.length - 1).trigger(\"focus\");\r\n }\r\n } else {\r\n // Outside or Forward tab\r\n if (focusedItemIndex < 0 || focusedItemIndex == focusableItems.length - 1) {\r\n if (e) {\r\n e.preventDefault();\r\n }\r\n\r\n focusableItems.eq(0).trigger(\"focus\");\r\n }\r\n }\r\n } else {\r\n self.$refs.container.trigger(\"focus\");\r\n }\r\n },\r\n\r\n // Activates current instance - brings container to the front and enables keyboard,\r\n // notifies other instances about deactivating\r\n // =================================================================================\r\n\r\n activate: function () {\r\n var self = this;\r\n\r\n // Deactivate all instances\r\n $(\".fancybox-container\").each(function () {\r\n var instance = $(this).data(\"FancyBox\");\r\n\r\n // Skip self and closing instances\r\n if (instance && instance.id !== self.id && !instance.isClosing) {\r\n instance.trigger(\"onDeactivate\");\r\n\r\n instance.removeEvents();\r\n\r\n instance.isVisible = false;\r\n }\r\n });\r\n\r\n self.isVisible = true;\r\n\r\n if (self.current || self.isIdle) {\r\n self.update();\r\n\r\n self.updateControls();\r\n }\r\n\r\n self.trigger(\"onActivate\");\r\n\r\n self.addEvents();\r\n },\r\n\r\n // Start closing procedure\r\n // This will start \"zoom-out\" animation if needed and clean everything up afterwards\r\n // =================================================================================\r\n\r\n close: function (e, d) {\r\n var self = this,\r\n current = self.current,\r\n effect,\r\n duration,\r\n $content,\r\n domRect,\r\n opacity,\r\n start,\r\n end;\r\n\r\n var done = function () {\r\n self.cleanUp(e);\r\n };\r\n\r\n if (self.isClosing) {\r\n return false;\r\n }\r\n\r\n self.isClosing = true;\r\n\r\n // If beforeClose callback prevents closing, make sure content is centered\r\n if (self.trigger(\"beforeClose\", e) === false) {\r\n self.isClosing = false;\r\n\r\n requestAFrame(function () {\r\n self.update();\r\n });\r\n\r\n return false;\r\n }\r\n\r\n // Remove all events\r\n // If there are multiple instances, they will be set again by \"activate\" method\r\n self.removeEvents();\r\n\r\n $content = current.$content;\r\n effect = current.opts.animationEffect;\r\n duration = $.isNumeric(d) ? d : effect ? current.opts.animationDuration : 0;\r\n\r\n current.$slide.removeClass(\"fancybox-slide--complete fancybox-slide--next fancybox-slide--previous fancybox-animated\");\r\n\r\n if (e !== true) {\r\n $.fancybox.stop(current.$slide);\r\n } else {\r\n effect = false;\r\n }\r\n\r\n // Remove other slides\r\n current.$slide\r\n .siblings()\r\n .trigger(\"onReset\")\r\n .remove();\r\n\r\n // Trigger animations\r\n if (duration) {\r\n self.$refs.container\r\n .removeClass(\"fancybox-is-open\")\r\n .addClass(\"fancybox-is-closing\")\r\n .css(\"transition-duration\", duration + \"ms\");\r\n }\r\n\r\n // Clean up\r\n self.hideLoading(current);\r\n\r\n self.hideControls(true);\r\n\r\n self.updateCursor();\r\n\r\n // Check if possible to zoom-out\r\n if (\r\n effect === \"zoom\" &&\r\n !($content && duration && current.type === \"image\" && !self.isMoved() && !current.hasError && (end = self.getThumbPos(current)))\r\n ) {\r\n effect = \"fade\";\r\n }\r\n\r\n if (effect === \"zoom\") {\r\n $.fancybox.stop($content);\r\n\r\n domRect = $.fancybox.getTranslate($content);\r\n\r\n start = {\r\n top: domRect.top,\r\n left: domRect.left,\r\n scaleX: domRect.width / end.width,\r\n scaleY: domRect.height / end.height,\r\n width: end.width,\r\n height: end.height\r\n };\r\n\r\n // Check if we need to animate opacity\r\n opacity = current.opts.zoomOpacity;\r\n\r\n if (opacity == \"auto\") {\r\n opacity = Math.abs(current.width / current.height - end.width / end.height) > 0.1;\r\n }\r\n\r\n if (opacity) {\r\n end.opacity = 0;\r\n }\r\n\r\n $.fancybox.setTranslate($content, start);\r\n\r\n forceRedraw($content);\r\n\r\n $.fancybox.animate($content, end, duration, done);\r\n\r\n return true;\r\n }\r\n\r\n if (effect && duration) {\r\n $.fancybox.animate(\r\n current.$slide.addClass(\"fancybox-slide--previous\").removeClass(\"fancybox-slide--current\"),\r\n \"fancybox-animated fancybox-fx-\" + effect,\r\n duration,\r\n done\r\n );\r\n } else {\r\n // If skip animation\r\n if (e === true) {\r\n setTimeout(done, duration);\r\n } else {\r\n done();\r\n }\r\n }\r\n\r\n return true;\r\n },\r\n\r\n // Final adjustments after removing the instance\r\n // =============================================\r\n\r\n cleanUp: function (e) {\r\n var self = this,\r\n instance,\r\n $focus = self.current.opts.$orig,\r\n x,\r\n y;\r\n\r\n self.current.$slide.trigger(\"onReset\");\r\n\r\n self.$refs.container.empty().remove();\r\n\r\n self.trigger(\"afterClose\", e);\r\n\r\n // Place back focus\r\n if (!!self.current.opts.backFocus) {\r\n if (!$focus || !$focus.length || !$focus.is(\":visible\")) {\r\n $focus = self.$trigger;\r\n }\r\n\r\n if ($focus && $focus.length) {\r\n x = window.scrollX;\r\n y = window.scrollY;\r\n\r\n $focus.trigger(\"focus\");\r\n\r\n $(\"html, body\")\r\n .scrollTop(y)\r\n .scrollLeft(x);\r\n }\r\n }\r\n\r\n self.current = null;\r\n\r\n // Check if there are other instances\r\n instance = $.fancybox.getInstance();\r\n\r\n if (instance) {\r\n instance.activate();\r\n } else {\r\n $(\"body\").removeClass(\"fancybox-active compensate-for-scrollbar\");\r\n\r\n $(\"#fancybox-style-noscroll\").remove();\r\n }\r\n },\r\n\r\n // Call callback and trigger an event\r\n // ==================================\r\n\r\n trigger: function (name, slide) {\r\n var args = Array.prototype.slice.call(arguments, 1),\r\n self = this,\r\n obj = slide && slide.opts ? slide : self.current,\r\n rez;\r\n\r\n if (obj) {\r\n args.unshift(obj);\r\n } else {\r\n obj = self;\r\n }\r\n\r\n args.unshift(self);\r\n\r\n if ($.isFunction(obj.opts[name])) {\r\n rez = obj.opts[name].apply(obj, args);\r\n }\r\n\r\n if (rez === false) {\r\n return rez;\r\n }\r\n\r\n if (name === \"afterClose\" || !self.$refs) {\r\n $D.trigger(name + \".fb\", args);\r\n } else {\r\n self.$refs.container.trigger(name + \".fb\", args);\r\n }\r\n },\r\n\r\n // Update infobar values, navigation button states and reveal caption\r\n // ==================================================================\r\n\r\n updateControls: function () {\r\n var self = this,\r\n current = self.current,\r\n index = current.index,\r\n $container = self.$refs.container,\r\n $caption = self.$refs.caption,\r\n caption = current.opts.caption;\r\n\r\n // Recalculate content dimensions\r\n current.$slide.trigger(\"refresh\");\r\n\r\n // Set caption\r\n if (caption && caption.length) {\r\n self.$caption = $caption;\r\n\r\n $caption\r\n .children()\r\n .eq(0)\r\n .html(caption);\r\n } else {\r\n self.$caption = null;\r\n }\r\n\r\n if (!self.hasHiddenControls && !self.isIdle) {\r\n self.showControls();\r\n }\r\n\r\n // Update info and navigation elements\r\n $container.find(\"[data-fancybox-count]\").html(self.group.length);\r\n $container.find(\"[data-fancybox-index]\").html(index + 1);\r\n\r\n $container.find(\"[data-fancybox-prev]\").prop(\"disabled\", !current.opts.loop && index <= 0);\r\n $container.find(\"[data-fancybox-next]\").prop(\"disabled\", !current.opts.loop && index >= self.group.length - 1);\r\n\r\n if (current.type === \"image\") {\r\n // Re-enable buttons; update download button source\r\n $container\r\n .find(\"[data-fancybox-zoom]\")\r\n .show()\r\n .end()\r\n .find(\"[data-fancybox-download]\")\r\n .attr(\"href\", current.opts.image.src || current.src)\r\n .show();\r\n } else if (current.opts.toolbar) {\r\n $container.find(\"[data-fancybox-download],[data-fancybox-zoom]\").hide();\r\n }\r\n\r\n // Make sure focus is not on disabled button/element\r\n if ($(document.activeElement).is(\":hidden,[disabled]\")) {\r\n self.$refs.container.trigger(\"focus\");\r\n }\r\n },\r\n\r\n // Hide toolbar and caption\r\n // ========================\r\n\r\n hideControls: function (andCaption) {\r\n var self = this,\r\n arr = [\"infobar\", \"toolbar\", \"nav\"];\r\n\r\n if (andCaption || !self.current.opts.preventCaptionOverlap) {\r\n arr.push(\"caption\");\r\n }\r\n\r\n this.$refs.container.removeClass(\r\n arr\r\n .map(function (i) {\r\n return \"fancybox-show-\" + i;\r\n })\r\n .join(\" \")\r\n );\r\n\r\n this.hasHiddenControls = true;\r\n },\r\n\r\n showControls: function () {\r\n var self = this,\r\n opts = self.current ? self.current.opts : self.opts,\r\n $container = self.$refs.container;\r\n\r\n self.hasHiddenControls = false;\r\n self.idleSecondsCounter = 0;\r\n\r\n $container\r\n .toggleClass(\"fancybox-show-toolbar\", !!(opts.toolbar && opts.buttons))\r\n .toggleClass(\"fancybox-show-infobar\", !!(opts.infobar && self.group.length > 1))\r\n .toggleClass(\"fancybox-show-caption\", !!self.$caption)\r\n .toggleClass(\"fancybox-show-nav\", !!(opts.arrows && self.group.length > 1))\r\n .toggleClass(\"fancybox-is-modal\", !!opts.modal);\r\n },\r\n\r\n // Toggle toolbar and caption\r\n // ==========================\r\n\r\n toggleControls: function () {\r\n if (this.hasHiddenControls) {\r\n this.showControls();\r\n } else {\r\n this.hideControls();\r\n }\r\n }\r\n });\r\n\r\n $.fancybox = {\r\n version: \"3.5.7\",\r\n defaults: defaults,\r\n\r\n // Get current instance and execute a command.\r\n //\r\n // Examples of usage:\r\n //\r\n // $instance = $.fancybox.getInstance();\r\n // $.fancybox.getInstance().jumpTo( 1 );\r\n // $.fancybox.getInstance( 'jumpTo', 1 );\r\n // $.fancybox.getInstance( function() {\r\n // console.info( this.currIndex );\r\n // });\r\n // ======================================================\r\n\r\n getInstance: function (command) {\r\n var instance = $('.fancybox-container:not(\".fancybox-is-closing\"):last').data(\"FancyBox\"),\r\n args = Array.prototype.slice.call(arguments, 1);\r\n\r\n if (instance instanceof FancyBox) {\r\n if ($.type(command) === \"string\") {\r\n instance[command].apply(instance, args);\r\n } else if ($.type(command) === \"function\") {\r\n command.apply(instance, args);\r\n }\r\n\r\n return instance;\r\n }\r\n\r\n return false;\r\n },\r\n\r\n // Create new instance\r\n // ===================\r\n\r\n open: function (items, opts, index) {\r\n return new FancyBox(items, opts, index);\r\n },\r\n\r\n // Close current or all instances\r\n // ==============================\r\n\r\n close: function (all) {\r\n var instance = this.getInstance();\r\n\r\n if (instance) {\r\n instance.close();\r\n\r\n // Try to find and close next instance\r\n if (all === true) {\r\n this.close(all);\r\n }\r\n }\r\n },\r\n\r\n // Close all instances and unbind all events\r\n // =========================================\r\n\r\n destroy: function () {\r\n this.close(true);\r\n\r\n $D.add(\"body\").off(\"click.fb-start\", \"**\");\r\n },\r\n\r\n // Try to detect mobile devices\r\n // ============================\r\n\r\n isMobile: /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),\r\n\r\n // Detect if 'translate3d' support is available\r\n // ============================================\r\n\r\n use3d: (function () {\r\n var div = document.createElement(\"div\");\r\n\r\n return (\r\n window.getComputedStyle &&\r\n window.getComputedStyle(div) &&\r\n window.getComputedStyle(div).getPropertyValue(\"transform\") &&\r\n !(document.documentMode && document.documentMode < 11)\r\n );\r\n })(),\r\n\r\n // Helper function to get current visual state of an element\r\n // returns array[ top, left, horizontal-scale, vertical-scale, opacity ]\r\n // =====================================================================\r\n\r\n getTranslate: function ($el) {\r\n var domRect;\r\n\r\n if (!$el || !$el.length) {\r\n return false;\r\n }\r\n\r\n domRect = $el[0].getBoundingClientRect();\r\n\r\n return {\r\n top: domRect.top || 0,\r\n left: domRect.left || 0,\r\n width: domRect.width,\r\n height: domRect.height,\r\n opacity: parseFloat($el.css(\"opacity\"))\r\n };\r\n },\r\n\r\n // Shortcut for setting \"translate3d\" properties for element\r\n // Can set be used to set opacity, too\r\n // ========================================================\r\n\r\n setTranslate: function ($el, props) {\r\n var str = \"\",\r\n css = {};\r\n\r\n if (!$el || !props) {\r\n return;\r\n }\r\n\r\n if (props.left !== undefined || props.top !== undefined) {\r\n str =\r\n (props.left === undefined ? $el.position().left : props.left) +\r\n \"px, \" +\r\n (props.top === undefined ? $el.position().top : props.top) +\r\n \"px\";\r\n\r\n if (this.use3d) {\r\n str = \"translate3d(\" + str + \", 0px)\";\r\n } else {\r\n str = \"translate(\" + str + \")\";\r\n }\r\n }\r\n\r\n if (props.scaleX !== undefined && props.scaleY !== undefined) {\r\n str += \" scale(\" + props.scaleX + \", \" + props.scaleY + \")\";\r\n } else if (props.scaleX !== undefined) {\r\n str += \" scaleX(\" + props.scaleX + \")\";\r\n }\r\n\r\n if (str.length) {\r\n css.transform = str;\r\n }\r\n\r\n if (props.opacity !== undefined) {\r\n css.opacity = props.opacity;\r\n }\r\n\r\n if (props.width !== undefined) {\r\n css.width = props.width;\r\n }\r\n\r\n if (props.height !== undefined) {\r\n css.height = props.height;\r\n }\r\n\r\n return $el.css(css);\r\n },\r\n\r\n // Simple CSS transition handler\r\n // =============================\r\n\r\n animate: function ($el, to, duration, callback, leaveAnimationName) {\r\n var self = this,\r\n from;\r\n\r\n if ($.isFunction(duration)) {\r\n callback = duration;\r\n duration = null;\r\n }\r\n\r\n self.stop($el);\r\n\r\n from = self.getTranslate($el);\r\n\r\n $el.on(transitionEnd, function (e) {\r\n // Skip events from child elements and z-index change\r\n if (e && e.originalEvent && (!$el.is(e.originalEvent.target) || e.originalEvent.propertyName == \"z-index\")) {\r\n return;\r\n }\r\n\r\n self.stop($el);\r\n\r\n if ($.isNumeric(duration)) {\r\n $el.css(\"transition-duration\", \"\");\r\n }\r\n\r\n if ($.isPlainObject(to)) {\r\n if (to.scaleX !== undefined && to.scaleY !== undefined) {\r\n self.setTranslate($el, {\r\n top: to.top,\r\n left: to.left,\r\n width: from.width * to.scaleX,\r\n height: from.height * to.scaleY,\r\n scaleX: 1,\r\n scaleY: 1\r\n });\r\n }\r\n } else if (leaveAnimationName !== true) {\r\n $el.removeClass(to);\r\n }\r\n\r\n if ($.isFunction(callback)) {\r\n callback(e);\r\n }\r\n });\r\n\r\n if ($.isNumeric(duration)) {\r\n $el.css(\"transition-duration\", duration + \"ms\");\r\n }\r\n\r\n // Start animation by changing CSS properties or class name\r\n if ($.isPlainObject(to)) {\r\n if (to.scaleX !== undefined && to.scaleY !== undefined) {\r\n delete to.width;\r\n delete to.height;\r\n\r\n if ($el.parent().hasClass(\"fancybox-slide--image\")) {\r\n $el.parent().addClass(\"fancybox-is-scaling\");\r\n }\r\n }\r\n\r\n $.fancybox.setTranslate($el, to);\r\n } else {\r\n $el.addClass(to);\r\n }\r\n\r\n // Make sure that `transitionend` callback gets fired\r\n $el.data(\r\n \"timer\",\r\n setTimeout(function () {\r\n $el.trigger(transitionEnd);\r\n }, duration + 33)\r\n );\r\n },\r\n\r\n stop: function ($el, callCallback) {\r\n if ($el && $el.length) {\r\n clearTimeout($el.data(\"timer\"));\r\n\r\n if (callCallback) {\r\n $el.trigger(transitionEnd);\r\n }\r\n\r\n $el.off(transitionEnd).css(\"transition-duration\", \"\");\r\n\r\n $el.parent().removeClass(\"fancybox-is-scaling\");\r\n }\r\n }\r\n };\r\n\r\n // Default click handler for \"fancyboxed\" links\r\n // ============================================\r\n\r\n function _run(e, opts) {\r\n var items = [],\r\n index = 0,\r\n $target,\r\n value,\r\n instance;\r\n\r\n // Avoid opening multiple times\r\n if (e && e.isDefaultPrevented()) {\r\n return;\r\n }\r\n\r\n e.preventDefault();\r\n\r\n opts = opts || {};\r\n\r\n if (e && e.data) {\r\n opts = mergeOpts(e.data.options, opts);\r\n }\r\n\r\n $target = opts.$target || $(e.currentTarget).trigger(\"blur\");\r\n instance = $.fancybox.getInstance();\r\n\r\n if (instance && instance.$trigger && instance.$trigger.is($target)) {\r\n return;\r\n }\r\n\r\n if (opts.selector) {\r\n items = $(opts.selector);\r\n } else {\r\n // Get all related items and find index for clicked one\r\n value = $target.attr(\"data-fancybox\") || \"\";\r\n\r\n if (value) {\r\n items = e.data ? e.data.items : [];\r\n items = items.length ? items.filter('[data-fancybox=\"' + value + '\"]') : $('[data-fancybox=\"' + value + '\"]');\r\n } else {\r\n items = [$target];\r\n }\r\n }\r\n\r\n index = $(items).index($target);\r\n\r\n // Sometimes current item can not be found\r\n if (index < 0) {\r\n index = 0;\r\n }\r\n\r\n instance = $.fancybox.open(items, opts, index);\r\n\r\n // Save last active element\r\n instance.$trigger = $target;\r\n }\r\n\r\n // Create a jQuery plugin\r\n // ======================\r\n\r\n $.fn.fancybox = function (options) {\r\n var selector;\r\n\r\n options = options || {};\r\n selector = options.selector || false;\r\n\r\n if (selector) {\r\n // Use body element instead of document so it executes first\r\n $(\"body\")\r\n .off(\"click.fb-start\", selector)\r\n .on(\"click.fb-start\", selector, {\r\n options: options\r\n }, _run);\r\n } else {\r\n this.off(\"click.fb-start\").on(\r\n \"click.fb-start\", {\r\n items: this,\r\n options: options\r\n },\r\n _run\r\n );\r\n }\r\n\r\n return this;\r\n };\r\n\r\n // Self initializing plugin for all elements having `data-fancybox` attribute\r\n // ==========================================================================\r\n\r\n $D.on(\"click.fb-start\", \"[data-fancybox]\", _run);\r\n\r\n // Enable \"trigger elements\"\r\n // =========================\r\n\r\n $D.on(\"click.fb-start\", \"[data-fancybox-trigger]\", function (e) {\r\n $('[data-fancybox=\"' + $(this).attr(\"data-fancybox-trigger\") + '\"]')\r\n .eq($(this).attr(\"data-fancybox-index\") || 0)\r\n .trigger(\"click.fb-start\", {\r\n $trigger: $(this)\r\n });\r\n });\r\n\r\n // Track focus event for better accessibility styling\r\n // ==================================================\r\n (function () {\r\n var buttonStr = \".fancybox-button\",\r\n focusStr = \"fancybox-focus\",\r\n $pressed = null;\r\n\r\n $D.on(\"mousedown mouseup focus blur\", buttonStr, function (e) {\r\n switch (e.type) {\r\n case \"mousedown\":\r\n $pressed = $(this);\r\n break;\r\n case \"mouseup\":\r\n $pressed = null;\r\n break;\r\n case \"focusin\":\r\n $(buttonStr).removeClass(focusStr);\r\n\r\n if (!$(this).is($pressed) && !$(this).is(\"[disabled]\")) {\r\n $(this).addClass(focusStr);\r\n }\r\n break;\r\n case \"focusout\":\r\n $(buttonStr).removeClass(focusStr);\r\n break;\r\n }\r\n });\r\n })();\r\n})(window, document, jQuery);\r\n// ==========================================================================\r\n//\r\n// Media\r\n// Adds additional media type support\r\n//\r\n// ==========================================================================\r\n(function ($) {\r\n \"use strict\";\r\n\r\n // Object containing properties for each media type\r\n var defaults = {\r\n youtube: {\r\n matcher: /(youtube\\.com|youtu\\.be|youtube\\-nocookie\\.com)\\/(watch\\?(.*&)?v=|v\\/|u\\/|embed\\/?)?(videoseries\\?list=(.*)|[\\w-]{11}|\\?listType=(.*)&list=(.*))(.*)/i,\r\n params: {\r\n autoplay: 1,\r\n autohide: 1,\r\n fs: 1,\r\n rel: 0,\r\n hd: 1,\r\n wmode: \"transparent\",\r\n enablejsapi: 1,\r\n html5: 1\r\n },\r\n paramPlace: 8,\r\n type: \"iframe\",\r\n url: \"https://www.youtube-nocookie.com/embed/$4\",\r\n thumb: \"https://img.youtube.com/vi/$4/hqdefault.jpg\"\r\n },\r\n\r\n vimeo: {\r\n matcher: /^.+vimeo.com\\/(.*\\/)?([\\d]+)(.*)?/,\r\n params: {\r\n autoplay: 1,\r\n hd: 1,\r\n show_title: 1,\r\n show_byline: 1,\r\n show_portrait: 0,\r\n fullscreen: 1\r\n },\r\n paramPlace: 3,\r\n type: \"iframe\",\r\n url: \"//player.vimeo.com/video/$2\"\r\n },\r\n\r\n instagram: {\r\n matcher: /(instagr\\.am|instagram\\.com)\\/p\\/([a-zA-Z0-9_\\-]+)\\/?/i,\r\n type: \"image\",\r\n url: \"//$1/p/$2/media/?size=l\"\r\n },\r\n\r\n // Examples:\r\n // http://maps.google.com/?ll=48.857995,2.294297&spn=0.007666,0.021136&t=m&z=16\r\n // https://www.google.com/maps/@37.7852006,-122.4146355,14.65z\r\n // https://www.google.com/maps/@52.2111123,2.9237542,6.61z?hl=en\r\n // https://www.google.com/maps/place/Googleplex/@37.4220041,-122.0833494,17z/data=!4m5!3m4!1s0x0:0x6c296c66619367e0!8m2!3d37.4219998!4d-122.0840572\r\n gmap_place: {\r\n matcher: /(maps\\.)?google\\.([a-z]{2,3}(\\.[a-z]{2})?)\\/(((maps\\/(place\\/(.*)\\/)?\\@(.*),(\\d+.?\\d+?)z))|(\\?ll=))(.*)?/i,\r\n type: \"iframe\",\r\n url: function (rez) {\r\n return (\r\n \"//maps.google.\" +\r\n rez[2] +\r\n \"/?ll=\" +\r\n (rez[9] ? rez[9] + \"&z=\" + Math.floor(rez[10]) + (rez[12] ? rez[12].replace(/^\\//, \"&\") : \"\") : rez[12] + \"\").replace(/\\?/, \"&\") +\r\n \"&output=\" +\r\n (rez[12] && rez[12].indexOf(\"layer=c\") > 0 ? \"svembed\" : \"embed\")\r\n );\r\n }\r\n },\r\n\r\n // Examples:\r\n // https://www.google.com/maps/search/Empire+State+Building/\r\n // https://www.google.com/maps/search/?api=1&query=centurylink+field\r\n // https://www.google.com/maps/search/?api=1&query=47.5951518,-122.3316393\r\n gmap_search: {\r\n matcher: /(maps\\.)?google\\.([a-z]{2,3}(\\.[a-z]{2})?)\\/(maps\\/search\\/)(.*)/i,\r\n type: \"iframe\",\r\n url: function (rez) {\r\n return \"//maps.google.\" + rez[2] + \"/maps?q=\" + rez[5].replace(\"query=\", \"q=\").replace(\"api=1\", \"\") + \"&output=embed\";\r\n }\r\n }\r\n };\r\n\r\n // Formats matching url to final form\r\n var format = function (url, rez, params) {\r\n if (!url) {\r\n return;\r\n }\r\n\r\n params = params || \"\";\r\n\r\n if ($.type(params) === \"object\") {\r\n params = $.param(params, true);\r\n }\r\n\r\n $.each(rez, function (key, value) {\r\n url = url.replace(\"$\" + key, value || \"\");\r\n });\r\n\r\n if (params.length) {\r\n url += (url.indexOf(\"?\") > 0 ? \"&\" : \"?\") + params;\r\n }\r\n\r\n return url;\r\n };\r\n\r\n $(document).on(\"objectNeedsType.fb\", function (e, instance, item) {\r\n var url = item.src || \"\",\r\n type = false,\r\n media,\r\n thumb,\r\n rez,\r\n params,\r\n urlParams,\r\n paramObj,\r\n provider;\r\n\r\n media = $.extend(true, {}, defaults, item.opts.media);\r\n\r\n // Look for any matching media type\r\n $.each(media, function (providerName, providerOpts) {\r\n rez = url.match(providerOpts.matcher);\r\n\r\n if (!rez) {\r\n return;\r\n }\r\n\r\n type = providerOpts.type;\r\n provider = providerName;\r\n paramObj = {};\r\n\r\n if (providerOpts.paramPlace && rez[providerOpts.paramPlace]) {\r\n urlParams = rez[providerOpts.paramPlace];\r\n\r\n if (urlParams[0] == \"?\") {\r\n urlParams = urlParams.substring(1);\r\n }\r\n\r\n urlParams = urlParams.split(\"&\");\r\n\r\n for (var m = 0; m < urlParams.length; ++m) {\r\n var p = urlParams[m].split(\"=\", 2);\r\n\r\n if (p.length == 2) {\r\n paramObj[p[0]] = decodeURIComponent(p[1].replace(/\\+/g, \" \"));\r\n }\r\n }\r\n }\r\n\r\n params = $.extend(true, {}, providerOpts.params, item.opts[providerName], paramObj);\r\n\r\n url =\r\n $.type(providerOpts.url) === \"function\" ? providerOpts.url.call(this, rez, params, item) : format(providerOpts.url, rez, params);\r\n\r\n thumb =\r\n $.type(providerOpts.thumb) === \"function\" ? providerOpts.thumb.call(this, rez, params, item) : format(providerOpts.thumb, rez);\r\n\r\n if (providerName === \"youtube\") {\r\n url = url.replace(/&t=((\\d+)m)?(\\d+)s/, function (match, p1, m, s) {\r\n return \"&start=\" + ((m ? parseInt(m, 10) * 60 : 0) + parseInt(s, 10));\r\n });\r\n } else if (providerName === \"vimeo\") {\r\n url = url.replace(\"&%23\", \"#\");\r\n }\r\n\r\n return false;\r\n });\r\n\r\n // If it is found, then change content type and update the url\r\n\r\n if (type) {\r\n if (!item.opts.thumb && !(item.opts.$thumb && item.opts.$thumb.length)) {\r\n item.opts.thumb = thumb;\r\n }\r\n\r\n if (type === \"iframe\") {\r\n item.opts = $.extend(true, item.opts, {\r\n iframe: {\r\n preload: false,\r\n attr: {\r\n scrolling: \"no\"\r\n }\r\n }\r\n });\r\n }\r\n\r\n $.extend(item, {\r\n type: type,\r\n src: url,\r\n origSrc: item.src,\r\n contentSource: provider,\r\n contentType: type === \"image\" ? \"image\" : provider == \"gmap_place\" || provider == \"gmap_search\" ? \"map\" : \"video\"\r\n });\r\n } else if (url) {\r\n item.type = item.opts.defaultType;\r\n }\r\n });\r\n\r\n // Load YouTube/Video API on request to detect when video finished playing\r\n var VideoAPILoader = {\r\n youtube: {\r\n src: \"https://www.youtube.com/iframe_api\",\r\n class: \"YT\",\r\n loading: false,\r\n loaded: false\r\n },\r\n\r\n vimeo: {\r\n src: \"https://player.vimeo.com/api/player.js\",\r\n class: \"Vimeo\",\r\n loading: false,\r\n loaded: false\r\n },\r\n\r\n load: function (vendor) {\r\n var _this = this,\r\n script;\r\n\r\n if (this[vendor].loaded) {\r\n setTimeout(function () {\r\n _this.done(vendor);\r\n });\r\n return;\r\n }\r\n\r\n if (this[vendor].loading) {\r\n return;\r\n }\r\n\r\n this[vendor].loading = true;\r\n\r\n script = document.createElement(\"script\");\r\n script.type = \"text/javascript\";\r\n script.src = this[vendor].src;\r\n\r\n if (vendor === \"youtube\") {\r\n window.onYouTubeIframeAPIReady = function () {\r\n _this[vendor].loaded = true;\r\n _this.done(vendor);\r\n };\r\n } else {\r\n script.onload = function () {\r\n _this[vendor].loaded = true;\r\n _this.done(vendor);\r\n };\r\n }\r\n\r\n document.body.appendChild(script);\r\n },\r\n done: function (vendor) {\r\n var instance, $el, player;\r\n\r\n if (vendor === \"youtube\") {\r\n delete window.onYouTubeIframeAPIReady;\r\n }\r\n\r\n instance = $.fancybox.getInstance();\r\n\r\n if (instance) {\r\n $el = instance.current.$content.find(\"iframe\");\r\n\r\n if (vendor === \"youtube\" && YT !== undefined && YT) {\r\n player = new YT.Player($el.attr(\"id\"), {\r\n events: {\r\n onStateChange: function (e) {\r\n if (e.data == 0) {\r\n instance.next();\r\n }\r\n }\r\n }\r\n });\r\n } else if (vendor === \"vimeo\" && Vimeo !== undefined && Vimeo) {\r\n player = new Vimeo.Player($el);\r\n\r\n player.on(\"ended\", function () {\r\n instance.next();\r\n });\r\n }\r\n }\r\n }\r\n };\r\n\r\n $(document).on({\r\n \"afterShow.fb\": function (e, instance, current) {\r\n if (instance.group.length > 1 && (current.contentSource === \"youtube\" || current.contentSource === \"vimeo\")) {\r\n VideoAPILoader.load(current.contentSource);\r\n }\r\n }\r\n });\r\n})(jQuery);\r\n// ==========================================================================\r\n//\r\n// Guestures\r\n// Adds touch guestures, handles click and tap events\r\n//\r\n// ==========================================================================\r\n(function (window, document, $) {\r\n \"use strict\";\r\n\r\n var requestAFrame = (function () {\r\n return (\r\n window.requestAnimationFrame ||\r\n window.webkitRequestAnimationFrame ||\r\n window.mozRequestAnimationFrame ||\r\n window.oRequestAnimationFrame ||\r\n // if all else fails, use setTimeout\r\n function (callback) {\r\n return window.setTimeout(callback, 1000 / 60);\r\n }\r\n );\r\n })();\r\n\r\n var cancelAFrame = (function () {\r\n return (\r\n window.cancelAnimationFrame ||\r\n window.webkitCancelAnimationFrame ||\r\n window.mozCancelAnimationFrame ||\r\n window.oCancelAnimationFrame ||\r\n function (id) {\r\n window.clearTimeout(id);\r\n }\r\n );\r\n })();\r\n\r\n var getPointerXY = function (e) {\r\n var result = [];\r\n\r\n e = e.originalEvent || e || window.e;\r\n e = e.touches && e.touches.length ? e.touches : e.changedTouches && e.changedTouches.length ? e.changedTouches : [e];\r\n\r\n for (var key in e) {\r\n if (e[key].pageX) {\r\n result.push({\r\n x: e[key].pageX,\r\n y: e[key].pageY\r\n });\r\n } else if (e[key].clientX) {\r\n result.push({\r\n x: e[key].clientX,\r\n y: e[key].clientY\r\n });\r\n }\r\n }\r\n\r\n return result;\r\n };\r\n\r\n var distance = function (point2, point1, what) {\r\n if (!point1 || !point2) {\r\n return 0;\r\n }\r\n\r\n if (what === \"x\") {\r\n return point2.x - point1.x;\r\n } else if (what === \"y\") {\r\n return point2.y - point1.y;\r\n }\r\n\r\n return Math.sqrt(Math.pow(point2.x - point1.x, 2) + Math.pow(point2.y - point1.y, 2));\r\n };\r\n\r\n var isClickable = function ($el) {\r\n if (\r\n $el.is('a,area,button,[role=\"button\"],input,label,select,summary,textarea,video,audio,iframe') ||\r\n $.isFunction($el.get(0).onclick) ||\r\n $el.data(\"selectable\")\r\n ) {\r\n return true;\r\n }\r\n\r\n // Check for attributes like data-fancybox-next or data-fancybox-close\r\n for (var i = 0, atts = $el[0].attributes, n = atts.length; i < n; i++) {\r\n if (atts[i].nodeName.substr(0, 14) === \"data-fancybox-\") {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n };\r\n\r\n var hasScrollbars = function (el) {\r\n var overflowY = window.getComputedStyle(el)[\"overflow-y\"],\r\n overflowX = window.getComputedStyle(el)[\"overflow-x\"],\r\n vertical = (overflowY === \"scroll\" || overflowY === \"auto\") && el.scrollHeight > el.clientHeight,\r\n horizontal = (overflowX === \"scroll\" || overflowX === \"auto\") && el.scrollWidth > el.clientWidth;\r\n\r\n return vertical || horizontal;\r\n };\r\n\r\n var isScrollable = function ($el) {\r\n var rez = false;\r\n\r\n while (true) {\r\n rez = hasScrollbars($el.get(0));\r\n\r\n if (rez) {\r\n break;\r\n }\r\n\r\n $el = $el.parent();\r\n\r\n if (!$el.length || $el.hasClass(\"fancybox-stage\") || $el.is(\"body\")) {\r\n break;\r\n }\r\n }\r\n\r\n return rez;\r\n };\r\n\r\n var Guestures = function (instance) {\r\n var self = this;\r\n\r\n self.instance = instance;\r\n\r\n self.$bg = instance.$refs.bg;\r\n self.$stage = instance.$refs.stage;\r\n self.$container = instance.$refs.container;\r\n\r\n self.destroy();\r\n\r\n self.$container.on(\"touchstart.fb.touch mousedown.fb.touch\", $.proxy(self, \"ontouchstart\"));\r\n };\r\n\r\n Guestures.prototype.destroy = function () {\r\n var self = this;\r\n\r\n self.$container.off(\".fb.touch\");\r\n\r\n $(document).off(\".fb.touch\");\r\n\r\n if (self.requestId) {\r\n cancelAFrame(self.requestId);\r\n self.requestId = null;\r\n }\r\n\r\n if (self.tapped) {\r\n clearTimeout(self.tapped);\r\n self.tapped = null;\r\n }\r\n };\r\n\r\n Guestures.prototype.ontouchstart = function (e) {\r\n var self = this,\r\n $target = $(e.target),\r\n instance = self.instance,\r\n current = instance.current,\r\n $slide = current.$slide,\r\n $content = current.$content,\r\n isTouchDevice = e.type == \"touchstart\";\r\n\r\n // Do not respond to both (touch and mouse) events\r\n if (isTouchDevice) {\r\n self.$container.off(\"mousedown.fb.touch\");\r\n }\r\n\r\n // Ignore right click\r\n if (e.originalEvent && e.originalEvent.button == 2) {\r\n return;\r\n }\r\n\r\n // Ignore taping on links, buttons, input elements\r\n if (!$slide.length || !$target.length || isClickable($target) || isClickable($target.parent())) {\r\n return;\r\n }\r\n // Ignore clicks on the scrollbar\r\n if (!$target.is(\"img\") && e.originalEvent.clientX > $target[0].clientWidth + $target.offset().left) {\r\n return;\r\n }\r\n\r\n // Ignore clicks while zooming or closing\r\n if (!current || instance.isAnimating || current.$slide.hasClass(\"fancybox-animated\")) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n\r\n return;\r\n }\r\n\r\n self.realPoints = self.startPoints = getPointerXY(e);\r\n\r\n if (!self.startPoints.length) {\r\n return;\r\n }\r\n\r\n // Allow other scripts to catch touch event if \"touch\" is set to false\r\n if (current.touch) {\r\n e.stopPropagation();\r\n }\r\n\r\n self.startEvent = e;\r\n\r\n self.canTap = true;\r\n self.$target = $target;\r\n self.$content = $content;\r\n self.opts = current.opts.touch;\r\n\r\n self.isPanning = false;\r\n self.isSwiping = false;\r\n self.isZooming = false;\r\n self.isScrolling = false;\r\n self.canPan = instance.canPan();\r\n\r\n self.startTime = new Date().getTime();\r\n self.distanceX = self.distanceY = self.distance = 0;\r\n\r\n self.canvasWidth = Math.round($slide[0].clientWidth);\r\n self.canvasHeight = Math.round($slide[0].clientHeight);\r\n\r\n self.contentLastPos = null;\r\n self.contentStartPos = $.fancybox.getTranslate(self.$content) || {\r\n top: 0,\r\n left: 0\r\n };\r\n self.sliderStartPos = $.fancybox.getTranslate($slide);\r\n\r\n // Since position will be absolute, but we need to make it relative to the stage\r\n self.stagePos = $.fancybox.getTranslate(instance.$refs.stage);\r\n\r\n self.sliderStartPos.top -= self.stagePos.top;\r\n self.sliderStartPos.left -= self.stagePos.left;\r\n\r\n self.contentStartPos.top -= self.stagePos.top;\r\n self.contentStartPos.left -= self.stagePos.left;\r\n\r\n $(document)\r\n .off(\".fb.touch\")\r\n .on(isTouchDevice ? \"touchend.fb.touch touchcancel.fb.touch\" : \"mouseup.fb.touch mouseleave.fb.touch\", $.proxy(self, \"ontouchend\"))\r\n .on(isTouchDevice ? \"touchmove.fb.touch\" : \"mousemove.fb.touch\", $.proxy(self, \"ontouchmove\"));\r\n\r\n if ($.fancybox.isMobile) {\r\n document.addEventListener(\"scroll\", self.onscroll, true);\r\n }\r\n\r\n // Skip if clicked outside the sliding area\r\n if (!(self.opts || self.canPan) || !($target.is(self.$stage) || self.$stage.find($target).length)) {\r\n if ($target.is(\".fancybox-image\")) {\r\n e.preventDefault();\r\n }\r\n\r\n if (!($.fancybox.isMobile && $target.parents(\".fancybox-caption\").length)) {\r\n return;\r\n }\r\n }\r\n\r\n self.isScrollable = isScrollable($target) || isScrollable($target.parent());\r\n\r\n // Check if element is scrollable and try to prevent default behavior (scrolling)\r\n if (!($.fancybox.isMobile && self.isScrollable)) {\r\n e.preventDefault();\r\n }\r\n\r\n // One finger or mouse click - swipe or pan an image\r\n if (self.startPoints.length === 1 || current.hasError) {\r\n if (self.canPan) {\r\n $.fancybox.stop(self.$content);\r\n\r\n self.isPanning = true;\r\n } else {\r\n self.isSwiping = true;\r\n }\r\n\r\n self.$container.addClass(\"fancybox-is-grabbing\");\r\n }\r\n\r\n // Two fingers - zoom image\r\n if (self.startPoints.length === 2 && current.type === \"image\" && (current.isLoaded || current.$ghost)) {\r\n self.canTap = false;\r\n self.isSwiping = false;\r\n self.isPanning = false;\r\n\r\n self.isZooming = true;\r\n\r\n $.fancybox.stop(self.$content);\r\n\r\n self.centerPointStartX = (self.startPoints[0].x + self.startPoints[1].x) * 0.5 - $(window).scrollLeft();\r\n self.centerPointStartY = (self.startPoints[0].y + self.startPoints[1].y) * 0.5 - $(window).scrollTop();\r\n\r\n self.percentageOfImageAtPinchPointX = (self.centerPointStartX - self.contentStartPos.left) / self.contentStartPos.width;\r\n self.percentageOfImageAtPinchPointY = (self.centerPointStartY - self.contentStartPos.top) / self.contentStartPos.height;\r\n\r\n self.startDistanceBetweenFingers = distance(self.startPoints[0], self.startPoints[1]);\r\n }\r\n };\r\n\r\n Guestures.prototype.onscroll = function (e) {\r\n var self = this;\r\n\r\n self.isScrolling = true;\r\n\r\n document.removeEventListener(\"scroll\", self.onscroll, true);\r\n };\r\n\r\n Guestures.prototype.ontouchmove = function (e) {\r\n var self = this;\r\n\r\n // Make sure user has not released over iframe or disabled element\r\n if (e.originalEvent.buttons !== undefined && e.originalEvent.buttons === 0) {\r\n self.ontouchend(e);\r\n return;\r\n }\r\n\r\n if (self.isScrolling) {\r\n self.canTap = false;\r\n return;\r\n }\r\n\r\n self.newPoints = getPointerXY(e);\r\n\r\n if (!(self.opts || self.canPan) || !self.newPoints.length || !self.newPoints.length) {\r\n return;\r\n }\r\n\r\n if (!(self.isSwiping && self.isSwiping === true)) {\r\n e.preventDefault();\r\n }\r\n\r\n self.distanceX = distance(self.newPoints[0], self.startPoints[0], \"x\");\r\n self.distanceY = distance(self.newPoints[0], self.startPoints[0], \"y\");\r\n\r\n self.distance = distance(self.newPoints[0], self.startPoints[0]);\r\n\r\n // Skip false ontouchmove events (Chrome)\r\n if (self.distance > 0) {\r\n if (self.isSwiping) {\r\n self.onSwipe(e);\r\n } else if (self.isPanning) {\r\n self.onPan();\r\n } else if (self.isZooming) {\r\n self.onZoom();\r\n }\r\n }\r\n };\r\n\r\n Guestures.prototype.onSwipe = function (e) {\r\n var self = this,\r\n instance = self.instance,\r\n swiping = self.isSwiping,\r\n left = self.sliderStartPos.left || 0,\r\n angle;\r\n\r\n // If direction is not yet determined\r\n if (swiping === true) {\r\n // We need at least 10px distance to correctly calculate an angle\r\n if (Math.abs(self.distance) > 10) {\r\n self.canTap = false;\r\n\r\n if (instance.group.length < 2 && self.opts.vertical) {\r\n self.isSwiping = \"y\";\r\n } else if (instance.isDragging || self.opts.vertical === false || (self.opts.vertical === \"auto\" && $(window).width() > 800)) {\r\n self.isSwiping = \"x\";\r\n } else {\r\n angle = Math.abs((Math.atan2(self.distanceY, self.distanceX) * 180) / Math.PI);\r\n\r\n self.isSwiping = angle > 45 && angle < 135 ? \"y\" : \"x\";\r\n }\r\n\r\n if (self.isSwiping === \"y\" && $.fancybox.isMobile && self.isScrollable) {\r\n self.isScrolling = true;\r\n\r\n return;\r\n }\r\n\r\n instance.isDragging = self.isSwiping;\r\n\r\n // Reset points to avoid jumping, because we dropped first swipes to calculate the angle\r\n self.startPoints = self.newPoints;\r\n\r\n $.each(instance.slides, function (index, slide) {\r\n var slidePos, stagePos;\r\n\r\n $.fancybox.stop(slide.$slide);\r\n\r\n slidePos = $.fancybox.getTranslate(slide.$slide);\r\n stagePos = $.fancybox.getTranslate(instance.$refs.stage);\r\n\r\n slide.$slide\r\n .css({\r\n transform: \"\",\r\n opacity: \"\",\r\n \"transition-duration\": \"\"\r\n })\r\n .removeClass(\"fancybox-animated\")\r\n .removeClass(function (index, className) {\r\n return (className.match(/(^|\\s)fancybox-fx-\\S+/g) || []).join(\" \");\r\n });\r\n\r\n if (slide.pos === instance.current.pos) {\r\n self.sliderStartPos.top = slidePos.top - stagePos.top;\r\n self.sliderStartPos.left = slidePos.left - stagePos.left;\r\n }\r\n\r\n $.fancybox.setTranslate(slide.$slide, {\r\n top: slidePos.top - stagePos.top,\r\n left: slidePos.left - stagePos.left\r\n });\r\n });\r\n\r\n // Stop slideshow\r\n if (instance.SlideShow && instance.SlideShow.isActive) {\r\n instance.SlideShow.stop();\r\n }\r\n }\r\n\r\n return;\r\n }\r\n\r\n // Sticky edges\r\n if (swiping == \"x\") {\r\n if (\r\n self.distanceX > 0 &&\r\n (self.instance.group.length < 2 || (self.instance.current.index === 0 && !self.instance.current.opts.loop))\r\n ) {\r\n left = left + Math.pow(self.distanceX, 0.8);\r\n } else if (\r\n self.distanceX < 0 &&\r\n (self.instance.group.length < 2 ||\r\n (self.instance.current.index === self.instance.group.length - 1 && !self.instance.current.opts.loop))\r\n ) {\r\n left = left - Math.pow(-self.distanceX, 0.8);\r\n } else {\r\n left = left + self.distanceX;\r\n }\r\n }\r\n\r\n self.sliderLastPos = {\r\n top: swiping == \"x\" ? 0 : self.sliderStartPos.top + self.distanceY,\r\n left: left\r\n };\r\n\r\n if (self.requestId) {\r\n cancelAFrame(self.requestId);\r\n\r\n self.requestId = null;\r\n }\r\n\r\n self.requestId = requestAFrame(function () {\r\n if (self.sliderLastPos) {\r\n $.each(self.instance.slides, function (index, slide) {\r\n var pos = slide.pos - self.instance.currPos;\r\n\r\n $.fancybox.setTranslate(slide.$slide, {\r\n top: self.sliderLastPos.top,\r\n left: self.sliderLastPos.left + pos * self.canvasWidth + pos * slide.opts.gutter\r\n });\r\n });\r\n\r\n self.$container.addClass(\"fancybox-is-sliding\");\r\n }\r\n });\r\n };\r\n\r\n Guestures.prototype.onPan = function () {\r\n var self = this;\r\n\r\n // Prevent accidental movement (sometimes, when tapping casually, finger can move a bit)\r\n if (distance(self.newPoints[0], self.realPoints[0]) < ($.fancybox.isMobile ? 10 : 5)) {\r\n self.startPoints = self.newPoints;\r\n return;\r\n }\r\n\r\n self.canTap = false;\r\n\r\n self.contentLastPos = self.limitMovement();\r\n\r\n if (self.requestId) {\r\n cancelAFrame(self.requestId);\r\n }\r\n\r\n self.requestId = requestAFrame(function () {\r\n $.fancybox.setTranslate(self.$content, self.contentLastPos);\r\n });\r\n };\r\n\r\n // Make panning sticky to the edges\r\n Guestures.prototype.limitMovement = function () {\r\n var self = this;\r\n\r\n var canvasWidth = self.canvasWidth;\r\n var canvasHeight = self.canvasHeight;\r\n\r\n var distanceX = self.distanceX;\r\n var distanceY = self.distanceY;\r\n\r\n var contentStartPos = self.contentStartPos;\r\n\r\n var currentOffsetX = contentStartPos.left;\r\n var currentOffsetY = contentStartPos.top;\r\n\r\n var currentWidth = contentStartPos.width;\r\n var currentHeight = contentStartPos.height;\r\n\r\n var minTranslateX, minTranslateY, maxTranslateX, maxTranslateY, newOffsetX, newOffsetY;\r\n\r\n if (currentWidth > canvasWidth) {\r\n newOffsetX = currentOffsetX + distanceX;\r\n } else {\r\n newOffsetX = currentOffsetX;\r\n }\r\n\r\n newOffsetY = currentOffsetY + distanceY;\r\n\r\n // Slow down proportionally to traveled distance\r\n minTranslateX = Math.max(0, canvasWidth * 0.5 - currentWidth * 0.5);\r\n minTranslateY = Math.max(0, canvasHeight * 0.5 - currentHeight * 0.5);\r\n\r\n maxTranslateX = Math.min(canvasWidth - currentWidth, canvasWidth * 0.5 - currentWidth * 0.5);\r\n maxTranslateY = Math.min(canvasHeight - currentHeight, canvasHeight * 0.5 - currentHeight * 0.5);\r\n\r\n // ->\r\n if (distanceX > 0 && newOffsetX > minTranslateX) {\r\n newOffsetX = minTranslateX - 1 + Math.pow(-minTranslateX + currentOffsetX + distanceX, 0.8) || 0;\r\n }\r\n\r\n // <-\r\n if (distanceX < 0 && newOffsetX < maxTranslateX) {\r\n newOffsetX = maxTranslateX + 1 - Math.pow(maxTranslateX - currentOffsetX - distanceX, 0.8) || 0;\r\n }\r\n\r\n // \\/\r\n if (distanceY > 0 && newOffsetY > minTranslateY) {\r\n newOffsetY = minTranslateY - 1 + Math.pow(-minTranslateY + currentOffsetY + distanceY, 0.8) || 0;\r\n }\r\n\r\n // /\\\r\n if (distanceY < 0 && newOffsetY < maxTranslateY) {\r\n newOffsetY = maxTranslateY + 1 - Math.pow(maxTranslateY - currentOffsetY - distanceY, 0.8) || 0;\r\n }\r\n\r\n return {\r\n top: newOffsetY,\r\n left: newOffsetX\r\n };\r\n };\r\n\r\n Guestures.prototype.limitPosition = function (newOffsetX, newOffsetY, newWidth, newHeight) {\r\n var self = this;\r\n\r\n var canvasWidth = self.canvasWidth;\r\n var canvasHeight = self.canvasHeight;\r\n\r\n if (newWidth > canvasWidth) {\r\n newOffsetX = newOffsetX > 0 ? 0 : newOffsetX;\r\n newOffsetX = newOffsetX < canvasWidth - newWidth ? canvasWidth - newWidth : newOffsetX;\r\n } else {\r\n // Center horizontally\r\n newOffsetX = Math.max(0, canvasWidth / 2 - newWidth / 2);\r\n }\r\n\r\n if (newHeight > canvasHeight) {\r\n newOffsetY = newOffsetY > 0 ? 0 : newOffsetY;\r\n newOffsetY = newOffsetY < canvasHeight - newHeight ? canvasHeight - newHeight : newOffsetY;\r\n } else {\r\n // Center vertically\r\n newOffsetY = Math.max(0, canvasHeight / 2 - newHeight / 2);\r\n }\r\n\r\n return {\r\n top: newOffsetY,\r\n left: newOffsetX\r\n };\r\n };\r\n\r\n Guestures.prototype.onZoom = function () {\r\n var self = this;\r\n\r\n // Calculate current distance between points to get pinch ratio and new width and height\r\n var contentStartPos = self.contentStartPos;\r\n\r\n var currentWidth = contentStartPos.width;\r\n var currentHeight = contentStartPos.height;\r\n\r\n var currentOffsetX = contentStartPos.left;\r\n var currentOffsetY = contentStartPos.top;\r\n\r\n var endDistanceBetweenFingers = distance(self.newPoints[0], self.newPoints[1]);\r\n\r\n var pinchRatio = endDistanceBetweenFingers / self.startDistanceBetweenFingers;\r\n\r\n var newWidth = Math.floor(currentWidth * pinchRatio);\r\n var newHeight = Math.floor(currentHeight * pinchRatio);\r\n\r\n // This is the translation due to pinch-zooming\r\n var translateFromZoomingX = (currentWidth - newWidth) * self.percentageOfImageAtPinchPointX;\r\n var translateFromZoomingY = (currentHeight - newHeight) * self.percentageOfImageAtPinchPointY;\r\n\r\n // Point between the two touches\r\n var centerPointEndX = (self.newPoints[0].x + self.newPoints[1].x) / 2 - $(window).scrollLeft();\r\n var centerPointEndY = (self.newPoints[0].y + self.newPoints[1].y) / 2 - $(window).scrollTop();\r\n\r\n // And this is the translation due to translation of the centerpoint\r\n // between the two fingers\r\n var translateFromTranslatingX = centerPointEndX - self.centerPointStartX;\r\n var translateFromTranslatingY = centerPointEndY - self.centerPointStartY;\r\n\r\n // The new offset is the old/current one plus the total translation\r\n var newOffsetX = currentOffsetX + (translateFromZoomingX + translateFromTranslatingX);\r\n var newOffsetY = currentOffsetY + (translateFromZoomingY + translateFromTranslatingY);\r\n\r\n var newPos = {\r\n top: newOffsetY,\r\n left: newOffsetX,\r\n scaleX: pinchRatio,\r\n scaleY: pinchRatio\r\n };\r\n\r\n self.canTap = false;\r\n\r\n self.newWidth = newWidth;\r\n self.newHeight = newHeight;\r\n\r\n self.contentLastPos = newPos;\r\n\r\n if (self.requestId) {\r\n cancelAFrame(self.requestId);\r\n }\r\n\r\n self.requestId = requestAFrame(function () {\r\n $.fancybox.setTranslate(self.$content, self.contentLastPos);\r\n });\r\n };\r\n\r\n Guestures.prototype.ontouchend = function (e) {\r\n var self = this;\r\n\r\n var swiping = self.isSwiping;\r\n var panning = self.isPanning;\r\n var zooming = self.isZooming;\r\n var scrolling = self.isScrolling;\r\n\r\n self.endPoints = getPointerXY(e);\r\n self.dMs = Math.max(new Date().getTime() - self.startTime, 1);\r\n\r\n self.$container.removeClass(\"fancybox-is-grabbing\");\r\n\r\n $(document).off(\".fb.touch\");\r\n\r\n document.removeEventListener(\"scroll\", self.onscroll, true);\r\n\r\n if (self.requestId) {\r\n cancelAFrame(self.requestId);\r\n\r\n self.requestId = null;\r\n }\r\n\r\n self.isSwiping = false;\r\n self.isPanning = false;\r\n self.isZooming = false;\r\n self.isScrolling = false;\r\n\r\n self.instance.isDragging = false;\r\n\r\n if (self.canTap) {\r\n return self.onTap(e);\r\n }\r\n\r\n self.speed = 100;\r\n\r\n // Speed in px/ms\r\n self.velocityX = (self.distanceX / self.dMs) * 0.5;\r\n self.velocityY = (self.distanceY / self.dMs) * 0.5;\r\n\r\n if (panning) {\r\n self.endPanning();\r\n } else if (zooming) {\r\n self.endZooming();\r\n } else {\r\n self.endSwiping(swiping, scrolling);\r\n }\r\n\r\n\r\n };\r\n\r\n Guestures.prototype.endSwiping = function (swiping, scrolling) {\r\n var self = this,\r\n ret = false,\r\n len = self.instance.group.length,\r\n distanceX = Math.abs(self.distanceX),\r\n canAdvance = swiping == \"x\" && len > 1 && ((self.dMs > 130 && distanceX > 10) || distanceX > 50),\r\n speedX = 300;\r\n\r\n self.sliderLastPos = null;\r\n\r\n // Close if swiped vertically / navigate if horizontally\r\n if (swiping == \"y\" && !scrolling && Math.abs(self.distanceY) > 50) {\r\n // Continue vertical movement\r\n $.fancybox.animate(\r\n self.instance.current.$slide, {\r\n top: self.sliderStartPos.top + self.distanceY + self.velocityY * 150,\r\n opacity: 0\r\n },\r\n 200\r\n );\r\n ret = self.instance.close(true, 250);\r\n } else if (canAdvance && self.distanceX > 0) {\r\n ret = self.instance.previous(speedX);\r\n } else if (canAdvance && self.distanceX < 0) {\r\n ret = self.instance.next(speedX);\r\n }\r\n\r\n if (ret === false && (swiping == \"x\" || swiping == \"y\")) {\r\n self.instance.centerSlide(200);\r\n }\r\n\r\n self.$container.removeClass(\"fancybox-is-sliding\");\r\n };\r\n\r\n // Limit panning from edges\r\n // ========================\r\n Guestures.prototype.endPanning = function () {\r\n var self = this,\r\n newOffsetX,\r\n newOffsetY,\r\n newPos;\r\n\r\n if (!self.contentLastPos) {\r\n return;\r\n }\r\n\r\n if (self.opts.momentum === false || self.dMs > 350) {\r\n newOffsetX = self.contentLastPos.left;\r\n newOffsetY = self.contentLastPos.top;\r\n } else {\r\n // Continue movement\r\n newOffsetX = self.contentLastPos.left + self.velocityX * 500;\r\n newOffsetY = self.contentLastPos.top + self.velocityY * 500;\r\n }\r\n\r\n newPos = self.limitPosition(newOffsetX, newOffsetY, self.contentStartPos.width, self.contentStartPos.height);\r\n\r\n newPos.width = self.contentStartPos.width;\r\n newPos.height = self.contentStartPos.height;\r\n\r\n $.fancybox.animate(self.$content, newPos, 366);\r\n };\r\n\r\n Guestures.prototype.endZooming = function () {\r\n var self = this;\r\n\r\n var current = self.instance.current;\r\n\r\n var newOffsetX, newOffsetY, newPos, reset;\r\n\r\n var newWidth = self.newWidth;\r\n var newHeight = self.newHeight;\r\n\r\n if (!self.contentLastPos) {\r\n return;\r\n }\r\n\r\n newOffsetX = self.contentLastPos.left;\r\n newOffsetY = self.contentLastPos.top;\r\n\r\n reset = {\r\n top: newOffsetY,\r\n left: newOffsetX,\r\n width: newWidth,\r\n height: newHeight,\r\n scaleX: 1,\r\n scaleY: 1\r\n };\r\n\r\n // Reset scalex/scaleY values; this helps for perfomance and does not break animation\r\n $.fancybox.setTranslate(self.$content, reset);\r\n\r\n if (newWidth < self.canvasWidth && newHeight < self.canvasHeight) {\r\n self.instance.scaleToFit(150);\r\n } else if (newWidth > current.width || newHeight > current.height) {\r\n self.instance.scaleToActual(self.centerPointStartX, self.centerPointStartY, 150);\r\n } else {\r\n newPos = self.limitPosition(newOffsetX, newOffsetY, newWidth, newHeight);\r\n\r\n $.fancybox.animate(self.$content, newPos, 150);\r\n }\r\n };\r\n\r\n Guestures.prototype.onTap = function (e) {\r\n var self = this;\r\n var $target = $(e.target);\r\n\r\n var instance = self.instance;\r\n var current = instance.current;\r\n\r\n var endPoints = (e && getPointerXY(e)) || self.startPoints;\r\n\r\n var tapX = endPoints[0] ? endPoints[0].x - $(window).scrollLeft() - self.stagePos.left : 0;\r\n var tapY = endPoints[0] ? endPoints[0].y - $(window).scrollTop() - self.stagePos.top : 0;\r\n\r\n var where;\r\n\r\n var process = function (prefix) {\r\n var action = current.opts[prefix];\r\n\r\n if ($.isFunction(action)) {\r\n action = action.apply(instance, [current, e]);\r\n }\r\n\r\n if (!action) {\r\n return;\r\n }\r\n\r\n switch (action) {\r\n case \"close\":\r\n instance.close(self.startEvent);\r\n\r\n break;\r\n\r\n case \"toggleControls\":\r\n instance.toggleControls();\r\n\r\n break;\r\n\r\n case \"next\":\r\n instance.next();\r\n\r\n break;\r\n\r\n case \"nextOrClose\":\r\n if (instance.group.length > 1) {\r\n instance.next();\r\n } else {\r\n instance.close(self.startEvent);\r\n }\r\n\r\n break;\r\n\r\n case \"zoom\":\r\n if (current.type == \"image\" && (current.isLoaded || current.$ghost)) {\r\n if (instance.canPan()) {\r\n instance.scaleToFit();\r\n } else if (instance.isScaledDown()) {\r\n instance.scaleToActual(tapX, tapY);\r\n } else if (instance.group.length < 2) {\r\n instance.close(self.startEvent);\r\n }\r\n }\r\n\r\n break;\r\n }\r\n };\r\n\r\n // Ignore right click\r\n if (e.originalEvent && e.originalEvent.button == 2) {\r\n return;\r\n }\r\n\r\n // Skip if clicked on the scrollbar\r\n if (!$target.is(\"img\") && tapX > $target[0].clientWidth + $target.offset().left) {\r\n return;\r\n }\r\n\r\n // Check where is clicked\r\n if ($target.is(\".fancybox-bg,.fancybox-inner,.fancybox-outer,.fancybox-container\")) {\r\n where = \"Outside\";\r\n } else if ($target.is(\".fancybox-slide\")) {\r\n where = \"Slide\";\r\n } else if (\r\n instance.current.$content &&\r\n instance.current.$content\r\n .find($target)\r\n .addBack()\r\n .filter($target).length\r\n ) {\r\n where = \"Content\";\r\n } else {\r\n return;\r\n }\r\n\r\n // Check if this is a double tap\r\n if (self.tapped) {\r\n // Stop previously created single tap\r\n clearTimeout(self.tapped);\r\n self.tapped = null;\r\n\r\n // Skip if distance between taps is too big\r\n if (Math.abs(tapX - self.tapX) > 50 || Math.abs(tapY - self.tapY) > 50) {\r\n return this;\r\n }\r\n\r\n // OK, now we assume that this is a double-tap\r\n process(\"dblclick\" + where);\r\n } else {\r\n // Single tap will be processed if user has not clicked second time within 300ms\r\n // or there is no need to wait for double-tap\r\n self.tapX = tapX;\r\n self.tapY = tapY;\r\n\r\n if (current.opts[\"dblclick\" + where] && current.opts[\"dblclick\" + where] !== current.opts[\"click\" + where]) {\r\n self.tapped = setTimeout(function () {\r\n self.tapped = null;\r\n\r\n if (!instance.isAnimating) {\r\n process(\"click\" + where);\r\n }\r\n }, 500);\r\n } else {\r\n process(\"click\" + where);\r\n }\r\n }\r\n\r\n return this;\r\n };\r\n\r\n $(document)\r\n .on(\"onActivate.fb\", function (e, instance) {\r\n if (instance && !instance.Guestures) {\r\n instance.Guestures = new Guestures(instance);\r\n }\r\n })\r\n .on(\"beforeClose.fb\", function (e, instance) {\r\n if (instance && instance.Guestures) {\r\n instance.Guestures.destroy();\r\n }\r\n });\r\n})(window, document, jQuery);\r\n// ==========================================================================\r\n//\r\n// SlideShow\r\n// Enables slideshow functionality\r\n//\r\n// Example of usage:\r\n// $.fancybox.getInstance().SlideShow.start()\r\n//\r\n// ==========================================================================\r\n(function (document, $) {\r\n \"use strict\";\r\n\r\n $.extend(true, $.fancybox.defaults, {\r\n btnTpl: {\r\n slideShow: '\"\r\n },\r\n slideShow: {\r\n autoStart: false,\r\n speed: 3000,\r\n progress: true\r\n }\r\n });\r\n\r\n var SlideShow = function (instance) {\r\n this.instance = instance;\r\n this.init();\r\n };\r\n\r\n $.extend(SlideShow.prototype, {\r\n timer: null,\r\n isActive: false,\r\n $button: null,\r\n\r\n init: function () {\r\n var self = this,\r\n instance = self.instance,\r\n opts = instance.group[instance.currIndex].opts.slideShow;\r\n\r\n self.$button = instance.$refs.toolbar.find(\"[data-fancybox-play]\").on(\"click\", function () {\r\n self.toggle();\r\n });\r\n\r\n if (instance.group.length < 2 || !opts) {\r\n self.$button.hide();\r\n } else if (opts.progress) {\r\n self.$progress = $('
').appendTo(instance.$refs.inner);\r\n }\r\n },\r\n\r\n set: function (force) {\r\n var self = this,\r\n instance = self.instance,\r\n current = instance.current;\r\n\r\n // Check if reached last element\r\n if (current && (force === true || current.opts.loop || instance.currIndex < instance.group.length - 1)) {\r\n if (self.isActive && current.contentType !== \"video\") {\r\n if (self.$progress) {\r\n $.fancybox.animate(self.$progress.show(), {\r\n scaleX: 1\r\n }, current.opts.slideShow.speed);\r\n }\r\n\r\n self.timer = setTimeout(function () {\r\n if (!instance.current.opts.loop && instance.current.index == instance.group.length - 1) {\r\n instance.jumpTo(0);\r\n } else {\r\n instance.next();\r\n }\r\n }, current.opts.slideShow.speed);\r\n }\r\n } else {\r\n self.stop();\r\n instance.idleSecondsCounter = 0;\r\n instance.showControls();\r\n }\r\n },\r\n\r\n clear: function () {\r\n var self = this;\r\n\r\n clearTimeout(self.timer);\r\n\r\n self.timer = null;\r\n\r\n if (self.$progress) {\r\n self.$progress.removeAttr(\"style\").hide();\r\n }\r\n },\r\n\r\n start: function () {\r\n var self = this,\r\n current = self.instance.current;\r\n\r\n if (current) {\r\n self.$button\r\n .attr(\"title\", (current.opts.i18n[current.opts.lang] || current.opts.i18n.en).PLAY_STOP)\r\n .removeClass(\"fancybox-button--play\")\r\n .addClass(\"fancybox-button--pause\");\r\n\r\n self.isActive = true;\r\n\r\n if (current.isComplete) {\r\n self.set(true);\r\n }\r\n\r\n self.instance.trigger(\"onSlideShowChange\", true);\r\n }\r\n },\r\n\r\n stop: function () {\r\n var self = this,\r\n current = self.instance.current;\r\n\r\n self.clear();\r\n\r\n self.$button\r\n .attr(\"title\", (current.opts.i18n[current.opts.lang] || current.opts.i18n.en).PLAY_START)\r\n .removeClass(\"fancybox-button--pause\")\r\n .addClass(\"fancybox-button--play\");\r\n\r\n self.isActive = false;\r\n\r\n self.instance.trigger(\"onSlideShowChange\", false);\r\n\r\n if (self.$progress) {\r\n self.$progress.removeAttr(\"style\").hide();\r\n }\r\n },\r\n\r\n toggle: function () {\r\n var self = this;\r\n\r\n if (self.isActive) {\r\n self.stop();\r\n } else {\r\n self.start();\r\n }\r\n }\r\n });\r\n\r\n $(document).on({\r\n \"onInit.fb\": function (e, instance) {\r\n if (instance && !instance.SlideShow) {\r\n instance.SlideShow = new SlideShow(instance);\r\n }\r\n },\r\n\r\n \"beforeShow.fb\": function (e, instance, current, firstRun) {\r\n var SlideShow = instance && instance.SlideShow;\r\n\r\n if (firstRun) {\r\n if (SlideShow && current.opts.slideShow.autoStart) {\r\n SlideShow.start();\r\n }\r\n } else if (SlideShow && SlideShow.isActive) {\r\n SlideShow.clear();\r\n }\r\n },\r\n\r\n \"afterShow.fb\": function (e, instance, current) {\r\n var SlideShow = instance && instance.SlideShow;\r\n\r\n if (SlideShow && SlideShow.isActive) {\r\n SlideShow.set();\r\n }\r\n },\r\n\r\n \"afterKeydown.fb\": function (e, instance, current, keypress, keycode) {\r\n var SlideShow = instance && instance.SlideShow;\r\n\r\n // \"P\" or Spacebar\r\n if (SlideShow && current.opts.slideShow && (keycode === 80 || keycode === 32) && !$(document.activeElement).is(\"button,a,input\")) {\r\n keypress.preventDefault();\r\n\r\n SlideShow.toggle();\r\n }\r\n },\r\n\r\n \"beforeClose.fb onDeactivate.fb\": function (e, instance) {\r\n var SlideShow = instance && instance.SlideShow;\r\n\r\n if (SlideShow) {\r\n SlideShow.stop();\r\n }\r\n }\r\n });\r\n\r\n // Page Visibility API to pause slideshow when window is not active\r\n $(document).on(\"visibilitychange\", function () {\r\n var instance = $.fancybox.getInstance(),\r\n SlideShow = instance && instance.SlideShow;\r\n\r\n if (SlideShow && SlideShow.isActive) {\r\n if (document.hidden) {\r\n SlideShow.clear();\r\n } else {\r\n SlideShow.set();\r\n }\r\n }\r\n });\r\n})(document, jQuery);\r\n// ==========================================================================\r\n//\r\n// FullScreen\r\n// Adds fullscreen functionality\r\n//\r\n// ==========================================================================\r\n(function (document, $) {\r\n \"use strict\";\r\n\r\n // Collection of methods supported by user browser\r\n var fn = (function () {\r\n var fnMap = [\r\n [\"requestFullscreen\", \"exitFullscreen\", \"fullscreenElement\", \"fullscreenEnabled\", \"fullscreenchange\", \"fullscreenerror\"],\r\n // new WebKit\r\n [\r\n \"webkitRequestFullscreen\",\r\n \"webkitExitFullscreen\",\r\n \"webkitFullscreenElement\",\r\n \"webkitFullscreenEnabled\",\r\n \"webkitfullscreenchange\",\r\n \"webkitfullscreenerror\"\r\n ],\r\n // old WebKit (Safari 5.1)\r\n [\r\n \"webkitRequestFullScreen\",\r\n \"webkitCancelFullScreen\",\r\n \"webkitCurrentFullScreenElement\",\r\n \"webkitCancelFullScreen\",\r\n \"webkitfullscreenchange\",\r\n \"webkitfullscreenerror\"\r\n ],\r\n [\r\n \"mozRequestFullScreen\",\r\n \"mozCancelFullScreen\",\r\n \"mozFullScreenElement\",\r\n \"mozFullScreenEnabled\",\r\n \"mozfullscreenchange\",\r\n \"mozfullscreenerror\"\r\n ],\r\n [\"msRequestFullscreen\", \"msExitFullscreen\", \"msFullscreenElement\", \"msFullscreenEnabled\", \"MSFullscreenChange\", \"MSFullscreenError\"]\r\n ];\r\n\r\n var ret = {};\r\n\r\n for (var i = 0; i < fnMap.length; i++) {\r\n var val = fnMap[i];\r\n\r\n if (val && val[1] in document) {\r\n for (var j = 0; j < val.length; j++) {\r\n ret[fnMap[0][j]] = val[j];\r\n }\r\n\r\n return ret;\r\n }\r\n }\r\n\r\n return false;\r\n })();\r\n\r\n if (fn) {\r\n var FullScreen = {\r\n request: function (elem) {\r\n elem = elem || document.documentElement;\r\n\r\n elem[fn.requestFullscreen](elem.ALLOW_KEYBOARD_INPUT);\r\n },\r\n exit: function () {\r\n document[fn.exitFullscreen]();\r\n },\r\n toggle: function (elem) {\r\n elem = elem || document.documentElement;\r\n\r\n if (this.isFullscreen()) {\r\n this.exit();\r\n } else {\r\n this.request(elem);\r\n }\r\n },\r\n isFullscreen: function () {\r\n return Boolean(document[fn.fullscreenElement]);\r\n },\r\n enabled: function () {\r\n return Boolean(document[fn.fullscreenEnabled]);\r\n }\r\n };\r\n\r\n $.extend(true, $.fancybox.defaults, {\r\n btnTpl: {\r\n fullScreen: '\"\r\n },\r\n fullScreen: {\r\n autoStart: false\r\n }\r\n });\r\n\r\n $(document).on(fn.fullscreenchange, function () {\r\n var isFullscreen = FullScreen.isFullscreen(),\r\n instance = $.fancybox.getInstance();\r\n\r\n if (instance) {\r\n // If image is zooming, then force to stop and reposition properly\r\n if (instance.current && instance.current.type === \"image\" && instance.isAnimating) {\r\n instance.isAnimating = false;\r\n\r\n instance.update(true, true, 0);\r\n\r\n if (!instance.isComplete) {\r\n instance.complete();\r\n }\r\n }\r\n\r\n instance.trigger(\"onFullscreenChange\", isFullscreen);\r\n\r\n instance.$refs.container.toggleClass(\"fancybox-is-fullscreen\", isFullscreen);\r\n\r\n instance.$refs.toolbar\r\n .find(\"[data-fancybox-fullscreen]\")\r\n .toggleClass(\"fancybox-button--fsenter\", !isFullscreen)\r\n .toggleClass(\"fancybox-button--fsexit\", isFullscreen);\r\n }\r\n });\r\n }\r\n\r\n $(document).on({\r\n \"onInit.fb\": function (e, instance) {\r\n var $container;\r\n\r\n if (!fn) {\r\n instance.$refs.toolbar.find(\"[data-fancybox-fullscreen]\").remove();\r\n\r\n return;\r\n }\r\n\r\n if (instance && instance.group[instance.currIndex].opts.fullScreen) {\r\n $container = instance.$refs.container;\r\n\r\n $container.on(\"click.fb-fullscreen\", \"[data-fancybox-fullscreen]\", function (e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n\r\n FullScreen.toggle();\r\n });\r\n\r\n if (instance.opts.fullScreen && instance.opts.fullScreen.autoStart === true) {\r\n FullScreen.request();\r\n }\r\n\r\n // Expose API\r\n instance.FullScreen = FullScreen;\r\n } else if (instance) {\r\n instance.$refs.toolbar.find(\"[data-fancybox-fullscreen]\").hide();\r\n }\r\n },\r\n\r\n \"afterKeydown.fb\": function (e, instance, current, keypress, keycode) {\r\n // \"F\"\r\n if (instance && instance.FullScreen && keycode === 70) {\r\n keypress.preventDefault();\r\n\r\n instance.FullScreen.toggle();\r\n }\r\n },\r\n\r\n \"beforeClose.fb\": function (e, instance) {\r\n if (instance && instance.FullScreen && instance.$refs.container.hasClass(\"fancybox-is-fullscreen\")) {\r\n FullScreen.exit();\r\n }\r\n }\r\n });\r\n})(document, jQuery);\r\n// ==========================================================================\r\n//\r\n// Thumbs\r\n// Displays thumbnails in a grid\r\n//\r\n// ==========================================================================\r\n(function (document, $) {\r\n \"use strict\";\r\n\r\n var CLASS = \"fancybox-thumbs\",\r\n CLASS_ACTIVE = CLASS + \"-active\";\r\n\r\n // Make sure there are default values\r\n $.fancybox.defaults = $.extend(\r\n true, {\r\n btnTpl: {\r\n thumbs: '\"\r\n },\r\n thumbs: {\r\n autoStart: false, // Display thumbnails on opening\r\n hideOnClose: true, // Hide thumbnail grid when closing animation starts\r\n parentEl: \".fancybox-container\", // Container is injected into this element\r\n axis: \"y\" // Vertical (y) or horizontal (x) scrolling\r\n }\r\n },\r\n $.fancybox.defaults\r\n );\r\n\r\n var FancyThumbs = function (instance) {\r\n this.init(instance);\r\n };\r\n\r\n $.extend(FancyThumbs.prototype, {\r\n $button: null,\r\n $grid: null,\r\n $list: null,\r\n isVisible: false,\r\n isActive: false,\r\n\r\n init: function (instance) {\r\n var self = this,\r\n group = instance.group,\r\n enabled = 0;\r\n\r\n self.instance = instance;\r\n self.opts = group[instance.currIndex].opts.thumbs;\r\n\r\n instance.Thumbs = self;\r\n\r\n self.$button = instance.$refs.toolbar.find(\"[data-fancybox-thumbs]\");\r\n\r\n // Enable thumbs if at least two group items have thumbnails\r\n for (var i = 0, len = group.length; i < len; i++) {\r\n if (group[i].thumb) {\r\n enabled++;\r\n }\r\n\r\n if (enabled > 1) {\r\n break;\r\n }\r\n }\r\n\r\n if (enabled > 1 && !!self.opts) {\r\n self.$button.removeAttr(\"style\").on(\"click\", function () {\r\n self.toggle();\r\n });\r\n\r\n self.isActive = true;\r\n } else {\r\n self.$button.hide();\r\n }\r\n },\r\n\r\n create: function () {\r\n var self = this,\r\n instance = self.instance,\r\n parentEl = self.opts.parentEl,\r\n list = [],\r\n src;\r\n\r\n if (!self.$grid) {\r\n // Create main element\r\n self.$grid = $('
').appendTo(\r\n instance.$refs.container\r\n .find(parentEl)\r\n .addBack()\r\n .filter(parentEl)\r\n );\r\n\r\n // Add \"click\" event that performs gallery navigation\r\n self.$grid.on(\"click\", \"a\", function () {\r\n instance.jumpTo($(this).attr(\"data-index\"));\r\n });\r\n }\r\n\r\n // Build the list\r\n if (!self.$list) {\r\n self.$list = $('
').appendTo(self.$grid);\r\n }\r\n\r\n $.each(instance.group, function (i, item) {\r\n src = item.thumb;\r\n\r\n if (!src && item.type === \"image\") {\r\n src = item.src;\r\n }\r\n\r\n list.push(\r\n '\"\r\n );\r\n });\r\n\r\n self.$list[0].innerHTML = list.join(\"\");\r\n\r\n if (self.opts.axis === \"x\") {\r\n // Set fixed width for list element to enable horizontal scrolling\r\n self.$list.width(\r\n parseInt(self.$grid.css(\"padding-right\"), 10) +\r\n instance.group.length *\r\n self.$list\r\n .children()\r\n .eq(0)\r\n .outerWidth(true)\r\n );\r\n }\r\n },\r\n\r\n focus: function (duration) {\r\n var self = this,\r\n $list = self.$list,\r\n $grid = self.$grid,\r\n thumb,\r\n thumbPos;\r\n\r\n if (!self.instance.current) {\r\n return;\r\n }\r\n\r\n thumb = $list\r\n .children()\r\n .removeClass(CLASS_ACTIVE)\r\n .filter('[data-index=\"' + self.instance.current.index + '\"]')\r\n .addClass(CLASS_ACTIVE);\r\n\r\n thumbPos = thumb.position();\r\n\r\n // Check if need to scroll to make current thumb visible\r\n if (self.opts.axis === \"y\" && (thumbPos.top < 0 || thumbPos.top > $list.height() - thumb.outerHeight())) {\r\n $list.stop().animate({\r\n scrollTop: $list.scrollTop() + thumbPos.top\r\n },\r\n duration\r\n );\r\n } else if (\r\n self.opts.axis === \"x\" &&\r\n (thumbPos.left < $grid.scrollLeft() || thumbPos.left > $grid.scrollLeft() + ($grid.width() - thumb.outerWidth()))\r\n ) {\r\n $list\r\n .parent()\r\n .stop()\r\n .animate({\r\n scrollLeft: thumbPos.left\r\n },\r\n duration\r\n );\r\n }\r\n },\r\n\r\n update: function () {\r\n var that = this;\r\n that.instance.$refs.container.toggleClass(\"fancybox-show-thumbs\", this.isVisible);\r\n\r\n if (that.isVisible) {\r\n if (!that.$grid) {\r\n that.create();\r\n }\r\n\r\n that.instance.trigger(\"onThumbsShow\");\r\n\r\n that.focus(0);\r\n } else if (that.$grid) {\r\n that.instance.trigger(\"onThumbsHide\");\r\n }\r\n\r\n // Update content position\r\n that.instance.update();\r\n },\r\n\r\n hide: function () {\r\n this.isVisible = false;\r\n this.update();\r\n },\r\n\r\n show: function () {\r\n this.isVisible = true;\r\n this.update();\r\n },\r\n\r\n toggle: function () {\r\n this.isVisible = !this.isVisible;\r\n this.update();\r\n }\r\n });\r\n\r\n $(document).on({\r\n \"onInit.fb\": function (e, instance) {\r\n var Thumbs;\r\n\r\n if (instance && !instance.Thumbs) {\r\n Thumbs = new FancyThumbs(instance);\r\n\r\n if (Thumbs.isActive && Thumbs.opts.autoStart === true) {\r\n Thumbs.show();\r\n }\r\n }\r\n },\r\n\r\n \"beforeShow.fb\": function (e, instance, item, firstRun) {\r\n var Thumbs = instance && instance.Thumbs;\r\n\r\n if (Thumbs && Thumbs.isVisible) {\r\n Thumbs.focus(firstRun ? 0 : 250);\r\n }\r\n },\r\n\r\n \"afterKeydown.fb\": function (e, instance, current, keypress, keycode) {\r\n var Thumbs = instance && instance.Thumbs;\r\n\r\n // \"G\"\r\n if (Thumbs && Thumbs.isActive && keycode === 71) {\r\n keypress.preventDefault();\r\n\r\n Thumbs.toggle();\r\n }\r\n },\r\n\r\n \"beforeClose.fb\": function (e, instance) {\r\n var Thumbs = instance && instance.Thumbs;\r\n\r\n if (Thumbs && Thumbs.isVisible && Thumbs.opts.hideOnClose !== false) {\r\n Thumbs.$grid.hide();\r\n }\r\n }\r\n });\r\n})(document, jQuery);\r\n//// ==========================================================================\r\n//\r\n// Share\r\n// Displays simple form for sharing current url\r\n//\r\n// ==========================================================================\r\n(function (document, $) {\r\n \"use strict\";\r\n\r\n $.extend(true, $.fancybox.defaults, {\r\n btnTpl: {\r\n share: '\"\r\n },\r\n share: {\r\n url: function (instance, item) {\r\n return (\r\n (!instance.currentHash && !(item.type === \"inline\" || item.type === \"html\") ? item.origSrc || item.src : false) || window.location\r\n );\r\n },\r\n tpl: '
' +\r\n \"

{{SHARE}}

\" +\r\n \"

\" +\r\n '' +\r\n '' +\r\n \"Facebook\" +\r\n \"\" +\r\n '' +\r\n '' +\r\n \"Twitter\" +\r\n \"\" +\r\n '' +\r\n '' +\r\n \"Pinterest\" +\r\n \"\" +\r\n \"

\" +\r\n '

' +\r\n \"
\"\r\n }\r\n });\r\n\r\n function escapeHtml(string) {\r\n var entityMap = {\r\n \"&\": \"&\",\r\n \"<\": \"<\",\r\n \">\": \">\",\r\n '\"': \""\",\r\n \"'\": \"'\",\r\n \"/\": \"/\",\r\n \"`\": \"`\",\r\n \"=\": \"=\"\r\n };\r\n\r\n return String(string).replace(/[&<>\"'`=\\/]/g, function (s) {\r\n return entityMap[s];\r\n });\r\n }\r\n\r\n $(document).on(\"click\", \"[data-fancybox-share]\", function () {\r\n var instance = $.fancybox.getInstance(),\r\n current = instance.current || null,\r\n url,\r\n tpl;\r\n\r\n if (!current) {\r\n return;\r\n }\r\n\r\n if ($.type(current.opts.share.url) === \"function\") {\r\n url = current.opts.share.url.apply(current, [instance, current]);\r\n }\r\n\r\n tpl = current.opts.share.tpl\r\n .replace(/\\{\\{media\\}\\}/g, current.type === \"image\" ? encodeURIComponent(current.src) : \"\")\r\n .replace(/\\{\\{url\\}\\}/g, encodeURIComponent(url))\r\n .replace(/\\{\\{url_raw\\}\\}/g, escapeHtml(url))\r\n .replace(/\\{\\{descr\\}\\}/g, instance.$caption ? encodeURIComponent(instance.$caption.text()) : \"\");\r\n\r\n $.fancybox.open({\r\n src: instance.translate(instance, tpl),\r\n type: \"html\",\r\n opts: {\r\n touch: false,\r\n animationEffect: false,\r\n afterLoad: function (shareInstance, shareCurrent) {\r\n // Close self if parent instance is closing\r\n instance.$refs.container.one(\"beforeClose.fb\", function () {\r\n shareInstance.close(null, 0);\r\n });\r\n\r\n // Opening links in a popup window\r\n shareCurrent.$content.find(\".fancybox-share__button\").click(function () {\r\n window.open(this.href, \"Share\", \"width=550, height=450\");\r\n return false;\r\n });\r\n },\r\n mobile: {\r\n autoFocus: false\r\n }\r\n }\r\n });\r\n });\r\n})(document, jQuery);\r\n// ==========================================================================\r\n//\r\n// Hash\r\n// Enables linking to each modal\r\n//\r\n// ==========================================================================\r\n(function (window, document, $) {\r\n \"use strict\";\r\n\r\n // Simple $.escapeSelector polyfill (for jQuery prior v3)\r\n if (!$.escapeSelector) {\r\n $.escapeSelector = function (sel) {\r\n var rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\r\n var fcssescape = function (ch, asCodePoint) {\r\n if (asCodePoint) {\r\n // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\r\n if (ch === \"\\0\") {\r\n return \"\\uFFFD\";\r\n }\r\n\r\n // Control characters and (dependent upon position) numbers get escaped as code points\r\n return ch.slice(0, -1) + \"\\\\\" + ch.charCodeAt(ch.length - 1).toString(16) + \" \";\r\n }\r\n\r\n // Other potentially-special ASCII characters get backslash-escaped\r\n return \"\\\\\" + ch;\r\n };\r\n\r\n return (sel + \"\").replace(rcssescape, fcssescape);\r\n };\r\n }\r\n\r\n // Get info about gallery name and current index from url\r\n function parseUrl() {\r\n var hash = window.location.hash.substr(1),\r\n rez = hash.split(\"-\"),\r\n index = rez.length > 1 && /^\\+?\\d+$/.test(rez[rez.length - 1]) ? parseInt(rez.pop(-1), 10) || 1 : 1,\r\n gallery = rez.join(\"-\");\r\n\r\n return {\r\n hash: hash,\r\n /* Index is starting from 1 */\r\n index: index < 1 ? 1 : index,\r\n gallery: gallery\r\n };\r\n }\r\n\r\n // Trigger click evnt on links to open new fancyBox instance\r\n function triggerFromUrl(url) {\r\n if (url.gallery !== \"\") {\r\n // If we can find element matching 'data-fancybox' atribute,\r\n // then triggering click event should start fancyBox\r\n $(\"[data-fancybox='\" + $.escapeSelector(url.gallery) + \"']\")\r\n .eq(url.index - 1)\r\n .focus()\r\n .trigger(\"click.fb-start\");\r\n }\r\n }\r\n\r\n // Get gallery name from current instance\r\n function getGalleryID(instance) {\r\n var opts, ret;\r\n\r\n if (!instance) {\r\n return false;\r\n }\r\n\r\n opts = instance.current ? instance.current.opts : instance.opts;\r\n ret = opts.hash || (opts.$orig ? opts.$orig.data(\"fancybox\") || opts.$orig.data(\"fancybox-trigger\") : \"\");\r\n\r\n return ret === \"\" ? false : ret;\r\n }\r\n\r\n // Start when DOM becomes ready\r\n $(function () {\r\n // Check if user has disabled this module\r\n if ($.fancybox.defaults.hash === false) {\r\n return;\r\n }\r\n\r\n // Update hash when opening/closing fancyBox\r\n $(document).on({\r\n \"onInit.fb\": function (e, instance) {\r\n var url, gallery;\r\n\r\n if (instance.group[instance.currIndex].opts.hash === false) {\r\n return;\r\n }\r\n\r\n url = parseUrl();\r\n gallery = getGalleryID(instance);\r\n\r\n // Make sure gallery start index matches index from hash\r\n if (gallery && url.gallery && gallery == url.gallery) {\r\n instance.currIndex = url.index - 1;\r\n }\r\n },\r\n\r\n \"beforeShow.fb\": function (e, instance, current, firstRun) {\r\n var gallery;\r\n\r\n if (!current || current.opts.hash === false) {\r\n return;\r\n }\r\n\r\n // Check if need to update window hash\r\n gallery = getGalleryID(instance);\r\n\r\n if (!gallery) {\r\n return;\r\n }\r\n\r\n // Variable containing last hash value set by fancyBox\r\n // It will be used to determine if fancyBox needs to close after hash change is detected\r\n instance.currentHash = gallery + (instance.group.length > 1 ? \"-\" + (current.index + 1) : \"\");\r\n\r\n // If current hash is the same (this instance most likely is opened by hashchange), then do nothing\r\n if (window.location.hash === \"#\" + instance.currentHash) {\r\n return;\r\n }\r\n\r\n if (firstRun && !instance.origHash) {\r\n instance.origHash = window.location.hash;\r\n }\r\n\r\n if (instance.hashTimer) {\r\n clearTimeout(instance.hashTimer);\r\n }\r\n\r\n // Update hash\r\n instance.hashTimer = setTimeout(function () {\r\n if (\"replaceState\" in window.history) {\r\n window.history[firstRun ? \"pushState\" : \"replaceState\"]({},\r\n document.title,\r\n window.location.pathname + window.location.search + \"#\" + instance.currentHash\r\n );\r\n\r\n if (firstRun) {\r\n instance.hasCreatedHistory = true;\r\n }\r\n } else {\r\n window.location.hash = instance.currentHash;\r\n }\r\n\r\n instance.hashTimer = null;\r\n }, 300);\r\n },\r\n\r\n \"beforeClose.fb\": function (e, instance, current) {\r\n if (!current || current.opts.hash === false) {\r\n return;\r\n }\r\n\r\n clearTimeout(instance.hashTimer);\r\n\r\n // Goto previous history entry\r\n if (instance.currentHash && instance.hasCreatedHistory) {\r\n window.history.back();\r\n } else if (instance.currentHash) {\r\n if (\"replaceState\" in window.history) {\r\n window.history.replaceState({}, document.title, window.location.pathname + window.location.search + (instance.origHash || \"\"));\r\n } else {\r\n window.location.hash = instance.origHash;\r\n }\r\n }\r\n\r\n instance.currentHash = null;\r\n }\r\n });\r\n\r\n // Check if need to start/close after url has changed\r\n $(window).on(\"hashchange.fb\", function () {\r\n var url = parseUrl(),\r\n fb = null;\r\n\r\n // Find last fancyBox instance that has \"hash\"\r\n $.each(\r\n $(\".fancybox-container\")\r\n .get()\r\n .reverse(),\r\n function (index, value) {\r\n var tmp = $(value).data(\"FancyBox\");\r\n\r\n if (tmp && tmp.currentHash) {\r\n fb = tmp;\r\n return false;\r\n }\r\n }\r\n );\r\n\r\n if (fb) {\r\n // Now, compare hash values\r\n if (fb.currentHash !== url.gallery + \"-\" + url.index && !(url.index === 1 && fb.currentHash == url.gallery)) {\r\n fb.currentHash = null;\r\n\r\n fb.close();\r\n }\r\n } else if (url.gallery !== \"\") {\r\n triggerFromUrl(url);\r\n }\r\n });\r\n\r\n // Check current hash and trigger click event on matching element to start fancyBox, if needed\r\n setTimeout(function () {\r\n if (!$.fancybox.getInstance()) {\r\n triggerFromUrl(parseUrl());\r\n }\r\n }, 50);\r\n });\r\n})(window, document, jQuery);\r\n// ==========================================================================\r\n//\r\n// Wheel\r\n// Basic mouse weheel support for gallery navigation\r\n//\r\n// ==========================================================================\r\n(function (document, $) {\r\n \"use strict\";\r\n\r\n var prevTime = new Date().getTime();\r\n\r\n $(document).on({\r\n \"onInit.fb\": function (e, instance, current) {\r\n instance.$refs.stage.on(\"mousewheel DOMMouseScroll wheel MozMousePixelScroll\", function (e) {\r\n var current = instance.current,\r\n currTime = new Date().getTime();\r\n\r\n if (instance.group.length < 2 || current.opts.wheel === false || (current.opts.wheel === \"auto\" && current.type !== \"image\")) {\r\n return;\r\n }\r\n\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n if (current.$slide.hasClass(\"fancybox-animated\")) {\r\n return;\r\n }\r\n\r\n e = e.originalEvent || e;\r\n\r\n if (currTime - prevTime < 250) {\r\n return;\r\n }\r\n\r\n prevTime = currTime;\r\n\r\n instance[(-e.deltaY || -e.deltaX || e.wheelDelta || -e.detail) < 0 ? \"next\" : \"previous\"]();\r\n });\r\n }\r\n });\r\n})(document, jQuery);","/*\r\n _ _ _ _\r\n ___| (_) ___| | __ (_)___\r\n/ __| | |/ __| |/ / | / __|\r\n\\__ \\ | | (__| < _ | \\__ \\\r\n|___/_|_|\\___|_|\\_(_)/ |___/\r\n |__/\r\n\r\n Version: 1.8.0\r\n Author: Ken Wheeler\r\n Website: http://kenwheeler.github.io\r\n Docs: http://kenwheeler.github.io/slick\r\n Repo: http://github.com/kenwheeler/slick\r\n Issues: http://github.com/kenwheeler/slick/issues\r\n\r\n */\r\n/* global window, document, define, jQuery, setInterval, clearInterval */\r\n;(function(factory) {\r\n 'use strict';\r\n if (typeof define === 'function' && define.amd) {\r\n define(['jquery'], factory);\r\n } else if (typeof exports !== 'undefined') {\r\n module.exports = factory(require('jquery'));\r\n } else {\r\n factory(jQuery);\r\n }\r\n\r\n}(function($) {\r\n 'use strict';\r\n var Slick = window.Slick || {};\r\n\r\n Slick = (function() {\r\n\r\n var instanceUid = 0;\r\n\r\n function Slick(element, settings) {\r\n\r\n var _ = this, dataSettings;\r\n\r\n _.defaults = {\r\n accessibility: true,\r\n adaptiveHeight: false,\r\n appendArrows: $(element),\r\n appendDots: $(element),\r\n arrows: true,\r\n asNavFor: null,\r\n prevArrow: '',\r\n nextArrow: '',\r\n autoplay: false,\r\n autoplaySpeed: 3000,\r\n centerMode: false,\r\n centerPadding: '50px',\r\n cssEase: 'ease',\r\n customPaging: function(slider, i) {\r\n return $('", - - close: '", - - // Arrows - arrowLeft: '", - - arrowRight: '", - - // This small close button will be appended to your html/inline/ajax content by default, - // if "smallBtn" option is not set to false - smallBtn: '" - }, - - // Container is injected into this element - parentEl: "body", - - // Hide browser vertical scrollbars; use at your own risk - hideScrollbar: true, - - // Focus handling - // ============== - - // Try to focus on the first focusable element after opening - autoFocus: true, - - // Put focus back to active element after closing - backFocus: true, - - // Do not let user to focus on element outside modal content - trapFocus: true, - - // Module specific options - // ======================= - - fullScreen: { - autoStart: false - }, - - // Set `touch: false` to disable panning/swiping - touch: { - vertical: true, // Allow to drag content vertically - momentum: true // Continue movement after releasing mouse/touch when panning - }, - - // Hash value when initializing manually, - // set `false` to disable hash change - hash: null, - - // Customize or add new media types - // Example: - /* - media : { - youtube : { - params : { - autoplay : 0 - } - } - } - */ - media: {}, - - slideShow: { - autoStart: false, - speed: 3000 - }, - - thumbs: { - autoStart: false, // Display thumbnails on opening - hideOnClose: true, // Hide thumbnail grid when closing animation starts - parentEl: ".fancybox-container", // Container is injected into this element - axis: "y" // Vertical (y) or horizontal (x) scrolling - }, - - // Use mousewheel to navigate gallery - // If 'auto' - enabled for images only - wheel: "auto", - - // Callbacks - //========== - - // See Documentation/API/Events for more information - // Example: - /* - afterShow: function( instance, current ) { - console.info( 'Clicked element:' ); - console.info( current.opts.$orig ); - } - */ - - onInit: $.noop, // When instance has been initialized - - beforeLoad: $.noop, // Before the content of a slide is being loaded - afterLoad: $.noop, // When the content of a slide is done loading - - beforeShow: $.noop, // Before open animation starts - afterShow: $.noop, // When content is done loading and animating - - beforeClose: $.noop, // Before the instance attempts to close. Return false to cancel the close. - afterClose: $.noop, // After instance has been closed - - onActivate: $.noop, // When instance is brought to front - onDeactivate: $.noop, // When other instance has been activated - - // Interaction - // =========== - - // Use options below to customize taken action when user clicks or double clicks on the fancyBox area, - // each option can be string or method that returns value. - // - // Possible values: - // "close" - close instance - // "next" - move to next gallery item - // "nextOrClose" - move to next gallery item or close if gallery has only one item - // "toggleControls" - show/hide controls - // "zoom" - zoom image (if loaded) - // false - do nothing - - // Clicked on the content - clickContent: function (current, event) { - return current.type === "image" ? "zoom" : false; - }, - - // Clicked on the slide - clickSlide: "close", - - // Clicked on the background (backdrop) element; - // if you have not changed the layout, then most likely you need to use `clickSlide` option - clickOutside: "close", - - // Same as previous two, but for double click - dblclickContent: false, - dblclickSlide: false, - dblclickOutside: false, - - // Custom options when mobile device is detected - // ============================================= - - mobile: { - preventCaptionOverlap: false, - idleTime: false, - clickContent: function (current, event) { - return current.type === "image" ? "toggleControls" : false; - }, - clickSlide: function (current, event) { - return current.type === "image" ? "toggleControls" : "close"; - }, - dblclickContent: function (current, event) { - return current.type === "image" ? "zoom" : false; - }, - dblclickSlide: function (current, event) { - return current.type === "image" ? "zoom" : false; - } - }, - - // Internationalization - // ==================== - - lang: "en", - i18n: { - en: { - CLOSE: "Close", - NEXT: "Next", - PREV: "Previous", - ERROR: "The requested content cannot be loaded.
Please try again later.", - PLAY_START: "Start slideshow", - PLAY_STOP: "Pause slideshow", - FULL_SCREEN: "Full screen", - THUMBS: "Thumbnails", - DOWNLOAD: "Download", - SHARE: "Share", - ZOOM: "Zoom" - }, - de: { - CLOSE: "Schließen", - NEXT: "Weiter", - PREV: "Zurück", - ERROR: "Die angeforderten Daten konnten nicht geladen werden.
Bitte versuchen Sie es später nochmal.", - PLAY_START: "Diaschau starten", - PLAY_STOP: "Diaschau beenden", - FULL_SCREEN: "Vollbild", - THUMBS: "Vorschaubilder", - DOWNLOAD: "Herunterladen", - SHARE: "Teilen", - ZOOM: "Vergrößern" - } - } - }; - - // Few useful variables and methods - // ================================ - - var $W = $(window); - var $D = $(document); - - var called = 0; - - // Check if an object is a jQuery object and not a native JavaScript object - // ======================================================================== - var isQuery = function (obj) { - return obj && obj.hasOwnProperty && obj instanceof $; - }; - - // Handle multiple browsers for "requestAnimationFrame" and "cancelAnimationFrame" - // =============================================================================== - var requestAFrame = (function () { - return ( - window.requestAnimationFrame || - window.webkitRequestAnimationFrame || - window.mozRequestAnimationFrame || - window.oRequestAnimationFrame || - // if all else fails, use setTimeout - function (callback) { - return window.setTimeout(callback, 1000 / 60); - } - ); - })(); - - var cancelAFrame = (function () { - return ( - window.cancelAnimationFrame || - window.webkitCancelAnimationFrame || - window.mozCancelAnimationFrame || - window.oCancelAnimationFrame || - function (id) { - window.clearTimeout(id); - } - ); - })(); - - // Detect the supported transition-end event property name - // ======================================================= - var transitionEnd = (function () { - var el = document.createElement("fakeelement"), - t; - - var transitions = { - transition: "transitionend", - OTransition: "oTransitionEnd", - MozTransition: "transitionend", - WebkitTransition: "webkitTransitionEnd" - }; - - for (t in transitions) { - if (el.style[t] !== undefined) { - return transitions[t]; - } - } - - return "transitionend"; - })(); - - // Force redraw on an element. - // This helps in cases where the browser doesn't redraw an updated element properly - // ================================================================================ - var forceRedraw = function ($el) { - return $el && $el.length && $el[0].offsetHeight; - }; - - // Exclude array (`buttons`) options from deep merging - // =================================================== - var mergeOpts = function (opts1, opts2) { - var rez = $.extend(true, {}, opts1, opts2); - - $.each(opts2, function (key, value) { - if ($.isArray(value)) { - rez[key] = value; - } - }); - - return rez; - }; - - // How much of an element is visible in viewport - // ============================================= - - var inViewport = function (elem) { - var elemCenter, rez; - - if (!elem || elem.ownerDocument !== document) { - return false; - } - - $(".fancybox-container").css("pointer-events", "none"); - - elemCenter = { - x: elem.getBoundingClientRect().left + elem.offsetWidth / 2, - y: elem.getBoundingClientRect().top + elem.offsetHeight / 2 - }; - - rez = document.elementFromPoint(elemCenter.x, elemCenter.y) === elem; - - $(".fancybox-container").css("pointer-events", ""); - - return rez; - }; - - // Class definition - // ================ - - var FancyBox = function (content, opts, index) { - var self = this; - - self.opts = mergeOpts({ - index: index - }, $.fancybox.defaults); - - if ($.isPlainObject(opts)) { - self.opts = mergeOpts(self.opts, opts); - } - - if ($.fancybox.isMobile) { - self.opts = mergeOpts(self.opts, self.opts.mobile); - } - - self.id = self.opts.id || ++called; - - self.currIndex = parseInt(self.opts.index, 10) || 0; - self.prevIndex = null; - - self.prevPos = null; - self.currPos = 0; - - self.firstRun = true; - - // All group items - self.group = []; - - // Existing slides (for current, next and previous gallery items) - self.slides = {}; - - // Create group elements - self.addContent(content); - - if (!self.group.length) { - return; - } - - self.init(); - }; - - $.extend(FancyBox.prototype, { - // Create DOM structure - // ==================== - - init: function () { - var self = this, - firstItem = self.group[self.currIndex], - firstItemOpts = firstItem.opts, - $container, - buttonStr; - - if (firstItemOpts.closeExisting) { - $.fancybox.close(true); - } - - // Hide scrollbars - // =============== - - $("body").addClass("fancybox-active"); - - if ( - !$.fancybox.getInstance() && - firstItemOpts.hideScrollbar !== false && - !$.fancybox.isMobile && - document.body.scrollHeight > window.innerHeight - ) { - $("head").append( - '" - ); - - $("body").addClass("compensate-for-scrollbar"); - } - - // Build html markup and set references - // ==================================== - - // Build html code for buttons and insert into main template - buttonStr = ""; - - $.each(firstItemOpts.buttons, function (index, value) { - buttonStr += firstItemOpts.btnTpl[value] || ""; - }); - - // Create markup from base template, it will be initially hidden to - // avoid unnecessary work like painting while initializing is not complete - $container = $( - self.translate( - self, - firstItemOpts.baseTpl - .replace("{{buttons}}", buttonStr) - .replace("{{arrows}}", firstItemOpts.btnTpl.arrowLeft + firstItemOpts.btnTpl.arrowRight) - ) - ) - .attr("id", "fancybox-container-" + self.id) - .addClass(firstItemOpts.baseClass) - .data("FancyBox", self) - .appendTo(firstItemOpts.parentEl); - - // Create object holding references to jQuery wrapped nodes - self.$refs = { - container: $container - }; - - ["bg", "inner", "infobar", "toolbar", "stage", "caption", "navigation"].forEach(function (item) { - self.$refs[item] = $container.find(".fancybox-" + item); - }); - - self.trigger("onInit"); - - // Enable events, deactive previous instances - self.activate(); - - // Build slides, load and reveal content - self.jumpTo(self.currIndex); - }, - - // Simple i18n support - replaces object keys found in template - // with corresponding values - // ============================================================ - - translate: function (obj, str) { - var arr = obj.opts.i18n[obj.opts.lang] || obj.opts.i18n.en; - - return str.replace(/\{\{(\w+)\}\}/g, function (match, n) { - return arr[n] === undefined ? match : arr[n]; - }); - }, - - // Populate current group with fresh content - // Check if each object has valid type and content - // =============================================== - - addContent: function (content) { - var self = this, - items = $.makeArray(content), - thumbs; - - $.each(items, function (i, item) { - var obj = {}, - opts = {}, - $item, - type, - found, - src, - srcParts; - - // Step 1 - Make sure we have an object - // ==================================== - - if ($.isPlainObject(item)) { - // We probably have manual usage here, something like - // $.fancybox.open( [ { src : "image.jpg", type : "image" } ] ) - - obj = item; - opts = item.opts || item; - } else if ($.type(item) === "object" && $(item).length) { - // Here we probably have jQuery collection returned by some selector - $item = $(item); - - // Support attributes like `data-options='{"touch" : false}'` and `data-touch='false'` - opts = $item.data() || {}; - opts = $.extend(true, {}, opts, opts.options); - - // Here we store clicked element - opts.$orig = $item; - - obj.src = self.opts.src || opts.src || $item.attr("href"); - - // Assume that simple syntax is used, for example: - // `$.fancybox.open( $("#test"), {} );` - if (!obj.type && !obj.src) { - obj.type = "inline"; - obj.src = item; - } - } else { - // Assume we have a simple html code, for example: - // $.fancybox.open( '

Hi!

' ); - obj = { - type: "html", - src: item + "" - }; - } - - // Each gallery object has full collection of options - obj.opts = $.extend(true, {}, self.opts, opts); - - // Do not merge buttons array - if ($.isArray(opts.buttons)) { - obj.opts.buttons = opts.buttons; - } - - if ($.fancybox.isMobile && obj.opts.mobile) { - obj.opts = mergeOpts(obj.opts, obj.opts.mobile); - } - - // Step 2 - Make sure we have content type, if not - try to guess - // ============================================================== - - type = obj.type || obj.opts.type; - src = obj.src || ""; - - if (!type && src) { - if ((found = src.match(/\.(mp4|mov|ogv|webm)((\?|#).*)?$/i))) { - type = "video"; - - if (!obj.opts.video.format) { - obj.opts.video.format = "video/" + (found[1] === "ogv" ? "ogg" : found[1]); - } - } else if (src.match(/(^data:image\/[a-z0-9+\/=]*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp|svg|ico)((\?|#).*)?$)/i)) { - type = "image"; - } else if (src.match(/\.(pdf)((\?|#).*)?$/i)) { - type = "iframe"; - obj = $.extend(true, obj, { - contentType: "pdf", - opts: { - iframe: { - preload: false - } - } - }); - } else if (src.charAt(0) === "#") { - type = "inline"; - } - } - - if (type) { - obj.type = type; - } else { - self.trigger("objectNeedsType", obj); - } - - if (!obj.contentType) { - obj.contentType = $.inArray(obj.type, ["html", "inline", "ajax"]) > -1 ? "html" : obj.type; - } - - // Step 3 - Some adjustments - // ========================= - - obj.index = self.group.length; - - if (obj.opts.smallBtn == "auto") { - obj.opts.smallBtn = $.inArray(obj.type, ["html", "inline", "ajax"]) > -1; - } - - if (obj.opts.toolbar === "auto") { - obj.opts.toolbar = !obj.opts.smallBtn; - } - - // Find thumbnail image, check if exists and if is in the viewport - obj.$thumb = obj.opts.$thumb || null; - - if (obj.opts.$trigger && obj.index === self.opts.index) { - obj.$thumb = obj.opts.$trigger.find("img:first"); - - if (obj.$thumb.length) { - obj.opts.$orig = obj.opts.$trigger; - } - } - - if (!(obj.$thumb && obj.$thumb.length) && obj.opts.$orig) { - obj.$thumb = obj.opts.$orig.find("img:first"); - } - - if (obj.$thumb && !obj.$thumb.length) { - obj.$thumb = null; - } - - obj.thumb = obj.opts.thumb || (obj.$thumb ? obj.$thumb[0].src : null); - - // "caption" is a "special" option, it can be used to customize caption per gallery item - if ($.type(obj.opts.caption) === "function") { - obj.opts.caption = obj.opts.caption.apply(item, [self, obj]); - } - - if ($.type(self.opts.caption) === "function") { - obj.opts.caption = self.opts.caption.apply(item, [self, obj]); - } - - // Make sure we have caption as a string or jQuery object - if (!(obj.opts.caption instanceof $)) { - obj.opts.caption = obj.opts.caption === undefined ? "" : obj.opts.caption + ""; - } - - // Check if url contains "filter" used to filter the content - // Example: "ajax.html #something" - if (obj.type === "ajax") { - srcParts = src.split(/\s+/, 2); - - if (srcParts.length > 1) { - obj.src = srcParts.shift(); - - obj.opts.filter = srcParts.shift(); - } - } - - // Hide all buttons and disable interactivity for modal items - if (obj.opts.modal) { - obj.opts = $.extend(true, obj.opts, { - trapFocus: true, - // Remove buttons - infobar: 0, - toolbar: 0, - - smallBtn: 0, - - // Disable keyboard navigation - keyboard: 0, - - // Disable some modules - slideShow: 0, - fullScreen: 0, - thumbs: 0, - touch: 0, - - // Disable click event handlers - clickContent: false, - clickSlide: false, - clickOutside: false, - dblclickContent: false, - dblclickSlide: false, - dblclickOutside: false - }); - } - - // Step 4 - Add processed object to group - // ====================================== - - self.group.push(obj); - }); - - // Update controls if gallery is already opened - if (Object.keys(self.slides).length) { - self.updateControls(); - - // Update thumbnails, if needed - thumbs = self.Thumbs; - - if (thumbs && thumbs.isActive) { - thumbs.create(); - - thumbs.focus(); - } - } - }, - - // Attach an event handler functions for: - // - navigation buttons - // - browser scrolling, resizing; - // - focusing - // - keyboard - // - detecting inactivity - // ====================================== - - addEvents: function () { - var self = this; - - self.removeEvents(); - - // Make navigation elements clickable - // ================================== - - self.$refs.container - .on("click.fb-close", "[data-fancybox-close]", function (e) { - e.stopPropagation(); - e.preventDefault(); - - self.close(e); - }) - .on("touchstart.fb-prev click.fb-prev", "[data-fancybox-prev]", function (e) { - e.stopPropagation(); - e.preventDefault(); - - self.previous(); - }) - .on("touchstart.fb-next click.fb-next", "[data-fancybox-next]", function (e) { - e.stopPropagation(); - e.preventDefault(); - - self.next(); - }) - .on("click.fb", "[data-fancybox-zoom]", function (e) { - // Click handler for zoom button - self[self.isScaledDown() ? "scaleToActual" : "scaleToFit"](); - }); - - // Handle page scrolling and browser resizing - // ========================================== - - $W.on("orientationchange.fb resize.fb", function (e) { - if (e && e.originalEvent && e.originalEvent.type === "resize") { - if (self.requestId) { - cancelAFrame(self.requestId); - } - - self.requestId = requestAFrame(function () { - self.update(e); - }); - } else { - if (self.current && self.current.type === "iframe") { - self.$refs.stage.hide(); - } - - setTimeout( - function () { - self.$refs.stage.show(); - - self.update(e); - }, - $.fancybox.isMobile ? 600 : 250 - ); - } - }); - - $D.on("keydown.fb", function (e) { - var instance = $.fancybox ? $.fancybox.getInstance() : null, - current = instance.current, - keycode = e.keyCode || e.which; - - // Trap keyboard focus inside of the modal - // ======================================= - - if (keycode == 9) { - if (current.opts.trapFocus) { - self.focus(e); - } - - return; - } - - // Enable keyboard navigation - // ========================== - - if (!current.opts.keyboard || e.ctrlKey || e.altKey || e.shiftKey || $(e.target).is("input,textarea,video,audio,select")) { - return; - } - - // Backspace and Esc keys - if (keycode === 8 || keycode === 27) { - e.preventDefault(); - - self.close(e); - - return; - } - - // Left arrow and Up arrow - if (keycode === 37 || keycode === 38) { - e.preventDefault(); - - self.previous(); - - return; - } - - // Righ arrow and Down arrow - if (keycode === 39 || keycode === 40) { - e.preventDefault(); - - self.next(); - - return; - } - - self.trigger("afterKeydown", e, keycode); - }); - - // Hide controls after some inactivity period - if (self.group[self.currIndex].opts.idleTime) { - self.idleSecondsCounter = 0; - - $D.on( - "mousemove.fb-idle mouseleave.fb-idle mousedown.fb-idle touchstart.fb-idle touchmove.fb-idle scroll.fb-idle keydown.fb-idle", - function (e) { - self.idleSecondsCounter = 0; - - if (self.isIdle) { - self.showControls(); - } - - self.isIdle = false; - } - ); - - self.idleInterval = window.setInterval(function () { - self.idleSecondsCounter++; - - if (self.idleSecondsCounter >= self.group[self.currIndex].opts.idleTime && !self.isDragging) { - self.isIdle = true; - self.idleSecondsCounter = 0; - - self.hideControls(); - } - }, 1000); - } - }, - - // Remove events added by the core - // =============================== - - removeEvents: function () { - var self = this; - - $W.off("orientationchange.fb resize.fb"); - $D.off("keydown.fb .fb-idle"); - - this.$refs.container.off(".fb-close .fb-prev .fb-next"); - - if (self.idleInterval) { - window.clearInterval(self.idleInterval); - - self.idleInterval = null; - } - }, - - // Change to previous gallery item - // =============================== - - previous: function (duration) { - return this.jumpTo(this.currPos - 1, duration); - }, - - // Change to next gallery item - // =========================== - - next: function (duration) { - return this.jumpTo(this.currPos + 1, duration); - }, - - // Switch to selected gallery item - // =============================== - - jumpTo: function (pos, duration) { - var self = this, - groupLen = self.group.length, - firstRun, - isMoved, - loop, - current, - previous, - slidePos, - stagePos, - prop, - diff; - - if (self.isDragging || self.isClosing || (self.isAnimating && self.firstRun)) { - return; - } - - // Should loop? - pos = parseInt(pos, 10); - loop = self.current ? self.current.opts.loop : self.opts.loop; - - if (!loop && (pos < 0 || pos >= groupLen)) { - return false; - } - - // Check if opening for the first time; this helps to speed things up - firstRun = self.firstRun = !Object.keys(self.slides).length; - - // Create slides - previous = self.current; - - self.prevIndex = self.currIndex; - self.prevPos = self.currPos; - - current = self.createSlide(pos); - - if (groupLen > 1) { - if (loop || current.index < groupLen - 1) { - self.createSlide(pos + 1); - } - - if (loop || current.index > 0) { - self.createSlide(pos - 1); - } - } - - self.current = current; - self.currIndex = current.index; - self.currPos = current.pos; - - self.trigger("beforeShow", firstRun); - - self.updateControls(); - - // Validate duration length - current.forcedDuration = undefined; - - if ($.isNumeric(duration)) { - current.forcedDuration = duration; - } else { - duration = current.opts[firstRun ? "animationDuration" : "transitionDuration"]; - } - - duration = parseInt(duration, 10); - - // Check if user has swiped the slides or if still animating - isMoved = self.isMoved(current); - - // Make sure current slide is visible - current.$slide.addClass("fancybox-slide--current"); - - // Fresh start - reveal container, current slide and start loading content - if (firstRun) { - if (current.opts.animationEffect && duration) { - self.$refs.container.css("transition-duration", duration + "ms"); - } - - self.$refs.container.addClass("fancybox-is-open").trigger("focus"); - - // Attempt to load content into slide - // This will later call `afterLoad` -> `revealContent` - self.loadSlide(current); - - self.preload("image"); - - return; - } - - // Get actual slide/stage positions (before cleaning up) - slidePos = $.fancybox.getTranslate(previous.$slide); - stagePos = $.fancybox.getTranslate(self.$refs.stage); - - // Clean up all slides - $.each(self.slides, function (index, slide) { - $.fancybox.stop(slide.$slide, true); - }); - - if (previous.pos !== current.pos) { - previous.isComplete = false; - } - - previous.$slide.removeClass("fancybox-slide--complete fancybox-slide--current"); - - // If slides are out of place, then animate them to correct position - if (isMoved) { - // Calculate horizontal swipe distance - diff = slidePos.left - (previous.pos * slidePos.width + previous.pos * previous.opts.gutter); - - $.each(self.slides, function (index, slide) { - slide.$slide.removeClass("fancybox-animated").removeClass(function (index, className) { - return (className.match(/(^|\s)fancybox-fx-\S+/g) || []).join(" "); - }); - - // Make sure that each slide is in equal distance - // This is mostly needed for freshly added slides, because they are not yet positioned - var leftPos = slide.pos * slidePos.width + slide.pos * slide.opts.gutter; - - $.fancybox.setTranslate(slide.$slide, { - top: 0, - left: leftPos - stagePos.left + diff - }); - - if (slide.pos !== current.pos) { - slide.$slide.addClass("fancybox-slide--" + (slide.pos > current.pos ? "next" : "previous")); - } - - // Redraw to make sure that transition will start - forceRedraw(slide.$slide); - - // Animate the slide - $.fancybox.animate( - slide.$slide, { - top: 0, - left: (slide.pos - current.pos) * slidePos.width + (slide.pos - current.pos) * slide.opts.gutter - }, - duration, - function () { - slide.$slide - .css({ - transform: "", - opacity: "" - }) - .removeClass("fancybox-slide--next fancybox-slide--previous"); - - if (slide.pos === self.currPos) { - self.complete(); - } - } - ); - }); - } else if (duration && current.opts.transitionEffect) { - // Set transition effect for previously active slide - prop = "fancybox-animated fancybox-fx-" + current.opts.transitionEffect; - - previous.$slide.addClass("fancybox-slide--" + (previous.pos > current.pos ? "next" : "previous")); - - $.fancybox.animate( - previous.$slide, - prop, - duration, - function () { - previous.$slide.removeClass(prop).removeClass("fancybox-slide--next fancybox-slide--previous"); - }, - false - ); - } - - if (current.isLoaded) { - self.revealContent(current); - } else { - self.loadSlide(current); - } - - self.preload("image"); - }, - - // Create new "slide" element - // These are gallery items that are actually added to DOM - // ======================================================= - - createSlide: function (pos) { - var self = this, - $slide, - index; - - index = pos % self.group.length; - index = index < 0 ? self.group.length + index : index; - - if (!self.slides[pos] && self.group[index]) { - $slide = $('
').appendTo(self.$refs.stage); - - self.slides[pos] = $.extend(true, {}, self.group[index], { - pos: pos, - $slide: $slide, - isLoaded: false - }); - - self.updateSlide(self.slides[pos]); - } - - return self.slides[pos]; - }, - - // Scale image to the actual size of the image; - // x and y values should be relative to the slide - // ============================================== - - scaleToActual: function (x, y, duration) { - var self = this, - current = self.current, - $content = current.$content, - canvasWidth = $.fancybox.getTranslate(current.$slide).width, - canvasHeight = $.fancybox.getTranslate(current.$slide).height, - newImgWidth = current.width, - newImgHeight = current.height, - imgPos, - posX, - posY, - scaleX, - scaleY; - - if (self.isAnimating || self.isMoved() || !$content || !(current.type == "image" && current.isLoaded && !current.hasError)) { - return; - } - - self.isAnimating = true; - - $.fancybox.stop($content); - - x = x === undefined ? canvasWidth * 0.5 : x; - y = y === undefined ? canvasHeight * 0.5 : y; - - imgPos = $.fancybox.getTranslate($content); - - imgPos.top -= $.fancybox.getTranslate(current.$slide).top; - imgPos.left -= $.fancybox.getTranslate(current.$slide).left; - - scaleX = newImgWidth / imgPos.width; - scaleY = newImgHeight / imgPos.height; - - // Get center position for original image - posX = canvasWidth * 0.5 - newImgWidth * 0.5; - posY = canvasHeight * 0.5 - newImgHeight * 0.5; - - // Make sure image does not move away from edges - if (newImgWidth > canvasWidth) { - posX = imgPos.left * scaleX - (x * scaleX - x); - - if (posX > 0) { - posX = 0; - } - - if (posX < canvasWidth - newImgWidth) { - posX = canvasWidth - newImgWidth; - } - } - - if (newImgHeight > canvasHeight) { - posY = imgPos.top * scaleY - (y * scaleY - y); - - if (posY > 0) { - posY = 0; - } - - if (posY < canvasHeight - newImgHeight) { - posY = canvasHeight - newImgHeight; - } - } - - self.updateCursor(newImgWidth, newImgHeight); - - $.fancybox.animate( - $content, { - top: posY, - left: posX, - scaleX: scaleX, - scaleY: scaleY - }, - duration || 366, - function () { - self.isAnimating = false; - } - ); - - // Stop slideshow - if (self.SlideShow && self.SlideShow.isActive) { - self.SlideShow.stop(); - } - }, - - // Scale image to fit inside parent element - // ======================================== - - scaleToFit: function (duration) { - var self = this, - current = self.current, - $content = current.$content, - end; - - if (self.isAnimating || self.isMoved() || !$content || !(current.type == "image" && current.isLoaded && !current.hasError)) { - return; - } - - self.isAnimating = true; - - $.fancybox.stop($content); - - end = self.getFitPos(current); - - self.updateCursor(end.width, end.height); - - $.fancybox.animate( - $content, { - top: end.top, - left: end.left, - scaleX: end.width / $content.width(), - scaleY: end.height / $content.height() - }, - duration || 366, - function () { - self.isAnimating = false; - } - ); - }, - - // Calculate image size to fit inside viewport - // =========================================== - - getFitPos: function (slide) { - var self = this, - $content = slide.$content, - $slide = slide.$slide, - width = slide.width || slide.opts.width, - height = slide.height || slide.opts.height, - maxWidth, - maxHeight, - minRatio, - aspectRatio, - rez = {}; - - if (!slide.isLoaded || !$content || !$content.length) { - return false; - } - - maxWidth = $.fancybox.getTranslate(self.$refs.stage).width; - maxHeight = $.fancybox.getTranslate(self.$refs.stage).height; - - maxWidth -= - parseFloat($slide.css("paddingLeft")) + - parseFloat($slide.css("paddingRight")) + - parseFloat($content.css("marginLeft")) + - parseFloat($content.css("marginRight")); - - maxHeight -= - parseFloat($slide.css("paddingTop")) + - parseFloat($slide.css("paddingBottom")) + - parseFloat($content.css("marginTop")) + - parseFloat($content.css("marginBottom")); - - if (!width || !height) { - width = maxWidth; - height = maxHeight; - } - - minRatio = Math.min(1, maxWidth / width, maxHeight / height); - - width = minRatio * width; - height = minRatio * height; - - // Adjust width/height to precisely fit into container - if (width > maxWidth - 0.5) { - width = maxWidth; - } - - if (height > maxHeight - 0.5) { - height = maxHeight; - } - - if (slide.type === "image") { - rez.top = Math.floor((maxHeight - height) * 0.5) + parseFloat($slide.css("paddingTop")); - rez.left = Math.floor((maxWidth - width) * 0.5) + parseFloat($slide.css("paddingLeft")); - } else if (slide.contentType === "video") { - // Force aspect ratio for the video - // "I say the whole world must learn of our peaceful ways… by force!" - aspectRatio = slide.opts.width && slide.opts.height ? width / height : slide.opts.ratio || 16 / 9; - - if (height > width / aspectRatio) { - height = width / aspectRatio; - } else if (width > height * aspectRatio) { - width = height * aspectRatio; - } - } - - rez.width = width; - rez.height = height; - - return rez; - }, - - // Update content size and position for all slides - // ============================================== - - update: function (e) { - var self = this; - - $.each(self.slides, function (key, slide) { - self.updateSlide(slide, e); - }); - }, - - // Update slide content position and size - // ====================================== - - updateSlide: function (slide, e) { - var self = this, - $content = slide && slide.$content, - width = slide.width || slide.opts.width, - height = slide.height || slide.opts.height, - $slide = slide.$slide; - - // First, prevent caption overlap, if needed - self.adjustCaption(slide); - - // Then resize content to fit inside the slide - if ($content && (width || height || slide.contentType === "video") && !slide.hasError) { - $.fancybox.stop($content); - - $.fancybox.setTranslate($content, self.getFitPos(slide)); - - if (slide.pos === self.currPos) { - self.isAnimating = false; - - self.updateCursor(); - } - } - - // Then some adjustments - self.adjustLayout(slide); - - if ($slide.length) { - $slide.trigger("refresh"); - - if (slide.pos === self.currPos) { - self.$refs.toolbar - .add(self.$refs.navigation.find(".fancybox-button--arrow_right")) - .toggleClass("compensate-for-scrollbar", $slide.get(0).scrollHeight > $slide.get(0).clientHeight); - } - } - - self.trigger("onUpdate", slide, e); - }, - - // Horizontally center slide - // ========================= - - centerSlide: function (duration) { - var self = this, - current = self.current, - $slide = current.$slide; - - if (self.isClosing || !current) { - return; - } - - $slide.siblings().css({ - transform: "", - opacity: "" - }); - - $slide - .parent() - .children() - .removeClass("fancybox-slide--previous fancybox-slide--next"); - - $.fancybox.animate( - $slide, { - top: 0, - left: 0, - opacity: 1 - }, - duration === undefined ? 0 : duration, - function () { - // Clean up - $slide.css({ - transform: "", - opacity: "" - }); - - if (!current.isComplete) { - self.complete(); - } - }, - false - ); - }, - - // Check if current slide is moved (swiped) - // ======================================== - - isMoved: function (slide) { - var current = slide || this.current, - slidePos, - stagePos; - - if (!current) { - return false; - } - - stagePos = $.fancybox.getTranslate(this.$refs.stage); - slidePos = $.fancybox.getTranslate(current.$slide); - - return ( - !current.$slide.hasClass("fancybox-animated") && - (Math.abs(slidePos.top - stagePos.top) > 0.5 || Math.abs(slidePos.left - stagePos.left) > 0.5) - ); - }, - - // Update cursor style depending if content can be zoomed - // ====================================================== - - updateCursor: function (nextWidth, nextHeight) { - var self = this, - current = self.current, - $container = self.$refs.container, - canPan, - isZoomable; - - if (!current || self.isClosing || !self.Guestures) { - return; - } - - $container.removeClass("fancybox-is-zoomable fancybox-can-zoomIn fancybox-can-zoomOut fancybox-can-swipe fancybox-can-pan"); - - canPan = self.canPan(nextWidth, nextHeight); - - isZoomable = canPan ? true : self.isZoomable(); - - $container.toggleClass("fancybox-is-zoomable", isZoomable); - - $("[data-fancybox-zoom]").prop("disabled", !isZoomable); - - if (canPan) { - $container.addClass("fancybox-can-pan"); - } else if ( - isZoomable && - (current.opts.clickContent === "zoom" || ($.isFunction(current.opts.clickContent) && current.opts.clickContent(current) == "zoom")) - ) { - $container.addClass("fancybox-can-zoomIn"); - } else if (current.opts.touch && (current.opts.touch.vertical || self.group.length > 1) && current.contentType !== "video") { - $container.addClass("fancybox-can-swipe"); - } - }, - - // Check if current slide is zoomable - // ================================== - - isZoomable: function () { - var self = this, - current = self.current, - fitPos; - - // Assume that slide is zoomable if: - // - image is still loading - // - actual size of the image is smaller than available area - if (current && !self.isClosing && current.type === "image" && !current.hasError) { - if (!current.isLoaded) { - return true; - } - - fitPos = self.getFitPos(current); - - if (fitPos && (current.width > fitPos.width || current.height > fitPos.height)) { - return true; - } - } - - return false; - }, - - // Check if current image dimensions are smaller than actual - // ========================================================= - - isScaledDown: function (nextWidth, nextHeight) { - var self = this, - rez = false, - current = self.current, - $content = current.$content; - - if (nextWidth !== undefined && nextHeight !== undefined) { - rez = nextWidth < current.width && nextHeight < current.height; - } else if ($content) { - rez = $.fancybox.getTranslate($content); - rez = rez.width < current.width && rez.height < current.height; - } - - return rez; - }, - - // Check if image dimensions exceed parent element - // =============================================== - - canPan: function (nextWidth, nextHeight) { - var self = this, - current = self.current, - pos = null, - rez = false; - - if (current.type === "image" && (current.isComplete || (nextWidth && nextHeight)) && !current.hasError) { - rez = self.getFitPos(current); - - if (nextWidth !== undefined && nextHeight !== undefined) { - pos = { - width: nextWidth, - height: nextHeight - }; - } else if (current.isComplete) { - pos = $.fancybox.getTranslate(current.$content); - } - - if (pos && rez) { - rez = Math.abs(pos.width - rez.width) > 1.5 || Math.abs(pos.height - rez.height) > 1.5; - } - } - - return rez; - }, - - // Load content into the slide - // =========================== - - loadSlide: function (slide) { - var self = this, - type, - $slide, - ajaxLoad; - - if (slide.isLoading || slide.isLoaded) { - return; - } - - slide.isLoading = true; - - if (self.trigger("beforeLoad", slide) === false) { - slide.isLoading = false; - - return false; - } - - type = slide.type; - $slide = slide.$slide; - - $slide - .off("refresh") - .trigger("onReset") - .addClass(slide.opts.slideClass); - - // Create content depending on the type - switch (type) { - case "image": - self.setImage(slide); - - break; - - case "iframe": - self.setIframe(slide); - - break; - - case "html": - self.setContent(slide, slide.src || slide.content); - - break; - - case "video": - self.setContent( - slide, - slide.opts.video.tpl - .replace(/\{\{src\}\}/gi, slide.src) - .replace("{{format}}", slide.opts.videoFormat || slide.opts.video.format || "") - .replace("{{poster}}", slide.thumb || "") - ); - - break; - - case "inline": - if ($(slide.src).length) { - self.setContent(slide, $(slide.src)); - } else { - self.setError(slide); - } - - break; - - case "ajax": - self.showLoading(slide); - - ajaxLoad = $.ajax( - $.extend({}, slide.opts.ajax.settings, { - url: slide.src, - success: function (data, textStatus) { - if (textStatus === "success") { - self.setContent(slide, data); - } - }, - error: function (jqXHR, textStatus) { - if (jqXHR && textStatus !== "abort") { - self.setError(slide); - } - } - }) - ); - - $slide.one("onReset", function () { - ajaxLoad.abort(); - }); - - break; - - default: - self.setError(slide); - - break; - } - - return true; - }, - - // Use thumbnail image, if possible - // ================================ - - setImage: function (slide) { - var self = this, - ghost; - - // Check if need to show loading icon - setTimeout(function () { - var $img = slide.$image; - - if (!self.isClosing && slide.isLoading && (!$img || !$img.length || !$img[0].complete) && !slide.hasError) { - self.showLoading(slide); - } - }, 50); - - //Check if image has srcset - self.checkSrcset(slide); - - // This will be wrapper containing both ghost and actual image - slide.$content = $('
') - .addClass("fancybox-is-hidden") - .appendTo(slide.$slide.addClass("fancybox-slide--image")); - - // If we have a thumbnail, we can display it while actual image is loading - // Users will not stare at black screen and actual image will appear gradually - if (slide.opts.preload !== false && slide.opts.width && slide.opts.height && slide.thumb) { - slide.width = slide.opts.width; - slide.height = slide.opts.height; - - ghost = document.createElement("img"); - - ghost.onerror = function () { - $(this).remove(); - - slide.$ghost = null; - }; - - ghost.onload = function () { - self.afterLoad(slide); - }; - - slide.$ghost = $(ghost) - .addClass("fancybox-image") - .appendTo(slide.$content) - .attr("src", slide.thumb); - } - - // Start loading actual image - self.setBigImage(slide); - }, - - // Check if image has srcset and get the source - // ============================================ - checkSrcset: function (slide) { - var srcset = slide.opts.srcset || slide.opts.image.srcset, - found, - temp, - pxRatio, - windowWidth; - - // If we have "srcset", then we need to find first matching "src" value. - // This is necessary, because when you set an src attribute, the browser will preload the image - // before any javascript or even CSS is applied. - if (srcset) { - pxRatio = window.devicePixelRatio || 1; - windowWidth = window.innerWidth * pxRatio; - - temp = srcset.split(",").map(function (el) { - var ret = {}; - - el.trim() - .split(/\s+/) - .forEach(function (el, i) { - var value = parseInt(el.substring(0, el.length - 1), 10); - - if (i === 0) { - return (ret.url = el); - } - - if (value) { - ret.value = value; - ret.postfix = el[el.length - 1]; - } - }); - - return ret; - }); - - // Sort by value - temp.sort(function (a, b) { - return a.value - b.value; - }); - - // Ok, now we have an array of all srcset values - for (var j = 0; j < temp.length; j++) { - var el = temp[j]; - - if ((el.postfix === "w" && el.value >= windowWidth) || (el.postfix === "x" && el.value >= pxRatio)) { - found = el; - break; - } - } - - // If not found, take the last one - if (!found && temp.length) { - found = temp[temp.length - 1]; - } - - if (found) { - slide.src = found.url; - - // If we have default width/height values, we can calculate height for matching source - if (slide.width && slide.height && found.postfix == "w") { - slide.height = (slide.width / slide.height) * found.value; - slide.width = found.value; - } - - slide.opts.srcset = srcset; - } - } - }, - - // Create full-size image - // ====================== - - setBigImage: function (slide) { - var self = this, - img = document.createElement("img"), - $img = $(img); - - slide.$image = $img - .one("error", function () { - self.setError(slide); - }) - .one("load", function () { - var sizes; - - if (!slide.$ghost) { - self.resolveImageSlideSize(slide, this.naturalWidth, this.naturalHeight); - - self.afterLoad(slide); - } - - if (self.isClosing) { - return; - } - - if (slide.opts.srcset) { - sizes = slide.opts.sizes; - - if (!sizes || sizes === "auto") { - sizes = - (slide.width / slide.height > 1 && $W.width() / $W.height() > 1 ? "100" : Math.round((slide.width / slide.height) * 100)) + - "vw"; - } - - $img.attr("sizes", sizes).attr("srcset", slide.opts.srcset); - } - - // Hide temporary image after some delay - if (slide.$ghost) { - setTimeout(function () { - if (slide.$ghost && !self.isClosing) { - slide.$ghost.hide(); - } - }, Math.min(300, Math.max(1000, slide.height / 1600))); - } - - self.hideLoading(slide); - }) - .addClass("fancybox-image") - .attr("src", slide.src) - .appendTo(slide.$content); - - if ((img.complete || img.readyState == "complete") && $img.naturalWidth && $img.naturalHeight) { - $img.trigger("load"); - } else if (img.error) { - $img.trigger("error"); - } - }, - - // Computes the slide size from image size and maxWidth/maxHeight - // ============================================================== - - resolveImageSlideSize: function (slide, imgWidth, imgHeight) { - var maxWidth = parseInt(slide.opts.width, 10), - maxHeight = parseInt(slide.opts.height, 10); - - // Sets the default values from the image - slide.width = imgWidth; - slide.height = imgHeight; - - if (maxWidth > 0) { - slide.width = maxWidth; - slide.height = Math.floor((maxWidth * imgHeight) / imgWidth); - } - - if (maxHeight > 0) { - slide.width = Math.floor((maxHeight * imgWidth) / imgHeight); - slide.height = maxHeight; - } - }, - - // Create iframe wrapper, iframe and bindings - // ========================================== - - setIframe: function (slide) { - var self = this, - opts = slide.opts.iframe, - $slide = slide.$slide, - $iframe; - - slide.$content = $('
') - .css(opts.css) - .appendTo($slide); - - $slide.addClass("fancybox-slide--" + slide.contentType); - - slide.$iframe = $iframe = $(opts.tpl.replace(/\{rnd\}/g, new Date().getTime())) - .attr(opts.attr) - .appendTo(slide.$content); - - if (opts.preload) { - self.showLoading(slide); - - // Unfortunately, it is not always possible to determine if iframe is successfully loaded - // (due to browser security policy) - - $iframe.on("load.fb error.fb", function (e) { - this.isReady = 1; - - slide.$slide.trigger("refresh"); - - self.afterLoad(slide); - }); - - // Recalculate iframe content size - // =============================== - - $slide.on("refresh.fb", function () { - var $content = slide.$content, - frameWidth = opts.css.width, - frameHeight = opts.css.height, - $contents, - $body; - - if ($iframe[0].isReady !== 1) { - return; - } - - try { - $contents = $iframe.contents(); - $body = $contents.find("body"); - } catch (ignore) {} - - // Calculate content dimensions, if it is accessible - if ($body && $body.length && $body.children().length) { - // Avoid scrolling to top (if multiple instances) - $slide.css("overflow", "visible"); - - $content.css({ - width: "100%", - "max-width": "100%", - height: "9999px" - }); - - if (frameWidth === undefined) { - frameWidth = Math.ceil(Math.max($body[0].clientWidth, $body.outerWidth(true))); - } - - $content.css("width", frameWidth ? frameWidth : "").css("max-width", ""); - - if (frameHeight === undefined) { - frameHeight = Math.ceil(Math.max($body[0].clientHeight, $body.outerHeight(true))); - } - - $content.css("height", frameHeight ? frameHeight : ""); - - $slide.css("overflow", "auto"); - } - - $content.removeClass("fancybox-is-hidden"); - }); - } else { - self.afterLoad(slide); - } - - $iframe.attr("src", slide.src); - - // Remove iframe if closing or changing gallery item - $slide.one("onReset", function () { - // This helps IE not to throw errors when closing - try { - $(this) - .find("iframe") - .hide() - .unbind() - .attr("src", "//about:blank"); - } catch (ignore) {} - - $(this) - .off("refresh.fb") - .empty(); - - slide.isLoaded = false; - slide.isRevealed = false; - }); - }, - - // Wrap and append content to the slide - // ====================================== - - setContent: function (slide, content) { - var self = this; - - if (self.isClosing) { - return; - } - - self.hideLoading(slide); - - if (slide.$content) { - $.fancybox.stop(slide.$content); - } - - slide.$slide.empty(); - - // If content is a jQuery object, then it will be moved to the slide. - // The placeholder is created so we will know where to put it back. - if (isQuery(content) && content.parent().length) { - // Make sure content is not already moved to fancyBox - if (content.hasClass("fancybox-content") || content.parent().hasClass("fancybox-content")) { - content.parents(".fancybox-slide").trigger("onReset"); - } - - // Create temporary element marking original place of the content - slide.$placeholder = $("
") - .hide() - .insertAfter(content); - - // Make sure content is visible - content.css("display", "inline-block"); - } else if (!slide.hasError) { - // If content is just a plain text, try to convert it to html - if ($.type(content) === "string") { - content = $("
") - .append($.trim(content)) - .contents(); - } - - // If "filter" option is provided, then filter content - if (slide.opts.filter) { - content = $("
") - .html(content) - .find(slide.opts.filter); - } - } - - slide.$slide.one("onReset", function () { - // Pause all html5 video/audio - $(this) - .find("video,audio") - .trigger("pause"); - - // Put content back - if (slide.$placeholder) { - slide.$placeholder.after(content.removeClass("fancybox-content").hide()).remove(); - - slide.$placeholder = null; - } - - // Remove custom close button - if (slide.$smallBtn) { - slide.$smallBtn.remove(); - - slide.$smallBtn = null; - } - - // Remove content and mark slide as not loaded - if (!slide.hasError) { - $(this).empty(); - - slide.isLoaded = false; - slide.isRevealed = false; - } - }); - - $(content).appendTo(slide.$slide); - - if ($(content).is("video,audio")) { - $(content).addClass("fancybox-video"); - - $(content).wrap("
"); - - slide.contentType = "video"; - - slide.opts.width = slide.opts.width || $(content).attr("width"); - slide.opts.height = slide.opts.height || $(content).attr("height"); - } - - slide.$content = slide.$slide - .children() - .filter("div,form,main,video,audio,article,.fancybox-content") - .first(); - - slide.$content.siblings().hide(); - - // Re-check if there is a valid content - // (in some cases, ajax response can contain various elements or plain text) - if (!slide.$content.length) { - slide.$content = slide.$slide - .wrapInner("
") - .children() - .first(); - } - - slide.$content.addClass("fancybox-content"); - - slide.$slide.addClass("fancybox-slide--" + slide.contentType); - - self.afterLoad(slide); - }, - - // Display error message - // ===================== - - setError: function (slide) { - slide.hasError = true; - - slide.$slide - .trigger("onReset") - .removeClass("fancybox-slide--" + slide.contentType) - .addClass("fancybox-slide--error"); - - slide.contentType = "html"; - - this.setContent(slide, this.translate(slide, slide.opts.errorTpl)); - - if (slide.pos === this.currPos) { - this.isAnimating = false; - } - }, - - // Show loading icon inside the slide - // ================================== - - showLoading: function (slide) { - var self = this; - - slide = slide || self.current; - - if (slide && !slide.$spinner) { - slide.$spinner = $(self.translate(self, self.opts.spinnerTpl)) - .appendTo(slide.$slide) - .hide() - .fadeIn("fast"); - } - }, - - // Remove loading icon from the slide - // ================================== - - hideLoading: function (slide) { - var self = this; - - slide = slide || self.current; - - if (slide && slide.$spinner) { - slide.$spinner.stop().remove(); - - delete slide.$spinner; - } - }, - - // Adjustments after slide content has been loaded - // =============================================== - - afterLoad: function (slide) { - var self = this; - - if (self.isClosing) { - return; - } - - slide.isLoading = false; - slide.isLoaded = true; - - self.trigger("afterLoad", slide); - - self.hideLoading(slide); - - // Add small close button - if (slide.opts.smallBtn && (!slide.$smallBtn || !slide.$smallBtn.length)) { - slide.$smallBtn = $(self.translate(slide, slide.opts.btnTpl.smallBtn)).appendTo(slide.$content); - } - - // Disable right click - if (slide.opts.protect && slide.$content && !slide.hasError) { - slide.$content.on("contextmenu.fb", function (e) { - if (e.button == 2) { - e.preventDefault(); - } - - return true; - }); - - // Add fake element on top of the image - // This makes a bit harder for user to select image - if (slide.type === "image") { - $('
').appendTo(slide.$content); - } - } - - self.adjustCaption(slide); - - self.adjustLayout(slide); - - if (slide.pos === self.currPos) { - self.updateCursor(); - } - - self.revealContent(slide); - }, - - // Prevent caption overlap, - // fix css inconsistency across browsers - // ===================================== - - adjustCaption: function (slide) { - var self = this, - current = slide || self.current, - caption = current.opts.caption, - preventOverlap = current.opts.preventCaptionOverlap, - $caption = self.$refs.caption, - $clone, - captionH = false; - - $caption.toggleClass("fancybox-caption--separate", preventOverlap); - - if (preventOverlap && caption && caption.length) { - if (current.pos !== self.currPos) { - $clone = $caption.clone().appendTo($caption.parent()); - - $clone - .children() - .eq(0) - .empty() - .html(caption); - - captionH = $clone.outerHeight(true); - - $clone.empty().remove(); - } else if (self.$caption) { - captionH = self.$caption.outerHeight(true); - } - - current.$slide.css("padding-bottom", captionH || ""); - } - }, - - // Simple hack to fix inconsistency across browsers, described here (affects Edge, too): - // https://bugzilla.mozilla.org/show_bug.cgi?id=748518 - // ==================================================================================== - - adjustLayout: function (slide) { - var self = this, - current = slide || self.current, - scrollHeight, - marginBottom, - inlinePadding, - actualPadding; - - if (current.isLoaded && current.opts.disableLayoutFix !== true) { - current.$content.css("margin-bottom", ""); - - // If we would always set margin-bottom for the content, - // then it would potentially break vertical align - if (current.$content.outerHeight() > current.$slide.height() + 0.5) { - inlinePadding = current.$slide[0].style["padding-bottom"]; - actualPadding = current.$slide.css("padding-bottom"); - - if (parseFloat(actualPadding) > 0) { - scrollHeight = current.$slide[0].scrollHeight; - - current.$slide.css("padding-bottom", 0); - - if (Math.abs(scrollHeight - current.$slide[0].scrollHeight) < 1) { - marginBottom = actualPadding; - } - - current.$slide.css("padding-bottom", inlinePadding); - } - } - - current.$content.css("margin-bottom", marginBottom); - } - }, - - // Make content visible - // This method is called right after content has been loaded or - // user navigates gallery and transition should start - // ============================================================ - - revealContent: function (slide) { - var self = this, - $slide = slide.$slide, - end = false, - start = false, - isMoved = self.isMoved(slide), - isRevealed = slide.isRevealed, - effect, - effectClassName, - duration, - opacity; - - slide.isRevealed = true; - - effect = slide.opts[self.firstRun ? "animationEffect" : "transitionEffect"]; - duration = slide.opts[self.firstRun ? "animationDuration" : "transitionDuration"]; - - duration = parseInt(slide.forcedDuration === undefined ? duration : slide.forcedDuration, 10); - - if (isMoved || slide.pos !== self.currPos || !duration) { - effect = false; - } - - // Check if can zoom - if (effect === "zoom") { - if (slide.pos === self.currPos && duration && slide.type === "image" && !slide.hasError && (start = self.getThumbPos(slide))) { - end = self.getFitPos(slide); - } else { - effect = "fade"; - } - } - - // Zoom animation - // ============== - if (effect === "zoom") { - self.isAnimating = true; - - end.scaleX = end.width / start.width; - end.scaleY = end.height / start.height; - - // Check if we need to animate opacity - opacity = slide.opts.zoomOpacity; - - if (opacity == "auto") { - opacity = Math.abs(slide.width / slide.height - start.width / start.height) > 0.1; - } - - if (opacity) { - start.opacity = 0.1; - end.opacity = 1; - } - - // Draw image at start position - $.fancybox.setTranslate(slide.$content.removeClass("fancybox-is-hidden"), start); - - forceRedraw(slide.$content); - - // Start animation - $.fancybox.animate(slide.$content, end, duration, function () { - self.isAnimating = false; - - self.complete(); - }); - - return; - } - - self.updateSlide(slide); - - // Simply show content if no effect - // ================================ - if (!effect) { - slide.$content.removeClass("fancybox-is-hidden"); - - if (!isRevealed && isMoved && slide.type === "image" && !slide.hasError) { - slide.$content.hide().fadeIn("fast"); - } - - if (slide.pos === self.currPos) { - self.complete(); - } - - return; - } - - // Prepare for CSS transiton - // ========================= - $.fancybox.stop($slide); - - //effectClassName = "fancybox-animated fancybox-slide--" + (slide.pos >= self.prevPos ? "next" : "previous") + " fancybox-fx-" + effect; - effectClassName = "fancybox-slide--" + (slide.pos >= self.prevPos ? "next" : "previous") + " fancybox-animated fancybox-fx-" + effect; - - $slide.addClass(effectClassName).removeClass("fancybox-slide--current"); //.addClass(effectClassName); - - slide.$content.removeClass("fancybox-is-hidden"); - - // Force reflow - forceRedraw($slide); - - if (slide.type !== "image") { - slide.$content.hide().show(0); - } - - $.fancybox.animate( - $slide, - "fancybox-slide--current", - duration, - function () { - $slide.removeClass(effectClassName).css({ - transform: "", - opacity: "" - }); - - if (slide.pos === self.currPos) { - self.complete(); - } - }, - true - ); - }, - - // Check if we can and have to zoom from thumbnail - //================================================ - - getThumbPos: function (slide) { - var rez = false, - $thumb = slide.$thumb, - thumbPos, - btw, - brw, - bbw, - blw; - - if (!$thumb || !inViewport($thumb[0])) { - return false; - } - - thumbPos = $.fancybox.getTranslate($thumb); - - btw = parseFloat($thumb.css("border-top-width") || 0); - brw = parseFloat($thumb.css("border-right-width") || 0); - bbw = parseFloat($thumb.css("border-bottom-width") || 0); - blw = parseFloat($thumb.css("border-left-width") || 0); - - rez = { - top: thumbPos.top + btw, - left: thumbPos.left + blw, - width: thumbPos.width - brw - blw, - height: thumbPos.height - btw - bbw, - scaleX: 1, - scaleY: 1 - }; - - return thumbPos.width > 0 && thumbPos.height > 0 ? rez : false; - }, - - // Final adjustments after current gallery item is moved to position - // and it`s content is loaded - // ================================================================== - - complete: function () { - var self = this, - current = self.current, - slides = {}, - $el; - - if (self.isMoved() || !current.isLoaded) { - return; - } - - if (!current.isComplete) { - current.isComplete = true; - - current.$slide.siblings().trigger("onReset"); - - self.preload("inline"); - - // Trigger any CSS transiton inside the slide - forceRedraw(current.$slide); - - current.$slide.addClass("fancybox-slide--complete"); - - // Remove unnecessary slides - $.each(self.slides, function (key, slide) { - if (slide.pos >= self.currPos - 1 && slide.pos <= self.currPos + 1) { - slides[slide.pos] = slide; - } else if (slide) { - $.fancybox.stop(slide.$slide); - - slide.$slide.off().remove(); - } - }); - - self.slides = slides; - } - - self.isAnimating = false; - - self.updateCursor(); - - self.trigger("afterShow"); - - // Autoplay first html5 video/audio - if (!!current.opts.video.autoStart) { - current.$slide - .find("video,audio") - .filter(":visible:first") - .trigger("play") - .one("ended", function () { - if (Document.exitFullscreen) { - Document.exitFullscreen(); - } else if (this.webkitExitFullscreen) { - this.webkitExitFullscreen(); - } - - self.next(); - }); - } - - // Try to focus on the first focusable element - if (current.opts.autoFocus && current.contentType === "html") { - // Look for the first input with autofocus attribute - $el = current.$content.find("input[autofocus]:enabled:visible:first"); - - if ($el.length) { - $el.trigger("focus"); - } else { - self.focus(null, true); - } - } - - // Avoid jumping - current.$slide.scrollTop(0).scrollLeft(0); - }, - - // Preload next and previous slides - // ================================ - - preload: function (type) { - var self = this, - prev, - next; - - if (self.group.length < 2) { - return; - } - - next = self.slides[self.currPos + 1]; - prev = self.slides[self.currPos - 1]; - - if (prev && prev.type === type) { - self.loadSlide(prev); - } - - if (next && next.type === type) { - self.loadSlide(next); - } - }, - - // Try to find and focus on the first focusable element - // ==================================================== - - focus: function (e, firstRun) { - var self = this, - focusableStr = [ - "a[href]", - "area[href]", - 'input:not([disabled]):not([type="hidden"]):not([aria-hidden])', - "select:not([disabled]):not([aria-hidden])", - "textarea:not([disabled]):not([aria-hidden])", - "button:not([disabled]):not([aria-hidden])", - "iframe", - "object", - "embed", - "video", - "audio", - "[contenteditable]", - '[tabindex]:not([tabindex^="-"])' - ].join(","), - focusableItems, - focusedItemIndex; - - if (self.isClosing) { - return; - } - - if (e || !self.current || !self.current.isComplete) { - // Focus on any element inside fancybox - focusableItems = self.$refs.container.find("*:visible"); - } else { - // Focus inside current slide - focusableItems = self.current.$slide.find("*:visible" + (firstRun ? ":not(.fancybox-close-small)" : "")); - } - - focusableItems = focusableItems.filter(focusableStr).filter(function () { - return $(this).css("visibility") !== "hidden" && !$(this).hasClass("disabled"); - }); - - if (focusableItems.length) { - focusedItemIndex = focusableItems.index(document.activeElement); - - if (e && e.shiftKey) { - // Back tab - if (focusedItemIndex < 0 || focusedItemIndex == 0) { - e.preventDefault(); - - focusableItems.eq(focusableItems.length - 1).trigger("focus"); - } - } else { - // Outside or Forward tab - if (focusedItemIndex < 0 || focusedItemIndex == focusableItems.length - 1) { - if (e) { - e.preventDefault(); - } - - focusableItems.eq(0).trigger("focus"); - } - } - } else { - self.$refs.container.trigger("focus"); - } - }, - - // Activates current instance - brings container to the front and enables keyboard, - // notifies other instances about deactivating - // ================================================================================= - - activate: function () { - var self = this; - - // Deactivate all instances - $(".fancybox-container").each(function () { - var instance = $(this).data("FancyBox"); - - // Skip self and closing instances - if (instance && instance.id !== self.id && !instance.isClosing) { - instance.trigger("onDeactivate"); - - instance.removeEvents(); - - instance.isVisible = false; - } - }); - - self.isVisible = true; - - if (self.current || self.isIdle) { - self.update(); - - self.updateControls(); - } - - self.trigger("onActivate"); - - self.addEvents(); - }, - - // Start closing procedure - // This will start "zoom-out" animation if needed and clean everything up afterwards - // ================================================================================= - - close: function (e, d) { - var self = this, - current = self.current, - effect, - duration, - $content, - domRect, - opacity, - start, - end; - - var done = function () { - self.cleanUp(e); - }; - - if (self.isClosing) { - return false; - } - - self.isClosing = true; - - // If beforeClose callback prevents closing, make sure content is centered - if (self.trigger("beforeClose", e) === false) { - self.isClosing = false; - - requestAFrame(function () { - self.update(); - }); - - return false; - } - - // Remove all events - // If there are multiple instances, they will be set again by "activate" method - self.removeEvents(); - - $content = current.$content; - effect = current.opts.animationEffect; - duration = $.isNumeric(d) ? d : effect ? current.opts.animationDuration : 0; - - current.$slide.removeClass("fancybox-slide--complete fancybox-slide--next fancybox-slide--previous fancybox-animated"); - - if (e !== true) { - $.fancybox.stop(current.$slide); - } else { - effect = false; - } - - // Remove other slides - current.$slide - .siblings() - .trigger("onReset") - .remove(); - - // Trigger animations - if (duration) { - self.$refs.container - .removeClass("fancybox-is-open") - .addClass("fancybox-is-closing") - .css("transition-duration", duration + "ms"); - } - - // Clean up - self.hideLoading(current); - - self.hideControls(true); - - self.updateCursor(); - - // Check if possible to zoom-out - if ( - effect === "zoom" && - !($content && duration && current.type === "image" && !self.isMoved() && !current.hasError && (end = self.getThumbPos(current))) - ) { - effect = "fade"; - } - - if (effect === "zoom") { - $.fancybox.stop($content); - - domRect = $.fancybox.getTranslate($content); - - start = { - top: domRect.top, - left: domRect.left, - scaleX: domRect.width / end.width, - scaleY: domRect.height / end.height, - width: end.width, - height: end.height - }; - - // Check if we need to animate opacity - opacity = current.opts.zoomOpacity; - - if (opacity == "auto") { - opacity = Math.abs(current.width / current.height - end.width / end.height) > 0.1; - } - - if (opacity) { - end.opacity = 0; - } - - $.fancybox.setTranslate($content, start); - - forceRedraw($content); - - $.fancybox.animate($content, end, duration, done); - - return true; - } - - if (effect && duration) { - $.fancybox.animate( - current.$slide.addClass("fancybox-slide--previous").removeClass("fancybox-slide--current"), - "fancybox-animated fancybox-fx-" + effect, - duration, - done - ); - } else { - // If skip animation - if (e === true) { - setTimeout(done, duration); - } else { - done(); - } - } - - return true; - }, - - // Final adjustments after removing the instance - // ============================================= - - cleanUp: function (e) { - var self = this, - instance, - $focus = self.current.opts.$orig, - x, - y; - - self.current.$slide.trigger("onReset"); - - self.$refs.container.empty().remove(); - - self.trigger("afterClose", e); - - // Place back focus - if (!!self.current.opts.backFocus) { - if (!$focus || !$focus.length || !$focus.is(":visible")) { - $focus = self.$trigger; - } - - if ($focus && $focus.length) { - x = window.scrollX; - y = window.scrollY; - - $focus.trigger("focus"); - - $("html, body") - .scrollTop(y) - .scrollLeft(x); - } - } - - self.current = null; - - // Check if there are other instances - instance = $.fancybox.getInstance(); - - if (instance) { - instance.activate(); - } else { - $("body").removeClass("fancybox-active compensate-for-scrollbar"); - - $("#fancybox-style-noscroll").remove(); - } - }, - - // Call callback and trigger an event - // ================================== - - trigger: function (name, slide) { - var args = Array.prototype.slice.call(arguments, 1), - self = this, - obj = slide && slide.opts ? slide : self.current, - rez; - - if (obj) { - args.unshift(obj); - } else { - obj = self; - } - - args.unshift(self); - - if ($.isFunction(obj.opts[name])) { - rez = obj.opts[name].apply(obj, args); - } - - if (rez === false) { - return rez; - } - - if (name === "afterClose" || !self.$refs) { - $D.trigger(name + ".fb", args); - } else { - self.$refs.container.trigger(name + ".fb", args); - } - }, - - // Update infobar values, navigation button states and reveal caption - // ================================================================== - - updateControls: function () { - var self = this, - current = self.current, - index = current.index, - $container = self.$refs.container, - $caption = self.$refs.caption, - caption = current.opts.caption; - - // Recalculate content dimensions - current.$slide.trigger("refresh"); - - // Set caption - if (caption && caption.length) { - self.$caption = $caption; - - $caption - .children() - .eq(0) - .html(caption); - } else { - self.$caption = null; - } - - if (!self.hasHiddenControls && !self.isIdle) { - self.showControls(); - } - - // Update info and navigation elements - $container.find("[data-fancybox-count]").html(self.group.length); - $container.find("[data-fancybox-index]").html(index + 1); - - $container.find("[data-fancybox-prev]").prop("disabled", !current.opts.loop && index <= 0); - $container.find("[data-fancybox-next]").prop("disabled", !current.opts.loop && index >= self.group.length - 1); - - if (current.type === "image") { - // Re-enable buttons; update download button source - $container - .find("[data-fancybox-zoom]") - .show() - .end() - .find("[data-fancybox-download]") - .attr("href", current.opts.image.src || current.src) - .show(); - } else if (current.opts.toolbar) { - $container.find("[data-fancybox-download],[data-fancybox-zoom]").hide(); - } - - // Make sure focus is not on disabled button/element - if ($(document.activeElement).is(":hidden,[disabled]")) { - self.$refs.container.trigger("focus"); - } - }, - - // Hide toolbar and caption - // ======================== - - hideControls: function (andCaption) { - var self = this, - arr = ["infobar", "toolbar", "nav"]; - - if (andCaption || !self.current.opts.preventCaptionOverlap) { - arr.push("caption"); - } - - this.$refs.container.removeClass( - arr - .map(function (i) { - return "fancybox-show-" + i; - }) - .join(" ") - ); - - this.hasHiddenControls = true; - }, - - showControls: function () { - var self = this, - opts = self.current ? self.current.opts : self.opts, - $container = self.$refs.container; - - self.hasHiddenControls = false; - self.idleSecondsCounter = 0; - - $container - .toggleClass("fancybox-show-toolbar", !!(opts.toolbar && opts.buttons)) - .toggleClass("fancybox-show-infobar", !!(opts.infobar && self.group.length > 1)) - .toggleClass("fancybox-show-caption", !!self.$caption) - .toggleClass("fancybox-show-nav", !!(opts.arrows && self.group.length > 1)) - .toggleClass("fancybox-is-modal", !!opts.modal); - }, - - // Toggle toolbar and caption - // ========================== - - toggleControls: function () { - if (this.hasHiddenControls) { - this.showControls(); - } else { - this.hideControls(); - } - } - }); - - $.fancybox = { - version: "3.5.7", - defaults: defaults, - - // Get current instance and execute a command. - // - // Examples of usage: - // - // $instance = $.fancybox.getInstance(); - // $.fancybox.getInstance().jumpTo( 1 ); - // $.fancybox.getInstance( 'jumpTo', 1 ); - // $.fancybox.getInstance( function() { - // console.info( this.currIndex ); - // }); - // ====================================================== - - getInstance: function (command) { - var instance = $('.fancybox-container:not(".fancybox-is-closing"):last').data("FancyBox"), - args = Array.prototype.slice.call(arguments, 1); - - if (instance instanceof FancyBox) { - if ($.type(command) === "string") { - instance[command].apply(instance, args); - } else if ($.type(command) === "function") { - command.apply(instance, args); - } - - return instance; - } - - return false; - }, - - // Create new instance - // =================== - - open: function (items, opts, index) { - return new FancyBox(items, opts, index); - }, - - // Close current or all instances - // ============================== - - close: function (all) { - var instance = this.getInstance(); - - if (instance) { - instance.close(); - - // Try to find and close next instance - if (all === true) { - this.close(all); - } - } - }, - - // Close all instances and unbind all events - // ========================================= - - destroy: function () { - this.close(true); - - $D.add("body").off("click.fb-start", "**"); - }, - - // Try to detect mobile devices - // ============================ - - isMobile: /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent), - - // Detect if 'translate3d' support is available - // ============================================ - - use3d: (function () { - var div = document.createElement("div"); - - return ( - window.getComputedStyle && - window.getComputedStyle(div) && - window.getComputedStyle(div).getPropertyValue("transform") && - !(document.documentMode && document.documentMode < 11) - ); - })(), - - // Helper function to get current visual state of an element - // returns array[ top, left, horizontal-scale, vertical-scale, opacity ] - // ===================================================================== - - getTranslate: function ($el) { - var domRect; - - if (!$el || !$el.length) { - return false; - } - - domRect = $el[0].getBoundingClientRect(); - - return { - top: domRect.top || 0, - left: domRect.left || 0, - width: domRect.width, - height: domRect.height, - opacity: parseFloat($el.css("opacity")) - }; - }, - - // Shortcut for setting "translate3d" properties for element - // Can set be used to set opacity, too - // ======================================================== - - setTranslate: function ($el, props) { - var str = "", - css = {}; - - if (!$el || !props) { - return; - } - - if (props.left !== undefined || props.top !== undefined) { - str = - (props.left === undefined ? $el.position().left : props.left) + - "px, " + - (props.top === undefined ? $el.position().top : props.top) + - "px"; - - if (this.use3d) { - str = "translate3d(" + str + ", 0px)"; - } else { - str = "translate(" + str + ")"; - } - } - - if (props.scaleX !== undefined && props.scaleY !== undefined) { - str += " scale(" + props.scaleX + ", " + props.scaleY + ")"; - } else if (props.scaleX !== undefined) { - str += " scaleX(" + props.scaleX + ")"; - } - - if (str.length) { - css.transform = str; - } - - if (props.opacity !== undefined) { - css.opacity = props.opacity; - } - - if (props.width !== undefined) { - css.width = props.width; - } - - if (props.height !== undefined) { - css.height = props.height; - } - - return $el.css(css); - }, - - // Simple CSS transition handler - // ============================= - - animate: function ($el, to, duration, callback, leaveAnimationName) { - var self = this, - from; - - if ($.isFunction(duration)) { - callback = duration; - duration = null; - } - - self.stop($el); - - from = self.getTranslate($el); - - $el.on(transitionEnd, function (e) { - // Skip events from child elements and z-index change - if (e && e.originalEvent && (!$el.is(e.originalEvent.target) || e.originalEvent.propertyName == "z-index")) { - return; - } - - self.stop($el); - - if ($.isNumeric(duration)) { - $el.css("transition-duration", ""); - } - - if ($.isPlainObject(to)) { - if (to.scaleX !== undefined && to.scaleY !== undefined) { - self.setTranslate($el, { - top: to.top, - left: to.left, - width: from.width * to.scaleX, - height: from.height * to.scaleY, - scaleX: 1, - scaleY: 1 - }); - } - } else if (leaveAnimationName !== true) { - $el.removeClass(to); - } - - if ($.isFunction(callback)) { - callback(e); - } - }); - - if ($.isNumeric(duration)) { - $el.css("transition-duration", duration + "ms"); - } - - // Start animation by changing CSS properties or class name - if ($.isPlainObject(to)) { - if (to.scaleX !== undefined && to.scaleY !== undefined) { - delete to.width; - delete to.height; - - if ($el.parent().hasClass("fancybox-slide--image")) { - $el.parent().addClass("fancybox-is-scaling"); - } - } - - $.fancybox.setTranslate($el, to); - } else { - $el.addClass(to); - } - - // Make sure that `transitionend` callback gets fired - $el.data( - "timer", - setTimeout(function () { - $el.trigger(transitionEnd); - }, duration + 33) - ); - }, - - stop: function ($el, callCallback) { - if ($el && $el.length) { - clearTimeout($el.data("timer")); - - if (callCallback) { - $el.trigger(transitionEnd); - } - - $el.off(transitionEnd).css("transition-duration", ""); - - $el.parent().removeClass("fancybox-is-scaling"); - } - } - }; - - // Default click handler for "fancyboxed" links - // ============================================ - - function _run(e, opts) { - var items = [], - index = 0, - $target, - value, - instance; - - // Avoid opening multiple times - if (e && e.isDefaultPrevented()) { - return; - } - - e.preventDefault(); - - opts = opts || {}; - - if (e && e.data) { - opts = mergeOpts(e.data.options, opts); - } - - $target = opts.$target || $(e.currentTarget).trigger("blur"); - instance = $.fancybox.getInstance(); - - if (instance && instance.$trigger && instance.$trigger.is($target)) { - return; - } - - if (opts.selector) { - items = $(opts.selector); - } else { - // Get all related items and find index for clicked one - value = $target.attr("data-fancybox") || ""; - - if (value) { - items = e.data ? e.data.items : []; - items = items.length ? items.filter('[data-fancybox="' + value + '"]') : $('[data-fancybox="' + value + '"]'); - } else { - items = [$target]; - } - } - - index = $(items).index($target); - - // Sometimes current item can not be found - if (index < 0) { - index = 0; - } - - instance = $.fancybox.open(items, opts, index); - - // Save last active element - instance.$trigger = $target; - } - - // Create a jQuery plugin - // ====================== - - $.fn.fancybox = function (options) { - var selector; - - options = options || {}; - selector = options.selector || false; - - if (selector) { - // Use body element instead of document so it executes first - $("body") - .off("click.fb-start", selector) - .on("click.fb-start", selector, { - options: options - }, _run); - } else { - this.off("click.fb-start").on( - "click.fb-start", { - items: this, - options: options - }, - _run - ); - } - - return this; - }; - - // Self initializing plugin for all elements having `data-fancybox` attribute - // ========================================================================== - - $D.on("click.fb-start", "[data-fancybox]", _run); - - // Enable "trigger elements" - // ========================= - - $D.on("click.fb-start", "[data-fancybox-trigger]", function (e) { - $('[data-fancybox="' + $(this).attr("data-fancybox-trigger") + '"]') - .eq($(this).attr("data-fancybox-index") || 0) - .trigger("click.fb-start", { - $trigger: $(this) - }); - }); - - // Track focus event for better accessibility styling - // ================================================== - (function () { - var buttonStr = ".fancybox-button", - focusStr = "fancybox-focus", - $pressed = null; - - $D.on("mousedown mouseup focus blur", buttonStr, function (e) { - switch (e.type) { - case "mousedown": - $pressed = $(this); - break; - case "mouseup": - $pressed = null; - break; - case "focusin": - $(buttonStr).removeClass(focusStr); - - if (!$(this).is($pressed) && !$(this).is("[disabled]")) { - $(this).addClass(focusStr); - } - break; - case "focusout": - $(buttonStr).removeClass(focusStr); - break; - } - }); - })(); -})(window, document, jQuery); -// ========================================================================== -// -// Media -// Adds additional media type support -// -// ========================================================================== -(function ($) { - "use strict"; - - // Object containing properties for each media type - var defaults = { - youtube: { - matcher: /(youtube\.com|youtu\.be|youtube\-nocookie\.com)\/(watch\?(.*&)?v=|v\/|u\/|embed\/?)?(videoseries\?list=(.*)|[\w-]{11}|\?listType=(.*)&list=(.*))(.*)/i, - params: { - autoplay: 1, - autohide: 1, - fs: 1, - rel: 0, - hd: 1, - wmode: "transparent", - enablejsapi: 1, - html5: 1 - }, - paramPlace: 8, - type: "iframe", - url: "https://www.youtube-nocookie.com/embed/$4", - thumb: "https://img.youtube.com/vi/$4/hqdefault.jpg" - }, - - vimeo: { - matcher: /^.+vimeo.com\/(.*\/)?([\d]+)(.*)?/, - params: { - autoplay: 1, - hd: 1, - show_title: 1, - show_byline: 1, - show_portrait: 0, - fullscreen: 1 - }, - paramPlace: 3, - type: "iframe", - url: "//player.vimeo.com/video/$2" - }, - - instagram: { - matcher: /(instagr\.am|instagram\.com)\/p\/([a-zA-Z0-9_\-]+)\/?/i, - type: "image", - url: "//$1/p/$2/media/?size=l" - }, - - // Examples: - // http://maps.google.com/?ll=48.857995,2.294297&spn=0.007666,0.021136&t=m&z=16 - // https://www.google.com/maps/@37.7852006,-122.4146355,14.65z - // https://www.google.com/maps/@52.2111123,2.9237542,6.61z?hl=en - // https://www.google.com/maps/place/Googleplex/@37.4220041,-122.0833494,17z/data=!4m5!3m4!1s0x0:0x6c296c66619367e0!8m2!3d37.4219998!4d-122.0840572 - gmap_place: { - matcher: /(maps\.)?google\.([a-z]{2,3}(\.[a-z]{2})?)\/(((maps\/(place\/(.*)\/)?\@(.*),(\d+.?\d+?)z))|(\?ll=))(.*)?/i, - type: "iframe", - url: function (rez) { - return ( - "//maps.google." + - rez[2] + - "/?ll=" + - (rez[9] ? rez[9] + "&z=" + Math.floor(rez[10]) + (rez[12] ? rez[12].replace(/^\//, "&") : "") : rez[12] + "").replace(/\?/, "&") + - "&output=" + - (rez[12] && rez[12].indexOf("layer=c") > 0 ? "svembed" : "embed") - ); - } - }, - - // Examples: - // https://www.google.com/maps/search/Empire+State+Building/ - // https://www.google.com/maps/search/?api=1&query=centurylink+field - // https://www.google.com/maps/search/?api=1&query=47.5951518,-122.3316393 - gmap_search: { - matcher: /(maps\.)?google\.([a-z]{2,3}(\.[a-z]{2})?)\/(maps\/search\/)(.*)/i, - type: "iframe", - url: function (rez) { - return "//maps.google." + rez[2] + "/maps?q=" + rez[5].replace("query=", "q=").replace("api=1", "") + "&output=embed"; - } - } - }; - - // Formats matching url to final form - var format = function (url, rez, params) { - if (!url) { - return; - } - - params = params || ""; - - if ($.type(params) === "object") { - params = $.param(params, true); - } - - $.each(rez, function (key, value) { - url = url.replace("$" + key, value || ""); - }); - - if (params.length) { - url += (url.indexOf("?") > 0 ? "&" : "?") + params; - } - - return url; - }; - - $(document).on("objectNeedsType.fb", function (e, instance, item) { - var url = item.src || "", - type = false, - media, - thumb, - rez, - params, - urlParams, - paramObj, - provider; - - media = $.extend(true, {}, defaults, item.opts.media); - - // Look for any matching media type - $.each(media, function (providerName, providerOpts) { - rez = url.match(providerOpts.matcher); - - if (!rez) { - return; - } - - type = providerOpts.type; - provider = providerName; - paramObj = {}; - - if (providerOpts.paramPlace && rez[providerOpts.paramPlace]) { - urlParams = rez[providerOpts.paramPlace]; - - if (urlParams[0] == "?") { - urlParams = urlParams.substring(1); - } - - urlParams = urlParams.split("&"); - - for (var m = 0; m < urlParams.length; ++m) { - var p = urlParams[m].split("=", 2); - - if (p.length == 2) { - paramObj[p[0]] = decodeURIComponent(p[1].replace(/\+/g, " ")); - } - } - } - - params = $.extend(true, {}, providerOpts.params, item.opts[providerName], paramObj); - - url = - $.type(providerOpts.url) === "function" ? providerOpts.url.call(this, rez, params, item) : format(providerOpts.url, rez, params); - - thumb = - $.type(providerOpts.thumb) === "function" ? providerOpts.thumb.call(this, rez, params, item) : format(providerOpts.thumb, rez); - - if (providerName === "youtube") { - url = url.replace(/&t=((\d+)m)?(\d+)s/, function (match, p1, m, s) { - return "&start=" + ((m ? parseInt(m, 10) * 60 : 0) + parseInt(s, 10)); - }); - } else if (providerName === "vimeo") { - url = url.replace("&%23", "#"); - } - - return false; - }); - - // If it is found, then change content type and update the url - - if (type) { - if (!item.opts.thumb && !(item.opts.$thumb && item.opts.$thumb.length)) { - item.opts.thumb = thumb; - } - - if (type === "iframe") { - item.opts = $.extend(true, item.opts, { - iframe: { - preload: false, - attr: { - scrolling: "no" - } - } - }); - } - - $.extend(item, { - type: type, - src: url, - origSrc: item.src, - contentSource: provider, - contentType: type === "image" ? "image" : provider == "gmap_place" || provider == "gmap_search" ? "map" : "video" - }); - } else if (url) { - item.type = item.opts.defaultType; - } - }); - - // Load YouTube/Video API on request to detect when video finished playing - var VideoAPILoader = { - youtube: { - src: "https://www.youtube.com/iframe_api", - class: "YT", - loading: false, - loaded: false - }, - - vimeo: { - src: "https://player.vimeo.com/api/player.js", - class: "Vimeo", - loading: false, - loaded: false - }, - - load: function (vendor) { - var _this = this, - script; - - if (this[vendor].loaded) { - setTimeout(function () { - _this.done(vendor); - }); - return; - } - - if (this[vendor].loading) { - return; - } - - this[vendor].loading = true; - - script = document.createElement("script"); - script.type = "text/javascript"; - script.src = this[vendor].src; - - if (vendor === "youtube") { - window.onYouTubeIframeAPIReady = function () { - _this[vendor].loaded = true; - _this.done(vendor); - }; - } else { - script.onload = function () { - _this[vendor].loaded = true; - _this.done(vendor); - }; - } - - document.body.appendChild(script); - }, - done: function (vendor) { - var instance, $el, player; - - if (vendor === "youtube") { - delete window.onYouTubeIframeAPIReady; - } - - instance = $.fancybox.getInstance(); - - if (instance) { - $el = instance.current.$content.find("iframe"); - - if (vendor === "youtube" && YT !== undefined && YT) { - player = new YT.Player($el.attr("id"), { - events: { - onStateChange: function (e) { - if (e.data == 0) { - instance.next(); - } - } - } - }); - } else if (vendor === "vimeo" && Vimeo !== undefined && Vimeo) { - player = new Vimeo.Player($el); - - player.on("ended", function () { - instance.next(); - }); - } - } - } - }; - - $(document).on({ - "afterShow.fb": function (e, instance, current) { - if (instance.group.length > 1 && (current.contentSource === "youtube" || current.contentSource === "vimeo")) { - VideoAPILoader.load(current.contentSource); - } - } - }); -})(jQuery); -// ========================================================================== -// -// Guestures -// Adds touch guestures, handles click and tap events -// -// ========================================================================== -(function (window, document, $) { - "use strict"; - - var requestAFrame = (function () { - return ( - window.requestAnimationFrame || - window.webkitRequestAnimationFrame || - window.mozRequestAnimationFrame || - window.oRequestAnimationFrame || - // if all else fails, use setTimeout - function (callback) { - return window.setTimeout(callback, 1000 / 60); - } - ); - })(); - - var cancelAFrame = (function () { - return ( - window.cancelAnimationFrame || - window.webkitCancelAnimationFrame || - window.mozCancelAnimationFrame || - window.oCancelAnimationFrame || - function (id) { - window.clearTimeout(id); - } - ); - })(); - - var getPointerXY = function (e) { - var result = []; - - e = e.originalEvent || e || window.e; - e = e.touches && e.touches.length ? e.touches : e.changedTouches && e.changedTouches.length ? e.changedTouches : [e]; - - for (var key in e) { - if (e[key].pageX) { - result.push({ - x: e[key].pageX, - y: e[key].pageY - }); - } else if (e[key].clientX) { - result.push({ - x: e[key].clientX, - y: e[key].clientY - }); - } - } - - return result; - }; - - var distance = function (point2, point1, what) { - if (!point1 || !point2) { - return 0; - } - - if (what === "x") { - return point2.x - point1.x; - } else if (what === "y") { - return point2.y - point1.y; - } - - return Math.sqrt(Math.pow(point2.x - point1.x, 2) + Math.pow(point2.y - point1.y, 2)); - }; - - var isClickable = function ($el) { - if ( - $el.is('a,area,button,[role="button"],input,label,select,summary,textarea,video,audio,iframe') || - $.isFunction($el.get(0).onclick) || - $el.data("selectable") - ) { - return true; - } - - // Check for attributes like data-fancybox-next or data-fancybox-close - for (var i = 0, atts = $el[0].attributes, n = atts.length; i < n; i++) { - if (atts[i].nodeName.substr(0, 14) === "data-fancybox-") { - return true; - } - } - - return false; - }; - - var hasScrollbars = function (el) { - var overflowY = window.getComputedStyle(el)["overflow-y"], - overflowX = window.getComputedStyle(el)["overflow-x"], - vertical = (overflowY === "scroll" || overflowY === "auto") && el.scrollHeight > el.clientHeight, - horizontal = (overflowX === "scroll" || overflowX === "auto") && el.scrollWidth > el.clientWidth; - - return vertical || horizontal; - }; - - var isScrollable = function ($el) { - var rez = false; - - while (true) { - rez = hasScrollbars($el.get(0)); - - if (rez) { - break; - } - - $el = $el.parent(); - - if (!$el.length || $el.hasClass("fancybox-stage") || $el.is("body")) { - break; - } - } - - return rez; - }; - - var Guestures = function (instance) { - var self = this; - - self.instance = instance; - - self.$bg = instance.$refs.bg; - self.$stage = instance.$refs.stage; - self.$container = instance.$refs.container; - - self.destroy(); - - self.$container.on("touchstart.fb.touch mousedown.fb.touch", $.proxy(self, "ontouchstart")); - }; - - Guestures.prototype.destroy = function () { - var self = this; - - self.$container.off(".fb.touch"); - - $(document).off(".fb.touch"); - - if (self.requestId) { - cancelAFrame(self.requestId); - self.requestId = null; - } - - if (self.tapped) { - clearTimeout(self.tapped); - self.tapped = null; - } - }; - - Guestures.prototype.ontouchstart = function (e) { - var self = this, - $target = $(e.target), - instance = self.instance, - current = instance.current, - $slide = current.$slide, - $content = current.$content, - isTouchDevice = e.type == "touchstart"; - - // Do not respond to both (touch and mouse) events - if (isTouchDevice) { - self.$container.off("mousedown.fb.touch"); - } - - // Ignore right click - if (e.originalEvent && e.originalEvent.button == 2) { - return; - } - - // Ignore taping on links, buttons, input elements - if (!$slide.length || !$target.length || isClickable($target) || isClickable($target.parent())) { - return; - } - // Ignore clicks on the scrollbar - if (!$target.is("img") && e.originalEvent.clientX > $target[0].clientWidth + $target.offset().left) { - return; - } - - // Ignore clicks while zooming or closing - if (!current || instance.isAnimating || current.$slide.hasClass("fancybox-animated")) { - e.stopPropagation(); - e.preventDefault(); - - return; - } - - self.realPoints = self.startPoints = getPointerXY(e); - - if (!self.startPoints.length) { - return; - } - - // Allow other scripts to catch touch event if "touch" is set to false - if (current.touch) { - e.stopPropagation(); - } - - self.startEvent = e; - - self.canTap = true; - self.$target = $target; - self.$content = $content; - self.opts = current.opts.touch; - - self.isPanning = false; - self.isSwiping = false; - self.isZooming = false; - self.isScrolling = false; - self.canPan = instance.canPan(); - - self.startTime = new Date().getTime(); - self.distanceX = self.distanceY = self.distance = 0; - - self.canvasWidth = Math.round($slide[0].clientWidth); - self.canvasHeight = Math.round($slide[0].clientHeight); - - self.contentLastPos = null; - self.contentStartPos = $.fancybox.getTranslate(self.$content) || { - top: 0, - left: 0 - }; - self.sliderStartPos = $.fancybox.getTranslate($slide); - - // Since position will be absolute, but we need to make it relative to the stage - self.stagePos = $.fancybox.getTranslate(instance.$refs.stage); - - self.sliderStartPos.top -= self.stagePos.top; - self.sliderStartPos.left -= self.stagePos.left; - - self.contentStartPos.top -= self.stagePos.top; - self.contentStartPos.left -= self.stagePos.left; - - $(document) - .off(".fb.touch") - .on(isTouchDevice ? "touchend.fb.touch touchcancel.fb.touch" : "mouseup.fb.touch mouseleave.fb.touch", $.proxy(self, "ontouchend")) - .on(isTouchDevice ? "touchmove.fb.touch" : "mousemove.fb.touch", $.proxy(self, "ontouchmove")); - - if ($.fancybox.isMobile) { - document.addEventListener("scroll", self.onscroll, true); - } - - // Skip if clicked outside the sliding area - if (!(self.opts || self.canPan) || !($target.is(self.$stage) || self.$stage.find($target).length)) { - if ($target.is(".fancybox-image")) { - e.preventDefault(); - } - - if (!($.fancybox.isMobile && $target.parents(".fancybox-caption").length)) { - return; - } - } - - self.isScrollable = isScrollable($target) || isScrollable($target.parent()); - - // Check if element is scrollable and try to prevent default behavior (scrolling) - if (!($.fancybox.isMobile && self.isScrollable)) { - e.preventDefault(); - } - - // One finger or mouse click - swipe or pan an image - if (self.startPoints.length === 1 || current.hasError) { - if (self.canPan) { - $.fancybox.stop(self.$content); - - self.isPanning = true; - } else { - self.isSwiping = true; - } - - self.$container.addClass("fancybox-is-grabbing"); - } - - // Two fingers - zoom image - if (self.startPoints.length === 2 && current.type === "image" && (current.isLoaded || current.$ghost)) { - self.canTap = false; - self.isSwiping = false; - self.isPanning = false; - - self.isZooming = true; - - $.fancybox.stop(self.$content); - - self.centerPointStartX = (self.startPoints[0].x + self.startPoints[1].x) * 0.5 - $(window).scrollLeft(); - self.centerPointStartY = (self.startPoints[0].y + self.startPoints[1].y) * 0.5 - $(window).scrollTop(); - - self.percentageOfImageAtPinchPointX = (self.centerPointStartX - self.contentStartPos.left) / self.contentStartPos.width; - self.percentageOfImageAtPinchPointY = (self.centerPointStartY - self.contentStartPos.top) / self.contentStartPos.height; - - self.startDistanceBetweenFingers = distance(self.startPoints[0], self.startPoints[1]); - } - }; - - Guestures.prototype.onscroll = function (e) { - var self = this; - - self.isScrolling = true; - - document.removeEventListener("scroll", self.onscroll, true); - }; - - Guestures.prototype.ontouchmove = function (e) { - var self = this; - - // Make sure user has not released over iframe or disabled element - if (e.originalEvent.buttons !== undefined && e.originalEvent.buttons === 0) { - self.ontouchend(e); - return; - } - - if (self.isScrolling) { - self.canTap = false; - return; - } - - self.newPoints = getPointerXY(e); - - if (!(self.opts || self.canPan) || !self.newPoints.length || !self.newPoints.length) { - return; - } - - if (!(self.isSwiping && self.isSwiping === true)) { - e.preventDefault(); - } - - self.distanceX = distance(self.newPoints[0], self.startPoints[0], "x"); - self.distanceY = distance(self.newPoints[0], self.startPoints[0], "y"); - - self.distance = distance(self.newPoints[0], self.startPoints[0]); - - // Skip false ontouchmove events (Chrome) - if (self.distance > 0) { - if (self.isSwiping) { - self.onSwipe(e); - } else if (self.isPanning) { - self.onPan(); - } else if (self.isZooming) { - self.onZoom(); - } - } - }; - - Guestures.prototype.onSwipe = function (e) { - var self = this, - instance = self.instance, - swiping = self.isSwiping, - left = self.sliderStartPos.left || 0, - angle; - - // If direction is not yet determined - if (swiping === true) { - // We need at least 10px distance to correctly calculate an angle - if (Math.abs(self.distance) > 10) { - self.canTap = false; - - if (instance.group.length < 2 && self.opts.vertical) { - self.isSwiping = "y"; - } else if (instance.isDragging || self.opts.vertical === false || (self.opts.vertical === "auto" && $(window).width() > 800)) { - self.isSwiping = "x"; - } else { - angle = Math.abs((Math.atan2(self.distanceY, self.distanceX) * 180) / Math.PI); - - self.isSwiping = angle > 45 && angle < 135 ? "y" : "x"; - } - - if (self.isSwiping === "y" && $.fancybox.isMobile && self.isScrollable) { - self.isScrolling = true; - - return; - } - - instance.isDragging = self.isSwiping; - - // Reset points to avoid jumping, because we dropped first swipes to calculate the angle - self.startPoints = self.newPoints; - - $.each(instance.slides, function (index, slide) { - var slidePos, stagePos; - - $.fancybox.stop(slide.$slide); - - slidePos = $.fancybox.getTranslate(slide.$slide); - stagePos = $.fancybox.getTranslate(instance.$refs.stage); - - slide.$slide - .css({ - transform: "", - opacity: "", - "transition-duration": "" - }) - .removeClass("fancybox-animated") - .removeClass(function (index, className) { - return (className.match(/(^|\s)fancybox-fx-\S+/g) || []).join(" "); - }); - - if (slide.pos === instance.current.pos) { - self.sliderStartPos.top = slidePos.top - stagePos.top; - self.sliderStartPos.left = slidePos.left - stagePos.left; - } - - $.fancybox.setTranslate(slide.$slide, { - top: slidePos.top - stagePos.top, - left: slidePos.left - stagePos.left - }); - }); - - // Stop slideshow - if (instance.SlideShow && instance.SlideShow.isActive) { - instance.SlideShow.stop(); - } - } - - return; - } - - // Sticky edges - if (swiping == "x") { - if ( - self.distanceX > 0 && - (self.instance.group.length < 2 || (self.instance.current.index === 0 && !self.instance.current.opts.loop)) - ) { - left = left + Math.pow(self.distanceX, 0.8); - } else if ( - self.distanceX < 0 && - (self.instance.group.length < 2 || - (self.instance.current.index === self.instance.group.length - 1 && !self.instance.current.opts.loop)) - ) { - left = left - Math.pow(-self.distanceX, 0.8); - } else { - left = left + self.distanceX; - } - } - - self.sliderLastPos = { - top: swiping == "x" ? 0 : self.sliderStartPos.top + self.distanceY, - left: left - }; - - if (self.requestId) { - cancelAFrame(self.requestId); - - self.requestId = null; - } - - self.requestId = requestAFrame(function () { - if (self.sliderLastPos) { - $.each(self.instance.slides, function (index, slide) { - var pos = slide.pos - self.instance.currPos; - - $.fancybox.setTranslate(slide.$slide, { - top: self.sliderLastPos.top, - left: self.sliderLastPos.left + pos * self.canvasWidth + pos * slide.opts.gutter - }); - }); - - self.$container.addClass("fancybox-is-sliding"); - } - }); - }; - - Guestures.prototype.onPan = function () { - var self = this; - - // Prevent accidental movement (sometimes, when tapping casually, finger can move a bit) - if (distance(self.newPoints[0], self.realPoints[0]) < ($.fancybox.isMobile ? 10 : 5)) { - self.startPoints = self.newPoints; - return; - } - - self.canTap = false; - - self.contentLastPos = self.limitMovement(); - - if (self.requestId) { - cancelAFrame(self.requestId); - } - - self.requestId = requestAFrame(function () { - $.fancybox.setTranslate(self.$content, self.contentLastPos); - }); - }; - - // Make panning sticky to the edges - Guestures.prototype.limitMovement = function () { - var self = this; - - var canvasWidth = self.canvasWidth; - var canvasHeight = self.canvasHeight; - - var distanceX = self.distanceX; - var distanceY = self.distanceY; - - var contentStartPos = self.contentStartPos; - - var currentOffsetX = contentStartPos.left; - var currentOffsetY = contentStartPos.top; - - var currentWidth = contentStartPos.width; - var currentHeight = contentStartPos.height; - - var minTranslateX, minTranslateY, maxTranslateX, maxTranslateY, newOffsetX, newOffsetY; - - if (currentWidth > canvasWidth) { - newOffsetX = currentOffsetX + distanceX; - } else { - newOffsetX = currentOffsetX; - } - - newOffsetY = currentOffsetY + distanceY; - - // Slow down proportionally to traveled distance - minTranslateX = Math.max(0, canvasWidth * 0.5 - currentWidth * 0.5); - minTranslateY = Math.max(0, canvasHeight * 0.5 - currentHeight * 0.5); - - maxTranslateX = Math.min(canvasWidth - currentWidth, canvasWidth * 0.5 - currentWidth * 0.5); - maxTranslateY = Math.min(canvasHeight - currentHeight, canvasHeight * 0.5 - currentHeight * 0.5); - - // -> - if (distanceX > 0 && newOffsetX > minTranslateX) { - newOffsetX = minTranslateX - 1 + Math.pow(-minTranslateX + currentOffsetX + distanceX, 0.8) || 0; - } - - // <- - if (distanceX < 0 && newOffsetX < maxTranslateX) { - newOffsetX = maxTranslateX + 1 - Math.pow(maxTranslateX - currentOffsetX - distanceX, 0.8) || 0; - } - - // \/ - if (distanceY > 0 && newOffsetY > minTranslateY) { - newOffsetY = minTranslateY - 1 + Math.pow(-minTranslateY + currentOffsetY + distanceY, 0.8) || 0; - } - - // /\ - if (distanceY < 0 && newOffsetY < maxTranslateY) { - newOffsetY = maxTranslateY + 1 - Math.pow(maxTranslateY - currentOffsetY - distanceY, 0.8) || 0; - } - - return { - top: newOffsetY, - left: newOffsetX - }; - }; - - Guestures.prototype.limitPosition = function (newOffsetX, newOffsetY, newWidth, newHeight) { - var self = this; - - var canvasWidth = self.canvasWidth; - var canvasHeight = self.canvasHeight; - - if (newWidth > canvasWidth) { - newOffsetX = newOffsetX > 0 ? 0 : newOffsetX; - newOffsetX = newOffsetX < canvasWidth - newWidth ? canvasWidth - newWidth : newOffsetX; - } else { - // Center horizontally - newOffsetX = Math.max(0, canvasWidth / 2 - newWidth / 2); - } - - if (newHeight > canvasHeight) { - newOffsetY = newOffsetY > 0 ? 0 : newOffsetY; - newOffsetY = newOffsetY < canvasHeight - newHeight ? canvasHeight - newHeight : newOffsetY; - } else { - // Center vertically - newOffsetY = Math.max(0, canvasHeight / 2 - newHeight / 2); - } - - return { - top: newOffsetY, - left: newOffsetX - }; - }; - - Guestures.prototype.onZoom = function () { - var self = this; - - // Calculate current distance between points to get pinch ratio and new width and height - var contentStartPos = self.contentStartPos; - - var currentWidth = contentStartPos.width; - var currentHeight = contentStartPos.height; - - var currentOffsetX = contentStartPos.left; - var currentOffsetY = contentStartPos.top; - - var endDistanceBetweenFingers = distance(self.newPoints[0], self.newPoints[1]); - - var pinchRatio = endDistanceBetweenFingers / self.startDistanceBetweenFingers; - - var newWidth = Math.floor(currentWidth * pinchRatio); - var newHeight = Math.floor(currentHeight * pinchRatio); - - // This is the translation due to pinch-zooming - var translateFromZoomingX = (currentWidth - newWidth) * self.percentageOfImageAtPinchPointX; - var translateFromZoomingY = (currentHeight - newHeight) * self.percentageOfImageAtPinchPointY; - - // Point between the two touches - var centerPointEndX = (self.newPoints[0].x + self.newPoints[1].x) / 2 - $(window).scrollLeft(); - var centerPointEndY = (self.newPoints[0].y + self.newPoints[1].y) / 2 - $(window).scrollTop(); - - // And this is the translation due to translation of the centerpoint - // between the two fingers - var translateFromTranslatingX = centerPointEndX - self.centerPointStartX; - var translateFromTranslatingY = centerPointEndY - self.centerPointStartY; - - // The new offset is the old/current one plus the total translation - var newOffsetX = currentOffsetX + (translateFromZoomingX + translateFromTranslatingX); - var newOffsetY = currentOffsetY + (translateFromZoomingY + translateFromTranslatingY); - - var newPos = { - top: newOffsetY, - left: newOffsetX, - scaleX: pinchRatio, - scaleY: pinchRatio - }; - - self.canTap = false; - - self.newWidth = newWidth; - self.newHeight = newHeight; - - self.contentLastPos = newPos; - - if (self.requestId) { - cancelAFrame(self.requestId); - } - - self.requestId = requestAFrame(function () { - $.fancybox.setTranslate(self.$content, self.contentLastPos); - }); - }; - - Guestures.prototype.ontouchend = function (e) { - var self = this; - - var swiping = self.isSwiping; - var panning = self.isPanning; - var zooming = self.isZooming; - var scrolling = self.isScrolling; - - self.endPoints = getPointerXY(e); - self.dMs = Math.max(new Date().getTime() - self.startTime, 1); - - self.$container.removeClass("fancybox-is-grabbing"); - - $(document).off(".fb.touch"); - - document.removeEventListener("scroll", self.onscroll, true); - - if (self.requestId) { - cancelAFrame(self.requestId); - - self.requestId = null; - } - - self.isSwiping = false; - self.isPanning = false; - self.isZooming = false; - self.isScrolling = false; - - self.instance.isDragging = false; - - if (self.canTap) { - return self.onTap(e); - } - - self.speed = 100; - - // Speed in px/ms - self.velocityX = (self.distanceX / self.dMs) * 0.5; - self.velocityY = (self.distanceY / self.dMs) * 0.5; - - if (panning) { - self.endPanning(); - } else if (zooming) { - self.endZooming(); - } else { - self.endSwiping(swiping, scrolling); - } - - - }; - - Guestures.prototype.endSwiping = function (swiping, scrolling) { - var self = this, - ret = false, - len = self.instance.group.length, - distanceX = Math.abs(self.distanceX), - canAdvance = swiping == "x" && len > 1 && ((self.dMs > 130 && distanceX > 10) || distanceX > 50), - speedX = 300; - - self.sliderLastPos = null; - - // Close if swiped vertically / navigate if horizontally - if (swiping == "y" && !scrolling && Math.abs(self.distanceY) > 50) { - // Continue vertical movement - $.fancybox.animate( - self.instance.current.$slide, { - top: self.sliderStartPos.top + self.distanceY + self.velocityY * 150, - opacity: 0 - }, - 200 - ); - ret = self.instance.close(true, 250); - } else if (canAdvance && self.distanceX > 0) { - ret = self.instance.previous(speedX); - } else if (canAdvance && self.distanceX < 0) { - ret = self.instance.next(speedX); - } - - if (ret === false && (swiping == "x" || swiping == "y")) { - self.instance.centerSlide(200); - } - - self.$container.removeClass("fancybox-is-sliding"); - }; - - // Limit panning from edges - // ======================== - Guestures.prototype.endPanning = function () { - var self = this, - newOffsetX, - newOffsetY, - newPos; - - if (!self.contentLastPos) { - return; - } - - if (self.opts.momentum === false || self.dMs > 350) { - newOffsetX = self.contentLastPos.left; - newOffsetY = self.contentLastPos.top; - } else { - // Continue movement - newOffsetX = self.contentLastPos.left + self.velocityX * 500; - newOffsetY = self.contentLastPos.top + self.velocityY * 500; - } - - newPos = self.limitPosition(newOffsetX, newOffsetY, self.contentStartPos.width, self.contentStartPos.height); - - newPos.width = self.contentStartPos.width; - newPos.height = self.contentStartPos.height; - - $.fancybox.animate(self.$content, newPos, 366); - }; - - Guestures.prototype.endZooming = function () { - var self = this; - - var current = self.instance.current; - - var newOffsetX, newOffsetY, newPos, reset; - - var newWidth = self.newWidth; - var newHeight = self.newHeight; - - if (!self.contentLastPos) { - return; - } - - newOffsetX = self.contentLastPos.left; - newOffsetY = self.contentLastPos.top; - - reset = { - top: newOffsetY, - left: newOffsetX, - width: newWidth, - height: newHeight, - scaleX: 1, - scaleY: 1 - }; - - // Reset scalex/scaleY values; this helps for perfomance and does not break animation - $.fancybox.setTranslate(self.$content, reset); - - if (newWidth < self.canvasWidth && newHeight < self.canvasHeight) { - self.instance.scaleToFit(150); - } else if (newWidth > current.width || newHeight > current.height) { - self.instance.scaleToActual(self.centerPointStartX, self.centerPointStartY, 150); - } else { - newPos = self.limitPosition(newOffsetX, newOffsetY, newWidth, newHeight); - - $.fancybox.animate(self.$content, newPos, 150); - } - }; - - Guestures.prototype.onTap = function (e) { - var self = this; - var $target = $(e.target); - - var instance = self.instance; - var current = instance.current; - - var endPoints = (e && getPointerXY(e)) || self.startPoints; - - var tapX = endPoints[0] ? endPoints[0].x - $(window).scrollLeft() - self.stagePos.left : 0; - var tapY = endPoints[0] ? endPoints[0].y - $(window).scrollTop() - self.stagePos.top : 0; - - var where; - - var process = function (prefix) { - var action = current.opts[prefix]; - - if ($.isFunction(action)) { - action = action.apply(instance, [current, e]); - } - - if (!action) { - return; - } - - switch (action) { - case "close": - instance.close(self.startEvent); - - break; - - case "toggleControls": - instance.toggleControls(); - - break; - - case "next": - instance.next(); - - break; - - case "nextOrClose": - if (instance.group.length > 1) { - instance.next(); - } else { - instance.close(self.startEvent); - } - - break; - - case "zoom": - if (current.type == "image" && (current.isLoaded || current.$ghost)) { - if (instance.canPan()) { - instance.scaleToFit(); - } else if (instance.isScaledDown()) { - instance.scaleToActual(tapX, tapY); - } else if (instance.group.length < 2) { - instance.close(self.startEvent); - } - } - - break; - } - }; - - // Ignore right click - if (e.originalEvent && e.originalEvent.button == 2) { - return; - } - - // Skip if clicked on the scrollbar - if (!$target.is("img") && tapX > $target[0].clientWidth + $target.offset().left) { - return; - } - - // Check where is clicked - if ($target.is(".fancybox-bg,.fancybox-inner,.fancybox-outer,.fancybox-container")) { - where = "Outside"; - } else if ($target.is(".fancybox-slide")) { - where = "Slide"; - } else if ( - instance.current.$content && - instance.current.$content - .find($target) - .addBack() - .filter($target).length - ) { - where = "Content"; - } else { - return; - } - - // Check if this is a double tap - if (self.tapped) { - // Stop previously created single tap - clearTimeout(self.tapped); - self.tapped = null; - - // Skip if distance between taps is too big - if (Math.abs(tapX - self.tapX) > 50 || Math.abs(tapY - self.tapY) > 50) { - return this; - } - - // OK, now we assume that this is a double-tap - process("dblclick" + where); - } else { - // Single tap will be processed if user has not clicked second time within 300ms - // or there is no need to wait for double-tap - self.tapX = tapX; - self.tapY = tapY; - - if (current.opts["dblclick" + where] && current.opts["dblclick" + where] !== current.opts["click" + where]) { - self.tapped = setTimeout(function () { - self.tapped = null; - - if (!instance.isAnimating) { - process("click" + where); - } - }, 500); - } else { - process("click" + where); - } - } - - return this; - }; - - $(document) - .on("onActivate.fb", function (e, instance) { - if (instance && !instance.Guestures) { - instance.Guestures = new Guestures(instance); - } - }) - .on("beforeClose.fb", function (e, instance) { - if (instance && instance.Guestures) { - instance.Guestures.destroy(); - } - }); -})(window, document, jQuery); -// ========================================================================== -// -// SlideShow -// Enables slideshow functionality -// -// Example of usage: -// $.fancybox.getInstance().SlideShow.start() -// -// ========================================================================== -(function (document, $) { - "use strict"; - - $.extend(true, $.fancybox.defaults, { - btnTpl: { - slideShow: '" - }, - slideShow: { - autoStart: false, - speed: 3000, - progress: true - } - }); - - var SlideShow = function (instance) { - this.instance = instance; - this.init(); - }; - - $.extend(SlideShow.prototype, { - timer: null, - isActive: false, - $button: null, - - init: function () { - var self = this, - instance = self.instance, - opts = instance.group[instance.currIndex].opts.slideShow; - - self.$button = instance.$refs.toolbar.find("[data-fancybox-play]").on("click", function () { - self.toggle(); - }); - - if (instance.group.length < 2 || !opts) { - self.$button.hide(); - } else if (opts.progress) { - self.$progress = $('
').appendTo(instance.$refs.inner); - } - }, - - set: function (force) { - var self = this, - instance = self.instance, - current = instance.current; - - // Check if reached last element - if (current && (force === true || current.opts.loop || instance.currIndex < instance.group.length - 1)) { - if (self.isActive && current.contentType !== "video") { - if (self.$progress) { - $.fancybox.animate(self.$progress.show(), { - scaleX: 1 - }, current.opts.slideShow.speed); - } - - self.timer = setTimeout(function () { - if (!instance.current.opts.loop && instance.current.index == instance.group.length - 1) { - instance.jumpTo(0); - } else { - instance.next(); - } - }, current.opts.slideShow.speed); - } - } else { - self.stop(); - instance.idleSecondsCounter = 0; - instance.showControls(); - } - }, - - clear: function () { - var self = this; - - clearTimeout(self.timer); - - self.timer = null; - - if (self.$progress) { - self.$progress.removeAttr("style").hide(); - } - }, - - start: function () { - var self = this, - current = self.instance.current; - - if (current) { - self.$button - .attr("title", (current.opts.i18n[current.opts.lang] || current.opts.i18n.en).PLAY_STOP) - .removeClass("fancybox-button--play") - .addClass("fancybox-button--pause"); - - self.isActive = true; - - if (current.isComplete) { - self.set(true); - } - - self.instance.trigger("onSlideShowChange", true); - } - }, - - stop: function () { - var self = this, - current = self.instance.current; - - self.clear(); - - self.$button - .attr("title", (current.opts.i18n[current.opts.lang] || current.opts.i18n.en).PLAY_START) - .removeClass("fancybox-button--pause") - .addClass("fancybox-button--play"); - - self.isActive = false; - - self.instance.trigger("onSlideShowChange", false); - - if (self.$progress) { - self.$progress.removeAttr("style").hide(); - } - }, - - toggle: function () { - var self = this; - - if (self.isActive) { - self.stop(); - } else { - self.start(); - } - } - }); - - $(document).on({ - "onInit.fb": function (e, instance) { - if (instance && !instance.SlideShow) { - instance.SlideShow = new SlideShow(instance); - } - }, - - "beforeShow.fb": function (e, instance, current, firstRun) { - var SlideShow = instance && instance.SlideShow; - - if (firstRun) { - if (SlideShow && current.opts.slideShow.autoStart) { - SlideShow.start(); - } - } else if (SlideShow && SlideShow.isActive) { - SlideShow.clear(); - } - }, - - "afterShow.fb": function (e, instance, current) { - var SlideShow = instance && instance.SlideShow; - - if (SlideShow && SlideShow.isActive) { - SlideShow.set(); - } - }, - - "afterKeydown.fb": function (e, instance, current, keypress, keycode) { - var SlideShow = instance && instance.SlideShow; - - // "P" or Spacebar - if (SlideShow && current.opts.slideShow && (keycode === 80 || keycode === 32) && !$(document.activeElement).is("button,a,input")) { - keypress.preventDefault(); - - SlideShow.toggle(); - } - }, - - "beforeClose.fb onDeactivate.fb": function (e, instance) { - var SlideShow = instance && instance.SlideShow; - - if (SlideShow) { - SlideShow.stop(); - } - } - }); - - // Page Visibility API to pause slideshow when window is not active - $(document).on("visibilitychange", function () { - var instance = $.fancybox.getInstance(), - SlideShow = instance && instance.SlideShow; - - if (SlideShow && SlideShow.isActive) { - if (document.hidden) { - SlideShow.clear(); - } else { - SlideShow.set(); - } - } - }); -})(document, jQuery); -// ========================================================================== -// -// FullScreen -// Adds fullscreen functionality -// -// ========================================================================== -(function (document, $) { - "use strict"; - - // Collection of methods supported by user browser - var fn = (function () { - var fnMap = [ - ["requestFullscreen", "exitFullscreen", "fullscreenElement", "fullscreenEnabled", "fullscreenchange", "fullscreenerror"], - // new WebKit - [ - "webkitRequestFullscreen", - "webkitExitFullscreen", - "webkitFullscreenElement", - "webkitFullscreenEnabled", - "webkitfullscreenchange", - "webkitfullscreenerror" - ], - // old WebKit (Safari 5.1) - [ - "webkitRequestFullScreen", - "webkitCancelFullScreen", - "webkitCurrentFullScreenElement", - "webkitCancelFullScreen", - "webkitfullscreenchange", - "webkitfullscreenerror" - ], - [ - "mozRequestFullScreen", - "mozCancelFullScreen", - "mozFullScreenElement", - "mozFullScreenEnabled", - "mozfullscreenchange", - "mozfullscreenerror" - ], - ["msRequestFullscreen", "msExitFullscreen", "msFullscreenElement", "msFullscreenEnabled", "MSFullscreenChange", "MSFullscreenError"] - ]; - - var ret = {}; - - for (var i = 0; i < fnMap.length; i++) { - var val = fnMap[i]; - - if (val && val[1] in document) { - for (var j = 0; j < val.length; j++) { - ret[fnMap[0][j]] = val[j]; - } - - return ret; - } - } - - return false; - })(); - - if (fn) { - var FullScreen = { - request: function (elem) { - elem = elem || document.documentElement; - - elem[fn.requestFullscreen](elem.ALLOW_KEYBOARD_INPUT); - }, - exit: function () { - document[fn.exitFullscreen](); - }, - toggle: function (elem) { - elem = elem || document.documentElement; - - if (this.isFullscreen()) { - this.exit(); - } else { - this.request(elem); - } - }, - isFullscreen: function () { - return Boolean(document[fn.fullscreenElement]); - }, - enabled: function () { - return Boolean(document[fn.fullscreenEnabled]); - } - }; - - $.extend(true, $.fancybox.defaults, { - btnTpl: { - fullScreen: '" - }, - fullScreen: { - autoStart: false - } - }); - - $(document).on(fn.fullscreenchange, function () { - var isFullscreen = FullScreen.isFullscreen(), - instance = $.fancybox.getInstance(); - - if (instance) { - // If image is zooming, then force to stop and reposition properly - if (instance.current && instance.current.type === "image" && instance.isAnimating) { - instance.isAnimating = false; - - instance.update(true, true, 0); - - if (!instance.isComplete) { - instance.complete(); - } - } - - instance.trigger("onFullscreenChange", isFullscreen); - - instance.$refs.container.toggleClass("fancybox-is-fullscreen", isFullscreen); - - instance.$refs.toolbar - .find("[data-fancybox-fullscreen]") - .toggleClass("fancybox-button--fsenter", !isFullscreen) - .toggleClass("fancybox-button--fsexit", isFullscreen); - } - }); - } - - $(document).on({ - "onInit.fb": function (e, instance) { - var $container; - - if (!fn) { - instance.$refs.toolbar.find("[data-fancybox-fullscreen]").remove(); - - return; - } - - if (instance && instance.group[instance.currIndex].opts.fullScreen) { - $container = instance.$refs.container; - - $container.on("click.fb-fullscreen", "[data-fancybox-fullscreen]", function (e) { - e.stopPropagation(); - e.preventDefault(); - - FullScreen.toggle(); - }); - - if (instance.opts.fullScreen && instance.opts.fullScreen.autoStart === true) { - FullScreen.request(); - } - - // Expose API - instance.FullScreen = FullScreen; - } else if (instance) { - instance.$refs.toolbar.find("[data-fancybox-fullscreen]").hide(); - } - }, - - "afterKeydown.fb": function (e, instance, current, keypress, keycode) { - // "F" - if (instance && instance.FullScreen && keycode === 70) { - keypress.preventDefault(); - - instance.FullScreen.toggle(); - } - }, - - "beforeClose.fb": function (e, instance) { - if (instance && instance.FullScreen && instance.$refs.container.hasClass("fancybox-is-fullscreen")) { - FullScreen.exit(); - } - } - }); -})(document, jQuery); -// ========================================================================== -// -// Thumbs -// Displays thumbnails in a grid -// -// ========================================================================== -(function (document, $) { - "use strict"; - - var CLASS = "fancybox-thumbs", - CLASS_ACTIVE = CLASS + "-active"; - - // Make sure there are default values - $.fancybox.defaults = $.extend( - true, { - btnTpl: { - thumbs: '" - }, - thumbs: { - autoStart: false, // Display thumbnails on opening - hideOnClose: true, // Hide thumbnail grid when closing animation starts - parentEl: ".fancybox-container", // Container is injected into this element - axis: "y" // Vertical (y) or horizontal (x) scrolling - } - }, - $.fancybox.defaults - ); - - var FancyThumbs = function (instance) { - this.init(instance); - }; - - $.extend(FancyThumbs.prototype, { - $button: null, - $grid: null, - $list: null, - isVisible: false, - isActive: false, - - init: function (instance) { - var self = this, - group = instance.group, - enabled = 0; - - self.instance = instance; - self.opts = group[instance.currIndex].opts.thumbs; - - instance.Thumbs = self; - - self.$button = instance.$refs.toolbar.find("[data-fancybox-thumbs]"); - - // Enable thumbs if at least two group items have thumbnails - for (var i = 0, len = group.length; i < len; i++) { - if (group[i].thumb) { - enabled++; - } - - if (enabled > 1) { - break; - } - } - - if (enabled > 1 && !!self.opts) { - self.$button.removeAttr("style").on("click", function () { - self.toggle(); - }); - - self.isActive = true; - } else { - self.$button.hide(); - } - }, - - create: function () { - var self = this, - instance = self.instance, - parentEl = self.opts.parentEl, - list = [], - src; - - if (!self.$grid) { - // Create main element - self.$grid = $('
').appendTo( - instance.$refs.container - .find(parentEl) - .addBack() - .filter(parentEl) - ); - - // Add "click" event that performs gallery navigation - self.$grid.on("click", "a", function () { - instance.jumpTo($(this).attr("data-index")); - }); - } - - // Build the list - if (!self.$list) { - self.$list = $('
').appendTo(self.$grid); - } - - $.each(instance.group, function (i, item) { - src = item.thumb; - - if (!src && item.type === "image") { - src = item.src; - } - - list.push( - '" - ); - }); - - self.$list[0].innerHTML = list.join(""); - - if (self.opts.axis === "x") { - // Set fixed width for list element to enable horizontal scrolling - self.$list.width( - parseInt(self.$grid.css("padding-right"), 10) + - instance.group.length * - self.$list - .children() - .eq(0) - .outerWidth(true) - ); - } - }, - - focus: function (duration) { - var self = this, - $list = self.$list, - $grid = self.$grid, - thumb, - thumbPos; - - if (!self.instance.current) { - return; - } - - thumb = $list - .children() - .removeClass(CLASS_ACTIVE) - .filter('[data-index="' + self.instance.current.index + '"]') - .addClass(CLASS_ACTIVE); - - thumbPos = thumb.position(); - - // Check if need to scroll to make current thumb visible - if (self.opts.axis === "y" && (thumbPos.top < 0 || thumbPos.top > $list.height() - thumb.outerHeight())) { - $list.stop().animate({ - scrollTop: $list.scrollTop() + thumbPos.top - }, - duration - ); - } else if ( - self.opts.axis === "x" && - (thumbPos.left < $grid.scrollLeft() || thumbPos.left > $grid.scrollLeft() + ($grid.width() - thumb.outerWidth())) - ) { - $list - .parent() - .stop() - .animate({ - scrollLeft: thumbPos.left - }, - duration - ); - } - }, - - update: function () { - var that = this; - that.instance.$refs.container.toggleClass("fancybox-show-thumbs", this.isVisible); - - if (that.isVisible) { - if (!that.$grid) { - that.create(); - } - - that.instance.trigger("onThumbsShow"); - - that.focus(0); - } else if (that.$grid) { - that.instance.trigger("onThumbsHide"); - } - - // Update content position - that.instance.update(); - }, - - hide: function () { - this.isVisible = false; - this.update(); - }, - - show: function () { - this.isVisible = true; - this.update(); - }, - - toggle: function () { - this.isVisible = !this.isVisible; - this.update(); - } - }); - - $(document).on({ - "onInit.fb": function (e, instance) { - var Thumbs; - - if (instance && !instance.Thumbs) { - Thumbs = new FancyThumbs(instance); - - if (Thumbs.isActive && Thumbs.opts.autoStart === true) { - Thumbs.show(); - } - } - }, - - "beforeShow.fb": function (e, instance, item, firstRun) { - var Thumbs = instance && instance.Thumbs; - - if (Thumbs && Thumbs.isVisible) { - Thumbs.focus(firstRun ? 0 : 250); - } - }, - - "afterKeydown.fb": function (e, instance, current, keypress, keycode) { - var Thumbs = instance && instance.Thumbs; - - // "G" - if (Thumbs && Thumbs.isActive && keycode === 71) { - keypress.preventDefault(); - - Thumbs.toggle(); - } - }, - - "beforeClose.fb": function (e, instance) { - var Thumbs = instance && instance.Thumbs; - - if (Thumbs && Thumbs.isVisible && Thumbs.opts.hideOnClose !== false) { - Thumbs.$grid.hide(); - } - } - }); -})(document, jQuery); -//// ========================================================================== -// -// Share -// Displays simple form for sharing current url -// -// ========================================================================== -(function (document, $) { - "use strict"; - - $.extend(true, $.fancybox.defaults, { - btnTpl: { - share: '" - }, - share: { - url: function (instance, item) { - return ( - (!instance.currentHash && !(item.type === "inline" || item.type === "html") ? item.origSrc || item.src : false) || window.location - ); - }, - tpl: '
' + - "

{{SHARE}}

" + - "

" + - '' + - '' + - "Facebook" + - "" + - '' + - '' + - "Twitter" + - "" + - '' + - '' + - "Pinterest" + - "" + - "

" + - '

' + - "
" - } - }); - - function escapeHtml(string) { - var entityMap = { - "&": "&", - "<": "<", - ">": ">", - '"': """, - "'": "'", - "/": "/", - "`": "`", - "=": "=" - }; - - return String(string).replace(/[&<>"'`=\/]/g, function (s) { - return entityMap[s]; - }); - } - - $(document).on("click", "[data-fancybox-share]", function () { - var instance = $.fancybox.getInstance(), - current = instance.current || null, - url, - tpl; - - if (!current) { - return; - } - - if ($.type(current.opts.share.url) === "function") { - url = current.opts.share.url.apply(current, [instance, current]); - } - - tpl = current.opts.share.tpl - .replace(/\{\{media\}\}/g, current.type === "image" ? encodeURIComponent(current.src) : "") - .replace(/\{\{url\}\}/g, encodeURIComponent(url)) - .replace(/\{\{url_raw\}\}/g, escapeHtml(url)) - .replace(/\{\{descr\}\}/g, instance.$caption ? encodeURIComponent(instance.$caption.text()) : ""); - - $.fancybox.open({ - src: instance.translate(instance, tpl), - type: "html", - opts: { - touch: false, - animationEffect: false, - afterLoad: function (shareInstance, shareCurrent) { - // Close self if parent instance is closing - instance.$refs.container.one("beforeClose.fb", function () { - shareInstance.close(null, 0); - }); - - // Opening links in a popup window - shareCurrent.$content.find(".fancybox-share__button").click(function () { - window.open(this.href, "Share", "width=550, height=450"); - return false; - }); - }, - mobile: { - autoFocus: false - } - } - }); - }); -})(document, jQuery); -// ========================================================================== -// -// Hash -// Enables linking to each modal -// -// ========================================================================== -(function (window, document, $) { - "use strict"; - - // Simple $.escapeSelector polyfill (for jQuery prior v3) - if (!$.escapeSelector) { - $.escapeSelector = function (sel) { - var rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g; - var fcssescape = function (ch, asCodePoint) { - if (asCodePoint) { - // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER - if (ch === "\0") { - return "\uFFFD"; - } - - // Control characters and (dependent upon position) numbers get escaped as code points - return ch.slice(0, -1) + "\\" + ch.charCodeAt(ch.length - 1).toString(16) + " "; - } - - // Other potentially-special ASCII characters get backslash-escaped - return "\\" + ch; - }; - - return (sel + "").replace(rcssescape, fcssescape); - }; - } - - // Get info about gallery name and current index from url - function parseUrl() { - var hash = window.location.hash.substr(1), - rez = hash.split("-"), - index = rez.length > 1 && /^\+?\d+$/.test(rez[rez.length - 1]) ? parseInt(rez.pop(-1), 10) || 1 : 1, - gallery = rez.join("-"); - - return { - hash: hash, - /* Index is starting from 1 */ - index: index < 1 ? 1 : index, - gallery: gallery - }; - } - - // Trigger click evnt on links to open new fancyBox instance - function triggerFromUrl(url) { - if (url.gallery !== "") { - // If we can find element matching 'data-fancybox' atribute, - // then triggering click event should start fancyBox - $("[data-fancybox='" + $.escapeSelector(url.gallery) + "']") - .eq(url.index - 1) - .focus() - .trigger("click.fb-start"); - } - } - - // Get gallery name from current instance - function getGalleryID(instance) { - var opts, ret; - - if (!instance) { - return false; - } - - opts = instance.current ? instance.current.opts : instance.opts; - ret = opts.hash || (opts.$orig ? opts.$orig.data("fancybox") || opts.$orig.data("fancybox-trigger") : ""); - - return ret === "" ? false : ret; - } - - // Start when DOM becomes ready - $(function () { - // Check if user has disabled this module - if ($.fancybox.defaults.hash === false) { - return; - } - - // Update hash when opening/closing fancyBox - $(document).on({ - "onInit.fb": function (e, instance) { - var url, gallery; - - if (instance.group[instance.currIndex].opts.hash === false) { - return; - } - - url = parseUrl(); - gallery = getGalleryID(instance); - - // Make sure gallery start index matches index from hash - if (gallery && url.gallery && gallery == url.gallery) { - instance.currIndex = url.index - 1; - } - }, - - "beforeShow.fb": function (e, instance, current, firstRun) { - var gallery; - - if (!current || current.opts.hash === false) { - return; - } - - // Check if need to update window hash - gallery = getGalleryID(instance); - - if (!gallery) { - return; - } - - // Variable containing last hash value set by fancyBox - // It will be used to determine if fancyBox needs to close after hash change is detected - instance.currentHash = gallery + (instance.group.length > 1 ? "-" + (current.index + 1) : ""); - - // If current hash is the same (this instance most likely is opened by hashchange), then do nothing - if (window.location.hash === "#" + instance.currentHash) { - return; - } - - if (firstRun && !instance.origHash) { - instance.origHash = window.location.hash; - } - - if (instance.hashTimer) { - clearTimeout(instance.hashTimer); - } - - // Update hash - instance.hashTimer = setTimeout(function () { - if ("replaceState" in window.history) { - window.history[firstRun ? "pushState" : "replaceState"]({}, - document.title, - window.location.pathname + window.location.search + "#" + instance.currentHash - ); - - if (firstRun) { - instance.hasCreatedHistory = true; - } - } else { - window.location.hash = instance.currentHash; - } - - instance.hashTimer = null; - }, 300); - }, - - "beforeClose.fb": function (e, instance, current) { - if (!current || current.opts.hash === false) { - return; - } - - clearTimeout(instance.hashTimer); - - // Goto previous history entry - if (instance.currentHash && instance.hasCreatedHistory) { - window.history.back(); - } else if (instance.currentHash) { - if ("replaceState" in window.history) { - window.history.replaceState({}, document.title, window.location.pathname + window.location.search + (instance.origHash || "")); - } else { - window.location.hash = instance.origHash; - } - } - - instance.currentHash = null; - } - }); - - // Check if need to start/close after url has changed - $(window).on("hashchange.fb", function () { - var url = parseUrl(), - fb = null; - - // Find last fancyBox instance that has "hash" - $.each( - $(".fancybox-container") - .get() - .reverse(), - function (index, value) { - var tmp = $(value).data("FancyBox"); - - if (tmp && tmp.currentHash) { - fb = tmp; - return false; - } - } - ); - - if (fb) { - // Now, compare hash values - if (fb.currentHash !== url.gallery + "-" + url.index && !(url.index === 1 && fb.currentHash == url.gallery)) { - fb.currentHash = null; - - fb.close(); - } - } else if (url.gallery !== "") { - triggerFromUrl(url); - } - }); - - // Check current hash and trigger click event on matching element to start fancyBox, if needed - setTimeout(function () { - if (!$.fancybox.getInstance()) { - triggerFromUrl(parseUrl()); - } - }, 50); - }); -})(window, document, jQuery); -// ========================================================================== -// -// Wheel -// Basic mouse weheel support for gallery navigation -// -// ========================================================================== -(function (document, $) { - "use strict"; - - var prevTime = new Date().getTime(); - - $(document).on({ - "onInit.fb": function (e, instance, current) { - instance.$refs.stage.on("mousewheel DOMMouseScroll wheel MozMousePixelScroll", function (e) { - var current = instance.current, - currTime = new Date().getTime(); - - if (instance.group.length < 2 || current.opts.wheel === false || (current.opts.wheel === "auto" && current.type !== "image")) { - return; - } - - e.preventDefault(); - e.stopPropagation(); - - if (current.$slide.hasClass("fancybox-animated")) { - return; - } - - e = e.originalEvent || e; - - if (currTime - prevTime < 250) { - return; - } - - prevTime = currTime; - - instance[(-e.deltaY || -e.deltaX || e.wheelDelta || -e.detail) < 0 ? "next" : "previous"](); - }); - } - }); -})(document, jQuery); \ No newline at end of file diff --git a/assets/src/scripts/vendor/slick.js b/assets/src/scripts/vendor/slick.js deleted file mode 100644 index 6a2a0995..00000000 --- a/assets/src/scripts/vendor/slick.js +++ /dev/null @@ -1,3011 +0,0 @@ -/* - _ _ _ _ - ___| (_) ___| | __ (_)___ -/ __| | |/ __| |/ / | / __| -\__ \ | | (__| < _ | \__ \ -|___/_|_|\___|_|\_(_)/ |___/ - |__/ - - Version: 1.8.0 - Author: Ken Wheeler - Website: http://kenwheeler.github.io - Docs: http://kenwheeler.github.io/slick - Repo: http://github.com/kenwheeler/slick - Issues: http://github.com/kenwheeler/slick/issues - - */ -/* global window, document, define, jQuery, setInterval, clearInterval */ -;(function(factory) { - 'use strict'; - if (typeof define === 'function' && define.amd) { - define(['jquery'], factory); - } else if (typeof exports !== 'undefined') { - module.exports = factory(require('jquery')); - } else { - factory(jQuery); - } - -}(function($) { - 'use strict'; - var Slick = window.Slick || {}; - - Slick = (function() { - - var instanceUid = 0; - - function Slick(element, settings) { - - var _ = this, dataSettings; - - _.defaults = { - accessibility: true, - adaptiveHeight: false, - appendArrows: $(element), - appendDots: $(element), - arrows: true, - asNavFor: null, - prevArrow: '', - nextArrow: '', - autoplay: false, - autoplaySpeed: 3000, - centerMode: false, - centerPadding: '50px', - cssEase: 'ease', - customPaging: function(slider, i) { - return $('
- \ No newline at end of file + diff --git a/templates/404.html b/templates/404.html new file mode 100644 index 00000000..e69de29b diff --git a/templates/archive-product.html b/templates/archive-product.html new file mode 100644 index 00000000..54df5c16 --- /dev/null +++ b/templates/archive-product.html @@ -0,0 +1,5 @@ + + +
+ + diff --git a/templates/archive.html b/templates/archive.html new file mode 100644 index 00000000..9a5caad8 --- /dev/null +++ b/templates/archive.html @@ -0,0 +1,29 @@ + + + +
+ + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + diff --git a/templates/blank.html b/templates/blank.html new file mode 100644 index 00000000..3d3bd7cf --- /dev/null +++ b/templates/blank.html @@ -0,0 +1 @@ + diff --git a/templates/home.html b/templates/home.html new file mode 100644 index 00000000..b44cc5d4 --- /dev/null +++ b/templates/home.html @@ -0,0 +1,37 @@ + + + +
+ +

Mindblown: a blog about philosophy.

+ + + +
+ + + + + + + + + + + + + + + +
+ + + + + + + +
+ + + diff --git a/templates/index.html b/templates/index.html new file mode 100644 index 00000000..a662d267 --- /dev/null +++ b/templates/index.html @@ -0,0 +1,27 @@ + + + +
+ +
+ + + + + + + + + + + + + + + +
+ +
+ + + diff --git a/templates/page.html b/templates/page.html new file mode 100644 index 00000000..a7d4a363 --- /dev/null +++ b/templates/page.html @@ -0,0 +1,7 @@ + + + +
+ + + \ No newline at end of file diff --git a/templates/product-search-results.html b/templates/product-search-results.html new file mode 100644 index 00000000..7f5a74c5 --- /dev/null +++ b/templates/product-search-results.html @@ -0,0 +1,7 @@ + + +
+ +
+ + diff --git a/templates/search.html b/templates/search.html new file mode 100644 index 00000000..293e3749 --- /dev/null +++ b/templates/search.html @@ -0,0 +1,33 @@ + + + +
+ + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + diff --git a/templates/single-product.html b/templates/single-product.html new file mode 100644 index 00000000..aa382cef --- /dev/null +++ b/templates/single-product.html @@ -0,0 +1,5 @@ + + +
+ + diff --git a/templates/single.html b/templates/single.html new file mode 100644 index 00000000..1a2e30eb --- /dev/null +++ b/templates/single.html @@ -0,0 +1,9 @@ + + + +
+ +
+ + + diff --git a/templates/taxonomy-product_attribute.html b/templates/taxonomy-product_attribute.html new file mode 100644 index 00000000..54df5c16 --- /dev/null +++ b/templates/taxonomy-product_attribute.html @@ -0,0 +1,5 @@ + + +
+ + diff --git a/templates/taxonomy-product_cat.html b/templates/taxonomy-product_cat.html new file mode 100644 index 00000000..54df5c16 --- /dev/null +++ b/templates/taxonomy-product_cat.html @@ -0,0 +1,5 @@ + + +
+ + diff --git a/templates/taxonomy-product_tag.html b/templates/taxonomy-product_tag.html new file mode 100644 index 00000000..54df5c16 --- /dev/null +++ b/templates/taxonomy-product_tag.html @@ -0,0 +1,5 @@ + + +
+ + diff --git a/theme.json b/theme.json index 578d067a..09490293 100644 --- a/theme.json +++ b/theme.json @@ -73,7 +73,7 @@ "fontSizes": [ { "slug": "baseline", - "size": "17px" + "size": "16px" }, { "slug": "extra-small", @@ -121,6 +121,9 @@ "responsive": { "side-margin": "20px" }, + "animations": { + "length": "350ms" + }, "sizes": { "entry-title": { "width": "66%" @@ -153,5 +156,36 @@ "fontFamily": "var(--typography--font--default), sans-serif", "lineHeight": "var(--wp--custom--line-height--medium)" } - } + }, + "templateParts": [ + { + "area": "header", + "name": "header", + "title": "Header" + }, + { + "area": "footer", + "name": "footer", + "title": "Footer" + }, + { + "area": "uncategorized", + "name": "comments", + "title": "Comments" + }, + { + "area": "uncategorized", + "name": "post-meta", + "title": "Post Meta" + } + ], + "customTemplates": [ + { + "name": "404", + "postTypes": [ + "page" + ], + "title": "404" + } + ] } From 6ee606571c522616a9bb45a2b5b459f116f37061 Mon Sep 17 00:00:00 2001 From: Erik Golinelli Date: Wed, 8 Feb 2023 17:50:53 +0100 Subject: [PATCH 017/264] adds g fonts json list --- inc/third-party/fonts.json | 856 +++++++++++++++++++++++++++++++++++++ 1 file changed, 856 insertions(+) create mode 100644 inc/third-party/fonts.json diff --git a/inc/third-party/fonts.json b/inc/third-party/fonts.json new file mode 100644 index 00000000..cc8201ca --- /dev/null +++ b/inc/third-party/fonts.json @@ -0,0 +1,856 @@ +[ + "ABeeZee", + "Abel", + "Abhaya Libre", + "Abril Fatface", + "Aclonica", + "Acme", + "Actor", + "Adamina", + "Advent Pro", + "Aguafina Script", + "Akronim", + "Aladin", + "Aldrich", + "Alef", + "Alegreya", + "Alegreya SC", + "Alegreya Sans", + "Alegreya Sans SC", + "Alex Brush", + "Alfa Slab One", + "Alice", + "Alike", + "Alike Angular", + "Allan", + "Allerta", + "Allerta Stencil", + "Allura", + "Almendra", + "Almendra Display", + "Almendra SC", + "Amarante", + "Amaranth", + "Amatic SC", + "Amethysta", + "Amiko", + "Amiri", + "Amita", + "Anaheim", + "Andada", + "Andika", + "Angkor", + "Annie Use Your Telescope", + "Anonymous Pro", + "Antic", + "Antic Didone", + "Antic Slab", + "Anton", + "Arapey", + "Arbutus", + "Arbutus Slab", + "Architects Daughter", + "Archivo", + "Archivo Black", + "Archivo Narrow", + "Aref Ruqaa", + "Arima Madurai", + "Arimo", + "Arizonia", + "Armata", + "Arsenal", + "Artifika", + "Arvo", + "Arya", + "Asap", + "Asap Condensed", + "Asar", + "Asset", + "Assistant", + "Astloch", + "Asul", + "Athiti", + "Atma", + "Atomic Age", + "Aubrey", + "Audiowide", + "Autour One", + "Average", + "Average Sans", + "Averia Gruesa Libre", + "Averia Libre", + "Averia Sans Libre", + "Averia Serif Libre", + "Bad Script", + "Bahiana", + "Baloo", + "Baloo Bhai", + "Baloo Bhaijaan", + "Baloo Bhaina", + "Baloo Chettan", + "Baloo Da", + "Baloo Paaji", + "Baloo Tamma", + "Baloo Tammudu", + "Baloo Thambi", + "Balthazar", + "Bangers", + "Barlow", + "Barlow Condensed", + "Barlow Semi Condensed", + "Barrio", + "Basic", + "Battambang", + "Baumans", + "Bayon", + "Belgrano", + "Bellefair", + "Belleza", + "BenchNine", + "Bentham", + "Berkshire Swash", + "Bevan", + "Bigelow Rules", + "Bigshot One", + "Bilbo", + "Bilbo Swash Caps", + "BioRhyme", + "BioRhyme Expanded", + "Biryani", + "Bitter", + "Black Ops One", + "Bokor", + "Bonbon", + "Boogaloo", + "Bowlby One", + "Bowlby One SC", + "Brawler", + "Bree Serif", + "Bubblegum Sans", + "Bubbler One", + "Buda", + "Buenard", + "Bungee", + "Bungee Hairline", + "Bungee Inline", + "Bungee Outline", + "Bungee Shade", + "Butcherman", + "Butterfly Kids", + "Cabin", + "Cabin Condensed", + "Cabin Sketch", + "Caesar Dressing", + "Cagliostro", + "Cairo", + "Calligraffitti", + "Cambay", + "Cambo", + "Candal", + "Cantarell", + "Cantata One", + "Cantora One", + "Capriola", + "Cardo", + "Carme", + "Carrois Gothic", + "Carrois Gothic SC", + "Carter One", + "Catamaran", + "Caudex", + "Caveat", + "Caveat Brush", + "Cedarville Cursive", + "Ceviche One", + "Changa", + "Changa One", + "Chango", + "Chathura", + "Chau Philomene One", + "Chela One", + "Chelsea Market", + "Chenla", + "Cherry Cream Soda", + "Cherry Swash", + "Chewy", + "Chicle", + "Chivo", + "Chonburi", + "Cinzel", + "Cinzel Decorative", + "Clicker Script", + "Coda", + "Coda Caption", + "Codystar", + "Coiny", + "Combo", + "Comfortaa", + "Coming Soon", + "Concert One", + "Condiment", + "Content", + "Contrail One", + "Convergence", + "Cookie", + "Copse", + "Corben", + "Cormorant", + "Cormorant Garamond", + "Cormorant Infant", + "Cormorant SC", + "Cormorant Unicase", + "Cormorant Upright", + "Courgette", + "Cousine", + "Coustard", + "Covered By Your Grace", + "Crafty Girls", + "Creepster", + "Crete Round", + "Crimson Text", + "Croissant One", + "Crushed", + "Cuprum", + "Cutive", + "Cutive Mono", + "Damion", + "Dancing Script", + "Dangrek", + "David Libre", + "Dawning of a New Day", + "Days One", + "Dekko", + "Delius", + "Delius Swash Caps", + "Delius Unicase", + "Della Respira", + "Denk One", + "Devonshire", + "Dhurjati", + "Didact Gothic", + "Diplomata", + "Diplomata SC", + "Domine", + "Donegal One", + "Doppio One", + "Dorsa", + "Dosis", + "Dr Sugiyama", + "Duru Sans", + "Dynalight", + "EB Garamond", + "Eagle Lake", + "Eater", + "Economica", + "Eczar", + "El Messiri", + "Electrolize", + "Elsie", + "Elsie Swash Caps", + "Emblema One", + "Emilys Candy", + "Encode Sans", + "Encode Sans Condensed", + "Encode Sans Expanded", + "Encode Sans Semi Condensed", + "Encode Sans Semi Expanded", + "Engagement", + "Englebert", + "Enriqueta", + "Erica One", + "Esteban", + "Euphoria Script", + "Ewert", + "Exo", + "Exo 2", + "Expletus Sans", + "Fanwood Text", + "Farsan", + "Fascinate", + "Fascinate Inline", + "Faster One", + "Fasthand", + "Fauna One", + "Faustina", + "Federant", + "Federo", + "Felipa", + "Fenix", + "Finger Paint", + "Fira Mono", + "Fira Sans", + "Fira Sans Condensed", + "Fira Sans Extra Condensed", + "Fjalla One", + "Fjord One", + "Flamenco", + "Flavors", + "Fondamento", + "Fontdiner Swanky", + "Forum", + "Francois One", + "Frank Ruhl Libre", + "Freckle Face", + "Fredericka the Great", + "Fredoka One", + "Freehand", + "Fresca", + "Frijole", + "Fruktur", + "Fugaz One", + "GFS Didot", + "GFS Neohellenic", + "Gabriela", + "Gafata", + "Galada", + "Galdeano", + "Galindo", + "Gentium Basic", + "Gentium Book Basic", + "Geo", + "Geostar", + "Geostar Fill", + "Germania One", + "Gidugu", + "Gilda Display", + "Give You Glory", + "Glass Antiqua", + "Glegoo", + "Gloria Hallelujah", + "Goblin One", + "Gochi Hand", + "Gorditas", + "Goudy Bookletter 1911", + "Graduate", + "Grand Hotel", + "Gravitas One", + "Great Vibes", + "Griffy", + "Gruppo", + "Gudea", + "Gurajada", + "Habibi", + "Halant", + "Hammersmith One", + "Hanalei", + "Hanalei Fill", + "Handlee", + "Hanuman", + "Happy Monkey", + "Harmattan", + "Headland One", + "Heebo", + "Henny Penny", + "Herr Von Muellerhoff", + "Hind", + "Hind Guntur", + "Hind Madurai", + "Hind Siliguri", + "Hind Vadodara", + "Holtwood One SC", + "Homemade Apple", + "Homenaje", + "IM Fell DW Pica", + "IM Fell DW Pica SC", + "IM Fell Double Pica", + "IM Fell Double Pica SC", + "IM Fell English", + "IM Fell English SC", + "IM Fell French Canon", + "IM Fell French Canon SC", + "IM Fell Great Primer", + "IM Fell Great Primer SC", + "Iceberg", + "Iceland", + "Imprima", + "Inconsolata", + "Inder", + "Indie Flower", + "Inika", + "Inknut Antiqua", + "Irish Grover", + "Istok Web", + "Italiana", + "Italianno", + "Itim", + "Jacques Francois", + "Jacques Francois Shadow", + "Jaldi", + "Jim Nightshade", + "Jockey One", + "Jolly Lodger", + "Jomhuria", + "Josefin Sans", + "Josefin Slab", + "Joti One", + "Judson", + "Julee", + "Julius Sans One", + "Junge", + "Jura", + "Just Another Hand", + "Just Me Again Down Here", + "Kadwa", + "Kalam", + "Kameron", + "Kanit", + "Kantumruy", + "Karla", + "Karma", + "Katibeh", + "Kaushan Script", + "Kavivanar", + "Kavoon", + "Kdam Thmor", + "Keania One", + "Kelly Slab", + "Kenia", + "Khand", + "Khmer", + "Khula", + "Kite One", + "Knewave", + "Kotta One", + "Koulen", + "Kranky", + "Kreon", + "Kristi", + "Krona One", + "Kumar One", + "Kumar One Outline", + "Kurale", + "La Belle Aurore", + "Laila", + "Lakki Reddy", + "Lalezar", + "Lancelot", + "Lateef", + "Lato", + "League Script", + "Leckerli One", + "Ledger", + "Lekton", + "Lemon", + "Lemonada", + "Libre Barcode 128", + "Libre Barcode 128 Text", + "Libre Barcode 39", + "Libre Barcode 39 Extended", + "Libre Barcode 39 Extended Text", + "Libre Barcode 39 Text", + "Libre Baskerville", + "Libre Franklin", + "Life Savers", + "Lilita One", + "Lily Script One", + "Limelight", + "Linden Hill", + "Lobster", + "Lobster Two", + "Londrina Outline", + "Londrina Shadow", + "Londrina Sketch", + "Londrina Solid", + "Lora", + "Love Ya Like A Sister", + "Loved by the King", + "Lovers Quarrel", + "Luckiest Guy", + "Lusitana", + "Lustria", + "Macondo", + "Macondo Swash Caps", + "Mada", + "Magra", + "Maiden Orange", + "Maitree", + "Mako", + "Mallanna", + "Mandali", + "Manuale", + "Marcellus", + "Marcellus SC", + "Marck Script", + "Margarine", + "Marko One", + "Marmelad", + "Martel", + "Martel Sans", + "Marvel", + "Mate", + "Mate SC", + "Maven Pro", + "McLaren", + "Meddon", + "MedievalSharp", + "Medula One", + "Meera Inimai", + "Megrim", + "Meie Script", + "Merienda", + "Merienda One", + "Merriweather", + "Merriweather Sans", + "Metal", + "Metal Mania", + "Metamorphous", + "Metrophobic", + "Michroma", + "Milonga", + "Miltonian", + "Miltonian Tattoo", + "Mina", + "Miniver", + "Miriam Libre", + "Mirza", + "Miss Fajardose", + "Mitr", + "Modak", + "Modern Antiqua", + "Mogra", + "Molengo", + "Molle", + "Monda", + "Monofett", + "Monoton", + "Monsieur La Doulaise", + "Montaga", + "Montez", + "Montserrat", + "Montserrat Alternates", + "Montserrat Subrayada", + "Moul", + "Moulpali", + "Mountains of Christmas", + "Mouse Memoirs", + "Mr Bedfort", + "Mr Dafoe", + "Mr De Haviland", + "Mrs Saint Delafield", + "Mrs Sheppards", + "Mukta", + "Mukta Mahee", + "Mukta Malar", + "Mukta Vaani", + "Muli", + "Mystery Quest", + "NTR", + "Nanum Brush Script", + "Nanum Gothic", + "Nanum Gothic Coding", + "Nanum Myeongjo", + "Nanum Pen Script", + "Neucha", + "Neuton", + "New Rocker", + "News Cycle", + "Niconne", + "Nixie One", + "Nobile", + "Nokora", + "Norican", + "Nosifer", + "Nothing You Could Do", + "Noticia Text", + "Noto Sans", + "Noto Serif", + "Nova Cut", + "Nova Flat", + "Nova Mono", + "Nova Oval", + "Nova Round", + "Nova Script", + "Nova Slim", + "Nova Square", + "Numans", + "Nunito", + "Nunito Sans", + "Odor Mean Chey", + "Offside", + "Old Standard TT", + "Oldenburg", + "Oleo Script", + "Oleo Script Swash Caps", + "Open Sans", + "Open Sans Condensed", + "Oranienbaum", + "Orbitron", + "Oregano", + "Orienta", + "Original Surfer", + "Oswald", + "Over the Rainbow", + "Overlock", + "Overlock SC", + "Overpass", + "Overpass Mono", + "Ovo", + "Oxygen", + "Oxygen Mono", + "PT Mono", + "PT Sans", + "PT Sans Caption", + "PT Sans Narrow", + "PT Serif", + "PT Serif Caption", + "Pacifico", + "Padauk", + "Palanquin", + "Palanquin Dark", + "Pangolin", + "Paprika", + "Parisienne", + "Passero One", + "Passion One", + "Pathway Gothic One", + "Patrick Hand", + "Patrick Hand SC", + "Pattaya", + "Patua One", + "Pavanam", + "Paytone One", + "Peddana", + "Peralta", + "Permanent Marker", + "Petit Formal Script", + "Petrona", + "Philosopher", + "Piedra", + "Pinyon Script", + "Pirata One", + "Plaster", + "Play", + "Playball", + "Playfair Display", + "Playfair Display SC", + "Podkova", + "Poiret One", + "Poller One", + "Poly", + "Pompiere", + "Pontano Sans", + "Poppins", + "Port Lligat Sans", + "Port Lligat Slab", + "Pragati Narrow", + "Prata", + "Preahvihear", + "Press Start 2P", + "Pridi", + "Princess Sofia", + "Prociono", + "Prompt", + "Prosto One", + "Proza Libre", + "Puritan", + "Purple Purse", + "Quando", + "Quantico", + "Quattrocento", + "Quattrocento Sans", + "Questrial", + "Quicksand", + "Quintessential", + "Qwigley", + "Racing Sans One", + "Radley", + "Rajdhani", + "Rakkas", + "Raleway", + "Raleway Dots", + "Ramabhadra", + "Ramaraja", + "Rambla", + "Rammetto One", + "Ranchers", + "Rancho", + "Ranga", + "Rasa", + "Rationale", + "Ravi Prakash", + "Redressed", + "Reem Kufi", + "Reenie Beanie", + "Revalia", + "Rhodium Libre", + "Ribeye", + "Ribeye Marrow", + "Righteous", + "Risque", + "Roboto", + "Roboto Condensed", + "Roboto Mono", + "Roboto Slab", + "Rochester", + "Rock Salt", + "Rokkitt", + "Romanesco", + "Ropa Sans", + "Rosario", + "Rosarivo", + "Rouge Script", + "Rozha One", + "Rubik", + "Rubik Mono One", + "Ruda", + "Rufina", + "Ruge Boogie", + "Ruluko", + "Rum Raisin", + "Ruslan Display", + "Russo One", + "Ruthie", + "Rye", + "Sacramento", + "Sahitya", + "Sail", + "Saira", + "Saira Condensed", + "Saira Extra Condensed", + "Saira Semi Condensed", + "Salsa", + "Sanchez", + "Sancreek", + "Sansita", + "Sarala", + "Sarina", + "Sarpanch", + "Satisfy", + "Scada", + "Scheherazade", + "Schoolbell", + "Scope One", + "Seaweed Script", + "Secular One", + "Sedgwick Ave", + "Sedgwick Ave Display", + "Sevillana", + "Seymour One", + "Shadows Into Light", + "Shadows Into Light Two", + "Shanti", + "Share", + "Share Tech", + "Share Tech Mono", + "Shojumaru", + "Short Stack", + "Shrikhand", + "Siemreap", + "Sigmar One", + "Signika", + "Signika Negative", + "Simonetta", + "Sintony", + "Sirin Stencil", + "Six Caps", + "Skranji", + "Slabo 13px", + "Slabo 27px", + "Slackey", + "Smokum", + "Smythe", + "Sniglet", + "Snippet", + "Snowburst One", + "Sofadi One", + "Sofia", + "Sonsie One", + "Sorts Mill Goudy", + "Source Code Pro", + "Source Sans Pro", + "Source Serif Pro", + "Space Mono", + "Special Elite", + "Spectral", + "Spectral SC", + "Spicy Rice", + "Spinnaker", + "Spirax", + "Squada One", + "Sree Krushnadevaraya", + "Sriracha", + "Stalemate", + "Stalinist One", + "Stardos Stencil", + "Stint Ultra Condensed", + "Stint Ultra Expanded", + "Stoke", + "Strait", + "Sue Ellen Francisco", + "Suez One", + "Sumana", + "Sunshiney", + "Supermercado One", + "Sura", + "Suranna", + "Suravaram", + "Suwannaphum", + "Swanky and Moo Moo", + "Syncopate", + "Tangerine", + "Taprom", + "Tauri", + "Taviraj", + "Teko", + "Telex", + "Tenali Ramakrishna", + "Tenor Sans", + "Text Me One", + "The Girl Next Door", + "Tienne", + "Tillana", + "Timmana", + "Tinos", + "Titan One", + "Titillium Web", + "Trade Winds", + "Trirong", + "Trocchi", + "Trochut", + "Trykker", + "Tulpen One", + "Ubuntu", + "Ubuntu Condensed", + "Ubuntu Mono", + "Ultra", + "Uncial Antiqua", + "Underdog", + "Unica One", + "UnifrakturCook", + "UnifrakturMaguntia", + "Unkempt", + "Unlock", + "Unna", + "VT323", + "Vampiro One", + "Varela", + "Varela Round", + "Vast Shadow", + "Vesper Libre", + "Vibur", + "Vidaloka", + "Viga", + "Voces", + "Volkhov", + "Vollkorn", + "Vollkorn SC", + "Voltaire", + "Waiting for the Sunrise", + "Wallpoet", + "Walter Turncoat", + "Warnes", + "Wellfleet", + "Wendy One", + "Wire One", + "Work Sans", + "Yanone Kaffeesatz", + "Yantramanav", + "Yatra One", + "Yellowtail", + "Yeseva One", + "Yesteryear", + "Yrsa", + "Zeyada", + "Zilla Slab", + "Zilla Slab Highlight" +] From 7f341a1825c598f2b7aeffba3f766088385a95a1 Mon Sep 17 00:00:00 2001 From: Erik Golinelli Date: Wed, 8 Feb 2023 17:51:23 +0100 Subject: [PATCH 018/264] header sticky position --- parts/header.html | 4 ++-- src/styles/components/_header.scss | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/parts/header.html b/parts/header.html index 129747c5..84fc7214 100644 --- a/parts/header.html +++ b/parts/header.html @@ -1,7 +1,7 @@
-
+
-
+
\ No newline at end of file diff --git a/src/styles/components/_header.scss b/src/styles/components/_header.scss index 4d71f293..17b48b42 100644 --- a/src/styles/components/_header.scss +++ b/src/styles/components/_header.scss @@ -1,5 +1,5 @@ header.wp-block-template-part { - position: fixed; + position: sticky; z-index: 1000; width: 100%; top: 0; From 2b2136691fb5bfc86dd7e910a429448ae0c3e9df Mon Sep 17 00:00:00 2001 From: Erik Golinelli Date: Thu, 9 Feb 2023 13:06:36 +0100 Subject: [PATCH 019/264] enables border style and some other cool features --- theme.json | 183 +++++++++++++++++++++++++++++------------------------ 1 file changed, 101 insertions(+), 82 deletions(-) diff --git a/theme.json b/theme.json index 09490293..6cb48c28 100644 --- a/theme.json +++ b/theme.json @@ -1,33 +1,64 @@ { - "$schema": "https://schemas.wp.org/trunk/theme.json", - "version": 2, + "$schema": "https://schemas.wp.org/wp/6.1/theme.json", + "customTemplates": [ + { + "name": "404", + "postTypes": [ + "page" + ], + "title": "404" + } + ], "settings": { + "appearanceTools": true, "border": { - "radius": false, - "color": false, - "style": false, - "width": false + "color": true, + "radius": true, + "style": true, + "width": true }, "color": { + "background": true, "custom": true, "customDuotone": true, "customGradient": true, - "duotone": [], - "gradients": [], - "link": false, - "text": true, - "background": true, + "defaultDuotone": true, "defaultGradients": true, - "defaultPalette": false + "defaultPalette": false, + "gradients": [], + "link": true, + "text": true + }, + "custom": { + "animations": { + "length": "350ms" + }, + "line-height": { + "large": 2.2, + "medium": 1.7, + "small": 1.2 + }, + "responsive": { + "side-margin": "var(--wp--preset--spacing--50)" + }, + "sizes": { + "entry-title": { + "width": "66%" + } + } }, "layout": { "contentSize": "1000px", "wideSize": "1600px" }, "spacing": { - "margin": true, - "padding": true, - "blockGap": true, + "spacingScale": { + "increment": 2, + "mediumStep": 1, + "operator": "*", + "steps": 7, + "unit": "rem" + }, "units": [ "%", "px", @@ -35,100 +66,74 @@ "rem", "vh", "vw" - ], - "spacingScale": { - "operator": "*", - "increment": 2, - "steps": 7, - "mediumStep": 1, - "unit": "rem" - } + ] }, "typography": { "customFontSize": true, "dropCap": true, - "fontStyle": true, - "fontWeight": true, - "letterSpacing": true, - "textDecoration": true, - "textTransform": true, - "lineHeight": true, "fontFamilies": [ { "fontFamily": "var(--typography--font--title)", - "slug": "title", - "name": "Title" + "name": "Title", + "slug": "title" }, { "fontFamily": "var(--typography--font--default)", - "slug": "default", - "name": "Default" + "name": "Default", + "slug": "default" }, { "fontFamily": "monospace, serif", - "slug": "monospace", - "name": "Monospace" + "name": "Monospace", + "slug": "monospace" } ], "fontSizes": [ { - "slug": "baseline", - "size": "16px" + "size": "16px", + "slug": "baseline" }, { - "slug": "extra-small", + "name": "Extra small", "size": "0.7rem", - "name": "Extra small" + "slug": "extra-small" }, { - "slug": "small", + "name": "Small", "size": "0.9rem", - "name": "Small" + "slug": "small" }, { - "slug": "medium", + "name": "Medium", "size": "1rem", - "name": "Medium" + "slug": "medium" }, { - "slug": "large", + "name": "Large", "size": "1.4rem", - "name": "Large" + "slug": "large" }, { - "slug": "extra-large", + "name": "Extra large", "size": "2rem", - "name": "Extra large" + "slug": "extra-large" }, { - "slug": "XX-large", + "name": "Extra large", "size": "2.6rem", - "name": "Extra large" + "slug": "XX-large" }, { - "slug": "XXX-large", + "name": "Extra large", "size": "2.6rem", - "name": "Extra large" + "slug": "XXX-large" } - ] - }, - "custom": { - "line-height": { - "small": 1.2, - "medium": 1.7, - "large": 2.2 - }, - "responsive": { - "side-margin": "20px" - }, - "animations": { - "length": "350ms" - }, - "sizes": { - "entry-title": { - "width": "66%" - } - } + ], + "fontStyle": true, + "fontWeight": true, + "letterSpacing": true, + "textDecoration": true, + "textTransform": true } }, "styles": { @@ -139,21 +144,43 @@ "text": "var(--wp--preset--color--white)" }, "typography": { - "fontSize": "var(--wp--preset--font-size--medium)", - "fontFamily": "var(--wp--preset--font-family--title)" + "fontFamily": "var(--wp--preset--font-family--title)", + "fontSize": "var(--wp--preset--font-size--medium)" } } }, "color": { + "background": "#fdf0e9", "text": "var(--color--text)" }, + "elements": { + "button": { + "color": { + "background": "#ef6d58", + "text": "var:preset|color|white" + }, + "typography": { + "fontSize": "1.4rem", + "fontStyle": "normal", + "fontWeight": "700" + } + }, + "heading": { + "color": { + "text": "#28293e" + }, + "typography": { + "fontFamily": "var(--typography--font--title)" + } + } + }, "spacing": { "blockGap": "2rem" }, "typography": { + "fontFamily": "var(--typography--font--default), sans-serif", "fontSize": "var(--wp--preset--font-size--baseline)", "fontWeight": "var(--typography--font--default--regular)", - "fontFamily": "var(--typography--font--default), sans-serif", "lineHeight": "var(--wp--custom--line-height--medium)" } }, @@ -179,13 +206,5 @@ "title": "Post Meta" } ], - "customTemplates": [ - { - "name": "404", - "postTypes": [ - "page" - ], - "title": "404" - } - ] + "version": 2 } From 272e03ebf436b6e69692ab07a783b05873422066 Mon Sep 17 00:00:00 2001 From: Erik Golinelli Date: Thu, 9 Feb 2023 20:18:28 +0100 Subject: [PATCH 020/264] a js module that fetch the g font api then return the fonts sorted by popularity --- bin/gfontsList.mjs | 58 + inc/customizer.php | 6 +- inc/third-party/fonts.json | 12248 ++++++++++++++++++++++++++++++++--- src/scripts/user/index.js | 0 4 files changed, 11453 insertions(+), 859 deletions(-) create mode 100644 bin/gfontsList.mjs delete mode 100644 src/scripts/user/index.js diff --git a/bin/gfontsList.mjs b/bin/gfontsList.mjs new file mode 100644 index 00000000..f6633ad2 --- /dev/null +++ b/bin/gfontsList.mjs @@ -0,0 +1,58 @@ +import fs from 'fs' + +const ApiUrl = 'https://www.googleapis.com/webfonts/v1/webfonts' +const destination = './inc/third-party/fonts.json' +const apiParams = { + key: 'your key', // here the api key https://gist.github.com/jeremykenedy/bce044ce26fe0f90559a + sort: 'popularity' +} + +async function getFontSet(params) { + let fonts = []; + /* build the query url */ + const req = new URLSearchParams(params); + const apiRequest = ApiUrl + '?' + req.toString(); + /* fetch the api and then return the raw data */ + await fetch(apiRequest) + .then((response) => { + return response.json() + }) + .then((data) => { + console.log('Fetch for new font successfully') + console.log(data.items) + + /* parse and store the data that we need */ + fonts = data.items.map(item => { return { + [item.family]: item.variants} + } ) + + console.log(fonts) + + const generatedJson = JSON.stringify(fonts, null, 2) + + console.log('Writing into ' + destination) + + fs.writeFileSync( + destination, + generatedJson, { + encoding: 'utf8' + }, (err, data) => { + if (err) { + return err; + } + console.log(data) + return true + }) + }) + .catch((err) => { + console.log(err) + return err + }); + + return false +} + +/** Create the colorset then output the result */ +await getFontSet(apiParams) + +process.exit(0) diff --git a/inc/customizer.php b/inc/customizer.php index 8b42ed20..50ed753b 100644 --- a/inc/customizer.php +++ b/inc/customizer.php @@ -71,15 +71,13 @@ function modul_r_get_theme_color($theme_mod_color, $default_color = "#FF0000") { function modul_r_get_available_fonts() { $font_json = file_get_contents( get_template_directory() . '/inc/third-party/fonts.json' ); $font_set = array(); - foreach ( json_decode( $font_json ) as $font ) { - $font_set[ $font ] = $font; + foreach ( json_decode( $font_json ) as $font_name => $font_weights ) { + $font_set[ key($font_weights) ] = key($font_weights); } return $font_set; } - - function modul_r_add_font_preset($label, $group, $wp_customize) { $data_title = $GLOBALS['modul_r_defaults']['customizer_options'][ 'font_family_' . $label ]; foreach ($data_title as $setting) { diff --git a/inc/third-party/fonts.json b/inc/third-party/fonts.json index cc8201ca..be933c3d 100644 --- a/inc/third-party/fonts.json +++ b/inc/third-party/fonts.json @@ -1,856 +1,11394 @@ [ - "ABeeZee", - "Abel", - "Abhaya Libre", - "Abril Fatface", - "Aclonica", - "Acme", - "Actor", - "Adamina", - "Advent Pro", - "Aguafina Script", - "Akronim", - "Aladin", - "Aldrich", - "Alef", - "Alegreya", - "Alegreya SC", - "Alegreya Sans", - "Alegreya Sans SC", - "Alex Brush", - "Alfa Slab One", - "Alice", - "Alike", - "Alike Angular", - "Allan", - "Allerta", - "Allerta Stencil", - "Allura", - "Almendra", - "Almendra Display", - "Almendra SC", - "Amarante", - "Amaranth", - "Amatic SC", - "Amethysta", - "Amiko", - "Amiri", - "Amita", - "Anaheim", - "Andada", - "Andika", - "Angkor", - "Annie Use Your Telescope", - "Anonymous Pro", - "Antic", - "Antic Didone", - "Antic Slab", - "Anton", - "Arapey", - "Arbutus", - "Arbutus Slab", - "Architects Daughter", - "Archivo", - "Archivo Black", - "Archivo Narrow", - "Aref Ruqaa", - "Arima Madurai", - "Arimo", - "Arizonia", - "Armata", - "Arsenal", - "Artifika", - "Arvo", - "Arya", - "Asap", - "Asap Condensed", - "Asar", - "Asset", - "Assistant", - "Astloch", - "Asul", - "Athiti", - "Atma", - "Atomic Age", - "Aubrey", - "Audiowide", - "Autour One", - "Average", - "Average Sans", - "Averia Gruesa Libre", - "Averia Libre", - "Averia Sans Libre", - "Averia Serif Libre", - "Bad Script", - "Bahiana", - "Baloo", - "Baloo Bhai", - "Baloo Bhaijaan", - "Baloo Bhaina", - "Baloo Chettan", - "Baloo Da", - "Baloo Paaji", - "Baloo Tamma", - "Baloo Tammudu", - "Baloo Thambi", - "Balthazar", - "Bangers", - "Barlow", - "Barlow Condensed", - "Barlow Semi Condensed", - "Barrio", - "Basic", - "Battambang", - "Baumans", - "Bayon", - "Belgrano", - "Bellefair", - "Belleza", - "BenchNine", - "Bentham", - "Berkshire Swash", - "Bevan", - "Bigelow Rules", - "Bigshot One", - "Bilbo", - "Bilbo Swash Caps", - "BioRhyme", - "BioRhyme Expanded", - "Biryani", - "Bitter", - "Black Ops One", - "Bokor", - "Bonbon", - "Boogaloo", - "Bowlby One", - "Bowlby One SC", - "Brawler", - "Bree Serif", - "Bubblegum Sans", - "Bubbler One", - "Buda", - "Buenard", - "Bungee", - "Bungee Hairline", - "Bungee Inline", - "Bungee Outline", - "Bungee Shade", - "Butcherman", - "Butterfly Kids", - "Cabin", - "Cabin Condensed", - "Cabin Sketch", - "Caesar Dressing", - "Cagliostro", - "Cairo", - "Calligraffitti", - "Cambay", - "Cambo", - "Candal", - "Cantarell", - "Cantata One", - "Cantora One", - "Capriola", - "Cardo", - "Carme", - "Carrois Gothic", - "Carrois Gothic SC", - "Carter One", - "Catamaran", - "Caudex", - "Caveat", - "Caveat Brush", - "Cedarville Cursive", - "Ceviche One", - "Changa", - "Changa One", - "Chango", - "Chathura", - "Chau Philomene One", - "Chela One", - "Chelsea Market", - "Chenla", - "Cherry Cream Soda", - "Cherry Swash", - "Chewy", - "Chicle", - "Chivo", - "Chonburi", - "Cinzel", - "Cinzel Decorative", - "Clicker Script", - "Coda", - "Coda Caption", - "Codystar", - "Coiny", - "Combo", - "Comfortaa", - "Coming Soon", - "Concert One", - "Condiment", - "Content", - "Contrail One", - "Convergence", - "Cookie", - "Copse", - "Corben", - "Cormorant", - "Cormorant Garamond", - "Cormorant Infant", - "Cormorant SC", - "Cormorant Unicase", - "Cormorant Upright", - "Courgette", - "Cousine", - "Coustard", - "Covered By Your Grace", - "Crafty Girls", - "Creepster", - "Crete Round", - "Crimson Text", - "Croissant One", - "Crushed", - "Cuprum", - "Cutive", - "Cutive Mono", - "Damion", - "Dancing Script", - "Dangrek", - "David Libre", - "Dawning of a New Day", - "Days One", - "Dekko", - "Delius", - "Delius Swash Caps", - "Delius Unicase", - "Della Respira", - "Denk One", - "Devonshire", - "Dhurjati", - "Didact Gothic", - "Diplomata", - "Diplomata SC", - "Domine", - "Donegal One", - "Doppio One", - "Dorsa", - "Dosis", - "Dr Sugiyama", - "Duru Sans", - "Dynalight", - "EB Garamond", - "Eagle Lake", - "Eater", - "Economica", - "Eczar", - "El Messiri", - "Electrolize", - "Elsie", - "Elsie Swash Caps", - "Emblema One", - "Emilys Candy", - "Encode Sans", - "Encode Sans Condensed", - "Encode Sans Expanded", - "Encode Sans Semi Condensed", - "Encode Sans Semi Expanded", - "Engagement", - "Englebert", - "Enriqueta", - "Erica One", - "Esteban", - "Euphoria Script", - "Ewert", - "Exo", - "Exo 2", - "Expletus Sans", - "Fanwood Text", - "Farsan", - "Fascinate", - "Fascinate Inline", - "Faster One", - "Fasthand", - "Fauna One", - "Faustina", - "Federant", - "Federo", - "Felipa", - "Fenix", - "Finger Paint", - "Fira Mono", - "Fira Sans", - "Fira Sans Condensed", - "Fira Sans Extra Condensed", - "Fjalla One", - "Fjord One", - "Flamenco", - "Flavors", - "Fondamento", - "Fontdiner Swanky", - "Forum", - "Francois One", - "Frank Ruhl Libre", - "Freckle Face", - "Fredericka the Great", - "Fredoka One", - "Freehand", - "Fresca", - "Frijole", - "Fruktur", - "Fugaz One", - "GFS Didot", - "GFS Neohellenic", - "Gabriela", - "Gafata", - "Galada", - "Galdeano", - "Galindo", - "Gentium Basic", - "Gentium Book Basic", - "Geo", - "Geostar", - "Geostar Fill", - "Germania One", - "Gidugu", - "Gilda Display", - "Give You Glory", - "Glass Antiqua", - "Glegoo", - "Gloria Hallelujah", - "Goblin One", - "Gochi Hand", - "Gorditas", - "Goudy Bookletter 1911", - "Graduate", - "Grand Hotel", - "Gravitas One", - "Great Vibes", - "Griffy", - "Gruppo", - "Gudea", - "Gurajada", - "Habibi", - "Halant", - "Hammersmith One", - "Hanalei", - "Hanalei Fill", - "Handlee", - "Hanuman", - "Happy Monkey", - "Harmattan", - "Headland One", - "Heebo", - "Henny Penny", - "Herr Von Muellerhoff", - "Hind", - "Hind Guntur", - "Hind Madurai", - "Hind Siliguri", - "Hind Vadodara", - "Holtwood One SC", - "Homemade Apple", - "Homenaje", - "IM Fell DW Pica", - "IM Fell DW Pica SC", - "IM Fell Double Pica", - "IM Fell Double Pica SC", - "IM Fell English", - "IM Fell English SC", - "IM Fell French Canon", - "IM Fell French Canon SC", - "IM Fell Great Primer", - "IM Fell Great Primer SC", - "Iceberg", - "Iceland", - "Imprima", - "Inconsolata", - "Inder", - "Indie Flower", - "Inika", - "Inknut Antiqua", - "Irish Grover", - "Istok Web", - "Italiana", - "Italianno", - "Itim", - "Jacques Francois", - "Jacques Francois Shadow", - "Jaldi", - "Jim Nightshade", - "Jockey One", - "Jolly Lodger", - "Jomhuria", - "Josefin Sans", - "Josefin Slab", - "Joti One", - "Judson", - "Julee", - "Julius Sans One", - "Junge", - "Jura", - "Just Another Hand", - "Just Me Again Down Here", - "Kadwa", - "Kalam", - "Kameron", - "Kanit", - "Kantumruy", - "Karla", - "Karma", - "Katibeh", - "Kaushan Script", - "Kavivanar", - "Kavoon", - "Kdam Thmor", - "Keania One", - "Kelly Slab", - "Kenia", - "Khand", - "Khmer", - "Khula", - "Kite One", - "Knewave", - "Kotta One", - "Koulen", - "Kranky", - "Kreon", - "Kristi", - "Krona One", - "Kumar One", - "Kumar One Outline", - "Kurale", - "La Belle Aurore", - "Laila", - "Lakki Reddy", - "Lalezar", - "Lancelot", - "Lateef", - "Lato", - "League Script", - "Leckerli One", - "Ledger", - "Lekton", - "Lemon", - "Lemonada", - "Libre Barcode 128", - "Libre Barcode 128 Text", - "Libre Barcode 39", - "Libre Barcode 39 Extended", - "Libre Barcode 39 Extended Text", - "Libre Barcode 39 Text", - "Libre Baskerville", - "Libre Franklin", - "Life Savers", - "Lilita One", - "Lily Script One", - "Limelight", - "Linden Hill", - "Lobster", - "Lobster Two", - "Londrina Outline", - "Londrina Shadow", - "Londrina Sketch", - "Londrina Solid", - "Lora", - "Love Ya Like A Sister", - "Loved by the King", - "Lovers Quarrel", - "Luckiest Guy", - "Lusitana", - "Lustria", - "Macondo", - "Macondo Swash Caps", - "Mada", - "Magra", - "Maiden Orange", - "Maitree", - "Mako", - "Mallanna", - "Mandali", - "Manuale", - "Marcellus", - "Marcellus SC", - "Marck Script", - "Margarine", - "Marko One", - "Marmelad", - "Martel", - "Martel Sans", - "Marvel", - "Mate", - "Mate SC", - "Maven Pro", - "McLaren", - "Meddon", - "MedievalSharp", - "Medula One", - "Meera Inimai", - "Megrim", - "Meie Script", - "Merienda", - "Merienda One", - "Merriweather", - "Merriweather Sans", - "Metal", - "Metal Mania", - "Metamorphous", - "Metrophobic", - "Michroma", - "Milonga", - "Miltonian", - "Miltonian Tattoo", - "Mina", - "Miniver", - "Miriam Libre", - "Mirza", - "Miss Fajardose", - "Mitr", - "Modak", - "Modern Antiqua", - "Mogra", - "Molengo", - "Molle", - "Monda", - "Monofett", - "Monoton", - "Monsieur La Doulaise", - "Montaga", - "Montez", - "Montserrat", - "Montserrat Alternates", - "Montserrat Subrayada", - "Moul", - "Moulpali", - "Mountains of Christmas", - "Mouse Memoirs", - "Mr Bedfort", - "Mr Dafoe", - "Mr De Haviland", - "Mrs Saint Delafield", - "Mrs Sheppards", - "Mukta", - "Mukta Mahee", - "Mukta Malar", - "Mukta Vaani", - "Muli", - "Mystery Quest", - "NTR", - "Nanum Brush Script", - "Nanum Gothic", - "Nanum Gothic Coding", - "Nanum Myeongjo", - "Nanum Pen Script", - "Neucha", - "Neuton", - "New Rocker", - "News Cycle", - "Niconne", - "Nixie One", - "Nobile", - "Nokora", - "Norican", - "Nosifer", - "Nothing You Could Do", - "Noticia Text", - "Noto Sans", - "Noto Serif", - "Nova Cut", - "Nova Flat", - "Nova Mono", - "Nova Oval", - "Nova Round", - "Nova Script", - "Nova Slim", - "Nova Square", - "Numans", - "Nunito", - "Nunito Sans", - "Odor Mean Chey", - "Offside", - "Old Standard TT", - "Oldenburg", - "Oleo Script", - "Oleo Script Swash Caps", - "Open Sans", - "Open Sans Condensed", - "Oranienbaum", - "Orbitron", - "Oregano", - "Orienta", - "Original Surfer", - "Oswald", - "Over the Rainbow", - "Overlock", - "Overlock SC", - "Overpass", - "Overpass Mono", - "Ovo", - "Oxygen", - "Oxygen Mono", - "PT Mono", - "PT Sans", - "PT Sans Caption", - "PT Sans Narrow", - "PT Serif", - "PT Serif Caption", - "Pacifico", - "Padauk", - "Palanquin", - "Palanquin Dark", - "Pangolin", - "Paprika", - "Parisienne", - "Passero One", - "Passion One", - "Pathway Gothic One", - "Patrick Hand", - "Patrick Hand SC", - "Pattaya", - "Patua One", - "Pavanam", - "Paytone One", - "Peddana", - "Peralta", - "Permanent Marker", - "Petit Formal Script", - "Petrona", - "Philosopher", - "Piedra", - "Pinyon Script", - "Pirata One", - "Plaster", - "Play", - "Playball", - "Playfair Display", - "Playfair Display SC", - "Podkova", - "Poiret One", - "Poller One", - "Poly", - "Pompiere", - "Pontano Sans", - "Poppins", - "Port Lligat Sans", - "Port Lligat Slab", - "Pragati Narrow", - "Prata", - "Preahvihear", - "Press Start 2P", - "Pridi", - "Princess Sofia", - "Prociono", - "Prompt", - "Prosto One", - "Proza Libre", - "Puritan", - "Purple Purse", - "Quando", - "Quantico", - "Quattrocento", - "Quattrocento Sans", - "Questrial", - "Quicksand", - "Quintessential", - "Qwigley", - "Racing Sans One", - "Radley", - "Rajdhani", - "Rakkas", - "Raleway", - "Raleway Dots", - "Ramabhadra", - "Ramaraja", - "Rambla", - "Rammetto One", - "Ranchers", - "Rancho", - "Ranga", - "Rasa", - "Rationale", - "Ravi Prakash", - "Redressed", - "Reem Kufi", - "Reenie Beanie", - "Revalia", - "Rhodium Libre", - "Ribeye", - "Ribeye Marrow", - "Righteous", - "Risque", - "Roboto", - "Roboto Condensed", - "Roboto Mono", - "Roboto Slab", - "Rochester", - "Rock Salt", - "Rokkitt", - "Romanesco", - "Ropa Sans", - "Rosario", - "Rosarivo", - "Rouge Script", - "Rozha One", - "Rubik", - "Rubik Mono One", - "Ruda", - "Rufina", - "Ruge Boogie", - "Ruluko", - "Rum Raisin", - "Ruslan Display", - "Russo One", - "Ruthie", - "Rye", - "Sacramento", - "Sahitya", - "Sail", - "Saira", - "Saira Condensed", - "Saira Extra Condensed", - "Saira Semi Condensed", - "Salsa", - "Sanchez", - "Sancreek", - "Sansita", - "Sarala", - "Sarina", - "Sarpanch", - "Satisfy", - "Scada", - "Scheherazade", - "Schoolbell", - "Scope One", - "Seaweed Script", - "Secular One", - "Sedgwick Ave", - "Sedgwick Ave Display", - "Sevillana", - "Seymour One", - "Shadows Into Light", - "Shadows Into Light Two", - "Shanti", - "Share", - "Share Tech", - "Share Tech Mono", - "Shojumaru", - "Short Stack", - "Shrikhand", - "Siemreap", - "Sigmar One", - "Signika", - "Signika Negative", - "Simonetta", - "Sintony", - "Sirin Stencil", - "Six Caps", - "Skranji", - "Slabo 13px", - "Slabo 27px", - "Slackey", - "Smokum", - "Smythe", - "Sniglet", - "Snippet", - "Snowburst One", - "Sofadi One", - "Sofia", - "Sonsie One", - "Sorts Mill Goudy", - "Source Code Pro", - "Source Sans Pro", - "Source Serif Pro", - "Space Mono", - "Special Elite", - "Spectral", - "Spectral SC", - "Spicy Rice", - "Spinnaker", - "Spirax", - "Squada One", - "Sree Krushnadevaraya", - "Sriracha", - "Stalemate", - "Stalinist One", - "Stardos Stencil", - "Stint Ultra Condensed", - "Stint Ultra Expanded", - "Stoke", - "Strait", - "Sue Ellen Francisco", - "Suez One", - "Sumana", - "Sunshiney", - "Supermercado One", - "Sura", - "Suranna", - "Suravaram", - "Suwannaphum", - "Swanky and Moo Moo", - "Syncopate", - "Tangerine", - "Taprom", - "Tauri", - "Taviraj", - "Teko", - "Telex", - "Tenali Ramakrishna", - "Tenor Sans", - "Text Me One", - "The Girl Next Door", - "Tienne", - "Tillana", - "Timmana", - "Tinos", - "Titan One", - "Titillium Web", - "Trade Winds", - "Trirong", - "Trocchi", - "Trochut", - "Trykker", - "Tulpen One", - "Ubuntu", - "Ubuntu Condensed", - "Ubuntu Mono", - "Ultra", - "Uncial Antiqua", - "Underdog", - "Unica One", - "UnifrakturCook", - "UnifrakturMaguntia", - "Unkempt", - "Unlock", - "Unna", - "VT323", - "Vampiro One", - "Varela", - "Varela Round", - "Vast Shadow", - "Vesper Libre", - "Vibur", - "Vidaloka", - "Viga", - "Voces", - "Volkhov", - "Vollkorn", - "Vollkorn SC", - "Voltaire", - "Waiting for the Sunrise", - "Wallpoet", - "Walter Turncoat", - "Warnes", - "Wellfleet", - "Wendy One", - "Wire One", - "Work Sans", - "Yanone Kaffeesatz", - "Yantramanav", - "Yatra One", - "Yellowtail", - "Yeseva One", - "Yesteryear", - "Yrsa", - "Zeyada", - "Zilla Slab", - "Zilla Slab Highlight" -] + { + "Roboto": [ + "100", + "100italic", + "300", + "300italic", + "regular", + "italic", + "500", + "500italic", + "700", + "700italic", + "900", + "900italic" + ] + }, + { + "Open Sans": [ + "300", + "regular", + "500", + "600", + "700", + "800", + "300italic", + "italic", + "500italic", + "600italic", + "700italic", + "800italic" + ] + }, + { + "Noto Sans JP": [ + "100", + "300", + "regular", + "500", + "700", + "900" + ] + }, + { + "Montserrat": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900", + "100italic", + "200italic", + "300italic", + "italic", + "500italic", + "600italic", + "700italic", + "800italic", + "900italic" + ] + }, + { + "Lato": [ + "100", + "100italic", + "300", + "300italic", + "regular", + "italic", + "700", + "700italic", + "900", + "900italic" + ] + }, + { + "Poppins": [ + "100", + "100italic", + "200", + "200italic", + "300", + "300italic", + "regular", + "italic", + "500", + "500italic", + "600", + "600italic", + "700", + "700italic", + "800", + "800italic", + "900", + "900italic" + ] + }, + { + "Roboto Condensed": [ + "300", + "300italic", + "regular", + "italic", + "700", + "700italic" + ] + }, + { + "Source Sans Pro": [ + "200", + "200italic", + "300", + "300italic", + "regular", + "italic", + "600", + "600italic", + "700", + "700italic", + "900", + "900italic" + ] + }, + { + "Oswald": [ + "200", + "300", + "regular", + "500", + "600", + "700" + ] + }, + { + "Roboto Mono": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "100italic", + "200italic", + "300italic", + "italic", + "500italic", + "600italic", + "700italic" + ] + }, + { + "Inter": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Raleway": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900", + "100italic", + "200italic", + "300italic", + "italic", + "500italic", + "600italic", + "700italic", + "800italic", + "900italic" + ] + }, + { + "Noto Sans": [ + "100", + "100italic", + "200", + "200italic", + "300", + "300italic", + "regular", + "italic", + "500", + "500italic", + "600", + "600italic", + "700", + "700italic", + "800", + "800italic", + "900", + "900italic" + ] + }, + { + "Ubuntu": [ + "300", + "300italic", + "regular", + "italic", + "500", + "500italic", + "700", + "700italic" + ] + }, + { + "Roboto Slab": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Nunito": [ + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900", + "200italic", + "300italic", + "italic", + "500italic", + "600italic", + "700italic", + "800italic", + "900italic" + ] + }, + { + "Playfair Display": [ + "regular", + "500", + "600", + "700", + "800", + "900", + "italic", + "500italic", + "600italic", + "700italic", + "800italic", + "900italic" + ] + }, + { + "Merriweather": [ + "300", + "300italic", + "regular", + "italic", + "700", + "700italic", + "900", + "900italic" + ] + }, + { + "PT Sans": [ + "regular", + "italic", + "700", + "700italic" + ] + }, + { + "Rubik": [ + "300", + "regular", + "500", + "600", + "700", + "800", + "900", + "300italic", + "italic", + "500italic", + "600italic", + "700italic", + "800italic", + "900italic" + ] + }, + { + "Nunito Sans": [ + "200", + "200italic", + "300", + "300italic", + "regular", + "italic", + "600", + "600italic", + "700", + "700italic", + "800", + "800italic", + "900", + "900italic" + ] + }, + { + "Noto Sans KR": [ + "100", + "300", + "regular", + "500", + "700", + "900" + ] + }, + { + "Mukta": [ + "200", + "300", + "regular", + "500", + "600", + "700", + "800" + ] + }, + { + "Work Sans": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900", + "100italic", + "200italic", + "300italic", + "italic", + "500italic", + "600italic", + "700italic", + "800italic", + "900italic" + ] + }, + { + "Lora": [ + "regular", + "500", + "600", + "700", + "italic", + "500italic", + "600italic", + "700italic" + ] + }, + { + "Fira Sans": [ + "100", + "100italic", + "200", + "200italic", + "300", + "300italic", + "regular", + "italic", + "500", + "500italic", + "600", + "600italic", + "700", + "700italic", + "800", + "800italic", + "900", + "900italic" + ] + }, + { + "Noto Sans TC": [ + "100", + "300", + "regular", + "500", + "700", + "900" + ] + }, + { + "Kanit": [ + "100", + "100italic", + "200", + "200italic", + "300", + "300italic", + "regular", + "italic", + "500", + "500italic", + "600", + "600italic", + "700", + "700italic", + "800", + "800italic", + "900", + "900italic" + ] + }, + { + "Quicksand": [ + "300", + "regular", + "500", + "600", + "700" + ] + }, + { + "Mulish": [ + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900", + "200italic", + "300italic", + "italic", + "500italic", + "600italic", + "700italic", + "800italic", + "900italic" + ] + }, + { + "Barlow": [ + "100", + "100italic", + "200", + "200italic", + "300", + "300italic", + "regular", + "italic", + "500", + "500italic", + "600", + "600italic", + "700", + "700italic", + "800", + "800italic", + "900", + "900italic" + ] + }, + { + "Inconsolata": [ + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "PT Serif": [ + "regular", + "italic", + "700", + "700italic" + ] + }, + { + "Heebo": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Titillium Web": [ + "200", + "200italic", + "300", + "300italic", + "regular", + "italic", + "600", + "600italic", + "700", + "700italic", + "900" + ] + }, + { + "IBM Plex Sans": [ + "100", + "100italic", + "200", + "200italic", + "300", + "300italic", + "regular", + "italic", + "500", + "500italic", + "600", + "600italic", + "700", + "700italic" + ] + }, + { + "Noto Serif": [ + "regular", + "italic", + "700", + "700italic" + ] + }, + { + "Libre Franklin": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900", + "100italic", + "200italic", + "300italic", + "italic", + "500italic", + "600italic", + "700italic", + "800italic", + "900italic" + ] + }, + { + "Nanum Gothic": [ + "regular", + "700", + "800" + ] + }, + { + "DM Sans": [ + "regular", + "italic", + "500", + "500italic", + "700", + "700italic" + ] + }, + { + "Hind Siliguri": [ + "300", + "regular", + "500", + "600", + "700" + ] + }, + { + "Karla": [ + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "200italic", + "300italic", + "italic", + "500italic", + "600italic", + "700italic", + "800italic" + ] + }, + { + "Josefin Sans": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "100italic", + "200italic", + "300italic", + "italic", + "500italic", + "600italic", + "700italic" + ] + }, + { + "Arimo": [ + "regular", + "500", + "600", + "700", + "italic", + "500italic", + "600italic", + "700italic" + ] + }, + { + "Manrope": [ + "200", + "300", + "regular", + "500", + "600", + "700", + "800" + ] + }, + { + "Dosis": [ + "200", + "300", + "regular", + "500", + "600", + "700", + "800" + ] + }, + { + "Libre Baskerville": [ + "regular", + "italic", + "700" + ] + }, + { + "PT Sans Narrow": [ + "regular", + "700" + ] + }, + { + "Source Code Pro": [ + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900", + "200italic", + "300italic", + "italic", + "500italic", + "600italic", + "700italic", + "800italic", + "900italic" + ] + }, + { + "Oxygen": [ + "300", + "regular", + "700" + ] + }, + { + "Bitter": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900", + "100italic", + "200italic", + "300italic", + "italic", + "500italic", + "600italic", + "700italic", + "800italic", + "900italic" + ] + }, + { + "Source Serif Pro": [ + "200", + "200italic", + "300", + "300italic", + "regular", + "italic", + "600", + "600italic", + "700", + "700italic", + "900", + "900italic" + ] + }, + { + "Noto Sans SC": [ + "100", + "300", + "regular", + "500", + "700", + "900" + ] + }, + { + "Cairo": [ + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Anton": [ + "regular" + ] + }, + { + "Cabin": [ + "regular", + "500", + "600", + "700", + "italic", + "500italic", + "600italic", + "700italic" + ] + }, + { + "EB Garamond": [ + "regular", + "500", + "600", + "700", + "800", + "italic", + "500italic", + "600italic", + "700italic", + "800italic" + ] + }, + { + "Bebas Neue": [ + "regular" + ] + }, + { + "Prompt": [ + "100", + "100italic", + "200", + "200italic", + "300", + "300italic", + "regular", + "italic", + "500", + "500italic", + "600", + "600italic", + "700", + "700italic", + "800", + "800italic", + "900", + "900italic" + ] + }, + { + "Abel": [ + "regular" + ] + }, + { + "Signika Negative": [ + "300", + "regular", + "500", + "600", + "700" + ] + }, + { + "Dancing Script": [ + "regular", + "500", + "600", + "700" + ] + }, + { + "Lobster": [ + "regular" + ] + }, + { + "Hind": [ + "300", + "regular", + "500", + "600", + "700" + ] + }, + { + "Exo 2": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900", + "100italic", + "200italic", + "300italic", + "italic", + "500italic", + "600italic", + "700italic", + "800italic", + "900italic" + ] + }, + { + "Barlow Condensed": [ + "100", + "100italic", + "200", + "200italic", + "300", + "300italic", + "regular", + "italic", + "500", + "500italic", + "600", + "600italic", + "700", + "700italic", + "800", + "800italic", + "900", + "900italic" + ] + }, + { + "Pacifico": [ + "regular" + ] + }, + { + "Comfortaa": [ + "300", + "regular", + "500", + "600", + "700" + ] + }, + { + "Crimson Text": [ + "regular", + "italic", + "600", + "600italic", + "700", + "700italic" + ] + }, + { + "Varela Round": [ + "regular" + ] + }, + { + "Fjalla One": [ + "regular" + ] + }, + { + "Noto Sans HK": [ + "100", + "300", + "regular", + "500", + "700", + "900" + ] + }, + { + "Maven Pro": [ + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Noto Serif JP": [ + "200", + "300", + "regular", + "500", + "600", + "700", + "900" + ] + }, + { + "Teko": [ + "300", + "regular", + "500", + "600", + "700" + ] + }, + { + "Archivo": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900", + "100italic", + "200italic", + "300italic", + "italic", + "500italic", + "600italic", + "700italic", + "800italic", + "900italic" + ] + }, + { + "Arvo": [ + "regular", + "italic", + "700", + "700italic" + ] + }, + { + "Asap": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900", + "100italic", + "200italic", + "300italic", + "italic", + "500italic", + "600italic", + "700italic", + "800italic", + "900italic" + ] + }, + { + "Jost": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900", + "100italic", + "200italic", + "300italic", + "italic", + "500italic", + "600italic", + "700italic", + "800italic", + "900italic" + ] + }, + { + "Space Grotesk": [ + "300", + "regular", + "500", + "600", + "700" + ] + }, + { + "Abril Fatface": [ + "regular" + ] + }, + { + "Hind Madurai": [ + "300", + "regular", + "500", + "600", + "700" + ] + }, + { + "Shadows Into Light": [ + "regular" + ] + }, + { + "Assistant": [ + "200", + "300", + "regular", + "500", + "600", + "700", + "800" + ] + }, + { + "Public Sans": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900", + "100italic", + "200italic", + "300italic", + "italic", + "500italic", + "600italic", + "700italic", + "800italic", + "900italic" + ] + }, + { + "Merriweather Sans": [ + "300", + "regular", + "500", + "600", + "700", + "800", + "300italic", + "italic", + "500italic", + "600italic", + "700italic", + "800italic" + ] + }, + { + "Caveat": [ + "regular", + "500", + "600", + "700" + ] + }, + { + "Slabo 27px": [ + "regular" + ] + }, + { + "Righteous": [ + "regular" + ] + }, + { + "Overpass": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900", + "100italic", + "200italic", + "300italic", + "italic", + "500italic", + "600italic", + "700italic", + "800italic", + "900italic" + ] + }, + { + "Satisfy": [ + "regular" + ] + }, + { + "M PLUS Rounded 1c": [ + "100", + "300", + "regular", + "500", + "700", + "800", + "900" + ] + }, + { + "Yanone Kaffeesatz": [ + "200", + "300", + "regular", + "500", + "600", + "700" + ] + }, + { + "IBM Plex Serif": [ + "100", + "100italic", + "200", + "200italic", + "300", + "300italic", + "regular", + "italic", + "500", + "500italic", + "600", + "600italic", + "700", + "700italic" + ] + }, + { + "Rajdhani": [ + "300", + "regular", + "500", + "600", + "700" + ] + }, + { + "Tajawal": [ + "200", + "300", + "regular", + "500", + "700", + "800", + "900" + ] + }, + { + "Indie Flower": [ + "regular" + ] + }, + { + "Catamaran": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Cormorant Garamond": [ + "300", + "300italic", + "regular", + "italic", + "500", + "500italic", + "600", + "600italic", + "700", + "700italic" + ] + }, + { + "Fira Sans Condensed": [ + "100", + "100italic", + "200", + "200italic", + "300", + "300italic", + "regular", + "italic", + "500", + "500italic", + "600", + "600italic", + "700", + "700italic", + "800", + "800italic", + "900", + "900italic" + ] + }, + { + "IBM Plex Mono": [ + "100", + "100italic", + "200", + "200italic", + "300", + "300italic", + "regular", + "italic", + "500", + "500italic", + "600", + "600italic", + "700", + "700italic" + ] + }, + { + "El Messiri": [ + "regular", + "500", + "600", + "700" + ] + }, + { + "Zilla Slab": [ + "300", + "300italic", + "regular", + "italic", + "500", + "500italic", + "600", + "600italic", + "700", + "700italic" + ] + }, + { + "Questrial": [ + "regular" + ] + }, + { + "Nanum Myeongjo": [ + "regular", + "700", + "800" + ] + }, + { + "Signika": [ + "300", + "regular", + "500", + "600", + "700" + ] + }, + { + "Fredoka One": [ + "regular" + ] + }, + { + "Barlow Semi Condensed": [ + "100", + "100italic", + "200", + "200italic", + "300", + "300italic", + "regular", + "italic", + "500", + "500italic", + "600", + "600italic", + "700", + "700italic", + "800", + "800italic", + "900", + "900italic" + ] + }, + { + "Secular One": [ + "regular" + ] + }, + { + "Play": [ + "regular", + "700" + ] + }, + { + "Sarabun": [ + "100", + "100italic", + "200", + "200italic", + "300", + "300italic", + "regular", + "italic", + "500", + "500italic", + "600", + "600italic", + "700", + "700italic", + "800", + "800italic" + ] + }, + { + "Domine": [ + "regular", + "500", + "600", + "700" + ] + }, + { + "Red Hat Display": [ + "300", + "regular", + "500", + "600", + "700", + "800", + "900", + "300italic", + "italic", + "500italic", + "600italic", + "700italic", + "800italic", + "900italic" + ] + }, + { + "Exo": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900", + "100italic", + "200italic", + "300italic", + "italic", + "500italic", + "600italic", + "700italic", + "800italic", + "900italic" + ] + }, + { + "Bree Serif": [ + "regular" + ] + }, + { + "Mada": [ + "200", + "300", + "regular", + "500", + "600", + "700", + "900" + ] + }, + { + "Permanent Marker": [ + "regular" + ] + }, + { + "ABeeZee": [ + "regular", + "italic" + ] + }, + { + "Lilita One": [ + "regular" + ] + }, + { + "Acme": [ + "regular" + ] + }, + { + "Archivo Narrow": [ + "regular", + "500", + "600", + "700", + "italic", + "500italic", + "600italic", + "700italic" + ] + }, + { + "Chakra Petch": [ + "300", + "300italic", + "regular", + "italic", + "500", + "500italic", + "600", + "600italic", + "700", + "700italic" + ] + }, + { + "Alfa Slab One": [ + "regular" + ] + }, + { + "Noto Sans Arabic": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "M PLUS 1p": [ + "100", + "300", + "regular", + "500", + "700", + "800", + "900" + ] + }, + { + "Vollkorn": [ + "regular", + "500", + "600", + "700", + "800", + "900", + "italic", + "500italic", + "600italic", + "700italic", + "800italic", + "900italic" + ] + }, + { + "Russo One": [ + "regular" + ] + }, + { + "Amatic SC": [ + "regular", + "700" + ] + }, + { + "Alegreya Sans": [ + "100", + "100italic", + "300", + "300italic", + "regular", + "italic", + "500", + "500italic", + "700", + "700italic", + "800", + "800italic", + "900", + "900italic" + ] + }, + { + "Didact Gothic": [ + "regular" + ] + }, + { + "Rowdies": [ + "300", + "regular", + "700" + ] + }, + { + "Covered By Your Grace": [ + "regular" + ] + }, + { + "DM Serif Display": [ + "regular", + "italic" + ] + }, + { + "Cinzel": [ + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Alegreya": [ + "regular", + "500", + "600", + "700", + "800", + "900", + "italic", + "500italic", + "600italic", + "700italic", + "800italic", + "900italic" + ] + }, + { + "Noto Kufi Arabic": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Tinos": [ + "regular", + "italic", + "700", + "700italic" + ] + }, + { + "Archivo Black": [ + "regular" + ] + }, + { + "Kalam": [ + "300", + "regular", + "700" + ] + }, + { + "Orbitron": [ + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Changa": [ + "200", + "300", + "regular", + "500", + "600", + "700", + "800" + ] + }, + { + "Martel": [ + "200", + "300", + "regular", + "600", + "700", + "800", + "900" + ] + }, + { + "Frank Ruhl Libre": [ + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Space Mono": [ + "regular", + "italic", + "700", + "700italic" + ] + }, + { + "Ubuntu Condensed": [ + "regular" + ] + }, + { + "Amiri": [ + "regular", + "italic", + "700", + "700italic" + ] + }, + { + "Lobster Two": [ + "regular", + "italic", + "700", + "700italic" + ] + }, + { + "Almarai": [ + "300", + "regular", + "700", + "800" + ] + }, + { + "IBM Plex Sans Arabic": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700" + ] + }, + { + "Courgette": [ + "regular" + ] + }, + { + "Noticia Text": [ + "regular", + "italic", + "700", + "700italic" + ] + }, + { + "Spectral": [ + "200", + "200italic", + "300", + "300italic", + "regular", + "italic", + "500", + "500italic", + "600", + "600italic", + "700", + "700italic", + "800", + "800italic" + ] + }, + { + "Noto Serif TC": [ + "200", + "300", + "regular", + "500", + "600", + "700", + "900" + ] + }, + { + "Yantramanav": [ + "100", + "300", + "regular", + "500", + "700", + "900" + ] + }, + { + "Crete Round": [ + "regular", + "italic" + ] + }, + { + "Great Vibes": [ + "regular" + ] + }, + { + "PT Sans Caption": [ + "regular", + "700" + ] + }, + { + "Patua One": [ + "regular" + ] + }, + { + "Rokkitt": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Baloo 2": [ + "regular", + "500", + "600", + "700", + "800" + ] + }, + { + "Prata": [ + "regular" + ] + }, + { + "Sora": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800" + ] + }, + { + "Paytone One": [ + "regular" + ] + }, + { + "Passion One": [ + "regular", + "700", + "900" + ] + }, + { + "Cormorant": [ + "300", + "regular", + "500", + "600", + "700", + "300italic", + "italic", + "500italic", + "600italic", + "700italic" + ] + }, + { + "Be Vietnam Pro": [ + "100", + "100italic", + "200", + "200italic", + "300", + "300italic", + "regular", + "italic", + "500", + "500italic", + "600", + "600italic", + "700", + "700italic", + "800", + "800italic", + "900", + "900italic" + ] + }, + { + "Gothic A1": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Cardo": [ + "regular", + "italic", + "700" + ] + }, + { + "Faustina": [ + "300", + "regular", + "500", + "600", + "700", + "800", + "300italic", + "italic", + "500italic", + "600italic", + "700italic", + "800italic" + ] + }, + { + "Lexend": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Outfit": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Montserrat Alternates": [ + "100", + "100italic", + "200", + "200italic", + "300", + "300italic", + "regular", + "italic", + "500", + "500italic", + "600", + "600italic", + "700", + "700italic", + "800", + "800italic", + "900", + "900italic" + ] + }, + { + "Kaushan Script": [ + "regular" + ] + }, + { + "Old Standard TT": [ + "regular", + "italic", + "700" + ] + }, + { + "Asap Condensed": [ + "200", + "200italic", + "300", + "300italic", + "regular", + "italic", + "500", + "500italic", + "600", + "600italic", + "700", + "700italic", + "800", + "800italic", + "900", + "900italic" + ] + }, + { + "Pathway Gothic One": [ + "regular" + ] + }, + { + "Alata": [ + "regular" + ] + }, + { + "Noto Serif KR": [ + "200", + "300", + "regular", + "500", + "600", + "700", + "900" + ] + }, + { + "Cookie": [ + "regular" + ] + }, + { + "Sawarabi Mincho": [ + "regular" + ] + }, + { + "Gloria Hallelujah": [ + "regular" + ] + }, + { + "Philosopher": [ + "regular", + "italic", + "700", + "700italic" + ] + }, + { + "Yellowtail": [ + "regular" + ] + }, + { + "Francois One": [ + "regular" + ] + }, + { + "Michroma": [ + "regular" + ] + }, + { + "Encode Sans": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Gelasio": [ + "regular", + "italic", + "500", + "500italic", + "600", + "600italic", + "700", + "700italic" + ] + }, + { + "Concert One": [ + "regular" + ] + }, + { + "Titan One": [ + "regular" + ] + }, + { + "Antic Slab": [ + "regular" + ] + }, + { + "PT Mono": [ + "regular" + ] + }, + { + "Urbanist": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900", + "100italic", + "200italic", + "300italic", + "italic", + "500italic", + "600italic", + "700italic", + "800italic", + "900italic" + ] + }, + { + "Unna": [ + "regular", + "italic", + "700", + "700italic" + ] + }, + { + "Sacramento": [ + "regular" + ] + }, + { + "Noto Sans Display": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900", + "100italic", + "200italic", + "300italic", + "italic", + "500italic", + "600italic", + "700italic", + "800italic", + "900italic" + ] + }, + { + "Saira Condensed": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Marcellus": [ + "regular" + ] + }, + { + "Yeseva One": [ + "regular" + ] + }, + { + "Rubik Mono One": [ + "regular" + ] + }, + { + "Eczar": [ + "regular", + "500", + "600", + "700", + "800" + ] + }, + { + "Staatliches": [ + "regular" + ] + }, + { + "Cantarell": [ + "regular", + "italic", + "700", + "700italic" + ] + }, + { + "Press Start 2P": [ + "regular" + ] + }, + { + "Patrick Hand": [ + "regular" + ] + }, + { + "Lexend Deca": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Chivo": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900", + "100italic", + "200italic", + "300italic", + "italic", + "500italic", + "600italic", + "700italic", + "800italic", + "900italic" + ] + }, + { + "Luckiest Guy": [ + "regular" + ] + }, + { + "Josefin Slab": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "100italic", + "200italic", + "300italic", + "italic", + "500italic", + "600italic", + "700italic" + ] + }, + { + "Quattrocento Sans": [ + "regular", + "italic", + "700", + "700italic" + ] + }, + { + "Carter One": [ + "regular" + ] + }, + { + "Macondo": [ + "regular" + ] + }, + { + "Bodoni Moda": [ + "regular", + "500", + "600", + "700", + "800", + "900", + "italic", + "500italic", + "600italic", + "700italic", + "800italic", + "900italic" + ] + }, + { + "Bangers": [ + "regular" + ] + }, + { + "Monda": [ + "regular", + "700" + ] + }, + { + "Alice": [ + "regular" + ] + }, + { + "Saira": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900", + "100italic", + "200italic", + "300italic", + "italic", + "500italic", + "600italic", + "700italic", + "800italic", + "900italic" + ] + }, + { + "Cuprum": [ + "regular", + "500", + "600", + "700", + "italic", + "500italic", + "600italic", + "700italic" + ] + }, + { + "Quattrocento": [ + "regular", + "700" + ] + }, + { + "Plus Jakarta Sans": [ + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "200italic", + "300italic", + "italic", + "500italic", + "600italic", + "700italic", + "800italic" + ] + }, + { + "News Cycle": [ + "regular", + "700" + ] + }, + { + "Fira Sans Extra Condensed": [ + "100", + "100italic", + "200", + "200italic", + "300", + "300italic", + "regular", + "italic", + "500", + "500italic", + "600", + "600italic", + "700", + "700italic", + "800", + "800italic", + "900", + "900italic" + ] + }, + { + "Commissioner": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Creepster": [ + "regular" + ] + }, + { + "Handlee": [ + "regular" + ] + }, + { + "Sawarabi Gothic": [ + "regular" + ] + }, + { + "Mitr": [ + "200", + "300", + "regular", + "500", + "600", + "700" + ] + }, + { + "Oleo Script": [ + "regular", + "700" + ] + }, + { + "Sen": [ + "regular", + "700", + "800" + ] + }, + { + "Advent Pro": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900", + "100italic", + "200italic", + "300italic", + "italic", + "500italic", + "600italic", + "700italic", + "800italic", + "900italic" + ] + }, + { + "Mukta Malar": [ + "200", + "300", + "regular", + "500", + "600", + "700", + "800" + ] + }, + { + "Special Elite": [ + "regular" + ] + }, + { + "Crimson Pro": [ + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900", + "200italic", + "300italic", + "italic", + "500italic", + "600italic", + "700italic", + "800italic", + "900italic" + ] + }, + { + "Khand": [ + "300", + "regular", + "500", + "600", + "700" + ] + }, + { + "Ubuntu Mono": [ + "regular", + "italic", + "700", + "700italic" + ] + }, + { + "Ultra": [ + "regular" + ] + }, + { + "Vidaloka": [ + "regular" + ] + }, + { + "Marck Script": [ + "regular" + ] + }, + { + "Mr Dafoe": [ + "regular" + ] + }, + { + "Neuton": [ + "200", + "300", + "regular", + "italic", + "700", + "800" + ] + }, + { + "Poiret One": [ + "regular" + ] + }, + { + "Allura": [ + "regular" + ] + }, + { + "DM Serif Text": [ + "regular", + "italic" + ] + }, + { + "IBM Plex Sans Condensed": [ + "100", + "100italic", + "200", + "200italic", + "300", + "300italic", + "regular", + "italic", + "500", + "500italic", + "600", + "600italic", + "700", + "700italic" + ] + }, + { + "Kosugi Maru": [ + "regular" + ] + }, + { + "Unbounded": [ + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Tangerine": [ + "regular", + "700" + ] + }, + { + "Figtree": [ + "300", + "regular", + "500", + "600", + "700", + "800", + "900", + "300italic", + "italic", + "500italic", + "600italic", + "700italic", + "800italic", + "900italic" + ] + }, + { + "Encode Sans Condensed": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Arsenal": [ + "regular", + "italic", + "700", + "700italic" + ] + }, + { + "Playfair Display SC": [ + "regular", + "italic", + "700", + "700italic", + "900", + "900italic" + ] + }, + { + "Volkhov": [ + "regular", + "italic", + "700", + "700italic" + ] + }, + { + "Padauk": [ + "regular", + "700" + ] + }, + { + "Neucha": [ + "regular" + ] + }, + { + "Ropa Sans": [ + "regular", + "italic" + ] + }, + { + "Aleo": [ + "300", + "300italic", + "regular", + "italic", + "700", + "700italic" + ] + }, + { + "Ramabhadra": [ + "regular" + ] + }, + { + "Taviraj": [ + "100", + "100italic", + "200", + "200italic", + "300", + "300italic", + "regular", + "italic", + "500", + "500italic", + "600", + "600italic", + "700", + "700italic", + "800", + "800italic", + "900", + "900italic" + ] + }, + { + "Amaranth": [ + "regular", + "italic", + "700", + "700italic" + ] + }, + { + "Merienda": [ + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Architects Daughter": [ + "regular" + ] + }, + { + "Playball": [ + "regular" + ] + }, + { + "Viga": [ + "regular" + ] + }, + { + "Saira Semi Condensed": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Parisienne": [ + "regular" + ] + }, + { + "Fugaz One": [ + "regular" + ] + }, + { + "Homemade Apple": [ + "regular" + ] + }, + { + "Gudea": [ + "regular", + "italic", + "700" + ] + }, + { + "Alegreya Sans SC": [ + "100", + "100italic", + "300", + "300italic", + "regular", + "italic", + "500", + "500italic", + "700", + "700italic", + "800", + "800italic", + "900", + "900italic" + ] + }, + { + "Sriracha": [ + "regular" + ] + }, + { + "Ruda": [ + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Sanchez": [ + "regular", + "italic" + ] + }, + { + "Tenor Sans": [ + "regular" + ] + }, + { + "Noto Sans Devanagari": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Bai Jamjuree": [ + "200", + "200italic", + "300", + "300italic", + "regular", + "italic", + "500", + "500italic", + "600", + "600italic", + "700", + "700italic" + ] + }, + { + "Noto Serif SC": [ + "200", + "300", + "regular", + "500", + "600", + "700", + "900" + ] + }, + { + "Nanum Gothic Coding": [ + "regular", + "700" + ] + }, + { + "Hammersmith One": [ + "regular" + ] + }, + { + "Libre Caslon Text": [ + "regular", + "italic", + "700" + ] + }, + { + "Actor": [ + "regular" + ] + }, + { + "Gruppo": [ + "regular" + ] + }, + { + "Alex Brush": [ + "regular" + ] + }, + { + "Hind Vadodara": [ + "300", + "regular", + "500", + "600", + "700" + ] + }, + { + "Bungee": [ + "regular" + ] + }, + { + "Istok Web": [ + "regular", + "italic", + "700", + "700italic" + ] + }, + { + "Audiowide": [ + "regular" + ] + }, + { + "Noto Sans Thai": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Nanum Pen Script": [ + "regular" + ] + }, + { + "Cousine": [ + "regular", + "italic", + "700", + "700italic" + ] + }, + { + "Literata": [ + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900", + "200italic", + "300italic", + "italic", + "500italic", + "600italic", + "700italic", + "800italic", + "900italic" + ] + }, + { + "Bad Script": [ + "regular" + ] + }, + { + "Baskervville": [ + "regular", + "italic" + ] + }, + { + "Red Hat Text": [ + "300", + "regular", + "500", + "600", + "700", + "300italic", + "italic", + "500italic", + "600italic", + "700italic" + ] + }, + { + "Lusitana": [ + "regular", + "700" + ] + }, + { + "Abhaya Libre": [ + "regular", + "500", + "600", + "700", + "800" + ] + }, + { + "Quantico": [ + "regular", + "italic", + "700", + "700italic" + ] + }, + { + "Pragati Narrow": [ + "regular", + "700" + ] + }, + { + "Monoton": [ + "regular" + ] + }, + { + "Sigmar One": [ + "regular" + ] + }, + { + "Blinker": [ + "100", + "200", + "300", + "regular", + "600", + "700", + "800", + "900" + ] + }, + { + "Roboto Flex": [ + "regular" + ] + }, + { + "Unica One": [ + "regular" + ] + }, + { + "Allerta Stencil": [ + "regular" + ] + }, + { + "Palanquin": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700" + ] + }, + { + "BenchNine": [ + "300", + "regular", + "700" + ] + }, + { + "Castoro": [ + "regular", + "italic" + ] + }, + { + "Shrikhand": [ + "regular" + ] + }, + { + "Rock Salt": [ + "regular" + ] + }, + { + "Roboto Serif": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900", + "100italic", + "200italic", + "300italic", + "italic", + "500italic", + "600italic", + "700italic", + "800italic", + "900italic" + ] + }, + { + "Khula": [ + "300", + "regular", + "600", + "700", + "800" + ] + }, + { + "Cabin Condensed": [ + "regular", + "500", + "600", + "700" + ] + }, + { + "Readex Pro": [ + "200", + "300", + "regular", + "500", + "600", + "700" + ] + }, + { + "Noto Naskh Arabic": [ + "regular", + "500", + "600", + "700" + ] + }, + { + "Epilogue": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900", + "100italic", + "200italic", + "300italic", + "italic", + "500italic", + "600italic", + "700italic", + "800italic", + "900italic" + ] + }, + { + "Damion": [ + "regular" + ] + }, + { + "Economica": [ + "regular", + "italic", + "700", + "700italic" + ] + }, + { + "Fira Mono": [ + "regular", + "500", + "700" + ] + }, + { + "League Spartan": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Jura": [ + "300", + "regular", + "500", + "600", + "700" + ] + }, + { + "Caveat Brush": [ + "regular" + ] + }, + { + "Adamina": [ + "regular" + ] + }, + { + "Varela": [ + "regular" + ] + }, + { + "Mandali": [ + "regular" + ] + }, + { + "Laila": [ + "300", + "regular", + "500", + "600", + "700" + ] + }, + { + "Niramit": [ + "200", + "200italic", + "300", + "300italic", + "regular", + "italic", + "500", + "500italic", + "600", + "600italic", + "700", + "700italic" + ] + }, + { + "Kumbh Sans": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Pontano Sans": [ + "regular" + ] + }, + { + "Days One": [ + "regular" + ] + }, + { + "Rufina": [ + "regular", + "700" + ] + }, + { + "Julius Sans One": [ + "regular" + ] + }, + { + "Pangolin": [ + "regular" + ] + }, + { + "Alef": [ + "regular", + "700" + ] + }, + { + "Nothing You Could Do": [ + "regular" + ] + }, + { + "Pridi": [ + "200", + "300", + "regular", + "500", + "600", + "700" + ] + }, + { + "Itim": [ + "regular" + ] + }, + { + "Krub": [ + "200", + "200italic", + "300", + "300italic", + "regular", + "italic", + "500", + "500italic", + "600", + "600italic", + "700", + "700italic" + ] + }, + { + "Share Tech Mono": [ + "regular" + ] + }, + { + "Sorts Mill Goudy": [ + "regular", + "italic" + ] + }, + { + "Athiti": [ + "200", + "300", + "regular", + "500", + "600", + "700" + ] + }, + { + "Cantata One": [ + "regular" + ] + }, + { + "Black Han Sans": [ + "regular" + ] + }, + { + "Karma": [ + "300", + "regular", + "500", + "600", + "700" + ] + }, + { + "Sintony": [ + "regular", + "700" + ] + }, + { + "Martel Sans": [ + "200", + "300", + "regular", + "600", + "700", + "800", + "900" + ] + }, + { + "Sarala": [ + "regular", + "700" + ] + }, + { + "Lalezar": [ + "regular" + ] + }, + { + "Courier Prime": [ + "regular", + "italic", + "700", + "700italic" + ] + }, + { + "Antonio": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700" + ] + }, + { + "Gentium Book Basic": [ + "regular", + "italic", + "700", + "700italic" + ] + }, + { + "Electrolize": [ + "regular" + ] + }, + { + "Black Ops One": [ + "regular" + ] + }, + { + "Pinyon Script": [ + "regular" + ] + }, + { + "Yatra One": [ + "regular" + ] + }, + { + "Six Caps": [ + "regular" + ] + }, + { + "Holtwood One SC": [ + "regular" + ] + }, + { + "Comic Neue": [ + "300", + "300italic", + "regular", + "italic", + "700", + "700italic" + ] + }, + { + "Italianno": [ + "regular" + ] + }, + { + "Amethysta": [ + "regular" + ] + }, + { + "Cutive Mono": [ + "regular" + ] + }, + { + "Forum": [ + "regular" + ] + }, + { + "Reenie Beanie": [ + "regular" + ] + }, + { + "Noto Serif Bengali": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Calistoga": [ + "regular" + ] + }, + { + "Voltaire": [ + "regular" + ] + }, + { + "Lustria": [ + "regular" + ] + }, + { + "Esteban": [ + "regular" + ] + }, + { + "Kreon": [ + "300", + "regular", + "500", + "600", + "700" + ] + }, + { + "Glegoo": [ + "regular", + "700" + ] + }, + { + "Sansita": [ + "regular", + "italic", + "700", + "700italic", + "800", + "800italic", + "900", + "900italic" + ] + }, + { + "Anonymous Pro": [ + "regular", + "italic", + "700", + "700italic" + ] + }, + { + "Armata": [ + "regular" + ] + }, + { + "Noto Sans Tamil": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Londrina Solid": [ + "100", + "300", + "regular", + "900" + ] + }, + { + "Berkshire Swash": [ + "regular" + ] + }, + { + "Arapey": [ + "regular", + "italic" + ] + }, + { + "Zen Maru Gothic": [ + "300", + "regular", + "500", + "700", + "900" + ] + }, + { + "PT Serif Caption": [ + "regular", + "italic" + ] + }, + { + "Short Stack": [ + "regular" + ] + }, + { + "Boogaloo": [ + "regular" + ] + }, + { + "Chewy": [ + "regular" + ] + }, + { + "Leckerli One": [ + "regular" + ] + }, + { + "Squada One": [ + "regular" + ] + }, + { + "VT323": [ + "regular" + ] + }, + { + "Average Sans": [ + "regular" + ] + }, + { + "Cabin Sketch": [ + "regular", + "700" + ] + }, + { + "Aclonica": [ + "regular" + ] + }, + { + "Shippori Mincho": [ + "regular", + "500", + "600", + "700", + "800" + ] + }, + { + "Aldrich": [ + "regular" + ] + }, + { + "Jaldi": [ + "regular", + "700" + ] + }, + { + "Shadows Into Light Two": [ + "regular" + ] + }, + { + "Fraunces": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900", + "100italic", + "200italic", + "300italic", + "italic", + "500italic", + "600italic", + "700italic", + "800italic", + "900italic" + ] + }, + { + "Gilda Display": [ + "regular" + ] + }, + { + "Lemonada": [ + "300", + "regular", + "500", + "600", + "700" + ] + }, + { + "Fira Code": [ + "300", + "regular", + "500", + "600", + "700" + ] + }, + { + "Coda": [ + "regular", + "800" + ] + }, + { + "Kameron": [ + "regular", + "700" + ] + }, + { + "Koulen": [ + "regular" + ] + }, + { + "Candal": [ + "regular" + ] + }, + { + "Syncopate": [ + "regular", + "700" + ] + }, + { + "Antic": [ + "regular" + ] + }, + { + "Do Hyeon": [ + "regular" + ] + }, + { + "Markazi Text": [ + "regular", + "500", + "600", + "700" + ] + }, + { + "Amita": [ + "regular", + "700" + ] + }, + { + "Hind Guntur": [ + "300", + "regular", + "500", + "600", + "700" + ] + }, + { + "Fredericka the Great": [ + "regular" + ] + }, + { + "Saira Extra Condensed": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Herr Von Muellerhoff": [ + "regular" + ] + }, + { + "Mali": [ + "200", + "200italic", + "300", + "300italic", + "regular", + "italic", + "500", + "500italic", + "600", + "600italic", + "700", + "700italic" + ] + }, + { + "Basic": [ + "regular" + ] + }, + { + "Mrs Saint Delafield": [ + "regular" + ] + }, + { + "Bevan": [ + "regular", + "italic" + ] + }, + { + "Skranji": [ + "regular", + "700" + ] + }, + { + "Palanquin Dark": [ + "regular", + "500", + "600", + "700" + ] + }, + { + "Cinzel Decorative": [ + "regular", + "700", + "900" + ] + }, + { + "Yrsa": [ + "300", + "regular", + "500", + "600", + "700", + "300italic", + "italic", + "500italic", + "600italic", + "700italic" + ] + }, + { + "Reem Kufi": [ + "regular", + "500", + "600", + "700" + ] + }, + { + "Arima Madurai": [ + "100", + "200", + "300", + "regular", + "500", + "700", + "800", + "900" + ] + }, + { + "Rancho": [ + "regular" + ] + }, + { + "Racing Sans One": [ + "regular" + ] + }, + { + "Atkinson Hyperlegible": [ + "regular", + "italic", + "700", + "700italic" + ] + }, + { + "Quintessential": [ + "regular" + ] + }, + { + "Nanum Brush Script": [ + "regular" + ] + }, + { + "Gochi Hand": [ + "regular" + ] + }, + { + "Jua": [ + "regular" + ] + }, + { + "Rozha One": [ + "regular" + ] + }, + { + "K2D": [ + "100", + "100italic", + "200", + "200italic", + "300", + "300italic", + "regular", + "italic", + "500", + "500italic", + "600", + "600italic", + "700", + "700italic", + "800", + "800italic" + ] + }, + { + "Zen Kaku Gothic New": [ + "300", + "regular", + "500", + "700", + "900" + ] + }, + { + "Capriola": [ + "regular" + ] + }, + { + "Livvic": [ + "100", + "100italic", + "200", + "200italic", + "300", + "300italic", + "regular", + "italic", + "500", + "500italic", + "600", + "600italic", + "700", + "700italic", + "900", + "900italic" + ] + }, + { + "JetBrains Mono": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "100italic", + "200italic", + "300italic", + "italic", + "500italic", + "600italic", + "700italic", + "800italic" + ] + }, + { + "Biryani": [ + "200", + "300", + "regular", + "600", + "700", + "800", + "900" + ] + }, + { + "Petrona": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900", + "100italic", + "200italic", + "300italic", + "italic", + "500italic", + "600italic", + "700italic", + "800italic", + "900italic" + ] + }, + { + "Charm": [ + "regular", + "700" + ] + }, + { + "Big Shoulders Display": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Rye": [ + "regular" + ] + }, + { + "Rammetto One": [ + "regular" + ] + }, + { + "Syne": [ + "regular", + "500", + "600", + "700", + "800" + ] + }, + { + "Mate": [ + "regular", + "italic" + ] + }, + { + "Annie Use Your Telescope": [ + "regular" + ] + }, + { + "Telex": [ + "regular" + ] + }, + { + "Average": [ + "regular" + ] + }, + { + "Arizonia": [ + "regular" + ] + }, + { + "Graduate": [ + "regular" + ] + }, + { + "Enriqueta": [ + "regular", + "500", + "600", + "700" + ] + }, + { + "La Belle Aurore": [ + "regular" + ] + }, + { + "Contrail One": [ + "regular" + ] + }, + { + "Inter Tight": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900", + "100italic", + "200italic", + "300italic", + "italic", + "500italic", + "600italic", + "700italic", + "800italic", + "900italic" + ] + }, + { + "Arbutus Slab": [ + "regular" + ] + }, + { + "Changa One": [ + "regular", + "italic" + ] + }, + { + "Marcellus SC": [ + "regular" + ] + }, + { + "Oranienbaum": [ + "regular" + ] + }, + { + "Dongle": [ + "300", + "regular", + "700" + ] + }, + { + "Just Another Hand": [ + "regular" + ] + }, + { + "Noto Sans Malayalam": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Alatsi": [ + "regular" + ] + }, + { + "Wallpoet": [ + "regular" + ] + }, + { + "DM Mono": [ + "300", + "300italic", + "regular", + "italic", + "500", + "500italic" + ] + }, + { + "Allerta": [ + "regular" + ] + }, + { + "Darker Grotesque": [ + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Coming Soon": [ + "regular" + ] + }, + { + "Knewave": [ + "regular" + ] + }, + { + "Niconne": [ + "regular" + ] + }, + { + "Lateef": [ + "200", + "300", + "regular", + "500", + "600", + "700", + "800" + ] + }, + { + "Sofia": [ + "regular" + ] + }, + { + "GFS Didot": [ + "regular" + ] + }, + { + "Kristi": [ + "regular" + ] + }, + { + "Corben": [ + "regular", + "700" + ] + }, + { + "Pattaya": [ + "regular" + ] + }, + { + "Coustard": [ + "regular", + "900" + ] + }, + { + "Belleza": [ + "regular" + ] + }, + { + "Carrois Gothic": [ + "regular" + ] + }, + { + "Krona One": [ + "regular" + ] + }, + { + "Delius": [ + "regular" + ] + }, + { + "Norican": [ + "regular" + ] + }, + { + "Libre Barcode 39": [ + "regular" + ] + }, + { + "Scada": [ + "regular", + "italic", + "700", + "700italic" + ] + }, + { + "Amiko": [ + "regular", + "600", + "700" + ] + }, + { + "Kite One": [ + "regular" + ] + }, + { + "Nobile": [ + "regular", + "italic", + "500", + "500italic", + "700", + "700italic" + ] + }, + { + "STIX Two Text": [ + "regular", + "500", + "600", + "700", + "italic", + "500italic", + "600italic", + "700italic" + ] + }, + { + "Bowlby One SC": [ + "regular" + ] + }, + { + "Qwigley": [ + "regular" + ] + }, + { + "Halant": [ + "300", + "regular", + "500", + "600", + "700" + ] + }, + { + "Rochester": [ + "regular" + ] + }, + { + "BioRhyme": [ + "200", + "300", + "regular", + "700", + "800" + ] + }, + { + "Trirong": [ + "100", + "100italic", + "200", + "200italic", + "300", + "300italic", + "regular", + "italic", + "500", + "500italic", + "600", + "600italic", + "700", + "700italic", + "800", + "800italic", + "900", + "900italic" + ] + }, + { + "Cedarville Cursive": [ + "regular" + ] + }, + { + "Albert Sans": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900", + "100italic", + "200italic", + "300italic", + "italic", + "500italic", + "600italic", + "700italic", + "800italic", + "900italic" + ] + }, + { + "Overlock": [ + "regular", + "italic", + "700", + "700italic", + "900", + "900italic" + ] + }, + { + "Rambla": [ + "regular", + "italic", + "700", + "700italic" + ] + }, + { + "Miriam Libre": [ + "regular", + "700" + ] + }, + { + "Fjord One": [ + "regular" + ] + }, + { + "Georama": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900", + "100italic", + "200italic", + "300italic", + "italic", + "500italic", + "600italic", + "700italic", + "800italic", + "900italic" + ] + }, + { + "Henny Penny": [ + "regular" + ] + }, + { + "Bungee Inline": [ + "regular" + ] + }, + { + "Petit Formal Script": [ + "regular" + ] + }, + { + "Cormorant Infant": [ + "300", + "300italic", + "regular", + "italic", + "500", + "500italic", + "600", + "600italic", + "700", + "700italic" + ] + }, + { + "Magra": [ + "regular", + "700" + ] + }, + { + "Schoolbell": [ + "regular" + ] + }, + { + "Bellefair": [ + "regular" + ] + }, + { + "Suez One": [ + "regular" + ] + }, + { + "Monsieur La Doulaise": [ + "regular" + ] + }, + { + "Alike": [ + "regular" + ] + }, + { + "Chonburi": [ + "regular" + ] + }, + { + "Overpass Mono": [ + "300", + "regular", + "500", + "600", + "700" + ] + }, + { + "Pirata One": [ + "regular" + ] + }, + { + "Yesteryear": [ + "regular" + ] + }, + { + "Seaweed Script": [ + "regular" + ] + }, + { + "Noto Sans Hebrew": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Aladin": [ + "regular" + ] + }, + { + "Jockey One": [ + "regular" + ] + }, + { + "Kosugi": [ + "regular" + ] + }, + { + "Alegreya SC": [ + "regular", + "italic", + "500", + "500italic", + "700", + "700italic", + "800", + "800italic", + "900", + "900italic" + ] + }, + { + "Bentham": [ + "regular" + ] + }, + { + "Source Sans 3": [ + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900", + "200italic", + "300italic", + "italic", + "500italic", + "600italic", + "700italic", + "800italic", + "900italic" + ] + }, + { + "Brygada 1918": [ + "regular", + "500", + "600", + "700", + "italic", + "500italic", + "600italic", + "700italic" + ] + }, + { + "NTR": [ + "regular" + ] + }, + { + "Bubblegum Sans": [ + "regular" + ] + }, + { + "Nixie One": [ + "regular" + ] + }, + { + "Grand Hotel": [ + "regular" + ] + }, + { + "Maitree": [ + "200", + "300", + "regular", + "500", + "600", + "700" + ] + }, + { + "Caudex": [ + "regular", + "italic", + "700", + "700italic" + ] + }, + { + "Rubik Moonrocks": [ + "regular" + ] + }, + { + "Sniglet": [ + "regular", + "800" + ] + }, + { + "Kiwi Maru": [ + "300", + "regular", + "500" + ] + }, + { + "Trocchi": [ + "regular" + ] + }, + { + "Averia Serif Libre": [ + "300", + "300italic", + "regular", + "italic", + "700", + "700italic" + ] + }, + { + "Mallanna": [ + "regular" + ] + }, + { + "Fauna One": [ + "regular" + ] + }, + { + "Ovo": [ + "regular" + ] + }, + { + "Marmelad": [ + "regular" + ] + }, + { + "Mukta Vaani": [ + "200", + "300", + "regular", + "500", + "600", + "700", + "800" + ] + }, + { + "Irish Grover": [ + "regular" + ] + }, + { + "Judson": [ + "regular", + "italic", + "700" + ] + }, + { + "Suranna": [ + "regular" + ] + }, + { + "Mate SC": [ + "regular" + ] + }, + { + "Balsamiq Sans": [ + "regular", + "italic", + "700", + "700italic" + ] + }, + { + "Baloo Tamma 2": [ + "regular", + "500", + "600", + "700", + "800" + ] + }, + { + "Manjari": [ + "100", + "regular", + "700" + ] + }, + { + "Viaoda Libre": [ + "regular" + ] + }, + { + "B612": [ + "regular", + "italic", + "700", + "700italic" + ] + }, + { + "Hepta Slab": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Merienda One": [ + "regular" + ] + }, + { + "Averia Libre": [ + "300", + "300italic", + "regular", + "italic", + "700", + "700italic" + ] + }, + { + "Caladea": [ + "regular", + "italic", + "700", + "700italic" + ] + }, + { + "IM Fell English SC": [ + "regular" + ] + }, + { + "Thasadith": [ + "regular", + "italic", + "700", + "700italic" + ] + }, + { + "Spinnaker": [ + "regular" + ] + }, + { + "Grandstander": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900", + "100italic", + "200italic", + "300italic", + "italic", + "500italic", + "600italic", + "700italic", + "800italic", + "900italic" + ] + }, + { + "Meera Inimai": [ + "regular" + ] + }, + { + "Podkova": [ + "regular", + "500", + "600", + "700", + "800" + ] + }, + { + "Dawning of a New Day": [ + "regular" + ] + }, + { + "Slabo 13px": [ + "regular" + ] + }, + { + "Bungee Shade": [ + "regular" + ] + }, + { + "Gabriela": [ + "regular" + ] + }, + { + "Noto Color Emoji": [ + "regular" + ] + }, + { + "Cambay": [ + "regular", + "italic", + "700", + "700italic" + ] + }, + { + "Noto Sans Mono": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Hanuman": [ + "100", + "300", + "regular", + "700", + "900" + ] + }, + { + "Newsreader": [ + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "200italic", + "300italic", + "italic", + "500italic", + "600italic", + "700italic", + "800italic" + ] + }, + { + "Oxygen Mono": [ + "regular" + ] + }, + { + "Kelly Slab": [ + "regular" + ] + }, + { + "Rosario": [ + "300", + "regular", + "500", + "600", + "700", + "300italic", + "italic", + "500italic", + "600italic", + "700italic" + ] + }, + { + "Calligraffitti": [ + "regular" + ] + }, + { + "Noto Serif Display": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900", + "100italic", + "200italic", + "300italic", + "italic", + "500italic", + "600italic", + "700italic", + "800italic", + "900italic" + ] + }, + { + "Proza Libre": [ + "regular", + "italic", + "500", + "500italic", + "600", + "600italic", + "700", + "700italic", + "800", + "800italic" + ] + }, + { + "Copse": [ + "regular" + ] + }, + { + "Rasa": [ + "300", + "regular", + "500", + "600", + "700", + "300italic", + "italic", + "500italic", + "600italic", + "700italic" + ] + }, + { + "Gurajada": [ + "regular" + ] + }, + { + "Kurale": [ + "regular" + ] + }, + { + "Marvel": [ + "regular", + "italic", + "700", + "700italic" + ] + }, + { + "Rakkas": [ + "regular" + ] + }, + { + "Waiting for the Sunrise": [ + "regular" + ] + }, + { + "Stardos Stencil": [ + "regular", + "700" + ] + }, + { + "Limelight": [ + "regular" + ] + }, + { + "Encode Sans Semi Condensed": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "David Libre": [ + "regular", + "500", + "700" + ] + }, + { + "Lemon": [ + "regular" + ] + }, + { + "Oxanium": [ + "200", + "300", + "regular", + "500", + "600", + "700", + "800" + ] + }, + { + "Gugi": [ + "regular" + ] + }, + { + "Fredoka": [ + "300", + "regular", + "500", + "600", + "700" + ] + }, + { + "IM Fell English": [ + "regular", + "italic" + ] + }, + { + "Stint Ultra Condensed": [ + "regular" + ] + }, + { + "Baloo Da 2": [ + "regular", + "500", + "600", + "700", + "800" + ] + }, + { + "Baloo Paaji 2": [ + "regular", + "500", + "600", + "700", + "800" + ] + }, + { + "IBM Plex Sans Thai": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700" + ] + }, + { + "Sunflower": [ + "300", + "500", + "700" + ] + }, + { + "Grenze Gotisch": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Share": [ + "regular", + "italic", + "700", + "700italic" + ] + }, + { + "McLaren": [ + "regular" + ] + }, + { + "Vollkorn SC": [ + "regular", + "600", + "700", + "900" + ] + }, + { + "Love Ya Like A Sister": [ + "regular" + ] + }, + { + "Julee": [ + "regular" + ] + }, + { + "Klee One": [ + "regular", + "600" + ] + }, + { + "BIZ UDPGothic": [ + "regular", + "700" + ] + }, + { + "ZCOOL XiaoWei": [ + "regular" + ] + }, + { + "Cormorant SC": [ + "300", + "regular", + "500", + "600", + "700" + ] + }, + { + "Metrophobic": [ + "regular" + ] + }, + { + "Fondamento": [ + "regular", + "italic" + ] + }, + { + "Zeyada": [ + "regular" + ] + }, + { + "Bowlby One": [ + "regular" + ] + }, + { + "Cutive": [ + "regular" + ] + }, + { + "Fahkwang": [ + "200", + "200italic", + "300", + "300italic", + "regular", + "italic", + "500", + "500italic", + "600", + "600italic", + "700", + "700italic" + ] + }, + { + "Aref Ruqaa": [ + "regular", + "700" + ] + }, + { + "Molengo": [ + "regular" + ] + }, + { + "Tenali Ramakrishna": [ + "regular" + ] + }, + { + "Pompiere": [ + "regular" + ] + }, + { + "Fanwood Text": [ + "regular", + "italic" + ] + }, + { + "Silkscreen": [ + "regular", + "700" + ] + }, + { + "Goudy Bookletter 1911": [ + "regular" + ] + }, + { + "Turret Road": [ + "200", + "300", + "regular", + "500", + "700", + "800" + ] + }, + { + "M PLUS 1": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Andika": [ + "regular", + "italic", + "700", + "700italic" + ] + }, + { + "Sansita Swashed": [ + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Elsie": [ + "regular", + "900" + ] + }, + { + "Baloo Thambi 2": [ + "regular", + "500", + "600", + "700", + "800" + ] + }, + { + "Brawler": [ + "regular", + "700" + ] + }, + { + "Oleo Script Swash Caps": [ + "regular", + "700" + ] + }, + { + "Quando": [ + "regular" + ] + }, + { + "Meddon": [ + "regular" + ] + }, + { + "Allan": [ + "regular", + "700" + ] + }, + { + "Tillana": [ + "regular", + "500", + "600", + "700", + "800" + ] + }, + { + "UnifrakturMaguntia": [ + "regular" + ] + }, + { + "Odibee Sans": [ + "regular" + ] + }, + { + "Cormorant Upright": [ + "300", + "regular", + "500", + "600", + "700" + ] + }, + { + "Ma Shan Zheng": [ + "regular" + ] + }, + { + "Mouse Memoirs": [ + "regular" + ] + }, + { + "Patrick Hand SC": [ + "regular" + ] + }, + { + "Homenaje": [ + "regular" + ] + }, + { + "Shippori Mincho B1": [ + "regular", + "500", + "600", + "700", + "800" + ] + }, + { + "Mirza": [ + "regular", + "500", + "600", + "700" + ] + }, + { + "Style Script": [ + "regular" + ] + }, + { + "Italiana": [ + "regular" + ] + }, + { + "Bellota Text": [ + "300", + "300italic", + "regular", + "italic", + "700", + "700italic" + ] + }, + { + "IM Fell Double Pica": [ + "regular", + "italic" + ] + }, + { + "Vesper Libre": [ + "regular", + "500", + "700", + "900" + ] + }, + { + "Spectral SC": [ + "200", + "200italic", + "300", + "300italic", + "regular", + "italic", + "500", + "500italic", + "600", + "600italic", + "700", + "700italic", + "800", + "800italic" + ] + }, + { + "IM Fell DW Pica": [ + "regular", + "italic" + ] + }, + { + "Sue Ellen Francisco": [ + "regular" + ] + }, + { + "Mansalva": [ + "regular" + ] + }, + { + "Farro": [ + "300", + "regular", + "500", + "700" + ] + }, + { + "Antic Didone": [ + "regular" + ] + }, + { + "Emilys Candy": [ + "regular" + ] + }, + { + "Radley": [ + "regular", + "italic" + ] + }, + { + "Nova Mono": [ + "regular" + ] + }, + { + "Bakbak One": [ + "regular" + ] + }, + { + "Inder": [ + "regular" + ] + }, + { + "Vazirmatn": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Kadwa": [ + "regular", + "700" + ] + }, + { + "Buenard": [ + "regular", + "700" + ] + }, + { + "Zen Antique": [ + "regular" + ] + }, + { + "Rouge Script": [ + "regular" + ] + }, + { + "Noto Nastaliq Urdu": [ + "regular", + "500", + "600", + "700" + ] + }, + { + "Della Respira": [ + "regular" + ] + }, + { + "Montserrat Subrayada": [ + "regular", + "700" + ] + }, + { + "Geo": [ + "regular", + "italic" + ] + }, + { + "Fresca": [ + "regular" + ] + }, + { + "Gravitas One": [ + "regular" + ] + }, + { + "Duru Sans": [ + "regular" + ] + }, + { + "Metamorphous": [ + "regular" + ] + }, + { + "Sedgwick Ave": [ + "regular" + ] + }, + { + "Zen Old Mincho": [ + "regular", + "500", + "600", + "700", + "900" + ] + }, + { + "Flamenco": [ + "300", + "regular" + ] + }, + { + "Montez": [ + "regular" + ] + }, + { + "Hahmlet": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Kodchasan": [ + "200", + "200italic", + "300", + "300italic", + "regular", + "italic", + "500", + "500italic", + "600", + "600italic", + "700", + "700italic" + ] + }, + { + "Big Shoulders Text": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Harmattan": [ + "regular", + "700" + ] + }, + { + "Montaga": [ + "regular" + ] + }, + { + "Libre Bodoni": [ + "regular", + "500", + "600", + "700", + "italic", + "500italic", + "600italic", + "700italic" + ] + }, + { + "Overlock SC": [ + "regular" + ] + }, + { + "Cambo": [ + "regular" + ] + }, + { + "Poly": [ + "regular", + "italic" + ] + }, + { + "Carme": [ + "regular" + ] + }, + { + "League Gothic": [ + "regular" + ] + }, + { + "Raleway Dots": [ + "regular" + ] + }, + { + "Mr De Haviland": [ + "regular" + ] + }, + { + "Chelsea Market": [ + "regular" + ] + }, + { + "Noto Sans Bengali": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Allison": [ + "regular" + ] + }, + { + "Supermercado One": [ + "regular" + ] + }, + { + "RocknRoll One": [ + "regular" + ] + }, + { + "Slackey": [ + "regular" + ] + }, + { + "Oooh Baby": [ + "regular" + ] + }, + { + "Happy Monkey": [ + "regular" + ] + }, + { + "Mako": [ + "regular" + ] + }, + { + "Nerko One": [ + "regular" + ] + }, + { + "Encode Sans Expanded": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Source Serif 4": [ + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900", + "200italic", + "300italic", + "italic", + "500italic", + "600italic", + "700italic", + "800italic", + "900italic" + ] + }, + { + "Headland One": [ + "regular" + ] + }, + { + "Expletus Sans": [ + "regular", + "500", + "600", + "700", + "italic", + "500italic", + "600italic", + "700italic" + ] + }, + { + "IBM Plex Sans KR": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700" + ] + }, + { + "Besley": [ + "regular", + "500", + "600", + "700", + "800", + "900", + "italic", + "500italic", + "600italic", + "700italic", + "800italic", + "900italic" + ] + }, + { + "KoHo": [ + "200", + "200italic", + "300", + "300italic", + "regular", + "italic", + "500", + "500italic", + "600", + "600italic", + "700", + "700italic" + ] + }, + { + "Oregano": [ + "regular", + "italic" + ] + }, + { + "DotGothic16": [ + "regular" + ] + }, + { + "Ms Madi": [ + "regular" + ] + }, + { + "Belgrano": [ + "regular" + ] + }, + { + "Amarante": [ + "regular" + ] + }, + { + "Shojumaru": [ + "regular" + ] + }, + { + "Megrim": [ + "regular" + ] + }, + { + "Convergence": [ + "regular" + ] + }, + { + "Hanalei Fill": [ + "regular" + ] + }, + { + "Xanh Mono": [ + "regular", + "italic" + ] + }, + { + "Syne Mono": [ + "regular" + ] + }, + { + "Battambang": [ + "100", + "300", + "regular", + "700", + "900" + ] + }, + { + "Arya": [ + "regular", + "700" + ] + }, + { + "Zen Kaku Gothic Antique": [ + "300", + "regular", + "500", + "700", + "900" + ] + }, + { + "Jomhuria": [ + "regular" + ] + }, + { + "Lexend Zetta": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Baumans": [ + "regular" + ] + }, + { + "Aguafina Script": [ + "regular" + ] + }, + { + "Notable": [ + "regular" + ] + }, + { + "Baloo Chettan 2": [ + "regular", + "500", + "600", + "700", + "800" + ] + }, + { + "Ceviche One": [ + "regular" + ] + }, + { + "Original Surfer": [ + "regular" + ] + }, + { + "Anaheim": [ + "regular" + ] + }, + { + "Atma": [ + "300", + "regular", + "500", + "600", + "700" + ] + }, + { + "Mochiy Pop One": [ + "regular" + ] + }, + { + "Orienta": [ + "regular" + ] + }, + { + "Over the Rainbow": [ + "regular" + ] + }, + { + "BhuTuka Expanded One": [ + "regular" + ] + }, + { + "Salsa": [ + "regular" + ] + }, + { + "Goblin One": [ + "regular" + ] + }, + { + "Lekton": [ + "regular", + "italic", + "700" + ] + }, + { + "Numans": [ + "regular" + ] + }, + { + "Noto Sans Georgian": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Chau Philomene One": [ + "regular", + "italic" + ] + }, + { + "Federo": [ + "regular" + ] + }, + { + "Alike Angular": [ + "regular" + ] + }, + { + "Bubbler One": [ + "regular" + ] + }, + { + "Noto Sans Sinhala": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Mountains of Christmas": [ + "regular", + "700" + ] + }, + { + "Doppio One": [ + "regular" + ] + }, + { + "Asul": [ + "regular", + "700" + ] + }, + { + "Euphoria Script": [ + "regular" + ] + }, + { + "Ledger": [ + "regular" + ] + }, + { + "Vast Shadow": [ + "regular" + ] + }, + { + "Dela Gothic One": [ + "regular" + ] + }, + { + "Galada": [ + "regular" + ] + }, + { + "Ibarra Real Nova": [ + "regular", + "500", + "600", + "700", + "italic", + "500italic", + "600italic", + "700italic" + ] + }, + { + "Share Tech": [ + "regular" + ] + }, + { + "Clicker Script": [ + "regular" + ] + }, + { + "Akshar": [ + "300", + "regular", + "500", + "600", + "700" + ] + }, + { + "Yusei Magic": [ + "regular" + ] + }, + { + "Timmana": [ + "regular" + ] + }, + { + "B612 Mono": [ + "regular", + "italic", + "700", + "700italic" + ] + }, + { + "Libre Caslon Display": [ + "regular" + ] + }, + { + "Anek Malayalam": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800" + ] + }, + { + "Delius Swash Caps": [ + "regular" + ] + }, + { + "Freckle Face": [ + "regular" + ] + }, + { + "Aboreto": [ + "regular" + ] + }, + { + "Finger Paint": [ + "regular" + ] + }, + { + "Hurricane": [ + "regular" + ] + }, + { + "Coiny": [ + "regular" + ] + }, + { + "Anek Telugu": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800" + ] + }, + { + "Trykker": [ + "regular" + ] + }, + { + "Major Mono Display": [ + "regular" + ] + }, + { + "Tiro Devanagari Hindi": [ + "regular", + "italic" + ] + }, + { + "Dokdo": [ + "regular" + ] + }, + { + "Germania One": [ + "regular" + ] + }, + { + "Bilbo Swash Caps": [ + "regular" + ] + }, + { + "Peralta": [ + "regular" + ] + }, + { + "Crafty Girls": [ + "regular" + ] + }, + { + "Tomorrow": [ + "100", + "100italic", + "200", + "200italic", + "300", + "300italic", + "regular", + "italic", + "500", + "500italic", + "600", + "600italic", + "700", + "700italic", + "800", + "800italic", + "900", + "900italic" + ] + }, + { + "Averia Sans Libre": [ + "300", + "300italic", + "regular", + "italic", + "700", + "700italic" + ] + }, + { + "Codystar": [ + "300", + "regular" + ] + }, + { + "Libre Barcode 39 Extended Text": [ + "regular" + ] + }, + { + "Goldman": [ + "regular", + "700" + ] + }, + { + "Baloo Bhai 2": [ + "regular", + "500", + "600", + "700", + "800" + ] + }, + { + "Hi Melody": [ + "regular" + ] + }, + { + "Faster One": [ + "regular" + ] + }, + { + "Inknut Antiqua": [ + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "ZCOOL QingKe HuangYou": [ + "regular" + ] + }, + { + "Cantora One": [ + "regular" + ] + }, + { + "Ruslan Display": [ + "regular" + ] + }, + { + "Kufam": [ + "regular", + "500", + "600", + "700", + "800", + "900", + "italic", + "500italic", + "600italic", + "700italic", + "800italic", + "900italic" + ] + }, + { + "Give You Glory": [ + "regular" + ] + }, + { + "Recursive": [ + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Noto Sans NKo": [ + "regular" + ] + }, + { + "Walter Turncoat": [ + "regular" + ] + }, + { + "Wendy One": [ + "regular" + ] + }, + { + "Kaisei Decol": [ + "regular", + "500", + "700" + ] + }, + { + "Balthazar": [ + "regular" + ] + }, + { + "Pavanam": [ + "regular" + ] + }, + { + "Nova Round": [ + "regular" + ] + }, + { + "Zen Kurenaido": [ + "regular" + ] + }, + { + "Saira Stencil One": [ + "regular" + ] + }, + { + "Port Lligat Sans": [ + "regular" + ] + }, + { + "Mukta Mahee": [ + "200", + "300", + "regular", + "500", + "600", + "700", + "800" + ] + }, + { + "Lily Script One": [ + "regular" + ] + }, + { + "Eater": [ + "regular" + ] + }, + { + "Just Me Again Down Here": [ + "regular" + ] + }, + { + "Artifika": [ + "regular" + ] + }, + { + "Loved by the King": [ + "regular" + ] + }, + { + "Life Savers": [ + "regular", + "700", + "800" + ] + }, + { + "Shalimar": [ + "regular" + ] + }, + { + "League Script": [ + "regular" + ] + }, + { + "Noto Serif Khojki": [ + "regular", + "500", + "600", + "700" + ] + }, + { + "Encode Sans Semi Expanded": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Lexend Giga": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Sail": [ + "regular" + ] + }, + { + "Tauri": [ + "regular" + ] + }, + { + "Noto Sans Syloti Nagri": [ + "regular" + ] + }, + { + "Prosto One": [ + "regular" + ] + }, + { + "Charmonman": [ + "regular", + "700" + ] + }, + { + "Tienne": [ + "regular", + "700", + "900" + ] + }, + { + "Cormorant Unicase": [ + "300", + "regular", + "500", + "600", + "700" + ] + }, + { + "Katibeh": [ + "regular" + ] + }, + { + "Inria Serif": [ + "300", + "300italic", + "regular", + "italic", + "700", + "700italic" + ] + }, + { + "Glory": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "100italic", + "200italic", + "300italic", + "italic", + "500italic", + "600italic", + "700italic", + "800italic" + ] + }, + { + "Bigshot One": [ + "regular" + ] + }, + { + "Noto Serif Ahom": [ + "regular" + ] + }, + { + "Sarpanch": [ + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Alexandria": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Almendra": [ + "regular", + "italic", + "700", + "700italic" + ] + }, + { + "Poller One": [ + "regular" + ] + }, + { + "Kotta One": [ + "regular" + ] + }, + { + "Cherry Swash": [ + "regular", + "700" + ] + }, + { + "Scope One": [ + "regular" + ] + }, + { + "Piazzolla": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900", + "100italic", + "200italic", + "300italic", + "italic", + "500italic", + "600italic", + "700italic", + "800italic", + "900italic" + ] + }, + { + "Dynalight": [ + "regular" + ] + }, + { + "Modak": [ + "regular" + ] + }, + { + "Alumni Sans": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900", + "100italic", + "200italic", + "300italic", + "italic", + "500italic", + "600italic", + "700italic", + "800italic", + "900italic" + ] + }, + { + "Azeret Mono": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900", + "100italic", + "200italic", + "300italic", + "italic", + "500italic", + "600italic", + "700italic", + "800italic", + "900italic" + ] + }, + { + "Ephesis": [ + "regular" + ] + }, + { + "Libre Barcode 39 Text": [ + "regular" + ] + }, + { + "Comforter Brush": [ + "regular" + ] + }, + { + "Vibur": [ + "regular" + ] + }, + { + "Voces": [ + "regular" + ] + }, + { + "Solway": [ + "300", + "regular", + "500", + "700", + "800" + ] + }, + { + "Averia Gruesa Libre": [ + "regular" + ] + }, + { + "Andada Pro": [ + "regular", + "500", + "600", + "700", + "800", + "italic", + "500italic", + "600italic", + "700italic", + "800italic" + ] + }, + { + "Akaya Telivigala": [ + "regular" + ] + }, + { + "Imprima": [ + "regular" + ] + }, + { + "Gaegu": [ + "300", + "regular", + "700" + ] + }, + { + "MedievalSharp": [ + "regular" + ] + }, + { + "Sonsie One": [ + "regular" + ] + }, + { + "Yeon Sung": [ + "regular" + ] + }, + { + "Sumana": [ + "regular", + "700" + ] + }, + { + "Kranky": [ + "regular" + ] + }, + { + "Gamja Flower": [ + "regular" + ] + }, + { + "Libre Barcode 128": [ + "regular" + ] + }, + { + "Ranchers": [ + "regular" + ] + }, + { + "Lexend Exa": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Delius Unicase": [ + "regular", + "700" + ] + }, + { + "Frijole": [ + "regular" + ] + }, + { + "Reggae One": [ + "regular" + ] + }, + { + "Nova Square": [ + "regular" + ] + }, + { + "The Girl Next Door": [ + "regular" + ] + }, + { + "Cherry Cream Soda": [ + "regular" + ] + }, + { + "Bellota": [ + "300", + "300italic", + "regular", + "italic", + "700", + "700italic" + ] + }, + { + "Gafata": [ + "regular" + ] + }, + { + "Prociono": [ + "regular" + ] + }, + { + "BIZ UDPMincho": [ + "regular", + "700" + ] + }, + { + "Montagu Slab": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700" + ] + }, + { + "Kdam Thmor Pro": [ + "regular" + ] + }, + { + "Gayathri": [ + "100", + "regular", + "700" + ] + }, + { + "Gemunu Libre": [ + "200", + "300", + "regular", + "500", + "600", + "700", + "800" + ] + }, + { + "Sofia Sans Extra Condensed": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900", + "100italic", + "200italic", + "300italic", + "italic", + "500italic", + "600italic", + "700italic", + "800italic", + "900italic" + ] + }, + { + "UnifrakturCook": [ + "700" + ] + }, + { + "Wire One": [ + "regular" + ] + }, + { + "Sevillana": [ + "regular" + ] + }, + { + "Rubik Dirt": [ + "regular" + ] + }, + { + "Londrina Outline": [ + "regular" + ] + }, + { + "Asar": [ + "regular" + ] + }, + { + "Chango": [ + "regular" + ] + }, + { + "Medula One": [ + "regular" + ] + }, + { + "Spicy Rice": [ + "regular" + ] + }, + { + "Birthstone": [ + "regular" + ] + }, + { + "Baloo Bhaina 2": [ + "regular", + "500", + "600", + "700", + "800" + ] + }, + { + "Sree Krushnadevaraya": [ + "regular" + ] + }, + { + "Baloo Bhaijaan 2": [ + "regular", + "500", + "600", + "700", + "800" + ] + }, + { + "Uncial Antiqua": [ + "regular" + ] + }, + { + "Port Lligat Slab": [ + "regular" + ] + }, + { + "Denk One": [ + "regular" + ] + }, + { + "Carrois Gothic SC": [ + "regular" + ] + }, + { + "Corinthia": [ + "regular", + "700" + ] + }, + { + "IM Fell French Canon": [ + "regular", + "italic" + ] + }, + { + "Manuale": [ + "300", + "regular", + "500", + "600", + "700", + "800", + "300italic", + "italic", + "500italic", + "600italic", + "700italic", + "800italic" + ] + }, + { + "Strait": [ + "regular" + ] + }, + { + "Londrina Shadow": [ + "regular" + ] + }, + { + "Puritan": [ + "regular", + "italic", + "700", + "700italic" + ] + }, + { + "Kaisei Tokumin": [ + "regular", + "500", + "700", + "800" + ] + }, + { + "Rationale": [ + "regular" + ] + }, + { + "Lexend Mega": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Unlock": [ + "regular" + ] + }, + { + "Macondo Swash Caps": [ + "regular" + ] + }, + { + "Inria Sans": [ + "300", + "300italic", + "regular", + "italic", + "700", + "700italic" + ] + }, + { + "Sulphur Point": [ + "300", + "regular", + "700" + ] + }, + { + "Mina": [ + "regular", + "700" + ] + }, + { + "East Sea Dokdo": [ + "regular" + ] + }, + { + "Lovers Quarrel": [ + "regular" + ] + }, + { + "Song Myung": [ + "regular" + ] + }, + { + "Ruthie": [ + "regular" + ] + }, + { + "Tiro Kannada": [ + "regular", + "italic" + ] + }, + { + "Fontdiner Swanky": [ + "regular" + ] + }, + { + "Ramaraja": [ + "regular" + ] + }, + { + "Stylish": [ + "regular" + ] + }, + { + "Baloo Tammudu 2": [ + "regular", + "500", + "600", + "700", + "800" + ] + }, + { + "Murecho": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Iceland": [ + "regular" + ] + }, + { + "Unkempt": [ + "regular", + "700" + ] + }, + { + "Stoke": [ + "300", + "regular" + ] + }, + { + "Gotu": [ + "regular" + ] + }, + { + "Noto Sans Telugu": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "MuseoModerno": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900", + "100italic", + "200italic", + "300italic", + "italic", + "500italic", + "600italic", + "700italic", + "800italic", + "900italic" + ] + }, + { + "Kaisei Opti": [ + "regular", + "500", + "700" + ] + }, + { + "Red Hat Mono": [ + "300", + "regular", + "500", + "600", + "700", + "300italic", + "italic", + "500italic", + "600italic", + "700italic" + ] + }, + { + "Zilla Slab Highlight": [ + "regular", + "700" + ] + }, + { + "Nokora": [ + "100", + "300", + "regular", + "700", + "900" + ] + }, + { + "Farsan": [ + "regular" + ] + }, + { + "Noto Serif Devanagari": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Paprika": [ + "regular" + ] + }, + { + "Khmer": [ + "regular" + ] + }, + { + "Habibi": [ + "regular" + ] + }, + { + "Redressed": [ + "regular" + ] + }, + { + "Shanti": [ + "regular" + ] + }, + { + "Bayon": [ + "regular" + ] + }, + { + "Mystery Quest": [ + "regular" + ] + }, + { + "Kantumruy": [ + "300", + "regular", + "700" + ] + }, + { + "ZCOOL KuaiLe": [ + "regular" + ] + }, + { + "Sirin Stencil": [ + "regular" + ] + }, + { + "Scheherazade New": [ + "regular", + "700" + ] + }, + { + "Simonetta": [ + "regular", + "italic", + "900", + "900italic" + ] + }, + { + "Ranga": [ + "regular", + "700" + ] + }, + { + "WindSong": [ + "regular", + "500" + ] + }, + { + "Trade Winds": [ + "regular" + ] + }, + { + "Akronim": [ + "regular" + ] + }, + { + "Cute Font": [ + "regular" + ] + }, + { + "Potta One": [ + "regular" + ] + }, + { + "Rosarivo": [ + "regular", + "italic" + ] + }, + { + "Dekko": [ + "regular" + ] + }, + { + "Engagement": [ + "regular" + ] + }, + { + "Kavoon": [ + "regular" + ] + }, + { + "Miniver": [ + "regular" + ] + }, + { + "Noto Sans Symbols": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Sancreek": [ + "regular" + ] + }, + { + "Stick": [ + "regular" + ] + }, + { + "Piedra": [ + "regular" + ] + }, + { + "Familjen Grotesk": [ + "regular", + "500", + "600", + "700", + "italic", + "500italic", + "600italic", + "700italic" + ] + }, + { + "Ewert": [ + "regular" + ] + }, + { + "Hachi Maru Pop": [ + "regular" + ] + }, + { + "Rum Raisin": [ + "regular" + ] + }, + { + "Gorditas": [ + "regular", + "700" + ] + }, + { + "Marko One": [ + "regular" + ] + }, + { + "Sarina": [ + "regular" + ] + }, + { + "Monofett": [ + "regular" + ] + }, + { + "Chicle": [ + "regular" + ] + }, + { + "Orelega One": [ + "regular" + ] + }, + { + "Stint Ultra Expanded": [ + "regular" + ] + }, + { + "M PLUS 2": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Train One": [ + "regular" + ] + }, + { + "Sura": [ + "regular", + "700" + ] + }, + { + "Qwitcher Grypen": [ + "regular", + "700" + ] + }, + { + "Coda Caption": [ + "800" + ] + }, + { + "IBM Plex Sans Devanagari": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700" + ] + }, + { + "Hina Mincho": [ + "regular" + ] + }, + { + "Kulim Park": [ + "200", + "200italic", + "300", + "300italic", + "regular", + "italic", + "600", + "600italic", + "700", + "700italic" + ] + }, + { + "Road Rage": [ + "regular" + ] + }, + { + "Varta": [ + "300", + "regular", + "500", + "600", + "700" + ] + }, + { + "Content": [ + "regular", + "700" + ] + }, + { + "Margarine": [ + "regular" + ] + }, + { + "Grape Nuts": [ + "regular" + ] + }, + { + "Angkor": [ + "regular" + ] + }, + { + "Bigelow Rules": [ + "regular" + ] + }, + { + "Fascinate Inline": [ + "regular" + ] + }, + { + "Chathura": [ + "100", + "300", + "regular", + "700", + "800" + ] + }, + { + "Moul": [ + "regular" + ] + }, + { + "Iceberg": [ + "regular" + ] + }, + { + "Buda": [ + "300" + ] + }, + { + "Libre Barcode 128 Text": [ + "regular" + ] + }, + { + "Ruluko": [ + "regular" + ] + }, + { + "New Rocker": [ + "regular" + ] + }, + { + "Bahianita": [ + "regular" + ] + }, + { + "Barrio": [ + "regular" + ] + }, + { + "Red Rose": [ + "300", + "regular", + "500", + "600", + "700" + ] + }, + { + "Milonga": [ + "regular" + ] + }, + { + "Kavivanar": [ + "regular" + ] + }, + { + "Condiment": [ + "regular" + ] + }, + { + "Cagliostro": [ + "regular" + ] + }, + { + "Gowun Batang": [ + "regular", + "700" + ] + }, + { + "Ribeye": [ + "regular" + ] + }, + { + "IBM Plex Sans Thai Looped": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700" + ] + }, + { + "Spline Sans": [ + "300", + "regular", + "500", + "600", + "700" + ] + }, + { + "Gantari": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900", + "100italic", + "200italic", + "300italic", + "italic", + "500italic", + "600italic", + "700italic", + "800italic", + "900italic" + ] + }, + { + "Molle": [ + "italic" + ] + }, + { + "Stalemate": [ + "regular" + ] + }, + { + "Englebert": [ + "regular" + ] + }, + { + "Jolly Lodger": [ + "regular" + ] + }, + { + "Nova Flat": [ + "regular" + ] + }, + { + "Crushed": [ + "regular" + ] + }, + { + "Sofia Sans": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900", + "100italic", + "200italic", + "300italic", + "italic", + "500italic", + "600italic", + "700italic", + "800italic", + "900italic" + ] + }, + { + "Croissant One": [ + "regular" + ] + }, + { + "IM Fell Great Primer": [ + "regular", + "italic" + ] + }, + { + "Offside": [ + "regular" + ] + }, + { + "Odor Mean Chey": [ + "regular" + ] + }, + { + "Keania One": [ + "regular" + ] + }, + { + "Donegal One": [ + "regular" + ] + }, + { + "Noto Sans Myanmar": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Noto Serif Malayalam": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Noto Emoji": [ + "300", + "regular", + "500", + "600", + "700" + ] + }, + { + "Sahitya": [ + "regular", + "700" + ] + }, + { + "Sassy Frass": [ + "regular" + ] + }, + { + "Text Me One": [ + "regular" + ] + }, + { + "Meie Script": [ + "regular" + ] + }, + { + "Yaldevi": [ + "200", + "300", + "regular", + "500", + "600", + "700" + ] + }, + { + "Zen Dots": [ + "regular" + ] + }, + { + "Tulpen One": [ + "regular" + ] + }, + { + "Griffy": [ + "regular" + ] + }, + { + "Elsie Swash Caps": [ + "regular", + "900" + ] + }, + { + "Underdog": [ + "regular" + ] + }, + { + "Anek Tamil": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800" + ] + }, + { + "Bilbo": [ + "regular" + ] + }, + { + "Junge": [ + "regular" + ] + }, + { + "Vampiro One": [ + "regular" + ] + }, + { + "Noto Serif Thai": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Wellfleet": [ + "regular" + ] + }, + { + "Inika": [ + "regular", + "700" + ] + }, + { + "Dorsa": [ + "regular" + ] + }, + { + "Kumar One": [ + "regular" + ] + }, + { + "Modern Antiqua": [ + "regular" + ] + }, + { + "Comforter": [ + "regular" + ] + }, + { + "Autour One": [ + "regular" + ] + }, + { + "Srisakdi": [ + "regular", + "700" + ] + }, + { + "Anek Gujarati": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800" + ] + }, + { + "Ravi Prakash": [ + "regular" + ] + }, + { + "Moon Dance": [ + "regular" + ] + }, + { + "Jomolhari": [ + "regular" + ] + }, + { + "Fenix": [ + "regular" + ] + }, + { + "MonteCarlo": [ + "regular" + ] + }, + { + "Square Peg": [ + "regular" + ] + }, + { + "Radio Canada": [ + "300", + "regular", + "500", + "600", + "700", + "300italic", + "italic", + "500italic", + "600italic", + "700italic" + ] + }, + { + "Mochiy Pop P One": [ + "regular" + ] + }, + { + "Karantina": [ + "300", + "regular", + "700" + ] + }, + { + "Linden Hill": [ + "regular", + "italic" + ] + }, + { + "Shippori Antique": [ + "regular" + ] + }, + { + "Risque": [ + "regular" + ] + }, + { + "Eagle Lake": [ + "regular" + ] + }, + { + "Nosifer": [ + "regular" + ] + }, + { + "Zhi Mang Xing": [ + "regular" + ] + }, + { + "Rampart One": [ + "regular" + ] + }, + { + "Felipa": [ + "regular" + ] + }, + { + "Fuzzy Bubbles": [ + "regular", + "700" + ] + }, + { + "Diplomata": [ + "regular" + ] + }, + { + "Solitreo": [ + "regular" + ] + }, + { + "Swanky and Moo Moo": [ + "regular" + ] + }, + { + "Akaya Kanadaka": [ + "regular" + ] + }, + { + "Yomogi": [ + "regular" + ] + }, + { + "Abyssinica SIL": [ + "regular" + ] + }, + { + "Noto Sans Kannada": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Arbutus": [ + "regular" + ] + }, + { + "Hanken Grotesk": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900", + "100italic", + "200italic", + "300italic", + "italic", + "500italic", + "600italic", + "700italic", + "800italic", + "900italic" + ] + }, + { + "Noto Sans Anatolian Hieroglyphs": [ + "regular" + ] + }, + { + "Kaisei HarunoUmi": [ + "regular", + "500", + "700" + ] + }, + { + "Beth Ellen": [ + "regular" + ] + }, + { + "Gowun Dodum": [ + "regular" + ] + }, + { + "Freehand": [ + "regular" + ] + }, + { + "Libre Barcode 39 Extended": [ + "regular" + ] + }, + { + "Anybody": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900", + "100italic", + "200italic", + "300italic", + "italic", + "500italic", + "600italic", + "700italic", + "800italic", + "900italic" + ] + }, + { + "Rhodium Libre": [ + "regular" + ] + }, + { + "Bona Nova": [ + "regular", + "italic", + "700" + ] + }, + { + "Poor Story": [ + "regular" + ] + }, + { + "Ribeye Marrow": [ + "regular" + ] + }, + { + "Trispace": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800" + ] + }, + { + "Plaster": [ + "regular" + ] + }, + { + "Anek Bangla": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800" + ] + }, + { + "Chilanka": [ + "regular" + ] + }, + { + "Spirax": [ + "regular" + ] + }, + { + "Mrs Sheppards": [ + "regular" + ] + }, + { + "Carattere": [ + "regular" + ] + }, + { + "Passions Conflict": [ + "regular" + ] + }, + { + "Joti One": [ + "regular" + ] + }, + { + "Mohave": [ + "300", + "regular", + "500", + "600", + "700", + "300italic", + "italic", + "500italic", + "600italic", + "700italic" + ] + }, + { + "Licorice": [ + "regular" + ] + }, + { + "Noto Sans Symbols 2": [ + "regular" + ] + }, + { + "BioRhyme Expanded": [ + "200", + "300", + "regular", + "700", + "800" + ] + }, + { + "Princess Sofia": [ + "regular" + ] + }, + { + "Noto Sans Armenian": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "BIZ UDGothic": [ + "regular", + "700" + ] + }, + { + "Maiden Orange": [ + "regular" + ] + }, + { + "Metal Mania": [ + "regular" + ] + }, + { + "Romanesco": [ + "regular" + ] + }, + { + "Joan": [ + "regular" + ] + }, + { + "Fascinate": [ + "regular" + ] + }, + { + "Stalinist One": [ + "regular" + ] + }, + { + "Bahiana": [ + "regular" + ] + }, + { + "Black And White Picture": [ + "regular" + ] + }, + { + "Anek Devanagari": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800" + ] + }, + { + "Vujahday Script": [ + "regular" + ] + }, + { + "Peddana": [ + "regular" + ] + }, + { + "Jim Nightshade": [ + "regular" + ] + }, + { + "Revalia": [ + "regular" + ] + }, + { + "Spline Sans Mono": [ + "300", + "regular", + "500", + "600", + "700", + "300italic", + "italic", + "500italic", + "600italic", + "700italic" + ] + }, + { + "Sono": [ + "200", + "300", + "regular", + "500", + "600", + "700", + "800" + ] + }, + { + "Smokum": [ + "regular" + ] + }, + { + "Yuji Syuku": [ + "regular" + ] + }, + { + "Emblema One": [ + "regular" + ] + }, + { + "Oldenburg": [ + "regular" + ] + }, + { + "IBM Plex Sans JP": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700" + ] + }, + { + "IM Fell DW Pica SC": [ + "regular" + ] + }, + { + "Galdeano": [ + "regular" + ] + }, + { + "Chela One": [ + "regular" + ] + }, + { + "Mogra": [ + "regular" + ] + }, + { + "Stick No Bills": [ + "200", + "300", + "regular", + "500", + "600", + "700", + "800" + ] + }, + { + "Caesar Dressing": [ + "regular" + ] + }, + { + "Nuosu SIL": [ + "regular" + ] + }, + { + "Zen Antique Soft": [ + "regular" + ] + }, + { + "Devonshire": [ + "regular" + ] + }, + { + "Seymour One": [ + "regular" + ] + }, + { + "Grenze": [ + "100", + "100italic", + "200", + "200italic", + "300", + "300italic", + "regular", + "italic", + "500", + "500italic", + "600", + "600italic", + "700", + "700italic", + "800", + "800italic", + "900", + "900italic" + ] + }, + { + "Babylonica": [ + "regular" + ] + }, + { + "Jacques Francois Shadow": [ + "regular" + ] + }, + { + "Galindo": [ + "regular" + ] + }, + { + "Barriecito": [ + "regular" + ] + }, + { + "Diplomata SC": [ + "regular" + ] + }, + { + "Encode Sans SC": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Jacques Francois": [ + "regular" + ] + }, + { + "Lancelot": [ + "regular" + ] + }, + { + "Kirang Haerang": [ + "regular" + ] + }, + { + "Lakki Reddy": [ + "regular" + ] + }, + { + "Almendra SC": [ + "regular" + ] + }, + { + "Tiro Gurmukhi": [ + "regular", + "italic" + ] + }, + { + "Anek Latin": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800" + ] + }, + { + "Noto Sans Tai Viet": [ + "regular" + ] + }, + { + "New Tegomin": [ + "regular" + ] + }, + { + "Birthstone Bounce": [ + "regular", + "500" + ] + }, + { + "IM Fell French Canon SC": [ + "regular" + ] + }, + { + "Charis SIL": [ + "regular", + "italic", + "700", + "700italic" + ] + }, + { + "Smythe": [ + "regular" + ] + }, + { + "Girassol": [ + "regular" + ] + }, + { + "Atomic Age": [ + "regular" + ] + }, + { + "Big Shoulders Stencil Text": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Grechen Fuemen": [ + "regular" + ] + }, + { + "Siemreap": [ + "regular" + ] + }, + { + "Beau Rivage": [ + "regular" + ] + }, + { + "Snippet": [ + "regular" + ] + }, + { + "Glass Antiqua": [ + "regular" + ] + }, + { + "Liu Jian Mao Cao": [ + "regular" + ] + }, + { + "Arima": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700" + ] + }, + { + "Metal": [ + "regular" + ] + }, + { + "Dangrek": [ + "regular" + ] + }, + { + "Flow Circular": [ + "regular" + ] + }, + { + "IM Fell Great Primer SC": [ + "regular" + ] + }, + { + "Qahiri": [ + "regular" + ] + }, + { + "Flavors": [ + "regular" + ] + }, + { + "Texturina": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900", + "100italic", + "200italic", + "300italic", + "italic", + "500italic", + "600italic", + "700italic", + "800italic", + "900italic" + ] + }, + { + "Bungee Outline": [ + "regular" + ] + }, + { + "Bungee Hairline": [ + "regular" + ] + }, + { + "Dr Sugiyama": [ + "regular" + ] + }, + { + "Tiro Bangla": [ + "regular", + "italic" + ] + }, + { + "Long Cang": [ + "regular" + ] + }, + { + "Gentium Book Plus": [ + "regular", + "italic", + "700", + "700italic" + ] + }, + { + "BIZ UDMincho": [ + "regular", + "700" + ] + }, + { + "Benne": [ + "regular" + ] + }, + { + "Fuggles": [ + "regular" + ] + }, + { + "Noto Music": [ + "regular" + ] + }, + { + "Butterfly Kids": [ + "regular" + ] + }, + { + "Imbue": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Alumni Sans Inline One": [ + "regular", + "italic" + ] + }, + { + "Smooch": [ + "regular" + ] + }, + { + "Sedgwick Ave Display": [ + "regular" + ] + }, + { + "Noto Sans Gujarati": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Gupter": [ + "regular", + "500", + "700" + ] + }, + { + "Noto Serif Armenian": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Asset": [ + "regular" + ] + }, + { + "Festive": [ + "regular" + ] + }, + { + "Nova Slim": [ + "regular" + ] + }, + { + "Almendra Display": [ + "regular" + ] + }, + { + "Gidugu": [ + "regular" + ] + }, + { + "Chivo Mono": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900", + "100italic", + "200italic", + "300italic", + "italic", + "500italic", + "600italic", + "700italic", + "800italic", + "900italic" + ] + }, + { + "Sofia Sans Semi Condensed": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900", + "100italic", + "200italic", + "300italic", + "italic", + "500italic", + "600italic", + "700italic", + "800italic", + "900italic" + ] + }, + { + "M PLUS 1 Code": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700" + ] + }, + { + "Mr Bedfort": [ + "regular" + ] + }, + { + "Erica One": [ + "regular" + ] + }, + { + "Gluten": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Noto Sans Khmer": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "The Nautigal": [ + "regular", + "700" + ] + }, + { + "Miss Fajardose": [ + "regular" + ] + }, + { + "Kumar One Outline": [ + "regular" + ] + }, + { + "Fragment Mono": [ + "regular", + "italic" + ] + }, + { + "Waterfall": [ + "regular" + ] + }, + { + "Lavishly Yours": [ + "regular" + ] + }, + { + "Bokor": [ + "regular" + ] + }, + { + "Suwannaphum": [ + "100", + "300", + "regular", + "700", + "900" + ] + }, + { + "Hanalei": [ + "regular" + ] + }, + { + "Zen Tokyo Zoo": [ + "regular" + ] + }, + { + "Tiro Devanagari Sanskrit": [ + "regular", + "italic" + ] + }, + { + "Whisper": [ + "regular" + ] + }, + { + "Noto Sans Oriya": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Praise": [ + "regular" + ] + }, + { + "Water Brush": [ + "regular" + ] + }, + { + "Shippori Antique B1": [ + "regular" + ] + }, + { + "Noto Serif Kannada": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Bonbon": [ + "regular" + ] + }, + { + "Passero One": [ + "regular" + ] + }, + { + "Astloch": [ + "regular", + "700" + ] + }, + { + "Finlandica": [ + "regular", + "500", + "600", + "700", + "italic", + "500italic", + "600italic", + "700italic" + ] + }, + { + "Vibes": [ + "regular" + ] + }, + { + "Noto Sans Math": [ + "regular" + ] + }, + { + "Trochut": [ + "regular", + "italic", + "700" + ] + }, + { + "Noto Sans Gothic": [ + "regular" + ] + }, + { + "Alkalami": [ + "regular" + ] + }, + { + "Suravaram": [ + "regular" + ] + }, + { + "Rubik Bubbles": [ + "regular" + ] + }, + { + "Meow Script": [ + "regular" + ] + }, + { + "Gwendolyn": [ + "regular", + "700" + ] + }, + { + "Combo": [ + "regular" + ] + }, + { + "Ruge Boogie": [ + "regular" + ] + }, + { + "Purple Purse": [ + "regular" + ] + }, + { + "Noto Sans Hanunoo": [ + "regular" + ] + }, + { + "Lexend Tera": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Preahvihear": [ + "regular" + ] + }, + { + "GFS Neohellenic": [ + "regular", + "italic", + "700", + "700italic" + ] + }, + { + "Noto Sans Adlam Unjoined": [ + "regular", + "500", + "600", + "700" + ] + }, + { + "Big Shoulders Stencil Display": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Noto Serif Tamil": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900", + "100italic", + "200italic", + "300italic", + "italic", + "500italic", + "600italic", + "700italic", + "800italic", + "900italic" + ] + }, + { + "DynaPuff": [ + "regular", + "500", + "600", + "700" + ] + }, + { + "Chenla": [ + "regular" + ] + }, + { + "Neonderthaw": [ + "regular" + ] + }, + { + "Fruktur": [ + "regular", + "italic" + ] + }, + { + "Noto Sans Ethiopic": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Butcherman": [ + "regular" + ] + }, + { + "Kantumruy Pro": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "100italic", + "200italic", + "300italic", + "italic", + "500italic", + "600italic", + "700italic" + ] + }, + { + "Sofadi One": [ + "regular" + ] + }, + { + "Mea Culpa": [ + "regular" + ] + }, + { + "Taprom": [ + "regular" + ] + }, + { + "Bonheur Royale": [ + "regular" + ] + }, + { + "Londrina Sketch": [ + "regular" + ] + }, + { + "Snowburst One": [ + "regular" + ] + }, + { + "Hubballi": [ + "regular" + ] + }, + { + "Miltonian": [ + "regular" + ] + }, + { + "Sunshiney": [ + "regular" + ] + }, + { + "Federant": [ + "regular" + ] + }, + { + "Nabla": [ + "regular" + ] + }, + { + "Rubik Glitch": [ + "regular" + ] + }, + { + "IM Fell Double Pica SC": [ + "regular" + ] + }, + { + "Noto Sans Limbu": [ + "regular" + ] + }, + { + "Smooch Sans": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Nova Script": [ + "regular" + ] + }, + { + "Langar": [ + "regular" + ] + }, + { + "Luxurious Script": [ + "regular" + ] + }, + { + "Moulpali": [ + "regular" + ] + }, + { + "Tiro Devanagari Marathi": [ + "regular", + "italic" + ] + }, + { + "Aubrey": [ + "regular" + ] + }, + { + "Lacquer": [ + "regular" + ] + }, + { + "Tiro Tamil": [ + "regular", + "italic" + ] + }, + { + "Noto Sans Samaritan": [ + "regular" + ] + }, + { + "Lexend Peta": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Ballet": [ + "regular" + ] + }, + { + "Noto Sans Gurmukhi": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Gentium Plus": [ + "regular", + "italic", + "700", + "700italic" + ] + }, + { + "Nova Cut": [ + "regular" + ] + }, + { + "Libre Barcode EAN13 Text": [ + "regular" + ] + }, + { + "Fasthand": [ + "regular" + ] + }, + { + "Truculenta": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Noto Serif Gujarati": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Gideon Roman": [ + "regular" + ] + }, + { + "Caramel": [ + "regular" + ] + }, + { + "Gulzar": [ + "regular" + ] + }, + { + "Big Shoulders Inline Display": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Anek Gurmukhi": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800" + ] + }, + { + "Dhurjati": [ + "regular" + ] + }, + { + "Noto Serif Georgian": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "IBM Plex Sans Hebrew": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700" + ] + }, + { + "Rubik Vinyl": [ + "regular" + ] + }, + { + "Inspiration": [ + "regular" + ] + }, + { + "Fleur De Leah": [ + "regular" + ] + }, + { + "Explora": [ + "regular" + ] + }, + { + "Koh Santepheap": [ + "100", + "300", + "regular", + "700", + "900" + ] + }, + { + "Rubik Beastly": [ + "regular" + ] + }, + { + "Geostar": [ + "regular" + ] + }, + { + "Nova Oval": [ + "regular" + ] + }, + { + "Geostar Fill": [ + "regular" + ] + }, + { + "Big Shoulders Inline Text": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Imperial Script": [ + "regular" + ] + }, + { + "Rubik Puddles": [ + "regular" + ] + }, + { + "Edu TAS Beginner": [ + "regular", + "500", + "600", + "700" + ] + }, + { + "Syne Tactile": [ + "regular" + ] + }, + { + "Single Day": [ + "regular" + ] + }, + { + "Sofia Sans Condensed": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900", + "100italic", + "200italic", + "300italic", + "italic", + "500italic", + "600italic", + "700italic", + "800italic", + "900italic" + ] + }, + { + "Miltonian Tattoo": [ + "regular" + ] + }, + { + "Tai Heritage Pro": [ + "regular", + "700" + ] + }, + { + "Rubik Distressed": [ + "regular" + ] + }, + { + "Noto Serif Khmer": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Noto Sans Lao": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Kenia": [ + "regular" + ] + }, + { + "Petemoss": [ + "regular" + ] + }, + { + "Noto Sans Javanese": [ + "regular", + "500", + "600", + "700" + ] + }, + { + "Updock": [ + "regular" + ] + }, + { + "Noto Sans Thai Looped": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Aref Ruqaa Ink": [ + "regular", + "700" + ] + }, + { + "Love Light": [ + "regular" + ] + }, + { + "Edu VIC WA NT Beginner": [ + "regular", + "500", + "600", + "700" + ] + }, + { + "Noto Sans Coptic": [ + "regular" + ] + }, + { + "Marhey": [ + "300", + "regular", + "500", + "600", + "700" + ] + }, + { + "Rubik 80s Fade": [ + "regular" + ] + }, + { + "Blaka Hollow": [ + "regular" + ] + }, + { + "Island Moments": [ + "regular" + ] + }, + { + "Uchen": [ + "regular" + ] + }, + { + "Splash": [ + "regular" + ] + }, + { + "Tourney": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900", + "100italic", + "200italic", + "300italic", + "italic", + "500italic", + "600italic", + "700italic", + "800italic", + "900italic" + ] + }, + { + "Rubik Spray Paint": [ + "regular" + ] + }, + { + "Anek Kannada": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800" + ] + }, + { + "Yuji Boku": [ + "regular" + ] + }, + { + "Rubik Microbe": [ + "regular" + ] + }, + { + "Luxurious Roman": [ + "regular" + ] + }, + { + "Amiri Quran": [ + "regular" + ] + }, + { + "Martian Mono": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800" + ] + }, + { + "Warnes": [ + "regular" + ] + }, + { + "Noto Serif Hebrew": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Send Flowers": [ + "regular" + ] + }, + { + "Genos": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900", + "100italic", + "200italic", + "300italic", + "italic", + "500italic", + "600italic", + "700italic", + "800italic", + "900italic" + ] + }, + { + "Tapestry": [ + "regular" + ] + }, + { + "Edu NSW ACT Foundation": [ + "regular", + "500", + "600", + "700" + ] + }, + { + "Are You Serious": [ + "regular" + ] + }, + { + "Oi": [ + "regular" + ] + }, + { + "Noto Sans Tai Le": [ + "regular" + ] + }, + { + "Rubik Wet Paint": [ + "regular" + ] + }, + { + "Noto Serif Sinhala": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Rubik Gemstones": [ + "regular" + ] + }, + { + "Alumni Sans Pinstripe": [ + "regular", + "italic" + ] + }, + { + "Blaka": [ + "regular" + ] + }, + { + "Noto Serif HK": [ + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Noto Sans Adlam": [ + "regular", + "500", + "600", + "700" + ] + }, + { + "Zen Loop": [ + "regular", + "italic" + ] + }, + { + "Noto Sans Old South Arabian": [ + "regular" + ] + }, + { + "Kolker Brush": [ + "regular" + ] + }, + { + "Edu QLD Beginner": [ + "regular", + "500", + "600", + "700" + ] + }, + { + "Anek Odia": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800" + ] + }, + { + "Rubik Storm": [ + "regular" + ] + }, + { + "Yuji Mai": [ + "regular" + ] + }, + { + "Padyakke Expanded One": [ + "regular" + ] + }, + { + "Noto Serif Telugu": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Cairo Play": [ + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Kings": [ + "regular" + ] + }, + { + "Noto Sans Carian": [ + "regular" + ] + }, + { + "Tiro Telugu": [ + "regular", + "italic" + ] + }, + { + "Rubik Marker Hatch": [ + "regular" + ] + }, + { + "Noto Sans Egyptian Hieroglyphs": [ + "regular" + ] + }, + { + "Noto Serif Toto": [ + "regular", + "500", + "600", + "700" + ] + }, + { + "Ole": [ + "regular" + ] + }, + { + "Noto Sans Tifinagh": [ + "regular" + ] + }, + { + "Reem Kufi Fun": [ + "regular", + "500", + "600", + "700" + ] + }, + { + "My Soul": [ + "regular" + ] + }, + { + "Bungee Spice": [ + "regular" + ] + }, + { + "Redacted Script": [ + "300", + "regular", + "700" + ] + }, + { + "M PLUS Code Latin": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700" + ] + }, + { + "Noto Sans Old Turkic": [ + "regular" + ] + }, + { + "Edu SA Beginner": [ + "regular", + "500", + "600", + "700" + ] + }, + { + "Moo Lah Lah": [ + "regular" + ] + }, + { + "Cherish": [ + "regular" + ] + }, + { + "Alumni Sans Collegiate One": [ + "regular", + "italic" + ] + }, + { + "Noto Serif Tibetan": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Estonia": [ + "regular" + ] + }, + { + "Puppies Play": [ + "regular" + ] + }, + { + "Noto Sans Tamil Supplement": [ + "regular" + ] + }, + { + "Noto Serif Ethiopic": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Noto Sans Tagbanwa": [ + "regular" + ] + }, + { + "Noto Serif Lao": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Noto Sans Thaana": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Noto Sans Cherokee": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Grey Qo": [ + "regular" + ] + }, + { + "Rubik Iso": [ + "regular" + ] + }, + { + "Reem Kufi Ink": [ + "regular" + ] + }, + { + "Noto Sans Deseret": [ + "regular" + ] + }, + { + "Mingzat": [ + "regular" + ] + }, + { + "Noto Sans Lao Looped": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Noto Sans Canadian Aboriginal": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Noto Sans Tangsa": [ + "regular", + "500", + "600", + "700" + ] + }, + { + "Redacted": [ + "regular" + ] + }, + { + "Twinkle Star": [ + "regular" + ] + }, + { + "Noto Sans Gunjala Gondi": [ + "regular" + ] + }, + { + "Noto Sans Sora Sompeng": [ + "regular", + "500", + "600", + "700" + ] + }, + { + "Rubik Maze": [ + "regular" + ] + }, + { + "Noto Sans Meetei Mayek": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Flow Block": [ + "regular" + ] + }, + { + "Noto Serif Myanmar": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Noto Sans SignWriting": [ + "regular" + ] + }, + { + "Noto Rashi Hebrew": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Noto Sans Bamum": [ + "regular", + "500", + "600", + "700" + ] + }, + { + "Rubik Burned": [ + "regular" + ] + }, + { + "Noto Sans Old Italic": [ + "regular" + ] + }, + { + "Noto Sans Buginese": [ + "regular" + ] + }, + { + "Ingrid Darling": [ + "regular" + ] + }, + { + "Noto Sans Vai": [ + "regular" + ] + }, + { + "Flow Rounded": [ + "regular" + ] + }, + { + "Noto Sans Ugaritic": [ + "regular" + ] + }, + { + "Noto Sans Old Hungarian": [ + "regular" + ] + }, + { + "Blaka Ink": [ + "regular" + ] + }, + { + "Noto Serif Tangut": [ + "regular" + ] + }, + { + "Noto Serif Oriya": [ + "regular", + "500", + "600", + "700" + ] + }, + { + "Noto Sans Osage": [ + "regular" + ] + }, + { + "Noto Sans Imperial Aramaic": [ + "regular" + ] + }, + { + "Noto Sans Tagalog": [ + "regular" + ] + }, + { + "Noto Sans Cuneiform": [ + "regular" + ] + }, + { + "Noto Sans Yi": [ + "regular" + ] + }, + { + "Noto Sans Old Persian": [ + "regular" + ] + }, + { + "Noto Sans Mongolian": [ + "regular" + ] + }, + { + "Noto Traditional Nushu": [ + "regular" + ] + }, + { + "Noto Sans Balinese": [ + "regular", + "500", + "600", + "700" + ] + }, + { + "Noto Serif Balinese": [ + "regular" + ] + }, + { + "Noto Sans Cham": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Noto Sans Medefaidrin": [ + "regular", + "500", + "600", + "700" + ] + }, + { + "Noto Sans Brahmi": [ + "regular" + ] + }, + { + "Noto Sans Avestan": [ + "regular" + ] + }, + { + "Noto Sans Chakma": [ + "regular" + ] + }, + { + "Noto Serif Gurmukhi": [ + "100", + "200", + "300", + "regular", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Noto Sans Buhid": [ + "regular" + ] + }, + { + "Noto Sans Multani": [ + "regular" + ] + }, + { + "Noto Serif Dogra": [ + "regular" + ] + }, + { + "Noto Sans Kayah Li": [ + "regular", + "500", + "600", + "700" + ] + }, + { + "Noto Serif NP Hmong": [ + "regular", + "500", + "600", + "700" + ] + }, + { + "Noto Sans Ol Chiki": [ + "regular", + "500", + "600", + "700" + ] + }, + { + "Noto Sans Marchen": [ + "regular" + ] + }, + { + "Noto Sans Grantha": [ + "regular" + ] + }, + { + "Noto Sans Linear A": [ + "regular" + ] + }, + { + "Noto Serif Grantha": [ + "regular" + ] + }, + { + "Noto Sans Mro": [ + "regular" + ] + }, + { + "Noto Sans New Tai Lue": [ + "regular", + "500", + "600", + "700" + ] + }, + { + "Noto Sans Bassa Vah": [ + "regular", + "500", + "600", + "700" + ] + }, + { + "Noto Sans Pahawh Hmong": [ + "regular" + ] + }, + { + "Noto Sans Lisu": [ + "regular", + "500", + "600", + "700" + ] + }, + { + "Noto Sans Sundanese": [ + "regular", + "500", + "600", + "700" + ] + }, + { + "Noto Sans Inscriptional Pahlavi": [ + "regular" + ] + }, + { + "Noto Sans Psalter Pahlavi": [ + "regular" + ] + }, + { + "Noto Sans Cypriot": [ + "regular" + ] + }, + { + "Noto Sans Saurashtra": [ + "regular" + ] + }, + { + "Noto Sans Tai Tham": [ + "regular", + "500", + "600", + "700" + ] + }, + { + "Noto Sans Caucasian Albanian": [ + "regular" + ] + }, + { + "Noto Sans Runic": [ + "regular" + ] + }, + { + "Noto Sans Batak": [ + "regular" + ] + }, + { + "Noto Sans Old North Arabian": [ + "regular" + ] + }, + { + "Noto Serif Yezidi": [ + "regular", + "500", + "600", + "700" + ] + }, + { + "Noto Sans Wancho": [ + "regular" + ] + }, + { + "Noto Sans Hanifi Rohingya": [ + "regular", + "500", + "600", + "700" + ] + }, + { + "Noto Sans Sharada": [ + "regular" + ] + }, + { + "Noto Sans Lydian": [ + "regular" + ] + }, + { + "Noto Sans Zanabazar Square": [ + "regular" + ] + }, + { + "Noto Sans Miao": [ + "regular" + ] + }, + { + "Noto Sans Inscriptional Parthian": [ + "regular" + ] + }, + { + "Noto Sans Shavian": [ + "regular" + ] + }, + { + "Noto Sans Masaram Gondi": [ + "regular" + ] + }, + { + "Noto Sans Newa": [ + "regular" + ] + }, + { + "Noto Sans Takri": [ + "regular" + ] + }, + { + "Noto Sans Kaithi": [ + "regular" + ] + }, + { + "Noto Sans Warang Citi": [ + "regular" + ] + }, + { + "Noto Sans Pau Cin Hau": [ + "regular" + ] + }, + { + "Noto Sans Khudawadi": [ + "regular" + ] + }, + { + "Noto Sans Siddham": [ + "regular" + ] + }, + { + "Noto Sans Khojki": [ + "regular" + ] + }, + { + "Noto Sans Rejang": [ + "regular" + ] + }, + { + "Noto Sans Osmanya": [ + "regular" + ] + }, + { + "Noto Sans Mayan Numerals": [ + "regular" + ] + }, + { + "Noto Sans Lepcha": [ + "regular" + ] + }, + { + "Noto Sans Modi": [ + "regular" + ] + }, + { + "Noto Sans Palmyrene": [ + "regular" + ] + }, + { + "Noto Sans Soyombo": [ + "regular" + ] + }, + { + "Noto Sans Glagolitic": [ + "regular" + ] + }, + { + "Noto Sans Indic Siyaq Numbers": [ + "regular" + ] + }, + { + "Noto Sans Syriac": [ + "100", + "regular", + "900" + ] + }, + { + "Noto Sans Hatran": [ + "regular" + ] + }, + { + "Noto Sans Duployan": [ + "regular" + ] + }, + { + "Noto Sans Bhaiksuki": [ + "regular" + ] + }, + { + "Noto Sans Kharoshthi": [ + "regular" + ] + }, + { + "Noto Sans Phags Pa": [ + "regular" + ] + }, + { + "Noto Sans Nabataean": [ + "regular" + ] + }, + { + "Noto Sans Phoenician": [ + "regular" + ] + }, + { + "Noto Sans Old Permic": [ + "regular" + ] + }, + { + "Noto Sans Ogham": [ + "regular" + ] + }, + { + "Noto Sans Elbasan": [ + "regular" + ] + }, + { + "Noto Sans Lycian": [ + "regular" + ] + }, + { + "Noto Sans Elymaic": [ + "regular" + ] + }, + { + "Noto Sans Old Sogdian": [ + "regular" + ] + }, + { + "Noto Sans Manichaean": [ + "regular" + ] + }, + { + "Noto Sans Sogdian": [ + "regular" + ] + }, + { + "Noto Sans Linear B": [ + "regular" + ] + }, + { + "Noto Sans Meroitic": [ + "regular" + ] + }, + { + "Noto Sans Nushu": [ + "regular" + ] + }, + { + "Noto Sans Mende Kikakui": [ + "regular" + ] + }, + { + "Noto Sans Tirhuta": [ + "regular" + ] + }, + { + "Noto Sans Mandaic": [ + "regular" + ] + }, + { + "Noto Sans Mahajani": [ + "regular" + ] + } +] \ No newline at end of file diff --git a/src/scripts/user/index.js b/src/scripts/user/index.js deleted file mode 100644 index e69de29b..00000000 From fe1bfc1ec6f8cbd13fbb6cd535e04fd4203bc3d4 Mon Sep 17 00:00:00 2001 From: Erik Golinelli Date: Thu, 9 Feb 2023 20:46:34 +0100 Subject: [PATCH 021/264] adds a module that generate the font list fetching the google api --- bin/gfontsList.mjs | 17 ++++++------ package-lock.json | 69 ++-------------------------------------------- package.json | 1 + 3 files changed, 13 insertions(+), 74 deletions(-) diff --git a/bin/gfontsList.mjs b/bin/gfontsList.mjs index f6633ad2..ea5b2ea1 100644 --- a/bin/gfontsList.mjs +++ b/bin/gfontsList.mjs @@ -18,29 +18,30 @@ async function getFontSet(params) { return response.json() }) .then((data) => { - console.log('Fetch for new font successfully') + console.log('Fetch for new fonts successfully') console.log(data.items) - /* parse and store the data that we need */ + /* Parse and store the data that we need */ fonts = data.items.map(item => { return { [item.family]: item.variants} } ) - console.log(fonts) - - const generatedJson = JSON.stringify(fonts, null, 2) + /* Convert the js object into a pretty printed json. */ + const generatedFontSet = JSON.stringify(fonts, null, 2) + /* log some data in order to check that everything is working properly. */ + console.log(fonts); console.log('Writing into ' + destination) + /* write the json to the file used into customizer to select the file */ fs.writeFileSync( destination, - generatedJson, { + generatedFontSet, { encoding: 'utf8' }, (err, data) => { if (err) { return err; } - console.log(data) return true }) }) @@ -52,7 +53,7 @@ async function getFontSet(params) { return false } -/** Create the colorset then output the result */ +/** Create the fontset then output the result */ await getFontSet(apiParams) process.exit(0) diff --git a/package-lock.json b/package-lock.json index d67aa149..adcf67fd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "modul-r", - "version": "1.5.0", + "version": "2.0.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "modul-r", - "version": "1.5.0", + "version": "2.0.0", "license": "GPL-3.0", "devDependencies": { "@babel/core": "^7.20.12", @@ -15,8 +15,7 @@ "imagemin": "^8.0.1", "imagemin-mozjpeg": "^10.0.0", "imagemin-svgo": "^10.0.1", - "imagemin-webp": "^7.0.0", - "infinite-scroll": "^3.0.6" + "imagemin-webp": "^7.0.0" }, "engines": { "node": ">=14.0.0", @@ -7267,12 +7266,6 @@ "node": ">= 0.8" } }, - "node_modules/desandro-matches-selector": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/desandro-matches-selector/-/desandro-matches-selector-2.0.2.tgz", - "integrity": "sha512-+1q0nXhdzg1IpIJdMKalUwvvskeKnYyEe3shPRwedNcWtnhEKT3ZxvFjzywHDeGcKViIxTCAoOYQWP1qD7VNyg==", - "dev": true - }, "node_modules/destroy": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", @@ -8534,12 +8527,6 @@ "node": ">= 0.6" } }, - "node_modules/ev-emitter": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ev-emitter/-/ev-emitter-1.1.1.tgz", - "integrity": "sha512-ipiDYhdQSCZ4hSbX4rMW+XzNKMD1prg/sTvoVmSLkuQ1MVlwjJQQA+sW8tMYR3BLUr9KjodFV4pvzunvRhd33Q==", - "dev": true - }, "node_modules/eventemitter3": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", @@ -9211,15 +9198,6 @@ "node": ">=6" } }, - "node_modules/fizzy-ui-utils": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/fizzy-ui-utils/-/fizzy-ui-utils-2.0.7.tgz", - "integrity": "sha512-CZXDVXQ1If3/r8s0T+v+qVeMshhfcuq0rqIFgJnrtd+Bu8GmDmqMjntjUePypVtjHXKJ6V4sw9zeyox34n9aCg==", - "dev": true, - "dependencies": { - "desandro-matches-selector": "^2.0.0" - } - }, "node_modules/flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", @@ -10502,16 +10480,6 @@ "node": ">=8" } }, - "node_modules/infinite-scroll": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/infinite-scroll/-/infinite-scroll-3.0.6.tgz", - "integrity": "sha512-679gpKlS/XuAnA+spIRNFSel1dsZ44ljKVlkWHVNTtibJR0cUIC3jwZaBQUsaR1TvPFnaQijRlS8Q/lPgx1VAA==", - "dev": true, - "dependencies": { - "ev-emitter": "^1.1.0", - "fizzy-ui-utils": "^2.0.5" - } - }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -23744,12 +23712,6 @@ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true }, - "desandro-matches-selector": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/desandro-matches-selector/-/desandro-matches-selector-2.0.2.tgz", - "integrity": "sha512-+1q0nXhdzg1IpIJdMKalUwvvskeKnYyEe3shPRwedNcWtnhEKT3ZxvFjzywHDeGcKViIxTCAoOYQWP1qD7VNyg==", - "dev": true - }, "destroy": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", @@ -24701,12 +24663,6 @@ "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "dev": true }, - "ev-emitter": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ev-emitter/-/ev-emitter-1.1.1.tgz", - "integrity": "sha512-ipiDYhdQSCZ4hSbX4rMW+XzNKMD1prg/sTvoVmSLkuQ1MVlwjJQQA+sW8tMYR3BLUr9KjodFV4pvzunvRhd33Q==", - "dev": true - }, "eventemitter3": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", @@ -25241,15 +25197,6 @@ "semver-regex": "^2.0.0" } }, - "fizzy-ui-utils": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/fizzy-ui-utils/-/fizzy-ui-utils-2.0.7.tgz", - "integrity": "sha512-CZXDVXQ1If3/r8s0T+v+qVeMshhfcuq0rqIFgJnrtd+Bu8GmDmqMjntjUePypVtjHXKJ6V4sw9zeyox34n9aCg==", - "dev": true, - "requires": { - "desandro-matches-selector": "^2.0.0" - } - }, "flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", @@ -26177,16 +26124,6 @@ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true }, - "infinite-scroll": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/infinite-scroll/-/infinite-scroll-3.0.6.tgz", - "integrity": "sha512-679gpKlS/XuAnA+spIRNFSel1dsZ44ljKVlkWHVNTtibJR0cUIC3jwZaBQUsaR1TvPFnaQijRlS8Q/lPgx1VAA==", - "dev": true, - "requires": { - "ev-emitter": "^1.1.0", - "fizzy-ui-utils": "^2.0.5" - } - }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", diff --git a/package.json b/package.json index 1ff99869..5f78e803 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ "start": "wp-scripts start", "build": "wp-scripts build", "packages-update": "wp-scripts packages-update", + "generate-font-list": "node ./bin/gfontsList.mjs", "optimize-images": "node ./bin/imagemin.mjs" }, "devDependencies": { From ad2d2257d4581a4c60143838da5b62900db0adbc Mon Sep 17 00:00:00 2001 From: Erik Golinelli Date: Thu, 9 Feb 2023 20:48:44 +0100 Subject: [PATCH 022/264] appends the font json list to customizer (will be used to select the font weight accordingly with the font family) --- inc/enqueue-scripts.php | 7 +++++++ src/scripts/admin-scripts.ts | 2 ++ src/scripts/user/menu.js | 0 webpack.config.js | 5 +++-- 4 files changed, 12 insertions(+), 2 deletions(-) create mode 100644 src/scripts/admin-scripts.ts delete mode 100644 src/scripts/user/menu.js diff --git a/inc/enqueue-scripts.php b/inc/enqueue-scripts.php index 3d83113f..4b399e07 100644 --- a/inc/enqueue-scripts.php +++ b/inc/enqueue-scripts.php @@ -55,3 +55,10 @@ function modul_r_theme_drawer_color() { if ( is_singular() ) { wp_enqueue_script( 'comment-reply' ); } + +function modul_r_theme_customize_style() { + $font_json = file_get_contents( get_template_directory() . '/inc/third-party/fonts.json' ); + wp_enqueue_script('modul-r-customizer-script', get_template_directory_uri() . "/dist/scripts/scripts.js"); + wp_localize_script('modul-r-customizer-script', 'modulrFonts', json_decode($font_json) ); +} +add_action( 'customize_controls_enqueue_scripts', 'modul_r_theme_customize_style' ); diff --git a/src/scripts/admin-scripts.ts b/src/scripts/admin-scripts.ts new file mode 100644 index 00000000..b226618b --- /dev/null +++ b/src/scripts/admin-scripts.ts @@ -0,0 +1,2 @@ +// eslint-disable-next-line no-console +window.onload = () => console.log( 'admin ready' ); diff --git a/src/scripts/user/menu.js b/src/scripts/user/menu.js deleted file mode 100644 index e69de29b..00000000 diff --git a/webpack.config.js b/webpack.config.js index ee992700..d7283d0b 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -23,7 +23,8 @@ const addModule = ( fileName, filePath ) => { }; /** js scripts */ -const scripts = addModule( 'scripts.js', 'scripts/' ); +const scripts = addModule( 'scripts.ts', 'scripts/' ); +const adminScripts = addModule( 'admin-scripts.ts', 'styles/' ); /** scss styles */ const admin = addModule( 'admin', 'styles/' ); @@ -32,4 +33,4 @@ const editor = addModule( 'editor', 'styles/' ); const style = addModule( 'main', 'styles/' ); const woo = addModule( 'woo', 'styles/' ); -module.exports = [ scripts, admin, atf, editor, style, woo ]; +module.exports = [ scripts, admin, adminScripts, atf, editor, style, woo ]; From 7dca126d46c08bce4f2bbc99648a82c3ef1cf0d3 Mon Sep 17 00:00:00 2001 From: Erik Golinelli Date: Thu, 9 Feb 2023 20:49:21 +0100 Subject: [PATCH 023/264] switch to ts --- src/scripts/{scripts.js => scripts.ts} | 1 - src/scripts/user/index.ts | 2 ++ src/scripts/user/{scrollControl.js => scrollControl.ts} | 0 3 files changed, 2 insertions(+), 1 deletion(-) rename src/scripts/{scripts.js => scripts.ts} (71%) create mode 100644 src/scripts/user/index.ts rename src/scripts/user/{scrollControl.js => scrollControl.ts} (100%) diff --git a/src/scripts/scripts.js b/src/scripts/scripts.ts similarity index 71% rename from src/scripts/scripts.js rename to src/scripts/scripts.ts index 80dd011b..60b6feae 100644 --- a/src/scripts/scripts.js +++ b/src/scripts/scripts.ts @@ -1,3 +1,2 @@ import './user/index'; -import './user/menu'; import './user/scrollControl'; diff --git a/src/scripts/user/index.ts b/src/scripts/user/index.ts new file mode 100644 index 00000000..e386dcad --- /dev/null +++ b/src/scripts/user/index.ts @@ -0,0 +1,2 @@ +// eslint-disable-next-line no-console +window.onload = () => console.log( 'ready' ); diff --git a/src/scripts/user/scrollControl.js b/src/scripts/user/scrollControl.ts similarity index 100% rename from src/scripts/user/scrollControl.js rename to src/scripts/user/scrollControl.ts From 97f141c8451cedf8844f191d4b3a230f571984ff Mon Sep 17 00:00:00 2001 From: Erik Golinelli Date: Thu, 9 Feb 2023 20:50:16 +0100 Subject: [PATCH 024/264] media and text custom style --- src/styles/components/_blocks.scss | 35 +++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/src/styles/components/_blocks.scss b/src/styles/components/_blocks.scss index a720f899..d8fbdb6a 100644 --- a/src/styles/components/_blocks.scss +++ b/src/styles/components/_blocks.scss @@ -1,5 +1,38 @@ /* Blocks styles */ -.entry-content { +.wp-site-blocks { + + //! MediaAndText + .wp-block-media-text { + .wp-block-media-text__media { + justify-self: end; + + img, + video { + width: auto; + max-width: 100%; + } + } + + &.has-media-on-the-right { + .wp-block-media-text__media { + justify-self: start; + } + } + + @media #{$mq__tablet-portrait} { + .wp-block-media-text { + + + } + + .wp-block-media-text__media { + width: auto; + margin: auto; + padding-left: var(--wp--preset--spacing--50); + padding-right: var(--wp--preset--spacing--50); + } + } + } //! Subhead .wp-block-subhead { From 64233700bd10d1ed1e5eac4b1a59bcce79ec9192 Mon Sep 17 00:00:00 2001 From: Erik Golinelli Date: Fri, 10 Feb 2023 15:51:45 +0100 Subject: [PATCH 025/264] avoid requesting fonts such as italic that cannot be requested at the moment --- bin/gfontsList.mjs | 23 +- inc/third-party/fonts.json | 9612 ++++++++++++++++-------------------- 2 files changed, 4210 insertions(+), 5425 deletions(-) diff --git a/bin/gfontsList.mjs b/bin/gfontsList.mjs index ea5b2ea1..54204396 100644 --- a/bin/gfontsList.mjs +++ b/bin/gfontsList.mjs @@ -3,10 +3,29 @@ import fs from 'fs' const ApiUrl = 'https://www.googleapis.com/webfonts/v1/webfonts' const destination = './inc/third-party/fonts.json' const apiParams = { - key: 'your key', // here the api key https://gist.github.com/jeremykenedy/bce044ce26fe0f90559a + key: 'AIzaSyCpfnm5kVng8hhP_jnAnnTXVP7MEUM89-k', // here the api key https://gist.github.com/jeremykenedy/bce044ce26fe0f90559a sort: 'popularity' } +/** + * @param {string} value + */ +function isNumeric(value) { + return /^-?\d+$/.test(value); +} + +function getVariants(weights) { + let newWeights = []; + weights.forEach((weight) => { + if (isNumeric(weight)) { + newWeights.push(weight) + } else if (weight === 'regular') { + newWeights.push('400') + } + }) + return newWeights +} + async function getFontSet(params) { let fonts = []; /* build the query url */ @@ -23,7 +42,7 @@ async function getFontSet(params) { /* Parse and store the data that we need */ fonts = data.items.map(item => { return { - [item.family]: item.variants} + [item.family]: getVariants(item.variants)} } ) /* Convert the js object into a pretty printed json. */ diff --git a/inc/third-party/fonts.json b/inc/third-party/fonts.json index be933c3d..26d8f418 100644 --- a/inc/third-party/fonts.json +++ b/inc/third-party/fonts.json @@ -2,40 +2,28 @@ { "Roboto": [ "100", - "100italic", "300", - "300italic", - "regular", - "italic", + "400", "500", - "500italic", "700", - "700italic", - "900", - "900italic" + "900" ] }, { "Open Sans": [ "300", - "regular", + "400", "500", "600", "700", - "800", - "300italic", - "italic", - "500italic", - "600italic", - "700italic", - "800italic" + "800" ] }, { "Noto Sans JP": [ "100", "300", - "regular", + "400", "500", "700", "900" @@ -46,90 +34,58 @@ "100", "200", "300", - "regular", + "400", "500", "600", "700", "800", - "900", - "100italic", - "200italic", - "300italic", - "italic", - "500italic", - "600italic", - "700italic", - "800italic", - "900italic" + "900" ] }, { "Lato": [ "100", - "100italic", "300", - "300italic", - "regular", - "italic", + "400", "700", - "700italic", - "900", - "900italic" + "900" ] }, { "Poppins": [ "100", - "100italic", "200", - "200italic", "300", - "300italic", - "regular", - "italic", + "400", "500", - "500italic", "600", - "600italic", "700", - "700italic", "800", - "800italic", - "900", - "900italic" + "900" ] }, { - "Roboto Condensed": [ + "Source Sans Pro": [ + "200", "300", - "300italic", - "regular", - "italic", + "400", + "600", "700", - "700italic" + "900" ] }, { - "Source Sans Pro": [ - "200", - "200italic", + "Roboto Condensed": [ "300", - "300italic", - "regular", - "italic", - "600", - "600italic", - "700", - "700italic", - "900", - "900italic" + "400", + "700" ] }, { "Oswald": [ "200", "300", - "regular", + "400", "500", "600", "700" @@ -140,17 +96,10 @@ "100", "200", "300", - "regular", + "400", "500", "600", - "700", - "100italic", - "200italic", - "300italic", - "italic", - "500italic", - "600italic", - "700italic" + "700" ] }, { @@ -158,7 +107,7 @@ "100", "200", "300", - "regular", + "400", "500", "600", "700", @@ -171,55 +120,25 @@ "100", "200", "300", - "regular", + "400", "500", "600", "700", "800", - "900", - "100italic", - "200italic", - "300italic", - "italic", - "500italic", - "600italic", - "700italic", - "800italic", - "900italic" + "900" ] }, { "Noto Sans": [ "100", - "100italic", "200", - "200italic", "300", - "300italic", - "regular", - "italic", + "400", "500", - "500italic", "600", - "600italic", "700", - "700italic", "800", - "800italic", - "900", - "900italic" - ] - }, - { - "Ubuntu": [ - "300", - "300italic", - "regular", - "italic", - "500", - "500italic", - "700", - "700italic" + "900" ] }, { @@ -227,7 +146,7 @@ "100", "200", "300", - "regular", + "400", "500", "600", "700", @@ -236,102 +155,76 @@ ] }, { - "Nunito": [ - "200", + "Ubuntu": [ "300", - "regular", + "400", "500", - "600", - "700", - "800", - "900", - "200italic", - "300italic", - "italic", - "500italic", - "600italic", - "700italic", - "800italic", - "900italic" + "700" ] }, { - "Playfair Display": [ - "regular", + "Nunito": [ + "200", + "300", + "400", "500", "600", "700", "800", - "900", - "italic", - "500italic", - "600italic", - "700italic", - "800italic", - "900italic" + "900" ] }, { "Merriweather": [ "300", - "300italic", - "regular", - "italic", + "400", "700", - "700italic", - "900", - "900italic" + "900" ] }, { - "PT Sans": [ - "regular", - "italic", + "Playfair Display": [ + "400", + "500", + "600", "700", - "700italic" + "800", + "900" ] }, { - "Rubik": [ + "Nunito Sans": [ + "200", "300", - "regular", - "500", + "400", "600", "700", "800", - "900", - "300italic", - "italic", - "500italic", - "600italic", - "700italic", - "800italic", - "900italic" + "900" ] }, { - "Nunito Sans": [ - "200", - "200italic", + "Rubik": [ "300", - "300italic", - "regular", - "italic", + "400", + "500", "600", - "600italic", "700", - "700italic", "800", - "800italic", - "900", - "900italic" + "900" + ] + }, + { + "PT Sans": [ + "400", + "700" ] }, { "Noto Sans KR": [ "100", "300", - "regular", + "400", "500", "700", "900" @@ -341,7 +234,7 @@ "Mukta": [ "200", "300", - "regular", + "400", "500", "600", "700", @@ -353,93 +246,62 @@ "100", "200", "300", - "regular", + "400", "500", "600", "700", "800", - "900", - "100italic", - "200italic", - "300italic", - "italic", - "500italic", - "600italic", - "700italic", - "800italic", - "900italic" + "900" ] }, { "Lora": [ - "regular", + "400", "500", "600", - "700", - "italic", - "500italic", - "600italic", - "700italic" + "700" ] }, { "Fira Sans": [ "100", - "100italic", "200", - "200italic", "300", - "300italic", - "regular", - "italic", + "400", "500", - "500italic", "600", - "600italic", "700", - "700italic", "800", - "800italic", - "900", - "900italic" + "900" ] }, { - "Noto Sans TC": [ + "Kanit": [ "100", + "200", "300", - "regular", + "400", "500", + "600", "700", + "800", "900" ] }, { - "Kanit": [ + "Noto Sans TC": [ "100", - "100italic", - "200", - "200italic", "300", - "300italic", - "regular", - "italic", + "400", "500", - "500italic", - "600", - "600italic", "700", - "700italic", - "800", - "800italic", - "900", - "900italic" + "900" ] }, { "Quicksand": [ "300", - "regular", + "400", "500", "600", "700" @@ -449,49 +311,32 @@ "Mulish": [ "200", "300", - "regular", + "400", "500", "600", "700", "800", - "900", - "200italic", - "300italic", - "italic", - "500italic", - "600italic", - "700italic", - "800italic", - "900italic" + "900" ] }, { "Barlow": [ "100", - "100italic", "200", - "200italic", "300", - "300italic", - "regular", - "italic", + "400", "500", - "500italic", "600", - "600italic", "700", - "700italic", "800", - "800italic", - "900", - "900italic" + "900" ] }, { "Inconsolata": [ "200", "300", - "regular", + "400", "500", "600", "700", @@ -501,64 +346,48 @@ }, { "PT Serif": [ - "regular", - "italic", - "700", - "700italic" + "400", + "700" ] }, { - "Heebo": [ - "100", + "Titillium Web": [ "200", "300", - "regular", - "500", + "400", "600", "700", - "800", "900" ] }, { - "Titillium Web": [ + "Heebo": [ + "100", "200", - "200italic", "300", - "300italic", - "regular", - "italic", + "400", + "500", "600", - "600italic", "700", - "700italic", + "800", "900" ] }, { "IBM Plex Sans": [ "100", - "100italic", "200", - "200italic", "300", - "300italic", - "regular", - "italic", + "400", "500", - "500italic", "600", - "600italic", - "700", - "700italic" + "700" ] }, { "Noto Serif": [ - "regular", - "italic", - "700", - "700italic" + "400", + "700" ] }, { @@ -566,65 +395,46 @@ "100", "200", "300", - "regular", + "400", "500", "600", "700", "800", - "900", - "100italic", - "200italic", - "300italic", - "italic", - "500italic", - "600italic", - "700italic", - "800italic", - "900italic" - ] - }, - { - "Nanum Gothic": [ - "regular", - "700", - "800" + "900" ] }, { "DM Sans": [ - "regular", - "italic", + "400", "500", - "500italic", - "700", - "700italic" + "700" ] }, { "Hind Siliguri": [ "300", - "regular", + "400", "500", "600", "700" ] }, + { + "Nanum Gothic": [ + "400", + "700", + "800" + ] + }, { "Karla": [ "200", "300", - "regular", + "400", "500", "600", "700", - "800", - "200italic", - "300italic", - "italic", - "500italic", - "600italic", - "700italic", - "800italic" + "800" ] }, { @@ -632,47 +442,36 @@ "100", "200", "300", - "regular", + "400", "500", "600", - "700", - "100italic", - "200italic", - "300italic", - "italic", - "500italic", - "600italic", - "700italic" + "700" ] }, { - "Arimo": [ - "regular", + "Manrope": [ + "200", + "300", + "400", "500", "600", "700", - "italic", - "500italic", - "600italic", - "700italic" + "800" ] }, { - "Manrope": [ - "200", - "300", - "regular", + "Arimo": [ + "400", "500", "600", - "700", - "800" + "700" ] }, { "Dosis": [ "200", "300", - "regular", + "400", "500", "600", "700", @@ -681,14 +480,13 @@ }, { "Libre Baskerville": [ - "regular", - "italic", + "400", "700" ] }, { "PT Sans Narrow": [ - "regular", + "400", "700" ] }, @@ -696,74 +494,34 @@ "Source Code Pro": [ "200", "300", - "regular", - "500", - "600", - "700", - "800", - "900", - "200italic", - "300italic", - "italic", - "500italic", - "600italic", - "700italic", - "800italic", - "900italic" - ] - }, - { - "Oxygen": [ - "300", - "regular", - "700" - ] - }, - { - "Bitter": [ - "100", - "200", - "300", - "regular", + "400", "500", "600", "700", "800", - "900", - "100italic", - "200italic", - "300italic", - "italic", - "500italic", - "600italic", - "700italic", - "800italic", - "900italic" + "900" ] }, { "Source Serif Pro": [ "200", - "200italic", "300", - "300italic", - "regular", - "italic", + "400", "600", - "600italic", "700", - "700italic", - "900", - "900italic" + "900" ] }, { - "Noto Sans SC": [ + "Bitter": [ "100", + "200", "300", - "regular", + "400", "500", + "600", "700", + "800", "900" ] }, @@ -771,7 +529,7 @@ "Cairo": [ "200", "300", - "regular", + "400", "500", "600", "700", @@ -779,81 +537,71 @@ "900" ] }, + { + "Oxygen": [ + "300", + "400", + "700" + ] + }, { "Anton": [ - "regular" + "400" ] }, { "Cabin": [ - "regular", + "400", "500", "600", - "700", - "italic", - "500italic", - "600italic", - "700italic" + "700" ] }, { - "EB Garamond": [ - "regular", + "Noto Sans SC": [ + "100", + "300", + "400", "500", - "600", "700", - "800", - "italic", - "500italic", - "600italic", - "700italic", - "800italic" + "900" ] }, { "Bebas Neue": [ - "regular" + "400" ] }, { "Prompt": [ "100", - "100italic", "200", - "200italic", "300", - "300italic", - "regular", - "italic", + "400", "500", - "500italic", "600", - "600italic", "700", - "700italic", "800", - "800italic", - "900", - "900italic" + "900" ] }, { "Abel": [ - "regular" + "400" ] }, { - "Signika Negative": [ - "300", - "regular", + "EB Garamond": [ + "400", "500", "600", - "700" + "700", + "800" ] }, { "Dancing Script": [ - "regular", + "400", "500", "600", "700" @@ -861,13 +609,13 @@ }, { "Lobster": [ - "regular" + "400" ] }, { "Hind": [ "300", - "regular", + "400", "500", "600", "700" @@ -878,92 +626,76 @@ "100", "200", "300", - "regular", + "400", "500", "600", "700", "800", - "900", - "100italic", - "200italic", - "300italic", - "italic", - "500italic", - "600italic", - "700italic", - "800italic", - "900italic" + "900" + ] + }, + { + "Signika Negative": [ + "300", + "400", + "500", + "600", + "700" ] }, { "Barlow Condensed": [ "100", - "100italic", "200", - "200italic", "300", - "300italic", - "regular", - "italic", + "400", "500", - "500italic", "600", - "600italic", "700", - "700italic", "800", - "800italic", - "900", - "900italic" + "900" ] }, { "Pacifico": [ - "regular" + "400" ] }, { "Comfortaa": [ "300", - "regular", + "400", "500", "600", "700" ] }, { - "Crimson Text": [ - "regular", - "italic", - "600", - "600italic", - "700", - "700italic" + "Varela Round": [ + "400" ] }, { - "Varela Round": [ - "regular" + "Crimson Text": [ + "400", + "600", + "700" ] }, { "Fjalla One": [ - "regular" + "400" ] }, { - "Noto Sans HK": [ - "100", - "300", - "regular", - "500", - "700", - "900" + "Arvo": [ + "400", + "700" ] }, { "Maven Pro": [ - "regular", + "400", "500", "600", "700", @@ -975,7 +707,7 @@ "Noto Serif JP": [ "200", "300", - "regular", + "400", "500", "600", "700", @@ -985,62 +717,69 @@ { "Teko": [ "300", - "regular", + "400", "500", "600", "700" ] }, { - "Archivo": [ + "Hind Madurai": [ + "300", + "400", + "500", + "600", + "700" + ] + }, + { + "Asap": [ "100", "200", "300", - "regular", + "400", "500", "600", "700", "800", - "900", - "100italic", - "200italic", - "300italic", - "italic", - "500italic", - "600italic", - "700italic", - "800italic", - "900italic" + "900" ] }, { - "Arvo": [ - "regular", - "italic", + "Space Grotesk": [ + "300", + "400", + "500", + "600", + "700" + ] + }, + { + "Noto Sans HK": [ + "100", + "300", + "400", + "500", "700", - "700italic" + "900" ] }, { - "Asap": [ + "Archivo": [ "100", "200", "300", - "regular", + "400", "500", "600", "700", "800", - "900", - "100italic", - "200italic", - "300italic", - "italic", - "500italic", - "600italic", - "700italic", - "800italic", - "900italic" + "900" + ] + }, + { + "Abril Fatface": [ + "400" ] }, { @@ -1048,199 +787,151 @@ "100", "200", "300", - "regular", + "400", "500", "600", "700", "800", - "900", - "100italic", - "200italic", - "300italic", - "italic", - "500italic", - "600italic", - "700italic", - "800italic", - "900italic" + "900" ] }, { - "Space Grotesk": [ + "Merriweather Sans": [ "300", - "regular", + "400", "500", "600", - "700" - ] - }, - { - "Abril Fatface": [ - "regular" + "700", + "800" ] }, { - "Hind Madurai": [ + "Assistant": [ + "200", "300", - "regular", + "400", "500", "600", - "700" + "700", + "800" ] }, { "Shadows Into Light": [ - "regular" + "400" ] }, { - "Assistant": [ - "200", - "300", - "regular", + "Caveat": [ + "400", "500", "600", - "700", - "800" + "700" ] }, { - "Public Sans": [ - "100", + "Yanone Kaffeesatz": [ "200", "300", - "regular", - "500", - "600", - "700", - "800", - "900", - "100italic", - "200italic", - "300italic", - "italic", - "500italic", - "600italic", - "700italic", - "800italic", - "900italic" - ] - }, - { - "Merriweather Sans": [ - "300", - "regular", - "500", - "600", - "700", - "800", - "300italic", - "italic", - "500italic", - "600italic", - "700italic", - "800italic" - ] - }, - { - "Caveat": [ - "regular", + "400", "500", "600", "700" ] }, { - "Slabo 27px": [ - "regular" + "Righteous": [ + "400" ] }, { - "Righteous": [ - "regular" + "Satisfy": [ + "400" ] }, { - "Overpass": [ + "Public Sans": [ "100", "200", "300", - "regular", + "400", "500", "600", "700", "800", - "900", - "100italic", - "200italic", - "300italic", - "italic", - "500italic", - "600italic", - "700italic", - "800italic", - "900italic" + "900" ] }, { - "Satisfy": [ - "regular" + "Overpass": [ + "100", + "200", + "300", + "400", + "500", + "600", + "700", + "800", + "900" ] }, { - "M PLUS Rounded 1c": [ + "Fira Sans Condensed": [ "100", + "200", "300", - "regular", + "400", "500", + "600", "700", "800", "900" ] }, { - "Yanone Kaffeesatz": [ + "Tajawal": [ "200", "300", - "regular", + "400", "500", - "600", - "700" + "700", + "800", + "900" ] }, { - "IBM Plex Serif": [ + "Slabo 27px": [ + "400" + ] + }, + { + "M PLUS Rounded 1c": [ "100", - "100italic", - "200", - "200italic", "300", - "300italic", - "regular", - "italic", + "400", "500", - "500italic", - "600", - "600italic", "700", - "700italic" + "800", + "900" ] }, { "Rajdhani": [ "300", - "regular", + "400", "500", "600", "700" ] }, { - "Tajawal": [ + "Catamaran": [ + "100", "200", "300", - "regular", + "400", "500", + "600", "700", "800", "900" @@ -1248,15 +939,24 @@ }, { "Indie Flower": [ - "regular" + "400" ] }, { - "Catamaran": [ + "Cormorant Garamond": [ + "300", + "400", + "500", + "600", + "700" + ] + }, + { + "Barlow Semi Condensed": [ "100", "200", "300", - "regular", + "400", "500", "600", "700", @@ -1265,89 +965,76 @@ ] }, { - "Cormorant Garamond": [ + "Zilla Slab": [ "300", - "300italic", - "regular", - "italic", + "400", "500", - "500italic", "600", - "600italic", - "700", - "700italic" + "700" ] }, { - "Fira Sans Condensed": [ + "IBM Plex Serif": [ "100", - "100italic", "200", - "200italic", "300", - "300italic", - "regular", - "italic", + "400", "500", - "500italic", "600", - "600italic", - "700", - "700italic", - "800", - "800italic", - "900", - "900italic" + "700" ] }, { - "IBM Plex Mono": [ + "Exo": [ "100", - "100italic", "200", - "200italic", "300", - "300italic", - "regular", - "italic", + "400", "500", - "500italic", "600", - "600italic", "700", - "700italic" + "800", + "900" ] }, { - "El Messiri": [ - "regular", + "Questrial": [ + "400" + ] + }, + { + "Red Hat Display": [ + "300", + "400", "500", "600", - "700" + "700", + "800", + "900" ] }, { - "Zilla Slab": [ + "IBM Plex Mono": [ + "100", + "200", "300", - "300italic", - "regular", - "italic", + "400", "500", - "500italic", "600", - "600italic", - "700", - "700italic" + "700" ] }, { - "Questrial": [ - "regular" + "Domine": [ + "400", + "500", + "600", + "700" ] }, { "Nanum Myeongjo": [ - "regular", + "400", "700", "800" ] @@ -1355,7 +1042,7 @@ { "Signika": [ "300", - "regular", + "400", "500", "600", "700" @@ -1363,196 +1050,92 @@ }, { "Fredoka One": [ - "regular" + "400" ] }, { - "Barlow Semi Condensed": [ - "100", - "100italic", - "200", - "200italic", - "300", - "300italic", - "regular", - "italic", - "500", - "500italic", - "600", - "600italic", - "700", - "700italic", - "800", - "800italic", - "900", - "900italic" + "Permanent Marker": [ + "400" ] }, { "Secular One": [ - "regular" - ] - }, - { - "Play": [ - "regular", - "700" + "400" ] }, { - "Sarabun": [ - "100", - "100italic", - "200", - "200italic", + "Chakra Petch": [ "300", - "300italic", - "regular", - "italic", - "500", - "500italic", - "600", - "600italic", - "700", - "700italic", - "800", - "800italic" - ] - }, - { - "Domine": [ - "regular", + "400", "500", "600", "700" ] }, { - "Red Hat Display": [ - "300", - "regular", - "500", - "600", - "700", - "800", - "900", - "300italic", - "italic", - "500italic", - "600italic", - "700italic", - "800italic", - "900italic" + "Play": [ + "400", + "700" ] }, { - "Exo": [ + "Sarabun": [ "100", "200", "300", - "regular", + "400", "500", "600", "700", - "800", - "900", - "100italic", - "200italic", - "300italic", - "italic", - "500italic", - "600italic", - "700italic", - "800italic", - "900italic" + "800" ] }, { - "Bree Serif": [ - "regular" + "ABeeZee": [ + "400" ] }, { - "Mada": [ + "Noto Sans Arabic": [ + "100", "200", "300", - "regular", + "400", "500", "600", "700", + "800", "900" ] }, - { - "Permanent Marker": [ - "regular" - ] - }, - { - "ABeeZee": [ - "regular", - "italic" - ] - }, { "Lilita One": [ - "regular" - ] - }, - { - "Acme": [ - "regular" + "400" ] }, { "Archivo Narrow": [ - "regular", + "400", "500", "600", - "700", - "italic", - "500italic", - "600italic", - "700italic" - ] - }, - { - "Chakra Petch": [ - "300", - "300italic", - "regular", - "italic", - "500", - "500italic", - "600", - "600italic", - "700", - "700italic" + "700" ] }, { - "Alfa Slab One": [ - "regular" + "Acme": [ + "400" ] }, { - "Noto Sans Arabic": [ - "100", - "200", - "300", - "regular", - "500", - "600", - "700", - "800", - "900" + "Bree Serif": [ + "400" ] }, { - "M PLUS 1p": [ + "Alegreya Sans": [ "100", "300", - "regular", + "400", "500", "700", "800", @@ -1561,75 +1144,59 @@ }, { "Vollkorn": [ - "regular", + "400", "500", "600", "700", "800", - "900", - "italic", - "500italic", - "600italic", - "700italic", - "800italic", - "900italic" - ] - }, - { - "Russo One": [ - "regular" + "900" ] }, { "Amatic SC": [ - "regular", + "400", "700" ] }, { - "Alegreya Sans": [ + "M PLUS 1p": [ "100", - "100italic", "300", - "300italic", - "regular", - "italic", + "400", "500", - "500italic", "700", - "700italic", "800", - "800italic", - "900", - "900italic" + "900" ] }, { "Didact Gothic": [ - "regular" + "400" ] }, { - "Rowdies": [ - "300", - "regular", - "700" + "DM Serif Display": [ + "400" ] }, { - "Covered By Your Grace": [ - "regular" + "Rowdies": [ + "300", + "400", + "700" ] }, { - "DM Serif Display": [ - "regular", - "italic" + "Russo One": [ + "400" ] }, { - "Cinzel": [ - "regular", + "Noto Kufi Arabic": [ + "100", + "200", + "300", + "400", "500", "600", "700", @@ -1638,27 +1205,13 @@ ] }, { - "Alegreya": [ - "regular", - "500", - "600", - "700", - "800", - "900", - "italic", - "500italic", - "600italic", - "700italic", - "800italic", - "900italic" + "Alfa Slab One": [ + "400" ] }, { - "Noto Kufi Arabic": [ - "100", - "200", - "300", - "regular", + "Cinzel": [ + "400", "500", "600", "700", @@ -1667,51 +1220,51 @@ ] }, { - "Tinos": [ - "regular", - "italic", - "700", - "700italic" + "Kalam": [ + "300", + "400", + "700" ] }, { - "Archivo Black": [ - "regular" + "Tinos": [ + "400", + "700" ] }, { - "Kalam": [ - "300", - "regular", + "Space Mono": [ + "400", "700" ] }, { - "Orbitron": [ - "regular", + "Yantramanav": [ + "100", + "300", + "400", "500", - "600", "700", - "800", "900" ] }, { - "Changa": [ - "200", + "Archivo Black": [ + "400" + ] + }, + { + "Almarai": [ "300", - "regular", - "500", - "600", + "400", "700", "800" ] }, { - "Martel": [ - "200", - "300", - "regular", + "Alegreya": [ + "400", + "500", "600", "700", "800", @@ -1721,7 +1274,7 @@ { "Frank Ruhl Libre": [ "300", - "regular", + "400", "500", "600", "700", @@ -1730,38 +1283,22 @@ ] }, { - "Space Mono": [ - "regular", - "italic", + "Orbitron": [ + "400", + "500", + "600", "700", - "700italic" + "800", + "900" ] }, { - "Ubuntu Condensed": [ - "regular" - ] - }, - { - "Amiri": [ - "regular", - "italic", - "700", - "700italic" - ] - }, - { - "Lobster Two": [ - "regular", - "italic", - "700", - "700italic" - ] - }, - { - "Almarai": [ + "Changa": [ + "200", "300", - "regular", + "400", + "500", + "600", "700", "800" ] @@ -1771,92 +1308,94 @@ "100", "200", "300", - "regular", + "400", "500", "600", "700" ] }, { - "Courgette": [ - "regular" - ] - }, - { - "Noticia Text": [ - "regular", - "italic", - "700", - "700italic" + "Amiri": [ + "400", + "700" ] }, { - "Spectral": [ + "Asap Condensed": [ "200", - "200italic", "300", - "300italic", - "regular", - "italic", + "400", "500", - "500italic", "600", - "600italic", "700", - "700italic", "800", - "800italic" + "900" ] }, { - "Noto Serif TC": [ + "Ubuntu Condensed": [ + "400" + ] + }, + { + "Martel": [ "200", "300", - "regular", - "500", + "400", "600", "700", + "800", "900" ] }, { - "Yantramanav": [ - "100", - "300", - "regular", - "500", - "700", - "900" + "Noticia Text": [ + "400", + "700" ] }, { - "Crete Round": [ - "regular", - "italic" + "Courgette": [ + "400" ] }, { - "Great Vibes": [ - "regular" + "Spectral": [ + "200", + "300", + "400", + "500", + "600", + "700", + "800" ] }, { "PT Sans Caption": [ - "regular", + "400", "700" ] }, { - "Patua One": [ - "regular" + "Baloo 2": [ + "400", + "500", + "600", + "700", + "800" ] }, { - "Rokkitt": [ + "Great Vibes": [ + "400" + ] + }, + { + "Be Vietnam Pro": [ "100", "200", "300", - "regular", + "400", "500", "600", "700", @@ -1865,85 +1404,87 @@ ] }, { - "Baloo 2": [ - "regular", + "Noto Serif TC": [ + "200", + "300", + "400", "500", "600", "700", - "800" + "900" ] }, { - "Prata": [ - "regular" + "Lobster Two": [ + "400", + "700" ] }, { - "Sora": [ + "Patua One": [ + "400" + ] + }, + { + "Covered By Your Grace": [ + "400" + ] + }, + { + "Rokkitt": [ "100", "200", "300", - "regular", + "400", "500", "600", "700", - "800" + "800", + "900" ] }, { "Paytone One": [ - "regular" + "400" ] }, { - "Passion One": [ - "regular", - "700", - "900" + "Crete Round": [ + "400" ] }, { - "Cormorant": [ + "Sora": [ + "100", + "200", "300", - "regular", + "400", "500", "600", "700", - "300italic", - "italic", - "500italic", - "600italic", - "700italic" + "800" ] }, { - "Be Vietnam Pro": [ - "100", - "100italic", - "200", - "200italic", + "Prata": [ + "400" + ] + }, + { + "Cormorant": [ "300", - "300italic", - "regular", - "italic", + "400", "500", - "500italic", "600", - "600italic", - "700", - "700italic", - "800", - "800italic", - "900", - "900italic" + "700" ] }, { - "Gothic A1": [ + "Outfit": [ "100", "200", "300", - "regular", + "400", "500", "600", "700", @@ -1953,33 +1494,29 @@ }, { "Cardo": [ - "regular", - "italic", + "400", "700" ] }, { - "Faustina": [ + "Lexend": [ + "100", + "200", "300", - "regular", + "400", "500", "600", "700", "800", - "300italic", - "italic", - "500italic", - "600italic", - "700italic", - "800italic" + "900" ] }, { - "Lexend": [ + "Gothic A1": [ "100", "200", "300", - "regular", + "400", "500", "600", "700", @@ -1988,11 +1525,16 @@ ] }, { - "Outfit": [ + "Kaushan Script": [ + "400" + ] + }, + { + "Noto Sans Devanagari": [ "100", "200", "300", - "regular", + "400", "500", "600", "700", @@ -2001,124 +1543,109 @@ ] }, { - "Montserrat Alternates": [ - "100", - "100italic", - "200", - "200italic", + "Figtree": [ "300", - "300italic", - "regular", - "italic", + "400", "500", - "500italic", "600", - "600italic", "700", - "700italic", "800", - "800italic", - "900", - "900italic" + "900" ] }, { - "Kaushan Script": [ - "regular" + "Passion One": [ + "400", + "700", + "900" ] }, { - "Old Standard TT": [ - "regular", - "italic", - "700" + "Alata": [ + "400" ] }, { - "Asap Condensed": [ + "Montserrat Alternates": [ + "100", "200", - "200italic", "300", - "300italic", - "regular", - "italic", + "400", "500", - "500italic", "600", - "600italic", "700", - "700italic", "800", - "800italic", - "900", - "900italic" - ] - }, - { - "Pathway Gothic One": [ - "regular" + "900" ] }, { - "Alata": [ - "regular" + "Faustina": [ + "300", + "400", + "500", + "600", + "700", + "800" ] }, { - "Noto Serif KR": [ - "200", - "300", - "regular", + "Gelasio": [ + "400", "500", "600", - "700", - "900" + "700" ] }, { - "Cookie": [ - "regular" + "Pathway Gothic One": [ + "400" ] }, { - "Sawarabi Mincho": [ - "regular" + "Old Standard TT": [ + "400", + "700" ] }, { - "Gloria Hallelujah": [ - "regular" + "Titan One": [ + "400" ] }, { - "Philosopher": [ - "regular", - "italic", - "700", - "700italic" + "Sawarabi Mincho": [ + "400" ] }, { "Yellowtail": [ - "regular" + "400" ] }, { "Francois One": [ - "regular" + "400" ] }, { - "Michroma": [ - "regular" + "Fira Sans Extra Condensed": [ + "100", + "200", + "300", + "400", + "500", + "600", + "700", + "800", + "900" ] }, { - "Encode Sans": [ + "Saira Condensed": [ "100", "200", "300", - "regular", + "400", "500", "600", "700", @@ -2127,70 +1654,67 @@ ] }, { - "Gelasio": [ - "regular", - "italic", + "Encode Sans": [ + "100", + "200", + "300", + "400", "500", - "500italic", "600", - "600italic", "700", - "700italic" + "800", + "900" ] }, { - "Concert One": [ - "regular" + "Cookie": [ + "400" ] }, { - "Titan One": [ - "regular" + "Philosopher": [ + "400", + "700" ] }, { - "Antic Slab": [ - "regular" + "Michroma": [ + "400" + ] + }, + { + "Gloria Hallelujah": [ + "400" ] }, { "PT Mono": [ - "regular" + "400" ] }, { - "Urbanist": [ - "100", - "200", - "300", - "regular", + "Antic Slab": [ + "400" + ] + }, + { + "Eczar": [ + "400", "500", "600", "700", - "800", - "900", - "100italic", - "200italic", - "300italic", - "italic", - "500italic", - "600italic", - "700italic", - "800italic", - "900italic" + "800" ] }, { - "Unna": [ - "regular", - "italic", - "700", - "700italic" + "Staatliches": [ + "400" ] }, { - "Sacramento": [ - "regular" + "Quattrocento Sans": [ + "400", + "700" ] }, { @@ -2198,283 +1722,213 @@ "100", "200", "300", - "regular", + "400", "500", "600", "700", "800", - "900", - "100italic", - "200italic", - "300italic", - "italic", - "500italic", - "600italic", - "700italic", - "800italic", - "900italic" + "900" ] }, { - "Saira Condensed": [ - "100", + "Concert One": [ + "400" + ] + }, + { + "Noto Serif KR": [ "200", "300", - "regular", + "400", "500", "600", "700", - "800", "900" ] }, { - "Marcellus": [ - "regular" + "Rubik Mono One": [ + "400" ] }, { - "Yeseva One": [ - "regular" + "Sacramento": [ + "400" ] }, { - "Rubik Mono One": [ - "regular" + "Carter One": [ + "400" ] }, { - "Eczar": [ - "regular", + "Urbanist": [ + "100", + "200", + "300", + "400", "500", "600", "700", - "800" + "800", + "900" ] }, { - "Staatliches": [ - "regular" + "Unna": [ + "400", + "700" ] }, { - "Cantarell": [ - "regular", - "italic", - "700", - "700italic" + "Marcellus": [ + "400" + ] + }, + { + "El Messiri": [ + "400", + "500", + "600", + "700" ] }, { "Press Start 2P": [ - "regular" + "400" ] }, { - "Patrick Hand": [ - "regular" + "Luckiest Guy": [ + "400" ] }, { - "Lexend Deca": [ - "100", - "200", - "300", - "regular", - "500", - "600", - "700", - "800", - "900" + "Macondo": [ + "400" ] }, { - "Chivo": [ + "Patrick Hand": [ + "400" + ] + }, + { + "Saira": [ "100", "200", "300", - "regular", + "400", "500", "600", "700", "800", - "900", - "100italic", - "200italic", - "300italic", - "italic", - "500italic", - "600italic", - "700italic", - "800italic", - "900italic" - ] - }, - { - "Luckiest Guy": [ - "regular" + "900" ] }, { - "Josefin Slab": [ - "100", - "200", - "300", - "regular", - "500", - "600", - "700", - "100italic", - "200italic", - "300italic", - "italic", - "500italic", - "600italic", - "700italic" + "Yeseva One": [ + "400" ] }, { - "Quattrocento Sans": [ - "regular", - "italic", - "700", - "700italic" + "Cantarell": [ + "400", + "700" ] }, { - "Carter One": [ - "regular" + "Gruppo": [ + "400" ] }, { - "Macondo": [ - "regular" + "Monda": [ + "400", + "700" ] }, { - "Bodoni Moda": [ - "regular", + "Lexend Deca": [ + "100", + "200", + "300", + "400", "500", "600", "700", "800", - "900", - "italic", - "500italic", - "600italic", - "700italic", - "800italic", - "900italic" + "900" ] }, { - "Bangers": [ - "regular" + "Josefin Slab": [ + "100", + "200", + "300", + "400", + "500", + "600", + "700" ] }, { - "Monda": [ - "regular", - "700" + "Creepster": [ + "400" ] }, { - "Alice": [ - "regular" + "Padauk": [ + "400", + "700" ] }, { - "Saira": [ - "100", - "200", - "300", - "regular", - "500", - "600", - "700", - "800", - "900", - "100italic", - "200italic", - "300italic", - "italic", - "500italic", - "600italic", - "700italic", - "800italic", - "900italic" + "News Cycle": [ + "400", + "700" ] }, { - "Cuprum": [ - "regular", - "500", - "600", - "700", - "italic", - "500italic", - "600italic", - "700italic" + "Alice": [ + "400" ] }, { "Quattrocento": [ - "regular", + "400", "700" ] }, { - "Plus Jakarta Sans": [ + "Commissioner": [ + "100", "200", "300", - "regular", + "400", "500", "600", "700", "800", - "200italic", - "300italic", - "italic", - "500italic", - "600italic", - "700italic", - "800italic" - ] - }, - { - "News Cycle": [ - "regular", - "700" + "900" ] }, { - "Fira Sans Extra Condensed": [ - "100", - "100italic", - "200", - "200italic", - "300", - "300italic", - "regular", - "italic", + "Bodoni Moda": [ + "400", "500", - "500italic", "600", - "600italic", "700", - "700italic", "800", - "800italic", - "900", - "900italic" + "900" ] }, { - "Commissioner": [ + "Chivo": [ "100", "200", "300", - "regular", + "400", "500", "600", "700", @@ -2483,41 +1937,25 @@ ] }, { - "Creepster": [ - "regular" + "Actor": [ + "400" ] }, { - "Handlee": [ - "regular" + "Sen": [ + "400", + "700", + "800" ] }, { "Sawarabi Gothic": [ - "regular" - ] - }, - { - "Mitr": [ - "200", - "300", - "regular", - "500", - "600", - "700" - ] - }, - { - "Oleo Script": [ - "regular", - "700" + "400" ] }, { - "Sen": [ - "regular", - "700", - "800" + "Marck Script": [ + "400" ] }, { @@ -2525,28 +1963,27 @@ "100", "200", "300", - "regular", + "400", "500", "600", "700", "800", - "900", - "100italic", - "200italic", - "300italic", - "italic", - "500italic", - "600italic", - "700italic", - "800italic", - "900italic" + "900" ] }, { - "Mukta Malar": [ + "Cuprum": [ + "400", + "500", + "600", + "700" + ] + }, + { + "Plus Jakarta Sans": [ "200", "300", - "regular", + "400", "500", "600", "700", @@ -2554,257 +1991,188 @@ ] }, { - "Special Elite": [ - "regular" + "Mr Dafoe": [ + "400" ] }, { - "Crimson Pro": [ - "200", - "300", - "regular", - "500", - "600", - "700", - "800", - "900", - "200italic", - "300italic", - "italic", - "500italic", - "600italic", - "700italic", - "800italic", - "900italic" + "Handlee": [ + "400" ] }, { - "Khand": [ + "Mitr": [ + "200", "300", - "regular", + "400", "500", "600", "700" ] }, { - "Ubuntu Mono": [ - "regular", - "italic", - "700", - "700italic" + "Special Elite": [ + "400" ] }, { - "Ultra": [ - "regular" + "Ubuntu Mono": [ + "400", + "700" ] }, { "Vidaloka": [ - "regular" + "400" ] }, { - "Marck Script": [ - "regular" + "Parisienne": [ + "400" ] }, { - "Mr Dafoe": [ - "regular" + "Ultra": [ + "400" ] }, { - "Neuton": [ - "200", + "Aleo": [ "300", - "regular", - "italic", - "700", - "800" + "400", + "700" ] }, { "Poiret One": [ - "regular" - ] - }, - { - "Allura": [ - "regular" + "400" ] }, { - "DM Serif Text": [ - "regular", - "italic" + "Bangers": [ + "400" ] }, { - "IBM Plex Sans Condensed": [ - "100", - "100italic", + "Crimson Pro": [ "200", - "200italic", "300", - "300italic", - "regular", - "italic", + "400", "500", - "500italic", "600", - "600italic", "700", - "700italic" + "800", + "900" ] }, { - "Kosugi Maru": [ - "regular" + "Oleo Script": [ + "400", + "700" ] }, { - "Unbounded": [ - "200", + "Khand": [ "300", - "regular", + "400", "500", "600", - "700", - "800", - "900" - ] - }, - { - "Tangerine": [ - "regular", "700" ] }, { - "Figtree": [ + "Neuton": [ + "200", "300", - "regular", - "500", - "600", + "400", "700", - "800", - "900", - "300italic", - "italic", - "500italic", - "600italic", - "700italic", - "800italic", - "900italic" + "800" ] }, { - "Encode Sans Condensed": [ + "IBM Plex Sans Condensed": [ "100", "200", "300", - "regular", + "400", "500", "600", - "700", - "800", - "900" + "700" ] }, { - "Arsenal": [ - "regular", - "italic", - "700", - "700italic" + "Allura": [ + "400" ] }, { - "Playfair Display SC": [ - "regular", - "italic", - "700", - "700italic", - "900", - "900italic" + "DM Serif Text": [ + "400" ] }, { - "Volkhov": [ - "regular", - "italic", + "Mukta Malar": [ + "200", + "300", + "400", + "500", + "600", "700", - "700italic" + "800" ] }, { - "Padauk": [ - "regular", + "Kosugi Maru": [ + "400" + ] + }, + { + "Tangerine": [ + "400", "700" ] }, { - "Neucha": [ - "regular" + "Volkhov": [ + "400", + "700" ] }, { - "Ropa Sans": [ - "regular", - "italic" + "Neucha": [ + "400" ] }, { - "Aleo": [ - "300", - "300italic", - "regular", - "italic", + "Playfair Display SC": [ + "400", "700", - "700italic" + "900" ] }, { "Ramabhadra": [ - "regular" + "400" ] }, { - "Taviraj": [ + "Encode Sans Condensed": [ "100", - "100italic", "200", - "200italic", "300", - "300italic", - "regular", - "italic", + "400", "500", - "500italic", "600", - "600italic", "700", - "700italic", "800", - "800italic", - "900", - "900italic" - ] - }, - { - "Amaranth": [ - "regular", - "italic", - "700", - "700italic" + "900" ] }, { - "Merienda": [ + "Unbounded": [ + "200", "300", - "regular", + "400", "500", "600", "700", @@ -2813,18 +2181,25 @@ ] }, { - "Architects Daughter": [ - "regular" + "Ropa Sans": [ + "400" ] }, { - "Playball": [ - "regular" + "Arsenal": [ + "400", + "700" + ] + }, + { + "Amaranth": [ + "400", + "700" ] }, { "Viga": [ - "regular" + "400" ] }, { @@ -2832,7 +2207,7 @@ "100", "200", "300", - "regular", + "400", "500", "600", "700", @@ -2841,105 +2216,105 @@ ] }, { - "Parisienne": [ - "regular" + "Taviraj": [ + "100", + "200", + "300", + "400", + "500", + "600", + "700", + "800", + "900" ] }, { - "Fugaz One": [ - "regular" + "Merienda": [ + "300", + "400", + "500", + "600", + "700", + "800", + "900" ] }, { - "Homemade Apple": [ - "regular" + "Playball": [ + "400" ] }, { - "Gudea": [ - "regular", - "italic", - "700" - ] - }, - { - "Alegreya Sans SC": [ + "Noto Sans Thai": [ "100", - "100italic", + "200", "300", - "300italic", - "regular", - "italic", + "400", "500", - "500italic", + "600", "700", - "700italic", "800", - "800italic", - "900", - "900italic" + "900" ] }, { - "Sriracha": [ - "regular" + "Architects Daughter": [ + "400" ] }, { - "Ruda": [ - "regular", + "Gudea": [ + "400", + "700" + ] + }, + { + "Alegreya Sans SC": [ + "100", + "300", + "400", "500", - "600", "700", "800", "900" ] }, { - "Sanchez": [ - "regular", - "italic" + "Fugaz One": [ + "400" ] }, { - "Tenor Sans": [ - "regular" + "Homemade Apple": [ + "400" ] }, { - "Noto Sans Devanagari": [ - "100", + "Noto Serif SC": [ "200", "300", - "regular", + "400", "500", "600", "700", - "800", "900" ] }, { - "Bai Jamjuree": [ - "200", - "200italic", - "300", - "300italic", - "regular", - "italic", + "Ruda": [ + "400", "500", - "500italic", "600", - "600italic", "700", - "700italic" + "800", + "900" ] }, { - "Noto Serif SC": [ + "Mada": [ "200", "300", - "regular", + "400", "500", "600", "700", @@ -2947,42 +2322,37 @@ ] }, { - "Nanum Gothic Coding": [ - "regular", - "700" + "Sanchez": [ + "400" ] }, { - "Hammersmith One": [ - "regular" + "Lusitana": [ + "400", + "700" ] }, { "Libre Caslon Text": [ - "regular", - "italic", + "400", "700" ] }, { - "Actor": [ - "regular" - ] - }, - { - "Gruppo": [ - "regular" + "Nanum Gothic Coding": [ + "400", + "700" ] }, { - "Alex Brush": [ - "regular" + "Hammersmith One": [ + "400" ] }, { "Hind Vadodara": [ "300", - "regular", + "400", "500", "600", "700" @@ -2990,29 +2360,21 @@ }, { "Bungee": [ - "regular" + "400" ] }, { "Istok Web": [ - "regular", - "italic", - "700", - "700italic" - ] - }, - { - "Audiowide": [ - "regular" + "400", + "700" ] }, { - "Noto Sans Thai": [ + "Blinker": [ "100", "200", "300", - "regular", - "500", + "400", "600", "700", "800", @@ -3020,268 +2382,242 @@ ] }, { - "Nanum Pen Script": [ - "regular" + "Audiowide": [ + "400" ] }, { - "Cousine": [ - "regular", - "italic", - "700", - "700italic" + "Sriracha": [ + "400" + ] + }, + { + "Alex Brush": [ + "400" ] }, { "Literata": [ "200", "300", - "regular", + "400", "500", "600", "700", "800", - "900", - "200italic", - "300italic", - "italic", - "500italic", - "600italic", - "700italic", - "800italic", - "900italic" + "900" ] }, { - "Bad Script": [ - "regular" + "Tenor Sans": [ + "400" ] }, { "Baskervville": [ - "regular", - "italic" + "400" ] }, { - "Red Hat Text": [ - "300", - "regular", - "500", - "600", - "700", - "300italic", - "italic", - "500italic", - "600italic", - "700italic" + "Roboto Flex": [ + "400" ] }, { - "Lusitana": [ - "regular", + "Nanum Pen Script": [ + "400" + ] + }, + { + "Cousine": [ + "400", "700" ] }, { - "Abhaya Libre": [ - "regular", + "Palanquin": [ + "100", + "200", + "300", + "400", "500", "600", - "700", - "800" + "700" ] }, { - "Quantico": [ - "regular", - "italic", - "700", - "700italic" + "Bad Script": [ + "400" ] }, { - "Pragati Narrow": [ - "regular", - "700" + "Shrikhand": [ + "400" ] }, { "Monoton": [ - "regular" + "400" ] }, { - "Sigmar One": [ - "regular" + "Unica One": [ + "400" ] }, { - "Blinker": [ - "100", + "Bai Jamjuree": [ "200", "300", - "regular", + "400", + "500", "600", - "700", - "800", - "900" + "700" ] }, { - "Roboto Flex": [ - "regular" + "Red Hat Text": [ + "300", + "400", + "500", + "600", + "700" ] }, { - "Unica One": [ - "regular" + "BenchNine": [ + "300", + "400", + "700" ] }, { - "Allerta Stencil": [ - "regular" + "Quantico": [ + "400", + "700" ] }, { - "Palanquin": [ - "100", - "200", - "300", - "regular", + "Abhaya Libre": [ + "400", "500", "600", - "700" + "700", + "800" ] }, { - "BenchNine": [ + "Zeyada": [ + "400" + ] + }, + { + "Readex Pro": [ + "200", "300", - "regular", + "400", + "500", + "600", "700" ] }, { - "Castoro": [ - "regular", - "italic" + "Pragati Narrow": [ + "400", + "700" ] }, { - "Shrikhand": [ - "regular" + "Noto Naskh Arabic": [ + "400", + "500", + "600", + "700" ] }, { - "Rock Salt": [ - "regular" + "Sigmar One": [ + "400" ] }, { - "Roboto Serif": [ - "100", - "200", - "300", - "regular", + "Fira Mono": [ + "400", "500", - "600", - "700", - "800", - "900", - "100italic", - "200italic", - "300italic", - "italic", - "500italic", - "600italic", - "700italic", - "800italic", - "900italic" + "700" ] }, { - "Khula": [ - "300", - "regular", - "600", - "700", - "800" + "Rock Salt": [ + "400" ] }, { "Cabin Condensed": [ - "regular", + "400", "500", "600", "700" ] }, { - "Readex Pro": [ + "League Spartan": [ + "100", "200", "300", - "regular", + "400", "500", "600", - "700" + "700", + "800", + "900" ] }, { - "Noto Naskh Arabic": [ - "regular", - "500", - "600", + "Alef": [ + "400", "700" ] }, { - "Epilogue": [ + "Allerta Stencil": [ + "400" + ] + }, + { + "Roboto Serif": [ "100", "200", "300", - "regular", + "400", "500", "600", "700", "800", - "900", - "100italic", - "200italic", - "300italic", - "italic", - "500italic", - "600italic", - "700italic", - "800italic", - "900italic" - ] - }, - { - "Damion": [ - "regular" + "900" ] }, { - "Economica": [ - "regular", - "italic", + "Khula": [ + "300", + "400", + "600", "700", - "700italic" + "800" ] }, { - "Fira Mono": [ - "regular", - "500", + "Economica": [ + "400", "700" ] }, { - "League Spartan": [ + "Noto Serif Bengali": [ "100", "200", "300", - "regular", + "400", "500", "600", "700", @@ -3290,57 +2626,55 @@ ] }, { - "Jura": [ - "300", - "regular", - "500", - "600", - "700" + "Damion": [ + "400" ] }, { - "Caveat Brush": [ - "regular" + "Adamina": [ + "400" ] }, { - "Adamina": [ - "regular" + "Castoro": [ + "400" ] }, { - "Varela": [ - "regular" + "Mandali": [ + "400" ] }, { - "Mandali": [ - "regular" + "Epilogue": [ + "100", + "200", + "300", + "400", + "500", + "600", + "700", + "800", + "900" ] }, { - "Laila": [ + "Pridi": [ + "200", "300", - "regular", + "400", "500", "600", "700" ] }, { - "Niramit": [ - "200", - "200italic", + "Jura": [ "300", - "300italic", - "regular", - "italic", + "400", "500", - "500italic", "600", - "600italic", - "700", - "700italic" + "700" ] }, { @@ -3348,7 +2682,7 @@ "100", "200", "300", - "regular", + "400", "500", "600", "700", @@ -3357,124 +2691,118 @@ ] }, { - "Pontano Sans": [ - "regular" + "Varela": [ + "400" ] }, { - "Days One": [ - "regular" + "Caveat Brush": [ + "400" + ] + }, + { + "Cantata One": [ + "400" ] }, { "Rufina": [ - "regular", + "400", "700" ] }, { - "Julius Sans One": [ - "regular" + "Voltaire": [ + "400" ] }, { - "Pangolin": [ - "regular" + "Pontano Sans": [ + "400" ] }, { - "Alef": [ - "regular", - "700" + "Sorts Mill Goudy": [ + "400" ] }, { - "Nothing You Could Do": [ - "regular" + "Julius Sans One": [ + "400" ] }, { - "Pridi": [ + "Niramit": [ "200", "300", - "regular", + "400", "500", "600", "700" ] }, { - "Itim": [ - "regular" - ] - }, - { - "Krub": [ - "200", - "200italic", + "Laila": [ "300", - "300italic", - "regular", - "italic", + "400", "500", - "500italic", "600", - "600italic", - "700", - "700italic" + "700" ] }, { - "Share Tech Mono": [ - "regular" + "Courier Prime": [ + "400", + "700" ] }, { - "Sorts Mill Goudy": [ - "regular", - "italic" + "Lalezar": [ + "400" ] }, { - "Athiti": [ - "200", - "300", - "regular", - "500", - "600", + "Pangolin": [ + "400" + ] + }, + { + "Sarala": [ + "400", "700" ] }, { - "Cantata One": [ - "regular" + "Share Tech Mono": [ + "400" ] }, { - "Black Han Sans": [ - "regular" + "Electrolize": [ + "400" ] }, { - "Karma": [ + "Antonio": [ + "100", + "200", "300", - "regular", + "400", "500", "600", "700" ] }, { - "Sintony": [ - "regular", - "700" + "Black Han Sans": [ + "400" ] }, { "Martel Sans": [ "200", "300", - "regular", + "400", "600", "700", "800", @@ -3482,416 +2810,359 @@ ] }, { - "Sarala": [ - "regular", - "700" - ] - }, - { - "Lalezar": [ - "regular" - ] - }, - { - "Courier Prime": [ - "regular", - "italic", - "700", - "700italic" - ] - }, - { - "Antonio": [ - "100", - "200", + "Karma": [ "300", - "regular", + "400", "500", "600", "700" ] }, { - "Gentium Book Basic": [ - "regular", - "italic", - "700", - "700italic" - ] - }, - { - "Electrolize": [ - "regular" - ] - }, - { - "Black Ops One": [ - "regular" + "Nothing You Could Do": [ + "400" ] }, { - "Pinyon Script": [ - "regular" + "Itim": [ + "400" ] }, { - "Yatra One": [ - "regular" + "Italianno": [ + "400" ] }, { - "Six Caps": [ - "regular" + "Days One": [ + "400" ] }, { - "Holtwood One SC": [ - "regular" + "Athiti": [ + "200", + "300", + "400", + "500", + "600", + "700" ] }, { - "Comic Neue": [ - "300", - "300italic", - "regular", - "italic", - "700", - "700italic" + "Yatra One": [ + "400" ] }, { - "Italianno": [ - "regular" + "Sintony": [ + "400", + "700" ] }, { - "Amethysta": [ - "regular" + "Six Caps": [ + "400" ] }, { - "Cutive Mono": [ - "regular" + "Gentium Book Basic": [ + "400", + "700" ] }, { - "Forum": [ - "regular" + "Black Ops One": [ + "400" ] }, { - "Reenie Beanie": [ - "regular" + "Pinyon Script": [ + "400" ] }, { - "Noto Serif Bengali": [ - "100", + "Krub": [ "200", "300", - "regular", + "400", "500", "600", - "700", - "800", - "900" + "700" ] }, { - "Calistoga": [ - "regular" + "Holtwood One SC": [ + "400" ] }, { - "Voltaire": [ - "regular" + "Forum": [ + "400" ] }, { - "Lustria": [ - "regular" + "Boogaloo": [ + "400" ] }, { - "Esteban": [ - "regular" + "Comic Neue": [ + "300", + "400", + "700" ] }, { "Kreon": [ "300", - "regular", + "400", "500", "600", "700" ] }, { - "Glegoo": [ - "regular", + "Calistoga": [ + "400" + ] + }, + { + "Reenie Beanie": [ + "400" + ] + }, + { + "Anonymous Pro": [ + "400", "700" ] }, { "Sansita": [ - "regular", - "italic", + "400", "700", - "700italic", "800", - "800italic", - "900", - "900italic" + "900" ] }, { - "Anonymous Pro": [ - "regular", - "italic", - "700", - "700italic" + "Armata": [ + "400" ] }, { - "Armata": [ - "regular" + "Chewy": [ + "400" ] }, { - "Noto Sans Tamil": [ - "100", - "200", - "300", - "regular", - "500", - "600", - "700", - "800", - "900" + "Stint Ultra Condensed": [ + "400" ] }, { - "Londrina Solid": [ - "100", - "300", - "regular", - "900" + "Antic": [ + "400" ] }, { - "Berkshire Swash": [ - "regular" + "Aclonica": [ + "400" ] }, { - "Arapey": [ - "regular", - "italic" + "PT Serif Caption": [ + "400" ] }, { - "Zen Maru Gothic": [ + "Glegoo": [ + "400", + "700" + ] + }, + { + "Londrina Solid": [ + "100", "300", - "regular", - "500", - "700", + "400", "900" ] }, { - "PT Serif Caption": [ - "regular", - "italic" + "Lustria": [ + "400" ] }, { - "Short Stack": [ - "regular" + "Esteban": [ + "400" ] }, { - "Boogaloo": [ - "regular" + "Kameron": [ + "400", + "700" ] }, { - "Chewy": [ - "regular" + "Cabin Sketch": [ + "400", + "700" ] }, { "Leckerli One": [ - "regular" + "400" ] }, { - "Squada One": [ - "regular" + "Arapey": [ + "400" ] }, { - "VT323": [ - "regular" + "Cutive Mono": [ + "400" ] }, { - "Average Sans": [ - "regular" + "Coda": [ + "400", + "800" ] }, { - "Cabin Sketch": [ - "regular", - "700" + "Zen Maru Gothic": [ + "300", + "400", + "500", + "700", + "900" ] }, { - "Aclonica": [ - "regular" + "Squada One": [ + "400" ] }, { - "Shippori Mincho": [ - "regular", - "500", - "600", - "700", - "800" + "VT323": [ + "400" ] }, { - "Aldrich": [ - "regular" + "Berkshire Swash": [ + "400" ] }, { - "Jaldi": [ - "regular", - "700" + "Gilda Display": [ + "400" ] }, { - "Shadows Into Light Two": [ - "regular" + "Aldrich": [ + "400" ] }, { - "Fraunces": [ + "Noto Sans Tamil": [ "100", "200", "300", - "regular", + "400", "500", "600", "700", "800", - "900", - "100italic", - "200italic", - "300italic", - "italic", - "500italic", - "600italic", - "700italic", - "800italic", - "900italic" + "900" ] }, { - "Gilda Display": [ - "regular" + "Shippori Mincho": [ + "400", + "500", + "600", + "700", + "800" ] }, { - "Lemonada": [ - "300", - "regular", - "500", - "600", - "700" + "Shadows Into Light Two": [ + "400" ] }, { "Fira Code": [ "300", - "regular", + "400", "500", "600", "700" ] }, { - "Coda": [ - "regular", - "800" - ] - }, - { - "Kameron": [ - "regular", + "Mali": [ + "200", + "300", + "400", + "500", + "600", "700" ] }, { - "Koulen": [ - "regular" + "Jaldi": [ + "400", + "700" ] }, { "Candal": [ - "regular" + "400" ] }, { - "Syncopate": [ - "regular", + "Skranji": [ + "400", "700" ] }, { - "Antic": [ - "regular" - ] - }, - { - "Do Hyeon": [ - "regular" - ] - }, - { - "Markazi Text": [ - "regular", + "Inter Tight": [ + "100", + "200", + "300", + "400", "500", "600", - "700" + "700", + "800", + "900" ] }, { - "Amita": [ - "regular", - "700" + "Koulen": [ + "400" ] }, { - "Hind Guntur": [ - "300", - "regular", - "500", - "600", - "700" + "Mrs Saint Delafield": [ + "400" ] }, { - "Fredericka the Great": [ - "regular" + "Short Stack": [ + "400" ] }, { - "Saira Extra Condensed": [ + "Fraunces": [ "100", "200", "300", - "regular", + "400", "500", "600", "700", @@ -3900,219 +3171,210 @@ ] }, { - "Herr Von Muellerhoff": [ - "regular" + "Syne": [ + "400", + "500", + "600", + "700", + "800" ] }, { - "Mali": [ - "200", - "200italic", + "Lemonada": [ "300", - "300italic", - "regular", - "italic", + "400", "500", - "500italic", "600", - "600italic", - "700", - "700italic" + "700" ] }, { - "Basic": [ - "regular" - ] - }, - { - "Mrs Saint Delafield": [ - "regular" + "Markazi Text": [ + "400", + "500", + "600", + "700" ] }, { - "Bevan": [ - "regular", - "italic" + "Amita": [ + "400", + "700" ] }, { - "Skranji": [ - "regular", + "Reem Kufi": [ + "400", + "500", + "600", "700" ] }, { - "Palanquin Dark": [ - "regular", + "Hind Guntur": [ + "300", + "400", "500", "600", "700" ] }, { - "Cinzel Decorative": [ - "regular", - "700", - "900" + "Fredericka the Great": [ + "400" ] }, { - "Yrsa": [ + "Arima Madurai": [ + "100", + "200", "300", - "regular", + "400", "500", - "600", "700", - "300italic", - "italic", - "500italic", - "600italic", - "700italic" - ] - }, - { - "Reem Kufi": [ - "regular", - "500", - "600", - "700" + "800", + "900" ] }, { - "Arima Madurai": [ + "Saira Extra Condensed": [ "100", "200", "300", - "regular", + "400", "500", + "600", "700", "800", "900" ] }, { - "Rancho": [ - "regular" + "Average Sans": [ + "400" ] }, { - "Racing Sans One": [ - "regular" + "Syncopate": [ + "400", + "700" ] }, { - "Atkinson Hyperlegible": [ - "regular", - "italic", - "700", - "700italic" + "Rozha One": [ + "400" ] }, { - "Quintessential": [ - "regular" + "Zen Kaku Gothic New": [ + "300", + "400", + "500", + "700", + "900" ] }, { - "Nanum Brush Script": [ - "regular" + "Bevan": [ + "400" ] }, { - "Gochi Hand": [ - "regular" + "JetBrains Mono": [ + "100", + "200", + "300", + "400", + "500", + "600", + "700", + "800" ] }, { - "Jua": [ - "regular" + "Herr Von Muellerhoff": [ + "400" ] }, { - "Rozha One": [ - "regular" + "Cinzel Decorative": [ + "400", + "700", + "900" ] }, { - "K2D": [ + "Big Shoulders Display": [ "100", - "100italic", "200", - "200italic", "300", - "300italic", - "regular", - "italic", + "400", "500", - "500italic", "600", - "600italic", "700", - "700italic", "800", - "800italic" + "900" ] }, { - "Zen Kaku Gothic New": [ - "300", - "regular", - "500", - "700", - "900" + "Basic": [ + "400" ] }, { - "Capriola": [ - "regular" + "Amethysta": [ + "400" ] }, { - "Livvic": [ - "100", - "100italic", - "200", - "200italic", + "Rancho": [ + "400" + ] + }, + { + "Yrsa": [ "300", - "300italic", - "regular", - "italic", + "400", "500", - "500italic", "600", - "600italic", - "700", - "700italic", - "900", - "900italic" + "700" ] }, { - "JetBrains Mono": [ + "Racing Sans One": [ + "400" + ] + }, + { + "Nanum Brush Script": [ + "400" + ] + }, + { + "Graduate": [ + "400" + ] + }, + { + "Petrona": [ "100", "200", "300", - "regular", + "400", "500", "600", "700", "800", - "100italic", - "200italic", - "300italic", - "italic", - "500italic", - "600italic", - "700italic", - "800italic" + "900" ] }, { - "Biryani": [ + "Georama": [ + "100", "200", "300", - "regular", + "400", + "500", "600", "700", "800", @@ -4120,40 +3382,49 @@ ] }, { - "Petrona": [ - "100", - "200", - "300", - "regular", + "Do Hyeon": [ + "400" + ] + }, + { + "Miriam Libre": [ + "400", + "700" + ] + }, + { + "Gochi Hand": [ + "400" + ] + }, + { + "Palanquin Dark": [ + "400", "500", "600", - "700", - "800", - "900", - "100italic", - "200italic", - "300italic", - "italic", - "500italic", - "600italic", - "700italic", - "800italic", - "900italic" + "700" ] }, { - "Charm": [ - "regular", - "700" + "Capriola": [ + "400" ] }, { - "Big Shoulders Display": [ - "100", + "Jua": [ + "400" + ] + }, + { + "Telex": [ + "400" + ] + }, + { + "Biryani": [ "200", "300", - "regular", - "500", + "400", "600", "700", "800", @@ -4161,170 +3432,186 @@ ] }, { - "Rye": [ - "regular" + "Suez One": [ + "400" ] }, { "Rammetto One": [ - "regular" + "400" ] }, { - "Syne": [ - "regular", - "500", - "600", - "700", - "800" + "Rye": [ + "400" + ] + }, + { + "Arbutus Slab": [ + "400" ] }, { "Mate": [ - "regular", - "italic" + "400" ] }, { - "Annie Use Your Telescope": [ - "regular" + "Changa One": [ + "400" ] }, { - "Telex": [ - "regular" + "Libre Barcode 39": [ + "400" ] }, { - "Average": [ - "regular" + "Charm": [ + "400", + "700" ] }, { - "Arizonia": [ - "regular" + "Alatsi": [ + "400" ] }, { - "Graduate": [ - "regular" + "Annie Use Your Telescope": [ + "400" ] }, { - "Enriqueta": [ - "regular", + "La Belle Aurore": [ + "400" + ] + }, + { + "Knewave": [ + "400" + ] + }, + { + "Arizonia": [ + "400" + ] + }, + { + "STIX Two Text": [ + "400", "500", "600", "700" ] }, { - "La Belle Aurore": [ - "regular" + "BioRhyme": [ + "200", + "300", + "400", + "700", + "800" ] }, { - "Contrail One": [ - "regular" + "Oranienbaum": [ + "400" ] }, { - "Inter Tight": [ - "100", + "Lateef": [ "200", "300", - "regular", + "400", "500", "600", "700", - "800", - "900", - "100italic", - "200italic", - "300italic", - "italic", - "500italic", - "600italic", - "700italic", - "800italic", - "900italic" + "800" ] }, { - "Arbutus Slab": [ - "regular" + "Contrail One": [ + "400" ] }, { - "Changa One": [ - "regular", - "italic" + "K2D": [ + "100", + "200", + "300", + "400", + "500", + "600", + "700", + "800" ] }, { - "Marcellus SC": [ - "regular" + "Just Another Hand": [ + "400" ] }, { - "Oranienbaum": [ - "regular" + "Krona One": [ + "400" ] }, { - "Dongle": [ - "300", - "regular", - "700" + "Quintessential": [ + "400" ] }, { - "Just Another Hand": [ - "regular" + "GFS Didot": [ + "400" ] }, { - "Noto Sans Malayalam": [ - "100", - "200", - "300", - "regular", - "500", - "600", - "700", - "800", - "900" + "Wallpoet": [ + "400" ] }, { - "Alatsi": [ - "regular" + "Marcellus SC": [ + "400" ] }, { - "Wallpoet": [ - "regular" + "Trocchi": [ + "400" ] }, { - "DM Mono": [ - "300", - "300italic", - "regular", - "italic", + "Enriqueta": [ + "400", "500", - "500italic" + "600", + "700" ] }, { - "Allerta": [ - "regular" + "Kristi": [ + "400" + ] + }, + { + "Albert Sans": [ + "100", + "200", + "300", + "400", + "500", + "600", + "700", + "800", + "900" ] }, { "Darker Grotesque": [ "300", - "regular", + "400", "500", "600", "700", @@ -4333,355 +3620,377 @@ ] }, { - "Coming Soon": [ - "regular" + "Schoolbell": [ + "400" ] }, { - "Knewave": [ - "regular" + "Coming Soon": [ + "400" ] }, { - "Niconne": [ - "regular" + "Average": [ + "400" ] }, { - "Lateef": [ + "Noto Sans Malayalam": [ + "100", "200", "300", - "regular", + "400", "500", "600", "700", - "800" + "800", + "900" ] }, { "Sofia": [ - "regular" + "400" ] }, { - "GFS Didot": [ - "regular" + "Corben": [ + "400", + "700" ] }, { - "Kristi": [ - "regular" + "Niconne": [ + "400" ] }, { - "Corben": [ - "regular", + "Belleza": [ + "400" + ] + }, + { + "Scada": [ + "400", "700" ] }, { - "Pattaya": [ - "regular" + "DM Mono": [ + "300", + "400", + "500" ] }, { - "Coustard": [ - "regular", - "900" + "Overpass Mono": [ + "300", + "400", + "500", + "600", + "700" ] }, { - "Belleza": [ - "regular" + "Allerta": [ + "400" ] }, { - "Carrois Gothic": [ - "regular" + "Livvic": [ + "100", + "200", + "300", + "400", + "500", + "600", + "700", + "900" ] }, { - "Krona One": [ - "regular" + "Norican": [ + "400" ] }, { - "Delius": [ - "regular" + "Nobile": [ + "400", + "500", + "700" ] }, { - "Norican": [ - "regular" + "Alegreya SC": [ + "400", + "500", + "700", + "800", + "900" ] }, { - "Libre Barcode 39": [ - "regular" + "Pattaya": [ + "400" ] }, { - "Scada": [ - "regular", - "italic", + "Overlock": [ + "400", "700", - "700italic" + "900" ] }, { "Amiko": [ - "regular", + "400", "600", "700" ] }, { - "Kite One": [ - "regular" + "Bowlby One SC": [ + "400" ] }, { - "Nobile": [ - "regular", - "italic", + "Halant": [ + "300", + "400", "500", - "500italic", - "700", - "700italic" + "600", + "700" ] }, { - "STIX Two Text": [ - "regular", + "Cormorant Infant": [ + "300", + "400", "500", "600", - "700", - "italic", - "500italic", - "600italic", - "700italic" + "700" ] }, { - "Bowlby One SC": [ - "regular" + "Rochester": [ + "400" ] }, { - "Qwigley": [ - "regular" + "Carrois Gothic": [ + "400" ] }, { - "Halant": [ - "300", - "regular", - "500", - "600", + "Rambla": [ + "400", "700" ] }, { - "Rochester": [ - "regular" + "Delius": [ + "400" ] }, { - "BioRhyme": [ - "200", - "300", - "regular", - "700", - "800" + "Cedarville Cursive": [ + "400" ] }, { - "Trirong": [ - "100", - "100italic", - "200", - "200italic", - "300", - "300italic", - "regular", - "italic", - "500", - "500italic", - "600", - "600italic", - "700", - "700italic", - "800", - "800italic", - "900", - "900italic" + "Atkinson Hyperlegible": [ + "400", + "700" ] }, { - "Cedarville Cursive": [ - "regular" + "Monsieur La Doulaise": [ + "400" ] }, { - "Albert Sans": [ - "100", + "Petit Formal Script": [ + "400" + ] + }, + { + "Source Sans 3": [ "200", "300", - "regular", + "400", "500", "600", "700", "800", - "900", - "100italic", - "200italic", - "300italic", - "italic", - "500italic", - "600italic", - "700italic", - "800italic", - "900italic" + "900" ] }, { - "Overlock": [ - "regular", - "italic", - "700", - "700italic", - "900", - "900italic" + "Coustard": [ + "400", + "900" ] }, { - "Rambla": [ - "regular", - "italic", - "700", - "700italic" + "Fjord One": [ + "400" ] }, { - "Miriam Libre": [ - "regular", + "Henny Penny": [ + "400" + ] + }, + { + "Magra": [ + "400", "700" ] }, { - "Fjord One": [ - "regular" + "Bellefair": [ + "400" ] }, { - "Georama": [ + "Qwigley": [ + "400" + ] + }, + { + "Chonburi": [ + "400" + ] + }, + { + "Kosugi": [ + "400" + ] + }, + { + "Seaweed Script": [ + "400" + ] + }, + { + "Judson": [ + "400", + "700" + ] + }, + { + "Trirong": [ "100", "200", "300", - "regular", + "400", "500", "600", "700", "800", - "900", - "100italic", - "200italic", - "300italic", - "italic", - "500italic", - "600italic", - "700italic", - "800italic", - "900italic" + "900" ] }, { - "Henny Penny": [ - "regular" + "Yesteryear": [ + "400" ] }, { - "Bungee Inline": [ - "regular" + "Dongle": [ + "300", + "400", + "700" ] }, { - "Petit Formal Script": [ - "regular" + "Maitree": [ + "200", + "300", + "400", + "500", + "600", + "700" ] }, { - "Cormorant Infant": [ - "300", - "300italic", - "regular", - "italic", + "David Libre": [ + "400", "500", - "500italic", - "600", - "600italic", - "700", - "700italic" + "700" ] }, { - "Magra": [ - "regular", + "Caudex": [ + "400", "700" ] }, { - "Schoolbell": [ - "regular" + "Averia Serif Libre": [ + "300", + "400", + "700" ] }, { - "Bellefair": [ - "regular" + "Newsreader": [ + "200", + "300", + "400", + "500", + "600", + "700", + "800" ] }, { - "Suez One": [ - "regular" + "Bungee Inline": [ + "400" ] }, { - "Monsieur La Doulaise": [ - "regular" + "Nixie One": [ + "400" ] }, { - "Alike": [ - "regular" + "Bubblegum Sans": [ + "400" ] }, { - "Chonburi": [ - "regular" + "Alike": [ + "400" ] }, { - "Overpass Mono": [ - "300", - "regular", - "500", - "600", - "700" + "Aladin": [ + "400" ] }, { - "Pirata One": [ - "regular" + "Kiwi Maru": [ + "300", + "400", + "500" ] }, { - "Yesteryear": [ - "regular" + "Noto Sans Mono": [ + "100", + "200", + "300", + "400", + "500", + "600", + "700", + "800", + "900" ] }, { - "Seaweed Script": [ - "regular" + "Grand Hotel": [ + "400" ] }, { @@ -4689,215 +3998,185 @@ "100", "200", "300", - "regular", + "400", "500", "600", "700", "800", - "900" - ] - }, - { - "Aladin": [ - "regular" + "900" ] }, { - "Jockey One": [ - "regular" + "Rubik Moonrocks": [ + "400" ] }, { - "Kosugi": [ - "regular" + "NTR": [ + "400" ] }, { - "Alegreya SC": [ - "regular", - "italic", - "500", - "500italic", - "700", - "700italic", - "800", - "800italic", - "900", - "900italic" + "Fauna One": [ + "400" ] }, { - "Bentham": [ - "regular" + "Sniglet": [ + "400", + "800" ] }, { - "Source Sans 3": [ - "200", - "300", - "regular", - "500", - "600", - "700", - "800", - "900", - "200italic", - "300italic", - "italic", - "500italic", - "600italic", - "700italic", - "800italic", - "900italic" + "Ovo": [ + "400" ] }, { - "Brygada 1918": [ - "regular", - "500", - "600", + "Hanuman": [ + "100", + "300", + "400", "700", - "italic", - "500italic", - "600italic", - "700italic" + "900" ] }, { - "NTR": [ - "regular" + "Waiting for the Sunrise": [ + "400" ] }, { - "Bubblegum Sans": [ - "regular" + "Kite One": [ + "400" ] }, { - "Nixie One": [ - "regular" + "Irish Grover": [ + "400" ] }, { - "Grand Hotel": [ - "regular" + "Stardos Stencil": [ + "400", + "700" ] }, { - "Maitree": [ + "Mukta Vaani": [ "200", "300", - "regular", + "400", "500", "600", - "700" - ] - }, - { - "Caudex": [ - "regular", - "italic", "700", - "700italic" + "800" ] }, { - "Rubik Moonrocks": [ - "regular" + "Manjari": [ + "100", + "400", + "700" ] }, { - "Sniglet": [ - "regular", - "800" + "Caladea": [ + "400", + "700" ] }, { - "Kiwi Maru": [ - "300", - "regular", - "500" + "Spinnaker": [ + "400" ] }, { - "Trocchi": [ - "regular" + "Fondamento": [ + "400" ] }, { - "Averia Serif Libre": [ - "300", - "300italic", - "regular", - "italic", - "700", - "700italic" + "Merienda One": [ + "400" ] }, { - "Mallanna": [ - "regular" + "Cambay": [ + "400", + "700" ] }, { - "Fauna One": [ - "regular" + "Bentham": [ + "400" ] }, { - "Ovo": [ - "regular" + "Marmelad": [ + "400" ] }, { - "Marmelad": [ - "regular" + "Julee": [ + "400" ] }, { - "Mukta Vaani": [ - "200", - "300", - "regular", - "500", + "Vollkorn SC": [ + "400", "600", "700", - "800" + "900" ] }, { - "Irish Grover": [ - "regular" + "B612": [ + "400", + "700" ] }, { - "Judson": [ - "regular", - "italic", + "Oxygen Mono": [ + "400" + ] + }, + { + "Balsamiq Sans": [ + "400", "700" ] }, { - "Suranna": [ - "regular" + "Limelight": [ + "400" ] }, { - "Mate SC": [ - "regular" + "Slabo 13px": [ + "400" ] }, { - "Balsamiq Sans": [ - "regular", - "italic", - "700", - "700italic" + "Averia Libre": [ + "300", + "400", + "700" + ] + }, + { + "Rakkas": [ + "400" + ] + }, + { + "Suranna": [ + "400" ] }, { "Baloo Tamma 2": [ - "regular", + "400", "500", "600", "700", @@ -4905,31 +4184,27 @@ ] }, { - "Manjari": [ - "100", - "regular", - "700" + "Jockey One": [ + "400" ] }, { - "Viaoda Libre": [ - "regular" + "Klee One": [ + "400", + "600" ] }, { - "B612": [ - "regular", - "italic", - "700", - "700italic" + "Noto Color Emoji": [ + "400" ] }, { - "Hepta Slab": [ + "Grandstander": [ "100", "200", "300", - "regular", + "400", "500", "600", "700", @@ -4938,121 +4213,91 @@ ] }, { - "Merienda One": [ - "regular" + "Proza Libre": [ + "400", + "500", + "600", + "700", + "800" ] }, { - "Averia Libre": [ + "Rasa": [ "300", - "300italic", - "regular", - "italic", - "700", - "700italic" + "400", + "500", + "600", + "700" ] }, { - "Caladea": [ - "regular", - "italic", + "Hepta Slab": [ + "100", + "200", + "300", + "400", + "500", + "600", "700", - "700italic" + "800", + "900" ] }, { "IM Fell English SC": [ - "regular" + "400" ] }, { "Thasadith": [ - "regular", - "italic", - "700", - "700italic" - ] - }, - { - "Spinnaker": [ - "regular" + "400", + "700" ] }, { - "Grandstander": [ - "100", - "200", + "Sunflower": [ "300", - "regular", "500", - "600", - "700", - "800", - "900", - "100italic", - "200italic", - "300italic", - "italic", - "500italic", - "600italic", - "700italic", - "800italic", - "900italic" + "700" ] }, { - "Meera Inimai": [ - "regular" + "Mallanna": [ + "400" ] }, { - "Podkova": [ - "regular", - "500", - "600", - "700", - "800" + "Lemon": [ + "400" ] }, { "Dawning of a New Day": [ - "regular" - ] - }, - { - "Slabo 13px": [ - "regular" - ] - }, - { - "Bungee Shade": [ - "regular" + "400" ] }, { "Gabriela": [ - "regular" + "400" ] }, { - "Noto Color Emoji": [ - "regular" + "Bungee Shade": [ + "400" ] }, { - "Cambay": [ - "regular", - "italic", - "700", - "700italic" + "Allan": [ + "400", + "700" ] }, { - "Noto Sans Mono": [ + "Encode Sans Semi Condensed": [ "100", "200", "300", - "regular", + "400", "500", "600", "700", @@ -5061,228 +4306,187 @@ ] }, { - "Hanuman": [ - "100", - "300", - "regular", + "Podkova": [ + "400", + "500", + "600", "700", - "900" + "800" ] }, { - "Newsreader": [ + "Mate SC": [ + "400" + ] + }, + { + "Marvel": [ + "400", + "700" + ] + }, + { + "Noto Serif Display": [ + "100", "200", "300", - "regular", + "400", "500", "600", "700", "800", - "200italic", - "300italic", - "italic", - "500italic", - "600italic", - "700italic", - "800italic" + "900" ] }, { - "Oxygen Mono": [ - "regular" + "Kelly Slab": [ + "400" ] }, { - "Kelly Slab": [ - "regular" + "Mirza": [ + "400", + "500", + "600", + "700" + ] + }, + { + "Gurajada": [ + "400" ] }, { "Rosario": [ "300", - "regular", + "400", "500", "600", - "700", - "300italic", - "italic", - "500italic", - "600italic", - "700italic" + "700" ] }, { - "Calligraffitti": [ - "regular" + "Meera Inimai": [ + "400" ] }, { - "Noto Serif Display": [ + "Vazirmatn": [ "100", "200", "300", - "regular", + "400", "500", "600", "700", "800", - "900", - "100italic", - "200italic", - "300italic", - "italic", - "500italic", - "600italic", - "700italic", - "800italic", - "900italic" + "900" ] }, { - "Proza Libre": [ - "regular", - "italic", - "500", - "500italic", - "600", - "600italic", - "700", - "700italic", - "800", - "800italic" + "Silkscreen": [ + "400", + "700" ] }, { - "Copse": [ - "regular" + "Calligraffitti": [ + "400" ] }, { - "Rasa": [ - "300", - "regular", + "Brygada 1918": [ + "400", "500", "600", - "700", - "300italic", - "italic", - "500italic", - "600italic", - "700italic" - ] - }, - { - "Gurajada": [ - "regular" + "700" ] }, { - "Kurale": [ - "regular" + "Cutive": [ + "400" ] }, { - "Marvel": [ - "regular", - "italic", - "700", - "700italic" + "Share": [ + "400", + "700" ] }, { - "Rakkas": [ - "regular" + "Bowlby One": [ + "400" ] }, { - "Waiting for the Sunrise": [ - "regular" + "Copse": [ + "400" ] }, { - "Stardos Stencil": [ - "regular", - "700" + "Goudy Bookletter 1911": [ + "400" ] }, { - "Limelight": [ - "regular" + "McLaren": [ + "400" ] }, { - "Encode Sans Semi Condensed": [ - "100", - "200", + "Fredoka": [ "300", - "regular", + "400", + "500", + "600", + "700" + ] + }, + { + "Baloo Da 2": [ + "400", "500", "600", "700", - "800", - "900" + "800" ] }, { - "David Libre": [ - "regular", - "500", + "Aref Ruqaa": [ + "400", "700" ] }, { - "Lemon": [ - "regular" + "Brawler": [ + "400", + "700" ] }, { "Oxanium": [ "200", "300", - "regular", + "400", "500", "600", "700", "800" ] }, - { - "Gugi": [ - "regular" - ] - }, - { - "Fredoka": [ - "300", - "regular", - "500", - "600", - "700" - ] - }, { "IM Fell English": [ - "regular", - "italic" + "400" ] }, { - "Stint Ultra Condensed": [ - "regular" - ] - }, - { - "Baloo Da 2": [ - "regular", - "500", - "600", - "700", - "800" + "Kurale": [ + "400" ] }, { "Baloo Paaji 2": [ - "regular", + "400", "500", "600", "700", @@ -5294,17 +4498,15 @@ "100", "200", "300", - "regular", + "400", "500", "600", "700" ] }, { - "Sunflower": [ - "300", - "500", - "700" + "Meddon": [ + "400" ] }, { @@ -5312,7 +4514,7 @@ "100", "200", "300", - "regular", + "400", "500", "600", "700", @@ -5321,147 +4523,96 @@ ] }, { - "Share": [ - "regular", - "italic", - "700", - "700italic" - ] - }, - { - "McLaren": [ - "regular" - ] - }, - { - "Vollkorn SC": [ - "regular", - "600", - "700", - "900" - ] - }, - { - "Love Ya Like A Sister": [ - "regular" - ] - }, - { - "Julee": [ - "regular" - ] - }, - { - "Klee One": [ - "regular", - "600" + "ZCOOL XiaoWei": [ + "400" ] }, { - "BIZ UDPGothic": [ - "regular", - "700" + "Molengo": [ + "400" ] }, { - "ZCOOL XiaoWei": [ - "regular" + "Gugi": [ + "400" ] }, { "Cormorant SC": [ "300", - "regular", + "400", "500", "600", "700" ] }, { - "Metrophobic": [ - "regular" - ] - }, - { - "Fondamento": [ - "regular", - "italic" - ] - }, - { - "Zeyada": [ - "regular" - ] - }, - { - "Bowlby One": [ - "regular" + "Fanwood Text": [ + "400" ] }, { - "Cutive": [ - "regular" + "Sansita Swashed": [ + "300", + "400", + "500", + "600", + "700", + "800", + "900" ] }, { - "Fahkwang": [ + "Anek Malayalam": [ + "100", "200", - "200italic", "300", - "300italic", - "regular", - "italic", + "400", "500", - "500italic", "600", - "600italic", "700", - "700italic" - ] - }, - { - "Aref Ruqaa": [ - "regular", - "700" + "800" ] }, { - "Molengo": [ - "regular" + "Pirata One": [ + "400" ] }, { - "Tenali Ramakrishna": [ - "regular" + "Pompiere": [ + "400" ] }, { - "Pompiere": [ - "regular" + "Love Ya Like A Sister": [ + "400" ] }, { - "Fanwood Text": [ - "regular", - "italic" + "Cormorant Upright": [ + "300", + "400", + "500", + "600", + "700" ] }, { - "Silkscreen": [ - "regular", - "700" + "Metrophobic": [ + "400" ] }, { - "Goudy Bookletter 1911": [ - "regular" + "Quando": [ + "400" ] }, { "Turret Road": [ "200", "300", - "regular", + "400", "500", "700", "800" @@ -5472,7 +4623,7 @@ "100", "200", "300", - "regular", + "400", "500", "600", "700", @@ -5481,70 +4632,61 @@ ] }, { - "Andika": [ - "regular", - "italic", - "700", - "700italic" + "Cambo": [ + "400" ] }, { - "Sansita Swashed": [ + "Fahkwang": [ + "200", "300", - "regular", + "400", "500", "600", - "700", - "800", - "900" + "700" ] }, { - "Elsie": [ - "regular", - "900" + "Odibee Sans": [ + "400" ] }, { - "Baloo Thambi 2": [ - "regular", - "500", - "600", - "700", - "800" + "League Gothic": [ + "400" ] }, { - "Brawler": [ - "regular", - "700" + "UnifrakturMaguntia": [ + "400" ] }, { - "Oleo Script Swash Caps": [ - "regular", + "Andika": [ + "400", "700" ] }, { - "Quando": [ - "regular" + "Oleo Script Swash Caps": [ + "400", + "700" ] }, { - "Meddon": [ - "regular" + "Ma Shan Zheng": [ + "400" ] }, { - "Allan": [ - "regular", + "BIZ UDPGothic": [ + "400", "700" ] }, { "Tillana": [ - "regular", + "400", "500", "600", "700", @@ -5552,271 +4694,197 @@ ] }, { - "UnifrakturMaguntia": [ - "regular" - ] - }, - { - "Odibee Sans": [ - "regular" + "Tenali Ramakrishna": [ + "400" ] }, { - "Cormorant Upright": [ - "300", - "regular", + "Baloo Thambi 2": [ + "400", "500", "600", - "700" + "700", + "800" ] }, { - "Ma Shan Zheng": [ - "regular" + "Style Script": [ + "400" ] }, { - "Mouse Memoirs": [ - "regular" + "Montserrat Subrayada": [ + "400", + "700" ] }, { - "Patrick Hand SC": [ - "regular" + "Kadwa": [ + "400", + "700" ] }, { - "Homenaje": [ - "regular" + "Gravitas One": [ + "400" ] }, { - "Shippori Mincho B1": [ - "regular", - "500", - "600", - "700", - "800" + "Mouse Memoirs": [ + "400" ] }, { - "Mirza": [ - "regular", - "500", - "600", + "Bellota Text": [ + "300", + "400", "700" ] }, { - "Style Script": [ - "regular" + "IM Fell DW Pica": [ + "400" ] }, { - "Italiana": [ - "regular" + "Emilys Candy": [ + "400" ] }, { - "Bellota Text": [ - "300", - "300italic", - "regular", - "italic", - "700", - "700italic" + "Inder": [ + "400" ] }, { - "IM Fell Double Pica": [ - "regular", - "italic" + "Zen Antique": [ + "400" ] }, { - "Vesper Libre": [ - "regular", - "500", - "700", - "900" + "Sue Ellen Francisco": [ + "400" ] }, { "Spectral SC": [ "200", - "200italic", "300", - "300italic", - "regular", - "italic", + "400", "500", - "500italic", "600", - "600italic", "700", - "700italic", - "800", - "800italic" - ] - }, - { - "IM Fell DW Pica": [ - "regular", - "italic" + "800" ] }, { - "Sue Ellen Francisco": [ - "regular" + "Patrick Hand SC": [ + "400" ] }, { - "Mansalva": [ - "regular" + "Italiana": [ + "400" ] }, { "Farro": [ "300", - "regular", + "400", "500", "700" ] }, - { - "Antic Didone": [ - "regular" - ] - }, - { - "Emilys Candy": [ - "regular" - ] - }, - { - "Radley": [ - "regular", - "italic" - ] - }, { "Nova Mono": [ - "regular" - ] - }, - { - "Bakbak One": [ - "regular" + "400" ] }, { - "Inder": [ - "regular" - ] - }, - { - "Vazirmatn": [ - "100", - "200", - "300", - "regular", - "500", - "600", - "700", - "800", - "900" - ] - }, - { - "Kadwa": [ - "regular", - "700" + "Mansalva": [ + "400" ] }, { - "Buenard": [ - "regular", - "700" + "Homenaje": [ + "400" ] }, { - "Zen Antique": [ - "regular" + "Slackey": [ + "400" ] }, { - "Rouge Script": [ - "regular" + "ZCOOL QingKe HuangYou": [ + "400" ] }, { - "Noto Nastaliq Urdu": [ - "regular", + "Shippori Mincho B1": [ + "400", "500", "600", - "700" + "700", + "800" ] }, { - "Della Respira": [ - "regular" + "IM Fell Double Pica": [ + "400" ] }, { - "Montserrat Subrayada": [ - "regular", - "700" + "Vesper Libre": [ + "400", + "500", + "700", + "900" ] }, { "Geo": [ - "regular", - "italic" + "400" ] }, { - "Fresca": [ - "regular" + "Bakbak One": [ + "400" ] }, { - "Gravitas One": [ - "regular" + "Radley": [ + "400" ] }, { - "Duru Sans": [ - "regular" + "Montaga": [ + "400" ] }, { - "Metamorphous": [ - "regular" + "Nerko One": [ + "400" ] }, { - "Sedgwick Ave": [ - "regular" + "Megrim": [ + "400" ] }, { - "Zen Old Mincho": [ - "regular", - "500", - "600", - "700", - "900" + "Rouge Script": [ + "400" ] }, { - "Flamenco": [ - "300", - "regular" + "Antic Didone": [ + "400" ] }, { "Montez": [ - "regular" + "400" ] }, { @@ -5824,7 +4892,7 @@ "100", "200", "300", - "regular", + "400", "500", "600", "700", @@ -5834,103 +4902,95 @@ }, { "Kodchasan": [ - "200", - "200italic", - "300", - "300italic", - "regular", - "italic", - "500", - "500italic", - "600", - "600italic", - "700", - "700italic" - ] - }, - { - "Big Shoulders Text": [ - "100", "200", "300", - "regular", + "400", "500", "600", - "700", - "800", - "900" + "700" ] }, { - "Harmattan": [ - "regular", - "700" + "Chelsea Market": [ + "400" ] }, { - "Montaga": [ - "regular" + "Carme": [ + "400" ] }, { "Libre Bodoni": [ - "regular", + "400", "500", "600", - "700", - "italic", - "500italic", - "600italic", - "700italic" + "700" ] }, { - "Overlock SC": [ - "regular" + "Sedgwick Ave": [ + "400" ] }, { - "Cambo": [ - "regular" + "Fresca": [ + "400" ] }, { - "Poly": [ - "regular", - "italic" + "Oooh Baby": [ + "400" ] }, { - "Carme": [ - "regular" + "Duru Sans": [ + "400" ] }, { - "League Gothic": [ - "regular" + "Harmattan": [ + "400", + "700" ] }, { - "Raleway Dots": [ - "regular" + "Noto Sans Bengali": [ + "100", + "200", + "300", + "400", + "500", + "600", + "700", + "800", + "900" ] }, { - "Mr De Haviland": [ - "regular" + "Zen Old Mincho": [ + "400", + "500", + "600", + "700", + "900" ] }, { - "Chelsea Market": [ - "regular" + "Battambang": [ + "100", + "300", + "400", + "700", + "900" ] }, { - "Noto Sans Bengali": [ + "Big Shoulders Text": [ "100", "200", "300", - "regular", + "400", "500", "600", "700", @@ -5939,51 +4999,47 @@ ] }, { - "Allison": [ - "regular" - ] - }, - { - "Supermercado One": [ - "regular" - ] - }, - { - "RocknRoll One": [ - "regular" + "Metamorphous": [ + "400" ] }, { - "Slackey": [ - "regular" + "IBM Plex Sans KR": [ + "100", + "200", + "300", + "400", + "500", + "600", + "700" ] }, { - "Oooh Baby": [ - "regular" + "Supermercado One": [ + "400" ] }, { - "Happy Monkey": [ - "regular" + "Mr De Haviland": [ + "400" ] }, { - "Mako": [ - "regular" + "Flamenco": [ + "300", + "400" ] }, { - "Nerko One": [ - "regular" + "Poly": [ + "400" ] }, { - "Encode Sans Expanded": [ - "100", + "Source Serif 4": [ "200", "300", - "regular", + "400", "500", "600", "700", @@ -5992,306 +5048,232 @@ ] }, { - "Source Serif 4": [ - "200", - "300", - "regular", - "500", - "600", - "700", - "800", - "900", - "200italic", - "300italic", - "italic", - "500italic", - "600italic", - "700italic", - "800italic", - "900italic" + "Arya": [ + "400", + "700" ] }, { - "Headland One": [ - "regular" + "Buenard": [ + "400", + "700" ] }, { - "Expletus Sans": [ - "regular", - "500", - "600", - "700", - "italic", - "500italic", - "600italic", - "700italic" + "Elsie": [ + "400", + "900" ] }, { - "IBM Plex Sans KR": [ - "100", - "200", - "300", - "regular", - "500", - "600", - "700" + "Hanalei Fill": [ + "400" ] }, { - "Besley": [ - "regular", - "500", - "600", - "700", - "800", - "900", - "italic", - "500italic", - "600italic", - "700italic", - "800italic", - "900italic" + "RocknRoll One": [ + "400" ] }, { "KoHo": [ "200", - "200italic", "300", - "300italic", - "regular", - "italic", + "400", "500", - "500italic", "600", - "600italic", - "700", - "700italic" - ] - }, - { - "Oregano": [ - "regular", - "italic" + "700" ] }, { - "DotGothic16": [ - "regular" + "Asul": [ + "400", + "700" ] }, { - "Ms Madi": [ - "regular" + "Viaoda Libre": [ + "400" ] }, { - "Belgrano": [ - "regular" + "Amarante": [ + "400" ] }, { - "Amarante": [ - "regular" + "Della Respira": [ + "400" ] }, { - "Shojumaru": [ - "regular" + "Numans": [ + "400" ] }, { - "Megrim": [ - "regular" + "Oregano": [ + "400" ] }, { - "Convergence": [ - "regular" + "Noto Nastaliq Urdu": [ + "400", + "500", + "600", + "700" ] }, { - "Hanalei Fill": [ - "regular" + "Syne Mono": [ + "400" ] }, { - "Xanh Mono": [ - "regular", - "italic" + "Tiro Devanagari Hindi": [ + "400" ] }, { - "Syne Mono": [ - "regular" + "Mako": [ + "400" ] }, { - "Battambang": [ + "Encode Sans Expanded": [ "100", + "200", "300", - "regular", + "400", + "500", + "600", "700", + "800", "900" ] }, { - "Arya": [ - "regular", - "700" - ] - }, - { - "Zen Kaku Gothic Antique": [ - "300", - "regular", - "500", - "700", - "900" + "Ms Madi": [ + "400" ] }, { - "Jomhuria": [ - "regular" + "Convergence": [ + "400" ] }, { - "Lexend Zetta": [ - "100", - "200", - "300", - "regular", + "Baloo Chettan 2": [ + "400", "500", "600", "700", - "800", - "900" + "800" ] }, { - "Baumans": [ - "regular" + "Happy Monkey": [ + "400" ] }, { - "Aguafina Script": [ - "regular" + "DotGothic16": [ + "400" ] }, { - "Notable": [ - "regular" + "Expletus Sans": [ + "400", + "500", + "600", + "700" ] }, { - "Baloo Chettan 2": [ - "regular", + "Lexend Zetta": [ + "100", + "200", + "300", + "400", "500", "600", "700", - "800" + "800", + "900" ] }, { - "Ceviche One": [ - "regular" + "Averia Gruesa Libre": [ + "400" ] }, { "Original Surfer": [ - "regular" + "400" ] }, { - "Anaheim": [ - "regular" + "Ceviche One": [ + "400" ] }, { "Atma": [ "300", - "regular", + "400", "500", "600", "700" ] }, { - "Mochiy Pop One": [ - "regular" + "Notable": [ + "400" ] }, { - "Orienta": [ - "regular" + "Aguafina Script": [ + "400" ] }, { - "Over the Rainbow": [ - "regular" + "Belgrano": [ + "400" ] }, { "BhuTuka Expanded One": [ - "regular" - ] - }, - { - "Salsa": [ - "regular" - ] - }, - { - "Goblin One": [ - "regular" - ] - }, - { - "Lekton": [ - "regular", - "italic", - "700" + "400" ] }, { - "Numans": [ - "regular" + "Major Mono Display": [ + "400" ] }, { - "Noto Sans Georgian": [ - "100", - "200", - "300", - "regular", - "500", - "600", - "700", - "800", - "900" + "Anaheim": [ + "400" ] }, { - "Chau Philomene One": [ - "regular", - "italic" + "Euphoria Script": [ + "400" ] }, { - "Federo": [ - "regular" + "Orienta": [ + "400" ] }, { - "Alike Angular": [ - "regular" + "Shojumaru": [ + "400" ] }, { - "Bubbler One": [ - "regular" + "Jomhuria": [ + "400" ] }, { @@ -6299,7 +5281,7 @@ "100", "200", "300", - "regular", + "400", "500", "600", "700", @@ -6308,268 +5290,298 @@ ] }, { - "Mountains of Christmas": [ - "regular", - "700" + "Allison": [ + "400" ] }, { - "Doppio One": [ - "regular" + "Libre Barcode 39 Extended Text": [ + "400" ] }, { - "Asul": [ - "regular", - "700" + "Over the Rainbow": [ + "400" ] }, { - "Euphoria Script": [ - "regular" + "Share Tech": [ + "400" ] }, { - "Ledger": [ - "regular" + "Doppio One": [ + "400" ] }, { - "Vast Shadow": [ - "regular" + "Dela Gothic One": [ + "400" ] }, { - "Dela Gothic One": [ - "regular" + "Federo": [ + "400" ] }, { "Galada": [ - "regular" + "400" ] }, { - "Ibarra Real Nova": [ - "regular", - "500", - "600", - "700", - "italic", - "500italic", - "600italic", - "700italic" + "Salsa": [ + "400" ] }, { - "Share Tech": [ - "regular" + "Baumans": [ + "400" ] }, { - "Clicker Script": [ - "regular" + "Raleway Dots": [ + "400" + ] + }, + { + "Yusei Magic": [ + "400" + ] + }, + { + "Goblin One": [ + "400" ] }, { "Akshar": [ "300", - "regular", + "400", "500", "600", "700" ] }, { - "Yusei Magic": [ - "regular" + "Tienne": [ + "400", + "700", + "900" ] }, { - "Timmana": [ - "regular" + "Alexandria": [ + "100", + "200", + "300", + "400", + "500", + "600", + "700", + "800", + "900" ] }, { - "B612 Mono": [ - "regular", - "italic", + "Zen Kaku Gothic Antique": [ + "300", + "400", + "500", "700", - "700italic" + "900" ] }, { - "Libre Caslon Display": [ - "regular" + "Lekton": [ + "400", + "700" ] }, { - "Anek Malayalam": [ - "100", - "200", - "300", - "regular", - "500", - "600", - "700", - "800" + "Mountains of Christmas": [ + "400", + "700" ] }, { - "Delius Swash Caps": [ - "regular" + "Bilbo Swash Caps": [ + "400" ] }, { - "Freckle Face": [ - "regular" + "B612 Mono": [ + "400", + "700" ] }, { - "Aboreto": [ - "regular" + "Ledger": [ + "400" ] }, { - "Finger Paint": [ - "regular" + "Dokdo": [ + "400" ] }, { - "Hurricane": [ - "regular" + "Freckle Face": [ + "400" ] }, { - "Coiny": [ - "regular" + "Chau Philomene One": [ + "400" ] }, { - "Anek Telugu": [ + "Noto Sans NKo": [ + "400" + ] + }, + { + "Clicker Script": [ + "400" + ] + }, + { + "Tomorrow": [ "100", "200", "300", - "regular", + "400", "500", "600", "700", - "800" + "800", + "900" ] }, { - "Trykker": [ - "regular" + "Vast Shadow": [ + "400" ] }, { - "Major Mono Display": [ - "regular" + "Trykker": [ + "400" ] }, { - "Tiro Devanagari Hindi": [ - "regular", - "italic" + "Baloo Bhai 2": [ + "400", + "500", + "600", + "700", + "800" ] }, { - "Dokdo": [ - "regular" + "Kaisei Decol": [ + "400", + "500", + "700" ] }, { - "Germania One": [ - "regular" + "Inknut Antiqua": [ + "300", + "400", + "500", + "600", + "700", + "800", + "900" ] }, { - "Bilbo Swash Caps": [ - "regular" + "Poller One": [ + "400" ] }, { - "Peralta": [ - "regular" + "Life Savers": [ + "400", + "700", + "800" ] }, { - "Crafty Girls": [ - "regular" + "Alike Angular": [ + "400" ] }, { - "Tomorrow": [ - "100", - "100italic", - "200", - "200italic", - "300", - "300italic", - "regular", - "italic", - "500", - "500italic", - "600", - "600italic", - "700", - "700italic", - "800", - "800italic", - "900", - "900italic" + "Aboreto": [ + "400" ] }, { - "Averia Sans Libre": [ - "300", - "300italic", - "regular", - "italic", - "700", - "700italic" + "Finger Paint": [ + "400" ] }, { "Codystar": [ "300", - "regular" + "400" ] }, { - "Libre Barcode 39 Extended Text": [ - "regular" + "Reggae One": [ + "400" ] }, { - "Goldman": [ - "regular", - "700" + "Sail": [ + "400" ] }, { - "Baloo Bhai 2": [ - "regular", + "Ibarra Real Nova": [ + "400", "500", "600", - "700", - "800" + "700" + ] + }, + { + "Bubbler One": [ + "400" ] }, { "Hi Melody": [ - "regular" + "400" + ] + }, + { + "Headland One": [ + "400" ] }, { "Faster One": [ - "regular" + "400" ] }, { - "Inknut Antiqua": [ + "Averia Sans Libre": [ + "300", + "400", + "700" + ] + }, + { + "Coiny": [ + "400" + ] + }, + { + "Recursive": [ "300", - "regular", + "400", "500", "600", "700", @@ -6578,45 +5590,37 @@ ] }, { - "ZCOOL QingKe HuangYou": [ - "regular" + "Walter Turncoat": [ + "400" ] }, { - "Cantora One": [ - "regular" + "Noto Serif Khojki": [ + "400", + "500", + "600", + "700" ] }, { - "Ruslan Display": [ - "regular" + "Zen Kurenaido": [ + "400" ] }, { - "Kufam": [ - "regular", - "500", - "600", - "700", - "800", - "900", - "italic", - "500italic", - "600italic", - "700italic", - "800italic", - "900italic" + "Goldman": [ + "400", + "700" ] }, { - "Give You Glory": [ - "regular" + "Delius Swash Caps": [ + "400" ] }, { - "Recursive": [ - "300", - "regular", + "Besley": [ + "400", "500", "600", "700", @@ -6625,62 +5629,55 @@ ] }, { - "Noto Sans NKo": [ - "regular" + "Noto Sans Syloti Nagri": [ + "400" ] }, { - "Walter Turncoat": [ - "regular" + "Libre Caslon Display": [ + "400" + ] + }, + { + "Ruslan Display": [ + "400" ] }, { "Wendy One": [ - "regular" + "400" ] }, { - "Kaisei Decol": [ - "regular", + "Kufam": [ + "400", "500", - "700" + "600", + "700", + "800", + "900" ] }, { - "Balthazar": [ - "regular" + "Timmana": [ + "400" ] }, { "Pavanam": [ - "regular" + "400" ] }, { "Nova Round": [ - "regular" - ] - }, - { - "Zen Kurenaido": [ - "regular" - ] - }, - { - "Saira Stencil One": [ - "regular" - ] - }, - { - "Port Lligat Sans": [ - "regular" + "400" ] }, { "Mukta Mahee": [ "200", "300", - "regular", + "400", "500", "600", "700", @@ -6688,53 +5685,38 @@ ] }, { - "Lily Script One": [ - "regular" + "Crafty Girls": [ + "400" ] }, { - "Eater": [ - "regular" + "Noto Serif Ahom": [ + "400" ] }, { "Just Me Again Down Here": [ - "regular" - ] - }, - { - "Artifika": [ - "regular" - ] - }, - { - "Loved by the King": [ - "regular" + "400" ] }, { - "Life Savers": [ - "regular", - "700", - "800" + "Give You Glory": [ + "400" ] }, { - "Shalimar": [ - "regular" + "Cantora One": [ + "400" ] }, { - "League Script": [ - "regular" + "Lily Script One": [ + "400" ] }, { - "Noto Serif Khojki": [ - "regular", - "500", - "600", - "700" + "Peralta": [ + "400" ] }, { @@ -6742,20 +5724,7 @@ "100", "200", "300", - "regular", - "500", - "600", - "700", - "800", - "900" - ] - }, - { - "Lexend Giga": [ - "100", - "200", - "300", - "regular", + "400", "500", "600", "700", @@ -6764,108 +5733,93 @@ ] }, { - "Sail": [ - "regular" + "Balthazar": [ + "400" ] }, { - "Tauri": [ - "regular" + "Eater": [ + "400" ] }, { - "Noto Sans Syloti Nagri": [ - "regular" + "Glory": [ + "100", + "200", + "300", + "400", + "500", + "600", + "700", + "800" ] }, { - "Prosto One": [ - "regular" + "Shanti": [ + "400" ] }, { - "Charmonman": [ - "regular", - "700" + "Overlock SC": [ + "400" ] }, { - "Tienne": [ - "regular", - "700", - "900" + "Xanh Mono": [ + "400" ] }, { - "Cormorant Unicase": [ - "300", - "regular", - "500", - "600", - "700" + "Mochiy Pop One": [ + "400" ] }, { "Katibeh": [ - "regular" + "400" ] }, { - "Inria Serif": [ - "300", - "300italic", - "regular", - "italic", - "700", - "700italic" + "Hurricane": [ + "400" ] }, { - "Glory": [ + "Noto Sans Georgian": [ "100", "200", "300", - "regular", + "400", "500", "600", "700", "800", - "100italic", - "200italic", - "300italic", - "italic", - "500italic", - "600italic", - "700italic", - "800italic" - ] - }, - { - "Bigshot One": [ - "regular" + "900" ] }, { - "Noto Serif Ahom": [ - "regular" + "Artifika": [ + "400" ] }, { - "Sarpanch": [ - "regular", + "Anek Telugu": [ + "100", + "200", + "300", + "400", "500", "600", "700", - "800", - "900" + "800" ] }, { - "Alexandria": [ + "Lexend Giga": [ "100", "200", "300", - "regular", + "400", "500", "600", "700", @@ -6874,64 +5828,38 @@ ] }, { - "Almendra": [ - "regular", - "italic", - "700", - "700italic" - ] - }, - { - "Poller One": [ - "regular" + "Port Lligat Sans": [ + "400" ] }, { - "Kotta One": [ - "regular" + "Scope One": [ + "400" ] }, { - "Cherry Swash": [ - "regular", + "Inria Serif": [ + "300", + "400", "700" ] }, - { - "Scope One": [ - "regular" - ] - }, { "Piazzolla": [ "100", "200", "300", - "regular", + "400", "500", "600", "700", "800", - "900", - "100italic", - "200italic", - "300italic", - "italic", - "500italic", - "600italic", - "700italic", - "800italic", - "900italic" - ] - }, - { - "Dynalight": [ - "regular" + "900" ] }, { - "Modak": [ - "regular" + "Sassy Frass": [ + "400" ] }, { @@ -6939,162 +5867,176 @@ "100", "200", "300", - "regular", + "400", "500", "600", "700", "800", - "900", - "100italic", - "200italic", - "300italic", - "italic", - "500italic", - "600italic", - "700italic", - "800italic", - "900italic" + "900" ] }, { - "Azeret Mono": [ - "100", - "200", + "Saira Stencil One": [ + "400" + ] + }, + { + "Loved by the King": [ + "400" + ] + }, + { + "Ephesis": [ + "400" + ] + }, + { + "Cormorant Unicase": [ "300", - "regular", + "400", "500", "600", - "700", - "800", - "900", - "100italic", - "200italic", - "300italic", - "italic", - "500italic", - "600italic", - "700italic", - "800italic", - "900italic" + "700" ] }, { - "Ephesis": [ - "regular" + "Modak": [ + "400" ] }, { - "Libre Barcode 39 Text": [ - "regular" + "Kotta One": [ + "400" ] }, { - "Comforter Brush": [ - "regular" + "Tauri": [ + "400" ] }, { - "Vibur": [ - "regular" + "Charmonman": [ + "400", + "700" ] }, { - "Voces": [ - "regular" + "Lexend Mega": [ + "100", + "200", + "300", + "400", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Sarpanch": [ + "400", + "500", + "600", + "700", + "800", + "900" ] }, { "Solway": [ "300", - "regular", + "400", "500", "700", "800" ] }, { - "Averia Gruesa Libre": [ - "regular" + "League Script": [ + "400" ] }, { - "Andada Pro": [ - "regular", + "Lexend Exa": [ + "100", + "200", + "300", + "400", "500", "600", "700", "800", - "italic", - "500italic", - "600italic", - "700italic", - "800italic" + "900" ] }, { - "Akaya Telivigala": [ - "regular" + "Voces": [ + "400" ] }, { - "Imprima": [ - "regular" + "Bigshot One": [ + "400" ] }, { - "Gaegu": [ + "Chathura": [ + "100", "300", - "regular", - "700" + "400", + "700", + "800" ] }, { - "MedievalSharp": [ - "regular" + "Dynalight": [ + "400" ] }, { - "Sonsie One": [ - "regular" + "Almendra": [ + "400", + "700" ] }, { - "Yeon Sung": [ - "regular" + "Gorditas": [ + "400", + "700" ] }, { - "Sumana": [ - "regular", - "700" + "Prosto One": [ + "400" ] }, { - "Kranky": [ - "regular" + "Germania One": [ + "400" ] }, { - "Gamja Flower": [ - "regular" + "Vibur": [ + "400" ] }, { - "Libre Barcode 128": [ - "regular" + "Libre Barcode 39 Text": [ + "400" ] }, { - "Ranchers": [ - "regular" + "Gamja Flower": [ + "400" ] }, { - "Lexend Exa": [ + "Azeret Mono": [ "100", "200", "300", - "regular", + "400", "500", "600", "700", @@ -7103,483 +6045,381 @@ ] }, { - "Delius Unicase": [ - "regular", - "700" - ] - }, - { - "Frijole": [ - "regular" + "Sonsie One": [ + "400" ] }, { - "Reggae One": [ - "regular" + "Gayathri": [ + "100", + "400", + "700" ] }, { - "Nova Square": [ - "regular" + "Akaya Telivigala": [ + "400" ] }, { - "The Girl Next Door": [ - "regular" + "Sumana": [ + "400", + "700" ] }, { - "Cherry Cream Soda": [ - "regular" + "Gaegu": [ + "300", + "400", + "700" ] }, { - "Bellota": [ - "300", - "300italic", - "regular", - "italic", - "700", - "700italic" + "Shalimar": [ + "400" ] }, { - "Gafata": [ - "regular" + "Yeon Sung": [ + "400" ] }, { - "Prociono": [ - "regular" + "Cherry Swash": [ + "400", + "700" ] }, { - "BIZ UDPMincho": [ - "regular", - "700" + "Imprima": [ + "400" ] }, { - "Montagu Slab": [ - "100", - "200", - "300", - "regular", + "Andada Pro": [ + "400", "500", "600", - "700" + "700", + "800" ] }, { - "Kdam Thmor Pro": [ - "regular" + "Baloo Bhaijaan 2": [ + "400", + "500", + "600", + "700", + "800" ] }, { - "Gayathri": [ - "100", - "regular", + "Delius Unicase": [ + "400", "700" ] }, { - "Gemunu Libre": [ - "200", - "300", - "regular", - "500", - "600", - "700", - "800" + "The Girl Next Door": [ + "400" ] }, { - "Sofia Sans Extra Condensed": [ - "100", - "200", - "300", - "regular", - "500", - "600", - "700", - "800", - "900", - "100italic", - "200italic", - "300italic", - "italic", - "500italic", - "600italic", - "700italic", - "800italic", - "900italic" + "Kranky": [ + "400" ] }, { - "UnifrakturCook": [ - "700" + "Ranchers": [ + "400" ] }, { - "Wire One": [ - "regular" + "Inria Sans": [ + "300", + "400", + "700" ] }, { - "Sevillana": [ - "regular" + "Medula One": [ + "400" ] }, { "Rubik Dirt": [ - "regular" + "400" ] }, { - "Londrina Outline": [ - "regular" + "Libre Barcode 128": [ + "400" ] }, { - "Asar": [ - "regular" + "Ruthie": [ + "400" ] }, { - "Chango": [ - "regular" + "Frijole": [ + "400" ] }, { - "Medula One": [ - "regular" + "Asar": [ + "400" ] }, { - "Spicy Rice": [ - "regular" + "Cherry Cream Soda": [ + "400" ] }, { - "Birthstone": [ - "regular" + "Londrina Outline": [ + "400" ] }, { - "Baloo Bhaina 2": [ - "regular", - "500", - "600", - "700", - "800" + "Gotu": [ + "400" ] }, { - "Sree Krushnadevaraya": [ - "regular" + "Rationale": [ + "400" ] }, { - "Baloo Bhaijaan 2": [ - "regular", - "500", - "600", - "700", - "800" + "MedievalSharp": [ + "400" ] }, { - "Uncial Antiqua": [ - "regular" + "Ranga": [ + "400", + "700" ] }, { - "Port Lligat Slab": [ - "regular" + "UnifrakturCook": [ + "700" ] }, { - "Denk One": [ - "regular" + "Spicy Rice": [ + "400" ] }, { - "Carrois Gothic SC": [ - "regular" + "Sevillana": [ + "400" ] }, { "Corinthia": [ - "regular", + "400", "700" ] }, { - "IM Fell French Canon": [ - "regular", - "italic" + "Sulphur Point": [ + "300", + "400", + "700" ] }, { - "Manuale": [ - "300", - "regular", + "Kaisei Opti": [ + "400", "500", - "600", - "700", - "800", - "300italic", - "italic", - "500italic", - "600italic", - "700italic", - "800italic" + "700" ] }, { - "Strait": [ - "regular" + "Bellota": [ + "300", + "400", + "700" ] }, { - "Londrina Shadow": [ - "regular" + "Gafata": [ + "400" ] }, { - "Puritan": [ - "regular", - "italic", - "700", - "700italic" + "Dekko": [ + "400" ] }, { "Kaisei Tokumin": [ - "regular", + "400", "500", "700", "800" ] }, { - "Rationale": [ - "regular" + "Khmer": [ + "400" ] }, { - "Lexend Mega": [ + "Montagu Slab": [ "100", "200", "300", - "regular", + "400", "500", "600", - "700", - "800", - "900" - ] - }, - { - "Unlock": [ - "regular" - ] - }, - { - "Macondo Swash Caps": [ - "regular" + "700" ] }, { - "Inria Sans": [ - "300", - "300italic", - "regular", - "italic", + "Baloo Bhaina 2": [ + "400", + "500", + "600", "700", - "700italic" + "800" ] }, { - "Sulphur Point": [ - "300", - "regular", - "700" + "Ramaraja": [ + "400" ] }, { "Mina": [ - "regular", + "400", "700" ] }, { - "East Sea Dokdo": [ - "regular" - ] - }, - { - "Lovers Quarrel": [ - "regular" + "Prociono": [ + "400" ] }, { - "Song Myung": [ - "regular" + "Wire One": [ + "400" ] }, { - "Ruthie": [ - "regular" + "Londrina Shadow": [ + "400" ] }, { - "Tiro Kannada": [ - "regular", - "italic" + "Carrois Gothic SC": [ + "400" ] }, { - "Fontdiner Swanky": [ - "regular" + "Sree Krushnadevaraya": [ + "400" ] }, { - "Ramaraja": [ - "regular" + "Chango": [ + "400" ] }, { - "Stylish": [ - "regular" + "Nova Square": [ + "400" ] }, { - "Baloo Tammudu 2": [ - "regular", - "500", - "600", - "700", - "800" + "Ribeye": [ + "400" ] }, { - "Murecho": [ - "100", - "200", - "300", - "regular", - "500", - "600", - "700", - "800", - "900" + "Uncial Antiqua": [ + "400" ] }, { - "Iceland": [ - "regular" + "Lovers Quarrel": [ + "400" ] }, { - "Unkempt": [ - "regular", - "700" + "Port Lligat Slab": [ + "400" ] }, { - "Stoke": [ - "300", - "regular" + "Strait": [ + "400" ] }, { - "Gotu": [ - "regular" + "Buda": [ + "300" ] }, { - "Noto Sans Telugu": [ - "100", + "Gemunu Libre": [ "200", "300", - "regular", + "400", "500", "600", "700", - "800", - "900" + "800" ] }, { - "MuseoModerno": [ - "100", - "200", - "300", - "regular", - "500", - "600", - "700", - "800", - "900", - "100italic", - "200italic", - "300italic", - "italic", - "500italic", - "600italic", - "700italic", - "800italic", - "900italic" + "Iceland": [ + "400" ] }, { - "Kaisei Opti": [ - "regular", - "500", + "Stylish": [ + "400" + ] + }, + { + "BIZ UDPMincho": [ + "400", "700" ] }, { - "Red Hat Mono": [ + "MuseoModerno": [ + "100", + "200", "300", - "regular", + "400", "500", "600", "700", - "300italic", - "italic", - "500italic", - "600italic", - "700italic" + "800", + "900" ] }, { - "Zilla Slab Highlight": [ - "regular", + "Puritan": [ + "400", "700" ] }, { - "Nokora": [ - "100", - "300", - "regular", - "700", - "900" - ] - }, - { - "Farsan": [ - "regular" + "Paprika": [ + "400" ] }, { - "Noto Serif Devanagari": [ + "Noto Sans Telugu": [ "100", "200", "300", - "regular", + "400", "500", "600", "700", @@ -7588,135 +6428,137 @@ ] }, { - "Paprika": [ - "regular" - ] - }, - { - "Khmer": [ - "regular" + "Song Myung": [ + "400" ] }, { - "Habibi": [ - "regular" + "Unkempt": [ + "400", + "700" ] }, { - "Redressed": [ - "regular" + "Farsan": [ + "400" ] }, { - "Shanti": [ - "regular" + "Denk One": [ + "400" ] }, { - "Bayon": [ - "regular" + "Nokora": [ + "100", + "300", + "400", + "700", + "900" ] }, { - "Mystery Quest": [ - "regular" + "East Sea Dokdo": [ + "400" ] }, { - "Kantumruy": [ - "300", - "regular", - "700" + "Bayon": [ + "400" ] }, { - "ZCOOL KuaiLe": [ - "regular" + "Joan": [ + "400" ] }, { - "Sirin Stencil": [ - "regular" + "Habibi": [ + "400" ] }, { - "Scheherazade New": [ - "regular", - "700" + "Rosarivo": [ + "400" ] }, { - "Simonetta": [ - "regular", - "italic", - "900", - "900italic" + "Kdam Thmor Pro": [ + "400" ] }, { - "Ranga": [ - "regular", - "700" + "Manuale": [ + "300", + "400", + "500", + "600", + "700", + "800" ] }, { - "WindSong": [ - "regular", - "500" + "Stoke": [ + "300", + "400" ] }, { - "Trade Winds": [ - "regular" + "Baloo Tammudu 2": [ + "400", + "500", + "600", + "700", + "800" ] }, { - "Akronim": [ - "regular" + "ZCOOL KuaiLe": [ + "400" ] }, { - "Cute Font": [ - "regular" + "Zilla Slab Highlight": [ + "400", + "700" ] }, { - "Potta One": [ - "regular" + "Comforter Brush": [ + "400" ] }, { - "Rosarivo": [ - "regular", - "italic" + "Macondo Swash Caps": [ + "400" ] }, { - "Dekko": [ - "regular" + "Cute Font": [ + "400" ] }, { - "Engagement": [ - "regular" + "Mystery Quest": [ + "400" ] }, { - "Kavoon": [ - "regular" + "Redressed": [ + "400" ] }, { "Miniver": [ - "regular" + "400" ] }, { - "Noto Sans Symbols": [ + "Noto Serif Devanagari": [ "100", "200", "300", - "regular", + "400", "500", "600", "700", @@ -7725,89 +6567,87 @@ ] }, { - "Sancreek": [ - "regular" - ] - }, - { - "Stick": [ - "regular" + "Fontdiner Swanky": [ + "400" ] }, { - "Piedra": [ - "regular" + "Kulim Park": [ + "200", + "300", + "400", + "600", + "700" ] }, { - "Familjen Grotesk": [ - "regular", + "Sofia Sans": [ + "100", + "200", + "300", + "400", "500", "600", "700", - "italic", - "500italic", - "600italic", - "700italic" - ] - }, - { - "Ewert": [ - "regular" + "800", + "900" ] }, { - "Hachi Maru Pop": [ - "regular" + "Tiro Kannada": [ + "400" ] }, { - "Rum Raisin": [ - "regular" + "Nuosu SIL": [ + "400" ] }, { - "Gorditas": [ - "regular", + "Scheherazade New": [ + "400", "700" ] }, { - "Marko One": [ - "regular" + "Rum Raisin": [ + "400" ] }, { - "Sarina": [ - "regular" + "Trade Winds": [ + "400" ] }, { - "Monofett": [ - "regular" + "Familjen Grotesk": [ + "400", + "500", + "600", + "700" ] }, { - "Chicle": [ - "regular" + "IM Fell French Canon": [ + "400" ] }, { - "Orelega One": [ - "regular" + "Piedra": [ + "400" ] }, { - "Stint Ultra Expanded": [ - "regular" + "Akronim": [ + "400" ] }, { - "M PLUS 2": [ + "Noto Sans Symbols": [ "100", "200", "300", - "regular", + "400", "500", "600", "700", @@ -7816,25 +6656,23 @@ ] }, { - "Train One": [ - "regular" + "Unlock": [ + "400" ] }, { - "Sura": [ - "regular", - "700" + "Potta One": [ + "400" ] }, { - "Qwitcher Grypen": [ - "regular", - "700" + "Birthstone": [ + "400" ] }, { - "Coda Caption": [ - "800" + "Stick": [ + "400" ] }, { @@ -7842,415 +6680,398 @@ "100", "200", "300", - "regular", + "400", "500", "600", "700" ] }, { - "Hina Mincho": [ - "regular" + "Hachi Maru Pop": [ + "400" ] }, { - "Kulim Park": [ - "200", - "200italic", - "300", - "300italic", - "regular", - "italic", - "600", - "600italic", - "700", - "700italic" + "Stint Ultra Expanded": [ + "400" + ] + }, + { + "Orelega One": [ + "400" ] }, { "Road Rage": [ - "regular" + "400" ] }, { - "Varta": [ - "300", - "regular", - "500", - "600", - "700" + "Engagement": [ + "400" ] }, { - "Content": [ - "regular", + "WindSong": [ + "400", + "500" + ] + }, + { + "Sahitya": [ + "400", "700" ] }, { - "Margarine": [ - "regular" + "Sura": [ + "400", + "700" ] }, { - "Grape Nuts": [ - "regular" + "Odor Mean Chey": [ + "400" ] }, { - "Angkor": [ - "regular" + "Ewert": [ + "400" ] }, { - "Bigelow Rules": [ - "regular" + "Kantumruy": [ + "300", + "400", + "700" ] }, { - "Fascinate Inline": [ - "regular" + "Iceberg": [ + "400" ] }, { - "Chathura": [ + "Murecho": [ "100", + "200", "300", - "regular", + "400", + "500", + "600", "700", - "800" + "800", + "900" ] }, { - "Moul": [ - "regular" + "Sancreek": [ + "400" ] }, { - "Iceberg": [ - "regular" + "Coda Caption": [ + "800" ] }, { - "Buda": [ - "300" + "Red Hat Mono": [ + "300", + "400", + "500", + "600", + "700" ] }, { - "Libre Barcode 128 Text": [ - "regular" + "M PLUS 2": [ + "100", + "200", + "300", + "400", + "500", + "600", + "700", + "800", + "900" ] }, { - "Ruluko": [ - "regular" + "Chicle": [ + "400" ] }, { - "New Rocker": [ - "regular" + "Milonga": [ + "400" ] }, { - "Bahianita": [ - "regular" + "Hina Mincho": [ + "400" ] }, { - "Barrio": [ - "regular" + "Train One": [ + "400" ] }, { "Red Rose": [ "300", - "regular", + "400", "500", "600", "700" ] }, { - "Milonga": [ - "regular" + "Fascinate Inline": [ + "400" ] }, { - "Kavivanar": [ - "regular" + "Marko One": [ + "400" ] }, { - "Condiment": [ - "regular" + "Rampart One": [ + "400" ] }, { - "Cagliostro": [ - "regular" + "Mochiy Pop P One": [ + "400" ] }, { - "Gowun Batang": [ - "regular", + "Qwitcher Grypen": [ + "400", "700" ] }, { - "Ribeye": [ - "regular" + "Monofett": [ + "400" ] }, { - "IBM Plex Sans Thai Looped": [ - "100", - "200", - "300", - "regular", - "500", - "600", - "700" + "Sirin Stencil": [ + "400" ] }, { - "Spline Sans": [ - "300", - "regular", - "500", - "600", - "700" + "Babylonica": [ + "400" ] }, { - "Gantari": [ + "Sarina": [ + "400" + ] + }, + { + "Noto Serif Malayalam": [ "100", "200", "300", - "regular", + "400", "500", "600", "700", "800", - "900", - "100italic", - "200italic", - "300italic", - "italic", - "500italic", - "600italic", - "700italic", - "800italic", - "900italic" - ] - }, - { - "Molle": [ - "italic" - ] - }, - { - "Stalemate": [ - "regular" - ] - }, - { - "Englebert": [ - "regular" + "900" ] }, { - "Jolly Lodger": [ - "regular" + "Bigelow Rules": [ + "400" ] }, { - "Nova Flat": [ - "regular" + "Kavoon": [ + "400" ] }, { - "Crushed": [ - "regular" + "Moul": [ + "400" ] }, { - "Sofia Sans": [ + "Gantari": [ "100", "200", "300", - "regular", + "400", "500", "600", "700", "800", - "900", - "100italic", - "200italic", - "300italic", - "italic", - "500italic", - "600italic", - "700italic", - "800italic", - "900italic" + "900" ] }, { - "Croissant One": [ - "regular" + "Grape Nuts": [ + "400" ] }, { - "IM Fell Great Primer": [ - "regular", - "italic" + "Arbutus": [ + "400" ] }, { - "Offside": [ - "regular" + "Angkor": [ + "400" ] }, { - "Odor Mean Chey": [ - "regular" + "Condiment": [ + "400" ] }, { "Keania One": [ - "regular" - ] - }, - { - "Donegal One": [ - "regular" + "400" ] }, { - "Noto Sans Myanmar": [ - "100", - "200", + "Spline Sans": [ "300", - "regular", + "400", "500", "600", - "700", - "800", - "900" + "700" ] }, { - "Noto Serif Malayalam": [ - "100", - "200", - "300", - "regular", - "500", - "600", - "700", - "800", + "Simonetta": [ + "400", "900" ] }, { - "Noto Emoji": [ + "Varta": [ "300", - "regular", + "400", "500", "600", "700" ] }, { - "Sahitya": [ - "regular", - "700" - ] - }, - { - "Sassy Frass": [ - "regular" + "Modern Antiqua": [ + "400" ] }, { - "Text Me One": [ - "regular" + "Ruluko": [ + "400" ] }, { - "Meie Script": [ - "regular" + "Cagliostro": [ + "400" ] }, { - "Yaldevi": [ + "Noto Serif Thai": [ + "100", "200", "300", - "regular", + "400", "500", "600", - "700" + "700", + "800", + "900" ] }, { - "Zen Dots": [ - "regular" + "Donegal One": [ + "400" ] }, { - "Tulpen One": [ - "regular" + "Molle": [] + }, + { + "IM Fell Great Primer": [ + "400" ] }, { - "Griffy": [ - "regular" + "Margarine": [ + "400" ] }, { - "Elsie Swash Caps": [ - "regular", - "900" + "Barrio": [ + "400" ] }, { - "Underdog": [ - "regular" + "Kavivanar": [ + "400" ] }, { - "Anek Tamil": [ + "New Rocker": [ + "400" + ] + }, + { + "IBM Plex Sans Thai Looped": [ "100", "200", "300", - "regular", + "400", "500", "600", - "700", - "800" + "700" ] }, { - "Bilbo": [ - "regular" + "Fuzzy Bubbles": [ + "400", + "700" ] }, { - "Junge": [ - "regular" + "Stalemate": [ + "400" ] }, { - "Vampiro One": [ - "regular" + "Gowun Batang": [ + "400", + "700" ] }, { - "Noto Serif Thai": [ + "Content": [ + "400", + "700" + ] + }, + { + "Jolly Lodger": [ + "400" + ] + }, + { + "Tulpen One": [ + "400" + ] + }, + { + "Noto Sans Myanmar": [ "100", "200", "300", - "regular", + "400", "500", "600", "700", @@ -8259,45 +7080,48 @@ ] }, { - "Wellfleet": [ - "regular" + "Offside": [ + "400" ] }, { - "Inika": [ - "regular", - "700" + "Crushed": [ + "400" ] }, { - "Dorsa": [ - "regular" + "Bilbo": [ + "400" ] }, { - "Kumar One": [ - "regular" + "Bahianita": [ + "400" ] }, { - "Modern Antiqua": [ - "regular" + "Nova Flat": [ + "400" + ] + }, + { + "Stalinist One": [ + "400" ] }, { - "Comforter": [ - "regular" + "Square Peg": [ + "400" ] }, { - "Autour One": [ - "regular" + "Underdog": [ + "400" ] }, { - "Srisakdi": [ - "regular", - "700" + "Text Me One": [ + "400" ] }, { @@ -8305,7 +7129,7 @@ "100", "200", "300", - "regular", + "400", "500", "600", "700", @@ -8313,136 +7137,139 @@ ] }, { - "Ravi Prakash": [ - "regular" + "Englebert": [ + "400" ] }, { - "Moon Dance": [ - "regular" + "Griffy": [ + "400" ] }, { - "Jomolhari": [ - "regular" + "Vampiro One": [ + "400" ] }, { - "Fenix": [ - "regular" + "Meie Script": [ + "400" ] }, { "MonteCarlo": [ - "regular" + "400" ] }, { - "Square Peg": [ - "regular" + "Libre Barcode 128 Text": [ + "400" ] }, { - "Radio Canada": [ - "300", - "regular", - "500", - "600", - "700", - "300italic", - "italic", - "500italic", - "600italic", - "700italic" + "Ravi Prakash": [ + "400" ] }, { - "Mochiy Pop P One": [ - "regular" + "Dorsa": [ + "400" ] }, { - "Karantina": [ - "300", - "regular", + "Astloch": [ + "400", "700" ] }, { - "Linden Hill": [ - "regular", - "italic" - ] - }, - { - "Shippori Antique": [ - "regular" + "Elsie Swash Caps": [ + "400", + "900" ] }, { - "Risque": [ - "regular" + "Amiri Quran": [ + "400" ] }, { - "Eagle Lake": [ - "regular" + "Bona Nova": [ + "400", + "700" ] }, { - "Nosifer": [ - "regular" + "Noto Emoji": [ + "300", + "400", + "500", + "600", + "700" ] }, { - "Zhi Mang Xing": [ - "regular" + "Yomogi": [ + "400" ] }, { - "Rampart One": [ - "regular" + "Yaldevi": [ + "200", + "300", + "400", + "500", + "600", + "700" ] }, { - "Felipa": [ - "regular" + "Croissant One": [ + "400" ] }, { - "Fuzzy Bubbles": [ - "regular", - "700" + "Sofia Sans Extra Condensed": [ + "100", + "200", + "300", + "400", + "500", + "600", + "700", + "800", + "900" ] }, { - "Diplomata": [ - "regular" + "Jomolhari": [ + "400" ] }, { - "Solitreo": [ - "regular" + "Wellfleet": [ + "400" ] }, { - "Swanky and Moo Moo": [ - "regular" + "Comforter": [ + "400" ] }, { - "Akaya Kanadaka": [ - "regular" + "Fenix": [ + "400" ] }, { - "Yomogi": [ - "regular" + "Zen Dots": [ + "400" ] }, { - "Abyssinica SIL": [ - "regular" + "Inika": [ + "400", + "700" ] }, { @@ -8450,7 +7277,7 @@ "100", "200", "300", - "regular", + "400", "500", "600", "700", @@ -8459,114 +7286,96 @@ ] }, { - "Arbutus": [ - "regular" + "Moon Dance": [ + "400" ] }, { - "Hanken Grotesk": [ - "100", - "200", - "300", - "regular", - "500", - "600", - "700", - "800", - "900", - "100italic", - "200italic", - "300italic", - "italic", - "500italic", - "600italic", - "700italic", - "800italic", - "900italic" + "Autour One": [ + "400" ] }, { - "Noto Sans Anatolian Hieroglyphs": [ - "regular" + "Eagle Lake": [ + "400" ] }, { - "Kaisei HarunoUmi": [ - "regular", - "500", + "Charis SIL": [ + "400", "700" ] }, { - "Beth Ellen": [ - "regular" + "Kaisei HarunoUmi": [ + "400", + "500", + "700" ] }, { - "Gowun Dodum": [ - "regular" + "Shippori Antique": [ + "400" ] }, { - "Freehand": [ - "regular" + "Srisakdi": [ + "400", + "700" ] }, { - "Libre Barcode 39 Extended": [ - "regular" + "Karantina": [ + "300", + "400", + "700" ] }, { - "Anybody": [ - "100", - "200", + "Radio Canada": [ "300", - "regular", + "400", "500", "600", - "700", - "800", - "900", - "100italic", - "200italic", - "300italic", - "italic", - "500italic", - "600italic", - "700italic", - "800italic", - "900italic" + "700" ] }, { - "Rhodium Libre": [ - "regular" + "Princess Sofia": [ + "400" ] }, { - "Bona Nova": [ - "regular", - "italic", - "700" + "Felipa": [ + "400" ] }, { - "Poor Story": [ - "regular" + "Zhi Mang Xing": [ + "400" ] }, { - "Ribeye Marrow": [ - "regular" + "Nosifer": [ + "400" ] }, { - "Trispace": [ + "Plaster": [ + "400" + ] + }, + { + "Diplomata": [ + "400" + ] + }, + { + "Anek Devanagari": [ "100", "200", "300", - "regular", + "400", "500", "600", "700", @@ -8574,16 +7383,24 @@ ] }, { - "Plaster": [ - "regular" + "Hanken Grotesk": [ + "100", + "200", + "300", + "400", + "500", + "600", + "700", + "800", + "900" ] }, { - "Anek Bangla": [ + "Anek Tamil": [ "100", "200", "300", - "regular", + "400", "500", "600", "700", @@ -8591,138 +7408,163 @@ ] }, { - "Chilanka": [ - "regular" + "Swanky and Moo Moo": [ + "400" ] }, { - "Spirax": [ - "regular" + "Risque": [ + "400" ] }, { - "Mrs Sheppards": [ - "regular" + "Beth Ellen": [ + "400" ] }, { - "Carattere": [ - "regular" + "BIZ UDGothic": [ + "400", + "700" ] }, { - "Passions Conflict": [ - "regular" + "Libre Barcode 39 Extended": [ + "400" ] }, { - "Joti One": [ - "regular" + "Gowun Dodum": [ + "400" ] }, { - "Mohave": [ + "Kumar One": [ + "400" + ] + }, + { + "Akaya Kanadaka": [ + "400" + ] + }, + { + "Linden Hill": [ + "400" + ] + }, + { + "Trispace": [ + "100", + "200", "300", - "regular", + "400", "500", "600", "700", - "300italic", - "italic", - "500italic", - "600italic", - "700italic" + "800" ] }, { - "Licorice": [ - "regular" + "Poor Story": [ + "400" ] }, { - "Noto Sans Symbols 2": [ - "regular" + "Carattere": [ + "400" + ] + }, + { + "Freehand": [ + "400" + ] + }, + { + "Rhodium Libre": [ + "400" ] }, { "BioRhyme Expanded": [ "200", "300", - "regular", + "400", "700", "800" ] }, { - "Princess Sofia": [ - "regular" + "Mrs Sheppards": [ + "400" ] }, { - "Noto Sans Armenian": [ - "100", - "200", - "300", - "regular", - "500", - "600", - "700", - "800", - "900" + "Chilanka": [ + "400" ] }, { - "BIZ UDGothic": [ - "regular", - "700" + "Joti One": [ + "400" ] }, { - "Maiden Orange": [ - "regular" + "Black And White Picture": [ + "400" ] }, { - "Metal Mania": [ - "regular" + "Bahiana": [ + "400" ] }, { - "Romanesco": [ - "regular" + "Abyssinica SIL": [ + "400" ] }, { - "Joan": [ - "regular" + "Ribeye Marrow": [ + "400" ] }, { - "Fascinate": [ - "regular" + "Noto Music": [ + "400" ] }, { - "Stalinist One": [ - "regular" + "Spirax": [ + "400" ] }, { - "Bahiana": [ - "regular" + "Junge": [ + "400" ] }, { - "Black And White Picture": [ - "regular" + "Passions Conflict": [ + "400" ] }, { - "Anek Devanagari": [ + "Romanesco": [ + "400" + ] + }, + { + "Metal Mania": [ + "400" + ] + }, + { + "Anek Bangla": [ "100", "200", "300", - "regular", + "400", "500", "600", "700", @@ -8730,290 +7572,250 @@ ] }, { - "Vujahday Script": [ - "regular" - ] - }, - { - "Peddana": [ - "regular" - ] - }, - { - "Jim Nightshade": [ - "regular" + "Fascinate": [ + "400" ] }, { - "Revalia": [ - "regular" + "Galdeano": [ + "400" ] }, { - "Spline Sans Mono": [ + "Noto Sans Armenian": [ + "100", + "200", "300", - "regular", + "400", "500", "600", "700", - "300italic", - "italic", - "500italic", - "600italic", - "700italic" + "800", + "900" ] }, { - "Sono": [ - "200", + "Mohave": [ "300", - "regular", + "400", "500", "600", - "700", - "800" + "700" ] }, { - "Smokum": [ - "regular" + "Maiden Orange": [ + "400" ] }, { - "Yuji Syuku": [ - "regular" + "Devonshire": [ + "400" ] }, { "Emblema One": [ - "regular" + "400" ] }, { - "Oldenburg": [ - "regular" + "Diplomata SC": [ + "400" ] }, { - "IBM Plex Sans JP": [ - "100", - "200", - "300", - "regular", - "500", - "600", - "700" + "Jim Nightshade": [ + "400" ] }, { - "IM Fell DW Pica SC": [ - "regular" + "Mogra": [ + "400" ] }, { - "Galdeano": [ - "regular" + "Yuji Syuku": [ + "400" ] }, { - "Chela One": [ - "regular" + "Noto Sans Symbols 2": [ + "400" ] }, { - "Mogra": [ - "regular" + "Vujahday Script": [ + "400" ] }, { - "Stick No Bills": [ - "200", + "IM Fell DW Pica SC": [ + "400" + ] + }, + { + "Spline Sans Mono": [ "300", - "regular", + "400", "500", "600", - "700", - "800" + "700" ] }, { - "Caesar Dressing": [ - "regular" + "IBM Plex Sans JP": [ + "100", + "200", + "300", + "400", + "500", + "600", + "700" ] }, { - "Nuosu SIL": [ - "regular" + "Chela One": [ + "400" ] }, { - "Zen Antique Soft": [ - "regular" + "Noto Serif Tamil": [ + "100", + "200", + "300", + "400", + "500", + "600", + "700", + "800", + "900" ] }, { - "Devonshire": [ - "regular" + "Revalia": [ + "400" ] }, { - "Seymour One": [ - "regular" + "Tiro Telugu": [ + "400" ] }, { "Grenze": [ "100", - "100italic", "200", - "200italic", "300", - "300italic", - "regular", - "italic", + "400", "500", - "500italic", "600", - "600italic", "700", - "700italic", "800", - "800italic", - "900", - "900italic" - ] - }, - { - "Babylonica": [ - "regular" - ] - }, - { - "Jacques Francois Shadow": [ - "regular" + "900" ] }, { - "Galindo": [ - "regular" + "Caesar Dressing": [ + "400" ] }, { - "Barriecito": [ - "regular" + "Oldenburg": [ + "400" ] }, { - "Diplomata SC": [ - "regular" + "Lancelot": [ + "400" ] }, { - "Encode Sans SC": [ + "Anek Latin": [ "100", "200", "300", - "regular", + "400", "500", "600", "700", - "800", - "900" - ] - }, - { - "Jacques Francois": [ - "regular" + "800" ] }, { - "Lancelot": [ - "regular" + "Jacques Francois Shadow": [ + "400" ] }, { - "Kirang Haerang": [ - "regular" + "Seymour One": [ + "400" ] }, { - "Lakki Reddy": [ - "regular" + "Birthstone Bounce": [ + "400", + "500" ] }, { - "Almendra SC": [ - "regular" + "Solitreo": [ + "400" ] }, { - "Tiro Gurmukhi": [ - "regular", - "italic" + "Kirang Haerang": [ + "400" ] }, { - "Anek Latin": [ + "Big Shoulders Stencil Text": [ "100", "200", "300", - "regular", + "400", "500", "600", "700", - "800" + "800", + "900" ] }, { - "Noto Sans Tai Viet": [ - "regular" + "Licorice": [ + "400" ] }, { - "New Tegomin": [ - "regular" + "Jacques Francois": [ + "400" ] }, { - "Birthstone Bounce": [ - "regular", - "500" + "Girassol": [ + "400" ] }, { "IM Fell French Canon SC": [ - "regular" - ] - }, - { - "Charis SIL": [ - "regular", - "italic", - "700", - "700italic" - ] - }, - { - "Smythe": [ - "regular" + "400" ] }, { - "Girassol": [ - "regular" + "Smokum": [ + "400" ] }, { - "Atomic Age": [ - "regular" + "Tiro Gurmukhi": [ + "400" ] }, { - "Big Shoulders Stencil Text": [ + "Encode Sans SC": [ "100", "200", "300", - "regular", + "400", "500", "600", "700", @@ -9022,164 +7824,159 @@ ] }, { - "Grechen Fuemen": [ - "regular" - ] - }, - { - "Siemreap": [ - "regular" - ] - }, - { - "Beau Rivage": [ - "regular" - ] - }, - { - "Snippet": [ - "regular" - ] - }, - { - "Glass Antiqua": [ - "regular" + "Lakki Reddy": [ + "400" ] }, { - "Liu Jian Mao Cao": [ - "regular" + "Peddana": [ + "400" ] }, { - "Arima": [ - "100", + "Stick No Bills": [ "200", "300", - "regular", + "400", "500", "600", - "700" + "700", + "800" ] }, { - "Metal": [ - "regular" + "Barriecito": [ + "400" ] }, { - "Dangrek": [ - "regular" + "Noto Sans Tai Viet": [ + "400" ] }, { - "Flow Circular": [ - "regular" + "Zen Antique Soft": [ + "400" ] }, { - "IM Fell Great Primer SC": [ - "regular" + "New Tegomin": [ + "400" ] }, { - "Qahiri": [ - "regular" + "Almendra SC": [ + "400" ] }, { - "Flavors": [ - "regular" + "Liu Jian Mao Cao": [ + "400" ] }, { - "Texturina": [ + "Noto Serif Kannada": [ "100", "200", "300", - "regular", + "400", "500", "600", "700", "800", - "900", - "100italic", - "200italic", - "300italic", - "italic", - "500italic", - "600italic", - "700italic", - "800italic", - "900italic" + "900" ] }, { - "Bungee Outline": [ - "regular" + "Anybody": [ + "100", + "200", + "300", + "400", + "500", + "600", + "700", + "800", + "900" ] }, { - "Bungee Hairline": [ - "regular" + "Glass Antiqua": [ + "400" ] }, { - "Dr Sugiyama": [ - "regular" + "Galindo": [ + "400" ] }, { - "Tiro Bangla": [ - "regular", - "italic" + "Noto Sans Anatolian Hieroglyphs": [ + "400" ] }, { "Long Cang": [ - "regular" + "400" ] }, { - "Gentium Book Plus": [ - "regular", - "italic", - "700", - "700italic" + "Siemreap": [ + "400" ] }, { - "BIZ UDMincho": [ - "regular", + "IM Fell Great Primer SC": [ + "400" + ] + }, + { + "Gentium Book Plus": [ + "400", "700" ] }, { - "Benne": [ - "regular" + "Atomic Age": [ + "400" ] }, { - "Fuggles": [ - "regular" + "Snippet": [ + "400" ] }, { - "Noto Music": [ - "regular" + "Qahiri": [ + "400" + ] + }, + { + "Tiro Bangla": [ + "400" ] }, { "Butterfly Kids": [ - "regular" + "400" ] }, { - "Imbue": [ + "Dr Sugiyama": [ + "400" + ] + }, + { + "Flavors": [ + "400" + ] + }, + { + "Noto Sans Khmer": [ "100", "200", "300", - "regular", + "400", "500", "600", "700", @@ -9188,27 +7985,21 @@ ] }, { - "Alumni Sans Inline One": [ - "regular", - "italic" - ] - }, - { - "Smooch": [ - "regular" + "Bungee Outline": [ + "400" ] }, { - "Sedgwick Ave Display": [ - "regular" + "Smythe": [ + "400" ] }, { - "Noto Sans Gujarati": [ + "Gluten": [ "100", "200", "300", - "regular", + "400", "500", "600", "700", @@ -9218,91 +8009,91 @@ }, { "Gupter": [ - "regular", + "400", "500", "700" ] }, { - "Noto Serif Armenian": [ - "100", - "200", - "300", - "regular", - "500", - "600", - "700", - "800", - "900" + "Dangrek": [ + "400" ] }, { - "Asset": [ - "regular" + "Metal": [ + "400" ] }, { - "Festive": [ - "regular" + "Bungee Hairline": [ + "400" ] }, { - "Nova Slim": [ - "regular" + "Beau Rivage": [ + "400" ] }, { - "Almendra Display": [ - "regular" + "Fuggles": [ + "400" ] }, { - "Gidugu": [ - "regular" + "BIZ UDMincho": [ + "400", + "700" ] }, { - "Chivo Mono": [ + "Sofia Sans Semi Condensed": [ "100", "200", "300", - "regular", + "400", "500", "600", "700", "800", - "900", - "100italic", - "200italic", - "300italic", - "italic", - "500italic", - "600italic", - "700italic", - "800italic", - "900italic" + "900" + ] + }, + { + "Benne": [ + "400" + ] + }, + { + "Miss Fajardose": [ + "400" + ] + }, + { + "Smooch": [ + "400" + ] + }, + { + "Asset": [ + "400" + ] + }, + { + "Almendra Display": [ + "400" ] }, { - "Sofia Sans Semi Condensed": [ + "Texturina": [ "100", "200", "300", - "regular", + "400", "500", "600", "700", "800", - "900", - "100italic", - "200italic", - "300italic", - "italic", - "500italic", - "600italic", - "700italic", - "800italic", - "900italic" + "900" ] }, { @@ -9310,121 +8101,99 @@ "100", "200", "300", - "regular", + "400", "500", "600", "700" ] }, { - "Mr Bedfort": [ - "regular" - ] - }, - { - "Erica One": [ - "regular" + "Ruge Boogie": [ + "400" ] }, { - "Gluten": [ - "100", - "200", - "300", - "regular", - "500", - "600", - "700", - "800", - "900" + "Nova Slim": [ + "400" ] }, { - "Noto Sans Khmer": [ + "Arima": [ "100", "200", "300", - "regular", + "400", "500", "600", - "700", - "800", - "900" + "700" ] }, { - "The Nautigal": [ - "regular", - "700" + "Flow Circular": [ + "400" ] }, { - "Miss Fajardose": [ - "regular" + "Sedgwick Ave Display": [ + "400" ] }, { - "Kumar One Outline": [ - "regular" + "Festive": [ + "400" ] }, { - "Fragment Mono": [ - "regular", - "italic" + "Gidugu": [ + "400" ] }, { - "Waterfall": [ - "regular" + "Erica One": [ + "400" ] }, { - "Lavishly Yours": [ - "regular" + "Alkalami": [ + "400" ] }, { - "Bokor": [ - "regular" + "Fragment Mono": [ + "400" ] }, { - "Suwannaphum": [ - "100", - "300", - "regular", - "700", - "900" + "Mr Bedfort": [ + "400" ] }, { "Hanalei": [ - "regular" + "400" ] }, { - "Zen Tokyo Zoo": [ - "regular" + "Whisper": [ + "400" ] }, { - "Tiro Devanagari Sanskrit": [ - "regular", - "italic" + "Waterfall": [ + "400" ] }, { - "Whisper": [ - "regular" + "Kumar One Outline": [ + "400" ] }, { - "Noto Sans Oriya": [ + "Noto Serif Armenian": [ "100", "200", "300", - "regular", + "400", "500", "600", "700", @@ -9433,26 +8202,36 @@ ] }, { - "Praise": [ - "regular" + "Suwannaphum": [ + "100", + "300", + "400", + "700", + "900" ] }, { - "Water Brush": [ - "regular" + "Zen Tokyo Zoo": [ + "400" ] }, { - "Shippori Antique B1": [ - "regular" + "The Nautigal": [ + "400", + "700" ] }, { - "Noto Serif Kannada": [ + "Noto Sans Hanunoo": [ + "400" + ] + }, + { + "Imbue": [ "100", "200", "300", - "regular", + "400", "500", "600", "700", @@ -9461,99 +8240,85 @@ ] }, { - "Bonbon": [ - "regular" - ] - }, - { - "Passero One": [ - "regular" + "Water Brush": [ + "400" ] }, { - "Astloch": [ - "regular", - "700" + "Bokor": [ + "400" ] }, { - "Finlandica": [ - "regular", + "Noto Sans Oriya": [ + "100", + "200", + "300", + "400", "500", "600", "700", - "italic", - "500italic", - "600italic", - "700italic" - ] - }, - { - "Vibes": [ - "regular" + "800", + "900" ] }, { "Noto Sans Math": [ - "regular" + "400" ] }, { - "Trochut": [ - "regular", - "italic", - "700" + "Smooch Sans": [ + "100", + "200", + "300", + "400", + "500", + "600", + "700", + "800", + "900" ] }, { "Noto Sans Gothic": [ - "regular" - ] - }, - { - "Alkalami": [ - "regular" - ] - }, - { - "Suravaram": [ - "regular" + "400" ] }, { - "Rubik Bubbles": [ - "regular" + "Meow Script": [ + "400" ] }, { - "Meow Script": [ - "regular" + "GFS Neohellenic": [ + "400", + "700" ] }, { - "Gwendolyn": [ - "regular", - "700" + "Shippori Antique B1": [ + "400" ] }, { - "Combo": [ - "regular" + "Nabla": [ + "400" ] }, { - "Ruge Boogie": [ - "regular" + "Preahvihear": [ + "400" ] }, { - "Purple Purse": [ - "regular" + "Passero One": [ + "400" ] }, { - "Noto Sans Hanunoo": [ - "regular" + "Lavishly Yours": [ + "400" ] }, { @@ -9561,7 +8326,7 @@ "100", "200", "300", - "regular", + "400", "500", "600", "700", @@ -9570,32 +8335,27 @@ ] }, { - "Preahvihear": [ - "regular" - ] - }, - { - "GFS Neohellenic": [ - "regular", - "italic", - "700", - "700italic" - ] - }, - { - "Noto Sans Adlam Unjoined": [ - "regular", + "Kantumruy Pro": [ + "100", + "200", + "300", + "400", "500", "600", "700" ] }, { - "Big Shoulders Stencil Display": [ + "Suravaram": [ + "400" + ] + }, + { + "Noto Sans Gujarati": [ "100", "200", "300", - "regular", + "400", "500", "600", "700", @@ -9604,57 +8364,45 @@ ] }, { - "Noto Serif Tamil": [ - "100", - "200", - "300", - "regular", - "500", - "600", - "700", - "800", - "900", - "100italic", - "200italic", - "300italic", - "italic", - "500italic", - "600italic", - "700italic", - "800italic", - "900italic" + "Sofadi One": [ + "400" ] }, { "DynaPuff": [ - "regular", + "400", "500", "600", "700" ] }, { - "Chenla": [ - "regular" + "Rubik Bubbles": [ + "400" ] }, { - "Neonderthaw": [ - "regular" + "Alumni Sans Inline One": [ + "400" ] }, { - "Fruktur": [ - "regular", - "italic" + "Vibes": [ + "400" ] }, { - "Noto Sans Ethiopic": [ + "Trochut": [ + "400", + "700" + ] + }, + { + "Big Shoulders Stencil Display": [ "100", "200", "300", - "regular", + "400", "500", "600", "700", @@ -9663,182 +8411,200 @@ ] }, { - "Butcherman": [ - "regular" + "Londrina Sketch": [ + "400" ] }, { - "Kantumruy Pro": [ - "100", - "200", - "300", - "regular", - "500", - "600", - "700", - "100italic", - "200italic", - "300italic", - "italic", - "500italic", - "600italic", - "700italic" + "Combo": [ + "400" ] }, { - "Sofadi One": [ - "regular" + "Chenla": [ + "400" ] }, { - "Mea Culpa": [ - "regular" + "Fruktur": [ + "400" ] }, { - "Taprom": [ - "regular" + "Bonheur Royale": [ + "400" ] }, { - "Bonheur Royale": [ - "regular" + "Miltonian": [ + "400" ] }, { - "Londrina Sketch": [ - "regular" + "Praise": [ + "400" ] }, { - "Snowburst One": [ - "regular" + "Purple Purse": [ + "400" ] }, { - "Hubballi": [ - "regular" + "Noto Serif Georgian": [ + "100", + "200", + "300", + "400", + "500", + "600", + "700", + "800", + "900" ] }, { - "Miltonian": [ - "regular" + "Noto Sans Ethiopic": [ + "100", + "200", + "300", + "400", + "500", + "600", + "700", + "800", + "900" ] }, { - "Sunshiney": [ - "regular" + "Snowburst One": [ + "400" ] }, { - "Federant": [ - "regular" + "Sono": [ + "200", + "300", + "400", + "500", + "600", + "700", + "800" ] }, { - "Nabla": [ - "regular" + "Butcherman": [ + "400" + ] + }, + { + "Chivo Mono": [ + "100", + "200", + "300", + "400", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Federant": [ + "400" ] }, { "Rubik Glitch": [ - "regular" + "400" ] }, { - "IM Fell Double Pica SC": [ - "regular" + "Mea Culpa": [ + "400" ] }, { - "Noto Sans Limbu": [ - "regular" + "Tiro Devanagari Sanskrit": [ + "400" ] }, { - "Smooch Sans": [ - "100", - "200", - "300", - "regular", - "500", - "600", - "700", - "800", - "900" + "Taprom": [ + "400" + ] + }, + { + "Hubballi": [ + "400" ] }, { - "Nova Script": [ - "regular" + "Finlandica": [ + "400", + "500", + "600", + "700" ] }, { - "Langar": [ - "regular" + "Sunshiney": [ + "400" ] }, { - "Luxurious Script": [ - "regular" + "Lacquer": [ + "400" ] }, { - "Moulpali": [ - "regular" + "Bonbon": [ + "400" ] }, { - "Tiro Devanagari Marathi": [ - "regular", - "italic" + "Luxurious Script": [ + "400" ] }, { - "Aubrey": [ - "regular" + "Gentium Plus": [ + "400", + "700" ] }, { - "Lacquer": [ - "regular" + "Langar": [ + "400" ] }, { - "Tiro Tamil": [ - "regular", - "italic" + "IM Fell Double Pica SC": [ + "400" ] }, { "Noto Sans Samaritan": [ - "regular" + "400" ] }, { - "Lexend Peta": [ - "100", - "200", - "300", - "regular", - "500", - "600", - "700", - "800", - "900" + "Nova Script": [ + "400" ] }, { - "Ballet": [ - "regular" + "Neonderthaw": [ + "400" ] }, { - "Noto Sans Gurmukhi": [ + "Lexend Peta": [ "100", "200", "300", - "regular", + "400", "500", "600", "700", @@ -9847,26 +8613,23 @@ ] }, { - "Gentium Plus": [ - "regular", - "italic", - "700", - "700italic" + "Aubrey": [ + "400" ] }, { - "Nova Cut": [ - "regular" + "Noto Sans Limbu": [ + "400" ] }, { - "Libre Barcode EAN13 Text": [ - "regular" + "Nova Cut": [ + "400" ] }, { - "Fasthand": [ - "regular" + "Ballet": [ + "400" ] }, { @@ -9874,7 +8637,7 @@ "100", "200", "300", - "regular", + "400", "500", "600", "700", @@ -9883,11 +8646,17 @@ ] }, { - "Noto Serif Gujarati": [ + "Gwendolyn": [ + "400", + "700" + ] + }, + { + "Noto Sans Gurmukhi": [ "100", "200", "300", - "regular", + "400", "500", "600", "700", @@ -9896,56 +8665,55 @@ ] }, { - "Gideon Roman": [ - "regular" + "Anek Gurmukhi": [ + "100", + "200", + "300", + "400", + "500", + "600", + "700", + "800" ] }, { - "Caramel": [ - "regular" + "Moulpali": [ + "400" ] }, { - "Gulzar": [ - "regular" + "Rubik Beastly": [ + "400" ] }, { - "Big Shoulders Inline Display": [ - "100", - "200", - "300", - "regular", - "500", - "600", - "700", - "800", - "900" + "Inspiration": [ + "400" ] }, { - "Anek Gurmukhi": [ + "Tai Heritage Pro": [ + "400", + "700" + ] + }, + { + "IBM Plex Sans Hebrew": [ "100", "200", "300", - "regular", + "400", "500", "600", - "700", - "800" - ] - }, - { - "Dhurjati": [ - "regular" + "700" ] }, { - "Noto Serif Georgian": [ + "Sofia Sans Condensed": [ "100", "200", "300", - "regular", + "400", "500", "600", "700", @@ -9954,63 +8722,78 @@ ] }, { - "IBM Plex Sans Hebrew": [ + "Noto Serif Khmer": [ "100", "200", "300", - "regular", + "400", "500", "600", - "700" + "700", + "800", + "900" ] }, { - "Rubik Vinyl": [ - "regular" + "Geostar Fill": [ + "400" ] }, { - "Inspiration": [ - "regular" + "Geostar": [ + "400" ] }, { - "Fleur De Leah": [ - "regular" + "Rubik Vinyl": [ + "400" ] }, { - "Explora": [ - "regular" + "Fasthand": [ + "400" ] }, { - "Koh Santepheap": [ + "Noto Sans Thai Looped": [ "100", + "200", "300", - "regular", + "400", + "500", + "600", "700", + "800", "900" ] }, { - "Rubik Beastly": [ - "regular" + "Tiro Devanagari Marathi": [ + "400" ] }, { - "Geostar": [ - "regular" + "Rubik Distressed": [ + "400" ] }, { - "Nova Oval": [ - "regular" + "Dhurjati": [ + "400" ] }, { - "Geostar Fill": [ - "regular" + "Koh Santepheap": [ + "100", + "300", + "400", + "700", + "900" + ] + }, + { + "Grechen Fuemen": [ + "400" ] }, { @@ -10018,7 +8801,7 @@ "100", "200", "300", - "regular", + "400", "500", "600", "700", @@ -10027,77 +8810,74 @@ ] }, { - "Imperial Script": [ - "regular" + "Fleur De Leah": [ + "400" ] }, { - "Rubik Puddles": [ - "regular" + "Nova Oval": [ + "400" ] }, { - "Edu TAS Beginner": [ - "regular", - "500", - "600", - "700" + "Caramel": [ + "400" ] }, { - "Syne Tactile": [ - "regular" + "Imperial Script": [ + "400" ] }, { "Single Day": [ - "regular" + "400" ] }, { - "Sofia Sans Condensed": [ - "100", - "200", - "300", - "regular", - "500", - "600", - "700", - "800", - "900", - "100italic", - "200italic", - "300italic", - "italic", - "500italic", - "600italic", - "700italic", - "800italic", - "900italic" + "Rubik Puddles": [ + "400" + ] + }, + { + "Gideon Roman": [ + "400" ] }, { "Miltonian Tattoo": [ - "regular" + "400" ] }, { - "Tai Heritage Pro": [ - "regular", + "Tiro Tamil": [ + "400" + ] + }, + { + "Kenia": [ + "400" + ] + }, + { + "Noto Sans Javanese": [ + "400", + "500", + "600", "700" ] }, { - "Rubik Distressed": [ - "regular" + "Uchen": [ + "400" ] }, { - "Noto Serif Khmer": [ + "Big Shoulders Inline Display": [ "100", "200", "300", - "regular", + "400", "500", "600", "700", @@ -10106,11 +8886,16 @@ ] }, { - "Noto Sans Lao": [ + "Syne Tactile": [ + "400" + ] + }, + { + "Noto Serif Gujarati": [ "100", "200", "300", - "regular", + "400", "500", "600", "700", @@ -10119,34 +8904,24 @@ ] }, { - "Kenia": [ - "regular" - ] - }, - { - "Petemoss": [ - "regular" - ] - }, - { - "Noto Sans Javanese": [ - "regular", + "Edu TAS Beginner": [ + "400", "500", "600", "700" ] }, { - "Updock": [ - "regular" + "Gulzar": [ + "400" ] }, { - "Noto Sans Thai Looped": [ + "Tourney": [ "100", "200", "300", - "regular", + "400", "500", "600", "700", @@ -10155,120 +8930,88 @@ ] }, { - "Aref Ruqaa Ink": [ - "regular", - "700" - ] - }, - { - "Love Light": [ - "regular" - ] - }, - { - "Edu VIC WA NT Beginner": [ - "regular", - "500", - "600", - "700" + "Tapestry": [ + "400" ] }, { "Noto Sans Coptic": [ - "regular" + "400" ] }, { - "Marhey": [ + "Noto Sans Lao": [ + "100", + "200", "300", - "regular", + "400", "500", "600", - "700" + "700", + "800", + "900" ] }, { - "Rubik 80s Fade": [ - "regular" + "Love Light": [ + "400" ] }, { - "Blaka Hollow": [ - "regular" + "Rubik 80s Fade": [ + "400" ] }, { "Island Moments": [ - "regular" - ] - }, - { - "Uchen": [ - "regular" - ] - }, - { - "Splash": [ - "regular" + "400" ] }, { - "Tourney": [ - "100", - "200", + "Marhey": [ "300", - "regular", + "400", "500", "600", - "700", - "800", - "900", - "100italic", - "200italic", - "300italic", - "italic", - "500italic", - "600italic", - "700italic", - "800italic", - "900italic" + "700" ] }, { - "Rubik Spray Paint": [ - "regular" + "Updock": [ + "400" ] }, { - "Anek Kannada": [ - "100", - "200", - "300", - "regular", + "Petemoss": [ + "400" + ] + }, + { + "Edu VIC WA NT Beginner": [ + "400", "500", "600", - "700", - "800" + "700" ] }, { - "Yuji Boku": [ - "regular" + "Blaka Hollow": [ + "400" ] }, { - "Rubik Microbe": [ - "regular" + "Rubik Spray Paint": [ + "400" ] }, { - "Luxurious Roman": [ - "regular" + "Explora": [ + "400" ] }, { - "Amiri Quran": [ - "regular" + "Yuji Boku": [ + "400" ] }, { @@ -10276,24 +9019,18 @@ "100", "200", "300", - "regular", + "400", "500", "600", - "700", - "800" - ] - }, - { - "Warnes": [ - "regular" + "700", + "800" ] }, { - "Noto Serif Hebrew": [ - "100", + "Noto Serif HK": [ "200", "300", - "regular", + "400", "500", "600", "700", @@ -10302,63 +9039,66 @@ ] }, { - "Send Flowers": [ - "regular" - ] - }, - { - "Genos": [ + "Anek Kannada": [ "100", "200", "300", - "regular", + "400", "500", "600", "700", - "800", - "900", - "100italic", - "200italic", - "300italic", - "italic", - "500italic", - "600italic", - "700italic", - "800italic", - "900italic" + "800" ] }, { - "Tapestry": [ - "regular" + "Splash": [ + "400" ] }, { - "Edu NSW ACT Foundation": [ - "regular", - "500", - "600", - "700" + "Send Flowers": [ + "400" ] }, { - "Are You Serious": [ - "regular" + "Rubik Microbe": [ + "400" ] }, { - "Oi": [ - "regular" + "Warnes": [ + "400" ] }, { - "Noto Sans Tai Le": [ - "regular" + "Noto Sans Adlam": [ + "400", + "500", + "600", + "700" ] }, { "Rubik Wet Paint": [ - "regular" + "400" + ] + }, + { + "Libre Barcode EAN13 Text": [ + "400" + ] + }, + { + "Genos": [ + "100", + "200", + "300", + "400", + "500", + "600", + "700", + "800", + "900" ] }, { @@ -10366,7 +9106,7 @@ "100", "200", "300", - "regular", + "400", "500", "600", "700", @@ -10375,26 +9115,26 @@ ] }, { - "Rubik Gemstones": [ - "regular" + "Luxurious Roman": [ + "400" ] }, { "Alumni Sans Pinstripe": [ - "regular", - "italic" + "400" ] }, { - "Blaka": [ - "regular" + "Noto Sans Tagbanwa": [ + "400" ] }, { - "Noto Serif HK": [ + "Noto Serif Hebrew": [ + "100", "200", "300", - "regular", + "400", "500", "600", "700", @@ -10403,43 +9143,52 @@ ] }, { - "Noto Sans Adlam": [ - "regular", - "500", - "600", - "700" + "Rubik Gemstones": [ + "400" ] }, { - "Zen Loop": [ - "regular", - "italic" + "Padyakke Expanded One": [ + "400" ] }, { - "Noto Sans Old South Arabian": [ - "regular" + "Edu NSW ACT Foundation": [ + "400", + "500", + "600", + "700" ] }, { - "Kolker Brush": [ - "regular" + "Are You Serious": [ + "400" ] }, { - "Edu QLD Beginner": [ - "regular", + "Noto Sans Tai Le": [ + "400" + ] + }, + { + "Noto Sans Adlam Unjoined": [ + "400", "500", "600", "700" ] }, + { + "Oi": [ + "400" + ] + }, { "Anek Odia": [ "100", "200", "300", - "regular", + "400", "500", "600", "700", @@ -10447,26 +9196,24 @@ ] }, { - "Rubik Storm": [ - "regular" - ] - }, - { - "Yuji Mai": [ - "regular" + "Blaka": [ + "400" ] }, { - "Padyakke Expanded One": [ - "regular" + "Edu QLD Beginner": [ + "400", + "500", + "600", + "700" ] }, { - "Noto Serif Telugu": [ + "Noto Sans Thaana": [ "100", "200", "300", - "regular", + "400", "500", "600", "700", @@ -10475,84 +9222,92 @@ ] }, { - "Cairo Play": [ - "200", - "300", - "regular", - "500", - "600", - "700", - "800", - "900" + "Rubik Storm": [ + "400" ] }, { - "Kings": [ - "regular" + "Kolker Brush": [ + "400" ] }, { - "Noto Sans Carian": [ - "regular" + "Noto Sans Old South Arabian": [ + "400" ] }, { - "Tiro Telugu": [ - "regular", - "italic" + "Ole": [ + "400" ] }, { - "Rubik Marker Hatch": [ - "regular" + "Zen Loop": [ + "400" ] }, { - "Noto Sans Egyptian Hieroglyphs": [ - "regular" + "Rubik Marker Hatch": [ + "400" ] }, { - "Noto Serif Toto": [ - "regular", + "Cairo Play": [ + "200", + "300", + "400", "500", "600", - "700" + "700", + "800", + "900" ] }, { - "Ole": [ - "regular" + "Kings": [ + "400" ] }, { - "Noto Sans Tifinagh": [ - "regular" + "My Soul": [ + "400" + ] + }, + { + "Noto Serif Telugu": [ + "100", + "200", + "300", + "400", + "500", + "600", + "700", + "800", + "900" ] }, { "Reem Kufi Fun": [ - "regular", + "400", "500", "600", "700" ] }, { - "My Soul": [ - "regular" + "Aref Ruqaa Ink": [ + "400", + "700" ] }, { - "Bungee Spice": [ - "regular" + "Flow Block": [ + "400" ] }, { - "Redacted Script": [ - "300", - "regular", - "700" + "Bungee Spice": [ + "400" ] }, { @@ -10560,39 +9315,37 @@ "100", "200", "300", - "regular", + "400", "500", "600", "700" ] }, { - "Noto Sans Old Turkic": [ - "regular" + "Noto Sans Egyptian Hieroglyphs": [ + "400" ] }, { - "Edu SA Beginner": [ - "regular", - "500", - "600", - "700" + "Moo Lah Lah": [ + "400" ] }, { - "Moo Lah Lah": [ - "regular" + "Noto Sans Tamil Supplement": [ + "400" ] }, { - "Cherish": [ - "regular" + "Redacted Script": [ + "300", + "400", + "700" ] }, { - "Alumni Sans Collegiate One": [ - "regular", - "italic" + "Yuji Mai": [ + "400" ] }, { @@ -10600,7 +9353,7 @@ "100", "200", "300", - "regular", + "400", "500", "600", "700", @@ -10609,26 +9362,34 @@ ] }, { - "Estonia": [ - "regular" + "Edu SA Beginner": [ + "400", + "500", + "600", + "700" ] }, { - "Puppies Play": [ - "regular" + "Noto Sans Tifinagh": [ + "400" ] }, { - "Noto Sans Tamil Supplement": [ - "regular" + "Alumni Sans Collegiate One": [ + "400" ] }, { - "Noto Serif Ethiopic": [ + "Cherish": [ + "400" + ] + }, + { + "Noto Sans Cherokee": [ "100", "200", "300", - "regular", + "400", "500", "600", "700", @@ -10637,29 +9398,24 @@ ] }, { - "Noto Sans Tagbanwa": [ - "regular" + "Noto Serif Toto": [ + "400", + "500", + "600", + "700" ] }, { - "Noto Serif Lao": [ - "100", - "200", - "300", - "regular", - "500", - "600", - "700", - "800", - "900" + "Estonia": [ + "400" ] }, { - "Noto Sans Thaana": [ + "Noto Serif Ethiopic": [ "100", "200", "300", - "regular", + "400", "500", "600", "700", @@ -10668,41 +9424,38 @@ ] }, { - "Noto Sans Cherokee": [ - "100", - "200", - "300", - "regular", - "500", - "600", - "700", - "800", - "900" + "Noto Sans Mongolian": [ + "400" ] }, { - "Grey Qo": [ - "regular" + "Puppies Play": [ + "400" ] }, { - "Rubik Iso": [ - "regular" + "Noto Sans Carian": [ + "400" + ] + }, + { + "Mingzat": [ + "400" ] }, { "Reem Kufi Ink": [ - "regular" + "400" ] }, { - "Noto Sans Deseret": [ - "regular" + "Grey Qo": [ + "400" ] }, { - "Mingzat": [ - "regular" + "Rubik Burned": [ + "400" ] }, { @@ -10710,7 +9463,7 @@ "100", "200", "300", - "regular", + "400", "500", "600", "700", @@ -10718,12 +9471,17 @@ "900" ] }, + { + "Noto Sans Deseret": [ + "400" + ] + }, { "Noto Sans Canadian Aboriginal": [ "100", "200", "300", - "regular", + "400", "500", "600", "700", @@ -10732,39 +9490,8 @@ ] }, { - "Noto Sans Tangsa": [ - "regular", - "500", - "600", - "700" - ] - }, - { - "Redacted": [ - "regular" - ] - }, - { - "Twinkle Star": [ - "regular" - ] - }, - { - "Noto Sans Gunjala Gondi": [ - "regular" - ] - }, - { - "Noto Sans Sora Sompeng": [ - "regular", - "500", - "600", - "700" - ] - }, - { - "Rubik Maze": [ - "regular" + "Rubik Iso": [ + "400" ] }, { @@ -10772,7 +9499,7 @@ "100", "200", "300", - "regular", + "400", "500", "600", "700", @@ -10781,16 +9508,21 @@ ] }, { - "Flow Block": [ - "regular" + "Redacted": [ + "400" ] }, { - "Noto Serif Myanmar": [ + "Twinkle Star": [ + "400" + ] + }, + { + "Noto Serif Lao": [ "100", "200", "300", - "regular", + "400", "500", "600", "700", @@ -10798,9 +9530,22 @@ "900" ] }, + { + "Noto Sans Tangsa": [ + "400", + "500", + "600", + "700" + ] + }, + { + "Noto Sans Old Italic": [ + "400" + ] + }, { "Noto Sans SignWriting": [ - "regular" + "400" ] }, { @@ -10808,7 +9553,7 @@ "100", "200", "300", - "regular", + "400", "500", "600", "700", @@ -10818,121 +9563,133 @@ }, { "Noto Sans Bamum": [ - "regular", + "400", "500", "600", "700" ] }, { - "Rubik Burned": [ - "regular" + "Noto Sans Sora Sompeng": [ + "400", + "500", + "600", + "700" ] }, { - "Noto Sans Old Italic": [ - "regular" + "Rubik Maze": [ + "400" + ] + }, + { + "Noto Sans Vai": [ + "400" ] }, { "Noto Sans Buginese": [ - "regular" + "400" ] }, { "Ingrid Darling": [ - "regular" + "400" ] }, { - "Noto Sans Vai": [ - "regular" + "Noto Serif Myanmar": [ + "100", + "200", + "300", + "400", + "500", + "600", + "700", + "800", + "900" ] }, { - "Flow Rounded": [ - "regular" + "Noto Serif Gurmukhi": [ + "100", + "200", + "300", + "400", + "500", + "600", + "700", + "800", + "900" ] }, { - "Noto Sans Ugaritic": [ - "regular" + "Blaka Ink": [ + "400" ] }, { - "Noto Sans Old Hungarian": [ - "regular" + "Noto Sans Yi": [ + "400" ] }, { - "Blaka Ink": [ - "regular" + "Flow Rounded": [ + "400" ] }, { - "Noto Serif Tangut": [ - "regular" + "Noto Sans Old Hungarian": [ + "400" ] }, { "Noto Serif Oriya": [ - "regular", + "400", "500", "600", "700" ] }, - { - "Noto Sans Osage": [ - "regular" - ] - }, - { - "Noto Sans Imperial Aramaic": [ - "regular" - ] - }, { "Noto Sans Tagalog": [ - "regular" - ] - }, - { - "Noto Sans Cuneiform": [ - "regular" + "400" ] }, { - "Noto Sans Yi": [ - "regular" + "Noto Sans Ugaritic": [ + "400" ] }, { - "Noto Sans Old Persian": [ - "regular" + "Noto Sans Imperial Aramaic": [ + "400" ] }, { - "Noto Sans Mongolian": [ - "regular" + "Noto Sans Osage": [ + "400" ] }, { - "Noto Traditional Nushu": [ - "regular" + "Noto Sans Medefaidrin": [ + "400", + "500", + "600", + "700" ] }, { "Noto Sans Balinese": [ - "regular", + "400", "500", "600", "700" ] }, { - "Noto Serif Balinese": [ - "regular" + "Noto Traditional Nushu": [ + "400" ] }, { @@ -10940,7 +9697,7 @@ "100", "200", "300", - "regular", + "400", "500", "600", "700", @@ -10949,129 +9706,143 @@ ] }, { - "Noto Sans Medefaidrin": [ - "regular", - "500", - "600", - "700" + "Noto Sans Psalter Pahlavi": [ + "400" + ] + }, + { + "Noto Sans Buhid": [ + "400" ] }, { "Noto Sans Brahmi": [ - "regular" + "400" ] }, { - "Noto Sans Avestan": [ - "regular" + "Noto Serif Tangut": [ + "400" + ] + }, + { + "Noto Sans Marchen": [ + "400" ] }, { "Noto Sans Chakma": [ - "regular" + "400" ] }, { - "Noto Serif Gurmukhi": [ - "100", - "200", - "300", - "regular", + "Noto Sans Old Turkic": [ + "400" + ] + }, + { + "Noto Serif Balinese": [ + "400" + ] + }, + { + "Noto Sans Bassa Vah": [ + "400", "500", "600", - "700", - "800", - "900" + "700" ] }, { - "Noto Sans Buhid": [ - "regular" + "Noto Sans Avestan": [ + "400" + ] + }, + { + "Noto Serif Dogra": [ + "400" ] }, { "Noto Sans Multani": [ - "regular" + "400" ] }, { - "Noto Serif Dogra": [ - "regular" + "Noto Sans Phags Pa": [ + "400" ] }, { "Noto Sans Kayah Li": [ - "regular", + "400", "500", "600", "700" ] }, { - "Noto Serif NP Hmong": [ - "regular", + "Noto Sans Ol Chiki": [ + "400", "500", "600", "700" ] }, { - "Noto Sans Ol Chiki": [ - "regular", - "500", - "600", - "700" + "Noto Sans Old Persian": [ + "400" ] }, { - "Noto Sans Marchen": [ - "regular" + "Noto Sans Cuneiform": [ + "400" ] }, { - "Noto Sans Grantha": [ - "regular" + "Noto Sans Gunjala Gondi": [ + "400" ] }, { - "Noto Sans Linear A": [ - "regular" + "Noto Serif NP Hmong": [ + "400", + "500", + "600", + "700" ] }, { - "Noto Serif Grantha": [ - "regular" + "Noto Sans Grantha": [ + "400" ] }, { "Noto Sans Mro": [ - "regular" + "400" ] }, { - "Noto Sans New Tai Lue": [ - "regular", - "500", - "600", - "700" + "Noto Serif Grantha": [ + "400" ] }, { - "Noto Sans Bassa Vah": [ - "regular", + "Noto Sans New Tai Lue": [ + "400", "500", "600", "700" ] }, { - "Noto Sans Pahawh Hmong": [ - "regular" + "Noto Sans Zanabazar Square": [ + "400" ] }, { - "Noto Sans Lisu": [ - "regular", + "Noto Sans Tai Tham": [ + "400", "500", "600", "700" @@ -11079,316 +9850,311 @@ }, { "Noto Sans Sundanese": [ - "regular", + "400", "500", "600", "700" ] }, - { - "Noto Sans Inscriptional Pahlavi": [ - "regular" - ] - }, - { - "Noto Sans Psalter Pahlavi": [ - "regular" - ] - }, { "Noto Sans Cypriot": [ - "regular" + "400" ] }, { - "Noto Sans Saurashtra": [ - "regular" + "Noto Sans Pahawh Hmong": [ + "400" ] }, { - "Noto Sans Tai Tham": [ - "regular", + "Noto Sans Lisu": [ + "400", "500", "600", "700" ] }, - { - "Noto Sans Caucasian Albanian": [ - "regular" - ] - }, - { - "Noto Sans Runic": [ - "regular" - ] - }, { "Noto Sans Batak": [ - "regular" + "400" ] }, { "Noto Sans Old North Arabian": [ - "regular" + "400" ] }, { - "Noto Serif Yezidi": [ - "regular", + "Noto Sans Hanifi Rohingya": [ + "400", "500", "600", "700" ] }, { - "Noto Sans Wancho": [ - "regular" + "Noto Sans Lydian": [ + "400" ] }, { - "Noto Sans Hanifi Rohingya": [ - "regular", + "Noto Serif Yezidi": [ + "400", "500", "600", "700" ] }, { - "Noto Sans Sharada": [ - "regular" + "Noto Sans Wancho": [ + "400" ] }, { - "Noto Sans Lydian": [ - "regular" + "Noto Sans Inscriptional Pahlavi": [ + "400" ] }, { - "Noto Sans Zanabazar Square": [ - "regular" + "Noto Sans Sharada": [ + "400" ] }, { - "Noto Sans Miao": [ - "regular" + "Noto Sans Inscriptional Parthian": [ + "400" ] }, { - "Noto Sans Inscriptional Parthian": [ - "regular" + "Noto Sans Saurashtra": [ + "400" ] }, { - "Noto Sans Shavian": [ - "regular" + "Noto Sans Newa": [ + "400" ] }, { "Noto Sans Masaram Gondi": [ - "regular" + "400" ] }, { - "Noto Sans Newa": [ - "regular" + "Noto Sans Takri": [ + "400" ] }, { - "Noto Sans Takri": [ - "regular" + "Noto Sans Miao": [ + "400" ] }, { - "Noto Sans Kaithi": [ - "regular" + "Noto Sans Caucasian Albanian": [ + "400" ] }, { - "Noto Sans Warang Citi": [ - "regular" + "Noto Sans Linear A": [ + "400" ] }, { "Noto Sans Pau Cin Hau": [ - "regular" + "400" ] }, { "Noto Sans Khudawadi": [ - "regular" + "400" ] }, { - "Noto Sans Siddham": [ - "regular" + "Noto Sans Warang Citi": [ + "400" ] }, { - "Noto Sans Khojki": [ - "regular" + "Noto Sans Kaithi": [ + "400" ] }, { - "Noto Sans Rejang": [ - "regular" + "Noto Sans Elbasan": [ + "400" ] }, { - "Noto Sans Osmanya": [ - "regular" + "Noto Sans Rejang": [ + "400" ] }, { - "Noto Sans Mayan Numerals": [ - "regular" + "Noto Sans Khojki": [ + "400" ] }, { "Noto Sans Lepcha": [ - "regular" + "400" ] }, { - "Noto Sans Modi": [ - "regular" + "Noto Sans Glagolitic": [ + "400" ] }, { "Noto Sans Palmyrene": [ - "regular" + "400" ] }, { - "Noto Sans Soyombo": [ - "regular" + "Noto Sans Siddham": [ + "400" ] }, { - "Noto Sans Glagolitic": [ - "regular" + "Noto Sans Mayan Numerals": [ + "400" ] }, { - "Noto Sans Indic Siyaq Numbers": [ - "regular" + "Noto Sans Runic": [ + "400" ] }, { - "Noto Sans Syriac": [ - "100", - "regular", - "900" + "Noto Sans Duployan": [ + "400" ] }, { - "Noto Sans Hatran": [ - "regular" + "Noto Sans Modi": [ + "400" ] }, { - "Noto Sans Duployan": [ - "regular" + "Noto Sans Osmanya": [ + "400" ] }, { - "Noto Sans Bhaiksuki": [ - "regular" + "Noto Sans Ogham": [ + "400" ] }, { - "Noto Sans Kharoshthi": [ - "regular" + "Noto Sans Syriac": [ + "100", + "400", + "900" ] }, { - "Noto Sans Phags Pa": [ - "regular" + "Noto Sans Shavian": [ + "400" ] }, { - "Noto Sans Nabataean": [ - "regular" + "Noto Sans Indic Siyaq Numbers": [ + "400" + ] + }, + { + "Noto Sans Nushu": [ + "400" ] }, { "Noto Sans Phoenician": [ - "regular" + "400" + ] + }, + { + "Noto Sans Kharoshthi": [ + "400" + ] + }, + { + "Noto Sans Bhaiksuki": [ + "400" ] }, { "Noto Sans Old Permic": [ - "regular" + "400" ] }, { - "Noto Sans Ogham": [ - "regular" + "Noto Sans Hatran": [ + "400" ] }, { - "Noto Sans Elbasan": [ - "regular" + "Noto Sans Mende Kikakui": [ + "400" ] }, { "Noto Sans Lycian": [ - "regular" + "400" ] }, { "Noto Sans Elymaic": [ - "regular" + "400" ] }, { - "Noto Sans Old Sogdian": [ - "regular" + "Noto Sans Meroitic": [ + "400" ] }, { - "Noto Sans Manichaean": [ - "regular" + "Noto Sans Tirhuta": [ + "400" ] }, { - "Noto Sans Sogdian": [ - "regular" + "Noto Sans Nabataean": [ + "400" ] }, { - "Noto Sans Linear B": [ - "regular" + "Noto Sans Old Sogdian": [ + "400" ] }, { - "Noto Sans Meroitic": [ - "regular" + "Noto Sans Linear B": [ + "400" ] }, { - "Noto Sans Nushu": [ - "regular" + "Noto Sans Manichaean": [ + "400" ] }, { - "Noto Sans Mende Kikakui": [ - "regular" + "Noto Sans Mandaic": [ + "400" ] }, { - "Noto Sans Tirhuta": [ - "regular" + "Noto Sans Soyombo": [ + "400" ] }, { - "Noto Sans Mandaic": [ - "regular" + "Noto Sans Mahajani": [ + "400" ] }, { - "Noto Sans Mahajani": [ - "regular" + "Noto Sans Sogdian": [ + "400" ] } ] \ No newline at end of file From c2bc15216e39afbffe9968ca62ad5539a4cfc33c Mon Sep 17 00:00:00 2001 From: Erik Golinelli Date: Fri, 10 Feb 2023 15:54:27 +0100 Subject: [PATCH 026/264] env update --- .eslintrc.js | 23 +++ .wp-env.json | 4 + babel.config.js | 10 + package-lock.json | 472 ++++++++++++++++++++++++++++++++++++++++++++-- package.json | 14 +- style.css | 2 +- tsconfig.json | 47 +++++ webpack.config.js | 62 +++--- 8 files changed, 588 insertions(+), 46 deletions(-) create mode 100644 .eslintrc.js create mode 100644 .wp-env.json create mode 100644 babel.config.js create mode 100644 tsconfig.json diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 00000000..74518ade --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,23 @@ +/** + * Set WordPress presets + */ + +const eslintConfig = { + extends: [ 'plugin:@wordpress/eslint-plugin/recommended' ], +}; + +eslintConfig.parserOptions = { + ecmaVersion: 6, + env: { + jest: true, + es6: true, + }, + babelOptions: { + presets: [ + '@wordpress/babel-preset-default', + '@babel/preset-typescript', + ], + }, +}; + +module.exports = eslintConfig; diff --git a/.wp-env.json b/.wp-env.json new file mode 100644 index 00000000..9897e298 --- /dev/null +++ b/.wp-env.json @@ -0,0 +1,4 @@ +{ + "core": "WordPress/WordPress", + "themes": ["."] +} diff --git a/babel.config.js b/babel.config.js new file mode 100644 index 00000000..a5b508da --- /dev/null +++ b/babel.config.js @@ -0,0 +1,10 @@ +module.exports = ( api ) => { + api.cache( true ); + + return { + presets: [ + '@babel/preset-typescript', + '@wordpress/babel-preset-default', + ], + }; +}; diff --git a/package-lock.json b/package-lock.json index adcf67fd..adeb4cb0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,13 +9,20 @@ "version": "2.0.0", "license": "GPL-3.0", "devDependencies": { - "@babel/core": "^7.20.12", + "@babel/core": "^7.20.5", + "@babel/preset-typescript": "^7.18.6", + "@types/node": "^18.13.0", + "@types/wordpress__block-editor": "^11.0.1", + "@types/wordpress__blocks": "^12.0.1", + "@types/wordpress__components": "^23.0.1", + "@types/wordpress__compose": "^6.0.1", "@wordpress/babel-preset-default": "^7.9.0", "@wordpress/scripts": "^25.2.0", "imagemin": "^8.0.1", "imagemin-mozjpeg": "^10.0.0", "imagemin-svgo": "^10.0.1", - "imagemin-webp": "^7.0.0" + "imagemin-webp": "^7.0.0", + "typescript": "^4.9.4" }, "engines": { "node": ">=14.0.0", @@ -3145,6 +3152,12 @@ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true }, + "node_modules/@types/lodash": { + "version": "4.14.191", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.191.tgz", + "integrity": "sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ==", + "dev": true + }, "node_modules/@types/mime": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", @@ -3164,9 +3177,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "16.6.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.6.2.tgz", - "integrity": "sha512-LSw8TZt12ZudbpHc6EkIyDM3nHVWKYrAvGy6EAJfNfjusbwnThqjqxUKKRwuV3iWYeW/LYMzNgaq3MaLffQ2xA==", + "version": "18.13.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.13.0.tgz", + "integrity": "sha512-gC3TazRzGoOnoKAhUx+Q0t8S9Tzs74z7m0ipwGpSqQrleP14hKxP4/JUeEQcD3W1/aIpnWl8pHowI7WokuZpXg==", "dev": true }, "node_modules/@types/normalize-package-data": { @@ -3289,6 +3302,12 @@ "integrity": "sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ==", "dev": true }, + "node_modules/@types/tinycolor2": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@types/tinycolor2/-/tinycolor2-1.4.3.tgz", + "integrity": "sha512-Kf1w9NE5HEgGxCRyIcRXR/ZYtDv0V8FVPtYHwLxl0O+maGX0erE77pQlD0gpP+/KByMZ87mOA79SjifhSB3PjQ==", + "dev": true + }, "node_modules/@types/uglify-js": { "version": "3.17.1", "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.17.1.tgz", @@ -3341,6 +3360,160 @@ "node": ">=0.10.0" } }, + "node_modules/@types/wordpress__block-editor": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/@types/wordpress__block-editor/-/wordpress__block-editor-11.0.1.tgz", + "integrity": "sha512-nGlo4ncu95rR+t1I6jca7ugTk+yJJheSBl8nmtkRFZJXfytb5SfEddywvI7TWkMVyjzDhFQcKQ7wIDomTTh3KQ==", + "dev": true, + "dependencies": { + "@types/react": "*", + "@types/wordpress__blocks": "*", + "@types/wordpress__components": "*", + "@types/wordpress__data": "*", + "@types/wordpress__keycodes": "*", + "@wordpress/element": "^5.0.0", + "react-autosize-textarea": "^7.1.0" + } + }, + "node_modules/@types/wordpress__block-editor/node_modules/react": { + "version": "16.14.0", + "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz", + "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==", + "dev": true, + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@types/wordpress__block-editor/node_modules/react-autosize-textarea": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/react-autosize-textarea/-/react-autosize-textarea-7.1.0.tgz", + "integrity": "sha512-BHpjCDkuOlllZn3nLazY2F8oYO1tS2jHnWhcjTWQdcKiiMU6gHLNt/fzmqMSyerR0eTdKtfSIqtSeTtghNwS+g==", + "dev": true, + "dependencies": { + "autosize": "^4.0.2", + "line-height": "^0.3.1", + "prop-types": "^15.5.6" + }, + "peerDependencies": { + "react": "^0.14.0 || ^15.0.0 || ^16.0.0", + "react-dom": "^0.14.0 || ^15.0.0 || ^16.0.0" + } + }, + "node_modules/@types/wordpress__block-editor/node_modules/react-dom": { + "version": "16.14.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz", + "integrity": "sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==", + "dev": true, + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "scheduler": "^0.19.1" + }, + "peerDependencies": { + "react": "^16.14.0" + } + }, + "node_modules/@types/wordpress__block-editor/node_modules/scheduler": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", + "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", + "dev": true, + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "node_modules/@types/wordpress__blocks": { + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/@types/wordpress__blocks/-/wordpress__blocks-12.0.3.tgz", + "integrity": "sha512-T4L2ke78Augo6Ea0dY/9nRgdnl1DwyMFRBwkH8ny8HCPRXhWdYDUcew84yG/G/edvh49wse79fJW58kJ2GaePg==", + "dev": true, + "dependencies": { + "@types/react": "*", + "@types/wordpress__components": "*", + "@types/wordpress__shortcode": "*", + "@wordpress/element": "^5.0.0" + } + }, + "node_modules/@types/wordpress__components": { + "version": "23.0.1", + "resolved": "https://registry.npmjs.org/@types/wordpress__components/-/wordpress__components-23.0.1.tgz", + "integrity": "sha512-mpAVr74ElANYR6f8+atultx4A1Md40vZeKfA2ZtgcJMWXQWez3OzP1W2g20BENxOo2kWVsp1r3Tcik/mt/8l/g==", + "dev": true, + "dependencies": { + "@types/react": "*", + "@types/tinycolor2": "*", + "@types/wordpress__components": "*", + "@types/wordpress__notices": "*", + "@types/wordpress__rich-text": "*", + "@wordpress/element": "^5.0.0", + "downshift": "^6.0.15", + "re-resizable": "^6.4.0" + } + }, + "node_modules/@types/wordpress__compose": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@types/wordpress__compose/-/wordpress__compose-6.0.1.tgz", + "integrity": "sha512-LBGIgpJPOc1WIpZyc1O6CtquhBu0mxNc7mrVdwWm+6oXGfFuWTdoYwpVJpEONXBJYNVXzQ2jM7w+UeMHFHm6CQ==", + "dev": true, + "dependencies": { + "@types/lodash": "*", + "@types/react": "*", + "@wordpress/element": "^5.0.0" + } + }, + "node_modules/@types/wordpress__data": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@types/wordpress__data/-/wordpress__data-6.0.2.tgz", + "integrity": "sha512-Pu67knXXoTWgCpxTKwePNZz/iKkYe8AQbkkSD/Ba1mw8t4zgEM+jJs5IV5N5ij/awwjs4Subj8mkvS3jMTDwyw==", + "dev": true, + "dependencies": { + "@types/react": "*", + "redux": "^4.1.0" + } + }, + "node_modules/@types/wordpress__keycodes": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@types/wordpress__keycodes/-/wordpress__keycodes-2.3.1.tgz", + "integrity": "sha512-CUZv3WdPvWqnEwojbc4yEttwZlvsMGI8YurgB9CHVJXx6nQ4U2RU6PB0Mv7nxATufduFDMKq8TNpCHBenZqEjQ==", + "dev": true + }, + "node_modules/@types/wordpress__notices": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@types/wordpress__notices/-/wordpress__notices-3.5.1.tgz", + "integrity": "sha512-O9QwWKQrwA64rMuWHZAW6hHBb663j5NAbxhGDHSC05b/PBUxcAcT5AJwjTMC8Pz9P1PeQ0CdHnZBHEJNSSGReA==", + "dev": true, + "dependencies": { + "@types/react": "*", + "@types/wordpress__data": "*" + } + }, + "node_modules/@types/wordpress__rich-text": { + "version": "3.4.6", + "resolved": "https://registry.npmjs.org/@types/wordpress__rich-text/-/wordpress__rich-text-3.4.6.tgz", + "integrity": "sha512-MeLSATBHrcN3fp8cVylbpx+BKRJ1aootPNtbTblcUAHcuRo6avKu1kaDLxIZb/8YbsD+/3Wm8d1uldeNz9/lhw==", + "dev": true, + "dependencies": { + "@types/react": "*", + "@types/wordpress__data": "*", + "@types/wordpress__rich-text": "*" + } + }, + "node_modules/@types/wordpress__shortcode": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@types/wordpress__shortcode/-/wordpress__shortcode-2.3.3.tgz", + "integrity": "sha512-I2e5phrpvqjDv1jtm6Fdo4CfQ6fnpssAJ3rdN//lqyw9TBWp1Ffi1g5xge5SD22d5WxUexbr+I6DFuVxF15IPg==", + "dev": true + }, "node_modules/@types/ws": { "version": "8.5.3", "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", @@ -4673,6 +4846,12 @@ "postcss": "^8.1.0" } }, + "node_modules/autosize": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/autosize/-/autosize-4.0.4.tgz", + "integrity": "sha512-5yxLQ22O0fCRGoxGfeLSNt3J8LB1v+umtpMnPW6XjkTWXKoN0AmXAIhelJcDtFT/Y/wYWmfE+oqU10Q0b8FhaQ==", + "dev": true + }, "node_modules/available-typed-arrays": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", @@ -6174,6 +6353,18 @@ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, + "node_modules/compute-scroll-into-view": { + "version": "1.0.20", + "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-1.0.20.tgz", + "integrity": "sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg==", + "dev": true + }, + "node_modules/computed-style": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/computed-style/-/computed-style-0.1.4.tgz", + "integrity": "sha512-WpAmaKbMNmS3OProfHIdJiNleNJdgUrJfbKArXua28QF7+0CoZjlLn0lp6vlc+dl5r2/X9GQiQRQQU4BzSa69w==", + "dev": true + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -7518,6 +7709,22 @@ "node": ">=4" } }, + "node_modules/downshift": { + "version": "6.1.12", + "resolved": "https://registry.npmjs.org/downshift/-/downshift-6.1.12.tgz", + "integrity": "sha512-7XB/iaSJVS4T8wGFT3WRXmSF1UlBHAA40DshZtkrIscIN+VC+Lh363skLxFTvJwtNgHxAMDGEHT4xsyQFWL+UA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.14.8", + "compute-scroll-into-view": "^1.0.17", + "prop-types": "^15.7.2", + "react-is": "^17.0.2", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "react": ">=16.12.0" + } + }, "node_modules/duplexer": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", @@ -12131,6 +12338,18 @@ "node": ">=10" } }, + "node_modules/line-height": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/line-height/-/line-height-0.3.1.tgz", + "integrity": "sha512-YExecgqPwnp5gplD2+Y8e8A5+jKpr25+DzMbFdI1/1UAr0FJrTFv4VkHLf8/6B590i1wUPJWMKKldkd/bdQ//w==", + "dev": true, + "dependencies": { + "computed-style": "~0.1.3" + }, + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", @@ -14800,6 +15019,16 @@ "node": ">=0.10.0" } }, + "node_modules/re-resizable": { + "version": "6.9.9", + "resolved": "https://registry.npmjs.org/re-resizable/-/re-resizable-6.9.9.tgz", + "integrity": "sha512-l+MBlKZffv/SicxDySKEEh42hR6m5bAHfNu3Tvxks2c4Ah+ldnWjfnVRwxo/nxF27SsUsxDS0raAzFuJNKABXA==", + "dev": true, + "peerDependencies": { + "react": "^16.13.1 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.13.1 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/react": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", @@ -15009,6 +15238,15 @@ "node": ">=8" } }, + "node_modules/redux": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz", + "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.9.2" + } + }, "node_modules/regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", @@ -17147,7 +17385,6 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", "dev": true, - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -20547,6 +20784,12 @@ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true }, + "@types/lodash": { + "version": "4.14.191", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.191.tgz", + "integrity": "sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ==", + "dev": true + }, "@types/mime": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", @@ -20566,9 +20809,9 @@ "dev": true }, "@types/node": { - "version": "16.6.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.6.2.tgz", - "integrity": "sha512-LSw8TZt12ZudbpHc6EkIyDM3nHVWKYrAvGy6EAJfNfjusbwnThqjqxUKKRwuV3iWYeW/LYMzNgaq3MaLffQ2xA==", + "version": "18.13.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.13.0.tgz", + "integrity": "sha512-gC3TazRzGoOnoKAhUx+Q0t8S9Tzs74z7m0ipwGpSqQrleP14hKxP4/JUeEQcD3W1/aIpnWl8pHowI7WokuZpXg==", "dev": true }, "@types/normalize-package-data": { @@ -20691,6 +20934,12 @@ "integrity": "sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ==", "dev": true }, + "@types/tinycolor2": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@types/tinycolor2/-/tinycolor2-1.4.3.tgz", + "integrity": "sha512-Kf1w9NE5HEgGxCRyIcRXR/ZYtDv0V8FVPtYHwLxl0O+maGX0erE77pQlD0gpP+/KByMZ87mOA79SjifhSB3PjQ==", + "dev": true + }, "@types/uglify-js": { "version": "3.17.1", "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.17.1.tgz", @@ -20741,6 +20990,152 @@ "source-map": "^0.7.3" } }, + "@types/wordpress__block-editor": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/@types/wordpress__block-editor/-/wordpress__block-editor-11.0.1.tgz", + "integrity": "sha512-nGlo4ncu95rR+t1I6jca7ugTk+yJJheSBl8nmtkRFZJXfytb5SfEddywvI7TWkMVyjzDhFQcKQ7wIDomTTh3KQ==", + "dev": true, + "requires": { + "@types/react": "*", + "@types/wordpress__blocks": "*", + "@types/wordpress__components": "*", + "@types/wordpress__data": "*", + "@types/wordpress__keycodes": "*", + "@wordpress/element": "^5.0.0", + "react-autosize-textarea": "^7.1.0" + }, + "dependencies": { + "react": { + "version": "16.14.0", + "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz", + "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==", + "dev": true, + "peer": true, + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2" + } + }, + "react-autosize-textarea": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/react-autosize-textarea/-/react-autosize-textarea-7.1.0.tgz", + "integrity": "sha512-BHpjCDkuOlllZn3nLazY2F8oYO1tS2jHnWhcjTWQdcKiiMU6gHLNt/fzmqMSyerR0eTdKtfSIqtSeTtghNwS+g==", + "dev": true, + "requires": { + "autosize": "^4.0.2", + "line-height": "^0.3.1", + "prop-types": "^15.5.6" + } + }, + "react-dom": { + "version": "16.14.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz", + "integrity": "sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==", + "dev": true, + "peer": true, + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "scheduler": "^0.19.1" + } + }, + "scheduler": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", + "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", + "dev": true, + "peer": true, + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + } + } + }, + "@types/wordpress__blocks": { + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/@types/wordpress__blocks/-/wordpress__blocks-12.0.3.tgz", + "integrity": "sha512-T4L2ke78Augo6Ea0dY/9nRgdnl1DwyMFRBwkH8ny8HCPRXhWdYDUcew84yG/G/edvh49wse79fJW58kJ2GaePg==", + "dev": true, + "requires": { + "@types/react": "*", + "@types/wordpress__components": "*", + "@types/wordpress__shortcode": "*", + "@wordpress/element": "^5.0.0" + } + }, + "@types/wordpress__components": { + "version": "23.0.1", + "resolved": "https://registry.npmjs.org/@types/wordpress__components/-/wordpress__components-23.0.1.tgz", + "integrity": "sha512-mpAVr74ElANYR6f8+atultx4A1Md40vZeKfA2ZtgcJMWXQWez3OzP1W2g20BENxOo2kWVsp1r3Tcik/mt/8l/g==", + "dev": true, + "requires": { + "@types/react": "*", + "@types/tinycolor2": "*", + "@types/wordpress__components": "*", + "@types/wordpress__notices": "*", + "@types/wordpress__rich-text": "*", + "@wordpress/element": "^5.0.0", + "downshift": "^6.0.15", + "re-resizable": "^6.4.0" + } + }, + "@types/wordpress__compose": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@types/wordpress__compose/-/wordpress__compose-6.0.1.tgz", + "integrity": "sha512-LBGIgpJPOc1WIpZyc1O6CtquhBu0mxNc7mrVdwWm+6oXGfFuWTdoYwpVJpEONXBJYNVXzQ2jM7w+UeMHFHm6CQ==", + "dev": true, + "requires": { + "@types/lodash": "*", + "@types/react": "*", + "@wordpress/element": "^5.0.0" + } + }, + "@types/wordpress__data": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@types/wordpress__data/-/wordpress__data-6.0.2.tgz", + "integrity": "sha512-Pu67knXXoTWgCpxTKwePNZz/iKkYe8AQbkkSD/Ba1mw8t4zgEM+jJs5IV5N5ij/awwjs4Subj8mkvS3jMTDwyw==", + "dev": true, + "requires": { + "@types/react": "*", + "redux": "^4.1.0" + } + }, + "@types/wordpress__keycodes": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@types/wordpress__keycodes/-/wordpress__keycodes-2.3.1.tgz", + "integrity": "sha512-CUZv3WdPvWqnEwojbc4yEttwZlvsMGI8YurgB9CHVJXx6nQ4U2RU6PB0Mv7nxATufduFDMKq8TNpCHBenZqEjQ==", + "dev": true + }, + "@types/wordpress__notices": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@types/wordpress__notices/-/wordpress__notices-3.5.1.tgz", + "integrity": "sha512-O9QwWKQrwA64rMuWHZAW6hHBb663j5NAbxhGDHSC05b/PBUxcAcT5AJwjTMC8Pz9P1PeQ0CdHnZBHEJNSSGReA==", + "dev": true, + "requires": { + "@types/react": "*", + "@types/wordpress__data": "*" + } + }, + "@types/wordpress__rich-text": { + "version": "3.4.6", + "resolved": "https://registry.npmjs.org/@types/wordpress__rich-text/-/wordpress__rich-text-3.4.6.tgz", + "integrity": "sha512-MeLSATBHrcN3fp8cVylbpx+BKRJ1aootPNtbTblcUAHcuRo6avKu1kaDLxIZb/8YbsD+/3Wm8d1uldeNz9/lhw==", + "dev": true, + "requires": { + "@types/react": "*", + "@types/wordpress__data": "*", + "@types/wordpress__rich-text": "*" + } + }, + "@types/wordpress__shortcode": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@types/wordpress__shortcode/-/wordpress__shortcode-2.3.3.tgz", + "integrity": "sha512-I2e5phrpvqjDv1jtm6Fdo4CfQ6fnpssAJ3rdN//lqyw9TBWp1Ffi1g5xge5SD22d5WxUexbr+I6DFuVxF15IPg==", + "dev": true + }, "@types/ws": { "version": "8.5.3", "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", @@ -21703,6 +22098,12 @@ "postcss-value-parser": "^4.2.0" } }, + "autosize": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/autosize/-/autosize-4.0.4.tgz", + "integrity": "sha512-5yxLQ22O0fCRGoxGfeLSNt3J8LB1v+umtpMnPW6XjkTWXKoN0AmXAIhelJcDtFT/Y/wYWmfE+oqU10Q0b8FhaQ==", + "dev": true + }, "available-typed-arrays": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", @@ -22873,6 +23274,18 @@ } } }, + "compute-scroll-into-view": { + "version": "1.0.20", + "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-1.0.20.tgz", + "integrity": "sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg==", + "dev": true + }, + "computed-style": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/computed-style/-/computed-style-0.1.4.tgz", + "integrity": "sha512-WpAmaKbMNmS3OProfHIdJiNleNJdgUrJfbKArXua28QF7+0CoZjlLn0lp6vlc+dl5r2/X9GQiQRQQU4BzSa69w==", + "dev": true + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -23906,6 +24319,19 @@ } } }, + "downshift": { + "version": "6.1.12", + "resolved": "https://registry.npmjs.org/downshift/-/downshift-6.1.12.tgz", + "integrity": "sha512-7XB/iaSJVS4T8wGFT3WRXmSF1UlBHAA40DshZtkrIscIN+VC+Lh363skLxFTvJwtNgHxAMDGEHT4xsyQFWL+UA==", + "dev": true, + "requires": { + "@babel/runtime": "^7.14.8", + "compute-scroll-into-view": "^1.0.17", + "prop-types": "^15.7.2", + "react-is": "^17.0.2", + "tslib": "^2.3.0" + } + }, "duplexer": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", @@ -27368,6 +27794,15 @@ "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", "dev": true }, + "line-height": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/line-height/-/line-height-0.3.1.tgz", + "integrity": "sha512-YExecgqPwnp5gplD2+Y8e8A5+jKpr25+DzMbFdI1/1UAr0FJrTFv4VkHLf8/6B590i1wUPJWMKKldkd/bdQ//w==", + "dev": true, + "requires": { + "computed-style": "~0.1.3" + } + }, "lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", @@ -29292,6 +29727,13 @@ } } }, + "re-resizable": { + "version": "6.9.9", + "resolved": "https://registry.npmjs.org/re-resizable/-/re-resizable-6.9.9.tgz", + "integrity": "sha512-l+MBlKZffv/SicxDySKEEh42hR6m5bAHfNu3Tvxks2c4Ah+ldnWjfnVRwxo/nxF27SsUsxDS0raAzFuJNKABXA==", + "dev": true, + "requires": {} + }, "react": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", @@ -29447,6 +29889,15 @@ "strip-indent": "^3.0.0" } }, + "redux": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz", + "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==", + "dev": true, + "requires": { + "@babel/runtime": "^7.9.2" + } + }, "regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", @@ -31092,8 +31543,7 @@ "version": "4.9.4", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", - "dev": true, - "peer": true + "dev": true }, "uc.micro": { "version": "1.0.6", diff --git a/package.json b/package.json index 5f78e803..03afb9bd 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,14 @@ "optimize-images": "node ./bin/imagemin.mjs" }, "devDependencies": { - "@babel/core": "^7.20.12", + "@babel/core": "^7.20.5", + "@babel/preset-typescript": "^7.18.6", + "@types/node": "^18.13.0", + "@types/wordpress__block-editor": "^11.0.1", + "@types/wordpress__blocks": "^12.0.1", + "@types/wordpress__components": "^23.0.1", + "@types/wordpress__compose": "^6.0.1", + "typescript": "^4.9.4", "@wordpress/babel-preset-default": "^7.9.0", "@wordpress/scripts": "^25.2.0", "imagemin": "^8.0.1", @@ -25,11 +32,6 @@ "node": ">=14.0.0", "npm": ">=6.9.0" }, - "eslintConfig": { - "extends": [ - "plugin:@wordpress/eslint-plugin/recommended" - ] - }, "browserslist": [ "extends @wordpress/browserslist-config" ] diff --git a/style.css b/style.css index 50be91c4..6476c9a1 100644 --- a/style.css +++ b/style.css @@ -1,7 +1,7 @@ /*! Theme Name: Modul-R -Description: Modul R is a powerful and flexible theme that provides a fast way to create an awesome website. Modul R brings plenty of customization possibilities thanks to gulp4, it comes with preconfigured SASS style, visibility triggered animations, image parallax, lightbox, slider, grid layout (masonry), category sidebar accordion and many more features! Modul R also provides a seamless integration with Gutemberg and Woocommerce. +Description: Modul R is a powerful and flexible theme that provides a fast way to create an awesome website. Modul R brings plenty of customization possibilities thanks to gulp4, it comes with preconfigured SASS style, visibility triggered animations, image parallax, lightbox, slider, grid layout (masonry), category sidebar accordion and many more features! Modul R also provides a seamless integration with Gutenberg and Woocommerce. Theme URI: https://modul-r.codekraft.it/ Author: Codekraft Studio Author URI: https://codekraft.it/ diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 00000000..e1411e34 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,47 @@ +{ + "compilerOptions": { + "target": "ES6", + "module": "es2015", + "jsx": "react-jsx", + // Search under node_modules for non-relative imports. + "moduleResolution": "node", + "sourceMap": true, + + // Enable the strictest settings like strictNullChecks & noImplicitAny. + "strict": true, + + "allowSyntheticDefaultImports": true, + "skipLibCheck": true, + "strictNullChecks": true, + "resolveJsonModule": true, + "forceConsistentCasingInFileNames": true, + // Import non-ES modules as default imports."esModuleInterop": true, + + // Tells TypeScript to read JS files, as + // normally they are ignored as source files + "allowJs": true, + // Generate d.ts files + "declaration": true, + "declarationMap": true, + "declarationDir": "build/types", + "emitDeclarationOnly": true, + + "pretty": true, + + // Types should go into this directory. + // Removing this would place the .d.ts files + // next to the .js files + "outDir": "build", + "typeRoots": [ + "./node_modules/@types", + "./types" + ], + "types": [ + "puppeteer", + "jest-environment-puppeteer", + "expect-puppeteer" + ] + }, + "include": ["src/**/*"], + "exclude": ["build","coverage"] +} diff --git a/webpack.config.js b/webpack.config.js index d7283d0b..a89e80c0 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -5,32 +5,38 @@ const config = { ...defaultConfig, }; -const addModule = ( fileName, filePath ) => { - return { - ...config, - name: fileName, - entry: { - [ fileName ]: path.resolve( - __dirname, - 'src/' + filePath + fileName - ), - }, - output: { - path: path.resolve( __dirname, 'dist/' + filePath ), - filename: fileName, - }, - }; -}; - -/** js scripts */ -const scripts = addModule( 'scripts.ts', 'scripts/' ); -const adminScripts = addModule( 'admin-scripts.ts', 'styles/' ); - -/** scss styles */ -const admin = addModule( 'admin', 'styles/' ); -const atf = addModule( 'atf', 'styles/' ); -const editor = addModule( 'editor', 'styles/' ); -const style = addModule( 'main', 'styles/' ); -const woo = addModule( 'woo', 'styles/' ); +module.exports = { + ...defaultConfig, + entry: { + /** js scripts */ + 'modulr-scripts': path.resolve( process.cwd(), `src/scripts/scripts.ts` ), + 'modulr-script-admin': path.resolve( + process.cwd(), + `src/scripts/scripts-admin.ts` + ), -module.exports = [ scripts, admin, adminScripts, atf, editor, style, woo ]; + /** scss styles */ + 'modulr-css-admin': path.resolve( + process.cwd(), + `src/styles/admin.ts` + ), + 'modulr-css-atf': path.resolve( process.cwd(), `src/styles/atf.ts` ), + 'modulr-css-editor': path.resolve( + process.cwd(), + `src/styles/editor.ts` + ), + 'modulr-css-main': path.resolve( process.cwd(), `src/styles/main.ts` ), + 'modulr-css-woo': path.resolve( process.cwd(), `src/styles/woo.ts` ), + }, + devtool: 'source-map', + module: { + rules: [ + { + test: /\.[tjmc]sx?$/, + use: [ 'babel-loader' ], + exclude: /node_modules/, + }, + ], + ...defaultConfig.module, + }, +}; From c764bc409e12d2f2ebc42f9b20480e9530dda602 Mon Sep 17 00:00:00 2001 From: Erik Golinelli Date: Fri, 10 Feb 2023 15:55:28 +0100 Subject: [PATCH 027/264] switch extension to ts --- src/scripts/admin-scripts.ts | 2 -- src/scripts/scripts-admin.ts | 1 + src/scripts/scripts.ts | 2 +- src/styles/{admin.js => admin.ts} | 0 src/styles/{atf.js => atf.ts} | 0 src/styles/{editor.js => editor.ts} | 0 src/styles/{main.js => main.ts} | 0 src/styles/{woo.js => woo.ts} | 0 8 files changed, 2 insertions(+), 3 deletions(-) delete mode 100644 src/scripts/admin-scripts.ts create mode 100644 src/scripts/scripts-admin.ts rename src/styles/{admin.js => admin.ts} (100%) rename src/styles/{atf.js => atf.ts} (100%) rename src/styles/{editor.js => editor.ts} (100%) rename src/styles/{main.js => main.ts} (100%) rename src/styles/{woo.js => woo.ts} (100%) diff --git a/src/scripts/admin-scripts.ts b/src/scripts/admin-scripts.ts deleted file mode 100644 index b226618b..00000000 --- a/src/scripts/admin-scripts.ts +++ /dev/null @@ -1,2 +0,0 @@ -// eslint-disable-next-line no-console -window.onload = () => console.log( 'admin ready' ); diff --git a/src/scripts/scripts-admin.ts b/src/scripts/scripts-admin.ts new file mode 100644 index 00000000..ea04c24d --- /dev/null +++ b/src/scripts/scripts-admin.ts @@ -0,0 +1 @@ +import './admin/'; diff --git a/src/scripts/scripts.ts b/src/scripts/scripts.ts index 60b6feae..a7608537 100644 --- a/src/scripts/scripts.ts +++ b/src/scripts/scripts.ts @@ -1,2 +1,2 @@ -import './user/index'; +import './user/'; import './user/scrollControl'; diff --git a/src/styles/admin.js b/src/styles/admin.ts similarity index 100% rename from src/styles/admin.js rename to src/styles/admin.ts diff --git a/src/styles/atf.js b/src/styles/atf.ts similarity index 100% rename from src/styles/atf.js rename to src/styles/atf.ts diff --git a/src/styles/editor.js b/src/styles/editor.ts similarity index 100% rename from src/styles/editor.js rename to src/styles/editor.ts diff --git a/src/styles/main.js b/src/styles/main.ts similarity index 100% rename from src/styles/main.js rename to src/styles/main.ts diff --git a/src/styles/woo.js b/src/styles/woo.ts similarity index 100% rename from src/styles/woo.js rename to src/styles/woo.ts From 9064627687499965be89de84025841a01b8ebc36 Mon Sep 17 00:00:00 2001 From: Erik Golinelli Date: Fri, 10 Feb 2023 15:56:11 +0100 Subject: [PATCH 028/264] gutenberg blocks style update --- src/styles/components/_blocks.scss | 162 ----------------------------- 1 file changed, 162 deletions(-) diff --git a/src/styles/components/_blocks.scss b/src/styles/components/_blocks.scss index d8fbdb6a..13fd09a5 100644 --- a/src/styles/components/_blocks.scss +++ b/src/styles/components/_blocks.scss @@ -34,106 +34,6 @@ } } - //! Subhead - .wp-block-subhead { - font-style: inherit; - opacity: 1; - } - - //! Audio - .wp-block-audio { - - audio {width: 100%;} - - &.alignleft audio, - &.alignright audio { - - max-width: calc(var(--wp--custom--responsive--side-margin) * .33); - - @media #{$mq__smaller-than-tablet} { - max-width: calc(var(--wp--custom--responsive--side-margin) * .5); - } - - @media #{$mq__desktop} { - max-width: calc(var(--wp--custom--responsive--side-margin) * .33); - } - } - - &.alignwide, - &.alignfull { - padding-left: var(--wp--custom--responsive--side-margin); - padding-right: var(--wp--custom--responsive--side-margin); - } - } - - //! Video - .wp-block-video { - - video { - width: 100%; - } - - &.alignwide{ - padding-left: 0; - padding-right: 0; - } - } - - .wp-block-archives, - .wp-block-categories { - list-style-type: none; - - ul, - li { - padding: 0; - margin: 0 auto; - } - - ul { - list-style-type: none; - padding-left: var(--wp--custom--responsive--side-margin); - } - - li { - a { margin-bottom: var(--wp--preset--spacing--40);} - } - } - - //! Latest posts grid view - .wp-block-latest-posts.is-grid { - display: flex; - justify-content: space-between; - li { - background-color: var(--color--white); - margin: 0; - } - } - - //! Latest preformatted text - .wp-block-preformatted { - line-height: var(--wp--custom--line-height--large); - padding: var(--wp--preset--spacing--60) var(--wp--preset--spacing--70); - } - - //! Verse - .wp-block-verse { - line-height: 2.2; - font-weight: var(--typography--default--font-weight--light); - font-style: italic; - } - - //! Paragraphs - .has-drop-cap { - margin-bottom: var(--wp--preset--spacing--60); - - &:not(:focus):first-letter { - font-family: var(--typography--font--title); - line-height: 1; - font-weight: var(--typography--font--default--bold); - margin: 0 var(--wp--preset--spacing--50) 0 0; - } - } - //! Image .wp-block-image { @@ -180,59 +80,6 @@ } } } - - } - - //! Media Text - .wp-block-media-text { - .wp-block-media-text__content { - max-width: calc( var(--sizes--content--width-wide) * .4); - padding: var(--wp--preset--spacing--70) var(--wp--preset--spacing--60) var(--wp--preset--spacing--70) var(--wp--preset--spacing--70); - } - } - - //! Galleries - .wp-block-gallery { - list-style-type: none; - - - .blocks-gallery-item { - padding: 0; - } - - .blocks-gallery-image:last-child, - .blocks-gallery-item:last-child { - margin-bottom: 16px; - } - - figure { - margin: 0 !important; - } - - &.is-cropped figure img{ - height:100%; - width:100%; - } - - .blocks-gallery-item figcaption { - overflow: hidden; - } - - figcaption a { - color: var(--color--white); - } - } - - //! Captions - .wp-block-audio figcaption, - .wp-block-video figcaption, - .wp-block-image figcaption, - .wp-block-gallery .blocks-gallery-image figcaption, - .wp-block-gallery .blocks-gallery-item figcaption { - margin: 0; - padding: var(--wp--preset--spacing--40); - text-align: center; - box-sizing: border-box; } //! Separator @@ -262,15 +109,6 @@ padding-left: 24px; } } - - /* Remove duplicate rule-line when a separator - * is followed by an H1, or H2 */ - & + h1, - & + h2 { - &:before { - display: none; - } - } } //! File From 787d46b9508588d7fb60a34de891aacfd91ee7d9 Mon Sep 17 00:00:00 2001 From: Erik Golinelli Date: Fri, 10 Feb 2023 15:58:03 +0100 Subject: [PATCH 029/264] since the build is now done in the 'build' folder and has no subfolders, updating the enqueue paths --- inc/enqueue-scripts.php | 4 ++-- inc/enqueue-style.php | 7 +++---- inc/theme-setup.php | 2 +- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/inc/enqueue-scripts.php b/inc/enqueue-scripts.php index 4b399e07..7b0ca5e1 100644 --- a/inc/enqueue-scripts.php +++ b/inc/enqueue-scripts.php @@ -7,7 +7,7 @@ function modul_r_theme_scripts() { // Register and Enqueue - wp_enqueue_script( 'modul-r-scripts-main', get_template_directory_uri() . "/dist/scripts/scripts.js", array(), false, true ); + wp_enqueue_script( 'modul-r-scripts-main', get_template_directory_uri() . "/build/modulr-scripts.js", array(), false, true ); } endif; @@ -58,7 +58,7 @@ function modul_r_theme_drawer_color() { function modul_r_theme_customize_style() { $font_json = file_get_contents( get_template_directory() . '/inc/third-party/fonts.json' ); - wp_enqueue_script('modul-r-customizer-script', get_template_directory_uri() . "/dist/scripts/scripts.js"); + wp_enqueue_script('modul-r-customizer-script', get_template_directory_uri() . "/build/modulr-script-admin.js"); wp_localize_script('modul-r-customizer-script', 'modulrFonts', json_decode($font_json) ); } add_action( 'customize_controls_enqueue_scripts', 'modul_r_theme_customize_style' ); diff --git a/inc/enqueue-style.php b/inc/enqueue-style.php index e73ea859..7fa530de 100644 --- a/inc/enqueue-style.php +++ b/inc/enqueue-style.php @@ -5,7 +5,7 @@ */ if ( ! function_exists( 'modul_r_theme_style' ) ) : function modul_r_theme_style() { - wp_enqueue_style( 'modul-r-style', get_template_directory_uri() . "/dist/styles/main.css" ); + wp_enqueue_style( 'modul-r-style', get_template_directory_uri() . "/build/modulr-css-main.css" ); } endif; @@ -18,7 +18,7 @@ function modul_r_atf_style() { // get the acf.css file and store into a variable ob_start(); - include get_stylesheet_directory() . '/dist/styles/atf.css'; + include get_stylesheet_directory() . '/build/modulr-css-atf.css'; $atf_css = ob_get_clean(); @@ -39,7 +39,7 @@ function modul_r_atf_style() { */ if ( ! function_exists( 'modul_r_admin_style' ) ) : function modul_r_admin_style() { - wp_enqueue_style( 'modul-r-admin', get_template_directory_uri() . '/dist/styles/admin.css' ); + wp_enqueue_style( 'modul-r-admin', get_template_directory_uri() . '/build/modulr-css-main.css' ); } endif; @@ -121,7 +121,6 @@ function modul_r_handleStyles() { /* above the fold style */ add_action( 'wp_enqueue_scripts', 'modul_r_atf_style', 1 ); - add_action( 'wp_head', 'modul_r_atf_style', 1 ); /* admin style */ add_action( 'admin_enqueue_scripts', 'modul_r_admin_style', 1 ); diff --git a/inc/theme-setup.php b/inc/theme-setup.php index 8f5a4aaf..01395ece 100644 --- a/inc/theme-setup.php +++ b/inc/theme-setup.php @@ -86,7 +86,7 @@ function modul_r_theme_setup() { add_theme_support( 'editor-styles' ); // Enqueue editor styles and fonts. - add_editor_style( get_template_directory() . '/dist/styles/editor.css' ); + add_editor_style( get_template_directory() . '/build/editor.css' ); // Add support for Block Styles. add_theme_support( 'wp-block-styles' ); From 99f2afde06c3454914f68ac92cb4c711619de1db Mon Sep 17 00:00:00 2001 From: Erik Golinelli Date: Fri, 10 Feb 2023 15:58:56 +0100 Subject: [PATCH 030/264] customizer script that handles the font change updating the font weight of the related font --- src/scripts/admin/index.ts | 91 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 src/scripts/admin/index.ts diff --git a/src/scripts/admin/index.ts b/src/scripts/admin/index.ts new file mode 100644 index 00000000..b786fa66 --- /dev/null +++ b/src/scripts/admin/index.ts @@ -0,0 +1,91 @@ +type FontWeightsDef = string[]; +type FontDef = { [ key: string ]: FontWeightsDef }; +interface Window { + modulrFonts: FontDef[]; + modulr: { + parsedFonts: FontDef[]; + }; +} +let parsedFonts: FontDef[] = []; + +const selectNamePrefix = '_customize-input-modul_r_'; + +/* those are helpers to build the id of the select */ +const fontFamilySelect: { name: string; child: string[] }[] = [ + { + name: 'typography_font_family_title', + child: [ 'defaults_title_regular', 'defaults_title_bold' ], + }, + { + name: 'typography_font_family_default', + child: [ + 'defaults_default_light', + 'defaults_default_regular', + 'defaults_default_bold', + ], + }, +]; + +function replaceSelectOptions( select: Element | null, newOptions: string | any[] ) { + while ( select.options.length > 0 ) { + select.remove( 0 ); + } + for ( let i = 0; i <= newOptions.length; i++ ) { + select.add( new Option( newOptions[ i ] ) ); + } +} + +window.onload = () => { + console.log( 'admin ready' ); + + if ( window?.modulr?.parsedFonts ) { + parsedFonts = window.modulr.parsedFonts; + } else { + window.modulrFonts.forEach( ( font: FontDef ) => { + parsedFonts[ Object.keys( font )[ 0 ] ] = + Object.values( font )[ 0 ]; + } ); + window.modulr = { parsedFonts: [] }; + window.modulr.parsedFonts = parsedFonts; + console.log( 'Available fonts', parsedFonts ); + } + + fontFamilySelect.forEach( ( select ) => { + document + .querySelector( '#' + selectNamePrefix + select.name ) + ?.addEventListener( 'change', ( e ) => { + // the selected item + const selected: HTMLInputElement = e.target; + const selectedHtmlID: string = selected?.id; + // store the selected font available where key is the name and the value is an array of possible font weights + const selectedFont: string = selected?.value; + const availableSet: string[] = parsedFonts[ selectedFont ]; + + const fontDefaultseightsSelect = selectedHtmlID.replace( + selectNamePrefix, + '' + ); + + const choosenSubset = fontFamilySelect.find( + ( fontType ) => fontType.name === fontDefaultseightsSelect + ); + + choosenSubset.child.forEach( ( fontWeight, index ) => { + const fontWeightSelect = document.querySelector( + '#' + selectNamePrefix + fontWeight + ); + replaceSelectOptions( fontWeightSelect, availableSet ); + console.log( fontWeightSelect ); + fontWeightSelect.value = availableSet[ index ]; + } ); + + console.log( + 'available font weight for %s %s', + e.target.value, + parsedFonts[ e.target.value ] + ); + } ); + } ); + + //'sub-accordion-section-modul_r_typography_options' +}; From f411817f0570bc4e430bd05cab2318151f94fc90 Mon Sep 17 00:00:00 2001 From: Erik Golinelli Date: Fri, 10 Feb 2023 15:59:42 +0100 Subject: [PATCH 031/264] cleanup --- src/styles/base/_buttons.scss | 1 - src/styles/base/_images.scss | 23 ----------------------- 2 files changed, 24 deletions(-) diff --git a/src/styles/base/_buttons.scss b/src/styles/base/_buttons.scss index d5b4d5c2..038b1eb1 100644 --- a/src/styles/base/_buttons.scss +++ b/src/styles/base/_buttons.scss @@ -31,7 +31,6 @@ .wp-block-button { .wp-block-button__link { - margin-top: var(--wp--preset--spacing--60); @extend %button; } diff --git a/src/styles/base/_images.scss b/src/styles/base/_images.scss index 47e3e8d1..e1da2654 100644 --- a/src/styles/base/_images.scss +++ b/src/styles/base/_images.scss @@ -37,26 +37,3 @@ figure { line-height: 1.2; } } - - -.site-main .entry-content{ - .wp-caption { - margin-bottom: var(--wp--preset--spacing--50); - padding-left: var(--wp--custom--responsive--side-margin); - padding-right: var(--wp--custom--responsive--side-margin); - - .wp-caption-text { - color: var(--color--text); - font-size: var(--wp--preset--font-size--small); - font-style: italic; - } - - &.alignleft { - padding-right: var(--wp--preset--spacing--50); - } - - &.alignright { - padding-left: var(--wp--preset--spacing--50); - } - } -} From 88a819e139e86521c7b071e39863e5b30727b7b4 Mon Sep 17 00:00:00 2001 From: Erik Golinelli Date: Fri, 10 Feb 2023 16:13:34 +0100 Subject: [PATCH 032/264] imagemin output path moved to ./img (was ./dist/img) --- bin/imagemin.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/imagemin.mjs b/bin/imagemin.mjs index 888a893b..6729938c 100644 --- a/bin/imagemin.mjs +++ b/bin/imagemin.mjs @@ -11,7 +11,7 @@ import fs from 'graceful-fs'; const writeFile = promisify(fs.writeFile); const srcdir = './src/img'; -const distdir = './dist/img'; +const distdir = './img'; imagemin([srcdir + '/**/*.{jpg,jpeg,png}'], { plugins: [ From d48e3475abb1dc518160b3bb021fca86c26caabb Mon Sep 17 00:00:00 2001 From: Erik Golinelli Date: Fri, 10 Feb 2023 16:15:39 +0100 Subject: [PATCH 033/264] colors custom prop updated to match the wordpress one --- src/styles/base/_buttons.scss | 8 +-- src/styles/base/_colors.scss | 4 +- src/styles/base/_helpers.scss | 4 +- src/styles/base/_images.scss | 2 +- src/styles/base/_inputs.scss | 12 ++-- src/styles/base/_scrollbar.scss | 12 ++-- src/styles/base/_table.scss | 4 +- src/styles/base/_typography-extras.scss | 52 ++++++--------- src/styles/base/_typography.scss | 75 +--------------------- src/styles/components/_accessibility.scss | 6 +- src/styles/components/_blocks.scss | 6 +- src/styles/components/_comments.scss | 28 ++++---- src/styles/components/_content-header.scss | 2 +- src/styles/components/_extras.scss | 24 +++---- src/styles/components/_icons.scss | 10 +-- src/styles/components/_search-form.scss | 4 +- src/styles/components/_sidebar.scss | 4 +- src/styles/pages/_archive.scss | 2 +- src/styles/woo/_woo-common.scss | 8 +-- src/styles/woo/_woo-pages.scss | 14 ++-- src/styles/woo/_woo-sidebar.scss | 8 +-- 21 files changed, 100 insertions(+), 189 deletions(-) diff --git a/src/styles/base/_buttons.scss b/src/styles/base/_buttons.scss index 038b1eb1..5e6de313 100644 --- a/src/styles/base/_buttons.scss +++ b/src/styles/base/_buttons.scss @@ -12,11 +12,11 @@ font-weight: var(--typography--font--title-bold); &:not(.has-background) { - background-color: var(--color--primary); + background-color: var(--wp--preset--color--primary); } &:not(.has-text-color) { - color: rgba( var(--color--white--decimal), .9); + color: rgba( var(--wp--preset--color--white--decimal), .9); } @media #{$mq__smaller-than-tablet} { @@ -42,8 +42,8 @@ .wp-block-search__button, .wp-block-file .wp-block-file__button { - background-color: var(--color--primary); - color: var(--color--white); + background-color: var(--wp--preset--color--primary); + color: var(--wp--preset--color--white); border-radius: 0; border: none; font-size: var(--wp--preset--font-size--medium); diff --git a/src/styles/base/_colors.scss b/src/styles/base/_colors.scss index a794e567..cf2549eb 100644 --- a/src/styles/base/_colors.scss +++ b/src/styles/base/_colors.scss @@ -9,11 +9,11 @@ .has-gray-dark-background-color, .has-gray-dark-background-color { // Use white text against these backgrounds by default. - color: var(--color--white); + color: var(--wp--preset--color--white); } .has-white-background-color, .has-white-smoke-background-color, .has-gray-light-background-color { - color: var(--color--text); + color: var(--wp--preset--color--text); } diff --git a/src/styles/base/_helpers.scss b/src/styles/base/_helpers.scss index c81e4539..bc561516 100644 --- a/src/styles/base/_helpers.scss +++ b/src/styles/base/_helpers.scss @@ -19,9 +19,9 @@ .ellipsis { @include ellipsis } %elevation--01 { - box-shadow: 0 2px 10px -6px rgba( var(--color--black--decimal), .8); + box-shadow: 0 2px 10px -6px rgba( var(--wp--preset--color--black--decimal), .8); } %text_shadow--01 { - text-shadow: 0 1px 2px rgba( var(--color--black--decimal), .3); + text-shadow: 0 1px 2px rgba( var(--wp--preset--color--black--decimal), .3); } diff --git a/src/styles/base/_images.scss b/src/styles/base/_images.scss index e1da2654..b4fe6108 100644 --- a/src/styles/base/_images.scss +++ b/src/styles/base/_images.scss @@ -7,7 +7,7 @@ img { .image-border img { padding: var(--wp--preset--spacing--40); - background: var(--color--gray-light); + background: var(--wp--preset--color--gray-light); margin: var(--wp--preset--spacing--40); box-sizing: border-box; } diff --git a/src/styles/base/_inputs.scss b/src/styles/base/_inputs.scss index 4fcc97a4..a5684b4b 100644 --- a/src/styles/base/_inputs.scss +++ b/src/styles/base/_inputs.scss @@ -1,8 +1,8 @@ %input_model { - background-color: var(--color--white); - color: var(--color--text); + background-color: var(--wp--preset--color--white); + color: var(--wp--preset--color--text); outline:none!important; - border: 1px solid var(--color--gray-light); + border: 1px solid var(--wp--preset--color--gray-light); font-size: var(--wp--preset--font-size--medium); font-weight: var(--typography--default--font-weight--regular); box-sizing: border-box; @@ -14,7 +14,7 @@ &:focus, &:hover { - box-shadow: 0 1px 0 var(--color--primary); + box-shadow: 0 1px 0 var(--wp--preset--color--primary); } } @@ -30,7 +30,7 @@ input[type="tel"] { @extend %input_model; padding-left: var(--wp--preset--spacing--40); padding-right: var(--wp--preset--spacing--40); - box-shadow: 0 0 0 var(--color--gray-light); + box-shadow: 0 0 0 var(--wp--preset--color--gray-light); } @@ -45,7 +45,7 @@ input[type="tel"] { } form label { - color: var(--color--gray-dark); + color: var(--wp--preset--color--gray-dark); font-size: calc(var(--wp--preset--font-size--medium) - 1px); input + span { diff --git a/src/styles/base/_scrollbar.scss b/src/styles/base/_scrollbar.scss index a354332a..4c4f7650 100644 --- a/src/styles/base/_scrollbar.scss +++ b/src/styles/base/_scrollbar.scss @@ -13,8 +13,8 @@ &-track { &-piece, & { - background-color: var(--color--gray-light); - -webkit-box-shadow: inset 0 0 6px rgba(var(--color--black--decimal), 0.1); + background-color: var(--wp--preset--color--gray-light); + -webkit-box-shadow: inset 0 0 6px rgba(var(--wp--preset--color--black--decimal), 0.1); } } @@ -22,9 +22,9 @@ &-thumb, &-thumb:vertical, &-thumb:horizontal { - background-color:var(--color--secondary); + background-color:var(--wp--preset--color--secondary); border-radius: $scrollbar-border-radius; - -webkit-box-shadow: inset 0 0 6px rgba(var(--color--black--decimal), 0.15); + -webkit-box-shadow: inset 0 0 6px rgba(var(--wp--preset--color--black--decimal), 0.15); } &-button { @@ -36,12 +36,12 @@ height: 0; width: 0; display: block; - background-color: var(--color--gray-light); + background-color: var(--wp--preset--color--gray-light); } } &-corner { - background-color: var(--color--gray-light); + background-color: var(--wp--preset--color--gray-light); } } diff --git a/src/styles/base/_table.scss b/src/styles/base/_table.scss index ab17ad34..533406de 100644 --- a/src/styles/base/_table.scss +++ b/src/styles/base/_table.scss @@ -10,11 +10,11 @@ table { padding: var(--wp--preset--spacing--30); } th { - background: var(--color--primary); + background: var(--wp--preset--color--primary); color: #fff; } td { - border-bottom: 1px solid var(--color--gray-light); + border-bottom: 1px solid var(--wp--preset--color--gray-light); } } } diff --git a/src/styles/base/_typography-extras.scss b/src/styles/base/_typography-extras.scss index 82265320..04b80bc0 100644 --- a/src/styles/base/_typography-extras.scss +++ b/src/styles/base/_typography-extras.scss @@ -4,15 +4,15 @@ iframe { } ::selection { - background-color: rgba(var(--color--primary--decimal),.5); + background-color: rgba(var(--wp--preset--color--primary--decimal), .5); color: white; } pre { width: 100%; - padding: var(--wp--preset--spacing--50) var(--wp--preset--spacing--60); - background: var(--color--white-smoke); - border: 1px solid var(--color--gray-light); + padding: var(--wp--preset--spacing--50) var(--wp--preset--spacing--60); + background: var(--wp--preset--color--white-smoke); + border: 1px solid var(--wp--preset--color--gray-light); box-sizing: border-box; border-radius: 3px; max-width: calc(100% - var(--wp--custom--responsive--side-margin) * 2); @@ -26,8 +26,8 @@ pre { } code { - border: 1px solid var(--color--gray-light); - background-color: var(--color--white-smoke); + border: 1px solid var(--wp--preset--color--gray-light); + background-color: var(--wp--preset--color--white-smoke); padding: var(--wp--preset--spacing--20) var(--wp--preset--spacing--30); margin-top: var(--wp--preset--spacing--20); margin-bottom: var(--wp--preset--spacing--20); @@ -45,12 +45,12 @@ cite { .site .entry-content blockquote { $blockquote__icon-size: 60px; - color:var(--color--text); + color: var(--wp--preset--color--text); min-height: $blockquote__icon-size; padding: ($blockquote__icon-size * .5) $blockquote__icon-size * 1.5; - position:relative; - border: 1px solid var(--color--gray-light); + position: relative; + border: 1px solid var(--wp--preset--color--gray-light); @media #{$mq__responsive_breakpoint} { padding: var(--wp--preset--spacing--50) $blockquote__icon-size * 1.5; @@ -63,7 +63,7 @@ cite { top: -4px; left: 16px; font-size: $blockquote__icon-size; - color: var(--color--secondary); + color: var(--wp--preset--color--secondary); } p, @@ -75,6 +75,7 @@ cite { text-transform: none; padding-top: var(--wp--preset--spacing--50); margin-bottom: var(--wp--preset--spacing--30); + em { font-style: normal; } @@ -134,24 +135,6 @@ cite { } - -@media #{$mq__responsive_breakpoint} { - .site-main .entry-content { - table, - pre, - blockquote { - padding-right: var(--wp--custom--responsive--side-margin); - margin-left: var(--wp--custom--responsive--side-margin); - margin-right: var(--wp--custom--responsive--side-margin); - width: auto; - } - - table { - width: calc(100% - var(--wp--preset--spacing--50)); - } - } -} - // Tags arrowed style .post-tags { list-style: none; @@ -176,7 +159,7 @@ cite { .post-tag { $post-tag-height: 22px; - background: var(--color--primary); + background: var(--wp--preset--color--primary); border-radius: 3px 0 0 3px; display: inline-block; position: relative; @@ -188,7 +171,7 @@ cite { font-weight: var(--typography--font--default--bold); letter-spacing: 1px; text-transform: uppercase; - color: var(--color--white); + color: var(--wp--preset--color--white); text-decoration: none !important; } @@ -199,7 +182,7 @@ cite { &::before { background: #fff; border-radius: 10px; - box-shadow: inset 0 1px rgba(var(--color--white--decimal), 0.25); + box-shadow: inset 0 1px rgba(var(--wp--preset--color--white--decimal), 0.25); content: ''; height: 6px; left: 10px; @@ -211,7 +194,7 @@ cite { &::after { background: transparent; border-bottom: 11px solid transparent; - border-left: 10px solid var(--color--primary); + border-left: 10px solid var(--wp--preset--color--primary); border-top: 11px solid transparent; content: ''; position: absolute; @@ -220,14 +203,15 @@ cite { } &:hover { - background-color: var(--color--primary); + background-color: var(--wp--preset--color--primary); + a { color: white; } } &:hover::after { - border-left-color: var(--color--primary); + border-left-color: var(--wp--preset--color--primary); } } diff --git a/src/styles/base/_typography.scss b/src/styles/base/_typography.scss index 9c97e54d..076158db 100644 --- a/src/styles/base/_typography.scss +++ b/src/styles/base/_typography.scss @@ -1,6 +1,6 @@ /* Headlines */ body { - color: var(--color--text); + color: var(--wp--preset--color--text); word-break: break-word; } @@ -9,79 +9,6 @@ body { font-weight: var(--typography--font--title-bold); } -h1, -h2, -h3, -h4, -h5, -h6 { - @extend %headline_style; - margin: 0 0 var(--wp--preset--spacing--40); - padding: 0; - a { - text-decoration: none; - } -} - -h1 { - font-size: var(--wp--preset--font-size--xx-large); - @media #{$mq__phablet} {font-size: var(--wp--preset--font-size--xx-large);} -} - -h2 { - font-size: var(--wp--preset--font-size--extra-large); - @media #{$mq__phablet} {font-size: var(--wp--preset--font-size--large);} - - .woocommerce & { - font-size: var(--wp--preset--font-size--extra-large); - @media #{$mq__phablet} {font-size: var(--wp--preset--font-size--large);} - } -} - -h3 { - font-size: var(--wp--preset--font-size--extra-large); - @media #{$mq__tablet-portrait} {font-size: var(--wp--preset--font-size--medium);} -} - -h4 { - font-size: var(--wp--preset--font-size--large); - @media #{$mq__tablet} {font-size: var(--wp--preset--font-size--medium);} -} - -h5, h6 { - font-size: var(--wp--preset--font-size--medium); - @media #{$mq__tablet} {font-size: var(--wp--preset--font-size--small);} -} - - -/* Text and lists */ -li, -p { - list-style: none; - font-size: var(--wp--preset--font-size--medium); - @media #{$mq__phablet} {font-size: var(--wp--preset--font-size--small);} -} - -p { - margin: 0 0 var(--wp--preset--spacing--40); -} - -.has-title-font-family { - font-weight: var(--typography--font--title--regular); - b, strong { - font-weight: var(--typography--font--title--bold); - } -} - -b, strong { - font-weight: var(--typography--default--font-weight--bold); -} - -a { - text-decoration: none; - color: var(--color--primary); -} - ul, ol, dl { margin-top: var(--wp--preset--spacing--50); margin-bottom: var(--wp--preset--spacing--50); diff --git a/src/styles/components/_accessibility.scss b/src/styles/components/_accessibility.scss index 27e90d3e..b2c148f0 100644 --- a/src/styles/components/_accessibility.scss +++ b/src/styles/components/_accessibility.scss @@ -16,12 +16,12 @@ &.skip-link {display: block;} &:focus { - background-color: var(--color--secondary); + background-color: var(--wp--preset--color--secondary); border-radius: 3px; - box-shadow: 0 0 2px 2px rgba(var(--color--black--decimal), .5 ); + box-shadow: 0 0 2px 2px rgba(var(--wp--preset--color--black--decimal), .5 ); clip: auto !important; clip-path: none; - color: var(--color--white); + color: var(--wp--preset--color--white); font-weight: bolder; height: auto; display: block; diff --git a/src/styles/components/_blocks.scss b/src/styles/components/_blocks.scss index 13fd09a5..8ebb1a78 100644 --- a/src/styles/components/_blocks.scss +++ b/src/styles/components/_blocks.scss @@ -103,7 +103,7 @@ text-align: center; &:before { - color: var(--color--primary); + color: var(--wp--preset--color--primary); font-size: 64px; letter-spacing: 24px; padding-left: 24px; @@ -119,11 +119,11 @@ display: table; border: none; border-radius: 5px; - background: var(--color--primary); + background: var(--wp--preset--color--primary); font-size: var(--wp--preset--font-size--medium); text-decoration: none; font-weight: var(--typography--font--default--bold); - color: var(--color--white); + color: var(--wp--preset--color--white); margin-left: 0; margin-top: var(--wp--preset--spacing--40); diff --git a/src/styles/components/_comments.scss b/src/styles/components/_comments.scss index a11f63b5..873966d5 100644 --- a/src/styles/components/_comments.scss +++ b/src/styles/components/_comments.scss @@ -1,6 +1,6 @@ .entry-comments { clear: both; - background-color: var(--color--white-smoke); + background-color: var(--wp--preset--color--white-smoke); margin-top: var(--wp--preset--spacing--60); padding-top: var(--wp--preset--spacing--60); padding-bottom: var(--wp--preset--spacing--40); @@ -22,13 +22,13 @@ .navigation a { font-size: var(--wp--preset--font-size--small); font-weight: var(--typography--default--font-weight--regular); - color: var(--color--gray-dark); + color: var(--wp--preset--color--gray-dark); } p.comment-notes { font-size: var(--wp--preset--font-size--small); font-style: italic; - color: var(--color--gray-dark); + color: var(--wp--preset--color--gray-dark); } p.comments-closed, @@ -75,7 +75,7 @@ } a { - color: var(--color--text); + color: var(--wp--preset--color--text); } .avatar { @@ -94,7 +94,7 @@ line-height: $comments__avatar-size * .66; a, b { - color: var(--color--primary); + color: var(--wp--preset--color--primary); font-size: var(--wp--preset--font-size--extra-large); @media #{$mq__responsive_breakpoint} { @@ -109,17 +109,17 @@ a { font-size: var(--wp--preset--font-size--extra-small); - color: var(--color--gray); + color: var(--wp--preset--color--gray); } .comment-edit-link { opacity: 0; transition: var(--wp--custom--animations--length); - background-color: var(--color--primary); + background-color: var(--wp--preset--color--primary); margin-left: var(--wp--preset--spacing--50); padding: var(--wp--preset--spacing--20) var(--wp--preset--spacing--30); border-radius: var(--wp--preset--spacing--50); - color: var(--color--white); + color: var(--wp--preset--color--white); } } @@ -128,8 +128,8 @@ } .comment-content { - background: var(--color--white); - border: 1px solid var(--color--white-smoke); + background: var(--wp--preset--color--white); + border: 1px solid var(--wp--preset--color--white-smoke); padding: var(--wp--preset--spacing--50); margin-left: $comments__avatar-size * 1.25; margin-top: var(--wp--preset--spacing--40); @@ -146,8 +146,8 @@ a.comment-reply-link { - color: var(--color--gray-dark); - border: 1px solid var(--color--gray-light); + color: var(--wp--preset--color--gray-dark); + border: 1px solid var(--wp--preset--color--gray-light); clear: both; padding: var(--wp--preset--spacing--20) var(--wp--preset--spacing--30); border-radius: var(--wp--preset--spacing--50); @@ -157,8 +157,8 @@ transition: var(--wp--custom--animations--length); &:hover { - background-color: var(--color--primary); - color: var(--color--white); + background-color: var(--wp--preset--color--primary); + color: var(--wp--preset--color--white); } } } diff --git a/src/styles/components/_content-header.scss b/src/styles/components/_content-header.scss index e426d5d2..77ab1b46 100644 --- a/src/styles/components/_content-header.scss +++ b/src/styles/components/_content-header.scss @@ -9,7 +9,7 @@ .has-title-color { &, a { - color: var(--color--title); + color: var(--wp--preset--color--title); } } diff --git a/src/styles/components/_extras.scss b/src/styles/components/_extras.scss index 3414d882..a435e4da 100644 --- a/src/styles/components/_extras.scss +++ b/src/styles/components/_extras.scss @@ -26,7 +26,7 @@ p { width: auto; - color: var(--color--gray-dark); + color: var(--wp--preset--color--gray-dark); font-size: var(--wp--preset--font-size--small); margin-bottom: 0; margin-left: var(--wp--preset--spacing--40); @@ -38,7 +38,7 @@ } a { - color: var(--color--gray-dark); + color: var(--wp--preset--color--gray-dark); font-weight: var(--typography--font--default--bold); text-transform: uppercase; } @@ -50,11 +50,11 @@ margin-bottom: var(--wp--preset--spacing--40); font-weight: var(--typography--font--default--bold); letter-spacing: 1.5px; - color: var(--color--gray-dark); + color: var(--wp--preset--color--gray-dark); a { font-family: var(--typography--content--font-family), sans-serif; - color: var(--color--gray-dark); + color: var(--wp--preset--color--gray-dark); font-weight: var(--typography--font--default--bold); text-transform: uppercase; margin-left: var(--wp--preset--spacing--20); @@ -158,12 +158,12 @@ line-height: $pagenumber__size; border-radius: $pagenumber__size * .5; - background-color: var(--color--gray-light); - color: var(--color--gray); + background-color: var(--wp--preset--color--gray-light); + color: var(--wp--preset--color--gray); transition: var(--wp--custom--animations--length); &.current, - &:hover {color: var(--color--gray-dark);} + &:hover {color: var(--wp--preset--color--gray-dark);} &.next, &.prev { @@ -193,9 +193,9 @@ } li { - background: var(--color--white); + background: var(--wp--preset--color--white); border-radius: 15px; - border: 1px solid var(--color--gray-light); + border: 1px solid var(--wp--preset--color--gray-light); width: auto; height: 30px; line-height: 26px; @@ -208,7 +208,7 @@ font-size: var(--wp--preset--font-size--extra-small); letter-spacing: 1px; text-transform: uppercase; - color: var(--color--gray-dark); + color: var(--wp--preset--color--gray-dark); text-decoration: none !important; transition: 0.2s; } @@ -224,7 +224,7 @@ // Extra .sticky { background-color: transparent; - h1, h2 { color: var(--color--secondary)} + h1, h2 { color: var(--wp--preset--color--secondary)} } body.page, @@ -240,6 +240,6 @@ body.archive { right: 0; width: 100%; height: 100%; - box-shadow: inset 0 80px 80px -80px rgba(var(--color--black--decimal), .8); + box-shadow: inset 0 80px 80px -80px rgba(var(--wp--preset--color--black--decimal), .8); } } diff --git a/src/styles/components/_icons.scss b/src/styles/components/_icons.scss index 76884530..3e6621c5 100644 --- a/src/styles/components/_icons.scss +++ b/src/styles/components/_icons.scss @@ -72,7 +72,7 @@ i.social-ico { -@mixin material_icon($icon, $size, $color: "var(--color--black)") { +@mixin material_icon($icon, $size, $color: "var(--wp--preset--color--black)") { &:before { font-family: "Material Icons"; content: $icon; @@ -99,7 +99,7 @@ $arrowSize: 60px; &:hover { filter: inherit; - background-color: rgba(var(--color--black--decimal), .05); + background-color: rgba(var(--wp--preset--color--black--decimal), .05); } @media #{$mq__smaller-than-tablet} { @@ -136,9 +136,9 @@ $arrowSize: 60px; } .fancybox-navigation .fancybox-button--arrow_left, .fancybox-navigation .fancybox-button--arrow_right { - background-color: rgba( var(--color--white--decimal), 0 ); - &:hover {background-color: rgba( var(--color--white--decimal), .5 );} - div:before {color: var(--color--white);} + background-color: rgba( var(--wp--preset--color--white--decimal), 0 ); + &:hover {background-color: rgba( var(--wp--preset--color--white--decimal), .5 );} + div:before {color: var(--wp--preset--color--white);} &:disabled {opacity: .5;} } diff --git a/src/styles/components/_search-form.scss b/src/styles/components/_search-form.scss index 6e9d5292..72b0793b 100644 --- a/src/styles/components/_search-form.scss +++ b/src/styles/components/_search-form.scss @@ -21,7 +21,7 @@ margin: 0; padding: var(--wp--preset--spacing--30) var(--wp--preset--spacing--50); font-size: var(--wp--preset--font-size--small); - border: 1px solid var(--color--gray-light); + border: 1px solid var(--wp--preset--color--gray-light); outline: 0; box-shadow: inherit !important; } @@ -36,7 +36,7 @@ &:before { content: '\E8B6'; font-family: 'Material Icons'; - color: var(--color--white); + color: var(--wp--preset--color--white); font-size: 28px; display: block; width: 24px; diff --git a/src/styles/components/_sidebar.scss b/src/styles/components/_sidebar.scss index 124740e2..cf1821c0 100644 --- a/src/styles/components/_sidebar.scss +++ b/src/styles/components/_sidebar.scss @@ -17,7 +17,7 @@ @media #{$mq__responsive_breakpoint} { padding-top: var(--wp--preset--spacing--60); - border-top: 1px solid rgba(var(--color--black), 0.05); + border-top: 1px solid rgba(var(--wp--preset--color--black), 0.05); min-width: inherit; width: 100%; } @@ -37,6 +37,6 @@ a { text-decoration: none; - color: var(--color--text) + color: var(--wp--preset--color--text) } } diff --git a/src/styles/pages/_archive.scss b/src/styles/pages/_archive.scss index 0d2b2d79..5edb7002 100644 --- a/src/styles/pages/_archive.scss +++ b/src/styles/pages/_archive.scss @@ -17,7 +17,7 @@ body.archive { left: -100px; right: -100px; content: ''; - background-color: rgba(var(--color--black--decimal), .05); + background-color: rgba(var(--wp--preset--color--black--decimal), .05); } } diff --git a/src/styles/woo/_woo-common.scss b/src/styles/woo/_woo-common.scss index a36fd9e6..fbf2b922 100644 --- a/src/styles/woo/_woo-common.scss +++ b/src/styles/woo/_woo-common.scss @@ -44,16 +44,16 @@ body.woocommerce { .woocommerce a.button.alt, .woocommerce button.button.alt, .woocommerce input.button.alt { - background-color: var(--color--primary); + background-color: var(--wp--preset--color--primary); &:hover { - background-color: rgba(var(--color--primary--decimal), .1); + background-color: rgba(var(--wp--preset--color--primary--decimal), .1); } } .woocommerce button.button.alt.disabled { - background-color: var(--color--gray); + background-color: var(--wp--preset--color--gray); &:hover { - background-color: var(--color--gray-dark); + background-color: var(--wp--preset--color--gray-dark); } } diff --git a/src/styles/woo/_woo-pages.scss b/src/styles/woo/_woo-pages.scss index d4421085..31282920 100644 --- a/src/styles/woo/_woo-pages.scss +++ b/src/styles/woo/_woo-pages.scss @@ -6,7 +6,7 @@ body.woocommerce { li.product { padding-bottom: var(--wp--preset--spacing--50); - background-color: var(--color--white); + background-color: var(--wp--preset--color--white); display: flex; flex-direction: column; @@ -29,7 +29,7 @@ body.woocommerce { a.button { font-size: 10px; - border: 1px solid var(--color--gray-light); + border: 1px solid var(--wp--preset--color--gray-light); background-color: white; align-content: center; margin: auto; @@ -44,7 +44,7 @@ body.woocommerce { width: $add-to-cart; display: block; text-align: center; - background: var(--color--primary); + background: var(--wp--preset--color--primary); color: white; padding: 0; margin: 0; @@ -64,7 +64,7 @@ body.woocommerce { p.price, span.price { - color: var(--color--gray-dark); + color: var(--wp--preset--color--gray-dark); line-height: 2; font-size: 12px; display: block; @@ -147,7 +147,7 @@ body.woocommerce { p.price, span.price { - color: var(--color--gray); + color: var(--wp--preset--color--gray); font-size: 40px; } @@ -177,7 +177,7 @@ body.woocommerce { padding-left: var(--wp--custom--responsive--side-margin); } tr:nth-child(even) th { - background-color: var(--color--primary-dark);; + background-color: var(--wp--preset--color--primary-dark);; } } @@ -208,7 +208,7 @@ body.woocommerce { color: var(--wc-orange); } &.selected a.active~a::before { - color: var(--color--gray-light); + color: var(--wp--preset--color--gray-light); } } } diff --git a/src/styles/woo/_woo-sidebar.scss b/src/styles/woo/_woo-sidebar.scss index 385511ce..59750923 100644 --- a/src/styles/woo/_woo-sidebar.scss +++ b/src/styles/woo/_woo-sidebar.scss @@ -20,7 +20,7 @@ & > li:first-child { border: 0; } a { - color: var(--color--text); + color: var(--wp--preset--color--text); font-weight: 500; } @@ -59,7 +59,7 @@ li { height: var(--wp--custom--line-height--medium); - border-top: 1px solid rgba(var(--color--black), 0.05); + border-top: 1px solid rgba(var(--wp--preset--color--black), 0.05); font-size: var(--wp--preset--font-size--extra-small); line-height: 1; @@ -69,12 +69,12 @@ display: inline-block; &.woocommerce-Price-amount { - color: var(--color--primary); + color: var(--wp--preset--color--primary); } } .product-title { - color: var(--color--text); + color: var(--wp--preset--color--text); font-weight: var(--typography--font--title--bold); padding-top: var(--wp--preset--spacing--40); line-height: var(--wp--custom--line-height--medium); From 332a6f8511a1bb1fb753194cbbc9a2f80730b9fc Mon Sep 17 00:00:00 2001 From: Erik Golinelli Date: Sat, 11 Feb 2023 13:52:07 +0100 Subject: [PATCH 034/264] add the capability to encode theme images into avif --- bin/imagemin.mjs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/imagemin.mjs b/bin/imagemin.mjs index 6729938c..ba3d5fe0 100644 --- a/bin/imagemin.mjs +++ b/bin/imagemin.mjs @@ -1,5 +1,5 @@ import imagemin from 'imagemin'; -import imageminWebp from 'imagemin-webp'; +import imageminAvif from 'imagemin-avif'; import imageminSvgo from 'imagemin-svgo'; import imageminMozjpeg from 'imagemin-mozjpeg'; @@ -15,7 +15,7 @@ const distdir = './img'; imagemin([srcdir + '/**/*.{jpg,jpeg,png}'], { plugins: [ - imageminWebp({quality: 82}) + imageminAvif({quality: 50}) ] }).then( (files) => files.forEach(async (v) => { From 53399ea38fd51c2a97bbbbb1612d3dca0509de14 Mon Sep 17 00:00:00 2001 From: Erik Golinelli Date: Sat, 11 Feb 2023 13:52:57 +0100 Subject: [PATCH 035/264] Make theme available for translation. --- inc/theme-setup.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/inc/theme-setup.php b/inc/theme-setup.php index 01395ece..cdee6386 100644 --- a/inc/theme-setup.php +++ b/inc/theme-setup.php @@ -88,6 +88,9 @@ function modul_r_theme_setup() { // Enqueue editor styles and fonts. add_editor_style( get_template_directory() . '/build/editor.css' ); + // Make theme available for translation. + load_theme_textdomain( 'block-canvas' ); + // Add support for Block Styles. add_theme_support( 'wp-block-styles' ); From 7d44a57dcc90e56dccfb7b1b1df56d6bbce16d9c Mon Sep 17 00:00:00 2001 From: Erik Golinelli Date: Sat, 11 Feb 2023 13:53:36 +0100 Subject: [PATCH 036/264] font customizer enhancement --- inc/enqueue-style.php | 2 +- inc/third-party/fonts.json | 5888 ++++++++++++++++++------------------ src/scripts/admin/index.ts | 16 +- 3 files changed, 2956 insertions(+), 2950 deletions(-) diff --git a/inc/enqueue-style.php b/inc/enqueue-style.php index 7fa530de..f31e50c6 100644 --- a/inc/enqueue-style.php +++ b/inc/enqueue-style.php @@ -92,7 +92,7 @@ function modul_r_theme_fonts() { $weights_collection[] = intval($weight); } } - $font_query[] = "family={$family['slug']}:wght@" . implode( ";", array_reverse($weights_collection) ); + $font_query[] = "family={$family['slug']}:wght@" . implode( ";", $weights_collection ); } } diff --git a/inc/third-party/fonts.json b/inc/third-party/fonts.json index 26d8f418..72ea5128 100644 --- a/inc/third-party/fonts.json +++ b/inc/third-party/fonts.json @@ -141,19 +141,6 @@ "900" ] }, - { - "Roboto Slab": [ - "100", - "200", - "300", - "400", - "500", - "600", - "700", - "800", - "900" - ] - }, { "Ubuntu": [ "300", @@ -163,7 +150,8 @@ ] }, { - "Nunito": [ + "Roboto Slab": [ + "100", "200", "300", "400", @@ -175,10 +163,14 @@ ] }, { - "Merriweather": [ + "Nunito": [ + "200", "300", "400", + "500", + "600", "700", + "800", "900" ] }, @@ -193,13 +185,10 @@ ] }, { - "Nunito Sans": [ - "200", + "Merriweather": [ "300", "400", - "600", "700", - "800", "900" ] }, @@ -220,6 +209,17 @@ "700" ] }, + { + "Nunito Sans": [ + "200", + "300", + "400", + "600", + "700", + "800", + "900" + ] + }, { "Noto Sans KR": [ "100", @@ -332,6 +332,12 @@ "900" ] }, + { + "PT Serif": [ + "400", + "700" + ] + }, { "Inconsolata": [ "200", @@ -344,12 +350,6 @@ "900" ] }, - { - "PT Serif": [ - "400", - "700" - ] - }, { "Titillium Web": [ "200", @@ -403,6 +403,13 @@ "900" ] }, + { + "Nanum Gothic": [ + "400", + "700", + "800" + ] + }, { "DM Sans": [ "400", @@ -419,13 +426,6 @@ "700" ] }, - { - "Nanum Gothic": [ - "400", - "700", - "800" - ] - }, { "Karla": [ "200", @@ -438,25 +438,25 @@ ] }, { - "Josefin Sans": [ - "100", + "Manrope": [ "200", "300", "400", "500", "600", - "700" + "700", + "800" ] }, { - "Manrope": [ + "Josefin Sans": [ + "100", "200", "300", "400", "500", "600", - "700", - "800" + "700" ] }, { @@ -525,6 +525,13 @@ "900" ] }, + { + "Oxygen": [ + "300", + "400", + "700" + ] + }, { "Cairo": [ "200", @@ -537,18 +544,6 @@ "900" ] }, - { - "Oxygen": [ - "300", - "400", - "700" - ] - }, - { - "Anton": [ - "400" - ] - }, { "Cabin": [ "400", @@ -568,21 +563,17 @@ ] }, { - "Bebas Neue": [ + "Anton": [ "400" ] }, { - "Prompt": [ - "100", - "200", - "300", + "EB Garamond": [ "400", "500", "600", "700", - "800", - "900" + "800" ] }, { @@ -591,12 +582,21 @@ ] }, { - "EB Garamond": [ + "Bebas Neue": [ + "400" + ] + }, + { + "Prompt": [ + "100", + "200", + "300", "400", "500", "600", "700", - "800" + "800", + "900" ] }, { @@ -613,29 +613,29 @@ ] }, { - "Hind": [ + "Barlow Condensed": [ + "100", + "200", "300", "400", "500", "600", - "700" + "700", + "800", + "900" ] }, { - "Exo 2": [ - "100", - "200", + "Signika Negative": [ "300", "400", "500", "600", - "700", - "800", - "900" + "700" ] }, { - "Signika Negative": [ + "Hind": [ "300", "400", "500", @@ -644,7 +644,7 @@ ] }, { - "Barlow Condensed": [ + "Exo 2": [ "100", "200", "300", @@ -687,22 +687,6 @@ "400" ] }, - { - "Arvo": [ - "400", - "700" - ] - }, - { - "Maven Pro": [ - "400", - "500", - "600", - "700", - "800", - "900" - ] - }, { "Noto Serif JP": [ "200", @@ -715,16 +699,17 @@ ] }, { - "Teko": [ - "300", + "Maven Pro": [ "400", "500", "600", - "700" + "700", + "800", + "900" ] }, { - "Hind Madurai": [ + "Teko": [ "300", "400", "500", @@ -733,15 +718,12 @@ ] }, { - "Asap": [ + "Noto Sans HK": [ "100", - "200", "300", "400", "500", - "600", "700", - "800", "900" ] }, @@ -755,17 +737,20 @@ ] }, { - "Noto Sans HK": [ + "Jost": [ "100", + "200", "300", "400", "500", + "600", "700", + "800", "900" ] }, { - "Archivo": [ + "Asap": [ "100", "200", "300", @@ -778,12 +763,13 @@ ] }, { - "Abril Fatface": [ - "400" + "Arvo": [ + "400", + "700" ] }, { - "Jost": [ + "Archivo": [ "100", "200", "300", @@ -796,18 +782,21 @@ ] }, { - "Merriweather Sans": [ + "Hind Madurai": [ "300", "400", "500", "600", - "700", - "800" + "700" ] }, { - "Assistant": [ - "200", + "Abril Fatface": [ + "400" + ] + }, + { + "Merriweather Sans": [ "300", "400", "500", @@ -822,17 +811,18 @@ ] }, { - "Caveat": [ + "Assistant": [ + "200", + "300", "400", "500", "600", - "700" + "700", + "800" ] }, { - "Yanone Kaffeesatz": [ - "200", - "300", + "Caveat": [ "400", "500", "600", @@ -850,20 +840,18 @@ ] }, { - "Public Sans": [ + "M PLUS Rounded 1c": [ "100", - "200", "300", "400", "500", - "600", "700", "800", "900" ] }, { - "Overpass": [ + "Public Sans": [ "100", "200", "300", @@ -876,47 +864,35 @@ ] }, { - "Fira Sans Condensed": [ - "100", - "200", - "300", - "400", - "500", - "600", - "700", - "800", - "900" + "Slabo 27px": [ + "400" ] }, { - "Tajawal": [ + "Overpass": [ + "100", "200", "300", "400", "500", + "600", "700", "800", "900" ] }, { - "Slabo 27px": [ - "400" - ] - }, - { - "M PLUS Rounded 1c": [ - "100", + "Rajdhani": [ "300", "400", "500", - "700", - "800", - "900" + "600", + "700" ] }, { - "Rajdhani": [ + "Yanone Kaffeesatz": [ + "200", "300", "400", "500", @@ -938,8 +914,16 @@ ] }, { - "Indie Flower": [ - "400" + "Fira Sans Condensed": [ + "100", + "200", + "300", + "400", + "500", + "600", + "700", + "800", + "900" ] }, { @@ -952,25 +936,32 @@ ] }, { - "Barlow Semi Condensed": [ - "100", + "Tajawal": [ "200", "300", "400", "500", - "600", "700", "800", "900" ] }, { - "Zilla Slab": [ + "Indie Flower": [ + "400" + ] + }, + { + "Barlow Semi Condensed": [ + "100", + "200", "300", "400", "500", "600", - "700" + "700", + "800", + "900" ] }, { @@ -985,16 +976,12 @@ ] }, { - "Exo": [ - "100", - "200", + "Zilla Slab": [ "300", "400", "500", "600", - "700", - "800", - "900" + "700" ] }, { @@ -1002,17 +989,6 @@ "400" ] }, - { - "Red Hat Display": [ - "300", - "400", - "500", - "600", - "700", - "800", - "900" - ] - }, { "IBM Plex Mono": [ "100", @@ -1032,13 +1008,6 @@ "700" ] }, - { - "Nanum Myeongjo": [ - "400", - "700", - "800" - ] - }, { "Signika": [ "300", @@ -1049,27 +1018,31 @@ ] }, { - "Fredoka One": [ - "400" + "Nanum Myeongjo": [ + "400", + "700", + "800" ] }, { - "Permanent Marker": [ + "Secular One": [ "400" ] }, { - "Secular One": [ + "Fredoka One": [ "400" ] }, { - "Chakra Petch": [ + "Red Hat Display": [ "300", "400", "500", "600", - "700" + "700", + "800", + "900" ] }, { @@ -1078,6 +1051,11 @@ "700" ] }, + { + "Permanent Marker": [ + "400" + ] + }, { "Sarabun": [ "100", @@ -1096,7 +1074,7 @@ ] }, { - "Noto Sans Arabic": [ + "Exo": [ "100", "200", "300", @@ -1109,12 +1087,16 @@ ] }, { - "Lilita One": [ - "400" + "Archivo Narrow": [ + "400", + "500", + "600", + "700" ] }, { - "Archivo Narrow": [ + "Chakra Petch": [ + "300", "400", "500", "600", @@ -1122,31 +1104,39 @@ ] }, { - "Acme": [ + "Bree Serif": [ "400" ] }, { - "Bree Serif": [ + "Lilita One": [ "400" ] }, { - "Alegreya Sans": [ + "Acme": [ + "400" + ] + }, + { + "Noto Sans Arabic": [ "100", + "200", "300", "400", "500", + "600", "700", "800", "900" ] }, { - "Vollkorn": [ + "Alegreya Sans": [ + "100", + "300", "400", "500", - "600", "700", "800", "900" @@ -1170,7 +1160,17 @@ ] }, { - "Didact Gothic": [ + "Vollkorn": [ + "400", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Alfa Slab One": [ "400" ] }, @@ -1180,10 +1180,8 @@ ] }, { - "Rowdies": [ - "300", - "400", - "700" + "Didact Gothic": [ + "400" ] }, { @@ -1191,6 +1189,18 @@ "400" ] }, + { + "Archivo Black": [ + "400" + ] + }, + { + "Rowdies": [ + "300", + "400", + "700" + ] + }, { "Noto Kufi Arabic": [ "100", @@ -1204,11 +1214,6 @@ "900" ] }, - { - "Alfa Slab One": [ - "400" - ] - }, { "Cinzel": [ "400", @@ -1233,42 +1238,29 @@ ] }, { - "Space Mono": [ - "400", - "700" + "Covered By Your Grace": [ + "400" ] }, { - "Yantramanav": [ - "100", - "300", + "Alegreya": [ "400", "500", + "600", "700", + "800", "900" ] }, { - "Archivo Black": [ - "400" - ] - }, - { - "Almarai": [ + "IBM Plex Sans Arabic": [ + "100", + "200", "300", - "400", - "700", - "800" - ] - }, - { - "Alegreya": [ "400", "500", "600", - "700", - "800", - "900" + "700" ] }, { @@ -1304,48 +1296,25 @@ ] }, { - "IBM Plex Sans Arabic": [ - "100", - "200", - "300", - "400", - "500", - "600", - "700" - ] - }, - { - "Amiri": [ + "Space Mono": [ "400", "700" ] }, { - "Asap Condensed": [ - "200", + "Yantramanav": [ + "100", "300", "400", "500", - "600", "700", - "800", "900" ] }, { - "Ubuntu Condensed": [ - "400" - ] - }, - { - "Martel": [ - "200", - "300", + "Amiri": [ "400", - "600", - "700", - "800", - "900" + "700" ] }, { @@ -1355,29 +1324,22 @@ ] }, { - "Courgette": [ + "Ubuntu Condensed": [ "400" ] }, { - "Spectral": [ - "200", + "Almarai": [ "300", "400", - "500", - "600", "700", "800" ] }, { - "PT Sans Caption": [ - "400", - "700" - ] - }, - { - "Baloo 2": [ + "Spectral": [ + "200", + "300", "400", "500", "600", @@ -1386,7 +1348,7 @@ ] }, { - "Great Vibes": [ + "Courgette": [ "400" ] }, @@ -1421,22 +1383,10 @@ ] }, { - "Patua One": [ - "400" - ] - }, - { - "Covered By Your Grace": [ - "400" - ] - }, - { - "Rokkitt": [ - "100", + "Martel": [ "200", "300", "400", - "500", "600", "700", "800", @@ -1444,20 +1394,32 @@ ] }, { - "Paytone One": [ + "Great Vibes": [ "400" ] }, + { + "PT Sans Caption": [ + "400", + "700" + ] + }, { "Crete Round": [ "400" ] }, { - "Sora": [ - "100", - "200", + "Cormorant": [ "300", + "400", + "500", + "600", + "700" + ] + }, + { + "Baloo 2": [ "400", "500", "600", @@ -1471,25 +1433,38 @@ ] }, { - "Cormorant": [ + "Rokkitt": [ + "100", + "200", "300", "400", "500", "600", - "700" + "700", + "800", + "900" ] }, { - "Outfit": [ - "100", + "Paytone One": [ + "400" + ] + }, + { + "Sora": [ + "100", "200", "300", "400", "500", "600", "700", - "800", - "900" + "800" + ] + }, + { + "Patua One": [ + "400" ] }, { @@ -1512,25 +1487,14 @@ ] }, { - "Gothic A1": [ - "100", - "200", - "300", + "Passion One": [ "400", - "500", - "600", "700", - "800", "900" ] }, { - "Kaushan Script": [ - "400" - ] - }, - { - "Noto Sans Devanagari": [ + "Montserrat Alternates": [ "100", "200", "300", @@ -1543,7 +1507,9 @@ ] }, { - "Figtree": [ + "Gothic A1": [ + "100", + "200", "300", "400", "500", @@ -1554,19 +1520,17 @@ ] }, { - "Passion One": [ - "400", - "700", - "900" + "Kaushan Script": [ + "400" ] }, { - "Alata": [ + "Yellowtail": [ "400" ] }, { - "Montserrat Alternates": [ + "Outfit": [ "100", "200", "300", @@ -1589,16 +1553,15 @@ ] }, { - "Gelasio": [ + "Asap Condensed": [ + "200", + "300", "400", "500", "600", - "700" - ] - }, - { - "Pathway Gothic One": [ - "400" + "700", + "800", + "900" ] }, { @@ -1608,7 +1571,7 @@ ] }, { - "Titan One": [ + "Cookie": [ "400" ] }, @@ -1618,12 +1581,12 @@ ] }, { - "Yellowtail": [ + "Alata": [ "400" ] }, { - "Francois One": [ + "Pathway Gothic One": [ "400" ] }, @@ -1641,16 +1604,18 @@ ] }, { - "Saira Condensed": [ - "100", - "200", - "300", - "400", - "500", - "600", - "700", - "800", - "900" + "Gloria Hallelujah": [ + "400" + ] + }, + { + "Titan One": [ + "400" + ] + }, + { + "Francois One": [ + "400" ] }, { @@ -1667,7 +1632,7 @@ ] }, { - "Cookie": [ + "Antic Slab": [ "400" ] }, @@ -1678,43 +1643,37 @@ ] }, { - "Michroma": [ - "400" + "Gelasio": [ + "400", + "500", + "600", + "700" ] }, { - "Gloria Hallelujah": [ + "Michroma": [ "400" ] }, { - "PT Mono": [ + "Carter One": [ "400" ] }, { - "Antic Slab": [ + "PT Mono": [ "400" ] }, { - "Eczar": [ + "Noto Serif KR": [ + "200", + "300", "400", "500", "600", "700", - "800" - ] - }, - { - "Staatliches": [ - "400" - ] - }, - { - "Quattrocento Sans": [ - "400", - "700" + "900" ] }, { @@ -1731,34 +1690,28 @@ ] }, { - "Concert One": [ - "400" - ] - }, - { - "Noto Serif KR": [ - "200", - "300", + "Eczar": [ "400", "500", "600", "700", - "900" + "800" ] }, { - "Rubik Mono One": [ + "Sacramento": [ "400" ] }, { - "Sacramento": [ + "Concert One": [ "400" ] }, { - "Carter One": [ - "400" + "Unna": [ + "400", + "700" ] }, { @@ -1775,48 +1728,49 @@ ] }, { - "Unna": [ + "El Messiri": [ "400", + "500", + "600", "700" ] }, { - "Marcellus": [ - "400" - ] - }, - { - "El Messiri": [ + "Saira Condensed": [ + "100", + "200", + "300", "400", "500", "600", - "700" + "700", + "800", + "900" ] }, { - "Press Start 2P": [ + "Rubik Mono One": [ "400" ] }, { - "Luckiest Guy": [ + "Marcellus": [ "400" ] }, { - "Macondo": [ + "Press Start 2P": [ "400" ] }, { - "Patrick Hand": [ - "400" + "Quattrocento Sans": [ + "400", + "700" ] }, { - "Saira": [ - "100", - "200", + "Figtree": [ "300", "400", "500", @@ -1827,25 +1781,18 @@ ] }, { - "Yeseva One": [ + "Luckiest Guy": [ "400" ] }, { - "Cantarell": [ - "400", - "700" - ] - }, - { - "Gruppo": [ + "Patrick Hand": [ "400" ] }, { - "Monda": [ - "400", - "700" + "Macondo": [ + "400" ] }, { @@ -1862,46 +1809,40 @@ ] }, { - "Josefin Slab": [ + "Chivo": [ "100", "200", "300", "400", "500", "600", - "700" + "700", + "800", + "900" ] }, { - "Creepster": [ + "Staatliches": [ "400" ] }, { - "Padauk": [ - "400", - "700" - ] - }, - { - "News Cycle": [ + "Bodoni Moda": [ "400", - "700" + "500", + "600", + "700", + "800", + "900" ] }, { - "Alice": [ + "Yeseva One": [ "400" ] }, { - "Quattrocento": [ - "400", - "700" - ] - }, - { - "Commissioner": [ + "Noto Sans Devanagari": [ "100", "200", "300", @@ -1914,17 +1855,13 @@ ] }, { - "Bodoni Moda": [ + "Cantarell": [ "400", - "500", - "600", - "700", - "800", - "900" + "700" ] }, { - "Chivo": [ + "Saira": [ "100", "200", "300", @@ -1937,57 +1874,85 @@ ] }, { - "Actor": [ - "400" - ] - }, - { - "Sen": [ + "Josefin Slab": [ + "100", + "200", + "300", "400", - "700", - "800" + "500", + "600", + "700" ] }, { - "Sawarabi Gothic": [ - "400" + "Quattrocento": [ + "400", + "700" ] }, { - "Marck Script": [ + "Creepster": [ "400" ] }, { - "Advent Pro": [ - "100", + "Plus Jakarta Sans": [ "200", "300", "400", "500", "600", "700", - "800", - "900" + "800" ] }, { - "Cuprum": [ + "Monda": [ "400", - "500", - "600", "700" ] }, { - "Plus Jakarta Sans": [ + "Marck Script": [ + "400" + ] + }, + { + "Alice": [ + "400" + ] + }, + { + "Commissioner": [ + "100", "200", "300", "400", "500", "600", "700", - "800" + "800", + "900" + ] + }, + { + "Cuprum": [ + "400", + "500", + "600", + "700" + ] + }, + { + "News Cycle": [ + "400", + "700" + ] + }, + { + "Oleo Script": [ + "400", + "700" ] }, { @@ -1996,79 +1961,91 @@ ] }, { - "Handlee": [ + "Sawarabi Gothic": [ "400" ] }, { - "Mitr": [ + "Crimson Pro": [ "200", "300", "400", "500", "600", - "700" + "700", + "800", + "900" ] }, { - "Special Elite": [ - "400" + "Advent Pro": [ + "100", + "200", + "300", + "400", + "500", + "600", + "700", + "800", + "900" ] }, { - "Ubuntu Mono": [ + "Sen": [ "400", - "700" + "700", + "800" ] }, { - "Vidaloka": [ - "400" + "Mitr": [ + "200", + "300", + "400", + "500", + "600", + "700" ] }, { - "Parisienne": [ + "Handlee": [ "400" ] }, { - "Ultra": [ + "Bangers": [ "400" ] }, { - "Aleo": [ - "300", + "Ubuntu Mono": [ "400", "700" ] }, { - "Poiret One": [ + "Parisienne": [ "400" ] }, { - "Bangers": [ + "Vidaloka": [ "400" ] }, { - "Crimson Pro": [ - "200", - "300", - "400", - "500", - "600", - "700", - "800", - "900" + "Ultra": [ + "400" ] }, { - "Oleo Script": [ - "400", - "700" + "Special Elite": [ + "400" + ] + }, + { + "Allura": [ + "400" ] }, { @@ -2090,18 +2067,18 @@ ] }, { - "IBM Plex Sans Condensed": [ - "100", + "Mukta Malar": [ "200", "300", "400", "500", "600", - "700" + "700", + "800" ] }, { - "Allura": [ + "Poiret One": [ "400" ] }, @@ -2111,19 +2088,45 @@ ] }, { - "Mukta Malar": [ + "Kosugi Maru": [ + "400" + ] + }, + { + "IBM Plex Sans Condensed": [ + "100", "200", "300", "400", "500", "600", + "700" + ] + }, + { + "Playfair Display SC": [ + "400", "700", - "800" + "900" ] }, { - "Kosugi Maru": [ - "400" + "Unbounded": [ + "200", + "300", + "400", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Aleo": [ + "300", + "400", + "700" ] }, { @@ -2144,10 +2147,9 @@ ] }, { - "Playfair Display SC": [ + "Amaranth": [ "400", - "700", - "900" + "700" ] }, { @@ -2155,6 +2157,11 @@ "400" ] }, + { + "Ropa Sans": [ + "400" + ] + }, { "Encode Sans Condensed": [ "100", @@ -2169,8 +2176,13 @@ ] }, { - "Unbounded": [ - "200", + "Arsenal": [ + "400", + "700" + ] + }, + { + "Merienda": [ "300", "400", "500", @@ -2181,38 +2193,24 @@ ] }, { - "Ropa Sans": [ + "Architects Daughter": [ "400" ] }, { - "Arsenal": [ - "400", - "700" - ] - }, - { - "Amaranth": [ - "400", - "700" + "Playball": [ + "400" ] }, { - "Viga": [ + "Actor": [ "400" ] }, { - "Saira Semi Condensed": [ - "100", - "200", - "300", + "Gudea": [ "400", - "500", - "600", - "700", - "800", - "900" + "700" ] }, { @@ -2229,23 +2227,12 @@ ] }, { - "Merienda": [ - "300", - "400", - "500", - "600", - "700", - "800", - "900" - ] - }, - { - "Playball": [ + "Homemade Apple": [ "400" ] }, { - "Noto Sans Thai": [ + "Saira Semi Condensed": [ "100", "200", "300", @@ -2258,60 +2245,55 @@ ] }, { - "Architects Daughter": [ + "Sanchez": [ "400" ] }, { - "Gudea": [ + "Lusitana": [ "400", "700" ] }, { - "Alegreya Sans SC": [ - "100", - "300", + "Nanum Gothic Coding": [ "400", - "500", - "700", - "800", - "900" - ] - }, - { - "Fugaz One": [ - "400" + "700" ] }, { - "Homemade Apple": [ + "Viga": [ "400" ] }, { - "Noto Serif SC": [ - "200", - "300", + "Ruda": [ "400", "500", "600", "700", + "800", "900" ] }, { - "Ruda": [ + "Mada": [ + "200", + "300", "400", "500", "600", "700", - "800", "900" ] }, { - "Mada": [ + "Tenor Sans": [ + "400" + ] + }, + { + "Noto Serif SC": [ "200", "300", "400", @@ -2322,24 +2304,26 @@ ] }, { - "Sanchez": [ + "Baskervville": [ "400" ] }, { - "Lusitana": [ - "400", - "700" + "Sriracha": [ + "400" ] }, { - "Libre Caslon Text": [ + "Hind Vadodara": [ + "300", "400", + "500", + "600", "700" ] }, { - "Nanum Gothic Coding": [ + "Istok Web": [ "400", "700" ] @@ -2349,50 +2333,40 @@ "400" ] }, - { - "Hind Vadodara": [ - "300", - "400", - "500", - "600", - "700" - ] - }, { "Bungee": [ "400" ] }, { - "Istok Web": [ + "Padauk": [ "400", "700" ] }, { - "Blinker": [ + "Alegreya Sans SC": [ "100", - "200", "300", "400", - "600", + "500", "700", "800", "900" ] }, { - "Audiowide": [ + "Gruppo": [ "400" ] }, { - "Sriracha": [ + "Alex Brush": [ "400" ] }, { - "Alex Brush": [ + "Audiowide": [ "400" ] }, @@ -2408,65 +2382,51 @@ "900" ] }, - { - "Tenor Sans": [ - "400" - ] - }, - { - "Baskervville": [ - "400" - ] - }, - { - "Roboto Flex": [ - "400" - ] - }, { "Nanum Pen Script": [ "400" ] }, { - "Cousine": [ + "Bai Jamjuree": [ + "200", + "300", "400", + "500", + "600", "700" ] }, { - "Palanquin": [ - "100", - "200", - "300", + "Libre Caslon Text": [ "400", - "500", - "600", "700" ] }, { - "Bad Script": [ - "400" + "Cousine": [ + "400", + "700" ] }, { - "Shrikhand": [ + "Bad Script": [ "400" ] }, { - "Monoton": [ + "Fugaz One": [ "400" ] }, { - "Unica One": [ + "Roboto Flex": [ "400" ] }, { - "Bai Jamjuree": [ + "Palanquin": [ + "100", "200", "300", "400", @@ -2475,6 +2435,11 @@ "700" ] }, + { + "Monoton": [ + "400" + ] + }, { "Red Hat Text": [ "300", @@ -2485,16 +2450,28 @@ ] }, { - "BenchNine": [ + "Noto Sans Thai": [ + "100", + "200", "300", "400", - "700" + "500", + "600", + "700", + "800", + "900" ] }, { - "Quantico": [ + "Blinker": [ + "100", + "200", + "300", "400", - "700" + "600", + "700", + "800", + "900" ] }, { @@ -2507,61 +2484,51 @@ ] }, { - "Zeyada": [ - "400" - ] - }, - { - "Readex Pro": [ - "200", + "BenchNine": [ "300", "400", - "500", - "600", "700" ] }, { - "Pragati Narrow": [ + "Unica One": [ + "400" + ] + }, + { + "Quantico": [ "400", "700" ] }, { - "Noto Naskh Arabic": [ + "Economica": [ "400", - "500", - "600", "700" ] }, { - "Sigmar One": [ + "Shrikhand": [ "400" ] }, { - "Fira Mono": [ - "400", - "500", - "700" + "Rock Salt": [ + "400" ] }, { - "Rock Salt": [ + "Allerta Stencil": [ "400" ] }, { - "Cabin Condensed": [ - "400", - "500", - "600", - "700" + "Mandali": [ + "400" ] }, { - "League Spartan": [ + "Roboto Serif": [ "100", "200", "300", @@ -2574,27 +2541,24 @@ ] }, { - "Alef": [ - "400", - "700" + "Castoro": [ + "400" ] }, { - "Allerta Stencil": [ - "400" + "Pragati Narrow": [ + "400", + "700" ] }, { - "Roboto Serif": [ - "100", + "Readex Pro": [ "200", "300", "400", "500", "600", - "700", - "800", - "900" + "700" ] }, { @@ -2607,22 +2571,19 @@ ] }, { - "Economica": [ + "Noto Naskh Arabic": [ "400", + "500", + "600", "700" ] }, { - "Noto Serif Bengali": [ - "100", - "200", - "300", + "Cabin Condensed": [ "400", "500", "600", - "700", - "800", - "900" + "700" ] }, { @@ -2631,22 +2592,25 @@ ] }, { - "Adamina": [ - "400" - ] - }, - { - "Castoro": [ + "Sigmar One": [ "400" ] }, { - "Mandali": [ - "400" + "League Spartan": [ + "100", + "200", + "300", + "400", + "500", + "600", + "700", + "800", + "900" ] }, { - "Epilogue": [ + "Noto Serif Bengali": [ "100", "200", "300", @@ -2659,21 +2623,27 @@ ] }, { - "Pridi": [ + "Adamina": [ + "400" + ] + }, + { + "Epilogue": [ + "100", "200", "300", "400", "500", "600", - "700" + "700", + "800", + "900" ] }, { - "Jura": [ - "300", + "Fira Mono": [ "400", "500", - "600", "700" ] }, @@ -2696,38 +2666,46 @@ ] }, { - "Caveat Brush": [ - "400" + "Jura": [ + "300", + "400", + "500", + "600", + "700" ] }, { - "Cantata One": [ - "400" + "Pridi": [ + "200", + "300", + "400", + "500", + "600", + "700" ] }, { - "Rufina": [ - "400", - "700" + "Pontano Sans": [ + "400" ] }, { - "Voltaire": [ + "Caveat Brush": [ "400" ] }, { - "Pontano Sans": [ + "Itim": [ "400" ] }, { - "Sorts Mill Goudy": [ + "Yatra One": [ "400" ] }, { - "Julius Sans One": [ + "Pangolin": [ "400" ] }, @@ -2741,6 +2719,11 @@ "700" ] }, + { + "Sorts Mill Goudy": [ + "400" + ] + }, { "Laila": [ "300", @@ -2751,18 +2734,34 @@ ] }, { - "Courier Prime": [ + "Julius Sans One": [ + "400" + ] + }, + { + "Alef": [ "400", "700" ] }, { - "Lalezar": [ + "Rufina": [ + "400", + "700" + ] + }, + { + "Black Han Sans": [ "400" ] }, { - "Pangolin": [ + "Days One": [ + "400" + ] + }, + { + "Cantata One": [ "400" ] }, @@ -2778,13 +2777,18 @@ ] }, { - "Electrolize": [ + "Nothing You Could Do": [ "400" ] }, { - "Antonio": [ - "100", + "Courier Prime": [ + "400", + "700" + ] + }, + { + "Athiti": [ "200", "300", "400", @@ -2794,10 +2798,31 @@ ] }, { - "Black Han Sans": [ + "Lalezar": [ "400" ] }, + { + "Krub": [ + "200", + "300", + "400", + "500", + "600", + "700" + ] + }, + { + "Antonio": [ + "100", + "200", + "300", + "400", + "500", + "600", + "700" + ] + }, { "Martel Sans": [ "200", @@ -2819,38 +2844,34 @@ ] }, { - "Nothing You Could Do": [ + "Italianno": [ "400" ] }, { - "Itim": [ + "Black Ops One": [ "400" ] }, { - "Italianno": [ + "Holtwood One SC": [ "400" ] }, { - "Days One": [ + "Electrolize": [ "400" ] }, { - "Athiti": [ - "200", - "300", - "400", - "500", - "600", - "700" + "Pinyon Script": [ + "400" ] }, { - "Yatra One": [ - "400" + "Gentium Book Basic": [ + "400", + "700" ] }, { @@ -2860,56 +2881,46 @@ ] }, { - "Six Caps": [ + "Lustria": [ "400" ] }, { - "Gentium Book Basic": [ - "400", - "700" - ] - }, - { - "Black Ops One": [ + "Voltaire": [ "400" ] }, { - "Pinyon Script": [ + "Six Caps": [ "400" ] }, { - "Krub": [ - "200", + "Comic Neue": [ "300", "400", - "500", - "600", "700" ] }, { - "Holtwood One SC": [ - "400" + "Anonymous Pro": [ + "400", + "700" ] }, { - "Forum": [ + "Reenie Beanie": [ "400" ] }, { - "Boogaloo": [ + "Forum": [ "400" ] }, { - "Comic Neue": [ - "300", - "400", - "700" + "Calistoga": [ + "400" ] }, { @@ -2922,26 +2933,15 @@ ] }, { - "Calistoga": [ - "400" - ] - }, - { - "Reenie Beanie": [ + "Gilda Display": [ "400" ] }, { - "Anonymous Pro": [ - "400", - "700" - ] - }, - { - "Sansita": [ + "Londrina Solid": [ + "100", + "300", "400", - "700", - "800", "900" ] }, @@ -2951,68 +2951,65 @@ ] }, { - "Chewy": [ + "Boogaloo": [ "400" ] }, { - "Stint Ultra Condensed": [ - "400" + "Glegoo": [ + "400", + "700" ] }, { - "Antic": [ + "Esteban": [ "400" ] }, { - "Aclonica": [ + "Chewy": [ "400" ] }, { - "PT Serif Caption": [ + "Cutive Mono": [ "400" ] }, { - "Glegoo": [ - "400", - "700" - ] - }, - { - "Londrina Solid": [ - "100", + "Zen Maru Gothic": [ "300", "400", + "500", + "700", "900" ] }, { - "Lustria": [ + "PT Serif Caption": [ "400" ] }, { - "Esteban": [ - "400" + "Sansita": [ + "400", + "700", + "800", + "900" ] }, { - "Kameron": [ - "400", - "700" + "Antic": [ + "400" ] }, { - "Cabin Sketch": [ - "400", - "700" + "Squada One": [ + "400" ] }, { - "Leckerli One": [ + "Amethysta": [ "400" ] }, @@ -3022,61 +3019,66 @@ ] }, { - "Cutive Mono": [ - "400" + "Cabin Sketch": [ + "400", + "700" ] }, { - "Coda": [ - "400", - "800" + "Leckerli One": [ + "400" ] }, { - "Zen Maru Gothic": [ + "Fraunces": [ + "100", + "200", "300", "400", "500", + "600", "700", + "800", "900" ] }, { - "Squada One": [ + "VT323": [ "400" ] }, { - "VT323": [ + "Aclonica": [ "400" ] }, { - "Berkshire Swash": [ - "400" + "Noto Sans Tamil": [ + "100", + "200", + "300", + "400", + "500", + "600", + "700", + "800", + "900" ] }, { - "Gilda Display": [ + "Berkshire Swash": [ "400" ] }, { - "Aldrich": [ + "Short Stack": [ "400" ] }, { - "Noto Sans Tamil": [ - "100", - "200", - "300", + "Kameron": [ "400", - "500", - "600", - "700", - "800", - "900" + "700" ] }, { @@ -3088,11 +3090,6 @@ "800" ] }, - { - "Shadows Into Light Two": [ - "400" - ] - }, { "Fira Code": [ "300", @@ -3103,9 +3100,7 @@ ] }, { - "Mali": [ - "200", - "300", + "Markazi Text": [ "400", "500", "600", @@ -3113,9 +3108,8 @@ ] }, { - "Jaldi": [ - "400", - "700" + "Shadows Into Light Two": [ + "400" ] }, { @@ -3124,22 +3118,22 @@ ] }, { - "Skranji": [ - "400", - "700" + "Aldrich": [ + "400" ] }, { - "Inter Tight": [ - "100", - "200", + "Mrs Saint Delafield": [ + "400" + ] + }, + { + "Lemonada": [ "300", "400", "500", "600", - "700", - "800", - "900" + "700" ] }, { @@ -3148,17 +3142,7 @@ ] }, { - "Mrs Saint Delafield": [ - "400" - ] - }, - { - "Short Stack": [ - "400" - ] - }, - { - "Fraunces": [ + "K2D": [ "100", "200", "300", @@ -3166,52 +3150,48 @@ "500", "600", "700", - "800", - "900" + "800" ] }, { - "Syne": [ + "Amita": [ "400", - "500", - "600", - "700", - "800" + "700" ] }, { - "Lemonada": [ - "300", + "Coda": [ "400", - "500", - "600", - "700" + "800" ] }, { - "Markazi Text": [ + "Newsreader": [ + "200", + "300", "400", "500", "600", - "700" - ] - }, - { - "Amita": [ - "400", - "700" + "700", + "800" ] }, { - "Reem Kufi": [ + "Inter Tight": [ + "100", + "200", + "300", "400", "500", "600", - "700" + "700", + "800", + "900" ] }, { - "Hind Guntur": [ + "Mali": [ + "200", "300", "400", "500", @@ -3219,25 +3199,27 @@ "700" ] }, + { + "Average Sans": [ + "400" + ] + }, { "Fredericka the Great": [ "400" ] }, { - "Arima Madurai": [ - "100", - "200", + "Yrsa": [ "300", "400", "500", - "700", - "800", - "900" + "600", + "700" ] }, { - "Saira Extra Condensed": [ + "JetBrains Mono": [ "100", "200", "300", @@ -3245,66 +3227,48 @@ "500", "600", "700", - "800", - "900" + "800" ] }, { - "Average Sans": [ + "Jua": [ "400" ] }, { - "Syncopate": [ - "400", - "700" - ] - }, - { - "Rozha One": [ + "Bevan": [ "400" ] }, { - "Zen Kaku Gothic New": [ + "Hind Guntur": [ "300", "400", "500", - "700", - "900" - ] - }, - { - "Bevan": [ - "400" + "600", + "700" ] }, { - "JetBrains Mono": [ - "100", - "200", - "300", + "Syncopate": [ "400", - "500", - "600", - "700", - "800" + "700" ] }, { - "Herr Von Muellerhoff": [ - "400" + "Atkinson Hyperlegible": [ + "400", + "700" ] }, { - "Cinzel Decorative": [ + "Skranji": [ "400", - "700", - "900" + "700" ] }, { - "Big Shoulders Display": [ + "Saira Extra Condensed": [ "100", "200", "300", @@ -3316,13 +3280,26 @@ "900" ] }, + { + "Reem Kufi": [ + "400", + "500", + "600", + "700" + ] + }, + { + "Herr Von Muellerhoff": [ + "400" + ] + }, { "Basic": [ "400" ] }, { - "Amethysta": [ + "Rozha One": [ "400" ] }, @@ -3332,99 +3309,111 @@ ] }, { - "Yrsa": [ - "300", + "Syne": [ "400", "500", "600", - "700" + "700", + "800" ] }, { - "Racing Sans One": [ - "400" + "Zen Kaku Gothic New": [ + "300", + "400", + "500", + "700", + "900" ] }, { - "Nanum Brush Script": [ + "Racing Sans One": [ "400" ] }, { - "Graduate": [ - "400" + "Jaldi": [ + "400", + "700" ] }, { - "Petrona": [ - "100", - "200", - "300", + "Palanquin Dark": [ "400", "500", "600", + "700" + ] + }, + { + "Cinzel Decorative": [ + "400", "700", - "800", "900" ] }, { - "Georama": [ + "Arima Madurai": [ "100", "200", "300", "400", "500", - "600", "700", "800", "900" ] }, { - "Do Hyeon": [ + "Capriola": [ "400" ] }, { - "Miriam Libre": [ - "400", - "700" + "Mate": [ + "400" ] }, { - "Gochi Hand": [ + "Arbutus Slab": [ "400" ] }, { - "Palanquin Dark": [ - "400", - "500", - "600", - "700" + "Graduate": [ + "400" ] }, { - "Capriola": [ + "Rammetto One": [ "400" ] }, { - "Jua": [ - "400" + "Big Shoulders Display": [ + "100", + "200", + "300", + "400", + "500", + "600", + "700", + "800", + "900" ] }, { - "Telex": [ + "Do Hyeon": [ "400" ] }, { - "Biryani": [ + "Petrona": [ + "100", "200", "300", "400", + "500", "600", "700", "800", @@ -3432,63 +3421,65 @@ ] }, { - "Suez One": [ + "Nanum Brush Script": [ "400" ] }, { - "Rammetto One": [ + "Gochi Hand": [ "400" ] }, { - "Rye": [ + "Knewave": [ "400" ] }, { - "Arbutus Slab": [ - "400" + "Biryani": [ + "200", + "300", + "400", + "600", + "700", + "800", + "900" ] }, { - "Mate": [ + "Telex": [ "400" ] }, { - "Changa One": [ + "Quintessential": [ "400" ] }, { - "Libre Barcode 39": [ + "Annie Use Your Telescope": [ "400" ] }, { - "Charm": [ - "400", - "700" - ] - }, - { - "Alatsi": [ + "Rye": [ "400" ] }, { - "Annie Use Your Telescope": [ - "400" + "Charm": [ + "400", + "700" ] }, { - "La Belle Aurore": [ - "400" + "Corben": [ + "400", + "700" ] }, { - "Knewave": [ + "GFS Didot": [ "400" ] }, @@ -3498,24 +3489,24 @@ ] }, { - "STIX Two Text": [ - "400", - "500", - "600", - "700" + "Changa One": [ + "400" ] }, { - "BioRhyme": [ + "Livvic": [ + "100", "200", "300", "400", + "500", + "600", "700", - "800" + "900" ] }, { - "Oranienbaum": [ + "La Belle Aurore": [ "400" ] }, @@ -3536,7 +3527,7 @@ ] }, { - "K2D": [ + "Albert Sans": [ "100", "200", "300", @@ -3544,81 +3535,77 @@ "500", "600", "700", - "800" - ] - }, - { - "Just Another Hand": [ - "400" + "800", + "900" ] }, { - "Krona One": [ + "Marcellus SC": [ "400" ] }, { - "Quintessential": [ + "Just Another Hand": [ "400" ] }, { - "GFS Didot": [ - "400" + "Enriqueta": [ + "400", + "500", + "600", + "700" ] }, { - "Wallpoet": [ - "400" + "Georama": [ + "100", + "200", + "300", + "400", + "500", + "600", + "700", + "800", + "900" ] }, { - "Marcellus SC": [ + "Oranienbaum": [ "400" ] }, { - "Trocchi": [ + "Alatsi": [ "400" ] }, { - "Enriqueta": [ - "400", - "500", - "600", - "700" - ] - }, - { - "Kristi": [ + "Pattaya": [ "400" ] }, { - "Albert Sans": [ - "100", + "BioRhyme": [ "200", "300", "400", - "500", - "600", "700", - "800", - "900" + "800" ] }, { - "Darker Grotesque": [ - "300", + "Overlock": [ "400", - "500", - "600", "700", - "800", "900" ] }, + { + "Kristi": [ + "400" + ] + }, { "Schoolbell": [ "400" @@ -3629,22 +3616,21 @@ "400" ] }, + { + "Wallpoet": [ + "400" + ] + }, { "Average": [ "400" ] }, { - "Noto Sans Malayalam": [ - "100", - "200", + "DM Mono": [ "300", "400", - "500", - "600", - "700", - "800", - "900" + "500" ] }, { @@ -3652,59 +3638,57 @@ "400" ] }, - { - "Corben": [ - "400", - "700" - ] - }, { "Niconne": [ "400" ] }, { - "Belleza": [ + "Allerta": [ "400" ] }, { - "Scada": [ + "Darker Grotesque": [ + "300", "400", - "700" + "500", + "600", + "700", + "800", + "900" ] }, { - "DM Mono": [ - "300", - "400", - "500" + "Libre Barcode 39": [ + "400" ] }, { - "Overpass Mono": [ + "Noto Sans Malayalam": [ + "100", + "200", "300", "400", "500", "600", - "700" + "700", + "800", + "900" ] }, { - "Allerta": [ + "Carrois Gothic": [ "400" ] }, { - "Livvic": [ - "100", - "200", + "Cormorant Infant": [ "300", "400", "500", "600", - "700", - "900" + "700" ] }, { @@ -3713,31 +3697,29 @@ ] }, { - "Nobile": [ + "Scada": [ "400", - "500", "700" ] }, { - "Alegreya SC": [ + "STIX Two Text": [ "400", "500", - "700", - "800", - "900" + "600", + "700" ] }, { - "Pattaya": [ - "400" + "Nobile": [ + "400", + "500", + "700" ] }, { - "Overlock": [ - "400", - "700", - "900" + "Belleza": [ + "400" ] }, { @@ -3748,7 +3730,17 @@ ] }, { - "Bowlby One SC": [ + "Krona One": [ + "400" + ] + }, + { + "Cedarville Cursive": [ + "400" + ] + }, + { + "Rochester": [ "400" ] }, @@ -3762,43 +3754,59 @@ ] }, { - "Cormorant Infant": [ - "300", + "Bowlby One SC": [ + "400" + ] + }, + { + "Rambla": [ "400", - "500", - "600", "700" ] }, { - "Rochester": [ + "Trocchi": [ "400" ] }, { - "Carrois Gothic": [ + "Coustard": [ + "400", + "900" + ] + }, + { + "Petit Formal Script": [ "400" ] }, { - "Rambla": [ + "Alegreya SC": [ "400", - "700" + "500", + "700", + "800", + "900" ] }, { - "Delius": [ - "400" + "Dongle": [ + "300", + "400", + "700" ] }, { - "Cedarville Cursive": [ + "Delius": [ "400" ] }, { - "Atkinson Hyperlegible": [ + "Overpass Mono": [ + "300", "400", + "500", + "600", "700" ] }, @@ -3808,73 +3816,82 @@ ] }, { - "Petit Formal Script": [ + "Magra": [ + "400", + "700" + ] + }, + { + "Bellefair": [ "400" ] }, { - "Source Sans 3": [ + "Maitree": [ "200", "300", "400", "500", "600", - "700", - "800", - "900" + "700" ] }, { - "Coustard": [ - "400", - "900" + "Henny Penny": [ + "400" ] }, { - "Fjord One": [ - "400" + "Miriam Libre": [ + "400", + "700" ] }, { - "Henny Penny": [ + "Suez One": [ "400" ] }, { - "Magra": [ - "400", - "700" + "Fjord One": [ + "400" ] }, { - "Bellefair": [ + "Qwigley": [ "400" ] }, { - "Qwigley": [ + "Chonburi": [ "400" ] }, { - "Chonburi": [ + "Bungee Inline": [ "400" ] }, { - "Kosugi": [ + "Stint Ultra Condensed": [ "400" ] }, { - "Seaweed Script": [ + "Yesteryear": [ "400" ] }, { - "Judson": [ + "Source Sans 3": [ + "200", + "300", "400", - "700" + "500", + "600", + "700", + "800", + "900" ] }, { @@ -3891,32 +3908,53 @@ ] }, { - "Yesteryear": [ + "Kiwi Maru": [ + "300", + "400", + "500" + ] + }, + { + "Fauna One": [ "400" ] }, { - "Dongle": [ - "300", - "400", - "700" + "Seaweed Script": [ + "400" ] }, { - "Maitree": [ + "Nixie One": [ + "400" + ] + }, + { + "Noto Sans Hebrew": [ + "100", "200", "300", "400", "500", "600", - "700" + "700", + "800", + "900" ] }, { - "David Libre": [ - "400", - "500", - "700" + "Kosugi": [ + "400" + ] + }, + { + "Aladin": [ + "400" + ] + }, + { + "Bubblegum Sans": [ + "400" ] }, { @@ -3926,146 +3964,171 @@ ] }, { - "Averia Serif Libre": [ - "300", + "Alike": [ + "400" + ] + }, + { + "Judson": [ "400", "700" ] }, { - "Newsreader": [ - "200", + "Grand Hotel": [ + "400" + ] + }, + { + "Pirata One": [ + "400" + ] + }, + { + "Irish Grover": [ + "400" + ] + }, + { + "Averia Serif Libre": [ "300", "400", - "500", - "600", - "700", - "800" + "700" ] }, { - "Bungee Inline": [ + "Kite One": [ "400" ] }, { - "Nixie One": [ + "NTR": [ "400" ] }, { - "Bubblegum Sans": [ + "Rubik Moonrocks": [ "400" ] }, { - "Alike": [ + "Bentham": [ "400" ] }, { - "Aladin": [ + "Ovo": [ "400" ] }, { - "Kiwi Maru": [ - "300", + "Sniglet": [ "400", - "500" + "800" ] }, { - "Noto Sans Mono": [ - "100", + "Mukta Vaani": [ "200", "300", "400", "500", "600", "700", - "800", - "900" + "800" ] }, { - "Grand Hotel": [ - "400" + "Allan": [ + "400", + "700" ] }, { - "Noto Sans Hebrew": [ - "100", - "200", - "300", + "Podkova": [ "400", "500", "600", "700", - "800", - "900" + "800" ] }, { - "Rubik Moonrocks": [ - "400" + "Averia Libre": [ + "300", + "400", + "700" ] }, { - "NTR": [ + "Limelight": [ "400" ] }, { - "Fauna One": [ + "Spinnaker": [ "400" ] }, { - "Sniglet": [ + "Proza Libre": [ "400", + "500", + "600", + "700", "800" ] }, { - "Ovo": [ - "400" - ] - }, - { - "Hanuman": [ + "Noto Serif Display": [ "100", + "200", "300", "400", + "500", + "600", "700", + "800", "900" ] }, { - "Waiting for the Sunrise": [ + "Klee One": [ + "400", + "600" + ] + }, + { + "Rasa": [ + "300", + "400", + "500", + "600", + "700" + ] + }, + { + "Mate SC": [ "400" ] }, { - "Kite One": [ + "Merienda One": [ "400" ] }, { - "Irish Grover": [ + "IM Fell English SC": [ "400" ] }, { - "Stardos Stencil": [ - "400", - "700" + "Fondamento": [ + "400" ] }, { - "Mukta Vaani": [ - "200", - "300", + "Baloo Tamma 2": [ "400", "500", "600", @@ -4074,59 +4137,67 @@ ] }, { - "Manjari": [ - "100", - "400", - "700" + "Bungee Shade": [ + "400" ] }, { - "Caladea": [ + "Grandstander": [ + "100", + "200", + "300", "400", - "700" - ] - }, - { - "Spinnaker": [ - "400" + "500", + "600", + "700", + "800", + "900" ] }, { - "Fondamento": [ + "Marmelad": [ "400" ] }, { - "Merienda One": [ - "400" + "Manjari": [ + "100", + "400", + "700" ] }, { - "Cambay": [ + "Caladea": [ "400", "700" ] }, { - "Bentham": [ + "Waiting for the Sunrise": [ "400" ] }, { - "Marmelad": [ - "400" + "Balsamiq Sans": [ + "400", + "700" ] }, { - "Julee": [ + "Suranna": [ "400" ] }, { - "Vollkorn SC": [ + "Hepta Slab": [ + "100", + "200", + "300", "400", + "500", "600", "700", + "800", "900" ] }, @@ -4137,101 +4208,98 @@ ] }, { - "Oxygen Mono": [ + "Gabriela": [ "400" ] }, { - "Balsamiq Sans": [ + "Noto Sans Mono": [ + "100", + "200", + "300", "400", - "700" + "500", + "600", + "700", + "800", + "900" ] }, { - "Limelight": [ + "Noto Color Emoji": [ "400" ] }, { - "Slabo 13px": [ - "400" + "Hanuman": [ + "100", + "300", + "400", + "700", + "900" ] }, { - "Averia Libre": [ - "300", + "Thasadith": [ "400", "700" ] }, { - "Rakkas": [ + "Slabo 13px": [ "400" ] }, { - "Suranna": [ + "Jockey One": [ "400" ] }, { - "Baloo Tamma 2": [ - "400", - "500", - "600", - "700", - "800" + "Meera Inimai": [ + "400" ] }, { - "Jockey One": [ + "Kelly Slab": [ "400" ] }, { - "Klee One": [ - "400", - "600" + "Oxygen Mono": [ + "400" ] }, { - "Noto Color Emoji": [ + "Dawning of a New Day": [ "400" ] }, { - "Grandstander": [ - "100", - "200", - "300", + "Cambay": [ "400", - "500", - "600", - "700", - "800", - "900" + "700" ] }, { - "Proza Libre": [ - "400", - "500", - "600", - "700", - "800" + "Rakkas": [ + "400" ] }, { - "Rasa": [ + "Sunflower": [ "300", - "400", "500", - "600", "700" ] }, { - "Hepta Slab": [ + "Mallanna": [ + "400" + ] + }, + { + "Anek Malayalam": [ "100", "200", "300", @@ -4239,30 +4307,26 @@ "500", "600", "700", - "800", - "900" - ] - }, - { - "IM Fell English SC": [ - "400" + "800" ] }, { - "Thasadith": [ + "Marvel": [ "400", "700" ] }, { - "Sunflower": [ + "Rosario": [ "300", + "400", "500", + "600", "700" ] }, { - "Mallanna": [ + "Viaoda Libre": [ "400" ] }, @@ -4272,23 +4336,20 @@ ] }, { - "Dawning of a New Day": [ - "400" - ] - }, - { - "Gabriela": [ + "Calligraffitti": [ "400" ] }, { - "Bungee Shade": [ + "Julee": [ "400" ] }, { - "Allan": [ + "Brygada 1918": [ "400", + "500", + "600", "700" ] }, @@ -4306,58 +4367,66 @@ ] }, { - "Podkova": [ + "BIZ UDPGothic": [ + "400", + "700" + ] + }, + { + "Vollkorn SC": [ "400", - "500", "600", "700", - "800" + "900" ] }, { - "Mate SC": [ + "Gurajada": [ "400" ] }, { - "Marvel": [ - "400", - "700" + "Copse": [ + "400" ] }, { - "Noto Serif Display": [ - "100", - "200", - "300", + "Kurale": [ + "400" + ] + }, + { + "Baloo Da 2": [ "400", "500", "600", "700", - "800", - "900" + "800" ] }, { - "Kelly Slab": [ + "Goudy Bookletter 1911": [ "400" ] }, { - "Mirza": [ + "Stardos Stencil": [ "400", - "500", - "600", "700" ] }, { - "Gurajada": [ + "IM Fell English": [ "400" ] }, { - "Rosario": [ + "McLaren": [ + "400" + ] + }, + { + "Fredoka": [ "300", "400", "500", @@ -4366,138 +4435,150 @@ ] }, { - "Meera Inimai": [ - "400" + "Aref Ruqaa": [ + "400", + "700" ] }, { - "Vazirmatn": [ - "100", - "200", - "300", + "David Libre": [ "400", "500", - "600", - "700", - "800", - "900" + "700" ] }, { - "Silkscreen": [ + "Share": [ "400", "700" ] }, { - "Calligraffitti": [ + "Bowlby One": [ "400" ] }, { - "Brygada 1918": [ + "Baloo Paaji 2": [ "400", "500", "600", - "700" + "700", + "800" ] }, { - "Cutive": [ - "400" + "Fahkwang": [ + "200", + "300", + "400", + "500", + "600", + "700" ] }, { - "Share": [ + "Oxanium": [ + "200", + "300", "400", - "700" + "500", + "600", + "700", + "800" ] }, { - "Bowlby One": [ + "Cutive": [ "400" ] }, { - "Copse": [ - "400" + "Grenze Gotisch": [ + "100", + "200", + "300", + "400", + "500", + "600", + "700", + "800", + "900" ] }, { - "Goudy Bookletter 1911": [ + "Metrophobic": [ "400" ] }, { - "McLaren": [ + "Molengo": [ "400" ] }, { - "Fredoka": [ - "300", - "400", - "500", - "600", - "700" + "ZCOOL XiaoWei": [ + "400" ] }, { - "Baloo Da 2": [ + "IBM Plex Sans Thai": [ + "100", + "200", + "300", "400", "500", "600", - "700", - "800" - ] - }, - { - "Aref Ruqaa": [ - "400", "700" ] }, { - "Brawler": [ - "400", - "700" + "Tenali Ramakrishna": [ + "400" ] }, { - "Oxanium": [ - "200", + "Cormorant SC": [ "300", "400", "500", "600", - "700", - "800" + "700" ] }, { - "IM Fell English": [ + "Love Ya Like A Sister": [ "400" ] }, { - "Kurale": [ + "Zeyada": [ "400" ] }, { - "Baloo Paaji 2": [ + "Fanwood Text": [ + "400" + ] + }, + { + "Sansita Swashed": [ + "300", "400", "500", "600", "700", - "800" + "800", + "900" ] }, { - "IBM Plex Sans Thai": [ - "100", - "200", - "300", + "Cambo": [ + "400" + ] + }, + { + "Mirza": [ "400", "500", "600", @@ -4505,12 +4586,22 @@ ] }, { - "Meddon": [ + "Gugi": [ "400" ] }, { - "Grenze Gotisch": [ + "Pompiere": [ + "400" + ] + }, + { + "Emilys Candy": [ + "400" + ] + }, + { + "M PLUS 1": [ "100", "200", "300", @@ -4523,47 +4614,65 @@ ] }, { - "ZCOOL XiaoWei": [ - "400" + "Cormorant Upright": [ + "300", + "400", + "500", + "600", + "700" ] }, { - "Molengo": [ + "Oleo Script Swash Caps": [ + "400", + "700" + ] + }, + { + "Meddon": [ "400" ] }, { - "Gugi": [ + "Ma Shan Zheng": [ "400" ] }, { - "Cormorant SC": [ + "Turret Road": [ + "200", "300", "400", "500", - "600", - "700" + "700", + "800" ] }, { - "Fanwood Text": [ + "Odibee Sans": [ "400" ] }, { - "Sansita Swashed": [ - "300", + "Silkscreen": [ "400", - "500", - "600", - "700", - "800", - "900" + "700" ] }, { - "Anek Malayalam": [ + "Andika": [ + "400", + "700" + ] + }, + { + "Brawler": [ + "400", + "700" + ] + }, + { + "Vazirmatn": [ "100", "200", "300", @@ -4571,35 +4680,30 @@ "500", "600", "700", - "800" - ] - }, - { - "Pirata One": [ - "400" + "800", + "900" ] }, { - "Pompiere": [ + "Style Script": [ "400" ] }, { - "Love Ya Like A Sister": [ + "Nerko One": [ "400" ] }, { - "Cormorant Upright": [ - "300", + "Vesper Libre": [ "400", "500", - "600", - "700" + "700", + "900" ] }, { - "Metrophobic": [ + "Mouse Memoirs": [ "400" ] }, @@ -4609,35 +4713,31 @@ ] }, { - "Turret Road": [ - "200", - "300", + "Baloo Thambi 2": [ "400", "500", + "600", "700", "800" ] }, { - "M PLUS 1": [ - "100", - "200", - "300", - "400", - "500", - "600", - "700", - "800", - "900" + "UnifrakturMaguntia": [ + "400" ] }, { - "Cambo": [ + "Sue Ellen Francisco": [ "400" ] }, { - "Fahkwang": [ + "Zen Antique": [ + "400" + ] + }, + { + "Kodchasan": [ "200", "300", "400", @@ -4647,59 +4747,53 @@ ] }, { - "Odibee Sans": [ + "Patrick Hand SC": [ "400" ] }, { - "League Gothic": [ - "400" + "Shippori Mincho B1": [ + "400", + "500", + "600", + "700", + "800" ] }, { - "UnifrakturMaguntia": [ + "Nova Mono": [ "400" ] }, { - "Andika": [ - "400", - "700" - ] - }, - { - "Oleo Script Swash Caps": [ - "400", - "700" + "Gravitas One": [ + "400" ] }, { - "Ma Shan Zheng": [ + "IM Fell DW Pica": [ "400" ] }, { - "BIZ UDPGothic": [ - "400", - "700" + "Homenaje": [ + "400" ] }, { - "Tillana": [ - "400", - "500", - "600", - "700", - "800" + "Inder": [ + "400" ] }, { - "Tenali Ramakrishna": [ + "IM Fell Double Pica": [ "400" ] }, { - "Baloo Thambi 2": [ + "Spectral SC": [ + "200", + "300", "400", "500", "600", @@ -4708,29 +4802,26 @@ ] }, { - "Style Script": [ + "Mansalva": [ "400" ] }, { - "Montserrat Subrayada": [ - "400", - "700" + "Radley": [ + "400" ] }, { - "Kadwa": [ + "Farro": [ + "300", "400", + "500", "700" ] }, { - "Gravitas One": [ - "400" - ] - }, - { - "Mouse Memoirs": [ + "Flamenco": [ + "300", "400" ] }, @@ -4742,139 +4833,156 @@ ] }, { - "IM Fell DW Pica": [ - "400" + "Tillana": [ + "400", + "500", + "600", + "700", + "800" ] }, { - "Emilys Candy": [ + "Duru Sans": [ "400" ] }, { - "Inder": [ + "Italiana": [ "400" ] }, { - "Zen Antique": [ + "Geo": [ "400" ] }, { - "Sue Ellen Francisco": [ + "Rouge Script": [ "400" ] }, { - "Spectral SC": [ - "200", + "Akshar": [ "300", "400", "500", "600", - "700", - "800" + "700" ] }, { - "Patrick Hand SC": [ - "400" + "Montserrat Subrayada": [ + "400", + "700" ] }, { - "Italiana": [ - "400" + "Libre Bodoni": [ + "400", + "500", + "600", + "700" ] }, { - "Farro": [ + "Hahmlet": [ + "100", + "200", "300", "400", "500", - "700" + "600", + "700", + "800", + "900" ] }, { - "Nova Mono": [ + "Montez": [ "400" ] }, { - "Mansalva": [ + "Bakbak One": [ "400" ] }, { - "Homenaje": [ - "400" + "Kadwa": [ + "400", + "700" ] }, { - "Slackey": [ + "Allison": [ "400" ] }, { - "ZCOOL QingKe HuangYou": [ + "Elsie": [ + "400", + "900" + ] + }, + { + "Megrim": [ "400" ] }, { - "Shippori Mincho B1": [ + "Zen Old Mincho": [ "400", "500", "600", "700", - "800" + "900" ] }, { - "IM Fell Double Pica": [ + "Sedgwick Ave": [ "400" ] }, { - "Vesper Libre": [ - "400", - "500", - "700", - "900" + "Chelsea Market": [ + "400" ] }, { - "Geo": [ + "League Gothic": [ "400" ] }, { - "Bakbak One": [ + "Metamorphous": [ "400" ] }, { - "Radley": [ - "400" + "Buenard": [ + "400", + "700" ] }, { - "Montaga": [ + "Fresca": [ "400" ] }, { - "Nerko One": [ + "Mr De Haviland": [ "400" ] }, { - "Megrim": [ + "Montaga": [ "400" ] }, { - "Rouge Script": [ - "400" + "Harmattan": [ + "400", + "700" ] }, { @@ -4883,36 +4991,34 @@ ] }, { - "Montez": [ + "Supermercado One": [ "400" ] }, { - "Hahmlet": [ - "100", - "200", - "300", + "Poly": [ + "400" + ] + }, + { + "Noto Nastaliq Urdu": [ "400", "500", "600", - "700", - "800", - "900" + "700" ] }, { - "Kodchasan": [ + "Big Shoulders Text": [ + "100", "200", "300", "400", "500", "600", - "700" - ] - }, - { - "Chelsea Market": [ - "400" + "700", + "800", + "900" ] }, { @@ -4921,7 +5027,10 @@ ] }, { - "Libre Bodoni": [ + "IBM Plex Sans KR": [ + "100", + "200", + "300", "400", "500", "600", @@ -4929,12 +5038,12 @@ ] }, { - "Sedgwick Ave": [ + "Mako": [ "400" ] }, { - "Fresca": [ + "Slackey": [ "400" ] }, @@ -4944,21 +5053,17 @@ ] }, { - "Duru Sans": [ + "Della Respira": [ "400" ] }, { - "Harmattan": [ - "400", - "700" + "Tiro Devanagari Hindi": [ + "400" ] }, { - "Noto Sans Bengali": [ - "100", - "200", - "300", + "Besley": [ "400", "500", "600", @@ -4968,25 +5073,28 @@ ] }, { - "Zen Old Mincho": [ + "Source Serif 4": [ + "200", + "300", "400", "500", "600", "700", + "800", "900" ] }, { - "Battambang": [ - "100", + "Zen Kaku Gothic Antique": [ "300", "400", + "500", "700", "900" ] }, { - "Big Shoulders Text": [ + "Noto Sans Bengali": [ "100", "200", "300", @@ -4999,44 +5107,28 @@ ] }, { - "Metamorphous": [ - "400" - ] - }, - { - "IBM Plex Sans KR": [ - "100", - "200", - "300", + "Baloo Chettan 2": [ "400", "500", "600", - "700" - ] - }, - { - "Supermercado One": [ - "400" - ] - }, - { - "Mr De Haviland": [ - "400" + "700", + "800" ] }, { - "Flamenco": [ - "300", + "Baumans": [ "400" ] }, { - "Poly": [ - "400" + "Arya": [ + "400", + "700" ] }, { - "Source Serif 4": [ + "Encode Sans Expanded": [ + "100", "200", "300", "400", @@ -5048,36 +5140,35 @@ ] }, { - "Arya": [ - "400", - "700" + "Oregano": [ + "400" ] }, { - "Buenard": [ - "400", - "700" + "Syne Mono": [ + "400" ] }, { - "Elsie": [ + "Expletus Sans": [ "400", - "900" + "500", + "600", + "700" ] }, { - "Hanalei Fill": [ + "Happy Monkey": [ "400" ] }, { - "RocknRoll One": [ + "Hanalei Fill": [ "400" ] }, { - "KoHo": [ - "200", + "Atma": [ "300", "400", "500", @@ -5086,61 +5177,53 @@ ] }, { - "Asul": [ + "KoHo": [ + "200", + "300", "400", + "500", + "600", "700" ] }, { - "Viaoda Libre": [ - "400" - ] - }, - { - "Amarante": [ - "400" - ] - }, - { - "Della Respira": [ - "400" - ] - }, - { - "Numans": [ - "400" - ] - }, - { - "Oregano": [ - "400" + "Battambang": [ + "100", + "300", + "400", + "700", + "900" ] }, { - "Noto Nastaliq Urdu": [ + "Inknut Antiqua": [ + "300", "400", "500", "600", - "700" + "700", + "800", + "900" ] }, { - "Syne Mono": [ + "Convergence": [ "400" ] }, { - "Tiro Devanagari Hindi": [ + "Amarante": [ "400" ] }, { - "Mako": [ - "400" + "Asul": [ + "400", + "700" ] }, { - "Encode Sans Expanded": [ + "Lexend Zetta": [ "100", "200", "300", @@ -5153,26 +5236,22 @@ ] }, { - "Ms Madi": [ + "Aguafina Script": [ "400" ] }, { - "Convergence": [ + "Libre Caslon Display": [ "400" ] }, { - "Baloo Chettan 2": [ - "400", - "500", - "600", - "700", - "800" + "Euphoria Script": [ + "400" ] }, { - "Happy Monkey": [ + "Notable": [ "400" ] }, @@ -5182,102 +5261,92 @@ ] }, { - "Expletus Sans": [ - "400", - "500", - "600", - "700" + "RocknRoll One": [ + "400" ] }, { - "Lexend Zetta": [ - "100", - "200", - "300", - "400", - "500", - "600", - "700", - "800", - "900" + "Ms Madi": [ + "400" ] }, { - "Averia Gruesa Libre": [ + "Shojumaru": [ "400" ] }, { - "Original Surfer": [ + "Raleway Dots": [ "400" ] }, { - "Ceviche One": [ + "BhuTuka Expanded One": [ "400" ] }, { - "Atma": [ - "300", - "400", - "500", - "600", - "700" + "Dokdo": [ + "400" ] }, { - "Notable": [ + "Ceviche One": [ "400" ] }, { - "Aguafina Script": [ + "Orienta": [ "400" ] }, { - "Belgrano": [ + "Original Surfer": [ "400" ] }, { - "BhuTuka Expanded One": [ + "Jomhuria": [ "400" ] }, { - "Major Mono Display": [ - "400" + "Kufam": [ + "400", + "500", + "600", + "700", + "800", + "900" ] }, { - "Anaheim": [ + "Numans": [ "400" ] }, { - "Euphoria Script": [ + "Yusei Magic": [ "400" ] }, { - "Orienta": [ + "Anaheim": [ "400" ] }, { - "Shojumaru": [ + "Overlock SC": [ "400" ] }, { - "Jomhuria": [ + "Averia Gruesa Libre": [ "400" ] }, { - "Noto Sans Sinhala": [ + "Alexandria": [ "100", "200", "300", @@ -5290,23 +5359,25 @@ ] }, { - "Allison": [ - "400" + "Mountains of Christmas": [ + "400", + "700" ] }, { - "Libre Barcode 39 Extended Text": [ + "Share Tech": [ "400" ] }, { - "Over the Rainbow": [ + "Dela Gothic One": [ "400" ] }, { - "Share Tech": [ - "400" + "B612 Mono": [ + "400", + "700" ] }, { @@ -5315,104 +5386,74 @@ ] }, { - "Dela Gothic One": [ + "Timmana": [ "400" ] }, { - "Federo": [ + "Salsa": [ "400" ] }, { - "Galada": [ + "Goblin One": [ "400" ] }, { - "Salsa": [ + "Major Mono Display": [ "400" ] }, { - "Baumans": [ + "Over the Rainbow": [ "400" ] }, { - "Raleway Dots": [ + "Galada": [ "400" ] }, { - "Yusei Magic": [ + "Vast Shadow": [ "400" ] }, { - "Goblin One": [ + "Hurricane": [ "400" ] }, { - "Akshar": [ - "300", + "Lekton": [ "400", - "500", - "600", "700" ] }, { - "Tienne": [ - "400", - "700", - "900" - ] - }, - { - "Alexandria": [ - "100", - "200", - "300", - "400", - "500", - "600", - "700", - "800", - "900" - ] - }, - { - "Zen Kaku Gothic Antique": [ - "300", - "400", - "500", - "700", - "900" + "Alike Angular": [ + "400" ] }, { - "Lekton": [ - "400", - "700" + "Federo": [ + "400" ] }, { - "Mountains of Christmas": [ - "400", - "700" + "Belgrano": [ + "400" ] }, { - "Bilbo Swash Caps": [ + "Clicker Script": [ "400" ] }, { - "B612 Mono": [ - "400", - "700" + "Trykker": [ + "400" ] }, { @@ -5421,17 +5462,22 @@ ] }, { - "Dokdo": [ + "Bubbler One": [ "400" ] }, { - "Freckle Face": [ + "Coiny": [ "400" ] }, { - "Chau Philomene One": [ + "Finger Paint": [ + "400" + ] + }, + { + "Freckle Face": [ "400" ] }, @@ -5441,12 +5487,12 @@ ] }, { - "Clicker Script": [ + "Headland One": [ "400" ] }, { - "Tomorrow": [ + "Noto Sans Sinhala": [ "100", "200", "300", @@ -5459,22 +5505,21 @@ ] }, { - "Vast Shadow": [ - "400" - ] - }, - { - "Trykker": [ - "400" - ] - }, - { - "Baloo Bhai 2": [ + "Noto Sans Georgian": [ + "100", + "200", + "300", "400", "500", "600", "700", - "800" + "800", + "900" + ] + }, + { + "Bilbo Swash Caps": [ + "400" ] }, { @@ -5485,7 +5530,9 @@ ] }, { - "Inknut Antiqua": [ + "Encode Sans Semi Expanded": [ + "100", + "200", "300", "400", "500", @@ -5496,46 +5543,25 @@ ] }, { - "Poller One": [ - "400" - ] - }, - { - "Life Savers": [ - "400", - "700", - "800" - ] - }, - { - "Alike Angular": [ - "400" - ] - }, - { - "Aboreto": [ - "400" - ] - }, - { - "Finger Paint": [ + "Hi Melody": [ "400" ] }, { - "Codystar": [ - "300", + "Eater": [ "400" ] }, { - "Reggae One": [ + "Nova Round": [ "400" ] }, { - "Sail": [ - "400" + "Tienne": [ + "400", + "700", + "900" ] }, { @@ -5547,23 +5573,24 @@ ] }, { - "Bubbler One": [ + "Faster One": [ "400" ] }, { - "Hi Melody": [ + "Peralta": [ "400" ] }, { - "Headland One": [ + "Zen Kurenaido": [ "400" ] }, { - "Faster One": [ - "400" + "Goldman": [ + "400", + "700" ] }, { @@ -5574,12 +5601,28 @@ ] }, { - "Coiny": [ + "Noto Serif Khojki": [ + "400", + "500", + "600", + "700" + ] + }, + { + "Chau Philomene One": [ "400" ] }, { - "Recursive": [ + "BIZ UDPMincho": [ + "400", + "700" + ] + }, + { + "Tomorrow": [ + "100", + "200", "300", "400", "500", @@ -5590,66 +5633,54 @@ ] }, { - "Walter Turncoat": [ + "Codystar": [ + "300", "400" ] }, { - "Noto Serif Khojki": [ - "400", - "500", - "600", - "700" - ] - }, - { - "Zen Kurenaido": [ + "Shanti": [ "400" ] }, { - "Goldman": [ - "400", - "700" + "Noto Sans Syloti Nagri": [ + "400" ] }, { - "Delius Swash Caps": [ + "Wendy One": [ "400" ] }, { - "Besley": [ - "400", - "500", - "600", - "700", - "800", - "900" + "Xanh Mono": [ + "400" ] }, { - "Noto Sans Syloti Nagri": [ + "Balthazar": [ "400" ] }, { - "Libre Caslon Display": [ + "Poller One": [ "400" ] }, { - "Ruslan Display": [ + "Pavanam": [ "400" ] }, { - "Wendy One": [ + "Libre Barcode 39 Extended Text": [ "400" ] }, { - "Kufam": [ + "Recursive": [ + "300", "400", "500", "600", @@ -5659,17 +5690,31 @@ ] }, { - "Timmana": [ + "Baloo Bhai 2": [ + "400", + "500", + "600", + "700", + "800" + ] + }, + { + "Give You Glory": [ "400" ] }, { - "Pavanam": [ + "Noto Serif Ahom": [ "400" ] }, { - "Nova Round": [ + "Aboreto": [ + "400" + ] + }, + { + "ZCOOL QingKe HuangYou": [ "400" ] }, @@ -5685,42 +5730,42 @@ ] }, { - "Crafty Girls": [ + "Mochiy Pop One": [ "400" ] }, { - "Noto Serif Ahom": [ + "Crafty Girls": [ "400" ] }, { - "Just Me Again Down Here": [ + "Ruslan Display": [ "400" ] }, { - "Give You Glory": [ + "Cantora One": [ "400" ] }, { - "Cantora One": [ + "Lily Script One": [ "400" ] }, { - "Lily Script One": [ + "League Script": [ "400" ] }, { - "Peralta": [ + "Walter Turncoat": [ "400" ] }, { - "Encode Sans Semi Expanded": [ + "Lexend Exa": [ "100", "200", "300", @@ -5733,12 +5778,7 @@ ] }, { - "Balthazar": [ - "400" - ] - }, - { - "Eater": [ + "Artifika": [ "400" ] }, @@ -5755,22 +5795,12 @@ ] }, { - "Shanti": [ - "400" - ] - }, - { - "Overlock SC": [ - "400" - ] - }, - { - "Xanh Mono": [ + "Sail": [ "400" ] }, { - "Mochiy Pop One": [ + "Just Me Again Down Here": [ "400" ] }, @@ -5780,72 +5810,29 @@ ] }, { - "Hurricane": [ - "400" - ] - }, - { - "Noto Sans Georgian": [ - "100", - "200", - "300", - "400", - "500", - "600", - "700", - "800", - "900" - ] - }, - { - "Artifika": [ + "Delius Swash Caps": [ "400" ] }, { - "Anek Telugu": [ - "100", - "200", - "300", - "400", - "500", - "600", - "700", - "800" - ] - }, - { - "Lexend Giga": [ - "100", - "200", - "300", + "Life Savers": [ "400", - "500", - "600", "700", - "800", - "900" + "800" ] }, { - "Port Lligat Sans": [ + "Saira Stencil One": [ "400" ] }, { - "Scope One": [ + "Port Lligat Sans": [ "400" ] }, { - "Inria Serif": [ - "300", - "400", - "700" - ] - }, - { - "Piazzolla": [ + "Lexend Giga": [ "100", "200", "300", @@ -5858,7 +5845,12 @@ ] }, { - "Sassy Frass": [ + "Tauri": [ + "400" + ] + }, + { + "Ephesis": [ "400" ] }, @@ -5876,41 +5868,37 @@ ] }, { - "Saira Stencil One": [ + "Loved by the King": [ "400" ] }, { - "Loved by the King": [ + "Bigshot One": [ "400" ] }, { - "Ephesis": [ + "Gamja Flower": [ "400" ] }, { - "Cormorant Unicase": [ - "300", - "400", - "500", - "600", - "700" + "Prosto One": [ + "400" ] }, { - "Modak": [ + "Scope One": [ "400" ] }, { - "Kotta One": [ + "Voces": [ "400" ] }, { - "Tauri": [ + "Modak": [ "400" ] }, @@ -5921,26 +5909,12 @@ ] }, { - "Lexend Mega": [ - "100", - "200", + "Cormorant Unicase": [ "300", "400", "500", "600", - "700", - "800", - "900" - ] - }, - { - "Sarpanch": [ - "400", - "500", - "600", - "700", - "800", - "900" + "700" ] }, { @@ -5953,62 +5927,39 @@ ] }, { - "League Script": [ - "400" - ] - }, - { - "Lexend Exa": [ - "100", - "200", - "300", - "400", - "500", - "600", - "700", - "800", - "900" - ] - }, - { - "Voces": [ - "400" - ] - }, - { - "Bigshot One": [ + "Kotta One": [ "400" ] }, - { - "Chathura": [ - "100", - "300", - "400", - "700", - "800" - ] - }, { "Dynalight": [ "400" ] }, { - "Almendra": [ + "Inria Serif": [ + "300", "400", "700" ] }, { - "Gorditas": [ + "Andada Pro": [ "400", - "700" + "500", + "600", + "700", + "800" ] }, { - "Prosto One": [ - "400" + "Sarpanch": [ + "400", + "500", + "600", + "700", + "800", + "900" ] }, { @@ -6017,22 +5968,23 @@ ] }, { - "Vibur": [ - "400" + "Almendra": [ + "400", + "700" ] }, { - "Libre Barcode 39 Text": [ + "Sonsie One": [ "400" ] }, { - "Gamja Flower": [ + "Vibur": [ "400" ] }, { - "Azeret Mono": [ + "Piazzolla": [ "100", "200", "300", @@ -6045,7 +5997,7 @@ ] }, { - "Sonsie One": [ + "Libre Barcode 39 Text": [ "400" ] }, @@ -6056,11 +6008,6 @@ "700" ] }, - { - "Akaya Telivigala": [ - "400" - ] - }, { "Sumana": [ "400", @@ -6075,42 +6022,38 @@ ] }, { - "Shalimar": [ - "400" + "Anek Telugu": [ + "100", + "200", + "300", + "400", + "500", + "600", + "700", + "800" ] }, { - "Yeon Sung": [ + "Akaya Telivigala": [ "400" ] }, - { - "Cherry Swash": [ - "400", - "700" - ] - }, { "Imprima": [ "400" ] }, { - "Andada Pro": [ + "Sulphur Point": [ + "300", "400", - "500", - "600", - "700", - "800" + "700" ] }, { - "Baloo Bhaijaan 2": [ + "Cherry Swash": [ "400", - "500", - "600", - "700", - "800" + "700" ] }, { @@ -6120,8 +6063,16 @@ ] }, { - "The Girl Next Door": [ - "400" + "Azeret Mono": [ + "100", + "200", + "300", + "400", + "500", + "600", + "700", + "800", + "900" ] }, { @@ -6135,71 +6086,65 @@ ] }, { - "Inria Sans": [ - "300", - "400", - "700" - ] - }, - { - "Medula One": [ + "Cherry Cream Soda": [ "400" ] }, { - "Rubik Dirt": [ + "Frijole": [ "400" ] }, { - "Libre Barcode 128": [ + "Yeon Sung": [ "400" ] }, { - "Ruthie": [ + "The Girl Next Door": [ "400" ] }, { - "Frijole": [ - "400" + "Bellota": [ + "300", + "400", + "700" ] }, { - "Asar": [ + "Reggae One": [ "400" ] }, { - "Cherry Cream Soda": [ + "Londrina Outline": [ "400" ] }, { - "Londrina Outline": [ + "Libre Barcode 128": [ "400" ] }, { - "Gotu": [ + "MedievalSharp": [ "400" ] }, { - "Rationale": [ + "Asar": [ "400" ] }, { - "MedievalSharp": [ + "Medula One": [ "400" ] }, { - "Ranga": [ - "400", - "700" + "Chango": [ + "400" ] }, { @@ -6208,78 +6153,61 @@ ] }, { - "Spicy Rice": [ - "400" - ] - }, - { - "Sevillana": [ - "400" - ] - }, - { - "Corinthia": [ + "Kaisei Opti": [ "400", + "500", "700" ] }, { - "Sulphur Point": [ + "Montagu Slab": [ + "100", + "200", "300", "400", + "500", + "600", "700" ] }, { - "Kaisei Opti": [ - "400", - "500", - "700" + "Spicy Rice": [ + "400" ] }, { - "Bellota": [ - "300", - "400", - "700" + "Prociono": [ + "400" ] }, { - "Gafata": [ + "Comforter Brush": [ "400" ] }, { - "Dekko": [ + "Londrina Shadow": [ "400" ] }, { - "Kaisei Tokumin": [ + "Baloo Tammudu 2": [ "400", "500", + "600", "700", "800" ] }, { - "Khmer": [ + "Gafata": [ "400" ] }, { - "Montagu Slab": [ - "100", + "Gemunu Libre": [ "200", "300", - "400", - "500", - "600", - "700" - ] - }, - { - "Baloo Bhaina 2": [ "400", "500", "600", @@ -6288,84 +6216,94 @@ ] }, { - "Ramaraja": [ + "Shalimar": [ "400" ] }, { - "Mina": [ - "400", - "700" + "Rationale": [ + "400" ] }, { - "Prociono": [ + "IM Fell French Canon": [ "400" ] }, { - "Wire One": [ + "Sevillana": [ "400" ] }, { - "Londrina Shadow": [ + "Ruthie": [ "400" ] }, { - "Carrois Gothic SC": [ + "Wire One": [ "400" ] }, { - "Sree Krushnadevaraya": [ - "400" + "Baloo Bhaijaan 2": [ + "400", + "500", + "600", + "700", + "800" ] }, { - "Chango": [ + "Nova Square": [ "400" ] }, { - "Nova Square": [ - "400" + "Mina": [ + "400", + "700" ] }, { - "Ribeye": [ + "Sree Krushnadevaraya": [ "400" ] }, { - "Uncial Antiqua": [ - "400" + "Baloo Bhaina 2": [ + "400", + "500", + "600", + "700", + "800" ] }, { - "Lovers Quarrel": [ + "Uncial Antiqua": [ "400" ] }, { - "Port Lligat Slab": [ - "400" + "Familjen Grotesk": [ + "400", + "500", + "600", + "700" ] }, { - "Strait": [ + "Carrois Gothic SC": [ "400" ] }, { - "Buda": [ - "300" + "Ramaraja": [ + "400" ] }, { - "Gemunu Libre": [ - "200", + "Manuale": [ "300", "400", "500", @@ -6375,23 +6313,33 @@ ] }, { - "Iceland": [ - "400" + "Inria Sans": [ + "300", + "400", + "700" ] }, { - "Stylish": [ + "Kaisei Tokumin": [ + "400", + "500", + "700", + "800" + ] + }, + { + "Port Lligat Slab": [ "400" ] }, { - "BIZ UDPMincho": [ + "Puritan": [ "400", "700" ] }, { - "MuseoModerno": [ + "Lexend Mega": [ "100", "200", "300", @@ -6404,56 +6352,60 @@ ] }, { - "Puritan": [ - "400", - "700" + "Rubik Dirt": [ + "400" ] }, { - "Paprika": [ + "Song Myung": [ "400" ] }, { - "Noto Sans Telugu": [ - "100", - "200", - "300", - "400", - "500", - "600", - "700", - "800", - "900" + "Gotu": [ + "400" ] }, { - "Song Myung": [ + "Strait": [ "400" ] }, { - "Unkempt": [ - "400", - "700" + "Unlock": [ + "400" ] }, { - "Farsan": [ + "Kdam Thmor Pro": [ "400" ] }, { - "Denk One": [ + "Iceland": [ "400" ] }, { - "Nokora": [ + "Lovers Quarrel": [ + "400" + ] + }, + { + "Stylish": [ + "400" + ] + }, + { + "Noto Sans Telugu": [ "100", + "200", "300", "400", + "500", + "600", "700", + "800", "900" ] }, @@ -6463,58 +6415,57 @@ ] }, { - "Bayon": [ - "400" - ] - }, - { - "Joan": [ + "Macondo Swash Caps": [ "400" ] }, { - "Habibi": [ + "Denk One": [ "400" ] }, { - "Rosarivo": [ - "400" + "Nokora": [ + "100", + "300", + "400", + "700", + "900" ] }, { - "Kdam Thmor Pro": [ + "Farsan": [ "400" ] }, { - "Manuale": [ + "Stoke": [ "300", - "400", - "500", - "600", - "700", - "800" + "400" ] }, { - "Stoke": [ - "300", + "Habibi": [ "400" ] }, { - "Baloo Tammudu 2": [ + "MuseoModerno": [ + "100", + "200", + "300", "400", "500", "600", "700", - "800" + "800", + "900" ] }, { - "ZCOOL KuaiLe": [ - "400" + "Ranga": [ + "400", + "700" ] }, { @@ -6524,64 +6475,59 @@ ] }, { - "Comforter Brush": [ + "Paprika": [ "400" ] }, { - "Macondo Swash Caps": [ + "Fontdiner Swanky": [ "400" ] }, { - "Cute Font": [ + "Khmer": [ "400" ] }, { - "Mystery Quest": [ + "Birthstone": [ "400" ] }, { - "Redressed": [ + "Unkempt": [ + "400", + "700" + ] + }, + { + "Bayon": [ "400" ] }, { - "Miniver": [ + "Redressed": [ "400" ] }, { - "Noto Serif Devanagari": [ - "100", - "200", - "300", - "400", - "500", - "600", - "700", - "800", - "900" + "ZCOOL KuaiLe": [ + "400" ] }, { - "Fontdiner Swanky": [ + "Mystery Quest": [ "400" ] }, { - "Kulim Park": [ - "200", - "300", + "Scheherazade New": [ "400", - "600", "700" ] }, { - "Sofia Sans": [ + "Noto Serif Devanagari": [ "100", "200", "300", @@ -6594,51 +6540,57 @@ ] }, { - "Tiro Kannada": [ + "Cute Font": [ "400" ] }, { - "Nuosu SIL": [ + "Potta One": [ "400" ] }, { - "Scheherazade New": [ - "400", - "700" + "Kavoon": [ + "400" ] }, { - "Rum Raisin": [ + "Dekko": [ "400" ] }, { - "Trade Winds": [ + "Miniver": [ "400" ] }, { - "Familjen Grotesk": [ - "400", - "500", - "600", - "700" + "Tiro Kannada": [ + "400" ] }, { - "IM Fell French Canon": [ + "Rosarivo": [ + "400" + ] + }, + { + "Rum Raisin": [ + "400" + ] + }, + { + "Stick": [ "400" ] }, { - "Piedra": [ + "Akronim": [ "400" ] }, { - "Akronim": [ + "Piedra": [ "400" ] }, @@ -6656,53 +6608,73 @@ ] }, { - "Unlock": [ + "Red Hat Mono": [ + "300", + "400", + "500", + "600", + "700" + ] + }, + { + "Hachi Maru Pop": [ "400" ] }, { - "Potta One": [ + "Corinthia": [ + "400", + "700" + ] + }, + { + "Ewert": [ "400" ] }, { - "Birthstone": [ + "Orelega One": [ "400" ] }, { - "Stick": [ + "Ribeye": [ "400" ] }, { - "IBM Plex Sans Devanagari": [ + "Murecho": [ "100", "200", "300", "400", "500", "600", - "700" + "700", + "800", + "900" ] }, { - "Hachi Maru Pop": [ - "400" + "WindSong": [ + "400", + "500" ] }, { - "Stint Ultra Expanded": [ + "Train One": [ "400" ] }, { - "Orelega One": [ - "400" + "Kantumruy": [ + "300", + "400", + "700" ] }, { - "Road Rage": [ + "Trade Winds": [ "400" ] }, @@ -6712,37 +6684,26 @@ ] }, { - "WindSong": [ - "400", - "500" - ] - }, - { - "Sahitya": [ - "400", - "700" - ] - }, - { - "Sura": [ - "400", - "700" + "Stint Ultra Expanded": [ + "400" ] }, { - "Odor Mean Chey": [ - "400" + "Coda Caption": [ + "800" ] }, { - "Ewert": [ + "Road Rage": [ "400" ] }, { - "Kantumruy": [ + "Spline Sans": [ "300", "400", + "500", + "600", "700" ] }, @@ -6752,7 +6713,7 @@ ] }, { - "Murecho": [ + "Hanken Grotesk": [ "100", "200", "300", @@ -6765,40 +6726,42 @@ ] }, { - "Sancreek": [ + "Monofett": [ "400" ] }, { - "Coda Caption": [ - "800" - ] - }, - { - "Red Hat Mono": [ + "M PLUS 2": [ + "100", + "200", "300", "400", "500", "600", - "700" + "700", + "800", + "900" ] }, { - "M PLUS 2": [ + "Chathura": [ "100", - "200", "300", "400", - "500", - "600", "700", - "800", - "900" + "800" ] }, { - "Chicle": [ - "400" + "Sahitya": [ + "400", + "700" + ] + }, + { + "Gorditas": [ + "400", + "700" ] }, { @@ -6807,17 +6770,34 @@ ] }, { - "Hina Mincho": [ + "Kulim Park": [ + "200", + "300", + "400", + "600", + "700" + ] + }, + { + "Sura": [ + "400", + "700" + ] + }, + { + "Sancreek": [ "400" ] }, { - "Train One": [ + "Hina Mincho": [ "400" ] }, { - "Red Rose": [ + "IBM Plex Sans Devanagari": [ + "100", + "200", "300", "400", "500", @@ -6826,43 +6806,47 @@ ] }, { - "Fascinate Inline": [ + "Chicle": [ "400" ] }, { - "Marko One": [ - "400" + "Buda": [ + "300" ] }, { - "Rampart One": [ - "400" + "Qwitcher Grypen": [ + "400", + "700" ] }, { - "Mochiy Pop P One": [ + "Grape Nuts": [ "400" ] }, { - "Qwitcher Grypen": [ + "Red Rose": [ + "300", "400", + "500", + "600", "700" ] }, { - "Monofett": [ + "Sirin Stencil": [ "400" ] }, { - "Sirin Stencil": [ + "Marko One": [ "400" ] }, { - "Babylonica": [ + "Moul": [ "400" ] }, @@ -6872,7 +6856,7 @@ ] }, { - "Noto Serif Malayalam": [ + "Sofia Sans": [ "100", "200", "300", @@ -6890,17 +6874,7 @@ ] }, { - "Kavoon": [ - "400" - ] - }, - { - "Moul": [ - "400" - ] - }, - { - "Gantari": [ + "Anek Gujarati": [ "100", "200", "300", @@ -6908,44 +6882,45 @@ "500", "600", "700", - "800", - "900" + "800" ] }, { - "Grape Nuts": [ + "Meie Script": [ "400" ] }, { - "Arbutus": [ + "Angkor": [ "400" ] }, { - "Angkor": [ + "Ruluko": [ "400" ] }, { - "Condiment": [ + "Fascinate Inline": [ "400" ] }, { - "Keania One": [ + "IM Fell Great Primer": [ "400" ] }, { - "Spline Sans": [ - "300", + "Content": [ "400", - "500", - "600", "700" ] }, + { + "Barrio": [ + "400" + ] + }, { "Simonetta": [ "400", @@ -6962,43 +6937,28 @@ ] }, { - "Modern Antiqua": [ - "400" - ] - }, - { - "Ruluko": [ + "Cagliostro": [ "400" ] }, { - "Cagliostro": [ + "Stalemate": [ "400" ] }, { - "Noto Serif Thai": [ + "IBM Plex Sans Thai Looped": [ "100", "200", "300", "400", "500", "600", - "700", - "800", - "900" - ] - }, - { - "Donegal One": [ - "400" + "700" ] }, { - "Molle": [] - }, - { - "IM Fell Great Primer": [ + "Joan": [ "400" ] }, @@ -7008,12 +6968,12 @@ ] }, { - "Barrio": [ + "Kavivanar": [ "400" ] }, { - "Kavivanar": [ + "Condiment": [ "400" ] }, @@ -7023,79 +6983,54 @@ ] }, { - "IBM Plex Sans Thai Looped": [ + "Sofia Sans Extra Condensed": [ "100", "200", "300", "400", "500", "600", - "700" - ] - }, - { - "Fuzzy Bubbles": [ - "400", - "700" - ] - }, - { - "Stalemate": [ - "400" - ] - }, - { - "Gowun Batang": [ - "400", - "700" - ] - }, - { - "Content": [ - "400", - "700" + "700", + "800", + "900" ] }, { - "Jolly Lodger": [ + "Sassy Frass": [ "400" ] }, { - "Tulpen One": [ + "Bilbo": [ "400" ] }, { - "Noto Sans Myanmar": [ - "100", - "200", - "300", + "Gowun Batang": [ "400", - "500", - "600", - "700", - "800", - "900" + "700" ] }, { - "Offside": [ + "Molle": [] + }, + { + "Donegal One": [ "400" ] }, { - "Crushed": [ + "Keania One": [ "400" ] }, { - "Bilbo": [ + "Jolly Lodger": [ "400" ] }, { - "Bahianita": [ + "Crushed": [ "400" ] }, @@ -7105,27 +7040,31 @@ ] }, { - "Stalinist One": [ + "Englebert": [ "400" ] }, { - "Square Peg": [ + "Croissant One": [ "400" ] }, { - "Underdog": [ + "Bahianita": [ "400" ] }, { - "Text Me One": [ - "400" + "Noto Emoji": [ + "300", + "400", + "500", + "600", + "700" ] }, { - "Anek Gujarati": [ + "Noto Sans Myanmar": [ "100", "200", "300", @@ -7133,11 +7072,12 @@ "500", "600", "700", - "800" + "800", + "900" ] }, { - "Englebert": [ + "Text Me One": [ "400" ] }, @@ -7147,89 +7087,112 @@ ] }, { - "Vampiro One": [ + "Elsie Swash Caps": [ + "400", + "900" + ] + }, + { + "Odor Mean Chey": [ "400" ] }, { - "Meie Script": [ + "Tulpen One": [ "400" ] }, { - "MonteCarlo": [ + "Offside": [ "400" ] }, { - "Libre Barcode 128 Text": [ + "Arbutus": [ "400" ] }, { - "Ravi Prakash": [ + "Jomolhari": [ "400" ] }, { - "Dorsa": [ + "Vampiro One": [ "400" ] }, { - "Astloch": [ + "Fuzzy Bubbles": [ "400", "700" ] }, { - "Elsie Swash Caps": [ + "Modern Antiqua": [ + "400" + ] + }, + { + "Noto Serif Thai": [ + "100", + "200", + "300", "400", + "500", + "600", + "700", + "800", "900" ] }, { - "Amiri Quran": [ + "Zen Dots": [ "400" ] }, { - "Bona Nova": [ - "400", - "700" + "Dorsa": [ + "400" ] }, { - "Noto Emoji": [ - "300", - "400", - "500", - "600", - "700" + "Libre Barcode 128 Text": [ + "400" ] }, { - "Yomogi": [ + "Underdog": [ "400" ] }, { - "Yaldevi": [ - "200", - "300", - "400", - "500", - "600", - "700" + "Stalinist One": [ + "400" ] }, { - "Croissant One": [ + "Ravi Prakash": [ "400" ] }, { - "Sofia Sans Extra Condensed": [ + "Beth Ellen": [ + "400" + ] + }, + { + "Risque": [ + "400" + ] + }, + { + "Autour One": [ + "400" + ] + }, + { + "Noto Serif Malayalam": [ "100", "200", "300", @@ -7242,38 +7205,46 @@ ] }, { - "Jomolhari": [ - "400" + "Yaldevi": [ + "200", + "300", + "400", + "500", + "600", + "700" ] }, { - "Wellfleet": [ + "Square Peg": [ "400" ] }, { - "Comforter": [ + "Rampart One": [ "400" ] }, { - "Fenix": [ + "Nuosu SIL": [ "400" ] }, { - "Zen Dots": [ + "Moon Dance": [ "400" ] }, { - "Inika": [ + "Radio Canada": [ + "300", "400", + "500", + "600", "700" ] }, { - "Noto Sans Kannada": [ + "Gantari": [ "100", "200", "300", @@ -7286,42 +7257,46 @@ ] }, { - "Moon Dance": [ + "Comforter": [ "400" ] }, { - "Autour One": [ + "Fenix": [ "400" ] }, { - "Eagle Lake": [ - "400" + "Srisakdi": [ + "400", + "700" ] }, { - "Charis SIL": [ - "400", - "700" + "Wellfleet": [ + "400" ] }, { - "Kaisei HarunoUmi": [ + "Anek Tamil": [ + "100", + "200", + "300", "400", "500", - "700" + "600", + "700", + "800" ] }, { - "Shippori Antique": [ + "Eagle Lake": [ "400" ] }, { - "Srisakdi": [ - "400", - "700" + "Zhi Mang Xing": [ + "400" ] }, { @@ -7332,16 +7307,7 @@ ] }, { - "Radio Canada": [ - "300", - "400", - "500", - "600", - "700" - ] - }, - { - "Princess Sofia": [ + "Yomogi": [ "400" ] }, @@ -7351,17 +7317,17 @@ ] }, { - "Zhi Mang Xing": [ + "Swanky and Moo Moo": [ "400" ] }, { - "Nosifer": [ + "Shippori Antique": [ "400" ] }, { - "Plaster": [ + "Mochiy Pop P One": [ "400" ] }, @@ -7371,19 +7337,7 @@ ] }, { - "Anek Devanagari": [ - "100", - "200", - "300", - "400", - "500", - "600", - "700", - "800" - ] - }, - { - "Hanken Grotesk": [ + "Noto Sans Kannada": [ "100", "200", "300", @@ -7396,60 +7350,48 @@ ] }, { - "Anek Tamil": [ - "100", - "200", - "300", - "400", - "500", - "600", - "700", - "800" - ] - }, - { - "Swanky and Moo Moo": [ + "Nosifer": [ "400" ] }, { - "Risque": [ + "Kumar One": [ "400" ] }, { - "Beth Ellen": [ + "MonteCarlo": [ "400" ] }, { - "BIZ UDGothic": [ - "400", - "700" + "Plaster": [ + "400" ] }, { - "Libre Barcode 39 Extended": [ + "Gowun Dodum": [ "400" ] }, { - "Gowun Dodum": [ + "Freehand": [ "400" ] }, { - "Kumar One": [ - "400" + "Charis SIL": [ + "400", + "700" ] }, { - "Akaya Kanadaka": [ + "Libre Barcode 39 Extended": [ "400" ] }, { - "Linden Hill": [ + "Chilanka": [ "400" ] }, @@ -7461,81 +7403,88 @@ "400", "500", "600", - "700", - "800" - ] - }, - { - "Poor Story": [ - "400" - ] - }, - { - "Carattere": [ - "400" + "700", + "800" ] }, { - "Freehand": [ - "400" + "Inika": [ + "400", + "700" ] }, { - "Rhodium Libre": [ + "Akaya Kanadaka": [ "400" ] }, { - "BioRhyme Expanded": [ + "Anek Bangla": [ + "100", "200", "300", "400", + "500", + "600", "700", "800" ] }, { - "Mrs Sheppards": [ + "Linden Hill": [ "400" ] }, { - "Chilanka": [ - "400" + "BIZ UDGothic": [ + "400", + "700" ] }, { - "Joti One": [ + "Spirax": [ "400" ] }, { - "Black And White Picture": [ + "Rhodium Libre": [ "400" ] }, { - "Bahiana": [ + "Tiro Devanagari Sanskrit": [ "400" ] }, { - "Abyssinica SIL": [ + "Carattere": [ "400" ] }, { - "Ribeye Marrow": [ + "Anek Devanagari": [ + "100", + "200", + "300", + "400", + "500", + "600", + "700", + "800" + ] + }, + { + "Poor Story": [ "400" ] }, { - "Noto Music": [ + "Joti One": [ "400" ] }, { - "Spirax": [ + "Mrs Sheppards": [ "400" ] }, @@ -7550,17 +7499,25 @@ ] }, { - "Romanesco": [ + "Ribeye Marrow": [ "400" ] }, { - "Metal Mania": [ - "400" + "Bona Nova": [ + "400", + "700" ] }, { - "Anek Bangla": [ + "Kaisei HarunoUmi": [ + "400", + "500", + "700" + ] + }, + { + "Anybody": [ "100", "200", "300", @@ -7568,93 +7525,92 @@ "500", "600", "700", - "800" + "800", + "900" ] }, { - "Fascinate": [ + "Bahiana": [ "400" ] }, { - "Galdeano": [ + "Abyssinica SIL": [ "400" ] }, { - "Noto Sans Armenian": [ - "100", - "200", - "300", - "400", - "500", - "600", - "700", - "800", - "900" + "Princess Sofia": [ + "400" ] }, { - "Mohave": [ - "300", - "400", - "500", - "600", - "700" + "Black And White Picture": [ + "400" ] }, { - "Maiden Orange": [ + "Solitreo": [ "400" ] }, { - "Devonshire": [ + "Romanesco": [ "400" ] }, { - "Emblema One": [ + "Jim Nightshade": [ "400" ] }, { - "Diplomata SC": [ + "Maiden Orange": [ "400" ] }, { - "Jim Nightshade": [ + "Galdeano": [ "400" ] }, { - "Mogra": [ + "Noto Sans Anatolian Hieroglyphs": [ "400" ] }, { - "Yuji Syuku": [ + "Noto Sans Symbols 2": [ "400" ] }, { - "Noto Sans Symbols 2": [ + "Fascinate": [ "400" ] }, { - "Vujahday Script": [ + "Babylonica": [ "400" ] }, { - "IM Fell DW Pica SC": [ + "Emblema One": [ "400" ] }, { - "Spline Sans Mono": [ + "Metal Mania": [ + "400" + ] + }, + { + "Licorice": [ + "400" + ] + }, + { + "Mohave": [ "300", "400", "500", @@ -7663,23 +7619,34 @@ ] }, { - "IBM Plex Sans JP": [ + "Noto Sans Armenian": [ "100", "200", "300", "400", "500", "600", - "700" + "700", + "800", + "900" ] }, { - "Chela One": [ + "BioRhyme Expanded": [ + "200", + "300", + "400", + "700", + "800" + ] + }, + { + "Mogra": [ "400" ] }, { - "Noto Serif Tamil": [ + "Grenze": [ "100", "200", "300", @@ -7692,17 +7659,17 @@ ] }, { - "Revalia": [ + "Yuji Syuku": [ "400" ] }, { - "Tiro Telugu": [ + "Vujahday Script": [ "400" ] }, { - "Grenze": [ + "Noto Serif Kannada": [ "100", "200", "300", @@ -7715,7 +7682,18 @@ ] }, { - "Caesar Dressing": [ + "IBM Plex Sans JP": [ + "100", + "200", + "300", + "400", + "500", + "600", + "700" + ] + }, + { + "Revalia": [ "400" ] }, @@ -7725,78 +7703,71 @@ ] }, { - "Lancelot": [ + "Devonshire": [ "400" ] }, { - "Anek Latin": [ - "100", - "200", + "Caesar Dressing": [ + "400" + ] + }, + { + "Spline Sans Mono": [ "300", "400", "500", "600", - "700", - "800" + "700" ] }, { - "Jacques Francois Shadow": [ + "Lakki Reddy": [ "400" ] }, { - "Seymour One": [ + "Diplomata SC": [ "400" ] }, { - "Birthstone Bounce": [ - "400", - "500" + "Girassol": [ + "400" ] }, { - "Solitreo": [ + "Seymour One": [ "400" ] }, { - "Kirang Haerang": [ + "Chela One": [ "400" ] }, { - "Big Shoulders Stencil Text": [ - "100", - "200", - "300", - "400", - "500", - "600", - "700", - "800", - "900" + "Noto Music": [ + "400" ] }, { - "Licorice": [ + "Tiro Gurmukhi": [ "400" ] }, { - "Jacques Francois": [ + "IM Fell DW Pica SC": [ "400" ] }, { - "Girassol": [ + "Kirang Haerang": [ "400" ] }, { - "IM Fell French Canon SC": [ + "Jacques Francois Shadow": [ "400" ] }, @@ -7806,12 +7777,12 @@ ] }, { - "Tiro Gurmukhi": [ + "IM Fell Great Primer SC": [ "400" ] }, { - "Encode Sans SC": [ + "Big Shoulders Stencil Text": [ "100", "200", "300", @@ -7823,110 +7794,84 @@ "900" ] }, - { - "Lakki Reddy": [ - "400" - ] - }, { "Peddana": [ "400" ] }, { - "Stick No Bills": [ - "200", - "300", - "400", - "500", - "600", - "700", - "800" - ] - }, - { - "Barriecito": [ - "400" - ] - }, - { - "Noto Sans Tai Viet": [ - "400" - ] - }, - { - "Zen Antique Soft": [ + "Jacques Francois": [ "400" ] }, { - "New Tegomin": [ + "IM Fell French Canon SC": [ "400" ] }, { - "Almendra SC": [ + "Barriecito": [ "400" ] }, { - "Liu Jian Mao Cao": [ + "Zen Antique Soft": [ "400" ] }, { - "Noto Serif Kannada": [ - "100", - "200", - "300", + "Astloch": [ "400", - "500", - "600", - "700", - "800", - "900" + "700" ] }, { - "Anybody": [ - "100", + "Stick No Bills": [ "200", "300", "400", "500", "600", "700", - "800", - "900" + "800" ] }, { - "Glass Antiqua": [ + "Almendra SC": [ "400" ] }, { - "Galindo": [ - "400" + "Birthstone Bounce": [ + "400", + "500" ] }, { - "Noto Sans Anatolian Hieroglyphs": [ + "Lancelot": [ "400" ] }, { - "Long Cang": [ - "400" + "Encode Sans SC": [ + "100", + "200", + "300", + "400", + "500", + "600", + "700", + "800", + "900" ] }, { - "Siemreap": [ + "Fuggles": [ "400" ] }, { - "IM Fell Great Primer SC": [ + "New Tegomin": [ "400" ] }, @@ -7937,42 +7882,42 @@ ] }, { - "Atomic Age": [ + "Noto Sans Tai Viet": [ "400" ] }, { - "Snippet": [ + "Galindo": [ "400" ] }, { - "Qahiri": [ + "Atomic Age": [ "400" ] }, { - "Tiro Bangla": [ + "Liu Jian Mao Cao": [ "400" ] }, { - "Butterfly Kids": [ + "Glass Antiqua": [ "400" ] }, { - "Dr Sugiyama": [ + "Dangrek": [ "400" ] }, { - "Flavors": [ + "Siemreap": [ "400" ] }, { - "Noto Sans Khmer": [ + "Gluten": [ "100", "200", "300", @@ -7985,17 +7930,12 @@ ] }, { - "Bungee Outline": [ - "400" - ] - }, - { - "Smythe": [ + "Long Cang": [ "400" ] }, { - "Gluten": [ + "Anek Latin": [ "100", "200", "300", @@ -8003,83 +7943,80 @@ "500", "600", "700", - "800", - "900" + "800" ] }, { - "Gupter": [ + "Noto Serif Tamil": [ + "100", + "200", + "300", "400", "500", - "700" + "600", + "700", + "800", + "900" ] }, { - "Dangrek": [ + "Benne": [ "400" ] }, { - "Metal": [ + "Beau Rivage": [ "400" ] }, { - "Bungee Hairline": [ + "Flavors": [ "400" ] }, { - "Beau Rivage": [ + "Qahiri": [ "400" ] }, { - "Fuggles": [ + "Smythe": [ "400" ] }, { - "BIZ UDMincho": [ - "400", - "700" + "Snippet": [ + "400" ] }, { - "Sofia Sans Semi Condensed": [ - "100", - "200", - "300", - "400", - "500", - "600", - "700", - "800", - "900" + "Dr Sugiyama": [ + "400" ] }, { - "Benne": [ + "Almendra Display": [ "400" ] }, { - "Miss Fajardose": [ + "Flow Circular": [ "400" ] }, { - "Smooch": [ - "400" + "BIZ UDMincho": [ + "400", + "700" ] }, { - "Asset": [ + "Bungee Hairline": [ "400" ] }, { - "Almendra Display": [ + "Butterfly Kids": [ "400" ] }, @@ -8097,89 +8034,131 @@ ] }, { - "M PLUS 1 Code": [ + "Tiro Bangla": [ + "400" + ] + }, + { + "Sedgwick Ave Display": [ + "400" + ] + }, + { + "Sofia Sans Semi Condensed": [ "100", "200", "300", "400", "500", "600", - "700" + "700", + "800", + "900" ] }, { - "Ruge Boogie": [ + "Bungee Outline": [ "400" ] }, { - "Nova Slim": [ + "Gupter": [ + "400", + "500", + "700" + ] + }, + { + "Asset": [ "400" ] }, { - "Arima": [ + "Suwannaphum": [ "100", - "200", "300", "400", - "500", - "600", - "700" + "700", + "900" ] }, { - "Flow Circular": [ + "Smooch": [ "400" ] }, { - "Sedgwick Ave Display": [ + "Erica One": [ "400" ] }, { - "Festive": [ - "400" + "Sono": [ + "200", + "300", + "400", + "500", + "600", + "700", + "800" ] }, { - "Gidugu": [ + "Metal": [ "400" ] }, { - "Erica One": [ - "400" + "M PLUS 1 Code": [ + "100", + "200", + "300", + "400", + "500", + "600", + "700" ] }, { - "Alkalami": [ + "Imbue": [ + "100", + "200", + "300", + "400", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Mr Bedfort": [ "400" ] }, { - "Fragment Mono": [ + "Nova Slim": [ "400" ] }, { - "Mr Bedfort": [ + "Gidugu": [ "400" ] }, { - "Hanalei": [ + "Festive": [ "400" ] }, { - "Whisper": [ + "Noto Sans Hanunoo": [ "400" ] }, { - "Waterfall": [ + "Miss Fajardose": [ "400" ] }, @@ -8189,45 +8168,41 @@ ] }, { - "Noto Serif Armenian": [ + "Arima": [ "100", "200", "300", "400", "500", "600", - "700", - "800", - "900" + "700" ] }, { - "Suwannaphum": [ + "Noto Sans Gujarati": [ "100", + "200", "300", "400", + "500", + "600", "700", + "800", "900" ] }, { - "Zen Tokyo Zoo": [ + "Water Brush": [ "400" ] }, { - "The Nautigal": [ - "400", - "700" - ] - }, - { - "Noto Sans Hanunoo": [ + "Alkalami": [ "400" ] }, { - "Imbue": [ + "Noto Sans Khmer": [ "100", "200", "300", @@ -8240,35 +8215,48 @@ ] }, { - "Water Brush": [ + "Bokor": [ "400" ] }, { - "Bokor": [ + "Alumni Sans Inline One": [ "400" ] }, { - "Noto Sans Oriya": [ - "100", - "200", - "300", + "Waterfall": [ + "400" + ] + }, + { + "Hanalei": [ + "400" + ] + }, + { + "Whisper": [ + "400" + ] + }, + { + "Zen Tokyo Zoo": [ + "400" + ] + }, + { + "The Nautigal": [ "400", - "500", - "600", - "700", - "800", - "900" + "700" ] }, { - "Noto Sans Math": [ + "Fragment Mono": [ "400" ] }, { - "Smooch Sans": [ + "Noto Serif Armenian": [ "100", "200", "300", @@ -8281,28 +8269,27 @@ ] }, { - "Noto Sans Gothic": [ + "Meow Script": [ "400" ] }, { - "Meow Script": [ + "Vibes": [ "400" ] }, { - "GFS Neohellenic": [ - "400", - "700" + "Ruge Boogie": [ + "400" ] }, { - "Shippori Antique B1": [ + "Praise": [ "400" ] }, { - "Nabla": [ + "Shippori Antique B1": [ "400" ] }, @@ -8317,12 +8304,17 @@ ] }, { - "Lavishly Yours": [ + "Combo": [ "400" ] }, { - "Lexend Tera": [ + "Bonbon": [ + "400" + ] + }, + { + "Noto Sans Oriya": [ "100", "200", "300", @@ -8334,6 +8326,11 @@ "900" ] }, + { + "Noto Sans Math": [ + "400" + ] + }, { "Kantumruy Pro": [ "100", @@ -8346,12 +8343,7 @@ ] }, { - "Suravaram": [ - "400" - ] - }, - { - "Noto Sans Gujarati": [ + "Lexend Tera": [ "100", "200", "300", @@ -8363,11 +8355,6 @@ "900" ] }, - { - "Sofadi One": [ - "400" - ] - }, { "DynaPuff": [ "400", @@ -8382,19 +8369,23 @@ ] }, { - "Alumni Sans Inline One": [ + "Suravaram": [ "400" ] }, { - "Vibes": [ + "Nabla": [ "400" ] }, { - "Trochut": [ - "400", - "700" + "Noto Sans Gothic": [ + "400" + ] + }, + { + "Sofadi One": [ + "400" ] }, { @@ -8411,12 +8402,13 @@ ] }, { - "Londrina Sketch": [ - "400" + "Trochut": [ + "400", + "700" ] }, { - "Combo": [ + "Purple Purse": [ "400" ] }, @@ -8431,27 +8423,12 @@ ] }, { - "Bonheur Royale": [ - "400" - ] - }, - { - "Miltonian": [ - "400" - ] - }, - { - "Praise": [ - "400" - ] - }, - { - "Purple Purse": [ + "Lavishly Yours": [ "400" ] }, { - "Noto Serif Georgian": [ + "Chivo Mono": [ "100", "200", "300", @@ -8464,41 +8441,26 @@ ] }, { - "Noto Sans Ethiopic": [ + "Koh Santepheap": [ "100", - "200", "300", "400", - "500", - "600", "700", - "800", "900" ] }, { - "Snowburst One": [ + "Londrina Sketch": [ "400" ] }, { - "Sono": [ - "200", - "300", - "400", - "500", - "600", - "700", - "800" - ] - }, - { - "Butcherman": [ + "Bonheur Royale": [ "400" ] }, { - "Chivo Mono": [ + "Noto Sans Ethiopic": [ "100", "200", "300", @@ -8511,46 +8473,55 @@ ] }, { - "Federant": [ + "Snowburst One": [ "400" ] }, { - "Rubik Glitch": [ + "Taprom": [ "400" ] }, { - "Mea Culpa": [ - "400" + "Finlandica": [ + "400", + "500", + "600", + "700" ] }, { - "Tiro Devanagari Sanskrit": [ + "Butcherman": [ "400" ] }, { - "Taprom": [ + "Mea Culpa": [ "400" ] }, { - "Hubballi": [ + "Sunshiney": [ "400" ] }, { - "Finlandica": [ + "Smooch Sans": [ + "100", + "200", + "300", "400", "500", "600", - "700" + "700", + "800", + "900" ] }, { - "Sunshiney": [ - "400" + "Gwendolyn": [ + "400", + "700" ] }, { @@ -8559,19 +8530,19 @@ ] }, { - "Bonbon": [ - "400" + "GFS Neohellenic": [ + "400", + "700" ] }, { - "Luxurious Script": [ + "Federant": [ "400" ] }, { - "Gentium Plus": [ - "400", - "700" + "Miltonian": [ + "400" ] }, { @@ -8580,7 +8551,12 @@ ] }, { - "IM Fell Double Pica SC": [ + "Aubrey": [ + "400" + ] + }, + { + "Nova Cut": [ "400" ] }, @@ -8590,7 +8566,7 @@ ] }, { - "Nova Script": [ + "Ballet": [ "400" ] }, @@ -8600,40 +8576,38 @@ ] }, { - "Lexend Peta": [ - "100", - "200", - "300", - "400", - "500", - "600", - "700", - "800", - "900" + "IM Fell Double Pica SC": [ + "400" ] }, { - "Aubrey": [ + "Fasthand": [ "400" ] }, { - "Noto Sans Limbu": [ + "Hubballi": [ "400" ] }, { - "Nova Cut": [ + "Rubik Glitch": [ "400" ] }, { - "Ballet": [ + "Gentium Plus": [ + "400", + "700" + ] + }, + { + "Moulpali": [ "400" ] }, { - "Truculenta": [ + "Noto Sans Gurmukhi": [ "100", "200", "300", @@ -8646,13 +8620,17 @@ ] }, { - "Gwendolyn": [ - "400", - "700" + "Nova Script": [ + "400" ] }, { - "Noto Sans Gurmukhi": [ + "Noto Sans Limbu": [ + "400" + ] + }, + { + "Lexend Peta": [ "100", "200", "300", @@ -8665,7 +8643,7 @@ ] }, { - "Anek Gurmukhi": [ + "Truculenta": [ "100", "200", "300", @@ -8673,21 +8651,27 @@ "500", "600", "700", - "800" + "800", + "900" ] }, { - "Moulpali": [ + "Tiro Devanagari Marathi": [ "400" ] }, { - "Rubik Beastly": [ + "Gideon Roman": [ "400" ] }, { - "Inspiration": [ + "Dhurjati": [ + "400" + ] + }, + { + "Luxurious Script": [ "400" ] }, @@ -8697,6 +8681,24 @@ "700" ] }, + { + "Geostar": [ + "400" + ] + }, + { + "Noto Serif Georgian": [ + "100", + "200", + "300", + "400", + "500", + "600", + "700", + "800", + "900" + ] + }, { "IBM Plex Sans Hebrew": [ "100", @@ -8708,6 +8710,11 @@ "700" ] }, + { + "Rubik Vinyl": [ + "400" + ] + }, { "Sofia Sans Condensed": [ "100", @@ -8722,7 +8729,30 @@ ] }, { - "Noto Serif Khmer": [ + "Noto Serif Gujarati": [ + "100", + "200", + "300", + "400", + "500", + "600", + "700", + "800", + "900" + ] + }, + { + "Nova Oval": [ + "400" + ] + }, + { + "Gulzar": [ + "400" + ] + }, + { + "Anek Gurmukhi": [ "100", "200", "300", @@ -8730,8 +8760,12 @@ "500", "600", "700", - "800", - "900" + "800" + ] + }, + { + "Inspiration": [ + "400" ] }, { @@ -8740,17 +8774,17 @@ ] }, { - "Geostar": [ + "Single Day": [ "400" ] }, { - "Rubik Vinyl": [ + "Rubik Distressed": [ "400" ] }, { - "Fasthand": [ + "Rubik Beastly": [ "400" ] }, @@ -8768,36 +8802,30 @@ ] }, { - "Tiro Devanagari Marathi": [ - "400" - ] - }, - { - "Rubik Distressed": [ - "400" - ] - }, - { - "Dhurjati": [ - "400" - ] - }, - { - "Koh Santepheap": [ + "Big Shoulders Inline Text": [ "100", + "200", "300", "400", + "500", + "600", "700", + "800", "900" ] }, { - "Grechen Fuemen": [ + "Fleur De Leah": [ "400" ] }, { - "Big Shoulders Inline Text": [ + "Caramel": [ + "400" + ] + }, + { + "Big Shoulders Inline Display": [ "100", "200", "300", @@ -8810,17 +8838,7 @@ ] }, { - "Fleur De Leah": [ - "400" - ] - }, - { - "Nova Oval": [ - "400" - ] - }, - { - "Caramel": [ + "Syne Tactile": [ "400" ] }, @@ -8830,37 +8848,40 @@ ] }, { - "Single Day": [ + "Tiro Tamil": [ "400" ] }, { - "Rubik Puddles": [ + "Miltonian Tattoo": [ "400" ] }, { - "Gideon Roman": [ + "Kenia": [ "400" ] }, { - "Miltonian Tattoo": [ - "400" + "Noto Sans Javanese": [ + "400", + "500", + "600", + "700" ] }, { - "Tiro Tamil": [ + "Grechen Fuemen": [ "400" ] }, { - "Kenia": [ + "Rubik Puddles": [ "400" ] }, { - "Noto Sans Javanese": [ + "Noto Sans Adlam Unjoined": [ "400", "500", "600", @@ -8868,12 +8889,15 @@ ] }, { - "Uchen": [ - "400" + "Edu TAS Beginner": [ + "400", + "500", + "600", + "700" ] }, { - "Big Shoulders Inline Display": [ + "Noto Sans Lao": [ "100", "200", "300", @@ -8886,12 +8910,12 @@ ] }, { - "Syne Tactile": [ + "Explora": [ "400" ] }, { - "Noto Serif Gujarati": [ + "Tourney": [ "100", "200", "300", @@ -8904,20 +8928,12 @@ ] }, { - "Edu TAS Beginner": [ - "400", - "500", - "600", - "700" - ] - }, - { - "Gulzar": [ + "Rubik 80s Fade": [ "400" ] }, { - "Tourney": [ + "Noto Serif Khmer": [ "100", "200", "300", @@ -8930,40 +8946,30 @@ ] }, { - "Tapestry": [ + "Petemoss": [ "400" ] }, { - "Noto Sans Coptic": [ + "Island Moments": [ "400" ] }, { - "Noto Sans Lao": [ - "100", - "200", - "300", + "Edu VIC WA NT Beginner": [ "400", "500", "600", - "700", - "800", - "900" - ] - }, - { - "Love Light": [ - "400" + "700" ] }, { - "Rubik 80s Fade": [ + "Uchen": [ "400" ] }, { - "Island Moments": [ + "Libre Barcode EAN13 Text": [ "400" ] }, @@ -8977,25 +8983,24 @@ ] }, { - "Updock": [ - "400" - ] - }, - { - "Petemoss": [ + "Love Light": [ "400" ] }, { - "Edu VIC WA NT Beginner": [ + "Martian Mono": [ + "100", + "200", + "300", "400", "500", "600", - "700" + "700", + "800" ] }, { - "Blaka Hollow": [ + "Updock": [ "400" ] }, @@ -9005,7 +9010,7 @@ ] }, { - "Explora": [ + "Amiri Quran": [ "400" ] }, @@ -9015,19 +9020,26 @@ ] }, { - "Martian Mono": [ - "100", - "200", - "300", + "Noto Sans Adlam": [ "400", "500", "600", - "700", - "800" + "700" ] }, { - "Noto Serif HK": [ + "My Soul": [ + "400" + ] + }, + { + "Warnes": [ + "400" + ] + }, + { + "Genos": [ + "100", "200", "300", "400", @@ -9051,7 +9063,7 @@ ] }, { - "Splash": [ + "Rubik Gemstones": [ "400" ] }, @@ -9066,30 +9078,19 @@ ] }, { - "Warnes": [ - "400" - ] - }, - { - "Noto Sans Adlam": [ + "Noto Serif HK": [ + "200", + "300", "400", "500", "600", - "700" - ] - }, - { - "Rubik Wet Paint": [ - "400" - ] - }, - { - "Libre Barcode EAN13 Text": [ - "400" + "700", + "800", + "900" ] }, { - "Genos": [ + "Noto Serif Hebrew": [ "100", "200", "300", @@ -9101,6 +9102,11 @@ "900" ] }, + { + "Are You Serious": [ + "400" + ] + }, { "Noto Serif Sinhala": [ "100", @@ -9115,22 +9121,35 @@ ] }, { - "Luxurious Roman": [ + "Rubik Wet Paint": [ "400" ] }, { - "Alumni Sans Pinstripe": [ + "Tapestry": [ "400" ] }, { - "Noto Sans Tagbanwa": [ + "Oi": [ "400" ] }, { - "Noto Serif Hebrew": [ + "Noto Sans Tai Le": [ + "400" + ] + }, + { + "Edu NSW ACT Foundation": [ + "400", + "500", + "600", + "700" + ] + }, + { + "Anek Odia": [ "100", "200", "300", @@ -9138,22 +9157,31 @@ "500", "600", "700", - "800", - "900" + "800" ] }, { - "Rubik Gemstones": [ + "Blaka": [ "400" ] }, { - "Padyakke Expanded One": [ + "Splash": [ "400" ] }, { - "Edu NSW ACT Foundation": [ + "Luxurious Roman": [ + "400" + ] + }, + { + "Alumni Sans Pinstripe": [ + "400" + ] + }, + { + "Edu QLD Beginner": [ "400", "500", "600", @@ -9161,30 +9189,47 @@ ] }, { - "Are You Serious": [ + "Noto Sans Coptic": [ + "400" + ] + }, + { + "Rubik Storm": [ + "400" + ] + }, + { + "Zen Loop": [ + "400" + ] + }, + { + "Tiro Telugu": [ + "400" + ] + }, + { + "Padyakke Expanded One": [ "400" ] }, { - "Noto Sans Tai Le": [ + "Rubik Marker Hatch": [ "400" ] }, { - "Noto Sans Adlam Unjoined": [ - "400", - "500", - "600", - "700" + "Blaka Hollow": [ + "400" ] }, { - "Oi": [ + "Kolker Brush": [ "400" ] }, { - "Anek Odia": [ + "Noto Serif Telugu": [ "100", "200", "300", @@ -9192,22 +9237,15 @@ "500", "600", "700", - "800" + "800", + "900" ] }, { - "Blaka": [ + "Noto Sans Old South Arabian": [ "400" ] }, - { - "Edu QLD Beginner": [ - "400", - "500", - "600", - "700" - ] - }, { "Noto Sans Thaana": [ "100", @@ -9222,32 +9260,17 @@ ] }, { - "Rubik Storm": [ - "400" - ] - }, - { - "Kolker Brush": [ - "400" - ] - }, - { - "Noto Sans Old South Arabian": [ - "400" - ] - }, - { - "Ole": [ + "Kings": [ "400" ] }, { - "Zen Loop": [ + "Bungee Spice": [ "400" ] }, { - "Rubik Marker Hatch": [ + "Noto Sans Egyptian Hieroglyphs": [ "400" ] }, @@ -9264,17 +9287,30 @@ ] }, { - "Kings": [ + "Reem Kufi Fun": [ + "400", + "500", + "600", + "700" + ] + }, + { + "Yuji Mai": [ "400" ] }, { - "My Soul": [ + "Ole": [ "400" ] }, { - "Noto Serif Telugu": [ + "Noto Sans Carian": [ + "400" + ] + }, + { + "Noto Serif Ethiopic": [ "100", "200", "300", @@ -9287,7 +9323,15 @@ ] }, { - "Reem Kufi Fun": [ + "Noto Sans Tamil Supplement": [ + "400" + ] + }, + { + "M PLUS Code Latin": [ + "100", + "200", + "300", "400", "500", "600", @@ -9301,20 +9345,12 @@ ] }, { - "Flow Block": [ - "400" - ] - }, - { - "Bungee Spice": [ + "Moo Lah Lah": [ "400" ] }, { - "M PLUS Code Latin": [ - "100", - "200", - "300", + "Noto Serif Toto": [ "400", "500", "600", @@ -9322,17 +9358,15 @@ ] }, { - "Noto Sans Egyptian Hieroglyphs": [ - "400" - ] - }, - { - "Moo Lah Lah": [ - "400" + "Edu SA Beginner": [ + "400", + "500", + "600", + "700" ] }, { - "Noto Sans Tamil Supplement": [ + "Noto Sans Tagbanwa": [ "400" ] }, @@ -9344,48 +9378,37 @@ ] }, { - "Yuji Mai": [ + "Cherish": [ "400" ] }, { - "Noto Serif Tibetan": [ - "100", - "200", - "300", - "400", - "500", - "600", - "700", - "800", - "900" + "Mingzat": [ + "400" ] }, { - "Edu SA Beginner": [ - "400", - "500", - "600", - "700" + "Flow Block": [ + "400" ] }, { - "Noto Sans Tifinagh": [ + "Estonia": [ "400" ] }, { - "Alumni Sans Collegiate One": [ + "Noto Sans Tifinagh": [ "400" ] }, { - "Cherish": [ + "Alumni Sans Collegiate One": [ "400" ] }, { - "Noto Sans Cherokee": [ + "Noto Serif Tibetan": [ "100", "200", "300", @@ -9398,20 +9421,7 @@ ] }, { - "Noto Serif Toto": [ - "400", - "500", - "600", - "700" - ] - }, - { - "Estonia": [ - "400" - ] - }, - { - "Noto Serif Ethiopic": [ + "Noto Sans Cherokee": [ "100", "200", "300", @@ -9424,42 +9434,50 @@ ] }, { - "Noto Sans Mongolian": [ + "Puppies Play": [ "400" ] }, { - "Puppies Play": [ + "Grey Qo": [ "400" ] }, { - "Noto Sans Carian": [ + "Reem Kufi Ink": [ "400" ] }, { - "Mingzat": [ - "400" + "Noto Sans Lao Looped": [ + "100", + "200", + "300", + "400", + "500", + "600", + "700", + "800", + "900" ] }, { - "Reem Kufi Ink": [ + "Noto Sans Deseret": [ "400" ] }, { - "Grey Qo": [ + "Twinkle Star": [ "400" ] }, { - "Rubik Burned": [ + "Redacted": [ "400" ] }, { - "Noto Sans Lao Looped": [ + "Noto Serif Lao": [ "100", "200", "300", @@ -9471,11 +9489,6 @@ "900" ] }, - { - "Noto Sans Deseret": [ - "400" - ] - }, { "Noto Sans Canadian Aboriginal": [ "100", @@ -9490,8 +9503,11 @@ ] }, { - "Rubik Iso": [ - "400" + "Noto Sans Sora Sompeng": [ + "400", + "500", + "600", + "700" ] }, { @@ -9508,26 +9524,26 @@ ] }, { - "Redacted": [ + "Rubik Burned": [ "400" ] }, { - "Twinkle Star": [ + "Rubik Iso": [ "400" ] }, { - "Noto Serif Lao": [ - "100", - "200", - "300", + "Noto Sans SignWriting": [ + "400" + ] + }, + { + "Noto Sans Bamum": [ "400", "500", "600", - "700", - "800", - "900" + "700" ] }, { @@ -9539,17 +9555,25 @@ ] }, { - "Noto Sans Old Italic": [ - "400" + "Noto Rashi Hebrew": [ + "100", + "200", + "300", + "400", + "500", + "600", + "700", + "800", + "900" ] }, { - "Noto Sans SignWriting": [ + "Ingrid Darling": [ "400" ] }, { - "Noto Rashi Hebrew": [ + "Noto Serif Myanmar": [ "100", "200", "300", @@ -9562,23 +9586,17 @@ ] }, { - "Noto Sans Bamum": [ - "400", - "500", - "600", - "700" + "Rubik Maze": [ + "400" ] }, { - "Noto Sans Sora Sompeng": [ - "400", - "500", - "600", - "700" + "Noto Sans Old Italic": [ + "400" ] }, { - "Rubik Maze": [ + "Noto Sans Buginese": [ "400" ] }, @@ -9588,30 +9606,43 @@ ] }, { - "Noto Sans Buginese": [ + "Flow Rounded": [ + "400" + ] + }, + { + "Noto Serif Oriya": [ + "400", + "500", + "600", + "700" + ] + }, + { + "Blaka Ink": [ + "400" + ] + }, + { + "Noto Sans Ugaritic": [ "400" ] }, { - "Ingrid Darling": [ + "Noto Serif Tangut": [ "400" ] }, { - "Noto Serif Myanmar": [ - "100", - "200", - "300", + "Noto Sans Balinese": [ "400", "500", "600", - "700", - "800", - "900" + "700" ] }, { - "Noto Serif Gurmukhi": [ + "Noto Sans Cham": [ "100", "200", "300", @@ -9624,63 +9655,65 @@ ] }, { - "Blaka Ink": [ + "Noto Sans Old Hungarian": [ "400" ] }, { - "Noto Sans Yi": [ + "Noto Sans Old Turkic": [ "400" ] }, { - "Flow Rounded": [ + "Noto Sans Tagalog": [ "400" ] }, { - "Noto Sans Old Hungarian": [ + "Noto Sans Osage": [ "400" ] }, { - "Noto Serif Oriya": [ - "400", - "500", - "600", - "700" + "Noto Sans Imperial Aramaic": [ + "400" ] }, { - "Noto Sans Tagalog": [ + "Noto Traditional Nushu": [ "400" ] }, { - "Noto Sans Ugaritic": [ - "400" + "Noto Serif Gurmukhi": [ + "100", + "200", + "300", + "400", + "500", + "600", + "700", + "800", + "900" ] }, { - "Noto Sans Imperial Aramaic": [ + "Noto Sans Buhid": [ "400" ] }, { - "Noto Sans Osage": [ + "Noto Sans Yi": [ "400" ] }, { - "Noto Sans Medefaidrin": [ - "400", - "500", - "600", - "700" + "Noto Sans Marchen": [ + "400" ] }, { - "Noto Sans Balinese": [ + "Noto Sans Medefaidrin": [ "400", "500", "600", @@ -9688,30 +9721,17 @@ ] }, { - "Noto Traditional Nushu": [ + "Noto Sans Mongolian": [ "400" ] }, - { - "Noto Sans Cham": [ - "100", - "200", - "300", - "400", - "500", - "600", - "700", - "800", - "900" - ] - }, { "Noto Sans Psalter Pahlavi": [ "400" ] }, { - "Noto Sans Buhid": [ + "Noto Serif Balinese": [ "400" ] }, @@ -9721,60 +9741,55 @@ ] }, { - "Noto Serif Tangut": [ + "Noto Sans Chakma": [ "400" ] }, { - "Noto Sans Marchen": [ + "Noto Serif Dogra": [ "400" ] }, { - "Noto Sans Chakma": [ + "Noto Sans Multani": [ "400" ] }, { - "Noto Sans Old Turkic": [ + "Noto Sans Avestan": [ "400" ] }, { - "Noto Serif Balinese": [ + "Noto Sans Old Persian": [ "400" ] }, { - "Noto Sans Bassa Vah": [ - "400", - "500", - "600", - "700" - ] - }, - { - "Noto Sans Avestan": [ + "Noto Sans Gunjala Gondi": [ "400" ] }, { - "Noto Serif Dogra": [ + "Noto Sans Cuneiform": [ "400" ] }, { - "Noto Sans Multani": [ - "400" + "Noto Sans Kayah Li": [ + "400", + "500", + "600", + "700" ] }, { - "Noto Sans Phags Pa": [ + "Noto Sans Grantha": [ "400" ] }, { - "Noto Sans Kayah Li": [ + "Noto Serif NP Hmong": [ "400", "500", "600", @@ -9790,22 +9805,7 @@ ] }, { - "Noto Sans Old Persian": [ - "400" - ] - }, - { - "Noto Sans Cuneiform": [ - "400" - ] - }, - { - "Noto Sans Gunjala Gondi": [ - "400" - ] - }, - { - "Noto Serif NP Hmong": [ + "Noto Sans Bassa Vah": [ "400", "500", "600", @@ -9813,22 +9813,22 @@ ] }, { - "Noto Sans Grantha": [ + "Noto Serif Grantha": [ "400" ] }, { - "Noto Sans Mro": [ + "Noto Sans Zanabazar Square": [ "400" ] }, { - "Noto Serif Grantha": [ + "Noto Sans Mro": [ "400" ] }, { - "Noto Sans New Tai Lue": [ + "Noto Sans Sundanese": [ "400", "500", "600", @@ -9836,12 +9836,7 @@ ] }, { - "Noto Sans Zanabazar Square": [ - "400" - ] - }, - { - "Noto Sans Tai Tham": [ + "Noto Sans New Tai Lue": [ "400", "500", "600", @@ -9849,7 +9844,7 @@ ] }, { - "Noto Sans Sundanese": [ + "Noto Sans Tai Tham": [ "400", "500", "600", @@ -9857,7 +9852,7 @@ ] }, { - "Noto Sans Cypriot": [ + "Noto Sans Inscriptional Pahlavi": [ "400" ] }, @@ -9875,17 +9870,25 @@ ] }, { - "Noto Sans Batak": [ + "Noto Sans Hanifi Rohingya": [ + "400", + "500", + "600", + "700" + ] + }, + { + "Noto Sans Cypriot": [ "400" ] }, { - "Noto Sans Old North Arabian": [ + "Noto Sans Batak": [ "400" ] }, { - "Noto Sans Hanifi Rohingya": [ + "Noto Serif Yezidi": [ "400", "500", "600", @@ -9893,16 +9896,13 @@ ] }, { - "Noto Sans Lydian": [ + "Noto Sans Runic": [ "400" ] }, { - "Noto Serif Yezidi": [ - "400", - "500", - "600", - "700" + "Noto Sans Old North Arabian": [ + "400" ] }, { @@ -9911,17 +9911,17 @@ ] }, { - "Noto Sans Inscriptional Pahlavi": [ + "Noto Sans Lydian": [ "400" ] }, { - "Noto Sans Sharada": [ + "Noto Sans Linear A": [ "400" ] }, { - "Noto Sans Inscriptional Parthian": [ + "Noto Sans Sharada": [ "400" ] }, @@ -9931,32 +9931,32 @@ ] }, { - "Noto Sans Newa": [ + "Noto Sans Glagolitic": [ "400" ] }, { - "Noto Sans Masaram Gondi": [ + "Noto Sans Inscriptional Parthian": [ "400" ] }, { - "Noto Sans Takri": [ + "Noto Sans Caucasian Albanian": [ "400" ] }, { - "Noto Sans Miao": [ + "Noto Sans Newa": [ "400" ] }, { - "Noto Sans Caucasian Albanian": [ + "Noto Sans Masaram Gondi": [ "400" ] }, { - "Noto Sans Linear A": [ + "Noto Sans Kaithi": [ "400" ] }, @@ -9966,22 +9966,27 @@ ] }, { - "Noto Sans Khudawadi": [ + "Noto Sans Takri": [ "400" ] }, { - "Noto Sans Warang Citi": [ + "Noto Sans Miao": [ "400" ] }, { - "Noto Sans Kaithi": [ + "Noto Sans Khudawadi": [ "400" ] }, { - "Noto Sans Elbasan": [ + "Noto Sans Warang Citi": [ + "400" + ] + }, + { + "Noto Sans Shavian": [ "400" ] }, @@ -9991,52 +9996,52 @@ ] }, { - "Noto Sans Khojki": [ + "Noto Sans Siddham": [ "400" ] }, { - "Noto Sans Lepcha": [ + "Noto Sans Khojki": [ "400" ] }, { - "Noto Sans Glagolitic": [ + "Noto Sans Mayan Numerals": [ "400" ] }, { - "Noto Sans Palmyrene": [ + "Noto Sans Lepcha": [ "400" ] }, { - "Noto Sans Siddham": [ + "Noto Sans Osmanya": [ "400" ] }, { - "Noto Sans Mayan Numerals": [ + "Noto Sans Modi": [ "400" ] }, { - "Noto Sans Runic": [ + "Noto Sans Hatran": [ "400" ] }, { - "Noto Sans Duployan": [ + "Noto Sans Palmyrene": [ "400" ] }, { - "Noto Sans Modi": [ + "Noto Sans Elbasan": [ "400" ] }, { - "Noto Sans Osmanya": [ + "Noto Sans Linear B": [ "400" ] }, @@ -10052,63 +10057,58 @@ "900" ] }, - { - "Noto Sans Shavian": [ - "400" - ] - }, { "Noto Sans Indic Siyaq Numbers": [ "400" ] }, { - "Noto Sans Nushu": [ + "Noto Sans Bhaiksuki": [ "400" ] }, { - "Noto Sans Phoenician": [ + "Noto Sans Mende Kikakui": [ "400" ] }, { - "Noto Sans Kharoshthi": [ + "Noto Sans Soyombo": [ "400" ] }, { - "Noto Sans Bhaiksuki": [ + "Noto Sans Phags Pa": [ "400" ] }, { - "Noto Sans Old Permic": [ + "Noto Sans Kharoshthi": [ "400" ] }, { - "Noto Sans Hatran": [ + "Noto Sans Phoenician": [ "400" ] }, { - "Noto Sans Mende Kikakui": [ + "Noto Sans Lycian": [ "400" ] }, { - "Noto Sans Lycian": [ + "Noto Sans Duployan": [ "400" ] }, { - "Noto Sans Elymaic": [ + "Noto Sans Meroitic": [ "400" ] }, { - "Noto Sans Meroitic": [ + "Noto Sans Manichaean": [ "400" ] }, @@ -10118,32 +10118,32 @@ ] }, { - "Noto Sans Nabataean": [ + "Noto Sans Elymaic": [ "400" ] }, { - "Noto Sans Old Sogdian": [ + "Noto Sans Nushu": [ "400" ] }, { - "Noto Sans Linear B": [ + "Noto Sans Old Permic": [ "400" ] }, { - "Noto Sans Manichaean": [ + "Noto Sans Sogdian": [ "400" ] }, { - "Noto Sans Mandaic": [ + "Noto Sans Old Sogdian": [ "400" ] }, { - "Noto Sans Soyombo": [ + "Noto Sans Mandaic": [ "400" ] }, @@ -10153,7 +10153,7 @@ ] }, { - "Noto Sans Sogdian": [ + "Noto Sans Nabataean": [ "400" ] } diff --git a/src/scripts/admin/index.ts b/src/scripts/admin/index.ts index b786fa66..6cecb192 100644 --- a/src/scripts/admin/index.ts +++ b/src/scripts/admin/index.ts @@ -26,7 +26,10 @@ const fontFamilySelect: { name: string; child: string[] }[] = [ }, ]; -function replaceSelectOptions( select: Element | null, newOptions: string | any[] ) { +function replaceSelectOptions( + select: Element | null, + newOptions: string | any[] +) { while ( select.options.length > 0 ) { select.remove( 0 ); } @@ -45,17 +48,17 @@ window.onload = () => { parsedFonts[ Object.keys( font )[ 0 ] ] = Object.values( font )[ 0 ]; } ); - window.modulr = { parsedFonts: [] }; + window.modulr = {}; window.modulr.parsedFonts = parsedFonts; console.log( 'Available fonts', parsedFonts ); } - fontFamilySelect.forEach( ( select ) => { + fontFamilySelect.forEach( ( select: { name: string; child: string[] } ) => { document .querySelector( '#' + selectNamePrefix + select.name ) ?.addEventListener( 'change', ( e ) => { // the selected item - const selected: HTMLInputElement = e.target; + const selected: HTMLInputElement | null = e.target; const selectedHtmlID: string = selected?.id; // store the selected font available where key is the name and the value is an array of possible font weights const selectedFont: string = selected?.value; @@ -76,7 +79,10 @@ window.onload = () => { ); replaceSelectOptions( fontWeightSelect, availableSet ); console.log( fontWeightSelect ); - fontWeightSelect.value = availableSet[ index ]; + fontWeightSelect.value = + availableSet[ + availableSet > choosenSubset ? index : 0 + ]; } ); console.log( From 6a6134c963ea75164ab932540e3c733c6cd5a4ba Mon Sep 17 00:00:00 2001 From: Erik Golinelli Date: Sat, 11 Feb 2023 13:57:08 +0100 Subject: [PATCH 037/264] a better wp-env configuration --- .wp-env.json | 9 +- bin/gfontsList.mjs | 2 +- package-lock.json | 2376 +++++++++++++++++++++++++++++++++++++++----- package.json | 13 +- 4 files changed, 2158 insertions(+), 242 deletions(-) diff --git a/.wp-env.json b/.wp-env.json index 9897e298..894727bd 100644 --- a/.wp-env.json +++ b/.wp-env.json @@ -1,4 +1,9 @@ { - "core": "WordPress/WordPress", - "themes": ["."] + "core": null, + "themes": ["./"], + "config": { + "WP_DEBUG": true, + "SCRIPT_DEBUG": true, + "WP_DEFAULT_THEME": "modul-r" + } } diff --git a/bin/gfontsList.mjs b/bin/gfontsList.mjs index 54204396..9caf1312 100644 --- a/bin/gfontsList.mjs +++ b/bin/gfontsList.mjs @@ -4,7 +4,7 @@ const ApiUrl = 'https://www.googleapis.com/webfonts/v1/webfonts' const destination = './inc/third-party/fonts.json' const apiParams = { key: 'AIzaSyCpfnm5kVng8hhP_jnAnnTXVP7MEUM89-k', // here the api key https://gist.github.com/jeremykenedy/bce044ce26fe0f90559a - sort: 'popularity' + sort: process.argv[2] || 'popularity' } /** diff --git a/package-lock.json b/package-lock.json index adeb4cb0..580b0731 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,6 +7,7 @@ "": { "name": "modul-r", "version": "2.0.0", + "hasInstallScript": true, "license": "GPL-3.0", "devDependencies": { "@babel/core": "^7.20.5", @@ -17,11 +18,12 @@ "@types/wordpress__components": "^23.0.1", "@types/wordpress__compose": "^6.0.1", "@wordpress/babel-preset-default": "^7.9.0", + "@wordpress/env": "^5.11.0", "@wordpress/scripts": "^25.2.0", "imagemin": "^8.0.1", + "imagemin-avif": "^0.1.4", "imagemin-mozjpeg": "^10.0.0", "imagemin-svgo": "^10.0.1", - "imagemin-webp": "^7.0.0", "typescript": "^4.9.4" }, "engines": { @@ -2525,6 +2527,21 @@ "@jridgewell/sourcemap-codec": "1.4.14" } }, + "node_modules/@kwsites/file-exists": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz", + "integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1" + } + }, + "node_modules/@kwsites/promise-deferred": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz", + "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==", + "dev": true + }, "node_modules/@leichtgewicht/ip-codec": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", @@ -2936,6 +2953,18 @@ "url": "https://github.com/sponsors/gregberge" } }, + "node_modules/@szmarczak/http-timer": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "dev": true, + "dependencies": { + "defer-to-connect": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@tokenizer/token": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", @@ -3020,6 +3049,18 @@ "@types/node": "*" } }, + "node_modules/@types/cacheable-request": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", + "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", + "dev": true, + "dependencies": { + "@types/http-cache-semantics": "*", + "@types/keyv": "^3.1.4", + "@types/node": "*", + "@types/responselike": "^1.0.0" + } + }, "node_modules/@types/connect": { "version": "3.4.35", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", @@ -3107,6 +3148,12 @@ "@types/node": "*" } }, + "node_modules/@types/http-cache-semantics": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", + "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", + "dev": true + }, "node_modules/@types/http-proxy": { "version": "1.17.9", "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.9.tgz", @@ -3152,6 +3199,15 @@ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true }, + "node_modules/@types/keyv": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/lodash": { "version": "4.14.191", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.191.tgz", @@ -3238,6 +3294,15 @@ "@types/react": "*" } }, + "node_modules/@types/responselike": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", + "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/retry": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", @@ -4129,6 +4194,263 @@ "node": ">=12" } }, + "node_modules/@wordpress/env": { + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/@wordpress/env/-/env-5.11.0.tgz", + "integrity": "sha512-peOtCjnQrM+qqNdre/V9C1hCP99mDWMOKmAt5e1t2fDpuj6xZgngn4Oc5AsvXkUKS4mmNgb1JM2UjOXUXsHkbg==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "copy-dir": "^1.3.0", + "docker-compose": "^0.22.2", + "extract-zip": "^1.6.7", + "got": "^11.8.5", + "inquirer": "^7.1.0", + "js-yaml": "^3.13.1", + "ora": "^4.0.2", + "rimraf": "^3.0.2", + "simple-git": "^3.5.0", + "terminal-link": "^2.0.0", + "yargs": "^17.3.0" + }, + "bin": { + "wp-env": "bin/wp-env" + } + }, + "node_modules/@wordpress/env/node_modules/@sindresorhus/is": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@wordpress/env/node_modules/cacheable-request": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", + "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", + "dev": true, + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@wordpress/env/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@wordpress/env/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/@wordpress/env/node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@wordpress/env/node_modules/extract-zip": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", + "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==", + "dev": true, + "dependencies": { + "concat-stream": "^1.6.2", + "debug": "^2.6.9", + "mkdirp": "^0.5.4", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + } + }, + "node_modules/@wordpress/env/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@wordpress/env/node_modules/got": { + "version": "11.8.6", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", + "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", + "dev": true, + "dependencies": { + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=10.19.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, + "node_modules/@wordpress/env/node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true + }, + "node_modules/@wordpress/env/node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/@wordpress/env/node_modules/keyv": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz", + "integrity": "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/@wordpress/env/node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@wordpress/env/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@wordpress/env/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/@wordpress/env/node_modules/p-cancelable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@wordpress/env/node_modules/responselike": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", + "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", + "dev": true, + "dependencies": { + "lowercase-keys": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@wordpress/env/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@wordpress/env/node_modules/yargs": { + "version": "17.6.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz", + "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@wordpress/env/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, "node_modules/@wordpress/escape-html": { "version": "2.25.0", "resolved": "https://registry.npmjs.org/@wordpress/escape-html/-/escape-html-2.25.0.tgz", @@ -4559,6 +4881,18 @@ "ajv": "^6.9.1" } }, + "node_modules/ansi-colors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", + "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", + "dev": true, + "dependencies": { + "ansi-wrap": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", @@ -4610,6 +4944,15 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/ansi-wrap": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", + "integrity": "sha512-ZyznvL8k/FZeQHr2T6LzcJ/+vBApDnMNZvfVFy3At0knswWd6rJ3/0Hhmpu8oqa6C92npmozs890sX9Dl6q+Qw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", @@ -4682,6 +5025,15 @@ "deep-equal": "^2.0.5" } }, + "node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/arr-union": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", @@ -4792,6 +5144,15 @@ "node": ">=0.10.0" } }, + "node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/ast-types-flow": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", @@ -5799,6 +6160,15 @@ "node": ">= 0.8" } }, + "node_modules/cacheable-lookup": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "dev": true, + "engines": { + "node": ">=10.6.0" + } + }, "node_modules/cacheable-request": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz", @@ -6045,6 +6415,12 @@ "node": ">=10" } }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, "node_modules/check-node-version": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/check-node-version/-/check-node-version-4.2.1.tgz", @@ -6169,6 +6545,39 @@ "webpack": "*" } }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz", + "integrity": "sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, "node_modules/cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -6180,6 +6589,15 @@ "wrap-ansi": "^7.0.0" } }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, "node_modules/clone-deep": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-0.2.4.tgz", @@ -6233,6 +6651,19 @@ "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", "dev": true }, + "node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" + } + }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -6251,6 +6682,16 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "dev": true, + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, "node_modules/colord": { "version": "2.9.3", "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", @@ -6371,6 +6812,51 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/concat-stream/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/concat-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/concat-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/config-chain": { "version": "1.1.13", "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", @@ -6443,6 +6929,12 @@ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", "dev": true }, + "node_modules/copy-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/copy-dir/-/copy-dir-1.3.0.tgz", + "integrity": "sha512-Q4+qBFnN4bwGwvtXXzbp4P/4iNk0MaiGAzvQ8OiMtlLjkIKjmNN689uVzShSM0908q7GoFHXIPx4zi75ocoaHw==", + "dev": true + }, "node_modules/copy-webpack-plugin": { "version": "10.2.4", "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-10.2.4.tgz", @@ -6914,26 +7406,6 @@ "node": ">=0.8" } }, - "node_modules/cwebp-bin": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cwebp-bin/-/cwebp-bin-7.0.1.tgz", - "integrity": "sha512-Ko5ADY74/dbfd8xG0+f+MUP9UKjCe1TG4ehpW0E5y4YlPdwDJlGrSzSR4/Yonxpm9QmZE1RratkIxFlKeyo3FA==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "bin-build": "^3.0.0", - "bin-wrapper": "^4.0.1" - }, - "bin": { - "cwebp": "cli.js" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/imagemin/cwebp-bin?sponsor=1" - } - }, "node_modules/damerau-levenshtein": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", @@ -7359,6 +7831,27 @@ "node": ">= 10" } }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/define-lazy-prop": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", @@ -7467,6 +7960,15 @@ "npm": "1.2.8000 || >= 1.4.16" } }, + "node_modules/detect-libc": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", + "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", @@ -7527,6 +8029,15 @@ "node": ">=6" } }, + "node_modules/docker-compose": { + "version": "0.22.2", + "resolved": "https://registry.npmjs.org/docker-compose/-/docker-compose-0.22.2.tgz", + "integrity": "sha512-iXWb5+LiYmylIMFXvGTYsjI1F+Xyx78Jm/uj1dxwwZLbWkUdH6yOXY5Nr3RjbYX15EgbGJCq78d29CmWQQQMPg==", + "dev": true, + "engines": { + "node": ">= 6.0.0" + } + }, "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -8749,88 +9260,6 @@ "node": ">=0.8.x" } }, - "node_modules/exec-buffer": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/exec-buffer/-/exec-buffer-3.2.0.tgz", - "integrity": "sha512-wsiD+2Tp6BWHoVv3B+5Dcx6E7u5zky+hUwOHjuH2hKSLR3dvRmX8fk8UD8uqQixHs4Wk6eDmiegVrMPjKj7wpA==", - "dev": true, - "dependencies": { - "execa": "^0.7.0", - "p-finally": "^1.0.0", - "pify": "^3.0.0", - "rimraf": "^2.5.4", - "tempfile": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/exec-buffer/node_modules/execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==", - "dev": true, - "dependencies": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/exec-buffer/node_modules/get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/exec-buffer/node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/exec-buffer/node_modules/npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", - "dev": true, - "dependencies": { - "path-key": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/exec-buffer/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/exec-buffer/node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -8934,6 +9363,15 @@ "node": ">= 0.8.0" } }, + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/expand-tilde": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-1.2.2.tgz", @@ -9055,6 +9493,69 @@ "node": ">=4" } }, + "node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extend-shallow/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extend-shallow/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/external-editor/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/extract-zip": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", @@ -9206,6 +9707,30 @@ "pend": "~1.2.0" } }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/figures/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -9741,6 +10266,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "dev": true + }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -10257,6 +10788,31 @@ } } }, + "node_modules/http2-wrapper": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "dev": true, + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, + "node_modules/http2-wrapper/node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/https-proxy-agent": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", @@ -10362,6 +10918,19 @@ "node": ">=12" } }, + "node_modules/imagemin-avif": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imagemin-avif/-/imagemin-avif-0.1.4.tgz", + "integrity": "sha512-fgoHdhFGjSLixvnNMNHlU7nYyyHo5MvR/POlbtdK2OPvJXrmyssEnsf5gyd/ZoHpc8C5c8VX4K6YhorJBIkxoQ==", + "dev": true, + "dependencies": { + "plugin-error": "1.0.1", + "sharp": "^0.31.1" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/imagemin-mozjpeg": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/imagemin-mozjpeg/-/imagemin-mozjpeg-10.0.0.tgz", @@ -10552,20 +11121,6 @@ "url": "https://github.com/sindresorhus/imagemin-svgo?sponsor=1" } }, - "node_modules/imagemin-webp": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/imagemin-webp/-/imagemin-webp-7.0.0.tgz", - "integrity": "sha512-JoYjvHNgBLgrQAkeCO7T5iNc8XVpiBmMPZmiXMhalC7K6gwY/3DCEUfNxVPOmNJ+NIJlJFvzcMR9RBxIE74Xxw==", - "dev": true, - "dependencies": { - "cwebp-bin": "^7.0.1", - "exec-buffer": "^3.2.0", - "is-cwebp-readable": "^3.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, "node_modules/imagemin/node_modules/array-union": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz", @@ -10709,6 +11264,48 @@ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true }, + "node_modules/inquirer": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.19", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/inquirer/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/inquirer/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, "node_modules/internal-slot": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.4.tgz", @@ -10869,24 +11466,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-cwebp-readable": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-cwebp-readable/-/is-cwebp-readable-3.0.0.tgz", - "integrity": "sha512-bpELc7/Q1/U5MWHn4NdHI44R3jxk0h9ew9ljzabiRl70/UIjL/ZAqRMb52F5+eke/VC8yTiv4Ewryo1fPWidvA==", - "dev": true, - "dependencies": { - "file-type": "^10.5.0" - } - }, - "node_modules/is-cwebp-readable/node_modules/file-type": { - "version": "10.11.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-10.11.0.tgz", - "integrity": "sha512-uzk64HRpUZyTGZtVuvrjP0FYxzQrBf4rojot6J65YMEbwBLB0CWm0CLojVpwpmFmxcE/lkvYICgfcGozbBq6rw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/is-date-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", @@ -10965,6 +11544,15 @@ "node": ">=0.10.0" } }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/is-jpg": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-jpg/-/is-jpg-3.0.0.tgz", @@ -12999,6 +13587,18 @@ "node": ">=0.10.0" } }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, "node_modules/mkdirp-classic": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", @@ -13050,6 +13650,12 @@ "multicast-dns": "cli.js" } }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, "node_modules/nanoid": { "version": "3.3.4", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", @@ -13062,6 +13668,12 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", + "dev": true + }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -13105,6 +13717,57 @@ "tslib": "^2.0.3" } }, + "node_modules/node-abi": { + "version": "3.33.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.33.0.tgz", + "integrity": "sha512-7GGVawqyHF4pfd0YFybhv/eM9JwTtPqx0mAanQ146O3FlSh3pA24zf9IRQTOsfTSqXTNzPSP5iagAJ94jjuVog==", + "dev": true, + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-abi/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-abi/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-abi/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/node-addon-api": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", + "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==", + "dev": true + }, "node_modules/node-fetch": { "version": "2.6.7", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", @@ -13589,6 +14252,124 @@ "node": ">= 0.8.0" } }, + "node_modules/ora": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-4.1.1.tgz", + "integrity": "sha512-sjYP8QyVWBpBZWD6Vr1M/KwknSw6kJOz41tvGMlwWeClHBtYKTbHMki1PsLZnxKpXMPbTKv9b3pjQu3REib96A==", + "dev": true, + "dependencies": { + "chalk": "^3.0.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.2.0", + "is-interactive": "^1.0.0", + "log-symbols": "^3.0.0", + "mute-stream": "0.0.8", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/ora/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/ora/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/ora/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ora/node_modules/log-symbols": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", + "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/log-symbols/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ora/node_modules/log-symbols/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ora/node_modules/log-symbols/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/os-filter-obj": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/os-filter-obj/-/os-filter-obj-2.0.0.tgz", @@ -13610,6 +14391,15 @@ "node": ">=0.10.0" } }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/p-cancelable": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", @@ -14033,6 +14823,21 @@ "node": ">=8" } }, + "node_modules/plugin-error": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz", + "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==", + "dev": true, + "dependencies": { + "ansi-colors": "^1.0.1", + "arr-diff": "^4.0.0", + "arr-union": "^3.1.0", + "extend-shallow": "^3.0.2" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/plur": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/plur/-/plur-4.0.0.tgz", @@ -14660,6 +15465,32 @@ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", "dev": true }, + "node_modules/prebuild-install": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", + "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", + "dev": true, + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -15019,6 +15850,30 @@ "node": ">=0.10.0" } }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/re-resizable": { "version": "6.9.9", "resolved": "https://registry.npmjs.org/re-resizable/-/re-resizable-6.9.9.tgz", @@ -15421,6 +16276,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "dev": true + }, "node_modules/resolve-bin": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/resolve-bin/-/resolve-bin-0.4.3.tgz", @@ -15482,6 +16343,19 @@ "lowercase-keys": "^1.0.0" } }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/retry": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", @@ -15513,6 +16387,15 @@ "rimraf": "bin.js" } }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, "node_modules/run-con": { "version": "1.2.11", "resolved": "https://registry.npmjs.org/run-con/-/run-con-1.2.11.tgz", @@ -15973,6 +16856,62 @@ "node": ">=0.10.0" } }, + "node_modules/sharp": { + "version": "0.31.3", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.31.3.tgz", + "integrity": "sha512-XcR4+FCLBFKw1bdB+GEhnUNXNXvnt0tDo4WsBsraKymuo/IAuPuCBVAL2wIkUw2r/dwFW5Q5+g66Kwl2dgDFVg==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "color": "^4.2.3", + "detect-libc": "^2.0.1", + "node-addon-api": "^5.0.0", + "prebuild-install": "^7.1.1", + "semver": "^7.3.8", + "simple-get": "^4.0.1", + "tar-fs": "^2.1.1", + "tunnel-agent": "^0.6.0" + }, + "engines": { + "node": ">=14.15.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/sharp/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/sharp/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/sharp/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", @@ -16014,6 +16953,108 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/simple-get/node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/simple-get/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/simple-git": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.16.0.tgz", + "integrity": "sha512-zuWYsOLEhbJRWVxpjdiXl6eyAyGo/KzVW+KFhhw9MqEEJttcq+32jTWSGyxTdf9e/YCohxRE+9xpWFj9FdiJNw==", + "dev": true, + "dependencies": { + "@kwsites/file-exists": "^1.1.1", + "@kwsites/promise-deferred": "^1.1.1", + "debug": "^4.3.4" + }, + "funding": { + "type": "github", + "url": "https://github.com/steveukx/git-js?sponsor=1" + } + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "dev": true + }, "node_modules/sirv": { "version": "1.0.19", "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.19.tgz", @@ -17105,6 +18146,18 @@ "node": ">=0.10.0" } }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, "node_modules/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", @@ -17371,6 +18424,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "dev": true + }, "node_modules/typedarray-to-buffer": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", @@ -17728,6 +18787,15 @@ "minimalistic-assert": "^1.0.0" } }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, "node_modules/webidl-conversions": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", @@ -20331,6 +21399,21 @@ "@jridgewell/sourcemap-codec": "1.4.14" } }, + "@kwsites/file-exists": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz", + "integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==", + "dev": true, + "requires": { + "debug": "^4.1.1" + } + }, + "@kwsites/promise-deferred": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz", + "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==", + "dev": true + }, "@leichtgewicht/ip-codec": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", @@ -20574,6 +21657,15 @@ "@svgr/plugin-svgo": "^6.5.1" } }, + "@szmarczak/http-timer": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "dev": true, + "requires": { + "defer-to-connect": "^2.0.0" + } + }, "@tokenizer/token": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", @@ -20652,6 +21744,18 @@ "@types/node": "*" } }, + "@types/cacheable-request": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", + "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", + "dev": true, + "requires": { + "@types/http-cache-semantics": "*", + "@types/keyv": "^3.1.4", + "@types/node": "*", + "@types/responselike": "^1.0.0" + } + }, "@types/connect": { "version": "3.4.35", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", @@ -20739,6 +21843,12 @@ "@types/node": "*" } }, + "@types/http-cache-semantics": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", + "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", + "dev": true + }, "@types/http-proxy": { "version": "1.17.9", "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.9.tgz", @@ -20784,6 +21894,15 @@ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true }, + "@types/keyv": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "@types/lodash": { "version": "4.14.191", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.191.tgz", @@ -20870,6 +21989,15 @@ "@types/react": "*" } }, + "@types/responselike": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", + "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "@types/retry": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", @@ -21597,6 +22725,202 @@ "react-dom": "^18.2.0" } }, + "@wordpress/env": { + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/@wordpress/env/-/env-5.11.0.tgz", + "integrity": "sha512-peOtCjnQrM+qqNdre/V9C1hCP99mDWMOKmAt5e1t2fDpuj6xZgngn4Oc5AsvXkUKS4mmNgb1JM2UjOXUXsHkbg==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "copy-dir": "^1.3.0", + "docker-compose": "^0.22.2", + "extract-zip": "^1.6.7", + "got": "^11.8.5", + "inquirer": "^7.1.0", + "js-yaml": "^3.13.1", + "ora": "^4.0.2", + "rimraf": "^3.0.2", + "simple-git": "^3.5.0", + "terminal-link": "^2.0.0", + "yargs": "^17.3.0" + }, + "dependencies": { + "@sindresorhus/is": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "dev": true + }, + "cacheable-request": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", + "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", + "dev": true, + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" + } + }, + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "requires": { + "mimic-response": "^3.1.0" + } + }, + "extract-zip": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", + "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==", + "dev": true, + "requires": { + "concat-stream": "^1.6.2", + "debug": "^2.6.9", + "mkdirp": "^0.5.4", + "yauzl": "^2.10.0" + } + }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "got": { + "version": "11.8.6", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", + "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", + "dev": true, + "requires": { + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" + } + }, + "http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true + }, + "json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "keyv": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz", + "integrity": "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==", + "dev": true, + "requires": { + "json-buffer": "3.0.1" + } + }, + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true + }, + "mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "p-cancelable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "dev": true + }, + "responselike": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", + "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", + "dev": true, + "requires": { + "lowercase-keys": "^2.0.0" + } + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "yargs": { + "version": "17.6.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz", + "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==", + "dev": true, + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + } + }, + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true + } + } + }, "@wordpress/escape-html": { "version": "2.25.0", "resolved": "https://registry.npmjs.org/@wordpress/escape-html/-/escape-html-2.25.0.tgz", @@ -21905,6 +23229,15 @@ "dev": true, "requires": {} }, + "ansi-colors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", + "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", + "dev": true, + "requires": { + "ansi-wrap": "^0.1.0" + } + }, "ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", @@ -21935,6 +23268,12 @@ "color-convert": "^2.0.1" } }, + "ansi-wrap": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", + "integrity": "sha512-ZyznvL8k/FZeQHr2T6LzcJ/+vBApDnMNZvfVFy3At0knswWd6rJ3/0Hhmpu8oqa6C92npmozs890sX9Dl6q+Qw==", + "dev": true + }, "anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", @@ -21986,6 +23325,12 @@ "deep-equal": "^2.0.5" } }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", + "dev": true + }, "arr-union": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", @@ -22066,6 +23411,12 @@ "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", "dev": true }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", + "dev": true + }, "ast-types-flow": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", @@ -22835,6 +24186,12 @@ "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", "dev": true }, + "cacheable-lookup": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "dev": true + }, "cacheable-request": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz", @@ -23024,6 +24381,12 @@ "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", "dev": true }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, "check-node-version": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/check-node-version/-/check-node-version-4.2.1.tgz", @@ -23111,6 +24474,27 @@ "del": "^4.1.1" } }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-spinners": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz", + "integrity": "sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==", + "dev": true + }, + "cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true + }, "cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -23122,6 +24506,12 @@ "wrap-ansi": "^7.0.0" } }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true + }, "clone-deep": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-0.2.4.tgz", @@ -23167,6 +24557,16 @@ "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", "dev": true }, + "color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "dev": true, + "requires": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + } + }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -23182,6 +24582,16 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "dev": true, + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, "colord": { "version": "2.9.3", "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", @@ -23292,6 +24702,50 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, "config-chain": { "version": "1.1.13", "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", @@ -23352,6 +24806,12 @@ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", "dev": true }, + "copy-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/copy-dir/-/copy-dir-1.3.0.tgz", + "integrity": "sha512-Q4+qBFnN4bwGwvtXXzbp4P/4iNk0MaiGAzvQ8OiMtlLjkIKjmNN689uVzShSM0908q7GoFHXIPx4zi75ocoaHw==", + "dev": true + }, "copy-webpack-plugin": { "version": "10.2.4", "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-10.2.4.tgz", @@ -23694,16 +25154,6 @@ "fs-exists-sync": "^0.1.0" } }, - "cwebp-bin": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cwebp-bin/-/cwebp-bin-7.0.1.tgz", - "integrity": "sha512-Ko5ADY74/dbfd8xG0+f+MUP9UKjCe1TG4ehpW0E5y4YlPdwDJlGrSzSR4/Yonxpm9QmZE1RratkIxFlKeyo3FA==", - "dev": true, - "requires": { - "bin-build": "^3.0.0", - "bin-wrapper": "^4.0.1" - } - }, "damerau-levenshtein": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", @@ -24050,6 +25500,21 @@ "execa": "^5.0.0" } }, + "defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "requires": { + "clone": "^1.0.2" + } + }, + "defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "dev": true + }, "define-lazy-prop": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", @@ -24131,6 +25596,12 @@ "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "dev": true }, + "detect-libc": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", + "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", + "dev": true + }, "detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", @@ -24179,6 +25650,12 @@ "@leichtgewicht/ip-codec": "^2.0.1" } }, + "docker-compose": { + "version": "0.22.2", + "resolved": "https://registry.npmjs.org/docker-compose/-/docker-compose-0.22.2.tgz", + "integrity": "sha512-iXWb5+LiYmylIMFXvGTYsjI1F+Xyx78Jm/uj1dxwwZLbWkUdH6yOXY5Nr3RjbYX15EgbGJCq78d29CmWQQQMPg==", + "dev": true + }, "doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -25101,69 +26578,6 @@ "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true }, - "exec-buffer": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/exec-buffer/-/exec-buffer-3.2.0.tgz", - "integrity": "sha512-wsiD+2Tp6BWHoVv3B+5Dcx6E7u5zky+hUwOHjuH2hKSLR3dvRmX8fk8UD8uqQixHs4Wk6eDmiegVrMPjKj7wpA==", - "dev": true, - "requires": { - "execa": "^0.7.0", - "p-finally": "^1.0.0", - "pify": "^3.0.0", - "rimraf": "^2.5.4", - "tempfile": "^2.0.0" - }, - "dependencies": { - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==", - "dev": true, - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", - "dev": true - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", - "dev": true - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", - "dev": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "dev": true - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "dev": true - } - } - }, "execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -25241,6 +26655,12 @@ "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", "dev": true }, + "expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "dev": true + }, "expand-tilde": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-1.2.2.tgz", @@ -25349,6 +26769,58 @@ "sort-keys-length": "^1.0.0" } }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + } + } + }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + } + } + }, "extract-zip": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", @@ -25471,6 +26943,23 @@ "pend": "~1.2.0" } }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + }, + "dependencies": { + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + } + } + }, "file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -25866,6 +27355,12 @@ "get-intrinsic": "^1.1.1" } }, + "github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "dev": true + }, "glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -26264,6 +27759,24 @@ "micromatch": "^4.0.2" } }, + "http2-wrapper": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "dev": true, + "requires": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" + }, + "dependencies": { + "quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true + } + } + }, "https-proxy-agent": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", @@ -26362,6 +27875,16 @@ } } }, + "imagemin-avif": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imagemin-avif/-/imagemin-avif-0.1.4.tgz", + "integrity": "sha512-fgoHdhFGjSLixvnNMNHlU7nYyyHo5MvR/POlbtdK2OPvJXrmyssEnsf5gyd/ZoHpc8C5c8VX4K6YhorJBIkxoQ==", + "dev": true, + "requires": { + "plugin-error": "1.0.1", + "sharp": "^0.31.1" + } + }, "imagemin-mozjpeg": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/imagemin-mozjpeg/-/imagemin-mozjpeg-10.0.0.tgz", @@ -26487,17 +28010,6 @@ "svgo": "^2.5.0" } }, - "imagemin-webp": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/imagemin-webp/-/imagemin-webp-7.0.0.tgz", - "integrity": "sha512-JoYjvHNgBLgrQAkeCO7T5iNc8XVpiBmMPZmiXMhalC7K6gwY/3DCEUfNxVPOmNJ+NIJlJFvzcMR9RBxIE74Xxw==", - "dev": true, - "requires": { - "cwebp-bin": "^7.0.1", - "exec-buffer": "^3.2.0", - "is-cwebp-readable": "^3.0.0" - } - }, "immutable": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", @@ -26572,6 +28084,44 @@ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true }, + "inquirer": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.19", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "dependencies": { + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, "internal-slot": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.4.tgz", @@ -26687,23 +28237,6 @@ "has": "^1.0.3" } }, - "is-cwebp-readable": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-cwebp-readable/-/is-cwebp-readable-3.0.0.tgz", - "integrity": "sha512-bpELc7/Q1/U5MWHn4NdHI44R3jxk0h9ew9ljzabiRl70/UIjL/ZAqRMb52F5+eke/VC8yTiv4Ewryo1fPWidvA==", - "dev": true, - "requires": { - "file-type": "^10.5.0" - }, - "dependencies": { - "file-type": { - "version": "10.11.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-10.11.0.tgz", - "integrity": "sha512-uzk64HRpUZyTGZtVuvrjP0FYxzQrBf4rojot6J65YMEbwBLB0CWm0CLojVpwpmFmxcE/lkvYICgfcGozbBq6rw==", - "dev": true - } - } - }, "is-date-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", @@ -26752,6 +28285,12 @@ "is-extglob": "^2.1.1" } }, + "is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true + }, "is-jpg": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-jpg/-/is-jpg-3.0.0.tgz", @@ -28304,6 +29843,15 @@ } } }, + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "requires": { + "minimist": "^1.2.6" + } + }, "mkdirp-classic": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", @@ -28342,12 +29890,24 @@ "thunky": "^1.0.2" } }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, "nanoid": { "version": "3.3.4", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", "dev": true }, + "napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", + "dev": true + }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -28388,6 +29948,47 @@ "tslib": "^2.0.3" } }, + "node-abi": { + "version": "3.33.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.33.0.tgz", + "integrity": "sha512-7GGVawqyHF4pfd0YFybhv/eM9JwTtPqx0mAanQ146O3FlSh3pA24zf9IRQTOsfTSqXTNzPSP5iagAJ94jjuVog==", + "dev": true, + "requires": { + "semver": "^7.3.5" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "node-addon-api": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", + "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==", + "dev": true + }, "node-fetch": { "version": "2.6.7", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", @@ -28754,6 +30355,101 @@ "word-wrap": "^1.2.3" } }, + "ora": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-4.1.1.tgz", + "integrity": "sha512-sjYP8QyVWBpBZWD6Vr1M/KwknSw6kJOz41tvGMlwWeClHBtYKTbHMki1PsLZnxKpXMPbTKv9b3pjQu3REib96A==", + "dev": true, + "requires": { + "chalk": "^3.0.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.2.0", + "is-interactive": "^1.0.0", + "log-symbols": "^3.0.0", + "mute-stream": "0.0.8", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "dependencies": { + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "log-symbols": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", + "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", + "dev": true, + "requires": { + "chalk": "^2.4.2" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + } + } + }, "os-filter-obj": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/os-filter-obj/-/os-filter-obj-2.0.0.tgz", @@ -28769,6 +30465,12 @@ "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", "dev": true }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true + }, "p-cancelable": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", @@ -29076,6 +30778,18 @@ } } }, + "plugin-error": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz", + "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==", + "dev": true, + "requires": { + "ansi-colors": "^1.0.1", + "arr-diff": "^4.0.0", + "arr-union": "^3.1.0", + "extend-shallow": "^3.0.2" + } + }, "plur": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/plur/-/plur-4.0.0.tgz", @@ -29462,6 +31176,26 @@ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", "dev": true }, + "prebuild-install": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", + "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", + "dev": true, + "requires": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + } + }, "prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -29727,6 +31461,26 @@ } } }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true + } + } + }, "re-resizable": { "version": "6.9.9", "resolved": "https://registry.npmjs.org/re-resizable/-/re-resizable-6.9.9.tgz", @@ -30029,6 +31783,12 @@ "supports-preserve-symlinks-flag": "^1.0.0" } }, + "resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "dev": true + }, "resolve-bin": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/resolve-bin/-/resolve-bin-0.4.3.tgz", @@ -30078,6 +31838,16 @@ "lowercase-keys": "^1.0.0" } }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, "retry": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", @@ -30099,6 +31869,12 @@ "glob": "^7.1.3" } }, + "run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true + }, "run-con": { "version": "1.2.11", "resolved": "https://registry.npmjs.org/run-con/-/run-con-1.2.11.tgz", @@ -30444,6 +32220,48 @@ } } }, + "sharp": { + "version": "0.31.3", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.31.3.tgz", + "integrity": "sha512-XcR4+FCLBFKw1bdB+GEhnUNXNXvnt0tDo4WsBsraKymuo/IAuPuCBVAL2wIkUw2r/dwFW5Q5+g66Kwl2dgDFVg==", + "dev": true, + "requires": { + "color": "^4.2.3", + "detect-libc": "^2.0.1", + "node-addon-api": "^5.0.0", + "prebuild-install": "^7.1.1", + "semver": "^7.3.8", + "simple-get": "^4.0.1", + "tar-fs": "^2.1.1", + "tunnel-agent": "^0.6.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, "shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", @@ -30476,6 +32294,68 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, + "simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "dev": true + }, + "simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "dev": true, + "requires": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + }, + "dependencies": { + "decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "requires": { + "mimic-response": "^3.1.0" + } + }, + "mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true + } + } + }, + "simple-git": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.16.0.tgz", + "integrity": "sha512-zuWYsOLEhbJRWVxpjdiXl6eyAyGo/KzVW+KFhhw9MqEEJttcq+32jTWSGyxTdf9e/YCohxRE+9xpWFj9FdiJNw==", + "dev": true, + "requires": { + "@kwsites/file-exists": "^1.1.1", + "@kwsites/promise-deferred": "^1.1.1", + "debug": "^4.3.4" + } + }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "dev": true, + "requires": { + "is-arrayish": "^0.3.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "dev": true + } + } + }, "sirv": { "version": "1.0.19", "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.19.tgz", @@ -31328,6 +33208,15 @@ "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==", "dev": true }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, "tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", @@ -31530,6 +33419,12 @@ "is-typed-array": "^1.1.9" } }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "dev": true + }, "typedarray-to-buffer": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", @@ -31796,6 +33691,15 @@ "minimalistic-assert": "^1.0.0" } }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "requires": { + "defaults": "^1.0.3" + } + }, "webidl-conversions": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", diff --git a/package.json b/package.json index 03afb9bd..14a06dce 100644 --- a/package.json +++ b/package.json @@ -8,11 +8,18 @@ "scripts": { "start": "wp-scripts start", "build": "wp-scripts build", + "wp-env:start": "wp-env start --debug", + "wp-env:update": "wp-env start -- --update", + "wp-env:setModulr": "wp-env run cli \"wp theme activate modul-r\"", + "wp-env:stop": "wp-env stop", + "wp-env:destroy": "wp-env destroy", "packages-update": "wp-scripts packages-update", - "generate-font-list": "node ./bin/gfontsList.mjs", - "optimize-images": "node ./bin/imagemin.mjs" + "generate-font-list": "node ./bin/gfontsList.mjs -sort=popularity", + "optimize-images": "node ./bin/imagemin.mjs", + "install": "composer install && npm run build" }, "devDependencies": { + "@wordpress/env": "^5.11.0", "@babel/core": "^7.20.5", "@babel/preset-typescript": "^7.18.6", "@types/node": "^18.13.0", @@ -26,7 +33,7 @@ "imagemin": "^8.0.1", "imagemin-mozjpeg": "^10.0.0", "imagemin-svgo": "^10.0.1", - "imagemin-webp": "^7.0.0" + "imagemin-avif": "^0.1.4" }, "engines": { "node": ">=14.0.0", From 032bc4fa0542a085202ae239547e1726b49d863e Mon Sep 17 00:00:00 2001 From: Erik Golinelli Date: Sat, 11 Feb 2023 14:17:22 +0100 Subject: [PATCH 038/264] wp-env config --- .wp-env.json | 1 + package.json | 4 +--- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/.wp-env.json b/.wp-env.json index 894727bd..0f1e951a 100644 --- a/.wp-env.json +++ b/.wp-env.json @@ -4,6 +4,7 @@ "config": { "WP_DEBUG": true, "SCRIPT_DEBUG": true, + "FS_METHOD": "direct", "WP_DEFAULT_THEME": "modul-r" } } diff --git a/package.json b/package.json index 14a06dce..46e0a3ed 100644 --- a/package.json +++ b/package.json @@ -8,9 +8,7 @@ "scripts": { "start": "wp-scripts start", "build": "wp-scripts build", - "wp-env:start": "wp-env start --debug", - "wp-env:update": "wp-env start -- --update", - "wp-env:setModulr": "wp-env run cli \"wp theme activate modul-r\"", + "wp-env:start": "wp-env start && wp-env run cli \"wp theme activate modul-r\"", "wp-env:stop": "wp-env stop", "wp-env:destroy": "wp-env destroy", "packages-update": "wp-scripts packages-update", From 3fb3d1ca82a7b0228b8c63c56326d53ca1d47dcf Mon Sep 17 00:00:00 2001 From: Erik Golinelli Date: Sat, 11 Feb 2023 15:21:22 +0100 Subject: [PATCH 039/264] removing as many properties as possible from the customizer in favor of theme.json --- functions.php | 5 +- inc/customizer.php | 176 ++++++++++++++++++++-------------------- inc/enqueue-scripts.php | 22 ++--- inc/theme-setup.php | 28 ------- theme.json | 4 +- 5 files changed, 104 insertions(+), 131 deletions(-) diff --git a/functions.php b/functions.php index b5b69a75..09d801fb 100644 --- a/functions.php +++ b/functions.php @@ -6,6 +6,8 @@ 'colors' => array( 'primary' => '#6f4cad', 'secondary' => '#16bebb', + ), + 'shades' => array( 'white' => '#ffffff', 'white-smoke' => '#f1f1f1', 'gray-light' => '#e3e3e3', @@ -24,10 +26,9 @@ 'footer-bottom-color' => 'black', 'footer-text-color' => 'white-smoke', ), - 'social_media_enabled' => array( 'Facebook', 'Instagram', 'Twitter', 'Linkedin', 'YouTube', 'www' ), 'customizer_options' => array( - 'weights' => array( 100, 200, 300, 400, 500, 600, 700, 800, 900 ), 'color_variance' => 0.3, + 'weights' => array( 100, 200, 300, 400, 500, 600, 700, 800, 900 ), 'font_family_default' => array( array( 'name' => 'bold', 'default' => 600, 'input' => 'select', 'select_type' => 'weights' ), array( 'name' => 'regular', 'default' => 400, 'input' => 'select', 'select_type' => 'weights' ), diff --git a/inc/customizer.php b/inc/customizer.php index 50ed753b..d924158b 100644 --- a/inc/customizer.php +++ b/inc/customizer.php @@ -335,80 +335,83 @@ function modul_r_sanitize_file( $file, $setting ) { endif; add_action( 'customize_register', 'modul_r_customizer_opt' ); -if ( ! function_exists('modul_r_theme_colors_setup') ) : +if ( ! function_exists( 'modul_r_theme_colors_setup' ) ) : function modul_r_theme_colors_setup() { - // get the custom colors - $primary_color = sanitize_hex_color(get_theme_mod( 'primary-color' )); - $secondary_color = sanitize_hex_color(get_theme_mod( 'secondary-color' )); + // Get the custom colors. + $primary_color = sanitize_hex_color( get_theme_mod( 'primary-color' ) ); + $secondary_color = sanitize_hex_color( get_theme_mod( 'secondary-color' ) ); - // check if custom color is set otherwise use the default colors - $primary_color = $primary_color != "" ? $primary_color : sanitize_hex_color($GLOBALS['modul_r_defaults']['colors']['primary']); - $secondary_color = $secondary_color != "" ? $secondary_color : sanitize_hex_color($GLOBALS['modul_r_defaults']['colors']['secondary']); + if ( empty($GLOBALS['modul_r_defaults']) ) return; + $modul_r_defaults = $GLOBALS['modul_r_defaults']; - $variance = floatval( $GLOBALS['modul_r_defaults']['customizer_options']['color_variance'] ); + // Check if custom color is set otherwise use the default colors. + $primary_color = ! empty( $primary_color ) ? $primary_color : sanitize_hex_color( $modul_r_defaults['colors']['primary'] ); + $secondary_color = ! empty( $secondary_color ) ? $secondary_color : sanitize_hex_color( $modul_r_defaults['colors']['secondary'] ); + + $variance = floatval( $modul_r_defaults['customizer_options']['color_variance'] ); add_theme_support( 'editor-color-palette', array( - array( - 'name' => __( 'Theme primary color', 'modul-r' ), - 'slug' => 'primary', - 'color' => $primary_color, - ), - array( - 'name' => __( 'Theme primary color light', 'modul-r' ), - 'slug' => 'primary-light', - 'color' => modul_r_adjustBrightness($primary_color, $variance), - ), - array( - 'name' => __( 'Theme primary color dark', 'modul-r' ), - 'slug' => 'primary-dark', - 'color' => modul_r_adjustBrightness($primary_color, -$variance ), - ), - array( - 'name' => __( 'Theme secondary color', 'modul-r' ), - 'slug' => 'secondary', - 'color' => $secondary_color, - ), - array( - 'name' => __( 'Theme secondary color light', 'modul-r' ), - 'slug' => 'secondary-light', - 'color' => modul_r_adjustBrightness($secondary_color, $variance), - ), - array( - 'name' => __( 'Theme secondary color dark', 'modul-r' ), - 'slug' => 'secondary-dark', - 'color' => modul_r_adjustBrightness($secondary_color, -$variance), - ), - array( - 'name' => __( 'White', 'modul-r' ), - 'slug' => 'white', - 'color' => sanitize_hex_color($GLOBALS['modul_r_defaults']['colors']['white']), - ), - array( - 'name' => __( 'White Smoke', 'modul-r' ), - 'slug' => 'white-smoke', - 'color' => sanitize_hex_color($GLOBALS['modul_r_defaults']['colors']['white-smoke']), - ), - array( - 'name' => __( 'Light gray', 'modul-r' ), - 'slug' => 'gray-light', - 'color' => sanitize_hex_color($GLOBALS['modul_r_defaults']['colors']['gray-light']), - ), - array( - 'name' => __( 'Gray', 'modul-r' ), - 'slug' => 'gray', - 'color' => sanitize_hex_color($GLOBALS['modul_r_defaults']['colors']['gray']), - ), - array( - 'name' => __( 'Dark gray', 'modul-r' ), - 'slug' => 'gray-dark', - 'color' => sanitize_hex_color($GLOBALS['modul_r_defaults']['colors']['gray-dark']), - ), - array( - 'name' => __( 'Black', 'modul-r' ), - 'slug' => 'black', - 'color' => sanitize_hex_color($GLOBALS['modul_r_defaults']['colors']['black']), - ), + array( + 'name' => __( 'Theme primary color', 'modul-r' ), + 'slug' => 'primary', + 'color' => $primary_color, + ), + array( + 'name' => __( 'Theme primary color light', 'modul-r' ), + 'slug' => 'primary-light', + 'color' => modul_r_adjustBrightness( $primary_color, $variance ), + ), + array( + 'name' => __( 'Theme primary color dark', 'modul-r' ), + 'slug' => 'primary-dark', + 'color' => modul_r_adjustBrightness( $primary_color, - $variance ), + ), + array( + 'name' => __( 'Theme secondary color', 'modul-r' ), + 'slug' => 'secondary', + 'color' => $secondary_color, + ), + array( + 'name' => __( 'Theme secondary color light', 'modul-r' ), + 'slug' => 'secondary-light', + 'color' => modul_r_adjustBrightness( $secondary_color, $variance ), + ), + array( + 'name' => __( 'Theme secondary color dark', 'modul-r' ), + 'slug' => 'secondary-dark', + 'color' => modul_r_adjustBrightness( $secondary_color, - $variance ), + ), + array( + 'name' => __( 'White', 'modul-r' ), + 'slug' => 'white', + 'color' => sanitize_hex_color( $modul_r_defaults['shades']['white'] ), + ), + array( + 'name' => __( 'White Smoke', 'modul-r' ), + 'slug' => 'white-smoke', + 'color' => sanitize_hex_color( $modul_r_defaults['shades']['white-smoke'] ), + ), + array( + 'name' => __( 'Light gray', 'modul-r' ), + 'slug' => 'gray-light', + 'color' => sanitize_hex_color( $modul_r_defaults['shades']['gray-light'] ), + ), + array( + 'name' => __( 'Gray', 'modul-r' ), + 'slug' => 'gray', + 'color' => sanitize_hex_color( $modul_r_defaults['shades']['gray'] ), + ), + array( + 'name' => __( 'Dark gray', 'modul-r' ), + 'slug' => 'gray-dark', + 'color' => sanitize_hex_color( $modul_r_defaults['shades']['gray-dark'] ), + ), + array( + 'name' => __( 'Black', 'modul-r' ), + 'slug' => 'black', + 'color' => sanitize_hex_color( $modul_r_defaults['shades']['black'] ), + ), ) ); } endif; @@ -418,26 +421,24 @@ function modul_r_theme_colors_setup() { if ( ! function_exists( 'modul_r_css_props' ) ) : function modul_r_css_props() { - // The custom colors - // Main colors + $defaults = $GLOBALS['modul_r_defaults']; + + // Colors $colors = array(); - $variance = floatval( $GLOBALS['modul_r_defaults']['customizer_options']['color_variance'] ); - $colors['primary'] = modul_r_get_theme_color( 'primary-color', $GLOBALS['modul_r_defaults']['colors']['primary'] ); + $variance = floatval( $defaults['customizer_options']['color_variance'] ); + $colors['primary'] = modul_r_get_theme_color( 'primary-color', $defaults['colors']['primary'] ); $colors['primary-light'] = modul_r_adjustBrightness( $colors['primary'], $variance ); $colors['primary-dark'] = modul_r_adjustBrightness( $colors['primary'], - $variance ); - $colors['secondary'] = modul_r_get_theme_color( 'secondary-color', $GLOBALS['modul_r_defaults']['colors']['secondary'] ); + $colors['secondary'] = modul_r_get_theme_color( 'secondary-color', $defaults['colors']['secondary'] ); $colors['secondary-light'] = modul_r_adjustBrightness( $colors['secondary'], $variance ); $colors['secondary-dark'] = modul_r_adjustBrightness( $colors['secondary'], - $variance ); - // Base Tones - $colors['white'] = sanitize_hex_color( $GLOBALS['modul_r_defaults']['colors']['white'] ); - $colors['white-smoke'] = sanitize_hex_color( $GLOBALS['modul_r_defaults']['colors']['white-smoke'] ); - $colors['gray-light'] = sanitize_hex_color( $GLOBALS['modul_r_defaults']['colors']['gray-light'] ); - $colors['gray'] = sanitize_hex_color( $GLOBALS['modul_r_defaults']['colors']['gray'] ); - $colors['gray-dark'] = sanitize_hex_color( $GLOBALS['modul_r_defaults']['colors']['gray-dark'] ); - $colors['black'] = sanitize_hex_color( $GLOBALS['modul_r_defaults']['colors']['black'] ); - - // Typography colors - $text_color = get_theme_mod( 'text-color' ) !== false ? sanitize_hex_color( get_theme_mod( 'text-color' ) ) : sanitize_hex_color( $GLOBALS['modul_r_defaults']['colors'][ $GLOBALS['modul_r_defaults']['style']['text-color'] ] ); + // Shades + $colors['white'] = sanitize_hex_color( $defaults['shades']['white'] ); + $colors['white-smoke'] = sanitize_hex_color( $defaults['shades']['white-smoke'] ); + $colors['gray-light'] = sanitize_hex_color( $defaults['shades']['gray-light'] ); + $colors['gray'] = sanitize_hex_color( $defaults['shades']['gray'] ); + $colors['gray-dark'] = sanitize_hex_color( $defaults['shades']['gray-dark'] ); + $colors['black'] = sanitize_hex_color( $defaults['shades']['black'] ); // Typography function modul_r_get_vars( $var_set, $suffix = "--wp--" ) { @@ -461,16 +462,16 @@ function modul_r_get_vars( $var_set, $suffix = "--wp--" ) { $wp_theme_json_prefix = '--wp--preset--color--'; - // Typography - $fonts = modul_r_get_fonts(); - - // create the custom colors scheme + // The custom colors scheme generator foreach ( $colors as $key => $color ) { $custom_prop_color = "var(". $wp_theme_json_prefix . $key . ")"; $atf_css .= ' .has-' . $key . '-color, .wp-block-pullquote.is-style-solid-color blockquote.has-' . $key . '-color, .wp-block-pullquote.is-style-solid-color blockquote.has-' . $key . '-color p{color:' . $custom_prop_color . '}'; $atf_css .= ' .has-' . $key . '-background-color, .wp-block-pullquote.is-style-solid-color.has-' . $key . '-background-color{background:' . $custom_prop_color . '}.has-' . $key . '-background-color:before{background:' . $custom_prop_color . ' !important}'; } + // Typography + $fonts = modul_r_get_fonts(); + $custom_props = "{"; foreach ($fonts as $type => $font) { @@ -485,7 +486,6 @@ function modul_r_get_vars( $var_set, $suffix = "--wp--" ) { "--color--white--decimal: ".modul_r_hex2rgb($colors['white'], true). ";" . "--color--secondary--decimal: ".modul_r_hex2rgb($colors['secondary'], true). ";" . "--color--primary--decimal: ".modul_r_hex2rgb($colors['primary'], true). ";" . - "--color--text: $text_color;" . "}"; if (is_admin()) { diff --git a/inc/enqueue-scripts.php b/inc/enqueue-scripts.php index 7b0ca5e1..c9cf7427 100644 --- a/inc/enqueue-scripts.php +++ b/inc/enqueue-scripts.php @@ -20,18 +20,18 @@ function modul_r_theme_scripts() { function modul_r_content_height_fix() { ?> '; } endif; diff --git a/inc/theme-setup.php b/inc/theme-setup.php index cdee6386..10b96922 100644 --- a/inc/theme-setup.php +++ b/inc/theme-setup.php @@ -54,34 +54,6 @@ function modul_r_theme_setup() { 'header-text' => array( 'site-title', 'site-description' ), ) ); - add_theme_support( 'custom-header', array( - 'default-image' => '', - 'width' => 0, - 'height' => 0, - 'flex-height' => false, - 'flex-width' => false, - 'uploads' => true, - 'random-default' => false, - 'header-text' => true, - 'default-text-color' => str_replace( '#', '', sanitize_hex_color( $GLOBALS['modul_r_defaults']['colors'][ $GLOBALS['modul_r_defaults']['style']['header-title-color'] ] ) ), - 'wp-head-callback' => '', - 'admin-head-callback' => '', - 'admin-preview-callback' => '', - ) ); - - add_theme_support( 'custom-background', array( - 'default-color' => str_replace( '#', '', sanitize_hex_color( $GLOBALS['modul_r_defaults']['colors'][ $GLOBALS['modul_r_defaults']['style']['background'] ] ) ), - 'default-image' => '', - 'default-preset' => 'default', // 'default', 'fill', 'fit', 'repeat', 'custom' - 'default-position-x' => 'left', // 'left', 'center', 'right' - 'default-position-y' => 'top', // 'top', 'center', 'bottom' - 'default-size' => 'auto', // 'auto', 'contain', 'cover' - 'default-repeat' => 'repeat', // 'repeat-x', 'repeat-y', 'repeat', 'no-repeat' - 'default-attachment' => 'scroll', // 'scroll', 'fixed' - 'admin-head-callback' => '', - 'admin-preview-callback' => '', - ) ); - // Add support for editor styles. add_theme_support( 'editor-styles' ); diff --git a/theme.json b/theme.json index 6cb48c28..72b871d2 100644 --- a/theme.json +++ b/theme.json @@ -150,13 +150,13 @@ } }, "color": { - "background": "#fdf0e9", + "background": "#ffffff", "text": "var(--color--text)" }, "elements": { "button": { "color": { - "background": "#ef6d58", + "background": "#ffffff", "text": "var:preset|color|white" }, "typography": { From c5b45643b1959c836a4ddbd900677eb905c6d5a8 Mon Sep 17 00:00:00 2001 From: Erik Golinelli Date: Sat, 11 Feb 2023 15:48:08 +0100 Subject: [PATCH 040/264] shrink the css by removing what is no longer needed since it can be done with the new editor --- src/styles/base/_helpers.scss | 8 -- src/styles/base/_inputs.scss | 1 - src/styles/base/_table.scss | 3 - src/styles/components/_content-header.scss | 44 ------- src/styles/components/_content.scss | 61 --------- src/styles/components/_footer.scss | 141 +-------------------- src/styles/components/_hamburger.scss | 2 - src/styles/components/_icons.scss | 74 ----------- src/styles/components/_sidebar.scss | 31 +---- src/styles/components/components.scss | 3 - src/styles/pages/_archive.scss | 133 +------------------ src/styles/pages/_author.scss | 37 +----- src/styles/pages/_single.scss | 3 +- theme.json | 17 ++- 14 files changed, 16 insertions(+), 542 deletions(-) delete mode 100644 src/styles/components/_content-header.scss delete mode 100644 src/styles/components/_content.scss delete mode 100644 src/styles/components/_hamburger.scss diff --git a/src/styles/base/_helpers.scss b/src/styles/base/_helpers.scss index bc561516..e0d23e60 100644 --- a/src/styles/base/_helpers.scss +++ b/src/styles/base/_helpers.scss @@ -17,11 +17,3 @@ } .ellipsis { @include ellipsis } - -%elevation--01 { - box-shadow: 0 2px 10px -6px rgba( var(--wp--preset--color--black--decimal), .8); -} - -%text_shadow--01 { - text-shadow: 0 1px 2px rgba( var(--wp--preset--color--black--decimal), .3); -} diff --git a/src/styles/base/_inputs.scss b/src/styles/base/_inputs.scss index a5684b4b..9df59fb8 100644 --- a/src/styles/base/_inputs.scss +++ b/src/styles/base/_inputs.scss @@ -33,7 +33,6 @@ input[type="tel"] { box-shadow: 0 0 0 var(--wp--preset--color--gray-light); } - [type="checkbox"], [type="radio"] { margin: 0; display: inline; diff --git a/src/styles/base/_table.scss b/src/styles/base/_table.scss index 533406de..7a442293 100644 --- a/src/styles/base/_table.scss +++ b/src/styles/base/_table.scss @@ -18,6 +18,3 @@ table { } } } - -.entry-content .wp-block-table { -} diff --git a/src/styles/components/_content-header.scss b/src/styles/components/_content-header.scss deleted file mode 100644 index 77ab1b46..00000000 --- a/src/styles/components/_content-header.scss +++ /dev/null @@ -1,44 +0,0 @@ -// Page Header -.site { - .entry-header {} -} - -// Page Title -.page-title, -.entry-title, -.has-title-color { - &, - a { - color: var(--wp--preset--color--title); - } -} - -.entry-header, -.woocommerce-products-header { - display: block; - width: 100%; - max-width: var(--sizes--content--width-wide); - text-align: center; - margin: 0 auto var(--wp--preset--spacing--50); - - @media #{$mq__responsive_breakpoint} { - max-width: 100%; - width: auto; - padding-left: var(--wp--custom--responsive--side-margin); - padding-right: var(--wp--custom--responsive--side-margin); - } - - p { - margin: 0 auto; - width: var(--sizes--entry-title--width); - line-height: var(--wp--custom--line-height--large); - - @media #{$mq__responsive_breakpoint} { - width: auto; - } - - &.breadcrumbs { - width: 100%; - } - } -} diff --git a/src/styles/components/_content.scss b/src/styles/components/_content.scss deleted file mode 100644 index 95dca621..00000000 --- a/src/styles/components/_content.scss +++ /dev/null @@ -1,61 +0,0 @@ -// Main Image - -%website-width { - // used for blocks sizes - width: var(--sizes--content--width); - max-width: 100%; - - box-sizing: border-box; - padding-left: var(--wp--custom--responsive--side-margin); - padding-right: var(--wp--custom--responsive--side-margin); - margin: 0 auto var(--wp--preset--spacing--60); - - @media #{$mq__smaller-than-tablet} { - padding-left: var(--wp--custom--responsive--side-margin); - padding-right: var(--wp--custom--responsive--side-margin); - } -} - -body.has-sidebar, -body.woocommerce { - - &.sidebar-left .site-content { - flex-direction: row-reverse; - - @media #{$mq__responsive_breakpoint} { - flex-direction: column; - } - } - - - &.has-featured-image .site-content { - padding-top: var(--wp--preset--spacing--70); - - @media #{$mq__responsive_breakpoint} { - padding-top: var(--wp--custom--responsive--side-margin); - } - } - - .site-content { - display: flex; - justify-content: center; - - width: var(--sizes--content--width-wide); - max-width: 100%; - - box-sizing: border-box; - margin: 0 auto; - - @media #{$mq__responsive_breakpoint} { - width: 100%; - flex-direction: column; - } - - .content-area { - width: calc(100% - ( var(--sizes--sidebar--width) + var(--sizes--sidebar--side-margin)) ); - @media #{$mq__responsive_breakpoint} { - width: 100%; - } - } - } -} diff --git a/src/styles/components/_footer.scss b/src/styles/components/_footer.scss index 61ed65a2..ff2cb412 100644 --- a/src/styles/components/_footer.scss +++ b/src/styles/components/_footer.scss @@ -1,140 +1 @@ -.site-footer { - margin-top: var(--wp--preset--spacing--70); - clear: both; - font-size:var(--wp--preset--font-size--small); - - li, - p { - font-size:var(--wp--preset--font-size--small); - } - - h1, - h2, - h3, - h4, - .widget-title { - color: var(--footer--text-color); - white-space: nowrap; - padding-bottom: var(--wp--preset--spacing--40); - margin-bottom: var(--wp--preset--spacing--50); - font-size:var(--wp--preset--font-size--medium); - font-weight: var(--typography--font--title--bold); - border-color: rgba( var(--footer--text-color-decimal), .5); - - @media #{$mq__smaller-than-tablet} { - font-weight: var(--wp--preset--font-size--medium); - } - } - - .widget-title { - border-width: 0 0 1px; - border-style: solid; - } - - .has-footer-text-color, - a, - b, - li, - p { - color: rgba( var(--footer--text-color-decimal), .9); - } - - .footer-widgets { - padding-top: var(--wp--preset--spacing--70); - padding-bottom: var(--wp--preset--spacing--60); - display: flex; - - @media #{$mq__smaller-than-tablet} { - padding-top: var(--wp--preset--spacing--30); - padding-bottom: var(--wp--preset--spacing--30); - flex-direction: column-reverse; - width: 100%; - } - - ul { - padding: 0; - margin: 0; - ul { - margin-left: var(--wp--preset--spacing--40); - } - } - - li { - line-height: 2.2; - padding: 0; - margin: 0; - text-overflow: ellipsis; - overflow: hidden; - white-space: nowrap; - - a { - font-weight: var(--typography--default--font-weight--regular); - } - - .post-date { - font-size: var(--wp--preset--font-size--extra-small); - margin-left: var(--wp--preset--spacing--40); - opacity: .5; - } - } - } - - .widget { - flex: 1 1 0; - width: 100%; - box-sizing: border-box; - margin-right: var(--wp--preset--spacing--70); - padding-right: var(--wp--preset--spacing--70); - max-width: var(--sizes--sidebar--width); - - @media #{$mq__smaller-than-tablet} { - margin-left: 0 !important; - margin-right: 0 !important; - padding-bottom: var(--wp--preset--spacing--60); - max-width: inherit; - } - - &:first-of-type {margin-left: 0;} - - &:last-of-type {margin-right: 0;} - - &.credits { - flex-grow: 2; - margin-right: var(--wp--preset--spacing--70); - width: 100%; - max-width: calc( var(--sizes--sidebar--width) * 1.3); - - @media #{$mq__smaller-than-tablet} { - margin: 0; - padding-top: var(--wp--preset--spacing--60); - padding-bottom: 0; - } - - img { - max-width: var(--wp--custom--sizes--entry-title--width); - max-height: 100px; - width: 100%; - object-fit: contain; - object-position: left; - padding-bottom: var(--wp--preset--spacing--30); - } - } - - } - - .footer-info { - padding: var(--wp--preset--spacing--40) 0; - - @media #{$mq__larger-than-tablet} { - text-align: right; - } - - p { - line-height: 2.2; - margin-top: 0; - margin-bottom: 0; - font-size: var(--wp--preset--font-size--extra-small); - } - } - -} +footer.wp-block-template-part {} diff --git a/src/styles/components/_hamburger.scss b/src/styles/components/_hamburger.scss deleted file mode 100644 index 7ebcdfb9..00000000 --- a/src/styles/components/_hamburger.scss +++ /dev/null @@ -1,2 +0,0 @@ -// The animated header button -.menu-resp {} diff --git a/src/styles/components/_icons.scss b/src/styles/components/_icons.scss index 3e6621c5..54fc34a4 100644 --- a/src/styles/components/_icons.scss +++ b/src/styles/components/_icons.scss @@ -1,77 +1,3 @@ -@function colorEncode($color) { - @if (str-index(ie-hex-str($color), "#") == 1 and str-length(ie-hex-str($color)) == 9 and type-of($color) == 'color') { - @return '%23' + str-slice(ie-hex-str($color), 4, 9); - } - - @return $color ; -} - -%social-email { - background-image: url('data:image/svg+xml;utf8,'); -} -%social-print { - background-image: url('data:image/svg+xml;utf8,'); -} -%social-facebook { - background-image: url('data:image/svg+xml;utf8,'); -} -%social-twitter { - background-image: url('data:image/svg+xml;utf8,'); -} -%social-youtube { - background-image: url('data:image/svg+xml;utf8,'); -} -%social-linkedin { - background-image: url('data:image/svg+xml;utf8,'); -} -%social-www { - background-image: url('data:image/svg+xml;utf8,'); -} - -$Socials: email, print, facebook, twitter, youtube, linkedin, www; - - -i.social-ico { - $social__size: 32px; - - display: inline-block; - width: $social__size; - height: $social__size; - background: no-repeat center; - background-size: $social__size; - cursor: pointer; - transition: var(--wp--custom--animations--length); - padding:0; - margin: var(--wp--preset--spacing--30) ($social__size * .5) var(--wp--preset--spacing--30) 0; - - &:before, - &:hover { - filter: brightness(1.2); - } - - &:before { position:absolute;} - - &.small { - $social__size: 24px; - width: $social__size; - height: $social__size; - background-size: $social__size; - margin: var(--wp--preset--spacing--30) ($social__size * .5) var(--wp--preset--spacing--30) 0; - } - - @each $Social in $Socials { - &.#{$Social} { - @extend %social-#{$Social}; - } - } -} - -.share-buttons i { - filter: invert(.2); -} - - - @mixin material_icon($icon, $size, $color: "var(--wp--preset--color--black)") { &:before { font-family: "Material Icons"; diff --git a/src/styles/components/_sidebar.scss b/src/styles/components/_sidebar.scss index cf1821c0..1569bf5f 100644 --- a/src/styles/components/_sidebar.scss +++ b/src/styles/components/_sidebar.scss @@ -1,42 +1,13 @@ -.sidebar { - - min-width: var(--sizes--sidebar--width); - width: var(--sizes--sidebar--width); - padding: 0 var(--wp--custom--responsive--side-margin); - box-sizing: border-box; - +aside.wp-block-template-part { .search-form { max-width: 100%; } - @media #{$mq__larger-than-tablet} { - padding: 0; - .sidebar-right & {padding-left: var(--sizes--sidebar--side-margin);} - .sidebar-left & {padding-right: var(--sizes--sidebar--side-margin);} - } - - @media #{$mq__responsive_breakpoint} { - padding-top: var(--wp--preset--spacing--60); - border-top: 1px solid rgba(var(--wp--preset--color--black), 0.05); - min-width: inherit; - width: 100%; - } - section { padding-bottom: var(--wp--preset--spacing--60); } - h3 { - margin: 0 0 var(--wp--preset--spacing--40); - font-size: var(--wp--preset--font-size--large); - } - li { margin: 0 0 var(--wp--preset--spacing--30) 20px; } - - a { - text-decoration: none; - color: var(--wp--preset--color--text) - } } diff --git a/src/styles/components/components.scss b/src/styles/components/components.scss index 5b2eaea1..1fcc67cd 100644 --- a/src/styles/components/components.scss +++ b/src/styles/components/components.scss @@ -1,11 +1,8 @@ @import '_accessibility'; @import '_blocks'; @import '_comments'; -@import '_content'; -@import '_content-header'; @import '_extras'; @import '_footer'; -@import '_hamburger'; @import '_header'; @import '_icons'; @import '_navigation'; diff --git a/src/styles/pages/_archive.scss b/src/styles/pages/_archive.scss index 5edb7002..65dba4e0 100644 --- a/src/styles/pages/_archive.scss +++ b/src/styles/pages/_archive.scss @@ -1,133 +1,2 @@ body.search-results, -body.archive { - - // background mask of the article - .site-main { - .article-container { - - &:nth-child(2n + 2) { - position: relative; - &:before { - display: block; - position: absolute; - z-index: 1; - transform: rotate(-1deg); - top: 0; - bottom: 0; - left: -100px; - right: -100px; - content: ''; - background-color: rgba(var(--wp--preset--color--black--decimal), .05); - } - } - - - @media #{$mq__smaller-than-tablet} { - &:first-of-type { - .entry-image { - display: none !important; - } - } - } - - } - } - - article { - display: flex; - margin: 0 auto; - padding: var(--wp--preset--spacing--70) 0; - min-height: 100px; - position: relative; - z-index: 2; - - @media #{$mq__smaller-than-tablet} { - flex-direction: column; - padding: var(--wp--preset--spacing--60) var(--wp--custom--responsive--side-margin); - } - - .article-wrapper { - max-width: 100%; - width: 100%; - } - - .entry-image { - $archive_image: 280px; - min-width: $archive_image; - max-width: $archive_image; - margin-right: var(--wp--preset--spacing--60); - - @media #{$mq__smaller-than-tablet} { - width: calc(100% + var(--wp--preset--spacing--70) * 2); - min-width: inherit; - max-width: calc(100% + var(--wp--preset--spacing--70) * 2); - margin: calc(var(--wp--preset--spacing--60) * -1) calc(var(--wp--preset--spacing--70) * -1) var(--wp--custom--responsive--side-margin); - img { - transform: rotate(-1deg); - } - } - - + .article-wrapper { - min-width: calc( 100% - #{$archive_image} + var(--wp--preset--spacing--60) ); - @media #{$mq__smaller-than-tablet} {width: 100%;} - } - - img { - height: 100%; - max-height: $archive_image * 1.5; - object-fit: cover; - } - - } - - &.product { - .entry-image img { - object-fit: contain; - } - } - - .entry-header { - padding-left: 0; - padding-right: 0; - margin: 0; - - .entry-title { - width: 100%; - font-size: var(--wp--preset--font-size--extra-large); - margin: 0 0 var(--wp--preset--spacing--40); - padding: 0; - text-align: left; - @media #{$mq__smaller-than-tablet} {font-size: 24px;} - } - - .breadcrumbs { - margin-top: 0; - text-align: left; - } - } - - .entry-content { - width: 100%; - p { - margin: 0; - padding: 0; - } - } - - .entry-footer { - .post-meta { - padding: var(--wp--preset--spacing--50) 0 0; - } - .meta-wrapper { - p { - font-size: var(--wp--preset--font-size--extra-small); - text-transform: uppercase; - margin-left: var(--wp--preset--spacing--40); - &:first-of-type { margin-left: 0} - } - } - } - - } - -} +body.archive {} diff --git a/src/styles/pages/_author.scss b/src/styles/pages/_author.scss index 5d289772..5513c342 100644 --- a/src/styles/pages/_author.scss +++ b/src/styles/pages/_author.scss @@ -1,37 +1,2 @@ // todo: styling this -.bypostauthor { - background-color: transparent; -} - - -.article-author { - $avatar_size: 64px; - $comments__avatar-size: 64px; - - .avatar{ - float: left; - max-width: var(--wp--preset--spacing--70); - margin-right: var(--wp--preset--spacing--60); - @media #{$mq__tablet} { - max-width: $avatar_size; - margin-right: var(--wp--custom--responsive--side-margin); - } - img{ - margin: 0; - border-radius: 50%; - overflow: hidden; - vertical-align: middle; - } - } - - - .author-details { - display: table; - } - - .author-description p { - font-size: var(--wp--preset--font-size--small); - margin: var(--wp--preset--spacing--40) 0 ; - line-height: var(--wp--custom--line-height--large); - } -} +.article-author {} diff --git a/src/styles/pages/_single.scss b/src/styles/pages/_single.scss index 86f40d25..2fbb91ab 100644 --- a/src/styles/pages/_single.scss +++ b/src/styles/pages/_single.scss @@ -1,2 +1 @@ -body.single { -} \ No newline at end of file +body.single {} diff --git a/theme.json b/theme.json index 72b871d2..7e3ad586 100644 --- a/theme.json +++ b/theme.json @@ -34,17 +34,12 @@ "length": "350ms" }, "line-height": { - "large": 2.2, + "large": 2.4, "medium": 1.7, "small": 1.2 }, "responsive": { "side-margin": "var(--wp--preset--spacing--50)" - }, - "sizes": { - "entry-title": { - "width": "66%" - } } }, "layout": { @@ -154,6 +149,16 @@ "text": "var(--color--text)" }, "elements": { + "link": { + "typography": { + "textDecoration": "none" + }, + ":hover": { + "typography": { + "textDecoration": "underline" + } + } + }, "button": { "color": { "background": "#ffffff", From 12bcacd901ea103cd13e5722ce125aaf4a03c814 Mon Sep 17 00:00:00 2001 From: Erik Golinelli Date: Sat, 11 Feb 2023 16:00:10 +0100 Subject: [PATCH 041/264] enhanced font families sorting --- bin/gfontsList.mjs | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/bin/gfontsList.mjs b/bin/gfontsList.mjs index 9caf1312..6c4e09f2 100644 --- a/bin/gfontsList.mjs +++ b/bin/gfontsList.mjs @@ -2,9 +2,31 @@ import fs from 'fs' const ApiUrl = 'https://www.googleapis.com/webfonts/v1/webfonts' const destination = './inc/third-party/fonts.json' + + +/** + * get the value of a node argument + * @param {number} argNumber + * @param {string} argString + */ +const getArgs = (argNumber, argString) => { + return process.argv[argNumber].replace(argString, ''); +} + +/** + * Api args + * sorting could be + * alpha: Sort the list alphabetically + * date: Sort the list by date added (most recent font added or updated first) + * popularity: Sort the list by popularity (most popular family first) + * style: Sort the list by number of styles available (family with most styles first) + * trending: Sort the list by families seeing growth in usage (family seeing the most growth first) + * + * @type {{sort: (string|string), key: string}} + */ const apiParams = { - key: 'AIzaSyCpfnm5kVng8hhP_jnAnnTXVP7MEUM89-k', // here the api key https://gist.github.com/jeremykenedy/bce044ce26fe0f90559a - sort: process.argv[2] || 'popularity' + key: 'apikey', // here the api key https://gist.github.com/jeremykenedy/bce044ce26fe0f90559a + sort: process.argv[2] ? getArgs( 2, '-sort=' ) : 'popularity' } /** From 186de235c7373e8c2e2b6976c17bc6c711f5d563 Mon Sep 17 00:00:00 2001 From: Erik Golinelli Date: Sat, 11 Feb 2023 16:43:55 +0100 Subject: [PATCH 042/264] templates update (will remove the old php templates) --- inc/sidebar.php | 10 --- parts/header.html | 4 +- parts/sidebar.html | 3 + template-parts/content/content-excerpt.php | 30 --------- template-parts/content/content-homepage.php | 17 ----- template-parts/content/content-masonry.php | 28 -------- template-parts/content/content-none.php | 33 --------- template-parts/content/content-page.php | 23 ------- template-parts/content/content-related.php | 19 ------ template-parts/content/content-single.php | 51 -------------- template-parts/content/content.php | 19 ------ template-parts/footer/footer.php | 67 ------------------- .../fragments/content-social-links.php | 17 ----- .../fragments/content-social-share.php | 35 ---------- template-parts/header/header.php | 57 ---------------- templates/404.html | 15 +++++ 16 files changed, 20 insertions(+), 408 deletions(-) delete mode 100644 template-parts/content/content-excerpt.php delete mode 100644 template-parts/content/content-homepage.php delete mode 100644 template-parts/content/content-masonry.php delete mode 100644 template-parts/content/content-none.php delete mode 100644 template-parts/content/content-page.php delete mode 100644 template-parts/content/content-related.php delete mode 100644 template-parts/content/content-single.php delete mode 100644 template-parts/content/content.php delete mode 100644 template-parts/footer/footer.php delete mode 100644 template-parts/fragments/content-social-links.php delete mode 100644 template-parts/fragments/content-social-share.php delete mode 100644 template-parts/header/header.php diff --git a/inc/sidebar.php b/inc/sidebar.php index 80ac2d12..6a8971f2 100644 --- a/inc/sidebar.php +++ b/inc/sidebar.php @@ -18,16 +18,6 @@ function modul_r_registerSidebar() { 'after_widget' => '', ) ); - register_sidebar( array( - 'name' => __( 'Footer', 'modul-r' ), - 'id' => 'footer-main', - 'description' => __( 'Add widgets here to appear in your footer.', 'modul-r' ), - 'before_widget' => '
', - 'after_widget' => '
', - 'before_title' => '

', - 'after_title' => '

', - ) ); - } add_action( 'widgets_init', 'modul_r_registerSidebar' ); diff --git a/parts/header.html b/parts/header.html index 84fc7214..9f7ad300 100644 --- a/parts/header.html +++ b/parts/header.html @@ -1,7 +1,7 @@
-
+
- \ No newline at end of file + diff --git a/parts/sidebar.html b/parts/sidebar.html index e69de29b..56e3b0cc 100644 --- a/parts/sidebar.html +++ b/parts/sidebar.html @@ -0,0 +1,3 @@ + + + diff --git a/template-parts/content/content-excerpt.php b/template-parts/content/content-excerpt.php deleted file mode 100644 index c5c93b3c..00000000 --- a/template-parts/content/content-excerpt.php +++ /dev/null @@ -1,30 +0,0 @@ - - -
- -
\ No newline at end of file diff --git a/template-parts/content/content-homepage.php b/template-parts/content/content-homepage.php deleted file mode 100644 index 1448c4db..00000000 --- a/template-parts/content/content-homepage.php +++ /dev/null @@ -1,17 +0,0 @@ - - -
-
- -
- -
- -
-
- diff --git a/template-parts/content/content-masonry.php b/template-parts/content/content-masonry.php deleted file mode 100644 index 94287cc1..00000000 --- a/template-parts/content/content-masonry.php +++ /dev/null @@ -1,28 +0,0 @@ - - -
> - - - - - -
- -
- -

', esc_url( get_permalink() ) ), '

' ); ?> -
- -
- -
- -
- -
- diff --git a/template-parts/content/content-none.php b/template-parts/content/content-none.php deleted file mode 100644 index 2b235946..00000000 --- a/template-parts/content/content-none.php +++ /dev/null @@ -1,33 +0,0 @@ - - -
- - - -

- -
- -
-

- -

-
- -
- -
- -
- - - -
- diff --git a/template-parts/content/content-page.php b/template-parts/content/content-page.php deleted file mode 100644 index c1085a4f..00000000 --- a/template-parts/content/content-page.php +++ /dev/null @@ -1,23 +0,0 @@ - - -
> -
- -
- -
- -
- - -
- -
- - -
diff --git a/template-parts/content/content-related.php b/template-parts/content/content-related.php deleted file mode 100644 index c26f9f8f..00000000 --- a/template-parts/content/content-related.php +++ /dev/null @@ -1,19 +0,0 @@ - - \ No newline at end of file diff --git a/template-parts/content/content-single.php b/template-parts/content/content-single.php deleted file mode 100644 index 4a0d1206..00000000 --- a/template-parts/content/content-single.php +++ /dev/null @@ -1,51 +0,0 @@ - - -
> - -
- - - sprintf( esc_html__( 'Attachment published in%s', 'modul-r' ), '%title' ), - ) - ); - - } elseif ( is_singular( 'post' ) ) { - - // Previous/next post navigation. - printf( '
%s
', modul_r_page_links() ); - - } ?> -
- - -
- - - - - - - - - - - -
- - -
- -
- - -
diff --git a/template-parts/content/content.php b/template-parts/content/content.php deleted file mode 100644 index 653a839a..00000000 --- a/template-parts/content/content.php +++ /dev/null @@ -1,19 +0,0 @@ - - -
> - -
- -
- -
- - -
- -
diff --git a/template-parts/footer/footer.php b/template-parts/footer/footer.php deleted file mode 100644 index 6c735b3f..00000000 --- a/template-parts/footer/footer.php +++ /dev/null @@ -1,67 +0,0 @@ - -
- - - - - - - -
\ No newline at end of file diff --git a/template-parts/fragments/content-social-links.php b/template-parts/fragments/content-social-links.php deleted file mode 100644 index 4b38d9e7..00000000 --- a/template-parts/fragments/content-social-links.php +++ /dev/null @@ -1,17 +0,0 @@ - \ No newline at end of file diff --git a/template-parts/fragments/content-social-share.php b/template-parts/fragments/content-social-share.php deleted file mode 100644 index f205dc55..00000000 --- a/template-parts/fragments/content-social-share.php +++ /dev/null @@ -1,35 +0,0 @@ - \ No newline at end of file diff --git a/template-parts/header/header.php b/template-parts/header/header.php deleted file mode 100644 index 0f8cdbe0..00000000 --- a/template-parts/header/header.php +++ /dev/null @@ -1,57 +0,0 @@ - - -
- - diff --git a/templates/404.html b/templates/404.html index e69de29b..16c206d4 100644 --- a/templates/404.html +++ b/templates/404.html @@ -0,0 +1,15 @@ + + + +
+ + +

404

+ + + +

Page not found!

+
+ + + From 74d136a9f1c9f99653ae6f470d75391120ba9b09 Mon Sep 17 00:00:00 2001 From: Erik Golinelli Date: Sat, 11 Feb 2023 16:45:19 +0100 Subject: [PATCH 043/264] font families sorting --- functions.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/functions.php b/functions.php index 09d801fb..02f11a22 100644 --- a/functions.php +++ b/functions.php @@ -13,7 +13,7 @@ 'gray-light' => '#e3e3e3', 'gray' => '#888888', 'gray-dark' => '#4e4e4e', - 'black' => '#222222', + 'black' => '#28293E', ), 'style' => array( 'background' => 'white-smoke', @@ -30,13 +30,13 @@ 'color_variance' => 0.3, 'weights' => array( 100, 200, 300, 400, 500, 600, 700, 800, 900 ), 'font_family_default' => array( - array( 'name' => 'bold', 'default' => 600, 'input' => 'select', 'select_type' => 'weights' ), + array( 'name' => 'light', 'default' => 300, 'input' => 'select', 'select_type' => 'weights' ), array( 'name' => 'regular', 'default' => 400, 'input' => 'select', 'select_type' => 'weights' ), - array( 'name' => 'light', 'default' => 300, 'input' => 'select', 'select_type' => 'weights' ) + array( 'name' => 'bold', 'default' => 600, 'input' => 'select', 'select_type' => 'weights' ), ), 'font_family_title' => array( - array( 'name' => 'bold', 'default' => 800, 'input' => 'select', 'select_type' => 'weights' ), array( 'name' => 'regular', 'default' => 500, 'input' => 'select', 'select_type' => 'weights' ), + array( 'name' => 'bold', 'default' => 800, 'input' => 'select', 'select_type' => 'weights' ), ) ) ); From f1587ae15dda789f24912fd3471343fc9fe2e3c4 Mon Sep 17 00:00:00 2001 From: Erik Golinelli Date: Sat, 11 Feb 2023 17:00:57 +0100 Subject: [PATCH 044/264] add e2e testing --- .gitignore | 30 ++++++++++++++++++++++++++++-- jest.config.js | 24 ++++++++++++++++++++++++ package.json | 27 +++++++++++++++++++-------- tests/e2e/main.test.ts | 34 ++++++++++++++++++++++++++++++++++ tests/tsconfig.json | 13 +++++++++++++ tests/unit/main.test.ts | 8 ++++++++ 6 files changed, 126 insertions(+), 10 deletions(-) create mode 100644 jest.config.js create mode 100644 tests/e2e/main.test.ts create mode 100644 tests/tsconfig.json create mode 100644 tests/unit/main.test.ts diff --git a/.gitignore b/.gitignore index 8847bc9a..067a3ca5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,30 @@ +# Logs +logs +*.log +npm-debug.log* + +# Coverage directory used by tools like istanbul +coverage +artifacts + +# Dependency directories node_modules/ -Thumbs.db +vendor/ + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Output of `npm pack` +*.tgz + +# Output of `wp-scripts plugin-zip` +*.zip + +# dotenv environment variables file +.env -/vendor/ +# Jetbrains editor config +.idea diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 00000000..f7174c98 --- /dev/null +++ b/jest.config.js @@ -0,0 +1,24 @@ +const jestConfig = { + verbose: true, + preset: '@wordpress/jest-preset-default', + setupFilesAfterEnv: [ + '@wordpress/jest-console', + '@wordpress/jest-puppeteer-axe', + 'expect-puppeteer', + 'puppeteer-testing-library/extend-expect', + ], + modulePaths: [ '' ], + projects: [ + { + displayName: 'unit', + testMatch: [ '/tests/unit/**/*.test.ts' ], + }, + { + displayName: 'e2e', + preset: 'jest-puppeteer', + testMatch: [ '/tests/e2e/**/*.test.ts' ], + }, + ], +}; + +module.exports = jestConfig; diff --git a/package.json b/package.json index 46e0a3ed..f6d8f735 100644 --- a/package.json +++ b/package.json @@ -14,24 +14,35 @@ "packages-update": "wp-scripts packages-update", "generate-font-list": "node ./bin/gfontsList.mjs -sort=popularity", "optimize-images": "node ./bin/imagemin.mjs", + "test": "jest --silent=false --coverage", "install": "composer install && npm run build" }, "devDependencies": { - "@wordpress/env": "^5.11.0", "@babel/core": "^7.20.5", "@babel/preset-typescript": "^7.18.6", + "@jest/globals": "^29.3.1", + "@types/expect-puppeteer": "^5.0.2", + "@types/jest": "^29.2.5", + "@types/jest-environment-puppeteer": "^5.0.3", "@types/node": "^18.13.0", + "@types/puppeteer": "^7.0.4", "@types/wordpress__block-editor": "^11.0.1", "@types/wordpress__blocks": "^12.0.1", "@types/wordpress__components": "^23.0.1", "@types/wordpress__compose": "^6.0.1", - "typescript": "^4.9.4", - "@wordpress/babel-preset-default": "^7.9.0", - "@wordpress/scripts": "^25.2.0", - "imagemin": "^8.0.1", - "imagemin-mozjpeg": "^10.0.0", - "imagemin-svgo": "^10.0.1", - "imagemin-avif": "^0.1.4" + "@wordpress/babel-preset-default": "^7.9.0", + "@wordpress/e2e-test-utils": "^9.1.0", + "@wordpress/e2e-tests": "^6.1.0", + "@wordpress/env": "^5.11.0", + "@wordpress/jest-preset-default": "^10.5.0", + "@wordpress/scripts": "^25.2.0", + "babel-jest": "^29.3.0", + "imagemin": "^8.0.1", + "imagemin-avif": "^0.1.4", + "imagemin-mozjpeg": "^10.0.0", + "imagemin-svgo": "^10.0.1", + "jest-puppeteer": "^6.2.0", + "typescript": "^4.9.4" }, "engines": { "node": ">=14.0.0", diff --git a/tests/e2e/main.test.ts b/tests/e2e/main.test.ts new file mode 100644 index 00000000..4b12e094 --- /dev/null +++ b/tests/e2e/main.test.ts @@ -0,0 +1,34 @@ +/** + * Load utilities from the e2e-test-utils package. + */ +// Load utilities from the e2e-test-utils package. +import { visitAdminPage } from '@wordpress/e2e-test-utils'; +import 'expect-puppeteer'; + +// Name of the test suite. +describe( 'It works!', () => { + it( 'Should load properly admin', async () => { + // Navigate the admin and performs tasks + // Use Puppeteer APIs to interacte with mouse, keyboard... + await visitAdminPage( '/' ); + + // Assertions + const nodes = await page.$x( + '//h2[contains(text(), "Welcome to WordPress!")]' + ); + expect( nodes.length ).not.toEqual( 0 ); + }, 60000 ); + + it( 'Should load properly front-facing website', async () => { + // Navigate the admin and performs tasks + // Use Puppeteer APIs to interacte with mouse, keyboard... + await page.goto( '/' ); + + // Assertions + const nodes = await page.$x( + '//h1[contains(text(), "Mindblown: a blog about philosophy!")]' + ); + + expect( nodes.length ).not.toEqual( 0 ); + }, 60000 ); +} ); diff --git a/tests/tsconfig.json b/tests/tsconfig.json new file mode 100644 index 00000000..08f6d37d --- /dev/null +++ b/tests/tsconfig.json @@ -0,0 +1,13 @@ +{ + "transformIgnorePatterns": ["/node_modules/"], + "esModuleInterop": true, + "coverageThreshold": { + "global": { + "branches": 10, + "functions": 10, + "lines": 100, + "statements": 10 + } + }, + "collectCoverage": true +} diff --git a/tests/unit/main.test.ts b/tests/unit/main.test.ts new file mode 100644 index 00000000..1ab56af4 --- /dev/null +++ b/tests/unit/main.test.ts @@ -0,0 +1,8 @@ +import { describe, expect, test } from '@jest/globals'; + +/* JEST testing */ +describe( 'vsge-model-viewer test', () => { + it( 'it can make simple additions', () => { + expect( 1 + 2 ).toBe( 3 ); + } ); +} ); From ee423ef2bb642507df12c4559926ebaefef96c3c Mon Sep 17 00:00:00 2001 From: Erik Golinelli Date: Sat, 11 Feb 2023 17:02:39 +0100 Subject: [PATCH 045/264] continuous integration --- .github/workflows/main.yml | 49 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 .github/workflows/main.yml diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 00000000..19dd78cb --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,49 @@ +# This workflow will do a clean installation of node dependencies, cache/restore them, build the source code and run tests across different versions of node +# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-nodejs + +name: Node.js CI + +on: + push: + branches: [ "master" ] + pull_request: + branches: [ "master" ] + +jobs: + build: + + runs-on: ubuntu-latest + + strategy: + matrix: + node-version: [14.x, 16.x, 18.x] + # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ + + steps: + - uses: actions/checkout@v3 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node-version }} + cache: 'npm' + - run: npm install + - run: npm run build --if-present + + tests: + name: Tests + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + + - name: Setup environment to use the desired version of NodeJS + uses: actions/setup-node@v3 + + - name: Installing NPM dependencies + run: npm install + + - name: Starting the WordPress Environment + run: npm run wp-env:start + + - name: Running the tests + run: npm run test From b2a2d6e4c4a6946fdb381b96f42bd21eee050557 Mon Sep 17 00:00:00 2001 From: Erik Golinelli Date: Sat, 11 Feb 2023 17:04:47 +0100 Subject: [PATCH 046/264] removes composer lock --- composer.lock | 2690 ------------------------------------------------- 1 file changed, 2690 deletions(-) delete mode 100644 composer.lock diff --git a/composer.lock b/composer.lock deleted file mode 100644 index 3361d95e..00000000 --- a/composer.lock +++ /dev/null @@ -1,2690 +0,0 @@ -{ - "_readme": [ - "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", - "This file is @generated automatically" - ], - "content-hash": "e49cb04994009ac98fd25a8a90272447", - "packages": [ - { - "name": "wptt/webfont-loader", - "version": "v1.1.3", - "source": { - "type": "git", - "url": "https://github.com/WPTT/webfont-loader.git", - "reference": "19fa29ba8d82bed018fb8c6f949799739c61356c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/WPTT/webfont-loader/zipball/19fa29ba8d82bed018fb8c6f949799739c61356c", - "reference": "19fa29ba8d82bed018fb8c6f949799739c61356c", - "shasum": "" - }, - "require": { - "php": ">=5.6" - }, - "require-dev": { - "composer/installers": "~1.0", - "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", - "php-parallel-lint/php-parallel-lint": "^1.2", - "wptrt/wpthemereview": "^0.2.1" - }, - "type": "package", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Contributors", - "homepage": "https://github.com/WPTT/font-loader/graphs/contributors" - } - ], - "description": "Locally host webfonts.", - "homepage": "https://github.com/WPTT/font-loader", - "keywords": [ - "wordpress" - ], - "support": { - "issues": "https://github.com/WPTT/font-loader/issues", - "source": "https://github.com/WPTT/font-loader" - }, - "time": "2022-10-21T07:56:48+00:00" - } - ], - "packages-dev": [ - { - "name": "automattic/vipwpcs", - "version": "2.3.3", - "source": { - "type": "git", - "url": "https://github.com/Automattic/VIP-Coding-Standards.git", - "reference": "6cd0a6a82bc0ac988dbf9d6a7c2e293dc8ac640b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Automattic/VIP-Coding-Standards/zipball/6cd0a6a82bc0ac988dbf9d6a7c2e293dc8ac640b", - "reference": "6cd0a6a82bc0ac988dbf9d6a7c2e293dc8ac640b", - "shasum": "" - }, - "require": { - "dealerdirect/phpcodesniffer-composer-installer": "^0.4.1 || ^0.5 || ^0.6.2 || ^0.7", - "php": ">=5.4", - "sirbrillig/phpcs-variable-analysis": "^2.11.1", - "squizlabs/php_codesniffer": "^3.5.5", - "wp-coding-standards/wpcs": "^2.3" - }, - "require-dev": { - "php-parallel-lint/php-console-highlighter": "^0.5", - "php-parallel-lint/php-parallel-lint": "^1.0", - "phpcompatibility/php-compatibility": "^9", - "phpcsstandards/phpcsdevtools": "^1.0", - "phpunit/phpunit": "^4 || ^5 || ^6 || ^7" - }, - "type": "phpcodesniffer-standard", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Contributors", - "homepage": "https://github.com/Automattic/VIP-Coding-Standards/graphs/contributors" - } - ], - "description": "PHP_CodeSniffer rules (sniffs) to enforce WordPress VIP minimum coding conventions", - "keywords": [ - "phpcs", - "standards", - "wordpress" - ], - "support": { - "issues": "https://github.com/Automattic/VIP-Coding-Standards/issues", - "source": "https://github.com/Automattic/VIP-Coding-Standards", - "wiki": "https://github.com/Automattic/VIP-Coding-Standards/wiki" - }, - "time": "2021-09-29T16:20:23+00:00" - }, - { - "name": "composer/pcre", - "version": "3.1.0", - "source": { - "type": "git", - "url": "https://github.com/composer/pcre.git", - "reference": "4bff79ddd77851fe3cdd11616ed3f92841ba5bd2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/4bff79ddd77851fe3cdd11616ed3f92841ba5bd2", - "reference": "4bff79ddd77851fe3cdd11616ed3f92841ba5bd2", - "shasum": "" - }, - "require": { - "php": "^7.4 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^1.3", - "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\Pcre\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - } - ], - "description": "PCRE wrapping library that offers type-safe preg_* replacements.", - "keywords": [ - "PCRE", - "preg", - "regex", - "regular expression" - ], - "support": { - "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/3.1.0" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2022-11-17T09:50:14+00:00" - }, - { - "name": "composer/semver", - "version": "3.3.2", - "source": { - "type": "git", - "url": "https://github.com/composer/semver.git", - "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/3953f23262f2bff1919fc82183ad9acb13ff62c9", - "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9", - "shasum": "" - }, - "require": { - "php": "^5.3.2 || ^7.0 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^1.4", - "symfony/phpunit-bridge": "^4.2 || ^5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\Semver\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nils Adermann", - "email": "naderman@naderman.de", - "homepage": "http://www.naderman.de" - }, - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - }, - { - "name": "Rob Bast", - "email": "rob.bast@gmail.com", - "homepage": "http://robbast.nl" - } - ], - "description": "Semver library that offers utilities, version constraint parsing and validation.", - "keywords": [ - "semantic", - "semver", - "validation", - "versioning" - ], - "support": { - "irc": "irc://irc.freenode.org/composer", - "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.3.2" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2022-04-01T19:23:25+00:00" - }, - { - "name": "composer/xdebug-handler", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/composer/xdebug-handler.git", - "reference": "ced299686f41dce890debac69273b47ffe98a40c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/ced299686f41dce890debac69273b47ffe98a40c", - "reference": "ced299686f41dce890debac69273b47ffe98a40c", - "shasum": "" - }, - "require": { - "composer/pcre": "^1 || ^2 || ^3", - "php": "^7.2.5 || ^8.0", - "psr/log": "^1 || ^2 || ^3" - }, - "require-dev": { - "phpstan/phpstan": "^1.0", - "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^6.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Composer\\XdebugHandler\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "John Stevenson", - "email": "john-stevenson@blueyonder.co.uk" - } - ], - "description": "Restarts a process without Xdebug.", - "keywords": [ - "Xdebug", - "performance" - ], - "support": { - "irc": "irc://irc.freenode.org/composer", - "issues": "https://github.com/composer/xdebug-handler/issues", - "source": "https://github.com/composer/xdebug-handler/tree/3.0.3" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2022-02-25T21:32:43+00:00" - }, - { - "name": "dealerdirect/phpcodesniffer-composer-installer", - "version": "v0.7.2", - "source": { - "type": "git", - "url": "https://github.com/Dealerdirect/phpcodesniffer-composer-installer.git", - "reference": "1c968e542d8843d7cd71de3c5c9c3ff3ad71a1db" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Dealerdirect/phpcodesniffer-composer-installer/zipball/1c968e542d8843d7cd71de3c5c9c3ff3ad71a1db", - "reference": "1c968e542d8843d7cd71de3c5c9c3ff3ad71a1db", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^1.0 || ^2.0", - "php": ">=5.3", - "squizlabs/php_codesniffer": "^2.0 || ^3.1.0 || ^4.0" - }, - "require-dev": { - "composer/composer": "*", - "php-parallel-lint/php-parallel-lint": "^1.3.1", - "phpcompatibility/php-compatibility": "^9.0" - }, - "type": "composer-plugin", - "extra": { - "class": "Dealerdirect\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\Plugin" - }, - "autoload": { - "psr-4": { - "Dealerdirect\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Franck Nijhof", - "email": "franck.nijhof@dealerdirect.com", - "homepage": "http://www.frenck.nl", - "role": "Developer / IT Manager" - }, - { - "name": "Contributors", - "homepage": "https://github.com/Dealerdirect/phpcodesniffer-composer-installer/graphs/contributors" - } - ], - "description": "PHP_CodeSniffer Standards Composer Installer Plugin", - "homepage": "http://www.dealerdirect.com", - "keywords": [ - "PHPCodeSniffer", - "PHP_CodeSniffer", - "code quality", - "codesniffer", - "composer", - "installer", - "phpcbf", - "phpcs", - "plugin", - "qa", - "quality", - "standard", - "standards", - "style guide", - "stylecheck", - "tests" - ], - "support": { - "issues": "https://github.com/dealerdirect/phpcodesniffer-composer-installer/issues", - "source": "https://github.com/dealerdirect/phpcodesniffer-composer-installer" - }, - "time": "2022-02-04T12:51:07+00:00" - }, - { - "name": "doctrine/annotations", - "version": "1.14.2", - "source": { - "type": "git", - "url": "https://github.com/doctrine/annotations.git", - "reference": "ad785217c1e9555a7d6c6c8c9f406395a5e2882b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/ad785217c1e9555a7d6c6c8c9f406395a5e2882b", - "reference": "ad785217c1e9555a7d6c6c8c9f406395a5e2882b", - "shasum": "" - }, - "require": { - "doctrine/lexer": "^1 || ^2", - "ext-tokenizer": "*", - "php": "^7.1 || ^8.0", - "psr/cache": "^1 || ^2 || ^3" - }, - "require-dev": { - "doctrine/cache": "^1.11 || ^2.0", - "doctrine/coding-standard": "^9 || ^10", - "phpstan/phpstan": "~1.4.10 || ^1.8.0", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "symfony/cache": "^4.4 || ^5.4 || ^6", - "vimeo/psalm": "^4.10" - }, - "suggest": { - "php": "PHP 8.0 or higher comes with attributes, a native replacement for annotations" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "Docblock Annotations Parser", - "homepage": "https://www.doctrine-project.org/projects/annotations.html", - "keywords": [ - "annotations", - "docblock", - "parser" - ], - "support": { - "issues": "https://github.com/doctrine/annotations/issues", - "source": "https://github.com/doctrine/annotations/tree/1.14.2" - }, - "time": "2022-12-15T06:48:22+00:00" - }, - { - "name": "doctrine/deprecations", - "version": "v1.0.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/deprecations.git", - "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de", - "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de", - "shasum": "" - }, - "require": { - "php": "^7.1|^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^9", - "phpunit/phpunit": "^7.5|^8.5|^9.5", - "psr/log": "^1|^2|^3" - }, - "suggest": { - "psr/log": "Allows logging deprecations via PSR-3 logger implementation" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", - "homepage": "https://www.doctrine-project.org/", - "support": { - "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/v1.0.0" - }, - "time": "2022-05-02T15:47:09+00:00" - }, - { - "name": "doctrine/lexer", - "version": "2.1.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/lexer.git", - "reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/39ab8fcf5a51ce4b85ca97c7a7d033eb12831124", - "reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124", - "shasum": "" - }, - "require": { - "doctrine/deprecations": "^1.0", - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^9 || ^10", - "phpstan/phpstan": "^1.3", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "psalm/plugin-phpunit": "^0.18.3", - "vimeo/psalm": "^4.11 || ^5.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Lexer\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", - "homepage": "https://www.doctrine-project.org/projects/lexer.html", - "keywords": [ - "annotations", - "docblock", - "lexer", - "parser", - "php" - ], - "support": { - "issues": "https://github.com/doctrine/lexer/issues", - "source": "https://github.com/doctrine/lexer/tree/2.1.0" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", - "type": "tidelift" - } - ], - "time": "2022-12-14T08:49:07+00:00" - }, - { - "name": "friendsofphp/php-cs-fixer", - "version": "v3.13.2", - "source": { - "type": "git", - "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", - "reference": "3952f08a81bd3b1b15e11c3de0b6bf037faa8496" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/3952f08a81bd3b1b15e11c3de0b6bf037faa8496", - "reference": "3952f08a81bd3b1b15e11c3de0b6bf037faa8496", - "shasum": "" - }, - "require": { - "composer/semver": "^3.2", - "composer/xdebug-handler": "^3.0.3", - "doctrine/annotations": "^1.13", - "ext-json": "*", - "ext-tokenizer": "*", - "php": "^7.4 || ^8.0", - "sebastian/diff": "^4.0", - "symfony/console": "^5.4 || ^6.0", - "symfony/event-dispatcher": "^5.4 || ^6.0", - "symfony/filesystem": "^5.4 || ^6.0", - "symfony/finder": "^5.4 || ^6.0", - "symfony/options-resolver": "^5.4 || ^6.0", - "symfony/polyfill-mbstring": "^1.23", - "symfony/polyfill-php80": "^1.25", - "symfony/polyfill-php81": "^1.25", - "symfony/process": "^5.4 || ^6.0", - "symfony/stopwatch": "^5.4 || ^6.0" - }, - "require-dev": { - "justinrainbow/json-schema": "^5.2", - "keradus/cli-executor": "^2.0", - "mikey179/vfsstream": "^1.6.10", - "php-coveralls/php-coveralls": "^2.5.2", - "php-cs-fixer/accessible-object": "^1.1", - "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.2", - "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.2.1", - "phpspec/prophecy": "^1.15", - "phpspec/prophecy-phpunit": "^2.0", - "phpunit/phpunit": "^9.5", - "phpunitgoodpractices/polyfill": "^1.6", - "phpunitgoodpractices/traits": "^1.9.2", - "symfony/phpunit-bridge": "^6.0", - "symfony/yaml": "^5.4 || ^6.0" - }, - "suggest": { - "ext-dom": "For handling output formats in XML", - "ext-mbstring": "For handling non-UTF8 characters." - }, - "bin": [ - "php-cs-fixer" - ], - "type": "application", - "autoload": { - "psr-4": { - "PhpCsFixer\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Dariusz Rumiński", - "email": "dariusz.ruminski@gmail.com" - } - ], - "description": "A tool to automatically fix PHP code style", - "support": { - "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", - "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.13.2" - }, - "funding": [ - { - "url": "https://github.com/keradus", - "type": "github" - } - ], - "time": "2023-01-02T23:53:50+00:00" - }, - { - "name": "phpcompatibility/php-compatibility", - "version": "9.3.5", - "source": { - "type": "git", - "url": "https://github.com/PHPCompatibility/PHPCompatibility.git", - "reference": "9fb324479acf6f39452e0655d2429cc0d3914243" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibility/zipball/9fb324479acf6f39452e0655d2429cc0d3914243", - "reference": "9fb324479acf6f39452e0655d2429cc0d3914243", - "shasum": "" - }, - "require": { - "php": ">=5.3", - "squizlabs/php_codesniffer": "^2.3 || ^3.0.2" - }, - "conflict": { - "squizlabs/php_codesniffer": "2.6.2" - }, - "require-dev": { - "phpunit/phpunit": "~4.5 || ^5.0 || ^6.0 || ^7.0" - }, - "suggest": { - "dealerdirect/phpcodesniffer-composer-installer": "^0.5 || This Composer plugin will sort out the PHPCS 'installed_paths' automatically.", - "roave/security-advisories": "dev-master || Helps prevent installing dependencies with known security issues." - }, - "type": "phpcodesniffer-standard", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-3.0-or-later" - ], - "authors": [ - { - "name": "Wim Godden", - "homepage": "https://github.com/wimg", - "role": "lead" - }, - { - "name": "Juliette Reinders Folmer", - "homepage": "https://github.com/jrfnl", - "role": "lead" - }, - { - "name": "Contributors", - "homepage": "https://github.com/PHPCompatibility/PHPCompatibility/graphs/contributors" - } - ], - "description": "A set of sniffs for PHP_CodeSniffer that checks for PHP cross-version compatibility.", - "homepage": "http://techblog.wimgodden.be/tag/codesniffer/", - "keywords": [ - "compatibility", - "phpcs", - "standards" - ], - "support": { - "issues": "https://github.com/PHPCompatibility/PHPCompatibility/issues", - "source": "https://github.com/PHPCompatibility/PHPCompatibility" - }, - "time": "2019-12-27T09:44:58+00:00" - }, - { - "name": "phpcompatibility/phpcompatibility-paragonie", - "version": "1.3.2", - "source": { - "type": "git", - "url": "https://github.com/PHPCompatibility/PHPCompatibilityParagonie.git", - "reference": "bba5a9dfec7fcfbd679cfaf611d86b4d3759da26" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibilityParagonie/zipball/bba5a9dfec7fcfbd679cfaf611d86b4d3759da26", - "reference": "bba5a9dfec7fcfbd679cfaf611d86b4d3759da26", - "shasum": "" - }, - "require": { - "phpcompatibility/php-compatibility": "^9.0" - }, - "require-dev": { - "dealerdirect/phpcodesniffer-composer-installer": "^0.7", - "paragonie/random_compat": "dev-master", - "paragonie/sodium_compat": "dev-master" - }, - "suggest": { - "dealerdirect/phpcodesniffer-composer-installer": "^0.7 || This Composer plugin will sort out the PHP_CodeSniffer 'installed_paths' automatically.", - "roave/security-advisories": "dev-master || Helps prevent installing dependencies with known security issues." - }, - "type": "phpcodesniffer-standard", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-3.0-or-later" - ], - "authors": [ - { - "name": "Wim Godden", - "role": "lead" - }, - { - "name": "Juliette Reinders Folmer", - "role": "lead" - } - ], - "description": "A set of rulesets for PHP_CodeSniffer to check for PHP cross-version compatibility issues in projects, while accounting for polyfills provided by the Paragonie polyfill libraries.", - "homepage": "http://phpcompatibility.com/", - "keywords": [ - "compatibility", - "paragonie", - "phpcs", - "polyfill", - "standards", - "static analysis" - ], - "support": { - "issues": "https://github.com/PHPCompatibility/PHPCompatibilityParagonie/issues", - "source": "https://github.com/PHPCompatibility/PHPCompatibilityParagonie" - }, - "time": "2022-10-25T01:46:02+00:00" - }, - { - "name": "phpcompatibility/phpcompatibility-wp", - "version": "2.1.4", - "source": { - "type": "git", - "url": "https://github.com/PHPCompatibility/PHPCompatibilityWP.git", - "reference": "b6c1e3ee1c35de6c41a511d5eb9bd03e447480a5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibilityWP/zipball/b6c1e3ee1c35de6c41a511d5eb9bd03e447480a5", - "reference": "b6c1e3ee1c35de6c41a511d5eb9bd03e447480a5", - "shasum": "" - }, - "require": { - "phpcompatibility/php-compatibility": "^9.0", - "phpcompatibility/phpcompatibility-paragonie": "^1.0" - }, - "require-dev": { - "dealerdirect/phpcodesniffer-composer-installer": "^0.7" - }, - "suggest": { - "dealerdirect/phpcodesniffer-composer-installer": "^0.7 || This Composer plugin will sort out the PHP_CodeSniffer 'installed_paths' automatically.", - "roave/security-advisories": "dev-master || Helps prevent installing dependencies with known security issues." - }, - "type": "phpcodesniffer-standard", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-3.0-or-later" - ], - "authors": [ - { - "name": "Wim Godden", - "role": "lead" - }, - { - "name": "Juliette Reinders Folmer", - "role": "lead" - } - ], - "description": "A ruleset for PHP_CodeSniffer to check for PHP cross-version compatibility issues in projects, while accounting for polyfills provided by WordPress.", - "homepage": "http://phpcompatibility.com/", - "keywords": [ - "compatibility", - "phpcs", - "standards", - "static analysis", - "wordpress" - ], - "support": { - "issues": "https://github.com/PHPCompatibility/PHPCompatibilityWP/issues", - "source": "https://github.com/PHPCompatibility/PHPCompatibilityWP" - }, - "time": "2022-10-24T09:00:36+00:00" - }, - { - "name": "psr/cache", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/cache.git", - "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", - "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Cache\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for caching libraries", - "keywords": [ - "cache", - "psr", - "psr-6" - ], - "support": { - "source": "https://github.com/php-fig/cache/tree/master" - }, - "time": "2016-08-06T20:24:11+00:00" - }, - { - "name": "psr/container", - "version": "1.1.2", - "source": { - "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "513e0666f7216c7459170d56df27dfcefe1689ea" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea", - "reference": "513e0666f7216c7459170d56df27dfcefe1689ea", - "shasum": "" - }, - "require": { - "php": ">=7.4.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Psr\\Container\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common Container Interface (PHP FIG PSR-11)", - "homepage": "https://github.com/php-fig/container", - "keywords": [ - "PSR-11", - "container", - "container-interface", - "container-interop", - "psr" - ], - "support": { - "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/1.1.2" - }, - "time": "2021-11-05T16:50:12+00:00" - }, - { - "name": "psr/event-dispatcher", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/event-dispatcher.git", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", - "shasum": "" - }, - "require": { - "php": ">=7.2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\EventDispatcher\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Standard interfaces for event handling.", - "keywords": [ - "events", - "psr", - "psr-14" - ], - "support": { - "issues": "https://github.com/php-fig/event-dispatcher/issues", - "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" - }, - "time": "2019-01-08T18:20:26+00:00" - }, - { - "name": "psr/log", - "version": "1.1.4", - "source": { - "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Log\\": "Psr/Log/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", - "keywords": [ - "log", - "psr", - "psr-3" - ], - "support": { - "source": "https://github.com/php-fig/log/tree/1.1.4" - }, - "time": "2021-05-03T11:20:27+00:00" - }, - { - "name": "sebastian/diff", - "version": "4.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3", - "symfony/process": "^4.2 || ^5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - } - ], - "description": "Diff implementation", - "homepage": "https://github.com/sebastianbergmann/diff", - "keywords": [ - "diff", - "udiff", - "unidiff", - "unified diff" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:10:38+00:00" - }, - { - "name": "sirbrillig/phpcs-variable-analysis", - "version": "v2.11.10", - "source": { - "type": "git", - "url": "https://github.com/sirbrillig/phpcs-variable-analysis.git", - "reference": "0f25a3766f26df91d6bdda0c8931303fc85499d7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sirbrillig/phpcs-variable-analysis/zipball/0f25a3766f26df91d6bdda0c8931303fc85499d7", - "reference": "0f25a3766f26df91d6bdda0c8931303fc85499d7", - "shasum": "" - }, - "require": { - "php": ">=5.4.0", - "squizlabs/php_codesniffer": "^3.5.6" - }, - "require-dev": { - "dealerdirect/phpcodesniffer-composer-installer": "^0.7 || ^1.0", - "phpcsstandards/phpcsdevcs": "^1.1", - "phpstan/phpstan": "^1.7", - "phpunit/phpunit": "^4.8.36 || ^5.7.21 || ^6.5 || ^7.0 || ^8.0 || ^9.0", - "sirbrillig/phpcs-import-detection": "^1.1", - "vimeo/psalm": "^0.2 || ^0.3 || ^1.1 || ^4.24 || ^5.0@beta" - }, - "type": "phpcodesniffer-standard", - "autoload": { - "psr-4": { - "VariableAnalysis\\": "VariableAnalysis/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-2-Clause" - ], - "authors": [ - { - "name": "Sam Graham", - "email": "php-codesniffer-variableanalysis@illusori.co.uk" - }, - { - "name": "Payton Swick", - "email": "payton@foolord.com" - } - ], - "description": "A PHPCS sniff to detect problems with variables.", - "keywords": [ - "phpcs", - "static analysis" - ], - "support": { - "issues": "https://github.com/sirbrillig/phpcs-variable-analysis/issues", - "source": "https://github.com/sirbrillig/phpcs-variable-analysis", - "wiki": "https://github.com/sirbrillig/phpcs-variable-analysis/wiki" - }, - "time": "2023-01-05T18:45:16+00:00" - }, - { - "name": "squizlabs/php_codesniffer", - "version": "3.7.1", - "source": { - "type": "git", - "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "1359e176e9307e906dc3d890bcc9603ff6d90619" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/1359e176e9307e906dc3d890bcc9603ff6d90619", - "reference": "1359e176e9307e906dc3d890bcc9603ff6d90619", - "shasum": "" - }, - "require": { - "ext-simplexml": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": ">=5.4.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" - }, - "bin": [ - "bin/phpcs", - "bin/phpcbf" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.x-dev" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Greg Sherwood", - "role": "lead" - } - ], - "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", - "homepage": "https://github.com/squizlabs/PHP_CodeSniffer", - "keywords": [ - "phpcs", - "standards" - ], - "support": { - "issues": "https://github.com/squizlabs/PHP_CodeSniffer/issues", - "source": "https://github.com/squizlabs/PHP_CodeSniffer", - "wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki" - }, - "time": "2022-06-18T07:21:10+00:00" - }, - { - "name": "symfony/console", - "version": "v5.4.19", - "source": { - "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "dccb8d251a9017d5994c988b034d3e18aaabf740" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/dccb8d251a9017d5994c988b034d3e18aaabf740", - "reference": "dccb8d251a9017d5994c988b034d3e18aaabf740", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php73": "^1.9", - "symfony/polyfill-php80": "^1.16", - "symfony/service-contracts": "^1.1|^2|^3", - "symfony/string": "^5.1|^6.0" - }, - "conflict": { - "psr/log": ">=3", - "symfony/dependency-injection": "<4.4", - "symfony/dotenv": "<5.1", - "symfony/event-dispatcher": "<4.4", - "symfony/lock": "<4.4", - "symfony/process": "<4.4" - }, - "provide": { - "psr/log-implementation": "1.0|2.0" - }, - "require-dev": { - "psr/log": "^1|^2", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/event-dispatcher": "^4.4|^5.0|^6.0", - "symfony/lock": "^4.4|^5.0|^6.0", - "symfony/process": "^4.4|^5.0|^6.0", - "symfony/var-dumper": "^4.4|^5.0|^6.0" - }, - "suggest": { - "psr/log": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/lock": "", - "symfony/process": "" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Console\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Eases the creation of beautiful and testable command line interfaces", - "homepage": "https://symfony.com", - "keywords": [ - "cli", - "command line", - "console", - "terminal" - ], - "support": { - "source": "https://github.com/symfony/console/tree/v5.4.19" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-01T08:32:19+00:00" - }, - { - "name": "symfony/deprecation-contracts", - "version": "v2.5.2", - "source": { - "type": "git", - "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e8b495ea28c1d97b5e0c121748d6f9b53d075c66", - "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "files": [ - "function.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "A generic function and convention to trigger deprecation notices", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.2" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-01-02T09:53:40+00:00" - }, - { - "name": "symfony/event-dispatcher", - "version": "v5.4.19", - "source": { - "type": "git", - "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "abf49cc084c087d94b4cb939c3f3672971784e0c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/abf49cc084c087d94b4cb939c3f3672971784e0c", - "reference": "abf49cc084c087d94b4cb939c3f3672971784e0c", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/event-dispatcher-contracts": "^2|^3", - "symfony/polyfill-php80": "^1.16" - }, - "conflict": { - "symfony/dependency-injection": "<4.4" - }, - "provide": { - "psr/event-dispatcher-implementation": "1.0", - "symfony/event-dispatcher-implementation": "2.0" - }, - "require-dev": { - "psr/log": "^1|^2|^3", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/error-handler": "^4.4|^5.0|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0", - "symfony/http-foundation": "^4.4|^5.0|^6.0", - "symfony/service-contracts": "^1.1|^2|^3", - "symfony/stopwatch": "^4.4|^5.0|^6.0" - }, - "suggest": { - "symfony/dependency-injection": "", - "symfony/http-kernel": "" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\EventDispatcher\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v5.4.19" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-01T08:32:19+00:00" - }, - { - "name": "symfony/event-dispatcher-contracts", - "version": "v2.5.2", - "source": { - "type": "git", - "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "f98b54df6ad059855739db6fcbc2d36995283fe1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/f98b54df6ad059855739db6fcbc2d36995283fe1", - "reference": "f98b54df6ad059855739db6fcbc2d36995283fe1", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "psr/event-dispatcher": "^1" - }, - "suggest": { - "symfony/event-dispatcher-implementation": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\EventDispatcher\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Generic abstractions related to dispatching event", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.5.2" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-01-02T09:53:40+00:00" - }, - { - "name": "symfony/filesystem", - "version": "v5.4.19", - "source": { - "type": "git", - "url": "https://github.com/symfony/filesystem.git", - "reference": "648bfaca6a494f3e22378123bcee2894045dc9d8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/648bfaca6a494f3e22378123bcee2894045dc9d8", - "reference": "648bfaca6a494f3e22378123bcee2894045dc9d8", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-mbstring": "~1.8", - "symfony/polyfill-php80": "^1.16" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Filesystem\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides basic utilities for the filesystem", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/filesystem/tree/v5.4.19" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-14T19:14:44+00:00" - }, - { - "name": "symfony/finder", - "version": "v5.4.19", - "source": { - "type": "git", - "url": "https://github.com/symfony/finder.git", - "reference": "6071aebf810ad13fe8200c224f36103abb37cf1f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/6071aebf810ad13fe8200c224f36103abb37cf1f", - "reference": "6071aebf810ad13fe8200c224f36103abb37cf1f", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-php80": "^1.16" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Finder\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Finds files and directories via an intuitive fluent interface", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/finder/tree/v5.4.19" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-14T19:14:44+00:00" - }, - { - "name": "symfony/options-resolver", - "version": "v5.4.19", - "source": { - "type": "git", - "url": "https://github.com/symfony/options-resolver.git", - "reference": "b03c99236445492f20c61666e8f7e5d388b078e5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/b03c99236445492f20c61666e8f7e5d388b078e5", - "reference": "b03c99236445492f20c61666e8f7e5d388b078e5", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-php73": "~1.0", - "symfony/polyfill-php80": "^1.16" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\OptionsResolver\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides an improved replacement for the array_replace PHP function", - "homepage": "https://symfony.com", - "keywords": [ - "config", - "configuration", - "options" - ], - "support": { - "source": "https://github.com/symfony/options-resolver/tree/v5.4.19" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-01T08:32:19+00:00" - }, - { - "name": "symfony/polyfill-ctype", - "version": "v1.27.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "5bbc823adecdae860bb64756d639ecfec17b050a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a", - "reference": "5bbc823adecdae860bb64756d639ecfec17b050a", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "provide": { - "ext-ctype": "*" - }, - "suggest": { - "ext-ctype": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for ctype functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" - ], - "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.27.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-11-03T14:55:06+00:00" - }, - { - "name": "symfony/polyfill-intl-grapheme", - "version": "v1.27.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "511a08c03c1960e08a883f4cffcacd219b758354" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/511a08c03c1960e08a883f4cffcacd219b758354", - "reference": "511a08c03c1960e08a883f4cffcacd219b758354", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Intl\\Grapheme\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for intl's grapheme_* functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "grapheme", - "intl", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.27.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-11-03T14:55:06+00:00" - }, - { - "name": "symfony/polyfill-intl-normalizer", - "version": "v1.27.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/19bd1e4fcd5b91116f14d8533c57831ed00571b6", - "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Intl\\Normalizer\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for intl's Normalizer class and related functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "intl", - "normalizer", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.27.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-11-03T14:55:06+00:00" - }, - { - "name": "symfony/polyfill-mbstring", - "version": "v1.27.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534", - "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "provide": { - "ext-mbstring": "*" - }, - "suggest": { - "ext-mbstring": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for the Mbstring extension", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "mbstring", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-11-03T14:55:06+00:00" - }, - { - "name": "symfony/polyfill-php73", - "version": "v1.27.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/9e8ecb5f92152187c4799efd3c96b78ccab18ff9", - "reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php73\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.27.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-11-03T14:55:06+00:00" - }, - { - "name": "symfony/polyfill-php80", - "version": "v1.27.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", - "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ion Bazan", - "email": "ion.bazan@gmail.com" - }, - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-11-03T14:55:06+00:00" - }, - { - "name": "symfony/polyfill-php81", - "version": "v1.27.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/707403074c8ea6e2edaf8794b0157a0bfa52157a", - "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php81\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.27.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-11-03T14:55:06+00:00" - }, - { - "name": "symfony/process", - "version": "v5.4.19", - "source": { - "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "c5ba874c9b636dbccf761e22ce750e88ec3f55e1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/c5ba874c9b636dbccf761e22ce750e88ec3f55e1", - "reference": "c5ba874c9b636dbccf761e22ce750e88ec3f55e1", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/polyfill-php80": "^1.16" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Process\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Executes commands in sub-processes", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/process/tree/v5.4.19" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-01T08:32:19+00:00" - }, - { - "name": "symfony/service-contracts", - "version": "v2.5.2", - "source": { - "type": "git", - "url": "https://github.com/symfony/service-contracts.git", - "reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/4b426aac47d6427cc1a1d0f7e2ac724627f5966c", - "reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "psr/container": "^1.1", - "symfony/deprecation-contracts": "^2.1|^3" - }, - "conflict": { - "ext-psr": "<1.1|>=2" - }, - "suggest": { - "symfony/service-implementation": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\Service\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Generic abstractions related to writing services", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/service-contracts/tree/v2.5.2" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-05-30T19:17:29+00:00" - }, - { - "name": "symfony/stopwatch", - "version": "v5.4.19", - "source": { - "type": "git", - "url": "https://github.com/symfony/stopwatch.git", - "reference": "bd2b066090fd6a67039371098fa25a84cb2679ec" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/bd2b066090fd6a67039371098fa25a84cb2679ec", - "reference": "bd2b066090fd6a67039371098fa25a84cb2679ec", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/service-contracts": "^1|^2|^3" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Stopwatch\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides a way to profile code", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/stopwatch/tree/v5.4.19" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-01T08:32:19+00:00" - }, - { - "name": "symfony/string", - "version": "v5.4.19", - "source": { - "type": "git", - "url": "https://github.com/symfony/string.git", - "reference": "0a01071610fd861cc160dfb7e2682ceec66064cb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/0a01071610fd861cc160dfb7e2682ceec66064cb", - "reference": "0a01071610fd861cc160dfb7e2682ceec66064cb", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-intl-grapheme": "~1.0", - "symfony/polyfill-intl-normalizer": "~1.0", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "~1.15" - }, - "conflict": { - "symfony/translation-contracts": ">=3.0" - }, - "require-dev": { - "symfony/error-handler": "^4.4|^5.0|^6.0", - "symfony/http-client": "^4.4|^5.0|^6.0", - "symfony/translation-contracts": "^1.1|^2", - "symfony/var-exporter": "^4.4|^5.0|^6.0" - }, - "type": "library", - "autoload": { - "files": [ - "Resources/functions.php" - ], - "psr-4": { - "Symfony\\Component\\String\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", - "homepage": "https://symfony.com", - "keywords": [ - "grapheme", - "i18n", - "string", - "unicode", - "utf-8", - "utf8" - ], - "support": { - "source": "https://github.com/symfony/string/tree/v5.4.19" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-01T08:32:19+00:00" - }, - { - "name": "wp-coding-standards/wpcs", - "version": "2.3.0", - "source": { - "type": "git", - "url": "https://github.com/WordPress/WordPress-Coding-Standards.git", - "reference": "7da1894633f168fe244afc6de00d141f27517b62" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/WordPress/WordPress-Coding-Standards/zipball/7da1894633f168fe244afc6de00d141f27517b62", - "reference": "7da1894633f168fe244afc6de00d141f27517b62", - "shasum": "" - }, - "require": { - "php": ">=5.4", - "squizlabs/php_codesniffer": "^3.3.1" - }, - "require-dev": { - "dealerdirect/phpcodesniffer-composer-installer": "^0.5 || ^0.6", - "phpcompatibility/php-compatibility": "^9.0", - "phpcsstandards/phpcsdevtools": "^1.0", - "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" - }, - "suggest": { - "dealerdirect/phpcodesniffer-composer-installer": "^0.6 || This Composer plugin will sort out the PHPCS 'installed_paths' automatically." - }, - "type": "phpcodesniffer-standard", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Contributors", - "homepage": "https://github.com/WordPress/WordPress-Coding-Standards/graphs/contributors" - } - ], - "description": "PHP_CodeSniffer rules (sniffs) to enforce WordPress coding conventions", - "keywords": [ - "phpcs", - "standards", - "wordpress" - ], - "support": { - "issues": "https://github.com/WordPress/WordPress-Coding-Standards/issues", - "source": "https://github.com/WordPress/WordPress-Coding-Standards", - "wiki": "https://github.com/WordPress/WordPress-Coding-Standards/wiki" - }, - "time": "2020-05-13T23:57:56+00:00" - } - ], - "aliases": [], - "minimum-stability": "stable", - "stability-flags": [], - "prefer-stable": false, - "prefer-lowest": false, - "platform": { - "php": ">=7.1" - }, - "platform-dev": [], - "plugin-api-version": "2.3.0" -} From 67486b5185e93624ecf666a4ed6d323ec306c139 Mon Sep 17 00:00:00 2001 From: Erik Golinelli Date: Sat, 11 Feb 2023 17:46:05 +0100 Subject: [PATCH 047/264] woocommerce - enqueue style only if needed + enhanced theme support config --- inc/woocommerce.php | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/inc/woocommerce.php b/inc/woocommerce.php index cf36177a..f49b04f1 100644 --- a/inc/woocommerce.php +++ b/inc/woocommerce.php @@ -1,9 +1,31 @@ 416, + 'thumbnail_image_width' => 324, + 'product_grid' => array( + 'default_columns' => 4, + 'default_rows' => 4, + 'min_columns' => 1, + 'max_columns' => 6, + 'min_rows' => 1, + ), + ) + ) ); } add_action( 'after_setup_theme', 'modul_r_add_woocommerce_support' ); @@ -11,4 +33,4 @@ function modul_r_add_woocommerce_support() { add_theme_support( 'wc-product-gallery-lightbox' ); add_theme_support( 'wc-product-gallery-slider' ); -} \ No newline at end of file +} From c5fd400512aca944c16e41e857f51eaeeb810eb9 Mon Sep 17 00:00:00 2001 From: Erik Golinelli Date: Sat, 11 Feb 2023 18:50:44 +0100 Subject: [PATCH 048/264] enhanced base style --- functions.php | 6 +- inc/customizer.php | 448 +++++++++++------------------ src/styles/components/_header.scss | 2 +- theme.json | 4 +- 4 files changed, 180 insertions(+), 280 deletions(-) diff --git a/functions.php b/functions.php index 02f11a22..0b908d2b 100644 --- a/functions.php +++ b/functions.php @@ -32,11 +32,11 @@ 'font_family_default' => array( array( 'name' => 'light', 'default' => 300, 'input' => 'select', 'select_type' => 'weights' ), array( 'name' => 'regular', 'default' => 400, 'input' => 'select', 'select_type' => 'weights' ), - array( 'name' => 'bold', 'default' => 600, 'input' => 'select', 'select_type' => 'weights' ), + array( 'name' => 'bold', 'default' => 700, 'input' => 'select', 'select_type' => 'weights' ), ), 'font_family_title' => array( - array( 'name' => 'regular', 'default' => 500, 'input' => 'select', 'select_type' => 'weights' ), - array( 'name' => 'bold', 'default' => 800, 'input' => 'select', 'select_type' => 'weights' ), + array( 'name' => 'regular', 'default' => 400, 'input' => 'select', 'select_type' => 'weights' ), + array( 'name' => 'bold', 'default' => 700, 'input' => 'select', 'select_type' => 'weights' ), ) ) ); diff --git a/inc/customizer.php b/inc/customizer.php index d924158b..ed24dce2 100644 --- a/inc/customizer.php +++ b/inc/customizer.php @@ -3,101 +3,102 @@ /** * get the rgb color from hex * - * @param $color + * @param $hex_color + * @param bool $decimal * * @return false|mixed|string */ function modul_r_hex2rgb( $hex_color, $decimal = false ) { - $color = ( $hex_color[0] == '#' ) ? substr( $hex_color, 1 ) : null; + $color = ( $hex_color[0] == '#' ) ? substr( $hex_color, 1 ) : null; - if ( strlen( $color ) == 6 ) { - list( $r, $g, $b ) = array( $color[0] . $color[1], $color[2] . $color[3], $color[4] . $color[5] ); - } elseif ( strlen( $color ) == 3 ) { - list( $r, $g, $b ) = array( $color[0] . $color[0], $color[1] . $color[1], $color[2] . $color[2] ); - } else { - return $color; - } + if ( strlen( $color ) == 6 ) { + list( $r, $g, $b ) = array( $color[0] . $color[1], $color[2] . $color[3], $color[4] . $color[5] ); + } elseif ( strlen( $color ) == 3 ) { + list( $r, $g, $b ) = array( $color[0] . $color[0], $color[1] . $color[1], $color[2] . $color[2] ); + } else { + return $color; + } - $r = hexdec( $r ); - $g = hexdec( $g ); - $b = hexdec( $b ); + $r = hexdec( $r ); + $g = hexdec( $g ); + $b = hexdec( $b ); - return $decimal ? "$r,$g,$b" : "rgb($r,$g,$b)"; + return $decimal ? "$r,$g,$b" : "rgb($r,$g,$b)"; } /** * Increases or decreases the brightness of a color by a percentage of the current brightness. * https://stackoverflow.com/questions/3512311/how-to-generate-lighter-darker-color-with-php * - * @param string $hexCode Supported formats: `#FFF`, `#FFFFFF`, `FFF`, `FFFFFF` - * @param float $adjustPercent A number between -1 and 1. E.g. 0.3 = 30% lighter; -0.4 = 40% darker. + * @param string $hexCode Supported formats: `#FFF`, `#FFFFFF`, `FFF`, `FFFFFF`. + * @param float $adjustPercent A number between -1 and 1. E.g. 0.3 = 30% lighter; -0.4 = 40% darker. * * @return string */ -function modul_r_adjustBrightness($hexCode, $adjustPercent) { +function modul_r_adjustBrightness( $hexCode, $adjustPercent ) { - $hexCode = ltrim($hexCode, '#'); + $hexCode = ltrim( $hexCode, '#' ); - if (strlen($hexCode) == 3) { - $hexCode = $hexCode[0] . $hexCode[0] . $hexCode[1] . $hexCode[1] . $hexCode[2] . $hexCode[2]; - } + if ( strlen( $hexCode ) == 3 ) { + $hexCode = $hexCode[0] . $hexCode[0] . $hexCode[1] . $hexCode[1] . $hexCode[2] . $hexCode[2]; + } - $hexCode = array_map('hexdec', str_split($hexCode, 2)); + $hexCode = array_map( 'hexdec', str_split( $hexCode, 2 ) ); - foreach ($hexCode as & $color) { - $adjustableLimit = $adjustPercent < 0 ? $color : 255 - $color; - $adjustAmount = ceil($adjustableLimit * $adjustPercent); + foreach ( $hexCode as & $color ) { + $adjustableLimit = $adjustPercent < 0 ? $color : 255 - $color; + $adjustAmount = ceil( $adjustableLimit * $adjustPercent ); - $color = str_pad(dechex($color + $adjustAmount), 2, '0', STR_PAD_LEFT); - } + $color = str_pad( dechex( $color + $adjustAmount ), 2, '0', STR_PAD_LEFT ); + } - return '#' . implode($hexCode); + return '#' . implode( $hexCode ); } /** - * check for the existence of a color in theme mods otherwise return the escaped default color + * Check for the existence of a color in theme mods otherwise return the escaped default color. * * @param $theme_mod_color * @param $default_color * * @return string|void */ -function modul_r_get_theme_color($theme_mod_color, $default_color = "#FF0000") { - return get_theme_mod( $theme_mod_color ) !== false ? sanitize_hex_color(get_theme_mod( $theme_mod_color )) : sanitize_hex_color($default_color); +function modul_r_get_theme_color( $theme_mod_color, $default_color = "#FF0000" ) { + return get_theme_mod( $theme_mod_color ) !== false ? sanitize_hex_color( get_theme_mod( $theme_mod_color ) ) : sanitize_hex_color( $default_color ); } function modul_r_get_available_fonts() { $font_json = file_get_contents( get_template_directory() . '/inc/third-party/fonts.json' ); $font_set = array(); foreach ( json_decode( $font_json ) as $font_name => $font_weights ) { - $font_set[ key($font_weights) ] = key($font_weights); + $font_set[ key( $font_weights ) ] = key( $font_weights ); } return $font_set; } -function modul_r_add_font_preset($label, $group, $wp_customize) { +function modul_r_add_font_preset( $label, $group, $wp_customize ) { $data_title = $GLOBALS['modul_r_defaults']['customizer_options'][ 'font_family_' . $label ]; - foreach ($data_title as $setting) { - foreach ($GLOBALS['modul_r_defaults']['customizer_options'][$setting['select_type']] as $fieldname) { - $field_values[$fieldname] = $fieldname; + foreach ( $data_title as $setting ) { + foreach ( $GLOBALS['modul_r_defaults']['customizer_options'][ $setting['select_type'] ] as $fieldname ) { + $field_values[ $fieldname ] = $fieldname; } if ( ! empty( $field_values ) ) { // Font Family - title $wp_customize->add_setting( 'modul_r_defaults_' . $label . '_' . $setting['name'], array( - 'capability' => 'edit_theme_options', - 'default' => $setting['default'], - 'sanitize_callback' => 'modul_r_sanitize_select', + 'capability' => 'edit_theme_options', + 'default' => $setting['default'], + 'sanitize_callback' => 'modul_r_sanitize_select', ) ); $wp_customize->add_control( 'modul_r_defaults_' . $label . '_' . $setting['name'], array( - 'type' => 'select', - 'choices' => $field_values, - 'section' => 'modul_r_' . $group, - 'description' => esc_html__( 'Select', 'modul-r' ) . ' ' . $label . ' ' . $setting['name'], + 'type' => 'select', + 'choices' => $field_values, + 'section' => 'modul_r_' . $group, + 'description' => esc_html__( 'Select', 'modul-r' ) . ' ' . $label . ' ' . $setting['name'], ) ); } } @@ -106,7 +107,12 @@ function modul_r_add_font_preset($label, $group, $wp_customize) { /** * Customizer options */ -if ( ! function_exists('modul_r_customizer_opt') ) : +if ( ! function_exists( 'modul_r_customizer_opt' ) ) : + /** + * @param WP_Customize_Themes_Section $wp_customize - the customizer section. + * + * @return void - nothing + */ function modul_r_customizer_opt( $wp_customize ) { $font_set = modul_r_get_available_fonts(); @@ -116,9 +122,12 @@ class modul_r_custom_text_control extends WP_Customize_Control { public $type = 'customtext'; public $extra = ''; public $add_class = ''; + public function render_content() { ?> -