diff --git a/django/contrib/admin/static/admin/js/admin/DateTimeShortcuts.js b/django/contrib/admin/static/admin/js/admin/DateTimeShortcuts.js index ce86593654..af6502e49b 100644 --- a/django/contrib/admin/static/admin/js/admin/DateTimeShortcuts.js +++ b/django/contrib/admin/static/admin/js/admin/DateTimeShortcuts.js @@ -8,6 +8,15 @@ calendars: [], calendarInputs: [], clockInputs: [], + clockHours: { + default_: [ + ['Now', -1], + ['Midnight', 0], + ['6 a.m.', 6], + ['Noon', 12], + ['6 p.m.', 18] + ] + }, dismissClockFunc: [], dismissCalendarFunc: [], calendarDivName1: 'calendarbox', // name of calendar
that gets toggled @@ -157,30 +166,16 @@ quickElement('h2', clock_box, gettext('Choose a time')); var time_list = quickElement('ul', clock_box); time_list.className = 'timelist'; - var time_link = quickElement("a", quickElement("li", time_list), gettext("Now"), "href", "#"); - addEvent(time_link, 'click', function(e) { - e.preventDefault(); - DateTimeShortcuts.handleClockQuicklink(num, -1); - }); - time_link = quickElement("a", quickElement("li", time_list), gettext("Midnight"), "href", "#"); - addEvent(time_link, 'click', function(e) { - e.preventDefault(); - DateTimeShortcuts.handleClockQuicklink(num, 0); - }); - time_link = quickElement("a", quickElement("li", time_list), gettext("6 a.m."), "href", "#"); - addEvent(time_link, 'click', function(e) { - e.preventDefault(); - DateTimeShortcuts.handleClockQuicklink(num, 6); - }); - time_link = quickElement("a", quickElement("li", time_list), gettext("Noon"), "href", "#"); - addEvent(time_link, 'click', function(e) { - e.preventDefault(); - DateTimeShortcuts.handleClockQuicklink(num, 12); - }); - time_link = quickElement("a", quickElement("li", time_list), gettext("6 p.m."), "href", "#"); - addEvent(time_link, 'click', function(e) { - e.preventDefault(); - DateTimeShortcuts.handleClockQuicklink(num, 18); + // The list of choices can be overridden in JavaScript like this: + // DateTimeShortcuts.clockHours.name = [['3 a.m.', 3]]; + // where name is the name attribute of the . + var name = typeof DateTimeShortcuts.clockHours[inp.name] === 'undefined' ? 'default_' : inp.name; + DateTimeShortcuts.clockHours[name].forEach(function(element) { + var time_link = quickElement('a', quickElement('li', time_list), gettext(element[0]), 'href', '#'); + addEvent(time_link, 'click', function(e) { + e.preventDefault(); + DateTimeShortcuts.handleClockQuicklink(num, element[1]); + }); }); var cancel_p = quickElement('p', clock_box); diff --git a/js_tests/admin/DateTimeShortcuts.test.js b/js_tests/admin/DateTimeShortcuts.test.js index 5d5b12ba60..4e534954f3 100644 --- a/js_tests/admin/DateTimeShortcuts.test.js +++ b/js_tests/admin/DateTimeShortcuts.test.js @@ -21,3 +21,12 @@ QUnit.test('init', function(assert) { // should be 0 when a timezone offset isn't set in the HTML body attribute. assert.equal(DateTimeShortcuts.timezoneOffset, 0); }); + +QUnit.test('custom time shortcuts', function(assert) { + var $ = django.jQuery; + var timeField = $(''); + $('#qunit-fixture').append(timeField); + DateTimeShortcuts.clockHours.time_test = [['3 a.m.', 3]]; + DateTimeShortcuts.init(); + assert.equal($('.clockbox').find('a').first().text(), '3 a.m.'); +});