diff --git a/core/modules/locale/locale.datepicker.js b/core/modules/locale/locale.datepicker.js index 81f1e17..9a0e9d1 100644 --- a/core/modules/locale/locale.datepicker.js +++ b/core/modules/locale/locale.datepicker.js @@ -1,6 +1,6 @@ (function ($) { -$.datepicker.regional['drupal-locale'] = { +$.datepicker.regional['drupal-locale'] = $.extend({ closeText: Drupal.t('Done'), prevText: Drupal.t('Prev'), nextText: Drupal.t('Next'), @@ -61,9 +61,9 @@ $.datepicker.regional['drupal-locale'] = { Drupal.t('Sa') ], dateFormat: Drupal.t('mm/dd/yy'), - firstDay: Drupal.settings.jqueryuidatepicker.firstDay, - isRTL: Drupal.settings.jqueryuidatepicker.rtl -}; + firstDay: 0, + isRTL: 0 +}, Drupal.settings.jquery.ui.datepicker); $.datepicker.setDefaults($.datepicker.regional['drupal-locale']); })(jQuery); diff --git a/core/modules/locale/locale.module b/core/modules/locale/locale.module index 6d3ded0..1e235a7 100644 --- a/core/modules/locale/locale.module +++ b/core/modules/locale/locale.module @@ -873,21 +873,39 @@ function locale_js_alter(&$javascript) { } } - /** +/** * Implement hook_library_info_alter(). * * Provides the language support for the jQuery UI Date Picker. */ function locale_library_info_alter(&$libraries, $module) { - global $language_interface; - if ($module == 'system' && isset($libraries['system']['ui.datepicker'])) { + if ($module == 'system' && isset($libraries['ui.datepicker'])) { + global $language_interface; $datepicker = drupal_get_path('module', 'locale') . '/locale.datepicker.js'; - $libraries['system']['ui.datepicker']['js'][$datepicker] = array('group' => JS_THEME); - $libraries['system']['ui.datepicker']['js'][] = array( + // locale.datepicker.js defines a configuration object for jQuery UI Date + // Picker containing and accessing: + // - localized strings via Drupal.t(); these are in the JS_DEFAULT group. + // - Drupal settings; these are in the JS_SETTING group. + // Since both need to be defined and loaded, locale.datepicker.js needs to + // be loaded late in JS_SETTING. + // @see locale_js_alter() + // @see drupal_add_js() + // @todo Re-think order of JS groups. JS_SETTING could come early, directly + // after JS_LIBRARY. This would allow us to load this file very early in + // the regular JS_DEFAULT group. + $libraries['ui.datepicker']['js'][$datepicker] = array( + 'group' => JS_SETTING, + 'weight' => 10, + ); + $libraries['ui.datepicker']['js'][] = array( 'data' => array( - 'jqueryuidatepicker' => array( - 'rtl' => $language_interface->direction == LANGUAGE_RTL, - 'firstDay' => variable_get('date_first_day', 0), + 'jquery' => array( + 'ui' => array( + 'datepicker' => array( + 'isRTL' => $language_interface->direction == LANGUAGE_RTL, + 'firstDay' => variable_get('date_first_day', 0), + ), + ), ), ), 'type' => 'setting', diff --git a/core/modules/locale/locale.test b/core/modules/locale/locale.test index f2395ad..6da84ec 100644 --- a/core/modules/locale/locale.test +++ b/core/modules/locale/locale.test @@ -3120,3 +3120,33 @@ class LocaleLanguageNegotiationInfoFunctionalTest extends DrupalWebTestCase { } } } + +/** + * Functional test for localization of the javascript libraries. + * + * Currently only the jQuery datepicker is localized, using Drupal translations. + */ +class LocaleLibraryInfoAlterTest extends DrupalWebTestCase { + public static function getInfo() { + return array( + 'name' => 'Javascript library localisation', + 'description' => 'Tests the localisation of javascript libraries.', + 'group' => 'Locale', + ); + } + + function setUp() { + parent::setUp('locale', 'locale_test'); + } + + /** + * Verify that locale_library_info_alter adds localisation to the datepicker. + * + * @see locale_library_info_alter() + */ + public function testLibraryInfoAlter() { + drupal_add_library('system', 'ui.datepicker'); + $scripts = drupal_get_js(); + $this->assertTrue(strpos($scripts, 'locale.datepicker.js'), t('locale.datepicker.js added to scripts in footer.')); + } +} diff --git a/core/modules/node/node.pages.inc b/core/modules/node/node.pages.inc index 4e94b26..1764a6a 100644 --- a/core/modules/node/node.pages.inc +++ b/core/modules/node/node.pages.inc @@ -282,6 +282,17 @@ function node_form($form, &$form_state, $node) { '#maxlength' => 25, '#description' => t('Format: %time. The date format is YYYY-MM-DD and %timezone is the time zone offset from UTC. Leave blank to use the time of form submission.', array('%time' => !empty($node->date) ? date_format(date_create($node->date), 'Y-m-d H:i:s O') : format_date($node->created, 'custom', 'Y-m-d H:i:s O'), '%timezone' => !empty($node->date) ? date_format(date_create($node->date), 'O') : format_date($node->created, 'custom', 'O'))), '#default_value' => !empty($node->date) ? $node->date : '', + '#attached' => array( + 'library' => array(array('system', 'ui.datepicker')), + 'js' => array(array( + 'data' => "jQuery(function ($) { + $('#edit-date').datepicker(); + });", + 'type' => 'inline', + 'group' => JS_SETTING, + 'weight' => 1, + )) + ), ); // Node options for administrators