diff --git a/.gitignore b/.gitignore index aa0b975..dbc7721 100644 --- a/.gitignore +++ b/.gitignore @@ -11,7 +11,6 @@ /wp-content/plugins/index.php /wp-content/themes/index.php /wp-includes/ -/index.php /license.txt /readme.html /wp-*.php diff --git a/archive.php b/archive.php new file mode 100644 index 0000000..b94802f --- /dev/null +++ b/archive.php @@ -0,0 +1,52 @@ + +
+
+
+ + +
+
+ 'col-lg-4 col-md-6 col-sm-12 pb-4' ] ); + endwhile; + else : + get_template_part( 'template-parts/content-none' ); + endif; + ?> +
+
+ +
+
+
+
+
+ + array('dependencies' => array('wp-polyfill'), 'version' => '4d1ec442c34233d2338a'), 'js/single.js' => array('dependencies' => array('wp-polyfill'), 'version' => 'cf309fb462d151e0903f'), 'js/editor.js' => array('dependencies' => array('wp-polyfill'), 'version' => '20e59da245b068507d19'), 'js/blocks.js' => array('dependencies' => array('lodash', 'react', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-i18n', 'wp-polyfill'), 'version' => 'fd74a072c000809e4cac')); + array('dependencies' => array('wp-polyfill'), 'version' => '4d1ec442c34233d2338a'), 'js/single.js' => array('dependencies' => array('wp-polyfill'), 'version' => 'cf309fb462d151e0903f'), 'js/editor.js' => array('dependencies' => array('wp-polyfill'), 'version' => '20e59da245b068507d19'), 'js/blocks.js' => array('dependencies' => array('lodash', 'react', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-i18n', 'wp-polyfill'), 'version' => '97fa04aafbc946b41876'), 'js/author.js' => array('dependencies' => array('wp-polyfill'), 'version' => '78588f4d2cee9b7fc895'), 'js/search.js' => array('dependencies' => array('wp-polyfill'), 'version' => 'f0b471bbb5047706b9dd')); diff --git a/assets/build/css/blocks.css b/assets/build/css/blocks.css index 786c2a3..05649ec 100644 --- a/assets/build/css/blocks.css +++ b/assets/build/css/blocks.css @@ -33,7 +33,41 @@ } /* stylelint-enable */ -/*@import "7-blocks/quote"; -@import "7-blocks/button";*/ +/* stylelint-disable */ +.editor-styles-wrapper .wp-block-quote.is-style-layout-dark-background, +.wp-block-quote.is-style-layout-dark-background { + background-color: #38affd; + padding: 24px 18px; +} + +/* stylelint-enable */ +/* stylelint-disable */ +.editor-styles-wrapper .wp-block-button.is-style-layout-border-blue-fill .wp-block-button__link, +.wp-block-button.is-style-layout-border-blue-fill .wp-block-button__link { + border: 1px solid #0673a9; + background-color: #38affd !important; + color: #fff !important; + padding: 8px 30px; + border-radius: 3px; +} +.editor-styles-wrapper .wp-block-button.is-style-layout-border-white-no-fill .wp-block-button__link, +.wp-block-button.is-style-layout-border-white-no-fill .wp-block-button__link { + border: 1px solid #fff; + background-color: transparent !important; + color: #fff !important; + padding: 8px 30px; + border-radius: 3px; +} + +.block-editor-block-styles__item[aria-label="White outline - to be used with dark background"] .block-editor-block-styles__item-preview, +.block-editor-block-styles__item[aria-label="White outline - to be used with dark background"] .block-editor-block-list__layout.is-root-container { + background-color: #0673a9; +} +.block-editor-block-styles__item[aria-label="White outline - to be used with dark background"] .block-editor-block-styles__item-preview .wp-block-button.is-style-layout-border-white-no-fill .wp-block-button__link, +.block-editor-block-styles__item[aria-label="White outline - to be used with dark background"] .block-editor-block-list__layout.is-root-container .wp-block-button.is-style-layout-border-white-no-fill .wp-block-button__link { + background-color: #0673a9; +} + +/* stylelint-enable */ /*# sourceMappingURL=blocks.css.map*/ \ No newline at end of file diff --git a/assets/build/css/blocks.css.map b/assets/build/css/blocks.css.map index 364428e..81151c2 100644 --- a/assets/build/css/blocks.css.map +++ b/assets/build/css/blocks.css.map @@ -1 +1 @@ -{"version":3,"file":"css/blocks.css","mappings":";;;AACA;;oCAAA;AAuCA;;oCAAA;AAOA;;oCAAA;AAOA;;oCAAA;AA4BA;;oCAAA;AClFA;AACA;EACC;ACgBD;ADdC;EACC;EACA;EACA;ACgBF;;ADZA;AEXA;AAEC;EACC;AD0BF;;ACvBA;ADFA;2BAAA,C","sources":["webpack://nintynine/./src/sass/0-settings/_colors.scss","webpack://nintynine/./src/sass/7-blocks/_heading-with-icon.scss","webpack://nintynine/./src/sass/blocks.scss","webpack://nintynine/./src/sass/7-blocks/_dos-and-donts.scss"],"names":[],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"css/blocks.css","mappings":";;;AACA;;oCAAA;AAuCA;;oCAAA;AAOA;;oCAAA;AAOA;;oCAAA;AA4BA;;oCAAA;AClFA;AACA;EACC;ACgBD;ADdC;EACC;EACA;EACA;ACgBF;;ADZA;AEXA;AAEC;EACC;AD0BF;;ACvBA;ACNA;AAGC;;EACC,yBJ+BQ;EI9BR;AFgCF;;AE5BA;ACTA;AAOE;;EACC;EACA;EACA;EACA;EACA;AHoCH;AG7BE;;EACC;EACA;EACA;EACA;EACA;AHgCH;;AGzBC;;EAEC,yBLHS;AE+BX;AGzBG;;EACC,yBLPO;AEmCX;;AGtBA,sB","sources":["webpack://nintynine/./src/sass/0-settings/_colors.scss","webpack://nintynine/./src/sass/7-blocks/_heading-with-icon.scss","webpack://nintynine/./src/sass/blocks.scss","webpack://nintynine/./src/sass/7-blocks/_dos-and-donts.scss","webpack://nintynine/./src/sass/7-blocks/_quote.scss","webpack://nintynine/./src/sass/7-blocks/_button.scss"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/assets/build/css/search.css b/assets/build/css/search.css new file mode 100644 index 0000000..31c1c93 --- /dev/null +++ b/assets/build/css/search.css @@ -0,0 +1,151 @@ +/*!***************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js!./src/sass/search.scss ***! + \***************************************************************************************************************/ +/** + * Checkbox Accordion. + */ +.checkbox-accordion { + display: block; + position: relative; + padding: 12px 10px 12px 0; + border-top: 1px solid lightgrey; +} +.checkbox-accordion:last-child { + border-bottom: 1px solid lightgrey; +} +.checkbox-accordion__handle { + color: dodgerblue; + cursor: pointer; + font-weight: 500; + text-transform: uppercase; + display: flex; + align-items: center; + justify-content: space-between; + transition-property: all; + transition-duration: 0.6s; + transition-timing-function: cubic-bezier(0.87, 0, 0.13, 1); +} +@media (hover: hover) { + .checkbox-accordion__handle:hover { + color: dodgerblue; + } +} +.checkbox-accordion__handle-icon { + display: inline-block; + border-right: 3px solid cornflowerblue; + border-bottom: 3px solid cornflowerblue; + width: 10px; + height: 10px; + transform: rotate(-315deg); + transition-property: all; + transition-duration: 0.6s; + transition-timing-function: cubic-bezier(0.87, 0, 0.13, 1); +} +@media (hover: hover) { + .checkbox-accordion__handle:hover .checkbox-accordion__handle-icon { + opacity: 1; + } +} +.checkbox-accordion[active] .checkbox-accordion__handle-icon { + transform: rotate(-135deg); +} +.checkbox-accordion__handle-text { + padding-right: 10px; + line-height: 1.5; + font-weight: 350; +} +.checkbox-accordion__content { + height: 0; + overflow: hidden; + display: block; + transition-property: all; + transition-duration: 0.6s; + transition-timing-function: var(--ease-in-out-quart); +} +.checkbox-accordion__child { + display: block; +} +.checkbox-accordion__child > .checkbox-accordion__child-content { + padding: 0 0 0 19px; + height: 0; + overflow: hidden; + transition-property: all; + transition-duration: 0.6s; + transition-timing-function: var(--ease-in-out-quart); +} +.checkbox-accordion__child-handle-icon { + display: inline-block; + cursor: pointer; + border-right: 3px solid cornflowerblue; + border-bottom: 3px solid cornflowerblue; + width: 10px; + height: 10px; + transform: rotate(-315deg); + transition-property: all; + transition-duration: 0.6s; + transition-timing-function: cubic-bezier(0.87, 0, 0.13, 1); +} +.checkbox-accordion__child[active] > .checkbox-accordion__child-handle .checkbox-accordion__child-handle-icon { + transform: rotate(-135deg); +} +.checkbox-accordion__child .checkbox-accordion__child-handle { + display: flex; + justify-content: space-between; + align-items: center; +} +.checkbox-accordion__child .checkbox-accordion__child-handle.form-field { + margin-top: 16px; + padding-right: 2px; +} +@media (hover: hover) { + .checkbox-accordion__child .checkbox-accordion__child-handle:hover { + color: dodgerblue; + } +} +@media (hover: hover) { + .checkbox-accordion__child .checkbox-accordion__child-handle:hover .checkbox-accordion__child .checkbox-accordion__child-handle-icon { + opacity: 1; + } +} +.checkbox-accordion__child.checkbox-accordion__child--has-content[active] > .checkbox-accordion__child-handle-icon svg { + transform: rotate(-180deg); + opacity: 1; +} +.checkbox-accordion__child label.checkbox { + justify-content: flex-start; +} +.checkbox-accordion__child .checkbox-text { + font-size: 15px; + font-weight: 300; + letter-spacing: 0.3px; + line-height: 1.6; + margin-left: 6px; +} + +.nintynine-search { + justify-content: center; +} + +.nintynine-results-count { + display: block; + padding-bottom: 20px; +} + +.nintynine-loading-more { + display: flex; + justify-content: center; + padding: 20px 0; +} + +.clear-all-filters { + margin-bottom: 10px; + display: block; +} + +.load-more-wrap { + display: flex; + justify-content: center; + margin: 0 auto; +} + +/*# sourceMappingURL=search.css.map*/ \ No newline at end of file diff --git a/assets/build/css/search.css.map b/assets/build/css/search.css.map new file mode 100644 index 0000000..195fa3d --- /dev/null +++ b/assets/build/css/search.css.map @@ -0,0 +1 @@ +{"version":3,"file":"css/search.css","mappings":";;;AAAA;;EAAA;AAGA;EAIC;EACA;EACA;EACA;AAFD;AAIC;EACC;AAFF;AAKC;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAHF;AAOG;EAFD;IAGE;EAJF;AACF;AAOE;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AALH;AAUG;EAFD;IAGE;EAPF;AACF;AAYE;EACC;AAVH;AAcC;EACC;EACA;EACA;AAZF;AAeC;EACC;EACA;EACA;EACA;EACA;EACA;AAbF;AAiBC;EAEC;AAhBF;AAkBE;EACC;EACA;EACA;EACA;EACA;EACA;AAhBH;AAmBE;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAjBH;AAsBG;EACC;AApBJ;AAwBE;EACC;EACA;EACA;AAtBH;AAwBG;EACC;EACA;AAtBJ;AA2BI;EAFD;IAGE;EAxBH;AACF;AA6BI;EAFD;IAGE;EA1BH;AACF;AAkCI;EACC;EACA;AAhCL;AAqCE;EACC;AAnCH;AAsCE;EACC;EACA;EACA;EACA;EACA;AApCH;;AAyCA;EACC;AAtCD;;AAyCA;EACC;EACA;AAtCD;;AAyCA;EACC;EACA;EACA;AAtCD;;AAyCA;EACC;EACA;AAtCD;;AAyCA;EACC;EACA;EACA;AAtCD,C","sources":["webpack://nintynine/./src/sass/search.scss"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/assets/build/js/author.js b/assets/build/js/author.js new file mode 100644 index 0000000..94cc29b --- /dev/null +++ b/assets/build/js/author.js @@ -0,0 +1,38 @@ +/******/ (function() { // webpackBootstrap +/*!**************************!*\ + !*** ./src/js/author.js ***! + \**************************/ +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +(function ($) { + var Author = /*#__PURE__*/function () { + function Author() { + _classCallCheck(this, Author); + this.authorProfileImgContainer = $('#author-profile-img span'); + this.authorFirstNameText = $('#author-firstname').text(); + this.authorLastNameText = $('#author-lastname').text(); + this.init(); + } + return _createClass(Author, [{ + key: "init", + value: function init() { + if (!this.authorProfileImgContainer.length) { + return null; + } + var initials = this.authorFirstNameText.charAt(0) + this.authorLastNameText.charAt(0); + initials = initials ? initials : 'A'; + + // Set the text. + this.authorProfileImgContainer.text(initials); + } + }]); + }(); + new Author(); +})(jQuery); +/******/ })() +; +//# sourceMappingURL=author.js.map \ No newline at end of file diff --git a/assets/build/js/author.js.map b/assets/build/js/author.js.map new file mode 100644 index 0000000..b2cb8d7 --- /dev/null +++ b/assets/build/js/author.js.map @@ -0,0 +1 @@ +{"version":3,"file":"js/author.js","mappings":";;;;;;;;;;AAAA,CAAE,UAAUA,CAAC,EAAG;EAAA,IACTC,MAAM;IACX,SAAAA,OAAA,EAAc;MAAAC,eAAA,OAAAD,MAAA;MACb,IAAI,CAACE,yBAAyB,GAAGH,CAAC,CAAE,0BAA2B,CAAC;MAChE,IAAI,CAACI,mBAAmB,GAAGJ,CAAC,CAAE,mBAAoB,CAAC,CAACK,IAAI,CAAC,CAAC;MAC1D,IAAI,CAACC,kBAAkB,GAAGN,CAAC,CAAE,kBAAmB,CAAC,CAACK,IAAI,CAAC,CAAC;MAExD,IAAI,CAACE,IAAI,CAAC,CAAC;IACZ;IAAC,OAAAC,YAAA,CAAAP,MAAA;MAAAQ,GAAA;MAAAC,KAAA,EAED,SAAAH,IAAIA,CAAA,EAAG;QACN,IAAK,CAAE,IAAI,CAACJ,yBAAyB,CAACQ,MAAM,EAAG;UAC9C,OAAO,IAAI;QACZ;QAEA,IAAIC,QAAQ,GAAG,IAAI,CAACR,mBAAmB,CAACS,MAAM,CAAE,CAAE,CAAC,GAAG,IAAI,CAACP,kBAAkB,CAACO,MAAM,CAAE,CAAE,CAAC;QACzFD,QAAQ,GAAGA,QAAQ,GAAGA,QAAQ,GAAG,GAAG;;QAEpC;QACA,IAAI,CAACT,yBAAyB,CAACE,IAAI,CAAEO,QAAS,CAAC;MAChD;IAAC;EAAA;EAIF,IAAIX,MAAM,CAAC,CAAC;AACb,CAAC,EAAIa,MAAO,CAAC,C","sources":["webpack://nintynine/./src/js/author.js"],"sourcesContent":["( function( $ ) {\r\n\tclass Author {\r\n\t\tconstructor() {\r\n\t\t\tthis.authorProfileImgContainer = $( '#author-profile-img span' );\r\n\t\t\tthis.authorFirstNameText = $( '#author-firstname' ).text();\r\n\t\t\tthis.authorLastNameText = $( '#author-lastname' ).text();\r\n\t\t\t\r\n\t\t\tthis.init();\r\n\t\t}\r\n\t\t\r\n\t\tinit() {\r\n\t\t\tif ( ! this.authorProfileImgContainer.length ) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tlet initials = this.authorFirstNameText.charAt( 0 ) + this.authorLastNameText.charAt( 0 );\r\n\t\t\tinitials = initials ? initials : 'A';\r\n\t\t\t\r\n\t\t\t// Set the text.\r\n\t\t\tthis.authorProfileImgContainer.text( initials );\r\n\t\t}\r\n\t\t\r\n\t}\r\n\t\r\n\tnew Author();\r\n} )( jQuery );\r\n"],"names":["$","Author","_classCallCheck","authorProfileImgContainer","authorFirstNameText","text","authorLastNameText","init","_createClass","key","value","length","initials","charAt","jQuery"],"sourceRoot":""} \ No newline at end of file diff --git a/assets/build/js/blocks.js b/assets/build/js/blocks.js index 42faa69..14b6151 100644 --- a/assets/build/js/blocks.js +++ b/assets/build/js/blocks.js @@ -9,54 +9,65 @@ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); -/* harmony import */ var _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/block-editor */ "@wordpress/block-editor"); -/* harmony import */ var _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); -/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/components */ "@wordpress/components"); -/* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_components__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var _icons_map__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./icons-map */ "./src/js/gutenberg/blocks/heading-with-icon/icons-map.js"); +/* harmony import */ var _icons_map__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./icons-map */ "./src/js/gutenberg/blocks/heading-with-icon/icons-map.js"); +/* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/components */ "@wordpress/components"); +/* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); +/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/block-editor */ "@wordpress/block-editor"); +/* harmony import */ var _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_3__); -var Edit = function Edit(_ref) { - var className = _ref.className, - attributes = _ref.attributes, - setAttributes = _ref.setAttributes; + +/** + * Edit + * + * @param {Object} props Props. + * + * @return {Object} Content. + */ +var Edit = function Edit(props) { + var className = props.className, + attributes = props.attributes, + setAttributes = props.setAttributes; var option = attributes.option, content = attributes.content; - var HeadingIcon = (0,_icons_map__WEBPACK_IMPORTED_MODULE_3__.getIconComponent)(option); + var HeadingIcon = (0,_icons_map__WEBPACK_IMPORTED_MODULE_0__.getIconComponent)(option); return /*#__PURE__*/React.createElement("div", { className: "nintynine-icon-heading" }, /*#__PURE__*/React.createElement("span", { className: "nintynine-icon-heading__heading" - }, /*#__PURE__*/React.createElement(HeadingIcon, null)), /*#__PURE__*/React.createElement(_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_0__.RichText, { - tagName: "h4", + }, /*#__PURE__*/React.createElement(HeadingIcon, null)), /*#__PURE__*/React.createElement(_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_3__.RichText, { + tagName: "h4" // The tag here is the element output and editable in the admin + , className: className, - value: content, - onChange: function onChange(content) { + value: content // Any existing content, either from the database or an attribute default + , + onChange: function onChange(contentVal) { return setAttributes({ - content: content + contentVal: contentVal }); - }, - placeholder: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Heading...', 'nintynine') - }), /*#__PURE__*/React.createElement(_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_0__.InspectorControls, null, /*#__PURE__*/React.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_2__.PanelBody, { - title: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Block Settings', 'nintynine') - }, /*#__PURE__*/React.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_2__.RadioControl, { - label: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Select the icon', 'nintynine'), - help: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Controls icon selection', 'nintynine'), + } // Store updated content as a block attribute + , + placeholder: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Heading…', 'nintynine') // Display this text before any content has been added by the user + }), /*#__PURE__*/React.createElement(_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_3__.InspectorControls, null, /*#__PURE__*/React.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__.PanelBody, { + title: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Block Settings', 'nintynine') + }, /*#__PURE__*/React.createElement(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__.RadioControl, { + label: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Select the icon', 'nintynine'), + help: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Controls icon selection', 'nintynine'), selected: option, options: [{ - label: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Dos', 'nintynine'), + label: 'Dos', value: 'dos' }, { - label: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Dont\'s', 'nintynine'), + label: "Dont's", value: 'donts' }], - onChange: function onChange(option) { + onChange: function onChange(optionVal) { setAttributes({ - option: option + optionVal: optionVal }); } })))); @@ -105,14 +116,14 @@ var getIconComponent = function getIconComponent(option) { /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); -/* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/blocks */ "@wordpress/blocks"); -/* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); -/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__); -/* harmony import */ var _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/block-editor */ "@wordpress/block-editor"); -/* harmony import */ var _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_2__); -/* harmony import */ var _edit__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./edit */ "./src/js/gutenberg/blocks/heading-with-icon/edit.js"); -/* harmony import */ var _icons_map__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./icons-map */ "./src/js/gutenberg/blocks/heading-with-icon/icons-map.js"); +/* harmony import */ var _icons_map__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./icons-map */ "./src/js/gutenberg/blocks/heading-with-icon/icons-map.js"); +/* harmony import */ var _edit__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./edit */ "./src/js/gutenberg/blocks/heading-with-icon/edit.js"); +/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); +/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/blocks */ "@wordpress/blocks"); +/* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/block-editor */ "@wordpress/block-editor"); +/* harmony import */ var _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4__); /** * Heading with Icon block. * @@ -123,10 +134,11 @@ __webpack_require__.r(__webpack_exports__); -(0,_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__.registerBlockType)('nintynine-blocks/nintynine-heading-icon', { - title: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Heading with Icon', 'nintynine'), + +(0,_wordpress_blocks__WEBPACK_IMPORTED_MODULE_3__.registerBlockType)('nintynine-blocks/nintynine-heading-icon', { + title: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Heading with Icon', 'nintynine'), icon: 'admin-customizer', - description: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Add heading and select icon', 'nintynine'), + description: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Add heading and select icon', 'nintynine'), category: 'nintynine', attributes: { option: { @@ -137,20 +149,20 @@ __webpack_require__.r(__webpack_exports__); type: 'string', source: 'html', selector: 'h4', - default: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Dos', 'nintynine') + default: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Dos', 'nintynine') } }, - edit: _edit__WEBPACK_IMPORTED_MODULE_3__["default"], - save: function save(_ref) { - var _ref$attributes = _ref.attributes, - option = _ref$attributes.option, - content = _ref$attributes.content; - var HeadingIcon = (0,_icons_map__WEBPACK_IMPORTED_MODULE_4__.getIconComponent)(option); + edit: _edit__WEBPACK_IMPORTED_MODULE_1__["default"], + save: function save(props) { + var _props$attributes = props.attributes, + option = _props$attributes.option, + content = _props$attributes.content; + var HeadingIcon = (0,_icons_map__WEBPACK_IMPORTED_MODULE_0__.getIconComponent)(option); return /*#__PURE__*/React.createElement("div", { className: "nintynine-icon-heading" }, /*#__PURE__*/React.createElement("span", { className: "nintynine-icon-heading__heading" - }, /*#__PURE__*/React.createElement(HeadingIcon, null)), /*#__PURE__*/React.createElement(_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_2__.RichText.Content, { + }, /*#__PURE__*/React.createElement(HeadingIcon, null)), /*#__PURE__*/React.createElement(_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_4__.RichText.Content, { tagName: "h4", value: content })); diff --git a/assets/build/js/blocks.js.map b/assets/build/js/blocks.js.map index cbad52f..02e1c4c 100644 --- a/assets/build/js/blocks.js.map +++ b/assets/build/js/blocks.js.map @@ -1 +1 @@ -{"version":3,"file":"js/blocks.js","mappings":"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","sources":["webpack://nintynine/./src/js/gutenberg/blocks/heading-with-icon/edit.js","webpack://nintynine/./src/js/gutenberg/blocks/heading-with-icon/icons-map.js","webpack://nintynine/./src/js/gutenberg/blocks/heading-with-icon/index.js","webpack://nintynine/./src/js/icons/Check.js","webpack://nintynine/./src/js/icons/Cross.js","webpack://nintynine/./src/js/icons/index.js","webpack://nintynine/./src/sass/blocks.scss?92ed","webpack://nintynine/external window \"React\"","webpack://nintynine/external window \"lodash\"","webpack://nintynine/external window [\"wp\",\"blockEditor\"]","webpack://nintynine/external window [\"wp\",\"blocks\"]","webpack://nintynine/external window [\"wp\",\"components\"]","webpack://nintynine/external window [\"wp\",\"i18n\"]","webpack://nintynine/webpack/bootstrap","webpack://nintynine/webpack/runtime/compat get default export","webpack://nintynine/webpack/runtime/define property getters","webpack://nintynine/webpack/runtime/hasOwnProperty shorthand","webpack://nintynine/webpack/runtime/make namespace object","webpack://nintynine/./src/js/blocks.js"],"sourcesContent":["import { RichText, InspectorControls } from '@wordpress/block-editor';\r\nimport { __ } from '@wordpress/i18n';\r\nimport { PanelBody, RadioControl } from '@wordpress/components';\r\nimport { getIconComponent } from \"./icons-map\";\r\n\r\nconst Edit = ( { className, attributes, setAttributes} ) => {\r\n\r\n const { option, content } = attributes;\r\n\r\n const HeadingIcon = getIconComponent( option );\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n setAttributes( { content: content } ) }\r\n placeholder={ __( 'Heading...', 'nintynine' ) }\r\n />\r\n \r\n \r\n {setAttributes( { option } ) } }\r\n />\r\n \r\n \r\n
\r\n )\r\n}\r\n\r\nexport default Edit","import * as SvgIcons from '../../../icons';\r\nimport { isEmpty } from 'lodash';\r\n\r\n/**\r\n * Get icon component.\r\n *\r\n * @param {String} option Option.\r\n *\r\n * @return {*|SvgCheck} SVG Component.\r\n */\r\nexport const getIconComponent = ( option ) => {\r\n\tconst IconsMap = {\r\n\t\tdos: SvgIcons.Check,\r\n\t\tdonts: SvgIcons.Cross,\r\n\t};\r\n\r\n\treturn ! isEmpty( option ) && option in IconsMap\r\n\t\t? IconsMap[ option ]\r\n\t\t: IconsMap.dos;\r\n};","/**\r\n * Heading with Icon block.\r\n *\r\n * @package\r\n */\r\nimport { registerBlockType } from '@wordpress/blocks';\r\nimport { __ } from '@wordpress/i18n';\r\nimport { RichText } from '@wordpress/block-editor';\r\n\r\n\r\nimport Edit from \"./edit\";\r\nimport { getIconComponent } from './icons-map';\r\n\r\nregisterBlockType( 'nintynine-blocks/nintynine-heading-icon', {\r\n\ttitle: __( 'Heading with Icon', 'nintynine' ),\r\n\ticon: 'admin-customizer',\r\n\tdescription: __('Add heading and select icon', 'nintynine'),\r\n\tcategory: 'nintynine',\r\n\tattributes: {\r\n\t\toption: {\r\n\t\t\ttype: 'string',\r\n\t\t\tdefault: 'dos'\r\n\t\t},\r\n\t\tcontent: {\r\n type: 'string',\r\n source: 'html',\r\n selector: 'h4',\r\n\t\t\tdefault: __('Dos', 'nintynine')\r\n },\r\n\t},\r\n\tedit: Edit,\r\n\r\n\tsave({attributes: {option, content} }) {\r\n\t\tconst HeadingIcon = getIconComponent( option );\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t)\r\n\t},\r\n} );","import * as React from \"react\";\nconst SvgCheck = (props) => (\n \n \n \n);\nexport default SvgCheck;\n","import * as React from \"react\";\nconst SvgCross = (props) => (\n \n \n \n);\nexport default SvgCross;\n","export { default as Check } from \"./Check\";\nexport { default as Cross } from \"./Cross\";\n","// extracted by mini-css-extract-plugin\nexport {};","module.exports = window[\"React\"];","module.exports = window[\"lodash\"];","module.exports = window[\"wp\"][\"blockEditor\"];","module.exports = window[\"wp\"][\"blocks\"];","module.exports = window[\"wp\"][\"components\"];","module.exports = window[\"wp\"][\"i18n\"];","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import '../sass/blocks.scss';\r\n\r\n//Blocks\r\nimport './gutenberg/blocks/heading-with-icon';"],"names":["RichText","InspectorControls","__","PanelBody","RadioControl","getIconComponent","Edit","_ref","className","attributes","setAttributes","option","content","HeadingIcon","React","createElement","tagName","value","onChange","placeholder","title","label","help","selected","options","SvgIcons","isEmpty","IconsMap","dos","Check","donts","Cross","registerBlockType","icon","description","category","type","default","source","selector","edit","save","_ref$attributes","Content","SvgCheck","props","_extends","xmlns","xmlSpace","width","height","viewBox","fill","d","SvgCross"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"js/blocks.js","mappings":"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","sources":["webpack://nintynine/./src/js/gutenberg/blocks/heading-with-icon/edit.js","webpack://nintynine/./src/js/gutenberg/blocks/heading-with-icon/icons-map.js","webpack://nintynine/./src/js/gutenberg/blocks/heading-with-icon/index.js","webpack://nintynine/./src/js/icons/Check.js","webpack://nintynine/./src/js/icons/Cross.js","webpack://nintynine/./src/js/icons/index.js","webpack://nintynine/./src/sass/blocks.scss?92ed","webpack://nintynine/external window \"React\"","webpack://nintynine/external window \"lodash\"","webpack://nintynine/external window [\"wp\",\"blockEditor\"]","webpack://nintynine/external window [\"wp\",\"blocks\"]","webpack://nintynine/external window [\"wp\",\"components\"]","webpack://nintynine/external window [\"wp\",\"i18n\"]","webpack://nintynine/webpack/bootstrap","webpack://nintynine/webpack/runtime/compat get default export","webpack://nintynine/webpack/runtime/define property getters","webpack://nintynine/webpack/runtime/hasOwnProperty shorthand","webpack://nintynine/webpack/runtime/make namespace object","webpack://nintynine/./src/js/blocks.js"],"sourcesContent":["import { getIconComponent } from \"./icons-map\";\r\n\r\nimport { PanelBody, RadioControl } from '@wordpress/components';\r\nimport { __ } from '@wordpress/i18n';\r\nimport { RichText, InspectorControls } from '@wordpress/block-editor';\r\n\r\n\r\n/**\r\n * Edit\r\n *\r\n * @param {Object} props Props.\r\n *\r\n * @return {Object} Content.\r\n */\r\nconst Edit = ( props ) => {\r\n\tconst { className, attributes, setAttributes } = props;\r\n\tconst { option, content } = attributes;\r\n\r\n\tconst HeadingIcon = getIconComponent( option );\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t{ /* You can also pass formattingControls={ [ 'bold', 'italic' ] } to allow the content to be made bold or italic, but do not allow other formatting options */ }\r\n\t\t\t setAttributes( { contentVal } ) } // Store updated content as a block attribute\r\n\t\t\t\tplaceholder={ __( 'Heading…', 'nintynine' ) } // Display this text before any content has been added by the user\r\n\t\t\t/>\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t {\r\n\t\t\t\t\t\t\tsetAttributes( { optionVal } );\r\n\t\t\t\t\t\t} }\r\n\t\t\t\t\t/>\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t
\r\n\t);\r\n};\r\n\r\nexport default Edit;\r\n","import * as SvgIcons from '../../../icons';\r\nimport { isEmpty } from 'lodash';\r\n\r\n/**\r\n * Get icon component.\r\n *\r\n * @param {String} option Option.\r\n *\r\n * @return {*|SvgCheck} SVG Component.\r\n */\r\nexport const getIconComponent = ( option ) => {\r\n\tconst IconsMap = {\r\n\t\tdos: SvgIcons.Check,\r\n\t\tdonts: SvgIcons.Cross,\r\n\t};\r\n\r\n\treturn ! isEmpty( option ) && option in IconsMap\r\n\t\t? IconsMap[ option ]\r\n\t\t: IconsMap.dos;\r\n};","/**\r\n * Heading with Icon block.\r\n *\r\n * @package\r\n */\r\n\r\nimport { getIconComponent } from './icons-map';\r\n\r\nimport Edit from \"./edit\";\r\n\r\nimport { __ } from '@wordpress/i18n';\r\nimport { registerBlockType } from '@wordpress/blocks';\r\nimport { RichText } from '@wordpress/block-editor';\r\n\r\n\r\n\r\n\r\n\r\nregisterBlockType( 'nintynine-blocks/nintynine-heading-icon', {\r\n\ttitle: __( 'Heading with Icon', 'nintynine' ),\r\n\ticon: 'admin-customizer',\r\n\tdescription: __('Add heading and select icon', 'nintynine'),\r\n\tcategory: 'nintynine',\r\n\tattributes: {\r\n\t\toption: {\r\n\t\t\ttype: 'string',\r\n\t\t\tdefault: 'dos',\r\n\t\t},\r\n\t\tcontent: {\r\n type: 'string',\r\n source: 'html',\r\n selector: 'h4',\r\n\t\t\tdefault: __('Dos', 'nintynine'),\r\n },\r\n\t},\r\n\tedit: Edit,\r\n\r\n\tsave( props ) {\r\n\t\tconst {\r\n\t\t\tattributes: { option, content },\r\n\t\t} = props;\r\n\t\tconst HeadingIcon = getIconComponent( option );\r\n\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t{ /* Saves

