| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261 | 
							- /*
 
-  *
 
-  * Licensed to the Apache Software Foundation (ASF) under one
 
-  * or more contributor license agreements.  See the NOTICE file
 
-  * distributed with this work for additional information
 
-  * regarding copyright ownership.  The ASF licenses this file
 
-  * to you under the Apache License, Version 2.0 (the
 
-  * "License"); you may not use this file except in compliance
 
-  * with the License.  You may obtain a copy of the License at
 
-  *
 
-  *   http://www.apache.org/licenses/LICENSE-2.0
 
-  *
 
-  * Unless required by applicable law or agreed to in writing,
 
-  * software distributed under the License is distributed on an
 
-  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 
-  * KIND, either express or implied.  See the License for the
 
-  * specific language governing permissions and limitations
 
-  * under the License.
 
-  *
 
- */
 
- var GlobalizationError = require('./GlobalizationError');
 
- var l10n_loaded = new Event('l10n_loaded');
 
- var l10n_ready = new Event('l10n_ready');
 
- var is_l10n_ready = false;
 
- document.addEventListener('l10n_loaded', function() {
 
-   console.log('DEBUG: L10n loaded');
 
-   navigator.mozL10n.ready(function() {
 
-     console.log('DEBUG: L10n ready');
 
-     is_l10n_ready = true;
 
-     document.dispatchEvent(l10n_ready);
 
-   });
 
- });
 
- function callIfL10nReady(callback) {
 
-     if (is_l10n_ready) {
 
-         return callback();
 
-     }
 
-     document.addEventListener('l10n_ready', callback);
 
- }
 
- function loadFile(elementName, attributes, callback) {
 
-     var e = document.createElement(elementName);
 
-     for (var attrName in attributes) {
 
-       if(attributes.hasOwnProperty(attrName)) {
 
-         e.setAttribute(attrName, attributes[attrName]);
 
-       }
 
-     }
 
-     e.onreadystatechange = e.onload = function() {
 
-         var state = e.readyState;
 
-         if (!callback.done && (!state || /loaded|complete/.test(state))) {
 
-             callback.done = true;
 
-             callback();
 
-         }
 
-     };
 
-     document.head.appendChild(e);
 
- }
 
- function loadDependencies() {
 
-   // Adding globalization file to the HEAD section
 
-   // <link rel="resource" type="application/l10n" href="locales/date.ini" />
 
-   loadFile('link', {
 
-     'rel': 'resource', 
 
-     'type': 'application/l10n', 
 
-     'href': 'locales/date.ini'}, function() {});
 
-   loadFile('script', {
 
-     'type': 'text/javascript',
 
-     'src': 'js/l10n.js'},
 
-     function() {
 
-       loadFile('script', {
 
-         'type': 'text/javascript',
 
-         'src': 'js/l10n_date.js'},
 
-         function() {
 
-           document.dispatchEvent(l10n_loaded);
 
-         });
 
-     });
 
- }
 
- loadDependencies();
 
- function getPreferredLanguage(successCB, errorCB) {
 
-     // WARNING: this isn't perfect - there is a difference between UI language
 
-     // and preferred language, however it doesn't happen too often.
 
-     callIfL10nReady(function() {
 
-       successCB({value: navigator.mozL10n.language.code});
 
-     });
 
- }
 
- function getLocaleName(successCB, errorCB) {
 
-     callIfL10nReady(function() {
 
-       successCB(navigator.mozL10n.language.code);
 
-     });
 
- }
 
- function dateToString(successCB, errorCB, params) {
 
-     var date = new Date(params[0].date);
 
-     var options = params[0].options;
 
-     callIfL10nReady(function() {
 
-       var f = new navigator.mozL10n.DateTimeFormat();
 
-       successCB({'value': _getStringFromDate(f, date, options)});
 
-     });
 
-     function _getStringFromDate(f, date, options) {
 
-         var format = navigator.mozL10n.get('shortDateTimeFormat');
 
-         if (options) {
 
-           if (options.selector === 'date') {
 
-             return f.localeDateString(date);
 
-           }
 
-           if (options.selector === 'time') {
 
-             return f.localeTimeString(date);
 
-           }
 
-           if (options.formatLength !== 'short') {
 
-             format = navigator.mozL10n.get('dateTimeFormat');
 
-             return f.localeString(date, format);
 
-           }
 
-           if (options.selector === 'time') {
 
-             return f.localeTimeString(date, format);
 
-           }
 
-         }
 
-         var d = f.localeDateString(date);
 
-         var t = f.localeTimeString(date);
 
-         return d + ' ' + t;
 
-     }
 
- }
 
