Loading core/core.libraries.yml +0 −9 Original line number Diff line number Diff line Loading @@ -485,15 +485,6 @@ drupal.customevent: js: misc/polyfills/customevent.js: { weight: -20 } drupal.date: version: VERSION js: misc/date.js: {} dependencies: - core/drupal - core/modernizr - core/once drupal.debounce: version: VERSION js: Loading core/lib/Drupal/Core/Render/Element/Date.php +0 −28 Original line number Diff line number Diff line Loading @@ -2,7 +2,6 @@ namespace Drupal\Core\Render\Element; use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Render\Element; /** Loading Loading @@ -34,7 +33,6 @@ public function getInfo() { '#theme' => 'input__date', '#process' => [ [$class, 'processAjaxForm'], [$class, 'processDate'], ], '#pre_render' => [[$class, 'preRenderDate']], '#theme_wrappers' => ['form_element'], Loading @@ -43,32 +41,6 @@ public function getInfo() { ]; } /** * Processes a date form element. * * @param array $element * The form element to process. Properties used: * - #attributes: An associative array containing: * - type: The type of date field rendered. * - #date_date_format: The date format used in PHP formats. * @param \Drupal\Core\Form\FormStateInterface $form_state * The current state of the form. * @param array $complete_form * The complete form structure. * * @return array * The processed element. */ public static function processDate(&$element, FormStateInterface $form_state, &$complete_form) { // Attach JS support for the date field, if we can determine which date // format should be used. if ($element['#attributes']['type'] == 'date' && !empty($element['#date_date_format'])) { $element['#attached']['library'][] = 'core/drupal.date'; $element['#attributes']['data-drupal-date-format'] = [$element['#date_date_format']]; } return $element; } /** * Adds form-specific attributes to a 'date' #type element. * Loading core/misc/date.es6.jsdeleted 100644 → 0 +0 −154 Original line number Diff line number Diff line /** * @file * Polyfill for HTML5 date input. */ (function (Modernizr, Drupal, once) { /** * Attach datepicker fallback on date elements. * * @type {Drupal~behavior} * * @prop {Drupal~behaviorAttach} attach * Attaches the behavior. Adds a class that hides formatting instructions * on date/time fields when the browser supports a native datepicker. */ Drupal.behaviors.date = { attach(context, settings) { // If the browser does not support a native datepicker, add date // formatting instructions on date/time fields. if (Modernizr.inputtypes.date === false) { once('datepicker', '[data-drupal-field-elements="date-time"]').forEach( (dateTime) => { const dateInput = dateTime.querySelector('input[type="date"]'); const timeInput = dateTime.querySelector('input[type="time"]'); const help = Drupal.theme.dateTimeHelp({ dateId: `${dateInput.id}--description`, dateDesc: dateInput.dataset.help, timeId: `${timeInput.id}--description`, timeDesc: timeInput.dataset.help, }); [dateInput, timeInput].forEach((input) => { input.setAttribute( 'aria-describedby', `${input.id}--description`, ); // If the browser does not support date or time inputs, the input // is treated as the type "text". The type attribute should be // changed to reflect this. input.setAttribute('type', 'text'); }); Drupal.DatepickerPolyfill.attachDescription(dateTime, help); }, ); once('datepicker', '[data-drupal-field-elements="date"]').forEach( (date) => { const dateInput = date.querySelector('input[type="date"]'); const help = Drupal.theme.dateHelp({ dateDesc: dateInput.dataset.help, }); // Date-only input will be described by description directly. const id = `${date.id}--description`; dateInput.setAttribute('aria-describedby', id); // If the browser does not support date inputs, the input is treated // as the type "text". The type attribute should be changed to // changed to reflect this. dateInput.setAttribute('type', 'text'); Drupal.DatepickerPolyfill.attachDescription(date, help, id); }, ); } }, }; /** * Provides overridable utility functions for the datepicker polyfill. */ Drupal.DatepickerPolyfill = class { /** * Adds help text to polyfilled date/time elements. * * The help text is added to existing description elements when present. * If a description element is not present, one is created. * * @param {HTMLElement} element * The input element. * @param {string} help * The help text. * @param {string} id * The input id. */ static attachDescription(element, help, id) { let description = element.nextElementSibling; // If no description element exists, create one. if ( !( description && description.getAttribute('data-drupal-field-elements') === 'description' ) ) { description = Drupal.DatepickerPolyfill.descriptionWrapperElement(id); element.parentNode.insertBefore(description, element.nextSibling); } description.insertAdjacentHTML('beforeend', help); } /** * Creates a description wrapper element. * * @param {string} id * The id of the input being described. * * @return {HTMLElement} * The description wrapper DOM element. */ static descriptionWrapperElement(id) { const description = document.createElement('div'); description.classList.add('description'); description.setAttribute('data-drupal-field-elements', 'description'); if (id) { description.setAttribute('id', id); } return description; } }; /** * Theme function for no-native-datepicker date input help text. * * @param {string} dateDesc * The help text. * * @return {string} * The HTML markup for the help text. */ Drupal.theme.dateHelp = ({ dateDesc }) => `<div class="no-native-datepicker-help">${dateDesc}</div>`; /** * Theme function for no-native-datepicker date+time inputs help text. * * @param {string} dateId * The date input aria-describedby value. * @param {string} timeId * The time input aria-describedby value. * @param {string} dateDesc * The date help text. * @param {string} timeDesc * The time help text. * * @return {string} * The HTML markup for the help text. */ Drupal.theme.dateTimeHelp = ({ dateId, timeId, dateDesc, timeDesc }) => `<div class="no-native-datepicker-help"> <span id="${dateId}">${dateDesc}</span> <span id="${timeId}">${timeDesc}</span> </div>`; })(Modernizr, Drupal, once); core/misc/date.jsdeleted 100644 → 0 +0 −85 Original line number Diff line number Diff line /** * DO NOT EDIT THIS FILE. * See the following change record for more information, * https://www.drupal.org/node/2815083 * @preserve **/ (function (Modernizr, Drupal, once) { Drupal.behaviors.date = { attach(context, settings) { if (Modernizr.inputtypes.date === false) { once('datepicker', '[data-drupal-field-elements="date-time"]').forEach(dateTime => { const dateInput = dateTime.querySelector('input[type="date"]'); const timeInput = dateTime.querySelector('input[type="time"]'); const help = Drupal.theme.dateTimeHelp({ dateId: `${dateInput.id}--description`, dateDesc: dateInput.dataset.help, timeId: `${timeInput.id}--description`, timeDesc: timeInput.dataset.help }); [dateInput, timeInput].forEach(input => { input.setAttribute('aria-describedby', `${input.id}--description`); input.setAttribute('type', 'text'); }); Drupal.DatepickerPolyfill.attachDescription(dateTime, help); }); once('datepicker', '[data-drupal-field-elements="date"]').forEach(date => { const dateInput = date.querySelector('input[type="date"]'); const help = Drupal.theme.dateHelp({ dateDesc: dateInput.dataset.help }); const id = `${date.id}--description`; dateInput.setAttribute('aria-describedby', id); dateInput.setAttribute('type', 'text'); Drupal.DatepickerPolyfill.attachDescription(date, help, id); }); } } }; Drupal.DatepickerPolyfill = class { static attachDescription(element, help, id) { let description = element.nextElementSibling; if (!(description && description.getAttribute('data-drupal-field-elements') === 'description')) { description = Drupal.DatepickerPolyfill.descriptionWrapperElement(id); element.parentNode.insertBefore(description, element.nextSibling); } description.insertAdjacentHTML('beforeend', help); } static descriptionWrapperElement(id) { const description = document.createElement('div'); description.classList.add('description'); description.setAttribute('data-drupal-field-elements', 'description'); if (id) { description.setAttribute('id', id); } return description; } }; Drupal.theme.dateHelp = _ref => { let { dateDesc } = _ref; return `<div class="no-native-datepicker-help">${dateDesc}</div>`; }; Drupal.theme.dateTimeHelp = _ref2 => { let { dateId, timeId, dateDesc, timeDesc } = _ref2; return `<div class="no-native-datepicker-help"> <span id="${dateId}">${dateDesc}</span> <span id="${timeId}">${timeDesc}</span> </div>`; }; })(Modernizr, Drupal, once); No newline at end of file Loading
core/core.libraries.yml +0 −9 Original line number Diff line number Diff line Loading @@ -485,15 +485,6 @@ drupal.customevent: js: misc/polyfills/customevent.js: { weight: -20 } drupal.date: version: VERSION js: misc/date.js: {} dependencies: - core/drupal - core/modernizr - core/once drupal.debounce: version: VERSION js: Loading
core/lib/Drupal/Core/Render/Element/Date.php +0 −28 Original line number Diff line number Diff line Loading @@ -2,7 +2,6 @@ namespace Drupal\Core\Render\Element; use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Render\Element; /** Loading Loading @@ -34,7 +33,6 @@ public function getInfo() { '#theme' => 'input__date', '#process' => [ [$class, 'processAjaxForm'], [$class, 'processDate'], ], '#pre_render' => [[$class, 'preRenderDate']], '#theme_wrappers' => ['form_element'], Loading @@ -43,32 +41,6 @@ public function getInfo() { ]; } /** * Processes a date form element. * * @param array $element * The form element to process. Properties used: * - #attributes: An associative array containing: * - type: The type of date field rendered. * - #date_date_format: The date format used in PHP formats. * @param \Drupal\Core\Form\FormStateInterface $form_state * The current state of the form. * @param array $complete_form * The complete form structure. * * @return array * The processed element. */ public static function processDate(&$element, FormStateInterface $form_state, &$complete_form) { // Attach JS support for the date field, if we can determine which date // format should be used. if ($element['#attributes']['type'] == 'date' && !empty($element['#date_date_format'])) { $element['#attached']['library'][] = 'core/drupal.date'; $element['#attributes']['data-drupal-date-format'] = [$element['#date_date_format']]; } return $element; } /** * Adds form-specific attributes to a 'date' #type element. * Loading
core/misc/date.es6.jsdeleted 100644 → 0 +0 −154 Original line number Diff line number Diff line /** * @file * Polyfill for HTML5 date input. */ (function (Modernizr, Drupal, once) { /** * Attach datepicker fallback on date elements. * * @type {Drupal~behavior} * * @prop {Drupal~behaviorAttach} attach * Attaches the behavior. Adds a class that hides formatting instructions * on date/time fields when the browser supports a native datepicker. */ Drupal.behaviors.date = { attach(context, settings) { // If the browser does not support a native datepicker, add date // formatting instructions on date/time fields. if (Modernizr.inputtypes.date === false) { once('datepicker', '[data-drupal-field-elements="date-time"]').forEach( (dateTime) => { const dateInput = dateTime.querySelector('input[type="date"]'); const timeInput = dateTime.querySelector('input[type="time"]'); const help = Drupal.theme.dateTimeHelp({ dateId: `${dateInput.id}--description`, dateDesc: dateInput.dataset.help, timeId: `${timeInput.id}--description`, timeDesc: timeInput.dataset.help, }); [dateInput, timeInput].forEach((input) => { input.setAttribute( 'aria-describedby', `${input.id}--description`, ); // If the browser does not support date or time inputs, the input // is treated as the type "text". The type attribute should be // changed to reflect this. input.setAttribute('type', 'text'); }); Drupal.DatepickerPolyfill.attachDescription(dateTime, help); }, ); once('datepicker', '[data-drupal-field-elements="date"]').forEach( (date) => { const dateInput = date.querySelector('input[type="date"]'); const help = Drupal.theme.dateHelp({ dateDesc: dateInput.dataset.help, }); // Date-only input will be described by description directly. const id = `${date.id}--description`; dateInput.setAttribute('aria-describedby', id); // If the browser does not support date inputs, the input is treated // as the type "text". The type attribute should be changed to // changed to reflect this. dateInput.setAttribute('type', 'text'); Drupal.DatepickerPolyfill.attachDescription(date, help, id); }, ); } }, }; /** * Provides overridable utility functions for the datepicker polyfill. */ Drupal.DatepickerPolyfill = class { /** * Adds help text to polyfilled date/time elements. * * The help text is added to existing description elements when present. * If a description element is not present, one is created. * * @param {HTMLElement} element * The input element. * @param {string} help * The help text. * @param {string} id * The input id. */ static attachDescription(element, help, id) { let description = element.nextElementSibling; // If no description element exists, create one. if ( !( description && description.getAttribute('data-drupal-field-elements') === 'description' ) ) { description = Drupal.DatepickerPolyfill.descriptionWrapperElement(id); element.parentNode.insertBefore(description, element.nextSibling); } description.insertAdjacentHTML('beforeend', help); } /** * Creates a description wrapper element. * * @param {string} id * The id of the input being described. * * @return {HTMLElement} * The description wrapper DOM element. */ static descriptionWrapperElement(id) { const description = document.createElement('div'); description.classList.add('description'); description.setAttribute('data-drupal-field-elements', 'description'); if (id) { description.setAttribute('id', id); } return description; } }; /** * Theme function for no-native-datepicker date input help text. * * @param {string} dateDesc * The help text. * * @return {string} * The HTML markup for the help text. */ Drupal.theme.dateHelp = ({ dateDesc }) => `<div class="no-native-datepicker-help">${dateDesc}</div>`; /** * Theme function for no-native-datepicker date+time inputs help text. * * @param {string} dateId * The date input aria-describedby value. * @param {string} timeId * The time input aria-describedby value. * @param {string} dateDesc * The date help text. * @param {string} timeDesc * The time help text. * * @return {string} * The HTML markup for the help text. */ Drupal.theme.dateTimeHelp = ({ dateId, timeId, dateDesc, timeDesc }) => `<div class="no-native-datepicker-help"> <span id="${dateId}">${dateDesc}</span> <span id="${timeId}">${timeDesc}</span> </div>`; })(Modernizr, Drupal, once);
core/misc/date.jsdeleted 100644 → 0 +0 −85 Original line number Diff line number Diff line /** * DO NOT EDIT THIS FILE. * See the following change record for more information, * https://www.drupal.org/node/2815083 * @preserve **/ (function (Modernizr, Drupal, once) { Drupal.behaviors.date = { attach(context, settings) { if (Modernizr.inputtypes.date === false) { once('datepicker', '[data-drupal-field-elements="date-time"]').forEach(dateTime => { const dateInput = dateTime.querySelector('input[type="date"]'); const timeInput = dateTime.querySelector('input[type="time"]'); const help = Drupal.theme.dateTimeHelp({ dateId: `${dateInput.id}--description`, dateDesc: dateInput.dataset.help, timeId: `${timeInput.id}--description`, timeDesc: timeInput.dataset.help }); [dateInput, timeInput].forEach(input => { input.setAttribute('aria-describedby', `${input.id}--description`); input.setAttribute('type', 'text'); }); Drupal.DatepickerPolyfill.attachDescription(dateTime, help); }); once('datepicker', '[data-drupal-field-elements="date"]').forEach(date => { const dateInput = date.querySelector('input[type="date"]'); const help = Drupal.theme.dateHelp({ dateDesc: dateInput.dataset.help }); const id = `${date.id}--description`; dateInput.setAttribute('aria-describedby', id); dateInput.setAttribute('type', 'text'); Drupal.DatepickerPolyfill.attachDescription(date, help, id); }); } } }; Drupal.DatepickerPolyfill = class { static attachDescription(element, help, id) { let description = element.nextElementSibling; if (!(description && description.getAttribute('data-drupal-field-elements') === 'description')) { description = Drupal.DatepickerPolyfill.descriptionWrapperElement(id); element.parentNode.insertBefore(description, element.nextSibling); } description.insertAdjacentHTML('beforeend', help); } static descriptionWrapperElement(id) { const description = document.createElement('div'); description.classList.add('description'); description.setAttribute('data-drupal-field-elements', 'description'); if (id) { description.setAttribute('id', id); } return description; } }; Drupal.theme.dateHelp = _ref => { let { dateDesc } = _ref; return `<div class="no-native-datepicker-help">${dateDesc}</div>`; }; Drupal.theme.dateTimeHelp = _ref2 => { let { dateId, timeId, dateDesc, timeDesc } = _ref2; return `<div class="no-native-datepicker-help"> <span id="${dateId}">${dateDesc}</span> <span id="${timeId}">${timeDesc}</span> </div>`; }; })(Modernizr, Drupal, once); No newline at end of file