Content added in the editor...

to the database for frontend display */ }\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t);\r\n\t},\r\n} );\r\n","import * as React from \"react\";\nconst SvgCheck = (props) => (\n \n \n \n);\nexport default SvgCheck;\n","import * as React from \"react\";\nconst SvgCross = (props) => (\n \n \n \n);\nexport default SvgCross;\n","export { default as Check } from \"./Check\";\nexport { default as Cross } from \"./Cross\";\n","// extracted by mini-css-extract-plugin\nexport {};","module.exports = window[\"React\"];","module.exports = window[\"lodash\"];","module.exports = window[\"wp\"][\"blockEditor\"];","module.exports = window[\"wp\"][\"blocks\"];","module.exports = window[\"wp\"][\"components\"];","module.exports = window[\"wp\"][\"i18n\"];","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import '../sass/blocks.scss';\r\n\r\n//Blocks\r\nimport './gutenberg/blocks/heading-with-icon';"],"names":["getIconComponent","PanelBody","RadioControl","__","RichText","InspectorControls","Edit","props","className","attributes","setAttributes","option","content","HeadingIcon","React","createElement","tagName","value","onChange","contentVal","placeholder","title","label","help","selected","options","optionVal","SvgIcons","isEmpty","IconsMap","dos","Check","donts","Cross","registerBlockType","icon","description","category","type","default","source","selector","edit","save","_props$attributes","Content","SvgCheck","_extends","xmlns","xmlSpace","width","height","viewBox","fill","d","SvgCross"],"sourceRoot":""} \ No newline at end of file diff --git a/assets/build/js/search.js b/assets/build/js/search.js new file mode 100644 index 0000000..634e9ae --- /dev/null +++ b/assets/build/js/search.js @@ -0,0 +1,1015 @@ +/******/ (function() { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ({ + +/***/ "./src/js/search/constants.js": +/*!************************************!*\ + !*** ./src/js/search/constants.js ***! + \************************************/ +/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ STORE_NAME: function() { return /* binding */ STORE_NAME; } +/* harmony export */ }); +/** + * Constants. + */ + +var STORE_NAME = 'nintynine_search'; + +/***/ }), + +/***/ "./src/js/search/data.js": +/*!*******************************!*\ + !*** ./src/js/search/data.js ***! + \*******************************/ +/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ DEFAULT_STATE: function() { return /* binding */ DEFAULT_STATE; }, +/* harmony export */ store: function() { return /* binding */ store; } +/* harmony export */ }); +/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers */ "./src/js/search/helpers.js"); +/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./constants */ "./src/js/search/constants.js"); +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); } +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } +function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } +function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); } +function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); } +function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } +function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } +function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } +function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +/** + * External dependencies. + */ + +var _window$zustand = window.zustand, + persist = _window$zustand.persist, + create = _window$zustand.create, + stores = _window$zustand.stores; + +/** + * Internal dependencies. + */ + + +/** + * Constants. + */ +var DEFAULT_STATE = { + restApiUrl: '', + rootUrl: '', + url: '', + filterKeys: ['category', 'post_tag'], + filters: {}, + filterIds: [], + pageNo: 1, + resultCount: null, + noOfPages: 0, + resultMarkup: '', + loading: false +}; +var PERSISTENT_STATE_KEYS = []; + +/** + * Initialize. + * + * @param {Object} settings settings. + */ +var initialize = function initialize() { + var _settings$root_url; + var settings = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var stateFromUrl = getStateFromUrl((_settings$root_url = settings === null || settings === void 0 ? void 0 : settings.root_url) !== null && _settings$root_url !== void 0 ? _settings$root_url : {}); + setStateFromUrl(settings || {}, stateFromUrl || {}); + getResult(); +}; + +/** + * Get State From Url. + * + * @param {String} rootUrl Root Url. + * + * @return {Object} data Data containing filters, page no, and url. + */ +var getStateFromUrl = function getStateFromUrl() { + var _data$filters, _data; + var rootUrl = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; + var _getState = getState(), + filterKeys = _getState.filterKeys; + var url = new URL(window.location.href); + var data = {}; + + // Build data from URL. + // Add filters and page no to data. + data = (0,_helpers__WEBPACK_IMPORTED_MODULE_0__.getFiltersFromUrl)(url, filterKeys); + + // Get url with filter selection. + data.url = (0,_helpers__WEBPACK_IMPORTED_MODULE_0__.getUrlWithFilters)((_data$filters = (_data = data) === null || _data === void 0 ? void 0 : _data.filters) !== null && _data$filters !== void 0 ? _data$filters : {}, rootUrl); + return data; +}; + +/** + * Set State From Url. + * + * @param {Object} settings Initial Settings. + * @param {Object} stateFromUrl State From Url. + */ +var setStateFromUrl = function setStateFromUrl() { + var _settings$root_url2, _settings$rest_api_ur, _settings$filter_ids; + var settings = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var stateFromUrl = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + // Set data to state. + setState(_objectSpread({ + rootUrl: (_settings$root_url2 = settings === null || settings === void 0 ? void 0 : settings.root_url) !== null && _settings$root_url2 !== void 0 ? _settings$root_url2 : '', + restApiUrl: (_settings$rest_api_ur = settings === null || settings === void 0 ? void 0 : settings.rest_api_url) !== null && _settings$rest_api_ur !== void 0 ? _settings$rest_api_ur : '', + filterIds: (_settings$filter_ids = settings === null || settings === void 0 ? void 0 : settings.filter_ids) !== null && _settings$filter_ids !== void 0 ? _settings$filter_ids : {}, + loading: true + }, stateFromUrl)); + + // Action: Get result with data from state. + getResult(); +}; + +/** + * Get Result. + */ +var getResult = function getResult() { + var _getState2 = getState(), + restApiUrl = _getState2.restApiUrl, + filters = _getState2.filters, + pageNo = _getState2.pageNo; + if (!restApiUrl) { + return; + } + + // Add query-params to rest api url. + var params = _objectSpread(_objectSpread({}, filters), {}, { + page_no: pageNo + }); + var fetchUrl = restApiUrl + '?' + new URLSearchParams(params).toString(); + fetch(fetchUrl).then(function (response) { + return response.json(); + }).then(function (responseData) { + var _responseData$posts, _responseData$total_p, _responseData$no_of_p, _responseData$total_p2, _responseData$posts2, _responseData$no_of_p2; + var resultMarkup = (0,_helpers__WEBPACK_IMPORTED_MODULE_0__.getResultMarkup)((_responseData$posts = responseData === null || responseData === void 0 ? void 0 : responseData.posts) !== null && _responseData$posts !== void 0 ? _responseData$posts : [], (_responseData$total_p = responseData === null || responseData === void 0 ? void 0 : responseData.total_posts) !== null && _responseData$total_p !== void 0 ? _responseData$total_p : 0); + var loadMoreMarkup = (0,_helpers__WEBPACK_IMPORTED_MODULE_0__.getLoadMoreMarkup)((_responseData$no_of_p = responseData === null || responseData === void 0 ? void 0 : responseData.no_of_pages) !== null && _responseData$no_of_p !== void 0 ? _responseData$no_of_p : 0, pageNo); + setState({ + loading: false, + resultCount: (_responseData$total_p2 = responseData === null || responseData === void 0 ? void 0 : responseData.total_posts) !== null && _responseData$total_p2 !== void 0 ? _responseData$total_p2 : 0, + resultPosts: (_responseData$posts2 = responseData === null || responseData === void 0 ? void 0 : responseData.posts) !== null && _responseData$posts2 !== void 0 ? _responseData$posts2 : [], + resultMarkup: resultMarkup + loadMoreMarkup || '', + noOfPages: (_responseData$no_of_p2 = responseData === null || responseData === void 0 ? void 0 : responseData.no_of_pages) !== null && _responseData$no_of_p2 !== void 0 ? _responseData$no_of_p2 : 0 + }); + }); +}; + +/** + * Add Filter. + * + * @param {Object} currentSelection currentSelection + */ +var addFilter = function addFilter() { + var currentSelection = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var _getState3 = getState(), + filters = _getState3.filters, + rootUrl = _getState3.rootUrl; + var _ref = currentSelection || {}, + key = _ref.key, + value = _ref.value; + + // Get new filter values. + var newFilters = _objectSpread({}, filters); + var filterValues = filters[key] ? [].concat(_toConsumableArray(filters[key]), [value]) : [value]; + newFilters = _objectSpread(_objectSpread({}, newFilters), {}, _defineProperty({}, key, _toConsumableArray(new Set(filterValues)))); + + // Add filter selections to URL and update URL. + var url = (0,_helpers__WEBPACK_IMPORTED_MODULE_0__.getUrlWithFilters)(newFilters, rootUrl); + updateUrl(url); + + /** + * Update state with the new data. + * We set loading to true, before getting results. + */ + setState({ + url: url, + currentSelection: currentSelection, + filters: newFilters, + pageNo: 1, + loading: true + }); + + // Get Result. + getResult(); +}; + +/** + * Delete Filter. + * + * @param currentSelection + */ +var deleteFilter = function deleteFilter() { + var currentSelection = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var _getState4 = getState(), + filters = _getState4.filters, + rootUrl = _getState4.rootUrl; + var _ref2 = currentSelection || {}, + key = _ref2.key, + value = _ref2.value; + var newFilters = _objectSpread({}, filters); + var filterValues = filters[key] || []; + + // Loop through previous filter values and delete the value in question. + filterValues.forEach(function (prevFilterValue, index) { + // If a match is found delete it from the array. + if (prevFilterValue === value) { + filterValues.splice(index, 1); + } + }); + newFilters = _objectSpread(_objectSpread({}, newFilters), {}, _defineProperty({}, key, filterValues)); + + // Delete empty keys. + Object.keys(newFilters).forEach(function (key) { + if (!newFilters[key] || !newFilters[key].length) { + delete newFilters[key]; + } + }); + + // Add filter selections to URL and update URL. + var url = (0,_helpers__WEBPACK_IMPORTED_MODULE_0__.getUrlWithFilters)(newFilters, rootUrl); + updateUrl(url); + setState({ + url: url, + currentSelection: currentSelection, + filters: newFilters, + pageNo: 1, + loading: true + }); + getResult(); +}; + +/** + * Update Url. + * + * @param {string} url Url. + * + * @return {null} Null. + */ +var updateUrl = function updateUrl(url) { + if (!url) { + return null; + } + if (window.history.pushState) { + window.history.pushState({ + path: url + }, '', url); + } else { + window.location.href = url; + } +}; +var loadMorePosts = function loadMorePosts() { + var nextPageNo = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1; + var _getState5 = getState(), + restApiUrl = _getState5.restApiUrl, + resultMarkup = _getState5.resultMarkup, + filters = _getState5.filters; + // Update page no in the fetch url. + var fetchUrl = (0,_helpers__WEBPACK_IMPORTED_MODULE_0__.getUrlWithFilters)(_objectSpread(_objectSpread({}, filters), {}, { + page_no: nextPageNo + }), restApiUrl); + + // Set State. + setState({ + loadingMorePosts: true, + pageNo: nextPageNo + }); + + // Fetch load more results. + fetch(fetchUrl).then(function (response) { + return response.json(); + }).then(function (responseData) { + var _responseData$posts3, _responseData$no_of_p3, _responseData$posts4; + var moreResultMarkup = (0,_helpers__WEBPACK_IMPORTED_MODULE_0__.getResultMarkup)((_responseData$posts3 = responseData === null || responseData === void 0 ? void 0 : responseData.posts) !== null && _responseData$posts3 !== void 0 ? _responseData$posts3 : []); + var loadMoreMarkup = (0,_helpers__WEBPACK_IMPORTED_MODULE_0__.getLoadMoreMarkup)((_responseData$no_of_p3 = responseData === null || responseData === void 0 ? void 0 : responseData.no_of_pages) !== null && _responseData$no_of_p3 !== void 0 ? _responseData$no_of_p3 : 0, nextPageNo); + setState({ + loadingMorePosts: false, + resultPosts: (_responseData$posts4 = responseData === null || responseData === void 0 ? void 0 : responseData.posts) !== null && _responseData$posts4 !== void 0 ? _responseData$posts4 : [], + resultMarkup: resultMarkup + moreResultMarkup + loadMoreMarkup + }); + }); +}; +var clearAllFilters = function clearAllFilters() { + var _getState6 = getState(), + rootUrl = _getState6.rootUrl; + setState({ + loading: true, + filters: {}, + filterIds: [], + currentSelection: {}, + pageNo: 1 + }); + updateUrl(rootUrl); + getResult(); +}; + +/** + * Create store. + */ +var store = create(persist(function () { + return _objectSpread(_objectSpread({}, DEFAULT_STATE), {}, { + initialize: initialize, + addFilter: addFilter, + deleteFilter: deleteFilter, + loadMorePosts: loadMorePosts, + clearAllFilters: clearAllFilters + }); +}, { + name: _constants__WEBPACK_IMPORTED_MODULE_1__.STORE_NAME, + partialize: function partialize(state) { + var persistentState = {}; + PERSISTENT_STATE_KEYS.forEach(function (key) { + persistentState[key] = state[key]; + }); + return persistentState; + } +})); +var getState = store.getState, + setState = store.setState; + +// Add store to window. +stores[_constants__WEBPACK_IMPORTED_MODULE_1__.STORE_NAME] = store; + +/***/ }), + +/***/ "./src/js/search/helpers.js": +/*!**********************************!*\ + !*** ./src/js/search/helpers.js ***! + \**********************************/ +/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ getFiltersFromUrl: function() { return /* binding */ getFiltersFromUrl; }, +/* harmony export */ getLoadMoreMarkup: function() { return /* binding */ getLoadMoreMarkup; }, +/* harmony export */ getResultMarkup: function() { return /* binding */ getResultMarkup; }, +/* harmony export */ getUrlWithFilters: function() { return /* binding */ getUrlWithFilters; } +/* harmony export */ }); +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _objectDestructuringEmpty(t) { if (null == t) throw new TypeError("Cannot destructure " + t); } +function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } +function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } +function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +/* eslint-disable prettier/prettier */ +/** + * Get Filters From Url. + * + * @param {Object} url URl. + * @param {Array} filterKeys Filter keys. + * + * @return {Object} data Data containing filters and pageNo. + */ +var getFiltersFromUrl = function getFiltersFromUrl() { + var url = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var filterKeys = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; + var data = {}; + if (!url || !filterKeys.length) { + return data; + } + + /** + * Build filter's data. + * + * Loop through each filter keys( constant ) and if + * they exist in the url, push them to the filters data. + */ + filterKeys.forEach(function (filterKey) { + var paramValue = url.searchParams.get(filterKey); + + // If the value does not exits, return. + if (!paramValue) { + return; + } + + // Set page no. + if ('pageNo' === filterKey) { + data.pageNo = parseInt(paramValue); + return; + } + + // Get filter values. + var filterValues = paramValue.split(',').map(function (itemValue) { + return parseInt(itemValue); + }); + + // Add paramValue to filters. + data.filters = _objectSpread(_objectSpread({}, data.filters), {}, _defineProperty({}, filterKey, filterValues)); + }); + return data; +}; + +/** + * Get Url by Adding Filters. + * + * @param {Object} filters Filters. + * @param {String} rootUrl Root url. + */ +var getUrlWithFilters = function getUrlWithFilters() { + var _ref; + var filters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : (_ref = {}, _objectDestructuringEmpty(_ref), _ref); + var rootUrl = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; + // Build URL. + var url = new URL(rootUrl); + + // 2.Add the given keys value pairs in search params. + Object.keys(filters).forEach(function (key) { + url.searchParams.set(key, filters[key]); + }); + + // Covert url to string. + url = url.toString(); + return url; +}; + +/** + * Get Results markup. + * + * @param posts + * @return {string} + */ +var getResultMarkup = function getResultMarkup() { + var posts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + if (!Array.isArray(posts) || !posts.length) { + return ''; + } + var img = ''; + var markup = ""; + posts.forEach(function (post) { + var _post$id, _post$permalink, _post$permalink2, _post$title, _post$title2, _post$content, _post$permalink3, _post$title3; + img = post.thumbnail ? post.thumbnail : ''; + markup += "\n\t\t
\n\t\t\t
\n\t\t\t\t\n\t\t\t\t
\n\t\t\t\t\t").concat(img, "\n\t\t\t\t
\n\t\t\t
\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t

").concat((_post$title2 = post === null || post === void 0 ? void 0 : post.title) !== null && _post$title2 !== void 0 ? _post$title2 : '', "

\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t").concat((_post$content = post === null || post === void 0 ? void 0 : post.content) !== null && _post$content !== void 0 ? _post$content : '', "\n\t\t\t\t
\n\t\t\t\t\n\t\t\t\t\tView More\n\t\t\t\t\n\t\t\t
\n\t\t
\n\t\t"); + }); + return markup; +}; +var getLoadMoreMarkup = function getLoadMoreMarkup() { + var noOfPages = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; + var currentPageNo = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1; + if (parseInt(currentPageNo) >= parseInt(noOfPages)) { + return ''; + } + return "\n\t\t\t\t\n\t\t\t"); +}; + +/***/ }), + +/***/ "./src/js/search/index.js": +/*!********************************!*\ + !*** ./src/js/search/index.js ***! + \********************************/ +/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { + +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils */ "./src/js/utils/index.js"); +/* harmony import */ var _data__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./data */ "./src/js/search/data.js"); +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } +/** + * Global variables. + */ + +var _window = window, + customElements = _window.customElements, + HTMLElement = _window.HTMLElement; + +/** + * Initialize data store. + */ + +var getState = _data__WEBPACK_IMPORTED_MODULE_1__.store.getState, + subscribe = _data__WEBPACK_IMPORTED_MODULE_1__.store.subscribe; + +/** + * NintyNineSearch Class. + */ +var NintyNineSearch = /*#__PURE__*/function (_HTMLElement) { + /** + * Constructor. + */ + function NintyNineSearch() { + var _this; + _classCallCheck(this, NintyNineSearch); + _this = _callSuper(this, NintyNineSearch); + + // Initialize State. + var state = getState(); + state.initialize(search_settings); + return _this; + } + _inherits(NintyNineSearch, _HTMLElement); + return _createClass(NintyNineSearch); +}(HTMLElement); +/** + * Clear All Filters. + */ +var NintyNineClearAllFilters = /*#__PURE__*/function (_HTMLElement2) { + /** + * Constructor. + */ + function NintyNineClearAllFilters() { + var _this2; + _classCallCheck(this, NintyNineClearAllFilters); + _this2 = _callSuper(this, NintyNineClearAllFilters); + var _getState = getState(), + clearAllFilters = _getState.clearAllFilters; + _this2.clearAllFiltersButton = _this2.querySelector('button'); + _this2.clearAllFiltersButton.addEventListener('click', function () { + clearAllFilters(); + }); + return _this2; + } + _inherits(NintyNineClearAllFilters, _HTMLElement2); + return _createClass(NintyNineClearAllFilters); +}(HTMLElement); +/** + * NintyNineFilters Class. + */ +var NintyNineFilters = /*#__PURE__*/function (_HTMLElement3) { + function NintyNineFilters() { + _classCallCheck(this, NintyNineFilters); + return _callSuper(this, NintyNineFilters, arguments); + } + _inherits(NintyNineFilters, _HTMLElement3); + return _createClass(NintyNineFilters); +}(HTMLElement); +/** + * NintyNineCheckboxAccordion Class. + */ +var NintyNineCheckboxAccordion = /*#__PURE__*/function (_HTMLElement4) { + /** + * Constructor. + */ + function NintyNineCheckboxAccordion() { + var _this3; + _classCallCheck(this, NintyNineCheckboxAccordion); + _this3 = _callSuper(this, NintyNineCheckboxAccordion); + + // Elements. + _this3.filterKey = _this3.getAttribute('key'); + _this3.content = _this3.querySelector('.checkbox-accordion__content'); + _this3.accordionHandle = _this3.querySelector('.checkbox-accordion__handle'); + if (!_this3.accordionHandle || !_this3.content || !_this3.filterKey) { + return _possibleConstructorReturn(_this3); + } + _this3.accordionHandle.addEventListener('click', function (event) { + return (0,_utils__WEBPACK_IMPORTED_MODULE_0__.toggleAccordionContent)(event, _this3, _this3.content); + }); + return _this3; + } + + /** + * Observe Attributes. + * + * @return {string[]} Attributes to be observed. + */ + _inherits(NintyNineCheckboxAccordion, _HTMLElement4); + return _createClass(NintyNineCheckboxAccordion, [{ + key: "attributeChangedCallback", + value: + /** + * Attributes callback. + * + * Fired on attribute change. + * + * @param {string} name Attribute Name. + * @param {string} oldValue Attribute's Old Value. + * @param {string} newValue Attribute's New Value. + */ + function attributeChangedCallback(name, oldValue, newValue) { + /** + * If the state of this checkbox filter is open, then set then + * active state of this component to true, so it can be opened. + */ + if ('active' === name) { + this.content.style.height = 'auto'; + } else { + this.content.style.height = '0px'; + } + } + }], [{ + key: "observedAttributes", + get: function get() { + return ['active']; + } + }]); +}(HTMLElement); +/** + * NintyNineCheckboxAccordionChild Class. + */ +var NintyNineCheckboxAccordionChild = /*#__PURE__*/function (_HTMLElement5) { + /** + * Constructor. + */ + function NintyNineCheckboxAccordionChild() { + var _this4; + _classCallCheck(this, NintyNineCheckboxAccordionChild); + _this4 = _callSuper(this, NintyNineCheckboxAccordionChild); + _this4.content = _this4.querySelector('.checkbox-accordion__child-content'); + _this4.accordionHandle = _this4.querySelector('.checkbox-accordion__child-handle-icon'); + _this4.inputEl = _this4.querySelector('input'); + + // Subscribe to updates. + subscribe(_this4.update.bind(_this4)); + if (_this4.accordionHandle && _this4.content) { + _this4.accordionHandle.addEventListener('click', function (event) { + return (0,_utils__WEBPACK_IMPORTED_MODULE_0__.toggleAccordionContent)(event, _this4, _this4.content); + }); + } + if (_this4.inputEl) { + _this4.inputEl.addEventListener('click', function (event) { + return _this4.handleCheckboxInputClick(event); + }); + } + return _this4; + } + + /** + * Update the component. + * + * @param {Object} currentState Current state. + */ + _inherits(NintyNineCheckboxAccordionChild, _HTMLElement5); + return _createClass(NintyNineCheckboxAccordionChild, [{ + key: "update", + value: function update() { + var currentState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + if (!this.inputEl) { + return; + } + var filters = currentState.filters; + this.inputKey = this.inputEl.getAttribute('data-key'); + this.inputValue = this.inputEl.getAttribute('value'); + this.selectedFiltersForCurrentkey = filters[this.inputKey] || []; + this.parentEl = this.inputEl.closest('.checkbox-accordion') || {}; + this.parentContentEl = this.inputEl.closest('.checkbox-accordion__child-content') || {}; + + /** + * If the current input value is amongst the selected filters, the check it. + * and set the attributes and styles to open the accordion. + */ + if (this.selectedFiltersForCurrentkey.includes(parseInt(this.inputValue))) { + this.inputEl.checked = true; + this.parentEl.setAttribute('active', true); + if (this.parentContentEl.style) { + this.parentContentEl.style.height = 'auto'; + } + } else { + this.inputEl.checked = false; + this.parentEl.removeAttribute('active'); + } + } + + /** + * Handle Checkbox input click. + * + * @param event + */ + }, { + key: "handleCheckboxInputClick", + value: function handleCheckboxInputClick(event) { + var _getState2 = getState(), + addFilter = _getState2.addFilter, + deleteFilter = _getState2.deleteFilter; + var targetEl = event.target; + this.filterKey = targetEl.getAttribute('data-key'); + if (targetEl.checked) { + addFilter({ + key: this.filterKey, + value: parseInt(targetEl.value) + }); + } else { + deleteFilter({ + key: this.filterKey, + value: parseInt(targetEl.value) + }); + } + } + }]); +}(HTMLElement); +/** + * NintyNineResults Class. + */ +var NintyNineResultsCount = /*#__PURE__*/function (_HTMLElement6) { + /** + * Constructor. + */ + function NintyNineResultsCount() { + var _this5; + _classCallCheck(this, NintyNineResultsCount); + _this5 = _callSuper(this, NintyNineResultsCount); + + // Subscribe to updates. + subscribe(_this5.update.bind(_this5)); + return _this5; + } + _inherits(NintyNineResultsCount, _HTMLElement6); + return _createClass(NintyNineResultsCount, [{ + key: "update", + value: function update() { + var currentState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var resultCount = currentState.resultCount; + if (null !== resultCount) { + this.innerHTML = "Results: ".concat(resultCount, " Posts"); + } + } + }]); +}(HTMLElement); +/** + * NintyNineResults Class. + */ +var NintyNineResults = /*#__PURE__*/function (_HTMLElement7) { + /** + * Constructor. + */ + function NintyNineResults() { + var _this6; + _classCallCheck(this, NintyNineResults); + _this6 = _callSuper(this, NintyNineResults); + + // Subscribe to updates. + subscribe(_this6.update.bind(_this6)); + return _this6; + } + + /** + * Update the component. + * + * @param {Object} currentState Current state. + */ + _inherits(NintyNineResults, _HTMLElement7); + return _createClass(NintyNineResults, [{ + key: "update", + value: function update() { + var currentState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var resultMarkup = currentState.resultMarkup, + loading = currentState.loading; + if (loading) { + this.innerHTML = '

Loading...

'; + } + if (resultMarkup && !loading) { + this.innerHTML = resultMarkup; + } + } + }]); +}(HTMLElement); +/** + * NintyNineLoadMore Class. + */ +var NintyNineLoadMore = /*#__PURE__*/function (_HTMLElement8) { + /** + * Constructor. + */ + function NintyNineLoadMore() { + var _this7; + _classCallCheck(this, NintyNineLoadMore); + _this7 = _callSuper(this, NintyNineLoadMore); + + // Subscribe to updates. + subscribe(_this7.update.bind(_this7)); + _this7.querySelector('button').addEventListener('click', function () { + return _this7.handleLoadMoreButtonClick(); + }); + _this7.nextPageNo = _this7.getAttribute('next-page-no'); + return _this7; + } + _inherits(NintyNineLoadMore, _HTMLElement8); + return _createClass(NintyNineLoadMore, [{ + key: "update", + value: function update() { + var currentState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var pageNo = currentState.pageNo; + if (parseInt(this.nextPageNo) <= parseInt(pageNo)) { + this.remove(); + return null; + } + } + }, { + key: "handleLoadMoreButtonClick", + value: function handleLoadMoreButtonClick() { + var _getState3 = getState(), + loadMorePosts = _getState3.loadMorePosts; + loadMorePosts(this.nextPageNo); + } + }]); +}(HTMLElement); +var NintyNineLoadingMore = /*#__PURE__*/function (_HTMLElement9) { + function NintyNineLoadingMore() { + var _this8; + _classCallCheck(this, NintyNineLoadingMore); + _this8 = _callSuper(this, NintyNineLoadingMore); + // Subscribe to updates. + subscribe(_this8.update.bind(_this8)); + return _this8; + } + _inherits(NintyNineLoadingMore, _HTMLElement9); + return _createClass(NintyNineLoadingMore, [{ + key: "update", + value: function update() { + var currentState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var loadingMorePosts = currentState.loadingMorePosts; + if (loadingMorePosts) { + this.innerHTML = 'Loading more posts...'; + } else { + this.innerHTML = ''; + } + } + }]); +}(HTMLElement); +/** + * Initialize. + */ +customElements.define('nintynine-checkbox-accordion', NintyNineCheckboxAccordion); +customElements.define('nintynine-checkbox-accordion-child', NintyNineCheckboxAccordionChild); +customElements.define('nintynine-clear-all-filters', NintyNineClearAllFilters); +customElements.define('nintynine-filters', NintyNineFilters); +customElements.define('nintynine-results-count', NintyNineResultsCount); +customElements.define('nintynine-results', NintyNineResults); +customElements.define('nintynine-load-more', NintyNineLoadMore); +customElements.define('nintynine-loading-more', NintyNineLoadingMore); +customElements.define('nintynine-search', NintyNineSearch); + +/***/ }), + +/***/ "./src/js/utils/index.js": +/*!*******************************!*\ + !*** ./src/js/utils/index.js ***! + \*******************************/ +/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { + +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ slideElementDown: function() { return /* binding */ slideElementDown; }, +/* harmony export */ slideElementUp: function() { return /* binding */ slideElementUp; }, +/* harmony export */ toggleAccordionContent: function() { return /* binding */ toggleAccordionContent; } +/* harmony export */ }); +/** + * Toggle Accordion Content. + * + * @param {Event} event Event. + * @param {Object} accordionEl Accordion Element + * @param {Object} contentEl Content Element. + * + * @return {null} null + */ +var toggleAccordionContent = function toggleAccordionContent(event, accordionEl, contentEl) { + event.preventDefault(); + event.stopPropagation(); + if (!accordionEl || !contentEl) { + return null; + } + accordionEl.toggleAttribute('active'); + if (!accordionEl.hasAttribute('active')) { + slideElementUp(contentEl, 600); + } else { + slideElementDown(contentEl, 600); + } +}; + +/** + * Slide element down. + * + * @param {Object} element Target element. + * @param {number} duration Animation duration. + * @param {Function} callback Callback function. + */ +var slideElementDown = function slideElementDown(element) { + var duration = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 300; + var callback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; + element.style.height = "".concat(element.scrollHeight, "px"); + setTimeout(function () { + element.style.height = 'auto'; + if (callback) { + callback(); + } + }, duration); +}; + +/** + * Slide element up. + * + * @param {Object} element Target element. + * @param {number} duration Animation duration. + * @param {Function} callback Callback function. + */ +var slideElementUp = function slideElementUp(element) { + var duration = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 300; + var callback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; + element.style.height = "".concat(element.scrollHeight, "px"); + element.offsetHeight; // eslint-disable-line + element.style.height = '0px'; + setTimeout(function () { + element.style.height = null; + if (callback) { + callback(); + } + }, duration); +}; + +/***/ }), + +/***/ "./src/sass/search.scss": +/*!******************************!*\ + !*** ./src/sass/search.scss ***! + \******************************/ +/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { + +__webpack_require__.r(__webpack_exports__); +// extracted by mini-css-extract-plugin + + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/define property getters */ +/******/ !function() { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = function(exports, definition) { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ }(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ !function() { +/******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } +/******/ }(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ !function() { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = function(exports) { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ }(); +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; +/*!**************************!*\ + !*** ./src/js/search.js ***! + \**************************/ +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _search_index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./search/index */ "./src/js/search/index.js"); +/* harmony import */ var _sass_search_scss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../sass/search.scss */ "./src/sass/search.scss"); + + +/******/ })() +; +//# sourceMappingURL=search.js.map \ No newline at end of file diff --git a/assets/build/js/search.js.map b/assets/build/js/search.js.map new file mode 100644 index 0000000..21c3b27 --- /dev/null +++ b/assets/build/js/search.js.map @@ -0,0 +1 @@ +{"version":3,"file":"js/search.js","mappings":"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","sources":["webpack://nintynine/./src/js/search/constants.js","webpack://nintynine/./src/js/search/data.js","webpack://nintynine/./src/js/search/helpers.js","webpack://nintynine/./src/js/search/index.js","webpack://nintynine/./src/js/utils/index.js","webpack://nintynine/./src/sass/search.scss?48b6","webpack://nintynine/webpack/bootstrap","webpack://nintynine/webpack/runtime/define property getters","webpack://nintynine/webpack/runtime/hasOwnProperty shorthand","webpack://nintynine/webpack/runtime/make namespace object","webpack://nintynine/./src/js/search.js"],"sourcesContent":["/**\r\n * Constants.\r\n */\r\n\r\nexport const STORE_NAME = 'nintynine_search';\r\n","/**\r\n * External dependencies.\r\n */\r\nimport { getFiltersFromUrl, getLoadMoreMarkup, getResultMarkup, getUrlWithFilters } from './helpers';\r\n\r\nconst { persist, create, stores } = window.zustand;\r\n\r\n/**\r\n * Internal dependencies.\r\n */\r\nimport { STORE_NAME } from './constants';\r\n\r\n/**\r\n * Constants.\r\n */\r\nexport const DEFAULT_STATE = {\r\n\trestApiUrl: '',\r\n\trootUrl: '',\r\n\turl: '',\r\n\tfilterKeys: [ 'category', 'post_tag' ],\r\n\tfilters: {},\r\n\tfilterIds: [],\r\n\tpageNo: 1,\r\n\tresultCount: null,\r\n\tnoOfPages: 0,\r\n\tresultMarkup: '',\r\n\tloading: false,\r\n};\r\nconst PERSISTENT_STATE_KEYS = [];\r\n\r\n/**\r\n * Initialize.\r\n *\r\n * @param {Object} settings settings.\r\n */\r\nconst initialize = ( settings = {} ) => {\r\n\tconst stateFromUrl = getStateFromUrl( settings?.root_url ?? {} );\r\n\tsetStateFromUrl( settings || {}, stateFromUrl || {} );\r\n\tgetResult();\r\n};\r\n\r\n/**\r\n * Get State From Url.\r\n *\r\n * @param {String} rootUrl Root Url.\r\n *\r\n * @return {Object} data Data containing filters, page no, and url.\r\n */\r\nconst getStateFromUrl = ( rootUrl = '' ) => {\r\n\tconst { filterKeys } = getState();\r\n\tconst url = new URL( window.location.href );\r\n\tlet data = {};\r\n\r\n\t// Build data from URL.\r\n\t// Add filters and page no to data.\r\n\tdata = getFiltersFromUrl( url, filterKeys );\r\n\r\n\t// Get url with filter selection.\r\n\tdata.url = getUrlWithFilters( data?.filters ?? {}, rootUrl );\r\n\t\r\n\treturn data;\r\n};\r\n\r\n/**\r\n * Set State From Url.\r\n *\r\n * @param {Object} settings Initial Settings.\r\n * @param {Object} stateFromUrl State From Url.\r\n */\r\nconst setStateFromUrl = ( settings = {}, stateFromUrl = {} ) => {\r\n\t\r\n\t// Set data to state.\r\n\tsetState( {\r\n\t\trootUrl: settings?.root_url ?? '',\r\n\t\trestApiUrl: settings?.rest_api_url ?? '',\r\n\t\tfilterIds: settings?.filter_ids ?? {},\r\n\t\tloading: true,\r\n\t\t...stateFromUrl,\r\n\t} );\r\n\r\n\t// Action: Get result with data from state.\r\n\tgetResult();\r\n};\r\n\r\n/**\r\n * Get Result.\r\n */\r\nconst getResult = () => {\r\n\tconst { restApiUrl, filters, pageNo } = getState();\r\n\tif ( ! restApiUrl ) {\r\n\t\treturn;\r\n\t}\r\n\t\r\n\t// Add query-params to rest api url.\r\n\tconst params = {\r\n\t\t...filters,\r\n\t\tpage_no: pageNo,\r\n\t};\r\n\tconst fetchUrl = restApiUrl + '?' + ( new URLSearchParams( params ) ).toString();\r\n\t\r\n\tfetch( fetchUrl )\r\n\t\t.then( ( response ) => response.json() )\r\n\t\t.then( ( responseData ) => {\r\n\t\t\tconst resultMarkup = getResultMarkup( responseData?.posts ?? [], responseData?.total_posts ?? 0 );\r\n\t\t\tconst loadMoreMarkup = getLoadMoreMarkup( responseData?.no_of_pages ?? 0, pageNo );\r\n\t\t\tsetState( {\r\n\t\t\t\tloading: false,\r\n\t\t\t\tresultCount: responseData?.total_posts ?? 0,\r\n\t\t\t\tresultPosts: responseData?.posts ?? [],\r\n\t\t\t\tresultMarkup: resultMarkup + loadMoreMarkup || '',\r\n\t\t\t\tnoOfPages: responseData?.no_of_pages ?? 0,\r\n\t\t\t} );\r\n\t\t} );\r\n};\r\n\r\n/**\r\n * Add Filter.\r\n *\r\n * @param {Object} currentSelection currentSelection\r\n */\r\nconst addFilter = ( currentSelection = {} ) => {\r\n\tconst { filters, rootUrl } = getState();\r\n\tconst { key, value } = currentSelection || {};\r\n\t\r\n\t// Get new filter values.\r\n\tlet newFilters = { ...filters };\r\n\tconst filterValues = filters[ key ] ? [ ...filters[ key ], value ] : [ value ];\r\n\tnewFilters = {\r\n\t\t...newFilters,\r\n\t\t[ key ]: [ ...new Set( filterValues ) ],\r\n\t};\r\n\t\r\n\t// Add filter selections to URL and update URL.\r\n\tconst url = getUrlWithFilters( newFilters, rootUrl );\r\n\tupdateUrl( url );\r\n\t\r\n\t/**\r\n\t * Update state with the new data.\r\n\t * We set loading to true, before getting results.\r\n\t */\r\n\tsetState( {\r\n\t\turl,\r\n\t\tcurrentSelection,\r\n\t\tfilters: newFilters,\r\n\t\tpageNo: 1,\r\n\t\tloading: true,\r\n\t} );\r\n\t\r\n\t// Get Result.\r\n\tgetResult();\r\n};\r\n\r\n/**\r\n * Delete Filter.\r\n *\r\n * @param currentSelection\r\n */\r\nconst deleteFilter = ( currentSelection = {} ) => {\r\n\tconst { filters, rootUrl } = getState();\r\n\tconst { key, value } = currentSelection || {};\r\n\t\r\n\tlet newFilters = { ...filters };\r\n\tlet filterValues = filters[ key ] || [];\r\n\t\r\n\t// Loop through previous filter values and delete the value in question.\r\n\tfilterValues.forEach( ( prevFilterValue, index ) => {\r\n\t\t// If a match is found delete it from the array.\r\n\t\tif ( prevFilterValue === value ) {\r\n\t\t\tfilterValues.splice( index, 1 );\r\n\t\t}\r\n\t} );\r\n\t\r\n\tnewFilters = {\r\n\t\t...newFilters,\r\n\t\t[ key ]: filterValues,\r\n\t};\r\n\t\r\n\t// Delete empty keys.\r\n\tObject.keys( newFilters ).forEach( ( key ) => {\r\n\t\tif ( ! newFilters[ key ] || ! newFilters[ key ].length ) {\r\n\t\t\tdelete newFilters[ key ];\r\n\t\t}\r\n\t} );\r\n\t\r\n\t// Add filter selections to URL and update URL.\r\n\tconst url = getUrlWithFilters( newFilters, rootUrl );\r\n\tupdateUrl( url );\r\n\t\r\n\tsetState( {\r\n\t\turl,\r\n\t\tcurrentSelection,\r\n\t\tfilters: newFilters,\r\n\t\tpageNo: 1,\r\n\t\tloading: true,\r\n\t} );\r\n\t\r\n\tgetResult();\r\n}\r\n\r\n/**\r\n * Update Url.\r\n *\r\n * @param {string} url Url.\r\n *\r\n * @return {null} Null.\r\n */\r\nconst updateUrl = ( url ) => {\r\n\tif ( ! url ) {\r\n\t\treturn null;\r\n\t}\r\n\t\r\n\tif ( window.history.pushState ) {\r\n\t\twindow.history.pushState( { path: url }, '', url );\r\n\t} else {\r\n\t\twindow.location.href = url;\r\n\t}\r\n};\r\n\r\nconst loadMorePosts = ( nextPageNo = 1 ) => {\r\n\tconst { restApiUrl, resultMarkup, filters } = getState();\r\n\t// Update page no in the fetch url.\r\n\tconst fetchUrl = getUrlWithFilters( { ...filters, page_no: nextPageNo }, restApiUrl );\r\n\t\r\n\t// Set State.\r\n\tsetState({\r\n\t\tloadingMorePosts: true,\r\n\t\tpageNo: nextPageNo,\r\n\t});\r\n\t\r\n\t// Fetch load more results.\r\n\tfetch( fetchUrl )\r\n\t\t.then( ( response ) => response.json() )\r\n\t\t.then( ( responseData ) => {\r\n\t\t\tconst moreResultMarkup = getResultMarkup( responseData?.posts ?? [] );\r\n\t\t\tconst loadMoreMarkup = getLoadMoreMarkup( responseData?.no_of_pages ?? 0, nextPageNo );\r\n\t\t\tsetState( {\r\n\t\t\t\tloadingMorePosts: false,\r\n\t\t\t\tresultPosts: responseData?.posts ?? [],\r\n\t\t\t\tresultMarkup: resultMarkup + moreResultMarkup + loadMoreMarkup,\r\n\t\t\t} );\r\n\t} );\r\n};\r\n\r\nconst clearAllFilters = () => {\r\n\tconst { rootUrl } = getState();\r\n\tsetState({\r\n\t\tloading: true,\r\n\t\tfilters: {},\r\n\t\tfilterIds: [],\r\n\t\tcurrentSelection: {},\r\n\t\tpageNo: 1,\r\n\t});\r\n\t\r\n\tupdateUrl( rootUrl );\r\n\t\r\n\tgetResult();\r\n};\r\n\r\n/**\r\n * Create store.\r\n */\r\nexport const store = create(\r\n\tpersist(\r\n\t\t() => ( {\r\n\t\t\t...DEFAULT_STATE,\r\n\t\t\tinitialize,\r\n\t\t\taddFilter,\r\n\t\t\tdeleteFilter,\r\n\t\t\tloadMorePosts,\r\n\t\t\tclearAllFilters,\r\n\t\t} ),\r\n\t\t{\r\n\t\t\tname: STORE_NAME,\r\n\t\t\tpartialize: ( state ) => {\r\n\t\t\t\tconst persistentState = {};\r\n\t\t\t\tPERSISTENT_STATE_KEYS.forEach( ( key ) => {\r\n\t\t\t\t\tpersistentState[ key ] = state[ key ];\r\n\t\t\t\t} );\r\n\t\t\t\treturn persistentState;\r\n\t\t\t},\r\n\t\t},\r\n\t),\r\n);\r\nconst { getState, setState } = store;\r\n\r\n// Add store to window.\r\nstores[ STORE_NAME ] = store;\r\n","/* eslint-disable prettier/prettier */\r\n/**\r\n * Get Filters From Url.\r\n *\r\n * @param {Object} url URl.\r\n * @param {Array} filterKeys Filter keys.\r\n *\r\n * @return {Object} data Data containing filters and pageNo.\r\n */\r\nexport const getFiltersFromUrl = ( url = {}, filterKeys = [] ) => {\r\n\tconst data = {};\r\n\t\r\n\tif ( ! url || ! filterKeys.length ) {\r\n\t\treturn data;\r\n\t}\r\n\t\r\n\t/**\r\n\t * Build filter's data.\r\n\t *\r\n\t * Loop through each filter keys( constant ) and if\r\n\t * they exist in the url, push them to the filters data.\r\n\t */\r\n\tfilterKeys.forEach( ( filterKey ) => {\r\n\t\tconst paramValue = url.searchParams.get( filterKey );\r\n\t\t\r\n\t\t// If the value does not exits, return.\r\n\t\tif ( ! paramValue ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t\r\n\t\t// Set page no.\r\n\t\tif ( 'pageNo' === filterKey ) {\r\n\t\t\tdata.pageNo = parseInt( paramValue );\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t\r\n\t\t// Get filter values.\r\n\t\tconst filterValues = paramValue.split( ',' )\r\n\t\t\t.map( ( itemValue ) => parseInt( itemValue ) );\r\n\t\t\r\n\t\t// Add paramValue to filters.\r\n\t\tdata.filters = {\r\n\t\t\t...data.filters,\r\n\t\t\t[ filterKey ]: filterValues,\r\n\t\t};\r\n\t} );\r\n\t\r\n\treturn data;\r\n};\r\n\r\n/**\r\n * Get Url by Adding Filters.\r\n *\r\n * @param {Object} filters Filters.\r\n * @param {String} rootUrl Root url.\r\n */\r\nexport const getUrlWithFilters = ( filters = {} = {}, rootUrl = '' ) => {\r\n\t\r\n\t// Build URL.\r\n\tlet url = new URL( rootUrl );\r\n\t\r\n\t// 2.Add the given keys value pairs in search params.\r\n\tObject.keys( filters ).forEach( ( key ) => {\r\n\t\turl.searchParams.set( key, filters[ key ] );\r\n\t} );\r\n\t\r\n\t// Covert url to string.\r\n\turl = url.toString();\r\n\t\r\n\treturn url;\r\n};\r\n\r\n/**\r\n * Get Results markup.\r\n *\r\n * @param posts\r\n * @return {string}\r\n */\r\nexport const getResultMarkup = ( posts = [] ) => {\r\n\tif ( ! Array.isArray( posts ) || ! posts.length ) {\r\n\t\treturn '';\r\n\t}\r\n\t\r\n\tlet img = '';\r\n\tlet markup = ``;\r\n\t\r\n\tposts.forEach( post => {\r\n\t\timg = post.thumbnail ? post.thumbnail : '';\r\n\t\tmarkup += `\r\n\t\t
\r\n\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t\t\t${ img }\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t\t

${ post?.title ?? '' }

\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t${ post?.content ?? '' }\r\n\t\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t\tView More\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t
\r\n\t\t`;\r\n\t} );\r\n\t\r\n\treturn markup;\r\n};\r\n\r\nexport const getLoadMoreMarkup = ( noOfPages = 0, currentPageNo = 1 ) => {\r\n\tif ( parseInt( currentPageNo ) >= parseInt( noOfPages ) ) {\r\n\t\treturn '';\r\n\t}\r\n\t\r\n\treturn `\r\n\t\t\t\t\r\n\t\t\t`;\r\n}\r\n","/**\r\n * Global variables.\r\n */\r\nimport { toggleAccordionContent } from '../utils';\r\n\r\nconst { customElements, HTMLElement } = window;\r\n\r\n/**\r\n * Initialize data store.\r\n */\r\nimport { store } from './data';\r\nconst { getState, subscribe } = store;\r\n\r\n/**\r\n * NintyNineSearch Class.\r\n */\r\nclass NintyNineSearch extends HTMLElement {\r\n\t/**\r\n\t * Constructor.\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\t\r\n\t\t// Initialize State.\r\n\t\tconst state = getState();\r\n\t\tstate.initialize( search_settings );\r\n\t}\r\n}\r\n\r\n/**\r\n * Clear All Filters.\r\n */\r\nclass NintyNineClearAllFilters extends HTMLElement {\r\n\t/**\r\n\t * Constructor.\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\t\r\n\t\tconst { clearAllFilters } = getState();\r\n\t\tthis.clearAllFiltersButton = this.querySelector( 'button' );\r\n\t\t\r\n\t\tthis.clearAllFiltersButton.addEventListener( 'click', () => {\r\n\t\t\tclearAllFilters();\r\n\t\t} );\r\n\t}\r\n}\r\n\r\n/**\r\n * NintyNineFilters Class.\r\n */\r\nclass NintyNineFilters extends HTMLElement {}\r\n\r\n/**\r\n * NintyNineCheckboxAccordion Class.\r\n */\r\nclass NintyNineCheckboxAccordion extends HTMLElement {\r\n\t/**\r\n\t * Constructor.\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\t\r\n\t\t// Elements.\r\n\t\tthis.filterKey = this.getAttribute( 'key' );\r\n\t\tthis.content = this.querySelector( '.checkbox-accordion__content' );\r\n\t\tthis.accordionHandle = this.querySelector( '.checkbox-accordion__handle' );\r\n\t\t\r\n\t\tif ( ! this.accordionHandle || ! this.content || ! this.filterKey ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t\r\n\t\tthis.accordionHandle.addEventListener( 'click', ( event ) => toggleAccordionContent( event, this, this.content ) );\r\n\t}\r\n\t\r\n\t/**\r\n\t * Observe Attributes.\r\n\t *\r\n\t * @return {string[]} Attributes to be observed.\r\n\t */\r\n\tstatic get observedAttributes() {\r\n\t\treturn [ 'active' ];\r\n\t}\r\n\t\r\n\t/**\r\n\t * Attributes callback.\r\n\t *\r\n\t * Fired on attribute change.\r\n\t *\r\n\t * @param {string} name Attribute Name.\r\n\t * @param {string} oldValue Attribute's Old Value.\r\n\t * @param {string} newValue Attribute's New Value.\r\n\t */\r\n\tattributeChangedCallback( name, oldValue, newValue ) {\r\n\t\t/**\r\n\t\t * If the state of this checkbox filter is open, then set then\r\n\t\t * active state of this component to true, so it can be opened.\r\n\t\t */\r\n\t\tif ( 'active' === name ) {\r\n\t\t\tthis.content.style.height = 'auto';\r\n\t\t} else {\r\n\t\t\tthis.content.style.height = '0px';\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * NintyNineCheckboxAccordionChild Class.\r\n */\r\nclass NintyNineCheckboxAccordionChild extends HTMLElement {\r\n\t/**\r\n\t * Constructor.\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\t\r\n\t\tthis.content = this.querySelector( '.checkbox-accordion__child-content' );\r\n\t\tthis.accordionHandle = this.querySelector( '.checkbox-accordion__child-handle-icon' );\r\n\t\tthis.inputEl = this.querySelector('input');\r\n\r\n\t\t// Subscribe to updates.\r\n\t\tsubscribe( this.update.bind( this ) );\r\n\t\t\r\n\t\tif ( this.accordionHandle && this.content ) {\r\n\t\t\tthis.accordionHandle.addEventListener( 'click', ( event ) => toggleAccordionContent( event, this, this.content ) );\r\n\t\t}\r\n\t\tif ( this.inputEl ) {\r\n\t\t\tthis.inputEl.addEventListener( 'click', ( event ) => this.handleCheckboxInputClick( event ) );\r\n\t\t}\r\n\t}\r\n\t\r\n\t/**\r\n\t * Update the component.\r\n\t *\r\n\t * @param {Object} currentState Current state.\r\n\t */\r\n\tupdate( currentState = {} ) {\r\n\t\t\r\n\t\tif ( ! this.inputEl ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst { filters } = currentState;\r\n\t\tthis.inputKey = this.inputEl.getAttribute( 'data-key' );\r\n\t\tthis.inputValue = this.inputEl.getAttribute( 'value' );\r\n\t\tthis.selectedFiltersForCurrentkey = filters[ this.inputKey ] || [];\r\n\t\tthis.parentEl = this.inputEl.closest( '.checkbox-accordion' ) || {};\r\n\t\tthis.parentContentEl = this.inputEl.closest( '.checkbox-accordion__child-content' ) || {};\r\n\t\t\r\n\t\t/**\r\n\t\t * If the current input value is amongst the selected filters, the check it.\r\n\t\t * and set the attributes and styles to open the accordion.\r\n\t\t */\r\n\t\tif ( this.selectedFiltersForCurrentkey.includes( parseInt( this.inputValue ) ) ) {\r\n\t\t\tthis.inputEl.checked = true;\r\n\t\t\tthis.parentEl.setAttribute( 'active', true );\r\n\t\t\tif ( this.parentContentEl.style ) {\r\n\t\t\t\tthis.parentContentEl.style.height = 'auto';\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tthis.inputEl.checked = false;\r\n\t\t\tthis.parentEl.removeAttribute( 'active' );\r\n\t\t}\r\n\t}\r\n\t\r\n\t/**\r\n\t * Handle Checkbox input click.\r\n\t *\r\n\t * @param event\r\n\t */\r\n\thandleCheckboxInputClick( event ) {\r\n\t\tconst { addFilter, deleteFilter } = getState();\r\n\t\tconst targetEl = event.target;\r\n\t\tthis.filterKey = targetEl.getAttribute('data-key');\r\n\t\t\r\n\t\tif ( targetEl.checked ) {\r\n\t\t\taddFilter({\r\n\t\t\t\tkey: this.filterKey,\r\n\t\t\t\tvalue: parseInt( targetEl.value ),\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tdeleteFilter({\r\n\t\t\t\tkey: this.filterKey,\r\n\t\t\t\tvalue: parseInt( targetEl.value ),\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * NintyNineResults Class.\r\n */\r\nclass NintyNineResultsCount extends HTMLElement {\r\n\t/**\r\n\t * Constructor.\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\t\r\n\t\t// Subscribe to updates.\r\n\t\tsubscribe( this.update.bind( this ) );\r\n\t}\r\n\t\r\n\tupdate( currentState = {} ) {\r\n\t\tconst { resultCount } = currentState;\r\n\t\tif ( null !== resultCount ) {\r\n\t\t\tthis.innerHTML = `Results: ${resultCount} Posts`;\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * NintyNineResults Class.\r\n */\r\nclass NintyNineResults extends HTMLElement {\r\n\t/**\r\n\t * Constructor.\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\t\r\n\t\t// Subscribe to updates.\r\n\t\tsubscribe( this.update.bind( this ) );\r\n\t}\r\n\t\r\n\t/**\r\n\t * Update the component.\r\n\t *\r\n\t * @param {Object} currentState Current state.\r\n\t */\r\n\tupdate( currentState = {} ) {\r\n\t\tconst { resultMarkup, loading } = currentState;\r\n\t\tif ( loading ) {\r\n\t\t\tthis.innerHTML = '

Loading...

';\r\n\t\t}\r\n\t\tif ( resultMarkup && ! loading ) {\r\n\t\t\tthis.innerHTML = resultMarkup;\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * NintyNineLoadMore Class.\r\n */\r\nclass NintyNineLoadMore extends HTMLElement {\r\n\t/**\r\n\t * Constructor.\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\t\r\n\t\t// Subscribe to updates.\r\n\t\tsubscribe( this.update.bind( this ) );\r\n\t\t\r\n\t\tthis.querySelector( 'button' ).addEventListener( 'click', () => this.handleLoadMoreButtonClick() );\r\n\t\tthis.nextPageNo = this.getAttribute( 'next-page-no' );\r\n\t}\r\n\t\r\n\tupdate( currentState = {} ) {\r\n\t\tconst { pageNo } = currentState;\r\n\t\tif ( parseInt( this.nextPageNo ) <= parseInt( pageNo ) ) {\r\n\t\t\tthis.remove();\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\t\r\n\t}\r\n\t\r\n\thandleLoadMoreButtonClick() {\r\n\t\tconst { loadMorePosts } = getState();\r\n\t\tloadMorePosts( this.nextPageNo );\r\n\t}\r\n}\r\n\r\nclass NintyNineLoadingMore extends HTMLElement {\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\t// Subscribe to updates.\r\n\t\tsubscribe( this.update.bind( this ) );\r\n\t}\r\n\t\r\n\tupdate( currentState = {} ) {\r\n\t\tconst { loadingMorePosts } = currentState;\r\n\t\tif ( loadingMorePosts ) {\r\n\t\t\tthis.innerHTML = 'Loading more posts...';\r\n\t\t} else {\r\n\t\t\tthis.innerHTML = '';\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * Initialize.\r\n */\r\ncustomElements.define( 'nintynine-checkbox-accordion', NintyNineCheckboxAccordion );\r\ncustomElements.define( 'nintynine-checkbox-accordion-child', NintyNineCheckboxAccordionChild );\r\ncustomElements.define( 'nintynine-clear-all-filters', NintyNineClearAllFilters );\r\ncustomElements.define( 'nintynine-filters', NintyNineFilters );\r\ncustomElements.define( 'nintynine-results-count', NintyNineResultsCount );\r\ncustomElements.define( 'nintynine-results', NintyNineResults );\r\ncustomElements.define( 'nintynine-load-more', NintyNineLoadMore );\r\ncustomElements.define( 'nintynine-loading-more', NintyNineLoadingMore );\r\ncustomElements.define( 'nintynine-search', NintyNineSearch );\r\n","/**\r\n * Toggle Accordion Content.\r\n *\r\n * @param {Event} event Event.\r\n * @param {Object} accordionEl Accordion Element\r\n * @param {Object} contentEl Content Element.\r\n *\r\n * @return {null} null\r\n */\r\nexport const toggleAccordionContent = ( event, accordionEl, contentEl ) => {\r\n\tevent.preventDefault();\r\n\tevent.stopPropagation();\r\n\t\r\n\tif ( ! accordionEl || ! contentEl ) {\r\n\t\treturn null;\r\n\t}\r\n\t\r\n\taccordionEl.toggleAttribute( 'active' );\r\n\t\r\n\tif ( ! accordionEl.hasAttribute( 'active' ) ) {\r\n\t\tslideElementUp( contentEl, 600 );\r\n\t} else {\r\n\t\tslideElementDown( contentEl, 600 );\r\n\t}\r\n};\r\n\r\n/**\r\n * Slide element down.\r\n *\r\n * @param {Object} element Target element.\r\n * @param {number} duration Animation duration.\r\n * @param {Function} callback Callback function.\r\n */\r\nexport const slideElementDown = ( element, duration = 300, callback = null ) => {\r\n\telement.style.height = `${ element.scrollHeight }px`;\r\n\tsetTimeout( () => {\r\n\t\telement.style.height = 'auto';\r\n\t\tif ( callback ) {\r\n\t\t\tcallback();\r\n\t\t}\r\n\t}, duration );\r\n};\r\n\r\n/**\r\n * Slide element up.\r\n *\r\n * @param {Object} element Target element.\r\n * @param {number} duration Animation duration.\r\n * @param {Function} callback Callback function.\r\n */\r\nexport const slideElementUp = ( element, duration = 300, callback = null ) => {\r\n\telement.style.height = `${ element.scrollHeight }px`;\r\n\telement.offsetHeight; // eslint-disable-line\r\n\telement.style.height = '0px';\r\n\tsetTimeout( () => {\r\n\t\telement.style.height = null;\r\n\t\tif ( callback ) {\r\n\t\t\tcallback();\r\n\t\t}\r\n\t}, duration );\r\n};\r\n","// extracted by mini-css-extract-plugin\nexport {};","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import './search/index';\r\nimport '../sass/search.scss';\r\n"],"names":["STORE_NAME","getFiltersFromUrl","getLoadMoreMarkup","getResultMarkup","getUrlWithFilters","_window$zustand","window","zustand","persist","create","stores","DEFAULT_STATE","restApiUrl","rootUrl","url","filterKeys","filters","filterIds","pageNo","resultCount","noOfPages","resultMarkup","loading","PERSISTENT_STATE_KEYS","initialize","_settings$root_url","settings","arguments","length","undefined","stateFromUrl","getStateFromUrl","root_url","setStateFromUrl","getResult","_data$filters","_data","_getState","getState","URL","location","href","data","_settings$root_url2","_settings$rest_api_ur","_settings$filter_ids","setState","_objectSpread","rest_api_url","filter_ids","_getState2","params","page_no","fetchUrl","URLSearchParams","toString","fetch","then","response","json","responseData","_responseData$posts","_responseData$total_p","_responseData$no_of_p","_responseData$total_p2","_responseData$posts2","_responseData$no_of_p2","posts","total_posts","loadMoreMarkup","no_of_pages","resultPosts","addFilter","currentSelection","_getState3","_ref","key","value","newFilters","filterValues","concat","_toConsumableArray","_defineProperty","Set","updateUrl","deleteFilter","_getState4","_ref2","forEach","prevFilterValue","index","splice","Object","keys","history","pushState","path","loadMorePosts","nextPageNo","_getState5","loadingMorePosts","_responseData$posts3","_responseData$no_of_p3","_responseData$posts4","moreResultMarkup","clearAllFilters","_getState6","store","name","partialize","state","persistentState","filterKey","paramValue","searchParams","get","parseInt","split","map","itemValue","_objectDestructuringEmpty","set","Array","isArray","img","markup","post","_post$id","_post$permalink","_post$permalink2","_post$title","_post$title2","_post$content","_post$permalink3","_post$title3","thumbnail","id","permalink","title","content","currentPageNo","toggleAccordionContent","_window","customElements","HTMLElement","subscribe","NintyNineSearch","_HTMLElement","_this","_classCallCheck","_callSuper","search_settings","_inherits","_createClass","NintyNineClearAllFilters","_HTMLElement2","_this2","clearAllFiltersButton","querySelector","addEventListener","NintyNineFilters","_HTMLElement3","NintyNineCheckboxAccordion","_HTMLElement4","_this3","getAttribute","accordionHandle","_possibleConstructorReturn","event","attributeChangedCallback","oldValue","newValue","style","height","NintyNineCheckboxAccordionChild","_HTMLElement5","_this4","inputEl","update","bind","handleCheckboxInputClick","currentState","inputKey","inputValue","selectedFiltersForCurrentkey","parentEl","closest","parentContentEl","includes","checked","setAttribute","removeAttribute","targetEl","target","NintyNineResultsCount","_HTMLElement6","_this5","innerHTML","NintyNineResults","_HTMLElement7","_this6","NintyNineLoadMore","_HTMLElement8","_this7","handleLoadMoreButtonClick","remove","NintyNineLoadingMore","_HTMLElement9","_this8","define","accordionEl","contentEl","preventDefault","stopPropagation","toggleAttribute","hasAttribute","slideElementUp","slideElementDown","element","duration","callback","scrollHeight","setTimeout","offsetHeight"],"sourceRoot":""} \ No newline at end of file diff --git a/assets/package-lock.json b/assets/package-lock.json index e1535ec..d04669d 100644 --- a/assets/package-lock.json +++ b/assets/package-lock.json @@ -45,6 +45,9 @@ "sass-loader": "^16.0.0", "sass-mq": "^5.0.1", "style-loader": "^4.0.0", + "stylelint": "^16.9.0", + "stylelint-config-wordpress": "^17.0.0", + "stylelint-webpack-plugin": "^5.0.1", "uglifyjs-webpack-plugin": "^2.2.0", "webpack": "^5.93.0", "webpack-cli": "^5.1.4" @@ -1869,20 +1872,90 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, - "node_modules/@csstools/selector-specificity": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz", - "integrity": "sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==", + "node_modules/@csstools/css-parser-algorithms": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.1.tgz", + "integrity": "sha512-lSquqZCHxDfuTg/Sk2hiS0mcSFCEBuj49JfzPHJogDBT0mGCyY5A1AQzBWngitrp7i1/HAZpIgzF/VjhOEIJIg==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "engines": { - "node": "^14 || ^16 || >=18" + "node": ">=18" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" + "peerDependencies": { + "@csstools/css-tokenizer": "^3.0.1" + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.1.tgz", + "integrity": "sha512-UBqaiu7kU0lfvaP982/o3khfXccVlHPWp0/vwwiIgDF0GmqqqxoiXC/6FCjlS9u92f7CoEz6nXKQnrn1kIAkOw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@csstools/media-query-list-parser": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-3.0.1.tgz", + "integrity": "sha512-HNo8gGD02kHmcbX6PvCoUuOQvn4szyB9ca63vZHKX5A81QytgDG4oxG4IaEfHTlEZSZ6MjPEMWIVU+zF2PZcgw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": ">=18" }, "peerDependencies": { - "postcss-selector-parser": "^6.0.10" + "@csstools/css-parser-algorithms": "^3.0.1", + "@csstools/css-tokenizer": "^3.0.1" + } + }, + "node_modules/@csstools/selector-specificity": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-4.0.0.tgz", + "integrity": "sha512-189nelqtPd8++phaHNwYovKZI0FOzH1vQEE3QhHHkNIGrg5fSs9CbYP3RvfEH5geztnIA9Jwq91wyOIwAW5JIQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^6.1.0" } }, "node_modules/@discoveryjs/json-ext": { @@ -1894,6 +1967,16 @@ "node": ">=10.0.0" } }, + "node_modules/@dual-bundle/import-meta-resolve": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@dual-bundle/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", + "integrity": "sha512-+nxncfwHM5SgAtrVzgpzJOI1ol0PkumhVo469KCf9lUi21IGcY90G98VuHm9VRrUypmAzawAHO9bs6hqeADaVg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/@emotion/babel-plugin": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.12.0.tgz", @@ -6809,6 +6892,22 @@ "react-dom": "^18.0.0" } }, + "node_modules/@wordpress/scripts/node_modules/@csstools/selector-specificity": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz", + "integrity": "sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==", + "dev": true, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss-selector-parser": "^6.0.10" + } + }, "node_modules/@wordpress/scripts/node_modules/@es-joy/jsdoccomment": { "version": "0.41.0", "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.41.0.tgz", @@ -7021,6 +7120,15 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, + "node_modules/@wordpress/scripts/node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/@wordpress/scripts/node_modules/babel-loader": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", @@ -7040,6 +7148,12 @@ "webpack": ">=2" } }, + "node_modules/@wordpress/scripts/node_modules/balanced-match": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", + "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", + "dev": true + }, "node_modules/@wordpress/scripts/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -7236,6 +7350,12 @@ "node": ">=6.0.0" } }, + "node_modules/@wordpress/scripts/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, "node_modules/@wordpress/scripts/node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -7545,6 +7665,32 @@ "node": ">=10.13.0" } }, + "node_modules/@wordpress/scripts/node_modules/global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dev": true, + "dependencies": { + "global-prefix": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@wordpress/scripts/node_modules/global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, + "dependencies": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/@wordpress/scripts/node_modules/globals": { "version": "13.24.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", @@ -7560,6 +7706,26 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@wordpress/scripts/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@wordpress/scripts/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -7569,6 +7735,15 @@ "node": ">=8" } }, + "node_modules/@wordpress/scripts/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/@wordpress/scripts/node_modules/is-path-inside": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", @@ -7578,6 +7753,15 @@ "node": ">=8" } }, + "node_modules/@wordpress/scripts/node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/@wordpress/scripts/node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -7605,6 +7789,12 @@ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, + "node_modules/@wordpress/scripts/node_modules/known-css-properties": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.26.0.tgz", + "integrity": "sha512-5FZRzrZzNTBruuurWpvZnvP9pum+fe0HcK8z/ooo+U+Hmp4vtbyp1/QDsqmufirXy4egGzbaH/y2uCZf+6W5Kg==", + "dev": true + }, "node_modules/@wordpress/scripts/node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -8066,6 +8256,22 @@ "postcss": "^8.4.31" } }, + "node_modules/@wordpress/scripts/node_modules/postcss-safe-parser": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz", + "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==", + "dev": true, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.3.3" + } + }, "node_modules/@wordpress/scripts/node_modules/postcss-svgo": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-6.0.3.tgz", @@ -8174,6 +8380,20 @@ "node": ">=0.10.0" } }, + "node_modules/@wordpress/scripts/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@wordpress/scripts/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -8202,6 +8422,62 @@ "postcss": "^8.4.31" } }, + "node_modules/@wordpress/scripts/node_modules/stylelint": { + "version": "14.16.1", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.16.1.tgz", + "integrity": "sha512-ErlzR/T3hhbV+a925/gbfc3f3Fep9/bnspMiJPorfGEmcBbXdS+oo6LrVtoUZ/w9fqD6o6k7PtUlCOsCRdjX/A==", + "dev": true, + "dependencies": { + "@csstools/selector-specificity": "^2.0.2", + "balanced-match": "^2.0.0", + "colord": "^2.9.3", + "cosmiconfig": "^7.1.0", + "css-functions-list": "^3.1.0", + "debug": "^4.3.4", + "fast-glob": "^3.2.12", + "fastest-levenshtein": "^1.0.16", + "file-entry-cache": "^6.0.1", + "global-modules": "^2.0.0", + "globby": "^11.1.0", + "globjoin": "^0.1.4", + "html-tags": "^3.2.0", + "ignore": "^5.2.1", + "import-lazy": "^4.0.0", + "imurmurhash": "^0.1.4", + "is-plain-object": "^5.0.0", + "known-css-properties": "^0.26.0", + "mathml-tag-names": "^2.1.3", + "meow": "^9.0.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.19", + "postcss-media-query-parser": "^0.2.3", + "postcss-resolve-nested-selector": "^0.1.1", + "postcss-safe-parser": "^6.0.0", + "postcss-selector-parser": "^6.0.11", + "postcss-value-parser": "^4.2.0", + "resolve-from": "^5.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "style-search": "^0.1.0", + "supports-hyperlinks": "^2.3.0", + "svg-tags": "^1.0.0", + "table": "^6.8.1", + "v8-compile-cache": "^2.3.0", + "write-file-atomic": "^4.0.2" + }, + "bin": { + "stylelint": "bin/stylelint.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/stylelint" + } + }, "node_modules/@wordpress/scripts/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -8214,9 +8490,22 @@ "node": ">=8" } }, - "node_modules/@wordpress/scripts/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "node_modules/@wordpress/scripts/node_modules/supports-hyperlinks": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@wordpress/scripts/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "dependencies": { @@ -11555,6 +11844,15 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/envinfo": { "version": "7.13.0", "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.13.0.tgz", @@ -14622,9 +14920,9 @@ "dev": true }, "node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, "engines": { "node": ">= 4" @@ -17736,9 +18034,9 @@ } }, "node_modules/known-css-properties": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.26.0.tgz", - "integrity": "sha512-5FZRzrZzNTBruuurWpvZnvP9pum+fe0HcK8z/ooo+U+Hmp4vtbyp1/QDsqmufirXy4egGzbaH/y2uCZf+6W5Kg==", + "version": "0.34.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.34.0.tgz", + "integrity": "sha512-tBECoUqNFbyAY4RrbqsBQqDFpGXAEbdD5QKr8kACx3+rnArmuuR22nKQWKazvp07N9yjTyDZaw/20UIH8tL9DQ==", "dev": true }, "node_modules/language-subtag-registry": { @@ -18808,9 +19106,9 @@ } }, "node_modules/micromatch": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", - "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "dependencies": { "braces": "^3.0.3", @@ -20199,9 +20497,9 @@ } }, "node_modules/postcss": { - "version": "8.4.40", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.40.tgz", - "integrity": "sha512-YF2kKIUzAofPMpfH6hOi2cGnv/HrUlfucspc7pDyvv7kGdqXrfj8SCl/t8owkEgKEuu8ZcRjSOxFxVLqwChZ2Q==", + "version": "8.4.41", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz", + "integrity": "sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==", "dev": true, "funding": [ { @@ -20721,19 +21019,29 @@ "dev": true }, "node_modules/postcss-safe-parser": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz", - "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.0.tgz", + "integrity": "sha512-ovehqRNVCpuFzbXoTb4qLtyzK3xn3t/CUBxOs8LsnQjQrShaB4lKiHoVqY8ANaC0hBMHq5QVWk77rwGklFUDrg==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss-safe-parser" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "engines": { - "node": ">=12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "node": ">=18.0" }, "peerDependencies": { - "postcss": "^8.3.3" + "postcss": "^8.4.31" } }, "node_modules/postcss-scss": { @@ -20763,9 +21071,9 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz", - "integrity": "sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==", + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", "dev": true, "dependencies": { "cssesc": "^3.0.0", @@ -23408,59 +23716,66 @@ } }, "node_modules/stylelint": { - "version": "14.16.1", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.16.1.tgz", - "integrity": "sha512-ErlzR/T3hhbV+a925/gbfc3f3Fep9/bnspMiJPorfGEmcBbXdS+oo6LrVtoUZ/w9fqD6o6k7PtUlCOsCRdjX/A==", + "version": "16.9.0", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.9.0.tgz", + "integrity": "sha512-31Nm3WjxGOBGpQqF43o3wO9L5AC36TPIe6030Lnm13H3vDMTcS21DrLh69bMX+DBilKqMMVLian4iG6ybBoNRQ==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/stylelint" + }, + { + "type": "github", + "url": "https://github.com/sponsors/stylelint" + } + ], "dependencies": { - "@csstools/selector-specificity": "^2.0.2", + "@csstools/css-parser-algorithms": "^3.0.1", + "@csstools/css-tokenizer": "^3.0.1", + "@csstools/media-query-list-parser": "^3.0.1", + "@csstools/selector-specificity": "^4.0.0", + "@dual-bundle/import-meta-resolve": "^4.1.0", "balanced-match": "^2.0.0", "colord": "^2.9.3", - "cosmiconfig": "^7.1.0", - "css-functions-list": "^3.1.0", - "debug": "^4.3.4", - "fast-glob": "^3.2.12", + "cosmiconfig": "^9.0.0", + "css-functions-list": "^3.2.2", + "css-tree": "^2.3.1", + "debug": "^4.3.6", + "fast-glob": "^3.3.2", "fastest-levenshtein": "^1.0.16", - "file-entry-cache": "^6.0.1", + "file-entry-cache": "^9.0.0", "global-modules": "^2.0.0", "globby": "^11.1.0", "globjoin": "^0.1.4", - "html-tags": "^3.2.0", - "ignore": "^5.2.1", - "import-lazy": "^4.0.0", + "html-tags": "^3.3.1", + "ignore": "^5.3.2", "imurmurhash": "^0.1.4", "is-plain-object": "^5.0.0", - "known-css-properties": "^0.26.0", + "known-css-properties": "^0.34.0", "mathml-tag-names": "^2.1.3", - "meow": "^9.0.0", - "micromatch": "^4.0.5", + "meow": "^13.2.0", + "micromatch": "^4.0.8", "normalize-path": "^3.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.4.19", - "postcss-media-query-parser": "^0.2.3", - "postcss-resolve-nested-selector": "^0.1.1", - "postcss-safe-parser": "^6.0.0", - "postcss-selector-parser": "^6.0.11", + "picocolors": "^1.0.1", + "postcss": "^8.4.41", + "postcss-resolve-nested-selector": "^0.1.6", + "postcss-safe-parser": "^7.0.0", + "postcss-selector-parser": "^6.1.2", "postcss-value-parser": "^4.2.0", "resolve-from": "^5.0.0", "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "style-search": "^0.1.0", - "supports-hyperlinks": "^2.3.0", + "strip-ansi": "^7.1.0", + "supports-hyperlinks": "^3.1.0", "svg-tags": "^1.0.0", - "table": "^6.8.1", - "v8-compile-cache": "^2.3.0", - "write-file-atomic": "^4.0.2" + "table": "^6.8.2", + "write-file-atomic": "^5.0.1" }, "bin": { - "stylelint": "bin/stylelint.js" + "stylelint": "bin/stylelint.mjs" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/stylelint" + "node": ">=18.12.0" } }, "node_modules/stylelint-config-recommended": { @@ -23486,6 +23801,74 @@ "stylelint": "^14.0.0" } }, + "node_modules/stylelint-config-wordpress": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-wordpress/-/stylelint-config-wordpress-17.0.0.tgz", + "integrity": "sha512-qUU2kVMd2ezIV9AzRdgietIfnavRRENt4180A1OMoVXIowRjjhohZgBiyVPV5EtNKo3GTO63l8g/QGNG27/h9g==", + "deprecated": "This package has been deprecated, please use @wordpress/stylelint-config or @wordpress/scripts", + "dev": true, + "dependencies": { + "stylelint-config-recommended": "^3.0.0", + "stylelint-config-recommended-scss": "^4.2.0", + "stylelint-scss": "^3.17.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "stylelint": "^10.1.0 || ^11.0.0 || ^12.0.0 || ^13.0.0" + } + }, + "node_modules/stylelint-config-wordpress/node_modules/stylelint-config-recommended": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-3.0.0.tgz", + "integrity": "sha512-F6yTRuc06xr1h5Qw/ykb2LuFynJ2IxkKfCMf+1xqPffkxh0S09Zc902XCffcsw/XMFq/OzQ1w54fLIDtmRNHnQ==", + "dev": true, + "peerDependencies": { + "stylelint": ">=10.1.0" + } + }, + "node_modules/stylelint-config-wordpress/node_modules/stylelint-config-recommended-scss": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-4.3.0.tgz", + "integrity": "sha512-/noGjXlO8pJTr/Z3qGMoaRFK8n1BFfOqmAbX1RjTIcl4Yalr+LUb1zb9iQ7pRx1GsEBXOAm4g2z5/jou/pfMPg==", + "dev": true, + "dependencies": { + "stylelint-config-recommended": "^5.0.0" + }, + "peerDependencies": { + "stylelint": "^10.1.0 || ^11.0.0 || ^12.0.0 || ^13.0.0", + "stylelint-scss": "^3.0.0" + } + }, + "node_modules/stylelint-config-wordpress/node_modules/stylelint-config-recommended-scss/node_modules/stylelint-config-recommended": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-5.0.0.tgz", + "integrity": "sha512-c8aubuARSu5A3vEHLBeOSJt1udOdS+1iue7BmJDTSXoCBmfEQmmWX+59vYIj3NQdJBY6a/QRv1ozVFpaB9jaqA==", + "dev": true, + "peerDependencies": { + "stylelint": "^13.13.0" + } + }, + "node_modules/stylelint-config-wordpress/node_modules/stylelint-scss": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-3.21.0.tgz", + "integrity": "sha512-CMI2wSHL+XVlNExpauy/+DbUcB/oUZLARDtMIXkpV/5yd8nthzylYd1cdHeDMJVBXeYHldsnebUX6MoV5zPW4A==", + "dev": true, + "dependencies": { + "lodash": "^4.17.15", + "postcss-media-query-parser": "^0.2.3", + "postcss-resolve-nested-selector": "^0.1.1", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "stylelint": "^8.0.0 || ^9.0.0 || ^10.0.0 || ^11.0.0 || ^12.0.0 || ^13.0.0" + } + }, "node_modules/stylelint-scss": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-4.7.0.tgz", @@ -23501,15 +23884,77 @@ "stylelint": "^14.5.1 || ^15.0.0" } }, - "node_modules/stylelint/node_modules/ansi-regex": { + "node_modules/stylelint-webpack-plugin": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "resolved": "https://registry.npmjs.org/stylelint-webpack-plugin/-/stylelint-webpack-plugin-5.0.1.tgz", + "integrity": "sha512-07lpo1uVoFctKv0EOOg/YSrUppcLMjNBSMRqgooNnlbfAOgQfMzvLK+EbXz0HQiEgZobr+XQX9md/TgwTGdzbw==", + "dev": true, + "dependencies": { + "globby": "^11.1.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "schema-utils": "^4.2.0" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "stylelint": "^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0", + "webpack": "^5.0.0" + } + }, + "node_modules/stylelint-webpack-plugin/node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, "engines": { "node": ">=8" } }, + "node_modules/stylelint-webpack-plugin/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stylelint/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/stylelint/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, "node_modules/stylelint/node_modules/array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", @@ -23525,12 +23970,63 @@ "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", "dev": true }, + "node_modules/stylelint/node_modules/cosmiconfig": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", + "dev": true, + "dependencies": { + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/stylelint/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, + "node_modules/stylelint/node_modules/file-entry-cache": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-9.1.0.tgz", + "integrity": "sha512-/pqPFG+FdxWQj+/WSuzXSDaNzxgTLr/OrR1QuqfEZzDakpdYE70PwUxL7BPUa8hpjbvY1+qvCl8k+8Tq34xJgg==", + "dev": true, + "dependencies": { + "flat-cache": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/stylelint/node_modules/flat-cache": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-5.0.0.tgz", + "integrity": "sha512-JrqFmyUl2PnPi1OvLyTVHnQvwQ0S+e6lGSwu8OkAZlSaNIZciTY2H/cOOROxsBA1m/LZNHDsqAgDZt6akWcjsQ==", + "dev": true, + "dependencies": { + "flatted": "^3.3.1", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/stylelint/node_modules/global-modules": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", @@ -23595,6 +24091,42 @@ "node": ">=0.10.0" } }, + "node_modules/stylelint/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/stylelint/node_modules/meow": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz", + "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stylelint/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/stylelint/node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -23609,7 +24141,16 @@ "node": ">=8" } }, - "node_modules/stylelint/node_modules/strip-ansi": { + "node_modules/stylelint/node_modules/string-width/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/stylelint/node_modules/string-width/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", @@ -23621,6 +24162,21 @@ "node": ">=8" } }, + "node_modules/stylelint/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, "node_modules/stylelint/node_modules/which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -23633,6 +24189,19 @@ "which": "bin/which" } }, + "node_modules/stylelint/node_modules/write-file-atomic": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", + "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/stylis": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", @@ -23651,16 +24220,19 @@ } }, "node_modules/supports-hyperlinks": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", - "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.1.0.tgz", + "integrity": "sha512-2rn0BZ+/f7puLOHZm1HOJfwBggfaHXUpPUSSG/SWM4TWp5KCfmNYwnC3hruy2rZlMnmWZ+QAGpZfchu3f3695A==", "dev": true, "dependencies": { "has-flag": "^4.0.0", "supports-color": "^7.0.0" }, "engines": { - "node": ">=8" + "node": ">=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/supports-hyperlinks/node_modules/has-flag": { diff --git a/assets/package.json b/assets/package.json index 2abb81b..7c4e43d 100644 --- a/assets/package.json +++ b/assets/package.json @@ -9,10 +9,10 @@ "clean": "rm -rf build/*", "svg": "svgr -d src/js/icons src/icons", "lint": "eslint src/js/*", - "lint:fix": "eslint --fix src/js/*", - "lint-css": "stylelint 'src/sass/**/*.scss'", - "lint-css:fix": "npm run lint-css -- --fix", - "precommit": "npm run lint-css:fix && npm run lint:fix && npm run prod" + "lint:fix": "eslint --fix src/js/*", + "lint-css": "stylelint 'src/sass/**/*.scss'", + "lint-css:fix": "npm run lint-css -- --fix", + "precommit": "npm run lint-css:fix && npm run lint:fix && npm run prod" }, "keywords": [ "wordpress", @@ -57,6 +57,9 @@ "sass-loader": "^16.0.0", "sass-mq": "^5.0.1", "style-loader": "^4.0.0", + "stylelint": "^16.9.0", + "stylelint-config-wordpress": "^17.0.0", + "stylelint-webpack-plugin": "^5.0.1", "uglifyjs-webpack-plugin": "^2.2.0", "webpack": "^5.93.0", "webpack-cli": "^5.1.4" diff --git a/assets/src/js/author.js b/assets/src/js/author.js new file mode 100644 index 0000000..d6fad5d --- /dev/null +++ b/assets/src/js/author.js @@ -0,0 +1,26 @@ +( function( $ ) { + class Author { + constructor() { + this.authorProfileImgContainer = $( '#author-profile-img span' ); + this.authorFirstNameText = $( '#author-firstname' ).text(); + this.authorLastNameText = $( '#author-lastname' ).text(); + + this.init(); + } + + init() { + if ( ! this.authorProfileImgContainer.length ) { + return null; + } + + let initials = this.authorFirstNameText.charAt( 0 ) + this.authorLastNameText.charAt( 0 ); + initials = initials ? initials : 'A'; + + // Set the text. + this.authorProfileImgContainer.text( initials ); + } + + } + + new Author(); +} )( jQuery ); diff --git a/assets/src/js/carousel/index.js b/assets/src/js/carousel/index.js new file mode 100644 index 0000000..667980f --- /dev/null +++ b/assets/src/js/carousel/index.js @@ -0,0 +1,43 @@ +( function ( $ ) { + class SlickCarousel { + constructor() { + this.initiateCarousel(); + } + + initiateCarousel() { + $( '.posts-carousel' ).slick( { + autoplay: true, + autoplaySpeed: 1000, + slidesToShow: 3, + slidesToScroll: 1, + infinite: true, + dots: true, + responsive: [ + { + breakpoint: 768, + settings: { + slidesToShow: 2, + slidesToScroll: 1, + }, + }, + { + breakpoint: 600, + settings: { + slidesToShow: 1, + slidesToScroll: 1, + }, + }, + { + breakpoint: 480, + settings: { + slidesToShow: 1, + slidesToScroll: 1, + }, + }, + ], + } ); + } + } + + new SlickCarousel(); +} )( jQuery ); diff --git a/assets/src/js/gutenberg/block-extensions/register-block-styles.js b/assets/src/js/gutenberg/block-extensions/register-block-styles.js new file mode 100644 index 0000000..5a533bf --- /dev/null +++ b/assets/src/js/gutenberg/block-extensions/register-block-styles.js @@ -0,0 +1,75 @@ +/** + * Register block styles. + * + * @package + */ + +/** + * WordPress dependencies. + */ +import { registerBlockStyle, unregisterBlockStyle } from '@wordpress/blocks'; +import { __ } from '@wordpress/i18n'; + +/** + * Quote Block styles. + * + * @type {Array} + */ +const layoutStyleQuote = [ + { + name: 'layout-dark-background', + label: __( 'Layout style dark background', 'nintynine' ), + }, +]; + +/** + * Button Media styles. + * + * @type {Array} + */ +const layoutStyleButton = [ + { + name: 'layout-border-blue-fill', + label: __( 'Blue outline', 'nintynine' ), + }, + { + name: 'layout-border-white-no-fill', + label: __( + 'White outline - to be used with dark background', + 'nintynine' + ), + }, +]; + +/** + * Deregister styles. + * + * @return {void} + */ +const deRegister = () => { + unregisterBlockStyle( 'core/quote', 'large' ); + unregisterBlockStyle( 'core/button', 'outline' ); +}; + +/** + * Register styles. + * + * @return {void} + */ +const register = () => { + layoutStyleQuote.forEach( ( layoutStyle ) => + registerBlockStyle( 'core/quote', layoutStyle ) + ); + + layoutStyleButton.forEach( ( layoutStyle ) => + registerBlockStyle( 'core/button', layoutStyle ) + ); +}; + +/** + * Register and unregister styles on dom ready. + */ +wp.domReady( () => { + deRegister(); + register(); +} ); diff --git a/assets/src/js/gutenberg/blocks/dos-and-donts/index.js b/assets/src/js/gutenberg/blocks/dos-and-donts/index.js index f0310ea..7d09cde 100644 --- a/assets/src/js/gutenberg/blocks/dos-and-donts/index.js +++ b/assets/src/js/gutenberg/blocks/dos-and-donts/index.js @@ -1,7 +1,7 @@ /** * Do's and don'ts block. * - * @package + * @package NintyNine */ /** diff --git a/assets/src/js/gutenberg/blocks/dos-and-donts/templates.js b/assets/src/js/gutenberg/blocks/dos-and-donts/templates.js index 8c7f75c..d33cc3e 100644 --- a/assets/src/js/gutenberg/blocks/dos-and-donts/templates.js +++ b/assets/src/js/gutenberg/blocks/dos-and-donts/templates.js @@ -1,10 +1,5 @@ /** * Get Block Column. - * - * @param {String} optionVal Option - * @param {String} colClassName ClassName - * @param {String} heading Heading - * @return {Array} Block column. */ const getBlockColumn = ( optionVal, colClassName, heading ) => { return [ diff --git a/assets/src/js/gutenberg/blocks/heading-with-icon/edit.js b/assets/src/js/gutenberg/blocks/heading-with-icon/edit.js index 78b8325..84ac5e6 100644 --- a/assets/src/js/gutenberg/blocks/heading-with-icon/edit.js +++ b/assets/src/js/gutenberg/blocks/heading-with-icon/edit.js @@ -1,42 +1,54 @@ -import { RichText, InspectorControls } from '@wordpress/block-editor'; -import { __ } from '@wordpress/i18n'; -import { PanelBody, RadioControl } from '@wordpress/components'; import { getIconComponent } from "./icons-map"; -const Edit = ( { className, attributes, setAttributes} ) => { +import { PanelBody, RadioControl } from '@wordpress/components'; +import { __ } from '@wordpress/i18n'; +import { RichText, InspectorControls } from '@wordpress/block-editor'; + - const { option, content } = attributes; +/** + * Edit + * + * @param {Object} props Props. + * + * @return {Object} Content. + */ +const Edit = ( props ) => { + const { className, attributes, setAttributes } = props; + const { option, content } = attributes; - const HeadingIcon = getIconComponent( option ); + const HeadingIcon = getIconComponent( option ); - return ( -
- - - - setAttributes( { content: content } ) } - placeholder={ __( 'Heading...', 'nintynine' ) } - /> - - - {setAttributes( { option } ) } } - /> - - -
- ) -} + return ( +
+ + + + { /* You can also pass formattingControls={ [ 'bold', 'italic' ] } to allow the content to be made bold or italic, but do not allow other formatting options */ } + setAttributes( { contentVal } ) } // Store updated content as a block attribute + placeholder={ __( 'Heading…', 'nintynine' ) } // Display this text before any content has been added by the user + /> + + + { + setAttributes( { optionVal } ); + } } + /> + + +
+ ); +}; -export default Edit \ No newline at end of file +export default Edit; diff --git a/assets/src/js/gutenberg/blocks/heading-with-icon/index.js b/assets/src/js/gutenberg/blocks/heading-with-icon/index.js index b34ba06..f18f89c 100644 --- a/assets/src/js/gutenberg/blocks/heading-with-icon/index.js +++ b/assets/src/js/gutenberg/blocks/heading-with-icon/index.js @@ -3,13 +3,18 @@ * * @package */ -import { registerBlockType } from '@wordpress/blocks'; + +import { getIconComponent } from './icons-map'; + +import Edit from "./edit"; + import { __ } from '@wordpress/i18n'; +import { registerBlockType } from '@wordpress/blocks'; import { RichText } from '@wordpress/block-editor'; -import Edit from "./edit"; -import { getIconComponent } from './icons-map'; + + registerBlockType( 'nintynine-blocks/nintynine-heading-icon', { title: __( 'Heading with Icon', 'nintynine' ), @@ -19,26 +24,31 @@ registerBlockType( 'nintynine-blocks/nintynine-heading-icon', { attributes: { option: { type: 'string', - default: 'dos' + default: 'dos', }, content: { type: 'string', source: 'html', selector: 'h4', - default: __('Dos', 'nintynine') + default: __('Dos', 'nintynine'), }, }, edit: Edit, - save({attributes: {option, content} }) { + save( props ) { + const { + attributes: { option, content }, + } = props; const HeadingIcon = getIconComponent( option ); + return (
- + - + { /* Saves

Content added in the editor...

to the database for frontend display */ } +
- ) + ); }, -} ); \ No newline at end of file +} ); diff --git a/assets/src/js/posts/loadmore-single.js b/assets/src/js/posts/loadmore-single.js new file mode 100644 index 0000000..6e9d5fb --- /dev/null +++ b/assets/src/js/posts/loadmore-single.js @@ -0,0 +1,108 @@ +( function( $ ) { + class LoadMoreSingle { + constructor() { + this.ajaxUrl = siteConfig?.ajaxUrl ?? ''; + this.ajaxNonce = siteConfig?.ajax_nonce ?? ''; + this.loadMoreBtn = $( '#single-post-load-more-btn' ); + this.loadingTextEl = $( '#single-loading-text' ); + this.isRequestProcessing = false; + + this.init(); + + } + + init() { + + if ( ! this.loadMoreBtn.length ) { + return; + } + + this.totalPagesCount = this.loadMoreBtn.data( 'max-pages' ); + + this.loadMoreBtn.on( 'click', () => { + this.handleLoadMorePosts(); + } ); + + } + + + /** + * Load more posts. + * + * 1.Make an ajax request, by incrementing the page no. by one on each request. + * 2.Append new/more posts to the existing content. + * 3.If it's the last page, remove the load-more button from DOM. + * + * @return null + */ + handleLoadMorePosts() { + + // Get page no from data attribute of load-more button. + const page = this.loadMoreBtn.data( 'page' ); + const singlePostId = this.loadMoreBtn.data( 'single-post-id' ); + if ( undefined === page || this.isRequestProcessing ) { + return null; + } + + const nextPage = parseInt( page ) + 1; // Increment page count by one. + + this.toggleLoading( true ); + + $.ajax( { + url: this.ajaxUrl, + type: 'post', + data: { + page: page, + single_post_id: singlePostId, + action: 'single_load_more', + ajax_nonce: this.ajaxNonce, + }, + success: ( response ) => { + + this.loadMoreBtn.data( 'page', nextPage ); + $( '#single-post-load-more-content' ).append( response ); + this.removeLoadMoreIfOnLastPage( nextPage ); + + this.toggleLoading( false ); + }, + error: ( response ) => { + console.log( response ); + this.toggleLoading( false ); + }, + } ); + } + + /** + * Remove Load more Button If on last page. + * + * @param {int} nextPage New Page. + */ + removeLoadMoreIfOnLastPage( nextPage ) { + if ( nextPage + 1 > this.totalPagesCount ) { + this.loadMoreBtn.remove(); + } + }; + + /** + * Toggle Loading + * + * Show or hide the loading text. + * + * @param isLoading + */ + toggleLoading( isLoading ) { + this.isRequestProcessing = isLoading; + + if ( isLoading ) { + this.loadingTextEl.addClass( 'block' ); + this.loadingTextEl.removeClass( 'hidden' ); + } else { + this.loadingTextEl.addClass( 'hidden' ); + this.loadingTextEl.removeClass( 'block' ); + } + }; + } + + new LoadMoreSingle(); + +} )( jQuery ); diff --git a/assets/src/js/posts/loadmore.js b/assets/src/js/posts/loadmore.js new file mode 100644 index 0000000..c18712a --- /dev/null +++ b/assets/src/js/posts/loadmore.js @@ -0,0 +1,121 @@ +( function ( $ ) { + /** + * Class Loadmore. + */ + class LoadMore { + /** + * Contructor. + */ + constructor() { + this.ajaxUrl = siteConfig?.ajaxUrl ?? ''; + this.ajaxNonce = siteConfig?.ajax_nonce ?? ''; + this.loadMoreBtn = $( '#load-more' ); + this.loadingTextEl = $( '#loading-text' ); + this.isRequestProcessing = false; + + this.options = { + root: null, + rootMargin: '0px', + threshold: 1.0, // 1.0 means set isIntersecting to true when element comes in 100% view. + }; + + this.init(); + } + + init() { + if ( ! this.loadMoreBtn.length ) { + return; + } + + this.totalPagesCount = $( '#post-pagination' ).data( 'max-pages' ); + + /** + * Add the IntersectionObserver api, and listen to the load more intersection status. + * so that intersectionObserverCallback gets called if the element intersection status changes. + * + * @type {IntersectionObserver} + */ + const observer = new IntersectionObserver( + ( entries ) => this.intersectionObserverCallback( entries ), + this.options + ); + observer.observe( this.loadMoreBtn[ 0 ] ); + } + + /** + * Gets called on initial render with status 'isIntersecting' as false and then + * everytime element intersection status changes. + * + * @param {array} entries No of elements under observation. + * + */ + intersectionObserverCallback( entries ) { + // array of observing elements + + // The logic is apply for each entry ( in this case it's just one loadmore button ) + entries.forEach( ( entry ) => { + // If load more button in view. + if ( entry?.isIntersecting ) { + this.handleLoadMorePosts(); + } + } ); + } + + /** + * Load more posts. + * + * 1.Make an ajax request, by incrementing the page no. by one on each request. + * 2.Append new/more posts to the existing content. + * 3.If the response is 0 ( which means no more posts available ), remove the load-more button from DOM. + * Once the load-more button gets removed, the IntersectionObserverAPI callback will not be triggered, which means + * there will be no further ajax request since there won't be any more posts available. + * + * @return null + */ + handleLoadMorePosts() { + // Get page no from data attribute of load-more button. + const page = this.loadMoreBtn.data( 'page' ); + if ( ! page || this.isRequestProcessing ) { + return null; + } + + const nextPage = parseInt( page ) + 1; // Increment page count by one. + this.isRequestProcessing = true; + + $.ajax( { + url: this.ajaxUrl, + type: 'post', + data: { + page: page, + action: 'load_more', + ajax_nonce: this.ajaxNonce, + }, + success: ( response ) => { + this.loadMoreBtn.data( 'page', nextPage ); + $( '#load-more-content' ).append( response ); + this.removeLoadMoreIfOnLastPage( nextPage ); + this.isRequestProcessing = false; + }, + error: ( response ) => { + console.log( response ); + this.isRequestProcessing = false; + }, + } ); + } + + + /** + * Remove Load more Button If on last page. + * + * @param {int} nextPage New Page. + */ + removeLoadMoreIfOnLastPage( nextPage ) { + if ( nextPage + 1 > this.totalPagesCount ) { + this.loadMoreBtn.remove(); + } + } + + } + + new LoadMore(); +} )( jQuery ); diff --git a/assets/src/js/search.js b/assets/src/js/search.js new file mode 100644 index 0000000..59d3069 --- /dev/null +++ b/assets/src/js/search.js @@ -0,0 +1,2 @@ +import './search/index'; +import '../sass/search.scss'; diff --git a/assets/src/js/search/constants.js b/assets/src/js/search/constants.js new file mode 100644 index 0000000..080172d --- /dev/null +++ b/assets/src/js/search/constants.js @@ -0,0 +1,5 @@ +/** + * Constants. + */ + +export const STORE_NAME = 'nintynine_search'; diff --git a/assets/src/js/search/data.js b/assets/src/js/search/data.js new file mode 100644 index 0000000..1e67c1b --- /dev/null +++ b/assets/src/js/search/data.js @@ -0,0 +1,287 @@ +/** + * External dependencies. + */ +import { getFiltersFromUrl, getLoadMoreMarkup, getResultMarkup, getUrlWithFilters } from './helpers'; + +const { persist, create, stores } = window.zustand; + +/** + * Internal dependencies. + */ +import { STORE_NAME } from './constants'; + +/** + * Constants. + */ +export const DEFAULT_STATE = { + restApiUrl: '', + rootUrl: '', + url: '', + filterKeys: [ 'category', 'post_tag' ], + filters: {}, + filterIds: [], + pageNo: 1, + resultCount: null, + noOfPages: 0, + resultMarkup: '', + loading: false, +}; +const PERSISTENT_STATE_KEYS = []; + +/** + * Initialize. + * + * @param {Object} settings settings. + */ +const initialize = ( settings = {} ) => { + const stateFromUrl = getStateFromUrl( settings?.root_url ?? {} ); + setStateFromUrl( settings || {}, stateFromUrl || {} ); + getResult(); +}; + +/** + * Get State From Url. + * + * @param {String} rootUrl Root Url. + * + * @return {Object} data Data containing filters, page no, and url. + */ +const getStateFromUrl = ( rootUrl = '' ) => { + const { filterKeys } = getState(); + const url = new URL( window.location.href ); + let data = {}; + + // Build data from URL. + // Add filters and page no to data. + data = getFiltersFromUrl( url, filterKeys ); + + // Get url with filter selection. + data.url = getUrlWithFilters( data?.filters ?? {}, rootUrl ); + + return data; +}; + +/** + * Set State From Url. + * + * @param {Object} settings Initial Settings. + * @param {Object} stateFromUrl State From Url. + */ +const setStateFromUrl = ( settings = {}, stateFromUrl = {} ) => { + + // Set data to state. + setState( { + rootUrl: settings?.root_url ?? '', + restApiUrl: settings?.rest_api_url ?? '', + filterIds: settings?.filter_ids ?? {}, + loading: true, + ...stateFromUrl, + } ); + + // Action: Get result with data from state. + getResult(); +}; + +/** + * Get Result. + */ +const getResult = () => { + const { restApiUrl, filters, pageNo } = getState(); + if ( ! restApiUrl ) { + return; + } + + // Add query-params to rest api url. + const params = { + ...filters, + page_no: pageNo, + }; + const fetchUrl = restApiUrl + '?' + ( new URLSearchParams( params ) ).toString(); + + fetch( fetchUrl ) + .then( ( response ) => response.json() ) + .then( ( responseData ) => { + const resultMarkup = getResultMarkup( responseData?.posts ?? [], responseData?.total_posts ?? 0 ); + const loadMoreMarkup = getLoadMoreMarkup( responseData?.no_of_pages ?? 0, pageNo ); + setState( { + loading: false, + resultCount: responseData?.total_posts ?? 0, + resultPosts: responseData?.posts ?? [], + resultMarkup: resultMarkup + loadMoreMarkup || '', + noOfPages: responseData?.no_of_pages ?? 0, + } ); + } ); +}; + +/** + * Add Filter. + * + * @param {Object} currentSelection currentSelection + */ +const addFilter = ( currentSelection = {} ) => { + const { filters, rootUrl } = getState(); + const { key, value } = currentSelection || {}; + + // Get new filter values. + let newFilters = { ...filters }; + const filterValues = filters[ key ] ? [ ...filters[ key ], value ] : [ value ]; + newFilters = { + ...newFilters, + [ key ]: [ ...new Set( filterValues ) ], + }; + + // Add filter selections to URL and update URL. + const url = getUrlWithFilters( newFilters, rootUrl ); + updateUrl( url ); + + /** + * Update state with the new data. + * We set loading to true, before getting results. + */ + setState( { + url, + currentSelection, + filters: newFilters, + pageNo: 1, + loading: true, + } ); + + // Get Result. + getResult(); +}; + +/** + * Delete Filter. + * + * @param currentSelection + */ +const deleteFilter = ( currentSelection = {} ) => { + const { filters, rootUrl } = getState(); + const { key, value } = currentSelection || {}; + + let newFilters = { ...filters }; + let filterValues = filters[ key ] || []; + + // Loop through previous filter values and delete the value in question. + filterValues.forEach( ( prevFilterValue, index ) => { + // If a match is found delete it from the array. + if ( prevFilterValue === value ) { + filterValues.splice( index, 1 ); + } + } ); + + newFilters = { + ...newFilters, + [ key ]: filterValues, + }; + + // Delete empty keys. + Object.keys( newFilters ).forEach( ( key ) => { + if ( ! newFilters[ key ] || ! newFilters[ key ].length ) { + delete newFilters[ key ]; + } + } ); + + // Add filter selections to URL and update URL. + const url = getUrlWithFilters( newFilters, rootUrl ); + updateUrl( url ); + + setState( { + url, + currentSelection, + filters: newFilters, + pageNo: 1, + loading: true, + } ); + + getResult(); +} + +/** + * Update Url. + * + * @param {string} url Url. + * + * @return {null} Null. + */ +const updateUrl = ( url ) => { + if ( ! url ) { + return null; + } + + if ( window.history.pushState ) { + window.history.pushState( { path: url }, '', url ); + } else { + window.location.href = url; + } +}; + +const loadMorePosts = ( nextPageNo = 1 ) => { + const { restApiUrl, resultMarkup, filters } = getState(); + // Update page no in the fetch url. + const fetchUrl = getUrlWithFilters( { ...filters, page_no: nextPageNo }, restApiUrl ); + + // Set State. + setState({ + loadingMorePosts: true, + pageNo: nextPageNo, + }); + + // Fetch load more results. + fetch( fetchUrl ) + .then( ( response ) => response.json() ) + .then( ( responseData ) => { + const moreResultMarkup = getResultMarkup( responseData?.posts ?? [] ); + const loadMoreMarkup = getLoadMoreMarkup( responseData?.no_of_pages ?? 0, nextPageNo ); + setState( { + loadingMorePosts: false, + resultPosts: responseData?.posts ?? [], + resultMarkup: resultMarkup + moreResultMarkup + loadMoreMarkup, + } ); + } ); +}; + +const clearAllFilters = () => { + const { rootUrl } = getState(); + setState({ + loading: true, + filters: {}, + filterIds: [], + currentSelection: {}, + pageNo: 1, + }); + + updateUrl( rootUrl ); + + getResult(); +}; + +/** + * Create store. + */ +export const store = create( + persist( + () => ( { + ...DEFAULT_STATE, + initialize, + addFilter, + deleteFilter, + loadMorePosts, + clearAllFilters, + } ), + { + name: STORE_NAME, + partialize: ( state ) => { + const persistentState = {}; + PERSISTENT_STATE_KEYS.forEach( ( key ) => { + persistentState[ key ] = state[ key ]; + } ); + return persistentState; + }, + }, + ), +); +const { getState, setState } = store; + +// Add store to window. +stores[ STORE_NAME ] = store; diff --git a/assets/src/js/search/helpers.js b/assets/src/js/search/helpers.js new file mode 100644 index 0000000..25af568 --- /dev/null +++ b/assets/src/js/search/helpers.js @@ -0,0 +1,126 @@ +/* eslint-disable prettier/prettier */ +/** + * Get Filters From Url. + * + * @param {Object} url URl. + * @param {Array} filterKeys Filter keys. + * + * @return {Object} data Data containing filters and pageNo. + */ +export const getFiltersFromUrl = ( url = {}, filterKeys = [] ) => { + const data = {}; + + if ( ! url || ! filterKeys.length ) { + return data; + } + + /** + * Build filter's data. + * + * Loop through each filter keys( constant ) and if + * they exist in the url, push them to the filters data. + */ + filterKeys.forEach( ( filterKey ) => { + const paramValue = url.searchParams.get( filterKey ); + + // If the value does not exits, return. + if ( ! paramValue ) { + return; + } + + // Set page no. + if ( 'pageNo' === filterKey ) { + data.pageNo = parseInt( paramValue ); + return; + } + + // Get filter values. + const filterValues = paramValue.split( ',' ) + .map( ( itemValue ) => parseInt( itemValue ) ); + + // Add paramValue to filters. + data.filters = { + ...data.filters, + [ filterKey ]: filterValues, + }; + } ); + + return data; +}; + +/** + * Get Url by Adding Filters. + * + * @param {Object} filters Filters. + * @param {String} rootUrl Root url. + */ +export const getUrlWithFilters = ( filters = {} = {}, rootUrl = '' ) => { + + // Build URL. + let url = new URL( rootUrl ); + + // 2.Add the given keys value pairs in search params. + Object.keys( filters ).forEach( ( key ) => { + url.searchParams.set( key, filters[ key ] ); + } ); + + // Covert url to string. + url = url.toString(); + + return url; +}; + +/** + * Get Results markup. + * + * @param posts + * @return {string} + */ +export const getResultMarkup = ( posts = [] ) => { + if ( ! Array.isArray( posts ) || ! posts.length ) { + return ''; + } + + let img = ''; + let markup = ``; + + posts.forEach( post => { + img = post.thumbnail ? post.thumbnail : ''; + markup += ` +
+
+ +
+ ${ img } +
+
+
+ +

${ post?.title ?? '' }

+
+
+ ${ post?.content ?? '' } +
+ + View More + +
+
+ `; + } ); + + return markup; +}; + +export const getLoadMoreMarkup = ( noOfPages = 0, currentPageNo = 1 ) => { + if ( parseInt( currentPageNo ) >= parseInt( noOfPages ) ) { + return ''; + } + + return ` + + `; +} diff --git a/assets/src/js/search/index.js b/assets/src/js/search/index.js new file mode 100644 index 0000000..ca768e7 --- /dev/null +++ b/assets/src/js/search/index.js @@ -0,0 +1,302 @@ +/** + * Global variables. + */ +import { toggleAccordionContent } from '../utils'; + +const { customElements, HTMLElement } = window; + +/** + * Initialize data store. + */ +import { store } from './data'; +const { getState, subscribe } = store; + +/** + * NintyNineSearch Class. + */ +class NintyNineSearch extends HTMLElement { + /** + * Constructor. + */ + constructor() { + super(); + + // Initialize State. + const state = getState(); + state.initialize( search_settings ); + } +} + +/** + * Clear All Filters. + */ +class NintyNineClearAllFilters extends HTMLElement { + /** + * Constructor. + */ + constructor() { + super(); + + const { clearAllFilters } = getState(); + this.clearAllFiltersButton = this.querySelector( 'button' ); + + this.clearAllFiltersButton.addEventListener( 'click', () => { + clearAllFilters(); + } ); + } +} + +/** + * NintyNineFilters Class. + */ +class NintyNineFilters extends HTMLElement {} + +/** + * NintyNineCheckboxAccordion Class. + */ +class NintyNineCheckboxAccordion extends HTMLElement { + /** + * Constructor. + */ + constructor() { + super(); + + // Elements. + this.filterKey = this.getAttribute( 'key' ); + this.content = this.querySelector( '.checkbox-accordion__content' ); + this.accordionHandle = this.querySelector( '.checkbox-accordion__handle' ); + + if ( ! this.accordionHandle || ! this.content || ! this.filterKey ) { + return; + } + + this.accordionHandle.addEventListener( 'click', ( event ) => toggleAccordionContent( event, this, this.content ) ); + } + + /** + * Observe Attributes. + * + * @return {string[]} Attributes to be observed. + */ + static get observedAttributes() { + return [ 'active' ]; + } + + /** + * Attributes callback. + * + * Fired on attribute change. + * + * @param {string} name Attribute Name. + * @param {string} oldValue Attribute's Old Value. + * @param {string} newValue Attribute's New Value. + */ + attributeChangedCallback( name, oldValue, newValue ) { + /** + * If the state of this checkbox filter is open, then set then + * active state of this component to true, so it can be opened. + */ + if ( 'active' === name ) { + this.content.style.height = 'auto'; + } else { + this.content.style.height = '0px'; + } + } +} + +/** + * NintyNineCheckboxAccordionChild Class. + */ +class NintyNineCheckboxAccordionChild extends HTMLElement { + /** + * Constructor. + */ + constructor() { + super(); + + this.content = this.querySelector( '.checkbox-accordion__child-content' ); + this.accordionHandle = this.querySelector( '.checkbox-accordion__child-handle-icon' ); + this.inputEl = this.querySelector('input'); + + // Subscribe to updates. + subscribe( this.update.bind( this ) ); + + if ( this.accordionHandle && this.content ) { + this.accordionHandle.addEventListener( 'click', ( event ) => toggleAccordionContent( event, this, this.content ) ); + } + if ( this.inputEl ) { + this.inputEl.addEventListener( 'click', ( event ) => this.handleCheckboxInputClick( event ) ); + } + } + + /** + * Update the component. + * + * @param {Object} currentState Current state. + */ + update( currentState = {} ) { + + if ( ! this.inputEl ) { + return; + } + + const { filters } = currentState; + this.inputKey = this.inputEl.getAttribute( 'data-key' ); + this.inputValue = this.inputEl.getAttribute( 'value' ); + this.selectedFiltersForCurrentkey = filters[ this.inputKey ] || []; + this.parentEl = this.inputEl.closest( '.checkbox-accordion' ) || {}; + this.parentContentEl = this.inputEl.closest( '.checkbox-accordion__child-content' ) || {}; + + /** + * If the current input value is amongst the selected filters, the check it. + * and set the attributes and styles to open the accordion. + */ + if ( this.selectedFiltersForCurrentkey.includes( parseInt( this.inputValue ) ) ) { + this.inputEl.checked = true; + this.parentEl.setAttribute( 'active', true ); + if ( this.parentContentEl.style ) { + this.parentContentEl.style.height = 'auto'; + } + } else { + this.inputEl.checked = false; + this.parentEl.removeAttribute( 'active' ); + } + } + + /** + * Handle Checkbox input click. + * + * @param event + */ + handleCheckboxInputClick( event ) { + const { addFilter, deleteFilter } = getState(); + const targetEl = event.target; + this.filterKey = targetEl.getAttribute('data-key'); + + if ( targetEl.checked ) { + addFilter({ + key: this.filterKey, + value: parseInt( targetEl.value ), + }); + } else { + deleteFilter({ + key: this.filterKey, + value: parseInt( targetEl.value ), + }); + } + } +} + +/** + * NintyNineResults Class. + */ +class NintyNineResultsCount extends HTMLElement { + /** + * Constructor. + */ + constructor() { + super(); + + // Subscribe to updates. + subscribe( this.update.bind( this ) ); + } + + update( currentState = {} ) { + const { resultCount } = currentState; + if ( null !== resultCount ) { + this.innerHTML = `Results: ${resultCount} Posts`; + } + } +} + +/** + * NintyNineResults Class. + */ +class NintyNineResults extends HTMLElement { + /** + * Constructor. + */ + constructor() { + super(); + + // Subscribe to updates. + subscribe( this.update.bind( this ) ); + } + + /** + * Update the component. + * + * @param {Object} currentState Current state. + */ + update( currentState = {} ) { + const { resultMarkup, loading } = currentState; + if ( loading ) { + this.innerHTML = '

Loading...

'; + } + if ( resultMarkup && ! loading ) { + this.innerHTML = resultMarkup; + } + } +} + +/** + * NintyNineLoadMore Class. + */ +class NintyNineLoadMore extends HTMLElement { + /** + * Constructor. + */ + constructor() { + super(); + + // Subscribe to updates. + subscribe( this.update.bind( this ) ); + + this.querySelector( 'button' ).addEventListener( 'click', () => this.handleLoadMoreButtonClick() ); + this.nextPageNo = this.getAttribute( 'next-page-no' ); + } + + update( currentState = {} ) { + const { pageNo } = currentState; + if ( parseInt( this.nextPageNo ) <= parseInt( pageNo ) ) { + this.remove(); + return null; + } + + } + + handleLoadMoreButtonClick() { + const { loadMorePosts } = getState(); + loadMorePosts( this.nextPageNo ); + } +} + +class NintyNineLoadingMore extends HTMLElement { + constructor() { + super(); + // Subscribe to updates. + subscribe( this.update.bind( this ) ); + } + + update( currentState = {} ) { + const { loadingMorePosts } = currentState; + if ( loadingMorePosts ) { + this.innerHTML = 'Loading more posts...'; + } else { + this.innerHTML = ''; + } + } +} + +/** + * Initialize. + */ +customElements.define( 'nintynine-checkbox-accordion', NintyNineCheckboxAccordion ); +customElements.define( 'nintynine-checkbox-accordion-child', NintyNineCheckboxAccordionChild ); +customElements.define( 'nintynine-clear-all-filters', NintyNineClearAllFilters ); +customElements.define( 'nintynine-filters', NintyNineFilters ); +customElements.define( 'nintynine-results-count', NintyNineResultsCount ); +customElements.define( 'nintynine-results', NintyNineResults ); +customElements.define( 'nintynine-load-more', NintyNineLoadMore ); +customElements.define( 'nintynine-loading-more', NintyNineLoadingMore ); +customElements.define( 'nintynine-search', NintyNineSearch ); diff --git a/assets/src/js/utils/index.js b/assets/src/js/utils/index.js new file mode 100644 index 0000000..060a4aa --- /dev/null +++ b/assets/src/js/utils/index.js @@ -0,0 +1,61 @@ +/** + * Toggle Accordion Content. + * + * @param {Event} event Event. + * @param {Object} accordionEl Accordion Element + * @param {Object} contentEl Content Element. + * + * @return {null} null + */ +export const toggleAccordionContent = ( event, accordionEl, contentEl ) => { + event.preventDefault(); + event.stopPropagation(); + + if ( ! accordionEl || ! contentEl ) { + return null; + } + + accordionEl.toggleAttribute( 'active' ); + + if ( ! accordionEl.hasAttribute( 'active' ) ) { + slideElementUp( contentEl, 600 ); + } else { + slideElementDown( contentEl, 600 ); + } +}; + +/** + * Slide element down. + * + * @param {Object} element Target element. + * @param {number} duration Animation duration. + * @param {Function} callback Callback function. + */ +export const slideElementDown = ( element, duration = 300, callback = null ) => { + element.style.height = `${ element.scrollHeight }px`; + setTimeout( () => { + element.style.height = 'auto'; + if ( callback ) { + callback(); + } + }, duration ); +}; + +/** + * Slide element up. + * + * @param {Object} element Target element. + * @param {number} duration Animation duration. + * @param {Function} callback Callback function. + */ +export const slideElementUp = ( element, duration = 300, callback = null ) => { + element.style.height = `${ element.scrollHeight }px`; + element.offsetHeight; // eslint-disable-line + element.style.height = '0px'; + setTimeout( () => { + element.style.height = null; + if ( callback ) { + callback(); + } + }, duration ); +}; diff --git a/assets/src/sass/blocks.scss b/assets/src/sass/blocks.scss index 43e12e3..1aca0f8 100644 --- a/assets/src/sass/blocks.scss +++ b/assets/src/sass/blocks.scss @@ -2,5 +2,5 @@ // Blocks. @import "7-blocks/heading-with-icon"; @import "7-blocks/dos-and-donts"; -/*@import "7-blocks/quote"; -@import "7-blocks/button";*/ +@import "7-blocks/quote"; +@import "7-blocks/button"; diff --git a/assets/webpack.config.js b/assets/webpack.config.js index 250c1ab..5f12ff4 100644 --- a/assets/webpack.config.js +++ b/assets/webpack.config.js @@ -8,6 +8,7 @@ const DependencyExtractionWebpackPlugin = require( '@wordpress/dependency-extrac const JS_DIR = path.resolve( __dirname, 'src/js' ); const IMG_DIR = path.resolve( __dirname, 'src/img' ); +const LIB_DIR = path.resolve( __dirname, 'src/library' ); const BUILD_DIR = path.resolve( __dirname, 'build' ); const entry = { @@ -15,6 +16,8 @@ const entry = { single: JS_DIR + '/single.js', editor: JS_DIR + '/editor.js', blocks: JS_DIR + '/blocks.js', + author: JS_DIR + '/author.js', + search: JS_DIR + '/search.js', }; const output = { path: BUILD_DIR, diff --git a/author.php b/author.php new file mode 100644 index 0000000..13db834 --- /dev/null +++ b/author.php @@ -0,0 +1,49 @@ + +
+
+
+ +
+ %1$s %2$s', + __( 'Articles written by ', 'nintynine' ), + get_the_author() + ); + } + ?> +
+ 'col-lg-4 col-md-6 col-sm-12 pb-4' ] ); + endwhile; + else : + get_template_part( 'template-parts/content-none' ); + endif; + ?> +
+
+ +
+
+
+
+
+ + + +
+ + +

+ ' . get_the_title() . '' + ); + ?> +

+ +
    + 'ol', + 'short_ping' => true, + 'avatar_size' => 74, + ) ); + ?> +
+ + 1 && get_option( 'page_comments' ) ) : ?> + + + + +

+ + + + + + +
diff --git a/date.php b/date.php new file mode 100644 index 0000000..b4c8567 --- /dev/null +++ b/date.php @@ -0,0 +1,96 @@ +max_num_pages ) +); + + +?> +
+
+
+ + +
+
+ have_posts() ) : + while ( $wp_query->have_posts() ) : $wp_query->the_post(); + get_template_part( 'template-parts/content', '', [ 'container_classes' => 'col-lg-4 col-md-6 col-sm-12 pb-4' ] ); + endwhile; + else : + get_template_part( 'template-parts/content-none' ); + endif; + ?> +
+
+ +
+
+
+
+
+ + -