- function stringToDate(successCB, errorCB, params) {
 
-     var date;
 
-     var dateString = params[0].dateString;
 
-     var options = params[0].options;
 
-     try {
 
-       date = new Date(dateString);
 
-     } catch(e) {  
 
-       console.log("Cordova, stringToDate, An error occurred " + e.message);
 
-       return errorCB(new GlobalizationError(
 
-             GlobalizationError.PARSING_ERROR, e.message));
 
-     } 
 
-     if (!date || date === 'Invalid Date') {
 
-       console.log("Cordova, stringToDate, Invalid Date: " + dateString);
 
-       return errorCB(new GlobalizationError(
 
-             GlobalizationError.PARSING_ERROR, 'Invalid Date (' + dateString + ')'));
 
-     }
 
-     var dateObj = {
 
-       'year': date.getFullYear(),
 
-       'month': date.getMonth(),
 
-       'day': date.getDay() 
 
-     };
 
-     var timeObj = {
 
-       'hour': date.getHours(),
 
-       'minute': date.getMinutes(),
 
-       'second': date.getSeconds(),
 
-       'millisecond': date.getMilliseconds() 
 
-     };
 
-     if (options) {
 
-       if (options.selector === 'date') {
 
-         return successCB(dateObj);
 
-       }
 
-       if (options.selector === 'time') {
 
-         return successCB(timeObj);
 
-       }
 
-     }
 
-     for (var i in timeObj) {
 
-       if (timeObj.hasOwnProperty(i)) {
 
-         dateObj[i] = timeObj[i];
 
-       }
 
-     }
 
-     successCB(dateObj);
 
- }
 
- function getDatePattern(successCB, failureCB, options) {
 
-     failureCB(GlobalizationError.UNKNOWN_ERROR, 'unsupported');
 
- }
 
- function getDateNames(successCB, failureCB, params) {
 
-   callIfL10nReady(function() {
 
-     var version = 'long';
 
-     var item = 'month';
 
-     var options = params[0].options;
 
-     if (options) {
 
-       if (options.type === 'narrow') {
 
-         version = 'short';
 
-       } else if (options.type === 'genitive' && options.item === 'months') {
 
-         version = options.type;
 
-       } 
 
-       if (options.item === 'days') {
 
-         item = 'weekday';
 
-       }
 
-     }
 
-     var limit = (item === 'month') ? 11 : 6;
 
-     var arr = [];
 
-     for (var i = 0; i <= limit; i++) {
 
-         arr.push(navigator.mozL10n.get(item + '-' + i + '-' + version));
 
-     }
 
-     successCB({'value': arr});
 
-   });
 
- }
 
- Date.prototype.stdTimezoneOffset = function() {
 
-     // Return the standard timezone offset (usually 0 or -600)
 
-     var jan = new Date(this.getFullYear(), 0, 1);
 
-     var jul = new Date(this.getFullYear(), 6, 1);
 
-     return Math.max(jan.getTimezoneOffset(), jul.getTimezoneOffset());
 
- };
 
- Date.prototype.isDayLightSavingsTime = function() {
 
-     return this.getTimezoneOffset() < this.stdTimezoneOffset();
 
- };
 
- function isDayLightSavingsTime(successCB, failureCB, params) {
 
-     var date = new Date(params[0].date);
 
-     successCB({'dst': date.isDayLightSavingsTime()});
 
- }
 
- function getFirstDayOfWeek(successCB, failureCB) {
 
-   callIfL10nReady(function() {
 
-     var firstDay = navigator.mozL10n.get('weekStartsOnMonday');
 
-     // Sunday: 1
 
-     // Monday: 2
 
-     successCB({'value': 1 + parseInt(firstDay)});
 
-   });
 
- }
 
- function numberToString(number, successCB, failureCB) {
 
-     failureCB(GlobalizationError.UNKNOWN_ERROR, 'unsupported');
 
- }
 
- function stringToNumber(numberString, successCB, failureCB, options) {
 
-     failureCB(GlobalizationError.UNKNOWN_ERROR, 'unsupported');
 
- }
 
- function getNumberPattern(successCB, failureCB, options) {
 
-     failureCB(GlobalizationError.UNKNOWN_ERROR, 'unsupported');
 
- }
 
- function getCurrencyPattern(currencyCode, successCB, failureCB) {
 
-     failureCB(GlobalizationError.UNKNOWN_ERROR, 'unsupported');
 
- }
 
- var Globalization = {
 
-     getLocaleName: getLocaleName,
 
-     getPreferredLanguage: getPreferredLanguage,
 
-     dateToString: dateToString,
 
-     stringToDate: stringToDate,
 
-     getDatePattern: getDatePattern,
 
-     getDateNames: getDateNames,
 
-     isDayLightSavingsTime: isDayLightSavingsTime,
 
-     getFirstDayOfWeek: getFirstDayOfWeek,
 
-     numberToString: numberToString,
 
-     stringToNumber: stringToNumber,
 
-     getNumberPattern: getNumberPattern,
 
-     getCurrencyPattern: getCurrencyPattern
 
- };
 
- require("cordova/exec/proxy").add("Globalization", Globalization);
 
 
  |