aboutsummaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorMorris Jobke <hey@morrisjobke.de>2014-12-01 10:35:58 +0100
committerMorris Jobke <hey@morrisjobke.de>2014-12-01 10:40:31 +0100
commit48f00df08e51fa4379bfeedc08d51657503cca8e (patch)
treedd1b7b94df2598a8ee59a95524bef0d099aeebac /core
parentfefeb506b2d56f0c5a7723bb1be5c07be1c71b4f (diff)
downloadnextcloud-server-48f00df08e51fa4379bfeedc08d51657503cca8e.tar.gz
nextcloud-server-48f00df08e51fa4379bfeedc08d51657503cca8e.zip
move jstz to bower management
Diffstat (limited to 'core')
-rw-r--r--core/js/jstz.js358
-rw-r--r--core/templates/login.php2
-rw-r--r--core/vendor/.gitignore4
-rw-r--r--core/vendor/jsTimezoneDetect/.bower.json23
-rw-r--r--core/vendor/jsTimezoneDetect/LICENCE.txt22
-rw-r--r--core/vendor/jsTimezoneDetect/jstz.js358
6 files changed, 408 insertions, 359 deletions
diff --git a/core/js/jstz.js b/core/js/jstz.js
deleted file mode 100644
index 0f9abe8b78d..00000000000
--- a/core/js/jstz.js
+++ /dev/null
@@ -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);
diff --git a/core/templates/login.php b/core/templates/login.php
index 425c3db75c8..86a1b605df5 100644
--- a/core/templates/login.php
+++ b/core/templates/login.php
@@ -1,5 +1,5 @@
<?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]-->
<form method="post" name="login">
diff --git a/core/vendor/.gitignore b/core/vendor/.gitignore
index 7bb4d3b4eab..36748f845a6 100644
--- a/core/vendor/.gitignore
+++ b/core/vendor/.gitignore
@@ -7,6 +7,7 @@ bower.json
CHANGELOG*
Gemfile
gruntfile.js
+Gruntfile.js
Makefile
package.json
README*
@@ -44,6 +45,9 @@ jcrop/css/jquery.Jcrop.min.css
jcrop/js/**
!jcrop/js/jquery.Jcrop.js
+# jsTimezoneDetect
+jsTimezoneDetect/jstz.min.js
+
# handlebars
handlebars/**
!handlebars/.bower.json
diff --git a/core/vendor/jsTimezoneDetect/.bower.json b/core/vendor/jsTimezoneDetect/.bower.json
new file mode 100644
index 00000000000..2a3668ff309
--- /dev/null
+++ b/core/vendor/jsTimezoneDetect/.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"
+} \ No newline at end of file
diff --git a/core/vendor/jsTimezoneDetect/LICENCE.txt b/core/vendor/jsTimezoneDetect/LICENCE.txt
new file mode 100644
index 00000000000..c48af16c647
--- /dev/null
+++ b/core/vendor/jsTimezoneDetect/LICENCE.txt
@@ -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. \ No newline at end of file
diff --git a/core/vendor/jsTimezoneDetect/jstz.js b/core/vendor/jsTimezoneDetect/jstz.js
new file mode 100644
index 00000000000..6f38183f856
--- /dev/null
+++ b/core/vendor/jsTimezoneDetect/jstz.js
@@ -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);