File manager - Edit - /home/matthif/www/wp-content/plugins/advanced-gutenberg/assets/blocks/block-controls.js.map
Back
{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./assets/blocks/block-controls/block-controls.jsx","webpack:///./node_modules/classnames/index.js","webpack:///./assets/blocks/0-adv-components/datetime.jsx","webpack:///./node_modules/hour-convert/index.js","webpack:///./assets/blocks/0-adv-components/utils.jsx"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","wpI18n","wpHooks","wpBlocks","wpBlockEditor","wpComponents","wpCompose","wpElement","wp","blockEditor","editor","addFilter","sprintf","__","hasBlockSupport","InspectorControls","ToggleControl","BlockControls","DateTimePicker","PanelBody","Notice","FormTokenField","SelectControl","createHigherOrderComponent","Component","Fragment","parseInt","advgbBlocks","block_controls","NON_SUPPORTED_BLOCKS","getGlobalControls","advgb_block_controls_vars","controls","keys","length","isControlEnabled","control","isAnyControlEnabledBlock","controlAttrs","globalControls","counter","blockControls","forEach","item","push","currentControlKey","isAnyControlEnabledGlobal","map","some","element","itemIndex","findIndex","newArray","non_supported","Set","settings","includes","attributes","advgbBlockControls","type","items","default","BlockEdit","props","state","taxModOptions","termOptions","searchTermWord","initArchive","updateTaxLabels","isPost","taxonomies","terms","this","getTaxonomies","tax","allTaxonomies","slug","term","user_roles","title","page","setAttributes","scheduleControl","enabled","dateFrom","dateTo","recurring","userRoleControl","roles","approach","archiveControl","pageControl","pages","controlsAdded","controlExists","obj","topic","slugs","taxArray","controlIndex","taxIndex","all","currentArchiveControl","option","find","el","undefined","result","currentTerms","changeControlKey","setState","filter","modifyTaxLabels","apiFetch","path","url","addQueryArgs","ids","then","list","singular","options","index","search","Array","from","a","data","select","getCurrentPostId","timezone","replace","iniTaxLabels","prevProps","prevState","isSelected","prevBlockControls","prevTermWord","archive","initArchiveControl","searchTerms","taxonomiesChanged","icon","initialOpen","className","schedule","label","help","checked","onChange","style","marginBottom","AdvDateTimeControl","buttonLabel","dateLabel","date","onChangeDate","newDate","onDateClear","onInvalidDate","thisDate","Date","getTime","setHours","fromDate","status","isDismissible","AdvDaysControl","days","onChangeDays","display","AdvTimeControl","currentTime","onChangeTime","newTime","onTimeClear","AdvTimezoneControl","defaultTimezone","getTimezoneLabel","getTimezoneSlug","onChangeTimezone","user_role","multiple","placeholder","suggestions","getOptionSuggestions","getUserRoles","maxSuggestions","getOptionTitles","getOptionSlugs","__experimentalExpandOnFocus","changeArchiveControl","onInputChange","__experimentalShowHowTo","getPages","BlockListBlock","advgbBcClass","i18n","hooks","blocks","components","compose","hasOwn","classNames","classes","arguments","arg","argType","isArray","inner","apply","toString","join","useState","popupState","setPopupState","togglePopup","Button","isLink","onClick","Tooltip","text","moment","format","Popover","onClose","resize","currentDate","is12Hour","isInvalidDate","allDays","_x","selectedDays","setSelectedDays","isDaySelected","day","CheckboxControl","updatedDays","findDay","uniqueDays","onChangeDay","AdvTimeClass","applyFilters","marginTop","float","marginRight","Icon","href","class","target","disabled","ButtonGroup","TextControl","hours","minutes","meridian","onInit","split","prevHours","prevMinutes","prevMeridian","savedTime","appendZero","hourConvert","to24Hour","hour","meridiem","isNaN","res","to12Hour","event","Math","max","min","Number","onKeyDown","variant","time","field_value","option_slug","find_option","slugs_array","option_title","matching_slug"],"mappings":"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","file":"block-controls.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","import classnames from 'classnames';\nimport { AdvDateTimeControl, AdvDaysControl, AdvTimeControl, AdvTimezoneControl } from \"../0-adv-components/datetime.jsx\";\nimport {\n getOptionSuggestions,\n getOptionTitles,\n getOptionSlugs\n} from \"../0-adv-components/utils.jsx\";\n\n(function ( wpI18n, wpHooks, wpBlocks, wpBlockEditor, wpComponents, wpCompose, wpElement ) {\n wpBlockEditor = wp.blockEditor || wp.editor;\n const { addFilter } = wpHooks;\n const { sprintf, __ } = wpI18n;\n const { hasBlockSupport } = wpBlocks;\n const { InspectorControls, BlockControls } = wpBlockEditor;\n const { DateTimePicker, ToggleControl, PanelBody, Notice, FormTokenField, SelectControl } = wpComponents;\n const { createHigherOrderComponent } = wpCompose;\n const { Component, Fragment } = wpElement;\n\n // do not show this feature if disabled.\n if( !parseInt(advgbBlocks.block_controls) ) return;\n\n // Blocks that are not supported\n let NON_SUPPORTED_BLOCKS = [\n 'core/freeform',\n 'core/legacy-widget',\n 'core/widget-area',\n 'core/column',\n 'advgb/tab',\n 'advgb/column'\n ];\n\n const getGlobalControls = function () {\n return typeof advgb_block_controls_vars.controls !== 'undefined'\n && Object.keys(advgb_block_controls_vars.controls).length > 0\n ? advgb_block_controls_vars.controls\n : [];\n }\n\n /**\n * Check if a control is enabled\n *\n * @since 3.1.0\n * @param {string} control The use case block control. e.g. 'schedule'\n *\n * @return {bool}\n */\n const isControlEnabled = function( control ) {\n return typeof control !== 'undefined' && control;\n }\n\n /**\n * Check if at least one control is enabled per block instance\n *\n * @since 3.1.1\n * @param {string} controlAttrs Controls attributes. e.g. advgbBlockControls or props.attributes @TODO Figure out a way to NOT require controlAttrs as param due is the same always\n *\n * @return {bool}\n */\n const isAnyControlEnabledBlock = function( controlAttrs ) {\n const globalControls = getGlobalControls();\n let counter = 0;\n let blockControls = []; // Controls enabled in block instance\n\n // Get enabled global controls (in Settings)\n Object.keys(globalControls).forEach( (item) => {\n if( isControlEnabled( advgb_block_controls_vars.controls[item] ) ) {\n blockControls.push(item);\n }\n } );\n\n // Get counter for enabled controls in block instance\n blockControls.forEach( (item) => {\n if( currentControlKey( controlAttrs, item, 'enabled' ) ) {\n counter++;\n }\n } );\n\n return counter > 0 ? true : false;\n }\n\n /**\n * Check if at least one control is enabled globally (in Settings)\n *\n * @since 3.1.0\n *\n * @return {bool}\n */\n const isAnyControlEnabledGlobal = function() {\n const globalControls = getGlobalControls();\n let counter = 0;\n\n Object.keys(globalControls).map( (item) => {\n if( isControlEnabled( advgb_block_controls_vars.controls[item] ) ) {\n counter++;\n }\n } );\n\n return counter > 0 ? true : false;\n }\n\n /**\n * Return single controls array attribute value\n *\n * @since 3.1.0\n * @param {string} controlAttrs Controls attributes. e.g. advgbBlockControls or props.attributes @TODO Figure out a way to NOT require controlAttrs as param due is the same always\n * @param {string} control The use case block control. e.g. 'schedule'\n * @param {string} key The control key to check. e.g. 'enabled'\n *\n * @return {mixed}\n */\n const currentControlKey = function( controlAttrs, control, key ) {\n\n // Check if advgbBlockControls attribute exists\n const controlsAdded = typeof controlAttrs !== 'undefined' && controlAttrs.length\n ? true\n : false;\n // Check if control exists in advgbBlockControls array\n const controlExists = controlsAdded\n && controlAttrs.some( (element) => element.control === control )\n ? true\n : false;\n\n if( controlExists ) {\n const itemIndex = controlAttrs.findIndex(element => element.control === control);\n\n // No control found (this check seems not necessary but is here to prevent an unlikely error)\n if( itemIndex < 0 ) {\n return false;\n }\n\n let newArray = [...controlAttrs];\n const obj = newArray[itemIndex];\n\n return obj[key];\n }\n\n return null;\n }\n\n // Add non supported blocks according to Block controls\n if( typeof advgb_block_controls_vars !== 'undefined'\n && typeof advgb_block_controls_vars.non_supported !== 'undefined'\n && advgb_block_controls_vars.non_supported.length > 0\n ) {\n // Merge dynamically disabled blocks\n NON_SUPPORTED_BLOCKS = [...NON_SUPPORTED_BLOCKS, ...advgb_block_controls_vars.non_supported];\n // Remove duplicated values\n NON_SUPPORTED_BLOCKS = [...new Set(NON_SUPPORTED_BLOCKS)];\n }\n\n // Register block controls to blocks attributes\n addFilter( 'blocks.registerBlockType', 'advgb/blockControls', function ( settings ) {\n if ( ! NON_SUPPORTED_BLOCKS.includes( settings.name ) && isAnyControlEnabledGlobal() ) {\n settings.attributes = Object.assign( settings.attributes, {\n advgbBlockControls: {\n type: 'array',\n items: {\n type: 'object'\n },\n default: []\n }\n } );\n }\n\n return settings;\n } );\n\n const withEditControls = createHigherOrderComponent( ( BlockEdit ) => {\n\n return class BlockControlsEdit extends Component {\n\n constructor(props) {\n super(...props);\n\n this.state = {\n taxModOptions: [], // Store modified taxonomy options to decide if selected tax is for \"all terms\" or \"selected terms\"\n termOptions: [], // Store term options with slug (id) and title\n searchTermWord: '', // Updated when searching terms\n initArchive: true, // When true, trigger initArchiveControl()\n updateTaxLabels: false // When true, update taxonomy option labels\n }\n\n this.isPost = this.isPost.bind(this);\n }\n\n /**\n * Get filtered term slugs based on selected taxonomies\n *\n * @since 3.1.1\n * @param {array} taxonomies Array of taxonomies slugs\n *\n * @return {array}\n */\n getTermSlugs( taxonomies ) {\n const allTaxonomies = this.getTaxonomies();\n let terms = [];\n\n taxonomies.forEach( ( tax ) => {\n const allTaxonomies = this.getTaxonomies();\n const itemIndex = allTaxonomies.findIndex( ( element ) => element.slug === tax );\n\n allTaxonomies[itemIndex].terms.forEach( ( term ) => {\n terms.push( term.slug );\n } );\n } );\n\n return terms;\n }\n\n /**\n * Get taxonomies\n *\n * @since 3.1.1\n *\n * @return {array}\n */\n getTaxonomies() {\n return typeof advgb_block_controls_vars.taxonomies !== 'undefined'\n && advgb_block_controls_vars.taxonomies.length > 0\n ? advgb_block_controls_vars.taxonomies\n : [];\n }\n\n /**\n * Get all the available user roles from the site\n *\n * @since 3.1.0\n *\n * @return {array}\n */\n getUserRoles() {\n return typeof advgb_block_controls_vars.user_roles !== 'undefined'\n && advgb_block_controls_vars.user_roles.length > 0\n ? advgb_block_controls_vars.user_roles\n : [];\n }\n\n /**\n * Get filtered terms based on selected taxonomies\n *\n * @since 3.1.1\n * @param {array} taxonomies Taxonomies slugs\n *\n * @return {array}\n */\n getTerms( taxonomies ) {\n const allTaxonomies = this.getTaxonomies();\n let terms = [];\n\n taxonomies.forEach( ( tax ) => {\n const allTaxonomies = this.getTaxonomies();\n const itemIndex = allTaxonomies.findIndex( ( element ) => element.slug === tax );\n\n allTaxonomies[itemIndex].terms.forEach( ( term ) => {\n terms.push( {\n slug: term.slug,\n title: `${term.title} (${allTaxonomies[itemIndex].title})`\n } );\n } );\n } );\n\n return terms;\n }\n\n /**\n * Get pages\n *\n * @since 3.1.1\n *\n * @return {array}\n */\n getPages() {\n return typeof advgb_block_controls_vars.page !== 'undefined'\n && advgb_block_controls_vars.page.length > 0\n ? advgb_block_controls_vars.page\n : [];\n }\n\n /**\n * Update advgbBlockControls attribute when a key value changes\n *\n * @since 2.14.0\n * @param {string} control The use case block control. e.g. 'schedule'\n * @param {string} key The control key to modify. e.g. 'enabled'\n * @param {string} value The control key value (not required for boolean keys)\n *\n * @return {void}\n */\n changeControlKey( control, key, value = '' ) {\n const { attributes, setAttributes } = this.props;\n const { advgbBlockControls } = attributes;\n\n // Control objects to add when enabled for the first time\n const scheduleControl = {\n control: 'schedule',\n enabled: true,\n dateFrom: null,\n dateTo: null,\n recurring: false\n };\n const userRoleControl = {\n control: 'user_role',\n enabled: true,\n roles: [],\n approach: 'public'\n };\n const archiveControl = {\n control: 'archive',\n enabled: true,\n taxonomies: [],\n approach: 'exclude'\n };\n const pageControl = {\n control: 'page',\n enabled: true,\n pages: [],\n approach: 'exclude'\n };\n\n // Check if advgbBlockControls attribute exists\n const controlsAdded = typeof advgbBlockControls !== 'undefined' && advgbBlockControls.length\n ? true\n : false;\n // Check if control exists in advgbBlockControls array\n const controlExists = controlsAdded &&\n advgbBlockControls.some( (element) => element.control === control )\n ? true\n : false;\n\n if( controlExists ) {\n const itemIndex = advgbBlockControls.findIndex(element => element.control === control);\n\n // No control found (this check seems not necessary but is here to prevent an unlikely error)\n if( itemIndex < 0 ) {\n return false;\n }\n\n let newArray = [...advgbBlockControls];\n const obj = newArray[itemIndex];\n\n newArray[itemIndex] = typeof obj[key] === 'boolean'\n ? { ...newArray[itemIndex], [key]: !obj[key] }\n : { ...newArray[itemIndex], [key]: value }\n\n setAttributes( {\n advgbBlockControls: newArray\n } );\n } else if( controlsAdded && ! controlExists ) {\n\n // Add a new control object when other controls already exists\n switch( control ) {\n case 'schedule':\n setAttributes( {\n advgbBlockControls: [\n ...advgbBlockControls,\n scheduleControl\n ]\n } );\n break;\n\n case 'user_role':\n setAttributes( {\n advgbBlockControls: [\n ...advgbBlockControls,\n userRoleControl\n ]\n } );\n break;\n\n case 'archive':\n setAttributes( {\n advgbBlockControls: [\n ...advgbBlockControls,\n archiveControl\n ]\n } );\n break;\n\n case 'page':\n setAttributes( {\n advgbBlockControls: [\n ...advgbBlockControls,\n pageControl\n ]\n } );\n break;\n }\n } else {\n // Add the first control object attribute\n switch( control ) {\n case 'schedule':\n setAttributes( {\n advgbBlockControls: [ scheduleControl ]\n } );\n break;\n\n case 'user_role':\n setAttributes( {\n advgbBlockControls: [ userRoleControl ]\n } );\n break;\n\n case 'archive':\n setAttributes( {\n advgbBlockControls: [ archiveControl ]\n } );\n break;\n\n case 'page':\n setAttributes( {\n advgbBlockControls: [ pageControl ]\n } );\n break;\n }\n }\n }\n\n /**\n * Update archive control in advgbBlockControls attribute when taxonomies value changes\n *\n * @since 3.1.2\n *\n * @param {string} topic 'taxonomies' or 'terms'\n * @param {string} slugs The taxonomy slugs or term ids to insert/modify. e.g. ['category','post_tag'] or [82,161,99] or ['all_<taxonomy_slug>']\n *\n * @return {void}\n */\n changeArchiveControl( topic, slugs ) {\n const { attributes, setAttributes } = this.props;\n const { advgbBlockControls } = attributes;\n\n let taxArray = [];\n const controlIndex = advgbBlockControls.findIndex(element => element.control === 'archive');\n\n // No control found (this check seems not necessary but is here to prevent an unlikely error)\n if( controlIndex < 0 ) {\n return false;\n }\n\n let newArray = [...advgbBlockControls];\n\n if( topic === 'taxonomies' ) {\n\n // Check each taxonomy and its terms\n slugs.forEach( (item) => {\n\n // Get terms from current taxonomy (item)\n const taxIndex = newArray[controlIndex].taxonomies.findIndex(element => element.tax === item);\n\n if( taxIndex === -1 ) {\n\n // The last selected taxonomy\n taxArray.push( {\n tax: item,\n terms: [],\n all: true\n } );\n\n } else {\n\n // Existing taxonomy\n const terms = newArray[controlIndex].taxonomies[taxIndex].terms.length\n ? newArray[controlIndex].taxonomies[taxIndex].terms\n : [];\n const approach = terms.length ? 'select' : 'all';\n\n taxArray.push( {\n tax: item,\n terms: terms,\n all: terms.length ? false : true\n } );\n }\n } );\n\n newArray[controlIndex] = { ...newArray[controlIndex], ['taxonomies']: taxArray }\n\n setAttributes( {\n advgbBlockControls: newArray\n } );\n\n } else if( topic === 'terms' ) {\n\n let terms = {};\n const taxonomies = this.currentArchiveControl( 'taxonomies' );\n\n // Check each term id (item). slug means the id\n slugs.forEach( ( item ) => {\n\n // Find the current term in termOptions state to use its tax later\n const option = this.state.termOptions.find( el => el.slug === item);\n\n if( terms[option.tax] === undefined ) {\n terms[option.tax] = [];\n }\n\n // Get taxonomy from current term (item)\n const taxIndex = newArray[controlIndex].taxonomies.findIndex( element => element.tax === option.tax);\n\n /* Taxonomy for this term is selected? Is a bit reduntant but let's make sure\n * Then include the term.\n */\n if( taxonomies.includes( option.tax ) ) {\n terms[option.tax].push( item );\n }\n\n } );\n\n // Update taxonomies with at least one term selected\n Object.keys( terms ).forEach( (tax) => {\n\n // Get taxonomy from current tax\n const taxIndex = newArray[controlIndex].taxonomies.findIndex( element => element.tax === tax);\n\n if( taxIndex >= 0 ) {\n newArray[controlIndex].taxonomies[taxIndex] = {\n tax: tax,\n terms: terms[tax],\n all: terms[tax].length ? false : true\n };\n }\n } );\n\n // Include taxonomies with no terms selected (empty terms[option.tax] array)\n taxonomies.forEach( ( tax ) => {\n if( ! Object.keys( terms ).includes( tax ) ) {\n\n // Get taxonomy from current tax\n const taxIndex = newArray[controlIndex].taxonomies.findIndex( element => element.tax === tax);\n\n if( taxIndex >= 0 ) {\n newArray[controlIndex].taxonomies[taxIndex] = {\n tax: tax,\n terms: [],\n all: true\n };\n }\n }\n } );\n\n setAttributes( {\n advgbBlockControls: newArray\n } );\n\n } else {\n // Nothing to do here\n }\n }\n\n /**\n * Return merged taxonomies or terms\n *\n * @since 3.1.2\n *\n * @param {string} topic 'taxonomies' or 'terms'\n *\n * @return {array} An single array with all the selected terms or taxonomies ['category','post_tag'] or [99,182,42]\n */\n currentArchiveControl( topic ) {\n const { attributes, setAttributes } = this.props;\n const { advgbBlockControls } = attributes;\n\n let result = [];\n\n /* Get all the taxonomy objects.\n * e.g.\n * [\n * { \"tax\": \"post_tag\", \"terms\": [220,221]},\n * { \"tax\": \"category\", \"terms\": []}\n * ]\n */\n const taxonomies = currentControlKey( advgbBlockControls, 'archive', 'taxonomies' ).length\n ? currentControlKey( advgbBlockControls, 'archive', 'taxonomies' )\n : [];\n\n if( topic === 'taxonomies' ) {\n\n taxonomies.forEach( (item) => {\n result.push(item.tax);\n } );\n\n } else if( topic === 'terms' ) {\n\n taxonomies.forEach( (item) => {\n item.terms.forEach( ( el ) => {\n result.push( el ); // term id\n } );\n } );\n\n } else {\n // Nothing to do here\n }\n\n return result;\n }\n\n /**\n * Execute when taxonomy selection changes\n *\n * @since 3.1.1\n *\n * @return {void}\n */\n taxonomiesChanged() {\n const { attributes } = this.props;\n const { advgbBlockControls } = attributes;\n\n const currentTerms = !! currentControlKey( advgbBlockControls, 'archive', 'terms' )\n ? currentControlKey( advgbBlockControls, 'archive', 'terms' )\n : [];\n const taxonomies = !! currentControlKey( advgbBlockControls, 'archive', 'taxonomies' )\n ? currentControlKey( advgbBlockControls, 'archive', 'taxonomies' )\n : [];\n\n if( currentTerms.length ) {\n\n let result = [];\n currentTerms.forEach( ( slug ) => {\n const itemIndex = this.state.termOptions.findIndex( ( item ) => item.slug === slug );\n\n /* Get only the terms that belongs to selected taxonomies\n * and skip the ones that belongs to the deleted taxonomy\n */\n if( taxonomies.includes( this.state.termOptions[itemIndex].tax ) ) {\n result.push( this.state.termOptions[itemIndex].slug );\n }\n } );\n\n this.changeControlKey(\n 'archive',\n 'terms',\n result\n );\n }\n\n /* Remove term options from non-selected taxonomies.\n * Case scenario: the terms from the last removed taxonomy.\n */\n this.setState( {\n termOptions: this.state.termOptions.filter( (item) => {\n return this.currentArchiveControl( 'taxonomies' ).includes( item.tax );\n } )\n } );\n\n // Update tax label options to \"All <taxonomy> terms\" or \"Selected <taxonomy> terms\"\n this.modifyTaxLabels();\n }\n\n /**\n * Get selected terms on first load\n *\n * @since 3.1.1\n *\n * @return {void}\n */\n initArchiveControl() {\n const { advgbBlockControls } = this.props.attributes;\n\n wp.apiFetch( {\n path: wp.url.addQueryArgs(\n 'advgb/v1/terms',\n {\n taxonomies: this.currentArchiveControl( 'taxonomies' ),\n ids: this.currentArchiveControl( 'terms' )\n }\n )\n } ).then( ( list ) => {\n\n // Update tax label options to \"All <taxonomy> terms\" or \"Selected <taxonomy> terms\"\n this.modifyTaxLabels();\n\n this.setState( {\n termOptions: list,\n initArchive: false,\n updateTaxLabels: false\n } );\n } );\n\n\n }\n\n /**\n * Initial taxonomy labels to allow \"All <taxonomy> terms\" \"Selected <taxonomy> terms\" visual indicator\n *\n * @since 3.1.2\n *\n * @return {array}\n */\n iniTaxLabels() {\n\n let result = [];\n this.getTaxonomies().forEach( (item) => {\n /* Item example\n * {\n * \"slug\": \"category\",\n * \"title\": \"All Category terms\",\n * \"singular\": \"Category\"\n * }\n */\n result.push( {\n slug: item.slug,\n title: sprintf(\n __( 'All %s terms', 'advanced-gutenberg' ),\n item.title\n ),\n singular: item.title\n\n } );\n } );\n\n return result;\n }\n\n /**\n * Modify taxonomy labels. Very similar to iniTaxLabels()\n *\n * @since 3.1.2\n *\n * @return {array}\n */\n modifyTaxLabels() {\n const { advgbBlockControls } = this.props.attributes;\n\n /* Get all selected taxonomy objects.\n * e.g.\n * [\n * { \"tax\": \"post_tag\", \"terms\": [220,221]},\n * { \"tax\": \"category\", \"terms\": []}\n * ]\n */\n const taxonomies = currentControlKey( advgbBlockControls, 'archive', 'taxonomies' ).length\n ? currentControlKey( advgbBlockControls, 'archive', 'taxonomies' )\n : [];\n\n // Copy whole state\n let options = [...this.state.taxModOptions];\n\n options.forEach( (item, index) => {\n const tax = taxonomies.find( el => item.slug === el.tax );\n\n // Copy option to modify\n let option = { ...options[index] };\n // Update title value\n option.title = sprintf(\n tax === undefined || ! tax.terms.length\n ? __( 'All %s terms', 'advanced-gutenberg' )\n : __( 'Selected %s terms', 'advanced-gutenberg' ),\n option.singular\n );\n // Add option back to the state\n options[index] = option;\n } );\n\n // Save\n this.setState( {\n taxModOptions: options,\n updateTaxLabels: false\n } );\n }\n\n /**\n * Search terms based on search\n *\n * @since 3.1.1\n *\n * @return {void}\n */\n searchTerms() {\n const { termOptions, searchTermWord } = this.state;\n const { advgbBlockControls } = this.props.attributes;\n\n wp.apiFetch( {\n /*/ To get taxonomies\n path: wp.url.addQueryArgs( 'wp/v2/taxonomies', { context: 'edit' } )*/\n\n path: wp.url.addQueryArgs(\n 'advgb/v1/terms',\n {\n search: searchTermWord,\n taxonomies: this.currentArchiveControl( 'taxonomies' )\n }\n )\n\n } ).then( ( list ) => {\n\n /*/ To get taxonomies\n Object.keys(list).forEach( (item) => {\n options.push( {\n label: list[item].name,\n value: list[item].slug\n } );\n });*/\n\n // Merge selected terms with results from fetch\n let options = [ ...termOptions, ...list ];\n\n // Remove duplicated values\n options = Array.from( new Set( options.map( a => a.slug ) ) )\n .map( slug => {\n return options.find( a => a.slug === slug )\n });\n\n this.setState( {\n termOptions: options\n } );\n } );\n }\n\n /**\n * Check if we're in post edit screen\n *\n * @since 3.1.2\n *\n * @return {bool}\n */\n isPost() {\n return wp.data.select('core/editor') && wp.data.select('core/editor').getCurrentPostId();\n }\n\n /**\n * Get the timezone label from site settings stored in advgbBlocks object\n *\n * @since 3.1.4\n *\n * @return {bool}\n */\n getTimezoneLabel() {\n return typeof advgbBlocks.timezone !== 'undefined' && advgbBlocks.timezone.length\n ? advgbBlocks.timezone.replace(/_/g, ' ')\n : __( 'WordPress settings timezone', 'advanced-gutenberg' )\n }\n\n /**\n * Get the timezone slug from site settings stored in advgbBlocks object\n *\n * @since 3.1.4\n *\n * @return {bool}\n */\n getTimezoneSlug() {\n return typeof advgbBlocks.timezone !== 'undefined' && advgbBlocks.timezone.length\n ? advgbBlocks.timezone\n : 'UTC'\n }\n\n componentDidMount() {\n this.setState( {\n taxModOptions: this.iniTaxLabels()\n } );\n }\n\n componentDidUpdate(prevProps, prevState) {\n const { attributes, isSelected, name } = this.props;\n const { advgbBlockControls } = attributes;\n const { advgbBlockControls: prevBlockControls } = prevProps.attributes;\n const { searchTermWord, initArchive } = this.state;\n const { searchTermWord: prevTermWord } = prevState;\n\n // Get human readable selected terms on block selection the first time\n if( ! this.isPost()\n && ! NON_SUPPORTED_BLOCKS.includes( name )\n && isSelected\n && initArchive\n && isControlEnabled( advgb_block_controls_vars.controls.archive )\n && currentControlKey( advgbBlockControls, 'archive', 'enabled' )\n && this.currentArchiveControl( 'taxonomies' ).length\n && this.currentArchiveControl( 'terms' ).length\n ) {\n this.initArchiveControl();\n }\n\n // Search terms\n if( searchTermWord !== prevTermWord && searchTermWord.length > 2 ) {\n this.searchTerms();\n }\n\n // Update available terms and remove terms which taxonomy has been removed\n if( ! this.isPost()\n && isControlEnabled( advgb_block_controls_vars.controls.archive )\n && currentControlKey( advgbBlockControls, 'archive', 'enabled' )\n && (\n currentControlKey( prevBlockControls, 'archive', 'taxonomies' ) !== currentControlKey( advgbBlockControls, 'archive', 'taxonomies' ) // This trigger works when taxo changes, but not terms\n || this.state.updateTaxLabels // Trigger when terms changes\n )\n ) {\n this.taxonomiesChanged();\n }\n }\n\n render() {\n const { attributes, setAttributes } = this.props;\n const { advgbBlockControls } = attributes;\n\n return ( [\n this.props.isSelected && ( ! NON_SUPPORTED_BLOCKS.includes( this.props.name ) )\n && isAnyControlEnabledGlobal() &&\n <InspectorControls key=\"advgb-bc-controls\">\n <PanelBody\n title={ __( 'Block Controls', 'advanced-gutenberg' ) }\n icon=\"visibility\"\n initialOpen={ false }\n className={\n isAnyControlEnabledBlock( advgbBlockControls )\n ? 'advgb-feature-icon-active' : ''\n }\n >\n { isControlEnabled( advgb_block_controls_vars.controls.schedule ) && (\n <Fragment>\n <ToggleControl\n label={ __( 'Schedule', 'advanced-gutenberg' ) }\n help={ currentControlKey( advgbBlockControls, 'schedule', 'enabled' )\n ? __( 'Choose when to start showing and/or stop showing this block.', 'advanced-gutenberg' )\n : ''\n }\n checked={ currentControlKey( advgbBlockControls, 'schedule', 'enabled' ) }\n onChange={ () => this.changeControlKey( 'schedule', 'enabled' ) }\n />\n { currentControlKey( advgbBlockControls, 'schedule', 'enabled' ) && (\n <Fragment>\n <div style={ { marginBottom: 30 } }>\n <AdvDateTimeControl\n buttonLabel={ __( 'Now', 'advanced-gutenberg' ) }\n dateLabel={ __( 'Start showing', 'advanced-gutenberg' ) }\n date={ currentControlKey( advgbBlockControls, 'schedule', 'dateFrom' ) }\n onChangeDate={ ( newDate ) => this.changeControlKey( 'schedule', 'dateFrom', newDate ) }\n onDateClear={ () => this.changeControlKey( 'schedule', 'dateFrom', null ) }\n onInvalidDate={ false }\n />\n <AdvDateTimeControl\n buttonLabel={ __( 'Never', 'advanced-gutenberg' ) }\n dateLabel={ __( 'Stop showing', 'advanced-gutenberg' ) }\n date={ !! currentControlKey( advgbBlockControls, 'schedule', 'dateTo' ) ? currentControlKey( advgbBlockControls, 'schedule', 'dateTo' ) : null }\n onChangeDate={ ( newDate ) => this.changeControlKey( 'schedule', 'dateTo', newDate ) }\n onDateClear={ () => this.changeControlKey( 'schedule', 'dateTo', null ) }\n onInvalidDate={ ( date ) => {\n // Disable all dates before dateFrom\n if( currentControlKey( advgbBlockControls, 'schedule', 'dateFrom' ) ) {\n let thisDate = new Date(date.getTime());\n thisDate.setHours(0, 0, 0, 0);\n let fromDate = new Date( currentControlKey( advgbBlockControls, 'schedule', 'dateFrom' ) );\n fromDate.setHours(0, 0, 0, 0);\n return thisDate.getTime() < fromDate.getTime();\n }\n } }\n />\n { ( currentControlKey( advgbBlockControls, 'schedule', 'dateFrom' ) > currentControlKey( advgbBlockControls, 'schedule', 'dateTo' ) ) &&\n <Notice\n className=\"advgb-notice-sidebar\"\n status=\"warning\"\n isDismissible={ false }\n >\n { __( '\"Stop showing\" date should be after \"Start showing\" date!', 'advanced-gutenberg' ) }\n </Notice>\n }\n { currentControlKey( advgbBlockControls, 'schedule', 'dateFrom' ) && currentControlKey( advgbBlockControls, 'schedule', 'dateTo' ) &&\n <ToggleControl\n label={ __( 'Recurring', 'advanced-gutenberg' ) }\n checked={ currentControlKey( advgbBlockControls, 'schedule', 'recurring' ) }\n onChange={ () => this.changeControlKey( 'schedule', 'recurring' ) }\n help={ __( 'If Recurring is enabled, this block will be displayed every year between the selected dates.', 'advanced-gutenberg' ) }\n />\n }\n <AdvDaysControl\n label={ __( 'On these days (optional)', 'advanced-gutenberg' ) }\n days={\n !! currentControlKey( advgbBlockControls, 'schedule', 'days' )\n ? currentControlKey( advgbBlockControls, 'schedule', 'days' )\n : []\n }\n onChangeDays={ ( value ) => this.changeControlKey( 'schedule', 'days', value ) }\n />\n <label style={ { marginBottom: 8, display: 'block' } }>\n { __( 'Between these times (optional)', 'advanced-gutenberg' ) }\n </label>\n <AdvTimeControl\n label={ __( 'From', 'advanced-gutenberg' ) }\n currentTime={\n !! currentControlKey( advgbBlockControls, 'schedule', 'timeFrom' )\n ? currentControlKey( advgbBlockControls, 'schedule', 'timeFrom' )\n : null\n }\n onChangeTime={\n ( newTime ) => this.changeControlKey(\n 'schedule',\n 'timeFrom',\n newTime\n )\n }\n onTimeClear={ () => this.changeControlKey( 'schedule', 'timeFrom', null ) }\n />\n <AdvTimeControl\n label={ __( 'To', 'advanced-gutenberg' ) }\n currentTime={\n currentControlKey( advgbBlockControls, 'schedule', 'timeTo' ) || null\n }\n onChangeTime={\n ( newTime ) => this.changeControlKey(\n 'schedule',\n 'timeTo',\n newTime\n )\n }\n onTimeClear={ () => this.changeControlKey( 'schedule', 'timeTo', null ) }\n />\n { (\n currentControlKey( advgbBlockControls, 'schedule', 'timeFrom' )\n && currentControlKey( advgbBlockControls, 'schedule', 'timeTo' )\n && (\n '01/01/2020T' + currentControlKey( // We append a dummy date to make a datetime comparison\n advgbBlockControls, 'schedule', 'timeFrom'\n ) >= '01/01/2020T' + currentControlKey( // We append a dummy date to make a datetime comparison\n advgbBlockControls, 'schedule', 'timeTo'\n )\n )\n ) &&\n <Notice\n className=\"advgb-notice-sidebar\"\n status=\"warning\"\n isDismissible={ false }\n >\n { __( '\"To\" time should be after \"From\" time!', 'advanced-gutenberg' ) }\n </Notice>\n }\n { (\n (\n currentControlKey( advgbBlockControls, 'schedule', 'timeFrom' )\n && ! currentControlKey( advgbBlockControls, 'schedule', 'timeTo' )\n ) || (\n ! currentControlKey( advgbBlockControls, 'schedule', 'timeFrom' )\n && currentControlKey( advgbBlockControls, 'schedule', 'timeTo' )\n )\n ) &&\n <Notice\n className=\"advgb-notice-sidebar\"\n status=\"warning\"\n isDismissible={ false }\n >\n { __( 'Please choose \"From\" time and \"To\" time.', 'advanced-gutenberg' ) }\n </Notice>\n }\n <AdvTimezoneControl\n label={ __( 'Timezone', 'advanced-gutenberg' ) }\n defaultTimezone={ this.getTimezoneLabel() }\n value={\n currentControlKey( advgbBlockControls, 'schedule', 'timezone' )\n ? currentControlKey( advgbBlockControls, 'schedule', 'timezone' )\n : this.getTimezoneSlug()\n }\n onChangeTimezone={ ( value ) => this.changeControlKey( 'schedule', 'timezone', value ) }\n />\n </div>\n </Fragment>\n ) }\n </Fragment>\n ) }\n { isControlEnabled( advgb_block_controls_vars.controls.user_role ) && (\n <Fragment>\n <ToggleControl\n label={ __( 'User roles', 'advanced-gutenberg' ) }\n help={ currentControlKey( advgbBlockControls, 'user_role', 'enabled' )\n ? __( 'Choose which users can see this block.', 'advanced-gutenberg' )\n : ''\n }\n checked={ currentControlKey( advgbBlockControls, 'user_role', 'enabled' ) }\n onChange={ () => this.changeControlKey( 'user_role', 'enabled' ) }\n />\n { currentControlKey( advgbBlockControls, 'user_role', 'enabled' ) && (\n <Fragment>\n <div className=\"advgb-revert-mb\">\n <SelectControl\n value={\n currentControlKey( advgbBlockControls, 'user_role', 'approach' )\n }\n options={ [\n {\n value: 'public',\n label: __( 'Show to everyone', 'advanced-gutenberg' )\n },\n {\n value: 'hidden',\n label: __( 'Hide from everyone', 'advanced-gutenberg' )\n },\n {\n value: 'login',\n label: __( 'Show to logged in users', 'advanced-gutenberg' )\n },\n {\n value: 'logout',\n label: __( 'Show to logged out users', 'advanced-gutenberg' )\n },\n {\n value: 'include',\n label: __( 'Show to the selected user roles', 'advanced-gutenberg' )\n },\n {\n value: 'exclude',\n label: __( 'Hide from the selected user roles', 'advanced-gutenberg' )\n }\n ] }\n onChange={ ( value ) => this.changeControlKey( 'user_role', 'approach', value ) }\n />\n </div>\n { ( currentControlKey( advgbBlockControls, 'user_role', 'approach' ) === 'include' ||\n currentControlKey( advgbBlockControls, 'user_role', 'approach' ) === 'exclude'\n ) && (\n <Fragment>\n <FormTokenField\n multiple\n label={ __( 'Select user roles', 'advanced-gutenberg' ) }\n placeholder={ __( 'Search', 'advanced-gutenberg' ) }\n suggestions={ getOptionSuggestions( this.getUserRoles() ) }\n maxSuggestions={ 10 }\n value={\n getOptionTitles(\n !! currentControlKey( advgbBlockControls, 'user_role', 'roles' )\n ? currentControlKey( advgbBlockControls, 'user_role', 'roles' )\n : [],\n this.getUserRoles()\n )\n }\n onChange={ ( value ) => {\n this.changeControlKey( 'user_role', 'roles', getOptionSlugs( value, this.getUserRoles() ) )\n } }\n __experimentalExpandOnFocus\n />\n { ( currentControlKey( advgbBlockControls, 'user_role', 'approach' ) === 'include' ||\n currentControlKey( advgbBlockControls, 'user_role', 'approach' ) === 'exclude'\n )\n && ! currentControlKey( advgbBlockControls, 'user_role', 'roles' ).length && (\n <Notice\n className=\"advgb-notice-sidebar\"\n status=\"warning\"\n isDismissible={ false }\n style={ { marginBottom: 30 } }\n >\n {\n __(\n 'Please select at least one user role.',\n 'advanced-gutenberg'\n )\n }\n </Notice>\n ) }\n </Fragment>\n ) }\n </Fragment>\n ) }\n </Fragment>\n ) }\n { ! this.isPost() && ( // Disabled in post edit\n <Fragment>\n { isControlEnabled( advgb_block_controls_vars.controls.archive ) && (\n <Fragment>\n <ToggleControl\n label={ __( 'Term archives', 'advanced-gutenberg' ) }\n help={ currentControlKey( advgbBlockControls, 'archive', 'enabled' )\n ? __( 'Choose on which taxonomies and terms archive pages your blocks can be displayed.', 'advanced-gutenberg' )\n : ''\n }\n checked={ currentControlKey( advgbBlockControls, 'archive', 'enabled' ) }\n onChange={ () => this.changeControlKey( 'archive', 'enabled' ) }\n />\n { currentControlKey( advgbBlockControls, 'archive', 'enabled' ) && (\n <Fragment>\n <div className=\"advgb-revert-mb--disabled\" style={{ marginBottom: 20 }}>\n <SelectControl\n value={\n currentControlKey( advgbBlockControls, 'archive', 'approach' )\n }\n options={ [\n {\n value: 'include',\n label: __( 'Show for selected terms', 'advanced-gutenberg' )\n },\n {\n value: 'exclude',\n label: __( 'Hide for selected terms', 'advanced-gutenberg' )\n }\n ] }\n onChange={ ( value ) => this.changeControlKey( 'archive', 'approach', value ) }\n />\n </div>\n <FormTokenField\n multiple\n label={ __( 'Select taxonomies', 'advanced-gutenberg' ) }\n placeholder={ __( 'Search taxonomies', 'advanced-gutenberg' ) }\n suggestions={ getOptionSuggestions( this.state.taxModOptions || this.getTaxonomies() ) }\n maxSuggestions={ 10 }\n value={\n getOptionTitles(\n this.currentArchiveControl( 'taxonomies' ),\n this.state.taxModOptions || this.getTaxonomies()\n )\n }\n onChange={ ( value ) => {\n this.changeArchiveControl(\n 'taxonomies',\n getOptionSlugs( value, this.state.taxModOptions || this.getTaxonomies() )\n );\n } }\n __experimentalExpandOnFocus\n />\n { ( currentControlKey( advgbBlockControls, 'archive', 'taxonomies' ).length > 0 ) && (\n <Fragment>\n <FormTokenField\n multiple\n label={ __( 'Filter terms', 'advanced-gutenberg' ) }\n placeholder={ __( 'Search terms', 'advanced-gutenberg' ) }\n suggestions={ getOptionSuggestions(\n this.state.termOptions\n ) }\n maxSuggestions={ 10 }\n value={\n getOptionTitles(\n this.currentArchiveControl( 'terms' ),\n this.state.termOptions\n )\n }\n onChange={ ( value ) => {\n this.changeArchiveControl(\n 'terms',\n getOptionSlugs(\n value,\n this.state.termOptions\n )\n );\n this.setState( {\n updateTaxLabels: true\n } );\n } }\n onInputChange={ ( value ) => {\n this.setState( {\n searchTermWord: value\n } );\n } }\n __experimentalShowHowTo={ false }\n />\n <div className=\"advgb-revert-mb--disabled components-form-token-field__help\"\n style={{ marginBottom: 20 }}>\n { __(\n 'Use this filter to apply only to some terms.',\n 'advanced-gutenberg'\n ) }\n </div>\n </Fragment>\n ) }\n </Fragment>\n ) }\n </Fragment>\n ) }\n\n { isControlEnabled( advgb_block_controls_vars.controls.page ) && (\n <Fragment>\n <ToggleControl\n label={ __( 'Pages', 'advanced-gutenberg' ) }\n help={ currentControlKey( advgbBlockControls, 'page', 'enabled' )\n ? __( 'Choose in which pages this block can be displayed.', 'advanced-gutenberg' )\n : ''\n }\n checked={ currentControlKey( advgbBlockControls, 'page', 'enabled' ) }\n onChange={ () => this.changeControlKey( 'page', 'enabled' ) }\n />\n { currentControlKey( advgbBlockControls, 'page', 'enabled' ) && (\n <Fragment>\n <div className=\"advgb-revert-mb\">\n <SelectControl\n value={\n currentControlKey( advgbBlockControls, 'page', 'approach' )\n }\n options={ [\n {\n value: 'include',\n label: __( 'Show on the selected pages', 'advanced-gutenberg' )\n },\n {\n value: 'exclude',\n label: __( 'Hide on the selected pages', 'advanced-gutenberg' )\n }\n ] }\n onChange={ ( value ) => this.changeControlKey( 'page', 'approach', value ) }\n />\n </div>\n { ( currentControlKey( advgbBlockControls, 'page', 'approach' ) === 'include' ||\n currentControlKey( advgbBlockControls, 'page', 'approach' ) === 'exclude'\n ) && (\n <FormTokenField\n multiple\n label={ __( 'Select pages', 'advanced-gutenberg' ) }\n placeholder={ __( 'Search', 'advanced-gutenberg' ) }\n suggestions={ getOptionSuggestions( this.getPages() ) }\n maxSuggestions={ 10 }\n value={\n getOptionTitles(\n !! currentControlKey( advgbBlockControls, 'page', 'pages' )\n ? currentControlKey( advgbBlockControls, 'page', 'pages' )\n : [],\n this.getPages()\n )\n }\n onChange={ ( value ) => {\n this.changeControlKey( 'page', 'pages', getOptionSlugs( value, this.getPages() ) )\n } }\n __experimentalExpandOnFocus\n />\n ) }\n </Fragment>\n ) }\n </Fragment>\n ) }\n </Fragment>\n ) }\n </PanelBody>\n </InspectorControls>,\n <BlockEdit key=\"block-edit-advgb-dates\" {...this.props} />,\n ] )\n }\n }\n }, 'withEditControls' );\n\n // Add option to add controls for supported blocks\n addFilter( 'editor.BlockEdit', 'advgb/addBlockControls', withEditControls );\n\n const withAttributes = createHigherOrderComponent( ( BlockListBlock ) => {\n return ( props ) => {\n if ( ( !NON_SUPPORTED_BLOCKS.includes( props.name ) ) && hasBlockSupport( props.name, 'advgb/blockControls', true ) && isAnyControlEnabledGlobal() ) {\n const { advgbBlockControls } = props.attributes;\n const advgbBcClass = props.isSelected === false\n && isAnyControlEnabledBlock( advgbBlockControls )\n ? 'advgb-bc-editor-preview' : '';\n\n return <BlockListBlock { ...props } className={ classnames( props.className, advgbBcClass ) } advgbBlockControls={ `${ advgbBlockControls }` } />;\n }\n\n return <BlockListBlock { ...props } />;\n };\n }, 'withAttributes' );\n\n // Apply attributes and CSS classes on backend\n addFilter( 'editor.BlockListBlock', 'advgb/loadBackendBlockControls', withAttributes );\n\n})( wp.i18n, wp.hooks, wp.blocks, wp.blockEditor, wp.components, wp.compose, wp.element );\n","/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\tvar nativeCodeString = '[native code]';\n\n\tfunction classNames() {\n\t\tvar classes = [];\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (!arg) continue;\n\n\t\t\tvar argType = typeof arg;\n\n\t\t\tif (argType === 'string' || argType === 'number') {\n\t\t\t\tclasses.push(arg);\n\t\t\t} else if (Array.isArray(arg)) {\n\t\t\t\tif (arg.length) {\n\t\t\t\t\tvar inner = classNames.apply(null, arg);\n\t\t\t\t\tif (inner) {\n\t\t\t\t\t\tclasses.push(inner);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (argType === 'object') {\n\t\t\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\t\t\tclasses.push(arg.toString());\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tfor (var key in arg) {\n\t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\t\t\tclasses.push(key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn classes.join(' ');\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","import hourConvert from 'hour-convert';\n\nconst { ButtonGroup, Button, DateTimePicker, TextControl, CheckboxControl, Popover, Tooltip, SelectControl, Icon } = wp.components;\nconst { Component, Fragment, useState } = wp.element;\nconst { __, _x } = wp.i18n;\nconst { applyFilters } = wp.hooks;\n\nexport function AdvDateTimeControl(props) {\n const [popupState, setPopupState] = useState( false );\n const togglePopup = () => {\n setPopupState( ! popupState );\n };\n\n const {\n buttonLabel,\n dateLabel,\n date,\n onChangeDate,\n onDateClear,\n onInvalidDate\n } = props;\n\n return (\n <Fragment>\n <div className=\"advgb-advcalendar-control\">\n <label>\n { dateLabel }\n </label>\n <div>\n <Button\n isLink\n icon=\"calendar\"\n onClick={ togglePopup }\n >\n <Tooltip text={ __( 'Change date', 'advanced-gutenberg' ) }>\n <span>\n { date ? moment( date ).format( \"MMMM DD YYYY, h:mm a\" ) : buttonLabel }\n </span>\n </Tooltip>\n </Button>\n { date &&\n \t\t\t\t<Button\n \t\t\t\t\ticon=\"no-alt\"\n className=\"advgb-advcalendar-remove-icon\"\n \t\t\t\t\tonClick={ () => onDateClear() }\n \t\t\t\t/>\n \t\t\t}\n </div>\n </div>\n { popupState &&\n <Popover\n className=\"advgb-advcalendar-popover\"\n onClose={ setPopupState.bind( null, false ) }\n resize={ false }\n >\n <label className=\"advgb-advcalendar-popover-label\">\n { dateLabel }\n <Button\n \t\t\t\t\ticon=\"no-alt\"\n className=\"advgb-advcalendar-remove-icon\"\n \t\t\t\t\tonClick={ togglePopup }\n \t\t\t\t/>\n </label>\n <DateTimePicker\n currentDate={ date }\n onChange={ onChangeDate }\n is12Hour={ true }\n isInvalidDate={ onInvalidDate }\n />\n </Popover>\n }\n </Fragment>\n\n )\n}\n\nexport function AdvDaysControl(props) {\n const allDays = [\n { slug: 0, label: _x( 'S', 'Sunday first letter', 'advanced-gutenberg' ) }, // Sunday\n { slug: 1, label: __( 'M', 'advanced-gutenberg' ) }, // Monday\n { slug: 2, label: _x( 'T', 'Tuesday first letter', 'advanced-gutenberg' ) }, // Tuesday\n { slug: 3, label: __( 'W', 'advanced-gutenberg' ) }, // Wednesday\n { slug: 4, label: _x( 'T', 'Thursday first letter', 'advanced-gutenberg' ) }, // Thursday\n { slug: 5, label: __( 'F', 'advanced-gutenberg' ) }, // Friday\n { slug: 6, label: _x( 'S', 'Saturday first letter', 'advanced-gutenberg' ) } // Saturday\n ];\n\n const {\n label,\n days,\n onChangeDays\n } = props;\n\n // Use a single state variable to store the selected days\n const [ selectedDays, setSelectedDays ] = useState( days );\n\n /**\n * Check if the day is selected or not\n *\n * @since 3.1.2\n *\n * @param {string} Day slug e.g. 'u' for Sunday, 't' for Tuesday\n *\n * @return {bool}\n */\n function isDaySelected( slug ) {\n return selectedDays.some( el => el === slug );\n }\n\n /**\n * Update the selected days state when a checkbox is changed\n *\n * @since 3.1.2\n *\n * @param {string} Day slug e.g. 'u' for Sunday, 't' for Tuesday\n *\n * @return {void}\n */\n function onChangeDay( slug ) {\n\n // Check if the day is already selected\n const isSelected = isDaySelected( slug );\n\n // Create a new array with the updated selection\n let updatedDays;\n if ( isSelected ) {\n // Remove the day from the selected days\n updatedDays = selectedDays.filter( el => el !== slug );\n } else {\n // Add the day to the selected days\n const findDay = allDays.find( el => el.slug === slug );\n updatedDays = [ ...selectedDays, findDay.slug ];\n }\n\n // Remove duplicates\n const uniqueDays = [ ...new Set( updatedDays ) ];\n\n // Update the selected days state\n setSelectedDays( uniqueDays );\n\n // Call the onChangeDays prop to notify the parent component of the change\n if ( onChangeDays ) {\n onChangeDays( updatedDays );\n }\n }\n\n return (\n <Fragment>\n <div className=\"advgb-checkbox-wrapper\">\n <label>\n { label }\n </label>\n <div className=\"advgb-checkbox-inline\">\n { allDays.map( day => (\n <CheckboxControl\n label={ day.label }\n checked={ isDaySelected( day.slug ) }\n onChange={ () => onChangeDay( day.slug ) }\n />\n ) ) }\n </div>\n </div>\n </Fragment>\n )\n}\n\nclass AdvTimeClass extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n onChangeTime: null,\n currentTime: this.props.currentTime || null,\n hours: null,\n minutes: null,\n meridian: 'am',\n onInit: true\n };\n }\n\n componentWillMount() {\n const { onChangeTime, currentTime, onInit } = this.state;\n\n if( this.props.onChangeTime !== onChangeTime ) {\n this.setState( {\n onChangeTime: this.props.onChangeTime,\n } );\n }\n\n if( this.props.currentTime !== currentTime ) {\n this.setState( {\n currentTime: this.props.currentTime,\n } );\n }\n\n // Init\n if( currentTime && currentTime.includes(':') && onInit ) {\n this.setState( {\n hours: currentTime.split(':')[0],\n minutes: currentTime.split(':')[1],\n meridian: parseInt( currentTime.split(':')[0] ) > 11 ? 'pm' : 'am', // We set > 11 because PM starts from 12:00:00\n onInit: false\n } );\n }\n }\n\n componentDidUpdate(prevProps, prevState) {\n const { onChangeTime, currentTime } = this.props;\n const { hours, minutes, meridian } = this.state;\n const { hours: prevHours, minutes: prevMinutes, meridian: prevMeridian } = prevState;\n\n if( hours !== prevHours || minutes !== prevMinutes || meridian !== prevMeridian ) {\n\n // When clearing time\n if( ! hours && ! minutes ) {\n return;\n }\n\n // Default minutes when hours selected\n if( hours && ! minutes ) {\n this.setState( {\n minutes: '00'\n } );\n }\n\n // Default hours when minutes selected\n if( minutes && ! hours ) {\n this.setState( {\n hours: '01'\n } );\n }\n\n /* Convert 12-hours to 24-hours.\n * e.g. 12:00 AM becomes 00:00:00\n * 12:00 PM becomes 12:00:00\n * 01:00 PM becomes 13:00:00\n */\n const savedTime = `${this.appendZero(\n hourConvert.to24Hour( {\n hour: parseInt( hours ),\n meridiem: meridian\n } )\n )}:${minutes}:00`;\n\n // Value saved in source/attribute\n this.props.onChangeTime( savedTime );\n }\n }\n\n /**\n * Append zero to one digit numbers. e.g. 9 becomes '09'\n *\n * @since 3.1.2\n *\n * @param {string value Hours or minutes\n *\n * @return {string}\n */\n appendZero( value ) {\n if( isNaN( value ) ) {\n return;\n }\n\n const res = parseInt( value );\n\n return res > 9 ? res : `0${res}`;\n }\n\n render() {\n const { onChangeTime, currentTime, hours, minutes, meridian } = this.state;\n\n // Make sure hours are valid. 01: min, 12: max\n const handleChangeHours = event => {\n const value = Math.max( 1, Math.min( 12, Number( event.target.value ) ) );\n this.setState( {\n hours: this.appendZero( value )\n } );\n };\n\n // Allow to use up/down keys for hours\n const handleKeyDownHours = event => {\n const value = Number( event.target.value );\n if( event.key === 'ArrowUp' && value < 12 ) {\n this.setState( {\n hours: this.appendZero( value + 1 )\n } );\n } else if ( event.key === 'ArrowDown' && value > 1 ) {\n this.setState( {\n hours: this.appendZero( value - 1 )\n } );\n }\n };\n\n // Make sure minutes are valid. 01: min, 59: max\n const handleChangeMinutes = event => {\n const value = Math.max( 0, Math.min( 59, Number( event.target.value ) ) );\n this.setState( {\n minutes: this.appendZero( value )\n } );\n };\n\n // Allow to use up/down keys for minutes\n const handleKeyDownMinutes = event => {\n const value = Number( event.target.value );\n if( event.key === 'ArrowUp' && value < 59 ) {\n this.setState( {\n minutes: this.appendZero( value + 1 )\n } );\n } else if ( event.key === 'ArrowDown' && value > 0 ) {\n this.setState( {\n minutes: this.appendZero( value - 1 )\n } );\n }\n };\n\n return (\n <Fragment>\n <div className=\"advgb-advtime-control\">\n <label>\n { this.props.label }\n </label>\n <div className=\"advgb-advtime-hours-minutes\">\n <input\n type=\"text\"\n value={\n hours\n ? this.appendZero(\n hourConvert.to12Hour( parseInt( hours ) ).hour\n ) : ''\n }\n onChange={ handleChangeHours }\n onKeyDown={ handleKeyDownHours }\n placeholder=\"--\"\n />\n <span>:</span>\n <input\n type=\"text\"\n value={\n minutes ? minutes : ''\n }\n onChange={ handleChangeMinutes }\n onKeyDown={ handleKeyDownMinutes }\n placeholder=\"--\"\n />\n </div>\n <ButtonGroup className=\"advgb-advtime-meridian\">\n <Button\n variant={\n meridian === null || meridian === 'am' ? 'primary' : 'secondary'\n }\n onClick={ () => {\n this.setState( {\n meridian: 'am'\n } );\n } }\n disabled={ hours && minutes ? false : true }\n >\n { __( 'AM', 'advanced-gutenberg' ) }\n </Button>\n <Button\n variant={\n meridian === 'pm' ? 'primary' : 'secondary'\n }\n onClick={ () => {\n this.setState( {\n meridian: 'pm'\n } );\n } }\n disabled={ hours && minutes ? false : true }\n >\n { __( 'PM', 'advanced-gutenberg' ) }\n </Button>\n </ButtonGroup>\n { hours && minutes &&\n \t\t\t\t<Button\n className=\"advgb-advtime-remove-icon\"\n \t\t\t\t\ticon=\"no-alt\"\n onClick={\n () => {\n this.props.onTimeClear();\n this.setState( {\n hours: null,\n minutes: null,\n meridian: 'am'\n } );\n }\n }\n \t\t\t\t/>\n \t\t\t}\n </div>\n </Fragment>\n )\n }\n}\nexport default AdvTimeClass;\n\nexport function AdvTimeControl(props) {\n const { label, currentTime, onChangeTime, onTimeClear } = props;\n\n return(\n <AdvTimeClass\n label={ label }\n currentTime={ currentTime }\n onChangeTime={ onChangeTime }\n onTimeClear={ onTimeClear }\n />\n );\n}\n\nexport function AdvTimezoneControl(props) {\n const { label, defaultTimezone } = props;\n\n return (\n <Fragment>\n { applyFilters( 'advgb.timezoneControl',\n <Fragment>\n <div style={{ marginTop: 10, marginBottom: 30 }}>\n <div style={{ marginBottom: 6 }}>\n { label }\n <span style={{ float: 'right', marginRight: 5 }}>\n <Icon icon=\"lock\" />\n <a href=\"https://publishpress.com/links/blocks\"\n class=\"advgb-pro-ad-btn\"\n target=\"_blank\">\n { __( 'Upgrade to Pro', 'advanced-gutenberg' ) }\n </a>\n </span>\n </div>\n <SelectControl\n value={ defaultTimezone }\n options={ [ {\n label: defaultTimezone,\n value: defaultTimezone\n }\n ] }\n disabled={ true }\n />\n </div>\n </Fragment>,\n props\n ) }\n </Fragment>\n )\n}\n","'use strict';\n\nmodule.exports = {\n\n /**\n * Convert 24-hour time to 12-hour format.\n *\n * @param {number} hour Hour to convert (0-23)\n * @return {object} { hour, meridiem } (meridian is also returned for backwards compatibility)\n */\n to12Hour: function to12Hour(hour) {\n var meridiem = hour < 12 ? 'am' : 'pm';\n return {\n hour: ((hour + 11) % 12 + 1),\n meridiem: meridiem,\n meridian: meridiem\n };\n },\n\n /**\n * Convert 12-hour time to 24-hour format.\n *\n * @param {object} time Time object\n * @param {number} time.hour Hour to convert (1-12)\n * @param {string} time.meridiem Hour meridiem (am/pm). 'time.meridian' is\n * supported for backwards compatibility.\n * @return {number}\n */\n to24Hour: function to24Hour(time) {\n var meridiem = time.meridiem || time.meridian;\n return (meridiem === 'am' ? 0 : 12) + (time.hour % 12);\n }\n};\n","/**\n * Generate option title suggestions\n *\n * @since 3.1.1\n * @param options Available options as objects with slug and title. e.g. [{slug: 'subscriber', title: 'Subscriber'}, {slug: 'new_customer', title: 'New Customer'}]\n *\n * @return {array} Option slugs. e.g. ['subscriber','new_customer']\n */\nexport const getOptionSuggestions = function( options ) {\n return options.map( ( item ) => item.title );\n}\n\n/**\n * Match option slugs with its option titles\n * to display as field value (but NOT saved!).\n *\n * @since 3.1.1\n * @param slugs Option slugs. e.g. ['subscriber','new_customer'] or [82, 92]\n * @param options Available options as objects with slug and title. e.g. [{slug: 'subscriber', title: 'Subscriber'}, {slug: 'new_customer', title: 'New Customer'}]\n *\n * @return {array} Option titles. e.g. ['Subscriber','New Customer']\n */\nexport const getOptionTitles = function( slugs, options ) {\n let field_value = [];\n\n if ( options !== null ) {\n field_value = slugs.map( ( option_slug ) => {\n let find_option = options.find( ( item ) => {\n return item.slug === option_slug;\n } );\n if ( find_option === undefined || ! find_option ) {\n return option_slug; // It should return false but creates empty selections\n }\n return find_option.title;\n } );\n }\n\n return field_value;\n}\n\n/**\n * Match option titles with its slugs, and save slugs\n *\n * @since 3.1.1\n * @param slugs Option slugs. e.g. ['subscriber','new_customer']\n * @param options Available options as objects with slug and title. e.g. [{slug: 'subscriber', title: 'Subscriber'}, {slug: 'new_customer', title: 'New Customer'}]\n *\n * @return {array} Option slugs. e.g. ['subscriber','new_customer']\n */\nexport const getOptionSlugs = function( slugs, options ) {\n let slugs_array = [];\n\n slugs.map(\n ( option_title ) => {\n const matching_slug = options.find( ( item ) => {\n return item.title === option_title;\n } );\n if ( matching_slug !== undefined ) {\n slugs_array.push( matching_slug.slug );\n }\n }\n )\n\n return slugs_array;\n}\n"],"sourceRoot":""}
| ver. 1.4 |
Github
|
.
| PHP 5.4.45 | Generation time: 0.01 |
proxy
|
phpinfo
|
Settings