From 5c0063f429aea44a20d0b82989f7ca8db8ab899e Mon Sep 17 00:00:00 2001
From: Peter Quade <pq@qdevelop.de>
Date: Mon, 18 Jan 2016 18:28:30 +0100
Subject: [PATCH] making datetimepicker aware of FIRST_DAY_OF_WEEK

---
 CHANGELOG.txt                                 |  1 +
 CONTRIBUTORS.rst                              |  1 +
 docs/releases/1.4.rst                         |  3 +++
 .../static_src/wagtailadmin/js/page-editor.js | 20 +++++++++----------
 wagtail/wagtailadmin/widgets.py               | 11 ++++++++--
 5 files changed, 24 insertions(+), 12 deletions(-)

diff --git a/CHANGELOG.txt b/CHANGELOG.txt
index 65bef00a22..56343be9b3 100644
--- a/CHANGELOG.txt
+++ b/CHANGELOG.txt
@@ -5,6 +5,7 @@ Changelog
 ~~~~~~~~~~~~~~~~
 
  * The `Document` model can now be overridden using the new `WAGTAILDOCS_DOCUMENT_MODEL` setting (Alex Gleason)
+ * Date/time pickers now respect the locale's 'first day of week' setting (Peter Quade)
  * Fix: Custom page managers no longer raise an error when used on an abstract model
  * Fix: Wagtail's migrations are now all reversible (benjaoming)
  * Fix: Deleting a page content type now preserves existing pages as basic Page instances, to prevent tree corruption
diff --git a/CONTRIBUTORS.rst b/CONTRIBUTORS.rst
index d7face3446..1f6737ad57 100644
--- a/CONTRIBUTORS.rst
+++ b/CONTRIBUTORS.rst
@@ -97,6 +97,7 @@ Contributors
 * Alexander Bogushov
 * Aarni Koskela
 * alexpilot11
+* Peter Quade
 
 
 Translators
diff --git a/docs/releases/1.4.rst b/docs/releases/1.4.rst
index cb7c25993b..43763e3f2c 100644
--- a/docs/releases/1.4.rst
+++ b/docs/releases/1.4.rst
@@ -19,6 +19,9 @@ The `Document` model can now be overridden using the new `WAGTAILDOCS_DOCUMENT_M
 Minor features
 ~~~~~~~~~~~~~~
 
+ * Date/time pickers now respect the locale's 'first day of week' setting (Peter Quade)
+
+
 Bug fixes
 ~~~~~~~~~
 
diff --git a/wagtail/wagtailadmin/static_src/wagtailadmin/js/page-editor.js b/wagtail/wagtailadmin/static_src/wagtailadmin/js/page-editor.js
index fb75130e03..7f93bc80a9 100644
--- a/wagtail/wagtailadmin/static_src/wagtailadmin/js/page-editor.js
+++ b/wagtail/wagtailadmin/static_src/wagtailadmin/js/page-editor.js
@@ -71,9 +71,9 @@ function insertRichTextDeleteControl(elem) {
     });
 }
 
-function initDateChooser(id) {
+function initDateChooser(id, opts) {
     if (window.dateTimePickerTranslations) {
-        $('#' + id).datetimepicker({
+        $('#' + id).datetimepicker($.extend({
             closeOnDateSelect: true,
             timepicker: false,
             scrollInput:false,
@@ -82,13 +82,13 @@ function initDateChooser(id) {
                 lang: window.dateTimePickerTranslations
             },
             lang: 'lang'
-        });
+        }, opts || {}));
     } else {
-        $('#' + id).datetimepicker({
+        $('#' + id).datetimepicker($.extend({
             timepicker: false,
             scrollInput:false,
             format: 'Y-m-d'
-        });
+        }, opts || {}));
     }
 }
 
@@ -112,9 +112,9 @@ function initTimeChooser(id) {
     }
 }
 
-function initDateTimeChooser(id) {
+function initDateTimeChooser(id, opts) {
     if (window.dateTimePickerTranslations) {
-        $('#' + id).datetimepicker({
+        $('#' + id).datetimepicker($.extend({
             closeOnDateSelect: true,
             format: 'Y-m-d H:i',
             scrollInput:false,
@@ -122,11 +122,11 @@ function initDateTimeChooser(id) {
                 lang: window.dateTimePickerTranslations
             },
             language: 'lang'
-        });
+        }, opts || {}));
     } else {
-        $('#' + id).datetimepicker({
+        $('#' + id).datetimepicker($.extend({
             format: 'Y-m-d H:i'
-        });
+        }, opts || {}));
     }
 }
 
diff --git a/wagtail/wagtailadmin/widgets.py b/wagtail/wagtailadmin/widgets.py
index 38d4814bc5..9e791c6a54 100644
--- a/wagtail/wagtailadmin/widgets.py
+++ b/wagtail/wagtailadmin/widgets.py
@@ -2,6 +2,7 @@ from __future__ import absolute_import, unicode_literals
 
 import json
 
+from django.utils.formats import get_format
 from django.core.urlresolvers import reverse
 from django.forms import widgets
 from django.contrib.contenttypes.models import ContentType
@@ -36,7 +37,10 @@ class AdminDateInput(WidgetWithScript, widgets.DateInput):
         super(AdminDateInput, self).__init__(attrs=attrs, format=format)
 
     def render_js_init(self, id_, name, value):
-        return 'initDateChooser({0});'.format(json.dumps(id_))
+        return 'initDateChooser({0}, {1});'.format(
+            json.dumps(id_),
+            json.dumps({'dayOfWeekStart': get_format('FIRST_DAY_OF_WEEK')})
+        )
 
 
 class AdminTimeInput(WidgetWithScript, widgets.TimeInput):
@@ -52,7 +56,10 @@ class AdminDateTimeInput(WidgetWithScript, widgets.DateTimeInput):
         super(AdminDateTimeInput, self).__init__(attrs=attrs, format=format)
 
     def render_js_init(self, id_, name, value):
-        return 'initDateTimeChooser({0});'.format(json.dumps(id_))
+        return 'initDateTimeChooser({0}, {1});'.format(
+            json.dumps(id_),
+            json.dumps({'dayOfWeekStart': get_format('FIRST_DAY_OF_WEEK')})
+        )
 
 
 class AdminTagWidget(WidgetWithScript, TagWidget):