danielebarchiesi@0
|
1 (function ($) {
|
danielebarchiesi@0
|
2
|
danielebarchiesi@0
|
3 /**
|
danielebarchiesi@0
|
4 * Set the client's system time zone as default values of form fields.
|
danielebarchiesi@0
|
5 */
|
danielebarchiesi@0
|
6 Drupal.behaviors.setTimezone = {
|
danielebarchiesi@0
|
7 attach: function (context, settings) {
|
danielebarchiesi@0
|
8 $('select.timezone-detect', context).once('timezone', function () {
|
danielebarchiesi@0
|
9 var dateString = Date();
|
danielebarchiesi@0
|
10 // In some client environments, date strings include a time zone
|
danielebarchiesi@0
|
11 // abbreviation, between 3 and 5 letters enclosed in parentheses,
|
danielebarchiesi@0
|
12 // which can be interpreted by PHP.
|
danielebarchiesi@0
|
13 var matches = dateString.match(/\(([A-Z]{3,5})\)/);
|
danielebarchiesi@0
|
14 var abbreviation = matches ? matches[1] : 0;
|
danielebarchiesi@0
|
15
|
danielebarchiesi@0
|
16 // For all other client environments, the abbreviation is set to "0"
|
danielebarchiesi@0
|
17 // and the current offset from UTC and daylight saving time status are
|
danielebarchiesi@0
|
18 // used to guess the time zone.
|
danielebarchiesi@0
|
19 var dateNow = new Date();
|
danielebarchiesi@0
|
20 var offsetNow = dateNow.getTimezoneOffset() * -60;
|
danielebarchiesi@0
|
21
|
danielebarchiesi@0
|
22 // Use January 1 and July 1 as test dates for determining daylight
|
danielebarchiesi@0
|
23 // saving time status by comparing their offsets.
|
danielebarchiesi@0
|
24 var dateJan = new Date(dateNow.getFullYear(), 0, 1, 12, 0, 0, 0);
|
danielebarchiesi@0
|
25 var dateJul = new Date(dateNow.getFullYear(), 6, 1, 12, 0, 0, 0);
|
danielebarchiesi@0
|
26 var offsetJan = dateJan.getTimezoneOffset() * -60;
|
danielebarchiesi@0
|
27 var offsetJul = dateJul.getTimezoneOffset() * -60;
|
danielebarchiesi@0
|
28
|
danielebarchiesi@0
|
29 var isDaylightSavingTime;
|
danielebarchiesi@0
|
30 // If the offset from UTC is identical on January 1 and July 1,
|
danielebarchiesi@0
|
31 // assume daylight saving time is not used in this time zone.
|
danielebarchiesi@0
|
32 if (offsetJan == offsetJul) {
|
danielebarchiesi@0
|
33 isDaylightSavingTime = '';
|
danielebarchiesi@0
|
34 }
|
danielebarchiesi@0
|
35 // If the maximum annual offset is equivalent to the current offset,
|
danielebarchiesi@0
|
36 // assume daylight saving time is in effect.
|
danielebarchiesi@0
|
37 else if (Math.max(offsetJan, offsetJul) == offsetNow) {
|
danielebarchiesi@0
|
38 isDaylightSavingTime = 1;
|
danielebarchiesi@0
|
39 }
|
danielebarchiesi@0
|
40 // Otherwise, assume daylight saving time is not in effect.
|
danielebarchiesi@0
|
41 else {
|
danielebarchiesi@0
|
42 isDaylightSavingTime = 0;
|
danielebarchiesi@0
|
43 }
|
danielebarchiesi@0
|
44
|
danielebarchiesi@0
|
45 // Submit request to the system/timezone callback and set the form field
|
danielebarchiesi@0
|
46 // to the response time zone. The client date is passed to the callback
|
danielebarchiesi@0
|
47 // for debugging purposes. Submit a synchronous request to avoid database
|
danielebarchiesi@0
|
48 // errors associated with concurrent requests during install.
|
danielebarchiesi@0
|
49 var path = 'system/timezone/' + abbreviation + '/' + offsetNow + '/' + isDaylightSavingTime;
|
danielebarchiesi@0
|
50 var element = this;
|
danielebarchiesi@0
|
51 $.ajax({
|
danielebarchiesi@0
|
52 async: false,
|
danielebarchiesi@0
|
53 url: settings.basePath,
|
danielebarchiesi@0
|
54 data: { q: path, date: dateString },
|
danielebarchiesi@0
|
55 dataType: 'json',
|
danielebarchiesi@0
|
56 success: function (data) {
|
danielebarchiesi@0
|
57 if (data) {
|
danielebarchiesi@0
|
58 $(element).val(data);
|
danielebarchiesi@0
|
59 }
|
danielebarchiesi@0
|
60 }
|
danielebarchiesi@0
|
61 });
|
danielebarchiesi@0
|
62 });
|
danielebarchiesi@0
|
63 }
|
danielebarchiesi@0
|
64 };
|
danielebarchiesi@0
|
65
|
danielebarchiesi@0
|
66 })(jQuery);
|