@wordpress/editor
Version:
Enhanced block editor for WordPress posts.
8 lines (7 loc) • 6.16 kB
Source Map (JSON)
{
"version": 3,
"sources": ["../../../src/components/post-schedule/label.js"],
"sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { __, _x, sprintf, isRTL } from '@wordpress/i18n';\nimport { getSettings, getDate, dateI18n } from '@wordpress/date';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { store as editorStore } from '../../store';\n\n/**\n * Renders the PostScheduleLabel component.\n *\n * @param {Object} props Props.\n *\n * @return {React.ReactNode} The rendered component.\n */\nexport default function PostScheduleLabel( props ) {\n\treturn usePostScheduleLabel( props );\n}\n\n/**\n * Custom hook to get the label for post schedule.\n *\n * @param {Object} options Options for the hook.\n * @param {boolean} options.full Whether to get the full label or not. Default is false.\n *\n * @return {string} The label for post schedule.\n */\nexport function usePostScheduleLabel( { full = false } = {} ) {\n\tconst { date, isFloating } = useSelect(\n\t\t( select ) => ( {\n\t\t\tdate: select( editorStore ).getEditedPostAttribute( 'date' ),\n\t\t\tisFloating: select( editorStore ).isEditedPostDateFloating(),\n\t\t} ),\n\t\t[]\n\t);\n\n\treturn full\n\t\t? getFullPostScheduleLabel( date )\n\t\t: getPostScheduleLabel( date, { isFloating } );\n}\n\nexport function getFullPostScheduleLabel( dateAttribute ) {\n\tconst date = getDate( dateAttribute );\n\n\tconst timezoneAbbreviation = getTimezoneAbbreviation();\n\tconst formattedDate = dateI18n(\n\t\t// translators: Use a non-breaking space between 'g:i' and 'a' if appropriate.\n\t\t_x( 'F j, Y g:i\\xa0a', 'post schedule full date format' ),\n\t\tdate\n\t);\n\treturn isRTL()\n\t\t? `${ timezoneAbbreviation } ${ formattedDate }`\n\t\t: `${ formattedDate } ${ timezoneAbbreviation }`;\n}\n\nexport function getPostScheduleLabel(\n\tdateAttribute,\n\t{ isFloating = false, now = new Date() } = {}\n) {\n\tif ( ! dateAttribute || isFloating ) {\n\t\treturn __( 'Immediately' );\n\t}\n\n\t// If the user timezone does not equal the site timezone then using words\n\t// like 'tomorrow' is confusing, so show the full date.\n\tif ( ! isTimezoneSameAsSiteTimezone( now ) ) {\n\t\treturn getFullPostScheduleLabel( dateAttribute );\n\t}\n\n\tconst date = getDate( dateAttribute );\n\n\tif ( isSameDay( date, now ) ) {\n\t\treturn sprintf(\n\t\t\t// translators: %s: Time of day the post is scheduled for.\n\t\t\t__( 'Today at %s' ),\n\t\t\t// translators: If using a space between 'g:i' and 'a', use a non-breaking space.\n\t\t\tdateI18n( _x( 'g:i\\xa0a', 'post schedule time format' ), date )\n\t\t);\n\t}\n\n\tconst tomorrow = new Date( now );\n\ttomorrow.setDate( tomorrow.getDate() + 1 );\n\n\tif ( isSameDay( date, tomorrow ) ) {\n\t\treturn sprintf(\n\t\t\t// translators: %s: Time of day the post is scheduled for.\n\t\t\t__( 'Tomorrow at %s' ),\n\t\t\t// translators: If using a space between 'g:i' and 'a', use a non-breaking space.\n\t\t\tdateI18n( _x( 'g:i\\xa0a', 'post schedule time format' ), date )\n\t\t);\n\t}\n\n\tif ( date.getFullYear() === now.getFullYear() ) {\n\t\treturn dateI18n(\n\t\t\t// translators: If using a space between 'g:i' and 'a', use a non-breaking space.\n\t\t\t_x( 'F j g:i\\xa0a', 'post schedule date format without year' ),\n\t\t\tdate\n\t\t);\n\t}\n\n\treturn dateI18n(\n\t\t// translators: Use a non-breaking space between 'g:i' and 'a' if appropriate.\n\t\t_x( 'F j, Y g:i\\xa0a', 'post schedule full date format' ),\n\t\tdate\n\t);\n}\n\nfunction getTimezoneAbbreviation() {\n\tconst { timezone } = getSettings();\n\n\tif ( timezone.abbr && isNaN( Number( timezone.abbr ) ) ) {\n\t\treturn timezone.abbr;\n\t}\n\n\tconst symbol = timezone.offset < 0 ? '' : '+';\n\treturn `UTC${ symbol }${ timezone.offsetFormatted }`;\n}\n\nfunction isTimezoneSameAsSiteTimezone( date ) {\n\tconst { timezone } = getSettings();\n\n\tconst siteOffset = Number( timezone.offset );\n\tconst dateOffset = -1 * ( date.getTimezoneOffset() / 60 );\n\treturn siteOffset === dateOffset;\n}\n\nfunction isSameDay( left, right ) {\n\treturn (\n\t\tleft.getDate() === right.getDate() &&\n\t\tleft.getMonth() === right.getMonth() &&\n\t\tleft.getFullYear() === right.getFullYear()\n\t);\n}\n"],
"mappings": ";AAGA,SAAS,IAAI,IAAI,SAAS,aAAa;AACvC,SAAS,aAAa,SAAS,gBAAgB;AAC/C,SAAS,iBAAiB;AAK1B,SAAS,SAAS,mBAAmB;AAStB,SAAR,kBAAoC,OAAQ;AAClD,SAAO,qBAAsB,KAAM;AACpC;AAUO,SAAS,qBAAsB,EAAE,OAAO,MAAM,IAAI,CAAC,GAAI;AAC7D,QAAM,EAAE,MAAM,WAAW,IAAI;AAAA,IAC5B,CAAE,YAAc;AAAA,MACf,MAAM,OAAQ,WAAY,EAAE,uBAAwB,MAAO;AAAA,MAC3D,YAAY,OAAQ,WAAY,EAAE,yBAAyB;AAAA,IAC5D;AAAA,IACA,CAAC;AAAA,EACF;AAEA,SAAO,OACJ,yBAA0B,IAAK,IAC/B,qBAAsB,MAAM,EAAE,WAAW,CAAE;AAC/C;AAEO,SAAS,yBAA0B,eAAgB;AACzD,QAAM,OAAO,QAAS,aAAc;AAEpC,QAAM,uBAAuB,wBAAwB;AACrD,QAAM,gBAAgB;AAAA;AAAA,IAErB,GAAI,mBAAmB,gCAAiC;AAAA,IACxD;AAAA,EACD;AACA,SAAO,MAAM,IACV,GAAI,oBAAqB,IAAK,aAAc,KAC5C,GAAI,aAAc,IAAK,oBAAqB;AAChD;AAEO,SAAS,qBACf,eACA,EAAE,aAAa,OAAO,MAAM,oBAAI,KAAK,EAAE,IAAI,CAAC,GAC3C;AACD,MAAK,CAAE,iBAAiB,YAAa;AACpC,WAAO,GAAI,aAAc;AAAA,EAC1B;AAIA,MAAK,CAAE,6BAA8B,GAAI,GAAI;AAC5C,WAAO,yBAA0B,aAAc;AAAA,EAChD;AAEA,QAAM,OAAO,QAAS,aAAc;AAEpC,MAAK,UAAW,MAAM,GAAI,GAAI;AAC7B,WAAO;AAAA;AAAA,MAEN,GAAI,aAAc;AAAA;AAAA,MAElB,SAAU,GAAI,YAAY,2BAA4B,GAAG,IAAK;AAAA,IAC/D;AAAA,EACD;AAEA,QAAM,WAAW,IAAI,KAAM,GAAI;AAC/B,WAAS,QAAS,SAAS,QAAQ,IAAI,CAAE;AAEzC,MAAK,UAAW,MAAM,QAAS,GAAI;AAClC,WAAO;AAAA;AAAA,MAEN,GAAI,gBAAiB;AAAA;AAAA,MAErB,SAAU,GAAI,YAAY,2BAA4B,GAAG,IAAK;AAAA,IAC/D;AAAA,EACD;AAEA,MAAK,KAAK,YAAY,MAAM,IAAI,YAAY,GAAI;AAC/C,WAAO;AAAA;AAAA,MAEN,GAAI,gBAAgB,wCAAyC;AAAA,MAC7D;AAAA,IACD;AAAA,EACD;AAEA,SAAO;AAAA;AAAA,IAEN,GAAI,mBAAmB,gCAAiC;AAAA,IACxD;AAAA,EACD;AACD;AAEA,SAAS,0BAA0B;AAClC,QAAM,EAAE,SAAS,IAAI,YAAY;AAEjC,MAAK,SAAS,QAAQ,MAAO,OAAQ,SAAS,IAAK,CAAE,GAAI;AACxD,WAAO,SAAS;AAAA,EACjB;AAEA,QAAM,SAAS,SAAS,SAAS,IAAI,KAAK;AAC1C,SAAO,MAAO,MAAO,GAAI,SAAS,eAAgB;AACnD;AAEA,SAAS,6BAA8B,MAAO;AAC7C,QAAM,EAAE,SAAS,IAAI,YAAY;AAEjC,QAAM,aAAa,OAAQ,SAAS,MAAO;AAC3C,QAAM,aAAa,MAAO,KAAK,kBAAkB,IAAI;AACrD,SAAO,eAAe;AACvB;AAEA,SAAS,UAAW,MAAM,OAAQ;AACjC,SACC,KAAK,QAAQ,MAAM,MAAM,QAAQ,KACjC,KAAK,SAAS,MAAM,MAAM,SAAS,KACnC,KAAK,YAAY,MAAM,MAAM,YAAY;AAE3C;",
"names": []
}