move jstz to bower management
This commit is contained in:
parent
fefeb506b2
commit
48f00df08e
|
@ -17,6 +17,7 @@
|
||||||
"handlebars": "~1.3.0",
|
"handlebars": "~1.3.0",
|
||||||
"jcrop": "~0.9.12",
|
"jcrop": "~0.9.12",
|
||||||
"jquery": "~1.10.0",
|
"jquery": "~1.10.0",
|
||||||
|
"jsTimezoneDetect": "~1.0.5",
|
||||||
"moment": "~2.8.3",
|
"moment": "~2.8.3",
|
||||||
"select2": "~3.4.8",
|
"select2": "~3.4.8",
|
||||||
"zxcvbn": "*",
|
"zxcvbn": "*",
|
||||||
|
|
358
core/js/jstz.js
358
core/js/jstz.js
|
@ -1,358 +0,0 @@
|
||||||
/**
|
|
||||||
* This script gives you the zone info key representing your device's time zone setting.
|
|
||||||
*
|
|
||||||
* @name jsTimezoneDetect
|
|
||||||
* @version 1.0.5
|
|
||||||
* @author Jon Nylander
|
|
||||||
* @license MIT License - http://www.opensource.org/licenses/mit-license.php
|
|
||||||
*
|
|
||||||
* For usage and examples, visit:
|
|
||||||
* http://pellepim.bitbucket.org/jstz/
|
|
||||||
*
|
|
||||||
* Copyright (c) Jon Nylander
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*jslint undef: true */
|
|
||||||
/*global console, exports*/
|
|
||||||
|
|
||||||
(function(root) {
|
|
||||||
/**
|
|
||||||
* Namespace to hold all the code for timezone detection.
|
|
||||||
*/
|
|
||||||
var jstz = (function () {
|
|
||||||
'use strict';
|
|
||||||
var HEMISPHERE_SOUTH = 's',
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the offset in minutes from UTC for a certain date.
|
|
||||||
* @param {Date} date
|
|
||||||
* @returns {Number}
|
|
||||||
*/
|
|
||||||
get_date_offset = function (date) {
|
|
||||||
var offset = -date.getTimezoneOffset();
|
|
||||||
return (offset !== null ? offset : 0);
|
|
||||||
},
|
|
||||||
|
|
||||||
get_date = function (year, month, date) {
|
|
||||||
var d = new Date();
|
|
||||||
if (year !== undefined) {
|
|
||||||
d.setFullYear(year);
|
|
||||||
}
|
|
||||||
d.setMonth(month);
|
|
||||||
d.setDate(date);
|
|
||||||
return d;
|
|
||||||
},
|
|
||||||
|
|
||||||
get_january_offset = function (year) {
|
|
||||||
return get_date_offset(get_date(year, 0 ,2));
|
|
||||||
},
|
|
||||||
|
|
||||||
get_june_offset = function (year) {
|
|
||||||
return get_date_offset(get_date(year, 5, 2));
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Private method.
|
|
||||||
* Checks whether a given date is in daylight saving time.
|
|
||||||
* If the date supplied is after august, we assume that we're checking
|
|
||||||
* for southern hemisphere DST.
|
|
||||||
* @param {Date} date
|
|
||||||
* @returns {Boolean}
|
|
||||||
*/
|
|
||||||
date_is_dst = function (date) {
|
|
||||||
var is_southern = date.getMonth() > 7,
|
|
||||||
base_offset = is_southern ? get_june_offset(date.getFullYear()) :
|
|
||||||
get_january_offset(date.getFullYear()),
|
|
||||||
date_offset = get_date_offset(date),
|
|
||||||
is_west = base_offset < 0,
|
|
||||||
dst_offset = base_offset - date_offset;
|
|
||||||
|
|
||||||
if (!is_west && !is_southern) {
|
|
||||||
return dst_offset < 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return dst_offset !== 0;
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This function does some basic calculations to create information about
|
|
||||||
* the user's timezone. It uses REFERENCE_YEAR as a solid year for which
|
|
||||||
* the script has been tested rather than depend on the year set by the
|
|
||||||
* client device.
|
|
||||||
*
|
|
||||||
* Returns a key that can be used to do lookups in jstz.olson.timezones.
|
|
||||||
* eg: "720,1,2".
|
|
||||||
*
|
|
||||||
* @returns {String}
|
|
||||||
*/
|
|
||||||
|
|
||||||
lookup_key = function () {
|
|
||||||
var january_offset = get_january_offset(),
|
|
||||||
june_offset = get_june_offset(),
|
|
||||||
diff = january_offset - june_offset;
|
|
||||||
|
|
||||||
if (diff < 0) {
|
|
||||||
return january_offset + ",1";
|
|
||||||
} else if (diff > 0) {
|
|
||||||
return june_offset + ",1," + HEMISPHERE_SOUTH;
|
|
||||||
}
|
|
||||||
|
|
||||||
return january_offset + ",0";
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Uses get_timezone_info() to formulate a key to use in the olson.timezones dictionary.
|
|
||||||
*
|
|
||||||
* Returns a primitive object on the format:
|
|
||||||
* {'timezone': TimeZone, 'key' : 'the key used to find the TimeZone object'}
|
|
||||||
*
|
|
||||||
* @returns Object
|
|
||||||
*/
|
|
||||||
determine = function () {
|
|
||||||
var key = lookup_key();
|
|
||||||
return new jstz.TimeZone(jstz.olson.timezones[key]);
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This object contains information on when daylight savings starts for
|
|
||||||
* different timezones.
|
|
||||||
*
|
|
||||||
* The list is short for a reason. Often we do not have to be very specific
|
|
||||||
* to single out the correct timezone. But when we do, this list comes in
|
|
||||||
* handy.
|
|
||||||
*
|
|
||||||
* Each value is a date denoting when daylight savings starts for that timezone.
|
|
||||||
*/
|
|
||||||
dst_start_for = function (tz_name) {
|
|
||||||
|
|
||||||
var ru_pre_dst_change = new Date(2010, 6, 15, 1, 0, 0, 0), // In 2010 Russia had DST, this allows us to detect Russia :)
|
|
||||||
dst_starts = {
|
|
||||||
'America/Denver': new Date(2011, 2, 13, 3, 0, 0, 0),
|
|
||||||
'America/Mazatlan': new Date(2011, 3, 3, 3, 0, 0, 0),
|
|
||||||
'America/Chicago': new Date(2011, 2, 13, 3, 0, 0, 0),
|
|
||||||
'America/Mexico_City': new Date(2011, 3, 3, 3, 0, 0, 0),
|
|
||||||
'America/Asuncion': new Date(2012, 9, 7, 3, 0, 0, 0),
|
|
||||||
'America/Santiago': new Date(2012, 9, 3, 3, 0, 0, 0),
|
|
||||||
'America/Campo_Grande': new Date(2012, 9, 21, 5, 0, 0, 0),
|
|
||||||
'America/Montevideo': new Date(2011, 9, 2, 3, 0, 0, 0),
|
|
||||||
'America/Sao_Paulo': new Date(2011, 9, 16, 5, 0, 0, 0),
|
|
||||||
'America/Los_Angeles': new Date(2011, 2, 13, 8, 0, 0, 0),
|
|
||||||
'America/Santa_Isabel': new Date(2011, 3, 5, 8, 0, 0, 0),
|
|
||||||
'America/Havana': new Date(2012, 2, 10, 2, 0, 0, 0),
|
|
||||||
'America/New_York': new Date(2012, 2, 10, 7, 0, 0, 0),
|
|
||||||
'Europe/Helsinki': new Date(2013, 2, 31, 5, 0, 0, 0),
|
|
||||||
'Pacific/Auckland': new Date(2011, 8, 26, 7, 0, 0, 0),
|
|
||||||
'America/Halifax': new Date(2011, 2, 13, 6, 0, 0, 0),
|
|
||||||
'America/Goose_Bay': new Date(2011, 2, 13, 2, 1, 0, 0),
|
|
||||||
'America/Miquelon': new Date(2011, 2, 13, 5, 0, 0, 0),
|
|
||||||
'America/Godthab': new Date(2011, 2, 27, 1, 0, 0, 0),
|
|
||||||
'Europe/Moscow': ru_pre_dst_change,
|
|
||||||
'Asia/Amman': new Date(2013, 2, 29, 1, 0, 0, 0),
|
|
||||||
'Asia/Beirut': new Date(2013, 2, 31, 2, 0, 0, 0),
|
|
||||||
'Asia/Damascus': new Date(2013, 3, 6, 2, 0, 0, 0),
|
|
||||||
'Asia/Jerusalem': new Date(2013, 2, 29, 5, 0, 0, 0),
|
|
||||||
'Asia/Yekaterinburg': ru_pre_dst_change,
|
|
||||||
'Asia/Omsk': ru_pre_dst_change,
|
|
||||||
'Asia/Krasnoyarsk': ru_pre_dst_change,
|
|
||||||
'Asia/Irkutsk': ru_pre_dst_change,
|
|
||||||
'Asia/Yakutsk': ru_pre_dst_change,
|
|
||||||
'Asia/Vladivostok': ru_pre_dst_change,
|
|
||||||
'Asia/Baku': new Date(2013, 2, 31, 4, 0, 0),
|
|
||||||
'Asia/Yerevan': new Date(2013, 2, 31, 3, 0, 0),
|
|
||||||
'Asia/Kamchatka': ru_pre_dst_change,
|
|
||||||
'Asia/Gaza': new Date(2010, 2, 27, 4, 0, 0),
|
|
||||||
'Africa/Cairo': new Date(2010, 4, 1, 3, 0, 0),
|
|
||||||
'Europe/Minsk': ru_pre_dst_change,
|
|
||||||
'Pacific/Apia': new Date(2010, 10, 1, 1, 0, 0, 0),
|
|
||||||
'Pacific/Fiji': new Date(2010, 11, 1, 0, 0, 0),
|
|
||||||
'Australia/Perth': new Date(2008, 10, 1, 1, 0, 0, 0)
|
|
||||||
};
|
|
||||||
|
|
||||||
return dst_starts[tz_name];
|
|
||||||
};
|
|
||||||
|
|
||||||
return {
|
|
||||||
determine: determine,
|
|
||||||
date_is_dst: date_is_dst,
|
|
||||||
dst_start_for: dst_start_for
|
|
||||||
};
|
|
||||||
}());
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Simple object to perform ambiguity check and to return name of time zone.
|
|
||||||
*/
|
|
||||||
jstz.TimeZone = function (tz_name) {
|
|
||||||
'use strict';
|
|
||||||
/**
|
|
||||||
* The keys in this object are timezones that we know may be ambiguous after
|
|
||||||
* a preliminary scan through the olson_tz object.
|
|
||||||
*
|
|
||||||
* The array of timezones to compare must be in the order that daylight savings
|
|
||||||
* starts for the regions.
|
|
||||||
*/
|
|
||||||
var AMBIGUITIES = {
|
|
||||||
'America/Denver': ['America/Denver', 'America/Mazatlan'],
|
|
||||||
'America/Chicago': ['America/Chicago', 'America/Mexico_City'],
|
|
||||||
'America/Santiago': ['America/Santiago', 'America/Asuncion', 'America/Campo_Grande'],
|
|
||||||
'America/Montevideo': ['America/Montevideo', 'America/Sao_Paulo'],
|
|
||||||
'Asia/Beirut': ['Asia/Amman', 'Asia/Jerusalem', 'Asia/Beirut', 'Europe/Helsinki','Asia/Damascus'],
|
|
||||||
'Pacific/Auckland': ['Pacific/Auckland', 'Pacific/Fiji'],
|
|
||||||
'America/Los_Angeles': ['America/Los_Angeles', 'America/Santa_Isabel'],
|
|
||||||
'America/New_York': ['America/Havana', 'America/New_York'],
|
|
||||||
'America/Halifax': ['America/Goose_Bay', 'America/Halifax'],
|
|
||||||
'America/Godthab': ['America/Miquelon', 'America/Godthab'],
|
|
||||||
'Asia/Dubai': ['Europe/Moscow'],
|
|
||||||
'Asia/Dhaka': ['Asia/Yekaterinburg'],
|
|
||||||
'Asia/Jakarta': ['Asia/Omsk'],
|
|
||||||
'Asia/Shanghai': ['Asia/Krasnoyarsk', 'Australia/Perth'],
|
|
||||||
'Asia/Tokyo': ['Asia/Irkutsk'],
|
|
||||||
'Australia/Brisbane': ['Asia/Yakutsk'],
|
|
||||||
'Pacific/Noumea': ['Asia/Vladivostok'],
|
|
||||||
'Pacific/Tarawa': ['Asia/Kamchatka', 'Pacific/Fiji'],
|
|
||||||
'Pacific/Tongatapu': ['Pacific/Apia'],
|
|
||||||
'Asia/Baghdad': ['Europe/Minsk'],
|
|
||||||
'Asia/Baku': ['Asia/Yerevan','Asia/Baku'],
|
|
||||||
'Africa/Johannesburg': ['Asia/Gaza', 'Africa/Cairo']
|
|
||||||
},
|
|
||||||
|
|
||||||
timezone_name = tz_name,
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks if a timezone has possible ambiguities. I.e timezones that are similar.
|
|
||||||
*
|
|
||||||
* For example, if the preliminary scan determines that we're in America/Denver.
|
|
||||||
* We double check here that we're really there and not in America/Mazatlan.
|
|
||||||
*
|
|
||||||
* This is done by checking known dates for when daylight savings start for different
|
|
||||||
* timezones during 2010 and 2011.
|
|
||||||
*/
|
|
||||||
ambiguity_check = function () {
|
|
||||||
var ambiguity_list = AMBIGUITIES[timezone_name],
|
|
||||||
length = ambiguity_list.length,
|
|
||||||
i = 0,
|
|
||||||
tz = ambiguity_list[0];
|
|
||||||
|
|
||||||
for (; i < length; i += 1) {
|
|
||||||
tz = ambiguity_list[i];
|
|
||||||
|
|
||||||
if (jstz.date_is_dst(jstz.dst_start_for(tz))) {
|
|
||||||
timezone_name = tz;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks if it is possible that the timezone is ambiguous.
|
|
||||||
*/
|
|
||||||
is_ambiguous = function () {
|
|
||||||
return typeof (AMBIGUITIES[timezone_name]) !== 'undefined';
|
|
||||||
};
|
|
||||||
|
|
||||||
if (is_ambiguous()) {
|
|
||||||
ambiguity_check();
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
|
||||||
name: function () {
|
|
||||||
return timezone_name;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
jstz.olson = {};
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The keys in this dictionary are comma separated as such:
|
|
||||||
*
|
|
||||||
* First the offset compared to UTC time in minutes.
|
|
||||||
*
|
|
||||||
* Then a flag which is 0 if the timezone does not take daylight savings into account and 1 if it
|
|
||||||
* does.
|
|
||||||
*
|
|
||||||
* Thirdly an optional 's' signifies that the timezone is in the southern hemisphere,
|
|
||||||
* only interesting for timezones with DST.
|
|
||||||
*
|
|
||||||
* The mapped arrays is used for constructing the jstz.TimeZone object from within
|
|
||||||
* jstz.determine_timezone();
|
|
||||||
*/
|
|
||||||
jstz.olson.timezones = {
|
|
||||||
'-720,0' : 'Pacific/Majuro',
|
|
||||||
'-660,0' : 'Pacific/Pago_Pago',
|
|
||||||
'-600,1' : 'America/Adak',
|
|
||||||
'-600,0' : 'Pacific/Honolulu',
|
|
||||||
'-570,0' : 'Pacific/Marquesas',
|
|
||||||
'-540,0' : 'Pacific/Gambier',
|
|
||||||
'-540,1' : 'America/Anchorage',
|
|
||||||
'-480,1' : 'America/Los_Angeles',
|
|
||||||
'-480,0' : 'Pacific/Pitcairn',
|
|
||||||
'-420,0' : 'America/Phoenix',
|
|
||||||
'-420,1' : 'America/Denver',
|
|
||||||
'-360,0' : 'America/Guatemala',
|
|
||||||
'-360,1' : 'America/Chicago',
|
|
||||||
'-360,1,s' : 'Pacific/Easter',
|
|
||||||
'-300,0' : 'America/Bogota',
|
|
||||||
'-300,1' : 'America/New_York',
|
|
||||||
'-270,0' : 'America/Caracas',
|
|
||||||
'-240,1' : 'America/Halifax',
|
|
||||||
'-240,0' : 'America/Santo_Domingo',
|
|
||||||
'-240,1,s' : 'America/Santiago',
|
|
||||||
'-210,1' : 'America/St_Johns',
|
|
||||||
'-180,1' : 'America/Godthab',
|
|
||||||
'-180,0' : 'America/Argentina/Buenos_Aires',
|
|
||||||
'-180,1,s' : 'America/Montevideo',
|
|
||||||
'-120,0' : 'America/Noronha',
|
|
||||||
'-120,1' : 'America/Noronha',
|
|
||||||
'-60,1' : 'Atlantic/Azores',
|
|
||||||
'-60,0' : 'Atlantic/Cape_Verde',
|
|
||||||
'0,0' : 'UTC',
|
|
||||||
'0,1' : 'Europe/London',
|
|
||||||
'60,1' : 'Europe/Berlin',
|
|
||||||
'60,0' : 'Africa/Lagos',
|
|
||||||
'60,1,s' : 'Africa/Windhoek',
|
|
||||||
'120,1' : 'Asia/Beirut',
|
|
||||||
'120,0' : 'Africa/Johannesburg',
|
|
||||||
'180,0' : 'Asia/Baghdad',
|
|
||||||
'180,1' : 'Europe/Moscow',
|
|
||||||
'210,1' : 'Asia/Tehran',
|
|
||||||
'240,0' : 'Asia/Dubai',
|
|
||||||
'240,1' : 'Asia/Baku',
|
|
||||||
'270,0' : 'Asia/Kabul',
|
|
||||||
'300,1' : 'Asia/Yekaterinburg',
|
|
||||||
'300,0' : 'Asia/Karachi',
|
|
||||||
'330,0' : 'Asia/Kolkata',
|
|
||||||
'345,0' : 'Asia/Kathmandu',
|
|
||||||
'360,0' : 'Asia/Dhaka',
|
|
||||||
'360,1' : 'Asia/Omsk',
|
|
||||||
'390,0' : 'Asia/Rangoon',
|
|
||||||
'420,1' : 'Asia/Krasnoyarsk',
|
|
||||||
'420,0' : 'Asia/Jakarta',
|
|
||||||
'480,0' : 'Asia/Shanghai',
|
|
||||||
'480,1' : 'Asia/Irkutsk',
|
|
||||||
'525,0' : 'Australia/Eucla',
|
|
||||||
'525,1,s' : 'Australia/Eucla',
|
|
||||||
'540,1' : 'Asia/Yakutsk',
|
|
||||||
'540,0' : 'Asia/Tokyo',
|
|
||||||
'570,0' : 'Australia/Darwin',
|
|
||||||
'570,1,s' : 'Australia/Adelaide',
|
|
||||||
'600,0' : 'Australia/Brisbane',
|
|
||||||
'600,1' : 'Asia/Vladivostok',
|
|
||||||
'600,1,s' : 'Australia/Sydney',
|
|
||||||
'630,1,s' : 'Australia/Lord_Howe',
|
|
||||||
'660,1' : 'Asia/Kamchatka',
|
|
||||||
'660,0' : 'Pacific/Noumea',
|
|
||||||
'690,0' : 'Pacific/Norfolk',
|
|
||||||
'720,1,s' : 'Pacific/Auckland',
|
|
||||||
'720,0' : 'Pacific/Tarawa',
|
|
||||||
'765,1,s' : 'Pacific/Chatham',
|
|
||||||
'780,0' : 'Pacific/Tongatapu',
|
|
||||||
'780,1,s' : 'Pacific/Apia',
|
|
||||||
'840,0' : 'Pacific/Kiritimati'
|
|
||||||
};
|
|
||||||
|
|
||||||
if (typeof exports !== 'undefined') {
|
|
||||||
exports.jstz = jstz;
|
|
||||||
} else {
|
|
||||||
root.jstz = jstz;
|
|
||||||
}
|
|
||||||
})(this);
|
|
|
@ -1,5 +1,5 @@
|
||||||
<?php /** @var $l OC_L10N */ ?>
|
<?php /** @var $l OC_L10N */ ?>
|
||||||
<?php script('core', 'jstz') ?>
|
<?php vendor_script('jsTimezoneDetect/jstz') ?>
|
||||||
|
|
||||||
<!--[if IE 8]><style>input[type="checkbox"]{padding:0;}</style><![endif]-->
|
<!--[if IE 8]><style>input[type="checkbox"]{padding:0;}</style><![endif]-->
|
||||||
<form method="post" name="login">
|
<form method="post" name="login">
|
||||||
|
|
|
@ -7,6 +7,7 @@ bower.json
|
||||||
CHANGELOG*
|
CHANGELOG*
|
||||||
Gemfile
|
Gemfile
|
||||||
gruntfile.js
|
gruntfile.js
|
||||||
|
Gruntfile.js
|
||||||
Makefile
|
Makefile
|
||||||
package.json
|
package.json
|
||||||
README*
|
README*
|
||||||
|
@ -44,6 +45,9 @@ jcrop/css/jquery.Jcrop.min.css
|
||||||
jcrop/js/**
|
jcrop/js/**
|
||||||
!jcrop/js/jquery.Jcrop.js
|
!jcrop/js/jquery.Jcrop.js
|
||||||
|
|
||||||
|
# jsTimezoneDetect
|
||||||
|
jsTimezoneDetect/jstz.min.js
|
||||||
|
|
||||||
# handlebars
|
# handlebars
|
||||||
handlebars/**
|
handlebars/**
|
||||||
!handlebars/.bower.json
|
!handlebars/.bower.json
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
{
|
||||||
|
"name": "jstzdetect",
|
||||||
|
"version": "1.0.6",
|
||||||
|
"main": "jstz.min.js",
|
||||||
|
"ignore": [
|
||||||
|
"**/.*",
|
||||||
|
"node_modules",
|
||||||
|
"components",
|
||||||
|
"bower_components",
|
||||||
|
"test",
|
||||||
|
"tests"
|
||||||
|
],
|
||||||
|
"homepage": "https://github.com/HenningM/jstimezonedetect",
|
||||||
|
"_release": "1.0.6",
|
||||||
|
"_resolution": {
|
||||||
|
"type": "version",
|
||||||
|
"tag": "v1.0.6",
|
||||||
|
"commit": "bd595ed253292934991a414979007f3d51a1547d"
|
||||||
|
},
|
||||||
|
"_source": "git://github.com/HenningM/jstimezonedetect.git",
|
||||||
|
"_target": "~1.0.5",
|
||||||
|
"_originalSource": "jsTimezoneDetect"
|
||||||
|
}
|
|
@ -0,0 +1,22 @@
|
||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2012 Jon Nylander, project maintained at
|
||||||
|
https://bitbucket.org/pellepim/jstimezonedetect
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights to
|
||||||
|
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||||
|
of the Software, and to permit persons to whom the Software is furnished to
|
||||||
|
do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
|
@ -0,0 +1,358 @@
|
||||||
|
/**
|
||||||
|
* This script gives you the zone info key representing your device's time zone setting.
|
||||||
|
*
|
||||||
|
* @name jsTimezoneDetect
|
||||||
|
* @version 1.0.5
|
||||||
|
* @author Jon Nylander
|
||||||
|
* @license MIT License - http://www.opensource.org/licenses/mit-license.php
|
||||||
|
*
|
||||||
|
* For usage and examples, visit:
|
||||||
|
* http://pellepim.bitbucket.org/jstz/
|
||||||
|
*
|
||||||
|
* Copyright (c) Jon Nylander
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*jslint undef: true */
|
||||||
|
/*global console, exports*/
|
||||||
|
|
||||||
|
(function(root) {
|
||||||
|
/**
|
||||||
|
* Namespace to hold all the code for timezone detection.
|
||||||
|
*/
|
||||||
|
var jstz = (function () {
|
||||||
|
'use strict';
|
||||||
|
var HEMISPHERE_SOUTH = 's',
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the offset in minutes from UTC for a certain date.
|
||||||
|
* @param {Date} date
|
||||||
|
* @returns {Number}
|
||||||
|
*/
|
||||||
|
get_date_offset = function (date) {
|
||||||
|
var offset = -date.getTimezoneOffset();
|
||||||
|
return (offset !== null ? offset : 0);
|
||||||
|
},
|
||||||
|
|
||||||
|
get_date = function (year, month, date) {
|
||||||
|
var d = new Date();
|
||||||
|
if (year !== undefined) {
|
||||||
|
d.setFullYear(year);
|
||||||
|
}
|
||||||
|
d.setMonth(month);
|
||||||
|
d.setDate(date);
|
||||||
|
return d;
|
||||||
|
},
|
||||||
|
|
||||||
|
get_january_offset = function (year) {
|
||||||
|
return get_date_offset(get_date(year, 0 ,2));
|
||||||
|
},
|
||||||
|
|
||||||
|
get_june_offset = function (year) {
|
||||||
|
return get_date_offset(get_date(year, 5, 2));
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Private method.
|
||||||
|
* Checks whether a given date is in daylight saving time.
|
||||||
|
* If the date supplied is after august, we assume that we're checking
|
||||||
|
* for southern hemisphere DST.
|
||||||
|
* @param {Date} date
|
||||||
|
* @returns {Boolean}
|
||||||
|
*/
|
||||||
|
date_is_dst = function (date) {
|
||||||
|
var is_southern = date.getMonth() > 7,
|
||||||
|
base_offset = is_southern ? get_june_offset(date.getFullYear()) :
|
||||||
|
get_january_offset(date.getFullYear()),
|
||||||
|
date_offset = get_date_offset(date),
|
||||||
|
is_west = base_offset < 0,
|
||||||
|
dst_offset = base_offset - date_offset;
|
||||||
|
|
||||||
|
if (!is_west && !is_southern) {
|
||||||
|
return dst_offset < 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return dst_offset !== 0;
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This function does some basic calculations to create information about
|
||||||
|
* the user's timezone. It uses REFERENCE_YEAR as a solid year for which
|
||||||
|
* the script has been tested rather than depend on the year set by the
|
||||||
|
* client device.
|
||||||
|
*
|
||||||
|
* Returns a key that can be used to do lookups in jstz.olson.timezones.
|
||||||
|
* eg: "720,1,2".
|
||||||
|
*
|
||||||
|
* @returns {String}
|
||||||
|
*/
|
||||||
|
|
||||||
|
lookup_key = function () {
|
||||||
|
var january_offset = get_january_offset(),
|
||||||
|
june_offset = get_june_offset(),
|
||||||
|
diff = january_offset - june_offset;
|
||||||
|
|
||||||
|
if (diff < 0) {
|
||||||
|
return january_offset + ",1";
|
||||||
|
} else if (diff > 0) {
|
||||||
|
return june_offset + ",1," + HEMISPHERE_SOUTH;
|
||||||
|
}
|
||||||
|
|
||||||
|
return january_offset + ",0";
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Uses get_timezone_info() to formulate a key to use in the olson.timezones dictionary.
|
||||||
|
*
|
||||||
|
* Returns a primitive object on the format:
|
||||||
|
* {'timezone': TimeZone, 'key' : 'the key used to find the TimeZone object'}
|
||||||
|
*
|
||||||
|
* @returns Object
|
||||||
|
*/
|
||||||
|
determine = function () {
|
||||||
|
var key = lookup_key();
|
||||||
|
return new jstz.TimeZone(jstz.olson.timezones[key]);
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This object contains information on when daylight savings starts for
|
||||||
|
* different timezones.
|
||||||
|
*
|
||||||
|
* The list is short for a reason. Often we do not have to be very specific
|
||||||
|
* to single out the correct timezone. But when we do, this list comes in
|
||||||
|
* handy.
|
||||||
|
*
|
||||||
|
* Each value is a date denoting when daylight savings starts for that timezone.
|
||||||
|
*/
|
||||||
|
dst_start_for = function (tz_name) {
|
||||||
|
|
||||||
|
var ru_pre_dst_change = new Date(2010, 6, 15, 1, 0, 0, 0), // In 2010 Russia had DST, this allows us to detect Russia :)
|
||||||
|
dst_starts = {
|
||||||
|
'America/Denver': new Date(2011, 2, 13, 3, 0, 0, 0),
|
||||||
|
'America/Mazatlan': new Date(2011, 3, 3, 3, 0, 0, 0),
|
||||||
|
'America/Chicago': new Date(2011, 2, 13, 3, 0, 0, 0),
|
||||||
|
'America/Mexico_City': new Date(2011, 3, 3, 3, 0, 0, 0),
|
||||||
|
'America/Asuncion': new Date(2012, 9, 7, 3, 0, 0, 0),
|
||||||
|
'America/Santiago': new Date(2012, 9, 3, 3, 0, 0, 0),
|
||||||
|
'America/Campo_Grande': new Date(2012, 9, 21, 5, 0, 0, 0),
|
||||||
|
'America/Montevideo': new Date(2011, 9, 2, 3, 0, 0, 0),
|
||||||
|
'America/Sao_Paulo': new Date(2011, 9, 16, 5, 0, 0, 0),
|
||||||
|
'America/Los_Angeles': new Date(2011, 2, 13, 8, 0, 0, 0),
|
||||||
|
'America/Santa_Isabel': new Date(2011, 3, 5, 8, 0, 0, 0),
|
||||||
|
'America/Havana': new Date(2012, 2, 10, 2, 0, 0, 0),
|
||||||
|
'America/New_York': new Date(2012, 2, 10, 7, 0, 0, 0),
|
||||||
|
'Europe/Helsinki': new Date(2013, 2, 31, 5, 0, 0, 0),
|
||||||
|
'Pacific/Auckland': new Date(2011, 8, 26, 7, 0, 0, 0),
|
||||||
|
'America/Halifax': new Date(2011, 2, 13, 6, 0, 0, 0),
|
||||||
|
'America/Goose_Bay': new Date(2011, 2, 13, 2, 1, 0, 0),
|
||||||
|
'America/Miquelon': new Date(2011, 2, 13, 5, 0, 0, 0),
|
||||||
|
'America/Godthab': new Date(2011, 2, 27, 1, 0, 0, 0),
|
||||||
|
'Europe/Moscow': ru_pre_dst_change,
|
||||||
|
'Asia/Amman': new Date(2013, 2, 29, 1, 0, 0, 0),
|
||||||
|
'Asia/Beirut': new Date(2013, 2, 31, 2, 0, 0, 0),
|
||||||
|
'Asia/Damascus': new Date(2013, 3, 6, 2, 0, 0, 0),
|
||||||
|
'Asia/Jerusalem': new Date(2013, 2, 29, 5, 0, 0, 0),
|
||||||
|
'Asia/Yekaterinburg': ru_pre_dst_change,
|
||||||
|
'Asia/Omsk': ru_pre_dst_change,
|
||||||
|
'Asia/Krasnoyarsk': ru_pre_dst_change,
|
||||||
|
'Asia/Irkutsk': ru_pre_dst_change,
|
||||||
|
'Asia/Yakutsk': ru_pre_dst_change,
|
||||||
|
'Asia/Vladivostok': ru_pre_dst_change,
|
||||||
|
'Asia/Baku': new Date(2013, 2, 31, 4, 0, 0),
|
||||||
|
'Asia/Yerevan': new Date(2013, 2, 31, 3, 0, 0),
|
||||||
|
'Asia/Kamchatka': ru_pre_dst_change,
|
||||||
|
'Asia/Gaza': new Date(2010, 2, 27, 4, 0, 0),
|
||||||
|
'Africa/Cairo': new Date(2010, 4, 1, 3, 0, 0),
|
||||||
|
'Europe/Minsk': ru_pre_dst_change,
|
||||||
|
'Pacific/Apia': new Date(2010, 10, 1, 1, 0, 0, 0),
|
||||||
|
'Pacific/Fiji': new Date(2010, 11, 1, 0, 0, 0),
|
||||||
|
'Australia/Perth': new Date(2008, 10, 1, 1, 0, 0, 0)
|
||||||
|
};
|
||||||
|
|
||||||
|
return dst_starts[tz_name];
|
||||||
|
};
|
||||||
|
|
||||||
|
return {
|
||||||
|
determine: determine,
|
||||||
|
date_is_dst: date_is_dst,
|
||||||
|
dst_start_for: dst_start_for
|
||||||
|
};
|
||||||
|
}());
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Simple object to perform ambiguity check and to return name of time zone.
|
||||||
|
*/
|
||||||
|
jstz.TimeZone = function (tz_name) {
|
||||||
|
'use strict';
|
||||||
|
/**
|
||||||
|
* The keys in this object are timezones that we know may be ambiguous after
|
||||||
|
* a preliminary scan through the olson_tz object.
|
||||||
|
*
|
||||||
|
* The array of timezones to compare must be in the order that daylight savings
|
||||||
|
* starts for the regions.
|
||||||
|
*/
|
||||||
|
var AMBIGUITIES = {
|
||||||
|
'America/Denver': ['America/Denver', 'America/Mazatlan'],
|
||||||
|
'America/Chicago': ['America/Chicago', 'America/Mexico_City'],
|
||||||
|
'America/Santiago': ['America/Santiago', 'America/Asuncion', 'America/Campo_Grande'],
|
||||||
|
'America/Montevideo': ['America/Montevideo', 'America/Sao_Paulo'],
|
||||||
|
'Asia/Beirut': ['Asia/Amman', 'Asia/Jerusalem', 'Asia/Beirut', 'Europe/Helsinki','Asia/Damascus'],
|
||||||
|
'Pacific/Auckland': ['Pacific/Auckland', 'Pacific/Fiji'],
|
||||||
|
'America/Los_Angeles': ['America/Los_Angeles', 'America/Santa_Isabel'],
|
||||||
|
'America/New_York': ['America/Havana', 'America/New_York'],
|
||||||
|
'America/Halifax': ['America/Goose_Bay', 'America/Halifax'],
|
||||||
|
'America/Godthab': ['America/Miquelon', 'America/Godthab'],
|
||||||
|
'Asia/Dubai': ['Europe/Moscow'],
|
||||||
|
'Asia/Dhaka': ['Asia/Yekaterinburg'],
|
||||||
|
'Asia/Jakarta': ['Asia/Omsk'],
|
||||||
|
'Asia/Shanghai': ['Asia/Krasnoyarsk', 'Australia/Perth'],
|
||||||
|
'Asia/Tokyo': ['Asia/Irkutsk'],
|
||||||
|
'Australia/Brisbane': ['Asia/Yakutsk'],
|
||||||
|
'Pacific/Noumea': ['Asia/Vladivostok'],
|
||||||
|
'Pacific/Tarawa': ['Asia/Kamchatka', 'Pacific/Fiji'],
|
||||||
|
'Pacific/Tongatapu': ['Pacific/Apia'],
|
||||||
|
'Asia/Baghdad': ['Europe/Minsk'],
|
||||||
|
'Asia/Baku': ['Asia/Yerevan','Asia/Baku'],
|
||||||
|
'Africa/Johannesburg': ['Asia/Gaza', 'Africa/Cairo']
|
||||||
|
},
|
||||||
|
|
||||||
|
timezone_name = tz_name,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if a timezone has possible ambiguities. I.e timezones that are similar.
|
||||||
|
*
|
||||||
|
* For example, if the preliminary scan determines that we're in America/Denver.
|
||||||
|
* We double check here that we're really there and not in America/Mazatlan.
|
||||||
|
*
|
||||||
|
* This is done by checking known dates for when daylight savings start for different
|
||||||
|
* timezones during 2010 and 2011.
|
||||||
|
*/
|
||||||
|
ambiguity_check = function () {
|
||||||
|
var ambiguity_list = AMBIGUITIES[timezone_name],
|
||||||
|
length = ambiguity_list.length,
|
||||||
|
i = 0,
|
||||||
|
tz = ambiguity_list[0];
|
||||||
|
|
||||||
|
for (; i < length; i += 1) {
|
||||||
|
tz = ambiguity_list[i];
|
||||||
|
|
||||||
|
if (jstz.date_is_dst(jstz.dst_start_for(tz))) {
|
||||||
|
timezone_name = tz;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if it is possible that the timezone is ambiguous.
|
||||||
|
*/
|
||||||
|
is_ambiguous = function () {
|
||||||
|
return typeof (AMBIGUITIES[timezone_name]) !== 'undefined';
|
||||||
|
};
|
||||||
|
|
||||||
|
if (is_ambiguous()) {
|
||||||
|
ambiguity_check();
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
name: function () {
|
||||||
|
return timezone_name;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
jstz.olson = {};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The keys in this dictionary are comma separated as such:
|
||||||
|
*
|
||||||
|
* First the offset compared to UTC time in minutes.
|
||||||
|
*
|
||||||
|
* Then a flag which is 0 if the timezone does not take daylight savings into account and 1 if it
|
||||||
|
* does.
|
||||||
|
*
|
||||||
|
* Thirdly an optional 's' signifies that the timezone is in the southern hemisphere,
|
||||||
|
* only interesting for timezones with DST.
|
||||||
|
*
|
||||||
|
* The mapped arrays is used for constructing the jstz.TimeZone object from within
|
||||||
|
* jstz.determine_timezone();
|
||||||
|
*/
|
||||||
|
jstz.olson.timezones = {
|
||||||
|
'-720,0' : 'Pacific/Majuro',
|
||||||
|
'-660,0' : 'Pacific/Pago_Pago',
|
||||||
|
'-600,1' : 'America/Adak',
|
||||||
|
'-600,0' : 'Pacific/Honolulu',
|
||||||
|
'-570,0' : 'Pacific/Marquesas',
|
||||||
|
'-540,0' : 'Pacific/Gambier',
|
||||||
|
'-540,1' : 'America/Anchorage',
|
||||||
|
'-480,1' : 'America/Los_Angeles',
|
||||||
|
'-480,0' : 'Pacific/Pitcairn',
|
||||||
|
'-420,0' : 'America/Phoenix',
|
||||||
|
'-420,1' : 'America/Denver',
|
||||||
|
'-360,0' : 'America/Guatemala',
|
||||||
|
'-360,1' : 'America/Chicago',
|
||||||
|
'-360,1,s' : 'Pacific/Easter',
|
||||||
|
'-300,0' : 'America/Bogota',
|
||||||
|
'-300,1' : 'America/New_York',
|
||||||
|
'-270,0' : 'America/Caracas',
|
||||||
|
'-240,1' : 'America/Halifax',
|
||||||
|
'-240,0' : 'America/Santo_Domingo',
|
||||||
|
'-240,1,s' : 'America/Santiago',
|
||||||
|
'-210,1' : 'America/St_Johns',
|
||||||
|
'-180,1' : 'America/Godthab',
|
||||||
|
'-180,0' : 'America/Argentina/Buenos_Aires',
|
||||||
|
'-180,1,s' : 'America/Montevideo',
|
||||||
|
'-120,0' : 'America/Noronha',
|
||||||
|
'-120,1' : 'America/Noronha',
|
||||||
|
'-60,1' : 'Atlantic/Azores',
|
||||||
|
'-60,0' : 'Atlantic/Cape_Verde',
|
||||||
|
'0,0' : 'Etc/UTC',
|
||||||
|
'0,1' : 'Europe/London',
|
||||||
|
'60,1' : 'Europe/Berlin',
|
||||||
|
'60,0' : 'Africa/Lagos',
|
||||||
|
'60,1,s' : 'Africa/Windhoek',
|
||||||
|
'120,1' : 'Asia/Beirut',
|
||||||
|
'120,0' : 'Africa/Johannesburg',
|
||||||
|
'180,0' : 'Asia/Baghdad',
|
||||||
|
'180,1' : 'Europe/Moscow',
|
||||||
|
'210,1' : 'Asia/Tehran',
|
||||||
|
'240,0' : 'Asia/Dubai',
|
||||||
|
'240,1' : 'Asia/Baku',
|
||||||
|
'270,0' : 'Asia/Kabul',
|
||||||
|
'300,1' : 'Asia/Yekaterinburg',
|
||||||
|
'300,0' : 'Asia/Karachi',
|
||||||
|
'330,0' : 'Asia/Kolkata',
|
||||||
|
'345,0' : 'Asia/Kathmandu',
|
||||||
|
'360,0' : 'Asia/Dhaka',
|
||||||
|
'360,1' : 'Asia/Omsk',
|
||||||
|
'390,0' : 'Asia/Rangoon',
|
||||||
|
'420,1' : 'Asia/Krasnoyarsk',
|
||||||
|
'420,0' : 'Asia/Jakarta',
|
||||||
|
'480,0' : 'Asia/Shanghai',
|
||||||
|
'480,1' : 'Asia/Irkutsk',
|
||||||
|
'525,0' : 'Australia/Eucla',
|
||||||
|
'525,1,s' : 'Australia/Eucla',
|
||||||
|
'540,1' : 'Asia/Yakutsk',
|
||||||
|
'540,0' : 'Asia/Tokyo',
|
||||||
|
'570,0' : 'Australia/Darwin',
|
||||||
|
'570,1,s' : 'Australia/Adelaide',
|
||||||
|
'600,0' : 'Australia/Brisbane',
|
||||||
|
'600,1' : 'Asia/Vladivostok',
|
||||||
|
'600,1,s' : 'Australia/Sydney',
|
||||||
|
'630,1,s' : 'Australia/Lord_Howe',
|
||||||
|
'660,1' : 'Asia/Kamchatka',
|
||||||
|
'660,0' : 'Pacific/Noumea',
|
||||||
|
'690,0' : 'Pacific/Norfolk',
|
||||||
|
'720,1,s' : 'Pacific/Auckland',
|
||||||
|
'720,0' : 'Pacific/Tarawa',
|
||||||
|
'765,1,s' : 'Pacific/Chatham',
|
||||||
|
'780,0' : 'Pacific/Tongatapu',
|
||||||
|
'780,1,s' : 'Pacific/Apia',
|
||||||
|
'840,0' : 'Pacific/Kiritimati'
|
||||||
|
};
|
||||||
|
|
||||||
|
if (typeof exports !== 'undefined') {
|
||||||
|
exports.jstz = jstz;
|
||||||
|
} else {
|
||||||
|
root.jstz = jstz;
|
||||||
|
}
|
||||||
|
})(this);
|
Loading…
Reference in New Issue