Changeset 10924
- Timestamp:
- 04/26/2021 05:12:15 PM (4 years ago)
- Location:
- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-patterns
- Files:
-
- 24 added
- 1 deleted
- 24 edited
Legend:
- Unmodified
- Added
- Removed
-
sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-patterns/build/index.asset.php
r10882 r10924 1 <?php return array('dependencies' => array('react', 'wp-block-editor', 'wp-components', 'wp-compose', 'wp- core-data', 'wp-data', 'wp-data-controls', 'wp-element', 'wp-i18n', 'wp-keycodes', 'wp-polyfill', 'wp-primitives', 'wp-url', 'wp-viewport'), 'version' => 'eda2ea80abd191600bd93201136beaf6');1 <?php return array('dependencies' => array('react', 'wp-block-editor', 'wp-components', 'wp-compose', 'wp-data', 'wp-data-controls', 'wp-element', 'wp-i18n', 'wp-keycodes', 'wp-polyfill', 'wp-primitives', 'wp-url', 'wp-viewport'), 'version' => '47d0699f3951f1009351fbc4a9fef0da'); -
sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-patterns/build/index.js
r10882 r10924 10596 10596 /***/ }), 10597 10597 10598 /***/ "./src/components/add-to-favorite-button/index.js": 10599 /*!********************************************************!*\ 10600 !*** ./src/components/add-to-favorite-button/index.js ***! 10601 \********************************************************/ 10602 /*! exports provided: default */ 10603 /***/ (function(module, __webpack_exports__, __webpack_require__) { 10604 10605 "use strict"; 10606 __webpack_require__.r(__webpack_exports__); 10607 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element"); 10608 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__); 10609 /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); 10610 /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__); 10611 10612 10613 /** 10614 * External dependencies 10615 */ 10616 10617 10618 var AddToFavoriteButton = function AddToFavoriteButton() { 10619 return Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])("button", { 10620 className: "button" 10621 }, Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__["__"])('Add to favorites', 'wporg-patterns')); 10622 }; 10623 10624 /* harmony default export */ __webpack_exports__["default"] = (AddToFavoriteButton); 10625 10626 /***/ }), 10627 10598 10628 /***/ "./src/components/category-context-bar/index.js": 10599 10629 /*!******************************************************!*\ … … 10609 10639 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element"); 10610 10640 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__); 10611 10612 10613 10614 /** 10615 * External dependencies 10616 */ 10617 10618 10619 function CategoryContextBar(_ref) { 10620 var message = _ref.message, 10621 title = _ref.title, 10622 links = _ref.links; 10641 /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/data */ "@wordpress/data"); 10642 /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_2__); 10643 /* harmony import */ var _wordpress_url__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/url */ "@wordpress/url"); 10644 /* harmony import */ var _wordpress_url__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_url__WEBPACK_IMPORTED_MODULE_3__); 10645 /* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../hooks */ "./src/hooks/index.js"); 10646 /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../utils */ "./src/utils/index.js"); 10647 /* harmony import */ var _messaging__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./messaging */ "./src/components/category-context-bar/messaging.js"); 10648 /* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../store */ "./src/store/index.js"); 10649 10650 10651 10652 /** 10653 * WordPress dependencies 10654 */ 10655 10656 10657 10658 /** 10659 * Internal dependencies 10660 */ 10661 10662 10663 10664 10665 10666 10667 function CategoryContextBar() { 10668 var _useRoute = Object(_hooks__WEBPACK_IMPORTED_MODULE_4__["useRoute"])(), 10669 path = _useRoute.path; 10623 10670 10624 10671 var _useState = Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["useState"])(0), … … 10627 10674 setHeight = _useState2[1]; 10628 10675 10676 var _useState3 = Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["useState"])({}), 10677 _useState4 = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default()(_useState3, 2), 10678 context = _useState4[0], 10679 setContext = _useState4[1]; 10680 10629 10681 var innerRef = Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["useRef"])(null); 10682 10683 var _useSelect = Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_2__["useSelect"])(function (select) { 10684 var _select = select(_store__WEBPACK_IMPORTED_MODULE_7__["store"]), 10685 getCategoryBySlug = _select.getCategoryBySlug, 10686 getPatternsByQuery = _select.getPatternsByQuery, 10687 isLoadingPatternsByQuery = _select.isLoadingPatternsByQuery, 10688 getCurrentQuery = _select.getCurrentQuery; 10689 10690 var categorySlug = Object(_utils__WEBPACK_IMPORTED_MODULE_5__["getCategoryFromPath"])(path); 10691 10692 var _category = getCategoryBySlug(categorySlug); 10693 10694 var query = getCurrentQuery(); 10695 return { 10696 isAllCategory: _category && _category.id === -1, 10697 isLoadingPatterns: isLoadingPatternsByQuery(query), 10698 patterns: query ? getPatternsByQuery(query) : [], 10699 category: _category 10700 }; 10701 }, [path]), 10702 isAllCategory = _useSelect.isAllCategory, 10703 category = _useSelect.category, 10704 isLoadingPatterns = _useSelect.isLoadingPatterns, 10705 patterns = _useSelect.patterns; 10706 10630 10707 Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["useEffect"])(function () { 10631 if (message) { 10632 setHeight(innerRef.current.offsetHeight); 10633 } else { 10634 setHeight(0); 10708 if (!category || isLoadingPatterns) { 10709 return; 10635 10710 } 10636 }, [message]); 10711 10712 var searchTerm = Object(_wordpress_url__WEBPACK_IMPORTED_MODULE_3__["getQueryArg"])(path, 'search'); 10713 var _context = {}; // Use the category count as default since it has the count of all the associated patterns 10714 10715 var count = category.count; // If we have a search term use the pattern results length. 10716 // Not: This is okay until we start using paging. 10717 10718 if (searchTerm) { 10719 count = patterns.length; 10720 } 10721 10722 if (!isAllCategory || searchTerm) { 10723 _context = Object(_messaging__WEBPACK_IMPORTED_MODULE_6__["getContextMessage"])(count, category.name, searchTerm); 10724 } 10725 10726 setContext(_context); 10727 }, [category, isLoadingPatterns, patterns]); 10728 Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["useEffect"])(function () { 10729 var _height = context.message ? innerRef.current.offsetHeight : 0; 10730 10731 setHeight(_height); 10732 }, [context.message]); 10637 10733 return Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["createElement"])("header", { 10638 10734 className: "category-context__bar", … … 10644 10740 }, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["createElement"])("h2", { 10645 10741 className: "category-context__bar__copy" 10646 }, message), links &&links.length > 0 && Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["createElement"])("div", {10742 }, context.message), context.links && context.links.length > 0 && Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["createElement"])("div", { 10647 10743 className: "category-context__bar__links" 10648 10744 }, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["createElement"])("h3", { 10649 10745 className: "category-context__bar__title" 10650 }, title), Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["createElement"])("ul", null,links.map(function (i) {10746 }, context.title), Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["createElement"])("ul", null, context.links.map(function (i) { 10651 10747 return Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["createElement"])("li", { 10652 10748 key: i.href … … 10661 10757 /***/ }), 10662 10758 10759 /***/ "./src/components/category-context-bar/messaging.js": 10760 /*!**********************************************************!*\ 10761 !*** ./src/components/category-context-bar/messaging.js ***! 10762 \**********************************************************/ 10763 /*! exports provided: getContextMessage */ 10764 /***/ (function(module, __webpack_exports__, __webpack_require__) { 10765 10766 "use strict"; 10767 __webpack_require__.r(__webpack_exports__); 10768 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getContextMessage", function() { return getContextMessage; }); 10769 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element"); 10770 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__); 10771 /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); 10772 /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__); 10773 10774 10775 /** 10776 * WordPress dependencies 10777 */ 10778 10779 10780 /** 10781 * Returns an object with extra information about the category. 10782 * 10783 * @param {number} count Number of patterns associated to the category. 10784 * @param {string} categoryName The category name. 10785 * @param {string|void} searchTerm The search term. 10786 * @return {Object} 10787 */ 10788 10789 var getContextMessage = function getContextMessage(count, categoryName, searchTerm) { 10790 var message = Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__["sprintf"])( 10791 /* translators: %1$d: number of patterns. %2$s category name. */ 10792 Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__["_n"])('%1$d <b>%2$s</b> pattern.', '%1$d <b>%2$s</b> patterns.', count, 'wporg-patterns'), count, categoryName.toLowerCase(), 'wporg-patterns'); 10793 10794 if (searchTerm) { 10795 if (categoryName !== 'All') { 10796 message = Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__["sprintf"])( 10797 /* translators: %1$d: number of patterns. %2$s category name. %3$s search term */ 10798 Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__["_n"])('%1$d <b>%2$s</b> pattern matching "<b>%3$s</b>".', '%1$d <b>%2$s</b> patterns matching "<b>%3$s</b>".', count, 'wporg-patterns'), count, categoryName.toLowerCase(), searchTerm, 'wporg-patterns'); 10799 } else { 10800 message = Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__["sprintf"])( 10801 /* translators: %1$d: number of patterns. %2$s search term. */ 10802 Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__["_n"])('%1$d pattern matching "<b>%2$s</b>".', '%1$d patterns matching "<b>%2$s</b>".', count, 'wporg-patterns'), count, searchTerm, 'wporg-patterns'); 10803 } 10804 } 10805 10806 return { 10807 message: Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createInterpolateElement"])(message, { 10808 b: Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])("b", null) 10809 }), 10810 // TODO Fetch these from somewhere 10811 title: '', 10812 links: [] 10813 }; 10814 }; 10815 10816 /***/ }), 10817 10663 10818 /***/ "./src/components/category-menu/default.js": 10664 10819 /*!*************************************************!*\ … … 10699 10854 var path = _ref2.path, 10700 10855 options = _ref2.options, 10701 _onClick = _ref2.onClick,10856 onClick = _ref2.onClick, 10702 10857 isLoading = _ref2.isLoading; 10703 10858 var containerRef = Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["useRef"])(null); … … 10714 10869 height: activeRef.current.offsetHeight 10715 10870 }); 10716 } , [containerRef, activeRef, path]);10871 }); 10717 10872 10718 10873 if (!isLoading && !options.length) { … … 10724 10879 ref: containerRef 10725 10880 }, options.map(function (i) { 10881 var isActive = path === i.value; 10726 10882 return Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])("li", { 10727 10883 key: i.value 10728 10884 }, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])("a", { 10729 className: path === i.value ? 'category-menu--is-active' : '',10885 className: isActive ? 'category-menu--is-active' : '', 10730 10886 href: i.value, 10731 ref: path === i.value ? activeRef : null, 10732 onClick: function onClick(_ref3) { 10733 var target = _ref3.target; 10734 return _onClick(target.hash); 10735 } 10887 ref: isActive ? activeRef : null, 10888 onClick: onClick 10736 10889 }, i.label)); 10737 10890 })); … … 10824 10977 }, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["createElement"])("a", { 10825 10978 href: i.value, 10826 onClick: function onClick( ) {10979 onClick: function onClick(event) { 10827 10980 setIsOpen(false); 10828 10981 10829 _onClick( i.value);10982 _onClick(event); 10830 10983 } 10831 10984 }, i.label)); … … 10861 11014 10862 11015 var CategorySearch = function CategorySearch(_ref) { 10863 var isLoading = _ref.isLoading; 11016 var defaultValue = _ref.defaultValue, 11017 isLoading = _ref.isLoading, 11018 isVisible = _ref.isVisible, 11019 onUpdate = _ref.onUpdate, 11020 onSubmit = _ref.onSubmit; 10864 11021 10865 11022 if (isLoading) { … … 10869 11026 } 10870 11027 11028 if (!isVisible) { 11029 return null; 11030 } 11031 10871 11032 return Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])("form", { 10872 11033 method: "get", 10873 11034 action: "/", 10874 className: "category-search" 11035 className: "category-search", 11036 onSubmit: onSubmit 10875 11037 }, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])("label", { 10876 11038 htmlFor: "pattern-search", 10877 11039 className: "screen-reader-text" 10878 11040 }, Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__["__"])('Search for:', 'wporg-patterns')), Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])("input", { 11041 onChange: onUpdate, 11042 defaultValue: defaultValue, 10879 11043 id: "pattern-search", 10880 11044 type: "search", 10881 11045 placeholder: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__["__"])('Search patterns', 'wporg-patterns') 10882 11046 }), Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])("button", { 11047 type: "submit", 10883 11048 className: "category-search__button" 10884 11049 }, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])("span", { … … 10890 11055 10891 11056 /* harmony default export */ __webpack_exports__["default"] = (CategorySearch); 11057 11058 /***/ }), 11059 11060 /***/ "./src/components/copy-pattern-button/index.js": 11061 /*!*****************************************************!*\ 11062 !*** ./src/components/copy-pattern-button/index.js ***! 11063 \*****************************************************/ 11064 /*! exports provided: default */ 11065 /***/ (function(module, __webpack_exports__, __webpack_require__) { 11066 11067 "use strict"; 11068 __webpack_require__.r(__webpack_exports__); 11069 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element"); 11070 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__); 11071 /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); 11072 /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__); 11073 /* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/components */ "@wordpress/components"); 11074 /* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_components__WEBPACK_IMPORTED_MODULE_2__); 11075 11076 11077 /** 11078 * External dependencies 11079 */ 11080 11081 11082 /** 11083 * Uses a hidden textarea that is added and removed from the DOM in order to copy to clipboard via the Browser. 11084 * 11085 * @param {string} stringToCopy A string that will be copied to the clipboard 11086 * @return {boolean} Whether the copy function succeeded 11087 */ 11088 11089 var copyToClipboard = function copyToClipboard(stringToCopy) { 11090 var element = document.createElement('textarea'); // We don't want the text area to be selected since it's temporary. 11091 11092 element.setAttribute('readonly', ''); // We don't want the text area to be visible since it's temporary. 11093 11094 element.style.position = 'absolute'; 11095 element.style.left = '-9999px'; 11096 element.value = stringToCopy; 11097 document.body.appendChild(element); 11098 element.select(); 11099 var success = document.execCommand('copy'); 11100 document.body.removeChild(element); 11101 return success; 11102 }; 11103 11104 var CopyPatternButton = function CopyPatternButton(_ref) { 11105 var onSuccess = _ref.onSuccess; 11106 11107 var handleClick = function handleClick(_ref2) { 11108 var target = _ref2.target; 11109 // Grab the pattern markup from hidden input 11110 var blockData = document.getElementById('block-data'); 11111 var blockPattern = JSON.parse(decodeURIComponent(blockData.value)); 11112 var success = copyToClipboard(blockPattern); // Make sure we reset focus in case it was lost in the 'copy' command. 11113 11114 target.focus(); 11115 11116 if (success) { 11117 onSuccess(); 11118 } else {// TODO Handle error case 11119 } 11120 }; 11121 11122 return Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_wordpress_components__WEBPACK_IMPORTED_MODULE_2__["Button"], { 11123 isPrimary: true, 11124 onClick: handleClick 11125 }, Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__["__"])('Copy Pattern', 'wporg-patterns')); 11126 }; 11127 11128 /* harmony default export */ __webpack_exports__["default"] = (CopyPatternButton); 10892 11129 10893 11130 /***/ }), … … 11166 11403 "use strict"; 11167 11404 __webpack_require__.r(__webpack_exports__); 11168 /* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ "../../../../node_modules/@babel/runtime/helpers/slicedToArray.js"); 11169 /* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__); 11170 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element"); 11171 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__); 11172 /* harmony import */ var _wordpress_core_data__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/core-data */ "@wordpress/core-data"); 11173 /* harmony import */ var _wordpress_core_data__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_core_data__WEBPACK_IMPORTED_MODULE_2__); 11174 /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/data */ "@wordpress/data"); 11175 /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_3__); 11176 /* harmony import */ var _wordpress_url__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/url */ "@wordpress/url"); 11177 /* harmony import */ var _wordpress_url__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_url__WEBPACK_IMPORTED_MODULE_4__); 11178 /* harmony import */ var _category_menu__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../category-menu */ "./src/components/category-menu/index.js"); 11179 /* harmony import */ var _category_search__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../category-search */ "./src/components/category-search/index.js"); 11180 /* harmony import */ var _category_context_bar__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../category-context-bar */ "./src/components/category-context-bar/index.js"); 11181 /* harmony import */ var _messaging__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./messaging */ "./src/components/pattern-grid-menu/messaging.js"); 11182 11183 11184 11185 /** 11186 * External dependencies 11187 */ 11188 11405 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element"); 11406 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__); 11407 /* harmony import */ var _wordpress_compose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/compose */ "@wordpress/compose"); 11408 /* harmony import */ var _wordpress_compose__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_compose__WEBPACK_IMPORTED_MODULE_1__); 11409 /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/data */ "@wordpress/data"); 11410 /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_2__); 11411 /* harmony import */ var _wordpress_url__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/url */ "@wordpress/url"); 11412 /* harmony import */ var _wordpress_url__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_url__WEBPACK_IMPORTED_MODULE_3__); 11413 /* harmony import */ var _category_menu__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../category-menu */ "./src/components/category-menu/index.js"); 11414 /* harmony import */ var _category_search__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../category-search */ "./src/components/category-search/index.js"); 11415 /* harmony import */ var _category_context_bar__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../category-context-bar */ "./src/components/category-context-bar/index.js"); 11416 /* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../store */ "./src/store/index.js"); 11417 /* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../hooks */ "./src/hooks/index.js"); 11418 /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../utils */ "./src/utils/index.js"); 11419 11420 11421 /** 11422 * WordPress dependencies 11423 */ 11189 11424 11190 11425 … … 11198 11433 11199 11434 11435 11436 11200 11437 /** 11201 11438 * Module constants 11202 11439 */ 11203 11440 11204 var PATTERN_TAXONOMY = 'wporg-pattern-category';11441 var DEBOUNCE_MS = 300; 11205 11442 11206 11443 var PatternGridMenu = function PatternGridMenu() { 11207 // Show loading state 11208 var _useState = Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["useState"])(true), 11209 _useState2 = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default()(_useState, 2), 11210 showLoading = _useState2[0], 11211 setShowLoading = _useState2[1]; 11212 11213 var _useState3 = Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["useState"])(false), 11214 _useState4 = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default()(_useState3, 2), 11215 isFetching = _useState4[0], 11216 setIsFetching = _useState4[1]; 11217 11218 var _useState5 = Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["useState"])(), 11219 _useState6 = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default()(_useState5, 2), 11220 path = _useState6[0], 11221 setPath = _useState6[1]; 11222 11223 var _useState7 = Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["useState"])(undefined), 11224 _useState8 = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default()(_useState7, 2), 11225 categoryContext = _useState8[0], 11226 setCategoryContext = _useState8[1]; 11227 11228 var categories = Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_3__["useSelect"])(function (select) { 11229 return select(_wordpress_core_data__WEBPACK_IMPORTED_MODULE_2__["store"]).getEntityRecords('taxonomy', PATTERN_TAXONOMY); 11230 }); 11231 Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["useEffect"])(function () { 11232 var pathOnLoad = Object(_wordpress_url__WEBPACK_IMPORTED_MODULE_4__["getPath"])(window.location.href); 11233 setPath(pathOnLoad); 11234 }, []); 11235 Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["useEffect"])(function () { 11236 // Since categories starts as an [] then switches to null 11237 if (showLoading && categories === null) { 11238 setIsFetching(true); 11239 } 11240 11241 if (isFetching && Array.isArray(categories)) { 11242 setShowLoading(false); 11243 setIsFetching(false); 11244 } 11245 }, [isFetching, categories]); 11246 Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["useEffect"])(function () { 11247 setCategoryContext(_messaging__WEBPACK_IMPORTED_MODULE_8__["default"][path]); 11248 }, [path]); 11249 return Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["createElement"])(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["Fragment"], null, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["createElement"])("nav", { 11444 var _useRoute = Object(_hooks__WEBPACK_IMPORTED_MODULE_8__["useRoute"])(), 11445 path = _useRoute.path, 11446 updatePath = _useRoute.update; 11447 11448 var _useSelect = Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_2__["useSelect"])(function (select) { 11449 var _select = select(_store__WEBPACK_IMPORTED_MODULE_7__["store"]), 11450 getCategories = _select.getCategories, 11451 isLoadingCategories = _select.isLoadingCategories, 11452 hasLoadedCategories = _select.hasLoadedCategories; 11453 11454 return { 11455 categories: getCategories(), 11456 isLoading: isLoadingCategories(), 11457 hasLoaded: hasLoadedCategories() 11458 }; 11459 }), 11460 categories = _useSelect.categories, 11461 isLoading = _useSelect.isLoading, 11462 hasLoaded = _useSelect.hasLoaded; 11463 11464 var handleUpdatePath = function handleUpdatePath(value) { 11465 var updatedPath = Object(_wordpress_url__WEBPACK_IMPORTED_MODULE_3__["addQueryArgs"])(path, { 11466 search: value 11467 }); 11468 updatePath(updatedPath); 11469 }; 11470 11471 var debouncedHandleUpdate = Object(_wordpress_compose__WEBPACK_IMPORTED_MODULE_1__["useDebounce"])(handleUpdatePath, DEBOUNCE_MS); 11472 return Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["Fragment"], null, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])("nav", { 11250 11473 className: "pattern-grid-menu" 11251 }, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_ 1__["createElement"])(_category_menu__WEBPACK_IMPORTED_MODULE_5__["default"], {11252 path: path,11474 }, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_category_menu__WEBPACK_IMPORTED_MODULE_4__["default"], { 11475 path: Object(_utils__WEBPACK_IMPORTED_MODULE_9__["removeQueryString"])(path), 11253 11476 options: categories ? categories.map(function (record) { 11254 11477 return { 11255 // TODO: This url is temporary and won't use the # symbol 11256 value: "#/pattern-categories/".concat(record.slug), 11478 value: "/".concat(Object(_wordpress_url__WEBPACK_IMPORTED_MODULE_3__["getPath"])(record.link) || ''), 11257 11479 label: record.name 11258 11480 }; 11259 11481 }) : [], 11260 onClick: function onClick(_path) { 11261 return setPath(_path); 11482 onClick: function onClick(event) { 11483 event.preventDefault(); 11484 updatePath(event.target.pathname); 11262 11485 }, 11263 isLoading: showLoading 11264 }), Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["createElement"])(_category_search__WEBPACK_IMPORTED_MODULE_6__["default"], { 11265 isLoading: showLoading 11266 })), Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["createElement"])(_category_context_bar__WEBPACK_IMPORTED_MODULE_7__["default"], categoryContext)); 11486 isLoading: isLoading 11487 }), Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_category_search__WEBPACK_IMPORTED_MODULE_5__["default"], { 11488 isLoading: isLoading, 11489 isVisible: hasLoaded, 11490 defaultValue: Object(_wordpress_url__WEBPACK_IMPORTED_MODULE_3__["getQueryArg"])(window.location.href, 'search'), 11491 onUpdate: function onUpdate(event) { 11492 event.preventDefault(); 11493 debouncedHandleUpdate(event.target.value); 11494 }, 11495 onSubmit: function onSubmit(event) { 11496 event.preventDefault(); 11497 debouncedHandleUpdate(event.target.elements[0].value); 11498 } 11499 })), Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_category_context_bar__WEBPACK_IMPORTED_MODULE_6__["default"], null)); 11267 11500 }; 11268 11501 11269 11502 /* harmony default export */ __webpack_exports__["default"] = (PatternGridMenu); 11270 11271 /***/ }),11272 11273 /***/ "./src/components/pattern-grid-menu/messaging.js":11274 /*!*******************************************************!*\11275 !*** ./src/components/pattern-grid-menu/messaging.js ***!11276 \*******************************************************/11277 /*! exports provided: default */11278 /***/ (function(module, __webpack_exports__, __webpack_require__) {11279 11280 "use strict";11281 __webpack_require__.r(__webpack_exports__);11282 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");11283 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__);11284 11285 /* harmony default export */ __webpack_exports__["default"] = ({11286 '#/pattern-categories/header': {11287 message: Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["Fragment"], null, "45 ", Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])("b", null, "Header"), " patterns"),11288 title: 'Related Categories',11289 links: [{11290 href: '/pattern-categories/media',11291 label: 'Media'11292 }, {11293 href: '/pattern-categories/blog',11294 label: 'blog'11295 }]11296 },11297 '#/pattern-categories/footer': {11298 message: Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["Fragment"], null, "23 ", Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])("b", null, "Footer"), " patterns that is a very long sentence to check for something."),11299 title: 'Related Categories',11300 links: [{11301 href: '/pattern-categories/media',11302 label: 'Media'11303 }, {11304 href: '/pattern-categories/blog',11305 label: 'blog'11306 }]11307 }11308 });11309 11503 11310 11504 /***/ }), … … 11326 11520 /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_2__); 11327 11521 /* harmony import */ var _pattern_thumbnail__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../pattern-thumbnail */ "./src/components/pattern-thumbnail/index.js"); 11328 /* harmony import */ var _pattern_grid_menu__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../pattern-grid-menu */ "./src/components/pattern-grid-menu/index.js"); 11329 /* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../store */ "./src/store/index.js"); 11522 /* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../store */ "./src/store/index.js"); 11330 11523 11331 11524 … … 11342 11535 11343 11536 11344 11345 11537 function PatternGrid() { 11346 var posts = Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_2__["useSelect"])(function (select) { 11347 var _select = select(_store__WEBPACK_IMPORTED_MODULE_5__["store"]), 11348 getPatternsByQuery = _select.getPatternsByQuery; 11349 11350 return getPatternsByQuery({}); 11351 }); // `posts` will be null while the fetch happens. 11352 11353 var isLoading = !Array.isArray(posts); 11354 return Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["Fragment"], null, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_pattern_grid_menu__WEBPACK_IMPORTED_MODULE_4__["default"], null), Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])("div", { 11538 var _useSelect = Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_2__["useSelect"])(function (select) { 11539 var _select = select(_store__WEBPACK_IMPORTED_MODULE_4__["store"]), 11540 getPatternsByQuery = _select.getPatternsByQuery, 11541 isLoadingPatternsByQuery = _select.isLoadingPatternsByQuery, 11542 getCurrentQuery = _select.getCurrentQuery; 11543 11544 var query = getCurrentQuery(); 11545 return { 11546 posts: query ? getPatternsByQuery(query) : [], 11547 isLoading: query && isLoadingPatternsByQuery(query) 11548 }; 11549 }), 11550 posts = _useSelect.posts, 11551 isLoading = _useSelect.isLoading; 11552 11553 return Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])("div", { 11355 11554 className: "pattern-grid" 11356 11555 }, isLoading ? Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["Spinner"], null) : posts.map(function (post) { … … 11359 11558 pattern: post 11360 11559 }); 11361 })) );11560 })); 11362 11561 } 11363 11562 11364 11563 /* harmony default export */ __webpack_exports__["default"] = (PatternGrid); 11564 11565 /***/ }), 11566 11567 /***/ "./src/components/pattern-preview-actions/copy-guide.js": 11568 /*!**************************************************************!*\ 11569 !*** ./src/components/pattern-preview-actions/copy-guide.js ***! 11570 \**************************************************************/ 11571 /*! exports provided: default */ 11572 /***/ (function(module, __webpack_exports__, __webpack_require__) { 11573 11574 "use strict"; 11575 __webpack_require__.r(__webpack_exports__); 11576 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element"); 11577 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__); 11578 /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); 11579 /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__); 11580 /* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/components */ "@wordpress/components"); 11581 /* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_components__WEBPACK_IMPORTED_MODULE_2__); 11582 11583 11584 /** 11585 * External dependencies 11586 */ 11587 11588 11589 11590 11591 var CopyPasteImage = function CopyPasteImage() { 11592 return (// Wrap the image to avoid the UI shift after the GIF loads 11593 Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])("div", { 11594 style: { 11595 height: '220px' 11596 } 11597 }, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])("img", { 11598 src: "/wp-content/themes/pattern-directory/images/copy-paste-demo.gif", 11599 alt: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__["__"])('GIF of copy and pasting.', 'wporg-patterns') 11600 })) 11601 ); 11602 }; 11603 11604 var CopyGuide = function CopyGuide(_ref) { 11605 var onFinish = _ref.onFinish; 11606 return Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_wordpress_components__WEBPACK_IMPORTED_MODULE_2__["Animate"], { 11607 type: "appear", 11608 options: { 11609 origin: 'bottom' 11610 } 11611 }, function (_ref2) { 11612 var className = _ref2.className; 11613 return Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_wordpress_components__WEBPACK_IMPORTED_MODULE_2__["Guide"], { 11614 className: "pattern-actions__guide ".concat(className), 11615 onFinish: onFinish, 11616 finishButtonText: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__["__"])('Close', 'wporg-patterns'), 11617 pages: [{ 11618 image: Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(CopyPasteImage, null), 11619 content: Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])("div", { 11620 className: "pattern-actions__guide-content" 11621 }, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])("h3", { 11622 className: "pattern-actions__guide-title" 11623 }, Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__["__"])('How to use patterns on your WordPress site.', 'wporg-patterns')), Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])("p", null, Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__["__"])('Patterns are really just text. And, just like you can copy and paste text, you can copy and paste patterns. Its really easy!', 'wporg-patterns')), Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])("ol", null, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])("li", null, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])("p", null, Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__["__"])('Open any post or page in the WordPress block editor.', 'wporg-patterns'))), Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])("li", null, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])("p", null, Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__["__"])('Place your cursor where you want to add the pattern.', 'wporg-patterns'))), Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])("li", null, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])("p", null, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createInterpolateElement"])(Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__["__"])('Paste the contents of your clipboard by pressing both the <kbd>⌘</kbd> and <kbd>v</kbd> keys, or right-clicking and choose "Paste" from the menu.', 'wporg-patterns'), { 11624 kbd: Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])("kbd", { 11625 className: "pattern-actions__guide-shortcut" 11626 }) 11627 }))))) 11628 }] 11629 }); 11630 }); 11631 }; 11632 11633 /* harmony default export */ __webpack_exports__["default"] = (CopyGuide); 11634 11635 /***/ }), 11636 11637 /***/ "./src/components/pattern-preview-actions/copy-success-message.js": 11638 /*!************************************************************************!*\ 11639 !*** ./src/components/pattern-preview-actions/copy-success-message.js ***! 11640 \************************************************************************/ 11641 /*! exports provided: default */ 11642 /***/ (function(module, __webpack_exports__, __webpack_require__) { 11643 11644 "use strict"; 11645 __webpack_require__.r(__webpack_exports__); 11646 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element"); 11647 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__); 11648 /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); 11649 /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__); 11650 /* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/components */ "@wordpress/components"); 11651 /* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_components__WEBPACK_IMPORTED_MODULE_2__); 11652 11653 11654 /** 11655 * External dependencies 11656 */ 11657 11658 11659 11660 var CopySuccessMessage = function CopySuccessMessage(_ref) { 11661 var onClick = _ref.onClick; 11662 return Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_wordpress_components__WEBPACK_IMPORTED_MODULE_2__["Notice"], { 11663 className: "pattern-actions__notice", 11664 status: "success", 11665 isDismissible: false 11666 }, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])("div", null, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])("b", null, Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__["__"])('Pattern copied!', 'wporg-patterns')), Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__["__"])(' Now you can paste it into any WordPress post or page.', 'wporg-patterns')), Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_wordpress_components__WEBPACK_IMPORTED_MODULE_2__["Button"], { 11667 onClick: onClick, 11668 isSecondary: true 11669 }, Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__["__"])('Learn More', 'wporg-patterns'))); 11670 }; 11671 11672 /* harmony default export */ __webpack_exports__["default"] = (CopySuccessMessage); 11673 11674 /***/ }), 11675 11676 /***/ "./src/components/pattern-preview-actions/index.js": 11677 /*!*********************************************************!*\ 11678 !*** ./src/components/pattern-preview-actions/index.js ***! 11679 \*********************************************************/ 11680 /*! exports provided: default */ 11681 /***/ (function(module, __webpack_exports__, __webpack_require__) { 11682 11683 "use strict"; 11684 __webpack_require__.r(__webpack_exports__); 11685 /* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ "../../../../node_modules/@babel/runtime/helpers/slicedToArray.js"); 11686 /* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__); 11687 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element"); 11688 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__); 11689 /* harmony import */ var _copy_pattern_button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../copy-pattern-button */ "./src/components/copy-pattern-button/index.js"); 11690 /* harmony import */ var _add_to_favorite_button__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../add-to-favorite-button */ "./src/components/add-to-favorite-button/index.js"); 11691 /* harmony import */ var _copy_success_message__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./copy-success-message */ "./src/components/pattern-preview-actions/copy-success-message.js"); 11692 /* harmony import */ var _copy_guide__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./copy-guide */ "./src/components/pattern-preview-actions/copy-guide.js"); 11693 11694 11695 11696 /** 11697 * External dependencies 11698 */ 11699 11700 /** 11701 * Internal dependencies 11702 */ 11703 11704 11705 11706 11707 11708 11709 var PatternPreviewActions = function PatternPreviewActions() { 11710 var _useState = Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["useState"])(false), 11711 _useState2 = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default()(_useState, 2), 11712 showSuccess = _useState2[0], 11713 setShowSuccess = _useState2[1]; 11714 11715 var _useState3 = Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["useState"])(false), 11716 _useState4 = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default()(_useState3, 2), 11717 showGuide = _useState4[0], 11718 setShowGuide = _useState4[1]; 11719 11720 return Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["createElement"])(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["Fragment"], null, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["createElement"])(_copy_pattern_button__WEBPACK_IMPORTED_MODULE_2__["default"], { 11721 onSuccess: function onSuccess() { 11722 return setShowSuccess(true); 11723 } 11724 }), Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["createElement"])(_add_to_favorite_button__WEBPACK_IMPORTED_MODULE_3__["default"], null), showSuccess && Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["createElement"])(_copy_success_message__WEBPACK_IMPORTED_MODULE_4__["default"], { 11725 onClick: function onClick() { 11726 return setShowGuide(true); 11727 } 11728 }), showGuide && Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["createElement"])(_copy_guide__WEBPACK_IMPORTED_MODULE_5__["default"], { 11729 onFinish: function onFinish() { 11730 return setShowGuide(false); 11731 } 11732 })); 11733 }; 11734 11735 /* harmony default export */ __webpack_exports__["default"] = (PatternPreviewActions); 11365 11736 11366 11737 /***/ }), … … 11739 12110 /***/ }), 11740 12111 12112 /***/ "./src/components/patterns/index.js": 12113 /*!******************************************!*\ 12114 !*** ./src/components/patterns/index.js ***! 12115 \******************************************/ 12116 /*! exports provided: default */ 12117 /***/ (function(module, __webpack_exports__, __webpack_require__) { 12118 12119 "use strict"; 12120 __webpack_require__.r(__webpack_exports__); 12121 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element"); 12122 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__); 12123 /* harmony import */ var _pattern_grid__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../pattern-grid */ "./src/components/pattern-grid/index.js"); 12124 /* harmony import */ var _pattern_grid_menu__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../pattern-grid-menu */ "./src/components/pattern-grid-menu/index.js"); 12125 /* harmony import */ var _query_monitor__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../query-monitor */ "./src/components/query-monitor/index.js"); 12126 /* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../hooks */ "./src/hooks/index.js"); 12127 12128 12129 /** 12130 * Internal dependencies 12131 */ 12132 12133 12134 12135 12136 12137 var Patterns = function Patterns() { 12138 return Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_hooks__WEBPACK_IMPORTED_MODULE_4__["RouteProvider"], null, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_query_monitor__WEBPACK_IMPORTED_MODULE_3__["default"], null), Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_pattern_grid_menu__WEBPACK_IMPORTED_MODULE_2__["default"], null), Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_pattern_grid__WEBPACK_IMPORTED_MODULE_1__["default"], null)); 12139 }; 12140 12141 /* harmony default export */ __webpack_exports__["default"] = (Patterns); 12142 12143 /***/ }), 12144 12145 /***/ "./src/components/query-monitor/index.js": 12146 /*!***********************************************!*\ 12147 !*** ./src/components/query-monitor/index.js ***! 12148 \***********************************************/ 12149 /*! exports provided: default */ 12150 /***/ (function(module, __webpack_exports__, __webpack_require__) { 12151 12152 "use strict"; 12153 __webpack_require__.r(__webpack_exports__); 12154 /* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "../../../../node_modules/@babel/runtime/helpers/defineProperty.js"); 12155 /* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__); 12156 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element"); 12157 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__); 12158 /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/data */ "@wordpress/data"); 12159 /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_2__); 12160 /* harmony import */ var _wordpress_url__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/url */ "@wordpress/url"); 12161 /* harmony import */ var _wordpress_url__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_url__WEBPACK_IMPORTED_MODULE_3__); 12162 /* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../store */ "./src/store/index.js"); 12163 /* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../hooks */ "./src/hooks/index.js"); 12164 /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../utils */ "./src/utils/index.js"); 12165 12166 12167 function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } 12168 12169 function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } 12170 12171 /** 12172 * WordPress dependencies 12173 */ 12174 12175 12176 12177 /** 12178 * Internal dependencies 12179 */ 12180 12181 12182 12183 12184 /** 12185 * Listens for changes to the path and reconstructs the query object based on the path 12186 */ 12187 12188 var QueryMonitor = function QueryMonitor() { 12189 var _useRoute = Object(_hooks__WEBPACK_IMPORTED_MODULE_5__["useRoute"])(), 12190 path = _useRoute.path; 12191 12192 var query = Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_2__["useSelect"])(function (select) { 12193 var _select = select(_store__WEBPACK_IMPORTED_MODULE_4__["store"]), 12194 getCategoryBySlug = _select.getCategoryBySlug, 12195 hasLoadedCategories = _select.hasLoadedCategories; // We need categories loaded before building the query 12196 12197 12198 if (!hasLoadedCategories()) { 12199 return; 12200 } 12201 12202 var categorySlug = Object(_utils__WEBPACK_IMPORTED_MODULE_6__["getCategoryFromPath"])(path); 12203 var category = getCategoryBySlug(categorySlug); // Default to {} if empty 12204 12205 var queryStrings = Object(_wordpress_url__WEBPACK_IMPORTED_MODULE_3__["getQueryArgs"])(path); 12206 var _query = queryStrings; // If we have a category and it's not the default category 12207 12208 if (category && category.id !== -1) { 12209 _query = _objectSpread(_objectSpread({}, _query), {}, { 12210 'pattern-categories': category.id 12211 }); 12212 } 12213 12214 return _query; 12215 }, [path]); 12216 12217 var _useDispatch = Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_2__["useDispatch"])(_store__WEBPACK_IMPORTED_MODULE_4__["store"]), 12218 setCurrentQuery = _useDispatch.setCurrentQuery; 12219 12220 Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["useEffect"])(function () { 12221 setCurrentQuery(query); 12222 }, [query]); 12223 return null; 12224 }; 12225 12226 /* harmony default export */ __webpack_exports__["default"] = (QueryMonitor); 12227 12228 /***/ }), 12229 12230 /***/ "./src/hooks/index.js": 12231 /*!****************************!*\ 12232 !*** ./src/hooks/index.js ***! 12233 \****************************/ 12234 /*! exports provided: RouteProvider, useRoute */ 12235 /***/ (function(module, __webpack_exports__, __webpack_require__) { 12236 12237 "use strict"; 12238 __webpack_require__.r(__webpack_exports__); 12239 /* harmony import */ var _route__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./route */ "./src/hooks/route.js"); 12240 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "RouteProvider", function() { return _route__WEBPACK_IMPORTED_MODULE_0__["RouteProvider"]; }); 12241 12242 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "useRoute", function() { return _route__WEBPACK_IMPORTED_MODULE_0__["useRoute"]; }); 12243 12244 12245 12246 /***/ }), 12247 12248 /***/ "./src/hooks/route.js": 12249 /*!****************************!*\ 12250 !*** ./src/hooks/route.js ***! 12251 \****************************/ 12252 /*! exports provided: RouteProvider, useRoute */ 12253 /***/ (function(module, __webpack_exports__, __webpack_require__) { 12254 12255 "use strict"; 12256 __webpack_require__.r(__webpack_exports__); 12257 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RouteProvider", function() { return RouteProvider; }); 12258 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "useRoute", function() { return useRoute; }); 12259 /* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "../../../../node_modules/@babel/runtime/helpers/defineProperty.js"); 12260 /* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__); 12261 /* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ "../../../../node_modules/@babel/runtime/helpers/slicedToArray.js"); 12262 /* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1__); 12263 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element"); 12264 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__); 12265 /* harmony import */ var _wordpress_url__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/url */ "@wordpress/url"); 12266 /* harmony import */ var _wordpress_url__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_url__WEBPACK_IMPORTED_MODULE_3__); 12267 /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils */ "./src/utils/index.js"); 12268 12269 12270 12271 12272 function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } 12273 12274 function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } 12275 12276 /** 12277 * WordPress dependencies 12278 */ 12279 12280 12281 /** 12282 * Internal dependencies 12283 */ 12284 12285 12286 var StateContext = Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__["createContext"])(); 12287 function RouteProvider(_ref) { 12288 var children = _ref.children; 12289 12290 var _useState = Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__["useState"])(Object(_wordpress_url__WEBPACK_IMPORTED_MODULE_3__["getPathAndQueryString"])(window.location.href)), 12291 _useState2 = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1___default()(_useState, 2), 12292 path = _useState2[0], 12293 setPath = _useState2[1]; 12294 /** 12295 * Combines query strings from the current path and the new path for arguments with values. 12296 * 12297 * @param {string} newPath Path including query strings 12298 * @return {Object} Query strings as an object 12299 */ 12300 12301 12302 var mergeQueryStrings = function mergeQueryStrings(newPath) { 12303 var currentQueryStrings = Object(_wordpress_url__WEBPACK_IMPORTED_MODULE_3__["getQueryArgs"])(path); 12304 var newQueryStrings = Object(_wordpress_url__WEBPACK_IMPORTED_MODULE_3__["getQueryArgs"])(newPath); 12305 12306 var combined = _objectSpread(_objectSpread({}, currentQueryStrings), newQueryStrings); // remove empty query strings 12307 12308 12309 return Object(_utils__WEBPACK_IMPORTED_MODULE_4__["removeEmptyArgs"])(combined); 12310 }; 12311 /** 12312 * Combines the current and new path's query strings and updates the browser's url. 12313 * 12314 * @param {string} newPath 12315 */ 12316 12317 12318 var _pushState = function _pushState(newPath) { 12319 // Merge the existing and new query strings. 12320 var newQueryStrings = mergeQueryStrings(newPath); // Remove the query strings from the path 12321 12322 var pathOnly = Object(_utils__WEBPACK_IMPORTED_MODULE_4__["removeQueryString"])(newPath); // Rebuild the full path 12323 12324 var rebuiltPath = Object(_wordpress_url__WEBPACK_IMPORTED_MODULE_3__["addQueryArgs"])(pathOnly, newQueryStrings); 12325 12326 _replaceState(rebuiltPath); 12327 }; 12328 /** 12329 * Calls `window.history.pushState` to update the browser's url. 12330 * 12331 * @param {string} newPath 12332 */ 12333 12334 12335 var _replaceState = function _replaceState(newPath) { 12336 window.history.pushState('', '', newPath); 12337 setPath(newPath); 12338 }; 12339 12340 return Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__["createElement"])(StateContext.Provider, { 12341 value: { 12342 path: path, 12343 update: _pushState, 12344 replace: _replaceState 12345 } 12346 }, children); 12347 } 12348 function useRoute() { 12349 var context = Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__["useContext"])(StateContext); 12350 12351 if (context === undefined) { 12352 throw new Error('useRoute must be used within a Provider'); 12353 } 12354 12355 return context; 12356 } 12357 12358 /***/ }), 12359 11741 12360 /***/ "./src/index.js": 11742 12361 /*!**********************!*\ … … 11751 12370 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__); 11752 12371 /* harmony import */ var _components_pattern_preview__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./components/pattern-preview */ "./src/components/pattern-preview/index.js"); 11753 /* harmony import */ var _components_pattern_grid__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./components/pattern-grid */ "./src/components/pattern-grid/index.js"); 12372 /* harmony import */ var _components_pattern_preview_actions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./components/pattern-preview-actions */ "./src/components/pattern-preview-actions/index.js"); 12373 /* harmony import */ var _components_patterns__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./components/patterns */ "./src/components/patterns/index.js"); 11754 12374 11755 12375 … … 11761 12381 * Internal dependencies 11762 12382 */ 12383 11763 12384 11764 12385 … … 11784 12405 11785 12406 11786 var gridContainer = document.getElementById('pattern -grid__container');12407 var gridContainer = document.getElementById('patterns__container'); 11787 12408 11788 12409 if (gridContainer) { 11789 Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["render"])(Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_components_pattern_grid__WEBPACK_IMPORTED_MODULE_2__["default"], null), gridContainer); 12410 Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["render"])(Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_components_patterns__WEBPACK_IMPORTED_MODULE_3__["default"], null), gridContainer); 12411 } // Load the pattern preview actions 12412 12413 12414 var patternActionsContainer = document.getElementById('pattern-actions'); 12415 12416 if (patternActionsContainer) { 12417 Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["render"])(Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_components_pattern_preview_actions__WEBPACK_IMPORTED_MODULE_2__["default"], null), patternActionsContainer); 11790 12418 } 11791 12419 … … 11796 12424 !*** ./src/store/actions.js ***! 11797 12425 \******************************/ 11798 /*! exports provided: fetchPatterns, loadPatterns */12426 /*! exports provided: fetchPatterns, loadPatterns, setCurrentQuery, fetchCategories, loadCategories */ 11799 12427 /***/ (function(module, __webpack_exports__, __webpack_require__) { 11800 12428 … … 11803 12431 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fetchPatterns", function() { return fetchPatterns; }); 11804 12432 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadPatterns", function() { return loadPatterns; }); 12433 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setCurrentQuery", function() { return setCurrentQuery; }); 12434 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fetchCategories", function() { return fetchCategories; }); 12435 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadCategories", function() { return loadCategories; }); 11805 12436 /** 11806 12437 * Get the action object signalling that patterns have been requested. … … 11830 12461 query: query, 11831 12462 patterns: patterns 12463 }; 12464 } 12465 /** 12466 * Get the action object signalling that the current view has been set. 12467 * 12468 * @param {string} query Query object. 12469 * @return {Object} Action object. 12470 */ 12471 12472 function setCurrentQuery(query) { 12473 return { 12474 type: 'SET_CURRENT_QUERY', 12475 query: query 12476 }; 12477 } 12478 /** 12479 * Get the action object signalling that categories have been requested. 12480 * 12481 * @return {Object} Action object. 12482 */ 12483 12484 function fetchCategories() { 12485 return { 12486 type: 'FETCH_CATEGORIES' 12487 }; 12488 } 12489 /** 12490 * Get the action object signalling that categories have been loaded. 12491 * 12492 * @param {Array} categories A list of categories. 12493 * @return {Object} Action object. 12494 */ 12495 12496 function loadCategories(categories) { 12497 return { 12498 type: 'LOAD_CATEGORIES', 12499 categories: categories 11832 12500 }; 11833 12501 } … … 11894 12562 !*** ./src/store/reducer.js ***! 11895 12563 \******************************/ 11896 /*! exports provided: patterns, default */12564 /*! exports provided: patterns, categories, currentQuery, default */ 11897 12565 /***/ (function(module, __webpack_exports__, __webpack_require__) { 11898 12566 … … 11900 12568 __webpack_require__.r(__webpack_exports__); 11901 12569 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "patterns", function() { return patterns; }); 11902 /* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ "../../../../node_modules/@babel/runtime/helpers/toConsumableArray.js"); 11903 /* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__); 11904 /* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "../../../../node_modules/@babel/runtime/helpers/defineProperty.js"); 11905 /* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__); 12570 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "categories", function() { return categories; }); 12571 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "currentQuery", function() { return currentQuery; }); 12572 /* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "../../../../node_modules/@babel/runtime/helpers/defineProperty.js"); 12573 /* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__); 12574 /* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ "../../../../node_modules/@babel/runtime/helpers/toConsumableArray.js"); 12575 /* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__); 11906 12576 /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/data */ "@wordpress/data"); 11907 12577 /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_2__); 12578 /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils */ "./src/store/utils.js"); 11908 12579 11909 12580 … … 11911 12582 function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } 11912 12583 11913 function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default()(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } 11914 11915 /** 11916 * WordPress dependencies 11917 */ 12584 function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } 12585 12586 /** 12587 * WordPress dependencies 12588 */ 12589 12590 /** 12591 * Internal dependencies 12592 */ 12593 11918 12594 11919 12595 /** … … 11933 12609 }; 11934 12610 } 12611 /** 12612 * Reducer to track categories. 12613 * 12614 * @param {Object} state Current state. 12615 * @param {Object} action Dispatched action. 12616 * @return {Object} Updated state. 12617 */ 12618 12619 function categories() { 12620 var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined; 12621 var action = arguments.length > 1 ? arguments[1] : undefined; 12622 12623 switch (action.type) { 12624 case 'FETCH_CATEGORIES': 12625 return null; 12626 // Indicates the query is in progress 12627 12628 case 'LOAD_CATEGORIES': 12629 // Sort the categories alphabetically. 12630 // See: https://github.com/WordPress/pattern-directory/pull/76#issuecomment-818330872 12631 var sorted = (action.categories || []).sort(function (a, b) { 12632 return a.name.localeCompare(b.name); 12633 }); 12634 return [Object(_utils__WEBPACK_IMPORTED_MODULE_3__["getAllCategory"])()].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_1___default()(sorted)); 12635 } 12636 12637 return state; 12638 } 12639 /** 12640 * Reducer to track the current query. 12641 * 12642 * @param {Object} state Current state. 12643 * @param {Object} action Dispatched action. 12644 * @return {Object} Updated state. 12645 */ 12646 12647 function currentQuery() { 12648 var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined; 12649 var action = arguments.length > 1 ? arguments[1] : undefined; 12650 12651 switch (action.type) { 12652 case 'SET_CURRENT_QUERY': 12653 return action.query; 12654 } 12655 12656 return state; 12657 } 11935 12658 11936 12659 function byId() { … … 11938 12661 var action = arguments.length > 1 ? arguments[1] : undefined; 11939 12662 var patternsById = (action.patterns || []).reduce(function (acc, cur) { 11940 return _objectSpread(_objectSpread({}, acc), {}, _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_ 1___default()({}, cur.id, cur));12663 return _objectSpread(_objectSpread({}, acc), {}, _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()({}, cur.id, cur)); 11941 12664 }, {}); 11942 12665 … … 11960 12683 switch (action.type) { 11961 12684 case 'LOAD_BLOCK_PATTERNS': 11962 return _objectSpread(_objectSpread({}, state), {}, _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_ 1___default()({}, action.query, [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(state[action.query] || []), _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(patternIds))));12685 return _objectSpread(_objectSpread({}, state), {}, _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()({}, action.query, [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_1___default()(state[action.query] || []), _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_1___default()(patternIds)))); 11963 12686 11964 12687 default: … … 11968 12691 11969 12692 /* harmony default export */ __webpack_exports__["default"] = (Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_2__["combineReducers"])({ 11970 patterns: patterns // taxonomy items,11971 // filter query,11972 // favorites,12693 patterns: patterns, 12694 categories: categories, 12695 currentQuery: currentQuery // favorites, 11973 12696 11974 12697 })); … … 11980 12703 !*** ./src/store/resolvers.js ***! 11981 12704 \********************************/ 11982 /*! exports provided: getPatternsByQuery */12705 /*! exports provided: getPatternsByQuery, getCategories */ 11983 12706 /***/ (function(module, __webpack_exports__, __webpack_require__) { 11984 12707 … … 11986 12709 __webpack_require__.r(__webpack_exports__); 11987 12710 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getPatternsByQuery", function() { return getPatternsByQuery; }); 12711 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getCategories", function() { return getCategories; }); 11988 12712 /* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/regenerator */ "@babel/runtime/regenerator"); 11989 12713 /* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0__); … … 11996 12720 11997 12721 11998 var _marked = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default.a.mark(getPatternsByQuery); 12722 var _marked = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default.a.mark(getPatternsByQuery), 12723 _marked2 = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default.a.mark(getCategories); 11999 12724 12000 12725 /** … … 12046 12771 }, _marked, null, [[1, 11]]); 12047 12772 } 12773 function getCategories() { 12774 var results; 12775 return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default.a.wrap(function getCategories$(_context2) { 12776 while (1) { 12777 switch (_context2.prev = _context2.next) { 12778 case 0: 12779 _context2.prev = 0; 12780 _context2.next = 3; 12781 return Object(_actions__WEBPACK_IMPORTED_MODULE_3__["fetchCategories"])(); 12782 12783 case 3: 12784 _context2.next = 5; 12785 return Object(_wordpress_data_controls__WEBPACK_IMPORTED_MODULE_2__["apiFetch"])({ 12786 path: Object(_wordpress_url__WEBPACK_IMPORTED_MODULE_1__["addQueryArgs"])('/wp/v2/pattern-categories') 12787 }); 12788 12789 case 5: 12790 results = _context2.sent; 12791 _context2.next = 8; 12792 return Object(_actions__WEBPACK_IMPORTED_MODULE_3__["loadCategories"])(results); 12793 12794 case 8: 12795 _context2.next = 12; 12796 break; 12797 12798 case 10: 12799 _context2.prev = 10; 12800 _context2.t0 = _context2["catch"](0); 12801 12802 case 12: 12803 case "end": 12804 return _context2.stop(); 12805 } 12806 } 12807 }, _marked2, null, [[0, 10]]); 12808 } 12048 12809 12049 12810 /***/ }), … … 12053 12814 !*** ./src/store/selectors.js ***! 12054 12815 \********************************/ 12055 /*! exports provided: isLoadingPatternsByQuery, getPatterns, getPatternsByQuery, getPattern */12816 /*! exports provided: isLoadingPatternsByQuery, getPatterns, getPatternsByQuery, getPattern, getCurrentQuery, isLoadingCategories, hasLoadedCategories, getCategories, getCategoryBySlug */ 12056 12817 /***/ (function(module, __webpack_exports__, __webpack_require__) { 12057 12818 … … 12062 12823 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getPatternsByQuery", function() { return getPatternsByQuery; }); 12063 12824 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getPattern", function() { return getPattern; }); 12064 /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils */ "./src/store/utils.js"); 12825 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getCurrentQuery", function() { return getCurrentQuery; }); 12826 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isLoadingCategories", function() { return isLoadingCategories; }); 12827 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "hasLoadedCategories", function() { return hasLoadedCategories; }); 12828 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getCategories", function() { return getCategories; }); 12829 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getCategoryBySlug", function() { return getCategoryBySlug; }); 12830 /* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ "../../../../node_modules/@babel/runtime/helpers/slicedToArray.js"); 12831 /* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__); 12832 /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils */ "./src/store/utils.js"); 12833 12834 12065 12835 /** 12066 12836 * Internal dependencies … … 12077 12847 12078 12848 function isLoadingPatternsByQuery(state, query) { 12079 var queryString = Object(_utils__WEBPACK_IMPORTED_MODULE_ 0__["getQueryString"])(query);12849 var queryString = Object(_utils__WEBPACK_IMPORTED_MODULE_1__["getQueryString"])(query); 12080 12850 return !Array.isArray(state.patterns.queries[queryString]); 12081 12851 } … … 12101 12871 12102 12872 function getPatternsByQuery(state, query) { 12103 var queryString = Object(_utils__WEBPACK_IMPORTED_MODULE_ 0__["getQueryString"])(query);12873 var queryString = Object(_utils__WEBPACK_IMPORTED_MODULE_1__["getQueryString"])(query); 12104 12874 return (state.patterns.queries[queryString] || []).map(function (id) { 12105 12875 return state.patterns.byId[id]; … … 12118 12888 return state.patterns.byId[id] || null; 12119 12889 } 12890 /** 12891 * Get the current query. 12892 * 12893 * @param {Object} state Global application state. 12894 * 12895 * @return {Object} The current query. 12896 */ 12897 12898 function getCurrentQuery(state) { 12899 return state.currentQuery; 12900 } 12901 /** 12902 * Check if there is a pending request for category query. 12903 * 12904 * @param {Object} state Global application state. 12905 * 12906 * @return {boolean} True if an API request is in progress for this query. 12907 */ 12908 12909 function isLoadingCategories(state) { 12910 return state.categories === null; 12911 } 12912 /** 12913 * Check if the categories have been loaded. 12914 * 12915 * @param {Object} state Global application state. 12916 * 12917 * @return {boolean} True if categories is an array. 12918 */ 12919 12920 function hasLoadedCategories(state) { 12921 return Array.isArray(state.categories); 12922 } 12923 /** 12924 * Get all loaded categories. 12925 * 12926 * @param {Object} state Global application state. 12927 * 12928 * @return {Array} A list of all categories. 12929 */ 12930 12931 function getCategories(state) { 12932 return state.categories; 12933 } 12934 /** 12935 * Get category by its slug. 12936 * 12937 * @param {Object} state Global application state. 12938 * @param {string} slug Category slug. 12939 * 12940 * @return {Array|undefined} The requested category. 12941 */ 12942 12943 function getCategoryBySlug(state, slug) { 12944 if (!hasLoadedCategories(state)) { 12945 return; 12946 } 12947 12948 var _state$categories$fil = state.categories.filter(function (i) { 12949 return i.slug === slug; 12950 }), 12951 _state$categories$fil2 = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default()(_state$categories$fil, 1), 12952 cat = _state$categories$fil2[0]; 12953 12954 return cat; 12955 } 12120 12956 12121 12957 /***/ }), … … 12125 12961 !*** ./src/store/utils.js ***! 12126 12962 \****************************/ 12127 /*! exports provided: getQueryString */12963 /*! exports provided: getQueryString, getAllCategory */ 12128 12964 /***/ (function(module, __webpack_exports__, __webpack_require__) { 12129 12965 … … 12131 12967 __webpack_require__.r(__webpack_exports__); 12132 12968 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getQueryString", function() { return getQueryString; }); 12969 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getAllCategory", function() { return getAllCategory; }); 12133 12970 /* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "../../../../node_modules/@babel/runtime/helpers/defineProperty.js"); 12134 12971 /* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__); 12135 12972 /* harmony import */ var _wordpress_url__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/url */ "@wordpress/url"); 12136 12973 /* harmony import */ var _wordpress_url__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_url__WEBPACK_IMPORTED_MODULE_1__); 12137 12138 12139 /** 12140 * WordPress dependencies 12141 */ 12974 /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); 12975 /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__); 12976 12977 12978 /** 12979 * WordPress dependencies 12980 */ 12981 12142 12982 12143 12983 /** … … 12179 13019 return stableKey; 12180 13020 } 13021 /** 13022 * Get the first category used to display all patterns. 13023 * 13024 * See Schema: 13025 * https://developer.wordpress.org/rest-api/reference/categories/ 13026 * 13027 * @return {Object} A category object 13028 */ 13029 13030 function getAllCategory() { 13031 return { 13032 id: -1, 13033 slug: '', 13034 // Slug matches url 13035 name: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__["__"])('All', 'wporg-patterns'), 13036 link: '/' 13037 }; 13038 } 13039 13040 /***/ }), 13041 13042 /***/ "./src/utils/category.js": 13043 /*!*******************************!*\ 13044 !*** ./src/utils/category.js ***! 13045 \*******************************/ 13046 /*! exports provided: removeEmptyArgs, removeQueryString, getCategoryFromPath */ 13047 /***/ (function(module, __webpack_exports__, __webpack_require__) { 13048 13049 "use strict"; 13050 __webpack_require__.r(__webpack_exports__); 13051 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeEmptyArgs", function() { return removeEmptyArgs; }); 13052 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeQueryString", function() { return removeQueryString; }); 13053 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getCategoryFromPath", function() { return getCategoryFromPath; }); 13054 /** 13055 * Remove the last '/' from a string if it exists. 13056 * 13057 * @param {string} str Url or url part 13058 * @return {string} 13059 */ 13060 var removeTrailingSlash = function removeTrailingSlash(str) { 13061 return str.replace(/\/$/, ''); 13062 }; 13063 /** 13064 * Removes any empty properties or empty strings. 13065 * 13066 * @param {Object} obj 13067 * @return {Object} Object with keys that are defined and not empty 13068 */ 13069 13070 13071 var removeEmptyArgs = function removeEmptyArgs(obj) { 13072 var cleaned = {}; 13073 Object.keys(obj).forEach(function (key) { 13074 var arg = obj[key]; // If it's not undefined or null convert it to string and check that it is not empty. 13075 // It's a bit of a "trick" to handle non-strings and strings without checking type explicitly. 13076 13077 if (arg !== undefined && arg !== null && arg.toString().length > 0) { 13078 cleaned[key] = arg; 13079 } 13080 }); 13081 return cleaned; 13082 }; 13083 /** 13084 * Splits a string at ? and returns the first part. 13085 * 13086 * @param {string} path Url or url part 13087 * @return {string} Returns string or string before ? character. 13088 */ 13089 13090 var removeQueryString = function removeQueryString(path) { 13091 return path.split('?')[0]; 13092 }; 13093 /** 13094 * Retrieves the category from a url path without query string params. 13095 * 13096 * @param {string} path 13097 * @return {string} The category slug. 13098 */ 13099 13100 var getCategoryFromPath = function getCategoryFromPath(path) { 13101 var _path = removeQueryString(path); 13102 13103 _path = removeTrailingSlash(_path); 13104 return _path.substring(_path.lastIndexOf('/') + 1); 13105 }; 13106 13107 /***/ }), 13108 13109 /***/ "./src/utils/index.js": 13110 /*!****************************!*\ 13111 !*** ./src/utils/index.js ***! 13112 \****************************/ 13113 /*! exports provided: getCategoryFromPath, removeQueryString, removeEmptyArgs */ 13114 /***/ (function(module, __webpack_exports__, __webpack_require__) { 13115 13116 "use strict"; 13117 __webpack_require__.r(__webpack_exports__); 13118 /* harmony import */ var _category__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./category */ "./src/utils/category.js"); 13119 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getCategoryFromPath", function() { return _category__WEBPACK_IMPORTED_MODULE_0__["getCategoryFromPath"]; }); 13120 13121 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "removeQueryString", function() { return _category__WEBPACK_IMPORTED_MODULE_0__["removeQueryString"]; }); 13122 13123 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "removeEmptyArgs", function() { return _category__WEBPACK_IMPORTED_MODULE_0__["removeEmptyArgs"]; }); 13124 13125 12181 13126 12182 13127 /***/ }), … … 12226 13171 /***/ }), 12227 13172 12228 /***/ "@wordpress/core-data":12229 /*!**********************************!*\12230 !*** external ["wp","coreData"] ***!12231 \**********************************/12232 /*! no static exports found */12233 /***/ (function(module, exports) {12234 12235 (function() { module.exports = window["wp"]["coreData"]; }());12236 12237 /***/ }),12238 12239 13173 /***/ "@wordpress/data": 12240 13174 /*!******************************!*\ -
sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-patterns/css/components/_category-context-bar.scss
r10882 r10924 5 5 font-size: 0.8125rem; 6 6 overflow: auto; 7 transition: all 50ms ease-out; 7 transition: all 100ms ease-out; 8 transition-delay: 100ms; 8 9 9 10 > div { -
sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-patterns/css/components/_category-menu.scss
r10882 r10924 7 7 background-repeat: no-repeat; 8 8 background-size: 0; 9 background-position-x: 20px;9 background-position-x: 0; 10 10 transition: all 75ms ease-out; 11 min-height: 45px; 11 12 12 13 li { … … 81 82 height: 24px; 82 83 left: 0; 84 top: calc(50% - 12px); 83 85 transition: none; 84 86 } -
sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-patterns/css/components/_category-search.scss
r10882 r10924 13 13 box-shadow: none; 14 14 font-size: 0.8125rem; 15 16 &:focus { 17 outline: $color__wp-blue auto 1px; 18 } 15 19 } 16 20 … … 20 24 border: none; 21 25 color: $color__text-lighter; 26 27 &:active { 28 background: $color-gray-light-600; 29 } 30 31 &:focus { 32 outline: $color__wp-blue auto 1px; 33 } 22 34 } 23 35 … … 30 42 31 43 @media only screen and (min-width: $breakpoint-mobile) { 32 width: 224px; 44 width: 224px !important; 45 min-width: auto !important; 33 46 } 34 47 -
sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-patterns/css/components/_pattern.scss
r10841 r10924 13 13 .entry-header { 14 14 max-width: $size__site-main; 15 padding: 2rem 0;15 padding: 1.5rem; 16 16 margin-left: auto; 17 17 margin-right: auto; 18 19 @media only screen and (min-width: $breakpoint-large) { 20 padding: 1.5rem 0; 21 } 18 22 19 23 .entry-title { … … 26 30 display: flex; 27 31 align-items: stretch; 32 flex-wrap: wrap; 28 33 29 34 button + button { 30 35 margin-left: 2em; 31 36 } 37 } 38 39 .pattern-actions__notice { 40 margin: 1.5rem 0 0; 41 height: auto; 42 flex-basis: 100%; 43 44 // @wordpress/components/notice wraps content 45 > * { 46 display: flex; 47 flex-direction: column; // stack on mobile 48 justify-content: space-between; 49 align-items: flex-start; 50 margin: 0; 51 52 button { 53 margin-top: 0.75rem; 54 } 55 56 @media only screen and (min-width: $breakpoint-small) { 57 align-items: center; 58 flex-direction: row; 59 60 button { 61 margin-top: 0; 62 } 63 } 64 } 65 } 66 67 .pattern-actions__guide { 68 max-width: $breakpoint-mobile / 1.25; 69 70 // @wordpress/components/guide overrides 71 height: auto; 72 max-height: none; 73 } 74 75 .pattern-actions__guide-content { 76 padding: 1.5rem; 77 line-height: 1.5; 78 } 79 80 .pattern-actions__guide-title { 81 margin: 0; 82 } 83 84 .pattern-actions__guide-shortcut { 85 background: $color-gray-light-300; 86 box-shadow: 0 0 0 1px $color-gray-light-700; 87 padding: 1px; 88 font-weight: 600; 89 min-width: 20px; 90 display: inline-block; 91 text-align: center; 92 border-radius: 2px; 32 93 } 33 94 -
sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-patterns/css/style.css
r10882 r10924 1 @charset "UTF-8";[class*=col-]{margin:inherit}.row{display:flex;flex-direction:row;flex-wrap:wrap}@media (max-width:768px){.row{flex-direction:column;flex-wrap:nowrap}}.row.gutters>.row{margin-left:-2%}@media (max-width:768px){.row.gutters>.row{margin-left:0}}.row.gutters>.row>[class*=col-]{margin-left:2%}@media (max-width:768px){.row.gutters>.row>[class*=col-]{margin-left:0}}.row.around{justify-content:space-around}.row.between{justify-content:space-between}.row.auto .col{flex-grow:1}.col-1{width:8.3333333333%}.offset-1{margin-left:8.3333333333%}.col-2{width:16.6666666667%}.offset-2{margin-left:16.6666666667%}.col-3{width:25%}.offset-3{margin-left:25%}.col-4{width:33.3333333333%}.offset-4{margin-left:33.3333333333%}.col-5{width:41.6666666667%}.offset-5{margin-left:41.6666666667%}.col-6{width:50%}.offset-6{margin-left:50%}.col-7{width:58.3333333333%}.offset-7{margin-left:58.3333333333%}.col-8{width:66.6666666667%}.offset-8{margin-left:66.6666666667%}.col-9{width:75%}.offset-9{margin-left:75%}.col-10{width:83.3333333333%}.offset-10{margin-left:83.3333333333%}.col-11{width:91.6666666667%}.offset-11{margin-left:91.6666666667%}.col-12{width:100%}.offset-12{margin-left:100%}.gutters>.col-1{width:6.33333%}.gutters>.col-1:nth-child(n+13){margin-top:2%}.gutters>.offset-1{margin-left:10.33333%!important}.gutters>.col-2{width:14.66667%}.gutters>.col-2:nth-child(n+7){margin-top:2%}.gutters>.offset-2{margin-left:18.66667%!important}.gutters>.col-3{width:23%}.gutters>.col-3:nth-child(n+5){margin-top:2%}.gutters>.offset-3{margin-left:27%!important}.gutters>.col-4{width:31.33333%}.gutters>.col-4:nth-child(n+4){margin-top:2%}.gutters>.offset-4{margin-left:35.33333%!important}.gutters>.col-5{width:39.66667%}.gutters>.offset-5{margin-left:43.66667%!important}.gutters>.col-6{width:48%}.gutters>.col-6:nth-child(n+3){margin-top:2%}.gutters>.offset-6{margin-left:52%!important}.gutters>.col-7{width:56.33333%}.gutters>.offset-7{margin-left:60.33333%!important}.gutters>.col-8{width:64.66667%}.gutters>.offset-8{margin-left:68.66667%!important}.gutters>.col-9{width:73%}.gutters>.offset-9{margin-left:77%!important}.gutters>.col-10{width:81.33333%}.gutters>.offset-10{margin-left:85.33333%!important}.gutters>.col-11{width:89.66667%}.gutters>.offset-11{margin-left:93.66667%!important}.gutters>.col-12{width:98%}.gutters>.offset-12{margin-left:102%!important}@media (max-width:768px){[class*=" offset-"],[class^=offset-]{margin-left:0}}.first{order:-1}.last{order:1}@media (max-width:768px){.row [class*=col-]{margin-left:0;width:100%}.row.gutters [class*=col-]{margin-bottom:16px}.first-sm{order:-1}.last-sm{order:1}}.gutters .column.push-left,.push-left{margin-right:auto}.gutters .column.push-right,.push-right{margin-left:auto}.gutters .column.push-center,.push-center{margin-left:auto;margin-right:auto}.gutters .column.push-middle,.push-middle{margin-top:auto;margin-bottom:auto}.push-bottom{margin-top:auto}@media (max-width:768px){.gutters .column.push-left-sm,.push-left-sm{margin-left:0}.gutters .column.push-center-sm,.push-center-sm{margin-left:auto;margin-right:auto}.push-top-sm{margin-top:0}}.align-middle{align-items:center}.align-right{justify-content:flex-end}.align-center{justify-content:center}@media (max-width:768px){.align-left-sm{justify-content:flex-start}}.float-right{float:right}.float-left{float:left}@media (max-width:768px){.float-left,.float-right{float:none}}.fixed{position:fixed;top:0;left:0;z-index:100;width:100%}html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}optgroup{font-weight:700}table{border-spacing:0}td,th{padding:0}p{margin:1rem 0}cite,dfn,em,i{font-style:italic}blockquote{margin:0 1.5rem}address{margin:0 0 1.5rem}pre{background:#eee;font-family:Courier\ 10 Pitch,Courier,monospace;font-size:.9375rem;line-height:1.6;margin-bottom:1.6rem;max-width:100%;overflow:auto;padding:1.6rem}code,kbd,tt,var{font-family:Monaco,Consolas,Andale Mono,DejaVu Sans Mono,monospace;font-size:.9375rem}abbr,acronym{border-bottom:1px dotted #666;cursor:help}ins,mark{background:#fff9c0;text-decoration:none}big{font-size:125%}html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}body{background:#fff}blockquote,q{quotes:"" ""}blockquote:after,blockquote:before,q:after,q:before{content:""}blockquote{border-left:2px solid #767676;color:#767676;margin:1rem 0;padding-left:.8rem}blockquote cite{font-size:.8rem}figure{margin:0}hr{background-color:#eee;border:0;height:2px;margin:5rem auto}img{height:auto;max-width:100%}h1,h2,h3,h4,h5,h6{font-family:Open Sans,sans-serif;clear:both;line-height:1.5;margin:2rem 0 1rem}.h1,h1{font-size:2.44140625rem}.h1,.h2,h1,h2{font-weight:300}.h2,h2{font-size:1.953125rem}.h3,h3{font-size:1.5625rem;font-weight:400}.h4,h4{font-size:1.25rem;color:#32373c;font-weight:600;padding:0}.h5,h5{font-size:1rem;letter-spacing:.01rem}.h5,.h6,h5,h6{font-weight:600;text-transform:uppercase}.h6,h6{font-size:.8rem;letter-spacing:.8px}a{color:#0073aa;text-decoration:none}a:active,a:focus,a:hover{text-decoration:underline}a:focus{outline:thin dotted}a:active,a:hover{outline:0}li>a,p a{text-decoration:underline}li>a:hover,p a:hover{color:#d54e21}ol,ul{margin:0 0 1.5em 1.5em;padding:0}ul{list-style:square}ol{list-style:decimal}ol.unmarked-list,ul.unmarked-list{list-style:none;padding-left:0}li>ol,li>ul{margin-bottom:0}dt{font-weight:700}dd{margin:0 1.5em 1.5em}table{border:1px solid #eee;border-collapse:collapse;font-size:.8rem;margin:0 0 1rem;padding:0;width:100%}table thead{background:#32373c;color:#fff}table td,table th{border:1px solid #eee;font-weight:400;margin:0;padding:.4rem;text-align:left;vertical-align:top}table tbody tr:nth-child(2n){background:#f7f7f7}html{font-size:100%}body,button,input,select,textarea{color:#32373c;font-family:Open Sans,sans-serif;font-size:100%;line-height:1.5}@media screen and (min-width:737px){html{font-size:1.125rem}}.custom-select{display:inline-block;box-sizing:border-box;padding:.5rem 2rem .5rem .8rem;width:auto;font-size:1em;line-height:1.3;border:1px solid #6c7782;box-shadow:none;border-radius:.5em;-moz-appearance:none;-webkit-appearance:none;appearance:none;background-color:transparent;background-image:url('data:image/svg+xml;charset=US-ASCII,%3Csvg width="14" height="8" xmlns="http://www.w3.org/2000/svg"%3E%3Cpath d="M2 0L7 5L12 0L14 1L7 8L0 1L2 0Z" fill="%23555D66"/%3E%3C/svg%3E%0A');background-repeat:no-repeat;background-position:right .7em top 50%;background-size:.65em auto}.custom-select::-ms-expand{display:none}.custom-select:focus{box-shadow:0 0 1px 3px rgba(59,153,252,.7);box-shadow:0 0 0 3px -moz-mac-focusring;color:#222;outline:none}.custom-select option{font-weight:400}html{font-size:1rem}@media screen and (min-width:737px){html{font-size:1rem}}.screen-reader-text{clip:rect(1px,1px,1px,1px);height:1px;overflow:hidden;position:absolute!important;width:1px}.screen-reader-text:focus{background-color:#f1f1f1;border-radius:3px;box-shadow:0 0 2px 2px rgba(0,0,0,.6);clip:auto!important;color:#21759b;display:block;font-size:.875rem;font-weight:700;height:auto;left:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}.site-content[tabindex="-1"]:focus{outline:0}.no-js .hide-if-no-js{display:none}.alignleft{display:inline;float:left;margin-right:1.5em}.alignright{display:inline;float:right;margin-left:1.5em}.aligncenter{clear:both;display:block;margin-left:auto;margin-right:auto}@media screen and (max-width:480px){.alignleft,.alignright{display:block;float:none;margin-left:auto;margin-right:auto}}.button,.button-primary,.button-secondary,.plugin-upload-form .button-primary{border:1px solid;border-radius:3px;box-sizing:border-box;cursor:pointer;display:inline-block;font-size:.8rem;height:1.5625rem;line-height:1;margin:0;padding:0 .8rem;text-decoration:none;white-space:nowrap;-webkit-appearance:none}button::-moz-focus-inner,input[type=button]::-moz-focus-inner,input[type=reset]::-moz-focus-inner,input[type=submit]::-moz-focus-inner{border:0;padding:0}.button-group.button-xl .button,.button.button-xl{font-size:1rem;height:2.44140625rem;line-height:1;padding:0 1.5rem}.button-group.button-large .button,.button.button-large{height:1.953125rem;line-height:1;padding:0 1rem}.button-group.button-small .button,.button.button-small{font-size:.64rem;height:1.25rem;line-height:1;padding:0 .5rem}a.button,a.button-primary,a.button-secondary{line-height:1.5625rem}.button-group.button-large a.button,a.button.button-large{line-height:1.953125rem}.button-group.button-xl a.button,a.button.button-xl{line-height:2.44140625rem}.button-group.button-small a.button,a.button.button-small{line-height:1.25rem}.button:active,.button:focus{outline:none}.button.hidden{display:none}input[type=reset],input[type=reset]:active,input[type=reset]:focus,input[type=reset]:hover{background:none;border:none;box-shadow:none;padding:0 2px 1px;width:auto}.button,.button-secondary,.button:visited{background:#f7f7f7;border-color:#ccc;box-shadow:0 1px 0 #ccc;color:#555;vertical-align:top}p .button{vertical-align:baseline}.button-secondary:focus,.button-secondary:hover,.button.focus,.button.hover,.button:focus,.button:hover{background:#fafafa;border-color:#999;color:#23282d}.button-link:focus,.button-secondary:focus,.button.focus,.button:focus{border-color:#5b9dd9;box-shadow:0 0 3px rgba(0,115,170,.8)}.button-secondary:active,.button.active,.button.active:hover,.button:active{background:#eee;border-color:#999;box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);transform:translateY(1px)}.button.active:focus{border-color:#5b9dd9;box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5),0 0 3px rgba(0,115,170,.8)}.button-disabled,.button-secondary.disabled,.button-secondary:disabled,.button-secondary[disabled],.button.disabled,.button:disabled,.button[disabled]{background:#f7f7f7!important;border-color:#ddd!important;box-shadow:none!important;color:#a0a5aa!important;cursor:default;text-shadow:0 1px 0 #fff!important;transform:none!important}.button-link,input[type=submit].button-link{background:none;border:0;border-radius:0;box-shadow:none;cursor:pointer;margin:0;outline:none;padding:0}.button-link:focus{outline:1px solid #5b9dd9}.button-primary,.download-button,.plugin-upload-form .button-primary{text-decoration:none;text-shadow:0 -1px 1px #006799,1px 0 1px #006799,0 1px 1px #006799,-1px 0 1px #006799}.button-primary,.button-primary:visited,.download-button,.download-button:visited,.plugin-upload-form .button-primary,.plugin-upload-form .button-primary:visited{background:#0085ba;border-color:#0073aa #006799 #006799;box-shadow:0 1px 0 #006799;color:#fff}.button-primary.focus,.button-primary.hover,.button-primary:focus,.button-primary:hover,.download-button.focus,.download-button.hover,.download-button:focus,.download-button:hover,.plugin-upload-form .button-primary.focus,.plugin-upload-form .button-primary.hover,.plugin-upload-form .button-primary:focus,.plugin-upload-form .button-primary:hover{background:#008ec2;border-color:#006799;box-shadow:0 1px 0 #006799;color:#fff}.button-primary.focus,.button-primary:focus,.download-button.focus,.download-button:focus,.plugin-upload-form .button-primary.focus,.plugin-upload-form .button-primary:focus{box-shadow:0 1px 0 #0073aa,0 0 2px 1px #33b3db}.button-primary.active,.button-primary.active:focus,.button-primary.active:hover,.button-primary:active,.download-button.active,.download-button.active:focus,.download-button.active:hover,.download-button:active,.plugin-upload-form .button-primary.active,.plugin-upload-form .button-primary.active:focus,.plugin-upload-form .button-primary.active:hover,.plugin-upload-form .button-primary:active{background:#0073aa;border-color:#006799;box-shadow:inset 0 2px 0 #006799;vertical-align:top}.button-primary.disabled,.button-primary:disabled,.button-primary[disabled],.download-button.disabled,.download-button:disabled,.download-button[disabled],.plugin-upload-form .button-primary.disabled,.plugin-upload-form .button-primary:disabled,.plugin-upload-form .button-primary[disabled]{background:#008ec2!important;border-color:#007cb2!important;box-shadow:none!important;color:#66c6e4!important;cursor:default;text-shadow:0 -1px 0 rgba(0,0,0,.1)!important}.button-primary.button.button-hero,.download-button.button.button-hero,.plugin-upload-form .button-primary.button.button-hero{box-shadow:0 2px 0 #006799}.button-primary.button.button-hero.active,.button-primary.button.button-hero.active:focus,.button-primary.button.button-hero.active:hover,.button-primary.button.button-hero:active,.download-button.button.button-hero.active,.download-button.button.button-hero.active:focus,.download-button.button.button-hero.active:hover,.download-button.button.button-hero:active,.plugin-upload-form .button-primary.button.button-hero.active,.plugin-upload-form .button-primary.button.button-hero.active:focus,.plugin-upload-form .button-primary.button.button-hero.active:hover,.plugin-upload-form .button-primary.button.button-hero:active{box-shadow:inset 0 3px 0 #006799}.button-primary-disabled{background:#008ec2!important;border-color:#007cb2!important;box-shadow:none!important;color:#66c6e4!important;cursor:default;text-shadow:0 -1px 0 rgba(0,0,0,.1)!important}.button-group{display:inline-block;font-size:0;position:relative;vertical-align:middle;white-space:nowrap}.button-group>.button{border-radius:0;display:inline-block;margin-right:-1px;z-index:10}.button-group>.button-primary{z-index:100}.button-group>.button:hover{z-index:20}.button-group>.button:first-child{border-radius:3px 0 0 3px}.button-group>.button:last-child{border-radius:0 3px 3px 0}.button-group>.button:focus{position:relative;z-index:1}@media screen and (max-width:737px){.button,.button.button-large,.button.button-small,.plugin-upload-form .button-primary{font-size:14px;height:auto;line-height:normal;margin-bottom:4px;padding:6px 14px;vertical-align:middle}}.clear:after,.clear:before,.comment-content:after,.comment-content:before,.entry-content:after,.entry-content:before,.home-below:after,.home-below:before,.site-content:after,.site-content:before,.site-footer:after,.site-footer:before,.site-header:after,.site-header:before{content:"";display:table;table-layout:fixed}.clear:after,.comment-content:after,.entry-content:after,.home-below:after,.site-content:after,.site-footer:after,.site-header:after{clear:both}p.subheading{color:#82878c;font-weight:300;margin:-.4rem auto 2rem;text-align:center}p.intro,p.subheading{font-size:1.25rem}p.aside{font-size:.8rem}p.note{font-size:.64rem;letter-spacing:.01rem;max-width:18.1898940355rem}input,textarea{box-sizing:border-box}input[type=checkbox],input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=radio],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select,textarea{background-color:#fff;border:1px solid #ddd;box-shadow:inset 0 1px 2px rgba(0,0,0,.07);color:#32373c;outline:none;transition:border-color .05s ease-in-out}input[type=checkbox]:focus,input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=radio]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus,select:focus,textarea:focus{border-color:#5b9dd9;box-shadow:0 0 2px rgba(30,140,190,.8)}input[type=email],input[type=url]{direction:ltr}input[type=number]{height:28px;line-height:inherit}input[type=checkbox],input[type=radio]{background:#fff;border:1px solid #b4b9be;box-shadow:inset 0 1px 2px rgba(0,0,0,.1);clear:none;color:#555;cursor:pointer;display:inline-block;height:16px;line-height:0;margin:-4px 4px 0 0;min-width:16px;outline:0;padding:0!important;text-align:center;transition:border-color .05s ease-in-out;vertical-align:middle;width:16px;-webkit-appearance:none}input[type=checkbox]:checked:before,input[type=radio]:checked:before{display:inline-block;float:left;font:normal 21px/1 dashicons;vertical-align:middle;width:16px;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}input[type=checkbox].disabled,input[type=checkbox].disabled:checked:before,input[type=checkbox]:disabled,input[type=checkbox]:disabled:checked:before,input[type=radio].disabled,input[type=radio].disabled:checked:before,input[type=radio]:disabled,input[type=radio]:disabled:checked:before{opacity:.7}input[type=checkbox]:checked:before{color:#1e8cbe;content:"";margin:-3px 0 0 -4px}input[type=radio]{border-radius:50%;line-height:10px;margin-right:4px}input[type=radio]:checked+label:before{color:#82878c}input[type=radio]:checked:before{background-color:#1e8cbe;border-radius:50px;content:"•";font-size:24px;height:6px;line-height:16px;margin:4px;text-indent:-9999px;width:6px}input[type=reset]:active,input[type=reset]:hover{color:#00a0d2}input[type=search]{-webkit-appearance:textfield}input[type=search]::-webkit-search-decoration{display:none}button,input,select,textarea{font-family:inherit;font-size:inherit;font-weight:inherit}input,select,textarea{border-radius:0;font-size:14px;padding:3px 5px}textarea{line-height:1.4;overflow:auto;padding:2px 6px;resize:vertical}textarea.code{line-height:1.4;padding:4px 6px 1px}label{cursor:pointer;vertical-align:middle}input,select{margin:1px;padding:3px 5px}input.code{padding-top:6px}input.readonly,input[readonly],textarea.readonly,textarea[readonly]{background-color:#eee}.wp-core-ui :-moz-placeholder,:-moz-placeholder{color:#a9a9a9}input.disabled,input:disabled,select.disabled,select:disabled,textarea.disabled,textarea:disabled{background:hsla(0,0%,100%,.5);border-color:hsla(0,0%,87.1%,.75);box-shadow:inset 0 1px 2px rgba(0,0,0,.04);color:rgba(51,51,51,.5)}input[type=file].disabled,input[type=file]:disabled,input[type=range].disabled,input[type=range]:disabled{background:none;box-shadow:none}input.large-text,textarea.large-text{width:99%}input.regular-text{width:25em}input.small-text{padding:1px 6px;width:50px}input[type=number].small-text{width:65px}input.tiny-text{width:35px}input[type=number].tiny-text{width:45px}@media screen and (max-width:782px){textarea{-webkit-appearance:none}input[type=email],input[type=number],input[type=password],input[type=search],input[type=text]{-webkit-appearance:none;padding:6px 10px}input[type=number]{height:40px}input.code{padding-bottom:5px;padding-top:10px}input[type=checkbox]{-webkit-appearance:none;padding:10px}input[type=checkbox]:checked:before{font:normal 30px/1 dashicons;margin:-3px -5px}input[type=checkbox],input[type=radio]{height:25px;width:25px}input[type=radio]:checked:before{vertical-align:middle;width:9px;height:9px;margin:7px;line-height:16px}input,textarea{font-size:16px}input[type=number].small-text,input[type=password].small-text,input[type=search].small-text,input[type=text].small-text{width:auto;max-width:55px;display:inline;padding:3px 6px;margin:0 3px}input.regular-text{width:100%}label{font-size:14px}fieldset label{display:block}}a.button:active,a.button:focus,a.button:hover{text-decoration:none}.notice{background:#fff;border-left:4px solid #fff;box-shadow:0 1px 1px 0 rgba(0,0,0,.1);margin:1em 0;padding:1px 12px}.notice p{font-size:.8rem;margin:.5em 0;padding:2px}.notice.notice-alt{box-shadow:none}.notice.notice-large{padding:10px 20px}.notice.notice-success{border-left-color:#46b450}.notice.notice-success.notice-alt{background-color:#ecf7ed}.notice.notice-warning{border-left-color:#ffb900}.notice.notice-warning.notice-alt{background-color:#fff8e5}.notice.notice-error{border-left-color:#dc3232}.notice.notice-error.notice-alt{background-color:#fbeaea}.notice.notice-info{border-left-color:#00a0d2}.notice.notice-info.notice-alt{background-color:#e5f5fa}.error-404 .page-content,.error-404 .page-title{text-align:center}.error-404 .page-content .logo-swing{height:10rem;margin:6rem auto;position:relative;text-align:center;width:10rem}.error-404 .page-content .logo-swing .wp-logo{left:0;max-width:none;position:absolute;top:0;width:10rem}@keyframes hinge{10%{width:180px;height:180px;transform:rotate(0deg)}15%{width:185px;height:185px;transform:rotate(0deg)}20%{width:180px;height:180px;transform:rotate(5deg)}40%{transform-origin:top left;animation-timing-function:ease-in-out}60%{transform:rotate(40deg);transform-origin:top left;animation-timing-function:ease-in-out}40%,80%{transform:rotate(60deg);transform-origin:top left;animation-timing-function:ease-in-out;opacity:1}to{transform:translate3d(0,700px,0);opacity:0}}.hinge{animation-duration:2s;animation-name:hinge}.comments-area{margin-top:5em}.comments-area>:last-child{margin-bottom:0}.comments-area .comment-list+.comment-respond{border-top:1px solid #eaeaea}.comments-area .comment-list+.comment-respond,.comments-area .comment-navigation+.comment-respond{padding-top:1.6em}.comments-area .comments-title{margin-bottom:1.3333em}.comments-area .comment-list{list-style:none;margin:0}.comments-area .comment-list .pingback,.comments-area .comment-list .trackback,.comments-area .comment-list article{border-top:1px solid #eaeaea;padding:1.6em 0}.comments-area .comment-list article:not(:only-child){padding-bottom:0}.comments-area .comment-list article+.comment-respond{padding-bottom:1.6em}.comments-area .comment-list .children{list-style:none;margin:0}.comments-area .comment-list .children>li{padding-left:.8em}.comments-area .comment-list .alt{background:none}.comments-area .comment-author{color:#999;margin-bottom:.4em}.comments-area .comment-author .avatar{float:left;height:24px;margin-right:.8em;width:24px}.comments-area .comment-metadata,.comments-area .pingback .edit-link{color:#999;line-height:1.5}.comments-area .comment-metadata a,.comments-area .pingback .edit-link a{color:#777}.comments-area .comment-metadata{font-size:.8rem;margin-bottom:1.6em}.comments-area .comment-metadata .edit-link,.comments-area .pingback .edit-link{margin-left:1em}.comments-area .pingback .edit-link:before{top:5px}.comments-area .comment-content ol,.comments-area .comment-content ul{margin:0 0 1.6em 1.3333em}.comments-area .comment-content>:last-child,.comments-area .comment-content li>ol,.comments-area .comment-content li>ul{margin-bottom:0}.comments-area .comment-content .reply{font-size:12px}.comments-area .comment-content .reply a{border:1px solid #eaeaea;color:#707070;display:inline-block;font-weight:700;line-height:1;margin-top:2em;padding:.4167em .8333em;text-transform:uppercase}.comments-area .comment-content .reply a:focus,.comments-area .comment-content .reply a:hover{border-color:#333;color:#333;outline:0}.comments-area .comment-reply-title a{font-weight:inherit}.comments-area .comment-form label{font-size:.8rem;font-weight:700;display:block;letter-spacing:.04em;line-height:1.5}.comments-area .comment-form input[type=email],.comments-area .comment-form input[type=text],.comments-area .comment-form input[type=url],.comments-area .comment-form textarea{width:100%}.comments-area .comment-awaiting-moderation,.comments-area .comment-notes,.comments-area .form-allowed-tags,.comments-area .logged-in-as{font-size:1rem;line-height:1.5;margin-bottom:2em}.comments-area .no-comments{border-top:1px solid #eaeaea;color:#999;font-weight:700;padding-top:1.6em}.comments-area .comment-navigation+.no-comments{border-top:0}.comments-area .form-allowed-tags code{font-family:Inconsolata,monospace}.comments-area .form-submit{margin-bottom:0}.comments-area .required{color:#c0392b}.entry-content{hyphens:auto;word-wrap:break-word}.entry-content>p:first-child{margin-top:0}.entry-content [class*=col-]~h1,.entry-content [class*=col-]~h2,.entry-content [class*=col-]~h3,.entry-content [class*=col-]~h4,.entry-content [class*=col-]~h5,.entry-content [class*=col-]~h6{clear:none}.entry-header{position:relative}.entry-header .sticky-post{color:#999;font-size:.8rem;font-style:italic;position:absolute;top:-.8rem}.entry-meta{color:#999;font-size:.8rem;margin-bottom:1rem}.entry-meta a{color:#777}.entry-meta>span{margin-right:1rem}.entry-meta>span :last-of-type{margin:0}.entry-meta .byline,.entry-meta .updated:not(.published),.sticky .entry-meta .posted-on{display:none}.group-blog .entry-meta .byline,.single .entry-meta .byline{display:inline}.entry-summary{hyphens:auto;word-wrap:break-word}body:not(.single):not(.search) .site-main .post{margin-bottom:3.0517578125rem;max-width:40em}.gallery{margin-bottom:1.5rem}.gallery .gallery-item{display:inline-block;margin:0;text-align:center;vertical-align:top;width:100%}.gallery.gallery-columns-2 .gallery-item{max-width:50%}.gallery.gallery-columns-3 .gallery-item{max-width:33.33%}.gallery.gallery-columns-4 .gallery-item{max-width:25%}.gallery.gallery-columns-5 .gallery-item{max-width:20%}.gallery.gallery-columns-6 .gallery-item{max-width:16.66%}.gallery.gallery-columns-7 .gallery-item{max-width:14.28%}.gallery.gallery-columns-8 .gallery-item{max-width:12.5%}.gallery.gallery-columns-9 .gallery-item{max-width:11.11%}.gallery .gallery-caption{display:block}.main-navigation{background:#0073aa;clear:both;left:0;position:absolute;top:60px;width:100%}.main-navigation ul{display:none;list-style:none;margin:0;padding-left:0}.main-navigation ul ul{box-shadow:0 3px 3px rgba(0,0,0,.2);float:left;left:-999em;position:absolute;top:1.5em;z-index:99999}.main-navigation ul ul ul{left:-999em;top:0}.main-navigation ul ul li.focus>ul,.main-navigation ul ul li:hover>ul{left:100%}.main-navigation ul ul a{width:200px}.main-navigation ul li.focus>ul,.main-navigation ul li:hover>ul{left:auto}.main-navigation li{border-top:1px solid hsla(0,0%,100%,.2);padding:1rem}.main-navigation a{color:hsla(0,0%,100%,.8);display:block;font-size:.8rem;text-decoration:none}.main-navigation a.active,.main-navigation a:hover{color:#fff}@media screen and (min-width:737px){.main-navigation a.active{border-bottom:1px solid}}.main-navigation.toggled{z-index:1}.main-navigation.toggled ul{display:block}.menu-toggle{background:transparent;border:none;color:#fff;height:3.5rem;position:absolute;right:1rem;top:-58px;width:3.5rem}.toggled .menu-toggle:before{content:""}@media screen and (min-width:737px){.menu-toggle{display:none}.main-navigation{float:right;position:static;width:auto}.main-navigation.toggled{padding:1px 0}.main-navigation ul{display:inline-block;font-size:0}.main-navigation ul li{border:0;display:inline-block;font-size:1rem;margin-right:1rem;padding:0}.main-navigation ul li:last-of-type{margin-right:0}}.comment-content .wp-smiley,.entry-content .wp-smiley,.page-content .wp-smiley{border:none;margin-bottom:0;margin-top:0;padding:0}embed,iframe,object{max-width:100%}body.page .gutters .col-12{width:100%}body.page .entry-header{background:#0073aa;padding:1rem 0}body.page .entry-header .entry-title{color:#fff;font-size:1.5625rem;font-weight:300;line-height:1;margin:0 auto;padding:0 1.5625rem}body.page .entry-header.home{padding:1.5625rem 1.143rem;text-align:center}@media screen and (min-width:737px){body.page .site-header+.site-main .entry-title{padding:initial}}body.page .entry-content,body.page .entry-footer{margin:0 auto;max-width:960px;padding:3.0517578125rem 1.5625rem}.post-navigation{margin:5em auto;padding:0}.post-navigation a{border-bottom:1px solid #eaeaea;color:#444;display:block;font-weight:600;padding:11px 0 12px;text-transform:none;width:100%}.post-navigation a:hover{color:#21759b}.post-navigation .nav-links{border-top:1px solid #eaeaea;hyphens:auto;word-wrap:break-word}.post-navigation .meta-nav{color:#777;display:block;font-size:13px;line-height:2;text-transform:uppercase}.post-navigation .nav-next{text-align:right}.pagination .nav-links{text-align:center}.pagination .nav-links .page-numbers{background-color:#f9f9f9;cursor:hand;display:inline-block;min-width:2em;padding:8px}.pagination .nav-links .page-numbers.dots,.pagination .nav-links .page-numbers.next,.pagination .nav-links .page-numbers.prev{background:none;font-size:.9em;width:auto}.pagination .nav-links .page-numbers.dots{cursor:inherit}@media screen and (max-width:737px){.pagination .nav-links .page-numbers.next,.pagination .nav-links .page-numbers.prev{font-size:0;min-width:0;padding:0}.pagination .nav-links .page-numbers.next:after,.pagination .nav-links .page-numbers.prev:before{background-color:#f9f9f9;display:inline-block;font-size:1rem;line-height:1.5;min-width:2em;padding:8px}.pagination .nav-links .page-numbers.prev:before{content:"‹"}.pagination .nav-links .page-numbers.next:after{content:"›"}}.pagination .nav-links span.page-numbers{background-color:#f7f7f7;font-weight:700}.search-form .search-field{line-height:normal;margin:0;padding:4px 5px;vertical-align:text-bottom}body.search .gutters .col-12{width:100%}body.search .site-main{margin:0 auto;max-width:960px;padding:0 1.5625rem 3.0517578125rem}.site-content{max-width:960px;padding:0 1.5625rem}@media screen and (min-width:737px){.site-content{padding:0 10px 3.0517578125rem}}@media screen and (max-width:737px){.site-content .site-main{float:none;margin:0;width:auto}}.home .site-content,.page .site-content,.site-content.page{margin:auto;max-width:none;padding:0}.site-content .page-title{font-size:1.25rem;font-weight:400}.site-content .no-results{margin:0 auto 3.0517578125rem;max-width:40em;padding:0 2rem}.site-description{color:hsla(0,0%,100%,.8);font-size:1.25rem;font-weight:300;margin:-.4rem auto 2rem;text-align:center}.site-header{background:#0073aa;padding:1rem 0;position:relative}.site-header .site-branding{margin:0 auto;max-width:960px;padding:0 1.5625rem}@media screen and (min-width:737px){.site-header .site-branding{padding:0 10px}}.site-header.home{padding:1.5625rem 1.143rem;text-align:center}.site-title{display:inline-block;font-size:1.5625rem;font-weight:300;line-height:1;margin:0 2rem 0 0;max-width:none}.site-title a{color:#fff;font-weight:300}.site-title a:active,.site-title a:focus,.site-title a:hover{text-decoration:none}.site-header.home .site-title{display:inherit;font-size:3.8146972656rem;margin:2rem 0 1rem}.widget-area{font-size:.8rem}@media screen and (min-width:480px) and (max-width:768px){.widget-area{display:flex}.widget-area .widget{width:48%}}#wporg-footer{background-color:#f7f7f7;border-top:1px solid #dfdfdf;padding:22px 14px 65px}#wporg-footer,#wporg-footer .wrapper{clear:both;margin:0 auto;overflow:auto}#wporg-footer .wrapper{max-width:930px}#wporg-footer ul{float:left;margin-bottom:20px;margin-left:24px;overflow:auto;padding-left:0;width:135px}@media screen and (min-width:960px){#wporg-footer ul:first-child{margin-left:0}}#wporg-footer ul li{color:#bbb;font-size:14px;list-style-type:none;margin-bottom:1px}#wporg-footer ul li a{text-decoration:none;text-decoration-skip-ink:none}#wporg-footer ul li a:hover{color:#0073aa;text-decoration:underline}#wporg-footer .cip{clear:both;color:#ccc;float:none;font-size:.8rem;letter-spacing:.3em;margin:35px auto 0;text-align:center;text-transform:uppercase}#wporg-footer .cip.cip-image{background:url(//s.w.org/style/images/codeispoetry.png?1=) 50% no-repeat;background-size:190px 15px;height:15px;text-indent:-9999px;width:190px}@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (min-resolution:1.5dppx),only screen and (min-resolution:144dpi){#wporg-footer .cip.cip-image{background-image:url(//s.w.org/style/images/codeispoetry-2x.png?1=)}}@media screen and (min-width:561px) and (max-width:959px){#wporg-footer .wrapper{max-width:600px}#wporg-footer ul{margin-left:2%;width:32%}#wporg-footer ul:nth-child(3n+1){margin-left:0}#wporg-footer ul:nth-child(4n){clear:both}}@media screen and (max-width:560px){#wporg-footer .wrapper{max-width:360px}#wporg-footer ul{margin-left:4%;width:48%}#wporg-footer ul:nth-child(odd){margin-left:0;clear:both}}#wporg-header{background:#23282d;height:140px;position:relative;text-align:center;width:100%}#wporg-header .wrapper{margin:0 auto;max-width:960px}#wporg-header h1{display:inline-block;margin:auto;width:303px}#wporg-header h1 a{background:url(//s.w.org/style/images/wporg-logo.svg?3=) 0 no-repeat;background-size:290px 46px;display:block;height:88px;text-indent:-9999px}#wporg-header h2.rosetta{clear:none;color:#dfdfdf;font-family:Georgia,Times New Roman,serif;font-size:30px;margin:0 0 0 60px}#wporg-header h2.rosetta a{border-bottom:none;color:#dfdfdf;display:block;height:52px;line-height:22px;padding:0}#wporg-header h2.rosetta a:hover{text-decoration:none}#wporg-header #wporg-header-menu{background:#23282d;left:-75%;list-style:none;margin:0;max-width:75%;min-width:200px;position:absolute;text-align:left;top:100%;transition:left .3s;z-index:100000}#wporg-header #wporg-header-menu.toggled{left:0}#wporg-header ul li{list-style-type:none;position:relative}#wporg-header ul li a{color:#eee;display:block;font-family:Open Sans,Helvetica,Arial,Liberation Sans,sans-serif;font-size:13px;font-weight:600;height:34px;line-height:34px;margin:0 4px;padding:10px 30px;text-decoration:none}#wporg-header ul li a.subcurrent{font-weight:700}@media (max-width:768px){#wporg-header ul li a{height:auto}}#wporg-header ul li.current-menu-item a,#wporg-header ul li.current_page_parent a,#wporg-header ul li a.current,#wporg-header ul li a:hover{color:#00a0d2}#wporg-header ul li#download,#wporg-header ul li.download{float:right;height:34px;margin-right:14px;overflow:hidden;padding:0 0 34px}@media screen and (max-width:767px){#wporg-header ul li#download,#wporg-header ul li.download{display:block;float:none;margin:10px 20px 20px;padding-bottom:0;height:auto}#wporg-header ul li#download a,#wporg-header ul li.download a{padding:4px 10px;text-align:center}}#wporg-header ul li#download a,#wporg-header ul li.download a{margin:0;padding:0 16px}#wporg-header ul li#download a:hover,#wporg-header ul li.download a:hover{color:#eee}#wporg-header ul li#download.current,#wporg-header ul li#download.current-menu-item,#wporg-header ul li#download .uparrow,#wporg-header ul li.download.current,#wporg-header ul li.download.current-menu-item,#wporg-header ul li.download .uparrow{display:none}#wporg-header ul li .nav-submenu{clip:rect(1px,1px,1px,1px);height:1px;left:-2px;margin:0;overflow:hidden;padding:0;position:absolute;width:1px;z-index:99999}#wporg-header ul li .nav-submenu li a{display:inline-block;height:24px;line-height:24px;margin:0;white-space:nowrap}@media screen and (min-width:768px){#wporg-header #head-search{float:right;margin-right:14px;padding-top:30px}}#wporg-header #head-search form{border-bottom:1px solid #3f3f3f;display:inline-block;margin-left:60px;width:288px}#wporg-header #head-search form input.text{background:#191e23;border:0;border-radius:0;box-sizing:content-box;color:#b4b9be;float:left;font-family:Open Sans,sans-serif;font-size:12px;height:24px;margin:0;outline:none;padding:3px;vertical-align:top;width:256px}#wporg-header #head-search form input.text::-moz-placeholder{color:#eee}@media screen and (max-width:480px){#wporg-header #head-search form input.text{width:216px}}#wporg-header #head-search form .button{background:#191e23 url(//s.w.org/wp-includes/images/admin-bar-sprite.png?d=20120831) no-repeat 2px 5px;border:none;border-radius:0;box-shadow:none;float:left;height:30px;margin:0;padding:0;text-shadow:none!important;width:26px}@media screen and (max-width:480px){#wporg-header #head-search form{width:248px}}@media screen and (min-width:480px){#wporg-header #head-search form{margin-left:0}}@media screen and (min-width:768px){#wporg-header{height:120px;text-align:inherit}#wporg-header h1{float:left;padding-left:10px}#wporg-header h2.rosetta{float:left;margin-left:0;padding:36px 27px 0}#wporg-header #headline h2{text-rendering:optimizeLegibility}#wporg-header #wporg-header-menu{float:left;height:46px;list-style:none;margin:-15px 0 0;max-width:inherit;min-width:0;padding:0;position:static;width:100%}#wporg-header ul li{float:left;position:relative}#wporg-header ul li a{height:46px;padding:0 6px}#wporg-header ul li a.current~.uparrow{border-bottom:9px solid #f7f7f7;border-left:9px solid transparent;border-right:9px solid transparent;height:0;margin:-8px auto 0;width:0}#wporg-header ul li.current-menu-item:after,#wporg-header ul li.current_page_parent:after{border-bottom:9px solid #f7f7f7;border-left:9px solid transparent;border-right:9px solid transparent;content:"";height:0;left:50%;margin:-8px 0 0 -9px;position:absolute;width:0}#wporg-header ul li .nav-submenu:hover~.uparrow,#wporg-header ul li:hover .nav-submenu~.uparrow{border-bottom:9px solid #32373c;border-left:9px solid transparent;border-right:9px solid transparent;height:0;margin:-10px auto 0;width:0}#wporg-header ul li .nav-submenu{background:#32373c;border:1px solid #32373c;border-top:0;margin-top:-1px;min-width:0}#wporg-header ul li .nav-submenu li{float:none}#wporg-header ul li .nav-submenu li a{height:34px;line-height:34px}#wporg-header .nav-menu .focus>ul,#wporg-header .nav-menu ul li:hover>ul,#wporg-header ul.nav-menu .focus>ul,#wporg-header ul.nav-menu li:hover>ul{clip:inherit;height:inherit;overflow:inherit;width:inherit}#wporg-header ul li.current-menu-item:after,#wporg-header ul li.current_page_parent:after,#wporg-header ul li a.current~.uparrow{border-bottom-color:#0073aa}}.page-download #wporg-header #download,.page-parent-download #wporg-header #download{display:none}#mobile-menu-button{background:none;border:none;box-shadow:none;display:block;float:left;font-family:dashicons;font-size:16px;font-style:normal;font-weight:400;left:10px;line-height:1;padding:1px;position:absolute;text-align:center;text-decoration:inherit;text-shadow:none;top:75px;transition:color .1s ease-in;vertical-align:top;-webkit-font-smoothing:antialiased}#mobile-menu-button:before{border:none;box-sizing:border-box;color:#888;content:"";display:inline-block;float:left;font:normal 50px/1 Dashicons;margin:0;outline:none;padding:3px;text-decoration:none;vertical-align:middle;-webkit-font-smoothing:antialiased}@media screen and (min-width:768px){#mobile-menu-button{display:none}}#download-mobile{background:#f7f7f7;border-bottom:1px solid #ddd}#download-mobile .wrapper{padding:20px 0;text-align:center}#download-mobile span.download-ready{font-size:1.6em;margin:0 .25em}#download-mobile a.download-button{font-size:1.6em;height:inherit;margin:10px .25em;padding:10px 15px}.category-context__bar{margin:0 1.5rem;background:#edeff0;border-radius:2px;font-size:.8125rem;overflow:auto;transition:all 50ms ease-out}.category-context__bar>div{display:flex;align-items:center;justify-content:space-between}@media only screen and (min-width:782px){.category-context__bar{margin:0 1.5rem}}@media only screen and (min-width:960px){.category-context__bar{margin:0 auto;max-width:960px}}.category-context__bar ul{margin:0;padding:0;display:flex;justify-content:space-between}.category-context__bar ul li{list-style:none;font-size:.8125rem}.category-context__bar ul li a{display:block;padding:1.125rem .75rem;text-decoration:none}.category-context__bar ul li:last-child a{padding-right:1.5rem}.category-context__bar__copy{margin:0;padding:1.125rem 1.5rem;font-size:.8125rem;font-weight:400}.category-context__bar__title{margin:0;padding-right:1.5rem;color:#555d66;font-size:.75rem;font-weight:400;text-transform:uppercase}.category-context__bar__links{display:flex;align-items:center}@media only screen and (max-width:782px){.category-context__bar__links{display:none}}.category-context__bar--is-hidden{height:0;overflow:hidden}.category-menu{margin:0;padding:0;position:relative;background:linear-gradient(180deg,hsla(0,0%,100%,0) 94%,#0073aa 0);background-repeat:no-repeat;background-size:0;background-position-x:20px;transition:all 75ms ease-out}.category-menu li{display:inline-block;margin:0;list-style:none}.category-menu a{display:block;padding:.75rem;color:#40464d;font-size:.875rem;text-decoration:none}.category-menu a:active,.category-menu a:focus,.category-menu a:hover,li .category-menu--is-active{color:#000}.category-menu__mobile{padding:0!important;border-top:none!important}.category-menu__mobile ul{margin:0;padding:0;background:#23282d}.category-menu__mobile li{list-style:none;border-top:1px solid #32373c}.category-menu__mobile li a{display:block;padding:1rem 1.5rem;font-size:.875rem;text-decoration:none;color:#ccd0d4}.category-menu__mobile>.components-panel__body-title{margin:0!important}.category-menu__mobile>.components-panel__body-title>button{padding:1.5rem}.category-menu--is-loading{height:24px;position:relative}.category-menu--is-loading:after{content:"";position:absolute;background:#f3f4f5;border-radius:4px;width:80%;height:24px;left:0;transition:none}.category-search{display:flex;align-items:center;background:#fff;border:1px solid #6c7782;border-radius:2px}.category-search input[type=search]{flex-grow:1;margin:0;padding:.25rem .5rem;border:none;box-shadow:none;font-size:.8125rem}.category-search__button{display:flex;background:transparent;border:none;color:#6c7782}.category-search--is-loading{display:block;height:24px;min-width:100%;background:#f3f4f5;border-radius:4px}@media only screen and (min-width:480px){.category-search--is-loading{width:224px}}.pattern__copy-button{transition:all 75ms ease-in-out}.pattern__copy-button.is-small{font-size:.75rem;padding:.75rem;height:auto}.pattern__favorite-button{position:relative;font-size:.875rem;height:2.25rem;width:2.25rem;border-radius:2px;color:#606a74}.pattern__favorite-button svg{position:absolute;top:calc(50% - .75rem);left:calc(50% - .75rem);height:1.5rem;width:1.5rem;transition:all .15s ease-out}.pattern__favorite-button svg path{fill:#6c7782}.pattern__favorite-button .pattern__favorite-filled{opacity:0}.pattern__favorite-button:hover{color:#555d66;background:transparent}.pattern__favorite-button:hover svg path{fill:#555d66}.pattern__favorite-button:active{background:transparent;box-shadow:none;transform:none}.pattern__favorite-button.is-favorited{color:#555d66}.pattern__favorite-button.is-favorited svg path{fill:#d94f4f}.pattern__favorite-button.is-favorited .pattern__favorite-outline{opacity:0;transform:scale(2.8)}.pattern__favorite-button.is-favorited .pattern__favorite-filled{opacity:1}.pattern__favorite-button.is-favorited:hover .pattern__favorite-filled{animation:HeartBeat .9s infinite}@media (prefers-reduced-motion){.pattern__favorite-button.is-favorited:hover .pattern__favorite-filled{animation:none}}.pattern__favorite-button.has-label{padding:12px 18px 12px 38px;height:auto;width:auto}.pattern__favorite-button.has-label svg{top:calc(50% - 12px);left:9px}@keyframes HeartBeat{0%{transform:scale(1)}25%{transform:scale(1.2)}40%{transform:scale(1)}60%{transform:scale(1.2)}to{transform:scale(1)}}.main-navigation{float:none;position:static;width:auto}.main-navigation a{font-size:.8125rem}.main-navigation.toggled div.menu{position:absolute;top:57px;right:0;width:100%;background:#0073aa}.menu-toggle{position:static;height:auto;width:auto;font-size:1.5625rem;overflow:hidden;-webkit-appearance:none}body.page .entry-header{background:none;padding:0}body.page .entry-header .entry-title{color:inherit;margin:2rem auto 1rem;max-width:960px}@media screen and (min-width:737px){body.page .entry-header .entry-title{padding:0 10px}}.pattern-grid-menu{margin:0 auto;max-width:960px;display:flex;flex-direction:column;justify-content:space-between;align-items:center}.pattern-grid-menu>:first-child,.pattern-grid-menu>:last-child{width:100%}.pattern-grid-menu>:last-child{margin:1.5rem;width:calc(100% - 3rem)}@media only screen and (min-width:782px){.pattern-grid-menu{margin:1.5rem;flex-direction:row}.pattern-grid-menu>:last-child{margin:0;width:auto}}@media only screen and (min-width:960px){.pattern-grid-menu{margin:1.5rem auto}}.pattern-grid{max-width:960px;margin:1.5rem}@media screen and (min-width:600px){.pattern-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:1.5rem}.pattern-grid>*{align-self:baseline}}@media screen and (min-width:960px){.pattern-grid{margin-left:auto;margin-right:auto}}.pattern-grid__pattern{position:relative;margin:0 0 1.5rem;border:1px solid #d7dade;border-radius:2px;transition:all 75ms ease-in-out}@media screen and (min-width:600px){.pattern-grid__pattern{display:inline-block;margin:0}}.pattern-grid__pattern .pattern-grid__preview{overflow:hidden}.pattern-grid__pattern .pattern-grid__actions{position:absolute;right:0;bottom:0;left:0;display:flex;align-items:center;padding:.375rem;background:hsla(0,0%,100%,.8);backdrop-filter:blur(3px);opacity:0;transform:translateY(6px);transition:all 75ms ease-in-out}.pattern-grid__pattern .pattern-grid__actions .pattern-grid__title{flex-grow:1;margin:0;padding:0 .375rem 0 .75rem;font-size:.75rem;pointer-events:none}.pattern-grid__pattern .pattern-grid__actions .pattern__copy-button,.pattern-grid__pattern .pattern-grid__actions .pattern__favorite-button{flex-shrink:0}.pattern-grid__pattern .pattern-grid__actions .button+.button{margin-left:.375rem}.pattern-grid__pattern:focus-within .pattern-grid__actions,.pattern-grid__pattern:hover .pattern-grid__actions{opacity:1;transform:translateY(0)}.pattern-preview__container{padding:2rem 0 0;background:#f3f4f5}.pattern-preview__viewport{position:relative;margin:0 auto;padding:0 20px;max-width:100vw;min-width:320px}.pattern-preview__viewport .pattern-preview__viewport-iframe{background:#fff;border:1px solid #e8eaeb;vertical-align:middle;max-width:100vw}.pattern-preview__viewport:focus-within .pattern-preview__resize-help{clip:auto;clip-path:none;height:auto;margin:initial;overflow:initial;width:auto;bottom:-1rem;left:20px;right:20px;padding:8px 16px;background:#fff;border-radius:2px;border:1px solid #d7dade;text-align:center}.pattern-preview__drag-handle{position:absolute;top:0;bottom:0;width:20px}.pattern-preview__drag-handle.is-left{left:0}.pattern-preview__drag-handle.is-right{right:0}.pattern-preview__drag-handle-button{position:absolute;top:calc(50% - 50px);left:6px;padding:0;width:8px;height:100px;appearance:none;cursor:grab;outline:none;background:#7e8993;border-radius:99999px;border:none}.pattern-preview__drag-handle-button:hover{background:#6c7782}.pattern-preview__drag-handle-button:active{cursor:grabbing;background:#606a74}.pattern-preview__drag-handle-button:focus{box-shadow:0 1px 0 #0073aa,0 0 2px 1px #33b3db}body.single-wporg-pattern{box-sizing:border-box;font-size:14px;font-weight:400;line-height:1.2}body.single-wporg-pattern .site-content{margin:auto;max-width:none;padding:0}body.single-wporg-pattern .entry-header{max-width:960px;padding:2rem 0;margin-left:auto;margin-right:auto}body.single-wporg-pattern .entry-header .entry-title{margin-top:0;line-height:1.2}body.single-wporg-pattern .pattern-actions{display:flex;align-items:stretch}body.single-wporg-pattern .pattern-actions button+button{margin-left:2em}body.single-wporg-pattern .entry-content{max-width:960px;margin-left:auto;margin-right:auto}body.single-wporg-pattern .pattern__meta{padding:2rem 0;background:#f3f4f5}body.single-wporg-pattern .pattern__meta>div{max-width:960px;margin-left:auto;margin-right:auto;display:flex;justify-content:space-between}body.single-wporg-pattern .pattern__meta .pattern-preview__report{text-align:right}.site-header:not(.home) .search-form{display:flex;align-items:center}.site-header:not(.home) .search-form>input{flex:1;border:0;border-radius:2px 0 0 2px;display:inline-block;font-size:12px;padding:5px 10px;position:relative;width:auto;height:100%}.site-header:not(.home) .search-form button{margin:0;border-radius:0 2px 2px 0;padding:3px 12px;height:unset}.search-form--is-inline .search-form{display:flex;justify-content:space-between;background:#fff}.search-form--is-inline .search-form>label{flex:1}.search-form--is-inline .search-form input{padding:.5rem;background:transparent;border:none;box-shadow:none;width:100%;font-size:14px}@media only screen and (min-width:768px){.search-form--is-inline .search-form input{font-size:16px}}.search-form--is-inline .search-form button{background:transparent;margin-bottom:0;border:0;box-shadow:none;height:inherit;text-shadow:none;color:#32373c}.search-form--is-inline .search-form button:focus{-webkit-box-shadow:0 0 2px 1px #0073aa;box-shadow:0 0 2px 1px #0073aa}.search-form--is-centered .search-form{margin:0 auto}.search-form--is-constrained .search-form{max-width:36rem}.search-form--is-muted .search-form{border-color:#d7dade!important}.search-form--is-muted .search-form button,.search-form--is-muted .search-form input{background:#f8f9f9;color:#7e8993}.search-form--has-medium-text .search-form input{font-size:14px}.search-form--has-border .search-form{border:1px solid #7e8993}.section-heading_link,.section-heading_title{margin-bottom:0}.section-heading_title{font-weight:300}.section-heading_title .archive-title-prefix{display:block;font-size:1rem}.section-heading_link{text-decoration:underline;font-weight:600;margin-top:1.5rem!important}@media only screen and (min-width:768px){.section-heading_link{margin-top:0!important}}.section-heading_description{margin:1rem 0 0}.section-heading_description :last-child{margin-bottom:0}.section-heading--with-space{padding-bottom:16px}.site-content{margin:0 auto;max-width:none;padding:0}body.home .site-header{padding:3.75rem 1rem;text-align:left}body.home .site-branding{display:grid;grid-template-rows:auto 1fr;grid-template-columns:1fr 22rem}body.home .site-branding>*{align-self:center}@media screen and (max-width:736px){body.home .site-branding{display:block}}body.home .site-title.site-title{grid-column-start:1;grid-row-start:1;margin-top:0;text-align:left;font-size:3rem;line-height:1.25}body.home .site-description{grid-column-start:1;grid-row-start:2;margin:0;font-size:1.25rem;line-height:1.6;text-align:left;color:#fff}body.home .site-callout{grid-column-start:2;grid-row-start:1;grid-row-end:span 2;margin-left:4rem;padding:1.125rem 1.5rem 1.5rem;font-size:.875rem;line-height:1.6;background:#fff;box-shadow:.75rem .75rem 0 rgba(0,0,0,.15)}body.home .site-callout h2{margin-top:0;font-size:1.125rem;line-height:1.25;font-weight:600}body.home .site-callout p:last-child{margin-bottom:0}@media screen and (max-width:736px){body.home .site-callout{margin:2rem auto 0;max-width:24rem}}body:not(.home) .site-branding{display:flex;align-items:center;justify-content:space-between;font-size:.8125rem;color:#fff}body:not(.home) .site-branding a{color:#fff}body:not(.home) .site-branding .sep{margin-left:.5rem;margin-right:.5rem}body:not(.home) .site-branding .is-current-page{font-weight:600}.site-title a{text-decoration:none}.site-title a:active,.site-title a:focus,.site-title a:hover{color:#fff}.has-wporg-blue-color{color:#1e8cbe}.has-wporg-blue-background-color{background-color:#1e8cbe}.has-wporg-purple-color{color:#826eb4}.has-wporg-purple-background-color{background-color:#826eb4}.has-wporg-white-color{color:#fff}.has-wporg-white-background-color{background-color:#fff}.home-page .shapes{position:relative;margin:0 auto}.home-page .shapes .parallelogram p:before{font-size:64px;height:64px;left:-16px;position:relative}.home-page .shapes .parallelogram{color:#fff;display:block;margin:0 auto;opacity:.9;padding:60px 40px;text-align:center;text-decoration:none}.home-page .shapes strong{display:block;font-size:28px;font-weight:300;padding-bottom:15px;padding-top:15px}.home-page .shapes p{color:#fff;font-size:16px;font-weight:300;margin:0}.home-page .shapes u{display:block;font-size:18px;padding-top:15px}@media only screen and (min-width:768px){.home-page .shapes{height:400px}.home-page .shapes .parallelogram{width:50%;position:absolute;padding:50px 90px}}@media only screen and (min-width:960px){.home-page .shapes .parallelogram{-webkit-transform:skew(-15deg);-ms-transform:skew(-15deg);transform:skew(-15deg)}.home-page .shapes .parallelogram:before,.home-page .shapes p{-webkit-transform:skew(15deg);-ms-transform:skew(15deg);transform:skew(15deg)}}@media only screen and (min-width:1200px){.home-page .shapes{margin:0 -60px}}.terms{font-style:italic;font-size:14px}1 @charset "UTF-8";[class*=col-]{margin:inherit}.row{display:flex;flex-direction:row;flex-wrap:wrap}@media (max-width:768px){.row{flex-direction:column;flex-wrap:nowrap}}.row.gutters>.row{margin-left:-2%}@media (max-width:768px){.row.gutters>.row{margin-left:0}}.row.gutters>.row>[class*=col-]{margin-left:2%}@media (max-width:768px){.row.gutters>.row>[class*=col-]{margin-left:0}}.row.around{justify-content:space-around}.row.between{justify-content:space-between}.row.auto .col{flex-grow:1}.col-1{width:8.3333333333%}.offset-1{margin-left:8.3333333333%}.col-2{width:16.6666666667%}.offset-2{margin-left:16.6666666667%}.col-3{width:25%}.offset-3{margin-left:25%}.col-4{width:33.3333333333%}.offset-4{margin-left:33.3333333333%}.col-5{width:41.6666666667%}.offset-5{margin-left:41.6666666667%}.col-6{width:50%}.offset-6{margin-left:50%}.col-7{width:58.3333333333%}.offset-7{margin-left:58.3333333333%}.col-8{width:66.6666666667%}.offset-8{margin-left:66.6666666667%}.col-9{width:75%}.offset-9{margin-left:75%}.col-10{width:83.3333333333%}.offset-10{margin-left:83.3333333333%}.col-11{width:91.6666666667%}.offset-11{margin-left:91.6666666667%}.col-12{width:100%}.offset-12{margin-left:100%}.gutters>.col-1{width:6.33333%}.gutters>.col-1:nth-child(n+13){margin-top:2%}.gutters>.offset-1{margin-left:10.33333%!important}.gutters>.col-2{width:14.66667%}.gutters>.col-2:nth-child(n+7){margin-top:2%}.gutters>.offset-2{margin-left:18.66667%!important}.gutters>.col-3{width:23%}.gutters>.col-3:nth-child(n+5){margin-top:2%}.gutters>.offset-3{margin-left:27%!important}.gutters>.col-4{width:31.33333%}.gutters>.col-4:nth-child(n+4){margin-top:2%}.gutters>.offset-4{margin-left:35.33333%!important}.gutters>.col-5{width:39.66667%}.gutters>.offset-5{margin-left:43.66667%!important}.gutters>.col-6{width:48%}.gutters>.col-6:nth-child(n+3){margin-top:2%}.gutters>.offset-6{margin-left:52%!important}.gutters>.col-7{width:56.33333%}.gutters>.offset-7{margin-left:60.33333%!important}.gutters>.col-8{width:64.66667%}.gutters>.offset-8{margin-left:68.66667%!important}.gutters>.col-9{width:73%}.gutters>.offset-9{margin-left:77%!important}.gutters>.col-10{width:81.33333%}.gutters>.offset-10{margin-left:85.33333%!important}.gutters>.col-11{width:89.66667%}.gutters>.offset-11{margin-left:93.66667%!important}.gutters>.col-12{width:98%}.gutters>.offset-12{margin-left:102%!important}@media (max-width:768px){[class*=" offset-"],[class^=offset-]{margin-left:0}}.first{order:-1}.last{order:1}@media (max-width:768px){.row [class*=col-]{margin-left:0;width:100%}.row.gutters [class*=col-]{margin-bottom:16px}.first-sm{order:-1}.last-sm{order:1}}.gutters .column.push-left,.push-left{margin-right:auto}.gutters .column.push-right,.push-right{margin-left:auto}.gutters .column.push-center,.push-center{margin-left:auto;margin-right:auto}.gutters .column.push-middle,.push-middle{margin-top:auto;margin-bottom:auto}.push-bottom{margin-top:auto}@media (max-width:768px){.gutters .column.push-left-sm,.push-left-sm{margin-left:0}.gutters .column.push-center-sm,.push-center-sm{margin-left:auto;margin-right:auto}.push-top-sm{margin-top:0}}.align-middle{align-items:center}.align-right{justify-content:flex-end}.align-center{justify-content:center}@media (max-width:768px){.align-left-sm{justify-content:flex-start}}.float-right{float:right}.float-left{float:left}@media (max-width:768px){.float-left,.float-right{float:none}}.fixed{position:fixed;top:0;left:0;z-index:100;width:100%}html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}optgroup{font-weight:700}table{border-spacing:0}td,th{padding:0}p{margin:1rem 0}cite,dfn,em,i{font-style:italic}blockquote{margin:0 1.5rem}address{margin:0 0 1.5rem}pre{background:#eee;font-family:Courier\ 10 Pitch,Courier,monospace;font-size:.9375rem;line-height:1.6;margin-bottom:1.6rem;max-width:100%;overflow:auto;padding:1.6rem}code,kbd,tt,var{font-family:Monaco,Consolas,Andale Mono,DejaVu Sans Mono,monospace;font-size:.9375rem}abbr,acronym{border-bottom:1px dotted #666;cursor:help}ins,mark{background:#fff9c0;text-decoration:none}big{font-size:125%}html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}body{background:#fff}blockquote,q{quotes:"" ""}blockquote:after,blockquote:before,q:after,q:before{content:""}blockquote{border-left:2px solid #767676;color:#767676;margin:1rem 0;padding-left:.8rem}blockquote cite{font-size:.8rem}figure{margin:0}hr{background-color:#eee;border:0;height:2px;margin:5rem auto}img{height:auto;max-width:100%}h1,h2,h3,h4,h5,h6{font-family:Open Sans,sans-serif;clear:both;line-height:1.5;margin:2rem 0 1rem}.h1,h1{font-size:2.44140625rem}.h1,.h2,h1,h2{font-weight:300}.h2,h2{font-size:1.953125rem}.h3,h3{font-size:1.5625rem;font-weight:400}.h4,h4{font-size:1.25rem;color:#32373c;font-weight:600;padding:0}.h5,h5{font-size:1rem;letter-spacing:.01rem}.h5,.h6,h5,h6{font-weight:600;text-transform:uppercase}.h6,h6{font-size:.8rem;letter-spacing:.8px}a{color:#0073aa;text-decoration:none}a:active,a:focus,a:hover{text-decoration:underline}a:focus{outline:thin dotted}a:active,a:hover{outline:0}li>a,p a{text-decoration:underline}li>a:hover,p a:hover{color:#d54e21}ol,ul{margin:0 0 1.5em 1.5em;padding:0}ul{list-style:square}ol{list-style:decimal}ol.unmarked-list,ul.unmarked-list{list-style:none;padding-left:0}li>ol,li>ul{margin-bottom:0}dt{font-weight:700}dd{margin:0 1.5em 1.5em}table{border:1px solid #eee;border-collapse:collapse;font-size:.8rem;margin:0 0 1rem;padding:0;width:100%}table thead{background:#32373c;color:#fff}table td,table th{border:1px solid #eee;font-weight:400;margin:0;padding:.4rem;text-align:left;vertical-align:top}table tbody tr:nth-child(2n){background:#f7f7f7}html{font-size:100%}body,button,input,select,textarea{color:#32373c;font-family:Open Sans,sans-serif;font-size:100%;line-height:1.5}@media screen and (min-width:737px){html{font-size:1.125rem}}.custom-select{display:inline-block;box-sizing:border-box;padding:.5rem 2rem .5rem .8rem;width:auto;font-size:1em;line-height:1.3;border:1px solid #6c7782;box-shadow:none;border-radius:.5em;-moz-appearance:none;-webkit-appearance:none;appearance:none;background-color:transparent;background-image:url('data:image/svg+xml;charset=US-ASCII,%3Csvg width="14" height="8" xmlns="http://www.w3.org/2000/svg"%3E%3Cpath d="M2 0L7 5L12 0L14 1L7 8L0 1L2 0Z" fill="%23555D66"/%3E%3C/svg%3E%0A');background-repeat:no-repeat;background-position:right .7em top 50%;background-size:.65em auto}.custom-select::-ms-expand{display:none}.custom-select:focus{box-shadow:0 0 1px 3px rgba(59,153,252,.7);box-shadow:0 0 0 3px -moz-mac-focusring;color:#222;outline:none}.custom-select option{font-weight:400}html{font-size:1rem}@media screen and (min-width:737px){html{font-size:1rem}}.screen-reader-text{clip:rect(1px,1px,1px,1px);height:1px;overflow:hidden;position:absolute!important;width:1px}.screen-reader-text:focus{background-color:#f1f1f1;border-radius:3px;box-shadow:0 0 2px 2px rgba(0,0,0,.6);clip:auto!important;color:#21759b;display:block;font-size:.875rem;font-weight:700;height:auto;left:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}.site-content[tabindex="-1"]:focus{outline:0}.no-js .hide-if-no-js{display:none}.alignleft{display:inline;float:left;margin-right:1.5em}.alignright{display:inline;float:right;margin-left:1.5em}.aligncenter{clear:both;display:block;margin-left:auto;margin-right:auto}@media screen and (max-width:480px){.alignleft,.alignright{display:block;float:none;margin-left:auto;margin-right:auto}}.button,.button-primary,.button-secondary,.plugin-upload-form .button-primary{border:1px solid;border-radius:3px;box-sizing:border-box;cursor:pointer;display:inline-block;font-size:.8rem;height:1.5625rem;line-height:1;margin:0;padding:0 .8rem;text-decoration:none;white-space:nowrap;-webkit-appearance:none}button::-moz-focus-inner,input[type=button]::-moz-focus-inner,input[type=reset]::-moz-focus-inner,input[type=submit]::-moz-focus-inner{border:0;padding:0}.button-group.button-xl .button,.button.button-xl{font-size:1rem;height:2.44140625rem;line-height:1;padding:0 1.5rem}.button-group.button-large .button,.button.button-large{height:1.953125rem;line-height:1;padding:0 1rem}.button-group.button-small .button,.button.button-small{font-size:.64rem;height:1.25rem;line-height:1;padding:0 .5rem}a.button,a.button-primary,a.button-secondary{line-height:1.5625rem}.button-group.button-large a.button,a.button.button-large{line-height:1.953125rem}.button-group.button-xl a.button,a.button.button-xl{line-height:2.44140625rem}.button-group.button-small a.button,a.button.button-small{line-height:1.25rem}.button:active,.button:focus{outline:none}.button.hidden{display:none}input[type=reset],input[type=reset]:active,input[type=reset]:focus,input[type=reset]:hover{background:none;border:none;box-shadow:none;padding:0 2px 1px;width:auto}.button,.button-secondary,.button:visited{background:#f7f7f7;border-color:#ccc;box-shadow:0 1px 0 #ccc;color:#555;vertical-align:top}p .button{vertical-align:baseline}.button-secondary:focus,.button-secondary:hover,.button.focus,.button.hover,.button:focus,.button:hover{background:#fafafa;border-color:#999;color:#23282d}.button-link:focus,.button-secondary:focus,.button.focus,.button:focus{border-color:#5b9dd9;box-shadow:0 0 3px rgba(0,115,170,.8)}.button-secondary:active,.button.active,.button.active:hover,.button:active{background:#eee;border-color:#999;box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);transform:translateY(1px)}.button.active:focus{border-color:#5b9dd9;box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5),0 0 3px rgba(0,115,170,.8)}.button-disabled,.button-secondary.disabled,.button-secondary:disabled,.button-secondary[disabled],.button.disabled,.button:disabled,.button[disabled]{background:#f7f7f7!important;border-color:#ddd!important;box-shadow:none!important;color:#a0a5aa!important;cursor:default;text-shadow:0 1px 0 #fff!important;transform:none!important}.button-link,input[type=submit].button-link{background:none;border:0;border-radius:0;box-shadow:none;cursor:pointer;margin:0;outline:none;padding:0}.button-link:focus{outline:1px solid #5b9dd9}.button-primary,.download-button,.plugin-upload-form .button-primary{text-decoration:none;text-shadow:0 -1px 1px #006799,1px 0 1px #006799,0 1px 1px #006799,-1px 0 1px #006799}.button-primary,.button-primary:visited,.download-button,.download-button:visited,.plugin-upload-form .button-primary,.plugin-upload-form .button-primary:visited{background:#0085ba;border-color:#0073aa #006799 #006799;box-shadow:0 1px 0 #006799;color:#fff}.button-primary.focus,.button-primary.hover,.button-primary:focus,.button-primary:hover,.download-button.focus,.download-button.hover,.download-button:focus,.download-button:hover,.plugin-upload-form .button-primary.focus,.plugin-upload-form .button-primary.hover,.plugin-upload-form .button-primary:focus,.plugin-upload-form .button-primary:hover{background:#008ec2;border-color:#006799;box-shadow:0 1px 0 #006799;color:#fff}.button-primary.focus,.button-primary:focus,.download-button.focus,.download-button:focus,.plugin-upload-form .button-primary.focus,.plugin-upload-form .button-primary:focus{box-shadow:0 1px 0 #0073aa,0 0 2px 1px #33b3db}.button-primary.active,.button-primary.active:focus,.button-primary.active:hover,.button-primary:active,.download-button.active,.download-button.active:focus,.download-button.active:hover,.download-button:active,.plugin-upload-form .button-primary.active,.plugin-upload-form .button-primary.active:focus,.plugin-upload-form .button-primary.active:hover,.plugin-upload-form .button-primary:active{background:#0073aa;border-color:#006799;box-shadow:inset 0 2px 0 #006799;vertical-align:top}.button-primary.disabled,.button-primary:disabled,.button-primary[disabled],.download-button.disabled,.download-button:disabled,.download-button[disabled],.plugin-upload-form .button-primary.disabled,.plugin-upload-form .button-primary:disabled,.plugin-upload-form .button-primary[disabled]{background:#008ec2!important;border-color:#007cb2!important;box-shadow:none!important;color:#66c6e4!important;cursor:default;text-shadow:0 -1px 0 rgba(0,0,0,.1)!important}.button-primary.button.button-hero,.download-button.button.button-hero,.plugin-upload-form .button-primary.button.button-hero{box-shadow:0 2px 0 #006799}.button-primary.button.button-hero.active,.button-primary.button.button-hero.active:focus,.button-primary.button.button-hero.active:hover,.button-primary.button.button-hero:active,.download-button.button.button-hero.active,.download-button.button.button-hero.active:focus,.download-button.button.button-hero.active:hover,.download-button.button.button-hero:active,.plugin-upload-form .button-primary.button.button-hero.active,.plugin-upload-form .button-primary.button.button-hero.active:focus,.plugin-upload-form .button-primary.button.button-hero.active:hover,.plugin-upload-form .button-primary.button.button-hero:active{box-shadow:inset 0 3px 0 #006799}.button-primary-disabled{background:#008ec2!important;border-color:#007cb2!important;box-shadow:none!important;color:#66c6e4!important;cursor:default;text-shadow:0 -1px 0 rgba(0,0,0,.1)!important}.button-group{display:inline-block;font-size:0;position:relative;vertical-align:middle;white-space:nowrap}.button-group>.button{border-radius:0;display:inline-block;margin-right:-1px;z-index:10}.button-group>.button-primary{z-index:100}.button-group>.button:hover{z-index:20}.button-group>.button:first-child{border-radius:3px 0 0 3px}.button-group>.button:last-child{border-radius:0 3px 3px 0}.button-group>.button:focus{position:relative;z-index:1}@media screen and (max-width:737px){.button,.button.button-large,.button.button-small,.plugin-upload-form .button-primary{font-size:14px;height:auto;line-height:normal;margin-bottom:4px;padding:6px 14px;vertical-align:middle}}.clear:after,.clear:before,.comment-content:after,.comment-content:before,.entry-content:after,.entry-content:before,.home-below:after,.home-below:before,.site-content:after,.site-content:before,.site-footer:after,.site-footer:before,.site-header:after,.site-header:before{content:"";display:table;table-layout:fixed}.clear:after,.comment-content:after,.entry-content:after,.home-below:after,.site-content:after,.site-footer:after,.site-header:after{clear:both}p.subheading{color:#82878c;font-weight:300;margin:-.4rem auto 2rem;text-align:center}p.intro,p.subheading{font-size:1.25rem}p.aside{font-size:.8rem}p.note{font-size:.64rem;letter-spacing:.01rem;max-width:18.1898940355rem}input,textarea{box-sizing:border-box}input[type=checkbox],input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=radio],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select,textarea{background-color:#fff;border:1px solid #ddd;box-shadow:inset 0 1px 2px rgba(0,0,0,.07);color:#32373c;outline:none;transition:border-color .05s ease-in-out}input[type=checkbox]:focus,input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=radio]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus,select:focus,textarea:focus{border-color:#5b9dd9;box-shadow:0 0 2px rgba(30,140,190,.8)}input[type=email],input[type=url]{direction:ltr}input[type=number]{height:28px;line-height:inherit}input[type=checkbox],input[type=radio]{background:#fff;border:1px solid #b4b9be;box-shadow:inset 0 1px 2px rgba(0,0,0,.1);clear:none;color:#555;cursor:pointer;display:inline-block;height:16px;line-height:0;margin:-4px 4px 0 0;min-width:16px;outline:0;padding:0!important;text-align:center;transition:border-color .05s ease-in-out;vertical-align:middle;width:16px;-webkit-appearance:none}input[type=checkbox]:checked:before,input[type=radio]:checked:before{display:inline-block;float:left;font:normal 21px/1 dashicons;vertical-align:middle;width:16px;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}input[type=checkbox].disabled,input[type=checkbox].disabled:checked:before,input[type=checkbox]:disabled,input[type=checkbox]:disabled:checked:before,input[type=radio].disabled,input[type=radio].disabled:checked:before,input[type=radio]:disabled,input[type=radio]:disabled:checked:before{opacity:.7}input[type=checkbox]:checked:before{color:#1e8cbe;content:"";margin:-3px 0 0 -4px}input[type=radio]{border-radius:50%;line-height:10px;margin-right:4px}input[type=radio]:checked+label:before{color:#82878c}input[type=radio]:checked:before{background-color:#1e8cbe;border-radius:50px;content:"•";font-size:24px;height:6px;line-height:16px;margin:4px;text-indent:-9999px;width:6px}input[type=reset]:active,input[type=reset]:hover{color:#00a0d2}input[type=search]{-webkit-appearance:textfield}input[type=search]::-webkit-search-decoration{display:none}button,input,select,textarea{font-family:inherit;font-size:inherit;font-weight:inherit}input,select,textarea{border-radius:0;font-size:14px;padding:3px 5px}textarea{line-height:1.4;overflow:auto;padding:2px 6px;resize:vertical}textarea.code{line-height:1.4;padding:4px 6px 1px}label{cursor:pointer;vertical-align:middle}input,select{margin:1px;padding:3px 5px}input.code{padding-top:6px}input.readonly,input[readonly],textarea.readonly,textarea[readonly]{background-color:#eee}.wp-core-ui :-moz-placeholder,:-moz-placeholder{color:#a9a9a9}input.disabled,input:disabled,select.disabled,select:disabled,textarea.disabled,textarea:disabled{background:hsla(0,0%,100%,.5);border-color:hsla(0,0%,87.1%,.75);box-shadow:inset 0 1px 2px rgba(0,0,0,.04);color:rgba(51,51,51,.5)}input[type=file].disabled,input[type=file]:disabled,input[type=range].disabled,input[type=range]:disabled{background:none;box-shadow:none}input.large-text,textarea.large-text{width:99%}input.regular-text{width:25em}input.small-text{padding:1px 6px;width:50px}input[type=number].small-text{width:65px}input.tiny-text{width:35px}input[type=number].tiny-text{width:45px}@media screen and (max-width:782px){textarea{-webkit-appearance:none}input[type=email],input[type=number],input[type=password],input[type=search],input[type=text]{-webkit-appearance:none;padding:6px 10px}input[type=number]{height:40px}input.code{padding-bottom:5px;padding-top:10px}input[type=checkbox]{-webkit-appearance:none;padding:10px}input[type=checkbox]:checked:before{font:normal 30px/1 dashicons;margin:-3px -5px}input[type=checkbox],input[type=radio]{height:25px;width:25px}input[type=radio]:checked:before{vertical-align:middle;width:9px;height:9px;margin:7px;line-height:16px}input,textarea{font-size:16px}input[type=number].small-text,input[type=password].small-text,input[type=search].small-text,input[type=text].small-text{width:auto;max-width:55px;display:inline;padding:3px 6px;margin:0 3px}input.regular-text{width:100%}label{font-size:14px}fieldset label{display:block}}a.button:active,a.button:focus,a.button:hover{text-decoration:none}.notice{background:#fff;border-left:4px solid #fff;box-shadow:0 1px 1px 0 rgba(0,0,0,.1);margin:1em 0;padding:1px 12px}.notice p{font-size:.8rem;margin:.5em 0;padding:2px}.notice.notice-alt{box-shadow:none}.notice.notice-large{padding:10px 20px}.notice.notice-success{border-left-color:#46b450}.notice.notice-success.notice-alt{background-color:#ecf7ed}.notice.notice-warning{border-left-color:#ffb900}.notice.notice-warning.notice-alt{background-color:#fff8e5}.notice.notice-error{border-left-color:#dc3232}.notice.notice-error.notice-alt{background-color:#fbeaea}.notice.notice-info{border-left-color:#00a0d2}.notice.notice-info.notice-alt{background-color:#e5f5fa}.error-404 .page-content,.error-404 .page-title{text-align:center}.error-404 .page-content .logo-swing{height:10rem;margin:6rem auto;position:relative;text-align:center;width:10rem}.error-404 .page-content .logo-swing .wp-logo{left:0;max-width:none;position:absolute;top:0;width:10rem}@keyframes hinge{10%{width:180px;height:180px;transform:rotate(0deg)}15%{width:185px;height:185px;transform:rotate(0deg)}20%{width:180px;height:180px;transform:rotate(5deg)}40%{transform-origin:top left;animation-timing-function:ease-in-out}60%{transform:rotate(40deg);transform-origin:top left;animation-timing-function:ease-in-out}40%,80%{transform:rotate(60deg);transform-origin:top left;animation-timing-function:ease-in-out;opacity:1}to{transform:translate3d(0,700px,0);opacity:0}}.hinge{animation-duration:2s;animation-name:hinge}.comments-area{margin-top:5em}.comments-area>:last-child{margin-bottom:0}.comments-area .comment-list+.comment-respond{border-top:1px solid #eaeaea}.comments-area .comment-list+.comment-respond,.comments-area .comment-navigation+.comment-respond{padding-top:1.6em}.comments-area .comments-title{margin-bottom:1.3333em}.comments-area .comment-list{list-style:none;margin:0}.comments-area .comment-list .pingback,.comments-area .comment-list .trackback,.comments-area .comment-list article{border-top:1px solid #eaeaea;padding:1.6em 0}.comments-area .comment-list article:not(:only-child){padding-bottom:0}.comments-area .comment-list article+.comment-respond{padding-bottom:1.6em}.comments-area .comment-list .children{list-style:none;margin:0}.comments-area .comment-list .children>li{padding-left:.8em}.comments-area .comment-list .alt{background:none}.comments-area .comment-author{color:#999;margin-bottom:.4em}.comments-area .comment-author .avatar{float:left;height:24px;margin-right:.8em;width:24px}.comments-area .comment-metadata,.comments-area .pingback .edit-link{color:#999;line-height:1.5}.comments-area .comment-metadata a,.comments-area .pingback .edit-link a{color:#777}.comments-area .comment-metadata{font-size:.8rem;margin-bottom:1.6em}.comments-area .comment-metadata .edit-link,.comments-area .pingback .edit-link{margin-left:1em}.comments-area .pingback .edit-link:before{top:5px}.comments-area .comment-content ol,.comments-area .comment-content ul{margin:0 0 1.6em 1.3333em}.comments-area .comment-content>:last-child,.comments-area .comment-content li>ol,.comments-area .comment-content li>ul{margin-bottom:0}.comments-area .comment-content .reply{font-size:12px}.comments-area .comment-content .reply a{border:1px solid #eaeaea;color:#707070;display:inline-block;font-weight:700;line-height:1;margin-top:2em;padding:.4167em .8333em;text-transform:uppercase}.comments-area .comment-content .reply a:focus,.comments-area .comment-content .reply a:hover{border-color:#333;color:#333;outline:0}.comments-area .comment-reply-title a{font-weight:inherit}.comments-area .comment-form label{font-size:.8rem;font-weight:700;display:block;letter-spacing:.04em;line-height:1.5}.comments-area .comment-form input[type=email],.comments-area .comment-form input[type=text],.comments-area .comment-form input[type=url],.comments-area .comment-form textarea{width:100%}.comments-area .comment-awaiting-moderation,.comments-area .comment-notes,.comments-area .form-allowed-tags,.comments-area .logged-in-as{font-size:1rem;line-height:1.5;margin-bottom:2em}.comments-area .no-comments{border-top:1px solid #eaeaea;color:#999;font-weight:700;padding-top:1.6em}.comments-area .comment-navigation+.no-comments{border-top:0}.comments-area .form-allowed-tags code{font-family:Inconsolata,monospace}.comments-area .form-submit{margin-bottom:0}.comments-area .required{color:#c0392b}.entry-content{hyphens:auto;word-wrap:break-word}.entry-content>p:first-child{margin-top:0}.entry-content [class*=col-]~h1,.entry-content [class*=col-]~h2,.entry-content [class*=col-]~h3,.entry-content [class*=col-]~h4,.entry-content [class*=col-]~h5,.entry-content [class*=col-]~h6{clear:none}.entry-header{position:relative}.entry-header .sticky-post{color:#999;font-size:.8rem;font-style:italic;position:absolute;top:-.8rem}.entry-meta{color:#999;font-size:.8rem;margin-bottom:1rem}.entry-meta a{color:#777}.entry-meta>span{margin-right:1rem}.entry-meta>span :last-of-type{margin:0}.entry-meta .byline,.entry-meta .updated:not(.published),.sticky .entry-meta .posted-on{display:none}.group-blog .entry-meta .byline,.single .entry-meta .byline{display:inline}.entry-summary{hyphens:auto;word-wrap:break-word}body:not(.single):not(.search) .site-main .post{margin-bottom:3.0517578125rem;max-width:40em}.gallery{margin-bottom:1.5rem}.gallery .gallery-item{display:inline-block;margin:0;text-align:center;vertical-align:top;width:100%}.gallery.gallery-columns-2 .gallery-item{max-width:50%}.gallery.gallery-columns-3 .gallery-item{max-width:33.33%}.gallery.gallery-columns-4 .gallery-item{max-width:25%}.gallery.gallery-columns-5 .gallery-item{max-width:20%}.gallery.gallery-columns-6 .gallery-item{max-width:16.66%}.gallery.gallery-columns-7 .gallery-item{max-width:14.28%}.gallery.gallery-columns-8 .gallery-item{max-width:12.5%}.gallery.gallery-columns-9 .gallery-item{max-width:11.11%}.gallery .gallery-caption{display:block}.main-navigation{background:#0073aa;clear:both;left:0;position:absolute;top:60px;width:100%}.main-navigation ul{display:none;list-style:none;margin:0;padding-left:0}.main-navigation ul ul{box-shadow:0 3px 3px rgba(0,0,0,.2);float:left;left:-999em;position:absolute;top:1.5em;z-index:99999}.main-navigation ul ul ul{left:-999em;top:0}.main-navigation ul ul li.focus>ul,.main-navigation ul ul li:hover>ul{left:100%}.main-navigation ul ul a{width:200px}.main-navigation ul li.focus>ul,.main-navigation ul li:hover>ul{left:auto}.main-navigation li{border-top:1px solid hsla(0,0%,100%,.2);padding:1rem}.main-navigation a{color:hsla(0,0%,100%,.8);display:block;font-size:.8rem;text-decoration:none}.main-navigation a.active,.main-navigation a:hover{color:#fff}@media screen and (min-width:737px){.main-navigation a.active{border-bottom:1px solid}}.main-navigation.toggled{z-index:1}.main-navigation.toggled ul{display:block}.menu-toggle{background:transparent;border:none;color:#fff;height:3.5rem;position:absolute;right:1rem;top:-58px;width:3.5rem}.toggled .menu-toggle:before{content:""}@media screen and (min-width:737px){.menu-toggle{display:none}.main-navigation{float:right;position:static;width:auto}.main-navigation.toggled{padding:1px 0}.main-navigation ul{display:inline-block;font-size:0}.main-navigation ul li{border:0;display:inline-block;font-size:1rem;margin-right:1rem;padding:0}.main-navigation ul li:last-of-type{margin-right:0}}.comment-content .wp-smiley,.entry-content .wp-smiley,.page-content .wp-smiley{border:none;margin-bottom:0;margin-top:0;padding:0}embed,iframe,object{max-width:100%}body.page .gutters .col-12{width:100%}body.page .entry-header{background:#0073aa;padding:1rem 0}body.page .entry-header .entry-title{color:#fff;font-size:1.5625rem;font-weight:300;line-height:1;margin:0 auto;padding:0 1.5625rem}body.page .entry-header.home{padding:1.5625rem 1.143rem;text-align:center}@media screen and (min-width:737px){body.page .site-header+.site-main .entry-title{padding:initial}}body.page .entry-content,body.page .entry-footer{margin:0 auto;max-width:960px;padding:3.0517578125rem 1.5625rem}.post-navigation{margin:5em auto;padding:0}.post-navigation a{border-bottom:1px solid #eaeaea;color:#444;display:block;font-weight:600;padding:11px 0 12px;text-transform:none;width:100%}.post-navigation a:hover{color:#21759b}.post-navigation .nav-links{border-top:1px solid #eaeaea;hyphens:auto;word-wrap:break-word}.post-navigation .meta-nav{color:#777;display:block;font-size:13px;line-height:2;text-transform:uppercase}.post-navigation .nav-next{text-align:right}.pagination .nav-links{text-align:center}.pagination .nav-links .page-numbers{background-color:#f9f9f9;cursor:hand;display:inline-block;min-width:2em;padding:8px}.pagination .nav-links .page-numbers.dots,.pagination .nav-links .page-numbers.next,.pagination .nav-links .page-numbers.prev{background:none;font-size:.9em;width:auto}.pagination .nav-links .page-numbers.dots{cursor:inherit}@media screen and (max-width:737px){.pagination .nav-links .page-numbers.next,.pagination .nav-links .page-numbers.prev{font-size:0;min-width:0;padding:0}.pagination .nav-links .page-numbers.next:after,.pagination .nav-links .page-numbers.prev:before{background-color:#f9f9f9;display:inline-block;font-size:1rem;line-height:1.5;min-width:2em;padding:8px}.pagination .nav-links .page-numbers.prev:before{content:"‹"}.pagination .nav-links .page-numbers.next:after{content:"›"}}.pagination .nav-links span.page-numbers{background-color:#f7f7f7;font-weight:700}.search-form .search-field{line-height:normal;margin:0;padding:4px 5px;vertical-align:text-bottom}body.search .gutters .col-12{width:100%}body.search .site-main{margin:0 auto;max-width:960px;padding:0 1.5625rem 3.0517578125rem}.site-content{max-width:960px;padding:0 1.5625rem}@media screen and (min-width:737px){.site-content{padding:0 10px 3.0517578125rem}}@media screen and (max-width:737px){.site-content .site-main{float:none;margin:0;width:auto}}.home .site-content,.page .site-content,.site-content.page{margin:auto;max-width:none;padding:0}.site-content .page-title{font-size:1.25rem;font-weight:400}.site-content .no-results{margin:0 auto 3.0517578125rem;max-width:40em;padding:0 2rem}.site-description{color:hsla(0,0%,100%,.8);font-size:1.25rem;font-weight:300;margin:-.4rem auto 2rem;text-align:center}.site-header{background:#0073aa;padding:1rem 0;position:relative}.site-header .site-branding{margin:0 auto;max-width:960px;padding:0 1.5625rem}@media screen and (min-width:737px){.site-header .site-branding{padding:0 10px}}.site-header.home{padding:1.5625rem 1.143rem;text-align:center}.site-title{display:inline-block;font-size:1.5625rem;font-weight:300;line-height:1;margin:0 2rem 0 0;max-width:none}.site-title a{color:#fff;font-weight:300}.site-title a:active,.site-title a:focus,.site-title a:hover{text-decoration:none}.site-header.home .site-title{display:inherit;font-size:3.8146972656rem;margin:2rem 0 1rem}.widget-area{font-size:.8rem}@media screen and (min-width:480px) and (max-width:768px){.widget-area{display:flex}.widget-area .widget{width:48%}}#wporg-footer{background-color:#f7f7f7;border-top:1px solid #dfdfdf;padding:22px 14px 65px}#wporg-footer,#wporg-footer .wrapper{clear:both;margin:0 auto;overflow:auto}#wporg-footer .wrapper{max-width:930px}#wporg-footer ul{float:left;margin-bottom:20px;margin-left:24px;overflow:auto;padding-left:0;width:135px}@media screen and (min-width:960px){#wporg-footer ul:first-child{margin-left:0}}#wporg-footer ul li{color:#bbb;font-size:14px;list-style-type:none;margin-bottom:1px}#wporg-footer ul li a{text-decoration:none;text-decoration-skip-ink:none}#wporg-footer ul li a:hover{color:#0073aa;text-decoration:underline}#wporg-footer .cip{clear:both;color:#ccc;float:none;font-size:.8rem;letter-spacing:.3em;margin:35px auto 0;text-align:center;text-transform:uppercase}#wporg-footer .cip.cip-image{background:url(//s.w.org/style/images/codeispoetry.png?1=) 50% no-repeat;background-size:190px 15px;height:15px;text-indent:-9999px;width:190px}@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (min-resolution:1.5dppx),only screen and (min-resolution:144dpi){#wporg-footer .cip.cip-image{background-image:url(//s.w.org/style/images/codeispoetry-2x.png?1=)}}@media screen and (min-width:561px) and (max-width:959px){#wporg-footer .wrapper{max-width:600px}#wporg-footer ul{margin-left:2%;width:32%}#wporg-footer ul:nth-child(3n+1){margin-left:0}#wporg-footer ul:nth-child(4n){clear:both}}@media screen and (max-width:560px){#wporg-footer .wrapper{max-width:360px}#wporg-footer ul{margin-left:4%;width:48%}#wporg-footer ul:nth-child(odd){margin-left:0;clear:both}}#wporg-header{background:#23282d;height:140px;position:relative;text-align:center;width:100%}#wporg-header .wrapper{margin:0 auto;max-width:960px}#wporg-header h1{display:inline-block;margin:auto;width:303px}#wporg-header h1 a{background:url(//s.w.org/style/images/wporg-logo.svg?3=) 0 no-repeat;background-size:290px 46px;display:block;height:88px;text-indent:-9999px}#wporg-header h2.rosetta{clear:none;color:#dfdfdf;font-family:Georgia,Times New Roman,serif;font-size:30px;margin:0 0 0 60px}#wporg-header h2.rosetta a{border-bottom:none;color:#dfdfdf;display:block;height:52px;line-height:22px;padding:0}#wporg-header h2.rosetta a:hover{text-decoration:none}#wporg-header #wporg-header-menu{background:#23282d;left:-75%;list-style:none;margin:0;max-width:75%;min-width:200px;position:absolute;text-align:left;top:100%;transition:left .3s;z-index:100000}#wporg-header #wporg-header-menu.toggled{left:0}#wporg-header ul li{list-style-type:none;position:relative}#wporg-header ul li a{color:#eee;display:block;font-family:Open Sans,Helvetica,Arial,Liberation Sans,sans-serif;font-size:13px;font-weight:600;height:34px;line-height:34px;margin:0 4px;padding:10px 30px;text-decoration:none}#wporg-header ul li a.subcurrent{font-weight:700}@media (max-width:768px){#wporg-header ul li a{height:auto}}#wporg-header ul li.current-menu-item a,#wporg-header ul li.current_page_parent a,#wporg-header ul li a.current,#wporg-header ul li a:hover{color:#00a0d2}#wporg-header ul li#download,#wporg-header ul li.download{float:right;height:34px;margin-right:14px;overflow:hidden;padding:0 0 34px}@media screen and (max-width:767px){#wporg-header ul li#download,#wporg-header ul li.download{display:block;float:none;margin:10px 20px 20px;padding-bottom:0;height:auto}#wporg-header ul li#download a,#wporg-header ul li.download a{padding:4px 10px;text-align:center}}#wporg-header ul li#download a,#wporg-header ul li.download a{margin:0;padding:0 16px}#wporg-header ul li#download a:hover,#wporg-header ul li.download a:hover{color:#eee}#wporg-header ul li#download.current,#wporg-header ul li#download.current-menu-item,#wporg-header ul li#download .uparrow,#wporg-header ul li.download.current,#wporg-header ul li.download.current-menu-item,#wporg-header ul li.download .uparrow{display:none}#wporg-header ul li .nav-submenu{clip:rect(1px,1px,1px,1px);height:1px;left:-2px;margin:0;overflow:hidden;padding:0;position:absolute;width:1px;z-index:99999}#wporg-header ul li .nav-submenu li a{display:inline-block;height:24px;line-height:24px;margin:0;white-space:nowrap}@media screen and (min-width:768px){#wporg-header #head-search{float:right;margin-right:14px;padding-top:30px}}#wporg-header #head-search form{border-bottom:1px solid #3f3f3f;display:inline-block;margin-left:60px;width:288px}#wporg-header #head-search form input.text{background:#191e23;border:0;border-radius:0;box-sizing:content-box;color:#b4b9be;float:left;font-family:Open Sans,sans-serif;font-size:12px;height:24px;margin:0;outline:none;padding:3px;vertical-align:top;width:256px}#wporg-header #head-search form input.text::-moz-placeholder{color:#eee}@media screen and (max-width:480px){#wporg-header #head-search form input.text{width:216px}}#wporg-header #head-search form .button{background:#191e23 url(//s.w.org/wp-includes/images/admin-bar-sprite.png?d=20120831) no-repeat 2px 5px;border:none;border-radius:0;box-shadow:none;float:left;height:30px;margin:0;padding:0;text-shadow:none!important;width:26px}@media screen and (max-width:480px){#wporg-header #head-search form{width:248px}}@media screen and (min-width:480px){#wporg-header #head-search form{margin-left:0}}@media screen and (min-width:768px){#wporg-header{height:120px;text-align:inherit}#wporg-header h1{float:left;padding-left:10px}#wporg-header h2.rosetta{float:left;margin-left:0;padding:36px 27px 0}#wporg-header #headline h2{text-rendering:optimizeLegibility}#wporg-header #wporg-header-menu{float:left;height:46px;list-style:none;margin:-15px 0 0;max-width:inherit;min-width:0;padding:0;position:static;width:100%}#wporg-header ul li{float:left;position:relative}#wporg-header ul li a{height:46px;padding:0 6px}#wporg-header ul li a.current~.uparrow{border-bottom:9px solid #f7f7f7;border-left:9px solid transparent;border-right:9px solid transparent;height:0;margin:-8px auto 0;width:0}#wporg-header ul li.current-menu-item:after,#wporg-header ul li.current_page_parent:after{border-bottom:9px solid #f7f7f7;border-left:9px solid transparent;border-right:9px solid transparent;content:"";height:0;left:50%;margin:-8px 0 0 -9px;position:absolute;width:0}#wporg-header ul li .nav-submenu:hover~.uparrow,#wporg-header ul li:hover .nav-submenu~.uparrow{border-bottom:9px solid #32373c;border-left:9px solid transparent;border-right:9px solid transparent;height:0;margin:-10px auto 0;width:0}#wporg-header ul li .nav-submenu{background:#32373c;border:1px solid #32373c;border-top:0;margin-top:-1px;min-width:0}#wporg-header ul li .nav-submenu li{float:none}#wporg-header ul li .nav-submenu li a{height:34px;line-height:34px}#wporg-header .nav-menu .focus>ul,#wporg-header .nav-menu ul li:hover>ul,#wporg-header ul.nav-menu .focus>ul,#wporg-header ul.nav-menu li:hover>ul{clip:inherit;height:inherit;overflow:inherit;width:inherit}#wporg-header ul li.current-menu-item:after,#wporg-header ul li.current_page_parent:after,#wporg-header ul li a.current~.uparrow{border-bottom-color:#0073aa}}.page-download #wporg-header #download,.page-parent-download #wporg-header #download{display:none}#mobile-menu-button{background:none;border:none;box-shadow:none;display:block;float:left;font-family:dashicons;font-size:16px;font-style:normal;font-weight:400;left:10px;line-height:1;padding:1px;position:absolute;text-align:center;text-decoration:inherit;text-shadow:none;top:75px;transition:color .1s ease-in;vertical-align:top;-webkit-font-smoothing:antialiased}#mobile-menu-button:before{border:none;box-sizing:border-box;color:#888;content:"";display:inline-block;float:left;font:normal 50px/1 Dashicons;margin:0;outline:none;padding:3px;text-decoration:none;vertical-align:middle;-webkit-font-smoothing:antialiased}@media screen and (min-width:768px){#mobile-menu-button{display:none}}#download-mobile{background:#f7f7f7;border-bottom:1px solid #ddd}#download-mobile .wrapper{padding:20px 0;text-align:center}#download-mobile span.download-ready{font-size:1.6em;margin:0 .25em}#download-mobile a.download-button{font-size:1.6em;height:inherit;margin:10px .25em;padding:10px 15px}.category-context__bar{margin:0 1.5rem;background:#edeff0;border-radius:2px;font-size:.8125rem;overflow:auto;transition:all .1s ease-out;transition-delay:.1s}.category-context__bar>div{display:flex;align-items:center;justify-content:space-between}@media only screen and (min-width:782px){.category-context__bar{margin:0 1.5rem}}@media only screen and (min-width:960px){.category-context__bar{margin:0 auto;max-width:960px}}.category-context__bar ul{margin:0;padding:0;display:flex;justify-content:space-between}.category-context__bar ul li{list-style:none;font-size:.8125rem}.category-context__bar ul li a{display:block;padding:1.125rem .75rem;text-decoration:none}.category-context__bar ul li:last-child a{padding-right:1.5rem}.category-context__bar__copy{margin:0;padding:1.125rem 1.5rem;font-size:.8125rem;font-weight:400}.category-context__bar__title{margin:0;padding-right:1.5rem;color:#555d66;font-size:.75rem;font-weight:400;text-transform:uppercase}.category-context__bar__links{display:flex;align-items:center}@media only screen and (max-width:782px){.category-context__bar__links{display:none}}.category-context__bar--is-hidden{height:0;overflow:hidden}.category-menu{margin:0;padding:0;position:relative;background:linear-gradient(180deg,hsla(0,0%,100%,0) 94%,#0073aa 0);background-repeat:no-repeat;background-size:0;background-position-x:0;transition:all 75ms ease-out;min-height:45px}.category-menu li{display:inline-block;margin:0;list-style:none}.category-menu a{display:block;padding:.75rem;color:#40464d;font-size:.875rem;text-decoration:none}.category-menu a:active,.category-menu a:focus,.category-menu a:hover,li .category-menu--is-active{color:#000}.category-menu__mobile{padding:0!important;border-top:none!important}.category-menu__mobile ul{margin:0;padding:0;background:#23282d}.category-menu__mobile li{list-style:none;border-top:1px solid #32373c}.category-menu__mobile li a{display:block;padding:1rem 1.5rem;font-size:.875rem;text-decoration:none;color:#ccd0d4}.category-menu__mobile>.components-panel__body-title{margin:0!important}.category-menu__mobile>.components-panel__body-title>button{padding:1.5rem}.category-menu--is-loading{height:24px;position:relative}.category-menu--is-loading:after{content:"";position:absolute;background:#f3f4f5;border-radius:4px;width:80%;height:24px;left:0;top:calc(50% - 12px);transition:none}.category-search{display:flex;align-items:center;background:#fff;border:1px solid #6c7782;border-radius:2px}.category-search input[type=search]{flex-grow:1;margin:0;padding:.25rem .5rem;border:none;box-shadow:none;font-size:.8125rem}.category-search input[type=search]:focus{outline:1px auto #0073aa}.category-search__button{display:flex;background:transparent;border:none;color:#6c7782}.category-search__button:active{background:#d7dade}.category-search__button:focus{outline:1px auto #0073aa}.category-search--is-loading{display:block;height:24px;min-width:100%;background:#f3f4f5;border-radius:4px}@media only screen and (min-width:480px){.category-search--is-loading{width:224px!important;min-width:auto!important}}.pattern__copy-button{transition:all 75ms ease-in-out}.pattern__copy-button.is-small{font-size:.75rem;padding:.75rem;height:auto}.pattern__favorite-button{position:relative;font-size:.875rem;height:2.25rem;width:2.25rem;border-radius:2px;color:#606a74}.pattern__favorite-button svg{position:absolute;top:calc(50% - .75rem);left:calc(50% - .75rem);height:1.5rem;width:1.5rem;transition:all .15s ease-out}.pattern__favorite-button svg path{fill:#6c7782}.pattern__favorite-button .pattern__favorite-filled{opacity:0}.pattern__favorite-button:hover{color:#555d66;background:transparent}.pattern__favorite-button:hover svg path{fill:#555d66}.pattern__favorite-button:active{background:transparent;box-shadow:none;transform:none}.pattern__favorite-button.is-favorited{color:#555d66}.pattern__favorite-button.is-favorited svg path{fill:#d94f4f}.pattern__favorite-button.is-favorited .pattern__favorite-outline{opacity:0;transform:scale(2.8)}.pattern__favorite-button.is-favorited .pattern__favorite-filled{opacity:1}.pattern__favorite-button.is-favorited:hover .pattern__favorite-filled{animation:HeartBeat .9s infinite}@media (prefers-reduced-motion){.pattern__favorite-button.is-favorited:hover .pattern__favorite-filled{animation:none}}.pattern__favorite-button.has-label{padding:12px 18px 12px 38px;height:auto;width:auto}.pattern__favorite-button.has-label svg{top:calc(50% - 12px);left:9px}@keyframes HeartBeat{0%{transform:scale(1)}25%{transform:scale(1.2)}40%{transform:scale(1)}60%{transform:scale(1.2)}to{transform:scale(1)}}.main-navigation{float:none;position:static;width:auto}.main-navigation a{font-size:.8125rem}.main-navigation.toggled div.menu{position:absolute;top:57px;right:0;width:100%;background:#0073aa}.menu-toggle{position:static;height:auto;width:auto;font-size:1.5625rem;overflow:hidden;-webkit-appearance:none}body.page .entry-header{background:none;padding:0}body.page .entry-header .entry-title{color:inherit;margin:2rem auto 1rem;max-width:960px}@media screen and (min-width:737px){body.page .entry-header .entry-title{padding:0 10px}}.pattern-grid-menu{margin:0 auto;max-width:960px;display:flex;flex-direction:column;justify-content:space-between;align-items:center}.pattern-grid-menu>:first-child,.pattern-grid-menu>:last-child{width:100%}.pattern-grid-menu>:last-child{margin:1.5rem;width:calc(100% - 3rem)}@media only screen and (min-width:782px){.pattern-grid-menu{margin:1.5rem;flex-direction:row}.pattern-grid-menu>:last-child{margin:0;width:auto}}@media only screen and (min-width:960px){.pattern-grid-menu{margin:1.5rem auto}}.pattern-grid{max-width:960px;margin:1.5rem}@media screen and (min-width:600px){.pattern-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:1.5rem}.pattern-grid>*{align-self:baseline}}@media screen and (min-width:960px){.pattern-grid{margin-left:auto;margin-right:auto}}.pattern-grid__pattern{position:relative;margin:0 0 1.5rem;border:1px solid #d7dade;border-radius:2px;transition:all 75ms ease-in-out}@media screen and (min-width:600px){.pattern-grid__pattern{display:inline-block;margin:0}}.pattern-grid__pattern .pattern-grid__preview{overflow:hidden}.pattern-grid__pattern .pattern-grid__actions{position:absolute;right:0;bottom:0;left:0;display:flex;align-items:center;padding:.375rem;background:hsla(0,0%,100%,.8);backdrop-filter:blur(3px);opacity:0;transform:translateY(6px);transition:all 75ms ease-in-out}.pattern-grid__pattern .pattern-grid__actions .pattern-grid__title{flex-grow:1;margin:0;padding:0 .375rem 0 .75rem;font-size:.75rem;pointer-events:none}.pattern-grid__pattern .pattern-grid__actions .pattern__copy-button,.pattern-grid__pattern .pattern-grid__actions .pattern__favorite-button{flex-shrink:0}.pattern-grid__pattern .pattern-grid__actions .button+.button{margin-left:.375rem}.pattern-grid__pattern:focus-within .pattern-grid__actions,.pattern-grid__pattern:hover .pattern-grid__actions{opacity:1;transform:translateY(0)}.pattern-preview__container{padding:2rem 0 0;background:#f3f4f5}.pattern-preview__viewport{position:relative;margin:0 auto;padding:0 20px;max-width:100vw;min-width:320px}.pattern-preview__viewport .pattern-preview__viewport-iframe{background:#fff;border:1px solid #e8eaeb;vertical-align:middle;max-width:100vw}.pattern-preview__viewport:focus-within .pattern-preview__resize-help{clip:auto;clip-path:none;height:auto;margin:initial;overflow:initial;width:auto;bottom:-1rem;left:20px;right:20px;padding:8px 16px;background:#fff;border-radius:2px;border:1px solid #d7dade;text-align:center}.pattern-preview__drag-handle{position:absolute;top:0;bottom:0;width:20px}.pattern-preview__drag-handle.is-left{left:0}.pattern-preview__drag-handle.is-right{right:0}.pattern-preview__drag-handle-button{position:absolute;top:calc(50% - 50px);left:6px;padding:0;width:8px;height:100px;appearance:none;cursor:grab;outline:none;background:#7e8993;border-radius:99999px;border:none}.pattern-preview__drag-handle-button:hover{background:#6c7782}.pattern-preview__drag-handle-button:active{cursor:grabbing;background:#606a74}.pattern-preview__drag-handle-button:focus{box-shadow:0 1px 0 #0073aa,0 0 2px 1px #33b3db}body.single-wporg-pattern{box-sizing:border-box;font-size:14px;font-weight:400;line-height:1.2}body.single-wporg-pattern .site-content{margin:auto;max-width:none;padding:0}body.single-wporg-pattern .entry-header{max-width:960px;padding:1.5rem;margin-left:auto;margin-right:auto}@media only screen and (min-width:960px){body.single-wporg-pattern .entry-header{padding:1.5rem 0}}body.single-wporg-pattern .entry-header .entry-title{margin-top:0;line-height:1.2}body.single-wporg-pattern .pattern-actions{display:flex;align-items:stretch;flex-wrap:wrap}body.single-wporg-pattern .pattern-actions button+button{margin-left:2em}body.single-wporg-pattern .pattern-actions__notice{margin:1.5rem 0 0;height:auto;flex-basis:100%}body.single-wporg-pattern .pattern-actions__notice>*{display:flex;flex-direction:column;justify-content:space-between;align-items:flex-start;margin:0}body.single-wporg-pattern .pattern-actions__notice>* button{margin-top:.75rem}@media only screen and (min-width:600px){body.single-wporg-pattern .pattern-actions__notice>*{align-items:center;flex-direction:row}body.single-wporg-pattern .pattern-actions__notice>* button{margin-top:0}}body.single-wporg-pattern .pattern-actions__guide{max-width:384px;height:auto;max-height:none}body.single-wporg-pattern .pattern-actions__guide-content{padding:1.5rem;line-height:1.5}body.single-wporg-pattern .pattern-actions__guide-title{margin:0}body.single-wporg-pattern .pattern-actions__guide-shortcut{background:#edeff0;box-shadow:0 0 0 1px #ccd0d4;padding:1px;font-weight:600;min-width:20px;display:inline-block;text-align:center;border-radius:2px}body.single-wporg-pattern .entry-content{max-width:960px;margin-left:auto;margin-right:auto}body.single-wporg-pattern .pattern__meta{padding:2rem 0;background:#f3f4f5}body.single-wporg-pattern .pattern__meta>div{max-width:960px;margin-left:auto;margin-right:auto;display:flex;justify-content:space-between}body.single-wporg-pattern .pattern__meta .pattern-preview__report{text-align:right}.site-header:not(.home) .search-form{display:flex;align-items:center}.site-header:not(.home) .search-form>input{flex:1;border:0;border-radius:2px 0 0 2px;display:inline-block;font-size:12px;padding:5px 10px;position:relative;width:auto;height:100%}.site-header:not(.home) .search-form button{margin:0;border-radius:0 2px 2px 0;padding:3px 12px;height:unset}.search-form--is-inline .search-form{display:flex;justify-content:space-between;background:#fff}.search-form--is-inline .search-form>label{flex:1}.search-form--is-inline .search-form input{padding:.5rem;background:transparent;border:none;box-shadow:none;width:100%;font-size:14px}@media only screen and (min-width:768px){.search-form--is-inline .search-form input{font-size:16px}}.search-form--is-inline .search-form button{background:transparent;margin-bottom:0;border:0;box-shadow:none;height:inherit;text-shadow:none;color:#32373c}.search-form--is-inline .search-form button:focus{-webkit-box-shadow:0 0 2px 1px #0073aa;box-shadow:0 0 2px 1px #0073aa}.search-form--is-centered .search-form{margin:0 auto}.search-form--is-constrained .search-form{max-width:36rem}.search-form--is-muted .search-form{border-color:#d7dade!important}.search-form--is-muted .search-form button,.search-form--is-muted .search-form input{background:#f8f9f9;color:#7e8993}.search-form--has-medium-text .search-form input{font-size:14px}.search-form--has-border .search-form{border:1px solid #7e8993}.section-heading_link,.section-heading_title{margin-bottom:0}.section-heading_title{font-weight:300}.section-heading_title .archive-title-prefix{display:block;font-size:1rem}.section-heading_link{text-decoration:underline;font-weight:600;margin-top:1.5rem!important}@media only screen and (min-width:768px){.section-heading_link{margin-top:0!important}}.section-heading_description{margin:1rem 0 0}.section-heading_description :last-child{margin-bottom:0}.section-heading--with-space{padding-bottom:16px}.site-content{margin:0 auto;max-width:none;padding:0}body.home .site-header{padding:3.75rem 1rem;text-align:left}body.home .site-branding{display:grid;grid-template-rows:auto 1fr;grid-template-columns:1fr 22rem}body.home .site-branding>*{align-self:center}@media screen and (max-width:736px){body.home .site-branding{display:block}}body.home .site-title.site-title{grid-column-start:1;grid-row-start:1;margin-top:0;text-align:left;font-size:3rem;line-height:1.25}body.home .site-description{grid-column-start:1;grid-row-start:2;margin:0;font-size:1.25rem;line-height:1.6;text-align:left;color:#fff}body.home .site-callout{grid-column-start:2;grid-row-start:1;grid-row-end:span 2;margin-left:4rem;padding:1.125rem 1.5rem 1.5rem;font-size:.875rem;line-height:1.6;background:#fff;box-shadow:.75rem .75rem 0 rgba(0,0,0,.15)}body.home .site-callout h2{margin-top:0;font-size:1.125rem;line-height:1.25;font-weight:600}body.home .site-callout p:last-child{margin-bottom:0}@media screen and (max-width:736px){body.home .site-callout{margin:2rem auto 0;max-width:24rem}}body:not(.home) .site-branding{display:flex;align-items:center;justify-content:space-between;font-size:.8125rem;color:#fff}body:not(.home) .site-branding a{color:#fff}body:not(.home) .site-branding .sep{margin-left:.5rem;margin-right:.5rem}body:not(.home) .site-branding .is-current-page{font-weight:600}.site-title a{text-decoration:none}.site-title a:active,.site-title a:focus,.site-title a:hover{color:#fff}.has-wporg-blue-color{color:#1e8cbe}.has-wporg-blue-background-color{background-color:#1e8cbe}.has-wporg-purple-color{color:#826eb4}.has-wporg-purple-background-color{background-color:#826eb4}.has-wporg-white-color{color:#fff}.has-wporg-white-background-color{background-color:#fff}.home-page .shapes{position:relative;margin:0 auto}.home-page .shapes .parallelogram p:before{font-size:64px;height:64px;left:-16px;position:relative}.home-page .shapes .parallelogram{color:#fff;display:block;margin:0 auto;opacity:.9;padding:60px 40px;text-align:center;text-decoration:none}.home-page .shapes strong{display:block;font-size:28px;font-weight:300;padding-bottom:15px;padding-top:15px}.home-page .shapes p{color:#fff;font-size:16px;font-weight:300;margin:0}.home-page .shapes u{display:block;font-size:18px;padding-top:15px}@media only screen and (min-width:768px){.home-page .shapes{height:400px}.home-page .shapes .parallelogram{width:50%;position:absolute;padding:50px 90px}}@media only screen and (min-width:960px){.home-page .shapes .parallelogram{-webkit-transform:skew(-15deg);-ms-transform:skew(-15deg);transform:skew(-15deg)}.home-page .shapes .parallelogram:before,.home-page .shapes p{-webkit-transform:skew(15deg);-ms-transform:skew(15deg);transform:skew(15deg)}}@media only screen and (min-width:1200px){.home-page .shapes{margin:0 -60px}}.terms{font-style:italic;font-size:14px} -
sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-patterns/index.php
r10882 r10924 20 20 <main id="main" class="site-main" role="main"> 21 21 22 <div id="pattern -grid__container">22 <div id="patterns__container"> 23 23 <!-- Filter placeholder --> 24 24 -
sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-patterns/single-wporg-pattern.php
r10841 r10924 12 12 get_header(); 13 13 ?> 14 14 <input id="block-data" type="hidden" value="<?php echo rawurlencode( wp_json_encode( get_the_content() ) ); ?>" /> 15 15 <main id="main" class="site-main col-12" role="main"> 16 16 … … 24 24 <?php the_title( '<h1 class="entry-title">', '</h1>' ); ?> 25 25 <p>A large hero section with an example background image and a heading in the center.</p> 26 <div class="pattern-actions">26 <div id="pattern-actions" class="pattern-actions"> 27 27 <button class="button button-primary">Copy Pattern</button> 28 28 <button class="button">Add to favorites</button> -
sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-patterns/src/components/category-context-bar/index.js
r10882 r10924 1 1 /** 2 * Externaldependencies2 * WordPress dependencies 3 3 */ 4 4 import { useEffect, useRef, useState } from '@wordpress/element'; 5 import { useSelect } from '@wordpress/data'; 6 import { getQueryArg } from '@wordpress/url'; 5 7 6 function CategoryContextBar( { message, title, links } ) { 8 /** 9 * Internal dependencies 10 */ 11 import { useRoute } from '../../hooks'; 12 import { getCategoryFromPath } from '../../utils'; 13 import { getContextMessage } from './messaging'; 14 import { store as patternStore } from '../../store'; 15 16 function CategoryContextBar() { 17 const { path } = useRoute(); 7 18 const [ height, setHeight ] = useState( 0 ); 19 const [ context, setContext ] = useState( {} ); 8 20 const innerRef = useRef( null ); 9 21 22 const { isAllCategory, category, isLoadingPatterns, patterns } = useSelect( 23 ( select ) => { 24 const { getCategoryBySlug, getPatternsByQuery, isLoadingPatternsByQuery, getCurrentQuery } = select( 25 patternStore 26 ); 27 const categorySlug = getCategoryFromPath( path ); 28 const _category = getCategoryBySlug( categorySlug ); 29 const query = getCurrentQuery(); 30 31 return { 32 isAllCategory: _category && _category.id === -1, 33 isLoadingPatterns: isLoadingPatternsByQuery( query ), 34 patterns: query ? getPatternsByQuery( query ) : [], 35 category: _category, 36 }; 37 }, 38 [ path ] 39 ); 40 10 41 useEffect( () => { 11 if ( message ) { 12 setHeight( innerRef.current.offsetHeight ); 13 } else { 14 setHeight( 0 ); 42 if ( ! category || isLoadingPatterns ) { 43 return; 15 44 } 16 }, [ message ] ); 45 46 const searchTerm = getQueryArg( path, 'search' ); 47 48 let _context = {}; 49 50 // Use the category count as default since it has the count of all the associated patterns 51 let count = category.count; 52 53 // If we have a search term use the pattern results length. 54 // Not: This is okay until we start using paging. 55 if ( searchTerm ) { 56 count = patterns.length; 57 } 58 59 if ( ! isAllCategory || searchTerm ) { 60 _context = getContextMessage( count, category.name, searchTerm ); 61 } 62 63 setContext( _context ); 64 }, [ category, isLoadingPatterns, patterns ] ); 65 66 useEffect( () => { 67 const _height = context.message ? innerRef.current.offsetHeight : 0; 68 setHeight( _height ); 69 }, [ context.message ] ); 17 70 18 71 return ( 19 72 <header className="category-context__bar" style={ { height: `${ height }px` } }> 20 73 <div ref={ innerRef }> 21 <h2 className="category-context__bar__copy">{ message }</h2>22 { links &&links.length > 0 && (74 <h2 className="category-context__bar__copy">{ context.message }</h2> 75 { context.links && context.links.length > 0 && ( 23 76 <div className="category-context__bar__links"> 24 <h3 className="category-context__bar__title">{ title }</h3>77 <h3 className="category-context__bar__title">{ context.title }</h3> 25 78 26 79 <ul> 27 { links.map( ( i ) => (80 { context.links.map( ( i ) => ( 28 81 <li key={ i.href }> 29 82 <a href={ i.href }>{ i.label }</a> -
sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-patterns/src/components/category-menu/default.js
r10882 r10924 29 29 height: activeRef.current.offsetHeight, 30 30 } ); 31 } , [ containerRef, activeRef, path ]);31 } ); 32 32 33 33 if ( ! isLoading && ! options.length ) { … … 37 37 return ( 38 38 <ul className={ `category-menu ${ isLoading ? 'category-menu--is-loading' : '' } ` } ref={ containerRef }> 39 { options.map( ( i ) => ( 40 <li key={ i.value }> 41 <a 42 className={ path === i.value ? 'category-menu--is-active' : '' } 43 href={ i.value } 44 ref={ path === i.value ? activeRef : null } 45 onClick={ ( { target } ) => onClick( target.hash ) } 46 > 47 { i.label } 48 </a> 49 </li> 50 ) ) } 39 { options.map( ( i ) => { 40 const isActive = path === i.value; 41 42 return ( 43 <li key={ i.value }> 44 <a 45 className={ isActive ? 'category-menu--is-active' : '' } 46 href={ i.value } 47 ref={ isActive ? activeRef : null } 48 onClick={ onClick } 49 > 50 { i.label } 51 </a> 52 </li> 53 ); 54 } ) } 51 55 </ul> 52 56 ); -
sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-patterns/src/components/category-menu/mobile.js
r10882 r10924 21 21 { options.map( ( i ) => ( 22 22 <li key={ i.value }> 23 <a href={ i.value } onClick={ () => { 24 setIsOpen( false ); 25 onClick( i.value ); 26 } }> 23 <a 24 href={ i.value } 25 onClick={ ( event ) => { 26 setIsOpen( false ); 27 onClick( event ); 28 } } 29 > 27 30 { i.label } 28 31 </a> -
sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-patterns/src/components/category-search/index.js
r10882 r10924 5 5 import { Icon, search } from '@wordpress/icons'; 6 6 7 const CategorySearch = ( { isLoading} ) => {7 const CategorySearch = ( { defaultValue, isLoading, isVisible, onUpdate, onSubmit } ) => { 8 8 if ( isLoading ) { 9 9 return <span className="category-search--is-loading" />; 10 10 } 11 11 12 if ( ! isVisible ) { 13 return null; 14 } 15 12 16 return ( 13 <form method="get" action="/" className="category-search" >17 <form method="get" action="/" className="category-search" onSubmit={ onSubmit }> 14 18 <label htmlFor="pattern-search" className="screen-reader-text"> 15 19 { __( 'Search for:', 'wporg-patterns' ) } 16 20 </label> 17 <input id="pattern-search" type="search" placeholder={ __( 'Search patterns', 'wporg-patterns' ) } /> 18 <button className="category-search__button"> 21 <input 22 onChange={ onUpdate } 23 defaultValue={ defaultValue } 24 id="pattern-search" 25 type="search" 26 placeholder={ __( 'Search patterns', 'wporg-patterns' ) } 27 /> 28 <button type="submit" className="category-search__button"> 19 29 <span className="screen-reader-text"> { __( 'Search patterns', 'wporg-patterns' ) }</span> 20 30 <Icon icon={ search } /> -
sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-patterns/src/components/pattern-grid-menu/index.js
r10882 r10924 1 1 /** 2 * Externaldependencies2 * WordPress dependencies 3 3 */ 4 import { store as coreStore } from '@wordpress/core-data';4 import { useDebounce } from '@wordpress/compose'; 5 5 import { useSelect } from '@wordpress/data'; 6 import { useEffect, useState } from '@wordpress/element'; 7 import { getPath } from '@wordpress/url'; 6 import { addQueryArgs, getPath, getQueryArg } from '@wordpress/url'; 8 7 9 8 /** … … 13 12 import CategorySearch from '../category-search'; 14 13 import CategoryContextBar from '../category-context-bar'; 15 import contextMessaging from './messaging'; 14 import { store as patternStore } from '../../store'; 15 import { useRoute } from '../../hooks'; 16 import { removeQueryString } from '../../utils'; 16 17 17 18 /** 18 19 * Module constants 19 20 */ 20 const PATTERN_TAXONOMY = 'wporg-pattern-category';21 const DEBOUNCE_MS = 300; 21 22 22 23 const PatternGridMenu = () => { 23 // Show loading state 24 const [ showLoading, setShowLoading ] = useState( true ); 25 const [ isFetching, setIsFetching ] = useState( false ); 26 const [ path, setPath ] = useState(); 27 const [ categoryContext, setCategoryContext ] = useState( undefined ); 24 const { path, update: updatePath } = useRoute(); 28 25 29 const categories = useSelect( ( select ) => 30 select( coreStore ).getEntityRecords( 'taxonomy', PATTERN_TAXONOMY ) 31 ); 26 const { categories, isLoading, hasLoaded } = useSelect( ( select ) => { 27 const { getCategories, isLoadingCategories, hasLoadedCategories } = select( patternStore ); 28 return { 29 categories: getCategories(), 30 isLoading: isLoadingCategories(), 31 hasLoaded: hasLoadedCategories(), 32 }; 33 } ); 32 34 33 useEffect( () => {34 const pathOnLoad = getPath( window.location.href );35 setPath( pathOnLoad );36 }, []);35 const handleUpdatePath = ( value ) => { 36 const updatedPath = addQueryArgs( path, { 37 search: value, 38 } ); 37 39 38 useEffect( () => { 39 // Since categories starts as an [] then switches to null 40 if ( showLoading && categories === null ) { 41 setIsFetching( true ); 42 } 40 updatePath( updatedPath ); 41 }; 43 42 44 if ( isFetching && Array.isArray( categories ) ) { 45 setShowLoading( false ); 46 setIsFetching( false ); 47 } 48 }, [ isFetching, categories ] ); 49 50 useEffect( () => { 51 setCategoryContext( contextMessaging[ path ] ); 52 }, [ path ] ); 43 const debouncedHandleUpdate = useDebounce( handleUpdatePath, DEBOUNCE_MS ); 53 44 54 45 return ( … … 56 47 <nav className="pattern-grid-menu"> 57 48 <CategoryMenu 58 path={ path}49 path={ removeQueryString( path ) } 59 50 options={ 60 51 categories 61 52 ? categories.map( ( record ) => { 62 53 return { 63 // TODO: This url is temporary and won't use the # symbol 64 value: `#/pattern-categories/${ record.slug }`, 54 value: `/${ getPath( record.link ) || '' }`, 65 55 label: record.name, 66 56 }; … … 68 58 : [] 69 59 } 70 onClick={ ( _path ) => setPath( _path ) } 71 isLoading={ showLoading } 60 onClick={ ( event ) => { 61 event.preventDefault(); 62 updatePath( event.target.pathname ); 63 } } 64 isLoading={ isLoading } 72 65 /> 73 <CategorySearch isLoading={ showLoading } /> 66 <CategorySearch 67 isLoading={ isLoading } 68 isVisible={ hasLoaded } 69 defaultValue={ getQueryArg( window.location.href, 'search' ) } 70 onUpdate={ ( event ) => { 71 event.preventDefault(); 72 debouncedHandleUpdate( event.target.value ); 73 } } 74 onSubmit={ ( event ) => { 75 event.preventDefault(); 76 debouncedHandleUpdate( event.target.elements[ 0 ].value ); 77 } } 78 /> 74 79 </nav> 75 <CategoryContextBar { ...categoryContext }/>80 <CategoryContextBar /> 76 81 </> 77 82 ); -
sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-patterns/src/components/pattern-grid/index.js
r10882 r10924 9 9 */ 10 10 import PatternThumbnail from '../pattern-thumbnail'; 11 import PatternGridMenu from '../pattern-grid-menu';12 11 import { store as patternStore } from '../../store'; 13 12 14 13 function PatternGrid() { 15 const posts = useSelect( ( select ) => { 16 const { getPatternsByQuery } = select( patternStore ); 17 return getPatternsByQuery( {} ); 14 const { posts, isLoading } = useSelect( ( select ) => { 15 const { getPatternsByQuery, isLoadingPatternsByQuery, getCurrentQuery } = select( patternStore ); 16 const query = getCurrentQuery(); 17 18 return { 19 posts: query ? getPatternsByQuery( query ) : [], 20 isLoading: query && isLoadingPatternsByQuery( query ), 21 }; 18 22 } ); 19 // `posts` will be null while the fetch happens.20 const isLoading = ! Array.isArray( posts );21 23 22 24 return ( 23 <> 24 <PatternGridMenu /> 25 26 <div className="pattern-grid"> 27 { isLoading ? ( 28 <Spinner /> 29 ) : ( 30 posts.map( ( post ) => <PatternThumbnail key={ post.id } pattern={ post } /> ) 31 ) } 32 </div> 33 </> 25 <div className="pattern-grid"> 26 { isLoading ? ( 27 <Spinner /> 28 ) : ( 29 posts.map( ( post ) => <PatternThumbnail key={ post.id } pattern={ post } /> ) 30 ) } 31 </div> 34 32 ); 35 33 } -
sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-patterns/src/index.js
r10882 r10924 8 8 */ 9 9 import PatternPreview from './components/pattern-preview'; 10 import PatternGrid from './components/pattern-grid'; 10 import PatternPreviewActions from './components/pattern-preview-actions'; 11 import Patterns from './components/patterns'; 11 12 12 13 // Load the preview into any awaiting preview container. … … 24 25 25 26 // Load the preview into any awaiting preview container. 26 const gridContainer = document.getElementById( 'pattern -grid__container' );27 const gridContainer = document.getElementById( 'patterns__container' ); 27 28 if ( gridContainer ) { 28 render( <Pattern Grid/>, gridContainer );29 render( <Patterns />, gridContainer ); 29 30 } 31 32 // Load the pattern preview actions 33 const patternActionsContainer = document.getElementById( 'pattern-actions' ); 34 if ( patternActionsContainer ) { 35 render( <PatternPreviewActions />, patternActionsContainer ); 36 } -
sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-patterns/src/store/actions.js
r10882 r10924 21 21 return { type: 'LOAD_BLOCK_PATTERNS', query: query, patterns: patterns }; 22 22 } 23 24 /** 25 * Get the action object signalling that the current view has been set. 26 * 27 * @param {string} query Query object. 28 * @return {Object} Action object. 29 */ 30 export function setCurrentQuery( query ) { 31 return { type: 'SET_CURRENT_QUERY', query: query }; 32 } 33 34 /** 35 * Get the action object signalling that categories have been requested. 36 * 37 * @return {Object} Action object. 38 */ 39 export function fetchCategories() { 40 return { type: 'FETCH_CATEGORIES' }; 41 } 42 43 /** 44 * Get the action object signalling that categories have been loaded. 45 * 46 * @param {Array} categories A list of categories. 47 * @return {Object} Action object. 48 */ 49 export function loadCategories( categories ) { 50 return { type: 'LOAD_CATEGORIES', categories: categories }; 51 } -
sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-patterns/src/store/reducer.js
r10882 r10924 3 3 */ 4 4 import { combineReducers } from '@wordpress/data'; 5 6 /** 7 * Internal dependencies 8 */ 9 import { getAllCategory } from './utils'; 5 10 6 11 /** … … 16 21 queries: queries( state.queries, action ), 17 22 }; 23 } 24 25 /** 26 * Reducer to track categories. 27 * 28 * @param {Object} state Current state. 29 * @param {Object} action Dispatched action. 30 * @return {Object} Updated state. 31 */ 32 export function categories( state = undefined, action ) { 33 switch ( action.type ) { 34 case 'FETCH_CATEGORIES': 35 return null; // Indicates the query is in progress 36 case 'LOAD_CATEGORIES': 37 // Sort the categories alphabetically. 38 // See: https://github.com/WordPress/pattern-directory/pull/76#issuecomment-818330872 39 const sorted = ( action.categories || [] ).sort( ( a, b ) => a.name.localeCompare( b.name ) ); 40 41 return [ getAllCategory(), ...sorted ]; 42 } 43 44 return state; 45 } 46 47 /** 48 * Reducer to track the current query. 49 * 50 * @param {Object} state Current state. 51 * @param {Object} action Dispatched action. 52 * @return {Object} Updated state. 53 */ 54 export function currentQuery( state = undefined, action ) { 55 switch ( action.type ) { 56 case 'SET_CURRENT_QUERY': 57 return action.query; 58 } 59 60 return state; 18 61 } 19 62 … … 40 83 export default combineReducers( { 41 84 patterns, 42 // taxonomy items,43 // filter query,85 categories, 86 currentQuery, 44 87 // favorites, 45 88 } ); -
sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-patterns/src/store/resolvers.js
r10882 r10924 8 8 * Internal dependencies 9 9 */ 10 import { fetch Patterns, loadPatterns } from './actions';10 import { fetchCategories, fetchPatterns, loadCategories, loadPatterns } from './actions'; 11 11 import { getQueryString } from './utils'; 12 12 … … 21 21 } catch ( error ) {} 22 22 } 23 24 export function* getCategories() { 25 try { 26 yield fetchCategories(); 27 const results = yield apiFetch( { 28 path: addQueryArgs( '/wp/v2/pattern-categories' ), 29 } ); 30 yield loadCategories( results ); 31 } catch ( error ) {} 32 } -
sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-patterns/src/store/selectors.js
r10882 r10924 52 52 return state.patterns.byId[ id ] || null; 53 53 } 54 55 /** 56 * Get the current query. 57 * 58 * @param {Object} state Global application state. 59 * 60 * @return {Object} The current query. 61 */ 62 export function getCurrentQuery( state ) { 63 return state.currentQuery; 64 } 65 66 /** 67 * Check if there is a pending request for category query. 68 * 69 * @param {Object} state Global application state. 70 * 71 * @return {boolean} True if an API request is in progress for this query. 72 */ 73 export function isLoadingCategories( state ) { 74 return state.categories === null; 75 } 76 77 /** 78 * Check if the categories have been loaded. 79 * 80 * @param {Object} state Global application state. 81 * 82 * @return {boolean} True if categories is an array. 83 */ 84 export function hasLoadedCategories( state ) { 85 return Array.isArray( state.categories ); 86 } 87 88 /** 89 * Get all loaded categories. 90 * 91 * @param {Object} state Global application state. 92 * 93 * @return {Array} A list of all categories. 94 */ 95 export function getCategories( state ) { 96 return state.categories; 97 } 98 99 /** 100 * Get category by its slug. 101 * 102 * @param {Object} state Global application state. 103 * @param {string} slug Category slug. 104 * 105 * @return {Array|undefined} The requested category. 106 */ 107 export function getCategoryBySlug( state, slug ) { 108 if ( ! hasLoadedCategories( state ) ) { 109 return; 110 } 111 112 const [ cat ] = state.categories.filter( ( i ) => i.slug === slug ); 113 return cat; 114 } -
sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-patterns/src/store/test/reducer.js
r10882 r10924 4 4 import apiPatterns from './fixtures/patterns'; 5 5 import apiPatternsPage2 from './fixtures/patterns-page-2'; 6 import { patterns } from '../reducer'; 6 import apiCategories from './fixtures/categories'; 7 import { categories, patterns } from '../reducer'; 7 8 8 9 describe( 'state', () => { … … 59 60 } ); 60 61 } ); 62 63 describe( 'categories', () => { 64 it( 'should return null when fetching categories', () => { 65 const state = categories( 66 {}, 67 { 68 type: 'FETCH_CATEGORIES', 69 } 70 ); 71 72 expect( state ).toBeNull(); 73 } ); 74 75 it( 'should store categories in the state with the "all" category', () => { 76 const state = categories( 77 {}, 78 { 79 type: 'LOAD_CATEGORIES', 80 categories: apiCategories, 81 } 82 ); 83 84 const lengthWithAll = apiCategories.length + 1; 85 86 expect( state ).toHaveLength( lengthWithAll ); 87 } ); 88 } ); 61 89 } ); -
sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-patterns/src/store/test/resolvers.js
r10882 r10924 3 3 */ 4 4 import apiPatterns from './fixtures/patterns'; 5 import { getPatternsByQuery } from '../resolvers'; 5 import apiCategories from './fixtures/categories'; 6 import { getCategories, getPatternsByQuery } from '../resolvers'; 6 7 7 8 describe( 'getPatternsByQuery', () => { … … 30 31 } ); 31 32 33 describe( 'getCategories', () => { 34 it( 'yields with the requested patterns', async () => { 35 const generator = getCategories(); 36 37 expect( generator.next().value ).toEqual( { 38 type: 'FETCH_CATEGORIES', 39 } ); 40 41 // trigger apiFetch 42 const { value: apiFetchAction } = generator.next(); 43 expect( apiFetchAction.request ).toEqual( { 44 path: '/wp/v2/pattern-categories', 45 } ); 46 47 // Provide response and trigger action 48 const { value: received } = generator.next( apiCategories ); 49 expect( received ).toEqual( { 50 type: 'LOAD_CATEGORIES', 51 categories: apiCategories, 52 } ); 53 } ); 54 } ); -
sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-patterns/src/store/test/selectors.js
r10882 r10924 3 3 */ 4 4 import apiPatterns from './fixtures/patterns'; 5 import { getPattern, getPatterns, getPatternsByQuery, isLoadingPatternsByQuery } from '../selectors'; 5 import apiCategories from './fixtures/categories'; 6 import { 7 getCategories, 8 getCategoryBySlug, 9 getCurrentQuery, 10 getPattern, 11 getPatterns, 12 getPatternsByQuery, 13 hasLoadedCategories, 14 isLoadingCategories, 15 isLoadingPatternsByQuery, 16 } from '../selectors'; 6 17 7 18 describe( 'selectors', () => { … … 91 102 } ); 92 103 } ); 104 105 describe( 'getCurrentQuery', () => { 106 it( 'should get an empty object if there is no query', () => { 107 const initialQueryState = { 108 currentQuery: {}, 109 }; 110 111 expect( getCurrentQuery( initialQueryState ) ).toMatchObject( {} ); 112 } ); 113 114 it( 'should get an the correct query object', () => { 115 const initialQueryState = { 116 currentQuery: { 117 'pattern-categories': [ 1 ], 118 }, 119 }; 120 121 expect( getCurrentQuery( initialQueryState ) ).toMatchObject( initialQueryState.currentQuery ); 122 } ); 123 } ); 124 125 describe( 'isLoadingCategories', () => { 126 it( 'should get true when state is null', () => { 127 const categoryState = { 128 categories: null, 129 }; 130 131 expect( isLoadingCategories( categoryState ) ).toBe( true ); 132 } ); 133 134 it( 'should get false when state is an array', () => { 135 const categoryState = { 136 categories: apiCategories, 137 }; 138 expect( isLoadingCategories( categoryState ) ).toBe( false ); 139 } ); 140 } ); 141 142 describe( 'hasLoadedCategories', () => { 143 it( 'should get false when state is undefined', () => { 144 const categoryState = { 145 categories: undefined, 146 }; 147 expect( hasLoadedCategories( categoryState ) ).toBe( false ); 148 } ); 149 150 it( 'should get true when state is an array', () => { 151 const categoryState = { 152 categories: apiCategories, 153 }; 154 expect( hasLoadedCategories( categoryState ) ).toBe( true ); 155 } ); 156 } ); 157 158 describe( 'getCategories', () => { 159 it( 'should get a list of categories', () => { 160 const categoryState = { 161 categories: apiCategories, 162 }; 163 164 expect( getCategories( categoryState ) ).toHaveLength( apiCategories.length ); 165 } ); 166 } ); 167 168 describe( 'getCategoryBySlug', () => { 169 it( 'should get undefined if categories have not loaded', () => { 170 expect( 171 getCategoryBySlug( 172 { 173 categories: undefined, 174 }, 175 'header' 176 ) 177 ).toBeUndefined(); 178 179 expect( 180 getCategoryBySlug( 181 { 182 categories: null, 183 }, 184 'header' 185 ) 186 ).toBeUndefined(); 187 } ); 188 189 it( 'should get undefined if there are no categories', () => { 190 const categoryState = { 191 categories: [], 192 }; 193 194 expect( getCategoryBySlug( categoryState, apiCategories[ 0 ].slug ) ).toBeUndefined(); 195 } ); 196 197 it( 'should get undefined if no category exist', () => { 198 const categoryState = { 199 categories: apiCategories, 200 }; 201 202 expect( getCategoryBySlug( categoryState, 'missing-category-slug' ) ).toBeUndefined(); 203 } ); 204 205 it( 'should get the correct category', () => { 206 const categoryState = { 207 categories: apiCategories, 208 }; 209 210 expect( getCategoryBySlug( categoryState, apiCategories[ 0 ].slug ) ).toHaveProperty( 211 'id', 212 apiCategories[ 0 ].id 213 ); 214 } ); 215 } ); 93 216 } ); -
sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-patterns/src/store/utils.js
r10882 r10924 3 3 */ 4 4 import { addQueryArgs } from '@wordpress/url'; 5 import { __ } from '@wordpress/i18n'; 5 6 6 7 /** … … 39 40 return stableKey; 40 41 } 42 43 /** 44 * Get the first category used to display all patterns. 45 * 46 * See Schema: 47 * https://developer.wordpress.org/rest-api/reference/categories/ 48 * 49 * @return {Object} A category object 50 */ 51 export function getAllCategory() { 52 return { 53 id: -1, 54 slug: '', // Slug matches url 55 name: __( 'All', 'wporg-patterns' ), 56 link: '/', 57 }; 58 }
Note: See TracChangeset
for help on using the changeset viewer.