/** * Dynamic Month & Year into Posts - Block Editor Integration * * Adds a toolbar button to insert dynamic date shortcodes. */ ( function () { 'use strict'; // Wait for DOM ready wp.domReady( function () { const __ = wp.i18n.__; const registerFormatType = wp.richText.registerFormatType; const unregisterFormatType = wp.richText.unregisterFormatType; const insert = wp.richText.insert; const create = wp.richText.create; const createElement = wp.element.createElement; const useState = wp.element.useState; const Fragment = wp.element.Fragment; const RichTextToolbarButton = wp.blockEditor.RichTextToolbarButton; const Popover = wp.components.Popover; const Button = wp.components.Button; // Shortcode categories const shortcodeCategories = [ { label: 'Year', shortcodes: [ { code: '[year]', desc: 'Current year' }, { code: '[nyear]', desc: 'Next year' }, { code: '[pyear]', desc: 'Previous year' }, ], }, { label: 'Month', shortcodes: [ { code: '[month]', desc: 'Current month' }, { code: '[mon]', desc: 'Month (short)' }, { code: '[nmonth]', desc: 'Next month' }, { code: '[pmonth]', desc: 'Previous month' }, ], }, { label: 'Date', shortcodes: [ { code: '[date]', desc: "Today's date" }, { code: '[monthyear]', desc: 'Month and year' }, { code: '[dt]', desc: 'Day of month' }, { code: '[weekday]', desc: 'Day of week' }, ], }, { label: 'Post Dates', shortcodes: [ { code: '[datepublished]', desc: 'Publication date' }, { code: '[datemodified]', desc: 'Modified date' }, ], }, { label: 'Events', shortcodes: [ { code: '[blackfriday]', desc: 'Black Friday' }, { code: '[cybermonday]', desc: 'Cyber Monday' }, ], }, { label: 'Countdown', shortcodes: [ { code: '[daysuntil date=""]', desc: 'Days until date' }, { code: '[dayssince date=""]', desc: 'Days since date' }, ], }, ]; // Unregister if already registered (for hot reload) try { unregisterFormatType( 'dmyip/shortcode' ); } catch ( e ) { // Ignore if not registered } // Register the format type registerFormatType( 'dmyip/shortcode', { title: 'Dynamic Date', tagName: 'span', className: 'dmyip-shortcode', edit( props ) { const value = props.value; const onChange = props.onChange; const isActive = props.isActive; const stateArray = useState( false ); const isOpen = stateArray[ 0 ]; const setIsOpen = stateArray[ 1 ]; const togglePopover = function () { setIsOpen( ! isOpen ); }; const insertShortcode = function ( shortcode ) { const toInsert = create( { text: shortcode } ); onChange( insert( value, toInsert ) ); setIsOpen( false ); }; return createElement( Fragment, null, createElement( RichTextToolbarButton, { icon: 'calendar-alt', title: 'Insert Dynamic Date', onClick: togglePopover, isActive: isOpen, } ), isOpen && createElement( Popover, { position: 'bottom center', onClose() { setIsOpen( false ); }, focusOnMount: 'container', }, createElement( 'div', { style: { padding: '12px', minWidth: '240px', maxHeight: '350px', overflowY: 'auto', }, }, createElement( 'div', { style: { fontWeight: '600', marginBottom: '12px', paddingBottom: '8px', borderBottom: '1px solid #ddd', }, }, 'Insert Dynamic Date' ), shortcodeCategories.map( function ( category, catIndex ) { return createElement( 'div', { key: 'cat-' + catIndex, style: { marginBottom: '10px' }, }, createElement( 'div', { style: { fontSize: '11px', fontWeight: '600', textTransform: 'uppercase', color: '#757575', marginBottom: '4px', }, }, category.label ), category.shortcodes.map( function ( item, itemIndex ) { return createElement( Button, { key: 'item-' + catIndex + '-' + itemIndex, variant: 'tertiary', onClick() { insertShortcode( item.code ); }, style: { display: 'flex', width: '100%', justifyContent: 'space-between', padding: '4px 8px', height: 'auto', marginBottom: '2px', }, }, createElement( 'code', { style: { fontSize: '11px', background: '#f0f0f0', padding: '2px 4px', borderRadius: '2px', }, }, item.code ), createElement( 'span', { style: { fontSize: '11px', color: '#757575', }, }, item.desc ) ); } ) ); } ) ) ) ); }, } ); console.log( 'DMYIP: Dynamic Date shortcode format registered' ); } ); } )(); (()=>{"use strict";var e={n:o=>{var r=o&&o.__esModule?()=>o.default:()=>o;return e.d(r,{a:r}),r},d:(o,r)=>{for(var t in r)e.o(r,t)&&!e.o(o,t)&&Object.defineProperty(o,t,{enumerable:!0,get:r[t]})},o:(e,o)=>Object.prototype.hasOwnProperty.call(e,o),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},o={};e.r(o),e.d(o,{CurrencyContext:()=>y,CurrencyFactory:()=>c,default:()=>S,getCurrencyData:()=>l,getFilteredCurrencyInstance:()=>d});const r=window.wp.element,t=window.wp.htmlEntities,n=window.wp.i18n,a=window.wc.number,i=window.wp.deprecated;var s=e.n(i);const c=function(e){let o;function i(e){const o=e.replace(/|$)/g,"").replace(/<(script|style)[^>]*>[\s\S]*?(<\/\1>|$)/gi,"").replace(/<\/?[a-z][\s\S]*?(>|$)/gi,"");return o!==e?i(o):o}function c(e){if(e.priceFormat)return i(e.priceFormat.toString());switch(e.symbolPosition){case"left":return"%1$s%2$s";case"right":return"%2$s%1$s";case"left_space":return"%1$s %2$s";case"right_space":return"%2$s %1$s"}return"%1$s%2$s"}function l(e){const r={code:"USD",symbol:"$",symbolPosition:"left",thousandSeparator:",",decimalSeparator:".",precision:2,...e};let n=r.precision;null===n?(console.warn("Currency precision is null"),n=NaN):"string"==typeof n&&(n=parseInt(n,10)),o={code:r.code.toString(),symbol:(0,t.decodeEntities)(r.symbol.toString()),symbolPosition:r.symbolPosition.toString(),decimalSeparator:r.decimalSeparator.toString(),priceFormat:c(r),thousandSeparator:r.thousandSeparator.toString(),precision:n}}function m(e,r=!1){const t=(0,a.numberFormat)(o,e);if(""===t)return t;const{priceFormat:i,symbol:s,code:c}=o;return(0,n.sprintf)(i,r?c:s,t)}return l(e),{getCurrencyConfig:()=>({...o}),getDataForCountry:function(e,o={},r={}){const n=o[e];if(!n)return{};const a=r[n.currency_code];return a?{code:n.currency_code,symbol:(0,t.decodeEntities)(a),symbolPosition:n.currency_pos,thousandSeparator:n.thousand_sep,decimalSeparator:n.decimal_sep,precision:n.num_decimals}:{}},setCurrency:l,formatAmount:m,formatCurrency:function(e){return s()("Currency().formatCurrency",{version:"5.0.0",alternative:"Currency().formatAmount",plugin:"WooCommerce",hint:"`formatAmount` accepts the same arguments as formatCurrency"}),m(e)},getPriceFormat:c,formatDecimal(e){if("number"!=typeof e&&(e=parseFloat(e)),Number.isNaN(e))return 0;const{precision:r}=o;return Math.round(e*Math.pow(10,r))/Math.pow(10,r)},formatDecimalString(e){if("number"!=typeof e&&(e=parseFloat(e)),Number.isNaN(e))return"";const{precision:r}=o;return e.toFixed(r)},render:e=>("number"!=typeof e&&(e=parseFloat(e)),e<0?(0,r.createElement)("span",{className:"is-negative"},m(e)):m(e))}};function l(){return s()("getCurrencyData",{version:"3.1.0",alternative:"CurrencyFactory.getDataForCountry",plugin:"WooCommerce Admin",hint:"Pass in the country, locale data, and symbol info to use getDataForCountry"}),{US:{code:"USD",symbol:"$",symbolPosition:"left",thousandSeparator:",",decimalSeparator:".",precision:2},EU:{code:"EUR",symbol:"€",symbolPosition:"left",thousandSeparator:".",decimalSeparator:",",precision:2},IN:{code:"INR",symbol:"₹",symbolPosition:"left",thousandSeparator:",",decimalSeparator:".",precision:2},GB:{code:"GBP",symbol:"£",symbolPosition:"left",thousandSeparator:",",decimalSeparator:".",precision:2},BR:{code:"BRL",symbol:"R$",symbolPosition:"left",thousandSeparator:".",decimalSeparator:",",precision:2},VN:{code:"VND",symbol:"₫",symbolPosition:"right",thousandSeparator:".",decimalSeparator:",",precision:1},ID:{code:"IDR",symbol:"Rp",symbolPosition:"left",thousandSeparator:".",decimalSeparator:",",precision:0},BD:{code:"BDT",symbol:"৳",symbolPosition:"left",thousandSeparator:",",decimalSeparator:".",precision:0},PK:{code:"PKR",symbol:"₨",symbolPosition:"left",thousandSeparator:",",decimalSeparator:".",precision:2},RU:{code:"RUB",symbol:"₽",symbolPosition:"right",thousandSeparator:" ",decimalSeparator:",",precision:2},TR:{code:"TRY",symbol:"₺",symbolPosition:"left",thousandSeparator:".",decimalSeparator:",",precision:2},MX:{code:"MXN",symbol:"$",symbolPosition:"left",thousandSeparator:",",decimalSeparator:".",precision:2},CA:{code:"CAD",symbol:"$",symbolPosition:"left",thousandSeparator:",",decimalSeparator:".",precision:2}}}const m=window.wp.hooks,p=(0,window.wc.wcSettings.getSetting)("currency"),u=c(p),d=e=>{const o=u.getCurrencyConfig(),r=(0,m.applyFilters)("woocommerce_admin_report_currency",o,e);return c(r)},y=(0,r.createContext)(u),S=c;(window.wc=window.wc||{}).currency=o})();