1
0
mirror of https://git.tt-rss.org/git/tt-rss.git synced 2025-12-13 07:05:56 +00:00

upgrade dojo to 1.8.3 (refs #570)

This commit is contained in:
Andrew Dolgov
2013-03-18 10:26:24 +04:00
parent 9a2885da17
commit f0cfe83e37
1568 changed files with 159866 additions and 2781 deletions

View File

@@ -1,5 +1,5 @@
/*
Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
Copyright (c) 2004-2012, The Dojo Foundation All Rights Reserved.
Available via Academic Free License >= 2.1 OR the modified BSD license.
see: http://dojotoolkit.org/license for details
*/

View File

@@ -0,0 +1,106 @@
define("dojo/AdapterRegistry", ["./_base/kernel", "./_base/lang"], function(dojo, lang){
// module:
// dojo/AdapterRegistry
var AdapterRegistry = dojo.AdapterRegistry = function(/*Boolean?*/ returnWrappers){
// summary:
// A registry to make contextual calling/searching easier.
// description:
// Objects of this class keep list of arrays in the form [name, check,
// wrap, directReturn] that are used to determine what the contextual
// result of a set of checked arguments is. All check/wrap functions
// in this registry should be of the same arity.
// example:
// | // create a new registry
// | var reg = new dojo.AdapterRegistry();
// | reg.register("handleString",
// | dojo.isString,
// | function(str){
// | // do something with the string here
// | }
// | );
// | reg.register("handleArr",
// | dojo.isArray,
// | function(arr){
// | // do something with the array here
// | }
// | );
// |
// | // now we can pass reg.match() *either* an array or a string and
// | // the value we pass will get handled by the right function
// | reg.match("someValue"); // will call the first function
// | reg.match(["someValue"]); // will call the second
this.pairs = [];
this.returnWrappers = returnWrappers || false; // Boolean
};
lang.extend(AdapterRegistry, {
register: function(/*String*/ name, /*Function*/ check, /*Function*/ wrap, /*Boolean?*/ directReturn, /*Boolean?*/ override){
// summary:
// register a check function to determine if the wrap function or
// object gets selected
// name:
// a way to identify this matcher.
// check:
// a function that arguments are passed to from the adapter's
// match() function. The check function should return true if the
// given arguments are appropriate for the wrap function.
// directReturn:
// If directReturn is true, the value passed in for wrap will be
// returned instead of being called. Alternately, the
// AdapterRegistry can be set globally to "return not call" using
// the returnWrappers property. Either way, this behavior allows
// the registry to act as a "search" function instead of a
// function interception library.
// override:
// If override is given and true, the check function will be given
// highest priority. Otherwise, it will be the lowest priority
// adapter.
this.pairs[((override) ? "unshift" : "push")]([name, check, wrap, directReturn]);
},
match: function(/* ... */){
// summary:
// Find an adapter for the given arguments. If no suitable adapter
// is found, throws an exception. match() accepts any number of
// arguments, all of which are passed to all matching functions
// from the registered pairs.
for(var i = 0; i < this.pairs.length; i++){
var pair = this.pairs[i];
if(pair[1].apply(this, arguments)){
if((pair[3])||(this.returnWrappers)){
return pair[2];
}else{
return pair[2].apply(this, arguments);
}
}
}
throw new Error("No match found");
},
unregister: function(name){
// summary:
// Remove a named adapter from the registry
// name: String
// The name of the adapter.
// returns: Boolean
// Returns true if operation is successful.
// Returns false if operation fails.
// FIXME: this is kind of a dumb way to handle this. On a large
// registry this will be slow-ish and we can use the name as a lookup
// should we choose to trade memory for speed.
for(var i = 0; i < this.pairs.length; i++){
var pair = this.pairs[i];
if(pair[0] == name){
this.pairs.splice(i, 1);
return true;
}
}
return false;
}
});
return AdapterRegistry;
});

8
lib/dojo/Deferred.js Normal file
View File

@@ -0,0 +1,8 @@
/*
Copyright (c) 2004-2012, The Dojo Foundation All Rights Reserved.
Available via Academic Free License >= 2.1 OR the modified BSD license.
see: http://dojotoolkit.org/license for details
*/
//>>built
define("dojo/Deferred",["./has","./_base/lang","./errors/CancelError","./promise/Promise","./promise/instrumentation"],function(_1,_2,_3,_4,_5){"use strict";var _6=0,_7=1,_8=2;var _9="This deferred has already been fulfilled.";var _a=Object.freeze||function(){};var _b=function(_c,_d,_e,_f,_10){if(1){if(_d===_8&&_11.instrumentRejected&&_c.length===0){_11.instrumentRejected(_e,false,_f,_10);}}for(var i=0;i<_c.length;i++){_12(_c[i],_d,_e,_f);}};var _12=function(_13,_14,_15,_16){var _17=_13[_14];var _18=_13.deferred;if(_17){try{var _19=_17(_15);if(_14===_6){if(typeof _19!=="undefined"){_1a(_18,_14,_19);}}else{if(_19&&typeof _19.then==="function"){_13.cancel=_19.cancel;_19.then(_1b(_18,_7),_1b(_18,_8),_1b(_18,_6));return;}_1a(_18,_7,_19);}}catch(error){_1a(_18,_8,error);}}else{_1a(_18,_14,_15);}if(1){if(_14===_8&&_11.instrumentRejected){_11.instrumentRejected(_15,!!_17,_16,_18.promise);}}};var _1b=function(_1c,_1d){return function(_1e){_1a(_1c,_1d,_1e);};};var _1a=function(_1f,_20,_21){if(!_1f.isCanceled()){switch(_20){case _6:_1f.progress(_21);break;case _7:_1f.resolve(_21);break;case _8:_1f.reject(_21);break;}}};var _11=function(_22){var _23=this.promise=new _4();var _24=this;var _25,_26,_27;var _28=false;var _29=[];if(1&&Error.captureStackTrace){Error.captureStackTrace(_24,_11);Error.captureStackTrace(_23,_11);}this.isResolved=_23.isResolved=function(){return _25===_7;};this.isRejected=_23.isRejected=function(){return _25===_8;};this.isFulfilled=_23.isFulfilled=function(){return !!_25;};this.isCanceled=_23.isCanceled=function(){return _28;};this.progress=function(_2a,_2b){if(!_25){_b(_29,_6,_2a,null,_24);return _23;}else{if(_2b===true){throw new Error(_9);}else{return _23;}}};this.resolve=function(_2c,_2d){if(!_25){_b(_29,_25=_7,_26=_2c,null,_24);_29=null;return _23;}else{if(_2d===true){throw new Error(_9);}else{return _23;}}};var _2e=this.reject=function(_2f,_30){if(!_25){if(1&&Error.captureStackTrace){Error.captureStackTrace(_27={},_2e);}_b(_29,_25=_8,_26=_2f,_27,_24);_29=null;return _23;}else{if(_30===true){throw new Error(_9);}else{return _23;}}};this.then=_23.then=function(_31,_32,_33){var _34=[_33,_31,_32];_34.cancel=_23.cancel;_34.deferred=new _11(function(_35){return _34.cancel&&_34.cancel(_35);});if(_25&&!_29){_12(_34,_25,_26,_27);}else{_29.push(_34);}return _34.deferred.promise;};this.cancel=_23.cancel=function(_36,_37){if(!_25){if(_22){var _38=_22(_36);_36=typeof _38==="undefined"?_36:_38;}_28=true;if(!_25){if(typeof _36==="undefined"){_36=new _3();}_2e(_36);return _36;}else{if(_25===_8&&_26===_36){return _36;}}}else{if(_37===true){throw new Error(_9);}}};_a(_23);};_11.prototype.toString=function(){return "[object Deferred]";};if(_5){_5(_11);}return _11;});

View File

@@ -0,0 +1,320 @@
define("dojo/Deferred", [
"./has",
"./_base/lang",
"./errors/CancelError",
"./promise/Promise",
"./promise/instrumentation"
], function(has, lang, CancelError, Promise, instrumentation){
"use strict";
// module:
// dojo/Deferred
var PROGRESS = 0,
RESOLVED = 1,
REJECTED = 2;
var FULFILLED_ERROR_MESSAGE = "This deferred has already been fulfilled.";
var freezeObject = Object.freeze || function(){};
var signalWaiting = function(waiting, type, result, rejection, deferred){
if( 1 ){
if(type === REJECTED && Deferred.instrumentRejected && waiting.length === 0){
Deferred.instrumentRejected(result, false, rejection, deferred);
}
}
for(var i = 0; i < waiting.length; i++){
signalListener(waiting[i], type, result, rejection);
}
};
var signalListener = function(listener, type, result, rejection){
var func = listener[type];
var deferred = listener.deferred;
if(func){
try{
var newResult = func(result);
if(type === PROGRESS){
if(typeof newResult !== "undefined"){
signalDeferred(deferred, type, newResult);
}
}else{
if(newResult && typeof newResult.then === "function"){
listener.cancel = newResult.cancel;
newResult.then(
// Only make resolvers if they're actually going to be used
makeDeferredSignaler(deferred, RESOLVED),
makeDeferredSignaler(deferred, REJECTED),
makeDeferredSignaler(deferred, PROGRESS));
return;
}
signalDeferred(deferred, RESOLVED, newResult);
}
}catch(error){
signalDeferred(deferred, REJECTED, error);
}
}else{
signalDeferred(deferred, type, result);
}
if( 1 ){
if(type === REJECTED && Deferred.instrumentRejected){
Deferred.instrumentRejected(result, !!func, rejection, deferred.promise);
}
}
};
var makeDeferredSignaler = function(deferred, type){
return function(value){
signalDeferred(deferred, type, value);
};
};
var signalDeferred = function(deferred, type, result){
if(!deferred.isCanceled()){
switch(type){
case PROGRESS:
deferred.progress(result);
break;
case RESOLVED:
deferred.resolve(result);
break;
case REJECTED:
deferred.reject(result);
break;
}
}
};
var Deferred = function(canceler){
// summary:
// Creates a new deferred. This API is preferred over
// `dojo/_base/Deferred`.
// description:
// Creates a new deferred, as an abstraction over (primarily)
// asynchronous operations. The deferred is the private interface
// that should not be returned to calling code. That's what the
// `promise` is for. See `dojo/promise/Promise`.
// canceler: Function?
// Will be invoked if the deferred is canceled. The canceler
// receives the reason the deferred was canceled as its argument.
// The deferred is rejected with its return value, or a new
// `dojo/errors/CancelError` instance.
// promise: dojo/promise/Promise
// The public promise object that clients can add callbacks to.
var promise = this.promise = new Promise();
var deferred = this;
var fulfilled, result, rejection;
var canceled = false;
var waiting = [];
if( 1 && Error.captureStackTrace){
Error.captureStackTrace(deferred, Deferred);
Error.captureStackTrace(promise, Deferred);
}
this.isResolved = promise.isResolved = function(){
// summary:
// Checks whether the deferred has been resolved.
// returns: Boolean
return fulfilled === RESOLVED;
};
this.isRejected = promise.isRejected = function(){
// summary:
// Checks whether the deferred has been rejected.
// returns: Boolean
return fulfilled === REJECTED;
};
this.isFulfilled = promise.isFulfilled = function(){
// summary:
// Checks whether the deferred has been resolved or rejected.
// returns: Boolean
return !!fulfilled;
};
this.isCanceled = promise.isCanceled = function(){
// summary:
// Checks whether the deferred has been canceled.
// returns: Boolean
return canceled;
};
this.progress = function(update, strict){
// summary:
// Emit a progress update on the deferred.
// description:
// Emit a progress update on the deferred. Progress updates
// can be used to communicate updates about the asynchronous
// operation before it has finished.
// update: any
// The progress update. Passed to progbacks.
// strict: Boolean?
// If strict, will throw an error if the deferred has already
// been fulfilled and consequently no progress can be emitted.
// returns: dojo/promise/Promise
// Returns the original promise for the deferred.
if(!fulfilled){
signalWaiting(waiting, PROGRESS, update, null, deferred);
return promise;
}else if(strict === true){
throw new Error(FULFILLED_ERROR_MESSAGE);
}else{
return promise;
}
};
this.resolve = function(value, strict){
// summary:
// Resolve the deferred.
// description:
// Resolve the deferred, putting it in a success state.
// value: any
// The result of the deferred. Passed to callbacks.
// strict: Boolean?
// If strict, will throw an error if the deferred has already
// been fulfilled and consequently cannot be resolved.
// returns: dojo/promise/Promise
// Returns the original promise for the deferred.
if(!fulfilled){
// Set fulfilled, store value. After signaling waiting listeners unset
// waiting.
signalWaiting(waiting, fulfilled = RESOLVED, result = value, null, deferred);
waiting = null;
return promise;
}else if(strict === true){
throw new Error(FULFILLED_ERROR_MESSAGE);
}else{
return promise;
}
};
var reject = this.reject = function(error, strict){
// summary:
// Reject the deferred.
// description:
// Reject the deferred, putting it in an error state.
// error: any
// The error result of the deferred. Passed to errbacks.
// strict: Boolean?
// If strict, will throw an error if the deferred has already
// been fulfilled and consequently cannot be rejected.
// returns: dojo/promise/Promise
// Returns the original promise for the deferred.
if(!fulfilled){
if( 1 && Error.captureStackTrace){
Error.captureStackTrace(rejection = {}, reject);
}
signalWaiting(waiting, fulfilled = REJECTED, result = error, rejection, deferred);
waiting = null;
return promise;
}else if(strict === true){
throw new Error(FULFILLED_ERROR_MESSAGE);
}else{
return promise;
}
};
this.then = promise.then = function(callback, errback, progback){
// summary:
// Add new callbacks to the deferred.
// description:
// Add new callbacks to the deferred. Callbacks can be added
// before or after the deferred is fulfilled.
// callback: Function?
// Callback to be invoked when the promise is resolved.
// Receives the resolution value.
// errback: Function?
// Callback to be invoked when the promise is rejected.
// Receives the rejection error.
// progback: Function?
// Callback to be invoked when the promise emits a progress
// update. Receives the progress update.
// returns: dojo/promise/Promise
// Returns a new promise for the result of the callback(s).
// This can be used for chaining many asynchronous operations.
var listener = [progback, callback, errback];
// Ensure we cancel the promise we're waiting for, or if callback/errback
// have returned a promise, cancel that one.
listener.cancel = promise.cancel;
listener.deferred = new Deferred(function(reason){
// Check whether cancel is really available, returned promises are not
// required to expose `cancel`
return listener.cancel && listener.cancel(reason);
});
if(fulfilled && !waiting){
signalListener(listener, fulfilled, result, rejection);
}else{
waiting.push(listener);
}
return listener.deferred.promise;
};
this.cancel = promise.cancel = function(reason, strict){
// summary:
// Inform the deferred it may cancel its asynchronous operation.
// description:
// Inform the deferred it may cancel its asynchronous operation.
// The deferred's (optional) canceler is invoked and the
// deferred will be left in a rejected state. Can affect other
// promises that originate with the same deferred.
// reason: any
// A message that may be sent to the deferred's canceler,
// explaining why it's being canceled.
// strict: Boolean?
// If strict, will throw an error if the deferred has already
// been fulfilled and consequently cannot be canceled.
// returns: any
// Returns the rejection reason if the deferred was canceled
// normally.
if(!fulfilled){
// Cancel can be called even after the deferred is fulfilled
if(canceler){
var returnedReason = canceler(reason);
reason = typeof returnedReason === "undefined" ? reason : returnedReason;
}
canceled = true;
if(!fulfilled){
// Allow canceler to provide its own reason, but fall back to a CancelError
if(typeof reason === "undefined"){
reason = new CancelError();
}
reject(reason);
return reason;
}else if(fulfilled === REJECTED && result === reason){
return reason;
}
}else if(strict === true){
throw new Error(FULFILLED_ERROR_MESSAGE);
}
};
freezeObject(promise);
};
Deferred.prototype.toString = function(){
// returns: String
// Returns `[object Deferred]`.
return "[object Deferred]";
};
if(instrumentation){
instrumentation(Deferred);
}
return Deferred;
});

View File

@@ -1,5 +1,5 @@
/*
Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
Copyright (c) 2004-2012, The Dojo Foundation All Rights Reserved.
Available via Academic Free License >= 2.1 OR the modified BSD license.
see: http://dojotoolkit.org/license for details
*/

View File

@@ -0,0 +1,84 @@
define("dojo/DeferredList", ["./_base/kernel", "./_base/Deferred", "./_base/array"], function(dojo, Deferred, darray){
// module:
// dojo/DeferredList
dojo.DeferredList = function(/*Array*/ list, /*Boolean?*/ fireOnOneCallback, /*Boolean?*/ fireOnOneErrback, /*Boolean?*/ consumeErrors, /*Function?*/ canceller){
// summary:
// Deprecated, use dojo/promise/all instead.
// Provides event handling for a group of Deferred objects.
// description:
// DeferredList takes an array of existing deferreds and returns a new deferred of its own
// this new deferred will typically have its callback fired when all of the deferreds in
// the given list have fired their own deferreds. The parameters `fireOnOneCallback` and
// fireOnOneErrback, will fire before all the deferreds as appropriate
// list:
// The list of deferreds to be synchronizied with this DeferredList
// fireOnOneCallback:
// Will cause the DeferredLists callback to be fired as soon as any
// of the deferreds in its list have been fired instead of waiting until
// the entire list has finished
// fireonOneErrback:
// Will cause the errback to fire upon any of the deferreds errback
// canceller:
// A deferred canceller function, see dojo.Deferred
var resultList = [];
Deferred.call(this);
var self = this;
if(list.length === 0 && !fireOnOneCallback){
this.resolve([0, []]);
}
var finished = 0;
darray.forEach(list, function(item, i){
item.then(function(result){
if(fireOnOneCallback){
self.resolve([i, result]);
}else{
addResult(true, result);
}
},function(error){
if(fireOnOneErrback){
self.reject(error);
}else{
addResult(false, error);
}
if(consumeErrors){
return null;
}
throw error;
});
function addResult(succeeded, result){
resultList[i] = [succeeded, result];
finished++;
if(finished === list.length){
self.resolve(resultList);
}
}
});
};
dojo.DeferredList.prototype = new Deferred();
dojo.DeferredList.prototype.gatherResults = function(deferredList){
// summary:
// Gathers the results of the deferreds for packaging
// as the parameters to the Deferred Lists' callback
// deferredList: dojo/DeferredList
// The deferred list from which this function gathers results.
// returns: dojo/DeferredList
// The newly created deferred list which packs results as
// parameters to its callback.
var d = new dojo.DeferredList(deferredList, false, true, false);
d.addCallback(function(results){
var ret = [];
darray.forEach(results, function(result){
ret.push(result[1]);
});
return ret;
});
return d;
};
return dojo.DeferredList;
});

View File

@@ -1,5 +1,5 @@
/*
Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
Copyright (c) 2004-2012, The Dojo Foundation All Rights Reserved.
Available via Academic Free License >= 2.1 OR the modified BSD license.
see: http://dojotoolkit.org/license for details
*/

View File

@@ -0,0 +1,35 @@
define("dojo/Evented", ["./aspect", "./on"], function(aspect, on){
// module:
// dojo/Evented
"use strict";
var after = aspect.after;
function Evented(){
// summary:
// A class that can be used as a mixin or base class,
// to add on() and emit() methods to a class
// for listening for events and emitting events:
//
// | define(["dojo/Evented"], function(Evented){
// | var EventedWidget = dojo.declare([Evented, dijit._Widget], {...});
// | widget = new EventedWidget();
// | widget.on("open", function(event){
// | ... do something with event
// | });
// |
// | widget.emit("open", {name:"some event", ...});
}
Evented.prototype = {
on: function(type, listener){
return on.parse(this, type, listener, function(target, type){
return after(target, 'on' + type, listener, true);
});
},
emit: function(type, event){
var args = [this];
args.push.apply(args, arguments);
return on.emit.apply(on, args);
}
};
return Evented;
});

View File

@@ -13,7 +13,7 @@ The text of the AFL and BSD licenses is reproduced below.
The "New" BSD License:
**********************
Copyright (c) 2005-2011, The Dojo Foundation
Copyright (c) 2005-2012, The Dojo Foundation
All rights reserved.
Redistribution and use in source and binary forms, with or without

View File

@@ -1,5 +1,5 @@
/*
Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
Copyright (c) 2004-2012, The Dojo Foundation All Rights Reserved.
Available via Academic Free License >= 2.1 OR the modified BSD license.
see: http://dojotoolkit.org/license for details
*/

View File

@@ -0,0 +1,192 @@
define("dojo/NodeList-data", [
"./_base/kernel", "./query", "./_base/lang", "./_base/array", "./dom-attr"
], function(dojo, query, lang, array, attr){
// module:
// dojo/NodeList-data
/*=====
return function(){
// summary:
// Adds data() and removeData() methods to NodeList, and returns NodeList constructor.
};
=====*/
var NodeList = query.NodeList;
var dataCache = {}, x = 0, dataattr = "data-dojo-dataid",
dopid = function(node){
// summary:
// Return a uniqueish ID for the passed node reference
var pid = attr.get(node, dataattr);
if(!pid){
pid = "pid" + (x++);
attr.set(node, dataattr, pid);
}
return pid;
}
;
var dodata = dojo._nodeData = function(node, key, value){
// summary:
// Private helper for dojo/NodeList.data for single node data access. Refer to NodeList.data
// documentation for more information.
//
// node: String|DomNode
// The node to associate data with
//
// key: Object|String?
// If an object, act as a setter and iterate over said object setting data items as defined.
// If a string, and `value` present, set the data for defined `key` to `value`
// If a string, and `value` absent, act as a getter, returning the data associated with said `key`
//
// value: Anything?
// The value to set for said `key`, provided `key` is a string (and not an object)
//
var pid = dopid(node), r;
if(!dataCache[pid]){ dataCache[pid] = {}; }
// API discrepency: calling with only a node returns the whole object. $.data throws
if(arguments.length == 1){ r = dataCache[pid]; }
if(typeof key == "string"){
// either getter or setter, based on `value` presence
if(arguments.length > 2){
dataCache[pid][key] = value;
}else{
r = dataCache[pid][key];
}
}else{
// must be a setter, mix `value` into data hash
// API discrepency: using object as setter works here
r = lang.mixin(dataCache[pid], key);
}
return r; // Object|Anything|Nothing
};
var removeData = dojo._removeNodeData = function(node, key){
// summary:
// Remove some data from this node
// node: String|DomNode
// The node reference to remove data from
// key: String?
// If omitted, remove all data in this dataset.
// If passed, remove only the passed `key` in the associated dataset
var pid = dopid(node);
if(dataCache[pid]){
if(key){
delete dataCache[pid][key];
}else{
delete dataCache[pid];
}
}
};
dojo._gcNodeData = function(){
// summary:
// super expensive: GC all data in the data for nodes that no longer exist in the dom.
// description:
// super expensive: GC all data in the data for nodes that no longer exist in the dom.
// MUCH safer to do this yourself, manually, on a per-node basis (via `NodeList.removeData()`)
// provided as a stop-gap for exceptionally large/complex applications with constantly changing
// content regions (eg: a dijit/layout/ContentPane with replacing data)
// There is NO automatic GC going on. If you dojo.destroy() a node, you should _removeNodeData
// prior to destruction.
var livePids = query("[" + dataattr + "]").map(dopid);
for(var i in dataCache){
if(array.indexOf(livePids, i) < 0){ delete dataCache[i]; }
}
};
// make nodeData and removeNodeData public on dojo/NodeList:
lang.extend(NodeList, {
data: NodeList._adaptWithCondition(dodata, function(a){
return a.length === 0 || a.length == 1 && (typeof a[0] == "string");
}),
removeData: NodeList._adaptAsForEach(removeData)
});
/*=====
lang.extend(NodeList, {
data: function(key, value){
// summary:
// stash or get some arbitrary data on/from these nodes.
//
// description:
// Stash or get some arbitrary data on/from these nodes. This private _data function is
// exposed publicly on `dojo/NodeList`, eg: as the result of a `dojo.query` call.
// DIFFERS from jQuery.data in that when used as a getter, the entire list is ALWAYS
// returned. EVEN WHEN THE LIST IS length == 1.
//
// A single-node version of this function is provided as `dojo._nodeData`, which follows
// the same signature, though expects a String ID or DomNode reference in the first
// position, before key/value arguments.
//
// node: String|DomNode
// The node to associate data with
//
// key: Object|String?
// If an object, act as a setter and iterate over said object setting data items as defined.
// If a string, and `value` present, set the data for defined `key` to `value`
// If a string, and `value` absent, act as a getter, returning the data associated with said `key`
//
// value: Anything?
// The value to set for said `key`, provided `key` is a string (and not an object)
//
// example:
// Set a key `bar` to some data, then retrieve it.
// | dojo.query(".foo").data("bar", "touched");
// | var touched = dojo.query(".foo").data("bar");
// | if(touched[0] == "touched"){ alert('win'); }
//
// example:
// Get all the data items for a given node.
// | var list = dojo.query(".foo").data();
// | var first = list[0];
//
// example:
// Set the data to a complex hash. Overwrites existing keys with new value
// | dojo.query(".foo").data({ bar:"baz", foo:"bar" });
// Then get some random key:
// | dojo.query(".foo").data("foo"); // returns [`bar`]
//
// returns: Object|Anything|Nothing
// When used as a setter via `dojo/NodeList`, a NodeList instance is returned
// for further chaining. When used as a getter via `dojo/NodeList` an ARRAY
// of items is returned. The items in the array correspond to the elements
// in the original list. This is true even when the list length is 1, eg:
// when looking up a node by ID (#foo)
},
removeData: function(key){
// summary:
// Remove the data associated with these nodes.
// key: String?
// If omitted, clean all data for this node.
// If passed, remove the data item found at `key`
}
});
=====*/
// TODO: this is the basic implementation of adaptWithCondtionAndWhenMappedConsiderLength, for lack of a better API name
// it conflicts with the the `dojo/NodeList` way: always always return an arrayLike thinger. Consider for 2.0:
//
// NodeList.prototype.data = function(key, value){
// var a = arguments, r;
// if(a.length === 0 || a.length == 1 && (typeof a[0] == "string")){
// r = this.map(function(node){
// return d._data(node, key);
// });
// if(r.length == 1){ r = r[0]; } // the offending line, and the diff on adaptWithCondition
// }else{
// r = this.forEach(function(node){
// d._data(node, key, value);
// });
// }
// return r; // NodeList|Array|SingleItem
// };
return NodeList;
});

View File

@@ -1,8 +1,8 @@
/*
Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
Copyright (c) 2004-2012, The Dojo Foundation All Rights Reserved.
Available via Academic Free License >= 2.1 OR the modified BSD license.
see: http://dojotoolkit.org/license for details
*/
//>>built
define("dojo/NodeList-dom",["./_base/kernel","./query","./_base/array","./_base/lang","./dom-class","./dom-construct","./dom-geometry","./dom-attr","./dom-style"],function(_1,_2,_3,_4,_5,_6,_7,_8,_9){var _a=function(a){return a.length==1&&(typeof a[0]=="string");};var _b=function(_c){var p=_c.parentNode;if(p){p.removeChild(_c);}};var _d=_2.NodeList,_e=_d._adaptWithCondition,_f=_d._adaptAsForEach,aam=_d._adaptAsMap;function _10(_11){return function(_12,_13,_14){if(arguments.length==2){return _11[typeof _13=="string"?"get":"set"](_12,_13);}return _11.set(_12,_13,_14);};};_4.extend(_d,{_normalize:function(_15,_16){var _17=_15.parse===true;if(typeof _15.template=="string"){var _18=_15.templateFunc||(_1.string&&_1.string.substitute);_15=_18?_18(_15.template,_15):_15;}var _19=(typeof _15);if(_19=="string"||_19=="number"){_15=_6.toDom(_15,(_16&&_16.ownerDocument));if(_15.nodeType==11){_15=_4._toArray(_15.childNodes);}else{_15=[_15];}}else{if(!_4.isArrayLike(_15)){_15=[_15];}else{if(!_4.isArray(_15)){_15=_4._toArray(_15);}}}if(_17){_15._runParse=true;}return _15;},_cloneNode:function(_1a){return _1a.cloneNode(true);},_place:function(ary,_1b,_1c,_1d){if(_1b.nodeType!=1&&_1c=="only"){return;}var _1e=_1b,_1f;var _20=ary.length;for(var i=_20-1;i>=0;i--){var _21=(_1d?this._cloneNode(ary[i]):ary[i]);if(ary._runParse&&_1.parser&&_1.parser.parse){if(!_1f){_1f=_1e.ownerDocument.createElement("div");}_1f.appendChild(_21);_1.parser.parse(_1f);_21=_1f.firstChild;while(_1f.firstChild){_1f.removeChild(_1f.firstChild);}}if(i==_20-1){_6.place(_21,_1e,_1c);}else{_1e.parentNode.insertBefore(_21,_1e);}_1e=_21;}},attr:_e(_10(_8),_a),style:_e(_10(_9),_a),addClass:_f(_5.add),removeClass:_f(_5.remove),replaceClass:_f(_5.replace),toggleClass:_f(_5.toggle),empty:_f(_6.empty),removeAttr:_f(_8.remove),position:aam(_7.position),marginBox:aam(_7.getMarginBox),place:function(_22,_23){var _24=_2(_22)[0];return this.forEach(function(_25){_6.place(_25,_24,_23);});},orphan:function(_26){return (_26?_2._filterResult(this,_26):this).forEach(_b);},adopt:function(_27,_28){return _2(_27).place(this[0],_28)._stash(this);},query:function(_29){if(!_29){return this;}var ret=new _d;this.map(function(_2a){_2(_29,_2a).forEach(function(_2b){if(_2b!==undefined){ret.push(_2b);}});});return ret._stash(this);},filter:function(_2c){var a=arguments,_2d=this,_2e=0;if(typeof _2c=="string"){_2d=_2._filterResult(this,a[0]);if(a.length==1){return _2d._stash(this);}_2e=1;}return this._wrap(_3.filter(_2d,a[_2e],a[_2e+1]),this);},addContent:function(_2f,_30){_2f=this._normalize(_2f,this[0]);for(var i=0,_31;(_31=this[i]);i++){this._place(_2f,_31,_30,i>0);}return this;}});return _d;});
define("dojo/NodeList-dom",["./_base/kernel","./query","./_base/array","./_base/lang","./dom-class","./dom-construct","./dom-geometry","./dom-attr","./dom-style"],function(_1,_2,_3,_4,_5,_6,_7,_8,_9){var _a=function(a){return a.length==1&&(typeof a[0]=="string");};var _b=function(_c){var p=_c.parentNode;if(p){p.removeChild(_c);}};var _d=_2.NodeList,_e=_d._adaptWithCondition,_f=_d._adaptAsForEach,aam=_d._adaptAsMap;function _10(_11){return function(_12,_13,_14){if(arguments.length==2){return _11[typeof _13=="string"?"get":"set"](_12,_13);}return _11.set(_12,_13,_14);};};_4.extend(_d,{_normalize:function(_15,_16){var _17=_15.parse===true;if(typeof _15.template=="string"){var _18=_15.templateFunc||(_1.string&&_1.string.substitute);_15=_18?_18(_15.template,_15):_15;}var _19=(typeof _15);if(_19=="string"||_19=="number"){_15=_6.toDom(_15,(_16&&_16.ownerDocument));if(_15.nodeType==11){_15=_4._toArray(_15.childNodes);}else{_15=[_15];}}else{if(!_4.isArrayLike(_15)){_15=[_15];}else{if(!_4.isArray(_15)){_15=_4._toArray(_15);}}}if(_17){_15._runParse=true;}return _15;},_cloneNode:function(_1a){return _1a.cloneNode(true);},_place:function(ary,_1b,_1c,_1d){if(_1b.nodeType!=1&&_1c=="only"){return;}var _1e=_1b,_1f;var _20=ary.length;for(var i=_20-1;i>=0;i--){var _21=(_1d?this._cloneNode(ary[i]):ary[i]);if(ary._runParse&&_1.parser&&_1.parser.parse){if(!_1f){_1f=_1e.ownerDocument.createElement("div");}_1f.appendChild(_21);_1.parser.parse(_1f);_21=_1f.firstChild;while(_1f.firstChild){_1f.removeChild(_1f.firstChild);}}if(i==_20-1){_6.place(_21,_1e,_1c);}else{_1e.parentNode.insertBefore(_21,_1e);}_1e=_21;}},position:aam(_7.position),attr:_e(_10(_8),_a),style:_e(_10(_9),_a),addClass:_f(_5.add),removeClass:_f(_5.remove),toggleClass:_f(_5.toggle),replaceClass:_f(_5.replace),empty:_f(_6.empty),removeAttr:_f(_8.remove),marginBox:aam(_7.getMarginBox),place:function(_22,_23){var _24=_2(_22)[0];return this.forEach(function(_25){_6.place(_25,_24,_23);});},orphan:function(_26){return (_26?_2._filterResult(this,_26):this).forEach(_b);},adopt:function(_27,_28){return _2(_27).place(this[0],_28)._stash(this);},query:function(_29){if(!_29){return this;}var ret=new _d;this.map(function(_2a){_2(_29,_2a).forEach(function(_2b){if(_2b!==undefined){ret.push(_2b);}});});return ret._stash(this);},filter:function(_2c){var a=arguments,_2d=this,_2e=0;if(typeof _2c=="string"){_2d=_2._filterResult(this,a[0]);if(a.length==1){return _2d._stash(this);}_2e=1;}return this._wrap(_3.filter(_2d,a[_2e],a[_2e+1]),this);},addContent:function(_2f,_30){_2f=this._normalize(_2f,this[0]);for(var i=0,_31;(_31=this[i]);i++){this._place(_2f,_31,_30,i>0);}return this;}});return _d;});

View File

@@ -0,0 +1,509 @@
define("dojo/NodeList-dom", ["./_base/kernel", "./query", "./_base/array", "./_base/lang", "./dom-class", "./dom-construct", "./dom-geometry", "./dom-attr", "./dom-style"], function(dojo, query, array, lang, domCls, domCtr, domGeom, domAttr, domStyle){
// module:
// dojo/NodeList-dom.js
/*=====
return function(){
// summary:
// Adds DOM related methods to NodeList, and returns NodeList constructor.
};
=====*/
var magicGuard = function(a){
// summary:
// the guard function for dojo.attr() and dojo.style()
return a.length == 1 && (typeof a[0] == "string"); // inline'd type check
};
var orphan = function(node){
// summary:
// function to orphan nodes
var p = node.parentNode;
if(p){
p.removeChild(node);
}
};
// FIXME: should we move orphan() to dojo.html?
var NodeList = query.NodeList,
awc = NodeList._adaptWithCondition,
aafe = NodeList._adaptAsForEach,
aam = NodeList._adaptAsMap;
function getSet(module){
return function(node, name, value){
if(arguments.length == 2){
return module[typeof name == "string" ? "get" : "set"](node, name);
}
// setter
return module.set(node, name, value);
};
}
lang.extend(NodeList, {
_normalize: function(/*String||Element||Object||NodeList*/content, /*DOMNode?*/refNode){
// summary:
// normalizes data to an array of items to insert.
// description:
// If content is an object, it can have special properties "template" and
// "parse". If "template" is defined, then the template value is run through
// dojo.string.substitute (if dojo/string.substitute() has been dojo.required elsewhere),
// or if templateFunc is a function on the content, that function will be used to
// transform the template into a final string to be used for for passing to dojo/dom-construct.toDom().
// If content.parse is true, then it is remembered for later, for when the content
// nodes are inserted into the DOM. At that point, the nodes will be parsed for widgets
// (if dojo.parser has been dojo.required elsewhere).
//Wanted to just use a DocumentFragment, but for the array/NodeList
//case that meant using cloneNode, but we may not want that.
//Cloning should only happen if the node operations span
//multiple refNodes. Also, need a real array, not a NodeList from the
//DOM since the node movements could change those NodeLists.
var parse = content.parse === true;
//Do we have an object that needs to be run through a template?
if(typeof content.template == "string"){
var templateFunc = content.templateFunc || (dojo.string && dojo.string.substitute);
content = templateFunc ? templateFunc(content.template, content) : content;
}
var type = (typeof content);
if(type == "string" || type == "number"){
content = domCtr.toDom(content, (refNode && refNode.ownerDocument));
if(content.nodeType == 11){
//DocumentFragment. It cannot handle cloneNode calls, so pull out the children.
content = lang._toArray(content.childNodes);
}else{
content = [content];
}
}else if(!lang.isArrayLike(content)){
content = [content];
}else if(!lang.isArray(content)){
//To get to this point, content is array-like, but
//not an array, which likely means a DOM NodeList. Convert it now.
content = lang._toArray(content);
}
//Pass around the parse info
if(parse){
content._runParse = true;
}
return content; //Array
},
_cloneNode: function(/*DOMNode*/ node){
// summary:
// private utility to clone a node. Not very interesting in the vanilla
// dojo/NodeList case, but delegates could do interesting things like
// clone event handlers if that is derivable from the node.
return node.cloneNode(true);
},
_place: function(/*Array*/ary, /*DOMNode*/refNode, /*String*/position, /*Boolean*/useClone){
// summary:
// private utility to handle placing an array of nodes relative to another node.
// description:
// Allows for cloning the nodes in the array, and for
// optionally parsing widgets, if ary._runParse is true.
//Avoid a disallowed operation if trying to do an innerHTML on a non-element node.
if(refNode.nodeType != 1 && position == "only"){
return;
}
var rNode = refNode, tempNode;
//Always cycle backwards in case the array is really a
//DOM NodeList and the DOM operations take it out of the live collection.
var length = ary.length;
for(var i = length - 1; i >= 0; i--){
var node = (useClone ? this._cloneNode(ary[i]) : ary[i]);
//If need widget parsing, use a temp node, instead of waiting after inserting into
//real DOM because we need to start widget parsing at one node up from current node,
//which could cause some already parsed widgets to be parsed again.
if(ary._runParse && dojo.parser && dojo.parser.parse){
if(!tempNode){
tempNode = rNode.ownerDocument.createElement("div");
}
tempNode.appendChild(node);
dojo.parser.parse(tempNode);
node = tempNode.firstChild;
while(tempNode.firstChild){
tempNode.removeChild(tempNode.firstChild);
}
}
if(i == length - 1){
domCtr.place(node, rNode, position);
}else{
rNode.parentNode.insertBefore(node, rNode);
}
rNode = node;
}
},
position: aam(domGeom.position),
/*=====
position: function(){
// summary:
// Returns border-box objects (x/y/w/h) of all elements in a node list
// as an Array (*not* a NodeList). Acts like `dojo.position`, though
// assumes the node passed is each node in this list.
return dojo.map(this, dojo.position); // Array
},
=====*/
attr: awc(getSet(domAttr), magicGuard),
/*=====
attr: function(property, value){
// summary:
// gets or sets the DOM attribute for every element in the
// NodeList. See also `dojo.attr`
// property: String
// the attribute to get/set
// value: String?
// optional. The value to set the property to
// returns:
// if no value is passed, the result is an array of attribute values
// If a value is passed, the return is this NodeList
// example:
// Make all nodes with a particular class focusable:
// | dojo.query(".focusable").attr("tabIndex", -1);
// example:
// Disable a group of buttons:
// | dojo.query("button.group").attr("disabled", true);
// example:
// innerHTML can be assigned or retrieved as well:
// | // get the innerHTML (as an array) for each list item
// | var ih = dojo.query("li.replaceable").attr("innerHTML");
return; // dojo/NodeList|Array
},
=====*/
style: awc(getSet(domStyle), magicGuard),
/*=====
style: function(property, value){
// summary:
// gets or sets the CSS property for every element in the NodeList
// property: String
// the CSS property to get/set, in JavaScript notation
// ("lineHieght" instead of "line-height")
// value: String?
// optional. The value to set the property to
// returns:
// if no value is passed, the result is an array of strings.
// If a value is passed, the return is this NodeList
return; // dojo/NodeList
return; // Array
},
=====*/
addClass: aafe(domCls.add),
/*=====
addClass: function(className){
// summary:
// adds the specified class to every node in the list
// className: String|Array
// A String class name to add, or several space-separated class names,
// or an array of class names.
return; // dojo/NodeList
},
=====*/
removeClass: aafe(domCls.remove),
/*=====
removeClass: function(className){
// summary:
// removes the specified class from every node in the list
// className: String|Array?
// An optional String class name to remove, or several space-separated
// class names, or an array of class names. If omitted, all class names
// will be deleted.
// returns:
// this list
return; // dojo/NodeList
},
=====*/
toggleClass: aafe(domCls.toggle),
/*=====
toggleClass: function(className, condition){
// summary:
// Adds a class to node if not present, or removes if present.
// Pass a boolean condition if you want to explicitly add or remove.
// condition: Boolean?
// If passed, true means to add the class, false means to remove.
// className: String
// the CSS class to add
return; // dojo/NodeList
},
=====*/
replaceClass: aafe(domCls.replace),
/*=====
replaceClass: function(addClassStr, removeClassStr){
// summary:
// Replaces one or more classes on a node if not present.
// Operates more quickly than calling `removeClass()` and `addClass()`
// addClassStr: String|Array
// A String class name to add, or several space-separated class names,
// or an array of class names.
// removeClassStr: String|Array?
// A String class name to remove, or several space-separated class names,
// or an array of class names.
return; // dojo/NodeList
},
=====*/
empty: aafe(domCtr.empty),
/*=====
empty: function(){
// summary:
// clears all content from each node in the list. Effectively
// equivalent to removing all child nodes from every item in
// the list.
return this.forEach("item.innerHTML='';"); // dojo/NodeList
// FIXME: should we be checking for and/or disposing of widgets below these nodes?
},
=====*/
removeAttr: aafe(domAttr.remove),
/*=====
removeAttr: function(name){
// summary:
// Removes an attribute from each node in the list.
// name: String
// the name of the attribute to remove
return; // dojo/NodeList
},
=====*/
marginBox: aam(domGeom.getMarginBox),
/*=====
marginBox: function(){
// summary:
// Returns margin-box size of nodes
return; // dojo/NodeList
},
=====*/
// FIXME: connectPublisher()? connectRunOnce()?
/*
destroy: function(){
// summary:
// destroys every item in the list.
this.forEach(d.destroy);
// FIXME: should we be checking for and/or disposing of widgets below these nodes?
},
*/
place: function(/*String||Node*/ queryOrNode, /*String*/ position){
// summary:
// places elements of this node list relative to the first element matched
// by queryOrNode. Returns the original NodeList. See: `dojo.place`
// queryOrNode:
// may be a string representing any valid CSS3 selector or a DOM node.
// In the selector case, only the first matching element will be used
// for relative positioning.
// position:
// can be one of:
//
// - "last" (default)
// - "first"
// - "before"
// - "after"
// - "only"
// - "replace"
//
// or an offset in the childNodes property
var item = query(queryOrNode)[0];
return this.forEach(function(node){ domCtr.place(node, item, position); }); // dojo/NodeList
},
orphan: function(/*String?*/ filter){
// summary:
// removes elements in this list that match the filter
// from their parents and returns them as a new NodeList.
// filter:
// CSS selector like ".foo" or "div > span"
// returns:
// NodeList containing the orphaned elements
return (filter ? query._filterResult(this, filter) : this).forEach(orphan); // dojo/NodeList
},
adopt: function(/*String||Array||DomNode*/ queryOrListOrNode, /*String?*/ position){
// summary:
// places any/all elements in queryOrListOrNode at a
// position relative to the first element in this list.
// Returns a dojo/NodeList of the adopted elements.
// queryOrListOrNode:
// a DOM node or a query string or a query result.
// Represents the nodes to be adopted relative to the
// first element of this NodeList.
// position:
// can be one of:
//
// - "last" (default)
// - "first"
// - "before"
// - "after"
// - "only"
// - "replace"
//
// or an offset in the childNodes property
return query(queryOrListOrNode).place(this[0], position)._stash(this); // dojo/NodeList
},
// FIXME: do we need this?
query: function(/*String*/ queryStr){
// summary:
// Returns a new list whose members match the passed query,
// assuming elements of the current NodeList as the root for
// each search.
// example:
// assume a DOM created by this markup:
// | <div id="foo">
// | <p>
// | bacon is tasty, <span>dontcha think?</span>
// | </p>
// | </div>
// | <div id="bar">
// | <p>great comedians may not be funny <span>in person</span></p>
// | </div>
// If we are presented with the following definition for a NodeList:
// | var l = new NodeList(dojo.byId("foo"), dojo.byId("bar"));
// it's possible to find all span elements under paragraphs
// contained by these elements with this sub-query:
// | var spans = l.query("p span");
// FIXME: probably slow
if(!queryStr){ return this; }
var ret = new NodeList;
this.map(function(node){
// FIXME: why would we ever get undefined here?
query(queryStr, node).forEach(function(subNode){
if(subNode !== undefined){
ret.push(subNode);
}
});
});
return ret._stash(this); // dojo/NodeList
},
filter: function(/*String|Function*/ filter){
// summary:
// "masks" the built-in javascript filter() method (supported
// in Dojo via `dojo.filter`) to support passing a simple
// string filter in addition to supporting filtering function
// objects.
// filter:
// If a string, a CSS rule like ".thinger" or "div > span".
// example:
// "regular" JS filter syntax as exposed in dojo.filter:
// | dojo.query("*").filter(function(item){
// | // highlight every paragraph
// | return (item.nodeName == "p");
// | }).style("backgroundColor", "yellow");
// example:
// the same filtering using a CSS selector
// | dojo.query("*").filter("p").styles("backgroundColor", "yellow");
var a = arguments, items = this, start = 0;
if(typeof filter == "string"){ // inline'd type check
items = query._filterResult(this, a[0]);
if(a.length == 1){
// if we only got a string query, pass back the filtered results
return items._stash(this); // dojo/NodeList
}
// if we got a callback, run it over the filtered items
start = 1;
}
return this._wrap(array.filter(items, a[start], a[start + 1]), this); // dojo/NodeList
},
/*
// FIXME: should this be "copyTo" and include parenting info?
clone: function(){
// summary:
// creates node clones of each element of this list
// and returns a new list containing the clones
},
*/
addContent: function(/*String||DomNode||Object||dojo/NodeList*/ content, /*String||Integer?*/ position){
// summary:
// add a node, NodeList or some HTML as a string to every item in the
// list. Returns the original list.
// description:
// a copy of the HTML content is added to each item in the
// list, with an optional position argument. If no position
// argument is provided, the content is appended to the end of
// each item.
// content:
// DOM node, HTML in string format, a NodeList or an Object. If a DOM node or
// NodeList, the content will be cloned if the current NodeList has more than one
// element. Only the DOM nodes are cloned, no event handlers. If it is an Object,
// it should be an object with at "template" String property that has the HTML string
// to insert. If dojo.string has already been dojo.required, then dojo.string.substitute
// will be used on the "template" to generate the final HTML string. Other allowed
// properties on the object are: "parse" if the HTML
// string should be parsed for widgets (dojo.require("dojo.parser") to get that
// option to work), and "templateFunc" if a template function besides dojo.string.substitute
// should be used to transform the "template".
// position:
// can be one of:
//
// - "last"||"end" (default)
// - "first||"start"
// - "before"
// - "after"
// - "replace" (replaces nodes in this NodeList with new content)
// - "only" (removes other children of the nodes so new content is the only child)
//
// or an offset in the childNodes property
// example:
// appends content to the end if the position is omitted
// | dojo.query("h3 > p").addContent("hey there!");
// example:
// add something to the front of each element that has a
// "thinger" property:
// | dojo.query("[thinger]").addContent("...", "first");
// example:
// adds a header before each element of the list
// | dojo.query(".note").addContent("<h4>NOTE:</h4>", "before");
// example:
// add a clone of a DOM node to the end of every element in
// the list, removing it from its existing parent.
// | dojo.query(".note").addContent(dojo.byId("foo"));
// example:
// Append nodes from a templatized string.
// | dojo.require("dojo.string");
// | dojo.query(".note").addContent({
// | template: '<b>${id}: </b><span>${name}</span>',
// | id: "user332",
// | name: "Mr. Anderson"
// | });
// example:
// Append nodes from a templatized string that also has widgets parsed.
// | dojo.require("dojo.string");
// | dojo.require("dojo.parser");
// | var notes = dojo.query(".note").addContent({
// | template: '<button dojoType="dijit/form/Button">${text}</button>',
// | parse: true,
// | text: "Send"
// | });
content = this._normalize(content, this[0]);
for(var i = 0, node; (node = this[i]); i++){
this._place(content, node, position, i > 0);
}
return this; // dojo/NodeList
}
});
return NodeList;
});

View File

@@ -1,8 +1,8 @@
/*
Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
Copyright (c) 2004-2012, The Dojo Foundation All Rights Reserved.
Available via Academic Free License >= 2.1 OR the modified BSD license.
see: http://dojotoolkit.org/license for details
*/
//>>built
define("dojo/NodeList-fx",["dojo/_base/NodeList","./_base/lang","./_base/connect","./_base/fx","./fx"],function(_1,_2,_3,_4,_5){_2.extend(_1,{_anim:function(_6,_7,_8){_8=_8||{};var a=_5.combine(this.map(function(_9){var _a={node:_9};_2.mixin(_a,_8);return _6[_7](_a);}));return _8.auto?a.play()&&this:a;},wipeIn:function(_b){return this._anim(_5,"wipeIn",_b);},wipeOut:function(_c){return this._anim(_5,"wipeOut",_c);},slideTo:function(_d){return this._anim(_5,"slideTo",_d);},fadeIn:function(_e){return this._anim(_4,"fadeIn",_e);},fadeOut:function(_f){return this._anim(_4,"fadeOut",_f);},animateProperty:function(_10){return this._anim(_4,"animateProperty",_10);},anim:function(_11,_12,_13,_14,_15){var _16=_5.combine(this.map(function(_17){return _4.animateProperty({node:_17,properties:_11,duration:_12||350,easing:_13});}));if(_14){_3.connect(_16,"onEnd",_14);}return _16.play(_15||0);}});return _1;});
define("dojo/NodeList-fx",["./query","./_base/lang","./_base/connect","./_base/fx","./fx"],function(_1,_2,_3,_4,_5){var _6=_1.NodeList;_2.extend(_6,{_anim:function(_7,_8,_9){_9=_9||{};var a=_5.combine(this.map(function(_a){var _b={node:_a};_2.mixin(_b,_9);return _7[_8](_b);}));return _9.auto?a.play()&&this:a;},wipeIn:function(_c){return this._anim(_5,"wipeIn",_c);},wipeOut:function(_d){return this._anim(_5,"wipeOut",_d);},slideTo:function(_e){return this._anim(_5,"slideTo",_e);},fadeIn:function(_f){return this._anim(_4,"fadeIn",_f);},fadeOut:function(_10){return this._anim(_4,"fadeOut",_10);},animateProperty:function(_11){return this._anim(_4,"animateProperty",_11);},anim:function(_12,_13,_14,_15,_16){var _17=_5.combine(this.map(function(_18){return _4.animateProperty({node:_18,properties:_12,duration:_13||350,easing:_14});}));if(_15){_3.connect(_17,"onEnd",_15);}return _17.play(_16||0);}});return _6;});

View File

@@ -0,0 +1,221 @@
define("dojo/NodeList-fx", ["./query", "./_base/lang", "./_base/connect", "./_base/fx", "./fx"],
function(query, lang, connectLib, baseFx, coreFx){
// module:
// dojo/NodeList-fx
/*=====
return function(){
// summary:
// Adds dojo.fx animation support to dojo.query() by extending the NodeList class
// with additional FX functions. NodeList is the array-like object used to hold query results.
};
=====*/
var NodeList = query.NodeList;
lang.extend(NodeList, {
_anim: function(obj, method, args){
args = args||{};
var a = coreFx.combine(
this.map(function(item){
var tmpArgs = { node: item };
lang.mixin(tmpArgs, args);
return obj[method](tmpArgs);
})
);
return args.auto ? a.play() && this : a; // dojo/_base/fx.Animation|dojo/NodeList
},
wipeIn: function(args){
// summary:
// wipe in all elements of this NodeList via `dojo/fx.wipeIn()`
//
// args: Object?
// Additional dojo/_base/fx.Animation arguments to mix into this set with the addition of
// an `auto` parameter.
//
// returns: dojo/_base/fx.Animation|dojo/NodeList
// A special args member `auto` can be passed to automatically play the animation.
// If args.auto is present, the original dojo/NodeList will be returned for further
// chaining. Otherwise the dojo/_base/fx.Animation instance is returned and must be .play()'ed
//
// example:
// Fade in all tables with class "blah":
// | dojo.query("table.blah").wipeIn().play();
//
// example:
// Utilizing `auto` to get the NodeList back:
// | dojo.query(".titles").wipeIn({ auto:true }).onclick(someFunction);
//
return this._anim(coreFx, "wipeIn", args); // dojo/_base/fx.Animation|dojo/NodeList
},
wipeOut: function(args){
// summary:
// wipe out all elements of this NodeList via `dojo/fx.wipeOut()`
//
// args: Object?
// Additional dojo/_base/fx.Animation arguments to mix into this set with the addition of
// an `auto` parameter.
//
// returns: dojo/_base/fx.Animation|dojo/NodeList
// A special args member `auto` can be passed to automatically play the animation.
// If args.auto is present, the original dojo/NodeList will be returned for further
// chaining. Otherwise the dojo/_base/fx.Animation instance is returned and must be .play()'ed
//
// example:
// Wipe out all tables with class "blah":
// | dojo.query("table.blah").wipeOut().play();
return this._anim(coreFx, "wipeOut", args); // dojo/_base/fx.Animation|dojo/NodeList
},
slideTo: function(args){
// summary:
// slide all elements of the node list to the specified place via `dojo/fx.slideTo()`
//
// args: Object?
// Additional dojo/_base/fx.Animation arguments to mix into this set with the addition of
// an `auto` parameter.
//
// returns: dojo/_base/fx.Animation|dojo/NodeList
// A special args member `auto` can be passed to automatically play the animation.
// If args.auto is present, the original dojo/NodeList will be returned for further
// chaining. Otherwise the dojo/_base/fx.Animation instance is returned and must be .play()'ed
//
// example:
// | Move all tables with class "blah" to 300/300:
// | dojo.query("table.blah").slideTo({
// | left: 40,
// | top: 50
// | }).play();
return this._anim(coreFx, "slideTo", args); // dojo/_base/fx.Animation|dojo/NodeList
},
fadeIn: function(args){
// summary:
// fade in all elements of this NodeList via `dojo.fadeIn`
//
// args: Object?
// Additional dojo/_base/fx.Animation arguments to mix into this set with the addition of
// an `auto` parameter.
//
// returns: dojo/_base/fx.Animation|dojo/NodeList
// A special args member `auto` can be passed to automatically play the animation.
// If args.auto is present, the original dojo/NodeList will be returned for further
// chaining. Otherwise the dojo/_base/fx.Animation instance is returned and must be .play()'ed
//
// example:
// Fade in all tables with class "blah":
// | dojo.query("table.blah").fadeIn().play();
return this._anim(baseFx, "fadeIn", args); // dojo/_base/fx.Animation|dojo/NodeList
},
fadeOut: function(args){
// summary:
// fade out all elements of this NodeList via `dojo.fadeOut`
//
// args: Object?
// Additional dojo/_base/fx.Animation arguments to mix into this set with the addition of
// an `auto` parameter.
//
// returns: dojo/_base/fx.Animation|dojo/NodeList
// A special args member `auto` can be passed to automatically play the animation.
// If args.auto is present, the original dojo/NodeList will be returned for further
// chaining. Otherwise the dojo/_base/fx.Animation instance is returned and must be .play()'ed
//
// example:
// Fade out all elements with class "zork":
// | dojo.query(".zork").fadeOut().play();
// example:
// Fade them on a delay and do something at the end:
// | var fo = dojo.query(".zork").fadeOut();
// | dojo.connect(fo, "onEnd", function(){ /*...*/ });
// | fo.play();
// example:
// Using `auto`:
// | dojo.query("li").fadeOut({ auto:true }).filter(filterFn).forEach(doit);
//
return this._anim(baseFx, "fadeOut", args); // dojo/_base/fx.Animation|dojo/NodeList
},
animateProperty: function(args){
// summary:
// Animate all elements of this NodeList across the properties specified.
// syntax identical to `dojo.animateProperty`
//
// args: Object?
// Additional dojo/_base/fx.Animation arguments to mix into this set with the addition of
// an `auto` parameter.
//
// returns: dojo/_base/fx.Animation|dojo/NodeList
// A special args member `auto` can be passed to automatically play the animation.
// If args.auto is present, the original dojo/NodeList will be returned for further
// chaining. Otherwise the dojo/_base/fx.Animation instance is returned and must be .play()'ed
//
// example:
// | dojo.query(".zork").animateProperty({
// | duration: 500,
// | properties: {
// | color: { start: "black", end: "white" },
// | left: { end: 300 }
// | }
// | }).play();
//
// example:
// | dojo.query(".grue").animateProperty({
// | auto:true,
// | properties: {
// | height:240
// | }
// | }).onclick(handler);
return this._anim(baseFx, "animateProperty", args); // dojo/_base/fx.Animation|dojo/NodeList
},
anim: function( /*Object*/ properties,
/*Integer?*/ duration,
/*Function?*/ easing,
/*Function?*/ onEnd,
/*Integer?*/ delay){
// summary:
// Animate one or more CSS properties for all nodes in this list.
// The returned animation object will already be playing when it
// is returned. See the docs for `dojo.anim` for full details.
// properties: Object
// the properties to animate. does NOT support the `auto` parameter like other
// NodeList-fx methods.
// duration: Integer?
// Optional. The time to run the animations for
// easing: Function?
// Optional. The easing function to use.
// onEnd: Function?
// A function to be called when the animation ends
// delay:
// how long to delay playing the returned animation
// example:
// Another way to fade out:
// | dojo.query(".thinger").anim({ opacity: 0 });
// example:
// animate all elements with the "thigner" class to a width of 500
// pixels over half a second
// | dojo.query(".thinger").anim({ width: 500 }, 700);
var canim = coreFx.combine(
this.map(function(item){
return baseFx.animateProperty({
node: item,
properties: properties,
duration: duration||350,
easing: easing
});
})
);
if(onEnd){
connectLib.connect(canim, "onEnd", onEnd);
}
return canim.play(delay||0); // dojo/_base/fx.Animation
}
});
return NodeList;
});

View File

@@ -1,5 +1,5 @@
/*
Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
Copyright (c) 2004-2012, The Dojo Foundation All Rights Reserved.
Available via Academic Free License >= 2.1 OR the modified BSD license.
see: http://dojotoolkit.org/license for details
*/

View File

@@ -0,0 +1,53 @@
define("dojo/NodeList-html", ["./query", "./_base/lang", "./html"], function(query, lang, html){
// module:
// dojo/NodeList-html
/*=====
return function(){
// summary:
// Adds a chainable html method to dojo.query() / NodeList instances for setting/replacing node content
};
=====*/
var NodeList = query.NodeList;
lang.extend(NodeList, {
html: function(/* String|DomNode|NodeList? */ content, /* Object? */params){
// summary:
// see `dojo/html.set()`. Set the content of all elements of this NodeList
//
// content:
// An html string, node or enumerable list of nodes for insertion into the dom
//
// params:
// Optional flags/properties to configure the content-setting. See dojo/html._ContentSetter
//
// description:
// Based around `dojo/html.set()`, set the content of the Elements in a
// NodeList to the given content (string/node/nodelist), with optional arguments
// to further tune the set content behavior.
//
// example:
// | query(".thingList").html("<li data-dojo-type='dojo/dnd/Moveable'>1</li><li data-dojo-type='dojo/dnd/Moveable'>2</li><li data-dojo-type='dojo/dnd/Moveable'>3</li>",
// | {
// | parseContent: true,
// | onBegin: function(){
// | this.content = this.content.replace(/([0-9])/g, this.id + ": $1");
// | this.inherited("onBegin", arguments);
// | }
// | }).removeClass("notdone").addClass("done");
var dhs = new html._ContentSetter(params || {});
this.forEach(function(elm){
dhs.node = elm;
dhs.set(content);
dhs.tearDown();
});
return this; // dojo/NodeList
}
});
return NodeList;
});

View File

@@ -1,5 +1,5 @@
/*
Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
Copyright (c) 2004-2012, The Dojo Foundation All Rights Reserved.
Available via Academic Free License >= 2.1 OR the modified BSD license.
see: http://dojotoolkit.org/license for details
*/

View File

@@ -0,0 +1,724 @@
define("dojo/NodeList-manipulate", ["./query", "./_base/lang", "./_base/array", "./dom-construct", "./NodeList-dom"], function(dquery, lang, array, construct){
// module:
// dojo/NodeList-manipulate
/*=====
return function(){
// summary:
// Adds chainable methods to dojo.query() / NodeList instances for manipulating HTML
// and DOM nodes and their properties.
};
=====*/
var NodeList = dquery.NodeList;
//TODO: add a way to parse for widgets in the injected markup?
function getText(/*DOMNode*/node){
// summary:
// recursion method for text() to use. Gets text value for a node.
// description:
// Juse uses nodedValue so things like <br/> tags do not end up in
// the text as any sort of line return.
var text = "", ch = node.childNodes;
for(var i = 0, n; n = ch[i]; i++){
//Skip comments.
if(n.nodeType != 8){
if(n.nodeType == 1){
text += getText(n);
}else{
text += n.nodeValue;
}
}
}
return text;
}
function getWrapInsertion(/*DOMNode*/node){
// summary:
// finds the innermost element to use for wrap insertion.
//Make it easy, assume single nesting, no siblings.
while(node.childNodes[0] && node.childNodes[0].nodeType == 1){
node = node.childNodes[0];
}
return node; //DOMNode
}
function makeWrapNode(/*DOMNode||String*/html, /*DOMNode*/refNode){
// summary:
// convert HTML into nodes if it is not already a node.
if(typeof html == "string"){
html = construct.toDom(html, (refNode && refNode.ownerDocument));
if(html.nodeType == 11){
//DocumentFragment cannot handle cloneNode, so choose first child.
html = html.childNodes[0];
}
}else if(html.nodeType == 1 && html.parentNode){
//This element is already in the DOM clone it, but not its children.
html = html.cloneNode(false);
}
return html; /*DOMNode*/
}
lang.extend(NodeList, {
_placeMultiple: function(/*String||Node||NodeList*/query, /*String*/position){
// summary:
// private method for inserting queried nodes into all nodes in this NodeList
// at different positions. Differs from NodeList.place because it will clone
// the nodes in this NodeList if the query matches more than one element.
var nl2 = typeof query == "string" || query.nodeType ? dquery(query) : query;
var toAdd = [];
for(var i = 0; i < nl2.length; i++){
//Go backwards in DOM to make dom insertions easier via insertBefore
var refNode = nl2[i];
var length = this.length;
for(var j = length - 1, item; item = this[j]; j--){
if(i > 0){
//Need to clone the item. This also means
//it needs to be added to the current NodeList
//so it can also be the target of other chaining operations.
item = this._cloneNode(item);
toAdd.unshift(item);
}
if(j == length - 1){
construct.place(item, refNode, position);
}else{
refNode.parentNode.insertBefore(item, refNode);
}
refNode = item;
}
}
if(toAdd.length){
//Add the toAdd items to the current NodeList. Build up list of args
//to pass to splice.
toAdd.unshift(0);
toAdd.unshift(this.length - 1);
Array.prototype.splice.apply(this, toAdd);
}
return this; // dojo/NodeList
},
innerHTML: function(/*String|DOMNode|NodeList?*/ value){
// summary:
// allows setting the innerHTML of each node in the NodeList,
// if there is a value passed in, otherwise, reads the innerHTML value of the first node.
// description:
// This method is simpler than the dojo/NodeList.html() method provided by
// `dojo/NodeList-html`. This method just does proper innerHTML insertion of HTML fragments,
// and it allows for the innerHTML to be read for the first node in the node list.
// Since dojo/NodeList-html already took the "html" name, this method is called
// "innerHTML". However, if dojo/NodeList-html has not been loaded yet, this
// module will define an "html" method that can be used instead. Be careful if you
// are working in an environment where it is possible that dojo/NodeList-html could
// have been loaded, since its definition of "html" will take precedence.
// The nodes represented by the value argument will be cloned if more than one
// node is in this NodeList. The nodes in this NodeList are returned in the "set"
// usage of this method, not the HTML that was inserted.
// returns:
// if no value is passed, the result is String, the innerHTML of the first node.
// If a value is passed, the return is this dojo/NodeList
// example:
// assume a DOM created by this markup:
// | <div id="foo"></div>
// | <div id="bar"></div>
// This code inserts `<p>Hello World</p>` into both divs:
// | dojo.query("div").innerHTML("<p>Hello World</p>");
// example:
// assume a DOM created by this markup:
// | <div id="foo"><p>Hello Mars</p></div>
// | <div id="bar"><p>Hello World</p></div>
// This code returns `<p>Hello Mars</p>`:
// | var message = dojo.query("div").innerHTML();
if(arguments.length){
return this.addContent(value, "only"); // dojo/NodeList
}else{
return this[0].innerHTML; //String
}
},
/*=====
html: function(value){
// summary:
// see the information for "innerHTML". "html" is an alias for "innerHTML", but is
// only defined if dojo/NodeList-html has not been loaded.
// description:
// An alias for the "innerHTML" method, but only defined if there is not an existing
// "html" method on dojo/NodeList. Be careful if you are working in an environment
// where it is possible that dojo/NodeList-html could have been loaded, since its
// definition of "html" will take precedence. If you are not sure if dojo/NodeList-html
// could be loaded, use the "innerHTML" method.
// value: String|DOMNode|NodeList?
// The HTML fragment to use as innerHTML. If value is not passed, then the innerHTML
// of the first element in this NodeList is returned.
// returns:
// if no value is passed, the result is String, the innerHTML of the first node.
// If a value is passed, the return is this dojo/NodeList
return; // dojo/NodeList|String
},
=====*/
text: function(/*String*/value){
// summary:
// allows setting the text value of each node in the NodeList,
// if there is a value passed in, otherwise, returns the text value for all the
// nodes in the NodeList in one string.
// example:
// assume a DOM created by this markup:
// | <div id="foo"></div>
// | <div id="bar"></div>
// This code inserts "Hello World" into both divs:
// | dojo.query("div").text("Hello World");
// example:
// assume a DOM created by this markup:
// | <div id="foo"><p>Hello Mars <span>today</span></p></div>
// | <div id="bar"><p>Hello World</p></div>
// This code returns "Hello Mars today":
// | var message = dojo.query("div").text();
// returns:
// if no value is passed, the result is String, the text value of the first node.
// If a value is passed, the return is this dojo/NodeList
if(arguments.length){
for(var i = 0, node; node = this[i]; i++){
if(node.nodeType == 1){
construct.empty(node);
node.appendChild(node.ownerDocument.createTextNode(value));
}
}
return this; // dojo/NodeList
}else{
var result = "";
for(i = 0; node = this[i]; i++){
result += getText(node);
}
return result; //String
}
},
val: function(/*String||Array*/value){
// summary:
// If a value is passed, allows seting the value property of form elements in this
// NodeList, or properly selecting/checking the right value for radio/checkbox/select
// elements. If no value is passed, the value of the first node in this NodeList
// is returned.
// returns:
// if no value is passed, the result is String or an Array, for the value of the
// first node.
// If a value is passed, the return is this dojo/NodeList
// example:
// assume a DOM created by this markup:
// | <input type="text" value="foo">
// | <select multiple>
// | <option value="red" selected>Red</option>
// | <option value="blue">Blue</option>
// | <option value="yellow" selected>Yellow</option>
// | </select>
// This code gets and sets the values for the form fields above:
// | dojo.query('[type="text"]').val(); //gets value foo
// | dojo.query('[type="text"]').val("bar"); //sets the input's value to "bar"
// | dojo.query("select").val() //gets array value ["red", "yellow"]
// | dojo.query("select").val(["blue", "yellow"]) //Sets the blue and yellow options to selected.
//Special work for input elements.
if(arguments.length){
var isArray = lang.isArray(value);
for(var index = 0, node; node = this[index]; index++){
var name = node.nodeName.toUpperCase();
var type = node.type;
var newValue = isArray ? value[index] : value;
if(name == "SELECT"){
var opts = node.options;
for(var i = 0; i < opts.length; i++){
var opt = opts[i];
if(node.multiple){
opt.selected = (array.indexOf(value, opt.value) != -1);
}else{
opt.selected = (opt.value == newValue);
}
}
}else if(type == "checkbox" || type == "radio"){
node.checked = (node.value == newValue);
}else{
node.value = newValue;
}
}
return this; // dojo/NodeList
}else{
//node already declared above.
node = this[0];
if(!node || node.nodeType != 1){
return undefined;
}
value = node.value || "";
if(node.nodeName.toUpperCase() == "SELECT" && node.multiple){
//A multivalued selectbox. Do the pain.
value = [];
//opts declared above in if block.
opts = node.options;
//i declared above in if block;
for(i = 0; i < opts.length; i++){
//opt declared above in if block
opt = opts[i];
if(opt.selected){
value.push(opt.value);
}
}
if(!value.length){
value = null;
}
}
return value; //String||Array
}
},
append: function(/*String||DOMNode||NodeList*/content){
// summary:
// appends the content to every node in the NodeList.
// description:
// The content will be cloned if the length of NodeList
// is greater than 1. Only the DOM nodes are cloned, not
// any attached event handlers.
// returns:
// dojo/NodeList, the nodes currently in this NodeList will be returned,
// not the appended content.
// example:
// assume a DOM created by this markup:
// | <div id="foo"><p>Hello Mars</p></div>
// | <div id="bar"><p>Hello World</p></div>
// Running this code:
// | dojo.query("div").append("<span>append</span>");
// Results in this DOM structure:
// | <div id="foo"><p>Hello Mars</p><span>append</span></div>
// | <div id="bar"><p>Hello World</p><span>append</span></div>
return this.addContent(content, "last"); // dojo/NodeList
},
appendTo: function(/*String*/query){
// summary:
// appends nodes in this NodeList to the nodes matched by
// the query passed to appendTo.
// description:
// The nodes in this NodeList will be cloned if the query
// matches more than one element. Only the DOM nodes are cloned, not
// any attached event handlers.
// returns:
// dojo/NodeList, the nodes currently in this NodeList will be returned,
// not the matched nodes from the query.
// example:
// assume a DOM created by this markup:
// | <span>append</span>
// | <p>Hello Mars</p>
// | <p>Hello World</p>
// Running this code:
// | dojo.query("span").appendTo("p");
// Results in this DOM structure:
// | <p>Hello Mars<span>append</span></p>
// | <p>Hello World<span>append</span></p>
return this._placeMultiple(query, "last"); // dojo/NodeList
},
prepend: function(/*String||DOMNode||NodeList*/content){
// summary:
// prepends the content to every node in the NodeList.
// description:
// The content will be cloned if the length of NodeList
// is greater than 1. Only the DOM nodes are cloned, not
// any attached event handlers.
// returns:
// dojo/NodeList, the nodes currently in this NodeList will be returned,
// not the appended content.
// assume a DOM created by this markup:
// | <div id="foo"><p>Hello Mars</p></div>
// | <div id="bar"><p>Hello World</p></div>
// Running this code:
// | dojo.query("div").prepend("<span>prepend</span>");
// Results in this DOM structure:
// | <div id="foo"><span>prepend</span><p>Hello Mars</p></div>
// | <div id="bar"><span>prepend</span><p>Hello World</p></div>
return this.addContent(content, "first"); // dojo/NodeList
},
prependTo: function(/*String*/query){
// summary:
// prepends nodes in this NodeList to the nodes matched by
// the query passed to prependTo.
// description:
// The nodes in this NodeList will be cloned if the query
// matches more than one element. Only the DOM nodes are cloned, not
// any attached event handlers.
// returns:
// dojo/NodeList, the nodes currently in this NodeList will be returned,
// not the matched nodes from the query.
// example:
// assume a DOM created by this markup:
// | <span>prepend</span>
// | <p>Hello Mars</p>
// | <p>Hello World</p>
// Running this code:
// | dojo.query("span").prependTo("p");
// Results in this DOM structure:
// | <p><span>prepend</span>Hello Mars</p>
// | <p><span>prepend</span>Hello World</p>
return this._placeMultiple(query, "first"); // dojo/NodeList
},
after: function(/*String||Element||NodeList*/content){
// summary:
// Places the content after every node in the NodeList.
// description:
// The content will be cloned if the length of NodeList
// is greater than 1. Only the DOM nodes are cloned, not
// any attached event handlers.
// returns:
// dojo/NodeList, the nodes currently in this NodeList will be returned,
// not the appended content.
// example:
// assume a DOM created by this markup:
// | <div id="foo"><p>Hello Mars</p></div>
// | <div id="bar"><p>Hello World</p></div>
// Running this code:
// | dojo.query("div").after("<span>after</span>");
// Results in this DOM structure:
// | <div id="foo"><p>Hello Mars</p></div><span>after</span>
// | <div id="bar"><p>Hello World</p></div><span>after</span>
return this.addContent(content, "after"); // dojo/NodeList
},
insertAfter: function(/*String*/query){
// summary:
// The nodes in this NodeList will be placed after the nodes
// matched by the query passed to insertAfter.
// description:
// The nodes in this NodeList will be cloned if the query
// matches more than one element. Only the DOM nodes are cloned, not
// any attached event handlers.
// returns:
// dojo/NodeList, the nodes currently in this NodeList will be returned,
// not the matched nodes from the query.
// example:
// assume a DOM created by this markup:
// | <span>after</span>
// | <p>Hello Mars</p>
// | <p>Hello World</p>
// Running this code:
// | dojo.query("span").insertAfter("p");
// Results in this DOM structure:
// | <p>Hello Mars</p><span>after</span>
// | <p>Hello World</p><span>after</span>
return this._placeMultiple(query, "after"); // dojo/NodeList
},
before: function(/*String||DOMNode||NodeList*/content){
// summary:
// Places the content before every node in the NodeList.
// description:
// The content will be cloned if the length of NodeList
// is greater than 1. Only the DOM nodes are cloned, not
// any attached event handlers.
// returns:
// dojo/NodeList, the nodes currently in this NodeList will be returned,
// not the appended content.
// example:
// assume a DOM created by this markup:
// | <div id="foo"><p>Hello Mars</p></div>
// | <div id="bar"><p>Hello World</p></div>
// Running this code:
// | dojo.query("div").before("<span>before</span>");
// Results in this DOM structure:
// | <span>before</span><div id="foo"><p>Hello Mars</p></div>
// | <span>before</span><div id="bar"><p>Hello World</p></div>
return this.addContent(content, "before"); // dojo/NodeList
},
insertBefore: function(/*String*/query){
// summary:
// The nodes in this NodeList will be placed after the nodes
// matched by the query passed to insertAfter.
// description:
// The nodes in this NodeList will be cloned if the query
// matches more than one element. Only the DOM nodes are cloned, not
// any attached event handlers.
// returns:
// dojo/NodeList, the nodes currently in this NodeList will be returned,
// not the matched nodes from the query.
// example:
// assume a DOM created by this markup:
// | <span>before</span>
// | <p>Hello Mars</p>
// | <p>Hello World</p>
// Running this code:
// | dojo.query("span").insertBefore("p");
// Results in this DOM structure:
// | <span>before</span><p>Hello Mars</p>
// | <span>before</span><p>Hello World</p>
return this._placeMultiple(query, "before"); // dojo/NodeList
},
/*=====
remove: function(simpleFilter){
// summary:
// alias for dojo/NodeList's orphan method. Removes elements
// in this list that match the simple filter from their parents
// and returns them as a new NodeList.
// simpleFilter: String
// single-expression CSS rule. For example, ".thinger" or
// "#someId[attrName='value']" but not "div > span". In short,
// anything which does not invoke a descent to evaluate but
// can instead be used to test a single node is acceptable.
return; // dojo/NodeList
},
=====*/
remove: NodeList.prototype.orphan,
wrap: function(/*String||DOMNode*/html){
// summary:
// Wrap each node in the NodeList with html passed to wrap.
// description:
// html will be cloned if the NodeList has more than one
// element. Only DOM nodes are cloned, not any attached
// event handlers.
// returns:
// the nodes in the current NodeList will be returned,
// not the nodes from html argument.
// example:
// assume a DOM created by this markup:
// | <b>one</b>
// | <b>two</b>
// Running this code:
// | dojo.query("b").wrap("<div><span></span></div>");
// Results in this DOM structure:
// | <div><span><b>one</b></span></div>
// | <div><span><b>two</b></span></div>
if(this[0]){
html = makeWrapNode(html, this[0]);
//Now cycle through the elements and do the insertion.
for(var i = 0, node; node = this[i]; i++){
//Always clone because if html is used to hold one of
//the "this" nodes, then on the clone of html it will contain
//that "this" node, and that would be bad.
var clone = this._cloneNode(html);
if(node.parentNode){
node.parentNode.replaceChild(clone, node);
}
//Find deepest element and insert old node in it.
var insertion = getWrapInsertion(clone);
insertion.appendChild(node);
}
}
return this; // dojo/NodeList
},
wrapAll: function(/*String||DOMNode*/html){
// summary:
// Insert html where the first node in this NodeList lives, then place all
// nodes in this NodeList as the child of the html.
// returns:
// the nodes in the current NodeList will be returned,
// not the nodes from html argument.
// example:
// assume a DOM created by this markup:
// | <div class="container">
// | <div class="red">Red One</div>
// | <div class="blue">Blue One</div>
// | <div class="red">Red Two</div>
// | <div class="blue">Blue Two</div>
// | </div>
// Running this code:
// | dojo.query(".red").wrapAll('<div class="allRed"></div>');
// Results in this DOM structure:
// | <div class="container">
// | <div class="allRed">
// | <div class="red">Red One</div>
// | <div class="red">Red Two</div>
// | </div>
// | <div class="blue">Blue One</div>
// | <div class="blue">Blue Two</div>
// | </div>
if(this[0]){
html = makeWrapNode(html, this[0]);
//Place the wrap HTML in place of the first node.
this[0].parentNode.replaceChild(html, this[0]);
//Now cycle through the elements and move them inside
//the wrap.
var insertion = getWrapInsertion(html);
for(var i = 0, node; node = this[i]; i++){
insertion.appendChild(node);
}
}
return this; // dojo/NodeList
},
wrapInner: function(/*String||DOMNode*/html){
// summary:
// For each node in the NodeList, wrap all its children with the passed in html.
// description:
// html will be cloned if the NodeList has more than one
// element. Only DOM nodes are cloned, not any attached
// event handlers.
// returns:
// the nodes in the current NodeList will be returned,
// not the nodes from html argument.
// example:
// assume a DOM created by this markup:
// | <div class="container">
// | <div class="red">Red One</div>
// | <div class="blue">Blue One</div>
// | <div class="red">Red Two</div>
// | <div class="blue">Blue Two</div>
// | </div>
// Running this code:
// | dojo.query(".red").wrapInner('<span class="special"></span>');
// Results in this DOM structure:
// | <div class="container">
// | <div class="red"><span class="special">Red One</span></div>
// | <div class="blue">Blue One</div>
// | <div class="red"><span class="special">Red Two</span></div>
// | <div class="blue">Blue Two</div>
// | </div>
if(this[0]){
html = makeWrapNode(html, this[0]);
for(var i = 0; i < this.length; i++){
//Always clone because if html is used to hold one of
//the "this" nodes, then on the clone of html it will contain
//that "this" node, and that would be bad.
var clone = this._cloneNode(html);
//Need to convert the childNodes to an array since wrapAll modifies the
//DOM and can change the live childNodes NodeList.
this._wrap(lang._toArray(this[i].childNodes), null, this._NodeListCtor).wrapAll(clone);
}
}
return this; // dojo/NodeList
},
replaceWith: function(/*String||DOMNode||NodeList*/content){
// summary:
// Replaces each node in ths NodeList with the content passed to replaceWith.
// description:
// The content will be cloned if the length of NodeList
// is greater than 1. Only the DOM nodes are cloned, not
// any attached event handlers.
// returns:
// The nodes currently in this NodeList will be returned, not the replacing content.
// Note that the returned nodes have been removed from the DOM.
// example:
// assume a DOM created by this markup:
// | <div class="container">
// | <div class="red">Red One</div>
// | <div class="blue">Blue One</div>
// | <div class="red">Red Two</div>
// | <div class="blue">Blue Two</div>
// | </div>
// Running this code:
// | dojo.query(".red").replaceWith('<div class="green">Green</div>');
// Results in this DOM structure:
// | <div class="container">
// | <div class="green">Green</div>
// | <div class="blue">Blue One</div>
// | <div class="green">Green</div>
// | <div class="blue">Blue Two</div>
// | </div>
content = this._normalize(content, this[0]);
for(var i = 0, node; node = this[i]; i++){
this._place(content, node, "before", i > 0);
node.parentNode.removeChild(node);
}
return this; // dojo/NodeList
},
replaceAll: function(/*String*/query){
// summary:
// replaces nodes matched by the query passed to replaceAll with the nodes
// in this NodeList.
// description:
// The nodes in this NodeList will be cloned if the query
// matches more than one element. Only the DOM nodes are cloned, not
// any attached event handlers.
// returns:
// The nodes currently in this NodeList will be returned, not the matched nodes
// from the query. The nodes currently in this NodeLIst could have
// been cloned, so the returned NodeList will include the cloned nodes.
// example:
// assume a DOM created by this markup:
// | <div class="container">
// | <div class="spacer">___</div>
// | <div class="red">Red One</div>
// | <div class="spacer">___</div>
// | <div class="blue">Blue One</div>
// | <div class="spacer">___</div>
// | <div class="red">Red Two</div>
// | <div class="spacer">___</div>
// | <div class="blue">Blue Two</div>
// | </div>
// Running this code:
// | dojo.query(".red").replaceAll(".blue");
// Results in this DOM structure:
// | <div class="container">
// | <div class="spacer">___</div>
// | <div class="spacer">___</div>
// | <div class="red">Red One</div>
// | <div class="red">Red Two</div>
// | <div class="spacer">___</div>
// | <div class="spacer">___</div>
// | <div class="red">Red One</div>
// | <div class="red">Red Two</div>
// | </div>
var nl = dquery(query);
var content = this._normalize(this, this[0]);
for(var i = 0, node; node = nl[i]; i++){
this._place(content, node, "before", i > 0);
node.parentNode.removeChild(node);
}
return this; // dojo/NodeList
},
clone: function(){
// summary:
// Clones all the nodes in this NodeList and returns them as a new NodeList.
// description:
// Only the DOM nodes are cloned, not any attached event handlers.
// returns:
// a cloned set of the original nodes.
// example:
// assume a DOM created by this markup:
// | <div class="container">
// | <div class="red">Red One</div>
// | <div class="blue">Blue One</div>
// | <div class="red">Red Two</div>
// | <div class="blue">Blue Two</div>
// | </div>
// Running this code:
// | dojo.query(".red").clone().appendTo(".container");
// Results in this DOM structure:
// | <div class="container">
// | <div class="red">Red One</div>
// | <div class="blue">Blue One</div>
// | <div class="red">Red Two</div>
// | <div class="blue">Blue Two</div>
// | <div class="red">Red One</div>
// | <div class="red">Red Two</div>
// | </div>
//TODO: need option to clone events?
var ary = [];
for(var i = 0; i < this.length; i++){
ary.push(this._cloneNode(this[i]));
}
return this._wrap(ary, this, this._NodeListCtor); // dojo/NodeList
}
});
//set up html method if one does not exist
if(!NodeList.prototype.html){
NodeList.prototype.html = NodeList.prototype.innerHTML;
}
return NodeList;
});

View File

@@ -1,5 +1,5 @@
/*
Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
Copyright (c) 2004-2012, The Dojo Foundation All Rights Reserved.
Available via Academic Free License >= 2.1 OR the modified BSD license.
see: http://dojotoolkit.org/license for details
*/

View File

@@ -0,0 +1,503 @@
define("dojo/NodeList-traverse", ["./query", "./_base/lang", "./_base/array"], function(dquery, lang, array){
// module:
// dojo/NodeList-traverse
/*=====
return function(){
// summary:
// Adds chainable methods to dojo.query() / NodeList instances for traversing the DOM
};
=====*/
var NodeList = dquery.NodeList;
lang.extend(NodeList, {
_buildArrayFromCallback: function(/*Function*/ callback){
// summary:
// builds a new array of possibly differing size based on the input list.
// Since the returned array is likely of different size than the input array,
// the array's map function cannot be used.
var ary = [];
for(var i = 0; i < this.length; i++){
var items = callback.call(this[i], this[i], ary);
if(items){
ary = ary.concat(items);
}
}
return ary; //Array
},
_getUniqueAsNodeList: function(/*Array*/ nodes){
// summary:
// given a list of nodes, make sure only unique
// elements are returned as our NodeList object.
// Does not call _stash().
var ary = [];
//Using for loop for better speed.
for(var i = 0, node; node = nodes[i]; i++){
//Should be a faster way to do this. dojo.query has a private
//_zip function that may be inspirational, but there are pathways
//in query that force nozip?
if(node.nodeType == 1 && array.indexOf(ary, node) == -1){
ary.push(node);
}
}
return this._wrap(ary, null, this._NodeListCtor); // dojo/NodeList
},
_getUniqueNodeListWithParent: function(/*Array*/ nodes, /*String*/ query){
// summary:
// gets unique element nodes, filters them further
// with an optional query and then calls _stash to track parent NodeList.
var ary = this._getUniqueAsNodeList(nodes);
ary = (query ? dquery._filterResult(ary, query) : ary);
return ary._stash(this); // dojo/NodeList
},
_getRelatedUniqueNodes: function(/*String?*/ query, /*Function*/ callback){
// summary:
// cycles over all the nodes and calls a callback
// to collect nodes for a possible inclusion in a result.
// The callback will get two args: callback(node, ary),
// where ary is the array being used to collect the nodes.
return this._getUniqueNodeListWithParent(this._buildArrayFromCallback(callback), query); // dojo/NodeList
},
children: function(/*String?*/ query){
// summary:
// Returns all immediate child elements for nodes in this dojo/NodeList.
// Optionally takes a query to filter the child elements.
// description:
// .end() can be used on the returned dojo/NodeList to get back to the
// original dojo/NodeList.
// query:
// a CSS selector.
// returns:
// all immediate child elements for the nodes in this dojo/NodeList.
// example:
// assume a DOM created by this markup:
// | <div class="container">
// | <div class="red">Red One</div>
// | Some Text
// | <div class="blue">Blue One</div>
// | <div class="red">Red Two</div>
// | <div class="blue">Blue Two</div>
// | </div>
// Running this code:
// | dojo.query(".container").children();
// returns the four divs that are children of the container div.
// Running this code:
// | dojo.query(".container").children(".red");
// returns the two divs that have the class "red".
return this._getRelatedUniqueNodes(query, function(node, ary){
return lang._toArray(node.childNodes);
}); // dojo/NodeList
},
closest: function(/*String*/ query, /*String|DOMNode?*/ root){
// summary:
// Returns closest parent that matches query, including current node in this
// dojo/NodeList if it matches the query.
// description:
// .end() can be used on the returned dojo/NodeList to get back to the
// original dojo/NodeList.
// query:
// a CSS selector.
// root:
// If specified, query is relative to "root" rather than document body.
// returns:
// the closest parent that matches the query, including the current
// node in this dojo/NodeList if it matches the query.
// example:
// assume a DOM created by this markup:
// | <div class="container">
// | <div class="red">Red One</div>
// | Some Text
// | <div class="blue">Blue One</div>
// | <div class="red">Red Two</div>
// | <div class="blue">Blue Two</div>
// | </div>
// Running this code:
// | dojo.query(".red").closest(".container");
// returns the div with class "container".
return this._getRelatedUniqueNodes(null, function(node, ary){
do{
if(dquery._filterResult([node], query, root).length){
return node;
}
}while(node != root && (node = node.parentNode) && node.nodeType == 1);
return null; //To make rhino strict checking happy.
}); // dojo/NodeList
},
parent: function(/*String?*/ query){
// summary:
// Returns immediate parent elements for nodes in this dojo/NodeList.
// Optionally takes a query to filter the parent elements.
// description:
// .end() can be used on the returned dojo/NodeList to get back to the
// original dojo/NodeList.
// query:
// a CSS selector.
// returns:
// immediate parent elements for nodes in this dojo/NodeList.
// example:
// assume a DOM created by this markup:
// | <div class="container">
// | <div class="red">Red One</div>
// | <div class="blue first"><span class="text">Blue One</span></div>
// | <div class="red">Red Two</div>
// | <div class="blue"><span class="text">Blue Two</span></div>
// | </div>
// Running this code:
// | dojo.query(".text").parent();
// returns the two divs with class "blue".
// Running this code:
// | dojo.query(".text").parent(".first");
// returns the one div with class "blue" and "first".
return this._getRelatedUniqueNodes(query, function(node, ary){
return node.parentNode;
}); // dojo/NodeList
},
parents: function(/*String?*/ query){
// summary:
// Returns all parent elements for nodes in this dojo/NodeList.
// Optionally takes a query to filter the child elements.
// description:
// .end() can be used on the returned dojo/NodeList to get back to the
// original dojo/NodeList.
// query:
// a CSS selector.
// returns:
// all parent elements for nodes in this dojo/NodeList.
// example:
// assume a DOM created by this markup:
// | <div class="container">
// | <div class="red">Red One</div>
// | <div class="blue first"><span class="text">Blue One</span></div>
// | <div class="red">Red Two</div>
// | <div class="blue"><span class="text">Blue Two</span></div>
// | </div>
// Running this code:
// | dojo.query(".text").parents();
// returns the two divs with class "blue", the div with class "container",
// | the body element and the html element.
// Running this code:
// | dojo.query(".text").parents(".container");
// returns the one div with class "container".
return this._getRelatedUniqueNodes(query, function(node, ary){
var pary = [];
while(node.parentNode){
node = node.parentNode;
pary.push(node);
}
return pary;
}); // dojo/NodeList
},
siblings: function(/*String?*/ query){
// summary:
// Returns all sibling elements for nodes in this dojo/NodeList.
// Optionally takes a query to filter the sibling elements.
// description:
// .end() can be used on the returned dojo/NodeList to get back to the
// original dojo/NodeList.
// query:
// a CSS selector.
// returns:
// all sibling elements for nodes in this dojo/NodeList.
// example:
// assume a DOM created by this markup:
// | <div class="container">
// | <div class="red">Red One</div>
// | Some Text
// | <div class="blue first">Blue One</div>
// | <div class="red">Red Two</div>
// | <div class="blue">Blue Two</div>
// | </div>
// Running this code:
// | dojo.query(".first").siblings();
// returns the two divs with class "red" and the other div
// | with class "blue" that does not have "first".
// Running this code:
// | dojo.query(".first").siblings(".red");
// returns the two div with class "red".
return this._getRelatedUniqueNodes(query, function(node, ary){
var pary = [];
var nodes = (node.parentNode && node.parentNode.childNodes);
for(var i = 0; i < nodes.length; i++){
if(nodes[i] != node){
pary.push(nodes[i]);
}
}
return pary;
}); // dojo/NodeList
},
next: function(/*String?*/ query){
// summary:
// Returns the next element for nodes in this dojo/NodeList.
// Optionally takes a query to filter the next elements.
// description:
// .end() can be used on the returned dojo/NodeList to get back to the
// original dojo/NodeList.
// query:
// a CSS selector.
// returns:
// the next element for nodes in this dojo/NodeList.
// example:
// assume a DOM created by this markup:
// | <div class="container">
// | <div class="red">Red One</div>
// | Some Text
// | <div class="blue first">Blue One</div>
// | <div class="red">Red Two</div>
// | <div class="blue last">Blue Two</div>
// | </div>
// Running this code:
// | dojo.query(".first").next();
// returns the div with class "red" and has innerHTML of "Red Two".
// Running this code:
// | dojo.query(".last").next(".red");
// does not return any elements.
return this._getRelatedUniqueNodes(query, function(node, ary){
var next = node.nextSibling;
while(next && next.nodeType != 1){
next = next.nextSibling;
}
return next;
}); // dojo/NodeList
},
nextAll: function(/*String?*/ query){
// summary:
// Returns all sibling elements that come after the nodes in this dojo/NodeList.
// Optionally takes a query to filter the sibling elements.
// description:
// .end() can be used on the returned dojo/NodeList to get back to the
// original dojo/NodeList.
// query:
// a CSS selector.
// returns:
// all sibling elements that come after the nodes in this dojo/NodeList.
// example:
// assume a DOM created by this markup:
// | <div class="container">
// | <div class="red">Red One</div>
// | Some Text
// | <div class="blue first">Blue One</div>
// | <div class="red next">Red Two</div>
// | <div class="blue next">Blue Two</div>
// | </div>
// Running this code:
// | dojo.query(".first").nextAll();
// returns the two divs with class of "next".
// Running this code:
// | dojo.query(".first").nextAll(".red");
// returns the one div with class "red" and innerHTML "Red Two".
return this._getRelatedUniqueNodes(query, function(node, ary){
var pary = [];
var next = node;
while((next = next.nextSibling)){
if(next.nodeType == 1){
pary.push(next);
}
}
return pary;
}); // dojo/NodeList
},
prev: function(/*String?*/ query){
// summary:
// Returns the previous element for nodes in this dojo/NodeList.
// Optionally takes a query to filter the previous elements.
// description:
// .end() can be used on the returned dojo/NodeList to get back to the
// original dojo/NodeList.
// query:
// a CSS selector.
// returns:
// the previous element for nodes in this dojo/NodeList.
// example:
// assume a DOM created by this markup:
// | <div class="container">
// | <div class="red">Red One</div>
// | Some Text
// | <div class="blue first">Blue One</div>
// | <div class="red">Red Two</div>
// | <div class="blue">Blue Two</div>
// | </div>
// Running this code:
// | dojo.query(".first").prev();
// returns the div with class "red" and has innerHTML of "Red One".
// Running this code:
// | dojo.query(".first").prev(".blue");
// does not return any elements.
return this._getRelatedUniqueNodes(query, function(node, ary){
var prev = node.previousSibling;
while(prev && prev.nodeType != 1){
prev = prev.previousSibling;
}
return prev;
}); // dojo/NodeList
},
prevAll: function(/*String?*/ query){
// summary:
// Returns all sibling elements that come before the nodes in this dojo/NodeList.
// Optionally takes a query to filter the sibling elements.
// description:
// The returned nodes will be in reverse DOM order -- the first node in the list will
// be the node closest to the original node/NodeList.
// .end() can be used on the returned dojo/NodeList to get back to the
// original dojo/NodeList.
// query:
// a CSS selector.
// returns:
// all sibling elements that come before the nodes in this dojo/NodeList.
// example:
// assume a DOM created by this markup:
// | <div class="container">
// | <div class="red prev">Red One</div>
// | Some Text
// | <div class="blue prev">Blue One</div>
// | <div class="red second">Red Two</div>
// | <div class="blue">Blue Two</div>
// | </div>
// Running this code:
// | dojo.query(".second").prevAll();
// returns the two divs with class of "prev".
// Running this code:
// | dojo.query(".first").prevAll(".red");
// returns the one div with class "red prev" and innerHTML "Red One".
return this._getRelatedUniqueNodes(query, function(node, ary){
var pary = [];
var prev = node;
while((prev = prev.previousSibling)){
if(prev.nodeType == 1){
pary.push(prev);
}
}
return pary;
}); // dojo/NodeList
},
andSelf: function(){
// summary:
// Adds the nodes from the previous dojo/NodeList to the current dojo/NodeList.
// description:
// .end() can be used on the returned dojo/NodeList to get back to the
// original dojo/NodeList.
// example:
// assume a DOM created by this markup:
// | <div class="container">
// | <div class="red prev">Red One</div>
// | Some Text
// | <div class="blue prev">Blue One</div>
// | <div class="red second">Red Two</div>
// | <div class="blue">Blue Two</div>
// | </div>
// Running this code:
// | dojo.query(".second").prevAll().andSelf();
// returns the two divs with class of "prev", as well as the div with class "second".
return this.concat(this._parent); // dojo/NodeList
},
//Alternate methods for the :first/:last/:even/:odd pseudos.
first: function(){
// summary:
// Returns the first node in this dojo/NodeList as a dojo/NodeList.
// description:
// .end() can be used on the returned dojo/NodeList to get back to the
// original dojo/NodeList.
// returns:
// the first node in this dojo/NodeList
// example:
// assume a DOM created by this markup:
// | <div class="container">
// | <div class="red">Red One</div>
// | <div class="blue first">Blue One</div>
// | <div class="red">Red Two</div>
// | <div class="blue last">Blue Two</div>
// | </div>
// Running this code:
// | dojo.query(".blue").first();
// returns the div with class "blue" and "first".
return this._wrap(((this[0] && [this[0]]) || []), this); // dojo/NodeList
},
last: function(){
// summary:
// Returns the last node in this dojo/NodeList as a dojo/NodeList.
// description:
// .end() can be used on the returned dojo/NodeList to get back to the
// original dojo/NodeList.
// returns:
// the last node in this dojo/NodeList
// example:
// assume a DOM created by this markup:
// | <div class="container">
// | <div class="red">Red One</div>
// | <div class="blue first">Blue One</div>
// | <div class="red">Red Two</div>
// | <div class="blue last">Blue Two</div>
// | </div>
// Running this code:
// | dojo.query(".blue").last();
// returns the last div with class "blue",
return this._wrap((this.length ? [this[this.length - 1]] : []), this); // dojo/NodeList
},
even: function(){
// summary:
// Returns the even nodes in this dojo/NodeList as a dojo/NodeList.
// description:
// .end() can be used on the returned dojo/NodeList to get back to the
// original dojo/NodeList.
// returns:
// the even nodes in this dojo/NodeList
// example:
// assume a DOM created by this markup:
// | <div class="container">
// | <div class="interior red">Red One</div>
// | <div class="interior blue">Blue One</div>
// | <div class="interior red">Red Two</div>
// | <div class="interior blue">Blue Two</div>
// | </div>
// Running this code:
// | dojo.query(".interior").even();
// returns the two divs with class "blue"
return this.filter(function(item, i){
return i % 2 != 0;
}); // dojo/NodeList
},
odd: function(){
// summary:
// Returns the odd nodes in this dojo/NodeList as a dojo/NodeList.
// description:
// .end() can be used on the returned dojo/NodeList to get back to the
// original dojo/NodeList.
// returns:
// the odd nodes in this dojo/NodeList
// example:
// assume a DOM created by this markup:
// | <div class="container">
// | <div class="interior red">Red One</div>
// | <div class="interior blue">Blue One</div>
// | <div class="interior red">Red Two</div>
// | <div class="interior blue">Blue Two</div>
// | </div>
// Running this code:
// | dojo.query(".interior").odd();
// returns the two divs with class "red"
return this.filter(function(item, i){
return i % 2 == 0;
}); // dojo/NodeList
}
});
return NodeList;
});

8
lib/dojo/NodeList.js Normal file
View File

@@ -0,0 +1,8 @@
/*
Copyright (c) 2004-2012, The Dojo Foundation All Rights Reserved.
Available via Academic Free License >= 2.1 OR the modified BSD license.
see: http://dojotoolkit.org/license for details
*/
//>>built
define("dojo/NodeList",["./query"],function(_1){return _1.NodeList;});

View File

@@ -0,0 +1,6 @@
define("dojo/NodeList", ["./query"], function(query){
// This class is just for documentation purposes, so NodeList shows up well in the API viewer,
// and to simplify writing API doc for all the methods that take NodeList as a parameter, or return a NodeList.
return query.NodeList;
});

View File

@@ -21,13 +21,12 @@
// prevent re-definition of the OpenAjax object
if(!window["OpenAjax"]){
OpenAjax = new function(){
// summary: the OpenAjax hub
// description: see http://www.openajax.org/member/wiki/OpenAjax_Hub_Specification
// summary:
// the OpenAjax hub
// description:
// see http://www.openajax.org/member/wiki/OpenAjax_Hub_Specification
var t = true;
var f = false;
var g = window;
var libs;
var libs = {};
var ooh = "org.openajax.hub.";
var h = {};
@@ -36,7 +35,6 @@ if(!window["OpenAjax"]){
h.implVersion = "0.6";
h.specVersion = "0.6";
h.implExtraData = {};
var libs = {};
h.libraries = libs;
h.registerLibrary = function(prefix, nsURL, version, extra){
@@ -99,10 +97,8 @@ if(!window["OpenAjax"]){
}
if(typeof tree.c[token] == "undefined"){
tree.c[token] = { c: {}, s: [] };
this._subscribe(tree.c[token], path, index + 1, sub);
}else{
this._subscribe(tree.c[token], path, index + 1, sub);
}
this._subscribe(tree.c[token], path, index + 1, sub);
}
};
@@ -158,7 +154,7 @@ if(!window["OpenAjax"]){
else{
var callbacks = tree.s;
var max = callbacks.length;
for(var i = 0; i < max; i++)
for(var i = 0; i < max; i++){
if(sid == callbacks[i].sid){
if(this._pubDepth > 0){
callbacks[i].cb = null;
@@ -168,14 +164,15 @@ if(!window["OpenAjax"]){
callbacks.splice(i, 1);
return;
}
}
}
}
};
// The following function is provided for automatic testing purposes.
// It is not expected to be deployed in run-time OpenAjax Hub implementations.
h.reinit = function()
{
for (var lib in OpenAjax.hub.libraries) {
h.reinit = function(){
for (var lib in OpenAjax.hub.libraries){
delete OpenAjax.hub.libraries[lib];
}
OpenAjax.hub.registerLibrary("OpenAjax", "http://openajax.org/hub", "0.6", {});
@@ -186,8 +183,9 @@ if(!window["OpenAjax"]){
OpenAjax._cleanup = [];
OpenAjax._subIndex = 0;
OpenAjax._pubDepth = 0;
}
};
};
// Register the OpenAjax Hub itself as a library.
OpenAjax.hub.registerLibrary("OpenAjax", "http://openajax.org/hub", "0.6", {});

View File

@@ -1,8 +1,8 @@
/*
Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
Copyright (c) 2004-2012, The Dojo Foundation All Rights Reserved.
Available via Academic Free License >= 2.1 OR the modified BSD license.
see: http://dojotoolkit.org/license for details
*/
//>>built
define("dojo/Stateful",["./_base/kernel","./_base/declare","./_base/lang","./_base/array"],function(_1,_2,_3,_4){return _1.declare("dojo.Stateful",null,{postscript:function(_5){if(_5){_3.mixin(this,_5);}},get:function(_6){return this[_6];},set:function(_7,_8){if(typeof _7==="object"){for(var x in _7){this.set(x,_7[x]);}return this;}var _9=this[_7];this[_7]=_8;if(this._watchCallbacks){this._watchCallbacks(_7,_9,_8);}return this;},watch:function(_a,_b){var _c=this._watchCallbacks;if(!_c){var _d=this;_c=this._watchCallbacks=function(_e,_f,_10,_11){var _12=function(_13){if(_13){_13=_13.slice();for(var i=0,l=_13.length;i<l;i++){try{_13[i].call(_d,_e,_f,_10);}catch(e){console.error(e);}}}};_12(_c["_"+_e]);if(!_11){_12(_c["*"]);}};}if(!_b&&typeof _a==="function"){_b=_a;_a="*";}else{_a="_"+_a;}var _14=_c[_a];if(typeof _14!=="object"){_14=_c[_a]=[];}_14.push(_b);return {unwatch:function(){_14.splice(_4.indexOf(_14,_b),1);}};}});});
define("dojo/Stateful",["./_base/declare","./_base/lang","./_base/array","dojo/when"],function(_1,_2,_3,_4){return _1("dojo.Stateful",null,{_attrPairNames:{},_getAttrNames:function(_5){var _6=this._attrPairNames;if(_6[_5]){return _6[_5];}return (_6[_5]={s:"_"+_5+"Setter",g:"_"+_5+"Getter"});},postscript:function(_7){if(_7){this.set(_7);}},_get:function(_8,_9){return typeof this[_9.g]==="function"?this[_9.g]():this[_8];},get:function(_a){return this._get(_a,this._getAttrNames(_a));},set:function(_b,_c){if(typeof _b==="object"){for(var x in _b){if(_b.hasOwnProperty(x)&&x!="_watchCallbacks"){this.set(x,_b[x]);}}return this;}var _d=this._getAttrNames(_b),_e=this._get(_b,_d),_f=this[_d.s],_10;if(typeof _f==="function"){_10=_f.apply(this,Array.prototype.slice.call(arguments,1));}else{this[_b]=_c;}if(this._watchCallbacks){var _11=this;_4(_10,function(){_11._watchCallbacks(_b,_e,_c);});}return this;},_changeAttrValue:function(_12,_13){var _14=this.get(_12);this[_12]=_13;if(this._watchCallbacks){this._watchCallbacks(_12,_14,_13);}return this;},watch:function(_15,_16){var _17=this._watchCallbacks;if(!_17){var _18=this;_17=this._watchCallbacks=function(_19,_1a,_1b,_1c){var _1d=function(_1e){if(_1e){_1e=_1e.slice();for(var i=0,l=_1e.length;i<l;i++){_1e[i].call(_18,_19,_1a,_1b);}}};_1d(_17["_"+_19]);if(!_1c){_1d(_17["*"]);}};}if(!_16&&typeof _15==="function"){_16=_15;_15="*";}else{_15="_"+_15;}var _1f=_17[_15];if(typeof _1f!=="object"){_1f=_17[_15]=[];}_1f.push(_16);var _20={};_20.unwatch=_20.remove=function(){var _21=_3.indexOf(_1f,_16);if(_21>-1){_1f.splice(_21,1);}};return _20;}});});

View File

@@ -0,0 +1,213 @@
define("dojo/Stateful", ["./_base/declare", "./_base/lang", "./_base/array", "dojo/when"], function(declare, lang, array, when){
// module:
// dojo/Stateful
return declare("dojo.Stateful", null, {
// summary:
// Base class for objects that provide named properties with optional getter/setter
// control and the ability to watch for property changes
//
// The class also provides the functionality to auto-magically manage getters
// and setters for object attributes/properties.
//
// Getters and Setters should follow the format of _xxxGetter or _xxxSetter where
// the xxx is a name of the attribute to handle. So an attribute of "foo"
// would have a custom getter of _fooGetter and a custom setter of _fooSetter.
//
// example:
// | var obj = new dojo.Stateful();
// | obj.watch("foo", function(){
// | console.log("foo changed to " + this.get("foo"));
// | });
// | obj.set("foo","bar");
// _attrPairNames: Hash
// Used across all instances a hash to cache attribute names and their getter
// and setter names.
_attrPairNames: {},
_getAttrNames: function(name){
// summary:
// Helper function for get() and set().
// Caches attribute name values so we don't do the string ops every time.
// tags:
// private
var apn = this._attrPairNames;
if(apn[name]){ return apn[name]; }
return (apn[name] = {
s: "_" + name + "Setter",
g: "_" + name + "Getter"
});
},
postscript: function(/*Object?*/ params){
// Automatic setting of params during construction
if (params){ this.set(params); }
},
_get: function(name, names){
// summary:
// Private function that does a get based off a hash of names
// names:
// Hash of names of custom attributes
return typeof this[names.g] === "function" ? this[names.g]() : this[name];
},
get: function(/*String*/name){
// summary:
// Get a property on a Stateful instance.
// name:
// The property to get.
// returns:
// The property value on this Stateful instance.
// description:
// Get a named property on a Stateful object. The property may
// potentially be retrieved via a getter method in subclasses. In the base class
// this just retrieves the object's property.
// For example:
// | stateful = new dojo.Stateful({foo: 3});
// | stateful.get("foo") // returns 3
// | stateful.foo // returns 3
return this._get(name, this._getAttrNames(name)); //Any
},
set: function(/*String*/name, /*Object*/value){
// summary:
// Set a property on a Stateful instance
// name:
// The property to set.
// value:
// The value to set in the property.
// returns:
// The function returns this dojo.Stateful instance.
// description:
// Sets named properties on a stateful object and notifies any watchers of
// the property. A programmatic setter may be defined in subclasses.
// For example:
// | stateful = new dojo.Stateful();
// | stateful.watch(function(name, oldValue, value){
// | // this will be called on the set below
// | }
// | stateful.set(foo, 5);
//
// set() may also be called with a hash of name/value pairs, ex:
// | myObj.set({
// | foo: "Howdy",
// | bar: 3
// | })
// This is equivalent to calling set(foo, "Howdy") and set(bar, 3)
// If an object is used, iterate through object
if(typeof name === "object"){
for(var x in name){
if(name.hasOwnProperty(x) && x !="_watchCallbacks"){
this.set(x, name[x]);
}
}
return this;
}
var names = this._getAttrNames(name),
oldValue = this._get(name, names),
setter = this[names.s],
result;
if(typeof setter === "function"){
// use the explicit setter
result = setter.apply(this, Array.prototype.slice.call(arguments, 1));
}else{
// no setter so set attribute directly
this[name] = value;
}
if(this._watchCallbacks){
var self = this;
// If setter returned a promise, wait for it to complete, otherwise call watches immediatly
when(result, function(){
self._watchCallbacks(name, oldValue, value);
});
}
return this; // dojo/Stateful
},
_changeAttrValue: function(name, value){
// summary:
// Internal helper for directly changing an attribute value.
//
// name: String
// The property to set.
// value: Mixed
// The value to set in the property.
//
// description:
// Directly change the value of an attribute on an object, bypassing any
// accessor setter. Also handles the calling of watch and emitting events.
// It is designed to be used by descendent class when there are two values
// of attributes that are linked, but calling .set() is not appropriate.
var oldValue = this.get(name);
this[name] = value;
if(this._watchCallbacks){
this._watchCallbacks(name, oldValue, value);
}
return this; // dojo/Stateful
},
watch: function(/*String?*/name, /*Function*/callback){
// summary:
// Watches a property for changes
// name:
// Indicates the property to watch. This is optional (the callback may be the
// only parameter), and if omitted, all the properties will be watched
// returns:
// An object handle for the watch. The unwatch method of this object
// can be used to discontinue watching this property:
// | var watchHandle = obj.watch("foo", callback);
// | watchHandle.unwatch(); // callback won't be called now
// callback:
// The function to execute when the property changes. This will be called after
// the property has been changed. The callback will be called with the |this|
// set to the instance, the first argument as the name of the property, the
// second argument as the old value and the third argument as the new value.
var callbacks = this._watchCallbacks;
if(!callbacks){
var self = this;
callbacks = this._watchCallbacks = function(name, oldValue, value, ignoreCatchall){
var notify = function(propertyCallbacks){
if(propertyCallbacks){
propertyCallbacks = propertyCallbacks.slice();
for(var i = 0, l = propertyCallbacks.length; i < l; i++){
propertyCallbacks[i].call(self, name, oldValue, value);
}
}
};
notify(callbacks['_' + name]);
if(!ignoreCatchall){
notify(callbacks["*"]); // the catch-all
}
}; // we use a function instead of an object so it will be ignored by JSON conversion
}
if(!callback && typeof name === "function"){
callback = name;
name = "*";
}else{
// prepend with dash to prevent name conflicts with function (like "name" property)
name = '_' + name;
}
var propertyCallbacks = callbacks[name];
if(typeof propertyCallbacks !== "object"){
propertyCallbacks = callbacks[name] = [];
}
propertyCallbacks.push(callback);
// TODO: Remove unwatch in 2.0
var handle = {};
handle.unwatch = handle.remove = function(){
var index = array.indexOf(propertyCallbacks, callback);
if(index > -1){
propertyCallbacks.splice(index, 1);
}
};
return handle; //Object
}
});
});

View File

@@ -1,5 +1,5 @@
/*
Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
Copyright (c) 2004-2012, The Dojo Foundation All Rights Reserved.
Available via Academic Free License >= 2.1 OR the modified BSD license.
see: http://dojotoolkit.org/license for details
*/

View File

@@ -0,0 +1,214 @@
define("dojo/_base/Color", ["./kernel", "./lang", "./array", "./config"], function(dojo, lang, ArrayUtil, config){
var Color = dojo.Color = function(/*Array|String|Object*/ color){
// summary:
// Takes a named string, hex string, array of rgb or rgba values,
// an object with r, g, b, and a properties, or another `Color` object
// and creates a new Color instance to work from.
//
// example:
// Work with a Color instance:
// | var c = new Color();
// | c.setColor([0,0,0]); // black
// | var hex = c.toHex(); // #000000
//
// example:
// Work with a node's color:
// | var color = dojo.style("someNode", "backgroundColor");
// | var n = new Color(color);
// | // adjust the color some
// | n.r *= .5;
// | console.log(n.toString()); // rgb(128, 255, 255);
if(color){ this.setColor(color); }
};
// FIXME:
// there's got to be a more space-efficient way to encode or discover
// these!! Use hex?
Color.named = {
// summary:
// Dictionary list of all CSS named colors, by name. Values are 3-item arrays with corresponding RG and B values.
"black": [0,0,0],
"silver": [192,192,192],
"gray": [128,128,128],
"white": [255,255,255],
"maroon": [128,0,0],
"red": [255,0,0],
"purple": [128,0,128],
"fuchsia":[255,0,255],
"green": [0,128,0],
"lime": [0,255,0],
"olive": [128,128,0],
"yellow": [255,255,0],
"navy": [0,0,128],
"blue": [0,0,255],
"teal": [0,128,128],
"aqua": [0,255,255],
"transparent": config.transparentColor || [0,0,0,0]
};
lang.extend(Color, {
r: 255, g: 255, b: 255, a: 1,
_set: function(r, g, b, a){
var t = this; t.r = r; t.g = g; t.b = b; t.a = a;
},
setColor: function(/*Array|String|Object*/ color){
// summary:
// Takes a named string, hex string, array of rgb or rgba values,
// an object with r, g, b, and a properties, or another `Color` object
// and sets this color instance to that value.
//
// example:
// | var c = new Color(); // no color
// | c.setColor("#ededed"); // greyish
if(lang.isString(color)){
Color.fromString(color, this);
}else if(lang.isArray(color)){
Color.fromArray(color, this);
}else{
this._set(color.r, color.g, color.b, color.a);
if(!(color instanceof Color)){ this.sanitize(); }
}
return this; // Color
},
sanitize: function(){
// summary:
// Ensures the object has correct attributes
// description:
// the default implementation does nothing, include dojo.colors to
// augment it with real checks
return this; // Color
},
toRgb: function(){
// summary:
// Returns 3 component array of rgb values
// example:
// | var c = new Color("#000000");
// | console.log(c.toRgb()); // [0,0,0]
var t = this;
return [t.r, t.g, t.b]; // Array
},
toRgba: function(){
// summary:
// Returns a 4 component array of rgba values from the color
// represented by this object.
var t = this;
return [t.r, t.g, t.b, t.a]; // Array
},
toHex: function(){
// summary:
// Returns a CSS color string in hexadecimal representation
// example:
// | console.log(new Color([0,0,0]).toHex()); // #000000
var arr = ArrayUtil.map(["r", "g", "b"], function(x){
var s = this[x].toString(16);
return s.length < 2 ? "0" + s : s;
}, this);
return "#" + arr.join(""); // String
},
toCss: function(/*Boolean?*/ includeAlpha){
// summary:
// Returns a css color string in rgb(a) representation
// example:
// | var c = new Color("#FFF").toCss();
// | console.log(c); // rgb('255','255','255')
var t = this, rgb = t.r + ", " + t.g + ", " + t.b;
return (includeAlpha ? "rgba(" + rgb + ", " + t.a : "rgb(" + rgb) + ")"; // String
},
toString: function(){
// summary:
// Returns a visual representation of the color
return this.toCss(true); // String
}
});
Color.blendColors = dojo.blendColors = function(
/*Color*/ start,
/*Color*/ end,
/*Number*/ weight,
/*Color?*/ obj
){
// summary:
// Blend colors end and start with weight from 0 to 1, 0.5 being a 50/50 blend,
// can reuse a previously allocated Color object for the result
var t = obj || new Color();
ArrayUtil.forEach(["r", "g", "b", "a"], function(x){
t[x] = start[x] + (end[x] - start[x]) * weight;
if(x != "a"){ t[x] = Math.round(t[x]); }
});
return t.sanitize(); // Color
};
Color.fromRgb = dojo.colorFromRgb = function(/*String*/ color, /*Color?*/ obj){
// summary:
// Returns a `Color` instance from a string of the form
// "rgb(...)" or "rgba(...)". Optionally accepts a `Color`
// object to update with the parsed value and return instead of
// creating a new object.
// returns:
// A Color object. If obj is passed, it will be the return value.
var m = color.toLowerCase().match(/^rgba?\(([\s\.,0-9]+)\)/);
return m && Color.fromArray(m[1].split(/\s*,\s*/), obj); // Color
};
Color.fromHex = dojo.colorFromHex = function(/*String*/ color, /*Color?*/ obj){
// summary:
// Converts a hex string with a '#' prefix to a color object.
// Supports 12-bit #rgb shorthand. Optionally accepts a
// `Color` object to update with the parsed value.
//
// returns:
// A Color object. If obj is passed, it will be the return value.
//
// example:
// | var thing = dojo.colorFromHex("#ededed"); // grey, longhand
//
// example:
// | var thing = dojo.colorFromHex("#000"); // black, shorthand
var t = obj || new Color(),
bits = (color.length == 4) ? 4 : 8,
mask = (1 << bits) - 1;
color = Number("0x" + color.substr(1));
if(isNaN(color)){
return null; // Color
}
ArrayUtil.forEach(["b", "g", "r"], function(x){
var c = color & mask;
color >>= bits;
t[x] = bits == 4 ? 17 * c : c;
});
t.a = 1;
return t; // Color
};
Color.fromArray = dojo.colorFromArray = function(/*Array*/ a, /*Color?*/ obj){
// summary:
// Builds a `Color` from a 3 or 4 element array, mapping each
// element in sequence to the rgb(a) values of the color.
// example:
// | var myColor = dojo.colorFromArray([237,237,237,0.5]); // grey, 50% alpha
// returns:
// A Color object. If obj is passed, it will be the return value.
var t = obj || new Color();
t._set(Number(a[0]), Number(a[1]), Number(a[2]), Number(a[3]));
if(isNaN(t.a)){ t.a = 1; }
return t.sanitize(); // Color
};
Color.fromString = dojo.colorFromString = function(/*String*/ str, /*Color?*/ obj){
// summary:
// Parses `str` for a color value. Accepts hex, rgb, and rgba
// style color values.
// description:
// Acceptable input values for str may include arrays of any form
// accepted by dojo.colorFromArray, hex strings such as "#aaaaaa", or
// rgb or rgba strings such as "rgb(133, 200, 16)" or "rgba(10, 10,
// 10, 50)"
// returns:
// A Color object. If obj is passed, it will be the return value.
var a = Color.named[str];
return a && Color.fromArray(a, obj) || Color.fromRgb(str, obj) || Color.fromHex(str, obj); // Color
};
return Color;
});

View File

@@ -1,8 +1,8 @@
/*
Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
Copyright (c) 2004-2012, The Dojo Foundation All Rights Reserved.
Available via Academic Free License >= 2.1 OR the modified BSD license.
see: http://dojotoolkit.org/license for details
*/
//>>built
define("dojo/_base/Deferred",["./kernel","./lang"],function(_1,_2){var _3=function(){};var _4=Object.freeze||function(){};_1.Deferred=function(_5){var _6,_7,_8,_9,_a;var _b=(this.promise={});function _c(_d){if(_7){throw new Error("This deferred has already been resolved");}_6=_d;_7=true;_e();};function _e(){var _f;while(!_f&&_a){var _10=_a;_a=_a.next;if((_f=(_10.progress==_3))){_7=false;}var _11=(_8?_10.error:_10.resolved);if(_11){try{var _12=_11(_6);if(_12&&typeof _12.then==="function"){_12.then(_2.hitch(_10.deferred,"resolve"),_2.hitch(_10.deferred,"reject"),_2.hitch(_10.deferred,"progress"));continue;}var _13=_f&&_12===undefined;if(_f&&!_13){_8=_12 instanceof Error;}_10.deferred[_13&&_8?"reject":"resolve"](_13?_6:_12);}catch(e){_10.deferred.reject(e);}}else{if(_8){_10.deferred.reject(_6);}else{_10.deferred.resolve(_6);}}}};this.resolve=this.callback=function(_14){this.fired=0;this.results=[_14,null];_c(_14);};this.reject=this.errback=function(_15){_8=true;this.fired=1;_c(_15);this.results=[null,_15];if(!_15||_15.log!==false){(_1.config.deferredOnError||function(x){console.error(x);})(_15);}};this.progress=function(_16){var _17=_a;while(_17){var _18=_17.progress;_18&&_18(_16);_17=_17.next;}};this.addCallbacks=function(_19,_1a){this.then(_19,_1a,_3);return this;};_b.then=this.then=function(_1b,_1c,_1d){var _1e=_1d==_3?this:new _1.Deferred(_b.cancel);var _1f={resolved:_1b,error:_1c,progress:_1d,deferred:_1e};if(_a){_9=_9.next=_1f;}else{_a=_9=_1f;}if(_7){_e();}return _1e.promise;};var _20=this;_b.cancel=this.cancel=function(){if(!_7){var _21=_5&&_5(_20);if(!_7){if(!(_21 instanceof Error)){_21=new Error(_21);}_21.log=false;_20.reject(_21);}}};_4(_b);};_2.extend(_1.Deferred,{addCallback:function(_22){return this.addCallbacks(_2.hitch.apply(_1,arguments));},addErrback:function(_23){return this.addCallbacks(null,_2.hitch.apply(_1,arguments));},addBoth:function(_24){var _25=_2.hitch.apply(_1,arguments);return this.addCallbacks(_25,_25);},fired:-1});_1.Deferred.when=_1.when=function(_26,_27,_28,_29){if(_26&&typeof _26.then==="function"){return _26.then(_27,_28,_29);}return _27?_27(_26):_26;};return _1.Deferred;});
define("dojo/_base/Deferred",["./kernel","../Deferred","../promise/Promise","../errors/CancelError","../has","./lang","../when"],function(_1,_2,_3,_4,_5,_6,_7){var _8=function(){};var _9=Object.freeze||function(){};var _a=_1.Deferred=function(_b){var _c,_d,_e,_f,_10;var _11=(this.promise=new _3());function _12(_13){if(_d){throw new Error("This deferred has already been resolved");}_c=_13;_d=true;_14();};function _14(){var _15;while(!_15&&_10){var _16=_10;_10=_10.next;if((_15=(_16.progress==_8))){_d=false;}var _17=(_e?_16.error:_16.resolved);if(_5("config-useDeferredInstrumentation")){if(_e&&_2.instrumentRejected){_2.instrumentRejected(_c,!!_17);}}if(_17){try{var _18=_17(_c);if(_18&&typeof _18.then==="function"){_18.then(_6.hitch(_16.deferred,"resolve"),_6.hitch(_16.deferred,"reject"),_6.hitch(_16.deferred,"progress"));continue;}var _19=_15&&_18===undefined;if(_15&&!_19){_e=_18 instanceof Error;}_16.deferred[_19&&_e?"reject":"resolve"](_19?_c:_18);}catch(e){_16.deferred.reject(e);}}else{if(_e){_16.deferred.reject(_c);}else{_16.deferred.resolve(_c);}}}};this.resolve=this.callback=function(_1a){this.fired=0;this.results=[_1a,null];_12(_1a);};this.reject=this.errback=function(_1b){_e=true;this.fired=1;if(_5("config-useDeferredInstrumentation")){if(_2.instrumentRejected){_2.instrumentRejected(_1b,!!_10);}}_12(_1b);this.results=[null,_1b];};this.progress=function(_1c){var _1d=_10;while(_1d){var _1e=_1d.progress;_1e&&_1e(_1c);_1d=_1d.next;}};this.addCallbacks=function(_1f,_20){this.then(_1f,_20,_8);return this;};_11.then=this.then=function(_21,_22,_23){var _24=_23==_8?this:new _a(_11.cancel);var _25={resolved:_21,error:_22,progress:_23,deferred:_24};if(_10){_f=_f.next=_25;}else{_10=_f=_25;}if(_d){_14();}return _24.promise;};var _26=this;_11.cancel=this.cancel=function(){if(!_d){var _27=_b&&_b(_26);if(!_d){if(!(_27 instanceof Error)){_27=new _4(_27);}_27.log=false;_26.reject(_27);}}};_9(_11);};_6.extend(_a,{addCallback:function(_28){return this.addCallbacks(_6.hitch.apply(_1,arguments));},addErrback:function(_29){return this.addCallbacks(null,_6.hitch.apply(_1,arguments));},addBoth:function(_2a){var _2b=_6.hitch.apply(_1,arguments);return this.addCallbacks(_2b,_2b);},fired:-1});_a.when=_1.when=_7;return _a;});

View File

@@ -0,0 +1,349 @@
define("dojo/_base/Deferred", [
"./kernel",
"../Deferred",
"../promise/Promise",
"../errors/CancelError",
"../has",
"./lang",
"../when"
], function(dojo, NewDeferred, Promise, CancelError, has, lang, when){
// module:
// dojo/_base/Deferred
var mutator = function(){};
var freeze = Object.freeze || function(){};
// A deferred provides an API for creating and resolving a promise.
var Deferred = dojo.Deferred = function(/*Function?*/ canceller){
// summary:
// Deprecated. This module defines the legacy dojo/_base/Deferred API.
// New code should use dojo/Deferred instead.
// description:
// The Deferred API is based on the concept of promises that provide a
// generic interface into the eventual completion of an asynchronous action.
// The motivation for promises fundamentally is about creating a
// separation of concerns that allows one to achieve the same type of
// call patterns and logical data flow in asynchronous code as can be
// achieved in synchronous code. Promises allows one
// to be able to call a function purely with arguments needed for
// execution, without conflating the call with concerns of whether it is
// sync or async. One shouldn't need to alter a call's arguments if the
// implementation switches from sync to async (or vice versa). By having
// async functions return promises, the concerns of making the call are
// separated from the concerns of asynchronous interaction (which are
// handled by the promise).
//
// The Deferred is a type of promise that provides methods for fulfilling the
// promise with a successful result or an error. The most important method for
// working with Dojo's promises is the then() method, which follows the
// CommonJS proposed promise API. An example of using a Dojo promise:
//
// | var resultingPromise = someAsyncOperation.then(function(result){
// | ... handle result ...
// | },
// | function(error){
// | ... handle error ...
// | });
//
// The .then() call returns a new promise that represents the result of the
// execution of the callback. The callbacks will never affect the original promises value.
//
// The Deferred instances also provide the following functions for backwards compatibility:
//
// - addCallback(handler)
// - addErrback(handler)
// - callback(result)
// - errback(result)
//
// Callbacks are allowed to return promises themselves, so
// you can build complicated sequences of events with ease.
//
// The creator of the Deferred may specify a canceller. The canceller
// is a function that will be called if Deferred.cancel is called
// before the Deferred fires. You can use this to implement clean
// aborting of an XMLHttpRequest, etc. Note that cancel will fire the
// deferred with a CancelledError (unless your canceller returns
// another kind of error), so the errbacks should be prepared to
// handle that error for cancellable Deferreds.
// example:
// | var deferred = new Deferred();
// | setTimeout(function(){ deferred.callback({success: true}); }, 1000);
// | return deferred;
// example:
// Deferred objects are often used when making code asynchronous. It
// may be easiest to write functions in a synchronous manner and then
// split code using a deferred to trigger a response to a long-lived
// operation. For example, instead of register a callback function to
// denote when a rendering operation completes, the function can
// simply return a deferred:
//
// | // callback style:
// | function renderLotsOfData(data, callback){
// | var success = false
// | try{
// | for(var x in data){
// | renderDataitem(data[x]);
// | }
// | success = true;
// | }catch(e){ }
// | if(callback){
// | callback(success);
// | }
// | }
//
// | // using callback style
// | renderLotsOfData(someDataObj, function(success){
// | // handles success or failure
// | if(!success){
// | promptUserToRecover();
// | }
// | });
// | // NOTE: no way to add another callback here!!
// example:
// Using a Deferred doesn't simplify the sending code any, but it
// provides a standard interface for callers and senders alike,
// providing both with a simple way to service multiple callbacks for
// an operation and freeing both sides from worrying about details
// such as "did this get called already?". With Deferreds, new
// callbacks can be added at any time.
//
// | // Deferred style:
// | function renderLotsOfData(data){
// | var d = new Deferred();
// | try{
// | for(var x in data){
// | renderDataitem(data[x]);
// | }
// | d.callback(true);
// | }catch(e){
// | d.errback(new Error("rendering failed"));
// | }
// | return d;
// | }
//
// | // using Deferred style
// | renderLotsOfData(someDataObj).then(null, function(){
// | promptUserToRecover();
// | });
// | // NOTE: addErrback and addCallback both return the Deferred
// | // again, so we could chain adding callbacks or save the
// | // deferred for later should we need to be notified again.
// example:
// In this example, renderLotsOfData is synchronous and so both
// versions are pretty artificial. Putting the data display on a
// timeout helps show why Deferreds rock:
//
// | // Deferred style and async func
// | function renderLotsOfData(data){
// | var d = new Deferred();
// | setTimeout(function(){
// | try{
// | for(var x in data){
// | renderDataitem(data[x]);
// | }
// | d.callback(true);
// | }catch(e){
// | d.errback(new Error("rendering failed"));
// | }
// | }, 100);
// | return d;
// | }
//
// | // using Deferred style
// | renderLotsOfData(someDataObj).then(null, function(){
// | promptUserToRecover();
// | });
//
// Note that the caller doesn't have to change his code at all to
// handle the asynchronous case.
var result, finished, isError, head, nextListener;
var promise = (this.promise = new Promise());
function complete(value){
if(finished){
throw new Error("This deferred has already been resolved");
}
result = value;
finished = true;
notify();
}
function notify(){
var mutated;
while(!mutated && nextListener){
var listener = nextListener;
nextListener = nextListener.next;
if((mutated = (listener.progress == mutator))){ // assignment and check
finished = false;
}
var func = (isError ? listener.error : listener.resolved);
if(has("config-useDeferredInstrumentation")){
if(isError && NewDeferred.instrumentRejected){
NewDeferred.instrumentRejected(result, !!func);
}
}
if(func){
try{
var newResult = func(result);
if (newResult && typeof newResult.then === "function"){
newResult.then(lang.hitch(listener.deferred, "resolve"), lang.hitch(listener.deferred, "reject"), lang.hitch(listener.deferred, "progress"));
continue;
}
var unchanged = mutated && newResult === undefined;
if(mutated && !unchanged){
isError = newResult instanceof Error;
}
listener.deferred[unchanged && isError ? "reject" : "resolve"](unchanged ? result : newResult);
}catch(e){
listener.deferred.reject(e);
}
}else{
if(isError){
listener.deferred.reject(result);
}else{
listener.deferred.resolve(result);
}
}
}
}
// calling resolve will resolve the promise
this.resolve = this.callback = function(value){
// summary:
// Fulfills the Deferred instance successfully with the provide value
this.fired = 0;
this.results = [value, null];
complete(value);
};
// calling error will indicate that the promise failed
this.reject = this.errback = function(error){
// summary:
// Fulfills the Deferred instance as an error with the provided error
isError = true;
this.fired = 1;
if(has("config-useDeferredInstrumentation")){
if(NewDeferred.instrumentRejected){
NewDeferred.instrumentRejected(error, !!nextListener);
}
}
complete(error);
this.results = [null, error];
};
// call progress to provide updates on the progress on the completion of the promise
this.progress = function(update){
// summary:
// Send progress events to all listeners
var listener = nextListener;
while(listener){
var progress = listener.progress;
progress && progress(update);
listener = listener.next;
}
};
this.addCallbacks = function(callback, errback){
// summary:
// Adds callback and error callback for this deferred instance.
// callback: Function?
// The callback attached to this deferred object.
// errback: Function?
// The error callback attached to this deferred object.
// returns:
// Returns this deferred object.
this.then(callback, errback, mutator);
return this; // Deferred
};
// provide the implementation of the promise
promise.then = this.then = function(/*Function?*/resolvedCallback, /*Function?*/errorCallback, /*Function?*/progressCallback){
// summary:
// Adds a fulfilledHandler, errorHandler, and progressHandler to be called for
// completion of a promise. The fulfilledHandler is called when the promise
// is fulfilled. The errorHandler is called when a promise fails. The
// progressHandler is called for progress events. All arguments are optional
// and non-function values are ignored. The progressHandler is not only an
// optional argument, but progress events are purely optional. Promise
// providers are not required to ever create progress events.
//
// This function will return a new promise that is fulfilled when the given
// fulfilledHandler or errorHandler callback is finished. This allows promise
// operations to be chained together. The value returned from the callback
// handler is the fulfillment value for the returned promise. If the callback
// throws an error, the returned promise will be moved to failed state.
//
// returns:
// Returns a new promise that represents the result of the
// execution of the callback. The callbacks will never affect the original promises value.
// example:
// An example of using a CommonJS compliant promise:
// | asyncComputeTheAnswerToEverything().
// | then(addTwo).
// | then(printResult, onError);
// | >44
//
var returnDeferred = progressCallback == mutator ? this : new Deferred(promise.cancel);
var listener = {
resolved: resolvedCallback,
error: errorCallback,
progress: progressCallback,
deferred: returnDeferred
};
if(nextListener){
head = head.next = listener;
}
else{
nextListener = head = listener;
}
if(finished){
notify();
}
return returnDeferred.promise; // Promise
};
var deferred = this;
promise.cancel = this.cancel = function(){
// summary:
// Cancels the asynchronous operation
if(!finished){
var error = canceller && canceller(deferred);
if(!finished){
if (!(error instanceof Error)){
error = new CancelError(error);
}
error.log = false;
deferred.reject(error);
}
}
};
freeze(promise);
};
lang.extend(Deferred, {
addCallback: function(/*Function*/ callback){
// summary:
// Adds successful callback for this deferred instance.
// returns:
// Returns this deferred object.
return this.addCallbacks(lang.hitch.apply(dojo, arguments)); // Deferred
},
addErrback: function(/*Function*/ errback){
// summary:
// Adds error callback for this deferred instance.
// returns:
// Returns this deferred object.
return this.addCallbacks(null, lang.hitch.apply(dojo, arguments)); // Deferred
},
addBoth: function(/*Function*/ callback){
// summary:
// Add handler as both successful callback and error callback for this deferred instance.
// returns:
// Returns this deferred object.
var enclosed = lang.hitch.apply(dojo, arguments);
return this.addCallbacks(enclosed, enclosed); // Deferred
},
fired: -1
});
Deferred.when = dojo.when = when;
return Deferred;
});

View File

@@ -1,8 +1,8 @@
/*
Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
Copyright (c) 2004-2012, The Dojo Foundation All Rights Reserved.
Available via Academic Free License >= 2.1 OR the modified BSD license.
see: http://dojotoolkit.org/license for details
*/
//>>built
define("dojo/_base/NodeList",["./kernel","../query","./array","./html","../NodeList-dom"],function(_1,_2,_3){var _4=_2.NodeList;var _5=_4.prototype;_5.connect=_4._adaptAsForEach(function(){return _1.connect.apply(this,arguments);});_5.coords=_4._adaptAsMap(_1.coords);_4.events=["blur","focus","change","click","error","keydown","keypress","keyup","load","mousedown","mouseenter","mouseleave","mousemove","mouseout","mouseover","mouseup","submit"];_3.forEach(_4.events,function(_6){var _7="on"+_6;_5[_7]=function(a,b){return this.connect(_7,a,b);};});_1.NodeList=_4;return _1.NodeList;});
define("dojo/_base/NodeList",["./kernel","../query","./array","./html","../NodeList-dom"],function(_1,_2,_3){var _4=_2.NodeList,_5=_4.prototype;_5.connect=_4._adaptAsForEach(function(){return _1.connect.apply(this,arguments);});_5.coords=_4._adaptAsMap(_1.coords);_4.events=["blur","focus","change","click","error","keydown","keypress","keyup","load","mousedown","mouseenter","mouseleave","mousemove","mouseout","mouseover","mouseup","submit"];_3.forEach(_4.events,function(_6){var _7="on"+_6;_5[_7]=function(a,b){return this.connect(_7,a,b);};});_1.NodeList=_4;return _4;});

View File

@@ -0,0 +1,110 @@
define("dojo/_base/NodeList", ["./kernel", "../query", "./array", "./html", "../NodeList-dom"], function(dojo, query, array){
// module:
// dojo/_base/NodeList
/*=====
return {
// summary:
// This module extends dojo/NodeList with the legacy connect(), coords(),
// blur(), focus(), change(), click(), error(), keydown(), keypress(),
// keyup(), load(), mousedown(), mouseenter(), mouseleave(), mousemove(),
// mouseout(), mouseover(), mouseup(), and submit() methods.
};
=====*/
var NodeList = query.NodeList,
nlp = NodeList.prototype;
nlp.connect = NodeList._adaptAsForEach(function(){
// don't bind early to dojo.connect since we no longer explicitly depend on it
return dojo.connect.apply(this, arguments);
});
/*=====
nlp.connect = function(methodName, objOrFunc, funcName){
// summary:
// Attach event handlers to every item of the NodeList. Uses dojo.connect()
// so event properties are normalized.
//
// Application must manually require() "dojo/_base/connect" before using this method.
// methodName: String
// the name of the method to attach to. For DOM events, this should be
// the lower-case name of the event
// objOrFunc: Object|Function|String
// if 2 arguments are passed (methodName, objOrFunc), objOrFunc should
// reference a function or be the name of the function in the global
// namespace to attach. If 3 arguments are provided
// (methodName, objOrFunc, funcName), objOrFunc must be the scope to
// locate the bound function in
// funcName: String?
// optional. A string naming the function in objOrFunc to bind to the
// event. May also be a function reference.
// example:
// add an onclick handler to every button on the page
// | query("div:nth-child(odd)").connect("onclick", function(e){
// | console.log("clicked!");
// | });
// example:
// attach foo.bar() to every odd div's onmouseover
// | query("div:nth-child(odd)").connect("onmouseover", foo, "bar");
return null; // NodeList
};
=====*/
nlp.coords = NodeList._adaptAsMap(dojo.coords);
/*=====
nlp.coords = function(){
// summary:
// Deprecated: Use position() for border-box x/y/w/h
// or marginBox() for margin-box w/h/l/t.
// Returns the box objects of all elements in a node list as
// an Array (*not* a NodeList). Acts like `domGeom.coords`, though assumes
// the node passed is each node in this list.
return []; // Array
};
=====*/
NodeList.events = [
// summary:
// list of all DOM events used in NodeList
"blur", "focus", "change", "click", "error", "keydown", "keypress",
"keyup", "load", "mousedown", "mouseenter", "mouseleave", "mousemove",
"mouseout", "mouseover", "mouseup", "submit"
];
// FIXME: pseudo-doc the above automatically generated on-event functions
// syntactic sugar for DOM events
array.forEach(NodeList.events, function(evt){
var _oe = "on" + evt;
nlp[_oe] = function(a, b){
return this.connect(_oe, a, b);
};
// FIXME: should these events trigger publishes?
/*
return (a ? this.connect(_oe, a, b) :
this.forEach(function(n){
// FIXME:
// listeners get buried by
// addEventListener and can't be dug back
// out to be triggered externally.
// see:
// http://developer.mozilla.org/en/docs/DOM:element
console.log(n, evt, _oe);
// FIXME: need synthetic event support!
var _e = { target: n, faux: true, type: evt };
// dojo._event_listener._synthesizeEvent({}, { target: n, faux: true, type: evt });
try{ n[evt](_e); }catch(e){ console.log(e); }
try{ n[_oe](_e); }catch(e){ console.log(e); }
})
);
*/
}
);
dojo.NodeList = NodeList;
return NodeList;
});

View File

@@ -1,8 +1,8 @@
/*
Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
Copyright (c) 2004-2012, The Dojo Foundation All Rights Reserved.
Available via Academic Free License >= 2.1 OR the modified BSD license.
see: http://dojotoolkit.org/license for details
*/
//>>built
define("dojo/_base/array",["./kernel","../has","./lang"],function(_1,_2,_3){var _4={},u,_5;function _6(){_4={};};function _7(fn){return _4[fn]=new Function("item","index","array",fn);};function _8(_9){var _a=!_9;return function(a,fn,o){var i=0,l=a&&a.length||0,_b;if(l&&typeof a=="string"){a=a.split("");}if(typeof fn=="string"){fn=_4[fn]||_7(fn);}if(o){for(;i<l;++i){_b=!fn.call(o,a[i],i,a);if(_9^_b){return !_b;}}}else{for(;i<l;++i){_b=!fn(a[i],i,a);if(_9^_b){return !_b;}}}return _a;};};function _c(up){var _d=1,_e=0,_f=0;if(!up){_d=_e=_f=-1;}return function(a,x,_10,_11){if(_11&&_d>0){return _5.lastIndexOf(a,x,_10);}var l=a&&a.length||0,end=up?l+_f:_e,i;if(_10===u){i=up?_e:l+_f;}else{if(_10<0){i=l+_10;if(i<0){i=_e;}}else{i=_10>=l?l+_f:_10;}}if(l&&typeof a=="string"){a=a.split("");}for(;i!=end;i+=_d){if(a[i]==x){return i;}}return -1;};};function _12(a,fn,o){var i=0,l=a&&a.length||0;if(l&&typeof a=="string"){a=a.split("");}if(typeof fn=="string"){fn=_4[fn]||_7(fn);}if(o){for(;i<l;++i){fn.call(o,a[i],i,a);}}else{for(;i<l;++i){fn(a[i],i,a);}}};function map(a,fn,o,Ctr){var i=0,l=a&&a.length||0,out=new (Ctr||Array)(l);if(l&&typeof a=="string"){a=a.split("");}if(typeof fn=="string"){fn=_4[fn]||_7(fn);}if(o){for(;i<l;++i){out[i]=fn.call(o,a[i],i,a);}}else{for(;i<l;++i){out[i]=fn(a[i],i,a);}}return out;};function _13(a,fn,o){var i=0,l=a&&a.length||0,out=[],_14;if(l&&typeof a=="string"){a=a.split("");}if(typeof fn=="string"){fn=_4[fn]||_7(fn);}if(o){for(;i<l;++i){_14=a[i];if(fn.call(o,_14,i,a)){out.push(_14);}}}else{for(;i<l;++i){_14=a[i];if(fn(_14,i,a)){out.push(_14);}}}return out;};_5={every:_8(false),some:_8(true),indexOf:_c(true),lastIndexOf:_c(false),forEach:_12,map:map,filter:_13,clearCache:_6};1&&_3.mixin(_1,_5);return _5;});
define("dojo/_base/array",["./kernel","../has","./lang"],function(_1,_2,_3){var _4={},u;function _5(fn){return _4[fn]=new Function("item","index","array",fn);};function _6(_7){var _8=!_7;return function(a,fn,o){var i=0,l=a&&a.length||0,_9;if(l&&typeof a=="string"){a=a.split("");}if(typeof fn=="string"){fn=_4[fn]||_5(fn);}if(o){for(;i<l;++i){_9=!fn.call(o,a[i],i,a);if(_7^_9){return !_9;}}}else{for(;i<l;++i){_9=!fn(a[i],i,a);if(_7^_9){return !_9;}}}return _8;};};function _a(up){var _b=1,_c=0,_d=0;if(!up){_b=_c=_d=-1;}return function(a,x,_e,_f){if(_f&&_b>0){return _10.lastIndexOf(a,x,_e);}var l=a&&a.length||0,end=up?l+_d:_c,i;if(_e===u){i=up?_c:l+_d;}else{if(_e<0){i=l+_e;if(i<0){i=_c;}}else{i=_e>=l?l+_d:_e;}}if(l&&typeof a=="string"){a=a.split("");}for(;i!=end;i+=_b){if(a[i]==x){return i;}}return -1;};};var _10={every:_6(false),some:_6(true),indexOf:_a(true),lastIndexOf:_a(false),forEach:function(arr,_11,_12){var i=0,l=arr&&arr.length||0;if(l&&typeof arr=="string"){arr=arr.split("");}if(typeof _11=="string"){_11=_4[_11]||_5(_11);}if(_12){for(;i<l;++i){_11.call(_12,arr[i],i,arr);}}else{for(;i<l;++i){_11(arr[i],i,arr);}}},map:function(arr,_13,_14,Ctr){var i=0,l=arr&&arr.length||0,out=new (Ctr||Array)(l);if(l&&typeof arr=="string"){arr=arr.split("");}if(typeof _13=="string"){_13=_4[_13]||_5(_13);}if(_14){for(;i<l;++i){out[i]=_13.call(_14,arr[i],i,arr);}}else{for(;i<l;++i){out[i]=_13(arr[i],i,arr);}}return out;},filter:function(arr,_15,_16){var i=0,l=arr&&arr.length||0,out=[],_17;if(l&&typeof arr=="string"){arr=arr.split("");}if(typeof _15=="string"){_15=_4[_15]||_5(_15);}if(_16){for(;i<l;++i){_17=arr[i];if(_15.call(_16,_17,i,arr)){out.push(_17);}}}else{for(;i<l;++i){_17=arr[i];if(_15(_17,i,arr)){out.push(_17);}}}return out;},clearCache:function(){_4={};}};1&&_3.mixin(_1,_10);return _10;});

View File

@@ -0,0 +1,343 @@
define("dojo/_base/array", ["./kernel", "../has", "./lang"], function(dojo, has, lang){
// module:
// dojo/_base/array
// our old simple function builder stuff
var cache = {}, u;
function buildFn(fn){
return cache[fn] = new Function("item", "index", "array", fn); // Function
}
// magic snippet: if(typeof fn == "string") fn = cache[fn] || buildFn(fn);
// every & some
function everyOrSome(some){
var every = !some;
return function(a, fn, o){
var i = 0, l = a && a.length || 0, result;
if(l && typeof a == "string") a = a.split("");
if(typeof fn == "string") fn = cache[fn] || buildFn(fn);
if(o){
for(; i < l; ++i){
result = !fn.call(o, a[i], i, a);
if(some ^ result){
return !result;
}
}
}else{
for(; i < l; ++i){
result = !fn(a[i], i, a);
if(some ^ result){
return !result;
}
}
}
return every; // Boolean
};
}
// indexOf, lastIndexOf
function index(up){
var delta = 1, lOver = 0, uOver = 0;
if(!up){
delta = lOver = uOver = -1;
}
return function(a, x, from, last){
if(last && delta > 0){
// TODO: why do we use a non-standard signature? why do we need "last"?
return array.lastIndexOf(a, x, from);
}
var l = a && a.length || 0, end = up ? l + uOver : lOver, i;
if(from === u){
i = up ? lOver : l + uOver;
}else{
if(from < 0){
i = l + from;
if(i < 0){
i = lOver;
}
}else{
i = from >= l ? l + uOver : from;
}
}
if(l && typeof a == "string") a = a.split("");
for(; i != end; i += delta){
if(a[i] == x){
return i; // Number
}
}
return -1; // Number
};
}
var array = {
// summary:
// The Javascript v1.6 array extensions.
every: everyOrSome(false),
/*=====
every: function(arr, callback, thisObject){
// summary:
// Determines whether or not every item in arr satisfies the
// condition implemented by callback.
// arr: Array|String
// the array to iterate on. If a string, operates on individual characters.
// callback: Function|String
// a function is invoked with three arguments: item, index,
// and array and returns true if the condition is met.
// thisObject: Object?
// may be used to scope the call to callback
// returns: Boolean
// description:
// This function corresponds to the JavaScript 1.6 Array.every() method, with one difference: when
// run over sparse arrays, this implementation passes the "holes" in the sparse array to
// the callback function with a value of undefined. JavaScript 1.6's every skips the holes in the sparse array.
// For more details, see:
// https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/every
// example:
// | // returns false
// | array.every([1, 2, 3, 4], function(item){ return item>1; });
// example:
// | // returns true
// | array.every([1, 2, 3, 4], function(item){ return item>0; });
},
=====*/
some: everyOrSome(true),
/*=====
some: function(arr, callback, thisObject){
// summary:
// Determines whether or not any item in arr satisfies the
// condition implemented by callback.
// arr: Array|String
// the array to iterate over. If a string, operates on individual characters.
// callback: Function|String
// a function is invoked with three arguments: item, index,
// and array and returns true if the condition is met.
// thisObject: Object?
// may be used to scope the call to callback
// returns: Boolean
// description:
// This function corresponds to the JavaScript 1.6 Array.some() method, with one difference: when
// run over sparse arrays, this implementation passes the "holes" in the sparse array to
// the callback function with a value of undefined. JavaScript 1.6's some skips the holes in the sparse array.
// For more details, see:
// https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/some
// example:
// | // is true
// | array.some([1, 2, 3, 4], function(item){ return item>1; });
// example:
// | // is false
// | array.some([1, 2, 3, 4], function(item){ return item<1; });
},
=====*/
indexOf: index(true),
/*=====
indexOf: function(arr, value, fromIndex, findLast){
// summary:
// locates the first index of the provided value in the
// passed array. If the value is not found, -1 is returned.
// description:
// This method corresponds to the JavaScript 1.6 Array.indexOf method, with one difference: when
// run over sparse arrays, the Dojo function invokes the callback for every index whereas JavaScript
// 1.6's indexOf skips the holes in the sparse array.
// For details on this method, see:
// https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/indexOf
// arr: Array
// value: Object
// fromIndex: Integer?
// findLast: Boolean?
// returns: Number
},
=====*/
lastIndexOf: index(false),
/*=====
lastIndexOf: function(arr, value, fromIndex){
// summary:
// locates the last index of the provided value in the passed
// array. If the value is not found, -1 is returned.
// description:
// This method corresponds to the JavaScript 1.6 Array.lastIndexOf method, with one difference: when
// run over sparse arrays, the Dojo function invokes the callback for every index whereas JavaScript
// 1.6's lastIndexOf skips the holes in the sparse array.
// For details on this method, see:
// https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/lastIndexOf
// arr: Array,
// value: Object,
// fromIndex: Integer?
// returns: Number
},
=====*/
forEach: function(arr, callback, thisObject){
// summary:
// for every item in arr, callback is invoked. Return values are ignored.
// If you want to break out of the loop, consider using array.every() or array.some().
// forEach does not allow breaking out of the loop over the items in arr.
// arr:
// the array to iterate over. If a string, operates on individual characters.
// callback:
// a function is invoked with three arguments: item, index, and array
// thisObject:
// may be used to scope the call to callback
// description:
// This function corresponds to the JavaScript 1.6 Array.forEach() method, with one difference: when
// run over sparse arrays, this implementation passes the "holes" in the sparse array to
// the callback function with a value of undefined. JavaScript 1.6's forEach skips the holes in the sparse array.
// For more details, see:
// https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/forEach
// example:
// | // log out all members of the array:
// | array.forEach(
// | [ "thinger", "blah", "howdy", 10 ],
// | function(item){
// | console.log(item);
// | }
// | );
// example:
// | // log out the members and their indexes
// | array.forEach(
// | [ "thinger", "blah", "howdy", 10 ],
// | function(item, idx, arr){
// | console.log(item, "at index:", idx);
// | }
// | );
// example:
// | // use a scoped object member as the callback
// |
// | var obj = {
// | prefix: "logged via obj.callback:",
// | callback: function(item){
// | console.log(this.prefix, item);
// | }
// | };
// |
// | // specifying the scope function executes the callback in that scope
// | array.forEach(
// | [ "thinger", "blah", "howdy", 10 ],
// | obj.callback,
// | obj
// | );
// |
// | // alternately, we can accomplish the same thing with lang.hitch()
// | array.forEach(
// | [ "thinger", "blah", "howdy", 10 ],
// | lang.hitch(obj, "callback")
// | );
// arr: Array|String
// callback: Function|String
// thisObject: Object?
var i = 0, l = arr && arr.length || 0;
if(l && typeof arr == "string") arr = arr.split("");
if(typeof callback == "string") callback = cache[callback] || buildFn(callback);
if(thisObject){
for(; i < l; ++i){
callback.call(thisObject, arr[i], i, arr);
}
}else{
for(; i < l; ++i){
callback(arr[i], i, arr);
}
}
},
map: function(arr, callback, thisObject, Ctr){
// summary:
// applies callback to each element of arr and returns
// an Array with the results
// arr: Array|String
// the array to iterate on. If a string, operates on
// individual characters.
// callback: Function|String
// a function is invoked with three arguments, (item, index,
// array), and returns a value
// thisObject: Object?
// may be used to scope the call to callback
// returns: Array
// description:
// This function corresponds to the JavaScript 1.6 Array.map() method, with one difference: when
// run over sparse arrays, this implementation passes the "holes" in the sparse array to
// the callback function with a value of undefined. JavaScript 1.6's map skips the holes in the sparse array.
// For more details, see:
// https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/map
// example:
// | // returns [2, 3, 4, 5]
// | array.map([1, 2, 3, 4], function(item){ return item+1 });
// TODO: why do we have a non-standard signature here? do we need "Ctr"?
var i = 0, l = arr && arr.length || 0, out = new (Ctr || Array)(l);
if(l && typeof arr == "string") arr = arr.split("");
if(typeof callback == "string") callback = cache[callback] || buildFn(callback);
if(thisObject){
for(; i < l; ++i){
out[i] = callback.call(thisObject, arr[i], i, arr);
}
}else{
for(; i < l; ++i){
out[i] = callback(arr[i], i, arr);
}
}
return out; // Array
},
filter: function(arr, callback, thisObject){
// summary:
// Returns a new Array with those items from arr that match the
// condition implemented by callback.
// arr: Array
// the array to iterate over.
// callback: Function|String
// a function that is invoked with three arguments (item,
// index, array). The return of this function is expected to
// be a boolean which determines whether the passed-in item
// will be included in the returned array.
// thisObject: Object?
// may be used to scope the call to callback
// returns: Array
// description:
// This function corresponds to the JavaScript 1.6 Array.filter() method, with one difference: when
// run over sparse arrays, this implementation passes the "holes" in the sparse array to
// the callback function with a value of undefined. JavaScript 1.6's filter skips the holes in the sparse array.
// For more details, see:
// https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/filter
// example:
// | // returns [2, 3, 4]
// | array.filter([1, 2, 3, 4], function(item){ return item>1; });
// TODO: do we need "Ctr" here like in map()?
var i = 0, l = arr && arr.length || 0, out = [], value;
if(l && typeof arr == "string") arr = arr.split("");
if(typeof callback == "string") callback = cache[callback] || buildFn(callback);
if(thisObject){
for(; i < l; ++i){
value = arr[i];
if(callback.call(thisObject, value, i, arr)){
out.push(value);
}
}
}else{
for(; i < l; ++i){
value = arr[i];
if(callback(value, i, arr)){
out.push(value);
}
}
}
return out; // Array
},
clearCache: function(){
cache = {};
}
};
1 && lang.mixin(dojo, array);
return array;
});

View File

@@ -1,5 +1,5 @@
/*
Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
Copyright (c) 2004-2012, The Dojo Foundation All Rights Reserved.
Available via Academic Free License >= 2.1 OR the modified BSD license.
see: http://dojotoolkit.org/license for details
*/

View File

@@ -0,0 +1,28 @@
if(require.has){
require.has.add("config-selectorEngine", "acme");
}
define("dojo/_base/browser", [
"../ready",
"./kernel",
"./connect", // until we decide if connect is going back into non-browser environments
"./unload",
"./window",
"./event",
"./html",
"./NodeList",
"../query",
"./xhr",
"./fx"], function(dojo){
// module:
// dojo/_base/browser
/*=====
return {
// summary:
// This module causes the browser-only base modules to be loaded.
};
=====*/
return dojo;
});

View File

@@ -1,5 +1,5 @@
/*
Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
Copyright (c) 2004-2012, The Dojo Foundation All Rights Reserved.
Available via Academic Free License >= 2.1 OR the modified BSD license.
see: http://dojotoolkit.org/license for details
*/

View File

@@ -0,0 +1,187 @@
define("dojo/_base/config", ["../has", "require"], function(has, require){
// module:
// dojo/_base/config
/*=====
return {
// summary:
// This module defines the user configuration during bootstrap.
// description:
// By defining user configuration as a module value, an entire configuration can be specified in a build,
// thereby eliminating the need for sniffing and or explicitly setting in the global variable dojoConfig.
// Also, when multiple instances of dojo exist in a single application, each will necessarily be located
// at an unique absolute module identifier as given by the package configuration. Implementing configuration
// as a module allows for specifying unique, per-instance configurations.
// example:
// Create a second instance of dojo with a different, instance-unique configuration (assume the loader and
// dojo.js are already loaded).
// | // specify a configuration that creates a new instance of dojo at the absolute module identifier "myDojo"
// | require({
// | packages:[{
// | name:"myDojo",
// | location:".", //assume baseUrl points to dojo.js
// | }]
// | });
// |
// | // specify a configuration for the myDojo instance
// | define("myDojo/config", {
// | // normal configuration variables go here, e.g.,
// | locale:"fr-ca"
// | });
// |
// | // load and use the new instance of dojo
// | require(["myDojo"], function(dojo){
// | // dojo is the new instance of dojo
// | // use as required
// | });
// isDebug: Boolean
// Defaults to `false`. If set to `true`, ensures that Dojo provides
// extended debugging feedback via Firebug. If Firebug is not available
// on your platform, setting `isDebug` to `true` will force Dojo to
// pull in (and display) the version of Firebug Lite which is
// integrated into the Dojo distribution, thereby always providing a
// debugging/logging console when `isDebug` is enabled. Note that
// Firebug's `console.*` methods are ALWAYS defined by Dojo. If
// `isDebug` is false and you are on a platform without Firebug, these
// methods will be defined as no-ops.
isDebug: false,
// locale: String
// The locale to assume for loading localized resources in this page,
// specified according to [RFC 3066](http://www.ietf.org/rfc/rfc3066.txt).
// Must be specified entirely in lowercase, e.g. `en-us` and `zh-cn`.
// See the documentation for `dojo.i18n` and `dojo.requireLocalization`
// for details on loading localized resources. If no locale is specified,
// Dojo assumes the locale of the user agent, according to `navigator.userLanguage`
// or `navigator.language` properties.
locale: undefined,
// extraLocale: Array
// No default value. Specifies additional locales whose
// resources should also be loaded alongside the default locale when
// calls to `dojo.requireLocalization()` are processed.
extraLocale: undefined,
// baseUrl: String
// The directory in which `dojo.js` is located. Under normal
// conditions, Dojo auto-detects the correct location from which it
// was loaded. You may need to manually configure `baseUrl` in cases
// where you have renamed `dojo.js` or in which `<base>` tags confuse
// some browsers (e.g. IE 6). The variable `dojo.baseUrl` is assigned
// either the value of `djConfig.baseUrl` if one is provided or the
// auto-detected root if not. Other modules are located relative to
// this path. The path should end in a slash.
baseUrl: undefined,
// modulePaths: [deprecated] Object
// A map of module names to paths relative to `dojo.baseUrl`. The
// key/value pairs correspond directly to the arguments which
// `dojo.registerModulePath` accepts. Specifying
// `djConfig.modulePaths = { "foo": "../../bar" }` is the equivalent
// of calling `dojo.registerModulePath("foo", "../../bar");`. Multiple
// modules may be configured via `djConfig.modulePaths`.
modulePaths: {},
// addOnLoad: Function|Array
// Adds a callback via dojo/ready. Useful when Dojo is added after
// the page loads and djConfig.afterOnLoad is true. Supports the same
// arguments as dojo/ready. When using a function reference, use
// `djConfig.addOnLoad = function(){};`. For object with function name use
// `djConfig.addOnLoad = [myObject, "functionName"];` and for object with
// function reference use
// `djConfig.addOnLoad = [myObject, function(){}];`
addOnLoad: null,
// parseOnLoad: Boolean
// Run the parser after the page is loaded
parseOnLoad: false,
// require: String[]
// An array of module names to be loaded immediately after dojo.js has been included
// in a page.
require: [],
// defaultDuration: Number
// Default duration, in milliseconds, for wipe and fade animations within dijits.
// Assigned to dijit.defaultDuration.
defaultDuration: 200,
// dojoBlankHtmlUrl: String
// Used by some modules to configure an empty iframe. Used by dojo/io/iframe and
// dojo/back, and dijit/popup support in IE where an iframe is needed to make sure native
// controls do not bleed through the popups. Normally this configuration variable
// does not need to be set, except when using cross-domain/CDN Dojo builds.
// Save dojo/resources/blank.html to your domain and set `djConfig.dojoBlankHtmlUrl`
// to the path on your domain your copy of blank.html.
dojoBlankHtmlUrl: undefined,
// ioPublish: Boolean?
// Set this to true to enable publishing of topics for the different phases of
// IO operations. Publishing is done via dojo/topic.publish(). See dojo/main.__IoPublish for a list
// of topics that are published.
ioPublish: false,
// useCustomLogger: Anything?
// If set to a value that evaluates to true such as a string or array and
// isDebug is true and Firebug is not available or running, then it bypasses
// the creation of Firebug Lite allowing you to define your own console object.
useCustomLogger: undefined,
// transparentColor: Array
// Array containing the r, g, b components used as transparent color in dojo.Color;
// if undefined, [255,255,255] (white) will be used.
transparentColor: undefined,
// deps: Function|Array
// Defines dependencies to be used before the loader has been loaded.
// When provided, they cause the loader to execute require(deps, callback)
// once it has finished loading. Should be used with callback.
deps: undefined,
// callback: Function|Array
// Defines a callback to be used when dependencies are defined before
// the loader has been loaded. When provided, they cause the loader to
// execute require(deps, callback) once it has finished loading.
// Should be used with deps.
callback: undefined,
// deferredInstrumentation: Boolean
// Whether deferred instrumentation should be loaded or included
// in builds.
deferredInstrumentation: true,
// useDeferredInstrumentation: Boolean|String
// Whether the deferred instrumentation should be used.
//
// * `"report-rejections"`: report each rejection as it occurs.
// * `true` or `1` or `"report-unhandled-rejections"`: wait 1 second
// in an attempt to detect unhandled rejections.
useDeferredInstrumentation: "report-unhandled-rejections"
};
=====*/
var result = {};
if( 1 ){
// must be the dojo loader; take a shallow copy of require.rawConfig
var src = require.rawConfig, p;
for(p in src){
result[p] = src[p];
}
}else{
var adviseHas = function(featureSet, prefix, booting){
for(p in featureSet){
p!="has" && has.add(prefix + p, featureSet[p], 0, booting);
}
};
result = 1 ?
// must be a built version of the dojo loader; all config stuffed in require.rawConfig
require.rawConfig :
// a foreign loader
this.dojoConfig || this.djConfig || {};
adviseHas(result, "config", 1);
adviseHas(result.has, "", 1);
}
return result;
});

View File

@@ -78,14 +78,16 @@ if(typeof window != 'undefined'){
var hasBase = false;
dojo._getText = function(/*URI*/ uri, /*Boolean*/ fail_ok){
// summary: Read the contents of the specified uri and return those contents.
// summary:
// Read the contents of the specified uri and return those contents.
// uri:
// A relative or absolute uri. If absolute, it still must be in
// the same "domain" as we are.
// fail_ok:
// Default false. If fail_ok and loading fails, return null
// instead of throwing.
// returns: The response text. null is returned when there is a
// returns:
// The response text. null is returned when there is a
// failure and failure is okay (an exception otherwise)
// alert("_getText: " + uri);
@@ -178,12 +180,12 @@ if(typeof window != 'undefined'){
dojo._defaultContext = [ window, document ];
dojo.pushContext = function(/*Object|String?*/g, /*MDocumentElement?*/d){
// summary:
// summary:
// causes subsequent calls to Dojo methods to assume the
// passed object and, optionally, document as the default
// scopes to use. A 2-element array of the previous global and
// document are returned.
// description:
// description:
// dojo.pushContext treats contexts as a stack. The
// auto-detected contexts which are initially provided using
// dojo.setContext() require authors to keep state in order to
@@ -199,10 +201,10 @@ if(typeof window != 'undefined'){
// the context to push. This means that iframes can be given
// an ID and code can be executed in the scope of the iframe's
// document in subsequent calls easily.
// g:
// g:
// The global context. If a string, the id of the frame to
// search for a context and document.
// d:
// d:
// The document element to execute subsequent code with.
var old = [dojo.global, dojo.doc];
contexts.push(old);
@@ -224,7 +226,7 @@ if(typeof window != 'undefined'){
};
dojo.popContext = function(){
// summary:
// summary:
// If the context stack contains elements, ensure that
// subsequent code executes in the *previous* context to the
// current context. The current context set ([global,
@@ -286,17 +288,17 @@ if(typeof window != 'undefined'){
};
// FIXME: PORT
// FIXME: dojo.unloaded requires dojo scope, so using anon function wrapper.
_handleNodeEvent("onbeforeunload", function() { dojo.unloaded(); });
_handleNodeEvent("onunload", function() { dojo.windowUnloaded(); });
_handleNodeEvent("onbeforeunload", function(){ dojo.unloaded(); });
_handleNodeEvent("onunload", function(){ dojo.windowUnloaded(); });
})();
*/
// FIXME: PORTME
// this event fires a lot, namely for all plugin XUL overlays and for
// all iframes (in addition to window navigations). We only want
// Dojo's to fire once..but we might care if pages navigate. We'll
// probably need an extension-specific API
// this event fires a lot, namely for all plugin XUL overlays and for
// all iframes (in addition to window navigations). We only want
// Dojo's to fire once..but we might care if pages navigate. We'll
// probably need an extension-specific API
if(!dojo.config.afterOnLoad){
window.addEventListener("DOMContentLoaded", function(e){
dojo._loadInit(e);

View File

@@ -1,5 +1,5 @@
exports.config = function(config){
// summary:
// summary:
// This module provides bootstrap configuration for running dojo in node.js
// any command line arguments with the load flag are pushed into deps
@@ -15,7 +15,7 @@ exports.config = function(config){
var fs = require("fs");
// make sure global require exists
//if (typeof global.require=="undefined") {
//if (typeof global.require=="undefined"){
// global.require= {};
//}
@@ -40,12 +40,12 @@ exports.config = function(config){
config.hasCache[p] = hasCache[p];
}
var vm = require('vm');
var vm = require('vm'),
path = require('path');
// reset some configuration switches with node-appropriate values
var nodeConfig = {
baseUrl: __dirname.match(/(.+)[\/\\]_base$/)[1],
baseUrl: path.dirname(process.argv[1]),
commandLineArgs:args,
deps:deps,
timeout:0,

View File

@@ -1,5 +1,5 @@
function rhinoDojoConfig(config, baseUrl, rhinoArgs){
// summary:
// summary:
// This module provides bootstrap configuration for running dojo in rhino.
// TODO: v1.6 tries to set dojo.doc and dojo.body in rhino; why?

View File

@@ -1,9 +1,9 @@
// TODO: this file needs to be converted to the v1.7 loader
/*
* SpiderMonkey host environment
*/
// module:
// configSpidermonkey
// summary:
// SpiderMonkey host environment
if(dojo.config["baseUrl"]){
dojo.baseUrl = dojo.config["baseUrl"];
@@ -13,11 +13,7 @@ if(dojo.config["baseUrl"]){
dojo._name = 'spidermonkey';
/*=====
dojo.isSpidermonkey = {
// summary: Detect spidermonkey
};
=====*/
dojo.isSpidermonkey = true;
dojo.exit = function(exitcode){

View File

@@ -1,8 +1,8 @@
/*
Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
Copyright (c) 2004-2012, The Dojo Foundation All Rights Reserved.
Available via Academic Free License >= 2.1 OR the modified BSD license.
see: http://dojotoolkit.org/license for details
*/
//>>built
define("dojo/_base/connect",["./kernel","../on","../topic","../aspect","./event","../mouse","./sniff","./lang","../keys"],function(_1,on,_2,_3,_4,_5,_6,_7){_6.add("events-keypress-typed",function(){var _8={charCode:0};try{_8=document.createEvent("KeyboardEvent");(_8.initKeyboardEvent||_8.initKeyEvent).call(_8,"keypress",true,true,null,false,false,false,false,9,3);}catch(e){}return _8.charCode==0&&!_6("opera");});function _9(_a,_b,_c,_d,_e){_d=_7.hitch(_c,_d);if(!_a||!(_a.addEventListener||_a.attachEvent)){return _3.after(_a||_1.global,_b,_d,true);}if(typeof _b=="string"&&_b.substring(0,2)=="on"){_b=_b.substring(2);}if(!_a){_a=_1.global;}if(!_e){switch(_b){case "keypress":_b=_f;break;case "mouseenter":_b=_5.enter;break;case "mouseleave":_b=_5.leave;break;}}return on(_a,_b,_d,_e);};var _10={106:42,111:47,186:59,187:43,188:44,189:45,190:46,191:47,192:96,219:91,220:92,221:93,222:39,229:113};var _11=_6("mac")?"metaKey":"ctrlKey";var _12=function(evt,_13){var _14=_7.mixin({},evt,_13);_15(_14);_14.preventDefault=function(){evt.preventDefault();};_14.stopPropagation=function(){evt.stopPropagation();};return _14;};function _15(evt){evt.keyChar=evt.charCode?String.fromCharCode(evt.charCode):"";evt.charOrCode=evt.keyChar||evt.keyCode;};var _f;if(_6("events-keypress-typed")){var _16=function(e,_17){try{return (e.keyCode=_17);}catch(e){return 0;}};_f=function(_18,_19){var _1a=on(_18,"keydown",function(evt){var k=evt.keyCode;var _1b=(k!=13||(_6("ie")>=9&&!_6("quirks")))&&k!=32&&(k!=27||!_6("ie"))&&(k<48||k>90)&&(k<96||k>111)&&(k<186||k>192)&&(k<219||k>222)&&k!=229;if(_1b||evt.ctrlKey){var c=_1b?0:k;if(evt.ctrlKey){if(k==3||k==13){return _19.call(evt.currentTarget,evt);}else{if(c>95&&c<106){c-=48;}else{if((!evt.shiftKey)&&(c>=65&&c<=90)){c+=32;}else{c=_10[c]||c;}}}}var _1c=_12(evt,{type:"keypress",faux:true,charCode:c});_19.call(evt.currentTarget,_1c);if(_6("ie")){_16(evt,_1c.keyCode);}}});var _1d=on(_18,"keypress",function(evt){var c=evt.charCode;c=c>=32?c:0;evt=_12(evt,{charCode:c,faux:true});return _19.call(this,evt);});return {remove:function(){_1a.remove();_1d.remove();}};};}else{if(_6("opera")){_f=function(_1e,_1f){return on(_1e,"keypress",function(evt){var c=evt.which;if(c==3){c=99;}c=c<32&&!evt.shiftKey?0:c;if(evt.ctrlKey&&!evt.shiftKey&&c>=65&&c<=90){c+=32;}return _1f.call(this,_12(evt,{charCode:c}));});};}else{_f=function(_20,_21){return on(_20,"keypress",function(evt){_15(evt);return _21.call(this,evt);});};}}var _22={_keypress:_f,connect:function(obj,_23,_24,_25,_26){var a=arguments,_27=[],i=0;_27.push(typeof a[0]=="string"?null:a[i++],a[i++]);var a1=a[i+1];_27.push(typeof a1=="string"||typeof a1=="function"?a[i++]:null,a[i++]);for(var l=a.length;i<l;i++){_27.push(a[i]);}return _9.apply(this,_27);},disconnect:function(_28){if(_28){_28.remove();}},subscribe:function(_29,_2a,_2b){return _2.subscribe(_29,_7.hitch(_2a,_2b));},publish:function(_2c,_2d){return _2.publish.apply(_2,[_2c].concat(_2d));},connectPublisher:function(_2e,obj,_2f){var pf=function(){_22.publish(_2e,arguments);};return _2f?_22.connect(obj,_2f,pf):_22.connect(obj,pf);},isCopyKey:function(e){return e[_11];}};_22.unsubscribe=_22.disconnect;1&&_7.mixin(_1,_22);return _22;});
define("dojo/_base/connect",["./kernel","../on","../topic","../aspect","./event","../mouse","./sniff","./lang","../keys"],function(_1,on,_2,_3,_4,_5,_6,_7){_6.add("events-keypress-typed",function(){var _8={charCode:0};try{_8=document.createEvent("KeyboardEvent");(_8.initKeyboardEvent||_8.initKeyEvent).call(_8,"keypress",true,true,null,false,false,false,false,9,3);}catch(e){}return _8.charCode==0&&!_6("opera");});function _9(_a,_b,_c,_d,_e){_d=_7.hitch(_c,_d);if(!_a||!(_a.addEventListener||_a.attachEvent)){return _3.after(_a||_1.global,_b,_d,true);}if(typeof _b=="string"&&_b.substring(0,2)=="on"){_b=_b.substring(2);}if(!_a){_a=_1.global;}if(!_e){switch(_b){case "keypress":_b=_f;break;case "mouseenter":_b=_5.enter;break;case "mouseleave":_b=_5.leave;break;}}return on(_a,_b,_d,_e);};var _10={106:42,111:47,186:59,187:43,188:44,189:45,190:46,191:47,192:96,219:91,220:92,221:93,222:39,229:113};var _11=_6("mac")?"metaKey":"ctrlKey";var _12=function(evt,_13){var _14=_7.mixin({},evt,_13);_15(_14);_14.preventDefault=function(){evt.preventDefault();};_14.stopPropagation=function(){evt.stopPropagation();};return _14;};function _15(evt){evt.keyChar=evt.charCode?String.fromCharCode(evt.charCode):"";evt.charOrCode=evt.keyChar||evt.keyCode;};var _f;if(_6("events-keypress-typed")){var _16=function(e,_17){try{return (e.keyCode=_17);}catch(e){return 0;}};_f=function(_18,_19){var _1a=on(_18,"keydown",function(evt){var k=evt.keyCode;var _1b=(k!=13)&&k!=32&&(k!=27||!_6("ie"))&&(k<48||k>90)&&(k<96||k>111)&&(k<186||k>192)&&(k<219||k>222)&&k!=229;if(_1b||evt.ctrlKey){var c=_1b?0:k;if(evt.ctrlKey){if(k==3||k==13){return _19.call(evt.currentTarget,evt);}else{if(c>95&&c<106){c-=48;}else{if((!evt.shiftKey)&&(c>=65&&c<=90)){c+=32;}else{c=_10[c]||c;}}}}var _1c=_12(evt,{type:"keypress",faux:true,charCode:c});_19.call(evt.currentTarget,_1c);if(_6("ie")){_16(evt,_1c.keyCode);}}});var _1d=on(_18,"keypress",function(evt){var c=evt.charCode;c=c>=32?c:0;evt=_12(evt,{charCode:c,faux:true});return _19.call(this,evt);});return {remove:function(){_1a.remove();_1d.remove();}};};}else{if(_6("opera")){_f=function(_1e,_1f){return on(_1e,"keypress",function(evt){var c=evt.which;if(c==3){c=99;}c=c<32&&!evt.shiftKey?0:c;if(evt.ctrlKey&&!evt.shiftKey&&c>=65&&c<=90){c+=32;}return _1f.call(this,_12(evt,{charCode:c}));});};}else{_f=function(_20,_21){return on(_20,"keypress",function(evt){_15(evt);return _21.call(this,evt);});};}}var _22={_keypress:_f,connect:function(obj,_23,_24,_25,_26){var a=arguments,_27=[],i=0;_27.push(typeof a[0]=="string"?null:a[i++],a[i++]);var a1=a[i+1];_27.push(typeof a1=="string"||typeof a1=="function"?a[i++]:null,a[i++]);for(var l=a.length;i<l;i++){_27.push(a[i]);}return _9.apply(this,_27);},disconnect:function(_28){if(_28){_28.remove();}},subscribe:function(_29,_2a,_2b){return _2.subscribe(_29,_7.hitch(_2a,_2b));},publish:function(_2c,_2d){return _2.publish.apply(_2,[_2c].concat(_2d));},connectPublisher:function(_2e,obj,_2f){var pf=function(){_22.publish(_2e,arguments);};return _2f?_22.connect(obj,_2f,pf):_22.connect(obj,pf);},isCopyKey:function(e){return e[_11];}};_22.unsubscribe=_22.disconnect;1&&_7.mixin(_1,_22);return _22;});

View File

@@ -0,0 +1,374 @@
define("dojo/_base/connect", ["./kernel", "../on", "../topic", "../aspect", "./event", "../mouse", "./sniff", "./lang", "../keys"], function(dojo, on, hub, aspect, eventModule, mouse, has, lang){
// module:
// dojo/_base/connect
has.add("events-keypress-typed", function(){ // keypresses should only occur a printable character is hit
var testKeyEvent = {charCode: 0};
try{
testKeyEvent = document.createEvent("KeyboardEvent");
(testKeyEvent.initKeyboardEvent || testKeyEvent.initKeyEvent).call(testKeyEvent, "keypress", true, true, null, false, false, false, false, 9, 3);
}catch(e){}
return testKeyEvent.charCode == 0 && !has("opera");
});
function connect_(obj, event, context, method, dontFix){
method = lang.hitch(context, method);
if(!obj || !(obj.addEventListener || obj.attachEvent)){
// it is a not a DOM node and we are using the dojo.connect style of treating a
// method like an event, must go right to aspect
return aspect.after(obj || dojo.global, event, method, true);
}
if(typeof event == "string" && event.substring(0, 2) == "on"){
event = event.substring(2);
}
if(!obj){
obj = dojo.global;
}
if(!dontFix){
switch(event){
// dojo.connect has special handling for these event types
case "keypress":
event = keypress;
break;
case "mouseenter":
event = mouse.enter;
break;
case "mouseleave":
event = mouse.leave;
break;
}
}
return on(obj, event, method, dontFix);
}
var _punctMap = {
106:42,
111:47,
186:59,
187:43,
188:44,
189:45,
190:46,
191:47,
192:96,
219:91,
220:92,
221:93,
222:39,
229:113
};
var evtCopyKey = has("mac") ? "metaKey" : "ctrlKey";
var _synthesizeEvent = function(evt, props){
var faux = lang.mixin({}, evt, props);
setKeyChar(faux);
// FIXME: would prefer to use lang.hitch: lang.hitch(evt, evt.preventDefault);
// but it throws an error when preventDefault is invoked on Safari
// does Event.preventDefault not support "apply" on Safari?
faux.preventDefault = function(){ evt.preventDefault(); };
faux.stopPropagation = function(){ evt.stopPropagation(); };
return faux;
};
function setKeyChar(evt){
evt.keyChar = evt.charCode ? String.fromCharCode(evt.charCode) : '';
evt.charOrCode = evt.keyChar || evt.keyCode;
}
var keypress;
if(has("events-keypress-typed")){
// this emulates Firefox's keypress behavior where every keydown can correspond to a keypress
var _trySetKeyCode = function(e, code){
try{
// squelch errors when keyCode is read-only
// (e.g. if keyCode is ctrl or shift)
return (e.keyCode = code);
}catch(e){
return 0;
}
};
keypress = function(object, listener){
var keydownSignal = on(object, "keydown", function(evt){
// munge key/charCode
var k=evt.keyCode;
// These are Windows Virtual Key Codes
// http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/WinUI/WindowsUserInterface/UserInput/VirtualKeyCodes.asp
var unprintable = (k!=13) && k!=32 && (k!=27||!has("ie")) && (k<48||k>90) && (k<96||k>111) && (k<186||k>192) && (k<219||k>222) && k!=229;
// synthesize keypress for most unprintables and CTRL-keys
if(unprintable||evt.ctrlKey){
var c = unprintable ? 0 : k;
if(evt.ctrlKey){
if(k==3 || k==13){
return listener.call(evt.currentTarget, evt); // IE will post CTRL-BREAK, CTRL-ENTER as keypress natively
}else if(c>95 && c<106){
c -= 48; // map CTRL-[numpad 0-9] to ASCII
}else if((!evt.shiftKey)&&(c>=65&&c<=90)){
c += 32; // map CTRL-[A-Z] to lowercase
}else{
c = _punctMap[c] || c; // map other problematic CTRL combinations to ASCII
}
}
// simulate a keypress event
var faux = _synthesizeEvent(evt, {type: 'keypress', faux: true, charCode: c});
listener.call(evt.currentTarget, faux);
if(has("ie")){
_trySetKeyCode(evt, faux.keyCode);
}
}
});
var keypressSignal = on(object, "keypress", function(evt){
var c = evt.charCode;
c = c>=32 ? c : 0;
evt = _synthesizeEvent(evt, {charCode: c, faux: true});
return listener.call(this, evt);
});
return {
remove: function(){
keydownSignal.remove();
keypressSignal.remove();
}
};
};
}else{
if(has("opera")){
keypress = function(object, listener){
return on(object, "keypress", function(evt){
var c = evt.which;
if(c==3){
c=99; // Mozilla maps CTRL-BREAK to CTRL-c
}
// can't trap some keys at all, like INSERT and DELETE
// there is no differentiating info between DELETE and ".", or INSERT and "-"
c = c<32 && !evt.shiftKey ? 0 : c;
if(evt.ctrlKey && !evt.shiftKey && c>=65 && c<=90){
// lowercase CTRL-[A-Z] keys
c += 32;
}
return listener.call(this, _synthesizeEvent(evt, { charCode: c }));
});
};
}else{
keypress = function(object, listener){
return on(object, "keypress", function(evt){
setKeyChar(evt);
return listener.call(this, evt);
});
};
}
}
var connect = {
// summary:
// This module defines the dojo.connect API.
// This modules also provides keyboard event handling helpers.
// This module exports an extension event for emulating Firefox's keypress handling.
// However, this extension event exists primarily for backwards compatibility and
// is not recommended. WebKit and IE uses an alternate keypress handling (only
// firing for printable characters, to distinguish from keydown events), and most
// consider the WebKit/IE behavior more desirable.
_keypress:keypress,
connect:function(obj, event, context, method, dontFix){
// summary:
// `dojo.connect` is a deprecated event handling and delegation method in
// Dojo. It allows one function to "listen in" on the execution of
// any other, triggering the second whenever the first is called. Many
// listeners may be attached to a function, and source functions may
// be either regular function calls or DOM events.
//
// description:
// Connects listeners to actions, so that after event fires, a
// listener is called with the same arguments passed to the original
// function.
//
// Since `dojo.connect` allows the source of events to be either a
// "regular" JavaScript function or a DOM event, it provides a uniform
// interface for listening to all the types of events that an
// application is likely to deal with though a single, unified
// interface. DOM programmers may want to think of it as
// "addEventListener for everything and anything".
//
// When setting up a connection, the `event` parameter must be a
// string that is the name of the method/event to be listened for. If
// `obj` is null, `kernel.global` is assumed, meaning that connections
// to global methods are supported but also that you may inadvertently
// connect to a global by passing an incorrect object name or invalid
// reference.
//
// `dojo.connect` generally is forgiving. If you pass the name of a
// function or method that does not yet exist on `obj`, connect will
// not fail, but will instead set up a stub method. Similarly, null
// arguments may simply be omitted such that fewer than 4 arguments
// may be required to set up a connection See the examples for details.
//
// The return value is a handle that is needed to
// remove this connection with `dojo.disconnect`.
//
// obj: Object?
// The source object for the event function.
// Defaults to `kernel.global` if null.
// If obj is a DOM node, the connection is delegated
// to the DOM event manager (unless dontFix is true).
//
// event: String
// String name of the event function in obj.
// I.e. identifies a property `obj[event]`.
//
// context: Object|null
// The object that method will receive as "this".
//
// If context is null and method is a function, then method
// inherits the context of event.
//
// If method is a string then context must be the source
// object object for method (context[method]). If context is null,
// kernel.global is used.
//
// method: String|Function
// A function reference, or name of a function in context.
// The function identified by method fires after event does.
// method receives the same arguments as the event.
// See context argument comments for information on method's scope.
//
// dontFix: Boolean?
// If obj is a DOM node, set dontFix to true to prevent delegation
// of this connection to the DOM event manager.
//
// example:
// When obj.onchange(), do ui.update():
// | dojo.connect(obj, "onchange", ui, "update");
// | dojo.connect(obj, "onchange", ui, ui.update); // same
//
// example:
// Using return value for disconnect:
// | var link = dojo.connect(obj, "onchange", ui, "update");
// | ...
// | dojo.disconnect(link);
//
// example:
// When onglobalevent executes, watcher.handler is invoked:
// | dojo.connect(null, "onglobalevent", watcher, "handler");
//
// example:
// When ob.onCustomEvent executes, customEventHandler is invoked:
// | dojo.connect(ob, "onCustomEvent", null, "customEventHandler");
// | dojo.connect(ob, "onCustomEvent", "customEventHandler"); // same
//
// example:
// When ob.onCustomEvent executes, customEventHandler is invoked
// with the same scope (this):
// | dojo.connect(ob, "onCustomEvent", null, customEventHandler);
// | dojo.connect(ob, "onCustomEvent", customEventHandler); // same
//
// example:
// When globalEvent executes, globalHandler is invoked
// with the same scope (this):
// | dojo.connect(null, "globalEvent", null, globalHandler);
// | dojo.connect("globalEvent", globalHandler); // same
// normalize arguments
var a=arguments, args=[], i=0;
// if a[0] is a String, obj was omitted
args.push(typeof a[0] == "string" ? null : a[i++], a[i++]);
// if the arg-after-next is a String or Function, context was NOT omitted
var a1 = a[i+1];
args.push(typeof a1 == "string" || typeof a1 == "function" ? a[i++] : null, a[i++]);
// absorb any additional arguments
for(var l=a.length; i<l; i++){ args.push(a[i]); }
return connect_.apply(this, args);
},
disconnect:function(handle){
// summary:
// Remove a link created by dojo.connect.
// description:
// Removes the connection between event and the method referenced by handle.
// handle: Handle
// the return value of the dojo.connect call that created the connection.
if(handle){
handle.remove();
}
},
subscribe:function(topic, context, method){
// summary:
// Attach a listener to a named topic. The listener function is invoked whenever the
// named topic is published (see: dojo.publish).
// Returns a handle which is needed to unsubscribe this listener.
// topic: String
// The topic to which to subscribe.
// context: Object?
// Scope in which method will be invoked, or null for default scope.
// method: String|Function
// The name of a function in context, or a function reference. This is the function that
// is invoked when topic is published.
// example:
// | dojo.subscribe("alerts", null, function(caption, message){ alert(caption + "\n" + message); });
// | dojo.publish("alerts", [ "read this", "hello world" ]);
return hub.subscribe(topic, lang.hitch(context, method));
},
publish:function(topic, args){
// summary:
// Invoke all listener method subscribed to topic.
// topic: String
// The name of the topic to publish.
// args: Array?
// An array of arguments. The arguments will be applied
// to each topic subscriber (as first class parameters, via apply).
// example:
// | dojo.subscribe("alerts", null, function(caption, message){ alert(caption + "\n" + message); };
// | dojo.publish("alerts", [ "read this", "hello world" ]);
return hub.publish.apply(hub, [topic].concat(args));
},
connectPublisher:function(topic, obj, event){
// summary:
// Ensure that every time obj.event() is called, a message is published
// on the topic. Returns a handle which can be passed to
// dojo.disconnect() to disable subsequent automatic publication on
// the topic.
// topic: String
// The name of the topic to publish.
// obj: Object?
// The source object for the event function. Defaults to kernel.global
// if null.
// event: String
// The name of the event function in obj.
// I.e. identifies a property obj[event].
// example:
// | dojo.connectPublisher("/ajax/start", dojo, "xhrGet");
var pf = function(){ connect.publish(topic, arguments); };
return event ? connect.connect(obj, event, pf) : connect.connect(obj, pf); //Handle
},
isCopyKey: function(e){
// summary:
// Checks an event for the copy key (meta on Mac, and ctrl anywhere else)
// e: Event
// Event object to examine
return e[evtCopyKey]; // Boolean
}
};
connect.unsubscribe = connect.disconnect;
/*=====
connect.unsubscribe = function(handle){
// summary:
// Remove a topic listener.
// handle: Handle
// The handle returned from a call to subscribe.
// example:
// | var alerter = dojo.subscribe("alerts", null, function(caption, message){ alert(caption + "\n" + message); };
// | ...
// | dojo.unsubscribe(alerter);
};
=====*/
1 && lang.mixin(dojo, connect);
return connect;
});

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@@ -1,8 +1,8 @@
/*
Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
Copyright (c) 2004-2012, The Dojo Foundation All Rights Reserved.
Available via Academic Free License >= 2.1 OR the modified BSD license.
see: http://dojotoolkit.org/license for details
*/
//>>built
define("dojo/_base/event",["./kernel","../on","../has","../dom-geometry"],function(_1,on,_2,_3){if(on._fixEvent){var _4=on._fixEvent;on._fixEvent=function(_5,se){_5=_4(_5,se);if(_5){_3.normalizeEvent(_5);}return _5;};}_1.fixEvent=function(_6,_7){if(on._fixEvent){return on._fixEvent(_6,_7);}return _6;};_1.stopEvent=function(_8){if(_2("dom-addeventlistener")||(_8&&_8.preventDefault)){_8.preventDefault();_8.stopPropagation();}else{_8=_8||window.event;_8.cancelBubble=true;on._preventDefault.call(_8);}};return {fix:_1.fixEvent,stop:_1.stopEvent};});
define("dojo/_base/event",["./kernel","../on","../has","../dom-geometry"],function(_1,on,_2,_3){if(on._fixEvent){var _4=on._fixEvent;on._fixEvent=function(_5,se){_5=_4(_5,se);if(_5){_3.normalizeEvent(_5);}return _5;};}var _6={fix:function(_7,_8){if(on._fixEvent){return on._fixEvent(_7,_8);}return _7;},stop:function(_9){if(_2("dom-addeventlistener")||(_9&&_9.preventDefault)){_9.preventDefault();_9.stopPropagation();}else{_9=_9||window.event;_9.cancelBubble=true;on._preventDefault.call(_9);}}};if(1){_1.fixEvent=_6.fix;_1.stopEvent=_6.stop;}return _6;});

View File

@@ -0,0 +1,59 @@
define("dojo/_base/event", ["./kernel", "../on", "../has", "../dom-geometry"], function(dojo, on, has, dom){
// module:
// dojo/_base/event
if(on._fixEvent){
var fixEvent = on._fixEvent;
on._fixEvent = function(evt, se){
// add some additional normalization for back-compat, this isn't in on.js because it is somewhat more expensive
evt = fixEvent(evt, se);
if(evt){
dom.normalizeEvent(evt);
}
return evt;
};
}
var ret = {
// summary:
// This module defines dojo DOM event API. Usually you should use dojo/on, and evt.stopPropagation() +
// evt.preventDefault(), rather than this module.
fix: function(/*Event*/ evt, /*DOMNode*/ sender){
// summary:
// normalizes properties on the event object including event
// bubbling methods, keystroke normalization, and x/y positions
// evt: Event
// native event object
// sender: DOMNode
// node to treat as "currentTarget"
if(on._fixEvent){
return on._fixEvent(evt, sender);
}
return evt; // Event
},
stop: function(/*Event*/ evt){
// summary:
// prevents propagation and clobbers the default action of the
// passed event
// evt: Event
// The event object. If omitted, window.event is used on IE.
if(has("dom-addeventlistener") || (evt && evt.preventDefault)){
evt.preventDefault();
evt.stopPropagation();
}else{
evt = evt || window.event;
evt.cancelBubble = true;
on._preventDefault.call(evt);
}
}
};
if( 1 ){
dojo.fixEvent = ret.fix;
dojo.stopEvent = ret.stop;
}
return ret;
});

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,670 @@
define("dojo/_base/fx", ["./kernel", "./config", /*===== "./declare", =====*/ "./lang", "../Evented", "./Color", "./connect", "./sniff", "../dom", "../dom-style"],
function(dojo, config, /*===== declare, =====*/ lang, Evented, Color, connect, has, dom, style){
// module:
// dojo/_base/fx
// notes:
// Animation loosely package based on Dan Pupius' work, contributed under CLA; see
// http://pupius.co.uk/js/Toolkit.Drawing.js
var _mixin = lang.mixin;
// Module export
var basefx = {
// summary:
// This module defines the base dojo/_base/fx implementation.
};
var _Line = basefx._Line = function(/*int*/ start, /*int*/ end){
// summary:
// Object used to generate values from a start value to an end value
// start: int
// Beginning value for range
// end: int
// Ending value for range
this.start = start;
this.end = end;
};
_Line.prototype.getValue = function(/*float*/ n){
// summary:
// Returns the point on the line
// n:
// a floating point number greater than 0 and less than 1
return ((this.end - this.start) * n) + this.start; // Decimal
};
var Animation = basefx.Animation = function(args){
// summary:
// A generic animation class that fires callbacks into its handlers
// object at various states.
// description:
// A generic animation class that fires callbacks into its handlers
// object at various states. Nearly all dojo animation functions
// return an instance of this method, usually without calling the
// .play() method beforehand. Therefore, you will likely need to
// call .play() on instances of `Animation` when one is
// returned.
// args: Object
// The 'magic argument', mixing all the properties into this
// animation instance.
_mixin(this, args);
if(lang.isArray(this.curve)){
this.curve = new _Line(this.curve[0], this.curve[1]);
}
};
Animation.prototype = new Evented();
lang.extend(Animation, {
// duration: Integer
// The time in milliseconds the animation will take to run
duration: 350,
/*=====
// curve: _Line|Array
// A two element array of start and end values, or a `_Line` instance to be
// used in the Animation.
curve: null,
// easing: Function?
// A Function to adjust the acceleration (or deceleration) of the progress
// across a _Line
easing: null,
=====*/
// repeat: Integer?
// The number of times to loop the animation
repeat: 0,
// rate: Integer?
// the time in milliseconds to wait before advancing to next frame
// (used as a fps timer: 1000/rate = fps)
rate: 20 /* 50 fps */,
/*=====
// delay: Integer?
// The time in milliseconds to wait before starting animation after it
// has been .play()'ed
delay: null,
// beforeBegin: Event?
// Synthetic event fired before a Animation begins playing (synchronous)
beforeBegin: null,
// onBegin: Event?
// Synthetic event fired as a Animation begins playing (useful?)
onBegin: null,
// onAnimate: Event?
// Synthetic event fired at each interval of the Animation
onAnimate: null,
// onEnd: Event?
// Synthetic event fired after the final frame of the Animation
onEnd: null,
// onPlay: Event?
// Synthetic event fired any time the Animation is play()'ed
onPlay: null,
// onPause: Event?
// Synthetic event fired when the Animation is paused
onPause: null,
// onStop: Event
// Synthetic event fires when the Animation is stopped
onStop: null,
=====*/
_percent: 0,
_startRepeatCount: 0,
_getStep: function(){
var _p = this._percent,
_e = this.easing
;
return _e ? _e(_p) : _p;
},
_fire: function(/*Event*/ evt, /*Array?*/ args){
// summary:
// Convenience function. Fire event "evt" and pass it the
// arguments specified in "args".
// description:
// Convenience function. Fire event "evt" and pass it the
// arguments specified in "args".
// Fires the callback in the scope of this Animation
// instance.
// evt:
// The event to fire.
// args:
// The arguments to pass to the event.
var a = args||[];
if(this[evt]){
if(config.debugAtAllCosts){
this[evt].apply(this, a);
}else{
try{
this[evt].apply(this, a);
}catch(e){
// squelch and log because we shouldn't allow exceptions in
// synthetic event handlers to cause the internal timer to run
// amuck, potentially pegging the CPU. I'm not a fan of this
// squelch, but hopefully logging will make it clear what's
// going on
console.error("exception in animation handler for:", evt);
console.error(e);
}
}
}
return this; // Animation
},
play: function(/*int?*/ delay, /*Boolean?*/ gotoStart){
// summary:
// Start the animation.
// delay:
// How many milliseconds to delay before starting.
// gotoStart:
// If true, starts the animation from the beginning; otherwise,
// starts it from its current position.
// returns: Animation
// The instance to allow chaining.
var _t = this;
if(_t._delayTimer){ _t._clearTimer(); }
if(gotoStart){
_t._stopTimer();
_t._active = _t._paused = false;
_t._percent = 0;
}else if(_t._active && !_t._paused){
return _t;
}
_t._fire("beforeBegin", [_t.node]);
var de = delay || _t.delay,
_p = lang.hitch(_t, "_play", gotoStart);
if(de > 0){
_t._delayTimer = setTimeout(_p, de);
return _t;
}
_p();
return _t; // Animation
},
_play: function(gotoStart){
var _t = this;
if(_t._delayTimer){ _t._clearTimer(); }
_t._startTime = new Date().valueOf();
if(_t._paused){
_t._startTime -= _t.duration * _t._percent;
}
_t._active = true;
_t._paused = false;
var value = _t.curve.getValue(_t._getStep());
if(!_t._percent){
if(!_t._startRepeatCount){
_t._startRepeatCount = _t.repeat;
}
_t._fire("onBegin", [value]);
}
_t._fire("onPlay", [value]);
_t._cycle();
return _t; // Animation
},
pause: function(){
// summary:
// Pauses a running animation.
var _t = this;
if(_t._delayTimer){ _t._clearTimer(); }
_t._stopTimer();
if(!_t._active){ return _t; /*Animation*/ }
_t._paused = true;
_t._fire("onPause", [_t.curve.getValue(_t._getStep())]);
return _t; // Animation
},
gotoPercent: function(/*Decimal*/ percent, /*Boolean?*/ andPlay){
// summary:
// Sets the progress of the animation.
// percent:
// A percentage in decimal notation (between and including 0.0 and 1.0).
// andPlay:
// If true, play the animation after setting the progress.
var _t = this;
_t._stopTimer();
_t._active = _t._paused = true;
_t._percent = percent;
if(andPlay){ _t.play(); }
return _t; // Animation
},
stop: function(/*boolean?*/ gotoEnd){
// summary:
// Stops a running animation.
// gotoEnd:
// If true, the animation will end.
var _t = this;
if(_t._delayTimer){ _t._clearTimer(); }
if(!_t._timer){ return _t; /* Animation */ }
_t._stopTimer();
if(gotoEnd){
_t._percent = 1;
}
_t._fire("onStop", [_t.curve.getValue(_t._getStep())]);
_t._active = _t._paused = false;
return _t; // Animation
},
status: function(){
// summary:
// Returns a string token representation of the status of
// the animation, one of: "paused", "playing", "stopped"
if(this._active){
return this._paused ? "paused" : "playing"; // String
}
return "stopped"; // String
},
_cycle: function(){
var _t = this;
if(_t._active){
var curr = new Date().valueOf();
// Allow durations of 0 (instant) by setting step to 1 - see #13798
var step = _t.duration === 0 ? 1 : (curr - _t._startTime) / (_t.duration);
if(step >= 1){
step = 1;
}
_t._percent = step;
// Perform easing
if(_t.easing){
step = _t.easing(step);
}
_t._fire("onAnimate", [_t.curve.getValue(step)]);
if(_t._percent < 1){
_t._startTimer();
}else{
_t._active = false;
if(_t.repeat > 0){
_t.repeat--;
_t.play(null, true);
}else if(_t.repeat == -1){
_t.play(null, true);
}else{
if(_t._startRepeatCount){
_t.repeat = _t._startRepeatCount;
_t._startRepeatCount = 0;
}
}
_t._percent = 0;
_t._fire("onEnd", [_t.node]);
!_t.repeat && _t._stopTimer();
}
}
return _t; // Animation
},
_clearTimer: function(){
// summary:
// Clear the play delay timer
clearTimeout(this._delayTimer);
delete this._delayTimer;
}
});
// the local timer, stubbed into all Animation instances
var ctr = 0,
timer = null,
runner = {
run: function(){}
};
lang.extend(Animation, {
_startTimer: function(){
if(!this._timer){
this._timer = connect.connect(runner, "run", this, "_cycle");
ctr++;
}
if(!timer){
timer = setInterval(lang.hitch(runner, "run"), this.rate);
}
},
_stopTimer: function(){
if(this._timer){
connect.disconnect(this._timer);
this._timer = null;
ctr--;
}
if(ctr <= 0){
clearInterval(timer);
timer = null;
ctr = 0;
}
}
});
var _makeFadeable =
has("ie") ? function(node){
// only set the zoom if the "tickle" value would be the same as the
// default
var ns = node.style;
// don't set the width to auto if it didn't already cascade that way.
// We don't want to f anyones designs
if(!ns.width.length && style.get(node, "width") == "auto"){
ns.width = "auto";
}
} :
function(){};
basefx._fade = function(/*Object*/ args){
// summary:
// Returns an animation that will fade the node defined by
// args.node from the start to end values passed (args.start
// args.end) (end is mandatory, start is optional)
args.node = dom.byId(args.node);
var fArgs = _mixin({ properties: {} }, args),
props = (fArgs.properties.opacity = {});
props.start = !("start" in fArgs) ?
function(){
return +style.get(fArgs.node, "opacity")||0;
} : fArgs.start;
props.end = fArgs.end;
var anim = basefx.animateProperty(fArgs);
connect.connect(anim, "beforeBegin", lang.partial(_makeFadeable, fArgs.node));
return anim; // Animation
};
/*=====
var __FadeArgs = declare(null, {
// node: DOMNode|String
// The node referenced in the animation
// duration: Integer?
// Duration of the animation in milliseconds.
// easing: Function?
// An easing function.
});
=====*/
basefx.fadeIn = function(/*__FadeArgs*/ args){
// summary:
// Returns an animation that will fade node defined in 'args' from
// its current opacity to fully opaque.
return basefx._fade(_mixin({ end: 1 }, args)); // Animation
};
basefx.fadeOut = function(/*__FadeArgs*/ args){
// summary:
// Returns an animation that will fade node defined in 'args'
// from its current opacity to fully transparent.
return basefx._fade(_mixin({ end: 0 }, args)); // Animation
};
basefx._defaultEasing = function(/*Decimal?*/ n){
// summary:
// The default easing function for Animation(s)
return 0.5 + ((Math.sin((n + 1.5) * Math.PI)) / 2); // Decimal
};
var PropLine = function(properties){
// PropLine is an internal class which is used to model the values of
// an a group of CSS properties across an animation lifecycle. In
// particular, the "getValue" function handles getting interpolated
// values between start and end for a particular CSS value.
this._properties = properties;
for(var p in properties){
var prop = properties[p];
if(prop.start instanceof Color){
// create a reusable temp color object to keep intermediate results
prop.tempColor = new Color();
}
}
};
PropLine.prototype.getValue = function(r){
var ret = {};
for(var p in this._properties){
var prop = this._properties[p],
start = prop.start;
if(start instanceof Color){
ret[p] = Color.blendColors(start, prop.end, r, prop.tempColor).toCss();
}else if(!lang.isArray(start)){
ret[p] = ((prop.end - start) * r) + start + (p != "opacity" ? prop.units || "px" : 0);
}
}
return ret;
};
/*=====
var __AnimArgs = declare(__FadeArgs, {
// properties: Object?
// A hash map of style properties to Objects describing the transition,
// such as the properties of _Line with an additional 'units' property
properties: {}
//TODOC: add event callbacks
});
=====*/
basefx.animateProperty = function(/*__AnimArgs*/ args){
// summary:
// Returns an animation that will transition the properties of
// node defined in `args` depending how they are defined in
// `args.properties`
//
// description:
// Foundation of most `dojo/_base/fx`
// animations. It takes an object of "properties" corresponding to
// style properties, and animates them in parallel over a set
// duration.
//
// example:
// A simple animation that changes the width of the specified node.
// | basefx.animateProperty({
// | node: "nodeId",
// | properties: { width: 400 },
// | }).play();
// Dojo figures out the start value for the width and converts the
// integer specified for the width to the more expressive but
// verbose form `{ width: { end: '400', units: 'px' } }` which you
// can also specify directly. Defaults to 'px' if omitted.
//
// example:
// Animate width, height, and padding over 2 seconds... the
// pedantic way:
// | basefx.animateProperty({ node: node, duration:2000,
// | properties: {
// | width: { start: '200', end: '400', units:"px" },
// | height: { start:'200', end: '400', units:"px" },
// | paddingTop: { start:'5', end:'50', units:"px" }
// | }
// | }).play();
// Note 'paddingTop' is used over 'padding-top'. Multi-name CSS properties
// are written using "mixed case", as the hyphen is illegal as an object key.
//
// example:
// Plug in a different easing function and register a callback for
// when the animation ends. Easing functions accept values between
// zero and one and return a value on that basis. In this case, an
// exponential-in curve.
// | basefx.animateProperty({
// | node: "nodeId",
// | // dojo figures out the start value
// | properties: { width: { end: 400 } },
// | easing: function(n){
// | return (n==0) ? 0 : Math.pow(2, 10 * (n - 1));
// | },
// | onEnd: function(node){
// | // called when the animation finishes. The animation
// | // target is passed to this function
// | }
// | }).play(500); // delay playing half a second
//
// example:
// Like all `Animation`s, animateProperty returns a handle to the
// Animation instance, which fires the events common to Dojo FX. Use `aspect.after`
// to access these events outside of the Animation definition:
// | var anim = basefx.animateProperty({
// | node:"someId",
// | properties:{
// | width:400, height:500
// | }
// | });
// | aspect.after(anim, "onEnd", function(){
// | console.log("animation ended");
// | }, true);
// | // play the animation now:
// | anim.play();
//
// example:
// Each property can be a function whose return value is substituted along.
// Additionally, each measurement (eg: start, end) can be a function. The node
// reference is passed directly to callbacks.
// | basefx.animateProperty({
// | node:"mine",
// | properties:{
// | height:function(node){
// | // shrink this node by 50%
// | return domGeom.position(node).h / 2
// | },
// | width:{
// | start:function(node){ return 100; },
// | end:function(node){ return 200; }
// | }
// | }
// | }).play();
//
var n = args.node = dom.byId(args.node);
if(!args.easing){ args.easing = dojo._defaultEasing; }
var anim = new Animation(args);
connect.connect(anim, "beforeBegin", anim, function(){
var pm = {};
for(var p in this.properties){
// Make shallow copy of properties into pm because we overwrite
// some values below. In particular if start/end are functions
// we don't want to overwrite them or the functions won't be
// called if the animation is reused.
if(p == "width" || p == "height"){
this.node.display = "block";
}
var prop = this.properties[p];
if(lang.isFunction(prop)){
prop = prop(n);
}
prop = pm[p] = _mixin({}, (lang.isObject(prop) ? prop: { end: prop }));
if(lang.isFunction(prop.start)){
prop.start = prop.start(n);
}
if(lang.isFunction(prop.end)){
prop.end = prop.end(n);
}
var isColor = (p.toLowerCase().indexOf("color") >= 0);
function getStyle(node, p){
// domStyle.get(node, "height") can return "auto" or "" on IE; this is more reliable:
var v = { height: node.offsetHeight, width: node.offsetWidth }[p];
if(v !== undefined){ return v; }
v = style.get(node, p);
return (p == "opacity") ? +v : (isColor ? v : parseFloat(v));
}
if(!("end" in prop)){
prop.end = getStyle(n, p);
}else if(!("start" in prop)){
prop.start = getStyle(n, p);
}
if(isColor){
prop.start = new Color(prop.start);
prop.end = new Color(prop.end);
}else{
prop.start = (p == "opacity") ? +prop.start : parseFloat(prop.start);
}
}
this.curve = new PropLine(pm);
});
connect.connect(anim, "onAnimate", lang.hitch(style, "set", anim.node));
return anim; // Animation
};
basefx.anim = function( /*DOMNode|String*/ node,
/*Object*/ properties,
/*Integer?*/ duration,
/*Function?*/ easing,
/*Function?*/ onEnd,
/*Integer?*/ delay){
// summary:
// A simpler interface to `animateProperty()`, also returns
// an instance of `Animation` but begins the animation
// immediately, unlike nearly every other Dojo animation API.
// description:
// Simpler (but somewhat less powerful) version
// of `animateProperty`. It uses defaults for many basic properties
// and allows for positional parameters to be used in place of the
// packed "property bag" which is used for other Dojo animation
// methods.
//
// The `Animation` object returned will be already playing, so
// calling play() on it again is (usually) a no-op.
// node:
// a DOM node or the id of a node to animate CSS properties on
// duration:
// The number of milliseconds over which the animation
// should run. Defaults to the global animation default duration
// (350ms).
// easing:
// An easing function over which to calculate acceleration
// and deceleration of the animation through its duration.
// A default easing algorithm is provided, but you may
// plug in any you wish. A large selection of easing algorithms
// are available in `dojo/fx/easing`.
// onEnd:
// A function to be called when the animation finishes
// running.
// delay:
// The number of milliseconds to delay beginning the
// animation by. The default is 0.
// example:
// Fade out a node
// | basefx.anim("id", { opacity: 0 });
// example:
// Fade out a node over a full second
// | basefx.anim("id", { opacity: 0 }, 1000);
return basefx.animateProperty({ // Animation
node: node,
duration: duration || Animation.prototype.duration,
properties: properties,
easing: easing,
onEnd: onEnd
}).play(delay || 0);
};
if( 1 ){
_mixin(dojo, basefx);
// Alias to drop come 2.0:
dojo._Animation = Animation;
}
return basefx;
});

View File

@@ -1,5 +1,5 @@
/*
Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
Copyright (c) 2004-2012, The Dojo Foundation All Rights Reserved.
Available via Academic Free License >= 2.1 OR the modified BSD license.
see: http://dojotoolkit.org/license for details
*/

View File

@@ -0,0 +1,392 @@
define("dojo/_base/html", ["./kernel", "../dom", "../dom-style", "../dom-attr", "../dom-prop", "../dom-class", "../dom-construct", "../dom-geometry"], function(dojo, dom, style, attr, prop, cls, ctr, geom){
// module:
// dojo/dom
/*=====
return {
// summary:
// This module is a stub for the core dojo DOM API.
};
=====*/
// mix-in dom
dojo.byId = dom.byId;
dojo.isDescendant = dom.isDescendant;
dojo.setSelectable = dom.setSelectable;
// mix-in dom-attr
dojo.getAttr = attr.get;
dojo.setAttr = attr.set;
dojo.hasAttr = attr.has;
dojo.removeAttr = attr.remove;
dojo.getNodeProp = attr.getNodeProp;
dojo.attr = function(node, name, value){
// summary:
// Gets or sets an attribute on an HTML element.
// description:
// Handles normalized getting and setting of attributes on DOM
// Nodes. If 2 arguments are passed, and a the second argument is a
// string, acts as a getter.
//
// If a third argument is passed, or if the second argument is a
// map of attributes, acts as a setter.
//
// When passing functions as values, note that they will not be
// directly assigned to slots on the node, but rather the default
// behavior will be removed and the new behavior will be added
// using `dojo.connect()`, meaning that event handler properties
// will be normalized and that some caveats with regards to
// non-standard behaviors for onsubmit apply. Namely that you
// should cancel form submission using `dojo.stopEvent()` on the
// passed event object instead of returning a boolean value from
// the handler itself.
// node: DOMNode|String
// id or reference to the element to get or set the attribute on
// name: String|Object
// the name of the attribute to get or set.
// value: String?
// The value to set for the attribute
// returns:
// when used as a getter, the value of the requested attribute
// or null if that attribute does not have a specified or
// default value;
//
// when used as a setter, the DOM node
//
// example:
// | // get the current value of the "foo" attribute on a node
// | dojo.attr(dojo.byId("nodeId"), "foo");
// | // or we can just pass the id:
// | dojo.attr("nodeId", "foo");
//
// example:
// | // use attr() to set the tab index
// | dojo.attr("nodeId", "tabIndex", 3);
// |
//
// example:
// Set multiple values at once, including event handlers:
// | dojo.attr("formId", {
// | "foo": "bar",
// | "tabIndex": -1,
// | "method": "POST",
// | "onsubmit": function(e){
// | // stop submitting the form. Note that the IE behavior
// | // of returning true or false will have no effect here
// | // since our handler is connect()ed to the built-in
// | // onsubmit behavior and so we need to use
// | // dojo.stopEvent() to ensure that the submission
// | // doesn't proceed.
// | dojo.stopEvent(e);
// |
// | // submit the form with Ajax
// | dojo.xhrPost({ form: "formId" });
// | }
// | });
//
// example:
// Style is s special case: Only set with an object hash of styles
// | dojo.attr("someNode",{
// | id:"bar",
// | style:{
// | width:"200px", height:"100px", color:"#000"
// | }
// | });
//
// example:
// Again, only set style as an object hash of styles:
// | var obj = { color:"#fff", backgroundColor:"#000" };
// | dojo.attr("someNode", "style", obj);
// |
// | // though shorter to use `dojo.style()` in this case:
// | dojo.style("someNode", obj);
if(arguments.length == 2){
return attr[typeof name == "string" ? "get" : "set"](node, name);
}
return attr.set(node, name, value);
};
// mix-in dom-class
dojo.hasClass = cls.contains;
dojo.addClass = cls.add;
dojo.removeClass = cls.remove;
dojo.toggleClass = cls.toggle;
dojo.replaceClass = cls.replace;
// mix-in dom-construct
dojo._toDom = dojo.toDom = ctr.toDom;
dojo.place = ctr.place;
dojo.create = ctr.create;
dojo.empty = function(node){ ctr.empty(node); };
dojo._destroyElement = dojo.destroy = function(node){ ctr.destroy(node); };
// mix-in dom-geometry
dojo._getPadExtents = dojo.getPadExtents = geom.getPadExtents;
dojo._getBorderExtents = dojo.getBorderExtents = geom.getBorderExtents;
dojo._getPadBorderExtents = dojo.getPadBorderExtents = geom.getPadBorderExtents;
dojo._getMarginExtents = dojo.getMarginExtents = geom.getMarginExtents;
dojo._getMarginSize = dojo.getMarginSize = geom.getMarginSize;
dojo._getMarginBox = dojo.getMarginBox = geom.getMarginBox;
dojo.setMarginBox = geom.setMarginBox;
dojo._getContentBox = dojo.getContentBox = geom.getContentBox;
dojo.setContentSize = geom.setContentSize;
dojo._isBodyLtr = dojo.isBodyLtr = geom.isBodyLtr;
dojo._docScroll = dojo.docScroll = geom.docScroll;
dojo._getIeDocumentElementOffset = dojo.getIeDocumentElementOffset = geom.getIeDocumentElementOffset;
dojo._fixIeBiDiScrollLeft = dojo.fixIeBiDiScrollLeft = geom.fixIeBiDiScrollLeft;
dojo.position = geom.position;
dojo.marginBox = function marginBox(/*DomNode|String*/node, /*Object?*/box){
// summary:
// Getter/setter for the margin-box of node.
// description:
// Getter/setter for the margin-box of node.
// Returns an object in the expected format of box (regardless
// if box is passed). The object might look like:
// `{ l: 50, t: 200, w: 300: h: 150 }`
// for a node offset from its parent 50px to the left, 200px from
// the top with a margin width of 300px and a margin-height of
// 150px.
// node:
// id or reference to DOM Node to get/set box for
// box:
// If passed, denotes that dojo.marginBox() should
// update/set the margin box for node. Box is an object in the
// above format. All properties are optional if passed.
// example:
// Retrieve the margin box of a passed node
// | var box = dojo.marginBox("someNodeId");
// | console.dir(box);
//
// example:
// Set a node's margin box to the size of another node
// | var box = dojo.marginBox("someNodeId");
// | dojo.marginBox("someOtherNode", box);
return box ? geom.setMarginBox(node, box) : geom.getMarginBox(node); // Object
};
dojo.contentBox = function contentBox(/*DomNode|String*/node, /*Object?*/box){
// summary:
// Getter/setter for the content-box of node.
// description:
// Returns an object in the expected format of box (regardless if box is passed).
// The object might look like:
// `{ l: 50, t: 200, w: 300: h: 150 }`
// for a node offset from its parent 50px to the left, 200px from
// the top with a content width of 300px and a content-height of
// 150px. Note that the content box may have a much larger border
// or margin box, depending on the box model currently in use and
// CSS values set/inherited for node.
// While the getter will return top and left values, the
// setter only accepts setting the width and height.
// node:
// id or reference to DOM Node to get/set box for
// box:
// If passed, denotes that dojo.contentBox() should
// update/set the content box for node. Box is an object in the
// above format, but only w (width) and h (height) are supported.
// All properties are optional if passed.
return box ? geom.setContentSize(node, box) : geom.getContentBox(node); // Object
};
dojo.coords = function(/*DomNode|String*/node, /*Boolean?*/includeScroll){
// summary:
// Deprecated: Use position() for border-box x/y/w/h
// or marginBox() for margin-box w/h/l/t.
//
// Returns an object that measures margin-box (w)idth/(h)eight
// and absolute position x/y of the border-box. Also returned
// is computed (l)eft and (t)op values in pixels from the
// node's offsetParent as returned from marginBox().
// Return value will be in the form:
//| { l: 50, t: 200, w: 300: h: 150, x: 100, y: 300 }
// Does not act as a setter. If includeScroll is passed, the x and
// y params are affected as one would expect in dojo.position().
dojo.deprecated("dojo.coords()", "Use dojo.position() or dojo.marginBox().");
node = dom.byId(node);
var s = style.getComputedStyle(node), mb = geom.getMarginBox(node, s);
var abs = geom.position(node, includeScroll);
mb.x = abs.x;
mb.y = abs.y;
return mb; // Object
};
// mix-in dom-prop
dojo.getProp = prop.get;
dojo.setProp = prop.set;
dojo.prop = function(/*DomNode|String*/node, /*String|Object*/name, /*String?*/value){
// summary:
// Gets or sets a property on an HTML element.
// description:
// Handles normalized getting and setting of properties on DOM
// Nodes. If 2 arguments are passed, and a the second argument is a
// string, acts as a getter.
//
// If a third argument is passed, or if the second argument is a
// map of attributes, acts as a setter.
//
// When passing functions as values, note that they will not be
// directly assigned to slots on the node, but rather the default
// behavior will be removed and the new behavior will be added
// using `dojo.connect()`, meaning that event handler properties
// will be normalized and that some caveats with regards to
// non-standard behaviors for onsubmit apply. Namely that you
// should cancel form submission using `dojo.stopEvent()` on the
// passed event object instead of returning a boolean value from
// the handler itself.
// node:
// id or reference to the element to get or set the property on
// name:
// the name of the property to get or set.
// value:
// The value to set for the property
// returns:
// when used as a getter, the value of the requested property
// or null if that attribute does not have a specified or
// default value;
//
// when used as a setter, the DOM node
//
// example:
// | // get the current value of the "foo" property on a node
// | dojo.prop(dojo.byId("nodeId"), "foo");
// | // or we can just pass the id:
// | dojo.prop("nodeId", "foo");
//
// example:
// | // use prop() to set the tab index
// | dojo.prop("nodeId", "tabIndex", 3);
// |
//
// example:
// Set multiple values at once, including event handlers:
// | dojo.prop("formId", {
// | "foo": "bar",
// | "tabIndex": -1,
// | "method": "POST",
// | "onsubmit": function(e){
// | // stop submitting the form. Note that the IE behavior
// | // of returning true or false will have no effect here
// | // since our handler is connect()ed to the built-in
// | // onsubmit behavior and so we need to use
// | // dojo.stopEvent() to ensure that the submission
// | // doesn't proceed.
// | dojo.stopEvent(e);
// |
// | // submit the form with Ajax
// | dojo.xhrPost({ form: "formId" });
// | }
// | });
//
// example:
// Style is s special case: Only set with an object hash of styles
// | dojo.prop("someNode",{
// | id:"bar",
// | style:{
// | width:"200px", height:"100px", color:"#000"
// | }
// | });
//
// example:
// Again, only set style as an object hash of styles:
// | var obj = { color:"#fff", backgroundColor:"#000" };
// | dojo.prop("someNode", "style", obj);
// |
// | // though shorter to use `dojo.style()` in this case:
// | dojo.style("someNode", obj);
if(arguments.length == 2){
return prop[typeof name == "string" ? "get" : "set"](node, name);
}
// setter
return prop.set(node, name, value);
};
// mix-in dom-style
dojo.getStyle = style.get;
dojo.setStyle = style.set;
dojo.getComputedStyle = style.getComputedStyle;
dojo.__toPixelValue = dojo.toPixelValue = style.toPixelValue;
dojo.style = function(node, name, value){
// summary:
// Accesses styles on a node. If 2 arguments are
// passed, acts as a getter. If 3 arguments are passed, acts
// as a setter.
// description:
// Getting the style value uses the computed style for the node, so the value
// will be a calculated value, not just the immediate node.style value.
// Also when getting values, use specific style names,
// like "borderBottomWidth" instead of "border" since compound values like
// "border" are not necessarily reflected as expected.
// If you want to get node dimensions, use `dojo.marginBox()`,
// `dojo.contentBox()` or `dojo.position()`.
// node: DOMNode|String
// id or reference to node to get/set style for
// name: String|Object?
// the style property to set in DOM-accessor format
// ("borderWidth", not "border-width") or an object with key/value
// pairs suitable for setting each property.
// value: String?
// If passed, sets value on the node for style, handling
// cross-browser concerns. When setting a pixel value,
// be sure to include "px" in the value. For instance, top: "200px".
// Otherwise, in some cases, some browsers will not apply the style.
// returns:
// when used as a getter, return the computed style of the node if passing in an ID or node,
// or return the normalized, computed value for the property when passing in a node and a style property
// example:
// Passing only an ID or node returns the computed style object of
// the node:
// | dojo.style("thinger");
// example:
// Passing a node and a style property returns the current
// normalized, computed value for that property:
// | dojo.style("thinger", "opacity"); // 1 by default
//
// example:
// Passing a node, a style property, and a value changes the
// current display of the node and returns the new computed value
// | dojo.style("thinger", "opacity", 0.5); // == 0.5
//
// example:
// Passing a node, an object-style style property sets each of the values in turn and returns the computed style object of the node:
// | dojo.style("thinger", {
// | "opacity": 0.5,
// | "border": "3px solid black",
// | "height": "300px"
// | });
//
// example:
// When the CSS style property is hyphenated, the JavaScript property is camelCased.
// font-size becomes fontSize, and so on.
// | dojo.style("thinger",{
// | fontSize:"14pt",
// | letterSpacing:"1.2em"
// | });
//
// example:
// dojo/NodeList implements .style() using the same syntax, omitting the "node" parameter, calling
// dojo.style() on every element of the list. See: `dojo/query` and `dojo/NodeList`
// | dojo.query(".someClassName").style("visibility","hidden");
// | // or
// | dojo.query("#baz > div").style({
// | opacity:0.75,
// | fontSize:"13pt"
// | });
switch(arguments.length){
case 1:
return style.get(node);
case 2:
return style[typeof name == "string" ? "get" : "set"](node, name);
}
// setter
return style.set(node, name, value);
};
return dojo;
});

View File

@@ -1,5 +1,5 @@
/*
Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
Copyright (c) 2004-2012, The Dojo Foundation All Rights Reserved.
Available via Academic Free License >= 2.1 OR the modified BSD license.
see: http://dojotoolkit.org/license for details
*/

View File

@@ -0,0 +1,91 @@
define("dojo/_base/json", ["./kernel", "../json"], function(dojo, json){
// module:
// dojo/_base/json
/*=====
return {
// summary:
// This module defines the dojo JSON API.
};
=====*/
dojo.fromJson = function(/*String*/ js){
// summary:
// Parses a JavaScript expression and returns a JavaScript value.
// description:
// Throws for invalid JavaScript expressions. It does not use a strict JSON parser. It
// always delegates to eval(). The content passed to this method must therefore come
// from a trusted source.
// It is recommend that you use dojo/json's parse function for an
// implementation uses the (faster) native JSON parse when available.
// js:
// a string literal of a JavaScript expression, for instance:
// `'{ "foo": [ "bar", 1, { "baz": "thud" } ] }'`
return eval("(" + js + ")"); // Object
};
/*=====
dojo._escapeString = function(){
// summary:
// Adds escape sequences for non-visual characters, double quote and
// backslash and surrounds with double quotes to form a valid string
// literal.
};
=====*/
dojo._escapeString = json.stringify; // just delegate to json.stringify
dojo.toJsonIndentStr = "\t";
dojo.toJson = function(/*Object*/ it, /*Boolean?*/ prettyPrint){
// summary:
// Returns a [JSON](http://json.org) serialization of an object.
// description:
// Returns a [JSON](http://json.org) serialization of an object.
// Note that this doesn't check for infinite recursion, so don't do that!
// It is recommend that you use dojo/json's stringify function for an lighter
// and faster implementation that matches the native JSON API and uses the
// native JSON serializer when available.
// it:
// an object to be serialized. Objects may define their own
// serialization via a special "__json__" or "json" function
// property. If a specialized serializer has been defined, it will
// be used as a fallback.
// Note that in 1.6, toJson would serialize undefined, but this no longer supported
// since it is not supported by native JSON serializer.
// prettyPrint:
// if true, we indent objects and arrays to make the output prettier.
// The variable `dojo.toJsonIndentStr` is used as the indent string --
// to use something other than the default (tab), change that variable
// before calling dojo.toJson().
// Note that if native JSON support is available, it will be used for serialization,
// and native implementations vary on the exact spacing used in pretty printing.
// returns:
// A JSON string serialization of the passed-in object.
// example:
// simple serialization of a trivial object
// | var jsonStr = dojo.toJson({ howdy: "stranger!", isStrange: true });
// | doh.is('{"howdy":"stranger!","isStrange":true}', jsonStr);
// example:
// a custom serializer for an objects of a particular class:
// | dojo.declare("Furby", null, {
// | furbies: "are strange",
// | furbyCount: 10,
// | __json__: function(){
// | },
// | });
// use dojo/json
return json.stringify(it, function(key, value){
if(value){
var tf = value.__json__||value.json;
if(typeof tf == "function"){
return tf.call(value);
}
}
return value;
}, prettyPrint && dojo.toJsonIndentStr); // String
};
return dojo;
});

View File

@@ -1,8 +1,8 @@
/*
Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
Copyright (c) 2004-2012, The Dojo Foundation All Rights Reserved.
Available via Academic Free License >= 2.1 OR the modified BSD license.
see: http://dojotoolkit.org/license for details
*/
//>>built
define("dojo/_base/kernel",["../has","./config","require","module"],function(_1,_2,_3,_4){var i,p,_5={},_6={},_7={config:_2,global:this,dijit:_5,dojox:_6};var _8={dojo:["dojo",_7],dijit:["dijit",_5],dojox:["dojox",_6]},_9=(_3.packs&&_3.packs[_4.id.match(/[^\/]+/)[0]].packageMap)||{},_a;for(p in _9){if(_8[p]){_8[p][0]=_9[p];}else{_8[p]=[_9[p],{}];}}for(p in _8){_a=_8[p];_a[1]._scopeName=_a[0];if(!_2.noGlobals){this[_a[0]]=_a[1];}}_7.scopeMap=_8;_7.baseUrl=_7.config.baseUrl=_3.baseUrl;_7.isAsync=!1||_3.async;_7.locale=_2.locale;var _b="$Rev: 28982 $".match(/\d+/);_7.version={major:1,minor:7,patch:3,flag:"",revision:_b?+_b[0]:NaN,toString:function(){var v=_7.version;return v.major+"."+v.minor+"."+v.patch+v.flag+" ("+v.revision+")";}};true||_1.add("extend-dojo",1);_7.eval=function(_c){};(Function("d","d.eval = function(){return d.global.eval ? d.global.eval(arguments[0]) : eval(arguments[0]);}"))(_7);if(0){_7.exit=function(_d){quit(_d);};}else{_7.exit=function(){};}true||_1.add("dojo-guarantee-console",1);if(1){typeof console!="undefined"||(console={});var cn=["assert","count","debug","dir","dirxml","error","group","groupEnd","info","profile","profileEnd","time","timeEnd","trace","warn","log"];var tn;i=0;while((tn=cn[i++])){if(!console[tn]){(function(){var _e=tn+"";console[_e]=("log" in console)?function(){var a=Array.apply({},arguments);a.unshift(_e+":");console["log"](a.join(" "));}:function(){};console[_e]._fake=true;})();}}}_1.add("dojo-debug-messages",!!_2.isDebug);if(_1("dojo-debug-messages")){_7.deprecated=function(_f,_10,_11){var _12="DEPRECATED: "+_f;if(_10){_12+=" "+_10;}if(_11){_12+=" -- will be removed in version: "+_11;}console.warn(_12);};_7.experimental=function(_13,_14){var _15="EXPERIMENTAL: "+_13+" -- APIs subject to change without notice.";if(_14){_15+=" "+_14;}console.warn(_15);};}else{_7.deprecated=_7.experimental=function(){};}true||_1.add("dojo-modulePaths",1);if(1){if(_2.modulePaths){_7.deprecated("dojo.modulePaths","use paths configuration");var _16={};for(p in _2.modulePaths){_16[p.replace(/\./g,"/")]=_2.modulePaths[p];}_3({paths:_16});}}true||_1.add("dojo-moduleUrl",1);if(1){_7.moduleUrl=function(_17,url){_7.deprecated("dojo.moduleUrl()","use require.toUrl","2.0");var _18=null;if(_17){_18=_3.toUrl(_17.replace(/\./g,"/")+(url?("/"+url):"")+"/*.*").replace(/\/\*\.\*/,"")+(url?"":"/");}return _18;};}_7._hasResource={};return _7;});
define("dojo/_base/kernel",["../has","./config","require","module"],function(_1,_2,_3,_4){var i,p,_5={},_6={},_7={config:_2,global:this,dijit:_5,dojox:_6};var _8={dojo:["dojo",_7],dijit:["dijit",_5],dojox:["dojox",_6]},_9=(_3.map&&_3.map[_4.id.match(/[^\/]+/)[0]]),_a;for(p in _9){if(_8[p]){_8[p][0]=_9[p];}else{_8[p]=[_9[p],{}];}}for(p in _8){_a=_8[p];_a[1]._scopeName=_a[0];if(!_2.noGlobals){this[_a[0]]=_a[1];}}_7.scopeMap=_8;_7.baseUrl=_7.config.baseUrl=_3.baseUrl;_7.isAsync=!1||_3.async;_7.locale=_2.locale;var _b="$Rev: 30226 $".match(/\d+/);_7.version={major:1,minor:8,patch:3,flag:"",revision:_b?+_b[0]:NaN,toString:function(){var v=_7.version;return v.major+"."+v.minor+"."+v.patch+v.flag+" ("+v.revision+")";}};1||_1.add("extend-dojo",1);(Function("d","d.eval = function(){return d.global.eval ? d.global.eval(arguments[0]) : eval(arguments[0]);}"))(_7);if(0){_7.exit=function(_c){quit(_c);};}else{_7.exit=function(){};}1||_1.add("dojo-guarantee-console",1);if(1){typeof console!="undefined"||(console={});var cn=["assert","count","debug","dir","dirxml","error","group","groupEnd","info","profile","profileEnd","time","timeEnd","trace","warn","log"];var tn;i=0;while((tn=cn[i++])){if(!console[tn]){(function(){var _d=tn+"";console[_d]=("log" in console)?function(){var a=Array.apply({},arguments);a.unshift(_d+":");console["log"](a.join(" "));}:function(){};console[_d]._fake=true;})();}}}_1.add("dojo-debug-messages",!!_2.isDebug);_7.deprecated=_7.experimental=function(){};if(_1("dojo-debug-messages")){_7.deprecated=function(_e,_f,_10){var _11="DEPRECATED: "+_e;if(_f){_11+=" "+_f;}if(_10){_11+=" -- will be removed in version: "+_10;}console.warn(_11);};_7.experimental=function(_12,_13){var _14="EXPERIMENTAL: "+_12+" -- APIs subject to change without notice.";if(_13){_14+=" "+_13;}console.warn(_14);};}1||_1.add("dojo-modulePaths",1);if(1){if(_2.modulePaths){_7.deprecated("dojo.modulePaths","use paths configuration");var _15={};for(p in _2.modulePaths){_15[p.replace(/\./g,"/")]=_2.modulePaths[p];}_3({paths:_15});}}1||_1.add("dojo-moduleUrl",1);if(1){_7.moduleUrl=function(_16,url){_7.deprecated("dojo.moduleUrl()","use require.toUrl","2.0");var _17=null;if(_16){_17=_3.toUrl(_16.replace(/\./g,"/")+(url?("/"+url):"")+"/*.*").replace(/\/\*\.\*/,"")+(url?"":"/");}return _17;};}_7._hasResource={};return _7;});

View File

@@ -0,0 +1,299 @@
define("dojo/_base/kernel", ["../has", "./config", "require", "module"], function(has, config, require, module){
// module:
// dojo/_base/kernel
// This module is the foundational module of the dojo boot sequence; it defines the dojo object.
var
// loop variables for this module
i, p,
// create dojo, dijit, and dojox
// FIXME: in 2.0 remove dijit, dojox being created by dojo
dijit = {},
dojox = {},
dojo = {
// summary:
// This module is the foundational module of the dojo boot sequence; it defines the dojo object.
// notice dojo takes ownership of the value of the config module
config:config,
global:this,
dijit:dijit,
dojox:dojox
};
// Configure the scope map. For a 100% AMD application, the scope map is not needed other than to provide
// a _scopeName property for the dojo, dijit, and dojox root object so those packages can create
// unique names in the global space.
//
// Built, legacy modules use the scope map to allow those modules to be expressed as if dojo, dijit, and dojox,
// where global when in fact they are either global under different names or not global at all. In v1.6-, the
// config variable "scopeMap" was used to map names as used within a module to global names. This has been
// subsumed by the AMD map configuration variable which can relocate packages to different names. For backcompat,
// only the "*" mapping is supported. See http://livedocs.dojotoolkit.org/developer/design/loader#legacy-cross-domain-mode for details.
//
// The following computations contort the packageMap for this dojo instance into a scopeMap.
var scopeMap =
// a map from a name used in a legacy module to the (global variable name, object addressed by that name)
// always map dojo, dijit, and dojox
{
dojo:["dojo", dojo],
dijit:["dijit", dijit],
dojox:["dojox", dojox]
},
packageMap =
// the package map for this dojo instance; note, a foreign loader or no pacakgeMap results in the above default config
(require.map && require.map[module.id.match(/[^\/]+/)[0]]),
item;
// process all mapped top-level names for this instance of dojo
for(p in packageMap){
if(scopeMap[p]){
// mapped dojo, dijit, or dojox
scopeMap[p][0] = packageMap[p];
}else{
// some other top-level name
scopeMap[p] = [packageMap[p], {}];
}
}
// publish those names to _scopeName and, optionally, the global namespace
for(p in scopeMap){
item = scopeMap[p];
item[1]._scopeName = item[0];
if(!config.noGlobals){
this[item[0]] = item[1];
}
}
dojo.scopeMap = scopeMap;
/*===== dojo.__docParserConfigureScopeMap(scopeMap); =====*/
// FIXME: dojo.baseUrl and dojo.config.baseUrl should be deprecated
dojo.baseUrl = dojo.config.baseUrl = require.baseUrl;
dojo.isAsync = ! 1 || require.async;
dojo.locale = config.locale;
var rev = "$Rev: 30226 $".match(/\d+/);
dojo.version = {
// summary:
// Version number of the Dojo Toolkit
// description:
// Hash about the version, including
//
// - major: Integer: Major version. If total version is "1.2.0beta1", will be 1
// - minor: Integer: Minor version. If total version is "1.2.0beta1", will be 2
// - patch: Integer: Patch version. If total version is "1.2.0beta1", will be 0
// - flag: String: Descriptor flag. If total version is "1.2.0beta1", will be "beta1"
// - revision: Number: The SVN rev from which dojo was pulled
major: 1, minor: 8, patch: 3, flag: "",
revision: rev ? +rev[0] : NaN,
toString: function(){
var v = dojo.version;
return v.major + "." + v.minor + "." + v.patch + v.flag + " (" + v.revision + ")"; // String
}
};
// If 1 is truthy, then as a dojo module is defined it should push it's definitions
// into the dojo object, and conversely. In 2.0, it will likely be unusual to augment another object
// as a result of defining a module. This has feature gives a way to force 2.0 behavior as the code
// is migrated. Absent specific advice otherwise, set extend-dojo to truthy.
1 || has.add("extend-dojo", 1);
(Function("d", "d.eval = function(){return d.global.eval ? d.global.eval(arguments[0]) : eval(arguments[0]);}"))(dojo);
/*=====
dojo.eval = function(scriptText){
// summary:
// A legacy method created for use exclusively by internal Dojo methods. Do not use this method
// directly unless you understand its possibly-different implications on the platforms your are targeting.
// description:
// Makes an attempt to evaluate scriptText in the global scope. The function works correctly for browsers
// that support indirect eval.
//
// As usual, IE does not. On IE, the only way to implement global eval is to
// use execScript. Unfortunately, execScript does not return a value and breaks some current usages of dojo.eval.
// This implementation uses the technique of executing eval in the scope of a function that is a single scope
// frame below the global scope; thereby coming close to the global scope. Note carefully that
//
// dojo.eval("var pi = 3.14;");
//
// will define global pi in non-IE environments, but define pi only in a temporary local scope for IE. If you want
// to define a global variable using dojo.eval, write something like
//
// dojo.eval("window.pi = 3.14;")
// scriptText:
// The text to evaluation.
// returns:
// The result of the evaluation. Often `undefined`
};
=====*/
if( 0 ){
dojo.exit = function(exitcode){
quit(exitcode);
};
}else{
dojo.exit = function(){
};
}
1 || has.add("dojo-guarantee-console",
// ensure that console.log, console.warn, etc. are defined
1
);
if( 1 ){
typeof console != "undefined" || (console = {});
// Be careful to leave 'log' always at the end
var cn = [
"assert", "count", "debug", "dir", "dirxml", "error", "group",
"groupEnd", "info", "profile", "profileEnd", "time", "timeEnd",
"trace", "warn", "log"
];
var tn;
i = 0;
while((tn = cn[i++])){
if(!console[tn]){
(function(){
var tcn = tn + "";
console[tcn] = ('log' in console) ? function(){
var a = Array.apply({}, arguments);
a.unshift(tcn + ":");
console["log"](a.join(" "));
} : function(){};
console[tcn]._fake = true;
})();
}
}
}
has.add("dojo-debug-messages",
// include dojo.deprecated/dojo.experimental implementations
!!config.isDebug
);
dojo.deprecated = dojo.experimental = function(){};
if(has("dojo-debug-messages")){
dojo.deprecated = function(/*String*/ behaviour, /*String?*/ extra, /*String?*/ removal){
// summary:
// Log a debug message to indicate that a behavior has been
// deprecated.
// behaviour: String
// The API or behavior being deprecated. Usually in the form
// of "myApp.someFunction()".
// extra: String?
// Text to append to the message. Often provides advice on a
// new function or facility to achieve the same goal during
// the deprecation period.
// removal: String?
// Text to indicate when in the future the behavior will be
// removed. Usually a version number.
// example:
// | dojo.deprecated("myApp.getTemp()", "use myApp.getLocaleTemp() instead", "1.0");
var message = "DEPRECATED: " + behaviour;
if(extra){ message += " " + extra; }
if(removal){ message += " -- will be removed in version: " + removal; }
console.warn(message);
};
dojo.experimental = function(/* String */ moduleName, /* String? */ extra){
// summary:
// Marks code as experimental.
// description:
// This can be used to mark a function, file, or module as
// experimental. Experimental code is not ready to be used, and the
// APIs are subject to change without notice. Experimental code may be
// completed deleted without going through the normal deprecation
// process.
// moduleName: String
// The name of a module, or the name of a module file or a specific
// function
// extra: String?
// some additional message for the user
// example:
// | dojo.experimental("dojo.data.Result");
// example:
// | dojo.experimental("dojo.weather.toKelvin()", "PENDING approval from NOAA");
var message = "EXPERIMENTAL: " + moduleName + " -- APIs subject to change without notice.";
if(extra){ message += " " + extra; }
console.warn(message);
};
}
1 || has.add("dojo-modulePaths",
// consume dojo.modulePaths processing
1
);
if( 1 ){
// notice that modulePaths won't be applied to any require's before the dojo/_base/kernel factory is run;
// this is the v1.6- behavior.
if(config.modulePaths){
dojo.deprecated("dojo.modulePaths", "use paths configuration");
var paths = {};
for(p in config.modulePaths){
paths[p.replace(/\./g, "/")] = config.modulePaths[p];
}
require({paths:paths});
}
}
1 || has.add("dojo-moduleUrl",
// include dojo.moduleUrl
1
);
if( 1 ){
dojo.moduleUrl = function(/*String*/module, /*String?*/url){
// summary:
// Returns a URL relative to a module.
// example:
// | var pngPath = dojo.moduleUrl("acme","images/small.png");
// | console.dir(pngPath); // list the object properties
// | // create an image and set it's source to pngPath's value:
// | var img = document.createElement("img");
// | img.src = pngPath;
// | // add our image to the document
// | dojo.body().appendChild(img);
// example:
// you may de-reference as far as you like down the package
// hierarchy. This is sometimes handy to avoid lenghty relative
// urls or for building portable sub-packages. In this example,
// the `acme.widget` and `acme.util` directories may be located
// under different roots (see `dojo.registerModulePath`) but the
// the modules which reference them can be unaware of their
// relative locations on the filesystem:
// | // somewhere in a configuration block
// | dojo.registerModulePath("acme.widget", "../../acme/widget");
// | dojo.registerModulePath("acme.util", "../../util");
// |
// | // ...
// |
// | // code in a module using acme resources
// | var tmpltPath = dojo.moduleUrl("acme.widget","templates/template.html");
// | var dataPath = dojo.moduleUrl("acme.util","resources/data.json");
dojo.deprecated("dojo.moduleUrl()", "use require.toUrl", "2.0");
// require.toUrl requires a filetype; therefore, just append the suffix "/*.*" to guarantee a filetype, then
// remove the suffix from the result. This way clients can request a url w/out a filetype. This should be
// rare, but it maintains backcompat for the v1.x line (note: dojo.moduleUrl will be removed in v2.0).
// Notice * is an illegal filename so it won't conflict with any real path map that may exist the paths config.
var result = null;
if(module){
result = require.toUrl(module.replace(/\./g, "/") + (url ? ("/" + url) : "") + "/*.*").replace(/\/\*\.\*/, "") + (url ? "" : "/");
}
return result;
};
}
dojo._hasResource = {}; // for backward compatibility with layers built with 1.6 tooling
return dojo;
});

View File

@@ -1,8 +1,8 @@
/*
Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
Copyright (c) 2004-2012, The Dojo Foundation All Rights Reserved.
Available via Academic Free License >= 2.1 OR the modified BSD license.
see: http://dojotoolkit.org/license for details
*/
//>>built
define("dojo/_base/lang",["./kernel","../has","./sniff"],function(_1,_2){_2.add("bug-for-in-skips-shadowed",function(){for(var i in {toString:1}){return 0;}return 1;});var _3=_2("bug-for-in-skips-shadowed")?"hasOwnProperty.valueOf.isPrototypeOf.propertyIsEnumerable.toLocaleString.toString.constructor".split("."):[],_4=_3.length,_5=function(_6,_7,_8){var _9,s,i,_a={};for(_9 in _7){s=_7[_9];if(!(_9 in _6)||(_6[_9]!==s&&(!(_9 in _a)||_a[_9]!==s))){_6[_9]=_8?_8(s):s;}}if(_2("bug-for-in-skips-shadowed")){if(_7){for(i=0;i<_4;++i){_9=_3[i];s=_7[_9];if(!(_9 in _6)||(_6[_9]!==s&&(!(_9 in _a)||_a[_9]!==s))){_6[_9]=_8?_8(s):s;}}}}return _6;},_b=function(_c,_d){if(!_c){_c={};}for(var i=1,l=arguments.length;i<l;i++){_e._mixin(_c,arguments[i]);}return _c;},_f=function(_10,_11,_12){var p,i=0,_13=_1.global;if(!_12){if(!_10.length){return _13;}else{p=_10[i++];try{_12=_1.scopeMap[p]&&_1.scopeMap[p][1];}catch(e){}_12=_12||(p in _13?_13[p]:(_11?_13[p]={}:undefined));}}while(_12&&(p=_10[i++])){_12=(p in _12?_12[p]:(_11?_12[p]={}:undefined));}return _12;},_14=function(_15,_16,_17){var _18=_15.split("."),p=_18.pop(),obj=_f(_18,true,_17);return obj&&p?(obj[p]=_16):undefined;},_19=function(_1a,_1b,_1c){return _f(_1a.split("."),_1b,_1c);},_1d=function(_1e,obj){return _e.getObject(_1e,false,obj)!==undefined;},_1f=Object.prototype.toString,_20=function(it){return (typeof it=="string"||it instanceof String);},_21=function(it){return it&&(it instanceof Array||typeof it=="array");},_22=function(it){return _1f.call(it)==="[object Function]";},_23=function(it){return it!==undefined&&(it===null||typeof it=="object"||_e.isArray(it)||_e.isFunction(it));},_24=function(it){return it&&it!==undefined&&!_e.isString(it)&&!_e.isFunction(it)&&!(it.tagName&&it.tagName.toLowerCase()=="form")&&(_e.isArray(it)||isFinite(it.length));},_25=function(it){return it&&!_e.isFunction(it)&&/\{\s*\[native code\]\s*\}/.test(String(it));},_26=function(_27,_28){for(var i=1,l=arguments.length;i<l;i++){_e._mixin(_27.prototype,arguments[i]);}return _27;},_29=function(_2a,_2b){var pre=_2c(arguments,2);var _2d=_e.isString(_2b);return function(){var _2e=_2c(arguments);var f=_2d?(_2a||_1.global)[_2b]:_2b;return f&&f.apply(_2a||this,pre.concat(_2e));};},_2f=function(_30,_31){if(arguments.length>2){return _e._hitchArgs.apply(_1,arguments);}if(!_31){_31=_30;_30=null;}if(_e.isString(_31)){_30=_30||_1.global;if(!_30[_31]){throw (["dojo.hitch: scope[\"",_31,"\"] is null (scope=\"",_30,"\")"].join(""));}return function(){return _30[_31].apply(_30,arguments||[]);};}return !_30?_31:function(){return _31.apply(_30,arguments||[]);};},_32=(function(){function TMP(){};return function(obj,_33){TMP.prototype=obj;var tmp=new TMP();TMP.prototype=null;if(_33){_e._mixin(tmp,_33);}return tmp;};})(),_34=function(obj,_35,_36){return (_36||[]).concat(Array.prototype.slice.call(obj,_35||0));},_2c=_2("ie")?(function(){function _37(obj,_38,_39){var arr=_39||[];for(var x=_38||0;x<obj.length;x++){arr.push(obj[x]);}return arr;};return function(obj){return ((obj.item)?_37:_34).apply(this,arguments);};})():_34,_3a=function(_3b){var arr=[null];return _e.hitch.apply(_1,arr.concat(_e._toArray(arguments)));},_3c=function(src){if(!src||typeof src!="object"||_e.isFunction(src)){return src;}if(src.nodeType&&"cloneNode" in src){return src.cloneNode(true);}if(src instanceof Date){return new Date(src.getTime());}if(src instanceof RegExp){return new RegExp(src);}var r,i,l;if(_e.isArray(src)){r=[];for(i=0,l=src.length;i<l;++i){if(i in src){r.push(_3c(src[i]));}}}else{r=src.constructor?new src.constructor():{};}return _e._mixin(r,src,_3c);},_3d=String.prototype.trim?function(str){return str.trim();}:function(str){return str.replace(/^\s\s*/,"").replace(/\s\s*$/,"");},_3e=/\{([^\}]+)\}/g,_3f=function(_40,map,_41){return _40.replace(_41||_3e,_e.isFunction(map)?map:function(_42,k){return _19(k,false,map);});},_e={_extraNames:_3,_mixin:_5,mixin:_b,setObject:_14,getObject:_19,exists:_1d,isString:_20,isArray:_21,isFunction:_22,isObject:_23,isArrayLike:_24,isAlien:_25,extend:_26,_hitchArgs:_29,hitch:_2f,delegate:_32,_toArray:_2c,partial:_3a,clone:_3c,trim:_3d,replace:_3f};1&&_b(_1,_e);return _e;});
define("dojo/_base/lang",["./kernel","../has","../sniff"],function(_1,_2){_2.add("bug-for-in-skips-shadowed",function(){for(var i in {toString:1}){return 0;}return 1;});var _3=_2("bug-for-in-skips-shadowed")?"hasOwnProperty.valueOf.isPrototypeOf.propertyIsEnumerable.toLocaleString.toString.constructor".split("."):[],_4=_3.length,_5=function(_6,_7,_8){var p,i=0,_9=_1.global;if(!_8){if(!_6.length){return _9;}else{p=_6[i++];try{_8=_1.scopeMap[p]&&_1.scopeMap[p][1];}catch(e){}_8=_8||(p in _9?_9[p]:(_7?_9[p]={}:undefined));}}while(_8&&(p=_6[i++])){_8=(p in _8?_8[p]:(_7?_8[p]={}:undefined));}return _8;},_a=Object.prototype.toString,_b=function(_c,_d,_e){return (_e||[]).concat(Array.prototype.slice.call(_c,_d||0));},_f=/\{([^\}]+)\}/g;var _10={_extraNames:_3,_mixin:function(_11,_12,_13){var _14,s,i,_15={};for(_14 in _12){s=_12[_14];if(!(_14 in _11)||(_11[_14]!==s&&(!(_14 in _15)||_15[_14]!==s))){_11[_14]=_13?_13(s):s;}}if(_2("bug-for-in-skips-shadowed")){if(_12){for(i=0;i<_4;++i){_14=_3[i];s=_12[_14];if(!(_14 in _11)||(_11[_14]!==s&&(!(_14 in _15)||_15[_14]!==s))){_11[_14]=_13?_13(s):s;}}}}return _11;},mixin:function(_16,_17){if(!_16){_16={};}for(var i=1,l=arguments.length;i<l;i++){_10._mixin(_16,arguments[i]);}return _16;},setObject:function(_18,_19,_1a){var _1b=_18.split("."),p=_1b.pop(),obj=_5(_1b,true,_1a);return obj&&p?(obj[p]=_19):undefined;},getObject:function(_1c,_1d,_1e){return _5(_1c.split("."),_1d,_1e);},exists:function(_1f,obj){return _10.getObject(_1f,false,obj)!==undefined;},isString:function(it){return (typeof it=="string"||it instanceof String);},isArray:function(it){return it&&(it instanceof Array||typeof it=="array");},isFunction:function(it){return _a.call(it)==="[object Function]";},isObject:function(it){return it!==undefined&&(it===null||typeof it=="object"||_10.isArray(it)||_10.isFunction(it));},isArrayLike:function(it){return it&&it!==undefined&&!_10.isString(it)&&!_10.isFunction(it)&&!(it.tagName&&it.tagName.toLowerCase()=="form")&&(_10.isArray(it)||isFinite(it.length));},isAlien:function(it){return it&&!_10.isFunction(it)&&/\{\s*\[native code\]\s*\}/.test(String(it));},extend:function(_20,_21){for(var i=1,l=arguments.length;i<l;i++){_10._mixin(_20.prototype,arguments[i]);}return _20;},_hitchArgs:function(_22,_23){var pre=_10._toArray(arguments,2);var _24=_10.isString(_23);return function(){var _25=_10._toArray(arguments);var f=_24?(_22||_1.global)[_23]:_23;return f&&f.apply(_22||this,pre.concat(_25));};},hitch:function(_26,_27){if(arguments.length>2){return _10._hitchArgs.apply(_1,arguments);}if(!_27){_27=_26;_26=null;}if(_10.isString(_27)){_26=_26||_1.global;if(!_26[_27]){throw (["lang.hitch: scope[\"",_27,"\"] is null (scope=\"",_26,"\")"].join(""));}return function(){return _26[_27].apply(_26,arguments||[]);};}return !_26?_27:function(){return _27.apply(_26,arguments||[]);};},delegate:(function(){function TMP(){};return function(obj,_28){TMP.prototype=obj;var tmp=new TMP();TMP.prototype=null;if(_28){_10._mixin(tmp,_28);}return tmp;};})(),_toArray:_2("ie")?(function(){function _29(obj,_2a,_2b){var arr=_2b||[];for(var x=_2a||0;x<obj.length;x++){arr.push(obj[x]);}return arr;};return function(obj){return ((obj.item)?_29:_b).apply(this,arguments);};})():_b,partial:function(_2c){var arr=[null];return _10.hitch.apply(_1,arr.concat(_10._toArray(arguments)));},clone:function(src){if(!src||typeof src!="object"||_10.isFunction(src)){return src;}if(src.nodeType&&"cloneNode" in src){return src.cloneNode(true);}if(src instanceof Date){return new Date(src.getTime());}if(src instanceof RegExp){return new RegExp(src);}var r,i,l;if(_10.isArray(src)){r=[];for(i=0,l=src.length;i<l;++i){if(i in src){r.push(_10.clone(src[i]));}}}else{r=src.constructor?new src.constructor():{};}return _10._mixin(r,src,_10.clone);},trim:String.prototype.trim?function(str){return str.trim();}:function(str){return str.replace(/^\s\s*/,"").replace(/\s\s*$/,"");},replace:function(_2d,map,_2e){return _2d.replace(_2e||_f,_10.isFunction(map)?map:function(_2f,k){return _10.getObject(k,false,map);});}};1&&_10.mixin(_1,_10);return _10;});

View File

@@ -0,0 +1,605 @@
define("dojo/_base/lang", ["./kernel", "../has", "../sniff"], function(dojo, has){
// module:
// dojo/_base/lang
has.add("bug-for-in-skips-shadowed", function(){
// if true, the for-in iterator skips object properties that exist in Object's prototype (IE 6 - ?)
for(var i in {toString: 1}){
return 0;
}
return 1;
});
// Helper methods
var _extraNames =
has("bug-for-in-skips-shadowed") ?
"hasOwnProperty.valueOf.isPrototypeOf.propertyIsEnumerable.toLocaleString.toString.constructor".split(".") : [],
_extraLen = _extraNames.length,
getProp = function(/*Array*/parts, /*Boolean*/create, /*Object*/context){
var p, i = 0, dojoGlobal = dojo.global;
if(!context){
if(!parts.length){
return dojoGlobal;
}else{
p = parts[i++];
try{
context = dojo.scopeMap[p] && dojo.scopeMap[p][1];
}catch(e){}
context = context || (p in dojoGlobal ? dojoGlobal[p] : (create ? dojoGlobal[p] = {} : undefined));
}
}
while(context && (p = parts[i++])){
context = (p in context ? context[p] : (create ? context[p] = {} : undefined));
}
return context; // mixed
},
opts = Object.prototype.toString,
efficient = function(obj, offset, startWith){
return (startWith||[]).concat(Array.prototype.slice.call(obj, offset||0));
},
_pattern = /\{([^\}]+)\}/g;
// Module export
var lang = {
// summary:
// This module defines Javascript language extensions.
// _extraNames: String[]
// Lists property names that must be explicitly processed during for-in iteration
// in environments that have has("bug-for-in-skips-shadowed") true.
_extraNames:_extraNames,
_mixin: function(dest, source, copyFunc){
// summary:
// Copies/adds all properties of source to dest; returns dest.
// dest: Object
// The object to which to copy/add all properties contained in source.
// source: Object
// The object from which to draw all properties to copy into dest.
// copyFunc: Function?
// The process used to copy/add a property in source; defaults to the Javascript assignment operator.
// returns:
// dest, as modified
// description:
// All properties, including functions (sometimes termed "methods"), excluding any non-standard extensions
// found in Object.prototype, are copied/added to dest. Copying/adding each particular property is
// delegated to copyFunc (if any); copyFunc defaults to the Javascript assignment operator if not provided.
// Notice that by default, _mixin executes a so-called "shallow copy" and aggregate types are copied/added by reference.
var name, s, i, empty = {};
for(name in source){
// the (!(name in empty) || empty[name] !== s) condition avoids copying properties in "source"
// inherited from Object.prototype. For example, if dest has a custom toString() method,
// don't overwrite it with the toString() method that source inherited from Object.prototype
s = source[name];
if(!(name in dest) || (dest[name] !== s && (!(name in empty) || empty[name] !== s))){
dest[name] = copyFunc ? copyFunc(s) : s;
}
}
if(has("bug-for-in-skips-shadowed")){
if(source){
for(i = 0; i < _extraLen; ++i){
name = _extraNames[i];
s = source[name];
if(!(name in dest) || (dest[name] !== s && (!(name in empty) || empty[name] !== s))){
dest[name] = copyFunc ? copyFunc(s) : s;
}
}
}
}
return dest; // Object
},
mixin: function(dest, sources){
// summary:
// Copies/adds all properties of one or more sources to dest; returns dest.
// dest: Object
// The object to which to copy/add all properties contained in source. If dest is falsy, then
// a new object is manufactured before copying/adding properties begins.
// sources: Object...
// One of more objects from which to draw all properties to copy into dest. sources are processed
// left-to-right and if more than one of these objects contain the same property name, the right-most
// value "wins".
// returns: Object
// dest, as modified
// description:
// All properties, including functions (sometimes termed "methods"), excluding any non-standard extensions
// found in Object.prototype, are copied/added from sources to dest. sources are processed left to right.
// The Javascript assignment operator is used to copy/add each property; therefore, by default, mixin
// executes a so-called "shallow copy" and aggregate types are copied/added by reference.
// example:
// make a shallow copy of an object
// | var copy = lang.mixin({}, source);
// example:
// many class constructors often take an object which specifies
// values to be configured on the object. In this case, it is
// often simplest to call `lang.mixin` on the `this` object:
// | declare("acme.Base", null, {
// | constructor: function(properties){
// | // property configuration:
// | lang.mixin(this, properties);
// |
// | console.log(this.quip);
// | // ...
// | },
// | quip: "I wasn't born yesterday, you know - I've seen movies.",
// | // ...
// | });
// |
// | // create an instance of the class and configure it
// | var b = new acme.Base({quip: "That's what it does!" });
// example:
// copy in properties from multiple objects
// | var flattened = lang.mixin(
// | {
// | name: "Frylock",
// | braces: true
// | },
// | {
// | name: "Carl Brutanananadilewski"
// | }
// | );
// |
// | // will print "Carl Brutanananadilewski"
// | console.log(flattened.name);
// | // will print "true"
// | console.log(flattened.braces);
if(!dest){ dest = {}; }
for(var i = 1, l = arguments.length; i < l; i++){
lang._mixin(dest, arguments[i]);
}
return dest; // Object
},
setObject: function(name, value, context){
// summary:
// Set a property from a dot-separated string, such as "A.B.C"
// description:
// Useful for longer api chains where you have to test each object in
// the chain, or when you have an object reference in string format.
// Objects are created as needed along `path`. Returns the passed
// value if setting is successful or `undefined` if not.
// name: String
// Path to a property, in the form "A.B.C".
// value: anything
// value or object to place at location given by name
// context: Object?
// Optional. Object to use as root of path. Defaults to
// `dojo.global`.
// example:
// set the value of `foo.bar.baz`, regardless of whether
// intermediate objects already exist:
// | lang.setObject("foo.bar.baz", value);
// example:
// without `lang.setObject`, we often see code like this:
// | // ensure that intermediate objects are available
// | if(!obj["parent"]){ obj.parent = {}; }
// | if(!obj.parent["child"]){ obj.parent.child = {}; }
// | // now we can safely set the property
// | obj.parent.child.prop = "some value";
// whereas with `lang.setObject`, we can shorten that to:
// | lang.setObject("parent.child.prop", "some value", obj);
var parts = name.split("."), p = parts.pop(), obj = getProp(parts, true, context);
return obj && p ? (obj[p] = value) : undefined; // Object
},
getObject: function(name, create, context){
// summary:
// Get a property from a dot-separated string, such as "A.B.C"
// description:
// Useful for longer api chains where you have to test each object in
// the chain, or when you have an object reference in string format.
// name: String
// Path to an property, in the form "A.B.C".
// create: Boolean?
// Optional. Defaults to `false`. If `true`, Objects will be
// created at any point along the 'path' that is undefined.
// context: Object?
// Optional. Object to use as root of path. Defaults to
// 'dojo.global'. Null may be passed.
return getProp(name.split("."), create, context); // Object
},
exists: function(name, obj){
// summary:
// determine if an object supports a given method
// description:
// useful for longer api chains where you have to test each object in
// the chain. Useful for object and method detection.
// name: String
// Path to an object, in the form "A.B.C".
// obj: Object?
// Object to use as root of path. Defaults to
// 'dojo.global'. Null may be passed.
// example:
// | // define an object
// | var foo = {
// | bar: { }
// | };
// |
// | // search the global scope
// | lang.exists("foo.bar"); // true
// | lang.exists("foo.bar.baz"); // false
// |
// | // search from a particular scope
// | lang.exists("bar", foo); // true
// | lang.exists("bar.baz", foo); // false
return lang.getObject(name, false, obj) !== undefined; // Boolean
},
// Crockford (ish) functions
isString: function(it){
// summary:
// Return true if it is a String
// it: anything
// Item to test.
return (typeof it == "string" || it instanceof String); // Boolean
},
isArray: function(it){
// summary:
// Return true if it is an Array.
// Does not work on Arrays created in other windows.
// it: anything
// Item to test.
return it && (it instanceof Array || typeof it == "array"); // Boolean
},
isFunction: function(it){
// summary:
// Return true if it is a Function
// it: anything
// Item to test.
return opts.call(it) === "[object Function]";
},
isObject: function(it){
// summary:
// Returns true if it is a JavaScript object (or an Array, a Function
// or null)
// it: anything
// Item to test.
return it !== undefined &&
(it === null || typeof it == "object" || lang.isArray(it) || lang.isFunction(it)); // Boolean
},
isArrayLike: function(it){
// summary:
// similar to isArray() but more permissive
// it: anything
// Item to test.
// returns:
// If it walks like a duck and quacks like a duck, return `true`
// description:
// Doesn't strongly test for "arrayness". Instead, settles for "isn't
// a string or number and has a length property". Arguments objects
// and DOM collections will return true when passed to
// isArrayLike(), but will return false when passed to
// isArray().
return it && it !== undefined && // Boolean
// keep out built-in constructors (Number, String, ...) which have length
// properties
!lang.isString(it) && !lang.isFunction(it) &&
!(it.tagName && it.tagName.toLowerCase() == 'form') &&
(lang.isArray(it) || isFinite(it.length));
},
isAlien: function(it){
// summary:
// Returns true if it is a built-in function or some other kind of
// oddball that *should* report as a function but doesn't
return it && !lang.isFunction(it) && /\{\s*\[native code\]\s*\}/.test(String(it)); // Boolean
},
extend: function(ctor, props){
// summary:
// Adds all properties and methods of props to constructor's
// prototype, making them available to all instances created with
// constructor.
// ctor: Object
// Target constructor to extend.
// props: Object
// One or more objects to mix into ctor.prototype
for(var i=1, l=arguments.length; i<l; i++){
lang._mixin(ctor.prototype, arguments[i]);
}
return ctor; // Object
},
_hitchArgs: function(scope, method){
var pre = lang._toArray(arguments, 2);
var named = lang.isString(method);
return function(){
// arrayify arguments
var args = lang._toArray(arguments);
// locate our method
var f = named ? (scope||dojo.global)[method] : method;
// invoke with collected args
return f && f.apply(scope || this, pre.concat(args)); // mixed
}; // Function
},
hitch: function(scope, method){
// summary:
// Returns a function that will only ever execute in the a given scope.
// This allows for easy use of object member functions
// in callbacks and other places in which the "this" keyword may
// otherwise not reference the expected scope.
// Any number of default positional arguments may be passed as parameters
// beyond "method".
// Each of these values will be used to "placehold" (similar to curry)
// for the hitched function.
// scope: Object
// The scope to use when method executes. If method is a string,
// scope is also the object containing method.
// method: Function|String...
// A function to be hitched to scope, or the name of the method in
// scope to be hitched.
// example:
// | lang.hitch(foo, "bar")();
// runs foo.bar() in the scope of foo
// example:
// | lang.hitch(foo, myFunction);
// returns a function that runs myFunction in the scope of foo
// example:
// Expansion on the default positional arguments passed along from
// hitch. Passed args are mixed first, additional args after.
// | var foo = { bar: function(a, b, c){ console.log(a, b, c); } };
// | var fn = lang.hitch(foo, "bar", 1, 2);
// | fn(3); // logs "1, 2, 3"
// example:
// | var foo = { bar: 2 };
// | lang.hitch(foo, function(){ this.bar = 10; })();
// execute an anonymous function in scope of foo
if(arguments.length > 2){
return lang._hitchArgs.apply(dojo, arguments); // Function
}
if(!method){
method = scope;
scope = null;
}
if(lang.isString(method)){
scope = scope || dojo.global;
if(!scope[method]){ throw(['lang.hitch: scope["', method, '"] is null (scope="', scope, '")'].join('')); }
return function(){ return scope[method].apply(scope, arguments || []); }; // Function
}
return !scope ? method : function(){ return method.apply(scope, arguments || []); }; // Function
},
delegate: (function(){
// boodman/crockford delegation w/ cornford optimization
function TMP(){}
return function(obj, props){
TMP.prototype = obj;
var tmp = new TMP();
TMP.prototype = null;
if(props){
lang._mixin(tmp, props);
}
return tmp; // Object
};
})(),
/*=====
delegate: function(obj, props){
// summary:
// Returns a new object which "looks" to obj for properties which it
// does not have a value for. Optionally takes a bag of properties to
// seed the returned object with initially.
// description:
// This is a small implementation of the Boodman/Crockford delegation
// pattern in JavaScript. An intermediate object constructor mediates
// the prototype chain for the returned object, using it to delegate
// down to obj for property lookup when object-local lookup fails.
// This can be thought of similarly to ES4's "wrap", save that it does
// not act on types but rather on pure objects.
// obj: Object
// The object to delegate to for properties not found directly on the
// return object or in props.
// props: Object...
// an object containing properties to assign to the returned object
// returns:
// an Object of anonymous type
// example:
// | var foo = { bar: "baz" };
// | var thinger = lang.delegate(foo, { thud: "xyzzy"});
// | thinger.bar == "baz"; // delegated to foo
// | foo.thud == undefined; // by definition
// | thinger.thud == "xyzzy"; // mixed in from props
// | foo.bar = "thonk";
// | thinger.bar == "thonk"; // still delegated to foo's bar
},
=====*/
_toArray: has("ie") ?
(function(){
function slow(obj, offset, startWith){
var arr = startWith||[];
for(var x = offset || 0; x < obj.length; x++){
arr.push(obj[x]);
}
return arr;
}
return function(obj){
return ((obj.item) ? slow : efficient).apply(this, arguments);
};
})() : efficient,
/*=====
_toArray: function(obj, offset, startWith){
// summary:
// Converts an array-like object (i.e. arguments, DOMCollection) to an
// array. Returns a new Array with the elements of obj.
// obj: Object
// the object to "arrayify". We expect the object to have, at a
// minimum, a length property which corresponds to integer-indexed
// properties.
// offset: Number?
// the location in obj to start iterating from. Defaults to 0.
// Optional.
// startWith: Array?
// An array to pack with the properties of obj. If provided,
// properties in obj are appended at the end of startWith and
// startWith is the returned array.
},
=====*/
partial: function(/*Function|String*/ method /*, ...*/){
// summary:
// similar to hitch() except that the scope object is left to be
// whatever the execution context eventually becomes.
// description:
// Calling lang.partial is the functional equivalent of calling:
// | lang.hitch(null, funcName, ...);
// method:
// The function to "wrap"
var arr = [ null ];
return lang.hitch.apply(dojo, arr.concat(lang._toArray(arguments))); // Function
},
clone: function(/*anything*/ src){
// summary:
// Clones objects (including DOM nodes) and all children.
// Warning: do not clone cyclic structures.
// src:
// The object to clone
if(!src || typeof src != "object" || lang.isFunction(src)){
// null, undefined, any non-object, or function
return src; // anything
}
if(src.nodeType && "cloneNode" in src){
// DOM Node
return src.cloneNode(true); // Node
}
if(src instanceof Date){
// Date
return new Date(src.getTime()); // Date
}
if(src instanceof RegExp){
// RegExp
return new RegExp(src); // RegExp
}
var r, i, l;
if(lang.isArray(src)){
// array
r = [];
for(i = 0, l = src.length; i < l; ++i){
if(i in src){
r.push(lang.clone(src[i]));
}
}
// we don't clone functions for performance reasons
// }else if(d.isFunction(src)){
// // function
// r = function(){ return src.apply(this, arguments); };
}else{
// generic objects
r = src.constructor ? new src.constructor() : {};
}
return lang._mixin(r, src, lang.clone);
},
trim: String.prototype.trim ?
function(str){ return str.trim(); } :
function(str){ return str.replace(/^\s\s*/, '').replace(/\s\s*$/, ''); },
/*=====
trim: function(str){
// summary:
// Trims whitespace from both sides of the string
// str: String
// String to be trimmed
// returns: String
// Returns the trimmed string
// description:
// This version of trim() was selected for inclusion into the base due
// to its compact size and relatively good performance
// (see [Steven Levithan's blog](http://blog.stevenlevithan.com/archives/faster-trim-javascript)
// Uses String.prototype.trim instead, if available.
// The fastest but longest version of this function is located at
// lang.string.trim()
},
=====*/
replace: function(tmpl, map, pattern){
// summary:
// Performs parameterized substitutions on a string. Throws an
// exception if any parameter is unmatched.
// tmpl: String
// String to be used as a template.
// map: Object|Function
// If an object, it is used as a dictionary to look up substitutions.
// If a function, it is called for every substitution with following parameters:
// a whole match, a name, an offset, and the whole template
// string (see https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/String/replace
// for more details).
// pattern: RegEx?
// Optional regular expression objects that overrides the default pattern.
// Must be global and match one item. The default is: /\{([^\}]+)\}/g,
// which matches patterns like that: "{xxx}", where "xxx" is any sequence
// of characters, which doesn't include "}".
// returns: String
// Returns the substituted string.
// example:
// | // uses a dictionary for substitutions:
// | lang.replace("Hello, {name.first} {name.last} AKA {nick}!",
// | {
// | nick: "Bob",
// | name: {
// | first: "Robert",
// | middle: "X",
// | last: "Cringely"
// | }
// | });
// | // returns: Hello, Robert Cringely AKA Bob!
// example:
// | // uses an array for substitutions:
// | lang.replace("Hello, {0} {2}!",
// | ["Robert", "X", "Cringely"]);
// | // returns: Hello, Robert Cringely!
// example:
// | // uses a function for substitutions:
// | function sum(a){
// | var t = 0;
// | arrayforEach(a, function(x){ t += x; });
// | return t;
// | }
// | lang.replace(
// | "{count} payments averaging {avg} USD per payment.",
// | lang.hitch(
// | { payments: [11, 16, 12] },
// | function(_, key){
// | switch(key){
// | case "count": return this.payments.length;
// | case "min": return Math.min.apply(Math, this.payments);
// | case "max": return Math.max.apply(Math, this.payments);
// | case "sum": return sum(this.payments);
// | case "avg": return sum(this.payments) / this.payments.length;
// | }
// | }
// | )
// | );
// | // prints: 3 payments averaging 13 USD per payment.
// example:
// | // uses an alternative PHP-like pattern for substitutions:
// | lang.replace("Hello, ${0} ${2}!",
// | ["Robert", "X", "Cringely"], /\$\{([^\}]+)\}/g);
// | // returns: Hello, Robert Cringely!
return tmpl.replace(pattern || _pattern, lang.isFunction(map) ?
map : function(_, k){ return lang.getObject(k, false, map); });
}
};
1 && lang.mixin(dojo, lang);
return lang;
});

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,776 @@
define("dojo/_base/loader", ["./kernel", "../has", "require", "module", "./json", "./lang", "./array"], function(dojo, has, require, thisModule, json, lang, array) {
// module:
// dojo/_base/loader
// This module defines the v1.x synchronous loader API.
// signal the loader in sync mode...
//>>pure-amd
if (! 1 ){
console.error("cannot load the Dojo v1.x loader with a foreign loader");
return 0;
}
1 || has.add("dojo-fast-sync-require", 1);
var makeErrorToken = function(id){
return {src:thisModule.id, id:id};
},
slashName = function(name){
return name.replace(/\./g, "/");
},
buildDetectRe = /\/\/>>built/,
dojoRequireCallbacks = [],
dojoRequireModuleStack = [],
dojoRequirePlugin = function(mid, require, loaded){
dojoRequireCallbacks.push(loaded);
array.forEach(mid.split(","), function(mid){
var module = getModule(mid, require.module);
dojoRequireModuleStack.push(module);
injectModule(module);
});
checkDojoRequirePlugin();
},
checkDojoRequirePlugin = ( 1 ?
// This version of checkDojoRequirePlugin makes the observation that all dojoRequireCallbacks can be released
// when all *non-dojo/require!, dojo/loadInit!* modules are either executed, not requested, or arrived. This is
// the case since there are no more modules the loader is waiting for, therefore, dojo/require! must have
// everything it needs on board.
//
// The potential weakness of this algorithm is that dojo/require will not execute callbacks until *all* dependency
// trees are ready. It is possible that some trees may be ready earlier than others, and this extra wait is non-optimal.
// Still, for big projects, this seems better than the original algorithm below that proved slow in some cases.
// Note, however, the original algorithm had the potential to execute partial trees, but that potential was never enabled.
// There are also other optimization available with the original algorithm that have not been explored.
function(){
var module, mid;
for(mid in modules){
module = modules[mid];
if(module.noReqPluginCheck===undefined){
// tag the module as either a loadInit or require plugin or not for future reference
module.noReqPluginCheck = /loadInit\!/.test(mid) || /require\!/.test(mid) ? 1 : 0;
}
if(!module.executed && !module.noReqPluginCheck && module.injected==requested){
return;
}
}
guardCheckComplete(function(){
var oldCallbacks = dojoRequireCallbacks;
dojoRequireCallbacks = [];
array.forEach(oldCallbacks, function(cb){cb(1);});
});
} : (function(){
// Note: this is the original checkDojoRequirePlugin that is much slower than the algorithm above. However, we know it
// works, so we leave it here in case the algorithm above fails in some corner case.
//
// checkDojoRequirePlugin inspects all of the modules demanded by a dojo/require!<module-list> dependency
// to see if they have arrived. The loader does not release *any* of these modules to be instantiated
// until *all* of these modules are on board, thereby preventing the evaluation of a module with dojo.require's
// that reference modules that are not available.
//
// The algorithm works by traversing the dependency graphs (remember, there can be cycles so they are not trees)
// of each module in the dojoRequireModuleStack array (which contains the list of modules demanded by dojo/require!).
// The moment a single module is discovered that is missing, the algorithm gives up and indicates that not all
// modules are on board. dojo/loadInit! and dojo/require! are ignored because there dependencies are inserted
// directly in dojoRequireModuleStack. For example, if "your/module" module depends on "dojo/require!my/module", then
// *both* "dojo/require!my/module" and "my/module" will be in dojoRequireModuleStack. Obviously, if "my/module"
// is on board, then "dojo/require!my/module" is also satisfied, so the algorithm doesn't check for "dojo/require!my/module".
//
// Note: inserting a dojo/require!<some-module-list> dependency in the dojoRequireModuleStack achieves nothing
// with the current algorithm; however, having such modules present makes it possible to optimize the algorithm
//
// Note: prior versions of this algorithm had an optimization that signaled loaded on dojo/require! dependencies
// individually (rather than waiting for them all to be resolved). The implementation proved problematic with cycles
// and plugins. However, it is possible to reattach that strategy in the future.
// a set from module-id to {undefined | 1 | 0}, where...
// undefined => the module has not been inspected
// 0 => the module or at least one of its dependencies has not arrived
// 1 => the module is a loadInit! or require! plugin resource, or is currently being traversed (therefore, assume
// OK until proven otherwise), or has been completely traversed and all dependencies have arrived
var touched,
traverse = function(m){
touched[m.mid] = 1;
for(var t, module, deps = m.deps || [], i= 0; i<deps.length; i++){
module = deps[i];
if(!(t = touched[module.mid])){
if(t===0 || !traverse(module)){
touched[m.mid] = 0;
return false;
}
}
}
return true;
};
return function(){
// initialize the touched hash with easy-to-compute values that help short circuit recursive algorithm;
// recall loadInit/require plugin modules are dependencies of modules in dojoRequireModuleStack...
// which would cause a circular dependency chain that would never be resolved if checked here
// notice all dependencies of any particular loadInit/require plugin module will already
// be checked since those are pushed into dojoRequireModuleStack explicitly by the
// plugin...so if a particular loadInitPlugin module's dependencies are not really
// on board, that *will* be detected elsewhere in the traversal.
var module, mid;
touched = {};
for(mid in modules){
module = modules[mid];
if(module.executed || module.noReqPluginCheck){
touched[mid] = 1;
}else{
if(module.noReqPluginCheck!==0){
// tag the module as either a loadInit or require plugin or not for future reference
module.noReqPluginCheck = /loadInit\!/.test(mid) || /require\!/.test(mid) ? 1 : 0;
}
if(module.noReqPluginCheck){
touched[mid] = 1;
}else if(module.injected!==arrived){
// not executed, has not arrived, and is not a loadInit or require plugin resource
touched[mid] = 0;
}// else, leave undefined and we'll traverse the dependencies
}
}
for(var t, i = 0, end = dojoRequireModuleStack.length; i<end; i++){
module = dojoRequireModuleStack[i];
if(!(t = touched[module.mid])){
if(t===0 || !traverse(module)){
return;
}
}
}
guardCheckComplete(function(){
var oldCallbacks = dojoRequireCallbacks;
dojoRequireCallbacks = [];
array.forEach(oldCallbacks, function(cb){cb(1);});
});
};
})()),
dojoLoadInitPlugin = function(mid, require, loaded){
// mid names a module that defines a "dojo load init" bundle, an object with two properties:
//
// * names: a vector of module ids that give top-level names to define in the lexical scope of def
// * def: a function that contains some some legacy loader API applications
//
// The point of def is to possibly cause some modules to be loaded (but not executed) by dojo/require! where the module
// ids are possibly-determined at runtime. For example, here is dojox.gfx from v1.6 expressed as an AMD module using the dojo/loadInit
// and dojo/require plugins.
//
// // dojox/gfx:
//
// define("*loadInit_12, {
// names:["dojo", "dijit", "dojox"],
// def: function(){
// dojo.loadInit(function(){
// var gfx = lang.getObject("dojox.gfx", true);
//
// //
// // code required to set gfx properties ommitted...
// //
//
// // now use the calculations to include the runtime-dependent module
// dojo.require("dojox.gfx." + gfx.renderer);
// });
// }
// });
//
// define(["dojo", "dojo/loadInit!" + id].concat("dojo/require!dojox/gfx/matric,dojox/gfx/_base"), function(dojo){
// // when this AMD factory function is executed, the following modules are guaranteed downloaded but not executed:
// // "dojox.gfx." + gfx.renderer
// // dojox.gfx.matrix
// // dojox.gfx._base
// dojo.provide("dojo.gfx");
// dojo.require("dojox.gfx.matrix");
// dojo.require("dojox.gfx._base");
// dojo.require("dojox.gfx." + gfx.renderer);
// return lang.getObject("dojo.gfx");
// });
// })();
//
// The idea is to run the legacy loader API with global variables shadowed, which allows these variables to
// be relocated. For example, dojox and dojo could be relocated to different names by giving a map and the code above will
// execute properly (because the plugin below resolves the load init bundle.names module with respect to the module that demanded
// the plugin resource).
//
// Note that the relocation is specified in the runtime configuration; relocated names need not be set at build-time.
//
// Warning: this is not the best way to express dojox.gfx as and AMD module. In fact, the module has been properly converted in
// v1.7. However, this technique allows the builder to convert legacy modules into AMD modules and guarantee the codepath is the
// same in the converted AMD module.
require([mid], function(bundle){
// notice how names is resolved with respect to the module that demanded the plugin resource
require(bundle.names, function(){
// bring the bundle names into scope
for(var scopeText = "", args= [], i = 0; i<arguments.length; i++){
scopeText+= "var " + bundle.names[i] + "= arguments[" + i + "]; ";
args.push(arguments[i]);
}
eval(scopeText);
var callingModule = require.module,
// the list of modules that need to be downloaded but not executed before the callingModule can be executed
requireList = [],
// the list of i18n bundles that are xdomain; undefined if none
i18nDeps,
syncLoaderApi = {
provide:function(moduleName){
// mark modules that arrive consequent to multiple provides in this module as arrived since they can't be injected
moduleName = slashName(moduleName);
var providedModule = getModule(moduleName, callingModule);
if(providedModule!==callingModule){
setArrived(providedModule);
}
},
require:function(moduleName, omitModuleCheck){
moduleName = slashName(moduleName);
omitModuleCheck && (getModule(moduleName, callingModule).result = nonmodule);
requireList.push(moduleName);
},
requireLocalization:function(moduleName, bundleName, locale){
// since we're going to need dojo/i8n, add it to i18nDeps if not already there
if(!i18nDeps){
// don't have to map since that will occur when the dependency is resolved
i18nDeps = ["dojo/i18n"];
}
// figure out if the bundle is xdomain; if so, add it to the i18nDepsSet
locale = (locale || dojo.locale).toLowerCase();
moduleName = slashName(moduleName) + "/nls/" + (/root/i.test(locale) ? "" : locale + "/") + slashName(bundleName);
if(getModule(moduleName, callingModule).isXd){
// don't have to map since that will occur when the dependency is resolved
i18nDeps.push("dojo/i18n!" + moduleName);
}// else the bundle will be loaded synchronously when the module is evaluated
},
loadInit:function(f){
f();
}
},
hold = {},
p;
// hijack the correct dojo and apply bundle.def
try{
for(p in syncLoaderApi){
hold[p] = dojo[p];
dojo[p] = syncLoaderApi[p];
}
bundle.def.apply(null, args);
}catch(e){
signal("error", [makeErrorToken("failedDojoLoadInit"), e]);
}finally{
for(p in syncLoaderApi){
dojo[p] = hold[p];
}
}
if(i18nDeps){
requireList = requireList.concat(i18nDeps);
}
if(requireList.length){
dojoRequirePlugin(requireList.join(","), require, loaded);
}else{
loaded();
}
});
});
},
extractApplication = function(
text, // the text to search
startSearch, // the position in text to start looking for the closing paren
startApplication // the position in text where the function application expression starts
){
// find end of the call by finding the matching end paren
// Warning: as usual, this will fail in the presense of unmatched right parans contained in strings, regexs, or unremoved comments
var parenRe = /\(|\)/g,
matchCount = 1,
match;
parenRe.lastIndex = startSearch;
while((match = parenRe.exec(text))){
if(match[0] == ")"){
matchCount -= 1;
}else{
matchCount += 1;
}
if(matchCount == 0){
break;
}
}
if(matchCount != 0){
throw "unmatched paren around character " + parenRe.lastIndex + " in: " + text;
}
//Put the master matching string in the results.
return [dojo.trim(text.substring(startApplication, parenRe.lastIndex))+";\n", parenRe.lastIndex];
},
// the following regex is taken from 1.6. It is a very poor technique to remove comments and
// will fail in some cases; for example, consider the code...
//
// var message = "Category-1 */* Category-2";
//
// The regex that follows will see a /* comment and trash the code accordingly. In fact, there are all
// kinds of cases like this with strings and regexs that will cause this design to fail miserably.
//
// Alternative regex designs exist that will result in less-likely failures, but will still fail in many cases.
// The only solution guaranteed 100% correct is to parse the code and that seems overkill for this
// backcompat/unbuilt-xdomain layer. In the end, since it's been this way for a while, we won't change it.
// See the opening paragraphs of Chapter 7 or ECME-262 which describes the lexical abiguity further.
removeCommentRe = /(\/\*([\s\S]*?)\*\/|\/\/(.*)$)/mg,
syncLoaderApiRe = /(^|\s)dojo\.(loadInit|require|provide|requireLocalization|requireIf|requireAfterIf|platformRequire)\s*\(/mg,
amdLoaderApiRe = /(^|\s)(require|define)\s*\(/m,
extractLegacyApiApplications = function(text, noCommentText){
// scan the noCommentText for any legacy loader API applications. Copy such applications into result (this is
// used by the builder). Move dojo.loadInit applications to loadInitApplications string. Copy all other applications
// to otherApplications string. If no applications were found, return 0, signalling an AMD module. Otherwise, return
// loadInitApplications + otherApplications. Fixup text by replacing
//
// dojo.loadInit(// etc...
//
// with
//
// \n 0 && dojo.loadInit(// etc...
//
// Which results in the dojo.loadInit from *not* being applied. This design goes a long way towards protecting the
// code from an over-agressive removeCommentRe. However...
//
// WARNING: the removeCommentRe will cause an error if a detected comment removes all or part of a legacy-loader application
// that is not in a comment.
var match, startSearch, startApplication, application,
loadInitApplications = [],
otherApplications = [],
allApplications = [];
// noCommentText may be provided by a build app with comments extracted by a better method than regex (hopefully)
noCommentText = noCommentText || text.replace(removeCommentRe, function(match){
// remove iff the detected comment has text that looks like a sync loader API application; this helps by
// removing as little as possible, minimizing the changes the janky regex will kill the module
syncLoaderApiRe.lastIndex = amdLoaderApiRe.lastIndex = 0;
return (syncLoaderApiRe.test(match) || amdLoaderApiRe.test(match)) ? "" : match;
});
// find and extract all dojo.loadInit applications
while((match = syncLoaderApiRe.exec(noCommentText))){
startSearch = syncLoaderApiRe.lastIndex;
startApplication = startSearch - match[0].length;
application = extractApplication(noCommentText, startSearch, startApplication);
if(match[2]=="loadInit"){
loadInitApplications.push(application[0]);
}else{
otherApplications.push(application[0]);
}
syncLoaderApiRe.lastIndex = application[1];
}
allApplications = loadInitApplications.concat(otherApplications);
if(allApplications.length || !amdLoaderApiRe.test(noCommentText)){
// either there were some legacy loader API applications or there were no AMD API applications
return [text.replace(/(^|\s)dojo\.loadInit\s*\(/g, "\n0 && dojo.loadInit("), allApplications.join(""), allApplications];
}else{
// legacy loader API *was not* detected and AMD API *was* detected; therefore, assume it's an AMD module
return 0;
}
},
transformToAmd = function(module, text){
// This is roughly the equivalent of dojo._xdCreateResource in 1.6-; however, it expresses a v1.6- dojo
// module in terms of AMD define instead of creating the dojo proprietary xdomain module expression.
// The module could have originated from several sources:
//
// * amd require() a module, e.g., require(["my/module"])
// * amd require() a nonmodule, e.g., require(["my/resource.js"')
// * amd define() deps vector (always a module)
// * dojo.require() a module, e.g. dojo.require("my.module")
// * dojo.require() a nonmodule, e.g., dojo.require("my.module", true)
// * dojo.requireIf/requireAfterIf/platformRequire a module
//
// The module is scanned for legacy loader API applications; if none are found, then assume the module is an
// AMD module and return 0. Otherwise, a synthetic dojo/loadInit plugin resource is created and the module text
// is rewritten as an AMD module with the single dependency of this synthetic resource. When the dojo/loadInit
// plugin loaded the synthetic resource, it will cause all dojo.loadInit's to be executed, find all dojo.require's
// (either directly consequent to dojo.require or indirectly consequent to dojo.require[After]If or
// dojo.platformRequire, and finally cause loading of all dojo.required modules with the dojo/require plugin. Thus,
// when the dojo/loadInit plugin reports it has been loaded, all modules required by the given module are guaranteed
// loaded (but not executed). This then allows the module to execute it's code path without interupts, thereby
// following the synchronous code path.
//
// Notice that this function behaves the same whether or not it happens to be in a mapped dojo/loader module.
var extractResult, id, names = [], namesAsStrings = [];
if(buildDetectRe.test(text) || !(extractResult = extractLegacyApiApplications(text))){
// buildDetectRe.test(text) => a built module, always AMD
// extractResult==0 => no sync API
return 0;
}
// manufacture a synthetic module id that can never be a real mdule id (just like require does)
id = module.mid + "-*loadInit";
// construct the dojo/loadInit names vector which causes any relocated names to be defined as lexical variables under their not-relocated name
// the dojo/loadInit plugin assumes the first name in names is "dojo"
for(var p in getModule("dojo", module).result.scopeMap){
names.push(p);
namesAsStrings.push('"' + p + '"');
}
// rewrite the module as a synthetic dojo/loadInit plugin resource + the module expressed as an AMD module that depends on this synthetic resource
// don't have to map dojo/init since that will occur when the dependency is resolved
return "// xdomain rewrite of " + module.mid + "\n" +
"define('" + id + "',{\n" +
"\tnames:" + dojo.toJson(names) + ",\n" +
"\tdef:function(" + names.join(",") + "){" + extractResult[1] + "}" +
"});\n\n" +
"define(" + dojo.toJson(names.concat(["dojo/loadInit!"+id])) + ", function(" + names.join(",") + "){\n" + extractResult[0] + "});";
},
loaderVars = require.initSyncLoader(dojoRequirePlugin, checkDojoRequirePlugin, transformToAmd),
sync =
loaderVars.sync,
requested =
loaderVars.requested,
arrived =
loaderVars.arrived,
nonmodule =
loaderVars.nonmodule,
executing =
loaderVars.executing,
executed =
loaderVars.executed,
syncExecStack =
loaderVars.syncExecStack,
modules =
loaderVars.modules,
execQ =
loaderVars.execQ,
getModule =
loaderVars.getModule,
injectModule =
loaderVars.injectModule,
setArrived =
loaderVars.setArrived,
signal =
loaderVars.signal,
finishExec =
loaderVars.finishExec,
execModule =
loaderVars.execModule,
getLegacyMode =
loaderVars.getLegacyMode,
guardCheckComplete =
loaderVars.guardCheckComplete;
// there is exactly one dojoRequirePlugin among possibly-many dojo/_base/loader's (owing to mapping)
dojoRequirePlugin = loaderVars.dojoRequirePlugin;
dojo.provide = function(mid){
var executingModule = syncExecStack[0],
module = lang.mixin(getModule(slashName(mid), require.module), {
executed:executing,
result:lang.getObject(mid, true)
});
setArrived(module);
if(executingModule){
(executingModule.provides || (executingModule.provides = [])).push(function(){
module.result = lang.getObject(mid);
delete module.provides;
module.executed!==executed && finishExec(module);
});
}// else dojo.provide called not consequent to loading; therefore, give up trying to publish module value to loader namespace
return module.result;
};
has.add("config-publishRequireResult", 1, 0, 0);
dojo.require = function(moduleName, omitModuleCheck) {
// summary:
// loads a Javascript module from the appropriate URI
//
// moduleName: String
// module name to load, using periods for separators,
// e.g. "dojo.date.locale". Module paths are de-referenced by dojo's
// internal mapping of locations to names and are disambiguated by
// longest prefix. See `dojo.registerModulePath()` for details on
// registering new modules.
//
// omitModuleCheck: Boolean?
// if `true`, omitModuleCheck skips the step of ensuring that the
// loaded file actually defines the symbol it is referenced by.
// For example if it called as `dojo.require("a.b.c")` and the
// file located at `a/b/c.js` does not define an object `a.b.c`,
// and exception will be throws whereas no exception is raised
// when called as `dojo.require("a.b.c", true)`
//
// description:
// Modules are loaded via dojo.require by using one of two loaders: the normal loader
// and the xdomain loader. The xdomain loader is used when dojo was built with a
// custom build that specified loader=xdomain and the module lives on a modulePath
// that is a whole URL, with protocol and a domain. The versions of Dojo that are on
// the Google and AOL CDNs use the xdomain loader.
//
// If the module is loaded via the xdomain loader, it is an asynchronous load, since
// the module is added via a dynamically created script tag. This
// means that dojo.require() can return before the module has loaded. However, this
// should only happen in the case where you do dojo.require calls in the top-level
// HTML page, or if you purposely avoid the loader checking for dojo.require
// dependencies in your module by using a syntax like dojo["require"] to load the module.
//
// Sometimes it is useful to not have the loader detect the dojo.require calls in the
// module so that you can dynamically load the modules as a result of an action on the
// page, instead of right at module load time.
//
// Also, for script blocks in an HTML page, the loader does not pre-process them, so
// it does not know to download the modules before the dojo.require calls occur.
//
// So, in those two cases, when you want on-the-fly module loading or for script blocks
// in the HTML page, special care must be taken if the dojo.required code is loaded
// asynchronously. To make sure you can execute code that depends on the dojo.required
// modules, be sure to add the code that depends on the modules in a dojo.addOnLoad()
// callback. dojo.addOnLoad waits for all outstanding modules to finish loading before
// executing.
//
// This type of syntax works with both xdomain and normal loaders, so it is good
// practice to always use this idiom for on-the-fly code loading and in HTML script
// blocks. If at some point you change loaders and where the code is loaded from,
// it will all still work.
//
// More on how dojo.require
// `dojo.require("A.B")` first checks to see if symbol A.B is
// defined. If it is, it is simply returned (nothing to do).
//
// If it is not defined, it will look for `A/B.js` in the script root
// directory.
//
// `dojo.require` throws an exception if it cannot find a file
// to load, or if the symbol `A.B` is not defined after loading.
//
// It returns the object `A.B`, but note the caveats above about on-the-fly loading and
// HTML script blocks when the xdomain loader is loading a module.
//
// `dojo.require()` does nothing about importing symbols into
// the current namespace. It is presumed that the caller will
// take care of that.
//
// example:
// To use dojo.require in conjunction with dojo.ready:
//
// | dojo.require("foo");
// | dojo.require("bar");
// | dojo.addOnLoad(function(){
// | //you can now safely do something with foo and bar
// | });
//
// example:
// For example, to import all symbols into a local block, you might write:
//
// | with (dojo.require("A.B")) {
// | ...
// | }
//
// And to import just the leaf symbol to a local variable:
//
// | var B = dojo.require("A.B");
// | ...
//
// returns:
// the required namespace object
function doRequire(mid, omitModuleCheck){
var module = getModule(slashName(mid), require.module);
if(syncExecStack.length && syncExecStack[0].finish){
// switched to async loading in the middle of evaluating a legacy module; stop
// applying dojo.require so the remaining dojo.requires are applied in order
syncExecStack[0].finish.push(mid);
return undefined;
}
// recall module.executed has values {0, executing, executed}; therefore, truthy indicates executing or executed
if(module.executed){
return module.result;
}
omitModuleCheck && (module.result = nonmodule);
// rcg...why here and in two lines??
var currentMode = getLegacyMode();
// recall, in sync mode to inject is to *eval* the module text
// if the module is a legacy module, this is the same as executing
// but if the module is an AMD module, this means defining, not executing
injectModule(module);
// the inject may have changed the mode
currentMode = getLegacyMode();
// in sync mode to dojo.require is to execute
if(module.executed!==executed && module.injected===arrived){
// the module was already here before injectModule was called probably finishing up a xdomain
// load, but maybe a module given to the loader directly rather than having the loader retrieve it
loaderVars.guardCheckComplete(function(){
execModule(module);
});
}
if(module.executed){
return module.result;
}
if(currentMode==sync){
// the only way to get here is in sync mode and dojo.required a module that
// * was loaded async in the injectModule application a few lines up
// * was an AMD module that had deps that are being loaded async and therefore couldn't execute
if(module.cjs){
// the module was an AMD module; unshift, not push, which causes the current traversal to be reattempted from the top
execQ.unshift(module);
}else{
// the module was a legacy module
syncExecStack.length && (syncExecStack[0].finish= [mid]);
}
}else{
// the loader wasn't in sync mode on entry; probably async mode; therefore, no expectation of getting
// the module value synchronously; make sure it gets executed though
execQ.push(module);
}
return undefined;
}
var result = doRequire(moduleName, omitModuleCheck);
if(has("config-publishRequireResult") && !lang.exists(moduleName) && result!==undefined){
lang.setObject(moduleName, result);
}
return result;
};
dojo.loadInit = function(f) {
f();
};
dojo.registerModulePath = function(/*String*/moduleName, /*String*/prefix){
// summary:
// Maps a module name to a path
// description:
// An unregistered module is given the default path of ../[module],
// relative to Dojo root. For example, module acme is mapped to
// ../acme. If you want to use a different module name, use
// dojo.registerModulePath.
// example:
// If your dojo.js is located at this location in the web root:
// | /myapp/js/dojo/dojo/dojo.js
// and your modules are located at:
// | /myapp/js/foo/bar.js
// | /myapp/js/foo/baz.js
// | /myapp/js/foo/thud/xyzzy.js
// Your application can tell Dojo to locate the "foo" namespace by calling:
// | dojo.registerModulePath("foo", "../../foo");
// At which point you can then use dojo.require() to load the
// modules (assuming they provide() the same things which are
// required). The full code might be:
// | <script type="text/javascript"
// | src="/myapp/js/dojo/dojo/dojo.js"></script>
// | <script type="text/javascript">
// | dojo.registerModulePath("foo", "../../foo");
// | dojo.require("foo.bar");
// | dojo.require("foo.baz");
// | dojo.require("foo.thud.xyzzy");
// | </script>
var paths = {};
paths[moduleName.replace(/\./g, "/")] = prefix;
require({paths:paths});
};
dojo.platformRequire = function(/*Object*/modMap){
// summary:
// require one or more modules based on which host environment
// Dojo is currently operating in
// description:
// This method takes a "map" of arrays which one can use to
// optionally load dojo modules. The map is indexed by the
// possible dojo.name_ values, with two additional values:
// "default" and "common". The items in the "default" array will
// be loaded if none of the other items have been choosen based on
// dojo.name_, set by your host environment. The items in the
// "common" array will *always* be loaded, regardless of which
// list is chosen.
// example:
// | dojo.platformRequire({
// | browser: [
// | "foo.sample", // simple module
// | "foo.test",
// | ["foo.bar.baz", true] // skip object check in _loadModule (dojo.require)
// | ],
// | default: [ "foo.sample._base" ],
// | common: [ "important.module.common" ]
// | });
var result = (modMap.common || []).concat(modMap[dojo._name] || modMap["default"] || []),
temp;
while(result.length){
if(lang.isArray(temp = result.shift())){
dojo.require.apply(dojo, temp);
}else{
dojo.require(temp);
}
}
};
dojo.requireIf = dojo.requireAfterIf = function(/*Boolean*/ condition, /*String*/ moduleName, /*Boolean?*/omitModuleCheck){
// summary:
// If the condition is true then call `dojo.require()` for the specified
// resource
//
// example:
// | dojo.requireIf(dojo.isBrowser, "my.special.Module");
if(condition){
dojo.require(moduleName, omitModuleCheck);
}
};
dojo.requireLocalization = function(/*String*/moduleName, /*String*/bundleName, /*String?*/locale){
require(["../i18n"], function(i18n){
i18n.getLocalization(moduleName, bundleName, locale);
});
};
return {
// summary:
// This module defines the v1.x synchronous loader API.
extractLegacyApiApplications:extractLegacyApiApplications,
require:dojoRequirePlugin,
loadInit:dojoLoadInitPlugin
};
});

View File

@@ -1,8 +1,8 @@
/*
Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
Copyright (c) 2004-2012, The Dojo Foundation All Rights Reserved.
Available via Academic Free License >= 2.1 OR the modified BSD license.
see: http://dojotoolkit.org/license for details
*/
//>>built
define("dojo/_base/query",["./kernel","../query","./NodeList"],function(_1){return _1.query;});
define("dojo/_base/query",["../query","./NodeList"],function(_1){return _1;});

View File

@@ -0,0 +1,13 @@
define("dojo/_base/query", ["../query", "./NodeList"], function(query){
// module:
// dojo/_base/query
/*=====
return {
// summary:
// Deprecated. Use dojo/query instead.
};
=====*/
return query;
});

View File

@@ -1,8 +1,8 @@
/*
Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
Copyright (c) 2004-2012, The Dojo Foundation All Rights Reserved.
Available via Academic Free License >= 2.1 OR the modified BSD license.
see: http://dojotoolkit.org/license for details
*/
//>>built
define("dojo/_base/sniff",["./kernel","../has"],function(_1,_2){if(!1){return _2;}_1.isBrowser=true,_1._name="browser";var _3=_2.add,n=navigator,_4=n.userAgent,_5=n.appVersion,tv=parseFloat(_5),_6,_7,_8,_9,_a,_b,_c,_d,_e,_f,_10,_11,_12,_13,_14;if(_4.indexOf("AdobeAIR")>=0){_7=1;}_8=(_5.indexOf("Konqueror")>=0)?tv:0;_9=parseFloat(_4.split("WebKit/")[1])||undefined;_a=parseFloat(_4.split("Chrome/")[1])||undefined;_b=_5.indexOf("Macintosh")>=0;_12=/iPhone|iPod|iPad/.test(_4);_13=parseFloat(_4.split("Android ")[1])||undefined;_14=typeof opera!="undefined"&&opera.wiiremote;var _15=Math.max(_5.indexOf("WebKit"),_5.indexOf("Safari"),0);if(_15&&!_a){_c=parseFloat(_5.split("Version/")[1]);if(!_c||parseFloat(_5.substr(_15+7))<=419.3){_c=2;}}if(!_2("dojo-webkit")){if(_4.indexOf("Opera")>=0){_6=tv;if(_6>=9.8){_6=parseFloat(_4.split("Version/")[1])||tv;}}if(_4.indexOf("Gecko")>=0&&!_8&&!_9){_d=_e=tv;}if(_e){_10=parseFloat(_4.split("Firefox/")[1]||_4.split("Minefield/")[1])||undefined;}if(document.all&&!_6){_f=parseFloat(_5.split("MSIE ")[1])||undefined;var _16=document.documentMode;if(_16&&_16!=5&&Math.floor(_f)!=_16){_f=_16;}}}_11=document.compatMode=="BackCompat";_3("opera",_1.isOpera=_6);_3("air",_1.isAIR=_7);_3("khtml",_1.isKhtml=_8);_3("webkit",_1.isWebKit=_9);_3("chrome",_1.isChrome=_a);_3("mac",_1.isMac=_b);_3("safari",_1.isSafari=_c);_3("mozilla",_1.isMozilla=_1.isMoz=_d);_3("ie",_1.isIE=_f);_3("ff",_1.isFF=_10);_3("quirks",_1.isQuirks=_11);_3("ios",_1.isIos=_12);_3("android",_1.isAndroid=_13);_1.locale=_1.locale||(_f?n.userLanguage:n.language).toLowerCase();return _2;});
define("dojo/_base/sniff",["./kernel","./lang","../sniff"],function(_1,_2,_3){if(!1){return _3;}_1._name="browser";_2.mixin(_1,{isBrowser:true,isFF:_3("ff"),isIE:_3("ie"),isKhtml:_3("khtml"),isWebKit:_3("webkit"),isMozilla:_3("mozilla"),isMoz:_3("mozilla"),isOpera:_3("opera"),isSafari:_3("safari"),isChrome:_3("chrome"),isMac:_3("mac"),isIos:_3("ios"),isAndroid:_3("android"),isWii:_3("wii"),isQuirks:_3("quirks"),isAir:_3("air")});_1.locale=_1.locale||(_3("ie")?navigator.userLanguage:navigator.language).toLowerCase();return _3;});

View File

@@ -0,0 +1,96 @@
define("dojo/_base/sniff", ["./kernel", "./lang", "../sniff"], function(dojo, lang, has){
// module:
// dojo/_base/sniff
/*=====
return {
// summary:
// Deprecated. New code should use dojo/sniff.
// This module populates the dojo browser version sniffing properties like dojo.isIE.
};
=====*/
if(! 1 ){
return has;
}
// no idea what this is for, or if it's used
dojo._name = "browser";
lang.mixin(dojo, {
// isBrowser: Boolean
// True if the client is a web-browser
isBrowser: true,
// isFF: Number|undefined
// Version as a Number if client is FireFox. undefined otherwise. Corresponds to
// major detected FireFox version (1.5, 2, 3, etc.)
isFF: has("ff"),
// isIE: Number|undefined
// Version as a Number if client is MSIE(PC). undefined otherwise. Corresponds to
// major detected IE version (6, 7, 8, etc.)
isIE: has("ie"),
// isKhtml: Number|undefined
// Version as a Number if client is a KHTML browser. undefined otherwise. Corresponds to major
// detected version.
isKhtml: has("khtml"),
// isWebKit: Number|undefined
// Version as a Number if client is a WebKit-derived browser (Konqueror,
// Safari, Chrome, etc.). undefined otherwise.
isWebKit: has("webkit"),
// isMozilla: Number|undefined
// Version as a Number if client is a Mozilla-based browser (Firefox,
// SeaMonkey). undefined otherwise. Corresponds to major detected version.
isMozilla: has("mozilla"),
// isMoz: Number|undefined
// Version as a Number if client is a Mozilla-based browser (Firefox,
// SeaMonkey). undefined otherwise. Corresponds to major detected version.
isMoz: has("mozilla"),
// isOpera: Number|undefined
// Version as a Number if client is Opera. undefined otherwise. Corresponds to
// major detected version.
isOpera: has("opera"),
// isSafari: Number|undefined
// Version as a Number if client is Safari or iPhone. undefined otherwise.
isSafari: has("safari"),
// isChrome: Number|undefined
// Version as a Number if client is Chrome browser. undefined otherwise.
isChrome: has("chrome"),
// isMac: Boolean
// True if the client runs on Mac
isMac: has("mac"),
// isIos: Boolean
// True if client is iPhone, iPod, or iPad
isIos: has("ios"),
// isAndroid: Number|undefined
// Version as a Number if client is android browser. undefined otherwise.
isAndroid: has("android"),
// isWii: Boolean
// True if client is Wii
isWii: has("wii"),
// isQuirks: Boolean
// Page is in quirks mode.
isQuirks: has("quirks"),
// isAir: Boolean
// True if client is Adobe Air
isAir: has("air")
});
dojo.locale = dojo.locale || (has("ie") ? navigator.userLanguage : navigator.language).toLowerCase();
return has;
});

View File

@@ -1,8 +1,8 @@
/*
Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
Copyright (c) 2004-2012, The Dojo Foundation All Rights Reserved.
Available via Academic Free License >= 2.1 OR the modified BSD license.
see: http://dojotoolkit.org/license for details
*/
//>>built
define("dojo/_base/unload",["./kernel","./connect"],function(_1,_2){var _3=window;_1.addOnWindowUnload=function(_4,_5){if(!_1.windowUnloaded){_2.connect(_3,"unload",(_1.windowUnloaded=function(){}));}_2.connect(_3,"unload",_4,_5);};_1.addOnUnload=function(_6,_7){_2.connect(_3,"beforeunload",_6,_7);};return {addOnWindowUnload:_1.addOnWindowUnload,addOnUnload:_1.addOnUnload};});
define("dojo/_base/unload",["./kernel","./lang","../on"],function(_1,_2,on){var _3=window;var _4={addOnWindowUnload:function(_5,_6){if(!_1.windowUnloaded){on(_3,"unload",(_1.windowUnloaded=function(){}));}on(_3,"unload",_2.hitch(_5,_6));},addOnUnload:function(_7,_8){on(_3,"beforeunload",_2.hitch(_7,_8));}};_1.addOnWindowUnload=_4.addOnWindowUnload;_1.addOnUnload=_4.addOnUnload;return _4;});

View File

@@ -0,0 +1,82 @@
define("dojo/_base/unload", ["./kernel", "./lang", "../on"], function(dojo, lang, on){
// module:
// dojo/unload
var win = window;
var unload = {
// summary:
// This module contains the document and window unload detection API.
addOnWindowUnload: function(/*Object|Function?*/ obj, /*String|Function?*/ functionName){
// summary:
// registers a function to be triggered when window.onunload
// fires.
// description:
// The first time that addOnWindowUnload is called Dojo
// will register a page listener to trigger your unload
// handler with. Note that registering these handlers may
// destroy "fastback" page caching in browsers that support
// it. Be careful trying to modify the DOM or access
// JavaScript properties during this phase of page unloading:
// they may not always be available. Consider
// addOnUnload() if you need to modify the DOM or do
// heavy JavaScript work since it fires at the equivalent of
// the page's "onbeforeunload" event.
// example:
// | unload.addOnWindowUnload(functionPointer)
// | unload.addOnWindowUnload(object, "functionName");
// | unload.addOnWindowUnload(object, function(){ /* ... */});
if (!dojo.windowUnloaded){
on(win, "unload", (dojo.windowUnloaded = function(){
// summary:
// signal fired by impending window destruction. You may use
// dojo.addOnWindowUnload() to register a listener for this
// event. NOTE: if you wish to dojo.connect() to this method
// to perform page/application cleanup, be aware that this
// event WILL NOT fire if no handler has been registered with
// addOnWindowUnload(). This behavior started in Dojo 1.3.
// Previous versions always triggered windowUnloaded(). See
// addOnWindowUnload for more info.
}));
}
on(win, "unload", lang.hitch(obj, functionName));
},
addOnUnload: function(/*Object?|Function?*/ obj, /*String|Function?*/ functionName){
// summary:
// registers a function to be triggered when the page unloads.
// description:
// The first time that addOnUnload is called Dojo will
// register a page listener to trigger your unload handler
// with.
//
// In a browser environment, the functions will be triggered
// during the window.onbeforeunload event. Be careful of doing
// too much work in an unload handler. onbeforeunload can be
// triggered if a link to download a file is clicked, or if
// the link is a javascript: link. In these cases, the
// onbeforeunload event fires, but the document is not
// actually destroyed. So be careful about doing destructive
// operations in a dojo.addOnUnload callback.
//
// Further note that calling dojo.addOnUnload will prevent
// browsers from using a "fast back" cache to make page
// loading via back button instantaneous.
// example:
// | dojo.addOnUnload(functionPointer)
// | dojo.addOnUnload(object, "functionName")
// | dojo.addOnUnload(object, function(){ /* ... */});
on(win, "beforeunload", lang.hitch(obj, functionName));
}
};
dojo.addOnWindowUnload = unload.addOnWindowUnload;
dojo.addOnUnload = unload.addOnUnload;
return unload;
});

View File

@@ -1,5 +1,5 @@
/*
Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
Copyright (c) 2004-2012, The Dojo Foundation All Rights Reserved.
Available via Academic Free License >= 2.1 OR the modified BSD license.
see: http://dojotoolkit.org/license for details
*/

View File

@@ -0,0 +1,109 @@
define("dojo/_base/url", ["./kernel"], function(dojo){
// module:
// dojo/url
var
ore = new RegExp("^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$"),
ire = new RegExp("^((([^\\[:]+):)?([^@]+)@)?(\\[([^\\]]+)\\]|([^\\[:]*))(:([0-9]+))?$"),
_Url = function(){
var n = null,
_a = arguments,
uri = [_a[0]];
// resolve uri components relative to each other
for(var i = 1; i<_a.length; i++){
if(!_a[i]){ continue; }
// Safari doesn't support this.constructor so we have to be explicit
// FIXME: Tracked (and fixed) in Webkit bug 3537.
// http://bugs.webkit.org/show_bug.cgi?id=3537
var relobj = new _Url(_a[i]+""),
uriobj = new _Url(uri[0]+"");
if(
relobj.path == "" &&
!relobj.scheme &&
!relobj.authority &&
!relobj.query
){
if(relobj.fragment != n){
uriobj.fragment = relobj.fragment;
}
relobj = uriobj;
}else if(!relobj.scheme){
relobj.scheme = uriobj.scheme;
if(!relobj.authority){
relobj.authority = uriobj.authority;
if(relobj.path.charAt(0) != "/"){
var path = uriobj.path.substring(0,
uriobj.path.lastIndexOf("/") + 1) + relobj.path;
var segs = path.split("/");
for(var j = 0; j < segs.length; j++){
if(segs[j] == "."){
// flatten "./" references
if(j == segs.length - 1){
segs[j] = "";
}else{
segs.splice(j, 1);
j--;
}
}else if(j > 0 && !(j == 1 && segs[0] == "") &&
segs[j] == ".." && segs[j-1] != ".."){
// flatten "../" references
if(j == (segs.length - 1)){
segs.splice(j, 1);
segs[j - 1] = "";
}else{
segs.splice(j - 1, 2);
j -= 2;
}
}
}
relobj.path = segs.join("/");
}
}
}
uri = [];
if(relobj.scheme){
uri.push(relobj.scheme, ":");
}
if(relobj.authority){
uri.push("//", relobj.authority);
}
uri.push(relobj.path);
if(relobj.query){
uri.push("?", relobj.query);
}
if(relobj.fragment){
uri.push("#", relobj.fragment);
}
}
this.uri = uri.join("");
// break the uri into its main components
var r = this.uri.match(ore);
this.scheme = r[2] || (r[1] ? "" : n);
this.authority = r[4] || (r[3] ? "" : n);
this.path = r[5]; // can never be undefined
this.query = r[7] || (r[6] ? "" : n);
this.fragment = r[9] || (r[8] ? "" : n);
if(this.authority != n){
// server based naming authority
r = this.authority.match(ire);
this.user = r[3] || n;
this.password = r[4] || n;
this.host = r[6] || r[7]; // ipv6 || ipv4
this.port = r[9] || n;
}
};
_Url.prototype.toString = function(){ return this.uri; };
return dojo._Url = _Url;
});

View File

@@ -1,8 +1,8 @@
/*
Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
Copyright (c) 2004-2012, The Dojo Foundation All Rights Reserved.
Available via Academic Free License >= 2.1 OR the modified BSD license.
see: http://dojotoolkit.org/license for details
*/
//>>built
define("dojo/_base/window",["./kernel","../has","./sniff"],function(_1,_2){_1.doc=this["document"]||null;_1.body=function(){return _1.doc.body||_1.doc.getElementsByTagName("body")[0];};_1.setContext=function(_3,_4){_1.global=_5.global=_3;_1.doc=_5.doc=_4;};_1.withGlobal=function(_6,_7,_8,_9){var _a=_1.global;try{_1.global=_5.global=_6;return _1.withDoc.call(null,_6.document,_7,_8,_9);}finally{_1.global=_5.global=_a;}};_1.withDoc=function(_b,_c,_d,_e){var _f=_1.doc,_10=_1.isQuirks,_11=_1.isIE,_12,_13,_14;try{_1.doc=_5.doc=_b;_1.isQuirks=_2.add("quirks",_1.doc.compatMode=="BackCompat",true,true);if(_2("ie")){if((_14=_b.parentWindow)&&_14.navigator){_12=parseFloat(_14.navigator.appVersion.split("MSIE ")[1])||undefined;_13=_b.documentMode;if(_13&&_13!=5&&Math.floor(_12)!=_13){_12=_13;}_1.isIE=_2.add("ie",_12,true,true);}}if(_d&&typeof _c=="string"){_c=_d[_c];}return _c.apply(_d,_e||[]);}finally{_1.doc=_5.doc=_f;_1.isQuirks=_2.add("quirks",_10,true,true);_1.isIE=_2.add("ie",_11,true,true);}};var _5={global:_1.global,doc:_1.doc,body:_1.body,setContext:_1.setContext,withGlobal:_1.withGlobal,withDoc:_1.withDoc};return _5;});
define("dojo/_base/window",["./kernel","./lang","../sniff"],function(_1,_2,_3){var _4={global:_1.global,doc:this["document"]||null,body:function(_5){_5=_5||_1.doc;return _5.body||_5.getElementsByTagName("body")[0];},setContext:function(_6,_7){_1.global=_4.global=_6;_1.doc=_4.doc=_7;},withGlobal:function(_8,_9,_a,_b){var _c=_1.global;try{_1.global=_4.global=_8;return _4.withDoc.call(null,_8.document,_9,_a,_b);}finally{_1.global=_4.global=_c;}},withDoc:function(_d,_e,_f,_10){var _11=_4.doc,_12=_3("quirks"),_13=_3("ie"),_14,_15,_16;try{_1.doc=_4.doc=_d;_1.isQuirks=_3.add("quirks",_1.doc.compatMode=="BackCompat",true,true);if(_3("ie")){if((_16=_d.parentWindow)&&_16.navigator){_14=parseFloat(_16.navigator.appVersion.split("MSIE ")[1])||undefined;_15=_d.documentMode;if(_15&&_15!=5&&Math.floor(_14)!=_15){_14=_15;}_1.isIE=_3.add("ie",_14,true,true);}}if(_f&&typeof _e=="string"){_e=_f[_e];}return _e.apply(_f,_10||[]);}finally{_1.doc=_4.doc=_11;_1.isQuirks=_3.add("quirks",_12,true,true);_1.isIE=_3.add("ie",_13,true,true);}}};1&&_2.mixin(_1,_4);return _4;});

View File

@@ -0,0 +1,134 @@
define("dojo/_base/window", ["./kernel", "./lang", "../sniff"], function(dojo, lang, has){
// module:
// dojo/_base/window
var ret = {
// summary:
// API to save/set/restore the global/document scope.
global: dojo.global,
/*=====
global: {
// summary:
// Alias for the current window. 'global' can be modified
// for temporary context shifting. See also withGlobal().
// description:
// Use this rather than referring to 'window' to ensure your code runs
// correctly in managed contexts.
},
=====*/
doc: this["document"] || null,
/*=====
doc: {
// summary:
// Alias for the current document. 'doc' can be modified
// for temporary context shifting. See also withDoc().
// description:
// Use this rather than referring to 'window.document' to ensure your code runs
// correctly in managed contexts.
// example:
// | n.appendChild(dojo.doc.createElement('div'));
},
=====*/
body: function(/*Document?*/ doc){
// summary:
// Return the body element of the specified document or of dojo/_base/window::doc.
// example:
// | win.body().appendChild(dojo.doc.createElement('div'));
// Note: document.body is not defined for a strict xhtml document
// Would like to memoize this, but dojo.doc can change vi dojo.withDoc().
doc = doc || dojo.doc;
return doc.body || doc.getElementsByTagName("body")[0]; // Node
},
setContext: function(/*Object*/ globalObject, /*DocumentElement*/ globalDocument){
// summary:
// changes the behavior of many core Dojo functions that deal with
// namespace and DOM lookup, changing them to work in a new global
// context (e.g., an iframe). The varibles dojo.global and dojo.doc
// are modified as a result of calling this function and the result of
// `dojo.body()` likewise differs.
dojo.global = ret.global = globalObject;
dojo.doc = ret.doc = globalDocument;
},
withGlobal: function( /*Object*/ globalObject,
/*Function*/ callback,
/*Object?*/ thisObject,
/*Array?*/ cbArguments){
// summary:
// Invoke callback with globalObject as dojo.global and
// globalObject.document as dojo.doc.
// description:
// Invoke callback with globalObject as dojo.global and
// globalObject.document as dojo.doc. If provided, globalObject
// will be executed in the context of object thisObject
// When callback() returns or throws an error, the dojo.global
// and dojo.doc will be restored to its previous state.
var oldGlob = dojo.global;
try{
dojo.global = ret.global = globalObject;
return ret.withDoc.call(null, globalObject.document, callback, thisObject, cbArguments);
}finally{
dojo.global = ret.global = oldGlob;
}
},
withDoc: function( /*DocumentElement*/ documentObject,
/*Function*/ callback,
/*Object?*/ thisObject,
/*Array?*/ cbArguments){
// summary:
// Invoke callback with documentObject as dojo/_base/window::doc.
// description:
// Invoke callback with documentObject as dojo/_base/window::doc. If provided,
// callback will be executed in the context of object thisObject
// When callback() returns or throws an error, the dojo/_base/window::doc will
// be restored to its previous state.
var oldDoc = ret.doc,
oldQ = has("quirks"),
oldIE = has("ie"), isIE, mode, pwin;
try{
dojo.doc = ret.doc = documentObject;
// update dojo.isQuirks and the value of the has feature "quirks".
// remove setting dojo.isQuirks and dojo.isIE for 2.0
dojo.isQuirks = has.add("quirks", dojo.doc.compatMode == "BackCompat", true, true); // no need to check for QuirksMode which was Opera 7 only
if(has("ie")){
if((pwin = documentObject.parentWindow) && pwin.navigator){
// re-run IE detection logic and update dojo.isIE / has("ie")
// (the only time parentWindow/navigator wouldn't exist is if we were not
// passed an actual legitimate document object)
isIE = parseFloat(pwin.navigator.appVersion.split("MSIE ")[1]) || undefined;
mode = documentObject.documentMode;
if(mode && mode != 5 && Math.floor(isIE) != mode){
isIE = mode;
}
dojo.isIE = has.add("ie", isIE, true, true);
}
}
if(thisObject && typeof callback == "string"){
callback = thisObject[callback];
}
return callback.apply(thisObject, cbArguments || []);
}finally{
dojo.doc = ret.doc = oldDoc;
dojo.isQuirks = has.add("quirks", oldQ, true, true);
dojo.isIE = has.add("ie", oldIE, true, true);
}
}
};
1 && lang.mixin(dojo, ret);
return ret;
});

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,710 @@
define("dojo/_base/xhr", [
"./kernel",
"./sniff",
"require",
"../io-query",
/*===== "./declare", =====*/
"../dom",
"../dom-form",
"./Deferred",
"./config",
"./json",
"./lang",
"./array",
"../on",
"../aspect",
"../request/watch",
"../request/xhr",
"../request/util"
], function(dojo, has, require, ioq, /*===== declare, =====*/ dom, domForm, Deferred, config, json, lang, array, on, aspect, watch, _xhr, util){
// module:
// dojo/_base/xhr
/*=====
dojo._xhrObj = function(){
// summary:
// does the work of portably generating a new XMLHTTPRequest object.
};
=====*/
dojo._xhrObj = _xhr._create;
var cfg = dojo.config;
// mix in io-query and dom-form
dojo.objectToQuery = ioq.objectToQuery;
dojo.queryToObject = ioq.queryToObject;
dojo.fieldToObject = domForm.fieldToObject;
dojo.formToObject = domForm.toObject;
dojo.formToQuery = domForm.toQuery;
dojo.formToJson = domForm.toJson;
// need to block async callbacks from snatching this thread as the result
// of an async callback might call another sync XHR, this hangs khtml forever
// must checked by watchInFlight()
dojo._blockAsync = false;
// MOW: remove dojo._contentHandlers alias in 2.0
var handlers = dojo._contentHandlers = dojo.contentHandlers = {
// summary:
// A map of available XHR transport handle types. Name matches the
// `handleAs` attribute passed to XHR calls.
// description:
// A map of available XHR transport handle types. Name matches the
// `handleAs` attribute passed to XHR calls. Each contentHandler is
// called, passing the xhr object for manipulation. The return value
// from the contentHandler will be passed to the `load` or `handle`
// functions defined in the original xhr call.
// example:
// Creating a custom content-handler:
// | xhr.contentHandlers.makeCaps = function(xhr){
// | return xhr.responseText.toUpperCase();
// | }
// | // and later:
// | dojo.xhrGet({
// | url:"foo.txt",
// | handleAs:"makeCaps",
// | load: function(data){ /* data is a toUpper version of foo.txt */ }
// | });
"text": function(xhr){
// summary:
// A contentHandler which simply returns the plaintext response data
return xhr.responseText;
},
"json": function(xhr){
// summary:
// A contentHandler which returns a JavaScript object created from the response data
return json.fromJson(xhr.responseText || null);
},
"json-comment-filtered": function(xhr){
// summary:
// A contentHandler which expects comment-filtered JSON.
// description:
// A contentHandler which expects comment-filtered JSON.
// the json-comment-filtered option was implemented to prevent
// "JavaScript Hijacking", but it is less secure than standard JSON. Use
// standard JSON instead. JSON prefixing can be used to subvert hijacking.
//
// Will throw a notice suggesting to use application/json mimetype, as
// json-commenting can introduce security issues. To decrease the chances of hijacking,
// use the standard `json` contentHandler, and prefix your "JSON" with: {}&&
//
// use djConfig.useCommentedJson = true to turn off the notice
if(!config.useCommentedJson){
console.warn("Consider using the standard mimetype:application/json."
+ " json-commenting can introduce security issues. To"
+ " decrease the chances of hijacking, use the standard the 'json' handler and"
+ " prefix your json with: {}&&\n"
+ "Use djConfig.useCommentedJson=true to turn off this message.");
}
var value = xhr.responseText;
var cStartIdx = value.indexOf("\/*");
var cEndIdx = value.lastIndexOf("*\/");
if(cStartIdx == -1 || cEndIdx == -1){
throw new Error("JSON was not comment filtered");
}
return json.fromJson(value.substring(cStartIdx+2, cEndIdx));
},
"javascript": function(xhr){
// summary:
// A contentHandler which evaluates the response data, expecting it to be valid JavaScript
// FIXME: try Moz and IE specific eval variants?
return dojo.eval(xhr.responseText);
},
"xml": function(xhr){
// summary:
// A contentHandler returning an XML Document parsed from the response data
var result = xhr.responseXML;
if(has("ie")){
if((!result || !result.documentElement)){
//WARNING: this branch used by the xml handling in dojo.io.iframe,
//so be sure to test dojo.io.iframe if making changes below.
var ms = function(n){ return "MSXML" + n + ".DOMDocument"; };
var dp = ["Microsoft.XMLDOM", ms(6), ms(4), ms(3), ms(2)];
array.some(dp, function(p){
try{
var dom = new ActiveXObject(p);
dom.async = false;
dom.loadXML(xhr.responseText);
result = dom;
}catch(e){ return false; }
return true;
});
}
}
return result; // DOMDocument
},
"json-comment-optional": function(xhr){
// summary:
// A contentHandler which checks the presence of comment-filtered JSON and
// alternates between the `json` and `json-comment-filtered` contentHandlers.
if(xhr.responseText && /^[^{\[]*\/\*/.test(xhr.responseText)){
return handlers["json-comment-filtered"](xhr);
}else{
return handlers["json"](xhr);
}
}
};
/*=====
// kwargs function parameter definitions. Assigning to dojo namespace rather than making them local variables
// because they are used by dojo/io modules too
dojo.__IoArgs = declare(null, {
// url: String
// URL to server endpoint.
// content: Object?
// Contains properties with string values. These
// properties will be serialized as name1=value2 and
// passed in the request.
// timeout: Integer?
// Milliseconds to wait for the response. If this time
// passes, the then error callbacks are called.
// form: DOMNode?
// DOM node for a form. Used to extract the form values
// and send to the server.
// preventCache: Boolean?
// Default is false. If true, then a
// "dojo.preventCache" parameter is sent in the request
// with a value that changes with each request
// (timestamp). Useful only with GET-type requests.
// handleAs: String?
// Acceptable values depend on the type of IO
// transport (see specific IO calls for more information).
// rawBody: String?
// Sets the raw body for an HTTP request. If this is used, then the content
// property is ignored. This is mostly useful for HTTP methods that have
// a body to their requests, like PUT or POST. This property can be used instead
// of postData and putData for dojo/_base/xhr.rawXhrPost and dojo/_base/xhr.rawXhrPut respectively.
// ioPublish: Boolean?
// Set this explicitly to false to prevent publishing of topics related to
// IO operations. Otherwise, if djConfig.ioPublish is set to true, topics
// will be published via dojo/topic.publish() for different phases of an IO operation.
// See dojo/main.__IoPublish for a list of topics that are published.
load: function(response, ioArgs){
// summary:
// This function will be
// called on a successful HTTP response code.
// ioArgs: dojo/main.__IoCallbackArgs
// Provides additional information about the request.
// response: Object
// The response in the format as defined with handleAs.
},
error: function(response, ioArgs){
// summary:
// This function will
// be called when the request fails due to a network or server error, the url
// is invalid, etc. It will also be called if the load or handle callback throws an
// exception, unless djConfig.debugAtAllCosts is true. This allows deployed applications
// to continue to run even when a logic error happens in the callback, while making
// it easier to troubleshoot while in debug mode.
// ioArgs: dojo/main.__IoCallbackArgs
// Provides additional information about the request.
// response: Object
// The response in the format as defined with handleAs.
},
handle: function(loadOrError, response, ioArgs){
// summary:
// This function will
// be called at the end of every request, whether or not an error occurs.
// loadOrError: String
// Provides a string that tells you whether this function
// was called because of success (load) or failure (error).
// response: Object
// The response in the format as defined with handleAs.
// ioArgs: dojo/main.__IoCallbackArgs
// Provides additional information about the request.
}
});
dojo.__IoCallbackArgs = declare(null, {
// args: Object
// the original object argument to the IO call.
// xhr: XMLHttpRequest
// For XMLHttpRequest calls only, the
// XMLHttpRequest object that was used for the
// request.
// url: String
// The final URL used for the call. Many times it
// will be different than the original args.url
// value.
// query: String
// For non-GET requests, the
// name1=value1&name2=value2 parameters sent up in
// the request.
// handleAs: String
// The final indicator on how the response will be
// handled.
// id: String
// For dojo/io/script calls only, the internal
// script ID used for the request.
// canDelete: Boolean
// For dojo/io/script calls only, indicates
// whether the script tag that represents the
// request can be deleted after callbacks have
// been called. Used internally to know when
// cleanup can happen on JSONP-type requests.
// json: Object
// For dojo/io/script calls only: holds the JSON
// response for JSONP-type requests. Used
// internally to hold on to the JSON responses.
// You should not need to access it directly --
// the same object should be passed to the success
// callbacks directly.
});
dojo.__IoPublish = declare(null, {
// summary:
// This is a list of IO topics that can be published
// if djConfig.ioPublish is set to true. IO topics can be
// published for any Input/Output, network operation. So,
// dojo.xhr, dojo.io.script and dojo.io.iframe can all
// trigger these topics to be published.
// start: String
// "/dojo/io/start" is sent when there are no outstanding IO
// requests, and a new IO request is started. No arguments
// are passed with this topic.
// send: String
// "/dojo/io/send" is sent whenever a new IO request is started.
// It passes the dojo.Deferred for the request with the topic.
// load: String
// "/dojo/io/load" is sent whenever an IO request has loaded
// successfully. It passes the response and the dojo.Deferred
// for the request with the topic.
// error: String
// "/dojo/io/error" is sent whenever an IO request has errored.
// It passes the error and the dojo.Deferred
// for the request with the topic.
// done: String
// "/dojo/io/done" is sent whenever an IO request has completed,
// either by loading or by erroring. It passes the error and
// the dojo.Deferred for the request with the topic.
// stop: String
// "/dojo/io/stop" is sent when all outstanding IO requests have
// finished. No arguments are passed with this topic.
});
=====*/
dojo._ioSetArgs = function(/*dojo/main.__IoArgs*/args,
/*Function*/canceller,
/*Function*/okHandler,
/*Function*/errHandler){
// summary:
// sets up the Deferred and ioArgs property on the Deferred so it
// can be used in an io call.
// args:
// The args object passed into the public io call. Recognized properties on
// the args object are:
// canceller:
// The canceller function used for the Deferred object. The function
// will receive one argument, the Deferred object that is related to the
// canceller.
// okHandler:
// The first OK callback to be registered with Deferred. It has the opportunity
// to transform the OK response. It will receive one argument -- the Deferred
// object returned from this function.
// errHandler:
// The first error callback to be registered with Deferred. It has the opportunity
// to do cleanup on an error. It will receive two arguments: error (the
// Error object) and dfd, the Deferred object returned from this function.
var ioArgs = {args: args, url: args.url};
//Get values from form if requested.
var formObject = null;
if(args.form){
var form = dom.byId(args.form);
//IE requires going through getAttributeNode instead of just getAttribute in some form cases,
//so use it for all. See #2844
var actnNode = form.getAttributeNode("action");
ioArgs.url = ioArgs.url || (actnNode ? actnNode.value : null);
formObject = domForm.toObject(form);
}
// set up the query params
var miArgs = [{}];
if(formObject){
// potentially over-ride url-provided params w/ form values
miArgs.push(formObject);
}
if(args.content){
// stuff in content over-rides what's set by form
miArgs.push(args.content);
}
if(args.preventCache){
miArgs.push({"dojo.preventCache": new Date().valueOf()});
}
ioArgs.query = ioq.objectToQuery(lang.mixin.apply(null, miArgs));
// .. and the real work of getting the deferred in order, etc.
ioArgs.handleAs = args.handleAs || "text";
var d = new Deferred(function(dfd){
dfd.canceled = true;
canceller && canceller(dfd);
var err = dfd.ioArgs.error;
if(!err){
err = new Error("request cancelled");
err.dojoType="cancel";
dfd.ioArgs.error = err;
}
return err;
});
d.addCallback(okHandler);
//Support specifying load, error and handle callback functions from the args.
//For those callbacks, the "this" object will be the args object.
//The callbacks will get the deferred result value as the
//first argument and the ioArgs object as the second argument.
var ld = args.load;
if(ld && lang.isFunction(ld)){
d.addCallback(function(value){
return ld.call(args, value, ioArgs);
});
}
var err = args.error;
if(err && lang.isFunction(err)){
d.addErrback(function(value){
return err.call(args, value, ioArgs);
});
}
var handle = args.handle;
if(handle && lang.isFunction(handle)){
d.addBoth(function(value){
return handle.call(args, value, ioArgs);
});
}
// Attach error handler last (not including topic publishing)
// to catch any errors that may have been generated from load
// or handle functions.
d.addErrback(function(error){
return errHandler(error, d);
});
//Plug in topic publishing, if dojo.publish is loaded.
if(cfg.ioPublish && dojo.publish && ioArgs.args.ioPublish !== false){
d.addCallbacks(
function(res){
dojo.publish("/dojo/io/load", [d, res]);
return res;
},
function(res){
dojo.publish("/dojo/io/error", [d, res]);
return res;
}
);
d.addBoth(function(res){
dojo.publish("/dojo/io/done", [d, res]);
return res;
});
}
d.ioArgs = ioArgs;
// FIXME: need to wire up the xhr object's abort method to something
// analogous in the Deferred
return d;
};
var _deferredOk = function(/*Deferred*/dfd){
// summary:
// okHandler function for dojo._ioSetArgs call.
var ret = handlers[dfd.ioArgs.handleAs](dfd.ioArgs.xhr);
return ret === undefined ? null : ret;
};
var _deferError = function(/*Error*/error, /*Deferred*/dfd){
// summary:
// errHandler function for dojo._ioSetArgs call.
if(!dfd.ioArgs.args.failOk){
console.error(error);
}
return error;
};
//Use a separate count for knowing if we are starting/stopping io calls.
var _checkPubCount = function(dfd){
if(_pubCount <= 0){
_pubCount = 0;
if(cfg.ioPublish && dojo.publish && (!dfd || dfd && dfd.ioArgs.args.ioPublish !== false)){
dojo.publish("/dojo/io/stop");
}
}
};
var _pubCount = 0;
aspect.after(watch, "_onAction", function(){
_pubCount -= 1;
});
aspect.after(watch, "_onInFlight", _checkPubCount);
dojo._ioCancelAll = watch.cancelAll;
/*=====
dojo._ioCancelAll = function(){
// summary:
// Cancels all pending IO requests, regardless of IO type
// (xhr, script, iframe).
};
=====*/
dojo._ioNotifyStart = function(/*Deferred*/dfd){
// summary:
// If dojo.publish is available, publish topics
// about the start of a request queue and/or the
// the beginning of request.
//
// Used by IO transports. An IO transport should
// call this method before making the network connection.
if(cfg.ioPublish && dojo.publish && dfd.ioArgs.args.ioPublish !== false){
if(!_pubCount){
dojo.publish("/dojo/io/start");
}
_pubCount += 1;
dojo.publish("/dojo/io/send", [dfd]);
}
};
dojo._ioWatch = function(dfd, validCheck, ioCheck, resHandle){
// summary:
// Watches the io request represented by dfd to see if it completes.
// dfd: Deferred
// The Deferred object to watch.
// validCheck: Function
// Function used to check if the IO request is still valid. Gets the dfd
// object as its only argument.
// ioCheck: Function
// Function used to check if basic IO call worked. Gets the dfd
// object as its only argument.
// resHandle: Function
// Function used to process response. Gets the dfd
// object as its only argument.
var args = dfd.ioArgs.options = dfd.ioArgs.args;
lang.mixin(dfd, {
response: dfd.ioArgs,
isValid: function(response){
return validCheck(dfd);
},
isReady: function(response){
return ioCheck(dfd);
},
handleResponse: function(response){
return resHandle(dfd);
}
});
watch(dfd);
_checkPubCount(dfd);
};
var _defaultContentType = "application/x-www-form-urlencoded";
dojo._ioAddQueryToUrl = function(/*dojo.__IoCallbackArgs*/ioArgs){
// summary:
// Adds query params discovered by the io deferred construction to the URL.
// Only use this for operations which are fundamentally GET-type operations.
if(ioArgs.query.length){
ioArgs.url += (ioArgs.url.indexOf("?") == -1 ? "?" : "&") + ioArgs.query;
ioArgs.query = null;
}
};
/*=====
dojo.__XhrArgs = declare(dojo.__IoArgs, {
// summary:
// In addition to the properties listed for the dojo._IoArgs type,
// the following properties are allowed for dojo.xhr* methods.
// handleAs: String?
// Acceptable values are: text (default), json, json-comment-optional,
// json-comment-filtered, javascript, xml. See `dojo/_base/xhr.contentHandlers`
// sync: Boolean?
// false is default. Indicates whether the request should
// be a synchronous (blocking) request.
// headers: Object?
// Additional HTTP headers to send in the request.
// failOk: Boolean?
// false is default. Indicates whether a request should be
// allowed to fail (and therefore no console error message in
// the event of a failure)
// contentType: String|Boolean
// "application/x-www-form-urlencoded" is default. Set to false to
// prevent a Content-Type header from being sent, or to a string
// to send a different Content-Type.
});
=====*/
dojo.xhr = function(/*String*/ method, /*dojo.__XhrArgs*/ args, /*Boolean?*/ hasBody){
// summary:
// Deprecated. Use dojo/request instead.
// description:
// Sends an HTTP request with the given method.
// See also dojo.xhrGet(), xhrPost(), xhrPut() and dojo.xhrDelete() for shortcuts
// for those HTTP methods. There are also methods for "raw" PUT and POST methods
// via dojo.rawXhrPut() and dojo.rawXhrPost() respectively.
// method:
// HTTP method to be used, such as GET, POST, PUT, DELETE. Should be uppercase.
// hasBody:
// If the request has an HTTP body, then pass true for hasBody.
var rDfd;
//Make the Deferred object for this xhr request.
var dfd = dojo._ioSetArgs(args, function(dfd){
rDfd && rDfd.cancel();
}, _deferredOk, _deferError);
var ioArgs = dfd.ioArgs;
//Allow for specifying the HTTP body completely.
if("postData" in args){
ioArgs.query = args.postData;
}else if("putData" in args){
ioArgs.query = args.putData;
}else if("rawBody" in args){
ioArgs.query = args.rawBody;
}else if((arguments.length > 2 && !hasBody) || "POST|PUT".indexOf(method.toUpperCase()) === -1){
//Check for hasBody being passed. If no hasBody,
//then only append query string if not a POST or PUT request.
dojo._ioAddQueryToUrl(ioArgs);
}
var options = {
method: method,
handleAs: "text",
timeout: args.timeout,
withCredentials: args.withCredentials,
ioArgs: ioArgs
};
if(typeof args.headers !== 'undefined'){
options.headers = args.headers;
}
if(typeof args.contentType !== 'undefined'){
if(!options.headers){
options.headers = {};
}
options.headers['Content-Type'] = args.contentType;
}
if(typeof ioArgs.query !== 'undefined'){
options.data = ioArgs.query;
}
if(typeof args.sync !== 'undefined'){
options.sync = args.sync;
}
dojo._ioNotifyStart(dfd);
try{
rDfd = _xhr(ioArgs.url, options, true);
}catch(e){
// If XHR creation fails, dojo/request/xhr throws
// When this happens, cancel the deferred
dfd.cancel();
return dfd;
}
// sync ioArgs
dfd.ioArgs.xhr = rDfd.response.xhr;
rDfd.then(function(){
dfd.resolve(dfd);
}).otherwise(function(error){
ioArgs.error = error;
if(error.response){
error.status = error.response.status;
error.responseText = error.response.text;
error.xhr = error.response.xhr;
}
dfd.reject(error);
});
return dfd; // dojo/_base/Deferred
};
dojo.xhrGet = function(/*dojo.__XhrArgs*/ args){
// summary:
// Sends an HTTP GET request to the server.
return dojo.xhr("GET", args); // dojo/_base/Deferred
};
dojo.rawXhrPost = dojo.xhrPost = function(/*dojo.__XhrArgs*/ args){
// summary:
// Sends an HTTP POST request to the server. In addition to the properties
// listed for the dojo.__XhrArgs type, the following property is allowed:
// postData:
// String. Send raw data in the body of the POST request.
return dojo.xhr("POST", args, true); // dojo/_base/Deferred
};
dojo.rawXhrPut = dojo.xhrPut = function(/*dojo.__XhrArgs*/ args){
// summary:
// Sends an HTTP PUT request to the server. In addition to the properties
// listed for the dojo.__XhrArgs type, the following property is allowed:
// putData:
// String. Send raw data in the body of the PUT request.
return dojo.xhr("PUT", args, true); // dojo/_base/Deferred
};
dojo.xhrDelete = function(/*dojo.__XhrArgs*/ args){
// summary:
// Sends an HTTP DELETE request to the server.
return dojo.xhr("DELETE", args); // dojo/_base/Deferred
};
/*
dojo.wrapForm = function(formNode){
// summary:
// A replacement for FormBind, but not implemented yet.
// FIXME: need to think harder about what extensions to this we might
// want. What should we allow folks to do w/ this? What events to
// set/send?
throw new Error("dojo.wrapForm not yet implemented");
}
*/
dojo._isDocumentOk = function(x){
return util.checkStatus(x.status);
};
dojo._getText = function(url){
var result;
dojo.xhrGet({url:url, sync:true, load:function(text){
result = text;
}});
return result;
};
// Add aliases for static functions to dojo.xhr since dojo.xhr is what's returned from this module
lang.mixin(dojo.xhr, {
_xhrObj: dojo._xhrObj,
fieldToObject: domForm.fieldToObject,
formToObject: domForm.toObject,
objectToQuery: ioq.objectToQuery,
formToQuery: domForm.toQuery,
formToJson: domForm.toJson,
queryToObject: ioq.queryToObject,
contentHandlers: handlers,
_ioSetArgs: dojo._ioSetArgs,
_ioCancelAll: dojo._ioCancelAll,
_ioNotifyStart: dojo._ioNotifyStart,
_ioWatch: dojo._ioWatch,
_ioAddQueryToUrl: dojo._ioAddQueryToUrl,
_isDocumentOk: dojo._isDocumentOk,
_getText: dojo._getText,
get: dojo.xhrGet,
post: dojo.xhrPost,
put: dojo.xhrPut,
del: dojo.xhrDelete // because "delete" is a reserved word
});
return dojo.xhr;
});

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@@ -1,8 +1,8 @@
/*
Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
Copyright (c) 2004-2012, The Dojo Foundation All Rights Reserved.
Available via Academic Free License >= 2.1 OR the modified BSD license.
see: http://dojotoolkit.org/license for details
*/
//>>built
define("dojo/aspect",[],function(){"use strict";var _1=0;function _2(_3,_4,_5,_6){var _7=_3[_4];var _8=_4=="around";var _9;if(_8){var _a=_5(function(){return _7.advice(this,arguments);});_9={remove:function(){_9.cancelled=true;},advice:function(_b,_c){return _9.cancelled?_7.advice(_b,_c):_a.apply(_b,_c);}};}else{_9={remove:function(){var _d=_9.previous;var _e=_9.next;if(!_e&&!_d){delete _3[_4];}else{if(_d){_d.next=_e;}else{_3[_4]=_e;}if(_e){_e.previous=_d;}}},id:_1++,advice:_5,receiveArguments:_6};}if(_7&&!_8){if(_4=="after"){var _f=_7;while(_f){_7=_f;_f=_f.next;}_7.next=_9;_9.previous=_7;}else{if(_4=="before"){_3[_4]=_9;_9.next=_7;_7.previous=_9;}}}else{_3[_4]=_9;}return _9;};function _10(_11){return function(_12,_13,_14,_15){var _16=_12[_13],_17;if(!_16||_16.target!=_12){_12[_13]=_17=function(){var _18=_1;var _19=arguments;var _1a=_17.before;while(_1a){_19=_1a.advice.apply(this,_19)||_19;_1a=_1a.next;}if(_17.around){var _1b=_17.around.advice(this,_19);}var _1c=_17.after;while(_1c&&_1c.id<_18){_1b=_1c.receiveArguments?_1c.advice.apply(this,_19)||_1b:_1c.advice.call(this,_1b);_1c=_1c.next;}return _1b;};if(_16){_17.around={advice:function(_1d,_1e){return _16.apply(_1d,_1e);}};}_17.target=_12;}var _1f=_2((_17||_16),_11,_14,_15);_14=null;return _1f;};};return {before:_10("before"),around:_10("around"),after:_10("after")};});
define("dojo/aspect",[],function(){"use strict";var _1,_2=0;function _3(_4,_5,_6,_7){var _8=_4[_5];var _9=_5=="around";var _a;if(_9){var _b=_6(function(){return _8.advice(this,arguments);});_a={remove:function(){_a.cancelled=true;},advice:function(_c,_d){return _a.cancelled?_8.advice(_c,_d):_b.apply(_c,_d);}};}else{_a={remove:function(){var _e=_a.previous;var _f=_a.next;if(!_f&&!_e){delete _4[_5];}else{if(_e){_e.next=_f;}else{_4[_5]=_f;}if(_f){_f.previous=_e;}}},id:_2++,advice:_6,receiveArguments:_7};}if(_8&&!_9){if(_5=="after"){while(_8.next&&(_8=_8.next)){}_8.next=_a;_a.previous=_8;}else{if(_5=="before"){_4[_5]=_a;_a.next=_8;_8.previous=_a;}}}else{_4[_5]=_a;}return _a;};function _10(_11){return function(_12,_13,_14,_15){var _16=_12[_13],_17;if(!_16||_16.target!=_12){_12[_13]=_17=function(){var _18=_2;var _19=arguments;var _1a=_17.before;while(_1a){_19=_1a.advice.apply(this,_19)||_19;_1a=_1a.next;}if(_17.around){var _1b=_17.around.advice(this,_19);}var _1c=_17.after;while(_1c&&_1c.id<_18){if(_1c.receiveArguments){var _1d=_1c.advice.apply(this,_19);_1b=_1d===_1?_1b:_1d;}else{_1b=_1c.advice.call(this,_1b,_19);}_1c=_1c.next;}return _1b;};if(_16){_17.around={advice:function(_1e,_1f){return _16.apply(_1e,_1f);}};}_17.target=_12;}var _20=_3((_17||_16),_11,_14,_15);_14=null;return _20;};};var _21=_10("after");var _22=_10("before");var _23=_10("around");return {before:_22,around:_23,after:_21};});

View File

@@ -0,0 +1,216 @@
define("dojo/aspect", [], function(){
// module:
// dojo/aspect
"use strict";
var undefined, nextId = 0;
function advise(dispatcher, type, advice, receiveArguments){
var previous = dispatcher[type];
var around = type == "around";
var signal;
if(around){
var advised = advice(function(){
return previous.advice(this, arguments);
});
signal = {
remove: function(){
signal.cancelled = true;
},
advice: function(target, args){
return signal.cancelled ?
previous.advice(target, args) : // cancelled, skip to next one
advised.apply(target, args); // called the advised function
}
};
}else{
// create the remove handler
signal = {
remove: function(){
var previous = signal.previous;
var next = signal.next;
if(!next && !previous){
delete dispatcher[type];
}else{
if(previous){
previous.next = next;
}else{
dispatcher[type] = next;
}
if(next){
next.previous = previous;
}
}
},
id: nextId++,
advice: advice,
receiveArguments: receiveArguments
};
}
if(previous && !around){
if(type == "after"){
// add the listener to the end of the list
// note that we had to change this loop a little bit to workaround a bizarre IE10 JIT bug
while(previous.next && (previous = previous.next)){}
previous.next = signal;
signal.previous = previous;
}else if(type == "before"){
// add to beginning
dispatcher[type] = signal;
signal.next = previous;
previous.previous = signal;
}
}else{
// around or first one just replaces
dispatcher[type] = signal;
}
return signal;
}
function aspect(type){
return function(target, methodName, advice, receiveArguments){
var existing = target[methodName], dispatcher;
if(!existing || existing.target != target){
// no dispatcher in place
target[methodName] = dispatcher = function(){
var executionId = nextId;
// before advice
var args = arguments;
var before = dispatcher.before;
while(before){
args = before.advice.apply(this, args) || args;
before = before.next;
}
// around advice
if(dispatcher.around){
var results = dispatcher.around.advice(this, args);
}
// after advice
var after = dispatcher.after;
while(after && after.id < executionId){
if(after.receiveArguments){
var newResults = after.advice.apply(this, args);
// change the return value only if a new value was returned
results = newResults === undefined ? results : newResults;
}else{
results = after.advice.call(this, results, args);
}
after = after.next;
}
return results;
};
if(existing){
dispatcher.around = {advice: function(target, args){
return existing.apply(target, args);
}};
}
dispatcher.target = target;
}
var results = advise((dispatcher || existing), type, advice, receiveArguments);
advice = null;
return results;
};
}
// TODOC: after/before/around return object
var after = aspect("after");
/*=====
after = function(target, methodName, advice, receiveArguments){
// summary:
// The "after" export of the aspect module is a function that can be used to attach
// "after" advice to a method. This function will be executed after the original method
// is executed. By default the function will be called with a single argument, the return
// value of the original method, or the the return value of the last executed advice (if a previous one exists).
// The fourth (optional) argument can be set to true to so the function receives the original
// arguments (from when the original method was called) rather than the return value.
// If there are multiple "after" advisors, they are executed in the order they were registered.
// target: Object
// This is the target object
// methodName: String
// This is the name of the method to attach to.
// advice: Function
// This is function to be called after the original method
// receiveArguments: Boolean?
// If this is set to true, the advice function receives the original arguments (from when the original mehtod
// was called) rather than the return value of the original/previous method.
// returns:
// A signal object that can be used to cancel the advice. If remove() is called on this signal object, it will
// stop the advice function from being executed.
};
=====*/
var before = aspect("before");
/*=====
before = function(target, methodName, advice){
// summary:
// The "before" export of the aspect module is a function that can be used to attach
// "before" advice to a method. This function will be executed before the original method
// is executed. This function will be called with the arguments used to call the method.
// This function may optionally return an array as the new arguments to use to call
// the original method (or the previous, next-to-execute before advice, if one exists).
// If the before method doesn't return anything (returns undefined) the original arguments
// will be preserved.
// If there are multiple "before" advisors, they are executed in the reverse order they were registered.
// target: Object
// This is the target object
// methodName: String
// This is the name of the method to attach to.
// advice: Function
// This is function to be called before the original method
};
=====*/
var around = aspect("around");
/*=====
around = function(target, methodName, advice){
// summary:
// The "around" export of the aspect module is a function that can be used to attach
// "around" advice to a method. The advisor function is immediately executed when
// the around() is called, is passed a single argument that is a function that can be
// called to continue execution of the original method (or the next around advisor).
// The advisor function should return a function, and this function will be called whenever
// the method is called. It will be called with the arguments used to call the method.
// Whatever this function returns will be returned as the result of the method call (unless after advise changes it).
// example:
// If there are multiple "around" advisors, the most recent one is executed first,
// which can then delegate to the next one and so on. For example:
// | around(obj, "foo", function(originalFoo){
// | return function(){
// | var start = new Date().getTime();
// | var results = originalFoo.apply(this, arguments); // call the original
// | var end = new Date().getTime();
// | console.log("foo execution took " + (end - start) + " ms");
// | return results;
// | };
// | });
// target: Object
// This is the target object
// methodName: String
// This is the name of the method to attach to.
// advice: Function
// This is function to be called around the original method
};
=====*/
return {
// summary:
// provides aspect oriented programming functionality, allowing for
// one to add before, around, or after advice on existing methods.
// example:
// | define(["dojo/aspect"], function(aspect){
// | var signal = aspect.after(targetObject, "methodName", function(someArgument){
// | this will be called when targetObject.methodName() is called, after the original function is called
// | });
//
// example:
// The returned signal object can be used to cancel the advice.
// | signal.remove(); // this will stop the advice from being executed anymore
// | aspect.before(targetObject, "methodName", function(someArgument){
// | // this will be called when targetObject.methodName() is called, before the original function is called
// | });
before: before,
around: around,
after: after
};
});

View File

@@ -1,8 +1,8 @@
/*
Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
Copyright (c) 2004-2012, The Dojo Foundation All Rights Reserved.
Available via Academic Free License >= 2.1 OR the modified BSD license.
see: http://dojotoolkit.org/license for details
*/
//>>built
define("dojo/back",["./_base/kernel","./_base/lang","./_base/sniff","./dom","./dom-construct","./_base/window","require"],function(_1,_2,_3,_4,_5,_6,_7){_2.getObject("back",true,_1);var _8=_1.back,_9=_8.getHash=function(){var h=window.location.hash;if(h.charAt(0)=="#"){h=h.substring(1);}return _3("mozilla")?h:decodeURIComponent(h);},_a=_8.setHash=function(h){if(!h){h="";}window.location.hash=encodeURIComponent(h);_b=history.length;};var _c=(typeof (window)!=="undefined")?window.location.href:"";var _d=(typeof (window)!=="undefined")?_9():"";var _e=null;var _f=null;var _10=null;var _11=null;var _12=[];var _13=[];var _14=false;var _15=false;var _b;function _16(){var _17=_13.pop();if(!_17){return;}var _18=_13[_13.length-1];if(!_18&&_13.length==0){_18=_e;}if(_18){if(_18.kwArgs["back"]){_18.kwArgs["back"]();}else{if(_18.kwArgs["backButton"]){_18.kwArgs["backButton"]();}else{if(_18.kwArgs["handle"]){_18.kwArgs.handle("back");}}}}_12.push(_17);};_8.goBack=_16;function _19(){var _1a=_12.pop();if(!_1a){return;}if(_1a.kwArgs["forward"]){_1a.kwArgs.forward();}else{if(_1a.kwArgs["forwardButton"]){_1a.kwArgs.forwardButton();}else{if(_1a.kwArgs["handle"]){_1a.kwArgs.handle("forward");}}}_13.push(_1a);};_8.goForward=_19;function _1b(url,_1c,_1d){return {"url":url,"kwArgs":_1c,"urlHash":_1d};};function _1e(url){var _1f=url.split("?");if(_1f.length<2){return null;}else{return _1f[1];}};function _20(){var url=(_1.config["dojoIframeHistoryUrl"]||_7.toUrl("./resources/iframe_history.html"))+"?"+(new Date()).getTime();_14=true;if(_11){_3("webkit")?_11.location=url:window.frames[_11.name].location=url;}else{}return url;};function _21(){if(!_15){var hsl=_13.length;var _22=_9();if((_22===_d||window.location.href==_c)&&(hsl==1)){_16();return;}if(_12.length>0){if(_12[_12.length-1].urlHash===_22){_19();return;}}if((hsl>=2)&&(_13[hsl-2])){if(_13[hsl-2].urlHash===_22){_16();}}}};_8.init=function(){if(_4.byId("dj_history")){return;}var src=_1.config["dojoIframeHistoryUrl"]||_7.toUrl("./resources/iframe_history.html");if(_1._postLoad){console.error("dojo.back.init() must be called before the DOM has loaded. "+"If using xdomain loading or djConfig.debugAtAllCosts, include dojo.back "+"in a build layer.");}else{document.write("<iframe style=\"border:0;width:1px;height:1px;position:absolute;visibility:hidden;bottom:0;right:0;\" name=\"dj_history\" id=\"dj_history\" src=\""+src+"\"></iframe>");}};_8.setInitialState=function(_23){_e=_1b(_c,_23,_d);};_8.addToHistory=function(_24){_12=[];var _25=null;var url=null;if(!_11){if(_1.config["useXDomain"]&&!_1.config["dojoIframeHistoryUrl"]){console.warn("dojo.back: When using cross-domain Dojo builds,"+" please save iframe_history.html to your domain and set djConfig.dojoIframeHistoryUrl"+" to the path on your domain to iframe_history.html");}_11=window.frames["dj_history"];}if(!_10){_10=_5.create("a",{style:{display:"none"}},_6.body());}if(_24["changeUrl"]){_25=""+((_24["changeUrl"]!==true)?_24["changeUrl"]:(new Date()).getTime());if(_13.length==0&&_e.urlHash==_25){_e=_1b(url,_24,_25);return;}else{if(_13.length>0&&_13[_13.length-1].urlHash==_25){_13[_13.length-1]=_1b(url,_24,_25);return;}}_15=true;setTimeout(function(){_a(_25);_15=false;},1);_10.href=_25;if(_3("ie")){url=_20();var _26=_24["back"]||_24["backButton"]||_24["handle"];var tcb=function(_27){if(_9()!=""){setTimeout(function(){_a(_25);},1);}_26.apply(this,[_27]);};if(_24["back"]){_24.back=tcb;}else{if(_24["backButton"]){_24.backButton=tcb;}else{if(_24["handle"]){_24.handle=tcb;}}}var _28=_24["forward"]||_24["forwardButton"]||_24["handle"];var tfw=function(_29){if(_9()!=""){_a(_25);}if(_28){_28.apply(this,[_29]);}};if(_24["forward"]){_24.forward=tfw;}else{if(_24["forwardButton"]){_24.forwardButton=tfw;}else{if(_24["handle"]){_24.handle=tfw;}}}}else{if(!_3("ie")){if(!_f){_f=setInterval(_21,200);}}}}else{url=_20();}_13.push(_1b(url,_24,_25));};_8._iframeLoaded=function(evt,_2a){var _2b=_1e(_2a.href);if(_2b==null){if(_13.length==1){_16();}return;}if(_14){_14=false;return;}if(_13.length>=2&&_2b==_1e(_13[_13.length-2].url)){_16();}else{if(_12.length>0&&_2b==_1e(_12[_12.length-1].url)){_19();}}};return _1.back;});
define("dojo/back",["./_base/config","./_base/lang","./sniff","./dom","./dom-construct","./_base/window","require"],function(_1,_2,_3,_4,_5,_6,_7){var _8={};1&&_2.setObject("dojo.back",_8);var _9=_8.getHash=function(){var h=window.location.hash;if(h.charAt(0)=="#"){h=h.substring(1);}return _3("mozilla")?h:decodeURIComponent(h);},_a=_8.setHash=function(h){if(!h){h="";}window.location.hash=encodeURIComponent(h);_b=history.length;};var _c=(typeof (window)!=="undefined")?window.location.href:"";var _d=(typeof (window)!=="undefined")?_9():"";var _e=null;var _f=null;var _10=null;var _11=null;var _12=[];var _13=[];var _14=false;var _15=false;var _b;function _16(){var _17=_13.pop();if(!_17){return;}var _18=_13[_13.length-1];if(!_18&&_13.length==0){_18=_e;}if(_18){if(_18.kwArgs["back"]){_18.kwArgs["back"]();}else{if(_18.kwArgs["backButton"]){_18.kwArgs["backButton"]();}else{if(_18.kwArgs["handle"]){_18.kwArgs.handle("back");}}}}_12.push(_17);};_8.goBack=_16;function _19(){var _1a=_12.pop();if(!_1a){return;}if(_1a.kwArgs["forward"]){_1a.kwArgs.forward();}else{if(_1a.kwArgs["forwardButton"]){_1a.kwArgs.forwardButton();}else{if(_1a.kwArgs["handle"]){_1a.kwArgs.handle("forward");}}}_13.push(_1a);};_8.goForward=_19;function _1b(url,_1c,_1d){return {"url":url,"kwArgs":_1c,"urlHash":_1d};};function _1e(url){var _1f=url.split("?");if(_1f.length<2){return null;}else{return _1f[1];}};function _20(){var url=(_1["dojoIframeHistoryUrl"]||_7.toUrl("./resources/iframe_history.html"))+"?"+(new Date()).getTime();_14=true;if(_11){_3("webkit")?_11.location=url:window.frames[_11.name].location=url;}else{}return url;};function _21(){if(!_15){var hsl=_13.length;var _22=_9();if((_22===_d||window.location.href==_c)&&(hsl==1)){_16();return;}if(_12.length>0){if(_12[_12.length-1].urlHash===_22){_19();return;}}if((hsl>=2)&&(_13[hsl-2])){if(_13[hsl-2].urlHash===_22){_16();}}}};_8.init=function(){if(_4.byId("dj_history")){return;}var src=_1["dojoIframeHistoryUrl"]||_7.toUrl("./resources/iframe_history.html");if(_1.afterOnLoad){console.error("dojo/back::init() must be called before the DOM has loaded. "+"Include dojo/back in a build layer.");}else{document.write("<iframe style=\"border:0;width:1px;height:1px;position:absolute;visibility:hidden;bottom:0;right:0;\" name=\"dj_history\" id=\"dj_history\" src=\""+src+"\"></iframe>");}};_8.setInitialState=function(_23){_e=_1b(_c,_23,_d);};_8.addToHistory=function(_24){_12=[];var _25=null;var url=null;if(!_11){if(_1["useXDomain"]&&!_1["dojoIframeHistoryUrl"]){console.warn("dojo/back: When using cross-domain Dojo builds,"+" please save iframe_history.html to your domain and set djConfig.dojoIframeHistoryUrl"+" to the path on your domain to iframe_history.html");}_11=window.frames["dj_history"];}if(!_10){_10=_5.create("a",{style:{display:"none"}},_6.body());}if(_24["changeUrl"]){_25=""+((_24["changeUrl"]!==true)?_24["changeUrl"]:(new Date()).getTime());if(_13.length==0&&_e.urlHash==_25){_e=_1b(url,_24,_25);return;}else{if(_13.length>0&&_13[_13.length-1].urlHash==_25){_13[_13.length-1]=_1b(url,_24,_25);return;}}_15=true;setTimeout(function(){_a(_25);_15=false;},1);_10.href=_25;if(_3("ie")){url=_20();var _26=_24["back"]||_24["backButton"]||_24["handle"];var tcb=function(_27){if(_9()!=""){setTimeout(function(){_a(_25);},1);}_26.apply(this,[_27]);};if(_24["back"]){_24.back=tcb;}else{if(_24["backButton"]){_24.backButton=tcb;}else{if(_24["handle"]){_24.handle=tcb;}}}var _28=_24["forward"]||_24["forwardButton"]||_24["handle"];var tfw=function(_29){if(_9()!=""){_a(_25);}if(_28){_28.apply(this,[_29]);}};if(_24["forward"]){_24.forward=tfw;}else{if(_24["forwardButton"]){_24.forwardButton=tfw;}else{if(_24["handle"]){_24.handle=tfw;}}}}else{if(!_3("ie")){if(!_f){_f=setInterval(_21,200);}}}}else{url=_20();}_13.push(_1b(url,_24,_25));};_8._iframeLoaded=function(evt,_2a){var _2b=_1e(_2a.href);if(_2b==null){if(_13.length==1){_16();}return;}if(_14){_14=false;return;}if(_13.length>=2&&_2b==_1e(_13[_13.length-2].url)){_16();}else{if(_12.length>0&&_2b==_1e(_12[_12.length-1].url)){_19();}}};return _8;});

View File

@@ -0,0 +1,397 @@
define("dojo/back", ["./_base/config", "./_base/lang", "./sniff", "./dom", "./dom-construct", "./_base/window", "require"],
function(config, lang, has, dom, domConstruct, baseWindow, require){
// module:
// dojo/back
var back = {
// summary:
// Browser history management resources
};
1 && lang.setObject("dojo.back", back);
// everyone deals with encoding the hash slightly differently
var getHash = back.getHash = function(){
var h = window.location.hash;
if(h.charAt(0) == "#"){ h = h.substring(1); }
return has("mozilla") ? h : decodeURIComponent(h);
},
setHash = back.setHash = function(h){
if(!h){ h = ""; }
window.location.hash = encodeURIComponent(h);
historyCounter = history.length;
};
var initialHref = (typeof(window) !== "undefined") ? window.location.href : "";
var initialHash = (typeof(window) !== "undefined") ? getHash() : "";
var initialState = null;
var locationTimer = null;
var bookmarkAnchor = null;
var historyIframe = null;
var forwardStack = [];
var historyStack = [];
var moveForward = false;
var changingUrl = false;
var historyCounter;
function handleBackButton(){
// summary:
// private method. Do not call this directly.
//The "current" page is always at the top of the history stack.
var current = historyStack.pop();
if(!current){ return; }
var last = historyStack[historyStack.length-1];
if(!last && historyStack.length == 0){
last = initialState;
}
if(last){
if(last.kwArgs["back"]){
last.kwArgs["back"]();
}else if(last.kwArgs["backButton"]){
last.kwArgs["backButton"]();
}else if(last.kwArgs["handle"]){
last.kwArgs.handle("back");
}
}
forwardStack.push(current);
}
back.goBack = handleBackButton;
function handleForwardButton(){
// summary:
// private method. Do not call this directly.
var last = forwardStack.pop();
if(!last){ return; }
if(last.kwArgs["forward"]){
last.kwArgs.forward();
}else if(last.kwArgs["forwardButton"]){
last.kwArgs.forwardButton();
}else if(last.kwArgs["handle"]){
last.kwArgs.handle("forward");
}
historyStack.push(last);
}
back.goForward = handleForwardButton;
function createState(url, args, hash){
// summary:
// private method. Do not call this directly.
return {"url": url, "kwArgs": args, "urlHash": hash}; //Object
}
function getUrlQuery(url){
// summary:
// private method. Do not call this directly.
var segments = url.split("?");
if(segments.length < 2){
return null; //null
}
else{
return segments[1]; //String
}
}
function loadIframeHistory(){
// summary:
// private method. Do not call this directly.
var url = (config["dojoIframeHistoryUrl"] || require.toUrl("./resources/iframe_history.html")) + "?" + (new Date()).getTime();
moveForward = true;
if(historyIframe){
has("webkit") ? historyIframe.location = url : window.frames[historyIframe.name].location = url;
}else{
//console.warn("dojo/back: Not initialised. You need to call back.init() from a <script> block that lives inside the <body> tag.");
}
return url; //String
}
function checkLocation(){
if(!changingUrl){
var hsl = historyStack.length;
var hash = getHash();
if((hash === initialHash||window.location.href == initialHref)&&(hsl == 1)){
// FIXME: could this ever be a forward button?
// we can't clear it because we still need to check for forwards. Ugg.
// clearInterval(this.locationTimer);
handleBackButton();
return;
}
// first check to see if we could have gone forward. We always halt on
// a no-hash item.
if(forwardStack.length > 0){
if(forwardStack[forwardStack.length-1].urlHash === hash){
handleForwardButton();
return;
}
}
// ok, that didn't work, try someplace back in the history stack
if((hsl >= 2)&&(historyStack[hsl-2])){
if(historyStack[hsl-2].urlHash === hash){
handleBackButton();
}
}
}
}
back.init = function(){
// summary:
// Initializes the undo stack. This must be called from a <script>
// block that lives inside the `<body>` tag to prevent bugs on IE.
//
// Only call this method before the page's DOM is finished loading. Otherwise
// it will not work. Be careful with xdomain loading or djConfig.debugAtAllCosts scenarios,
// in order for this method to work, dojo/back will need to be part of a build layer.
// prevent reinit
if(dom.byId("dj_history")){ return; }
var src = config["dojoIframeHistoryUrl"] || require.toUrl("./resources/iframe_history.html");
if (config.afterOnLoad){
console.error("dojo/back::init() must be called before the DOM has loaded. "
+ "Include dojo/back in a build layer.");
}else{
document.write('<iframe style="border:0;width:1px;height:1px;position:absolute;visibility:hidden;bottom:0;right:0;" name="dj_history" id="dj_history" src="' + src + '"></iframe>');
}
};
back.setInitialState = function(/*Object*/args){
// summary:
// Sets the state object and back callback for the very first page
// that is loaded.
//
// It is recommended that you call this method as part of an event
// listener that is registered via dojo/ready.
// args: Object
// See the addToHistory() function for the list of valid args properties.
initialState = createState(initialHref, args, initialHash);
};
//FIXME: Make these doc comments not be awful. At least they're not wrong.
//FIXME: Would like to support arbitrary back/forward jumps. Have to rework iframeLoaded among other things.
//FIXME: is there a slight race condition in moz using change URL with the timer check and when
// the hash gets set? I think I have seen a back/forward call in quick succession, but not consistent.
/*=====
var __backArgs = {
// back: Function?
// A function to be called when this state is reached via the user
// clicking the back button.
// forward: Function?
// Upon return to this state from the "back, forward" combination
// of navigation steps, this function will be called. Somewhat
// analogous to the semantic of an "onRedo" event handler.
// changeUrl: Boolean|String?
// Boolean indicating whether or not to create a unique hash for
// this state. If a string is passed instead, it is used as the
// hash.
};
=====*/
back.addToHistory = function(args){
// summary:
// adds a state object (args) to the history list.
// args: __backArgs
// The state object that will be added to the history list.
// description:
// To support getting back button notifications, the object
// argument should implement a function called either "back",
// "backButton", or "handle". The string "back" will be passed as
// the first and only argument to this callback.
//
// To support getting forward button notifications, the object
// argument should implement a function called either "forward",
// "forwardButton", or "handle". The string "forward" will be
// passed as the first and only argument to this callback.
//
// If you want the browser location string to change, define "changeUrl" on the object. If the
// value of "changeUrl" is true, then a unique number will be appended to the URL as a fragment
// identifier (http://some.domain.com/path#uniquenumber). If it is any other value that does
// not evaluate to false, that value will be used as the fragment identifier. For example,
// if changeUrl: 'page1', then the URL will look like: http://some.domain.com/path#page1
//
// There are problems with using dojo/back with semantically-named fragment identifiers
// ("hash values" on an URL). In most browsers it will be hard for dojo/back to know
// distinguish a back from a forward event in those cases. For back/forward support to
// work best, the fragment ID should always be a unique value (something using new Date().getTime()
// for example). If you want to detect hash changes using semantic fragment IDs, then
// consider using dojo/hash instead (in Dojo 1.4+).
//
// example:
// | back.addToHistory({
// | back: function(){ console.log('back pressed'); },
// | forward: function(){ console.log('forward pressed'); },
// | changeUrl: true
// | });
// BROWSER NOTES:
// Safari 1.2:
// back button "works" fine, however it's not possible to actually
// DETECT that you've moved backwards by inspecting window.location.
// Unless there is some other means of locating.
// FIXME: perhaps we can poll on history.length?
// Safari 2.0.3+ (and probably 1.3.2+):
// works fine, except when changeUrl is used. When changeUrl is used,
// Safari jumps all the way back to whatever page was shown before
// the page that uses dojo.undo.browser support.
// IE 5.5 SP2:
// back button behavior is macro. It does not move back to the
// previous hash value, but to the last full page load. This suggests
// that the iframe is the correct way to capture the back button in
// these cases.
// Don't test this page using local disk for MSIE. MSIE will not create
// a history list for iframe_history.html if served from a file: URL.
// The XML served back from the XHR tests will also not be properly
// created if served from local disk. Serve the test pages from a web
// server to test in that browser.
// IE 6.0:
// same behavior as IE 5.5 SP2
// Firefox 1.0+:
// the back button will return us to the previous hash on the same
// page, thereby not requiring an iframe hack, although we do then
// need to run a timer to detect inter-page movement.
//If addToHistory is called, then that means we prune the
//forward stack -- the user went back, then wanted to
//start a new forward path.
forwardStack = [];
var hash = null;
var url = null;
if(!historyIframe){
if(config["useXDomain"] && !config["dojoIframeHistoryUrl"]){
console.warn("dojo/back: When using cross-domain Dojo builds,"
+ " please save iframe_history.html to your domain and set djConfig.dojoIframeHistoryUrl"
+ " to the path on your domain to iframe_history.html");
}
historyIframe = window.frames["dj_history"];
}
if(!bookmarkAnchor){
bookmarkAnchor = domConstruct.create("a", {style: {display: "none"}}, baseWindow.body());
}
if(args["changeUrl"]){
hash = ""+ ((args["changeUrl"]!==true) ? args["changeUrl"] : (new Date()).getTime());
//If the current hash matches the new one, just replace the history object with
//this new one. It doesn't make sense to track different state objects for the same
//logical URL. This matches the browser behavior of only putting in one history
//item no matter how many times you click on the same #hash link, at least in Firefox
//and Safari, and there is no reliable way in those browsers to know if a #hash link
//has been clicked on multiple times. So making this the standard behavior in all browsers
//so that dojo/back's behavior is the same in all browsers.
if(historyStack.length == 0 && initialState.urlHash == hash){
initialState = createState(url, args, hash);
return;
}else if(historyStack.length > 0 && historyStack[historyStack.length - 1].urlHash == hash){
historyStack[historyStack.length - 1] = createState(url, args, hash);
return;
}
changingUrl = true;
setTimeout(function(){
setHash(hash);
changingUrl = false;
}, 1);
bookmarkAnchor.href = hash;
if(has("ie")){
url = loadIframeHistory();
var oldCB = args["back"]||args["backButton"]||args["handle"];
//The function takes handleName as a parameter, in case the
//callback we are overriding was "handle". In that case,
//we will need to pass the handle name to handle.
var tcb = function(handleName){
if(getHash() != ""){
setTimeout(function(){ setHash(hash); }, 1);
}
//Use apply to set "this" to args, and to try to avoid memory leaks.
oldCB.apply(this, [handleName]);
};
//Set interceptor function in the right place.
if(args["back"]){
args.back = tcb;
}else if(args["backButton"]){
args.backButton = tcb;
}else if(args["handle"]){
args.handle = tcb;
}
var oldFW = args["forward"]||args["forwardButton"]||args["handle"];
//The function takes handleName as a parameter, in case the
//callback we are overriding was "handle". In that case,
//we will need to pass the handle name to handle.
var tfw = function(handleName){
if(getHash() != ""){
setHash(hash);
}
if(oldFW){ // we might not actually have one
//Use apply to set "this" to args, and to try to avoid memory leaks.
oldFW.apply(this, [handleName]);
}
};
//Set interceptor function in the right place.
if(args["forward"]){
args.forward = tfw;
}else if(args["forwardButton"]){
args.forwardButton = tfw;
}else if(args["handle"]){
args.handle = tfw;
}
}else if(!has("ie")){
// start the timer
if(!locationTimer){
locationTimer = setInterval(checkLocation, 200);
}
}
}else{
url = loadIframeHistory();
}
historyStack.push(createState(url, args, hash));
};
back._iframeLoaded = function(evt, ifrLoc){
// summary:
// private method. Do not call this directly.
var query = getUrlQuery(ifrLoc.href);
if(query == null){
// alert("iframeLoaded");
// we hit the end of the history, so we should go back
if(historyStack.length == 1){
handleBackButton();
}
return;
}
if(moveForward){
// we were expecting it, so it's not either a forward or backward movement
moveForward = false;
return;
}
//Check the back stack first, since it is more likely.
//Note that only one step back or forward is supported.
if(historyStack.length >= 2 && query == getUrlQuery(historyStack[historyStack.length-2].url)){
handleBackButton();
}else if(forwardStack.length > 0 && query == getUrlQuery(forwardStack[forwardStack.length-1].url)){
handleForwardButton();
}
};
return back;
});

View File

@@ -1,8 +1,8 @@
/*
Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
Copyright (c) 2004-2012, The Dojo Foundation All Rights Reserved.
Available via Academic Free License >= 2.1 OR the modified BSD license.
see: http://dojotoolkit.org/license for details
*/
//>>built
define("dojo/behavior",["./_base/kernel","./_base/lang","./_base/array","./_base/connect","./query","./ready"],function(_1,_2,_3,_4,_5,_6){_1.behavior=new function(){function _7(_8,_9){if(!_8[_9]){_8[_9]=[];}return _8[_9];};var _a=0;function _b(_c,_d,_e){var _f={};for(var x in _c){if(typeof _f[x]=="undefined"){if(!_e){_d(_c[x],x);}else{_e.call(_d,_c[x],x);}}}};this._behaviors={};this.add=function(_10){_b(_10,this,function(_11,_12){var _13=_7(this._behaviors,_12);if(typeof _13["id"]!="number"){_13.id=_a++;}var _14=[];_13.push(_14);if((_2.isString(_11))||(_2.isFunction(_11))){_11={found:_11};}_b(_11,function(_15,_16){_7(_14,_16).push(_15);});});};var _17=function(_18,_19,_1a){if(_2.isString(_19)){if(_1a=="found"){_4.publish(_19,[_18]);}else{_4.connect(_18,_1a,function(){_4.publish(_19,arguments);});}}else{if(_2.isFunction(_19)){if(_1a=="found"){_19(_18);}else{_4.connect(_18,_1a,_19);}}}};this.apply=function(){_b(this._behaviors,function(_1b,id){_5(id).forEach(function(_1c){var _1d=0;var bid="_dj_behavior_"+_1b.id;if(typeof _1c[bid]=="number"){_1d=_1c[bid];if(_1d==(_1b.length)){return;}}for(var x=_1d,_1e;_1e=_1b[x];x++){_b(_1e,function(_1f,_20){if(_2.isArray(_1f)){_3.forEach(_1f,function(_21){_17(_1c,_21,_20);});}});}_1c[bid]=_1b.length;});});};};_6(_1.behavior,"apply");return _1.behavior;});
define("dojo/behavior",["./_base/kernel","./_base/lang","./_base/array","./_base/connect","./query","./ready"],function(_1,_2,_3,_4,_5,_6){_1.deprecated("dojo.behavior","Use dojo/on with event delegation (on.selector())");var _7=function(){function _8(_9,_a){if(!_9[_a]){_9[_a]=[];}return _9[_a];};var _b=0;function _c(_d,_e,_f){var _10={};for(var x in _d){if(typeof _10[x]=="undefined"){if(!_f){_e(_d[x],x);}else{_f.call(_e,_d[x],x);}}}};this._behaviors={};this.add=function(_11){_c(_11,this,function(_12,_13){var _14=_8(this._behaviors,_13);if(typeof _14["id"]!="number"){_14.id=_b++;}var _15=[];_14.push(_15);if((_2.isString(_12))||(_2.isFunction(_12))){_12={found:_12};}_c(_12,function(_16,_17){_8(_15,_17).push(_16);});});};var _18=function(_19,_1a,_1b){if(_2.isString(_1a)){if(_1b=="found"){_4.publish(_1a,[_19]);}else{_4.connect(_19,_1b,function(){_4.publish(_1a,arguments);});}}else{if(_2.isFunction(_1a)){if(_1b=="found"){_1a(_19);}else{_4.connect(_19,_1b,_1a);}}}};this.apply=function(){_c(this._behaviors,function(_1c,id){_5(id).forEach(function(_1d){var _1e=0;var bid="_dj_behavior_"+_1c.id;if(typeof _1d[bid]=="number"){_1e=_1d[bid];if(_1e==(_1c.length)){return;}}for(var x=_1e,_1f;_1f=_1c[x];x++){_c(_1f,function(_20,_21){if(_2.isArray(_20)){_3.forEach(_20,function(_22){_18(_1d,_22,_21);});}});}_1d[bid]=_1c.length;});});};};_1.behavior=new _7();_6(_1.behavior,"apply");return _1.behavior;});

View File

@@ -0,0 +1,249 @@
define("dojo/behavior", ["./_base/kernel", "./_base/lang", "./_base/array", "./_base/connect", "./query", "./ready"],
function(dojo, lang, darray, connect, query, ready){
// module:
// dojo/behavior
dojo.deprecated("dojo.behavior", "Use dojo/on with event delegation (on.selector())");
var Behavior = function(){
// summary:
// Deprecated. dojo/behavior's functionality can be achieved using event delegation using dojo/on
// and on.selector().
// description:
// A very simple, lightweight mechanism for applying code to
// existing documents, based around `dojo/query` (CSS3 selectors) for node selection,
// and a simple two-command API: `add()` and `apply()`;
//
// Behaviors apply to a given page, and are registered following the syntax
// options described by `add()` to match nodes to actions, or "behaviors".
//
// Added behaviors are applied to the current DOM when .apply() is called,
// matching only new nodes found since .apply() was last called.
function arrIn(obj, name){
if(!obj[name]){ obj[name] = []; }
return obj[name];
}
var _inc = 0;
function forIn(obj, scope, func){
var tmpObj = {};
for(var x in obj){
if(typeof tmpObj[x] == "undefined"){
if(!func){
scope(obj[x], x);
}else{
func.call(scope, obj[x], x);
}
}
}
}
// FIXME: need a better test so we don't exclude nightly Safari's!
this._behaviors = {};
this.add = function(/* Object */behaviorObj){
// summary:
// Add the specified behavior to the list of behaviors, ignoring existing
// matches.
// behaviorObj: Object
// The behavior object that will be added to behaviors list. The behaviors
// in the list will be applied the next time apply() is called.
// description:
// Add the specified behavior to the list of behaviors which will
// be applied the next time apply() is called. Calls to add() for
// an already existing behavior do not replace the previous rules,
// but are instead additive. New nodes which match the rule will
// have all add()-ed behaviors applied to them when matched.
//
// The "found" method is a generalized handler that's called as soon
// as the node matches the selector. Rules for values that follow also
// apply to the "found" key.
//
// The "on*" handlers are attached with `dojo.connect()`, using the
// matching node
//
// If the value corresponding to the ID key is a function and not a
// list, it's treated as though it was the value of "found".
//
// dojo/behavior.add() can be called any number of times before
// the DOM is ready. `dojo/behavior.apply()` is called automatically
// by `dojo.addOnLoad`, though can be called to re-apply previously added
// behaviors anytime the DOM changes.
//
// There are a variety of formats permitted in the behaviorObject
//
// example:
// Simple list of properties. "found" is special. "Found" is assumed if
// no property object for a given selector, and property is a function.
//
// | behavior.add({
// | "#id": {
// | "found": function(element){
// | // node match found
// | },
// | "onclick": function(evt){
// | // register onclick handler for found node
// | }
// | },
// | "#otherid": function(element){
// | // assumes "found" with this syntax
// | }
// | });
//
// example:
// If property is a string, a dojo.publish will be issued on the channel:
//
// | behavior.add({
// | // topic.publish() whenever class="noclick" found on anchors
// | "a.noclick": "/got/newAnchor",
// | "div.wrapper": {
// | "onclick": "/node/wasClicked"
// | }
// | });
// | topic.subscribe("/got/newAnchor", function(node){
// | // handle node finding when dojo/behavior.apply() is called,
// | // provided a newly matched node is found.
// | });
//
// example:
// Scoping can be accomplished by passing an object as a property to
// a connection handle (on*):
//
// | behavior.add({
// | "#id": {
// | // like calling dojo.hitch(foo,"bar"). execute foo.bar() in scope of foo
// | "onmouseenter": { targetObj: foo, targetFunc: "bar" },
// | "onmouseleave": { targetObj: foo, targetFunc: "baz" }
// | }
// | });
//
// example:
// Behaviors match on CSS3 Selectors, powered by dojo/query. Example selectors:
//
// | behavior.add({
// | // match all direct descendants
// | "#id4 > *": function(element){
// | // ...
// | },
// |
// | // match the first child node that's an element
// | "#id4 > :first-child": { ... },
// |
// | // match the last child node that's an element
// | "#id4 > :last-child": { ... },
// |
// | // all elements of type tagname
// | "tagname": {
// | // ...
// | },
// |
// | "tagname1 tagname2 tagname3": {
// | // ...
// | },
// |
// | ".classname": {
// | // ...
// | },
// |
// | "tagname.classname": {
// | // ...
// | }
// | });
//
forIn(behaviorObj, this, function(behavior, name){
var tBehavior = arrIn(this._behaviors, name);
if(typeof tBehavior["id"] != "number"){
tBehavior.id = _inc++;
}
var cversion = [];
tBehavior.push(cversion);
if((lang.isString(behavior))||(lang.isFunction(behavior))){
behavior = { found: behavior };
}
forIn(behavior, function(rule, ruleName){
arrIn(cversion, ruleName).push(rule);
});
});
};
var _applyToNode = function(node, action, ruleSetName){
if(lang.isString(action)){
if(ruleSetName == "found"){
connect.publish(action, [ node ]);
}else{
connect.connect(node, ruleSetName, function(){
connect.publish(action, arguments);
});
}
}else if(lang.isFunction(action)){
if(ruleSetName == "found"){
action(node);
}else{
connect.connect(node, ruleSetName, action);
}
}
};
this.apply = function(){
// summary:
// Applies all currently registered behaviors to the document.
//
// description:
// Applies all currently registered behaviors to the document,
// taking care to ensure that only incremental updates are made
// since the last time add() or apply() were called.
//
// If new matching nodes have been added, all rules in a behavior will be
// applied to that node. For previously matched nodes, only
// behaviors which have been added since the last call to apply()
// will be added to the nodes.
//
// apply() is called once automatically by `dojo.addOnLoad`, so
// registering behaviors with `dojo/behavior.add()` before the DOM is
// ready is acceptable, provided the dojo.behavior module is ready.
//
// Calling appy() manually after manipulating the DOM is required
// to rescan the DOM and apply newly .add()ed behaviors, or to match
// nodes that match existing behaviors when those nodes are added to
// the DOM.
//
forIn(this._behaviors, function(tBehavior, id){
query(id).forEach(
function(elem){
var runFrom = 0;
var bid = "_dj_behavior_"+tBehavior.id;
if(typeof elem[bid] == "number"){
runFrom = elem[bid];
if(runFrom == (tBehavior.length)){
return;
}
}
// run through the versions, applying newer rules at each step
for(var x=runFrom, tver; tver = tBehavior[x]; x++){
forIn(tver, function(ruleSet, ruleSetName){
if(lang.isArray(ruleSet)){
darray.forEach(ruleSet, function(action){
_applyToNode(elem, action, ruleSetName);
});
}
});
}
// ensure that re-application only adds new rules to the node
elem[bid] = tBehavior.length;
}
);
});
};
};
dojo.behavior = new Behavior();
ready(dojo.behavior, "apply"); // FIXME: should this use a priority? before/after parser priority?
return dojo.behavior;
});

View File

@@ -1,8 +1,8 @@
/*
Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
Copyright (c) 2004-2012, The Dojo Foundation All Rights Reserved.
Available via Academic Free License >= 2.1 OR the modified BSD license.
see: http://dojotoolkit.org/license for details
*/
//>>built
define("dojo/cache",["./_base/kernel","./text"],function(_1,_2){return _1.cache;});
define("dojo/cache",["./_base/kernel","./text"],function(_1){return _1.cache;});

View File

@@ -0,0 +1,7 @@
define("dojo/cache", ["./_base/kernel", "./text"], function(dojo){
// module:
// dojo/cache
// dojo.cache is defined in dojo/text
return dojo.cache;
});

View File

@@ -1,8 +1,8 @@
/*
Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
Copyright (c) 2004-2012, The Dojo Foundation All Rights Reserved.
Available via Academic Free License >= 2.1 OR the modified BSD license.
see: http://dojotoolkit.org/license for details
*/
//>>built
define("dojo/cldr/monetary",["../main"],function(_1){_1.getObject("cldr.monetary",true,_1);_1.cldr.monetary.getData=function(_2){var _3={ADP:0,AFN:0,ALL:0,AMD:0,BHD:3,BIF:0,BYR:0,CLF:0,CLP:0,COP:0,CRC:0,DJF:0,ESP:0,GNF:0,GYD:0,HUF:0,IDR:0,IQD:0,IRR:3,ISK:0,ITL:0,JOD:3,JPY:0,KMF:0,KPW:0,KRW:0,KWD:3,LAK:0,LBP:0,LUF:0,LYD:3,MGA:0,MGF:0,MMK:0,MNT:0,MRO:0,MUR:0,OMR:3,PKR:0,PYG:0,RSD:0,RWF:0,SLL:0,SOS:0,STD:0,SYP:0,TMM:0,TND:3,TRL:0,TZS:0,UGX:0,UZS:0,VND:0,VUV:0,XAF:0,XOF:0,XPF:0,YER:0,ZMK:0,ZWD:0};var _4={CHF:5};var _5=_3[_2],_6=_4[_2];if(typeof _5=="undefined"){_5=2;}if(typeof _6=="undefined"){_6=0;}return {places:_5,round:_6};};return _1.cldr.monetary;});
define("dojo/cldr/monetary",["../_base/kernel","../_base/lang"],function(_1,_2){var _3={};_2.setObject("dojo.cldr.monetary",_3);_3.getData=function(_4){var _5={ADP:0,AFN:0,ALL:0,AMD:0,BHD:3,BIF:0,BYR:0,CLF:0,CLP:0,COP:0,CRC:0,DJF:0,ESP:0,GNF:0,GYD:0,HUF:0,IDR:0,IQD:0,IRR:3,ISK:0,ITL:0,JOD:3,JPY:0,KMF:0,KPW:0,KRW:0,KWD:3,LAK:0,LBP:0,LUF:0,LYD:3,MGA:0,MGF:0,MMK:0,MNT:0,MRO:0,MUR:0,OMR:3,PKR:0,PYG:0,RSD:0,RWF:0,SLL:0,SOS:0,STD:0,SYP:0,TMM:0,TND:3,TRL:0,TZS:0,UGX:0,UZS:0,VND:0,VUV:0,XAF:0,XOF:0,XPF:0,YER:0,ZMK:0,ZWD:0};var _6={CHF:5};var _7=_5[_4],_8=_6[_4];if(typeof _7=="undefined"){_7=2;}if(typeof _8=="undefined"){_8=0;}return {places:_7,round:_8};};return _3;});

View File

@@ -0,0 +1,40 @@
define("dojo/cldr/monetary", ["../_base/kernel", "../_base/lang"], function(dojo, lang){
// module:
// dojo/cldr/monetary
var monetary = {
// summary:
// TODOC
};
lang.setObject("dojo.cldr.monetary", monetary);
monetary.getData = function(/*String*/ code){
// summary:
// A mapping of currency code to currency-specific formatting information. Returns a unique object with properties: places, round.
// code:
// an [ISO 4217](http://en.wikipedia.org/wiki/ISO_4217) currency code
// from http://www.unicode.org/cldr/data/common/supplemental/supplementalData.xml:supplementalData/currencyData/fractions
var placesData = {
ADP:0,AFN:0,ALL:0,AMD:0,BHD:3,BIF:0,BYR:0,CLF:0,CLP:0,
COP:0,CRC:0,DJF:0,ESP:0,GNF:0,GYD:0,HUF:0,IDR:0,IQD:0,
IRR:3,ISK:0,ITL:0,JOD:3,JPY:0,KMF:0,KPW:0,KRW:0,KWD:3,
LAK:0,LBP:0,LUF:0,LYD:3,MGA:0,MGF:0,MMK:0,MNT:0,MRO:0,
MUR:0,OMR:3,PKR:0,PYG:0,RSD:0,RWF:0,SLL:0,SOS:0,STD:0,
SYP:0,TMM:0,TND:3,TRL:0,TZS:0,UGX:0,UZS:0,VND:0,VUV:0,
XAF:0,XOF:0,XPF:0,YER:0,ZMK:0,ZWD:0
};
var roundingData = {CHF:5};
var places = placesData[code], round = roundingData[code];
if(typeof places == "undefined"){ places = 2; }
if(typeof round == "undefined"){ round = 0; }
return {places: places, round: round}; // Object
};
return monetary;
});

View File

@@ -1,8 +1,8 @@
/*
Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
Copyright (c) 2004-2012, The Dojo Foundation All Rights Reserved.
Available via Academic Free License >= 2.1 OR the modified BSD license.
see: http://dojotoolkit.org/license for details
*/
//>>built
define("dojo/cldr/nls/ar/buddhist",{"dateFormatItem-yM":"M/y G","dateFormatItem-yQ":"yyyy Q","dayPeriods-format-wide-pm":"م","eraNames":["التقويم البوذي"],"dateFormatItem-MMMEd":"E d MMM","dateFormatItem-MMdd":"dd/MM","dateFormatItem-MMM":"LLL","months-standAlone-narrow":["ي","ف","م","أ","و","ن","ل","غ","س","ك","ب","د"],"dayPeriods-format-wide-am":"ص","dateFormatItem-y":"y G","timeFormat-full":"zzzz h:mm:ss a","dateFormatItem-Ed":"E، d","dateFormatItem-yMMM":"MMM y G","days-standAlone-narrow":["ح","ن","ث","ر","خ","ج","س"],"eraAbbr":["التقويم البوذي"],"dateFormatItem-yyyyMM":"MM/y G","dateFormatItem-yyyyMMMM":"MMMM، y G","dateFormat-long":"d MMMM، y G","timeFormat-medium":"h:mm:ss a","dateFormatItem-Hm":"HH:mm","dateFormat-medium":"dd/MM/y G","dateFormatItem-yMd":"d/M/y G","dateFormatItem-yMMMM":"MMMM y G","dateFormatItem-ms":"mm:ss","quarters-standAlone-narrow":["١","٢","٣","٤"],"dateFormatItem-MMMMEd":"E d MMMM","dateFormatItem-MMMd":"d MMM","timeFormat-long":"z h:mm:ss a","timeFormat-short":"h:mm a","dateFormatItem-MMMMd":"d MMMM","days-format-abbr":["أحد","إثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"],"dateFormatItem-M":"L","dateFormatItem-yMMMd":"d MMMM y G","dateFormat-short":"d/M/y G","dateFormatItem-yMMMEd":"EEE، d MMMM y G","dateFormat-full":"EEEE، d MMMM، y G","dateFormatItem-Md":"d/M","dateFormatItem-yMEd":"EEE، d/M/y G","months-format-wide":["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],"dateFormatItem-d":"d","quarters-format-wide":["الربع الأول","الربع الثاني","الربع الثالث","الربع الرابع"],"eraNarrow":["التقويم البوذي"],"days-format-wide":["الأحد","الإثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"]});
define("dojo/cldr/nls/ar/buddhist",{"dateFormatItem-yM":"M/y G","dateFormatItem-yQ":"Q yyyy","dayPeriods-format-wide-pm":"م","eraNames":["التقويم البوذي"],"dateFormatItem-MMMEd":"E d MMM","dateFormatItem-yQQQ":"QQQ y","dateFormatItem-MMdd":"dd/MM","days-standAlone-wide":["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],"dateFormatItem-MMM":"LLL","months-standAlone-narrow":["ي","ف","م","أ","و","ن","ل","غ","س","ك","ب","د"],"dayPeriods-format-wide-am":"ص","dateFormatItem-y":"y G","timeFormat-full":"h:mm:ss a zzzz","months-standAlone-abbr":["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],"dateFormatItem-Ed":"E، d","dateFormatItem-yMMM":"MMM y G","days-standAlone-narrow":["ح","ن","ث","ر","خ","ج","س"],"eraAbbr":["التقويم البوذي"],"dateFormatItem-yyyyMM":"MM/y G","dateFormatItem-yyyyMMMM":"MMMM، y G","dateFormat-long":"d MMMM، y G","timeFormat-medium":"h:mm:ss a","dateFormatItem-Hm":"HH:mm","dateFormat-medium":"dd/MM/y G","dateFormatItem-yMd":"d/M/y G","dateFormatItem-yMMMM":"MMMM y G","dateFormatItem-ms":"mm:ss","quarters-standAlone-narrow":["١","٢","٣","٤"],"months-standAlone-wide":["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],"dateFormatItem-MMMMEd":"E d MMMM","dateFormatItem-MMMd":"d MMM","quarters-format-narrow":["١","٢","٣","٤"],"timeFormat-long":"h:mm:ss a z","months-format-abbr":["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],"timeFormat-short":"h:mm a","dateFormatItem-MMMMd":"d MMMM","days-format-abbr":["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],"dateFormatItem-M":"L","dateFormatItem-yMMMd":"d MMM، y G","dateFormatItem-MEd":"E، d/M","days-standAlone-short":["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],"days-standAlone-abbr":["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],"dateFormat-short":"d/M/y G","dateFormatItem-yMMMEd":"E، d MMM، y G","dateFormat-full":"EEEE، d MMMM، y G","dateFormatItem-Md":"d/M","dateFormatItem-yMEd":"E، d/M/y G","months-format-wide":["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],"days-format-short":["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],"dateFormatItem-d":"d","quarters-format-wide":["الربع الأول","الربع الثاني","الربع الثالث","الربع الرابع"],"eraNarrow":["التقويم البوذي"],"days-format-wide":["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"]});

View File

@@ -0,0 +1,201 @@
define(
"dojo/cldr/nls/ar/buddhist", //begin v1.x content
{
"dateFormatItem-yM": "M/y G",
"dateFormatItem-yQ": "Q yyyy",
"dayPeriods-format-wide-pm": "م",
"eraNames": [
"التقويم البوذي"
],
"dateFormatItem-MMMEd": "E d MMM",
"dateFormatItem-yQQQ": "QQQ y",
"dateFormatItem-MMdd": "dd/MM",
"days-standAlone-wide": [
"الأحد",
"الاثنين",
"الثلاثاء",
"الأربعاء",
"الخميس",
"الجمعة",
"السبت"
],
"dateFormatItem-MMM": "LLL",
"months-standAlone-narrow": [
"ي",
"ف",
"م",
"أ",
"و",
"ن",
"ل",
"غ",
"س",
"ك",
"ب",
"د"
],
"dayPeriods-format-wide-am": "ص",
"dateFormatItem-y": "y G",
"timeFormat-full": "h:mm:ss a zzzz",
"months-standAlone-abbr": [
"يناير",
"فبراير",
"مارس",
"أبريل",
"مايو",
"يونيو",
"يوليو",
"أغسطس",
"سبتمبر",
"أكتوبر",
"نوفمبر",
"ديسمبر"
],
"dateFormatItem-Ed": "E، d",
"dateFormatItem-yMMM": "MMM y G",
"days-standAlone-narrow": [
"ح",
"ن",
"ث",
"ر",
"خ",
"ج",
"س"
],
"eraAbbr": [
"التقويم البوذي"
],
"dateFormatItem-yyyyMM": "MM/y G",
"dateFormatItem-yyyyMMMM": "MMMM، y G",
"dateFormat-long": "d MMMM، y G",
"timeFormat-medium": "h:mm:ss a",
"dateFormatItem-Hm": "HH:mm",
"dateFormat-medium": "dd/MM/y G",
"dateFormatItem-yMd": "d/M/y G",
"dateFormatItem-yMMMM": "MMMM y G",
"dateFormatItem-ms": "mm:ss",
"quarters-standAlone-narrow": [
"١",
"٢",
"٣",
"٤"
],
"months-standAlone-wide": [
"يناير",
"فبراير",
"مارس",
"أبريل",
"مايو",
"يونيو",
"يوليو",
"أغسطس",
"سبتمبر",
"أكتوبر",
"نوفمبر",
"ديسمبر"
],
"dateFormatItem-MMMMEd": "E d MMMM",
"dateFormatItem-MMMd": "d MMM",
"quarters-format-narrow": [
"١",
"٢",
"٣",
"٤"
],
"timeFormat-long": "h:mm:ss a z",
"months-format-abbr": [
"يناير",
"فبراير",
"مارس",
"أبريل",
"مايو",
"يونيو",
"يوليو",
"أغسطس",
"سبتمبر",
"أكتوبر",
"نوفمبر",
"ديسمبر"
],
"timeFormat-short": "h:mm a",
"dateFormatItem-MMMMd": "d MMMM",
"days-format-abbr": [
"الأحد",
"الاثنين",
"الثلاثاء",
"الأربعاء",
"الخميس",
"الجمعة",
"السبت"
],
"dateFormatItem-M": "L",
"dateFormatItem-yMMMd": "d MMM، y G",
"dateFormatItem-MEd": "E، d/M",
"days-standAlone-short": [
"الأحد",
"الاثنين",
"الثلاثاء",
"الأربعاء",
"الخميس",
"الجمعة",
"السبت"
],
"days-standAlone-abbr": [
"الأحد",
"الاثنين",
"الثلاثاء",
"الأربعاء",
"الخميس",
"الجمعة",
"السبت"
],
"dateFormat-short": "d/M/y G",
"dateFormatItem-yMMMEd": "E، d MMM، y G",
"dateFormat-full": "EEEE، d MMMM، y G",
"dateFormatItem-Md": "d/M",
"dateFormatItem-yMEd": "E، d/M/y G",
"months-format-wide": [
"يناير",
"فبراير",
"مارس",
"أبريل",
"مايو",
"يونيو",
"يوليو",
"أغسطس",
"سبتمبر",
"أكتوبر",
"نوفمبر",
"ديسمبر"
],
"days-format-short": [
"الأحد",
"الاثنين",
"الثلاثاء",
"الأربعاء",
"الخميس",
"الجمعة",
"السبت"
],
"dateFormatItem-d": "d",
"quarters-format-wide": [
"الربع الأول",
"الربع الثاني",
"الربع الثالث",
"الربع الرابع"
],
"eraNarrow": [
"التقويم البوذي"
],
"days-format-wide": [
"الأحد",
"الاثنين",
"الثلاثاء",
"الأربعاء",
"الخميس",
"الجمعة",
"السبت"
]
}
//end v1.x content
);

View File

@@ -1,8 +1,8 @@
/*
Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
Copyright (c) 2004-2012, The Dojo Foundation All Rights Reserved.
Available via Academic Free License >= 2.1 OR the modified BSD license.
see: http://dojotoolkit.org/license for details
*/
//>>built
define("dojo/cldr/nls/ar/currency",{"HKD_displayName":"دولار هونج كونج","CHF_displayName":"فرنك سويسري","CAD_displayName":"دولار كندي","CNY_displayName":"يوان صيني","AUD_displayName":"دولار أسترالي","JPY_displayName":"ين ياباني","USD_displayName":"دولار أمريكي","CNY_symbol":"ي.ص","GBP_displayName":"جنيه إسترليني","EUR_displayName":"يورو"});
define("dojo/cldr/nls/ar/currency",{"HKD_displayName":"دولار هونج كونج","CHF_displayName":"فرنك سويسري","JPY_symbol":"JP¥","CAD_displayName":"دولار كندي","HKD_symbol":"HK$","CNY_displayName":"يوان صيني","USD_symbol":"US$","AUD_displayName":"دولار أسترالي","JPY_displayName":"ين ياباني","CAD_symbol":"CA$","USD_displayName":"دولار أمريكي","EUR_symbol":"€","CNY_symbol":"ي.ص","GBP_displayName":"جنيه إسترليني","GBP_symbol":"£","AUD_symbol":"AU$","EUR_displayName":"يورو"});

View File

@@ -0,0 +1,23 @@
define(
"dojo/cldr/nls/ar/currency", //begin v1.x content
{
"HKD_displayName": "دولار هونج كونج",
"CHF_displayName": "فرنك سويسري",
"JPY_symbol": "JP¥",
"CAD_displayName": "دولار كندي",
"HKD_symbol": "HK$",
"CNY_displayName": "يوان صيني",
"USD_symbol": "US$",
"AUD_displayName": "دولار أسترالي",
"JPY_displayName": "ين ياباني",
"CAD_symbol": "CA$",
"USD_displayName": "دولار أمريكي",
"EUR_symbol": "€",
"CNY_symbol": "ي.ص",
"GBP_displayName": "جنيه إسترليني",
"GBP_symbol": "£",
"AUD_symbol": "AU$",
"EUR_displayName": "يورو"
}
//end v1.x content
);

View File

@@ -1,8 +1,8 @@
/*
Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
Copyright (c) 2004-2012, The Dojo Foundation All Rights Reserved.
Available via Academic Free License >= 2.1 OR the modified BSD license.
see: http://dojotoolkit.org/license for details
*/
//>>built
define("dojo/cldr/nls/ar/gregorian",{"dateFormatItem-yM":"M/yyyy","field-dayperiod":"ص/م","dateFormatItem-yQ":"yyyy Q","dayPeriods-format-wide-pm":"م","field-minute":"الدقائق","eraNames":["قبل الميلاد","ميلادي"],"dateFormatItem-MMMEd":"E d MMM","field-day-relative+-1":"أمس","field-weekday":"اليوم","dateFormatItem-yQQQ":"y QQQ","dateFormatItem-MMdd":"dd/MM","days-standAlone-wide":["الأحد","الإثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],"dateFormatItem-MMM":"LLL","months-standAlone-narrow":["ي","ف","م","أ","و","ن","ل","غ","س","ك","ب","د"],"field-era":"العصر","field-hour":"الساعات","dayPeriods-format-wide-am":"ص","quarters-standAlone-abbr":["الربع الأول","الربع الثاني","الربع الثالث","الربع الرابع"],"dateFormatItem-y":"y","timeFormat-full":"zzzz h:mm:ss a","months-standAlone-abbr":["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],"dateFormatItem-Ed":"E، d","dateFormatItem-yMMM":"MMM y","field-day-relative+0":"اليوم","field-day-relative+1":"غدًا","days-standAlone-narrow":["ح","ن","ث","ر","خ","ج","س"],"eraAbbr":["ق.م","م"],"field-day-relative+2":"بعد الغد","dateFormatItem-yyyyMM":"MM/yyyy","dateFormatItem-yyyyMMMM":"MMMM، y","dateFormat-long":"d MMMM، y","timeFormat-medium":"h:mm:ss a","field-zone":"التوقيت","dateFormatItem-Hm":"HH:mm","dateFormat-medium":"dd/MM/yyyy","quarters-standAlone-wide":["الربع الأول","الربع الثاني","الربع الثالث","الربع الرابع"],"dateFormatItem-yMMMM":"MMMM y","dateFormatItem-ms":"mm:ss","field-year":"السنة","quarters-standAlone-narrow":["١",","٣","٤"],"field-week":"الأسبوع","months-standAlone-wide":["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],"dateFormatItem-MMMMEd":"E d MMMM","dateFormatItem-MMMd":"d MMM","quarters-format-narrow":["١","٢","٣","٤"],"dateFormatItem-yyQ":"Q yy","timeFormat-long":"z h:mm:ss a","months-format-abbr":[ناير",براير",ارس",بريل","مايو","يونيو","يوليو","أغسطس",بتمبر","أكتوبر","نوفمبر",يسمبر"],"timeFormat-short":"h:mm a","field-month":"الشهر","dateFormatItem-MMMMd":"d MMMM","quarters-format-abbr":["الربع الأول","الربع الثاني","الربع الثالث","الربع الرابع"],"days-format-abbr":["أحد","إثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"],"dateFormatItem-M":"L","days-format-narrow":["ح","ن","ث","ر","خ",","س"],"field-second":"الثواني","field-day":"يوم","months-format-narrow":["ي","ف","م","أ","و","ن","ل","غ","س","ك","ب","د"],"days-standAlone-abbr":["أحد","إثنين",لاثاء","أربعاء",ميس",معة",بت"],"dateFormat-short":"d/M/yyyy","dateFormatItem-yMMMEd":"EEE، d MMMM y","dateFormat-full":"EEEE، d MMMM، y","dateFormatItem-Md":"d/M","dateFormatItem-yMEd":"EEE، d/M/yyyy","months-format-wide":["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],"dateFormatItem-d":"d","quarters-format-wide":["الربع الأول","الربع الثاني","الربع الثالث","الربع الرابع"],"days-format-wide":["الأحد","الإثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],"eraNarrow":["ق.م","م"]});
define("dojo/cldr/nls/ar/gregorian",{"days-standAlone-short":["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],"months-format-narrow":["ي","ف","م","أ","و","ن","ل","غ","س","ك",","د"],"quarters-standAlone-narrow":["١","٢","٣","٤"],"field-weekday":"اليوم","dateFormatItem-yQQQ":"QQQ y","dateFormatItem-yMEd":"E، d/M/yyyy","dateFormatItem-MMMEd":"E، d MMM","eraNarrow":["ق.م","م"],"days-format-short":["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],"dateFormat-long":"d MMMM، y","months-format-wide":[ناير",براير",ارس",بريل","مايو","يونيو","يوليو","أغسطس",بتمبر","أكتوبر","نوفمبر",يسمبر"],"dateTimeFormat-medium":"{1} {0}","dayPeriods-format-wide-pm":"م","dateFormat-full":"EEEE، d MMMM، y","dateFormatItem-Md":"d/M","dateFormatItem-yMd":"d/M/yyyy","field-era":"العصر","dateFormatItem-yM":"M/yyyy","months-standAlone-wide":["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],"timeFormat-short":"h:mm a","quarters-format-wide":["الربع الأول","الربع الثاني","الربع الثالث","الربع الرابع"],"timeFormat-long":"h:mm:ss a z","field-year":"السنة","dateFormatItem-yMMM":"MMM y","dateFormatItem-yQ":"Q yyyy","dateFormatItem-yyyyMMMM":"MMMM، y","field-hour":"الساعات","dateFormatItem-MMdd":"dd/MM","months-format-abbr":["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],"dateFormatItem-yyQ":"Q yy","timeFormat-full":"h:mm:ss a zzzz","field-day-relative+0":"اليوم","field-day-relative+1":"غدًا","field-day-relative+2":"بعد الغد","dateFormatItem-H":"HH","months-standAlone-abbr":["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],"quarters-format-abbr":["الربع الأول","الربع الثاني","الربع الثالث","الربع الرابع"],"quarters-standAlone-wide":["الربع الأول","الربع الثاني","الربع الثالث","الربع الرابع"],"dateFormatItem-M":"L","days-standAlone-wide":["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],"dateFormatItem-MMMMd":"d MMMM","timeFormat-medium":"h:mm:ss a","dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["الربع الأول","الربع الثاني","الربع الثالث","الربع الرابع"],"eraAbbr":["ق.م","م"],"field-minute":"الدقائق","field-dayperiod":"ص/م","days-standAlone-abbr":["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","quarters-format-narrow":["١","٢","٣","٤"],"field-day-relative+-1":"أمس","dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","field-day-relative+-2":"أول أمس","dateFormatItem-MMMd":"d MMM","dateFormatItem-MEd":"E، d/M","dateTimeFormat-full":"{1} {0}","dateFormatItem-yMMMM":"MMMM y","field-day":"يوم","days-format-wide":["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],"field-zone":"التوقيت","dateFormatItem-yyyyMM":"MM/yyyy","dateFormatItem-y":"y","months-standAlone-narrow":["ي","ف","م","أ","و","ن","ل","غ","س","ك","ب","د"],"field-year-relative+-1":"السنة الماضية","field-month-relative+-1":"الشهر الماضي","dateFormatItem-hm":"h:mm a","days-format-abbr":["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],"dateFormatItem-yMMMd":"d MMM، y","eraNames":["قبل الميلاد","ميلادي"],"days-format-narrow":["ح","ن","ث","ر","خ","ج","س"],"field-month":"الشهر","days-standAlone-narrow":["ح","ن","ث","ر","خ","ج","س"],"dateFormatItem-MMM":"LLL","dayPeriods-format-wide-am":","dateFormatItem-MMMMEd":"E، d MMMM","dateFormat-short":"d/M/yyyy","field-second":"الثواني","dateFormatItem-yMMMEd":"E، d MMM، y","field-month-relative+0":"هذا الشهر","field-month-relative+1":"الشهر التالي","dateFormatItem-Ed":"E، d","field-week":"الأسبوع","dateFormat-medium":"dd/MM/yyyy","field-year-relative+0":"هذه السنة","field-week-relative+-1":"الأسبوع الماضي","field-year-relative+1":"السنة التالية","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"h:mm:ss a","field-week-relative+0":"هذا الأسبوع","field-week-relative+1":"الأسبوع التالي"});

View File

@@ -0,0 +1,280 @@
define(
"dojo/cldr/nls/ar/gregorian", //begin v1.x content
{
"days-standAlone-short": [
"الأحد",
"الاثنين",
"الثلاثاء",
"الأربعاء",
"الخميس",
"الجمعة",
"السبت"
],
"months-format-narrow": [
"ي",
"ف",
"م",
"أ",
"و",
"ن",
"ل",
"غ",
"س",
"ك",
"ب",
"د"
],
"quarters-standAlone-narrow": [
"١",
"٢",
"٣",
"٤"
],
"field-weekday": "اليوم",
"dateFormatItem-yQQQ": "QQQ y",
"dateFormatItem-yMEd": "E، d/M/yyyy",
"dateFormatItem-MMMEd": "E، d MMM",
"eraNarrow": [
"ق.م",
"م"
],
"days-format-short": [
"الأحد",
"الاثنين",
"الثلاثاء",
"الأربعاء",
"الخميس",
"الجمعة",
"السبت"
],
"dateFormat-long": "d MMMM، y",
"months-format-wide": [
"يناير",
"فبراير",
"مارس",
"أبريل",
"مايو",
"يونيو",
"يوليو",
"أغسطس",
"سبتمبر",
"أكتوبر",
"نوفمبر",
"ديسمبر"
],
"dateTimeFormat-medium": "{1} {0}",
"dayPeriods-format-wide-pm": "م",
"dateFormat-full": "EEEE، d MMMM، y",
"dateFormatItem-Md": "d/M",
"dateFormatItem-yMd": "d/M/yyyy",
"field-era": "العصر",
"dateFormatItem-yM": "M/yyyy",
"months-standAlone-wide": [
"يناير",
"فبراير",
"مارس",
"أبريل",
"مايو",
"يونيو",
"يوليو",
"أغسطس",
"سبتمبر",
"أكتوبر",
"نوفمبر",
"ديسمبر"
],
"timeFormat-short": "h:mm a",
"quarters-format-wide": [
"الربع الأول",
"الربع الثاني",
"الربع الثالث",
"الربع الرابع"
],
"timeFormat-long": "h:mm:ss a z",
"field-year": "السنة",
"dateFormatItem-yMMM": "MMM y",
"dateFormatItem-yQ": "Q yyyy",
"dateFormatItem-yyyyMMMM": "MMMM، y",
"field-hour": "الساعات",
"dateFormatItem-MMdd": "dd/MM",
"months-format-abbr": [
"يناير",
"فبراير",
"مارس",
"أبريل",
"مايو",
"يونيو",
"يوليو",
"أغسطس",
"سبتمبر",
"أكتوبر",
"نوفمبر",
"ديسمبر"
],
"dateFormatItem-yyQ": "Q yy",
"timeFormat-full": "h:mm:ss a zzzz",
"field-day-relative+0": "اليوم",
"field-day-relative+1": "غدًا",
"field-day-relative+2": "بعد الغد",
"dateFormatItem-H": "HH",
"months-standAlone-abbr": [
"يناير",
"فبراير",
"مارس",
"أبريل",
"مايو",
"يونيو",
"يوليو",
"أغسطس",
"سبتمبر",
"أكتوبر",
"نوفمبر",
"ديسمبر"
],
"quarters-format-abbr": [
"الربع الأول",
"الربع الثاني",
"الربع الثالث",
"الربع الرابع"
],
"quarters-standAlone-wide": [
"الربع الأول",
"الربع الثاني",
"الربع الثالث",
"الربع الرابع"
],
"dateFormatItem-M": "L",
"days-standAlone-wide": [
"الأحد",
"الاثنين",
"الثلاثاء",
"الأربعاء",
"الخميس",
"الجمعة",
"السبت"
],
"dateFormatItem-MMMMd": "d MMMM",
"timeFormat-medium": "h:mm:ss a",
"dateFormatItem-Hm": "HH:mm",
"quarters-standAlone-abbr": [
"الربع الأول",
"الربع الثاني",
"الربع الثالث",
"الربع الرابع"
],
"eraAbbr": [
"ق.م",
"م"
],
"field-minute": "الدقائق",
"field-dayperiod": "ص/م",
"days-standAlone-abbr": [
"الأحد",
"الاثنين",
"الثلاثاء",
"الأربعاء",
"الخميس",
"الجمعة",
"السبت"
],
"dateFormatItem-d": "d",
"dateFormatItem-ms": "mm:ss",
"quarters-format-narrow": [
"١",
"٢",
"٣",
"٤"
],
"field-day-relative+-1": "أمس",
"dateFormatItem-h": "h a",
"dateTimeFormat-long": "{1} {0}",
"field-day-relative+-2": "أول أمس",
"dateFormatItem-MMMd": "d MMM",
"dateFormatItem-MEd": "E، d/M",
"dateTimeFormat-full": "{1} {0}",
"dateFormatItem-yMMMM": "MMMM y",
"field-day": "يوم",
"days-format-wide": [
"الأحد",
"الاثنين",
"الثلاثاء",
"الأربعاء",
"الخميس",
"الجمعة",
"السبت"
],
"field-zone": "التوقيت",
"dateFormatItem-yyyyMM": "MM/yyyy",
"dateFormatItem-y": "y",
"months-standAlone-narrow": [
"ي",
"ف",
"م",
"أ",
"و",
"ن",
"ل",
"غ",
"س",
"ك",
"ب",
"د"
],
"field-year-relative+-1": "السنة الماضية",
"field-month-relative+-1": "الشهر الماضي",
"dateFormatItem-hm": "h:mm a",
"days-format-abbr": [
"الأحد",
"الاثنين",
"الثلاثاء",
"الأربعاء",
"الخميس",
"الجمعة",
"السبت"
],
"dateFormatItem-yMMMd": "d MMM، y",
"eraNames": [
"قبل الميلاد",
"ميلادي"
],
"days-format-narrow": [
"ح",
"ن",
"ث",
"ر",
"خ",
"ج",
"س"
],
"field-month": "الشهر",
"days-standAlone-narrow": [
"ح",
"ن",
"ث",
"ر",
"خ",
"ج",
"س"
],
"dateFormatItem-MMM": "LLL",
"dayPeriods-format-wide-am": "ص",
"dateFormatItem-MMMMEd": "E، d MMMM",
"dateFormat-short": "d/M/yyyy",
"field-second": "الثواني",
"dateFormatItem-yMMMEd": "E، d MMM، y",
"field-month-relative+0": "هذا الشهر",
"field-month-relative+1": "الشهر التالي",
"dateFormatItem-Ed": "E، d",
"field-week": "الأسبوع",
"dateFormat-medium": "dd/MM/yyyy",
"field-year-relative+0": "هذه السنة",
"field-week-relative+-1": "الأسبوع الماضي",
"field-year-relative+1": "السنة التالية",
"dateTimeFormat-short": "{1} {0}",
"dateFormatItem-Hms": "HH:mm:ss",
"dateFormatItem-hms": "h:mm:ss a",
"field-week-relative+0": "هذا الأسبوع",
"field-week-relative+1": "الأسبوع التالي"
}
//end v1.x content
);

View File

@@ -1,8 +1,8 @@
/*
Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
Copyright (c) 2004-2012, The Dojo Foundation All Rights Reserved.
Available via Academic Free License >= 2.1 OR the modified BSD license.
see: http://dojotoolkit.org/license for details
*/
//>>built
define("dojo/cldr/nls/ar/hebrew",{"dateFormat-medium":"dd/MM/yyyy","dateFormatItem-MMMEd":"E d MMM","dateFormatItem-yMEd":"EEE، d/M/yyyy","timeFormat-full":"zzzz h:mm:ss a","dateFormatItem-Md":"d/M","months-standAlone-wide":["تشري","مرحشوان","كيسلو","طيفت","شباط","آذار الأول","آذار","نيسان","أيار","سيفان","تموز","آب","أيلول"],"months-format-wide-leap":"آذار الثاني","days-standAlone-narrow":["ح","ن","ث","ر","خ","ج","س"],"dayPeriods-format-wide-pm":"م","months-standAlone-abbr":["تشري","مرحشوان","كيسلو","طيفت","شباط","آذار الأول","آذار","نيسان","أيار","سيفان","تموز","آب","أيلول"],"dayPeriods-format-wide-am":"ص","quarters-standAlone-narrow":["١","٢","٣","٤"],"timeFormat-medium":"h:mm:ss a","dateFormat-long":"d MMMM، y","dateFormat-short":"d/M/yyyy","dateFormatItem-yMMMEd":"EEE، d MMMM y","months-format-wide":["تشري","مرحشوان","كيسلو","طيفت","شباط","آذار الأول","آذار","نيسان","أيار","سيفان","تموز","آب","أيلول"],"dateFormatItem-yM":"M/yyyy","timeFormat-short":"h:mm a","months-format-abbr":["تشري","مرحشوان","كيسلو","طيفت","شباط","آذار الأول","آذار","نيسان","أيار","سيفان","تموز","آب","أيلول"],"timeFormat-long":"z h:mm:ss a","days-format-wide":["الأحد","الإثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],"dateFormatItem-yQ":"yyyy Q","dateFormatItem-yMMM":"MMM y","quarters-format-wide":["الربع الأول","الربع الثاني","الربع الثالث","الربع الرابع"],"dateFormat-full":"EEEE، d MMMM، y","dateFormatItem-MMMd":"d MMM","days-format-abbr":["أحد","إثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"]});
define("dojo/cldr/nls/ar/hebrew",{"dateFormatItem-yM":"M/yyyy","dateFormatItem-yQ":"Q yyyy","dayPeriods-format-wide-pm":"م","eraNames":["ص"],"dateFormatItem-MMMEd":"E، d MMM","dateFormatItem-yQQQ":"QQQ y","days-standAlone-wide":["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],"dayPeriods-format-wide-am":"ص","timeFormat-full":"h:mm:ss a zzzz","months-standAlone-abbr":["تشري","مرحشوان","كيسلو","طيفت","شباط","آذار الأول","آذار","نيسان","أيار","سيفان","تموز","آب","أيلول"],"dateFormatItem-Ed":"E، d","dateFormatItem-yMMM":"MMM y","days-standAlone-narrow":["ح","ن","ث","ر","خ","ج","س"],"eraAbbr":["ص"],"dateFormat-long":"d MMMM، y","timeFormat-medium":"h:mm:ss a","dateFormat-medium":"dd/MM/yyyy","dateFormatItem-yMd":"d/M/yyyy","quarters-standAlone-narrow":["١","٢","٣","٤"],"months-standAlone-wide":["تشري","مرحشوان","كيسلو","طيفت","شباط","آذار الأول","آذار","نيسان","أيار","سيفان","تموز","آب","أيلول"],"dateFormatItem-MMMd":"d MMM","quarters-format-narrow":["١","٢","٣","٤"],"timeFormat-long":"h:mm:ss a z","months-format-abbr":["تشري","مرحشوان","كيسلو","طيفت","شباط","آذار الأول","آذار","نيسان","أيار","سيفان","تموز","آب","أيلول"],"timeFormat-short":"h:mm a","days-format-abbr":["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],"dateFormatItem-yMMMd":"d MMM، y","dateFormatItem-MEd":"E، d/M","days-standAlone-short":["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],"days-standAlone-abbr":["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],"dateFormat-short":"d/M/yyyy","dateFormatItem-yMMMEd":"E، d MMM، y","dateFormat-full":"EEEE، d MMMM، y","dateFormatItem-Md":"d/M","dateFormatItem-yMEd":"E، d/M/yyyy","months-format-wide":["تشري","مرحشوان","كيسلو","طيفت","شباط","آذار الأول","آذار","نيسان","أيار","سيفان","تموز","آب","أيلول"],"days-format-short":["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],"quarters-format-wide":["الربع الأول","الربع الثاني","الربع الثالث","الربع الرابع"],"months-format-wide-leap":"آذار الثاني","eraNarrow":["ص"],"days-format-wide":["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"]});

View File

@@ -0,0 +1,180 @@
define(
"dojo/cldr/nls/ar/hebrew", //begin v1.x content
{
"dateFormatItem-yM": "M/yyyy",
"dateFormatItem-yQ": "Q yyyy",
"dayPeriods-format-wide-pm": "م",
"eraNames": [
"ص"
],
"dateFormatItem-MMMEd": "E، d MMM",
"dateFormatItem-yQQQ": "QQQ y",
"days-standAlone-wide": [
"الأحد",
"الاثنين",
"الثلاثاء",
"الأربعاء",
"الخميس",
"الجمعة",
"السبت"
],
"dayPeriods-format-wide-am": "ص",
"timeFormat-full": "h:mm:ss a zzzz",
"months-standAlone-abbr": [
"تشري",
"مرحشوان",
"كيسلو",
"طيفت",
"شباط",
"آذار الأول",
"آذار",
"نيسان",
"أيار",
"سيفان",
"تموز",
"آب",
"أيلول"
],
"dateFormatItem-Ed": "E، d",
"dateFormatItem-yMMM": "MMM y",
"days-standAlone-narrow": [
"ح",
"ن",
"ث",
"ر",
"خ",
"ج",
"س"
],
"eraAbbr": [
"ص"
],
"dateFormat-long": "d MMMM، y",
"timeFormat-medium": "h:mm:ss a",
"dateFormat-medium": "dd/MM/yyyy",
"dateFormatItem-yMd": "d/M/yyyy",
"quarters-standAlone-narrow": [
"١",
"٢",
"٣",
"٤"
],
"months-standAlone-wide": [
"تشري",
"مرحشوان",
"كيسلو",
"طيفت",
"شباط",
"آذار الأول",
"آذار",
"نيسان",
"أيار",
"سيفان",
"تموز",
"آب",
"أيلول"
],
"dateFormatItem-MMMd": "d MMM",
"quarters-format-narrow": [
"١",
"٢",
"٣",
"٤"
],
"timeFormat-long": "h:mm:ss a z",
"months-format-abbr": [
"تشري",
"مرحشوان",
"كيسلو",
"طيفت",
"شباط",
"آذار الأول",
"آذار",
"نيسان",
"أيار",
"سيفان",
"تموز",
"آب",
"أيلول"
],
"timeFormat-short": "h:mm a",
"days-format-abbr": [
"الأحد",
"الاثنين",
"الثلاثاء",
"الأربعاء",
"الخميس",
"الجمعة",
"السبت"
],
"dateFormatItem-yMMMd": "d MMM، y",
"dateFormatItem-MEd": "E، d/M",
"days-standAlone-short": [
"الأحد",
"الاثنين",
"الثلاثاء",
"الأربعاء",
"الخميس",
"الجمعة",
"السبت"
],
"days-standAlone-abbr": [
"الأحد",
"الاثنين",
"الثلاثاء",
"الأربعاء",
"الخميس",
"الجمعة",
"السبت"
],
"dateFormat-short": "d/M/yyyy",
"dateFormatItem-yMMMEd": "E، d MMM، y",
"dateFormat-full": "EEEE، d MMMM، y",
"dateFormatItem-Md": "d/M",
"dateFormatItem-yMEd": "E، d/M/yyyy",
"months-format-wide": [
"تشري",
"مرحشوان",
"كيسلو",
"طيفت",
"شباط",
"آذار الأول",
"آذار",
"نيسان",
"أيار",
"سيفان",
"تموز",
"آب",
"أيلول"
],
"days-format-short": [
"الأحد",
"الاثنين",
"الثلاثاء",
"الأربعاء",
"الخميس",
"الجمعة",
"السبت"
],
"quarters-format-wide": [
"الربع الأول",
"الربع الثاني",
"الربع الثالث",
"الربع الرابع"
],
"months-format-wide-leap": "آذار الثاني",
"eraNarrow": [
"ص"
],
"days-format-wide": [
"الأحد",
"الاثنين",
"الثلاثاء",
"الأربعاء",
"الخميس",
"الجمعة",
"السبت"
]
}
//end v1.x content
);

View File

@@ -1,8 +1,8 @@
/*
Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
Copyright (c) 2004-2012, The Dojo Foundation All Rights Reserved.
Available via Academic Free License >= 2.1 OR the modified BSD license.
see: http://dojotoolkit.org/license for details
*/
//>>built
define("dojo/cldr/nls/ar/islamic",{"dateFormat-medium":"dd/MM/yyyy","dateFormatItem-MMMEd":"E d MMM","dateFormatItem-yMEd":"EEE، d/M/yyyy","eraNarrow":["هـ"],"months-format-narrow":["م","ص","ر","ر","ج","ج","ر","ش","ر",","ذ","ذ"],"timeFormat-full":"zzzz h:mm:ss a","dateFormatItem-Md":"d/M","months-standAlone-narrow":["م","ص","ر","ر","ج","ج","ر","ش","ر","ش","ذ","ذ"],"months-standAlone-wide":["محرم","صفر","ربيع الأول","ربيع الآخر","جمادى الأولى","جمادى الآخرة","رجب","شعبان","رمضان","شوال","ذو القعدة","ذو الحجة"],"eraNames":["هـ"],"days-standAlone-narrow":["ح","ن","ث","ر","خ","ج","س"],"dayPeriods-format-wide-pm":"م","months-standAlone-abbr":["محرم","صفر","ربيع الأول","ربيع الآخر","جمادى الأولى","جمادى الآخرة","رجب","شعبان","رمضان","شوال","ذو القعدة","ذو الحجة"],"dayPeriods-format-wide-am":"ص","quarters-standAlone-narrow":["١","٢","٣","٤"],"timeFormat-medium":"h:mm:ss a","dateFormat-long":"d MMMM، y","dateFormat-short":"d/M/yyyy","dateFormatItem-yMMMEd":"EEE، d MMMM y","months-format-wide":["محرم","صفر","ربيع الأول","ربيع الآخر","جمادى الأولى","جمادى الآخرة","رجب","شعبان","رمضان","شوال","ذو القعدة","ذو الحجة"],"dateFormatItem-yM":"M/yyyy","timeFormat-short":"h:mm a","months-format-abbr":["محرم","صفر","ربيع الأول","ربيع الآخر","جمادى الأولى","جمادى الآخرة","رجب","شعبان","رمضان","شوال","ذو القعدة","ذو الحجة"],"eraAbbr":["هـ"],"timeFormat-long":"z h:mm:ss a","days-format-wide":["الأحد","الإثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],"dateFormatItem-yQ":"yyyy Q","dateFormatItem-yMMM":"MMM y","quarters-format-wide":["الربع الأول","الربع الثاني","الربع الثالث","الربع الرابع"],"dateFormat-full":"EEEE، d MMMM، y","dateFormatItem-MMMd":"d MMM","days-format-abbr":["أحد","إثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"]});
define("dojo/cldr/nls/ar/islamic",{"dateFormatItem-yM":"M/yyyy","dateFormatItem-yQ":"Q yyyy","dayPeriods-format-wide-pm":","eraNames":["هـ"],"dateFormatItem-MMMEd":"E، d MMM","dateFormatItem-hms":"h:mm:ss a","dateFormatItem-yQQQ":"QQQ y","days-standAlone-wide":["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],"dateFormatItem-MMM":"LLL","months-standAlone-narrow":["١","٢","٣","4","٥","٦","٧","٨","٩","١٠","١١","١٢"],"dayPeriods-format-wide-am":"ص","dateFormatItem-y":"y","timeFormat-full":"h:mm:ss a zzzz","months-standAlone-abbr":["محرم","صفر","ربيع الأول","ربيع الآخر","جمادى الأولى","جمادى الآخرة","رجب","شعبان","رمضان","شوال","ذو القعدة","ذو الحجة"],"dateFormatItem-Ed":"d E","dateFormatItem-yMMM":"MMM y","days-standAlone-narrow":["ح","ن","ث","ر","خ","ج","س"],"eraAbbr":["هـ"],"dateFormat-long":"d MMMM y","timeFormat-medium":"h:mm:ss a","dateFormatItem-Hm":"HH:mm","dateFormat-medium":"d MMM، y G","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-yMd":"d/M/yyyy","dateFormatItem-yMMMM":"MMMM y","dateFormatItem-ms":"mm:ss","quarters-standAlone-narrow":["١","٢","٣","٤"],"months-standAlone-wide":["محرم","صفر","ربيع الأول","ربيع الآخر","جمادى الأولى","جمادى الآخرة","رجب","شعبان","رمضان","شوال","ذو القعدة","ذو الحجة"],"dateFormatItem-MMMMEd":"E، d MMMM","dateFormatItem-MMMd":"d MMM","quarters-format-narrow":["١","٢","٣","٤"],"timeFormat-long":"h:mm:ss a z","months-format-abbr":["محرم","صفر","ربيع الأول","ربيع الآخر","جمادى الأولى","جمادى الآخرة","رجب","شعبان","رمضان","شوال","ذو القعدة","ذو الحجة"],"timeFormat-short":"h:mm a","dateFormatItem-H":"HH","dateFormatItem-MMMMd":"d MMMM","days-format-abbr":["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],"dateFormatItem-M":"L","dateFormatItem-yMMMd":"d MMM، y","dateFormatItem-MEd":"E، d/M","months-format-narrow":["١","٢","٣","٤","٥","٦","٧","٨","٩","١٠","١١","١٢"],"days-standAlone-short":["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],"dateFormatItem-hm":"h:mm a","days-standAlone-abbr":["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],"dateFormat-short":"d/M/yyyy","dateFormatItem-yMMMEd":"E، d MMM y","dateFormat-full":"EEEE، d MMMM y","dateFormatItem-Md":"d/M","dateFormatItem-yMEd":"E، d/M/yyyy","months-format-wide":["محرم","صفر","ربيع الأول","ربيع الآخر","جمادى الأولى","جمادى الآخرة","رجب","شعبان","رمضان","شوال","ذو القعدة","ذو الحجة"],"days-format-short":["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],"dateFormatItem-d":"d","quarters-format-wide":["الربع الأول","الربع الثاني","الربع الثالث","الربع الرابع"],"eraNarrow":["هـ"],"days-format-wide":["الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],"dateFormatItem-h":"h a"});

View File

@@ -0,0 +1,217 @@
define(
"dojo/cldr/nls/ar/islamic", //begin v1.x content
{
"dateFormatItem-yM": "M/yyyy",
"dateFormatItem-yQ": "Q yyyy",
"dayPeriods-format-wide-pm": "م",
"eraNames": [
"هـ"
],
"dateFormatItem-MMMEd": "E، d MMM",
"dateFormatItem-hms": "h:mm:ss a",
"dateFormatItem-yQQQ": "QQQ y",
"days-standAlone-wide": [
"الأحد",
"الاثنين",
"الثلاثاء",
"الأربعاء",
"الخميس",
"الجمعة",
"السبت"
],
"dateFormatItem-MMM": "LLL",
"months-standAlone-narrow": [
"١",
"٢",
"٣",
"4",
"٥",
"٦",
"٧",
"٨",
"٩",
"١٠",
"١١",
"١٢"
],
"dayPeriods-format-wide-am": "ص",
"dateFormatItem-y": "y",
"timeFormat-full": "h:mm:ss a zzzz",
"months-standAlone-abbr": [
"محرم",
"صفر",
"ربيع الأول",
"ربيع الآخر",
"جمادى الأولى",
"جمادى الآخرة",
"رجب",
"شعبان",
"رمضان",
"شوال",
"ذو القعدة",
"ذو الحجة"
],
"dateFormatItem-Ed": "d E",
"dateFormatItem-yMMM": "MMM y",
"days-standAlone-narrow": [
"ح",
"ن",
"ث",
"ر",
"خ",
"ج",
"س"
],
"eraAbbr": [
"هـ"
],
"dateFormat-long": "d MMMM y",
"timeFormat-medium": "h:mm:ss a",
"dateFormatItem-Hm": "HH:mm",
"dateFormat-medium": "d MMM، y G",
"dateFormatItem-Hms": "HH:mm:ss",
"dateFormatItem-yMd": "d/M/yyyy",
"dateFormatItem-yMMMM": "MMMM y",
"dateFormatItem-ms": "mm:ss",
"quarters-standAlone-narrow": [
"١",
"٢",
"٣",
"٤"
],
"months-standAlone-wide": [
"محرم",
"صفر",
"ربيع الأول",
"ربيع الآخر",
"جمادى الأولى",
"جمادى الآخرة",
"رجب",
"شعبان",
"رمضان",
"شوال",
"ذو القعدة",
"ذو الحجة"
],
"dateFormatItem-MMMMEd": "E، d MMMM",
"dateFormatItem-MMMd": "d MMM",
"quarters-format-narrow": [
"١",
"٢",
"٣",
"٤"
],
"timeFormat-long": "h:mm:ss a z",
"months-format-abbr": [
"محرم",
"صفر",
"ربيع الأول",
"ربيع الآخر",
"جمادى الأولى",
"جمادى الآخرة",
"رجب",
"شعبان",
"رمضان",
"شوال",
"ذو القعدة",
"ذو الحجة"
],
"timeFormat-short": "h:mm a",
"dateFormatItem-H": "HH",
"dateFormatItem-MMMMd": "d MMMM",
"days-format-abbr": [
"الأحد",
"الاثنين",
"الثلاثاء",
"الأربعاء",
"الخميس",
"الجمعة",
"السبت"
],
"dateFormatItem-M": "L",
"dateFormatItem-yMMMd": "d MMM، y",
"dateFormatItem-MEd": "E، d/M",
"months-format-narrow": [
"١",
"٢",
"٣",
"٤",
"٥",
"٦",
"٧",
"٨",
"٩",
"١٠",
"١١",
"١٢"
],
"days-standAlone-short": [
"الأحد",
"الاثنين",
"الثلاثاء",
"الأربعاء",
"الخميس",
"الجمعة",
"السبت"
],
"dateFormatItem-hm": "h:mm a",
"days-standAlone-abbr": [
"الأحد",
"الاثنين",
"الثلاثاء",
"الأربعاء",
"الخميس",
"الجمعة",
"السبت"
],
"dateFormat-short": "d/M/yyyy",
"dateFormatItem-yMMMEd": "E، d MMM y",
"dateFormat-full": "EEEE، d MMMM y",
"dateFormatItem-Md": "d/M",
"dateFormatItem-yMEd": "E، d/M/yyyy",
"months-format-wide": [
"محرم",
"صفر",
"ربيع الأول",
"ربيع الآخر",
"جمادى الأولى",
"جمادى الآخرة",
"رجب",
"شعبان",
"رمضان",
"شوال",
"ذو القعدة",
"ذو الحجة"
],
"days-format-short": [
"الأحد",
"الاثنين",
"الثلاثاء",
"الأربعاء",
"الخميس",
"الجمعة",
"السبت"
],
"dateFormatItem-d": "d",
"quarters-format-wide": [
"الربع الأول",
"الربع الثاني",
"الربع الثالث",
"الربع الرابع"
],
"eraNarrow": [
"هـ"
],
"days-format-wide": [
"الأحد",
"الاثنين",
"الثلاثاء",
"الأربعاء",
"الخميس",
"الجمعة",
"السبت"
],
"dateFormatItem-h": "h a"
}
//end v1.x content
);

View File

@@ -1,8 +1,8 @@
/*
Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
Copyright (c) 2004-2012, The Dojo Foundation All Rights Reserved.
Available via Academic Free License >= 2.1 OR the modified BSD license.
see: http://dojotoolkit.org/license for details
*/
//>>built
define("dojo/cldr/nls/ar/number",{"group":"٬","percentSign":"٪","exponential":"اس","list":"؛","infinity":"∞","minusSign":"-","decimal":"٫","nan":"ليس رقم","perMille":"؉","decimalFormat":"#,##0.###;#,##0.###-","currencyFormat":"¤ #,##0.00;¤ #,##0.00-","plusSign":"+"});
define("dojo/cldr/nls/ar/number",{"group":",","percentSign":"%","exponential":"E","scientificFormat":"#E0","percentFormat":"#,##0%","list":";","infinity":"∞","minusSign":"-","decimal":".","nan":"NaN","perMille":"","decimalFormat":"#,##0.###;#,##0.###-","currencyFormat":"¤ #,##0.00;¤ #,##0.00-","plusSign":"+","decimalFormat-long":"000 تريليون","decimalFormat-short":"000 ترليو"});

View File

@@ -0,0 +1,22 @@
define(
"dojo/cldr/nls/ar/number", //begin v1.x content
{
"group": ",",
"percentSign": "%",
"exponential": "E",
"scientificFormat": "#E0",
"percentFormat": "#,##0%",
"list": ";",
"infinity": "∞",
"minusSign": "-",
"decimal": ".",
"nan": "NaN",
"perMille": "‰",
"decimalFormat": "#,##0.###;#,##0.###-",
"currencyFormat": "¤ #,##0.00;¤ #,##0.00-",
"plusSign": "+",
"decimalFormat-long": "000 تريليون",
"decimalFormat-short": "000 ترليو"
}
//end v1.x content
);

View File

@@ -1,8 +1,8 @@
/*
Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
Copyright (c) 2004-2012, The Dojo Foundation All Rights Reserved.
Available via Academic Free License >= 2.1 OR the modified BSD license.
see: http://dojotoolkit.org/license for details
*/
//>>built
define("dojo/cldr/nls/buddhist",{root:{"months-format-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"quarters-standAlone-narrow":["1","2","3","4"],"dateFormatItem-yQQQ":"y QQQ","dateFormatItem-yMEd":"EEE, y-M-d","dateFormatItem-MMMEd":"E MMM d","eraNarrow":["BE"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateFormat-long":"MMMM d, y G","months-format-wide":["1","2","3","4","5","6","7","8","9","10","11","12"],"dateTimeFormat-medium":"{1} {0}","dateFormatItem-EEEd":"d EEE","dayPeriods-format-wide-pm":"PM","dateFormat-full":"EEEE, MMMM d, y G","dateFormatItem-Md":"M-d","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateFormatItem-yM":"y-M","months-standAlone-wide":["1","2","3","4","5","6","7","8","9","10","11","12"],"timeFormat-short":"HH:mm","quarters-format-wide":["Q1","Q2","Q3","Q4"],"timeFormat-long":"HH:mm:ss z","dateFormatItem-yMMM":"y MMM","dateFormatItem-yQ":"y Q","dateTimeFormats-appendItem-Era":"{0} {1}","months-format-abbr":["1","2","3","4","5","6","7","8","9","10","11","12"],"timeFormat-full":"HH:mm:ss zzzz","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","months-standAlone-abbr":["1","2","3","4","5","6","7","8","9","10","11","12"],"quarters-format-abbr":["Q1","Q2","Q3","Q4"],"quarters-standAlone-wide":["Q1","Q2","Q3","Q4"],"dateFormatItem-M":"L","days-standAlone-wide":["1","2","3","4","5","6","7"],"timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"eraAbbr":["BE"],"days-standAlone-abbr":["1","2","3","4","5","6","7"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dateTimeFormat-long":"{1} {0}","dayPeriods-format-narrow-am":"AM","dateFormatItem-MMMd":"MMM d","dateFormatItem-MEd":"E, M-d","dateTimeFormat-full":"{1} {0}","days-format-wide":["1","2","3","4","5","6","7"],"dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-y":"y","months-standAlone-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","days-format-abbr":["1","2","3","4","5","6","7"],"eraNames":["BE"],"days-format-narrow":["1","2","3","4","5","6","7"],"days-standAlone-narrow":["1","2","3","4","5","6","7"],"dateFormatItem-MMM":"LLL","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dayPeriods-format-wide-am":"AM","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateFormat-short":"M/d/yyyy","dateFormatItem-yMMMEd":"EEE, y MMM d","dateTimeFormats-appendItem-Timezone":"{0} {1}","dateFormat-medium":"MMM d, y G","dayPeriods-format-narrow-pm":"PM","dateTimeFormat-short":"{1} {0}","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"h:mm:ss a"},"ar":true,"da":true,"de":true,"el":true,"en":true,"en-gb":true,"es":true,"fi":true,"fr":true,"hu":true,"it":true,"ja":true,"ko":true,"nb":true,"nl":true,"pl":true,"pt":true,"pt-pt":true,"ro":true,"ru":true,"sv":true,"th":true,"tr":true,"zh":true,"zh-hant":true});
define("dojo/cldr/nls/buddhist",{root:{"days-standAlone-short":["1","2","3","4","5","6","7"],"months-format-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"quarters-standAlone-narrow":["1","2","3","4"],"dateFormatItem-yQQQ":"G y QQQ","dateFormatItem-yMEd":"E, GGGGG yyyy-MM-dd","dateFormatItem-MMMEd":"E MMM d","eraNarrow":["BE"],"days-format-short":["1","2","3","4","5","6","7"],"dateTimeFormats-appendItem-Day-Of-Week":"{0} {1}","dateFormat-long":"G y MMMM d","months-format-wide":["1","2","3","4","5","6","7","8","9","10","11","12"],"dayPeriods-format-wide-pm":"PM","dateFormat-full":"EEEE, G y MMMM dd","dateFormatItem-Md":"M-d","dayPeriods-format-abbr-am":"AM","dateTimeFormats-appendItem-Second":"{0} ({2}: {1})","dateFormatItem-yMd":"GGGGG yyyy-MM-dd","dateFormatItem-yM":"GGGGG yyyy-MM","months-standAlone-wide":["1","2","3","4","5","6","7","8","9","10","11","12"],"timeFormat-short":"HH:mm","quarters-format-wide":["Q1","Q2","Q3","Q4"],"dateTimeFormat":"{1} {0}","timeFormat-long":"HH:mm:ss z","dateFormatItem-yMMM":"G y MMM","dateFormatItem-yQ":"GGGGG yyyy Q","dateTimeFormats-appendItem-Era":"{0} {1}","months-format-abbr":["1","2","3","4","5","6","7","8","9","10","11","12"],"timeFormat-full":"HH:mm:ss zzzz","dateTimeFormats-appendItem-Week":"{0} ({2}: {1})","dateFormatItem-H":"HH","months-standAlone-abbr":["1","2","3","4","5","6","7","8","9","10","11","12"],"quarters-format-abbr":["Q1","Q2","Q3","Q4"],"quarters-standAlone-wide":["Q1","Q2","Q3","Q4"],"dateFormatItem-Gy":"G y","dateFormatItem-M":"L","days-standAlone-wide":["1","2","3","4","5","6","7"],"timeFormat-medium":"HH:mm:ss","dateFormatItem-Hm":"HH:mm","quarters-standAlone-abbr":["Q1","Q2","Q3","Q4"],"eraAbbr":["BE"],"days-standAlone-abbr":["1","2","3","4","5","6","7"],"dateFormatItem-d":"d","dateFormatItem-ms":"mm:ss","quarters-format-narrow":["1","2","3","4"],"dateFormatItem-h":"h a","dayPeriods-format-narrow-am":"AM","dateFormatItem-MMMd":"MMM d","dateFormatItem-MEd":"E, M-d","days-format-wide":["1","2","3","4","5","6","7"],"dateTimeFormats-appendItem-Day":"{0} ({2}: {1})","dateFormatItem-y":"G y","months-standAlone-narrow":["1","2","3","4","5","6","7","8","9","10","11","12"],"dateFormatItem-hm":"h:mm a","dateTimeFormats-appendItem-Year":"{0} {1}","dateTimeFormats-appendItem-Hour":"{0} ({2}: {1})","dayPeriods-format-abbr-pm":"PM","days-format-abbr":["1","2","3","4","5","6","7"],"dateFormatItem-yMMMd":"G y MMM d","eraNames":["BE"],"days-format-narrow":["1","2","3","4","5","6","7"],"days-standAlone-narrow":["1","2","3","4","5","6","7"],"dateFormatItem-MMM":"LLL","dateTimeFormats-appendItem-Quarter":"{0} ({2}: {1})","dayPeriods-format-wide-am":"AM","dateTimeFormats-appendItem-Month":"{0} ({2}: {1})","dateTimeFormats-appendItem-Minute":"{0} ({2}: {1})","dateFormat-short":"GGGGG yyyy-MM-dd","dateFormatItem-yMMMEd":"E, G y MMM d","dateFormatItem-Ed":"d E","dateTimeFormats-appendItem-Timezone":"{0} {1}","dateFormat-medium":"G y MMM d","dayPeriods-format-narrow-pm":"PM","dateFormatItem-Hms":"HH:mm:ss","dateFormatItem-hms":"h:mm:ss a"},"ar":true,"ca":true,"cs":true,"da":true,"de":true,"el":true,"en":true,"en-gb":true,"es":true,"fi":true,"fr":true,"hu":true,"it":true,"ja":true,"ko":true,"nb":true,"nl":true,"pl":true,"pt":true,"pt-pt":true,"ro":true,"ru":true,"sv":true,"th":true,"tr":true,"zh":true,"zh-hant":true});

View File

@@ -0,0 +1,287 @@
define("dojo/cldr/nls/buddhist", { root:
//begin v1.x content
{
"days-standAlone-short": [
"1",
"2",
"3",
"4",
"5",
"6",
"7"
],
"months-format-narrow": [
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"10",
"11",
"12"
],
"quarters-standAlone-narrow": [
"1",
"2",
"3",
"4"
],
"dateFormatItem-yQQQ": "G y QQQ",
"dateFormatItem-yMEd": "E, GGGGG yyyy-MM-dd",
"dateFormatItem-MMMEd": "E MMM d",
"eraNarrow": [
"BE"
],
"days-format-short": [
"1",
"2",
"3",
"4",
"5",
"6",
"7"
],
"dateTimeFormats-appendItem-Day-Of-Week": "{0} {1}",
"dateFormat-long": "G y MMMM d",
"months-format-wide": [
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"10",
"11",
"12"
],
"dayPeriods-format-wide-pm": "PM",
"dateFormat-full": "EEEE, G y MMMM dd",
"dateFormatItem-Md": "M-d",
"dayPeriods-format-abbr-am": "AM",
"dateTimeFormats-appendItem-Second": "{0} ({2}: {1})",
"dateFormatItem-yMd": "GGGGG yyyy-MM-dd",
"dateFormatItem-yM": "GGGGG yyyy-MM",
"months-standAlone-wide": [
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"10",
"11",
"12"
],
"timeFormat-short": "HH:mm",
"quarters-format-wide": [
"Q1",
"Q2",
"Q3",
"Q4"
],
"dateTimeFormat": "{1} {0}",
"timeFormat-long": "HH:mm:ss z",
"dateFormatItem-yMMM": "G y MMM",
"dateFormatItem-yQ": "GGGGG yyyy Q",
"dateTimeFormats-appendItem-Era": "{0} {1}",
"months-format-abbr": [
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"10",
"11",
"12"
],
"timeFormat-full": "HH:mm:ss zzzz",
"dateTimeFormats-appendItem-Week": "{0} ({2}: {1})",
"dateFormatItem-H": "HH",
"months-standAlone-abbr": [
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"10",
"11",
"12"
],
"quarters-format-abbr": [
"Q1",
"Q2",
"Q3",
"Q4"
],
"quarters-standAlone-wide": [
"Q1",
"Q2",
"Q3",
"Q4"
],
"dateFormatItem-Gy": "G y",
"dateFormatItem-M": "L",
"days-standAlone-wide": [
"1",
"2",
"3",
"4",
"5",
"6",
"7"
],
"timeFormat-medium": "HH:mm:ss",
"dateFormatItem-Hm": "HH:mm",
"quarters-standAlone-abbr": [
"Q1",
"Q2",
"Q3",
"Q4"
],
"eraAbbr": [
"BE"
],
"days-standAlone-abbr": [
"1",
"2",
"3",
"4",
"5",
"6",
"7"
],
"dateFormatItem-d": "d",
"dateFormatItem-ms": "mm:ss",
"quarters-format-narrow": [
"1",
"2",
"3",
"4"
],
"dateFormatItem-h": "h a",
"dayPeriods-format-narrow-am": "AM",
"dateFormatItem-MMMd": "MMM d",
"dateFormatItem-MEd": "E, M-d",
"days-format-wide": [
"1",
"2",
"3",
"4",
"5",
"6",
"7"
],
"dateTimeFormats-appendItem-Day": "{0} ({2}: {1})",
"dateFormatItem-y": "G y",
"months-standAlone-narrow": [
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"10",
"11",
"12"
],
"dateFormatItem-hm": "h:mm a",
"dateTimeFormats-appendItem-Year": "{0} {1}",
"dateTimeFormats-appendItem-Hour": "{0} ({2}: {1})",
"dayPeriods-format-abbr-pm": "PM",
"days-format-abbr": [
"1",
"2",
"3",
"4",
"5",
"6",
"7"
],
"dateFormatItem-yMMMd": "G y MMM d",
"eraNames": [
"BE"
],
"days-format-narrow": [
"1",
"2",
"3",
"4",
"5",
"6",
"7"
],
"days-standAlone-narrow": [
"1",
"2",
"3",
"4",
"5",
"6",
"7"
],
"dateFormatItem-MMM": "LLL",
"dateTimeFormats-appendItem-Quarter": "{0} ({2}: {1})",
"dayPeriods-format-wide-am": "AM",
"dateTimeFormats-appendItem-Month": "{0} ({2}: {1})",
"dateTimeFormats-appendItem-Minute": "{0} ({2}: {1})",
"dateFormat-short": "GGGGG yyyy-MM-dd",
"dateFormatItem-yMMMEd": "E, G y MMM d",
"dateFormatItem-Ed": "d E",
"dateTimeFormats-appendItem-Timezone": "{0} {1}",
"dateFormat-medium": "G y MMM d",
"dayPeriods-format-narrow-pm": "PM",
"dateFormatItem-Hms": "HH:mm:ss",
"dateFormatItem-hms": "h:mm:ss a"
}
//end v1.x content
,
"ar": true,
"ca": true,
"cs": true,
"da": true,
"de": true,
"el": true,
"en": true,
"en-gb": true,
"es": true,
"fi": true,
"fr": true,
"hu": true,
"it": true,
"ja": true,
"ko": true,
"nb": true,
"nl": true,
"pl": true,
"pt": true,
"pt-pt": true,
"ro": true,
"ru": true,
"sv": true,
"th": true,
"tr": true,
"zh": true,
"zh-hant": true
});

View File

@@ -0,0 +1,8 @@
/*
Copyright (c) 2004-2012, The Dojo Foundation All Rights Reserved.
Available via Academic Free License >= 2.1 OR the modified BSD license.
see: http://dojotoolkit.org/license for details
*/
//>>built
define("dojo/cldr/nls/ca/buddhist",{"dateFormatItem-yM":"MM/yyyy GGGGG","dateFormatItem-yQ":"Q yyyy GGGGG","dayPeriods-format-wide-pm":"p.m.","eraNames":["eB"],"dateFormatItem-MMMEd":"E d MMM","dateFormatItem-hms":"h:mm:ss a","dateFormatItem-yQQQ":"QQQ y G","days-standAlone-wide":["Diumenge","Dilluns","Dimarts","Dimecres","Dijous","Divendres","Dissabte"],"dateFormatItem-MMM":"LLL","months-standAlone-narrow":["g","f","m","a","m","j","j","a","s","o","n","d"],"dayPeriods-format-wide-am":"a.m.","quarters-standAlone-abbr":["1T","2T","3T","4T"],"dateFormatItem-y":"y G","timeFormat-full":"H.mm.ss zzzz","months-standAlone-abbr":["gen.","febr.","març","abr.","maig","juny","jul.","ag.","set.","oct.","nov.","des."],"dateFormatItem-Ed":"E d","dateFormatItem-yMMM":"MMM y G","days-standAlone-narrow":["dg","dl","dt","dc","dj","dv","ds"],"eraAbbr":["eB"],"dateFormat-long":"d MMMM y G","timeFormat-medium":"H.mm.ss","dateFormatItem-Hm":"HH:mm","dateFormat-medium":"d MMM y G","dateFormatItem-Hms":"HH:mm:ss","dayPeriods-format-narrow-pm":"p.m.","dateFormatItem-yMd":"d/M/yyyy","quarters-standAlone-wide":["1r trimestre","2n trimestre","3r trimestre","4t trimestre"],"dateFormatItem-ms":"mm:ss","dayPeriods-format-narrow-am":"a.m.","months-standAlone-wide":["gener","febrer","març","abril","maig","juny","juliol","agost","setembre","octubre","novembre","desembre"],"dateFormatItem-MMMd":"d MMM","timeFormat-long":"H.mm.ss z","months-format-abbr":["de gen.","de febr.","de març","dabr.","de maig","de juny","de jul.","dag.","de set.","doct.","de nov.","de des."],"timeFormat-short":"H.mm","dateFormatItem-H":"HH","quarters-format-abbr":["1T","2T","3T","4T"],"days-format-abbr":["dg.","dl.","dt.","dc.","dj.","dv.","ds."],"dateFormatItem-M":"L","days-format-narrow":["dg","dl","dt","dc","dj","dv","ds"],"dateFormatItem-yMMMd":"d MMM y","dateFormatItem-MEd":"E, d/M","months-format-narrow":["G","F","M","A","M","J","J","A","S","O","N","D"],"days-standAlone-short":["dg.","dl.","dm.","dc.","dj.","dv.","ds."],"dateFormatItem-hm":"h:mm a","days-standAlone-abbr":["dg","dl","dt","dc","dj","dv","ds"],"dateFormat-short":"dd/MM/yyyy GGGGG","dateFormatItem-yMMMEd":"E, d MMM y G","dateFormat-full":"EEEE, dd MMMM y G","dateFormatItem-Md":"d/M","dateFormatItem-yMEd":"E, dd/MM/yyyy GGGGG","months-format-wide":["de gener","de febrer","de març","dabril","de maig","de juny","de juliol","dagost","de setembre","doctubre","de novembre","de desembre"],"days-format-short":["dg.","dl.","dt.","dc.","dj.","dv.","ds."],"dateFormatItem-d":"d","quarters-format-wide":["1r trimestre","2n trimestre","3r trimestre","4t trimestre"],"eraNarrow":["eB"],"days-format-wide":["diumenge","dilluns","dimarts","dimecres","dijous","divendres","dissabte"],"dateFormatItem-h":"h a"});

View File

@@ -0,0 +1,231 @@
define(
"dojo/cldr/nls/ca/buddhist", //begin v1.x content
{
"dateFormatItem-yM": "MM/yyyy GGGGG",
"dateFormatItem-yQ": "Q yyyy GGGGG",
"dayPeriods-format-wide-pm": "p.m.",
"eraNames": [
"eB"
],
"dateFormatItem-MMMEd": "E d MMM",
"dateFormatItem-hms": "h:mm:ss a",
"dateFormatItem-yQQQ": "QQQ y G",
"days-standAlone-wide": [
"Diumenge",
"Dilluns",
"Dimarts",
"Dimecres",
"Dijous",
"Divendres",
"Dissabte"
],
"dateFormatItem-MMM": "LLL",
"months-standAlone-narrow": [
"g",
"f",
"m",
"a",
"m",
"j",
"j",
"a",
"s",
"o",
"n",
"d"
],
"dayPeriods-format-wide-am": "a.m.",
"quarters-standAlone-abbr": [
"1T",
"2T",
"3T",
"4T"
],
"dateFormatItem-y": "y G",
"timeFormat-full": "H.mm.ss zzzz",
"months-standAlone-abbr": [
"gen.",
"febr.",
"març",
"abr.",
"maig",
"juny",
"jul.",
"ag.",
"set.",
"oct.",
"nov.",
"des."
],
"dateFormatItem-Ed": "E d",
"dateFormatItem-yMMM": "MMM y G",
"days-standAlone-narrow": [
"dg",
"dl",
"dt",
"dc",
"dj",
"dv",
"ds"
],
"eraAbbr": [
"eB"
],
"dateFormat-long": "d MMMM y G",
"timeFormat-medium": "H.mm.ss",
"dateFormatItem-Hm": "HH:mm",
"dateFormat-medium": "d MMM y G",
"dateFormatItem-Hms": "HH:mm:ss",
"dayPeriods-format-narrow-pm": "p.m.",
"dateFormatItem-yMd": "d/M/yyyy",
"quarters-standAlone-wide": [
"1r trimestre",
"2n trimestre",
"3r trimestre",
"4t trimestre"
],
"dateFormatItem-ms": "mm:ss",
"dayPeriods-format-narrow-am": "a.m.",
"months-standAlone-wide": [
"gener",
"febrer",
"març",
"abril",
"maig",
"juny",
"juliol",
"agost",
"setembre",
"octubre",
"novembre",
"desembre"
],
"dateFormatItem-MMMd": "d MMM",
"timeFormat-long": "H.mm.ss z",
"months-format-abbr": [
"de gen.",
"de febr.",
"de març",
"dabr.",
"de maig",
"de juny",
"de jul.",
"dag.",
"de set.",
"doct.",
"de nov.",
"de des."
],
"timeFormat-short": "H.mm",
"dateFormatItem-H": "HH",
"quarters-format-abbr": [
"1T",
"2T",
"3T",
"4T"
],
"days-format-abbr": [
"dg.",
"dl.",
"dt.",
"dc.",
"dj.",
"dv.",
"ds."
],
"dateFormatItem-M": "L",
"days-format-narrow": [
"dg",
"dl",
"dt",
"dc",
"dj",
"dv",
"ds"
],
"dateFormatItem-yMMMd": "d MMM y",
"dateFormatItem-MEd": "E, d/M",
"months-format-narrow": [
"G",
"F",
"M",
"A",
"M",
"J",
"J",
"A",
"S",
"O",
"N",
"D"
],
"days-standAlone-short": [
"dg.",
"dl.",
"dm.",
"dc.",
"dj.",
"dv.",
"ds."
],
"dateFormatItem-hm": "h:mm a",
"days-standAlone-abbr": [
"dg",
"dl",
"dt",
"dc",
"dj",
"dv",
"ds"
],
"dateFormat-short": "dd/MM/yyyy GGGGG",
"dateFormatItem-yMMMEd": "E, d MMM y G",
"dateFormat-full": "EEEE, dd MMMM y G",
"dateFormatItem-Md": "d/M",
"dateFormatItem-yMEd": "E, dd/MM/yyyy GGGGG",
"months-format-wide": [
"de gener",
"de febrer",
"de març",
"dabril",
"de maig",
"de juny",
"de juliol",
"dagost",
"de setembre",
"doctubre",
"de novembre",
"de desembre"
],
"days-format-short": [
"dg.",
"dl.",
"dt.",
"dc.",
"dj.",
"dv.",
"ds."
],
"dateFormatItem-d": "d",
"quarters-format-wide": [
"1r trimestre",
"2n trimestre",
"3r trimestre",
"4t trimestre"
],
"eraNarrow": [
"eB"
],
"days-format-wide": [
"diumenge",
"dilluns",
"dimarts",
"dimecres",
"dijous",
"divendres",
"dissabte"
],
"dateFormatItem-h": "h a"
}
//end v1.x content
);

Some files were not shown because too many files have changed in this diff Show More