/* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (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.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is Mozilla Skywriter. * * The Initial Developer of the Original Code is * Mozilla. * Portions created by the Initial Developer are Copyright (C) 2009 * the Initial Developer. All Rights Reserved. * * Contributor(s): * Kevin Dangoor (kdangoor@mozilla.com) * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), * in which case the provisions of the GPL or the LGPL are applicable instead * of those above. If you wish to allow use of your version of this file only * under the terms of either the GPL or the LGPL, and not to allow others to * use your version of this file under the terms of the MPL, indicate your * decision by deleting the provisions above and replace them with the notice * and other provisions required by the GPL or the LGPL. If you do not delete * the provisions above, a recipient may use your version of this file under * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ define(function(require, exports, module) { /** * Array detector. * Firefox 3.5 and Safari 4 have this already. Chrome 4 however ... * Note to Dojo - your isArray is still broken: instanceof doesn't work with * Arrays taken from a different frame/window. */ if (!Array.isArray) { Array.isArray = function(data) { return data && Object.prototype.toString.call(data) === "[object Array]"; }; } // from MDC // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/indexOf if (!Array.prototype.indexOf) { Array.prototype.indexOf = function(searchElement /*, fromIndex */) { if (this === void 0 || this === null) throw new TypeError(); var t = Object(this); var len = t.length >>> 0; if (len === 0) return -1; var n = 0; if (arguments.length > 0) { n = Number(arguments[1]); if (n !== n) n = 0; else if (n !== 0 && n !== (1 / 0) && n !== -(1 / 0)) n = (n > 0 || -1) * Math.floor(Math.abs(n)); } if (n >= len) return -1; var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0); for (; k < len; k++) { if (k in t && t[k] === searchElement) return k; } return -1; }; } /** * Retrieves the list of keys on an object. */ if (!Object.keys) { Object.keys = function(obj) { var k, ret = []; for (k in obj) { if (obj.hasOwnProperty(k)) { ret.push(k); } } return ret; }; } if (!Function.prototype.bind) { // from MDC // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/bind Function.prototype.bind = function () { var slice = [].slice; var args = slice.call(arguments, 1); var self = this; var nop = function () {}; // optimize common case if (arguments.length == 1) { var bound = return function() { return fcn.apply(this instanceof nop ? this : obj, arguments); }; } else { var bound = function () { return self.apply( this instanceof nop ? this : ( obj || {} ), args.concat( slice.call(arguments) ) ); }; } nop.prototype = self.prototype; bound.prototype = new nop(); // From Narwhal bound.name = this.name; bound.displayName = this.displayName; bound.length = this.length; bound.unbound = self; return bound; }; } exports.globalsLoaded = true; });