Subversion Repositories Applications.papyrus

Compare Revisions

No changes between revisions

Ignore whitespace Rev 2149 → Rev 2150

/trunk/api/js/dojo1.0/dijit/_Templated.js
New file
0,0 → 1,326
if(!dojo._hasResource["dijit._Templated"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit._Templated"] = true;
dojo.provide("dijit._Templated");
 
dojo.require("dijit._Widget");
 
dojo.require("dojo.string");
dojo.require("dojo.parser");
 
dojo.declare("dijit._Templated",
null,
{
// summary:
// mixin for widgets that are instantiated from a template
 
// templateNode: DomNode
// a node that represents the widget template. Pre-empts both templateString and templatePath.
templateNode: null,
 
// templateString String:
// a string that represents the widget template. Pre-empts the
// templatePath. In builds that have their strings "interned", the
// templatePath is converted to an inline templateString, thereby
// preventing a synchronous network call.
templateString: null,
 
// templatePath: String
// Path to template (HTML file) for this widget
templatePath: null,
 
// widgetsInTemplate Boolean:
// should we parse the template to find widgets that might be
// declared in markup inside it? false by default.
widgetsInTemplate: false,
 
// containerNode DomNode:
// holds child elements. "containerNode" is generally set via a
// dojoAttachPoint assignment and it designates where children of
// the src dom node will be placed
containerNode: null,
 
// skipNodeCache Boolean:
// if using a cached widget template node poses issues for a
// particular widget class, it can set this property to ensure
// that its template is always re-built from a string
_skipNodeCache: false,
 
// method over-ride
buildRendering: function(){
// summary:
// Construct the UI for this widget from a template, setting this.domNode.
 
// Lookup cached version of template, and download to cache if it
// isn't there already. Returns either a DomNode or a string, depending on
// whether or not the template contains ${foo} replacement parameters.
var cached = dijit._Templated.getCachedTemplate(this.templatePath, this.templateString, this._skipNodeCache);
 
var node;
if(dojo.isString(cached)){
var className = this.declaredClass, _this = this;
// Cache contains a string because we need to do property replacement
// do the property replacement
var tstr = dojo.string.substitute(cached, this, function(value, key){
if(key.charAt(0) == '!'){ value = _this[key.substr(1)]; }
if(typeof value == "undefined"){ throw new Error(className+" template:"+key); } // a debugging aide
if(!value){ return ""; }
 
// Substitution keys beginning with ! will skip the transform step,
// in case a user wishes to insert unescaped markup, e.g. ${!foo}
return key.charAt(0) == "!" ? value :
// Safer substitution, see heading "Attribute values" in
// http://www.w3.org/TR/REC-html40/appendix/notes.html#h-B.3.2
value.toString().replace(/"/g,"""); //TODO: add &amp? use encodeXML method?
}, this);
 
node = dijit._Templated._createNodesFromText(tstr)[0];
}else{
// if it's a node, all we have to do is clone it
node = cached.cloneNode(true);
}
 
// recurse through the node, looking for, and attaching to, our
// attachment points which should be defined on the template node.
this._attachTemplateNodes(node);
 
var source = this.srcNodeRef;
if(source && source.parentNode){
source.parentNode.replaceChild(node, source);
}
 
this.domNode = node;
if(this.widgetsInTemplate){
var childWidgets = dojo.parser.parse(node);
this._attachTemplateNodes(childWidgets, function(n,p){
return n[p];
});
}
 
this._fillContent(source);
},
 
_fillContent: function(/*DomNode*/ source){
// summary:
// relocate source contents to templated container node
// this.containerNode must be able to receive children, or exceptions will be thrown
var dest = this.containerNode;
if(source && dest){
while(source.hasChildNodes()){
dest.appendChild(source.firstChild);
}
}
},
 
_attachTemplateNodes: function(rootNode, getAttrFunc){
// summary:
// map widget properties and functions to the handlers specified in
// the dom node and it's descendants. This function iterates over all
// nodes and looks for these properties:
// * dojoAttachPoint
// * dojoAttachEvent
// * waiRole
// * waiState
// rootNode: DomNode|Array[Widgets]
// the node to search for properties. All children will be searched.
// getAttrFunc: function?
// a function which will be used to obtain property for a given
// DomNode/Widget
 
getAttrFunc = getAttrFunc || function(n,p){ return n.getAttribute(p); };
 
var nodes = dojo.isArray(rootNode) ? rootNode : (rootNode.all || rootNode.getElementsByTagName("*"));
var x=dojo.isArray(rootNode)?0:-1;
for(; x<nodes.length; x++){
var baseNode = (x == -1) ? rootNode : nodes[x];
if(this.widgetsInTemplate && getAttrFunc(baseNode,'dojoType')){
continue;
}
// Process dojoAttachPoint
var attachPoint = getAttrFunc(baseNode, "dojoAttachPoint");
if(attachPoint){
var point, points = attachPoint.split(/\s*,\s*/);
while(point=points.shift()){
if(dojo.isArray(this[point])){
this[point].push(baseNode);
}else{
this[point]=baseNode;
}
}
}
 
// Process dojoAttachEvent
var attachEvent = getAttrFunc(baseNode, "dojoAttachEvent");
if(attachEvent){
// NOTE: we want to support attributes that have the form
// "domEvent: nativeEvent; ..."
var event, events = attachEvent.split(/\s*,\s*/);
var trim = dojo.trim;
while(event=events.shift()){
if(event){
var thisFunc = null;
if(event.indexOf(":") != -1){
// oh, if only JS had tuple assignment
var funcNameArr = event.split(":");
event = trim(funcNameArr[0]);
thisFunc = trim(funcNameArr[1]);
}else{
event = trim(event);
}
if(!thisFunc){
thisFunc = event;
}
this.connect(baseNode, event, thisFunc);
}
}
}
 
// waiRole, waiState
var role = getAttrFunc(baseNode, "waiRole");
if(role){
dijit.setWaiRole(baseNode, role);
}
var values = getAttrFunc(baseNode, "waiState");
if(values){
dojo.forEach(values.split(/\s*,\s*/), function(stateValue){
if(stateValue.indexOf('-') != -1){
var pair = stateValue.split('-');
dijit.setWaiState(baseNode, pair[0], pair[1]);
}
});
}
 
}
}
}
);
 
// key is either templatePath or templateString; object is either string or DOM tree
dijit._Templated._templateCache = {};
 
dijit._Templated.getCachedTemplate = function(templatePath, templateString, alwaysUseString){
// summary:
// static method to get a template based on the templatePath or
// templateString key
// templatePath: String
// the URL to get the template from. dojo.uri.Uri is often passed as well.
// templateString: String?
// a string to use in lieu of fetching the template from a URL
// Returns:
// Either string (if there are ${} variables that need to be replaced) or just
// a DOM tree (if the node can be cloned directly)
 
// is it already cached?
var tmplts = dijit._Templated._templateCache;
var key = templateString || templatePath;
var cached = tmplts[key];
if(cached){
return cached;
}
 
// If necessary, load template string from template path
if(!templateString){
templateString = dijit._Templated._sanitizeTemplateString(dojo._getText(templatePath));
}
 
templateString = dojo.string.trim(templateString);
 
if(templateString.match(/\$\{([^\}]+)\}/g) || alwaysUseString){
// there are variables in the template so all we can do is cache the string
return (tmplts[key] = templateString); //String
}else{
// there are no variables in the template so we can cache the DOM tree
return (tmplts[key] = dijit._Templated._createNodesFromText(templateString)[0]); //Node
}
};
 
dijit._Templated._sanitizeTemplateString = function(/*String*/tString){
// summary:
// Strips <?xml ...?> declarations so that external SVG and XML
// documents can be added to a document without worry. Also, if the string
// is an HTML document, only the part inside the body tag is returned.
if(tString){
tString = tString.replace(/^\s*<\?xml(\s)+version=[\'\"](\d)*.(\d)*[\'\"](\s)*\?>/im, "");
var matches = tString.match(/<body[^>]*>\s*([\s\S]+)\s*<\/body>/im);
if(matches){
tString = matches[1];
}
}else{
tString = "";
}
return tString; //String
};
 
 
if(dojo.isIE){
dojo.addOnUnload(function(){
var cache = dijit._Templated._templateCache;
for(var key in cache){
var value = cache[key];
if(!isNaN(value.nodeType)){ // isNode equivalent
dojo._destroyElement(value);
}
delete cache[key];
}
});
}
 
(function(){
var tagMap = {
cell: {re: /^<t[dh][\s\r\n>]/i, pre: "<table><tbody><tr>", post: "</tr></tbody></table>"},
row: {re: /^<tr[\s\r\n>]/i, pre: "<table><tbody>", post: "</tbody></table>"},
section: {re: /^<(thead|tbody|tfoot)[\s\r\n>]/i, pre: "<table>", post: "</table>"}
};
 
// dummy container node used temporarily to hold nodes being created
var tn;
 
dijit._Templated._createNodesFromText = function(/*String*/text){
// summary:
// Attempts to create a set of nodes based on the structure of the passed text.
 
if(!tn){
tn = dojo.doc.createElement("div");
tn.style.display="none";
dojo.body().appendChild(tn);
}
var tableType = "none";
var rtext = text.replace(/^\s+/, "");
for(var type in tagMap){
var map = tagMap[type];
if(map.re.test(rtext)){
tableType = type;
text = map.pre + text + map.post;
break;
}
}
 
tn.innerHTML = text;
if(tn.normalize){
tn.normalize();
}
 
var tag = { cell: "tr", row: "tbody", section: "table" }[tableType];
var _parent = (typeof tag != "undefined") ?
tn.getElementsByTagName(tag)[0] :
tn;
 
var nodes = [];
while(_parent.firstChild){
nodes.push(_parent.removeChild(_parent.firstChild));
}
tn.innerHTML="";
return nodes; // Array
}
})();
 
// These arguments can be specified for widgets which are used in templates.
// Since any widget can be specified as sub widgets in template, mix it
// into the base widget class. (This is a hack, but it's effective.)
dojo.extend(dijit._Widget,{
dojoAttachEvent: "",
dojoAttachPoint: "",
waiRole: "",
waiState:""
})
 
}
/trunk/api/js/dojo1.0/dijit/templates/colors7x10.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/templates/colors7x10.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/templates/TitlePane.html
New file
0,0 → 1,14
<div class="dijitTitlePane">
<div dojoAttachEvent="onclick:toggle,onkeypress: _onTitleKey,onfocus:_handleFocus,onblur:_handleFocus" tabindex="0"
waiRole="button" class="dijitTitlePaneTitle" dojoAttachPoint="focusNode">
<div dojoAttachPoint="arrowNode" class="dijitInline dijitArrowNode"><span dojoAttachPoint="arrowNodeInner" class="dijitArrowNodeInner"></span></div>
<div dojoAttachPoint="titleNode" class="dijitTitlePaneTextNode"></div>
</div>
<div class="dijitTitlePaneContentOuter" dojoAttachPoint="hideNode">
<div class="dijitReset" dojoAttachPoint="wipeNode">
<div class="dijitTitlePaneContentInner" dojoAttachPoint="containerNode" waiRole="region" tabindex="-1">
<!-- nested divs because wipeIn()/wipeOut() doesn't work right on node w/padding etc. Put padding on inner div. -->
</div>
</div>
</div>
</div>
/trunk/api/js/dojo1.0/dijit/templates/blank.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/templates/blank.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/templates/Calendar.html
New file
0,0 → 1,35
<table cellspacing="0" cellpadding="0" class="dijitCalendarContainer">
<thead>
<tr class="dijitReset dijitCalendarMonthContainer" valign="top">
<th class='dijitReset' dojoAttachPoint="decrementMonth">
<span class="dijitInline dijitCalendarIncrementControl dijitCalendarDecrease"><span dojoAttachPoint="decreaseArrowNode" class="dijitA11ySideArrow dijitCalendarIncrementControl dijitCalendarDecreaseInner">-</span></span>
</th>
<th class='dijitReset' colspan="5">
<div dojoAttachPoint="monthLabelSpacer" class="dijitCalendarMonthLabelSpacer"></div>
<div dojoAttachPoint="monthLabelNode" class="dijitCalendarMonth"></div>
</th>
<th class='dijitReset' dojoAttachPoint="incrementMonth">
<div class="dijitInline dijitCalendarIncrementControl dijitCalendarIncrease"><span dojoAttachPoint="increaseArrowNode" class="dijitA11ySideArrow dijitCalendarIncrementControl dijitCalendarIncreaseInner">+</span></div>
</th>
</tr>
<tr>
<th class="dijitReset dijitCalendarDayLabelTemplate"><span class="dijitCalendarDayLabel"></span></th>
</tr>
</thead>
<tbody dojoAttachEvent="onclick: _onDayClick" class="dijitReset dijitCalendarBodyContainer">
<tr class="dijitReset dijitCalendarWeekTemplate">
<td class="dijitReset dijitCalendarDateTemplate"><span class="dijitCalendarDateLabel"></span></td>
</tr>
</tbody>
<tfoot class="dijitReset dijitCalendarYearContainer">
<tr>
<td class='dijitReset' valign="top" colspan="7">
<h3 class="dijitCalendarYearLabel">
<span dojoAttachPoint="previousYearLabelNode" class="dijitInline dijitCalendarPreviousYear"></span>
<span dojoAttachPoint="currentYearLabelNode" class="dijitInline dijitCalendarSelectedYear"></span>
<span dojoAttachPoint="nextYearLabelNode" class="dijitInline dijitCalendarNextYear"></span>
</h3>
</td>
</tr>
</tfoot>
</table>
/trunk/api/js/dojo1.0/dijit/templates/ProgressBar.html
New file
0,0 → 1,9
<div class="dijitProgressBar dijitProgressBarEmpty"
><div waiRole="progressbar" tabindex="0" dojoAttachPoint="internalProgress" class="dijitProgressBarFull"
><div class="dijitProgressBarTile"></div
><span style="visibility:hidden">&nbsp;</span
></div
><div dojoAttachPoint="label" class="dijitProgressBarLabel" id="${id}_label">&nbsp;</div
><img dojoAttachPoint="inteterminateHighContrastImage" class="dijitProgressBarIndeterminateHighContrastImage"
></img
></div>
/trunk/api/js/dojo1.0/dijit/templates/Tooltip.html
New file
0,0 → 1,4
<div class="dijitTooltip dijitTooltipLeft" id="dojoTooltip">
<div class="dijitTooltipContainer dijitTooltipContents" dojoAttachPoint="containerNode" waiRole='alert'></div>
<div class="dijitTooltipConnector"></div>
</div>
/trunk/api/js/dojo1.0/dijit/templates/buttons/bg-fade.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/templates/buttons/bg-fade.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/templates/ColorPalette.html
New file
0,0 → 1,5
<div class="dijitInline dijitColorPalette">
<div class="dijitColorPaletteInner" dojoAttachPoint="divNode" waiRole="grid" tabIndex="-1">
<img class="dijitColorPaletteUnder" dojoAttachPoint="imageNode" waiRole="presentation">
</div>
</div>
/trunk/api/js/dojo1.0/dijit/templates/InlineEditBox.html
New file
0,0 → 1,8
<fieldset dojoAttachPoint="editNode" waiRole="presentation" style="position: absolute; visibility:hidden" class="dijitReset dijitInline"
dojoAttachEvent="onkeypress: _onKeyPress"
><input dojoAttachPoint="editorPlaceholder"
/><span dojoAttachPoint="buttonContainer"
><button class='saveButton' dojoAttachPoint="saveButton" dojoType="dijit.form.Button" dojoAttachEvent="onClick:save">${buttonSave}</button
><button class='cancelButton' dojoAttachPoint="cancelButton" dojoType="dijit.form.Button" dojoAttachEvent="onClick:cancel">${buttonCancel}</button
></span
></fieldset>
/trunk/api/js/dojo1.0/dijit/templates/Dialog.html
New file
0,0 → 1,10
<div class="dijitDialog">
<div dojoAttachPoint="titleBar" class="dijitDialogTitleBar" tabindex="0" waiRole="dialog">
<span dojoAttachPoint="titleNode" class="dijitDialogTitle">${title}</span>
<span dojoAttachPoint="closeButtonNode" class="dijitDialogCloseIcon" dojoAttachEvent="onclick: hide">
<span dojoAttachPoint="closeText" class="closeText">x</span>
</span>
</div>
<div dojoAttachPoint="containerNode" class="dijitDialogPaneContent"></div>
<span dojoAttachPoint="tabEnd" dojoAttachEvent="onfocus:_cycleFocus" tabindex="0"></span>
</div>
/trunk/api/js/dojo1.0/dijit/templates/colors3x4.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/templates/colors3x4.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/_tree/Node.html
New file
0,0 → 1,11
<div class="dijitTreeNode dijitTreeExpandLeaf dijitTreeChildrenNo" waiRole="presentation"
><span dojoAttachPoint="expandoNode" class="dijitTreeExpando" waiRole="presentation"
></span
><span dojoAttachPoint="expandoNodeText" class="dijitExpandoText" waiRole="presentation"
></span
>
<div dojoAttachPoint="contentNode" class="dijitTreeContent" waiRole="presentation">
<div dojoAttachPoint="iconNode" class="dijitInline dijitTreeIcon" waiRole="presentation"></div>
<span dojoAttachPoint="labelNode" class="dijitTreeLabel" wairole="treeitem" tabindex="-1"></span>
</div>
</div>
/trunk/api/js/dojo1.0/dijit/_tree/dndSelector.js
New file
0,0 → 1,171
if(!dojo._hasResource["dijit._tree.dndSelector"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit._tree.dndSelector"] = true;
dojo.provide("dijit._tree.dndSelector");
dojo.require("dojo.dnd.common");
dojo.require("dijit._tree.dndContainer");
 
dojo.declare("dijit._tree.dndSelector",
dijit._tree.dndContainer,
{
constructor: function(tree, params){
this.selection={};
this.anchor = null;
this.simpleSelection=false;
this.events.push(
dojo.connect(this.tree.domNode, "onmousedown", this,"onMouseDown"),
dojo.connect(this.tree.domNode, "onmouseup", this,"onMouseUp")
);
},
// object attributes (for markup)
singular: false, // is singular property
// methods
getSelectedItems: function(){
var selectedItems = []
for (var i in this.selection){
selectedItems.push(dijit.getEnclosingWidget(this.selection[i]).item);
}
return selectedItems;
},
 
getSelectedNodes: function(){
return this.selection;
},
 
selectNone: function(){
// summary: unselects all items
return this._removeSelection()._removeAnchor(); // self
},
 
insertItems: function(item, parent){
// summary: inserts new data items (see Container's insertNodes method for details)
//we actually need to add things to the store here instead of adding noes to the tree directly
},
 
destroy: function(){
// summary: prepares the object to be garbage-collected
dojo.dnd.Selector.superclass.destroy.call(this);
this.selection = this.anchor = null;
},
 
// mouse events
onMouseDown: function(e){
// summary: event processor for onmousedown
// e: Event: mouse event
if(!this.current){ return; }
 
var item = dijit.getEnclosingWidget(this.current).item
var id = this.tree.store.getIdentity(item);
 
if (!this.current.id) {
this.current.id=id;
}
 
if (!this.current.type) {
this.current.type="data";
}
 
if(!this.singular && !dojo.dnd.getCopyKeyState(e) && !e.shiftKey && (this.current.id in this.selection)){
this.simpleSelection = true;
dojo.stopEvent(e);
return;
}
 
if(this.singular){
if(this.anchor == this.current){
if(dojo.dnd.getCopyKeyState(e)){
this.selectNone();
}
}else{
this.selectNone();
this.anchor = this.current;
this._addItemClass(this.anchor, "Anchor");
 
this.selection[this.current.id] = this.current;
}
}else{
if(!this.singular && e.shiftKey){
if (dojo.dnd.getCopyKeyState(e)){
//TODO add range to selection
}else{
//TODO select new range from anchor
}
}else{
if(dojo.dnd.getCopyKeyState(e)){
if(this.anchor == this.current){
delete this.selection[this.anchor.id];
this._removeAnchor();
}else{
if(this.current.id in this.selection){
this._removeItemClass(this.current, "Selected");
delete this.selection[this.current.id];
}else{
if(this.anchor){
this._removeItemClass(this.anchor, "Anchor");
this._addItemClass(this.anchor, "Selected");
}
this.anchor = this.current;
this._addItemClass(this.current, "Anchor");
this.selection[this.current.id] = this.current;
}
}
}else{
var item = dijit.getEnclosingWidget(this.current).item
var id = this.tree.store.getIdentity(item);
if(!(id in this.selection)){
this.selectNone();
this.anchor = this.current;
this._addItemClass(this.current, "Anchor");
this.selection[id] = this.current;
}
}
}
}
 
dojo.stopEvent(e);
},
 
onMouseMove: function() {
 
},
 
onOverEvent: function() {
this.onmousemoveEvent = dojo.connect(this.node, "onmousemove", this, "onMouseMove");
},
 
onMouseUp: function(e){
// summary: event processor for onmouseup
// e: Event: mouse event
if(!this.simpleSelection){ return; }
this.simpleSelection = false;
this.selectNone();
if(this.current){
this.anchor = this.current;
this._addItemClass(this.anchor, "Anchor");
this.selection[this.current.id] = this.current;
}
},
_removeSelection: function(){
// summary: unselects all items
var e = dojo.dnd._empty;
for(var i in this.selection){
if(i in e){ continue; }
var node = dojo.byId(i);
if(node){ this._removeItemClass(node, "Selected"); }
}
this.selection = {};
return this; // self
},
_removeAnchor: function(){
if(this.anchor){
this._removeItemClass(this.anchor, "Anchor");
this.anchor = null;
}
return this; // self
}
});
 
}
/trunk/api/js/dojo1.0/dijit/_tree/dndSource.js
New file
0,0 → 1,346
if(!dojo._hasResource["dijit._tree.dndSource"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit._tree.dndSource"] = true;
dojo.provide("dijit._tree.dndSource");
 
dojo.require("dijit._tree.dndSelector");
dojo.require("dojo.dnd.Manager");
 
dojo.declare("dijit._tree.dndSource", dijit._tree.dndSelector, {
// summary: a Source object, which can be used as a DnD source, or a DnD target
// object attributes (for markup)
isSource: true,
copyOnly: false,
skipForm: false,
accept: ["text"],
constructor: function(node, params){
// summary: a constructor of the Source
// node: Node: node or node's id to build the source on
// params: Object: a dict of parameters, recognized parameters are:
// isSource: Boolean: can be used as a DnD source, if true; assumed to be "true" if omitted
// accept: Array: list of accepted types (text strings) for a target; assumed to be ["text"] if omitted
// horizontal: Boolean: a horizontal container, if true, vertical otherwise or when omitted
// copyOnly: Boolean: always copy items, if true, use a state of Ctrl key otherwise
// skipForm: Boolean: don't start the drag operation, if clicked on form elements
// the rest of parameters are passed to the selector
if(!params){ params = {}; }
dojo.mixin(this, params);
this.isSource = typeof params.isSource == "undefined" ? true : params.isSource;
var type = params.accept instanceof Array ? params.accept : ["text"];
this.accept = null;
if(type.length){
this.accept = {};
for(var i = 0; i < type.length; ++i){
this.accept[type[i]] = 1;
}
}
 
// class-specific variables
this.isDragging = false;
this.mouseDown = false;
this.targetAnchor = null;
this.targetBox = null;
this.before = true;
 
// states
this.sourceState = "";
if(this.isSource){
dojo.addClass(this.node, "dojoDndSource");
}
this.targetState = "";
if(this.accept){
dojo.addClass(this.node, "dojoDndTarget");
}
if(this.horizontal){
dojo.addClass(this.node, "dojoDndHorizontal");
}
// set up events
this.topics = [
dojo.subscribe("/dnd/source/over", this, "onDndSourceOver"),
dojo.subscribe("/dnd/start", this, "onDndStart"),
dojo.subscribe("/dnd/drop", this, "onDndDrop"),
dojo.subscribe("/dnd/cancel", this, "onDndCancel")
];
},
 
startup: function(){
},
// methods
checkAcceptance: function(source, nodes){
// summary: checks, if the target can accept nodes from this source
// source: Object: the source which provides items
// nodes: Array: the list of transferred items
return true; // Boolean
},
copyState: function(keyPressed){
// summary: Returns true, if we need to copy items, false to move.
// It is separated to be overwritten dynamically, if needed.
// keyPressed: Boolean: the "copy" was pressed
return this.copyOnly || keyPressed; // Boolean
},
destroy: function(){
// summary: prepares the object to be garbage-collected
this.inherited("destroy",arguments);
dojo.forEach(this.topics, dojo.unsubscribe);
this.targetAnchor = null;
},
 
// markup methods
markupFactory: function(params, node){
params._skipStartup = true;
return new dijit._tree.dndSource(node, params);
},
 
// mouse event processors
onMouseMove: function(e){
// summary: event processor for onmousemove
// e: Event: mouse event
if(this.isDragging && this.targetState == "Disabled"){ return; }
this.inherited("onMouseMove", arguments);
var m = dojo.dnd.manager();
if(this.isDragging){
// calculate before/after
 
if (this.allowBetween){ // not implemented yet for tree since it has no concept of order
var before = false;
if(this.current){
if(!this.targetBox || this.targetAnchor != this.current){
this.targetBox = {
xy: dojo.coords(this.current, true),
w: this.current.offsetWidth,
h: this.current.offsetHeight
};
}
if(this.horizontal){
before = (e.pageX - this.targetBox.xy.x) < (this.targetBox.w / 2);
}else{
before = (e.pageY - this.targetBox.xy.y) < (this.targetBox.h / 2);
}
}
if(this.current != this.targetAnchor || before != this.before){
this._markTargetAnchor(before);
m.canDrop(!this.current || m.source != this || !(this.current.id in this.selection));
}
}
}else{
if(this.mouseDown && this.isSource){
var n = this.getSelectedNodes();
var nodes=[];
for (var i in n){
nodes.push(n[i]);
}
if(nodes.length){
m.startDrag(this, nodes, this.copyState(dojo.dnd.getCopyKeyState(e)));
}
}
}
},
 
onMouseDown: function(e){
// summary: event processor for onmousedown
// e: Event: mouse event
this.mouseDown = true;
this.mouseButton = e.button;
this.inherited("onMouseDown",arguments);
},
 
onMouseUp: function(e){
// summary: event processor for onmouseup
// e: Event: mouse event
if(this.mouseDown){
this.mouseDown = false;
this.inherited("onMouseUp",arguments);
}
},
 
onMouseOver: function(e){
// summary: event processor for onmouseover
// e: Event: mouse event
var n = e.relatedTarget;
while(n){
if(n == this.node){ break; }
try{
n = n.parentNode;
}catch(x){
n = null;
}
}
if(!n){
this._changeState("Container", "Over");
this.onOverEvent();
}
n = this._getChildByEvent(e);
if(this.current == n){ return; }
if(this.current){ this._removeItemClass(this.current, "Over"); }
if(n){
this._addItemClass(n, "Over");
if(this.isDragging){
var m = dojo.dnd.manager();
if(this.checkItemAcceptance(n,m.source)){
m.canDrop(this.targetState != "Disabled" && (!this.current || m.source != this || !(this.current.id in this.selection)));
}else{
m.canDrop(false);
}
}
}else{
if(this.isDragging){
var m = dojo.dnd.manager();
if (m.source && this.checkAcceptance(m.source,m.source.getSelectedNodes())){
m.canDrop(this.targetState != "Disabled" && (!this.current || m.source != this || !(this.current.id in this.selection)));
}else{
m.canDrop(false);
}
}
}
this.current = n;
},
 
checkItemAcceptance: function(node, source){
// summary: stub funciton to be overridden if one wants to check for the ability to drop at the node/item level
return true;
},
// topic event processors
onDndSourceOver: function(source){
// summary: topic event processor for /dnd/source/over, called when detected a current source
// source: Object: the source which has the mouse over it
if(this != source){
this.mouseDown = false;
if(this.targetAnchor){
this._unmarkTargetAnchor();
}
}else if(this.isDragging){
var m = dojo.dnd.manager();
m.canDrop(this.targetState != "Disabled" && (!this.current || m.source != this || !(this.current.id in this.selection)));
}
},
onDndStart: function(source, nodes, copy){
// summary: topic event processor for /dnd/start, called to initiate the DnD operation
// source: Object: the source which provides items
// nodes: Array: the list of transferred items
// copy: Boolean: copy items, if true, move items otherwise
 
if(this.isSource){
this._changeState("Source", this == source ? (copy ? "Copied" : "Moved") : "");
}
var accepted = this.checkAcceptance(source, nodes);
 
this._changeState("Target", accepted ? "" : "Disabled");
 
if(accepted){
dojo.dnd.manager().overSource(this);
}
 
this.isDragging = true;
},
 
itemCreator: function(nodes){
var items = []
 
for(var i=0;i<nodes.length;i++){
items.push({
"name":nodes[i].textContent,
"id": nodes[i].id
});
}
 
return items;
},
 
onDndDrop: function(source, nodes, copy){
// summary: topic event processor for /dnd/drop, called to finish the DnD operation
// source: Object: the source which provides items
// nodes: Array: the list of transferred items
// copy: Boolean: copy items, if true, move items otherwise
 
if(this.containerState == "Over"){
this.isDragging = false;
var target = this.current;
var items = this.itemCreator(nodes, target);
if(!target || target == this.tree.domNode){
for(var i = 0; i < items.length; i++){
this.tree.store.newItem(items[i], null);
}
}else{
for(var i = 0; i < items.length; i++){
pInfo = {parent: dijit.getEnclosingWidget(target).item, attribute: "children"};
var newItem = this.tree.store.newItem(items[i], pInfo);
console.log("newItem:", newItem);
}
}
}
this.onDndCancel();
},
onDndCancel: function(){
// summary: topic event processor for /dnd/cancel, called to cancel the DnD operation
if(this.targetAnchor){
this._unmarkTargetAnchor();
this.targetAnchor = null;
}
this.before = true;
this.isDragging = false;
this.mouseDown = false;
delete this.mouseButton;
this._changeState("Source", "");
this._changeState("Target", "");
},
// utilities
 
onOverEvent: function(){
// summary: this function is called once, when mouse is over our container
this.inherited("onOverEvent",arguments);
dojo.dnd.manager().overSource(this);
},
onOutEvent: function(){
// summary: this function is called once, when mouse is out of our container
this.inherited("onOutEvent",arguments);
dojo.dnd.manager().outSource(this);
},
_markTargetAnchor: function(before){
// summary: assigns a class to the current target anchor based on "before" status
// before: Boolean: insert before, if true, after otherwise
if(this.current == this.targetAnchor && this.before == before){ return; }
if(this.targetAnchor){
this._removeItemClass(this.targetAnchor, this.before ? "Before" : "After");
}
this.targetAnchor = this.current;
this.targetBox = null;
this.before = before;
if(this.targetAnchor){
this._addItemClass(this.targetAnchor, this.before ? "Before" : "After");
}
},
_unmarkTargetAnchor: function(){
// summary: removes a class of the current target anchor based on "before" status
if(!this.targetAnchor){ return; }
this._removeItemClass(this.targetAnchor, this.before ? "Before" : "After");
this.targetAnchor = null;
this.targetBox = null;
this.before = true;
},
_markDndStatus: function(copy){
// summary: changes source's state based on "copy" status
this._changeState("Source", copy ? "Copied" : "Moved");
}
});
 
dojo.declare("dijit._tree.dndTarget", dijit._tree.dndSource, {
// summary: a Target object, which can be used as a DnD target
constructor: function(node, params){
// summary: a constructor of the Target --- see the Source constructor for details
this.isSource = false;
dojo.removeClass(this.node, "dojoDndSource");
},
 
// markup methods
markupFactory: function(params, node){
params._skipStartup = true;
return new dijit._tree.dndTarget(node, params);
}
});
 
}
/trunk/api/js/dojo1.0/dijit/_tree/Tree.html
New file
0,0 → 1,15
<div class="dijitTreeContainer" style="" waiRole="tree"
dojoAttachEvent="onclick:_onClick,onkeypress:_onKeyPress">
<div class="dijitTreeNode dijitTreeIsRoot dijitTreeExpandLeaf dijitTreeChildrenNo" waiRole="presentation"
dojoAttachPoint="rowNode"
><span dojoAttachPoint="expandoNode" class="dijitTreeExpando" waiRole="presentation"
></span
><span dojoAttachPoint="expandoNodeText" class="dijitExpandoText" waiRole="presentation"
></span
>
<div dojoAttachPoint="contentNode" class="dijitTreeContent" waiRole="presentation">
<div dojoAttachPoint="iconNode" class="dijitInline dijitTreeIcon" waiRole="presentation"></div>
<span dojoAttachPoint="labelNode" class="dijitTreeLabel" wairole="treeitem" tabindex="0"></span>
</div>
</div>
</div>
/trunk/api/js/dojo1.0/dijit/_tree/dndContainer.js
New file
0,0 → 1,146
if(!dojo._hasResource["dijit._tree.dndContainer"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit._tree.dndContainer"] = true;
dojo.provide("dijit._tree.dndContainer");
dojo.require("dojo.dnd.common");
dojo.require("dojo.dnd.Container");
 
dojo.declare("dijit._tree.dndContainer",
null,
{
constructor: function(tree, params){
// summary: a constructor of the Container
// tree: Node: node or node's id to build the container on
// params: Object: a dict of parameters, which gets mixed into the object
this.tree = tree;
this.node = tree.domNode;
dojo.mixin(this, params);
// class-specific variables
this.map = {};
this.current = null;
// states
this.ContainerState = "";
dojo.addClass(this.node, "dojoDndContainer");
// mark up children
if(!(params && params._skipStartup)){
this.startup();
}
 
// set up events
this.events = [
dojo.connect(this.node, "onmouseover", this, "onMouseOver"),
dojo.connect(this.node, "onmouseout", this, "onMouseOut"),
 
// cancel text selection and text dragging
dojo.connect(this.node, "ondragstart", dojo, "stopEvent"),
dojo.connect(this.node, "onselectstart", dojo, "stopEvent")
];
},
 
 
// abstract access to the map
getItem: function(/*String*/ key){
// summary: returns a data item by its key (id)
//console.log("Container getItem()", arguments,this.map, this.map[key], this.selection[key]);
return this.selection[key];
//return this.map[key]; // Object
},
 
// mouse events
onMouseOver: function(e){
// summary: event processor for onmouseover
// e: Event: mouse event
var n = e.relatedTarget;
while(n){
if(n == this.node){ break; }
try{
n = n.parentNode;
}catch(x){
n = null;
}
}
if(!n){
this._changeState("Container", "Over");
this.onOverEvent();
}
n = this._getChildByEvent(e);
if(this.current == n){ return; }
if(this.current){ this._removeItemClass(this.current, "Over"); }
if(n){ this._addItemClass(n, "Over"); }
this.current = n;
},
 
onMouseOut: function(e){
// summary: event processor for onmouseout
// e: Event: mouse event
for(var n = e.relatedTarget; n;){
if(n == this.node){ return; }
try{
n = n.parentNode;
}catch(x){
n = null;
}
}
if(this.current){
this._removeItemClass(this.current, "Over");
this.current = null;
}
this._changeState("Container", "");
this.onOutEvent();
},
 
_changeState: function(type, newState){
// summary: changes a named state to new state value
// type: String: a name of the state to change
// newState: String: new state
var prefix = "dojoDnd" + type;
var state = type.toLowerCase() + "State";
//dojo.replaceClass(this.node, prefix + newState, prefix + this[state]);
dojo.removeClass(this.node, prefix + this[state]);
dojo.addClass(this.node, prefix + newState);
this[state] = newState;
},
 
_getChildByEvent: function(e){
// summary: gets a child, which is under the mouse at the moment, or null
// e: Event: a mouse event
var node = e.target;
 
if (node && dojo.hasClass(node,"dijitTreeLabel")){
return node;
}
return null;
},
 
markupFactory: function(tree, params){
params._skipStartup = true;
return new dijit._tree.dndContainer(tree, params);
},
 
_addItemClass: function(node, type){
// summary: adds a class with prefix "dojoDndItem"
// node: Node: a node
// type: String: a variable suffix for a class name
dojo.addClass(node, "dojoDndItem" + type);
},
 
_removeItemClass: function(node, type){
// summary: removes a class with prefix "dojoDndItem"
// node: Node: a node
// type: String: a variable suffix for a class name
dojo.removeClass(node, "dojoDndItem" + type);
},
 
onOverEvent: function(){
// summary: this function is called once, when mouse is over our container
console.log("onOverEvent parent");
},
 
onOutEvent: function(){
// summary: this function is called once, when mouse is out of our container
}
});
 
}
/trunk/api/js/dojo1.0/dijit/dijit.js.uncompressed.js
New file
0,0 → 1,3292
/*
Copyright (c) 2004-2007, The Dojo Foundation
All Rights Reserved.
 
Licensed under the Academic Free License version 2.1 or above OR the
modified BSD license. For more information on Dojo licensing, see:
 
http://dojotoolkit.org/book/dojo-book-0-9/introduction/licensing
*/
 
/*
This is a compiled version of Dojo, built for deployment and not for
development. To get an editable version, please visit:
 
http://dojotoolkit.org
 
for documentation and information on getting the source.
*/
 
if(!dojo._hasResource["dijit._base.focus"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit._base.focus"] = true;
dojo.provide("dijit._base.focus");
 
// summary:
// These functions are used to query or set the focus and selection.
//
// Also, they trace when widgets become actived/deactivated,
// so that the widget can fire _onFocus/_onBlur events.
// "Active" here means something similar to "focused", but
// "focus" isn't quite the right word because we keep track of
// a whole stack of "active" widgets. Example: Combobutton --> Menu -->
// MenuItem. The onBlur event for Combobutton doesn't fire due to focusing
// on the Menu or a MenuItem, since they are considered part of the
// Combobutton widget. It only happens when focus is shifted
// somewhere completely different.
 
dojo.mixin(dijit,
{
// _curFocus: DomNode
// Currently focused item on screen
_curFocus: null,
 
// _prevFocus: DomNode
// Previously focused item on screen
_prevFocus: null,
 
isCollapsed: function(){
// summary: tests whether the current selection is empty
var _window = dojo.global;
var _document = dojo.doc;
if(_document.selection){ // IE
return !_document.selection.createRange().text; // Boolean
}else if(_window.getSelection){
var selection = _window.getSelection();
if(dojo.isString(selection)){ // Safari
return !selection; // Boolean
}else{ // Mozilla/W3
return selection.isCollapsed || !selection.toString(); // Boolean
}
}
},
 
getBookmark: function(){
// summary: Retrieves a bookmark that can be used with moveToBookmark to return to the same range
var bookmark, selection = dojo.doc.selection;
if(selection){ // IE
var range = selection.createRange();
if(selection.type.toUpperCase()=='CONTROL'){
bookmark = range.length ? dojo._toArray(range) : null;
}else{
bookmark = range.getBookmark();
}
}else{
if(dojo.global.getSelection){
selection = dojo.global.getSelection();
if(selection){
var range = selection.getRangeAt(0);
bookmark = range.cloneRange();
}
}else{
console.debug("No idea how to store the current selection for this browser!");
}
}
return bookmark; // Array
},
 
moveToBookmark: function(/*Object*/bookmark){
// summary: Moves current selection to a bookmark
// bookmark: this should be a returned object from dojo.html.selection.getBookmark()
var _document = dojo.doc;
if(_document.selection){ // IE
var range;
if(dojo.isArray(bookmark)){
range = _document.body.createControlRange();
dojo.forEach(bookmark, range.addElement);
}else{
range = _document.selection.createRange();
range.moveToBookmark(bookmark);
}
range.select();
}else{ //Moz/W3C
var selection = dojo.global.getSelection && dojo.global.getSelection();
if(selection && selection.removeAllRanges){
selection.removeAllRanges();
selection.addRange(bookmark);
}else{
console.debug("No idea how to restore selection for this browser!");
}
}
},
 
getFocus: function(/*Widget*/menu, /*Window*/ openedForWindow){
// summary:
// Returns the current focus and selection.
// Called when a popup appears (either a top level menu or a dialog),
// or when a toolbar/menubar receives focus
//
// menu:
// the menu that's being opened
//
// openedForWindow:
// iframe in which menu was opened
//
// returns:
// a handle to restore focus/selection
 
return {
// Node to return focus to
node: menu && dojo.isDescendant(dijit._curFocus, menu.domNode) ? dijit._prevFocus : dijit._curFocus,
 
// Previously selected text
bookmark:
!dojo.withGlobal(openedForWindow||dojo.global, dijit.isCollapsed) ?
dojo.withGlobal(openedForWindow||dojo.global, dijit.getBookmark) :
null,
 
openedForWindow: openedForWindow
}; // Object
},
 
focus: function(/*Object || DomNode */ handle){
// summary:
// Sets the focused node and the selection according to argument.
// To set focus to an iframe's content, pass in the iframe itself.
// handle:
// object returned by get(), or a DomNode
 
if(!handle){ return; }
 
var node = "node" in handle ? handle.node : handle, // because handle is either DomNode or a composite object
bookmark = handle.bookmark,
openedForWindow = handle.openedForWindow;
 
// Set the focus
// Note that for iframe's we need to use the <iframe> to follow the parentNode chain,
// but we need to set focus to iframe.contentWindow
if(node){
var focusNode = (node.tagName.toLowerCase()=="iframe") ? node.contentWindow : node;
if(focusNode && focusNode.focus){
try{
// Gecko throws sometimes if setting focus is impossible,
// node not displayed or something like that
focusNode.focus();
}catch(e){/*quiet*/}
}
dijit._onFocusNode(node);
}
 
// set the selection
// do not need to restore if current selection is not empty
// (use keyboard to select a menu item)
if(bookmark && dojo.withGlobal(openedForWindow||dojo.global, dijit.isCollapsed)){
if(openedForWindow){
openedForWindow.focus();
}
try{
dojo.withGlobal(openedForWindow||dojo.global, moveToBookmark, null, [bookmark]);
}catch(e){
/*squelch IE internal error, see http://trac.dojotoolkit.org/ticket/1984 */
}
}
},
 
// List of currently active widgets (focused widget and it's ancestors)
_activeStack: [],
 
registerWin: function(/*Window?*/targetWindow){
// summary:
// Registers listeners on the specified window (either the main
// window or an iframe) to detect when the user has clicked somewhere.
// Anyone that creates an iframe should call this function.
 
if(!targetWindow){
targetWindow = window;
}
 
dojo.connect(targetWindow.document, "onmousedown", null, function(evt){
dijit._justMouseDowned = true;
setTimeout(function(){ dijit._justMouseDowned = false; }, 0);
dijit._onTouchNode(evt.target||evt.srcElement);
});
//dojo.connect(targetWindow, "onscroll", ???);
 
// Listen for blur and focus events on targetWindow's body
var body = targetWindow.document.body || targetWindow.document.getElementsByTagName("body")[0];
if(body){
if(dojo.isIE){
body.attachEvent('onactivate', function(evt){
if(evt.srcElement.tagName.toLowerCase() != "body"){
dijit._onFocusNode(evt.srcElement);
}
});
body.attachEvent('ondeactivate', function(evt){ dijit._onBlurNode(evt.srcElement); });
}else{
body.addEventListener('focus', function(evt){ dijit._onFocusNode(evt.target); }, true);
body.addEventListener('blur', function(evt){ dijit._onBlurNode(evt.target); }, true);
}
}
body = null; // prevent memory leak (apparent circular reference via closure)
},
 
_onBlurNode: function(/*DomNode*/ node){
// summary:
// Called when focus leaves a node.
// Usually ignored, _unless_ it *isn't* follwed by touching another node,
// which indicates that we tabbed off the last field on the page,
// in which case every widget is marked inactive
dijit._prevFocus = dijit._curFocus;
dijit._curFocus = null;
 
var w = dijit.getEnclosingWidget(node);
if (w && w._setStateClass){
w._focused = false;
w._setStateClass();
}
if(dijit._justMouseDowned){
// the mouse down caused a new widget to be marked as active; this blur event
// is coming late, so ignore it.
return;
}
 
// if the blur event isn't followed by a focus event then mark all widgets as inactive.
if(dijit._clearActiveWidgetsTimer){
clearTimeout(dijit._clearActiveWidgetsTimer);
}
dijit._clearActiveWidgetsTimer = setTimeout(function(){
delete dijit._clearActiveWidgetsTimer; dijit._setStack([]); }, 100);
},
 
_onTouchNode: function(/*DomNode*/ node){
// summary
// Callback when node is focused or mouse-downed
 
// ignore the recent blurNode event
if(dijit._clearActiveWidgetsTimer){
clearTimeout(dijit._clearActiveWidgetsTimer);
delete dijit._clearActiveWidgetsTimer;
}
 
// compute stack of active widgets (ex: ComboButton --> Menu --> MenuItem)
var newStack=[];
try{
while(node){
if(node.dijitPopupParent){
node=dijit.byId(node.dijitPopupParent).domNode;
}else if(node.tagName && node.tagName.toLowerCase()=="body"){
// is this the root of the document or just the root of an iframe?
if(node===dojo.body()){
// node is the root of the main document
break;
}
// otherwise, find the iframe this node refers to (can't access it via parentNode,
// need to do this trick instead) and continue tracing up the document
node=dojo.query("iframe").filter(function(iframe){ return iframe.contentDocument.body===node; })[0];
}else{
var id = node.getAttribute && node.getAttribute("widgetId");
if(id){
newStack.unshift(id);
}
node=node.parentNode;
}
}
}catch(e){ /* squelch */ }
 
dijit._setStack(newStack);
},
 
_onFocusNode: function(/*DomNode*/ node){
// summary
// Callback when node is focused
if(node && node.tagName && node.tagName.toLowerCase() == "body"){
return;
}
dijit._onTouchNode(node);
if(node==dijit._curFocus){ return; }
dijit._prevFocus = dijit._curFocus;
dijit._curFocus = node;
dojo.publish("focusNode", [node]);
 
// handle focus/blur styling
var w = dijit.getEnclosingWidget(node);
if (w && w._setStateClass){
w._focused = true;
w._setStateClass();
}
},
 
_setStack: function(newStack){
// summary
// The stack of active widgets has changed. Send out appropriate events and record new stack
 
var oldStack = dijit._activeStack;
dijit._activeStack = newStack;
 
// compare old stack to new stack to see how many elements they have in common
for(var nCommon=0; nCommon<Math.min(oldStack.length, newStack.length); nCommon++){
if(oldStack[nCommon] != newStack[nCommon]){
break;
}
}
 
// for all elements that have gone out of focus, send blur event
for(var i=oldStack.length-1; i>=nCommon; i--){
var widget = dijit.byId(oldStack[i]);
if(widget){
dojo.publish("widgetBlur", [widget]);
if(widget._onBlur){
widget._onBlur();
}
}
}
 
// for all element that have come into focus, send focus event
for(var i=nCommon; i<newStack.length; i++){
var widget = dijit.byId(newStack[i]);
if(widget){
dojo.publish("widgetFocus", [widget]);
if(widget._onFocus){
widget._onFocus();
}
}
}
}
});
 
// register top window and all the iframes it contains
dojo.addOnLoad(dijit.registerWin);
 
}
 
if(!dojo._hasResource["dijit._base.manager"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit._base.manager"] = true;
dojo.provide("dijit._base.manager");
 
dojo.declare("dijit.WidgetSet", null, {
constructor: function(){
// summary:
// A set of widgets indexed by id
this._hash={};
},
 
add: function(/*Widget*/ widget){
if(this._hash[widget.id]){
throw new Error("Tried to register widget with id==" + widget.id + " but that id is already registered");
}
this._hash[widget.id]=widget;
},
 
remove: function(/*String*/ id){
delete this._hash[id];
},
 
forEach: function(/*Function*/ func){
for(var id in this._hash){
func(this._hash[id]);
}
},
 
filter: function(/*Function*/ filter){
var res = new dijit.WidgetSet();
this.forEach(function(widget){
if(filter(widget)){ res.add(widget); }
});
return res; // dijit.WidgetSet
},
 
byId: function(/*String*/ id){
return this._hash[id];
},
 
byClass: function(/*String*/ cls){
return this.filter(function(widget){ return widget.declaredClass==cls; }); // dijit.WidgetSet
}
});
 
// registry: list of all widgets on page
dijit.registry = new dijit.WidgetSet();
 
dijit._widgetTypeCtr = {};
 
dijit.getUniqueId = function(/*String*/widgetType){
// summary
// Generates a unique id for a given widgetType
 
var id;
do{
id = widgetType + "_" +
(dijit._widgetTypeCtr[widgetType] !== undefined ?
++dijit._widgetTypeCtr[widgetType] : dijit._widgetTypeCtr[widgetType] = 0);
}while(dijit.byId(id));
return id; // String
};
 
 
if(dojo.isIE){
// Only run this for IE because we think it's only necessary in that case,
// and because it causes problems on FF. See bug #3531 for details.
dojo.addOnUnload(function(){
dijit.registry.forEach(function(widget){ widget.destroy(); });
});
}
 
dijit.byId = function(/*String|Widget*/id){
// summary:
// Returns a widget by its id, or if passed a widget, no-op (like dojo.byId())
return (dojo.isString(id)) ? dijit.registry.byId(id) : id; // Widget
};
 
dijit.byNode = function(/* DOMNode */ node){
// summary:
// Returns the widget as referenced by node
return dijit.registry.byId(node.getAttribute("widgetId")); // Widget
};
 
dijit.getEnclosingWidget = function(/* DOMNode */ node){
// summary:
// Returns the widget whose dom tree contains node or null if
// the node is not contained within the dom tree of any widget
while(node){
if(node.getAttribute && node.getAttribute("widgetId")){
return dijit.registry.byId(node.getAttribute("widgetId"));
}
node = node.parentNode;
}
return null;
};
 
}
 
if(!dojo._hasResource["dijit._base.place"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit._base.place"] = true;
dojo.provide("dijit._base.place");
 
// ported from dojo.html.util
 
dijit.getViewport = function(){
// summary
// Returns the dimensions and scroll position of the viewable area of a browser window
 
var _window = dojo.global;
var _document = dojo.doc;
 
// get viewport size
var w = 0, h = 0;
if(dojo.isMozilla){
// mozilla
// _window.innerHeight includes the height taken by the scroll bar
// clientHeight is ideal but has DTD issues:
// #4539: FF reverses the roles of body.clientHeight/Width and documentElement.clientHeight/Width based on the DTD!
// check DTD to see whether body or documentElement returns the viewport dimensions using this algorithm:
var minw, minh, maxw, maxh;
if(_document.body.clientWidth>_document.documentElement.clientWidth){
minw = _document.documentElement.clientWidth;
maxw = _document.body.clientWidth;
}else{
maxw = _document.documentElement.clientWidth;
minw = _document.body.clientWidth;
}
if(_document.body.clientHeight>_document.documentElement.clientHeight){
minh = _document.documentElement.clientHeight;
maxh = _document.body.clientHeight;
}else{
maxh = _document.documentElement.clientHeight;
minh = _document.body.clientHeight;
}
w = (maxw > _window.innerWidth) ? minw : maxw;
h = (maxh > _window.innerHeight) ? minh : maxh;
}else if(!dojo.isOpera && _window.innerWidth){
//in opera9, dojo.body().clientWidth should be used, instead
//of window.innerWidth/document.documentElement.clientWidth
//so we have to check whether it is opera
w = _window.innerWidth;
h = _window.innerHeight;
}else if(dojo.isIE && _document.documentElement && _document.documentElement.clientHeight){
w = _document.documentElement.clientWidth;
h = _document.documentElement.clientHeight;
}else if(dojo.body().clientWidth){
// IE5, Opera
w = dojo.body().clientWidth;
h = dojo.body().clientHeight;
}
 
// get scroll position
var scroll = dojo._docScroll();
 
return { w: w, h: h, l: scroll.x, t: scroll.y }; // object
};
 
dijit.placeOnScreen = function(
/* DomNode */ node,
/* Object */ pos,
/* Object */ corners,
/* boolean? */ tryOnly){
// summary:
// Keeps 'node' in the visible area of the screen while trying to
// place closest to pos.x, pos.y. The input coordinates are
// expected to be the desired document position.
//
// Set which corner(s) you want to bind to, such as
//
// placeOnScreen(node, {x: 10, y: 20}, ["TR", "BL"])
//
// The desired x/y will be treated as the topleft(TL)/topright(TR) or
// BottomLeft(BL)/BottomRight(BR) corner of the node. Each corner is tested
// and if a perfect match is found, it will be used. Otherwise, it goes through
// all of the specified corners, and choose the most appropriate one.
//
// NOTE: node is assumed to be absolutely or relatively positioned.
 
var choices = dojo.map(corners, function(corner){ return { corner: corner, pos: pos }; });
 
return dijit._place(node, choices);
}
 
dijit._place = function(/*DomNode*/ node, /* Array */ choices, /* Function */ layoutNode){
// summary:
// Given a list of spots to put node, put it at the first spot where it fits,
// of if it doesn't fit anywhere then the place with the least overflow
// choices: Array
// Array of elements like: {corner: 'TL', pos: {x: 10, y: 20} }
// Above example says to put the top-left corner of the node at (10,20)
// layoutNode: Function(node, orient)
// for things like tooltip, they are displayed differently (and have different dimensions)
// based on their orientation relative to the parent. This adjusts the popup based on orientation.
 
// get {x: 10, y: 10, w: 100, h:100} type obj representing position of
// viewport over document
var view = dijit.getViewport();
 
// This won't work if the node is inside a <div style="position: relative">,
// so reattach it to document.body. (Otherwise, the positioning will be wrong
// and also it might get cutoff)
if(!node.parentNode || String(node.parentNode.tagName).toLowerCase() != "body"){
dojo.body().appendChild(node);
}
 
var best=null;
for(var i=0; i<choices.length; i++){
var corner = choices[i].corner;
var pos = choices[i].pos;
 
// configure node to be displayed in given position relative to button
// (need to do this in order to get an accurate size for the node, because
// a tooltips size changes based on position, due to triangle)
if(layoutNode){
layoutNode(corner);
}
 
// get node's size
var oldDisplay = node.style.display;
var oldVis = node.style.visibility;
node.style.visibility = "hidden";
node.style.display = "";
var mb = dojo.marginBox(node);
node.style.display = oldDisplay;
node.style.visibility = oldVis;
 
// coordinates and size of node with specified corner placed at pos,
// and clipped by viewport
var startX = (corner.charAt(1)=='L' ? pos.x : Math.max(view.l, pos.x - mb.w)),
startY = (corner.charAt(0)=='T' ? pos.y : Math.max(view.t, pos.y - mb.h)),
endX = (corner.charAt(1)=='L' ? Math.min(view.l+view.w, startX+mb.w) : pos.x),
endY = (corner.charAt(0)=='T' ? Math.min(view.t+view.h, startY+mb.h) : pos.y),
width = endX-startX,
height = endY-startY,
overflow = (mb.w-width) + (mb.h-height);
 
if(best==null || overflow<best.overflow){
best = {
corner: corner,
aroundCorner: choices[i].aroundCorner,
x: startX,
y: startY,
w: width,
h: height,
overflow: overflow
};
}
if(overflow==0){
break;
}
}
 
node.style.left = best.x + "px";
node.style.top = best.y + "px";
return best;
}
 
dijit.placeOnScreenAroundElement = function(
/* DomNode */ node,
/* DomNode */ aroundNode,
/* Object */ aroundCorners,
/* Function */ layoutNode){
 
// summary
// Like placeOnScreen, except it accepts aroundNode instead of x,y
// and attempts to place node around it. Uses margin box dimensions.
//
// aroundCorners
// specify Which corner of aroundNode should be
// used to place the node => which corner(s) of node to use (see the
// corners parameter in dijit.placeOnScreen)
// e.g. {'TL': 'BL', 'BL': 'TL'}
//
// layoutNode: Function(node, orient)
// for things like tooltip, they are displayed differently (and have different dimensions)
// based on their orientation relative to the parent. This adjusts the popup based on orientation.
 
 
// get coordinates of aroundNode
aroundNode = dojo.byId(aroundNode);
var oldDisplay = aroundNode.style.display;
aroundNode.style.display="";
// #3172: use the slightly tighter border box instead of marginBox
var aroundNodeW = aroundNode.offsetWidth; //mb.w;
var aroundNodeH = aroundNode.offsetHeight; //mb.h;
var aroundNodePos = dojo.coords(aroundNode, true);
aroundNode.style.display=oldDisplay;
 
// Generate list of possible positions for node
var choices = [];
for(var nodeCorner in aroundCorners){
choices.push( {
aroundCorner: nodeCorner,
corner: aroundCorners[nodeCorner],
pos: {
x: aroundNodePos.x + (nodeCorner.charAt(1)=='L' ? 0 : aroundNodeW),
y: aroundNodePos.y + (nodeCorner.charAt(0)=='T' ? 0 : aroundNodeH)
}
});
}
 
return dijit._place(node, choices, layoutNode);
}
 
}
 
if(!dojo._hasResource["dijit._base.window"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit._base.window"] = true;
dojo.provide("dijit._base.window");
 
dijit.getDocumentWindow = function(doc){
// summary
// Get window object associated with document doc
 
// With Safari, there is not way to retrieve the window from the document, so we must fix it.
if(dojo.isSafari && !doc._parentWindow){
/*
This is a Safari specific function that fix the reference to the parent
window from the document object.
*/
var fix=function(win){
win.document._parentWindow=win;
for(var i=0; i<win.frames.length; i++){
fix(win.frames[i]);
}
}
fix(window.top);
}
 
//In some IE versions (at least 6.0), document.parentWindow does not return a
//reference to the real window object (maybe a copy), so we must fix it as well
//We use IE specific execScript to attach the real window reference to
//document._parentWindow for later use
if(dojo.isIE && window !== document.parentWindow && !doc._parentWindow){
/*
In IE 6, only the variable "window" can be used to connect events (others
may be only copies).
*/
doc.parentWindow.execScript("document._parentWindow = window;", "Javascript");
//to prevent memory leak, unset it after use
//another possibility is to add an onUnload handler which seems overkill to me (liucougar)
var win = doc._parentWindow;
doc._parentWindow = null;
return win; // Window
}
 
return doc._parentWindow || doc.parentWindow || doc.defaultView; // Window
}
 
}
 
if(!dojo._hasResource["dijit._base.popup"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit._base.popup"] = true;
dojo.provide("dijit._base.popup");
 
 
 
 
 
dijit.popup = new function(){
// summary:
// This class is used to show/hide widgets as popups.
//
 
var stack = [],
beginZIndex=1000,
idGen = 1;
 
this.open = function(/*Object*/ args){
// summary:
// Popup the widget at the specified position
//
// args: Object
// popup: Widget
// widget to display,
// parent: Widget
// the button etc. that is displaying this popup
// around: DomNode
// DOM node (typically a button); place popup relative to this node
// orient: Object
// structure specifying possible positions of popup relative to "around" node
// onCancel: Function
// callback when user has canceled the popup by
// 1. hitting ESC or
// 2. by using the popup widget's proprietary cancel mechanism (like a cancel button in a dialog);
// ie: whenever popupWidget.onCancel() is called, args.onCancel is called
// onClose: Function
// callback whenever this popup is closed
// onExecute: Function
// callback when user "executed" on the popup/sub-popup by selecting a menu choice, etc. (top menu only)
//
// examples:
// 1. opening at the mouse position
// dijit.popup.open({popup: menuWidget, x: evt.pageX, y: evt.pageY});
// 2. opening the widget as a dropdown
// dijit.popup.open({parent: this, popup: menuWidget, around: this.domNode, onClose: function(){...} });
//
// Note that whatever widget called dijit.popup.open() should also listen to it's own _onBlur callback
// (fired from _base/focus.js) to know that focus has moved somewhere else and thus the popup should be closed.
 
var widget = args.popup,
orient = args.orient || {'BL':'TL', 'TL':'BL'},
around = args.around,
id = (args.around && args.around.id) ? (args.around.id+"_dropdown") : ("popup_"+idGen++);
 
// make wrapper div to hold widget and possibly hold iframe behind it.
// we can't attach the iframe as a child of the widget.domNode because
// widget.domNode might be a <table>, <ul>, etc.
var wrapper = dojo.doc.createElement("div");
wrapper.id = id;
wrapper.className="dijitPopup";
wrapper.style.zIndex = beginZIndex + stack.length;
wrapper.style.visibility = "hidden";
if(args.parent){
wrapper.dijitPopupParent=args.parent.id;
}
dojo.body().appendChild(wrapper);
 
widget.domNode.style.display="";
wrapper.appendChild(widget.domNode);
 
var iframe = new dijit.BackgroundIframe(wrapper);
 
// position the wrapper node
var best = around ?
dijit.placeOnScreenAroundElement(wrapper, around, orient, widget.orient ? dojo.hitch(widget, "orient") : null) :
dijit.placeOnScreen(wrapper, args, orient == 'R' ? ['TR','BR','TL','BL'] : ['TL','BL','TR','BR']);
 
wrapper.style.visibility = "visible";
// TODO: use effects to fade in wrapper
 
var handlers = [];
 
// Compute the closest ancestor popup that's *not* a child of another popup.
// Ex: For a TooltipDialog with a button that spawns a tree of menus, find the popup of the button.
function getTopPopup(){
for(var pi=stack.length-1; pi > 0 && stack[pi].parent === stack[pi-1].widget; pi--);
return stack[pi];
}
 
// provide default escape and tab key handling
// (this will work for any widget, not just menu)
handlers.push(dojo.connect(wrapper, "onkeypress", this, function(evt){
if(evt.keyCode == dojo.keys.ESCAPE && args.onCancel){
args.onCancel();
}else if(evt.keyCode == dojo.keys.TAB){
dojo.stopEvent(evt);
var topPopup = getTopPopup();
if(topPopup && topPopup.onCancel){
topPopup.onCancel();
}
}
}));
 
// watch for cancel/execute events on the popup and notify the caller
// (for a menu, "execute" means clicking an item)
if(widget.onCancel){
handlers.push(dojo.connect(widget, "onCancel", null, args.onCancel));
}
 
handlers.push(dojo.connect(widget, widget.onExecute ? "onExecute" : "onChange", null, function(){
var topPopup = getTopPopup();
if(topPopup && topPopup.onExecute){
topPopup.onExecute();
}
}));
 
stack.push({
wrapper: wrapper,
iframe: iframe,
widget: widget,
parent: args.parent,
onExecute: args.onExecute,
onCancel: args.onCancel,
onClose: args.onClose,
handlers: handlers
});
 
if(widget.onOpen){
widget.onOpen(best);
}
 
return best;
};
 
this.close = function(/*Widget*/ popup){
// summary:
// Close specified popup and any popups that it parented
while(dojo.some(stack, function(elem){return elem.widget == popup;})){
var top = stack.pop(),
wrapper = top.wrapper,
iframe = top.iframe,
widget = top.widget,
onClose = top.onClose;
if(widget.onClose){
widget.onClose();
}
dojo.forEach(top.handlers, dojo.disconnect);
// #2685: check if the widget still has a domNode so ContentPane can change its URL without getting an error
if(!widget||!widget.domNode){ return; }
dojo.style(widget.domNode, "display", "none");
dojo.body().appendChild(widget.domNode);
iframe.destroy();
dojo._destroyElement(wrapper);
if(onClose){
onClose();
}
}
};
}();
 
dijit._frames = new function(){
// summary: cache of iframes
var queue = [];
 
this.pop = function(){
var iframe;
if(queue.length){
iframe = queue.pop();
iframe.style.display="";
}else{
if(dojo.isIE){
var html="<iframe src='javascript:\"\"'"
+ " style='position: absolute; left: 0px; top: 0px;"
+ "z-index: -1; filter:Alpha(Opacity=\"0\");'>";
iframe = dojo.doc.createElement(html);
}else{
var iframe = dojo.doc.createElement("iframe");
iframe.src = 'javascript:""';
iframe.className = "dijitBackgroundIframe";
}
iframe.tabIndex = -1; // Magic to prevent iframe from getting focus on tab keypress - as style didnt work.
dojo.body().appendChild(iframe);
}
return iframe;
};
 
this.push = function(iframe){
iframe.style.display="";
if(dojo.isIE){
iframe.style.removeExpression("width");
iframe.style.removeExpression("height");
}
queue.push(iframe);
}
}();
 
// fill the queue
if(dojo.isIE && dojo.isIE < 7){
dojo.addOnLoad(function(){
var f = dijit._frames;
dojo.forEach([f.pop()], f.push);
});
}
 
 
dijit.BackgroundIframe = function(/* DomNode */node){
// summary:
// For IE z-index schenanigans. id attribute is required.
//
// description:
// new dijit.BackgroundIframe(node)
// Makes a background iframe as a child of node, that fills
// area (and position) of node
 
if(!node.id){ throw new Error("no id"); }
if((dojo.isIE && dojo.isIE < 7) || (dojo.isFF && dojo.isFF < 3 && dojo.hasClass(dojo.body(), "dijit_a11y"))){
var iframe = dijit._frames.pop();
node.appendChild(iframe);
if(dojo.isIE){
iframe.style.setExpression("width", "document.getElementById('" + node.id + "').offsetWidth");
iframe.style.setExpression("height", "document.getElementById('" + node.id + "').offsetHeight");
}
this.iframe = iframe;
}
};
 
dojo.extend(dijit.BackgroundIframe, {
destroy: function(){
// summary: destroy the iframe
if(this.iframe){
dijit._frames.push(this.iframe);
delete this.iframe;
}
}
});
 
}
 
if(!dojo._hasResource["dijit._base.scroll"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit._base.scroll"] = true;
dojo.provide("dijit._base.scroll");
 
dijit.scrollIntoView = function(/* DomNode */node){
// summary
// Scroll the passed node into view, if it is not.
 
// don't rely on that node.scrollIntoView works just because the function is there
// it doesnt work in Konqueror or Opera even though the function is there and probably
// not safari either
// dont like browser sniffs implementations but sometimes you have to use it
if(dojo.isIE){
//only call scrollIntoView if there is a scrollbar for this menu,
//otherwise, scrollIntoView will scroll the window scrollbar
if(dojo.marginBox(node.parentNode).h <= node.parentNode.scrollHeight){ //PORT was getBorderBox
node.scrollIntoView(false);
}
}else if(dojo.isMozilla){
node.scrollIntoView(false);
}else{
var parent = node.parentNode;
var parentBottom = parent.scrollTop + dojo.marginBox(parent).h; //PORT was getBorderBox
var nodeBottom = node.offsetTop + dojo.marginBox(node).h;
if(parentBottom < nodeBottom){
parent.scrollTop += (nodeBottom - parentBottom);
}else if(parent.scrollTop > node.offsetTop){
parent.scrollTop -= (parent.scrollTop - node.offsetTop);
}
}
};
 
}
 
if(!dojo._hasResource["dijit._base.sniff"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit._base.sniff"] = true;
dojo.provide("dijit._base.sniff");
 
// ported from dojo.html.applyBrowserClass (style.js)
 
// summary:
// Applies pre-set class names based on browser & version to the
// top-level HTML node. Simply doing a require on this module will
// establish this CSS. Modified version of Morris' CSS hack.
(function(){
var d = dojo;
var ie = d.isIE;
var opera = d.isOpera;
var maj = Math.floor;
var classes = {
dj_ie: ie,
// dj_ie55: ie == 5.5,
dj_ie6: maj(ie) == 6,
dj_ie7: maj(ie) == 7,
dj_iequirks: ie && d.isQuirks,
// NOTE: Opera not supported by dijit
dj_opera: opera,
dj_opera8: maj(opera) == 8,
dj_opera9: maj(opera) == 9,
dj_khtml: d.isKhtml,
dj_safari: d.isSafari,
dj_gecko: d.isMozilla
}; // no dojo unsupported browsers
 
for(var p in classes){
if(classes[p]){
var html = dojo.doc.documentElement; //TODO browser-specific DOM magic needed?
if(html.className){
html.className += " " + p;
}else{
html.className = p;
}
}
}
})();
 
}
 
if(!dojo._hasResource["dijit._base.bidi"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit._base.bidi"] = true;
dojo.provide("dijit._base.bidi");
 
// summary: applies a class to the top of the document for right-to-left stylesheet rules
 
dojo.addOnLoad(function(){
if(!dojo._isBodyLtr()){
dojo.addClass(dojo.body(), "dijitRtl");
}
});
 
}
 
if(!dojo._hasResource["dijit._base.typematic"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit._base.typematic"] = true;
dojo.provide("dijit._base.typematic");
 
dijit.typematic = {
// summary:
// These functions are used to repetitively call a user specified callback
// method when a specific key or mouse click over a specific DOM node is
// held down for a specific amount of time.
// Only 1 such event is allowed to occur on the browser page at 1 time.
 
_fireEventAndReload: function(){
this._timer = null;
this._callback(++this._count, this._node, this._evt);
this._currentTimeout = (this._currentTimeout < 0) ? this._initialDelay : ((this._subsequentDelay > 1) ? this._subsequentDelay : Math.round(this._currentTimeout * this._subsequentDelay));
this._timer = setTimeout(dojo.hitch(this, "_fireEventAndReload"), this._currentTimeout);
},
 
trigger: function(/*Event*/ evt, /* Object */ _this, /*DOMNode*/ node, /* Function */ callback, /* Object */ obj, /* Number */ subsequentDelay, /* Number */ initialDelay){
// summary:
// Start a timed, repeating callback sequence.
// If already started, the function call is ignored.
// This method is not normally called by the user but can be
// when the normal listener code is insufficient.
// Parameters:
// evt: key or mouse event object to pass to the user callback
// _this: pointer to the user's widget space.
// node: the DOM node object to pass the the callback function
// callback: function to call until the sequence is stopped called with 3 parameters:
// count: integer representing number of repeated calls (0..n) with -1 indicating the iteration has stopped
// node: the DOM node object passed in
// evt: key or mouse event object
// obj: user space object used to uniquely identify each typematic sequence
// subsequentDelay: if > 1, the number of milliseconds until the 3->n events occur
// or else the fractional time multiplier for the next event's delay, default=0.9
// initialDelay: the number of milliseconds until the 2nd event occurs, default=500ms
if(obj != this._obj){
this.stop();
this._initialDelay = initialDelay || 500;
this._subsequentDelay = subsequentDelay || 0.90;
this._obj = obj;
this._evt = evt;
this._node = node;
this._currentTimeout = -1;
this._count = -1;
this._callback = dojo.hitch(_this, callback);
this._fireEventAndReload();
}
},
 
stop: function(){
// summary:
// Stop an ongoing timed, repeating callback sequence.
if(this._timer){
clearTimeout(this._timer);
this._timer = null;
}
if(this._obj){
this._callback(-1, this._node, this._evt);
this._obj = null;
}
},
 
addKeyListener: function(/*DOMNode*/ node, /*Object*/ keyObject, /*Object*/ _this, /*Function*/ callback, /*Number*/ subsequentDelay, /*Number*/ initialDelay){
// summary: Start listening for a specific typematic key.
// keyObject: an object defining the key to listen for.
// key: (mandatory) the keyCode (number) or character (string) to listen for.
// ctrlKey: desired ctrl key state to initiate the calback sequence:
// pressed (true)
// released (false)
// either (unspecified)
// altKey: same as ctrlKey but for the alt key
// shiftKey: same as ctrlKey but for the shift key
// See the trigger method for other parameters.
// Returns an array of dojo.connect handles
return [
dojo.connect(node, "onkeypress", this, function(evt){
if(evt.keyCode == keyObject.keyCode && (!keyObject.charCode || keyObject.charCode == evt.charCode) &&
(keyObject.ctrlKey === undefined || keyObject.ctrlKey == evt.ctrlKey) &&
(keyObject.altKey === undefined || keyObject.altKey == evt.ctrlKey) &&
(keyObject.shiftKey === undefined || keyObject.shiftKey == evt.ctrlKey)){
dojo.stopEvent(evt);
dijit.typematic.trigger(keyObject, _this, node, callback, keyObject, subsequentDelay, initialDelay);
}else if(dijit.typematic._obj == keyObject){
dijit.typematic.stop();
}
}),
dojo.connect(node, "onkeyup", this, function(evt){
if(dijit.typematic._obj == keyObject){
dijit.typematic.stop();
}
})
];
},
 
addMouseListener: function(/*DOMNode*/ node, /*Object*/ _this, /*Function*/ callback, /*Number*/ subsequentDelay, /*Number*/ initialDelay){
// summary: Start listening for a typematic mouse click.
// See the trigger method for other parameters.
// Returns an array of dojo.connect handles
var dc = dojo.connect;
return [
dc(node, "mousedown", this, function(evt){
dojo.stopEvent(evt);
dijit.typematic.trigger(evt, _this, node, callback, node, subsequentDelay, initialDelay);
}),
dc(node, "mouseup", this, function(evt){
dojo.stopEvent(evt);
dijit.typematic.stop();
}),
dc(node, "mouseout", this, function(evt){
dojo.stopEvent(evt);
dijit.typematic.stop();
}),
dc(node, "mousemove", this, function(evt){
dojo.stopEvent(evt);
}),
dc(node, "dblclick", this, function(evt){
dojo.stopEvent(evt);
if(dojo.isIE){
dijit.typematic.trigger(evt, _this, node, callback, node, subsequentDelay, initialDelay);
setTimeout(dijit.typematic.stop, 50);
}
})
];
},
 
addListener: function(/*Node*/ mouseNode, /*Node*/ keyNode, /*Object*/ keyObject, /*Object*/ _this, /*Function*/ callback, /*Number*/ subsequentDelay, /*Number*/ initialDelay){
// summary: Start listening for a specific typematic key and mouseclick.
// This is a thin wrapper to addKeyListener and addMouseListener.
// mouseNode: the DOM node object to listen on for mouse events.
// keyNode: the DOM node object to listen on for key events.
// See the addMouseListener and addKeyListener methods for other parameters.
// Returns an array of dojo.connect handles
return this.addKeyListener(keyNode, keyObject, _this, callback, subsequentDelay, initialDelay).concat(
this.addMouseListener(mouseNode, _this, callback, subsequentDelay, initialDelay));
}
};
 
}
 
if(!dojo._hasResource["dijit._base.wai"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit._base.wai"] = true;
dojo.provide("dijit._base.wai");
 
dijit.wai = {
onload: function(){
// summary:
// Function that detects if we are in high-contrast mode or not,
// and sets up a timer to periodically confirm the value.
// figure out the background-image style property
// and apply that to the image.src property.
// description:
// This must be a named function and not an anonymous
// function, so that the widget parsing code can make sure it
// registers its onload function after this function.
// DO NOT USE "this" within this function.
 
// create div for testing if high contrast mode is on or images are turned off
var div = document.createElement("div");
div.id = "a11yTestNode";
div.style.cssText = 'border: 1px solid;'
+ 'border-color:red green;'
+ 'position: absolute;'
+ 'height: 5px;'
+ 'top: -999px;'
+ 'background-image: url("' + dojo.moduleUrl("dijit", "form/templates/blank.gif") + '");';
dojo.body().appendChild(div);
 
// test it
function check(){
var cs = dojo.getComputedStyle(div);
if(cs){
var bkImg = cs.backgroundImage;
var needsA11y = (cs.borderTopColor==cs.borderRightColor) || (bkImg != null && (bkImg == "none" || bkImg == "url(invalid-url:)" ));
dojo[needsA11y ? "addClass" : "removeClass"](dojo.body(), "dijit_a11y");
}
}
check();
if(dojo.isIE){
setInterval(check, 4000);
}
}
};
 
// Test if computer is in high contrast mode.
// Make sure the a11y test runs first, before widgets are instantiated.
if(dojo.isIE || dojo.isMoz){ // NOTE: checking in Safari messes things up
dojo._loaders.unshift(dijit.wai.onload);
}
 
dojo.mixin(dijit,
{
hasWaiRole: function(/*Element*/ elem){
// Summary: Return true if elem has a role attribute and false if not.
if(elem.hasAttribute){
return elem.hasAttribute("role");
}else{
return elem.getAttribute("role") ? true : false;
}
},
 
getWaiRole: function(/*Element*/ elem){
// Summary: Return the role of elem or an empty string if
// elem does not have a role.
var value = elem.getAttribute("role");
if(value){
var prefixEnd = value.indexOf(":");
return prefixEnd == -1 ? value : value.substring(prefixEnd+1);
}else{
return "";
}
},
 
setWaiRole: function(/*Element*/ elem, /*String*/ role){
// Summary: Set the role on elem. On Firefox 2 and below, "wairole:" is
// prepended to the provided role value.
if(dojo.isFF && dojo.isFF < 3){
elem.setAttribute("role", "wairole:"+role);
}else{
elem.setAttribute("role", role);
}
},
 
removeWaiRole: function(/*Element*/ elem){
// Summary: Removes the role attribute from elem.
elem.removeAttribute("role");
},
 
hasWaiState: function(/*Element*/ elem, /*String*/ state){
// Summary: Return true if elem has a value for the given state and
// false if it does not.
// On Firefox 2 and below, we check for an attribute in namespace
// "http://www.w3.org/2005/07/aaa" with a name of the given state.
// On all other browsers, we check for an attribute called
// "aria-"+state.
if(dojo.isFF && dojo.isFF < 3){
return elem.hasAttributeNS("http://www.w3.org/2005/07/aaa", state);
}else{
if(elem.hasAttribute){
return elem.hasAttribute("aria-"+state);
}else{
return elem.getAttribute("aria-"+state) ? true : false;
}
}
},
 
getWaiState: function(/*Element*/ elem, /*String*/ state){
// Summary: Return the value of the requested state on elem
// or an empty string if elem has no value for state.
// On Firefox 2 and below, we check for an attribute in namespace
// "http://www.w3.org/2005/07/aaa" with a name of the given state.
// On all other browsers, we check for an attribute called
// "aria-"+state.
if(dojo.isFF && dojo.isFF < 3){
return elem.getAttributeNS("http://www.w3.org/2005/07/aaa", state);
}else{
var value = elem.getAttribute("aria-"+state);
return value ? value : "";
}
},
 
setWaiState: function(/*Element*/ elem, /*String*/ state, /*String*/ value){
// Summary: Set state on elem to value.
// On Firefox 2 and below, we set an attribute in namespace
// "http://www.w3.org/2005/07/aaa" with a name of the given state.
// On all other browsers, we set an attribute called
// "aria-"+state.
if(dojo.isFF && dojo.isFF < 3){
elem.setAttributeNS("http://www.w3.org/2005/07/aaa",
"aaa:"+state, value);
}else{
elem.setAttribute("aria-"+state, value);
}
},
 
removeWaiState: function(/*Element*/ elem, /*String*/ state){
// Summary: Removes the given state from elem.
// On Firefox 2 and below, we remove the attribute in namespace
// "http://www.w3.org/2005/07/aaa" with a name of the given state.
// On all other browsers, we remove the attribute called
// "aria-"+state.
if(dojo.isFF && dojo.isFF < 3){
elem.removeAttributeNS("http://www.w3.org/2005/07/aaa", state);
}else{
elem.removeAttribute("aria-"+state);
}
}
});
 
}
 
if(!dojo._hasResource["dijit._base"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit._base"] = true;
dojo.provide("dijit._base");
 
 
 
 
 
 
 
 
 
 
 
 
}
 
if(!dojo._hasResource["dojo.date.stamp"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dojo.date.stamp"] = true;
dojo.provide("dojo.date.stamp");
 
// Methods to convert dates to or from a wire (string) format using well-known conventions
 
dojo.date.stamp.fromISOString = function(/*String*/formattedString, /*Number?*/defaultTime){
// summary:
// Returns a Date object given a string formatted according to a subset of the ISO-8601 standard.
//
// description:
// Accepts a string formatted according to a profile of ISO8601 as defined by
// RFC3339 (http://www.ietf.org/rfc/rfc3339.txt), except that partial input is allowed.
// Can also process dates as specified by http://www.w3.org/TR/NOTE-datetime
// The following combinations are valid:
// * dates only
// yyyy
// yyyy-MM
// yyyy-MM-dd
// * times only, with an optional time zone appended
// THH:mm
// THH:mm:ss
// THH:mm:ss.SSS
// * and "datetimes" which could be any combination of the above
// timezones may be specified as Z (for UTC) or +/- followed by a time expression HH:mm
// Assumes the local time zone if not specified. Does not validate. Improperly formatted
// input may return null. Arguments which are out of bounds will be handled
// by the Date constructor (e.g. January 32nd typically gets resolved to February 1st)
//
// formattedString:
// A string such as 2005-06-30T08:05:00-07:00 or 2005-06-30 or T08:05:00
//
// defaultTime:
// Used for defaults for fields omitted in the formattedString.
// Uses 1970-01-01T00:00:00.0Z by default.
 
if(!dojo.date.stamp._isoRegExp){
dojo.date.stamp._isoRegExp =
//TODO: could be more restrictive and check for 00-59, etc.
/^(?:(\d{4})(?:-(\d{2})(?:-(\d{2}))?)?)?(?:T(\d{2}):(\d{2})(?::(\d{2})(.\d+)?)?((?:[+-](\d{2}):(\d{2}))|Z)?)?$/;
}
 
var match = dojo.date.stamp._isoRegExp.exec(formattedString);
var result = null;
 
if(match){
match.shift();
match[1] && match[1]--; // Javascript Date months are 0-based
match[6] && (match[6] *= 1000); // Javascript Date expects fractional seconds as milliseconds
 
if(defaultTime){
// mix in defaultTime. Relatively expensive, so use || operators for the fast path of defaultTime === 0
defaultTime = new Date(defaultTime);
dojo.map(["FullYear", "Month", "Date", "Hours", "Minutes", "Seconds", "Milliseconds"], function(prop){
return defaultTime["get" + prop]();
}).forEach(function(value, index){
if(match[index] === undefined){
match[index] = value;
}
});
}
result = new Date(match[0]||1970, match[1]||0, match[2]||0, match[3]||0, match[4]||0, match[5]||0, match[6]||0);
 
var offset = 0;
var zoneSign = match[7] && match[7].charAt(0);
if(zoneSign != 'Z'){
offset = ((match[8] || 0) * 60) + (Number(match[9]) || 0);
if(zoneSign != '-'){ offset *= -1; }
}
if(zoneSign){
offset -= result.getTimezoneOffset();
}
if(offset){
result.setTime(result.getTime() + offset * 60000);
}
}
 
return result; // Date or null
}
 
dojo.date.stamp.toISOString = function(/*Date*/dateObject, /*Object?*/options){
// summary:
// Format a Date object as a string according a subset of the ISO-8601 standard
//
// description:
// When options.selector is omitted, output follows RFC3339 (http://www.ietf.org/rfc/rfc3339.txt)
// The local time zone is included as an offset from GMT, except when selector=='time' (time without a date)
// Does not check bounds.
//
// dateObject:
// A Date object
//
// object {selector: string, zulu: boolean, milliseconds: boolean}
// selector- "date" or "time" for partial formatting of the Date object.
// Both date and time will be formatted by default.
// zulu- if true, UTC/GMT is used for a timezone
// milliseconds- if true, output milliseconds
 
var _ = function(n){ return (n < 10) ? "0" + n : n; }
options = options || {};
var formattedDate = [];
var getter = options.zulu ? "getUTC" : "get";
var date = "";
if(options.selector != "time"){
date = [dateObject[getter+"FullYear"](), _(dateObject[getter+"Month"]()+1), _(dateObject[getter+"Date"]())].join('-');
}
formattedDate.push(date);
if(options.selector != "date"){
var time = [_(dateObject[getter+"Hours"]()), _(dateObject[getter+"Minutes"]()), _(dateObject[getter+"Seconds"]())].join(':');
var millis = dateObject[getter+"Milliseconds"]();
if(options.milliseconds){
time += "."+ (millis < 100 ? "0" : "") + _(millis);
}
if(options.zulu){
time += "Z";
}else if(options.selector != "time"){
var timezoneOffset = dateObject.getTimezoneOffset();
var absOffset = Math.abs(timezoneOffset);
time += (timezoneOffset > 0 ? "-" : "+") +
_(Math.floor(absOffset/60)) + ":" + _(absOffset%60);
}
formattedDate.push(time);
}
return formattedDate.join('T'); // String
}
 
}
 
if(!dojo._hasResource["dojo.parser"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dojo.parser"] = true;
dojo.provide("dojo.parser");
 
 
dojo.parser = new function(){
 
var d = dojo;
 
function val2type(/*Object*/ value){
// summary:
// Returns name of type of given value.
 
if(d.isString(value)){ return "string"; }
if(typeof value == "number"){ return "number"; }
if(typeof value == "boolean"){ return "boolean"; }
if(d.isFunction(value)){ return "function"; }
if(d.isArray(value)){ return "array"; } // typeof [] == "object"
if(value instanceof Date) { return "date"; } // assume timestamp
if(value instanceof d._Url){ return "url"; }
return "object";
}
 
function str2obj(/*String*/ value, /*String*/ type){
// summary:
// Convert given string value to given type
switch(type){
case "string":
return value;
case "number":
return value.length ? Number(value) : NaN;
case "boolean":
// for checked/disabled value might be "" or "checked". interpret as true.
return typeof value == "boolean" ? value : !(value.toLowerCase()=="false");
case "function":
if(d.isFunction(value)){
// IE gives us a function, even when we say something like onClick="foo"
// (in which case it gives us an invalid function "function(){ foo }").
// Therefore, convert to string
value=value.toString();
value=d.trim(value.substring(value.indexOf('{')+1, value.length-1));
}
try{
if(value.search(/[^\w\.]+/i) != -1){
// TODO: "this" here won't work
value = d.parser._nameAnonFunc(new Function(value), this);
}
return d.getObject(value, false);
}catch(e){ return new Function(); }
case "array":
return value.split(/\s*,\s*/);
case "date":
switch(value){
case "": return new Date(""); // the NaN of dates
case "now": return new Date(); // current date
default: return d.date.stamp.fromISOString(value);
}
case "url":
return d.baseUrl + value;
default:
return d.fromJson(value);
}
}
 
var instanceClasses = {
// map from fully qualified name (like "dijit.Button") to structure like
// { cls: dijit.Button, params: {label: "string", disabled: "boolean"} }
};
function getClassInfo(/*String*/ className){
// className:
// fully qualified name (like "dijit.Button")
// returns:
// structure like
// {
// cls: dijit.Button,
// params: { label: "string", disabled: "boolean"}
// }
 
if(!instanceClasses[className]){
// get pointer to widget class
var cls = d.getObject(className);
if(!d.isFunction(cls)){
throw new Error("Could not load class '" + className +
"'. Did you spell the name correctly and use a full path, like 'dijit.form.Button'?");
}
var proto = cls.prototype;
// get table of parameter names & types
var params={};
for(var name in proto){
if(name.charAt(0)=="_"){ continue; } // skip internal properties
var defVal = proto[name];
params[name]=val2type(defVal);
}
 
instanceClasses[className] = { cls: cls, params: params };
}
return instanceClasses[className];
}
 
this._functionFromScript = function(script){
var preamble = "";
var suffix = "";
var argsStr = script.getAttribute("args");
if(argsStr){
d.forEach(argsStr.split(/\s*,\s*/), function(part, idx){
preamble += "var "+part+" = arguments["+idx+"]; ";
});
}
var withStr = script.getAttribute("with");
if(withStr && withStr.length){
d.forEach(withStr.split(/\s*,\s*/), function(part){
preamble += "with("+part+"){";
suffix += "}";
});
}
return new Function(preamble+script.innerHTML+suffix);
}
 
this.instantiate = function(/* Array */nodes){
// summary:
// Takes array of nodes, and turns them into class instances and
// potentially calls a layout method to allow them to connect with
// any children
var thelist = [];
d.forEach(nodes, function(node){
if(!node){ return; }
var type = node.getAttribute("dojoType");
if((!type)||(!type.length)){ return; }
var clsInfo = getClassInfo(type);
var clazz = clsInfo.cls;
var ps = clazz._noScript||clazz.prototype._noScript;
 
// read parameters (ie, attributes).
// clsInfo.params lists expected params like {"checked": "boolean", "n": "number"}
var params = {};
var attributes = node.attributes;
for(var name in clsInfo.params){
var item = attributes.getNamedItem(name);
if(!item || (!item.specified && (!dojo.isIE || name.toLowerCase()!="value"))){ continue; }
var value = item.value;
// Deal with IE quirks for 'class' and 'style'
switch(name){
case "class":
value = node.className;
break;
case "style":
value = node.style && node.style.cssText; // FIXME: Opera?
}
var _type = clsInfo.params[name];
params[name] = str2obj(value, _type);
}
 
// Process <script type="dojo/*"> script tags
// <script type="dojo/method" event="foo"> tags are added to params, and passed to
// the widget on instantiation.
// <script type="dojo/method"> tags (with no event) are executed after instantiation
// <script type="dojo/connect" event="foo"> tags are dojo.connected after instantiation
if(!ps){
var connects = [], // functions to connect after instantiation
calls = []; // functions to call after instantiation
 
d.query("> script[type^='dojo/']", node).orphan().forEach(function(script){
var event = script.getAttribute("event"),
type = script.getAttribute("type"),
nf = d.parser._functionFromScript(script);
if(event){
if(type == "dojo/connect"){
connects.push({event: event, func: nf});
}else{
params[event] = nf;
}
}else{
calls.push(nf);
}
});
}
 
var markupFactory = clazz["markupFactory"];
if(!markupFactory && clazz["prototype"]){
markupFactory = clazz.prototype["markupFactory"];
}
// create the instance
var instance = markupFactory ? markupFactory(params, node, clazz) : new clazz(params, node);
thelist.push(instance);
 
// map it to the JS namespace if that makes sense
var jsname = node.getAttribute("jsId");
if(jsname){
d.setObject(jsname, instance);
}
 
// process connections and startup functions
if(!ps){
dojo.forEach(connects, function(connect){
dojo.connect(instance, connect.event, null, connect.func);
});
dojo.forEach(calls, function(func){
func.call(instance);
});
}
});
 
// Call startup on each top level instance if it makes sense (as for
// widgets). Parent widgets will recursively call startup on their
// (non-top level) children
d.forEach(thelist, function(instance){
if( instance &&
(instance.startup) &&
((!instance.getParent) || (!instance.getParent()))
){
instance.startup();
}
});
return thelist;
};
 
this.parse = function(/*DomNode?*/ rootNode){
// summary:
// Search specified node (or root node) recursively for class instances,
// and instantiate them Searches for
// dojoType="qualified.class.name"
var list = d.query('[dojoType]', rootNode);
// go build the object instances
var instances = this.instantiate(list);
return instances;
};
}();
 
//Register the parser callback. It should be the first callback
//after the a11y test.
 
(function(){
var parseRunner = function(){
if(djConfig["parseOnLoad"] == true){
dojo.parser.parse();
}
};
 
// FIXME: need to clobber cross-dependency!!
if(dojo.exists("dijit.wai.onload") && (dijit.wai.onload === dojo._loaders[0])){
dojo._loaders.splice(1, 0, parseRunner);
}else{
dojo._loaders.unshift(parseRunner);
}
})();
 
//TODO: ported from 0.4.x Dojo. Can we reduce this?
dojo.parser._anonCtr = 0;
dojo.parser._anon = {}; // why is this property required?
dojo.parser._nameAnonFunc = function(/*Function*/anonFuncPtr, /*Object*/thisObj){
// summary:
// Creates a reference to anonFuncPtr in thisObj with a completely
// unique name. The new name is returned as a String.
var jpn = "$joinpoint";
var nso = (thisObj|| dojo.parser._anon);
if(dojo.isIE){
var cn = anonFuncPtr["__dojoNameCache"];
if(cn && nso[cn] === anonFuncPtr){
return anonFuncPtr["__dojoNameCache"];
}
}
var ret = "__"+dojo.parser._anonCtr++;
while(typeof nso[ret] != "undefined"){
ret = "__"+dojo.parser._anonCtr++;
}
nso[ret] = anonFuncPtr;
return ret; // String
}
 
}
 
if(!dojo._hasResource["dijit._Widget"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit._Widget"] = true;
dojo.provide("dijit._Widget");
 
 
 
dojo.declare("dijit._Widget", null, {
// summary:
// The foundation of dijit widgets.
//
// id: String
// a unique, opaque ID string that can be assigned by users or by the
// system. If the developer passes an ID which is known not to be
// unique, the specified ID is ignored and the system-generated ID is
// used instead.
id: "",
 
// lang: String
// Language to display this widget in (like en-us).
// Defaults to brower's specified preferred language (typically the language of the OS)
lang: "",
 
// dir: String
// Bi-directional support, as defined by the HTML DIR attribute. Either left-to-right "ltr" or right-to-left "rtl".
dir: "",
 
// class: String
// HTML class attribute
"class": "",
 
// style: String
// HTML style attribute
style: "",
 
// title: String
// HTML title attribute
title: "",
 
// srcNodeRef: DomNode
// pointer to original dom node
srcNodeRef: null,
 
// domNode: DomNode
// this is our visible representation of the widget! Other DOM
// Nodes may by assigned to other properties, usually through the
// template system's dojoAttachPonit syntax, but the domNode
// property is the canonical "top level" node in widget UI.
domNode: null,
 
// attributeMap: Object
// A map of attributes and attachpoints -- typically standard HTML attributes -- to set
// on the widget's dom, at the "domNode" attach point, by default.
// Other node references can be specified as properties of 'this'
attributeMap: {id:"", dir:"", lang:"", "class":"", style:"", title:""}, // TODO: add on* handlers?
 
//////////// INITIALIZATION METHODS ///////////////////////////////////////
 
postscript: function(params, srcNodeRef){
this.create(params, srcNodeRef);
},
 
create: function(params, srcNodeRef){
// summary:
// To understand the process by which widgets are instantiated, it
// is critical to understand what other methods create calls and
// which of them you'll want to override. Of course, adventurous
// developers could override create entirely, but this should
// only be done as a last resort.
//
// Below is a list of the methods that are called, in the order
// they are fired, along with notes about what they do and if/when
// you should over-ride them in your widget:
//
// postMixInProperties:
// a stub function that you can over-ride to modify
// variables that may have been naively assigned by
// mixInProperties
// # widget is added to manager object here
// buildRendering
// Subclasses use this method to handle all UI initialization
// Sets this.domNode. Templated widgets do this automatically
// and otherwise it just uses the source dom node.
// postCreate
// a stub function that you can over-ride to modify take
// actions once the widget has been placed in the UI
 
// store pointer to original dom tree
this.srcNodeRef = dojo.byId(srcNodeRef);
 
// For garbage collection. An array of handles returned by Widget.connect()
// Each handle returned from Widget.connect() is an array of handles from dojo.connect()
this._connects=[];
 
// _attaches: String[]
// names of all our dojoAttachPoint variables
this._attaches=[];
 
//mixin our passed parameters
if(this.srcNodeRef && (typeof this.srcNodeRef.id == "string")){ this.id = this.srcNodeRef.id; }
if(params){
dojo.mixin(this,params);
}
this.postMixInProperties();
 
// generate an id for the widget if one wasn't specified
// (be sure to do this before buildRendering() because that function might
// expect the id to be there.
if(!this.id){
this.id=dijit.getUniqueId(this.declaredClass.replace(/\./g,"_"));
}
dijit.registry.add(this);
 
this.buildRendering();
 
// Copy attributes listed in attributeMap into the [newly created] DOM for the widget.
// The placement of these attributes is according to the property mapping in attributeMap.
// Note special handling for 'style' and 'class' attributes which are lists and can
// have elements from both old and new structures, and some attributes like "type"
// cannot be processed this way as they are not mutable.
if(this.domNode){
for(var attr in this.attributeMap){
var mapNode = this[this.attributeMap[attr] || "domNode"];
var value = this[attr];
if(typeof value != "object" && (value !== "" || (params && params[attr]))){
switch(attr){
case "class":
dojo.addClass(mapNode, value);
break;
case "style":
if(mapNode.style.cssText){
mapNode.style.cssText += "; " + value;// FIXME: Opera
}else{
mapNode.style.cssText = value;
}
break;
default:
mapNode.setAttribute(attr, value);
}
}
}
}
 
if(this.domNode){
this.domNode.setAttribute("widgetId", this.id);
}
this.postCreate();
 
// If srcNodeRef has been processed and removed from the DOM (e.g. TemplatedWidget) then delete it to allow GC.
if(this.srcNodeRef && !this.srcNodeRef.parentNode){
delete this.srcNodeRef;
}
},
 
postMixInProperties: function(){
// summary
// Called after the parameters to the widget have been read-in,
// but before the widget template is instantiated.
// Especially useful to set properties that are referenced in the widget template.
},
 
buildRendering: function(){
// summary:
// Construct the UI for this widget, setting this.domNode.
// Most widgets will mixin TemplatedWidget, which overrides this method.
this.domNode = this.srcNodeRef || dojo.doc.createElement('div');
},
 
postCreate: function(){
// summary:
// Called after a widget's dom has been setup
},
 
startup: function(){
// summary:
// Called after a widget's children, and other widgets on the page, have been created.
// Provides an opportunity to manipulate any children before they are displayed
// This is useful for composite widgets that need to control or layout sub-widgets
// Many layout widgets can use this as a wiring phase
},
 
//////////// DESTROY FUNCTIONS ////////////////////////////////
 
destroyRecursive: function(/*Boolean*/ finalize){
// summary:
// Destroy this widget and it's descendants. This is the generic
// "destructor" function that all widget users should call to
// cleanly discard with a widget. Once a widget is destroyed, it's
// removed from the manager object.
// finalize: Boolean
// is this function being called part of global environment
// tear-down?
 
this.destroyDescendants();
this.destroy();
},
 
destroy: function(/*Boolean*/ finalize){
// summary:
// Destroy this widget, but not its descendants
// finalize: Boolean
// is this function being called part of global environment
// tear-down?
this.uninitialize();
dojo.forEach(this._connects, function(array){
dojo.forEach(array, dojo.disconnect);
});
this.destroyRendering(finalize);
dijit.registry.remove(this.id);
},
 
destroyRendering: function(/*Boolean*/ finalize){
// summary:
// Destroys the DOM nodes associated with this widget
// finalize: Boolean
// is this function being called part of global environment
// tear-down?
 
if(this.bgIframe){
this.bgIframe.destroy();
delete this.bgIframe;
}
 
if(this.domNode){
dojo._destroyElement(this.domNode);
delete this.domNode;
}
 
if(this.srcNodeRef){
dojo._destroyElement(this.srcNodeRef);
delete this.srcNodeRef;
}
},
 
destroyDescendants: function(){
// summary:
// Recursively destroy the children of this widget and their
// descendants.
 
// TODO: should I destroy in the reverse order, to go bottom up?
dojo.forEach(this.getDescendants(), function(widget){ widget.destroy(); });
},
 
uninitialize: function(){
// summary:
// stub function. Over-ride to implement custom widget tear-down
// behavior.
return false;
},
 
////////////////// MISCELLANEOUS METHODS ///////////////////
 
toString: function(){
// summary:
// returns a string that represents the widget. When a widget is
// cast to a string, this method will be used to generate the
// output. Currently, it does not implement any sort of reversable
// serialization.
return '[Widget ' + this.declaredClass + ', ' + (this.id || 'NO ID') + ']'; // String
},
 
getDescendants: function(){
// summary:
// return all the descendant widgets
var list = dojo.query('[widgetId]', this.domNode);
return list.map(dijit.byNode); // Array
},
 
nodesWithKeyClick : ["input", "button"],
 
connect: function(
/*Object|null*/ obj,
/*String*/ event,
/*String|Function*/ method){
 
// summary:
// Connects specified obj/event to specified method of this object
// and registers for disconnect() on widget destroy.
// Special event: "ondijitclick" triggers on a click or enter-down or space-up
// Similar to dojo.connect() but takes three arguments rather than four.
var handles =[];
if(event == "ondijitclick"){
var w = this;
// add key based click activation for unsupported nodes.
if(!this.nodesWithKeyClick[obj.nodeName]){
handles.push(dojo.connect(obj, "onkeydown", this,
function(e){
if(e.keyCode == dojo.keys.ENTER){
return (dojo.isString(method))?
w[method](e) : method.call(w, e);
}else if(e.keyCode == dojo.keys.SPACE){
// stop space down as it causes IE to scroll
// the browser window
dojo.stopEvent(e);
}
}));
handles.push(dojo.connect(obj, "onkeyup", this,
function(e){
if(e.keyCode == dojo.keys.SPACE){
return dojo.isString(method) ?
w[method](e) : method.call(w, e);
}
}));
}
event = "onclick";
}
handles.push(dojo.connect(obj, event, this, method));
 
// return handles for FormElement and ComboBox
this._connects.push(handles);
return handles;
},
 
disconnect: function(/*Object*/ handles){
// summary:
// Disconnects handle created by this.connect.
// Also removes handle from this widget's list of connects
for(var i=0; i<this._connects.length; i++){
if(this._connects[i]==handles){
dojo.forEach(handles, dojo.disconnect);
this._connects.splice(i, 1);
return;
}
}
},
 
isLeftToRight: function(){
// summary:
// Checks the DOM to for the text direction for bi-directional support
// description:
// This method cannot be used during widget construction because the widget
// must first be connected to the DOM tree. Parent nodes are searched for the
// 'dir' attribute until one is found, otherwise left to right mode is assumed.
// See HTML spec, DIR attribute for more information.
 
if(typeof this._ltr == "undefined"){
this._ltr = dojo.getComputedStyle(this.domNode).direction != "rtl";
}
return this._ltr; //Boolean
},
 
isFocusable: function(){
// summary:
// Return true if this widget can currently be focused
// and false if not
return this.focus && (dojo.style(this.domNode, "display") != "none");
}
});
 
}
 
if(!dojo._hasResource["dojo.string"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dojo.string"] = true;
dojo.provide("dojo.string");
 
dojo.string.pad = function(/*String*/text, /*int*/size, /*String?*/ch, /*boolean?*/end){
// summary:
// Pad a string to guarantee that it is at least 'size' length by
// filling with the character 'c' at either the start or end of the
// string. Pads at the start, by default.
// text: the string to pad
// size: length to provide padding
// ch: character to pad, defaults to '0'
// end: adds padding at the end if true, otherwise pads at start
 
var out = String(text);
if(!ch){
ch = '0';
}
while(out.length < size){
if(end){
out += ch;
}else{
out = ch + out;
}
}
return out; // String
};
 
dojo.string.substitute = function( /*String*/template,
/*Object or Array*/map,
/*Function?*/transform,
/*Object?*/thisObject){
// summary:
// Performs parameterized substitutions on a string. Throws an
// exception if any parameter is unmatched.
// description:
// For example,
// | dojo.string.substitute("File '${0}' is not found in directory '${1}'.",["foo.html","/temp"]);
// | dojo.string.substitute("File '${name}' is not found in directory '${info.dir}'.",{name: "foo.html", info: {dir: "/temp"}});
// both return
// "File 'foo.html' is not found in directory '/temp'."
// template:
// a string with expressions in the form ${key} to be replaced or
// ${key:format} which specifies a format function. NOTE syntax has
// changed from %{key}
// map: where to look for substitutions
// transform:
// a function to process all parameters before substitution takes
// place, e.g. dojo.string.encodeXML
// thisObject:
// where to look for optional format function; default to the global
// namespace
 
return template.replace(/\$\{([^\s\:\}]+)(?:\:([^\s\:\}]+))?\}/g, function(match, key, format){
var value = dojo.getObject(key,false,map);
if(format){ value = dojo.getObject(format,false,thisObject)(value);}
if(transform){ value = transform(value, key); }
return value.toString();
}); // string
};
 
dojo.string.trim = function(/*String*/ str){
// summary: trims whitespaces from both sides of the string
// description:
// This version of trim() was taken from Steven Levithan's blog:
// http://blog.stevenlevithan.com/archives/faster-trim-javascript.
// The short yet good-performing version of this function is
// dojo.trim(), which is part of the base.
str = str.replace(/^\s+/, '');
for(var i = str.length - 1; i > 0; i--){
if(/\S/.test(str.charAt(i))){
str = str.substring(0, i + 1);
break;
}
}
return str; // String
};
 
}
 
if(!dojo._hasResource["dijit._Templated"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit._Templated"] = true;
dojo.provide("dijit._Templated");
 
 
 
 
 
 
dojo.declare("dijit._Templated",
null,
{
// summary:
// mixin for widgets that are instantiated from a template
 
// templateNode: DomNode
// a node that represents the widget template. Pre-empts both templateString and templatePath.
templateNode: null,
 
// templateString String:
// a string that represents the widget template. Pre-empts the
// templatePath. In builds that have their strings "interned", the
// templatePath is converted to an inline templateString, thereby
// preventing a synchronous network call.
templateString: null,
 
// templatePath: String
// Path to template (HTML file) for this widget
templatePath: null,
 
// widgetsInTemplate Boolean:
// should we parse the template to find widgets that might be
// declared in markup inside it? false by default.
widgetsInTemplate: false,
 
// containerNode DomNode:
// holds child elements. "containerNode" is generally set via a
// dojoAttachPoint assignment and it designates where children of
// the src dom node will be placed
containerNode: null,
 
// skipNodeCache Boolean:
// if using a cached widget template node poses issues for a
// particular widget class, it can set this property to ensure
// that its template is always re-built from a string
_skipNodeCache: false,
 
// method over-ride
buildRendering: function(){
// summary:
// Construct the UI for this widget from a template, setting this.domNode.
 
// Lookup cached version of template, and download to cache if it
// isn't there already. Returns either a DomNode or a string, depending on
// whether or not the template contains ${foo} replacement parameters.
var cached = dijit._Templated.getCachedTemplate(this.templatePath, this.templateString, this._skipNodeCache);
 
var node;
if(dojo.isString(cached)){
var className = this.declaredClass, _this = this;
// Cache contains a string because we need to do property replacement
// do the property replacement
var tstr = dojo.string.substitute(cached, this, function(value, key){
if(key.charAt(0) == '!'){ value = _this[key.substr(1)]; }
if(typeof value == "undefined"){ throw new Error(className+" template:"+key); } // a debugging aide
if(!value){ return ""; }
 
// Substitution keys beginning with ! will skip the transform step,
// in case a user wishes to insert unescaped markup, e.g. ${!foo}
return key.charAt(0) == "!" ? value :
// Safer substitution, see heading "Attribute values" in
// http://www.w3.org/TR/REC-html40/appendix/notes.html#h-B.3.2
value.toString().replace(/"/g,"&quot;"); //TODO: add &amp? use encodeXML method?
}, this);
 
node = dijit._Templated._createNodesFromText(tstr)[0];
}else{
// if it's a node, all we have to do is clone it
node = cached.cloneNode(true);
}
 
// recurse through the node, looking for, and attaching to, our
// attachment points which should be defined on the template node.
this._attachTemplateNodes(node);
 
var source = this.srcNodeRef;
if(source && source.parentNode){
source.parentNode.replaceChild(node, source);
}
 
this.domNode = node;
if(this.widgetsInTemplate){
var childWidgets = dojo.parser.parse(node);
this._attachTemplateNodes(childWidgets, function(n,p){
return n[p];
});
}
 
this._fillContent(source);
},
 
_fillContent: function(/*DomNode*/ source){
// summary:
// relocate source contents to templated container node
// this.containerNode must be able to receive children, or exceptions will be thrown
var dest = this.containerNode;
if(source && dest){
while(source.hasChildNodes()){
dest.appendChild(source.firstChild);
}
}
},
 
_attachTemplateNodes: function(rootNode, getAttrFunc){
// summary:
// map widget properties and functions to the handlers specified in
// the dom node and it's descendants. This function iterates over all
// nodes and looks for these properties:
// * dojoAttachPoint
// * dojoAttachEvent
// * waiRole
// * waiState
// rootNode: DomNode|Array[Widgets]
// the node to search for properties. All children will be searched.
// getAttrFunc: function?
// a function which will be used to obtain property for a given
// DomNode/Widget
 
getAttrFunc = getAttrFunc || function(n,p){ return n.getAttribute(p); };
 
var nodes = dojo.isArray(rootNode) ? rootNode : (rootNode.all || rootNode.getElementsByTagName("*"));
var x=dojo.isArray(rootNode)?0:-1;
for(; x<nodes.length; x++){
var baseNode = (x == -1) ? rootNode : nodes[x];
if(this.widgetsInTemplate && getAttrFunc(baseNode,'dojoType')){
continue;
}
// Process dojoAttachPoint
var attachPoint = getAttrFunc(baseNode, "dojoAttachPoint");
if(attachPoint){
var point, points = attachPoint.split(/\s*,\s*/);
while(point=points.shift()){
if(dojo.isArray(this[point])){
this[point].push(baseNode);
}else{
this[point]=baseNode;
}
}
}
 
// Process dojoAttachEvent
var attachEvent = getAttrFunc(baseNode, "dojoAttachEvent");
if(attachEvent){
// NOTE: we want to support attributes that have the form
// "domEvent: nativeEvent; ..."
var event, events = attachEvent.split(/\s*,\s*/);
var trim = dojo.trim;
while(event=events.shift()){
if(event){
var thisFunc = null;
if(event.indexOf(":") != -1){
// oh, if only JS had tuple assignment
var funcNameArr = event.split(":");
event = trim(funcNameArr[0]);
thisFunc = trim(funcNameArr[1]);
}else{
event = trim(event);
}
if(!thisFunc){
thisFunc = event;
}
this.connect(baseNode, event, thisFunc);
}
}
}
 
// waiRole, waiState
var role = getAttrFunc(baseNode, "waiRole");
if(role){
dijit.setWaiRole(baseNode, role);
}
var values = getAttrFunc(baseNode, "waiState");
if(values){
dojo.forEach(values.split(/\s*,\s*/), function(stateValue){
if(stateValue.indexOf('-') != -1){
var pair = stateValue.split('-');
dijit.setWaiState(baseNode, pair[0], pair[1]);
}
});
}
 
}
}
}
);
 
// key is either templatePath or templateString; object is either string or DOM tree
dijit._Templated._templateCache = {};
 
dijit._Templated.getCachedTemplate = function(templatePath, templateString, alwaysUseString){
// summary:
// static method to get a template based on the templatePath or
// templateString key
// templatePath: String
// the URL to get the template from. dojo.uri.Uri is often passed as well.
// templateString: String?
// a string to use in lieu of fetching the template from a URL
// Returns:
// Either string (if there are ${} variables that need to be replaced) or just
// a DOM tree (if the node can be cloned directly)
 
// is it already cached?
var tmplts = dijit._Templated._templateCache;
var key = templateString || templatePath;
var cached = tmplts[key];
if(cached){
return cached;
}
 
// If necessary, load template string from template path
if(!templateString){
templateString = dijit._Templated._sanitizeTemplateString(dojo._getText(templatePath));
}
 
templateString = dojo.string.trim(templateString);
 
if(templateString.match(/\$\{([^\}]+)\}/g) || alwaysUseString){
// there are variables in the template so all we can do is cache the string
return (tmplts[key] = templateString); //String
}else{
// there are no variables in the template so we can cache the DOM tree
return (tmplts[key] = dijit._Templated._createNodesFromText(templateString)[0]); //Node
}
};
 
dijit._Templated._sanitizeTemplateString = function(/*String*/tString){
// summary:
// Strips <?xml ...?> declarations so that external SVG and XML
// documents can be added to a document without worry. Also, if the string
// is an HTML document, only the part inside the body tag is returned.
if(tString){
tString = tString.replace(/^\s*<\?xml(\s)+version=[\'\"](\d)*.(\d)*[\'\"](\s)*\?>/im, "");
var matches = tString.match(/<body[^>]*>\s*([\s\S]+)\s*<\/body>/im);
if(matches){
tString = matches[1];
}
}else{
tString = "";
}
return tString; //String
};
 
 
if(dojo.isIE){
dojo.addOnUnload(function(){
var cache = dijit._Templated._templateCache;
for(var key in cache){
var value = cache[key];
if(!isNaN(value.nodeType)){ // isNode equivalent
dojo._destroyElement(value);
}
delete cache[key];
}
});
}
 
(function(){
var tagMap = {
cell: {re: /^<t[dh][\s\r\n>]/i, pre: "<table><tbody><tr>", post: "</tr></tbody></table>"},
row: {re: /^<tr[\s\r\n>]/i, pre: "<table><tbody>", post: "</tbody></table>"},
section: {re: /^<(thead|tbody|tfoot)[\s\r\n>]/i, pre: "<table>", post: "</table>"}
};
 
// dummy container node used temporarily to hold nodes being created
var tn;
 
dijit._Templated._createNodesFromText = function(/*String*/text){
// summary:
// Attempts to create a set of nodes based on the structure of the passed text.
 
if(!tn){
tn = dojo.doc.createElement("div");
tn.style.display="none";
dojo.body().appendChild(tn);
}
var tableType = "none";
var rtext = text.replace(/^\s+/, "");
for(var type in tagMap){
var map = tagMap[type];
if(map.re.test(rtext)){
tableType = type;
text = map.pre + text + map.post;
break;
}
}
 
tn.innerHTML = text;
if(tn.normalize){
tn.normalize();
}
 
var tag = { cell: "tr", row: "tbody", section: "table" }[tableType];
var _parent = (typeof tag != "undefined") ?
tn.getElementsByTagName(tag)[0] :
tn;
 
var nodes = [];
while(_parent.firstChild){
nodes.push(_parent.removeChild(_parent.firstChild));
}
tn.innerHTML="";
return nodes; // Array
}
})();
 
// These arguments can be specified for widgets which are used in templates.
// Since any widget can be specified as sub widgets in template, mix it
// into the base widget class. (This is a hack, but it's effective.)
dojo.extend(dijit._Widget,{
dojoAttachEvent: "",
dojoAttachPoint: "",
waiRole: "",
waiState:""
})
 
}
 
if(!dojo._hasResource["dijit._Container"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit._Container"] = true;
dojo.provide("dijit._Container");
 
dojo.declare("dijit._Contained",
null,
{
// summary
// Mixin for widgets that are children of a container widget
 
getParent: function(){
// summary:
// returns the parent widget of this widget, assuming the parent
// implements dijit._Container
for(var p=this.domNode.parentNode; p; p=p.parentNode){
var id = p.getAttribute && p.getAttribute("widgetId");
if(id){
var parent = dijit.byId(id);
return parent.isContainer ? parent : null;
}
}
return null;
},
 
_getSibling: function(which){
var node = this.domNode;
do{
node = node[which+"Sibling"];
}while(node && node.nodeType != 1);
if(!node){ return null; } // null
var id = node.getAttribute("widgetId");
return dijit.byId(id);
},
 
getPreviousSibling: function(){
// summary:
// returns null if this is the first child of the parent,
// otherwise returns the next element sibling to the "left".
 
return this._getSibling("previous");
},
 
getNextSibling: function(){
// summary:
// returns null if this is the last child of the parent,
// otherwise returns the next element sibling to the "right".
 
return this._getSibling("next");
}
}
);
 
dojo.declare("dijit._Container",
null,
{
// summary
// Mixin for widgets that contain a list of children like SplitContainer
 
isContainer: true,
 
addChild: function(/*Widget*/ widget, /*int?*/ insertIndex){
// summary:
// Process the given child widget, inserting it's dom node as
// a child of our dom node
 
if(insertIndex === undefined){
insertIndex = "last";
}
var refNode = this.containerNode || this.domNode;
if(insertIndex && typeof insertIndex == "number"){
var children = dojo.query("> [widgetid]", refNode);
if(children && children.length >= insertIndex){
refNode = children[insertIndex-1]; insertIndex = "after";
}
}
dojo.place(widget.domNode, refNode, insertIndex);
 
// If I've been started but the child widget hasn't been started,
// start it now. Make sure to do this after widget has been
// inserted into the DOM tree, so it can see that it's being controlled by me,
// so it doesn't try to size itself.
if(this._started && !widget._started){
widget.startup();
}
},
 
removeChild: function(/*Widget*/ widget){
// summary:
// removes the passed widget instance from this widget but does
// not destroy it
var node = widget.domNode;
node.parentNode.removeChild(node); // detach but don't destroy
},
 
_nextElement: function(node){
do{
node = node.nextSibling;
}while(node && node.nodeType != 1);
return node;
},
 
_firstElement: function(node){
node = node.firstChild;
if(node && node.nodeType != 1){
node = this._nextElement(node);
}
return node;
},
 
getChildren: function(){
// summary:
// Returns array of children widgets
return dojo.query("> [widgetId]", this.containerNode || this.domNode).map(dijit.byNode); // Array
},
 
hasChildren: function(){
// summary:
// Returns true if widget has children
var cn = this.containerNode || this.domNode;
return !!this._firstElement(cn); // Boolean
},
 
_getSiblingOfChild: function(/*Widget*/ child, /*int*/ dir){
// summary:
// get the next or previous widget sibling of child
// dir:
// if 1, get the next sibling
// if -1, get the previous sibling
var node = child.domNode;
var which = (dir>0 ? "nextSibling" : "previousSibling");
do{
node = node[which];
}while(node && (node.nodeType != 1 || !dijit.byNode(node)));
return node ? dijit.byNode(node) : null;
}
}
);
 
dojo.declare("dijit._KeyNavContainer",
[dijit._Container],
{
 
// summary:
// A _Container with keyboard navigation of its children.
// To use this mixin, call connectKeyNavHandlers() in
// postCreate() and call startupKeyNavChildren() in startup().
 
/*=====
// focusedChild: Widget
// The currently focused child widget, or null if there isn't one
focusedChild: null,
=====*/
 
_keyNavCodes: {},
 
connectKeyNavHandlers: function(/*Array*/ prevKeyCodes, /*Array*/ nextKeyCodes){
// summary:
// Call in postCreate() to attach the keyboard handlers
// to the container.
// preKeyCodes: Array
// Key codes for navigating to the previous child.
// nextKeyCodes: Array
// Key codes for navigating to the next child.
 
var keyCodes = this._keyNavCodes = {};
var prev = dojo.hitch(this, this.focusPrev);
var next = dojo.hitch(this, this.focusNext);
dojo.forEach(prevKeyCodes, function(code){ keyCodes[code] = prev });
dojo.forEach(nextKeyCodes, function(code){ keyCodes[code] = next });
this.connect(this.domNode, "onkeypress", "_onContainerKeypress");
if(dojo.isIE){
this.connect(this.domNode, "onactivate", "_onContainerFocus");
this.connect(this.domNode, "ondeactivate", "_onContainerBlur");
}else{
this.connect(this.domNode, "onfocus", "_onContainerFocus");
this.connect(this.domNode, "onblur", "_onContainerBlur");
}
},
 
startupKeyNavChildren: function(){
// summary:
// Call in startup() to set child tabindexes to -1
dojo.forEach(this.getChildren(), dojo.hitch(this, "_setTabIndexMinusOne"));
},
 
addChild: function(/*Widget*/ widget, /*int?*/ insertIndex){
// summary: Add a child to our _Container
dijit._KeyNavContainer.superclass.addChild.apply(this, arguments);
this._setTabIndexMinusOne(widget);
},
 
focus: function(){
// summary: Default focus() implementation: focus the first child.
this.focusFirstChild();
},
 
focusFirstChild: function(){
// summary: Focus the first focusable child in the container.
this.focusChild(this._getFirstFocusableChild());
},
 
focusNext: function(){
// summary: Focus the next widget or focal node (for widgets
// with multiple focal nodes) within this container.
if(this.focusedChild && this.focusedChild.hasNextFocalNode
&& this.focusedChild.hasNextFocalNode()){
this.focusedChild.focusNext();
return;
}
var child = this._getNextFocusableChild(this.focusedChild, 1);
if(child.getFocalNodes){
this.focusChild(child, child.getFocalNodes()[0]);
}else{
this.focusChild(child);
}
},
 
focusPrev: function(){
// summary: Focus the previous widget or focal node (for widgets
// with multiple focal nodes) within this container.
if(this.focusedChild && this.focusedChild.hasPrevFocalNode
&& this.focusedChild.hasPrevFocalNode()){
this.focusedChild.focusPrev();
return;
}
var child = this._getNextFocusableChild(this.focusedChild, -1);
if(child.getFocalNodes){
var nodes = child.getFocalNodes();
this.focusChild(child, nodes[nodes.length-1]);
}else{
this.focusChild(child);
}
},
 
focusChild: function(/*Widget*/ widget, /*Node?*/ node){
// summary: Focus widget. Optionally focus 'node' within widget.
if(widget){
if(this.focusedChild && widget !== this.focusedChild){
this._onChildBlur(this.focusedChild);
}
this.focusedChild = widget;
if(node && widget.focusFocalNode){
widget.focusFocalNode(node);
}else{
widget.focus();
}
}
},
 
_setTabIndexMinusOne: function(/*Widget*/ widget){
if(widget.getFocalNodes){
dojo.forEach(widget.getFocalNodes(), function(node){
node.setAttribute("tabIndex", -1);
});
}else{
(widget.focusNode || widget.domNode).setAttribute("tabIndex", -1);
}
},
 
_onContainerFocus: function(evt){
this.domNode.setAttribute("tabIndex", -1);
if(evt.target === this.domNode){
this.focusFirstChild();
}else{
var widget = dijit.getEnclosingWidget(evt.target);
if(widget && widget.isFocusable()){
this.focusedChild = widget;
}
}
},
 
_onContainerBlur: function(evt){
if(this.tabIndex){
this.domNode.setAttribute("tabIndex", this.tabIndex);
}
},
 
_onContainerKeypress: function(evt){
if(evt.ctrlKey || evt.altKey){ return; }
var func = this._keyNavCodes[evt.keyCode];
if(func){
func();
dojo.stopEvent(evt);
}
},
 
_onChildBlur: function(/*Widget*/ widget){
// summary:
// Called when focus leaves a child widget to go
// to a sibling widget.
},
 
_getFirstFocusableChild: function(){
return this._getNextFocusableChild(null, 1);
},
 
_getNextFocusableChild: function(child, dir){
if(child){
child = this._getSiblingOfChild(child, dir);
}
var children = this.getChildren();
for(var i=0; i < children.length; i++){
if(!child){
child = children[(dir>0) ? 0 : (children.length-1)];
}
if(child.isFocusable()){
return child;
}
child = this._getSiblingOfChild(child, dir);
}
}
}
);
 
}
 
if(!dojo._hasResource["dijit.layout._LayoutWidget"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.layout._LayoutWidget"] = true;
dojo.provide("dijit.layout._LayoutWidget");
 
 
 
 
dojo.declare("dijit.layout._LayoutWidget",
[dijit._Widget, dijit._Container, dijit._Contained],
{
// summary
// Mixin for widgets that contain a list of children like SplitContainer.
// Widgets which mixin this code must define layout() to lay out the children
 
isLayoutContainer: true,
 
postCreate: function(){
dojo.addClass(this.domNode, "dijitContainer");
},
 
startup: function(){
// summary:
// Called after all the widgets have been instantiated and their
// dom nodes have been inserted somewhere under document.body.
//
// Widgets should override this method to do any initialization
// dependent on other widgets existing, and then call
// this superclass method to finish things off.
//
// startup() in subclasses shouldn't do anything
// size related because the size of the widget hasn't been set yet.
 
if(this._started){ return; }
this._started=true;
 
if(this.getChildren){
dojo.forEach(this.getChildren(), function(child){ child.startup(); });
}
 
// If I am a top level widget
if(!this.getParent || !this.getParent()){
// Do recursive sizing and layout of all my descendants
// (passing in no argument to resize means that it has to glean the size itself)
this.resize();
 
// since my parent isn't a layout container, and my style is width=height=100% (or something similar),
// then I need to watch when the window resizes, and size myself accordingly
// (passing in no argument to resize means that it has to glean the size itself)
this.connect(window, 'onresize', function(){this.resize();});
}
},
 
resize: function(args){
// summary:
// Explicitly set this widget's size (in pixels),
// and then call layout() to resize contents (and maybe adjust child widgets)
//
// args: Object?
// {w: int, h: int, l: int, t: int}
 
var node = this.domNode;
 
// set margin box size, unless it wasn't specified, in which case use current size
if(args){
dojo.marginBox(node, args);
 
// set offset of the node
if(args.t){ node.style.top = args.t + "px"; }
if(args.l){ node.style.left = args.l + "px"; }
}
// If either height or width wasn't specified by the user, then query node for it.
// But note that setting the margin box and then immediately querying dimensions may return
// inaccurate results, so try not to depend on it.
var mb = dojo.mixin(dojo.marginBox(node), args||{});
 
// Save the size of my content box.
this._contentBox = dijit.layout.marginBox2contentBox(node, mb);
 
// Callback for widget to adjust size of it's children
this.layout();
},
 
layout: function(){
// summary
// Widgets override this method to size & position their contents/children.
// When this is called this._contentBox is guaranteed to be set (see resize()).
//
// This is called after startup(), and also when the widget's size has been
// changed.
}
}
);
 
dijit.layout.marginBox2contentBox = function(/*DomNode*/ node, /*Object*/ mb){
// summary:
// Given the margin-box size of a node, return it's content box size.
// Functions like dojo.contentBox() but is more reliable since it doesn't have
// to wait for the browser to compute sizes.
var cs = dojo.getComputedStyle(node);
var me=dojo._getMarginExtents(node, cs);
var pb=dojo._getPadBorderExtents(node, cs);
return {
l: dojo._toPixelValue(node, cs.paddingLeft),
t: dojo._toPixelValue(node, cs.paddingTop),
w: mb.w - (me.w + pb.w),
h: mb.h - (me.h + pb.h)
};
};
 
(function(){
var capitalize = function(word){
return word.substring(0,1).toUpperCase() + word.substring(1);
};
 
var size = function(widget, dim){
// size the child
widget.resize ? widget.resize(dim) : dojo.marginBox(widget.domNode, dim);
 
// record child's size, but favor our own numbers when we have them.
// the browser lies sometimes
dojo.mixin(widget, dojo.marginBox(widget.domNode));
dojo.mixin(widget, dim);
};
 
dijit.layout.layoutChildren = function(/*DomNode*/ container, /*Object*/ dim, /*Object[]*/ children){
/**
* summary
* Layout a bunch of child dom nodes within a parent dom node
* container:
* parent node
* dim:
* {l, t, w, h} object specifying dimensions of container into which to place children
* children:
* an array like [ {domNode: foo, layoutAlign: "bottom" }, {domNode: bar, layoutAlign: "client"} ]
*/
 
// copy dim because we are going to modify it
dim = dojo.mixin({}, dim);
 
dojo.addClass(container, "dijitLayoutContainer");
 
// Move "client" elements to the end of the array for layout. a11y dictates that the author
// needs to be able to put them in the document in tab-order, but this algorithm requires that
// client be last.
children = dojo.filter(children, function(item){ return item.layoutAlign != "client"; })
.concat(dojo.filter(children, function(item){ return item.layoutAlign == "client"; }));
 
// set positions/sizes
dojo.forEach(children, function(child){
var elm = child.domNode,
pos = child.layoutAlign;
 
// set elem to upper left corner of unused space; may move it later
var elmStyle = elm.style;
elmStyle.left = dim.l+"px";
elmStyle.top = dim.t+"px";
elmStyle.bottom = elmStyle.right = "auto";
 
dojo.addClass(elm, "dijitAlign" + capitalize(pos));
 
// set size && adjust record of remaining space.
// note that setting the width of a <div> may affect it's height.
if(pos=="top" || pos=="bottom"){
size(child, { w: dim.w });
dim.h -= child.h;
if(pos=="top"){
dim.t += child.h;
}else{
elmStyle.top = dim.t + dim.h + "px";
}
}else if(pos=="left" || pos=="right"){
size(child, { h: dim.h });
dim.w -= child.w;
if(pos=="left"){
dim.l += child.w;
}else{
elmStyle.left = dim.l + dim.w + "px";
}
}else if(pos=="client"){
size(child, dim);
}
});
};
 
})();
 
}
 
if(!dojo._hasResource["dijit.form._FormWidget"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.form._FormWidget"] = true;
dojo.provide("dijit.form._FormWidget");
 
 
 
 
dojo.declare("dijit.form._FormWidget", [dijit._Widget, dijit._Templated],
{
/*
Summary:
FormElement widgets correspond to native HTML elements such as <input> or <button> or <select>.
Each FormElement represents a single input value, and has a (possibly hidden) <input> element,
to which it serializes its input value, so that form submission (either normal submission or via FormBind?)
works as expected.
 
All these widgets should have these attributes just like native HTML input elements.
You can set them during widget construction, but after that they are read only.
 
They also share some common methods.
*/
 
// baseClass: String
// Root CSS class of the widget (ex: dijitTextBox), used to add CSS classes of widget
// (ex: "dijitTextBox dijitTextBoxInvalid dijitTextBoxFocused dijitTextBoxInvalidFocused")
// See _setStateClass().
baseClass: "",
 
// value: String
// Corresponds to the native HTML <input> element's attribute.
value: "",
 
// name: String
// Name used when submitting form; same as "name" attribute or plain HTML elements
name: "",
 
// id: String
// Corresponds to the native HTML <input> element's attribute.
// Also becomes the id for the widget.
id: "",
 
// alt: String
// Corresponds to the native HTML <input> element's attribute.
alt: "",
 
// type: String
// Corresponds to the native HTML <input> element's attribute.
type: "text",
 
// tabIndex: Integer
// Order fields are traversed when user hits the tab key
tabIndex: "0",
 
// disabled: Boolean
// Should this widget respond to user input?
// In markup, this is specified as "disabled='disabled'", or just "disabled".
disabled: false,
 
// intermediateChanges: Boolean
// Fires onChange for each value change or only on demand
intermediateChanges: false,
 
// These mixins assume that the focus node is an INPUT, as many but not all _FormWidgets are.
// Don't attempt to mixin the 'type', 'name' attributes here programatically -- they must be declared
// directly in the template as read by the parser in order to function. IE is known to specifically
// require the 'name' attribute at element creation time.
attributeMap: dojo.mixin(dojo.clone(dijit._Widget.prototype.attributeMap),
{id:"focusNode", tabIndex:"focusNode", alt:"focusNode"}),
 
setDisabled: function(/*Boolean*/ disabled){
// summary:
// Set disabled state of widget.
 
this.domNode.disabled = this.disabled = disabled;
if(this.focusNode){
this.focusNode.disabled = disabled;
}
if(disabled){
//reset those, because after the domNode is disabled, we can no longer receive
//mouse related events, see #4200
this._hovering = false;
this._active = false;
}
dijit.setWaiState(this.focusNode || this.domNode, "disabled", disabled);
this._setStateClass();
},
 
 
_onMouse : function(/*Event*/ event){
// summary:
// Sets _hovering, _active, and stateModifier properties depending on mouse state,
// then calls setStateClass() to set appropriate CSS classes for this.domNode.
//
// To get a different CSS class for hover, send onmouseover and onmouseout events to this method.
// To get a different CSS class while mouse button is depressed, send onmousedown to this method.
 
var mouseNode = event.target;
if(mouseNode && mouseNode.getAttribute){
this.stateModifier = mouseNode.getAttribute("stateModifier") || "";
}
 
if(!this.disabled){
switch(event.type){
case "mouseenter" :
case "mouseover" :
this._hovering = true;
break;
 
case "mouseout" :
case "mouseleave" :
this._hovering = false;
break;
 
case "mousedown" :
this._active = true;
// set a global event to handle mouseup, so it fires properly
// even if the cursor leaves the button
var self = this;
// #2685: use this.connect and disconnect so destroy works properly
var mouseUpConnector = this.connect(dojo.body(), "onmouseup", function(){
self._active = false;
self._setStateClass();
self.disconnect(mouseUpConnector);
});
break;
}
this._setStateClass();
}
},
 
isFocusable: function(){
return !this.disabled && (dojo.style(this.domNode, "display") != "none");
},
 
focus: function(){
dijit.focus(this.focusNode);
},
 
_setStateClass: function(){
// summary
// Update the visual state of the widget by setting the css classes on this.domNode
// (or this.stateNode if defined) by combining this.baseClass with
// various suffixes that represent the current widget state(s).
//
// In the case where a widget has multiple
// states, it sets the class based on all possible
// combinations. For example, an invalid form widget that is being hovered
// will be "dijitInput dijitInputInvalid dijitInputHover dijitInputInvalidHover".
//
// For complex widgets with multiple regions, there can be various hover/active states,
// such as "Hover" or "CloseButtonHover" (for tab buttons).
// This is controlled by a stateModifier="CloseButton" attribute on the close button node.
//
// The widget may have one or more of the following states, determined
// by this.state, this.checked, this.valid, and this.selected:
// Error - ValidationTextBox sets this.state to "Error" if the current input value is invalid
// Checked - ex: a checkmark or a ToggleButton in a checked state, will have this.checked==true
// Selected - ex: currently selected tab will have this.selected==true
//
// In addition, it may have at most one of the following states,
// based on this.disabled and flags set in _onMouse (this._active, this._hovering, this._focused):
// Disabled - if the widget is disabled
// Active - if the mouse (or space/enter key?) is being pressed down
// Focused - if the widget has focus
// Hover - if the mouse is over the widget
//
// (even if multiple af the above conditions are true we only pick the first matching one)
 
 
// Get original (non state related, non baseClass related) class specified in template
if(!("staticClass" in this)){
this.staticClass = (this.stateNode||this.domNode).className;
}
 
// Compute new set of classes
var classes = [ this.baseClass ];
 
function multiply(modifier){
classes=classes.concat(dojo.map(classes, function(c){ return c+modifier; }));
}
 
if(this.checked){
multiply("Checked");
}
if(this.state){
multiply(this.state);
}
if(this.selected){
multiply("Selected");
}
 
// Only one of these four can be applied.
// Active trumps Focused, Focused trumps Hover, and Disabled trumps all.
if(this.disabled){
multiply("Disabled");
}else if(this._active){
multiply(this.stateModifier+"Active");
}else{
if(this._focused){
multiply("Focused");
}
if((this.stateModifier || !this._focused) && this._hovering){
multiply(this.stateModifier+"Hover");
}
}
(this.stateNode || this.domNode).className = this.staticClass + " " + classes.join(" ");
},
 
onChange: function(newValue){
// summary: callback when value is changed
},
 
postCreate: function(){
this.setValue(this.value, null); // null reserved for initial value
this.setDisabled(this.disabled);
this._setStateClass();
},
 
setValue: function(/*anything*/ newValue, /*Boolean, optional*/ priorityChange){
// summary: set the value of the widget.
this._lastValue = newValue;
dijit.setWaiState(this.focusNode || this.domNode, "valuenow", this.forWaiValuenow());
if(priorityChange === undefined){ priorityChange = true; } // setValue with value only should fire onChange
if(this._lastValueReported == undefined && priorityChange === null){ // don't report the initial value
this._lastValueReported = newValue;
}
if((this.intermediateChanges || priorityChange) &&
((newValue && newValue.toString)?newValue.toString():newValue) !== ((this._lastValueReported && this._lastValueReported.toString)?this._lastValueReported.toString():this._lastValueReported)){
this._lastValueReported = newValue;
this.onChange(newValue);
}
},
 
getValue: function(){
// summary: get the value of the widget.
return this._lastValue;
},
 
undo: function(){
// summary: restore the value to the last value passed to onChange
this.setValue(this._lastValueReported, false);
},
 
_onKeyPress: function(e){
if(e.keyCode == dojo.keys.ESCAPE && !e.shiftKey && !e.ctrlKey && !e.altKey){
var v = this.getValue();
var lv = this._lastValueReported;
// Equality comparison of objects such as dates are done by reference so
// two distinct objects are != even if they have the same data. So use
// toStrings in case the values are objects.
if((typeof lv != "undefined") && ((v!==null && v.toString)?v.toString():null) !== lv.toString()){
this.undo();
dojo.stopEvent(e);
return false;
}
}
return true;
},
 
forWaiValuenow: function(){
// summary: returns a value, reflecting the current state of the widget,
// to be used for the ARIA valuenow.
// This method may be overridden by subclasses that want
// to use something other than this.getValue() for valuenow
return this.getValue();
}
});
 
}
 
if(!dojo._hasResource["dijit.dijit"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.dijit"] = true;
dojo.provide("dijit.dijit");
 
// All the stuff in _base (these are the function that are guaranteed available without an explicit dojo.require)
 
 
// And some other stuff that we tend to pull in all the time anyway
 
 
 
 
 
 
 
}
 
/trunk/api/js/dojo1.0/dijit/Editor.js
New file
0,0 → 1,379
if(!dojo._hasResource["dijit.Editor"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.Editor"] = true;
dojo.provide("dijit.Editor");
dojo.require("dijit._editor.RichText");
dojo.require("dijit.Toolbar");
dojo.require("dijit._editor._Plugin");
dojo.require("dijit._Container");
dojo.require("dojo.i18n");
dojo.requireLocalization("dijit._editor", "commands", null, "ko,zh,ja,zh-tw,ru,it,hu,fr,pt,pl,es,ROOT,de,cs");
 
dojo.declare(
"dijit.Editor",
dijit._editor.RichText,
{
// summary: A rich-text Editing widget
 
// plugins: Array
// a list of plugin names (as strings) or instances (as objects)
// for this widget.
plugins: null,
 
// extraPlugins: Array
// a list of extra plugin names which will be appended to plugins array
extraPlugins: null,
 
constructor: function(){
this.plugins=["undo","redo","|","cut","copy","paste","|","bold","italic","underline","strikethrough","|",
"insertOrderedList","insertUnorderedList","indent","outdent","|","justifyLeft","justifyRight","justifyCenter","justifyFull"/*"createLink"*/];
 
this._plugins=[];
this._editInterval = this.editActionInterval * 1000;
},
 
postCreate: function(){
//for custom undo/redo
if(this.customUndo){
dojo['require']("dijit._editor.range");
this._steps=this._steps.slice(0);
this._undoedSteps=this._undoedSteps.slice(0);
// this.addKeyHandler('z',this.KEY_CTRL,this.undo);
// this.addKeyHandler('y',this.KEY_CTRL,this.redo);
}
if(dojo.isArray(this.extraPlugins)){
this.plugins=this.plugins.concat(this.extraPlugins);
}
 
// try{
dijit.Editor.superclass.postCreate.apply(this, arguments);
 
this.commands = dojo.i18n.getLocalization("dijit._editor", "commands", this.lang);
 
if(!this.toolbar){
// if we haven't been assigned a toolbar, create one
var toolbarNode = dojo.doc.createElement("div");
dojo.place(toolbarNode, this.editingArea, "before");
this.toolbar = new dijit.Toolbar({}, toolbarNode);
}
 
dojo.forEach(this.plugins, this.addPlugin, this);
this.onNormalizedDisplayChanged(); //update toolbar button status
// }catch(e){ console.debug(e); }
},
destroy: function(){
dojo.forEach(this._plugins, function(p){
if(p.destroy){
p.destroy();
}
});
this._plugins=[];
this.toolbar.destroy(); delete this.toolbar;
this.inherited('destroy',arguments);
},
addPlugin: function(/*String||Object*/plugin, /*Integer?*/index){
// summary:
// takes a plugin name as a string or a plugin instance and
// adds it to the toolbar and associates it with this editor
// instance. The resulting plugin is added to the Editor's
// plugins array. If index is passed, it's placed in the plugins
// array at that index. No big magic, but a nice helper for
// passing in plugin names via markup.
// plugin: String, args object or plugin instance. Required.
// args: This object will be passed to the plugin constructor.
// index:
// Integer, optional. Used when creating an instance from
// something already in this.plugins. Ensures that the new
// instance is assigned to this.plugins at that index.
var args=dojo.isString(plugin)?{name:plugin}:plugin;
if(!args.setEditor){
var o={"args":args,"plugin":null,"editor":this};
dojo.publish("dijit.Editor.getPlugin",[o]);
if(!o.plugin){
var pc = dojo.getObject(args.name);
if(pc){
o.plugin=new pc(args);
}
}
if(!o.plugin){
console.debug('Cannot find plugin',plugin);
return;
}
plugin=o.plugin;
}
if(arguments.length > 1){
this._plugins[index] = plugin;
}else{
this._plugins.push(plugin);
}
plugin.setEditor(this);
if(dojo.isFunction(plugin.setToolbar)){
plugin.setToolbar(this.toolbar);
}
},
/* beginning of custom undo/redo support */
 
// customUndo: Boolean
// Whether we shall use custom undo/redo support instead of the native
// browser support. By default, we only enable customUndo for IE, as it
// has broken native undo/redo support. Note: the implementation does
// support other browsers which have W3C DOM2 Range API.
customUndo: dojo.isIE,
 
// editActionInterval: Integer
// When using customUndo, not every keystroke will be saved as a step.
// Instead typing (including delete) will be grouped together: after
// a user stop typing for editActionInterval seconds, a step will be
// saved; if a user resume typing within editActionInterval seconds,
// the timeout will be restarted. By default, editActionInterval is 3
// seconds.
editActionInterval: 3,
beginEditing: function(cmd){
if(!this._inEditing){
this._inEditing=true;
this._beginEditing(cmd);
}
if(this.editActionInterval>0){
if(this._editTimer){
clearTimeout(this._editTimer);
}
this._editTimer = setTimeout(dojo.hitch(this, this.endEditing), this._editInterval);
}
},
_steps:[],
_undoedSteps:[],
execCommand: function(cmd){
if(this.customUndo && (cmd=='undo' || cmd=='redo')){
return this[cmd]();
}else{
try{
if(this.customUndo){
this.endEditing();
this._beginEditing();
}
var r = this.inherited('execCommand',arguments);
if(this.customUndo){
this._endEditing();
}
return r;
}catch(e){
if(dojo.isMoz && /copy|cut|paste/.test(cmd)){
// Warn user of platform limitation. Cannot programmatically access keyboard. See ticket #4136
var sub = dojo.string.substitute,
accel = {cut:'X', copy:'C', paste:'V'},
isMac = navigator.userAgent.indexOf("Macintosh") != -1;
alert(sub(this.commands.systemShortcutFF,
[this.commands[cmd], sub(this.commands[isMac ? 'appleKey' : 'ctrlKey'], [accel[cmd]])]));
}
return false;
}
}
},
queryCommandEnabled: function(cmd){
if(this.customUndo && (cmd=='undo' || cmd=='redo')){
return cmd=='undo'?(this._steps.length>1):(this._undoedSteps.length>0);
}else{
return this.inherited('queryCommandEnabled',arguments);
}
},
_changeToStep: function(from,to){
this.setValue(to.text);
var b=to.bookmark;
if(!b){ return; }
if(dojo.isIE){
if(dojo.isArray(b)){//IE CONTROL
var tmp=[];
dojo.forEach(b,function(n){
tmp.push(dijit.range.getNode(n,this.editNode));
},this);
b=tmp;
}
}else{//w3c range
var r=dijit.range.create();
r.setStart(dijit.range.getNode(b.startContainer,this.editNode),b.startOffset);
r.setEnd(dijit.range.getNode(b.endContainer,this.editNode),b.endOffset);
b=r;
}
dojo.withGlobal(this.window,'moveToBookmark',dijit,[b]);
},
undo: function(){
// console.log('undo');
this.endEditing(true);
var s=this._steps.pop();
if(this._steps.length>0){
this.focus();
this._changeToStep(s,this._steps[this._steps.length-1]);
this._undoedSteps.push(s);
this.onDisplayChanged();
return true;
}
return false;
},
redo: function(){
// console.log('redo');
this.endEditing(true);
var s=this._undoedSteps.pop();
if(s && this._steps.length>0){
this.focus();
this._changeToStep(this._steps[this._steps.length-1],s);
this._steps.push(s);
this.onDisplayChanged();
return true;
}
return false;
},
endEditing: function(ignore_caret){
if(this._editTimer){
clearTimeout(this._editTimer);
}
if(this._inEditing){
this._endEditing(ignore_caret);
this._inEditing=false;
}
},
_getBookmark: function(){
var b=dojo.withGlobal(this.window,dijit.getBookmark);
if(dojo.isIE){
if(dojo.isArray(b)){//CONTROL
var tmp=[];
dojo.forEach(b,function(n){
tmp.push(dijit.range.getIndex(n,this.editNode).o);
},this);
b=tmp;
}
}else{//w3c range
var tmp=dijit.range.getIndex(b.startContainer,this.editNode).o
b={startContainer:tmp,
startOffset:b.startOffset,
endContainer:b.endContainer===b.startContainer?tmp:dijit.range.getIndex(b.endContainer,this.editNode).o,
endOffset:b.endOffset};
}
return b;
},
_beginEditing: function(cmd){
if(this._steps.length===0){
this._steps.push({'text':this.savedContent,'bookmark':this._getBookmark()});
}
},
_endEditing: function(ignore_caret){
var v=this.getValue(true);
 
this._undoedSteps=[];//clear undoed steps
this._steps.push({'text':v,'bookmark':this._getBookmark()});
},
onKeyDown: function(e){
if(!this.customUndo){
this.inherited('onKeyDown',arguments);
return;
}
var k=e.keyCode,ks=dojo.keys;
if(e.ctrlKey){
if(k===90||k===122){ //z
dojo.stopEvent(e);
this.undo();
return;
}else if(k===89||k===121){ //y
dojo.stopEvent(e);
this.redo();
return;
}
}
this.inherited('onKeyDown',arguments);
 
switch(k){
case ks.ENTER:
this.beginEditing();
break;
case ks.BACKSPACE:
case ks.DELETE:
this.beginEditing();
break;
case 88: //x
case 86: //v
if(e.ctrlKey && !e.altKey && !e.metaKey){
this.endEditing();//end current typing step if any
if(e.keyCode == 88){
this.beginEditing('cut');
//use timeout to trigger after the cut is complete
setTimeout(dojo.hitch(this, this.endEditing), 1);
}else{
this.beginEditing('paste');
//use timeout to trigger after the paste is complete
setTimeout(dojo.hitch(this, this.endEditing), 1);
}
break;
}
//pass through
default:
if(!e.ctrlKey && !e.altKey && !e.metaKey && (e.keyCode<dojo.keys.F1 || e.keyCode>dojo.keys.F15)){
this.beginEditing();
break;
}
//pass through
case ks.ALT:
this.endEditing();
break;
case ks.UP_ARROW:
case ks.DOWN_ARROW:
case ks.LEFT_ARROW:
case ks.RIGHT_ARROW:
case ks.HOME:
case ks.END:
case ks.PAGE_UP:
case ks.PAGE_DOWN:
this.endEditing(true);
break;
//maybe ctrl+backspace/delete, so don't endEditing when ctrl is pressed
case ks.CTRL:
case ks.SHIFT:
case ks.TAB:
break;
}
},
_onBlur: function(){
this.inherited('_onBlur',arguments);
this.endEditing(true);
},
onClick: function(){
this.endEditing(true);
this.inherited('onClick',arguments);
}
/* end of custom undo/redo support */
}
);
 
/* the following code is to registered a handler to get default plugins */
dojo.subscribe("dijit.Editor.getPlugin",null,function(o){
if(o.plugin){ return; }
var args=o.args, p;
var _p = dijit._editor._Plugin;
var name=args.name;
switch(name){
case "undo": case "redo": case "cut": case "copy": case "paste": case "insertOrderedList":
case "insertUnorderedList": case "indent": case "outdent": case "justifyCenter":
case "justifyFull": case "justifyLeft": case "justifyRight": case "delete":
case "selectAll": case "removeFormat":
p = new _p({ command: name });
break;
 
case "bold": case "italic": case "underline": case "strikethrough":
case "subscript": case "superscript":
p = new _p({ buttonClass: dijit.form.ToggleButton, command: name });
break;
case "|":
p = new _p({ button: new dijit.ToolbarSeparator() });
break;
case "createLink":
// dojo['require']('dijit._editor.plugins.LinkDialog');
p = new dijit._editor.plugins.LinkDialog({ command: name });
break;
case "foreColor": case "hiliteColor":
p = new dijit._editor.plugins.TextColor({ command: name });
break;
case "fontName": case "fontSize": case "formatBlock":
p = new dijit._editor.plugins.FontChoice({ command: name });
}
// console.log('name',name,p);
o.plugin=p;
});
 
}
/trunk/api/js/dojo1.0/dijit/dijit-all.js.uncompressed.js
New file
0,0 → 1,14798
/*
Copyright (c) 2004-2007, The Dojo Foundation
All Rights Reserved.
 
Licensed under the Academic Free License version 2.1 or above OR the
modified BSD license. For more information on Dojo licensing, see:
 
http://dojotoolkit.org/book/dojo-book-0-9/introduction/licensing
*/
 
/*
This is a compiled version of Dojo, built for deployment and not for
development. To get an editable version, please visit:
 
http://dojotoolkit.org
 
for documentation and information on getting the source.
*/
 
if(!dojo._hasResource["dojo.colors"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dojo.colors"] = true;
dojo.provide("dojo.colors");
 
(function(){
// this is a standard convertion prescribed by the CSS3 Color Module
var hue2rgb = function(m1, m2, h){
if(h < 0){ ++h; }
if(h > 1){ --h; }
var h6 = 6 * h;
if(h6 < 1){ return m1 + (m2 - m1) * h6; }
if(2 * h < 1){ return m2; }
if(3 * h < 2){ return m1 + (m2 - m1) * (2 / 3 - h) * 6; }
return m1;
};
dojo.colorFromRgb = function(/*String*/ color, /*dojo.Color?*/ obj){
// summary:
// get rgb(a) array from css-style color declarations
// description:
// this function can handle all 4 CSS3 Color Module formats: rgb,
// rgba, hsl, hsla, including rgb(a) with percentage values.
var m = color.toLowerCase().match(/^(rgba?|hsla?)\(([\s\.\-,%0-9]+)\)/);
if(m){
var c = m[2].split(/\s*,\s*/), l = c.length, t = m[1];
if((t == "rgb" && l == 3) || (t == "rgba" && l == 4)){
var r = c[0];
if(r.charAt(r.length - 1) == "%"){
// 3 rgb percentage values
var a = dojo.map(c, function(x){
return parseFloat(x) * 2.56;
});
if(l == 4){ a[3] = c[3]; }
return dojo.colorFromArray(a, obj); // dojo.Color
}
return dojo.colorFromArray(c, obj); // dojo.Color
}
if((t == "hsl" && l == 3) || (t == "hsla" && l == 4)){
// normalize hsl values
var H = ((parseFloat(c[0]) % 360) + 360) % 360 / 360,
S = parseFloat(c[1]) / 100,
L = parseFloat(c[2]) / 100,
// calculate rgb according to the algorithm
// recommended by the CSS3 Color Module
m2 = L <= 0.5 ? L * (S + 1) : L + S - L * S,
m1 = 2 * L - m2,
a = [hue2rgb(m1, m2, H + 1 / 3) * 256,
hue2rgb(m1, m2, H) * 256, hue2rgb(m1, m2, H - 1 / 3) * 256, 1];
if(l == 4){ a[3] = c[3]; }
return dojo.colorFromArray(a, obj); // dojo.Color
}
}
return null; // dojo.Color
};
var confine = function(c, low, high){
// summary:
// sanitize a color component by making sure it is a number,
// and clamping it to valid values
c = Number(c);
return isNaN(c) ? high : c < low ? low : c > high ? high : c; // Number
};
dojo.Color.prototype.sanitize = function(){
// summary: makes sure that the object has correct attributes
var t = this;
t.r = Math.round(confine(t.r, 0, 255));
t.g = Math.round(confine(t.g, 0, 255));
t.b = Math.round(confine(t.b, 0, 255));
t.a = confine(t.a, 0, 1);
return this; // dojo.Color
};
})();
 
 
dojo.colors.makeGrey = function(/*Number*/ g, /*Number?*/ a){
// summary: creates a greyscale color with an optional alpha
return dojo.colorFromArray([g, g, g, a]);
};
 
 
// mixin all CSS3 named colors not already in _base, along with SVG 1.0 variant spellings
dojo.Color.named = dojo.mixin({
aliceblue: [240,248,255],
antiquewhite: [250,235,215],
aquamarine: [127,255,212],
azure: [240,255,255],
beige: [245,245,220],
bisque: [255,228,196],
blanchedalmond: [255,235,205],
blueviolet: [138,43,226],
brown: [165,42,42],
burlywood: [222,184,135],
cadetblue: [95,158,160],
chartreuse: [127,255,0],
chocolate: [210,105,30],
coral: [255,127,80],
cornflowerblue: [100,149,237],
cornsilk: [255,248,220],
crimson: [220,20,60],
cyan: [0,255,255],
darkblue: [0,0,139],
darkcyan: [0,139,139],
darkgoldenrod: [184,134,11],
darkgray: [169,169,169],
darkgreen: [0,100,0],
darkgrey: [169,169,169],
darkkhaki: [189,183,107],
darkmagenta: [139,0,139],
darkolivegreen: [85,107,47],
darkorange: [255,140,0],
darkorchid: [153,50,204],
darkred: [139,0,0],
darksalmon: [233,150,122],
darkseagreen: [143,188,143],
darkslateblue: [72,61,139],
darkslategray: [47,79,79],
darkslategrey: [47,79,79],
darkturquoise: [0,206,209],
darkviolet: [148,0,211],
deeppink: [255,20,147],
deepskyblue: [0,191,255],
dimgray: [105,105,105],
dimgrey: [105,105,105],
dodgerblue: [30,144,255],
firebrick: [178,34,34],
floralwhite: [255,250,240],
forestgreen: [34,139,34],
gainsboro: [220,220,220],
ghostwhite: [248,248,255],
gold: [255,215,0],
goldenrod: [218,165,32],
greenyellow: [173,255,47],
grey: [128,128,128],
honeydew: [240,255,240],
hotpink: [255,105,180],
indianred: [205,92,92],
indigo: [75,0,130],
ivory: [255,255,240],
khaki: [240,230,140],
lavender: [230,230,250],
lavenderblush: [255,240,245],
lawngreen: [124,252,0],
lemonchiffon: [255,250,205],
lightblue: [173,216,230],
lightcoral: [240,128,128],
lightcyan: [224,255,255],
lightgoldenrodyellow: [250,250,210],
lightgray: [211,211,211],
lightgreen: [144,238,144],
lightgrey: [211,211,211],
lightpink: [255,182,193],
lightsalmon: [255,160,122],
lightseagreen: [32,178,170],
lightskyblue: [135,206,250],
lightslategray: [119,136,153],
lightslategrey: [119,136,153],
lightsteelblue: [176,196,222],
lightyellow: [255,255,224],
limegreen: [50,205,50],
linen: [250,240,230],
magenta: [255,0,255],
mediumaquamarine: [102,205,170],
mediumblue: [0,0,205],
mediumorchid: [186,85,211],
mediumpurple: [147,112,219],
mediumseagreen: [60,179,113],
mediumslateblue: [123,104,238],
mediumspringgreen: [0,250,154],
mediumturquoise: [72,209,204],
mediumvioletred: [199,21,133],
midnightblue: [25,25,112],
mintcream: [245,255,250],
mistyrose: [255,228,225],
moccasin: [255,228,181],
navajowhite: [255,222,173],
oldlace: [253,245,230],
olivedrab: [107,142,35],
orange: [255,165,0],
orangered: [255,69,0],
orchid: [218,112,214],
palegoldenrod: [238,232,170],
palegreen: [152,251,152],
paleturquoise: [175,238,238],
palevioletred: [219,112,147],
papayawhip: [255,239,213],
peachpuff: [255,218,185],
peru: [205,133,63],
pink: [255,192,203],
plum: [221,160,221],
powderblue: [176,224,230],
rosybrown: [188,143,143],
royalblue: [65,105,225],
saddlebrown: [139,69,19],
salmon: [250,128,114],
sandybrown: [244,164,96],
seagreen: [46,139,87],
seashell: [255,245,238],
sienna: [160,82,45],
skyblue: [135,206,235],
slateblue: [106,90,205],
slategray: [112,128,144],
slategrey: [112,128,144],
snow: [255,250,250],
springgreen: [0,255,127],
steelblue: [70,130,180],
tan: [210,180,140],
thistle: [216,191,216],
tomato: [255,99,71],
transparent: [0, 0, 0, 0],
turquoise: [64,224,208],
violet: [238,130,238],
wheat: [245,222,179],
whitesmoke: [245,245,245],
yellowgreen: [154,205,50]
}, dojo.Color.named);
 
}
 
if(!dojo._hasResource["dojo.i18n"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dojo.i18n"] = true;
dojo.provide("dojo.i18n");
 
dojo.i18n.getLocalization = function(/*String*/packageName, /*String*/bundleName, /*String?*/locale){
// summary:
// Returns an Object containing the localization for a given resource
// bundle in a package, matching the specified locale.
// description:
// Returns a hash containing name/value pairs in its prototypesuch
// that values can be easily overridden. Throws an exception if the
// bundle is not found. Bundle must have already been loaded by
// dojo.requireLocalization() or by a build optimization step. NOTE:
// try not to call this method as part of an object property
// definition (var foo = { bar: dojo.i18n.getLocalization() }). In
// some loading situations, the bundle may not be available in time
// for the object definition. Instead, call this method inside a
// function that is run after all modules load or the page loads (like
// in dojo.adOnLoad()), or in a widget lifecycle method.
// packageName:
// package which is associated with this resource
// bundleName:
// the base filename of the resource bundle (without the ".js" suffix)
// locale:
// the variant to load (optional). By default, the locale defined by
// the host environment: dojo.locale
 
locale = dojo.i18n.normalizeLocale(locale);
 
// look for nearest locale match
var elements = locale.split('-');
var module = [packageName,"nls",bundleName].join('.');
var bundle = dojo._loadedModules[module];
if(bundle){
var localization;
for(var i = elements.length; i > 0; i--){
var loc = elements.slice(0, i).join('_');
if(bundle[loc]){
localization = bundle[loc];
break;
}
}
if(!localization){
localization = bundle.ROOT;
}
 
// make a singleton prototype so that the caller won't accidentally change the values globally
if(localization){
var clazz = function(){};
clazz.prototype = localization;
return new clazz(); // Object
}
}
 
throw new Error("Bundle not found: " + bundleName + " in " + packageName+" , locale=" + locale);
};
 
dojo.i18n.normalizeLocale = function(/*String?*/locale){
// summary:
// Returns canonical form of locale, as used by Dojo.
//
// description:
// All variants are case-insensitive and are separated by '-' as specified in RFC 3066.
// If no locale is specified, the dojo.locale is returned. dojo.locale is defined by
// the user agent's locale unless overridden by djConfig.
 
var result = locale ? locale.toLowerCase() : dojo.locale;
if(result == "root"){
result = "ROOT";
}
return result; // String
};
 
dojo.i18n._requireLocalization = function(/*String*/moduleName, /*String*/bundleName, /*String?*/locale, /*String?*/availableFlatLocales){
// summary:
// See dojo.requireLocalization()
// description:
// Called by the bootstrap, but factored out so that it is only
// included in the build when needed.
 
var targetLocale = dojo.i18n.normalizeLocale(locale);
var bundlePackage = [moduleName, "nls", bundleName].join(".");
// NOTE:
// When loading these resources, the packaging does not match what is
// on disk. This is an implementation detail, as this is just a
// private data structure to hold the loaded resources. e.g.
// tests/hello/nls/en-us/salutations.js is loaded as the object
// tests.hello.nls.salutations.en_us={...} The structure on disk is
// intended to be most convenient for developers and translators, but
// in memory it is more logical and efficient to store in a different
// order. Locales cannot use dashes, since the resulting path will
// not evaluate as valid JS, so we translate them to underscores.
//Find the best-match locale to load if we have available flat locales.
var bestLocale = "";
if(availableFlatLocales){
var flatLocales = availableFlatLocales.split(",");
for(var i = 0; i < flatLocales.length; i++){
//Locale must match from start of string.
if(targetLocale.indexOf(flatLocales[i]) == 0){
if(flatLocales[i].length > bestLocale.length){
bestLocale = flatLocales[i];
}
}
}
if(!bestLocale){
bestLocale = "ROOT";
}
}
 
//See if the desired locale is already loaded.
var tempLocale = availableFlatLocales ? bestLocale : targetLocale;
var bundle = dojo._loadedModules[bundlePackage];
var localizedBundle = null;
if(bundle){
if(djConfig.localizationComplete && bundle._built){return;}
var jsLoc = tempLocale.replace(/-/g, '_');
var translationPackage = bundlePackage+"."+jsLoc;
localizedBundle = dojo._loadedModules[translationPackage];
}
 
if(!localizedBundle){
bundle = dojo["provide"](bundlePackage);
var syms = dojo._getModuleSymbols(moduleName);
var modpath = syms.concat("nls").join("/");
var parent;
 
dojo.i18n._searchLocalePath(tempLocale, availableFlatLocales, function(loc){
var jsLoc = loc.replace(/-/g, '_');
var translationPackage = bundlePackage + "." + jsLoc;
var loaded = false;
if(!dojo._loadedModules[translationPackage]){
// Mark loaded whether it's found or not, so that further load attempts will not be made
dojo["provide"](translationPackage);
var module = [modpath];
if(loc != "ROOT"){module.push(loc);}
module.push(bundleName);
var filespec = module.join("/") + '.js';
loaded = dojo._loadPath(filespec, null, function(hash){
// Use singleton with prototype to point to parent bundle, then mix-in result from loadPath
var clazz = function(){};
clazz.prototype = parent;
bundle[jsLoc] = new clazz();
for(var j in hash){ bundle[jsLoc][j] = hash[j]; }
});
}else{
loaded = true;
}
if(loaded && bundle[jsLoc]){
parent = bundle[jsLoc];
}else{
bundle[jsLoc] = parent;
}
if(availableFlatLocales){
//Stop the locale path searching if we know the availableFlatLocales, since
//the first call to this function will load the only bundle that is needed.
return true;
}
});
}
 
//Save the best locale bundle as the target locale bundle when we know the
//the available bundles.
if(availableFlatLocales && targetLocale != bestLocale){
bundle[targetLocale.replace(/-/g, '_')] = bundle[bestLocale.replace(/-/g, '_')];
}
};
 
(function(){
// If other locales are used, dojo.requireLocalization should load them as
// well, by default.
//
// Override dojo.requireLocalization to do load the default bundle, then
// iterate through the extraLocale list and load those translations as
// well, unless a particular locale was requested.
 
var extra = djConfig.extraLocale;
if(extra){
if(!extra instanceof Array){
extra = [extra];
}
 
var req = dojo.i18n._requireLocalization;
dojo.i18n._requireLocalization = function(m, b, locale, availableFlatLocales){
req(m,b,locale, availableFlatLocales);
if(locale){return;}
for(var i=0; i<extra.length; i++){
req(m,b,extra[i], availableFlatLocales);
}
};
}
})();
 
dojo.i18n._searchLocalePath = function(/*String*/locale, /*Boolean*/down, /*Function*/searchFunc){
// summary:
// A helper method to assist in searching for locale-based resources.
// Will iterate through the variants of a particular locale, either up
// or down, executing a callback function. For example, "en-us" and
// true will try "en-us" followed by "en" and finally "ROOT".
 
locale = dojo.i18n.normalizeLocale(locale);
 
var elements = locale.split('-');
var searchlist = [];
for(var i = elements.length; i > 0; i--){
searchlist.push(elements.slice(0, i).join('-'));
}
searchlist.push(false);
if(down){searchlist.reverse();}
 
for(var j = searchlist.length - 1; j >= 0; j--){
var loc = searchlist[j] || "ROOT";
var stop = searchFunc(loc);
if(stop){ break; }
}
};
 
dojo.i18n._preloadLocalizations = function(/*String*/bundlePrefix, /*Array*/localesGenerated){
// summary:
// Load built, flattened resource bundles, if available for all
// locales used in the page. Only called by built layer files.
 
function preload(locale){
locale = dojo.i18n.normalizeLocale(locale);
dojo.i18n._searchLocalePath(locale, true, function(loc){
for(var i=0; i<localesGenerated.length;i++){
if(localesGenerated[i] == loc){
dojo["require"](bundlePrefix+"_"+loc);
return true; // Boolean
}
}
return false; // Boolean
});
}
preload();
var extra = djConfig.extraLocale||[];
for(var i=0; i<extra.length; i++){
preload(extra[i]);
}
};
 
}
 
if(!dojo._hasResource["dijit.ColorPalette"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.ColorPalette"] = true;
dojo.provide("dijit.ColorPalette");
 
 
 
 
 
 
 
dojo.declare(
"dijit.ColorPalette",
[dijit._Widget, dijit._Templated],
{
// summary
// Grid showing various colors, so the user can pick a certain color
 
// defaultTimeout: Number
// number of milliseconds before a held key or button becomes typematic
defaultTimeout: 500,
 
// timeoutChangeRate: Number
// fraction of time used to change the typematic timer between events
// 1.0 means that each typematic event fires at defaultTimeout intervals
// < 1.0 means that each typematic event fires at an increasing faster rate
timeoutChangeRate: 0.90,
 
// palette: String
// Size of grid, either "7x10" or "3x4".
palette: "7x10",
 
//_value: String
// The value of the selected color.
value: null,
 
//_currentFocus: Integer
// Index of the currently focused color.
_currentFocus: 0,
 
// _xDim: Integer
// This is the number of colors horizontally across.
_xDim: null,
 
// _yDim: Integer
/// This is the number of colors vertically down.
_yDim: null,
 
// _palettes: Map
// This represents the value of the colors.
// The first level is a hashmap of the different arrays available
// The next two dimensions represent the columns and rows of colors.
_palettes: {
 
"7x10": [["white", "seashell", "cornsilk", "lemonchiffon","lightyellow", "palegreen", "paleturquoise", "lightcyan", "lavender", "plum"],
["lightgray", "pink", "bisque", "moccasin", "khaki", "lightgreen", "lightseagreen", "lightskyblue", "cornflowerblue", "violet"],
["silver", "lightcoral", "sandybrown", "orange", "palegoldenrod", "chartreuse", "mediumturquoise", "skyblue", "mediumslateblue","orchid"],
["gray", "red", "orangered", "darkorange", "yellow", "limegreen", "darkseagreen", "royalblue", "slateblue", "mediumorchid"],
["dimgray", "crimson", "chocolate", "coral", "gold", "forestgreen", "seagreen", "blue", "blueviolet", "darkorchid"],
["darkslategray","firebrick","saddlebrown", "sienna", "olive", "green", "darkcyan", "mediumblue","darkslateblue", "darkmagenta" ],
["black", "darkred", "maroon", "brown", "darkolivegreen", "darkgreen", "midnightblue", "navy", "indigo", "purple"]],
 
"3x4": [["white", "lime", "green", "blue"],
["silver", "yellow", "fuchsia", "navy"],
["gray", "red", "purple", "black"]]
 
},
 
// _imagePaths: Map
// This is stores the path to the palette images
_imagePaths: {
"7x10": dojo.moduleUrl("dijit", "templates/colors7x10.png"),
"3x4": dojo.moduleUrl("dijit", "templates/colors3x4.png")
},
 
// _paletteCoords: Map
// This is a map that is used to calculate the coordinates of the
// images that make up the palette.
_paletteCoords: {
"leftOffset": 4, "topOffset": 4,
"cWidth": 20, "cHeight": 20
},
 
// templatePath: String
// Path to the template of this widget.
templateString:"<div class=\"dijitInline dijitColorPalette\">\n\t<div class=\"dijitColorPaletteInner\" dojoAttachPoint=\"divNode\" waiRole=\"grid\" tabIndex=\"-1\">\n\t\t<img class=\"dijitColorPaletteUnder\" dojoAttachPoint=\"imageNode\" waiRole=\"presentation\">\n\t</div>\t\n</div>\n",
 
// _paletteDims: Object
// Size of the supported palettes for alignment purposes.
_paletteDims: {
"7x10": {"width": "206px", "height": "145px"},
"3x4": {"width": "86px", "height": "64px"}
},
 
 
postCreate: function(){
// A name has to be given to the colorMap, this needs to be unique per Palette.
dojo.mixin(this.divNode.style, this._paletteDims[this.palette]);
this.imageNode.setAttribute("src", this._imagePaths[this.palette]);
var choices = this._palettes[this.palette];
this.domNode.style.position = "relative";
this._highlightNodes = [];
this.colorNames = dojo.i18n.getLocalization("dojo", "colors", this.lang);
var url= dojo.moduleUrl("dijit", "templates/blank.gif");
var colorObject = new dojo.Color(),
coords = this._paletteCoords;
for(var row=0; row < choices.length; row++){
for(var col=0; col < choices[row].length; col++) {
var highlightNode = document.createElement("img");
highlightNode.src = url;
dojo.addClass(highlightNode, "dijitPaletteImg");
var color = choices[row][col],
colorValue = colorObject.setColor(dojo.Color.named[color]);
highlightNode.alt = this.colorNames[color];
highlightNode.color = colorValue.toHex();
var highlightStyle = highlightNode.style;
highlightStyle.color = highlightStyle.backgroundColor = highlightNode.color;
dojo.forEach(["Dijitclick", "MouseOut", "MouseOver", "Blur", "Focus"], function(handler) {
this.connect(highlightNode, "on" + handler.toLowerCase(), "_onColor" + handler);
}, this);
this.divNode.appendChild(highlightNode);
highlightStyle.top = coords.topOffset + (row * coords.cHeight) + "px";
highlightStyle.left = coords.leftOffset + (col * coords.cWidth) + "px";
highlightNode.setAttribute("tabIndex", "-1");
highlightNode.title = this.colorNames[color];
dijit.setWaiRole(highlightNode, "gridcell");
highlightNode.index = this._highlightNodes.length;
this._highlightNodes.push(highlightNode);
}
}
this._highlightNodes[this._currentFocus].tabIndex = 0;
this._xDim = choices[0].length;
this._yDim = choices.length;
 
// Now set all events
// The palette itself is navigated to with the tab key on the keyboard
// Keyboard navigation within the Palette is with the arrow keys
// Spacebar selects the color.
// For the up key the index is changed by negative the x dimension.
 
var keyIncrementMap = {
UP_ARROW: -this._xDim,
// The down key the index is increase by the x dimension.
DOWN_ARROW: this._xDim,
// Right and left move the index by 1.
RIGHT_ARROW: 1,
LEFT_ARROW: -1
};
for(var key in keyIncrementMap){
this._connects.push(dijit.typematic.addKeyListener(this.domNode,
{keyCode:dojo.keys[key], ctrlKey:false, altKey:false, shiftKey:false},
this,
function(){
var increment = keyIncrementMap[key];
return function(count){ this._navigateByKey(increment, count); };
}(),
this.timeoutChangeRate, this.defaultTimeout));
}
},
 
focus: function(){
// summary:
// Focus this ColorPalette.
dijit.focus(this._highlightNodes[this._currentFocus]);
},
 
onChange: function(color){
// summary:
// Callback when a color is selected.
// color: String
// Hex value corresponding to color.
// console.debug("Color selected is: "+color);
},
 
_onColorDijitclick: function(/*Event*/ evt){
// summary:
// Handler for click, enter key & space key. Selects the color.
// evt:
// The event.
var target = evt.currentTarget;
if (this._currentFocus != target.index){
this._currentFocus = target.index;
dijit.focus(target);
}
this._selectColor(target);
dojo.stopEvent(evt);
},
 
_onColorMouseOut: function(/*Event*/ evt){
// summary:
// Handler for onMouseOut. Removes highlight.
// evt:
// The mouse event.
dojo.removeClass(evt.currentTarget, "dijitPaletteImgHighlight");
},
 
_onColorMouseOver: function(/*Event*/ evt){
// summary:
// Handler for onMouseOver. Highlights the color.
// evt:
// The mouse event.
var target = evt.currentTarget;
target.tabIndex = 0;
target.focus();
},
 
_onColorBlur: function(/*Event*/ evt){
// summary:
// Handler for onBlur. Removes highlight and sets
// the first color as the palette's tab point.
// evt:
// The blur event.
dojo.removeClass(evt.currentTarget, "dijitPaletteImgHighlight");
evt.currentTarget.tabIndex = -1;
this._currentFocus = 0;
this._highlightNodes[0].tabIndex = 0;
},
 
_onColorFocus: function(/*Event*/ evt){
// summary:
// Handler for onFocus. Highlights the color.
// evt:
// The focus event.
if(this._currentFocus != evt.currentTarget.index){
this._highlightNodes[this._currentFocus].tabIndex = -1;
}
this._currentFocus = evt.currentTarget.index;
dojo.addClass(evt.currentTarget, "dijitPaletteImgHighlight");
 
},
 
_selectColor: function(selectNode){
// summary:
// This selects a color. It triggers the onChange event
// area:
// The area node that covers the color being selected.
this.onChange(this.value = selectNode.color);
},
 
_navigateByKey: function(increment, typeCount){
// summary:we
// This is the callback for typematic.
// It changes the focus and the highlighed color.
// increment:
// How much the key is navigated.
// typeCount:
// How many times typematic has fired.
 
// typecount == -1 means the key is released.
if(typeCount == -1){ return; }
 
var newFocusIndex = this._currentFocus + increment;
if(newFocusIndex < this._highlightNodes.length && newFocusIndex > -1)
{
var focusNode = this._highlightNodes[newFocusIndex];
focusNode.tabIndex = 0;
focusNode.focus();
}
}
});
 
}
 
if(!dojo._hasResource["dijit.Declaration"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.Declaration"] = true;
dojo.provide("dijit.Declaration");
 
 
 
dojo.declare(
"dijit.Declaration",
dijit._Widget,
{
// summary:
// The Declaration widget allows a user to declare new widget
// classes directly from a snippet of markup.
 
_noScript: true,
widgetClass: "",
replaceVars: true,
defaults: null,
mixins: [],
buildRendering: function(){
var src = this.srcNodeRef.parentNode.removeChild(this.srcNodeRef);
var preambles = dojo.query("> script[type='dojo/method'][event='preamble']", src).orphan();
var scripts = dojo.query("> script[type^='dojo/']", src).orphan();
var srcType = src.nodeName;
 
var propList = this.defaults||{};
 
// map array of strings like [ "dijit.form.Button" ] to array of mixin objects
// (note that dojo.map(this.mixins, dojo.getObject) doesn't work because it passes
// a bogus third argument to getObject(), confusing it)
this.mixins = this.mixins.length ?
dojo.map(this.mixins, function(name){ return dojo.getObject(name); } ) :
[ dijit._Widget, dijit._Templated ];
 
if(preambles.length){
// we only support one preamble. So be it.
propList.preamble = dojo.parser._functionFromScript(preambles[0]);
}
 
var parsedScripts = dojo.map(scripts, function(s){
var evt = s.getAttribute("event")||"postscript";
return {
event: evt,
func: dojo.parser._functionFromScript(s)
};
});
 
// do the connects for each <script type="dojo/connect" event="foo"> block and make
// all <script type="dojo/method"> tags execute right after construction
this.mixins.push(function(){
dojo.forEach(parsedScripts, function(s){
dojo.connect(this, s.event, this, s.func);
}, this);
});
 
propList.widgetsInTemplate = true;
propList._skipNodeCache = true;
propList.templateString = "<"+srcType+" class='"+src.className+"' dojoAttachPoint='"+(src.getAttribute("dojoAttachPoint")||'')+"' dojoAttachEvent='"+(src.getAttribute("dojoAttachEvent")||'')+"' >"+src.innerHTML.replace(/\%7B/g,"{").replace(/\%7D/g,"}")+"</"+srcType+">";
// console.debug(propList.templateString);
 
// strip things so we don't create stuff under us in the initial setup phase
dojo.query("[dojoType]", src).forEach(function(node){
node.removeAttribute("dojoType");
});
 
// create the new widget class
dojo.declare(
this.widgetClass,
this.mixins,
propList
);
}
}
);
 
}
 
if(!dojo._hasResource["dojo.dnd.common"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dojo.dnd.common"] = true;
dojo.provide("dojo.dnd.common");
 
dojo.dnd._copyKey = navigator.appVersion.indexOf("Macintosh") < 0 ? "ctrlKey" : "metaKey";
 
dojo.dnd.getCopyKeyState = function(e) {
// summary: abstracts away the difference between selection on Mac and PC,
// and returns the state of the "copy" key to be pressed.
// e: Event: mouse event
return e[dojo.dnd._copyKey]; // Boolean
};
 
dojo.dnd._uniqueId = 0;
dojo.dnd.getUniqueId = function(){
// summary: returns a unique string for use with any DOM element
var id;
do{
id = "dojoUnique" + (++dojo.dnd._uniqueId);
}while(dojo.byId(id));
return id;
};
 
dojo.dnd._empty = {};
 
dojo.dnd.isFormElement = function(/*Event*/ e){
// summary: returns true, if user clicked on a form element
var t = e.target;
if(t.nodeType == 3 /*TEXT_NODE*/){
t = t.parentNode;
}
return " button textarea input select option ".indexOf(" " + t.tagName.toLowerCase() + " ") >= 0; // Boolean
};
 
}
 
if(!dojo._hasResource["dojo.dnd.autoscroll"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dojo.dnd.autoscroll"] = true;
dojo.provide("dojo.dnd.autoscroll");
 
dojo.dnd.getViewport = function(){
// summary: returns a viewport size (visible part of the window)
 
// FIXME: need more docs!!
var d = dojo.doc, dd = d.documentElement, w = window, b = dojo.body();
if(dojo.isMozilla){
return {w: dd.clientWidth, h: w.innerHeight}; // Object
}else if(!dojo.isOpera && w.innerWidth){
return {w: w.innerWidth, h: w.innerHeight}; // Object
}else if (!dojo.isOpera && dd && dd.clientWidth){
return {w: dd.clientWidth, h: dd.clientHeight}; // Object
}else if (b.clientWidth){
return {w: b.clientWidth, h: b.clientHeight}; // Object
}
return null; // Object
};
 
dojo.dnd.V_TRIGGER_AUTOSCROLL = 32;
dojo.dnd.H_TRIGGER_AUTOSCROLL = 32;
 
dojo.dnd.V_AUTOSCROLL_VALUE = 16;
dojo.dnd.H_AUTOSCROLL_VALUE = 16;
 
dojo.dnd.autoScroll = function(e){
// summary:
// a handler for onmousemove event, which scrolls the window, if
// necesary
// e: Event:
// onmousemove event
 
// FIXME: needs more docs!
var v = dojo.dnd.getViewport(), dx = 0, dy = 0;
if(e.clientX < dojo.dnd.H_TRIGGER_AUTOSCROLL){
dx = -dojo.dnd.H_AUTOSCROLL_VALUE;
}else if(e.clientX > v.w - dojo.dnd.H_TRIGGER_AUTOSCROLL){
dx = dojo.dnd.H_AUTOSCROLL_VALUE;
}
if(e.clientY < dojo.dnd.V_TRIGGER_AUTOSCROLL){
dy = -dojo.dnd.V_AUTOSCROLL_VALUE;
}else if(e.clientY > v.h - dojo.dnd.V_TRIGGER_AUTOSCROLL){
dy = dojo.dnd.V_AUTOSCROLL_VALUE;
}
window.scrollBy(dx, dy);
};
 
dojo.dnd._validNodes = {"div": 1, "p": 1, "td": 1};
dojo.dnd._validOverflow = {"auto": 1, "scroll": 1};
 
dojo.dnd.autoScrollNodes = function(e){
// summary:
// a handler for onmousemove event, which scrolls the first avaialble
// Dom element, it falls back to dojo.dnd.autoScroll()
// e: Event:
// onmousemove event
 
// FIXME: needs more docs!
for(var n = e.target; n;){
if(n.nodeType == 1 && (n.tagName.toLowerCase() in dojo.dnd._validNodes)){
var s = dojo.getComputedStyle(n);
if(s.overflow.toLowerCase() in dojo.dnd._validOverflow){
var b = dojo._getContentBox(n, s), t = dojo._abs(n, true);
// console.debug(b.l, b.t, t.x, t.y, n.scrollLeft, n.scrollTop);
b.l += t.x + n.scrollLeft;
b.t += t.y + n.scrollTop;
var w = Math.min(dojo.dnd.H_TRIGGER_AUTOSCROLL, b.w / 2),
h = Math.min(dojo.dnd.V_TRIGGER_AUTOSCROLL, b.h / 2),
rx = e.pageX - b.l, ry = e.pageY - b.t, dx = 0, dy = 0;
if(rx > 0 && rx < b.w){
if(rx < w){
dx = -dojo.dnd.H_AUTOSCROLL_VALUE;
}else if(rx > b.w - w){
dx = dojo.dnd.H_AUTOSCROLL_VALUE;
}
}
//console.debug("ry =", ry, "b.h =", b.h, "h =", h);
if(ry > 0 && ry < b.h){
if(ry < h){
dy = -dojo.dnd.V_AUTOSCROLL_VALUE;
}else if(ry > b.h - h){
dy = dojo.dnd.V_AUTOSCROLL_VALUE;
}
}
var oldLeft = n.scrollLeft, oldTop = n.scrollTop;
n.scrollLeft = n.scrollLeft + dx;
n.scrollTop = n.scrollTop + dy;
// if(dx || dy){ console.debug(oldLeft + ", " + oldTop + "\n" + dx + ", " + dy + "\n" + n.scrollLeft + ", " + n.scrollTop); }
if(oldLeft != n.scrollLeft || oldTop != n.scrollTop){ return; }
}
}
try{
n = n.parentNode;
}catch(x){
n = null;
}
}
dojo.dnd.autoScroll(e);
};
 
}
 
if(!dojo._hasResource["dojo.dnd.Mover"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dojo.dnd.Mover"] = true;
dojo.provide("dojo.dnd.Mover");
 
 
 
 
dojo.declare("dojo.dnd.Mover", null, {
constructor: function(node, e, host){
// summary: an object, which makes a node follow the mouse,
// used as a default mover, and as a base class for custom movers
// node: Node: a node (or node's id) to be moved
// e: Event: a mouse event, which started the move;
// only pageX and pageY properties are used
// host: Object?: object which implements the functionality of the move,
// and defines proper events (onMoveStart and onMoveStop)
this.node = dojo.byId(node);
this.marginBox = {l: e.pageX, t: e.pageY};
this.mouseButton = e.button;
var h = this.host = host, d = node.ownerDocument,
firstEvent = dojo.connect(d, "onmousemove", this, "onFirstMove");
this.events = [
dojo.connect(d, "onmousemove", this, "onMouseMove"),
dojo.connect(d, "onmouseup", this, "onMouseUp"),
// cancel text selection and text dragging
dojo.connect(d, "ondragstart", dojo, "stopEvent"),
dojo.connect(d, "onselectstart", dojo, "stopEvent"),
firstEvent
];
// notify that the move has started
if(h && h.onMoveStart){
h.onMoveStart(this);
}
},
// mouse event processors
onMouseMove: function(e){
// summary: event processor for onmousemove
// e: Event: mouse event
dojo.dnd.autoScroll(e);
var m = this.marginBox;
this.host.onMove(this, {l: m.l + e.pageX, t: m.t + e.pageY});
},
onMouseUp: function(e){
if(this.mouseButton == e.button){
this.destroy();
}
},
// utilities
onFirstMove: function(){
// summary: makes the node absolute; it is meant to be called only once
this.node.style.position = "absolute"; // enforcing the absolute mode
var m = dojo.marginBox(this.node);
m.l -= this.marginBox.l;
m.t -= this.marginBox.t;
this.marginBox = m;
this.host.onFirstMove(this);
dojo.disconnect(this.events.pop());
},
destroy: function(){
// summary: stops the move, deletes all references, so the object can be garbage-collected
dojo.forEach(this.events, dojo.disconnect);
// undo global settings
var h = this.host;
if(h && h.onMoveStop){
h.onMoveStop(this);
}
// destroy objects
this.events = this.node = null;
}
});
 
}
 
if(!dojo._hasResource["dojo.dnd.Moveable"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dojo.dnd.Moveable"] = true;
dojo.provide("dojo.dnd.Moveable");
 
 
 
dojo.declare("dojo.dnd.Moveable", null, {
// object attributes (for markup)
handle: "",
delay: 0,
skip: false,
constructor: function(node, params){
// summary: an object, which makes a node moveable
// node: Node: a node (or node's id) to be moved
// params: Object: an optional object with additional parameters;
// following parameters are recognized:
// handle: Node: a node (or node's id), which is used as a mouse handle
// if omitted, the node itself is used as a handle
// delay: Number: delay move by this number of pixels
// skip: Boolean: skip move of form elements
// mover: Object: a constructor of custom Mover
this.node = dojo.byId(node);
if(!params){ params = {}; }
this.handle = params.handle ? dojo.byId(params.handle) : null;
if(!this.handle){ this.handle = this.node; }
this.delay = params.delay > 0 ? params.delay : 0;
this.skip = params.skip;
this.mover = params.mover ? params.mover : dojo.dnd.Mover;
this.events = [
dojo.connect(this.handle, "onmousedown", this, "onMouseDown"),
// cancel text selection and text dragging
dojo.connect(this.handle, "ondragstart", this, "onSelectStart"),
dojo.connect(this.handle, "onselectstart", this, "onSelectStart")
];
},
 
// markup methods
markupFactory: function(params, node){
return new dojo.dnd.Moveable(node, params);
},
 
// methods
destroy: function(){
// summary: stops watching for possible move, deletes all references, so the object can be garbage-collected
dojo.forEach(this.events, dojo.disconnect);
this.events = this.node = this.handle = null;
},
// mouse event processors
onMouseDown: function(e){
// summary: event processor for onmousedown, creates a Mover for the node
// e: Event: mouse event
if(this.skip && dojo.dnd.isFormElement(e)){ return; }
if(this.delay){
this.events.push(dojo.connect(this.handle, "onmousemove", this, "onMouseMove"));
this.events.push(dojo.connect(this.handle, "onmouseup", this, "onMouseUp"));
this._lastX = e.pageX;
this._lastY = e.pageY;
}else{
new this.mover(this.node, e, this);
}
dojo.stopEvent(e);
},
onMouseMove: function(e){
// summary: event processor for onmousemove, used only for delayed drags
// e: Event: mouse event
if(Math.abs(e.pageX - this._lastX) > this.delay || Math.abs(e.pageY - this._lastY) > this.delay){
this.onMouseUp(e);
new this.mover(this.node, e, this);
}
dojo.stopEvent(e);
},
onMouseUp: function(e){
// summary: event processor for onmouseup, used only for delayed delayed drags
// e: Event: mouse event
dojo.disconnect(this.events.pop());
dojo.disconnect(this.events.pop());
},
onSelectStart: function(e){
// summary: event processor for onselectevent and ondragevent
// e: Event: mouse event
if(!this.skip || !dojo.dnd.isFormElement(e)){
dojo.stopEvent(e);
}
},
// local events
onMoveStart: function(/* dojo.dnd.Mover */ mover){
// summary: called before every move operation
dojo.publish("/dnd/move/start", [mover]);
dojo.addClass(dojo.body(), "dojoMove");
dojo.addClass(this.node, "dojoMoveItem");
},
onMoveStop: function(/* dojo.dnd.Mover */ mover){
// summary: called after every move operation
dojo.publish("/dnd/move/stop", [mover]);
dojo.removeClass(dojo.body(), "dojoMove");
dojo.removeClass(this.node, "dojoMoveItem");
},
onFirstMove: function(/* dojo.dnd.Mover */ mover){
// summary: called during the very first move notification,
// can be used to initialize coordinates, can be overwritten.
// default implementation does nothing
},
onMove: function(/* dojo.dnd.Mover */ mover, /* Object */ leftTop){
// summary: called during every move notification,
// should actually move the node, can be overwritten.
this.onMoving(mover, leftTop);
dojo.marginBox(mover.node, leftTop);
this.onMoved(mover, leftTop);
},
onMoving: function(/* dojo.dnd.Mover */ mover, /* Object */ leftTop){
// summary: called before every incremental move,
// can be overwritten.
// default implementation does nothing
},
onMoved: function(/* dojo.dnd.Mover */ mover, /* Object */ leftTop){
// summary: called after every incremental move,
// can be overwritten.
// default implementation does nothing
}
});
 
}
 
if(!dojo._hasResource["dojo.dnd.move"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dojo.dnd.move"] = true;
dojo.provide("dojo.dnd.move");
 
 
 
 
dojo.declare("dojo.dnd.move.constrainedMoveable", dojo.dnd.Moveable, {
// object attributes (for markup)
constraints: function(){},
within: false,
// markup methods
markupFactory: function(params, node){
return new dojo.dnd.move.constrainedMoveable(node, params);
},
 
constructor: function(node, params){
// summary: an object, which makes a node moveable
// node: Node: a node (or node's id) to be moved
// params: Object: an optional object with additional parameters;
// following parameters are recognized:
// constraints: Function: a function, which calculates a constraint box,
// it is called in a context of the moveable object.
// within: Boolean: restrict move within boundaries.
// the rest is passed to the base class
if(!params){ params = {}; }
this.constraints = params.constraints;
this.within = params.within;
},
onFirstMove: function(/* dojo.dnd.Mover */ mover){
// summary: called during the very first move notification,
// can be used to initialize coordinates, can be overwritten.
var c = this.constraintBox = this.constraints.call(this, mover), m = mover.marginBox;
c.r = c.l + c.w - (this.within ? m.w : 0);
c.b = c.t + c.h - (this.within ? m.h : 0);
},
onMove: function(/* dojo.dnd.Mover */ mover, /* Object */ leftTop){
// summary: called during every move notification,
// should actually move the node, can be overwritten.
var c = this.constraintBox;
leftTop.l = leftTop.l < c.l ? c.l : c.r < leftTop.l ? c.r : leftTop.l;
leftTop.t = leftTop.t < c.t ? c.t : c.b < leftTop.t ? c.b : leftTop.t;
dojo.marginBox(mover.node, leftTop);
}
});
 
dojo.declare("dojo.dnd.move.boxConstrainedMoveable", dojo.dnd.move.constrainedMoveable, {
// object attributes (for markup)
box: {},
// markup methods
markupFactory: function(params, node){
return new dojo.dnd.move.boxConstrainedMoveable(node, params);
},
 
constructor: function(node, params){
// summary: an object, which makes a node moveable
// node: Node: a node (or node's id) to be moved
// params: Object: an optional object with additional parameters;
// following parameters are recognized:
// box: Object: a constraint box
// the rest is passed to the base class
var box = params && params.box;
this.constraints = function(){ return box; };
}
});
 
dojo.declare("dojo.dnd.move.parentConstrainedMoveable", dojo.dnd.move.constrainedMoveable, {
// object attributes (for markup)
area: "content",
 
// markup methods
markupFactory: function(params, node){
return new dojo.dnd.move.parentConstrainedMoveable(node, params);
},
 
constructor: function(node, params){
// summary: an object, which makes a node moveable
// node: Node: a node (or node's id) to be moved
// params: Object: an optional object with additional parameters;
// following parameters are recognized:
// area: String: a parent's area to restrict the move,
// can be "margin", "border", "padding", or "content".
// the rest is passed to the base class
var area = params && params.area;
this.constraints = function(){
var n = this.node.parentNode,
s = dojo.getComputedStyle(n),
mb = dojo._getMarginBox(n, s);
if(area == "margin"){
return mb; // Object
}
var t = dojo._getMarginExtents(n, s);
mb.l += t.l, mb.t += t.t, mb.w -= t.w, mb.h -= t.h;
if(area == "border"){
return mb; // Object
}
t = dojo._getBorderExtents(n, s);
mb.l += t.l, mb.t += t.t, mb.w -= t.w, mb.h -= t.h;
if(area == "padding"){
return mb; // Object
}
t = dojo._getPadExtents(n, s);
mb.l += t.l, mb.t += t.t, mb.w -= t.w, mb.h -= t.h;
return mb; // Object
};
}
});
 
// WARNING: below are obsolete objects, instead of custom movers use custom moveables (above)
 
dojo.dnd.move.constrainedMover = function(fun, within){
// summary: returns a constrained version of dojo.dnd.Mover
// description: this function produces n object, which will put a constraint on
// the margin box of dragged object in absolute coordinates
// fun: Function: called on drag, and returns a constraint box
// within: Boolean: if true, constraints the whole dragged object withtin the rectangle,
// otherwise the constraint is applied to the left-top corner
var mover = function(node, e, notifier){
dojo.dnd.Mover.call(this, node, e, notifier);
};
dojo.extend(mover, dojo.dnd.Mover.prototype);
dojo.extend(mover, {
onMouseMove: function(e){
// summary: event processor for onmousemove
// e: Event: mouse event
dojo.dnd.autoScroll(e);
var m = this.marginBox, c = this.constraintBox,
l = m.l + e.pageX, t = m.t + e.pageY;
l = l < c.l ? c.l : c.r < l ? c.r : l;
t = t < c.t ? c.t : c.b < t ? c.b : t;
this.host.onMove(this, {l: l, t: t});
},
onFirstMove: function(){
// summary: called once to initialize things; it is meant to be called only once
dojo.dnd.Mover.prototype.onFirstMove.call(this);
var c = this.constraintBox = fun.call(this), m = this.marginBox;
c.r = c.l + c.w - (within ? m.w : 0);
c.b = c.t + c.h - (within ? m.h : 0);
}
});
return mover; // Object
};
 
dojo.dnd.move.boxConstrainedMover = function(box, within){
// summary: a specialization of dojo.dnd.constrainedMover, which constrains to the specified box
// box: Object: a constraint box (l, t, w, h)
// within: Boolean: if true, constraints the whole dragged object withtin the rectangle,
// otherwise the constraint is applied to the left-top corner
return dojo.dnd.move.constrainedMover(function(){ return box; }, within); // Object
};
 
dojo.dnd.move.parentConstrainedMover = function(area, within){
// summary: a specialization of dojo.dnd.constrainedMover, which constrains to the parent node
// area: String: "margin" to constrain within the parent's margin box, "border" for the border box,
// "padding" for the padding box, and "content" for the content box; "content" is the default value.
// within: Boolean: if true, constraints the whole dragged object withtin the rectangle,
// otherwise the constraint is applied to the left-top corner
var fun = function(){
var n = this.node.parentNode,
s = dojo.getComputedStyle(n),
mb = dojo._getMarginBox(n, s);
if(area == "margin"){
return mb; // Object
}
var t = dojo._getMarginExtents(n, s);
mb.l += t.l, mb.t += t.t, mb.w -= t.w, mb.h -= t.h;
if(area == "border"){
return mb; // Object
}
t = dojo._getBorderExtents(n, s);
mb.l += t.l, mb.t += t.t, mb.w -= t.w, mb.h -= t.h;
if(area == "padding"){
return mb; // Object
}
t = dojo._getPadExtents(n, s);
mb.l += t.l, mb.t += t.t, mb.w -= t.w, mb.h -= t.h;
return mb; // Object
};
return dojo.dnd.move.constrainedMover(fun, within); // Object
};
 
// patching functions one level up for compatibility
 
dojo.dnd.constrainedMover = dojo.dnd.move.constrainedMover;
dojo.dnd.boxConstrainedMover = dojo.dnd.move.boxConstrainedMover;
dojo.dnd.parentConstrainedMover = dojo.dnd.move.parentConstrainedMover;
 
}
 
if(!dojo._hasResource["dojo.fx"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dojo.fx"] = true;
dojo.provide("dojo.fx");
dojo.provide("dojo.fx.Toggler");
 
dojo.fx.chain = function(/*dojo._Animation[]*/ animations){
// summary: Chain a list of dojo._Animation s to run in sequence
// example:
// | dojo.fx.chain([
// | dojo.fadeIn({ node:node }),
// | dojo.fadeOut({ node:otherNode })
// | ]).play();
//
var first = animations.shift();
var previous = first;
dojo.forEach(animations, function(current){
dojo.connect(previous, "onEnd", current, "play");
previous = current;
});
return first; // dojo._Animation
};
 
dojo.fx.combine = function(/*dojo._Animation[]*/ animations){
// summary: Combine a list of dojo._Animation s to run in parallel
// example:
// | dojo.fx.combine([
// | dojo.fadeIn({ node:node }),
// | dojo.fadeOut({ node:otherNode })
// | ]).play();
var ctr = new dojo._Animation({ curve: [0, 1] });
if(!animations.length){ return ctr; }
// animations.sort(function(a, b){ return a.duration-b.duration; });
ctr.duration = animations[0].duration;
dojo.forEach(animations, function(current){
dojo.forEach([ "play", "pause", "stop" ],
function(e){
if(current[e]){
dojo.connect(ctr, e, current, e);
}
}
);
});
return ctr; // dojo._Animation
};
 
dojo.declare("dojo.fx.Toggler", null, {
// summary:
// class constructor for an animation toggler. It accepts a packed
// set of arguments about what type of animation to use in each
// direction, duration, etc.
//
// example:
// | var t = new dojo.fx.Toggler({
// | node: "nodeId",
// | showDuration: 500,
// | // hideDuration will default to "200"
// | showFunc: dojo.wipeIn,
// | // hideFunc will default to "fadeOut"
// | });
// | t.show(100); // delay showing for 100ms
// | // ...time passes...
// | t.hide();
 
// FIXME: need a policy for where the toggler should "be" the next
// time show/hide are called if we're stopped somewhere in the
// middle.
 
constructor: function(args){
var _t = this;
 
dojo.mixin(_t, args);
_t.node = args.node;
_t._showArgs = dojo.mixin({}, args);
_t._showArgs.node = _t.node;
_t._showArgs.duration = _t.showDuration;
_t.showAnim = _t.showFunc(_t._showArgs);
 
_t._hideArgs = dojo.mixin({}, args);
_t._hideArgs.node = _t.node;
_t._hideArgs.duration = _t.hideDuration;
_t.hideAnim = _t.hideFunc(_t._hideArgs);
 
dojo.connect(_t.showAnim, "beforeBegin", dojo.hitch(_t.hideAnim, "stop", true));
dojo.connect(_t.hideAnim, "beforeBegin", dojo.hitch(_t.showAnim, "stop", true));
},
 
// node: DomNode
// the node to toggle
node: null,
 
// showFunc: Function
// The function that returns the dojo._Animation to show the node
showFunc: dojo.fadeIn,
 
// hideFunc: Function
// The function that returns the dojo._Animation to hide the node
hideFunc: dojo.fadeOut,
 
// showDuration:
// Time in milliseconds to run the show Animation
showDuration: 200,
 
// hideDuration:
// Time in milliseconds to run the hide Animation
hideDuration: 200,
 
/*=====
_showArgs: null,
_showAnim: null,
 
_hideArgs: null,
_hideAnim: null,
 
_isShowing: false,
_isHiding: false,
=====*/
 
show: function(delay){
// summary: Toggle the node to showing
return this.showAnim.play(delay || 0);
},
 
hide: function(delay){
// summary: Toggle the node to hidden
return this.hideAnim.play(delay || 0);
}
});
 
dojo.fx.wipeIn = function(/*Object*/ args){
// summary
// Returns an animation that will expand the
// node defined in 'args' object from it's current height to
// it's natural height (with no scrollbar).
// Node must have no margin/border/padding.
args.node = dojo.byId(args.node);
var node = args.node, s = node.style;
 
var anim = dojo.animateProperty(dojo.mixin({
properties: {
height: {
// wrapped in functions so we wait till the last second to query (in case value has changed)
start: function(){
// start at current [computed] height, but use 1px rather than 0
// because 0 causes IE to display the whole panel
s.overflow="hidden";
if(s.visibility=="hidden"||s.display=="none"){
s.height="1px";
s.display="";
s.visibility="";
return 1;
}else{
var height = dojo.style(node, "height");
return Math.max(height, 1);
}
},
end: function(){
return node.scrollHeight;
}
}
}
}, args));
 
dojo.connect(anim, "onEnd", function(){
s.height = "auto";
});
 
return anim; // dojo._Animation
}
 
dojo.fx.wipeOut = function(/*Object*/ args){
// summary
// Returns an animation that will shrink node defined in "args"
// from it's current height to 1px, and then hide it.
var node = args.node = dojo.byId(args.node);
var s = node.style;
 
var anim = dojo.animateProperty(dojo.mixin({
properties: {
height: {
end: 1 // 0 causes IE to display the whole panel
}
}
}, args));
 
dojo.connect(anim, "beforeBegin", function(){
s.overflow = "hidden";
s.display = "";
});
dojo.connect(anim, "onEnd", function(){
s.height = "auto";
s.display = "none";
});
 
return anim; // dojo._Animation
}
 
dojo.fx.slideTo = function(/*Object?*/ args){
// summary
// Returns an animation that will slide "node"
// defined in args Object from its current position to
// the position defined by (args.left, args.top).
// example:
// | dojo.fx.slideTo({ node: node, left:"40", top:"50", unit:"px" }).play()
 
var node = (args.node = dojo.byId(args.node));
var top = null;
var left = null;
var init = (function(n){
return function(){
var cs = dojo.getComputedStyle(n);
var pos = cs.position;
top = (pos == 'absolute' ? n.offsetTop : parseInt(cs.top) || 0);
left = (pos == 'absolute' ? n.offsetLeft : parseInt(cs.left) || 0);
if(pos != 'absolute' && pos != 'relative'){
var ret = dojo.coords(n, true);
top = ret.y;
left = ret.x;
n.style.position="absolute";
n.style.top=top+"px";
n.style.left=left+"px";
}
};
})(node);
init();
 
var anim = dojo.animateProperty(dojo.mixin({
properties: {
top: { end: args.top||0 },
left: { end: args.left||0 }
}
}, args));
dojo.connect(anim, "beforeBegin", anim, init);
 
return anim; // dojo._Animation
}
 
}
 
if(!dojo._hasResource["dijit.layout.ContentPane"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.layout.ContentPane"] = true;
dojo.provide("dijit.layout.ContentPane");
 
 
 
 
 
 
 
 
dojo.declare(
"dijit.layout.ContentPane",
dijit._Widget,
{
// summary:
// A widget that acts as a Container for other widgets, and includes a ajax interface
// description:
// A widget that can be used as a standalone widget
// or as a baseclass for other widgets
// Handles replacement of document fragment using either external uri or javascript
// generated markup or DOM content, instantiating widgets within that content.
// Don't confuse it with an iframe, it only needs/wants document fragments.
// It's useful as a child of LayoutContainer, SplitContainer, or TabContainer.
// But note that those classes can contain any widget as a child.
// example:
// Some quick samples:
// To change the innerHTML use .setContent('<b>new content</b>')
//
// Or you can send it a NodeList, .setContent(dojo.query('div [class=selected]', userSelection))
// please note that the nodes in NodeList will copied, not moved
//
// To do a ajax update use .setHref('url')
//
// href: String
// The href of the content that displays now.
// Set this at construction if you want to load data externally when the
// pane is shown. (Set preload=true to load it immediately.)
// Changing href after creation doesn't have any effect; see setHref();
href: "",
 
// extractContent: Boolean
// Extract visible content from inside of <body> .... </body>
extractContent: false,
 
// parseOnLoad: Boolean
// parse content and create the widgets, if any
parseOnLoad: true,
 
// preventCache: Boolean
// Cache content retreived externally
preventCache: false,
 
// preload: Boolean
// Force load of data even if pane is hidden.
preload: false,
 
// refreshOnShow: Boolean
// Refresh (re-download) content when pane goes from hidden to shown
refreshOnShow: false,
 
// loadingMessage: String
// Message that shows while downloading
loadingMessage: "<span class='dijitContentPaneLoading'>${loadingState}</span>",
 
// errorMessage: String
// Message that shows if an error occurs
errorMessage: "<span class='dijitContentPaneError'>${errorState}</span>",
 
// isLoaded: Boolean
// Tells loading status see onLoad|onUnload for event hooks
isLoaded: false,
 
// class: String
// Class name to apply to ContentPane dom nodes
"class": "dijitContentPane",
 
postCreate: function(){
// remove the title attribute so it doesn't show up when i hover
// over a node
this.domNode.title = "";
 
if(this.preload){
this._loadCheck();
}
 
var messages = dojo.i18n.getLocalization("dijit", "loading", this.lang);
this.loadingMessage = dojo.string.substitute(this.loadingMessage, messages);
this.errorMessage = dojo.string.substitute(this.errorMessage, messages);
 
// for programatically created ContentPane (with <span> tag), need to muck w/CSS
// or it's as though overflow:visible is set
dojo.addClass(this.domNode, this["class"]);
},
 
startup: function(){
if(this._started){ return; }
this._checkIfSingleChild();
if(this._singleChild){
this._singleChild.startup();
}
this._loadCheck();
this._started = true;
},
 
_checkIfSingleChild: function(){
// summary:
// Test if we have exactly one widget as a child, and if so assume that we are a container for that widget,
// and should propogate startup() and resize() calls to it.
var childNodes = dojo.query(">", this.containerNode || this.domNode),
childWidgets = childNodes.filter("[widgetId]");
 
if(childNodes.length == 1 && childWidgets.length == 1){
this.isContainer = true;
this._singleChild = dijit.byNode(childWidgets[0]);
}else{
delete this.isContainer;
delete this._singleChild;
}
},
 
refresh: function(){
// summary:
// Force a refresh (re-download) of content, be sure to turn off cache
 
// we return result of _prepareLoad here to avoid code dup. in dojox.layout.ContentPane
return this._prepareLoad(true);
},
 
setHref: function(/*String|Uri*/ href){
// summary:
// Reset the (external defined) content of this pane and replace with new url
// Note: It delays the download until widget is shown if preload is false
// href:
// url to the page you want to get, must be within the same domain as your mainpage
this.href = href;
 
// we return result of _prepareLoad here to avoid code dup. in dojox.layout.ContentPane
return this._prepareLoad();
},
 
setContent: function(/*String|DomNode|Nodelist*/data){
// summary:
// Replaces old content with data content, include style classes from old content
// data:
// the new Content may be String, DomNode or NodeList
//
// if data is a NodeList (or an array of nodes) nodes are copied
// so you can import nodes from another document implicitly
 
// clear href so we cant run refresh and clear content
// refresh should only work if we downloaded the content
if(!this._isDownloaded){
this.href = "";
this._onUnloadHandler();
}
 
this._setContent(data || "");
 
this._isDownloaded = false; // must be set after _setContent(..), pathadjust in dojox.layout.ContentPane
 
if(this.parseOnLoad){
this._createSubWidgets();
}
 
this._checkIfSingleChild();
if(this._singleChild && this._singleChild.resize){
this._singleChild.resize(this._contentBox);
}
 
this._onLoadHandler();
},
 
cancel: function(){
// summary:
// Cancels a inflight download of content
if(this._xhrDfd && (this._xhrDfd.fired == -1)){
this._xhrDfd.cancel();
}
delete this._xhrDfd; // garbage collect
},
 
destroy: function(){
// if we have multiple controllers destroying us, bail after the first
if(this._beingDestroyed){
return;
}
// make sure we call onUnload
this._onUnloadHandler();
this._beingDestroyed = true;
this.inherited("destroy",arguments);
},
 
resize: function(size){
dojo.marginBox(this.domNode, size);
 
// Compute content box size in case we [later] need to size child
// If either height or width wasn't specified by the user, then query node for it.
// But note that setting the margin box and then immediately querying dimensions may return
// inaccurate results, so try not to depend on it.
var node = this.containerNode || this.domNode,
mb = dojo.mixin(dojo.marginBox(node), size||{});
 
this._contentBox = dijit.layout.marginBox2contentBox(node, mb);
 
// If we have a single widget child then size it to fit snugly within my borders
if(this._singleChild && this._singleChild.resize){
this._singleChild.resize(this._contentBox);
}
},
 
_prepareLoad: function(forceLoad){
// sets up for a xhrLoad, load is deferred until widget onShow
// cancels a inflight download
this.cancel();
this.isLoaded = false;
this._loadCheck(forceLoad);
},
 
_loadCheck: function(forceLoad){
// call this when you change onShow (onSelected) status when selected in parent container
// it's used as a trigger for href download when this.domNode.display != 'none'
 
// sequence:
// if no href -> bail
// forceLoad -> always load
// this.preload -> load when download not in progress, domNode display doesn't matter
// this.refreshOnShow -> load when download in progress bails, domNode display !='none' AND
// this.open !== false (undefined is ok), isLoaded doesn't matter
// else -> load when download not in progress, if this.open !== false (undefined is ok) AND
// domNode display != 'none', isLoaded must be false
 
var displayState = ((this.open !== false) && (this.domNode.style.display != 'none'));
 
if(this.href &&
(forceLoad ||
(this.preload && !this._xhrDfd) ||
(this.refreshOnShow && displayState && !this._xhrDfd) ||
(!this.isLoaded && displayState && !this._xhrDfd)
)
){
this._downloadExternalContent();
}
},
 
_downloadExternalContent: function(){
this._onUnloadHandler();
 
// display loading message
this._setContent(
this.onDownloadStart.call(this)
);
 
var self = this;
var getArgs = {
preventCache: (this.preventCache || this.refreshOnShow),
url: this.href,
handleAs: "text"
};
if(dojo.isObject(this.ioArgs)){
dojo.mixin(getArgs, this.ioArgs);
}
 
var hand = this._xhrDfd = (this.ioMethod || dojo.xhrGet)(getArgs);
 
hand.addCallback(function(html){
try{
self.onDownloadEnd.call(self);
self._isDownloaded = true;
self.setContent.call(self, html); // onload event is called from here
}catch(err){
self._onError.call(self, 'Content', err); // onContentError
}
delete self._xhrDfd;
return html;
});
 
hand.addErrback(function(err){
if(!hand.cancelled){
// show error message in the pane
self._onError.call(self, 'Download', err); // onDownloadError
}
delete self._xhrDfd;
return err;
});
},
 
_onLoadHandler: function(){
this.isLoaded = true;
try{
this.onLoad.call(this);
}catch(e){
console.error('Error '+this.widgetId+' running custom onLoad code');
}
},
 
_onUnloadHandler: function(){
this.isLoaded = false;
this.cancel();
try{
this.onUnload.call(this);
}catch(e){
console.error('Error '+this.widgetId+' running custom onUnload code');
}
},
 
_setContent: function(cont){
this.destroyDescendants();
 
try{
var node = this.containerNode || this.domNode;
while(node.firstChild){
dojo._destroyElement(node.firstChild);
}
if(typeof cont == "string"){
// dijit.ContentPane does only minimal fixes,
// No pathAdjustments, script retrieval, style clean etc
// some of these should be available in the dojox.layout.ContentPane
if(this.extractContent){
match = cont.match(/<body[^>]*>\s*([\s\S]+)\s*<\/body>/im);
if(match){ cont = match[1]; }
}
node.innerHTML = cont;
}else{
// domNode or NodeList
if(cont.nodeType){ // domNode (htmlNode 1 or textNode 3)
node.appendChild(cont);
}else{// nodelist or array such as dojo.Nodelist
dojo.forEach(cont, function(n){
node.appendChild(n.cloneNode(true));
});
}
}
}catch(e){
// check if a domfault occurs when we are appending this.errorMessage
// like for instance if domNode is a UL and we try append a DIV
var errMess = this.onContentError(e);
try{
node.innerHTML = errMess;
}catch(e){
console.error('Fatal '+this.id+' could not change content due to '+e.message, e);
}
}
},
 
_onError: function(type, err, consoleText){
// shows user the string that is returned by on[type]Error
// overide on[type]Error and return your own string to customize
var errText = this['on' + type + 'Error'].call(this, err);
if(consoleText){
console.error(consoleText, err);
}else if(errText){// a empty string won't change current content
this._setContent.call(this, errText);
}
},
 
_createSubWidgets: function(){
// summary: scan my contents and create subwidgets
var rootNode = this.containerNode || this.domNode;
try{
dojo.parser.parse(rootNode, true);
}catch(e){
this._onError('Content', e, "Couldn't create widgets in "+this.id
+(this.href ? " from "+this.href : ""));
}
},
 
// EVENT's, should be overide-able
onLoad: function(e){
// summary:
// Event hook, is called after everything is loaded and widgetified
},
 
onUnload: function(e){
// summary:
// Event hook, is called before old content is cleared
},
 
onDownloadStart: function(){
// summary:
// called before download starts
// the string returned by this function will be the html
// that tells the user we are loading something
// override with your own function if you want to change text
return this.loadingMessage;
},
 
onContentError: function(/*Error*/ error){
// summary:
// called on DOM faults, require fault etc in content
// default is to display errormessage inside pane
},
 
onDownloadError: function(/*Error*/ error){
// summary:
// Called when download error occurs, default is to display
// errormessage inside pane. Overide function to change that.
// The string returned by this function will be the html
// that tells the user a error happend
return this.errorMessage;
},
 
onDownloadEnd: function(){
// summary:
// called when download is finished
}
});
 
}
 
if(!dojo._hasResource["dijit.form.Form"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.form.Form"] = true;
dojo.provide("dijit.form.Form");
 
 
 
 
dojo.declare("dijit.form._FormMixin", null,
{
/*
summary:
Widget corresponding to <form> tag, for validation and serialization
 
usage:
<form dojoType="dijit.form.Form" id="myForm">
Name: <input type="text" name="name" />
</form>
myObj={name: "John Doe"};
dijit.byId('myForm').setValues(myObj);
 
myObj=dijit.byId('myForm').getValues();
TODO:
* Repeater
* better handling for arrays. Often form elements have names with [] like
* people[3].sex (for a list of people [{name: Bill, sex: M}, ...])
 
*/
 
// HTML <FORM> attributes
 
action: "",
method: "",
enctype: "",
name: "",
"accept-charset": "",
accept: "",
target: "",
 
attributeMap: dojo.mixin(dojo.clone(dijit._Widget.prototype.attributeMap),
{action: "", method: "", enctype: "", "accept-charset": "", accept: "", target: ""}),
 
// execute: Function
// User defined function to do stuff when the user hits the submit button
execute: function(/*Object*/ formContents){},
 
// onCancel: Function
// Callback when user has canceled dialog, to notify container
// (user shouldn't override)
onCancel: function(){},
 
// onExecute: Function
// Callback when user is about to execute dialog, to notify container
// (user shouldn't override)
onExecute: function(){},
 
templateString: "<form dojoAttachPoint='containerNode' dojoAttachEvent='onsubmit:_onSubmit' name='${name}' enctype='multipart/form-data'></form>",
 
_onSubmit: function(/*event*/e) {
// summary: callback when user hits submit button
dojo.stopEvent(e);
this.onExecute(); // notify container that we are about to execute
this.execute(this.getValues());
},
 
submit: function() {
// summary: programatically submit form
this.containerNode.submit();
},
 
setValues: function(/*object*/obj) {
// summary: fill in form values from a JSON structure
 
// generate map from name --> [list of widgets with that name]
var map = {};
dojo.forEach(this.getDescendants(), function(widget){
if(!widget.name){ return; }
var entry = map[widget.name] || (map[widget.name] = [] );
entry.push(widget);
});
 
// call setValue() or setChecked() for each widget, according to obj
for(var name in map){
var widgets = map[name], // array of widgets w/this name
values = dojo.getObject(name, false, obj); // list of values for those widgets
if(!dojo.isArray(values)){
values = [ values ];
}
if(widgets[0].setChecked){
// for checkbox/radio, values is a list of which widgets should be checked
dojo.forEach(widgets, function(w, i){
w.setChecked(dojo.indexOf(values, w.value) != -1);
});
}else{
// otherwise, values is a list of values to be assigned sequentially to each widget
dojo.forEach(widgets, function(w, i){
w.setValue(values[i]);
});
}
}
 
/***
* TODO: code for plain input boxes (this shouldn't run for inputs that are part of widgets
 
dojo.forEach(this.containerNode.elements, function(element){
if (element.name == ''){return}; // like "continue"
var namePath = element.name.split(".");
var myObj=obj;
var name=namePath[namePath.length-1];
for(var j=1,len2=namePath.length;j<len2;++j) {
var p=namePath[j - 1];
// repeater support block
var nameA=p.split("[");
if (nameA.length > 1) {
if(typeof(myObj[nameA[0]]) == "undefined") {
myObj[nameA[0]]=[ ];
} // if
 
nameIndex=parseInt(nameA[1]);
if(typeof(myObj[nameA[0]][nameIndex]) == "undefined") {
myObj[nameA[0]][nameIndex]={};
}
myObj=myObj[nameA[0]][nameIndex];
continue;
} // repeater support ends
 
if(typeof(myObj[p]) == "undefined") {
myObj=undefined;
break;
};
myObj=myObj[p];
}
 
if (typeof(myObj) == "undefined") {
return; // like "continue"
}
if (typeof(myObj[name]) == "undefined" && this.ignoreNullValues) {
return; // like "continue"
}
 
// TODO: widget values (just call setValue() on the widget)
 
switch(element.type) {
case "checkbox":
element.checked = (name in myObj) &&
dojo.some(myObj[name], function(val){ return val==element.value; });
break;
case "radio":
element.checked = (name in myObj) && myObj[name]==element.value;
break;
case "select-multiple":
element.selectedIndex=-1;
dojo.forEach(element.options, function(option){
option.selected = dojo.some(myObj[name], function(val){ return option.value == val; });
});
break;
case "select-one":
element.selectedIndex="0";
dojo.forEach(element.options, function(option){
option.selected = option.value == myObj[name];
});
break;
case "hidden":
case "text":
case "textarea":
case "password":
element.value = myObj[name] || "";
break;
}
});
*/
},
 
getValues: function() {
// summary: generate JSON structure from form values
 
// get widget values
var obj = {};
dojo.forEach(this.getDescendants(), function(widget){
var value = widget.getValue ? widget.getValue() : widget.value;
var name = widget.name;
if(!name){ return; }
 
// Store widget's value(s) as a scalar, except for checkboxes which are automatically arrays
if(widget.setChecked){
if(/Radio/.test(widget.declaredClass)){
// radio button
if(widget.checked){
dojo.setObject(name, value, obj);
}
}else{
// checkbox/toggle button
var ary=dojo.getObject(name, false, obj);
if(!ary){
ary=[];
dojo.setObject(name, ary, obj);
}
if(widget.checked){
ary.push(value);
}
}
}else{
// plain input
dojo.setObject(name, value, obj);
}
});
 
/***
* code for plain input boxes (see also dojo.formToObject, can we use that instead of this code?
* but it doesn't understand [] notation, presumably)
var obj = { };
dojo.forEach(this.containerNode.elements, function(elm){
if (!elm.name) {
return; // like "continue"
}
var namePath = elm.name.split(".");
var myObj=obj;
var name=namePath[namePath.length-1];
for(var j=1,len2=namePath.length;j<len2;++j) {
var nameIndex = null;
var p=namePath[j - 1];
var nameA=p.split("[");
if (nameA.length > 1) {
if(typeof(myObj[nameA[0]]) == "undefined") {
myObj[nameA[0]]=[ ];
} // if
nameIndex=parseInt(nameA[1]);
if(typeof(myObj[nameA[0]][nameIndex]) == "undefined") {
myObj[nameA[0]][nameIndex]={};
}
} else if(typeof(myObj[nameA[0]]) == "undefined") {
myObj[nameA[0]]={}
} // if
 
if (nameA.length == 1) {
myObj=myObj[nameA[0]];
} else {
myObj=myObj[nameA[0]][nameIndex];
} // if
} // for
 
if ((elm.type != "select-multiple" && elm.type != "checkbox" && elm.type != "radio") || (elm.type=="radio" && elm.checked)) {
if(name == name.split("[")[0]) {
myObj[name]=elm.value;
} else {
// can not set value when there is no name
}
} else if (elm.type == "checkbox" && elm.checked) {
if(typeof(myObj[name]) == 'undefined') {
myObj[name]=[ ];
}
myObj[name].push(elm.value);
} else if (elm.type == "select-multiple") {
if(typeof(myObj[name]) == 'undefined') {
myObj[name]=[ ];
}
for (var jdx=0,len3=elm.options.length; jdx<len3; ++jdx) {
if (elm.options[jdx].selected) {
myObj[name].push(elm.options[jdx].value);
}
}
} // if
name=undefined;
}); // forEach
***/
return obj;
},
 
isValid: function() {
// TODO: ComboBox might need time to process a recently input value. This should be async?
// make sure that every widget that has a validator function returns true
return dojo.every(this.getDescendants(), function(widget){
return !widget.isValid || widget.isValid();
});
}
});
 
dojo.declare(
"dijit.form.Form",
[dijit._Widget, dijit._Templated, dijit.form._FormMixin],
null
);
 
}
 
if(!dojo._hasResource["dijit.Dialog"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.Dialog"] = true;
dojo.provide("dijit.Dialog");
 
 
 
 
 
 
 
 
 
dojo.declare(
"dijit.DialogUnderlay",
[dijit._Widget, dijit._Templated],
{
// summary: the thing that grays out the screen behind the dialog
 
// Template has two divs; outer div is used for fade-in/fade-out, and also to hold background iframe.
// Inner div has opacity specified in CSS file.
templateString: "<div class=dijitDialogUnderlayWrapper id='${id}_underlay'><div class=dijitDialogUnderlay dojoAttachPoint='node'></div></div>",
 
postCreate: function(){
dojo.body().appendChild(this.domNode);
this.bgIframe = new dijit.BackgroundIframe(this.domNode);
},
 
layout: function(){
// summary
// Sets the background to the size of the viewport (rather than the size
// of the document) since we need to cover the whole browser window, even
// if the document is only a few lines long.
 
var viewport = dijit.getViewport();
var is = this.node.style,
os = this.domNode.style;
 
os.top = viewport.t + "px";
os.left = viewport.l + "px";
is.width = viewport.w + "px";
is.height = viewport.h + "px";
 
// process twice since the scroll bar may have been removed
// by the previous resizing
var viewport2 = dijit.getViewport();
if(viewport.w != viewport2.w){ is.width = viewport2.w + "px"; }
if(viewport.h != viewport2.h){ is.height = viewport2.h + "px"; }
},
 
show: function(){
this.domNode.style.display = "block";
this.layout();
if(this.bgIframe.iframe){
this.bgIframe.iframe.style.display = "block";
}
this._resizeHandler = this.connect(window, "onresize", "layout");
},
 
hide: function(){
this.domNode.style.display = "none";
if(this.bgIframe.iframe){
this.bgIframe.iframe.style.display = "none";
}
this.disconnect(this._resizeHandler);
},
 
uninitialize: function(){
if(this.bgIframe){
this.bgIframe.destroy();
}
}
}
);
 
dojo.declare(
"dijit.Dialog",
[dijit.layout.ContentPane, dijit._Templated, dijit.form._FormMixin],
{
// summary:
// Pops up a modal dialog window, blocking access to the screen
// and also graying out the screen Dialog is extended from
// ContentPane so it supports all the same parameters (href, etc.)
 
templateString: null,
templateString:"<div class=\"dijitDialog\">\n\t<div dojoAttachPoint=\"titleBar\" class=\"dijitDialogTitleBar\" tabindex=\"0\" waiRole=\"dialog\">\n\t<span dojoAttachPoint=\"titleNode\" class=\"dijitDialogTitle\">${title}</span>\n\t<span dojoAttachPoint=\"closeButtonNode\" class=\"dijitDialogCloseIcon\" dojoAttachEvent=\"onclick: hide\">\n\t\t<span dojoAttachPoint=\"closeText\" class=\"closeText\">x</span>\n\t</span>\n\t</div>\n\t\t<div dojoAttachPoint=\"containerNode\" class=\"dijitDialogPaneContent\"></div>\n\t<span dojoAttachPoint=\"tabEnd\" dojoAttachEvent=\"onfocus:_cycleFocus\" tabindex=\"0\"></span>\n</div>\n",
 
// open: Boolean
// is True or False depending on state of dialog
open: false,
 
// duration: Integer
// The time in milliseconds it takes the dialog to fade in and out
duration: 400,
 
_lastFocusItem:null,
 
attributeMap: dojo.mixin(dojo.clone(dijit._Widget.prototype.attributeMap),
{title: "titleBar"}),
 
postCreate: function(){
dojo.body().appendChild(this.domNode);
this.inherited("postCreate",arguments);
this.domNode.style.display="none";
this.connect(this, "onExecute", "hide");
this.connect(this, "onCancel", "hide");
},
 
onLoad: function(){
// summary:
// when href is specified we need to reposition the dialog after the data is loaded
this._position();
this.inherited("onLoad",arguments);
},
 
_setup: function(){
// summary:
// stuff we need to do before showing the Dialog for the first
// time (but we defer it until right beforehand, for
// performance reasons)
 
this._modalconnects = [];
 
if(this.titleBar){
this._moveable = new dojo.dnd.Moveable(this.domNode, { handle: this.titleBar });
}
 
this._underlay = new dijit.DialogUnderlay();
 
var node = this.domNode;
this._fadeIn = dojo.fx.combine(
[dojo.fadeIn({
node: node,
duration: this.duration
}),
dojo.fadeIn({
node: this._underlay.domNode,
duration: this.duration,
onBegin: dojo.hitch(this._underlay, "show")
})
]
);
 
this._fadeOut = dojo.fx.combine(
[dojo.fadeOut({
node: node,
duration: this.duration,
onEnd: function(){
node.style.display="none";
}
}),
dojo.fadeOut({
node: this._underlay.domNode,
duration: this.duration,
onEnd: dojo.hitch(this._underlay, "hide")
})
]
);
},
 
uninitialize: function(){
if(this._underlay){
this._underlay.destroy();
}
},
 
_position: function(){
// summary: position modal dialog in center of screen
if(dojo.hasClass(dojo.body(),"dojoMove")){ return; }
var viewport = dijit.getViewport();
var mb = dojo.marginBox(this.domNode);
 
var style = this.domNode.style;
style.left = Math.floor((viewport.l + (viewport.w - mb.w)/2)) + "px";
style.top = Math.floor((viewport.t + (viewport.h - mb.h)/2)) + "px";
},
 
_findLastFocus: function(/*Event*/ evt){
// summary: called from onblur of dialog container to determine the last focusable item
this._lastFocused = evt.target;
},
 
_cycleFocus: function(/*Event*/ evt){
// summary: when tabEnd receives focus, advance focus around to titleBar
 
// on first focus to tabEnd, store the last focused item in dialog
if(!this._lastFocusItem){
this._lastFocusItem = this._lastFocused;
}
this.titleBar.focus();
},
 
_onKey: function(/*Event*/ evt){
if(evt.keyCode){
var node = evt.target;
// see if we are shift-tabbing from titleBar
if(node == this.titleBar && evt.shiftKey && evt.keyCode == dojo.keys.TAB){
if(this._lastFocusItem){
this._lastFocusItem.focus(); // send focus to last item in dialog if known
}
dojo.stopEvent(evt);
}else{
// see if the key is for the dialog
while(node){
if(node == this.domNode){
if(evt.keyCode == dojo.keys.ESCAPE){
this.hide();
}else{
return; // just let it go
}
}
node = node.parentNode;
}
// this key is for the disabled document window
if(evt.keyCode != dojo.keys.TAB){ // allow tabbing into the dialog for a11y
dojo.stopEvent(evt);
// opera won't tab to a div
}else if (!dojo.isOpera){
try{
this.titleBar.focus();
}catch(e){/*squelch*/}
}
}
}
},
 
show: function(){
// summary: display the dialog
 
// first time we show the dialog, there's some initialization stuff to do
if(!this._alreadyInitialized){
this._setup();
this._alreadyInitialized=true;
}
 
if(this._fadeOut.status() == "playing"){
this._fadeOut.stop();
}
 
this._modalconnects.push(dojo.connect(window, "onscroll", this, "layout"));
this._modalconnects.push(dojo.connect(document.documentElement, "onkeypress", this, "_onKey"));
 
// IE doesn't bubble onblur events - use ondeactivate instead
var ev = typeof(document.ondeactivate) == "object" ? "ondeactivate" : "onblur";
this._modalconnects.push(dojo.connect(this.containerNode, ev, this, "_findLastFocus"));
 
dojo.style(this.domNode, "opacity", 0);
this.domNode.style.display="block";
this.open = true;
this._loadCheck(); // lazy load trigger
 
this._position();
 
this._fadeIn.play();
 
this._savedFocus = dijit.getFocus(this);
 
// set timeout to allow the browser to render dialog
setTimeout(dojo.hitch(this, function(){
dijit.focus(this.titleBar);
}), 50);
},
 
hide: function(){
// summary
// Hide the dialog
 
// if we haven't been initialized yet then we aren't showing and we can just return
if(!this._alreadyInitialized){
return;
}
 
if(this._fadeIn.status() == "playing"){
this._fadeIn.stop();
}
this._fadeOut.play();
 
if (this._scrollConnected){
this._scrollConnected = false;
}
dojo.forEach(this._modalconnects, dojo.disconnect);
this._modalconnects = [];
 
this.connect(this._fadeOut,"onEnd",dojo.hitch(this,function(){
dijit.focus(this._savedFocus);
}));
this.open = false;
},
 
layout: function() {
// summary: position the Dialog and the underlay
if(this.domNode.style.display == "block"){
this._underlay.layout();
this._position();
}
}
}
);
 
dojo.declare(
"dijit.TooltipDialog",
[dijit.layout.ContentPane, dijit._Templated, dijit.form._FormMixin],
{
// summary:
// Pops up a dialog that appears like a Tooltip
// title: String
// Description of tooltip dialog (required for a11Y)
title: "",
 
_lastFocusItem: null,
 
templateString: null,
templateString:"<div class=\"dijitTooltipDialog\" >\n\t<div class=\"dijitTooltipContainer\">\n\t\t<div class =\"dijitTooltipContents dijitTooltipFocusNode\" dojoAttachPoint=\"containerNode\" tabindex=\"0\" waiRole=\"dialog\"></div>\n\t</div>\n\t<span dojoAttachPoint=\"tabEnd\" tabindex=\"0\" dojoAttachEvent=\"focus:_cycleFocus\"></span>\n\t<div class=\"dijitTooltipConnector\" ></div>\n</div>\n",
 
postCreate: function(){
this.inherited("postCreate",arguments);
this.connect(this.containerNode, "onkeypress", "_onKey");
 
// IE doesn't bubble onblur events - use ondeactivate instead
var ev = typeof(document.ondeactivate) == "object" ? "ondeactivate" : "onblur";
this.connect(this.containerNode, ev, "_findLastFocus");
this.containerNode.title=this.title;
},
 
orient: function(/*Object*/ corner){
// summary: configure widget to be displayed in given position relative to the button
this.domNode.className="dijitTooltipDialog " +" dijitTooltipAB"+(corner.charAt(1)=='L'?"Left":"Right")+" dijitTooltip"+(corner.charAt(0)=='T' ? "Below" : "Above");
},
 
onOpen: function(/*Object*/ pos){
// summary: called when dialog is displayed
this.orient(pos.corner);
this._loadCheck(); // lazy load trigger
this.containerNode.focus();
},
 
_onKey: function(/*Event*/ evt){
// summary: keep keyboard focus in dialog; close dialog on escape key
if(evt.keyCode == dojo.keys.ESCAPE){
this.onCancel();
}else if(evt.target == this.containerNode && evt.shiftKey && evt.keyCode == dojo.keys.TAB){
if (this._lastFocusItem){
this._lastFocusItem.focus();
}
dojo.stopEvent(evt);
}else if(evt.keyCode == dojo.keys.TAB){
// we want the browser's default tab handling to move focus
// but we don't want the tab to propagate upwards
evt.stopPropagation();
}
},
 
_findLastFocus: function(/*Event*/ evt){
// summary: called from onblur of dialog container to determine the last focusable item
this._lastFocused = evt.target;
},
 
_cycleFocus: function(/*Event*/ evt){
// summary: when tabEnd receives focus, advance focus around to containerNode
 
// on first focus to tabEnd, store the last focused item in dialog
if(!this._lastFocusItem){
this._lastFocusItem = this._lastFocused;
}
this.containerNode.focus();
}
}
);
 
 
}
 
if(!dojo._hasResource["dijit._editor.selection"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit._editor.selection"] = true;
dojo.provide("dijit._editor.selection");
 
// FIXME:
// all of these methods branch internally for IE. This is probably
// sub-optimal in terms of runtime performance. We should investigate the
// size difference for differentiating at definition time.
 
dojo.mixin(dijit._editor.selection, {
getType: function(){
// summary: Get the selection type (like document.select.type in IE).
if(dojo.doc["selection"]){ //IE
return dojo.doc.selection.type.toLowerCase();
}else{
var stype = "text";
 
// Check if the actual selection is a CONTROL (IMG, TABLE, HR, etc...).
var oSel;
try{
oSel = dojo.global.getSelection();
}catch(e){ /*squelch*/ }
 
if(oSel && oSel.rangeCount==1){
var oRange = oSel.getRangeAt(0);
if( (oRange.startContainer == oRange.endContainer) &&
((oRange.endOffset - oRange.startOffset) == 1) &&
(oRange.startContainer.nodeType != 3 /* text node*/)
){
stype = "control";
}
}
return stype;
}
},
 
getSelectedText: function(){
// summary:
// Return the text (no html tags) included in the current selection or null if no text is selected
if(dojo.doc["selection"]){ //IE
if(dijit._editor.selection.getType() == 'control'){
return null;
}
return dojo.doc.selection.createRange().text;
}else{
var selection = dojo.global.getSelection();
if(selection){
return selection.toString();
}
}
},
 
getSelectedHtml: function(){
// summary:
// Return the html of the current selection or null if unavailable
if(dojo.doc["selection"]){ //IE
if(dijit._editor.selection.getType() == 'control'){
return null;
}
return dojo.doc.selection.createRange().htmlText;
}else{
var selection = dojo.global.getSelection();
if(selection && selection.rangeCount){
var frag = selection.getRangeAt(0).cloneContents();
var div = document.createElement("div");
div.appendChild(frag);
return div.innerHTML;
}
return null;
}
},
 
getSelectedElement: function(){
// summary:
// Retrieves the selected element (if any), just in the case that
// a single element (object like and image or a table) is
// selected.
if(this.getType() == "control"){
if(dojo.doc["selection"]){ //IE
var range = dojo.doc.selection.createRange();
if(range && range.item){
return dojo.doc.selection.createRange().item(0);
}
}else{
var selection = dojo.global.getSelection();
return selection.anchorNode.childNodes[ selection.anchorOffset ];
}
}
},
 
getParentElement: function(){
// summary:
// Get the parent element of the current selection
if(this.getType() == "control"){
var p = this.getSelectedElement();
if(p){ return p.parentNode; }
}else{
if(dojo.doc["selection"]){ //IE
return dojo.doc.selection.createRange().parentElement();
}else{
var selection = dojo.global.getSelection();
if(selection){
var node = selection.anchorNode;
 
while(node && (node.nodeType != 1)){ // not an element
node = node.parentNode;
}
 
return node;
}
}
}
},
 
hasAncestorElement: function(/*String*/tagName /* ... */){
// summary:
// Check whether current selection has a parent element which is
// of type tagName (or one of the other specified tagName)
return (this.getAncestorElement.apply(this, arguments) != null);
},
 
getAncestorElement: function(/*String*/tagName /* ... */){
// summary:
// Return the parent element of the current selection which is of
// type tagName (or one of the other specified tagName)
 
var node = this.getSelectedElement() || this.getParentElement();
return this.getParentOfType(node, arguments);
},
 
isTag: function(/*DomNode*/node, /*Array*/tags){
if(node && node.tagName){
var _nlc = node.tagName.toLowerCase();
for(var i=0; i<tags.length; i++){
var _tlc = String(tags[i]).toLowerCase();
if(_nlc == _tlc){
return _tlc;
}
}
}
return "";
},
 
getParentOfType: function(/*DomNode*/node, /*Array*/tags){
while(node){
if(this.isTag(node, tags).length){
return node;
}
node = node.parentNode;
}
return null;
},
 
remove: function(){
// summary: delete current selection
var _s = dojo.doc.selection;
if(_s){ //IE
if(_s.type.toLowerCase() != "none"){
_s.clear();
}
return _s;
}else{
_s = dojo.global.getSelection();
_s.deleteFromDocument();
return _s;
}
},
 
selectElementChildren: function(/*DomNode*/element,/*Boolean?*/nochangefocus){
// summary:
// clear previous selection and select the content of the node
// (excluding the node itself)
var _window = dojo.global;
var _document = dojo.doc;
element = dojo.byId(element);
if(_document.selection && dojo.body().createTextRange){ // IE
var range = element.ownerDocument.body.createTextRange();
range.moveToElementText(element);
if(!nochangefocus){
range.select();
}
}else if(_window["getSelection"]){
var selection = _window.getSelection();
if(selection["setBaseAndExtent"]){ // Safari
selection.setBaseAndExtent(element, 0, element, element.innerText.length - 1);
}else if(selection["selectAllChildren"]){ // Mozilla
selection.selectAllChildren(element);
}
}
},
 
selectElement: function(/*DomNode*/element,/*Boolean?*/nochangefocus){
// summary:
// clear previous selection and select element (including all its children)
var _document = dojo.doc;
element = dojo.byId(element);
if(_document.selection && dojo.body().createTextRange){ // IE
try{
var range = dojo.body().createControlRange();
range.addElement(element);
if(!nochangefocus){
range.select();
}
}catch(e){
this.selectElementChildren(element,nochangefocus);
}
}else if(dojo.global["getSelection"]){
var selection = dojo.global.getSelection();
// FIXME: does this work on Safari?
if(selection["removeAllRanges"]){ // Mozilla
var range = _document.createRange() ;
range.selectNode(element) ;
selection.removeAllRanges() ;
selection.addRange(range) ;
}
}
}
});
 
}
 
if(!dojo._hasResource["dijit._editor.RichText"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit._editor.RichText"] = true;
dojo.provide("dijit._editor.RichText");
 
 
 
 
 
 
// used to restore content when user leaves this page then comes back
// but do not try doing document.write if we are using xd loading.
// document.write will only work if RichText.js is included in the dojo.js
// file. If it is included in dojo.js and you want to allow rich text saving
// for back/forward actions, then set djConfig.allowXdRichTextSave = true.
if(!djConfig["useXDomain"] || djConfig["allowXdRichTextSave"]){
if(dojo._postLoad){
(function(){
var savetextarea = dojo.doc.createElement('textarea');
savetextarea.id = "dijit._editor.RichText.savedContent";
var s = savetextarea.style;
s.display='none';
s.position='absolute';
s.top="-100px";
s.left="-100px"
s.height="3px";
s.width="3px";
dojo.body().appendChild(savetextarea);
})();
}else{
//dojo.body() is not available before onLoad is fired
try {
dojo.doc.write('<textarea id="dijit._editor.RichText.savedContent" ' +
'style="display:none;position:absolute;top:-100px;left:-100px;height:3px;width:3px;overflow:hidden;"></textarea>');
}catch(e){ }
}
}
dojo.declare("dijit._editor.RichText", [ dijit._Widget ], {
constructor: function(){
// summary:
// dijit._editor.RichText is the core of the WYSIWYG editor in dojo, which
// provides the basic editing features. It also encapsulates the differences
// of different js engines for various browsers
//
// contentPreFilters: Array
// pre content filter function register array.
// these filters will be executed before the actual
// editing area get the html content
this.contentPreFilters = [];
 
// contentPostFilters: Array
// post content filter function register array.
// these will be used on the resulting html
// from contentDomPostFilters. The resuling
// content is the final html (returned by getValue())
this.contentPostFilters = [];
 
// contentDomPreFilters: Array
// pre content dom filter function register array.
// these filters are applied after the result from
// contentPreFilters are set to the editing area
this.contentDomPreFilters = [];
 
// contentDomPostFilters: Array
// post content dom filter function register array.
// these filters are executed on the editing area dom
// the result from these will be passed to contentPostFilters
this.contentDomPostFilters = [];
 
// editingAreaStyleSheets: Array
// array to store all the stylesheets applied to the editing area
this.editingAreaStyleSheets=[];
 
this._keyHandlers = {};
this.contentPreFilters.push(dojo.hitch(this, "_preFixUrlAttributes"));
if(dojo.isMoz){
this.contentPreFilters.push(this._fixContentForMoz);
}
//this.contentDomPostFilters.push(this._postDomFixUrlAttributes);
 
this.onLoadDeferred = new dojo.Deferred();
},
 
// inheritWidth: Boolean
// whether to inherit the parent's width or simply use 100%
inheritWidth: false,
 
// focusOnLoad: Boolean
// whether focusing into this instance of richtext when page onload
focusOnLoad: false,
 
// name: String
// If a save name is specified the content is saved and restored when the user
// leave this page can come back, or if the editor is not properly closed after
// editing has started.
name: "",
 
// styleSheets: String
// semicolon (";") separated list of css files for the editing area
styleSheets: "",
 
// _content: String
// temporary content storage
_content: "",
 
// height: String
// set height to fix the editor at a specific height, with scrolling.
// By default, this is 300px. If you want to have the editor always
// resizes to accommodate the content, use AlwaysShowToolbar plugin
// and set height=""
height: "300px",
 
// minHeight: String
// The minimum height that the editor should have
minHeight: "1em",
// isClosed: Boolean
isClosed: true,
 
// isLoaded: Boolean
isLoaded: false,
 
// _SEPARATOR: String
// used to concat contents from multiple textareas into a single string
_SEPARATOR: "@@**%%__RICHTEXTBOUNDRY__%%**@@",
 
// onLoadDeferred: dojo.Deferred
// deferred which is fired when the editor finishes loading
onLoadDeferred: null,
 
postCreate: function(){
// summary: init
dojo.publish("dijit._editor.RichText::init", [this]);
this.open();
this.setupDefaultShortcuts();
},
 
setupDefaultShortcuts: function(){
// summary: add some default key handlers
// description:
// Overwrite this to setup your own handlers. The default
// implementation does not use Editor commands, but directly
// executes the builtin commands within the underlying browser
// support.
var ctrl = this.KEY_CTRL;
var exec = function(cmd, arg){
return arguments.length == 1 ? function(){ this.execCommand(cmd); } :
function(){ this.execCommand(cmd, arg); }
}
this.addKeyHandler("b", ctrl, exec("bold"));
this.addKeyHandler("i", ctrl, exec("italic"));
this.addKeyHandler("u", ctrl, exec("underline"));
this.addKeyHandler("a", ctrl, exec("selectall"));
this.addKeyHandler("s", ctrl, function () { this.save(true); });
 
this.addKeyHandler("1", ctrl, exec("formatblock", "h1"));
this.addKeyHandler("2", ctrl, exec("formatblock", "h2"));
this.addKeyHandler("3", ctrl, exec("formatblock", "h3"));
this.addKeyHandler("4", ctrl, exec("formatblock", "h4"));
 
this.addKeyHandler("\\", ctrl, exec("insertunorderedlist"));
if(!dojo.isIE){
this.addKeyHandler("Z", ctrl, exec("redo"));
}
},
 
// events: Array
// events which should be connected to the underlying editing area
events: ["onKeyPress", "onKeyDown", "onKeyUp", "onClick"],
 
// events: Array
// events which should be connected to the underlying editing
// area, events in this array will be addListener with
// capture=true
captureEvents: [],
 
_editorCommandsLocalized: false,
_localizeEditorCommands: function(){
if(this._editorCommandsLocalized){
return;
}
this._editorCommandsLocalized = true;
 
//in IE, names for blockformat is locale dependent, so we cache the values here
 
//if the normal way fails, we try the hard way to get the list
 
//do not use _cacheLocalBlockFormatNames here, as it will
//trigger security warning in IE7
 
//in the array below, ul can not come directly after ol,
//otherwise the queryCommandValue returns Normal for it
var formats = ['p', 'pre', 'address', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'ol', 'div', 'ul'];
var localhtml = "", format, i=0;
while((format=formats[i++])){
if(format.charAt(1) != 'l'){
localhtml += "<"+format+"><span>content</span></"+format+">";
}else{
localhtml += "<"+format+"><li>content</li></"+format+">";
}
}
//queryCommandValue returns empty if we hide editNode, so move it out of screen temporary
var div=document.createElement('div');
div.style.position = "absolute";
div.style.left = "-2000px";
div.style.top = "-2000px";
document.body.appendChild(div);
div.innerHTML = localhtml;
var node = div.firstChild;
while(node){
dijit._editor.selection.selectElement(node.firstChild);
dojo.withGlobal(this.window, "selectElement", dijit._editor.selection, [node.firstChild]);
var nativename = node.tagName.toLowerCase();
this._local2NativeFormatNames[nativename] = document.queryCommandValue("formatblock");//this.queryCommandValue("formatblock");
this._native2LocalFormatNames[this._local2NativeFormatNames[nativename]] = nativename;
node = node.nextSibling;
}
document.body.removeChild(div);
},
 
open: function(/*DomNode?*/element){
// summary:
// Transforms the node referenced in this.domNode into a rich text editing
// node. This will result in the creation and replacement with an <iframe>
// if designMode(FF)/contentEditable(IE) is used.
 
if((!this.onLoadDeferred)||(this.onLoadDeferred.fired >= 0)){
this.onLoadDeferred = new dojo.Deferred();
}
 
if(!this.isClosed){ this.close(); }
dojo.publish("dijit._editor.RichText::open", [ this ]);
 
this._content = "";
if((arguments.length == 1)&&(element["nodeName"])){ this.domNode = element; } // else unchanged
 
if( (this.domNode["nodeName"])&&
(this.domNode.nodeName.toLowerCase() == "textarea")){
// if we were created from a textarea, then we need to create a
// new editing harness node.
this.textarea = this.domNode;
this.name=this.textarea.name;
var html = this._preFilterContent(this.textarea.value);
this.domNode = dojo.doc.createElement("div");
this.domNode.setAttribute('widgetId',this.id);
this.textarea.removeAttribute('widgetId');
this.domNode.cssText = this.textarea.cssText;
this.domNode.className += " "+this.textarea.className;
dojo.place(this.domNode, this.textarea, "before");
var tmpFunc = dojo.hitch(this, function(){
//some browsers refuse to submit display=none textarea, so
//move the textarea out of screen instead
with(this.textarea.style){
display = "block";
position = "absolute";
left = top = "-1000px";
 
if(dojo.isIE){ //nasty IE bug: abnormal formatting if overflow is not hidden
this.__overflow = overflow;
overflow = "hidden";
}
}
});
if(dojo.isIE){
setTimeout(tmpFunc, 10);
}else{
tmpFunc();
}
 
// this.domNode.innerHTML = html;
 
// if(this.textarea.form){
// // FIXME: port: this used to be before advice!!!
// dojo.connect(this.textarea.form, "onsubmit", this, function(){
// // FIXME: should we be calling close() here instead?
// this.textarea.value = this.getValue();
// });
// }
}else{
var html = this._preFilterContent(this.getNodeChildrenHtml(this.domNode));
this.domNode.innerHTML = '';
}
if(html == ""){ html = "&nbsp;"; }
 
var content = dojo.contentBox(this.domNode);
// var content = dojo.contentBox(this.srcNodeRef);
this._oldHeight = content.h;
this._oldWidth = content.w;
 
this.savedContent = html;
 
// If we're a list item we have to put in a blank line to force the
// bullet to nicely align at the top of text
if( (this.domNode["nodeName"]) &&
(this.domNode.nodeName == "LI") ){
this.domNode.innerHTML = " <br>";
}
 
this.editingArea = dojo.doc.createElement("div");
this.domNode.appendChild(this.editingArea);
 
if(this.name != "" && (!djConfig["useXDomain"] || djConfig["allowXdRichTextSave"])){
var saveTextarea = dojo.byId("dijit._editor.RichText.savedContent");
if(saveTextarea.value != ""){
var datas = saveTextarea.value.split(this._SEPARATOR), i=0, dat;
while((dat=datas[i++])){
var data = dat.split(":");
if(data[0] == this.name){
html = data[1];
datas.splice(i, 1);
break;
}
}
}
 
// FIXME: need to do something different for Opera/Safari
dojo.connect(window, "onbeforeunload", this, "_saveContent");
// dojo.connect(window, "onunload", this, "_saveContent");
}
 
this.isClosed = false;
// Safari's selections go all out of whack if we do it inline,
// so for now IE is our only hero
//if (typeof document.body.contentEditable != "undefined") {
if(dojo.isIE || dojo.isSafari || dojo.isOpera){ // contentEditable, easy
var ifr = this.iframe = dojo.doc.createElement('iframe');
ifr.src = 'javascript:void(0)';
this.editorObject = ifr;
ifr.style.border = "none";
ifr.style.width = "100%";
ifr.frameBorder = 0;
// ifr.style.scrolling = this.height ? "auto" : "vertical";
this.editingArea.appendChild(ifr);
this.window = ifr.contentWindow;
this.document = this.window.document;
this.document.open();
this.document.write(this._getIframeDocTxt(html));
this.document.close();
 
if(dojo.isIE >= 7){
if(this.height){
ifr.style.height = this.height;
}
if(this.minHeight){
ifr.style.minHeight = this.minHeight;
}
}else{
ifr.style.height = this.height ? this.height : this.minHeight;
}
 
if(dojo.isIE){
this._localizeEditorCommands();
}
 
this.onLoad();
}else{ // designMode in iframe
this._drawIframe(html);
}
 
// TODO: this is a guess at the default line-height, kinda works
if(this.domNode.nodeName == "LI"){ this.domNode.lastChild.style.marginTop = "-1.2em"; }
this.domNode.className += " RichTextEditable";
},
 
//static cache variables shared among all instance of this class
_local2NativeFormatNames: {},
_native2LocalFormatNames: {},
_localizedIframeTitles: null,
 
_getIframeDocTxt: function(/* String */ html){
var _cs = dojo.getComputedStyle(this.domNode);
if(!this.height && !dojo.isMoz){
html="<div>"+html+"</div>";
}
var font = [ _cs.fontWeight, _cs.fontSize, _cs.fontFamily ].join(" ");
 
// line height is tricky - applying a units value will mess things up.
// if we can't get a non-units value, bail out.
var lineHeight = _cs.lineHeight;
if(lineHeight.indexOf("px") >= 0){
lineHeight = parseFloat(lineHeight)/parseFloat(_cs.fontSize);
// console.debug(lineHeight);
}else if(lineHeight.indexOf("em")>=0){
lineHeight = parseFloat(lineHeight);
}else{
lineHeight = "1.0";
}
return [
this.isLeftToRight() ? "<html><head>" : "<html dir='rtl'><head>",
(dojo.isMoz ? "<title>" + this._localizedIframeTitles.iframeEditTitle + "</title>" : ""),
"<style>",
"body,html {",
" background:transparent;",
" padding: 0;",
" margin: 0;",
"}",
// TODO: left positioning will cause contents to disappear out of view
// if it gets too wide for the visible area
"body{",
" top:0px; left:0px; right:0px;",
((this.height||dojo.isOpera) ? "" : "position: fixed;"),
" font:", font, ";",
// FIXME: IE 6 won't understand min-height?
" min-height:", this.minHeight, ";",
" line-height:", lineHeight,
"}",
"p{ margin: 1em 0 !important; }",
(this.height ?
"" : "body,html{overflow-y:hidden;/*for IE*/} body > div {overflow-x:auto;/*for FF to show vertical scrollbar*/}"
),
"li > ul:-moz-first-node, li > ol:-moz-first-node{ padding-top: 1.2em; } ",
"li{ min-height:1.2em; }",
"</style>",
this._applyEditingAreaStyleSheets(),
"</head><body>"+html+"</body></html>"
].join(""); // String
},
 
_drawIframe: function(/*String*/html){
// summary:
// Draws an iFrame using the existing one if one exists.
// Used by Mozilla, Safari, and Opera
 
if(!this.iframe){
var ifr = this.iframe = dojo.doc.createElement("iframe");
// this.iframe.src = "about:blank";
// document.body.appendChild(this.iframe);
// console.debug(this.iframe.contentDocument.open());
// dojo.body().appendChild(this.iframe);
var ifrs = ifr.style;
// ifrs.border = "1px solid black";
ifrs.border = "none";
ifrs.lineHeight = "0"; // squash line height
ifrs.verticalAlign = "bottom";
// ifrs.scrolling = this.height ? "auto" : "vertical";
this.editorObject = this.iframe;
// get screen reader text for mozilla here, too
this._localizedIframeTitles = dojo.i18n.getLocalization("dijit", "Textarea");
// need to find any associated label element and update iframe document title
var label=dojo.query('label[for="'+this.id+'"]');
if(label.length){
this._localizedIframeTitles.iframeEditTitle = label[0].innerHTML + " " + this._localizedIframeTitles.iframeEditTitle;
}
}
// opera likes this to be outside the with block
// this.iframe.src = "javascript:void(0)";//dojo.uri.dojoUri("src/widget/templates/richtextframe.html") + ((dojo.doc.domain != currentDomain) ? ("#"+dojo.doc.domain) : "");
this.iframe.style.width = this.inheritWidth ? this._oldWidth : "100%";
 
if(this.height){
this.iframe.style.height = this.height;
}else{
this.iframe.height = this._oldHeight;
}
 
if(this.textarea){
var tmpContent = this.srcNodeRef;
}else{
var tmpContent = dojo.doc.createElement('div');
tmpContent.style.display="none";
tmpContent.innerHTML = html;
//append tmpContent to under the current domNode so that the margin
//calculation below is correct
this.editingArea.appendChild(tmpContent);
}
 
this.editingArea.appendChild(this.iframe);
 
//do we want to show the content before the editing area finish loading here?
//if external style sheets are used for the editing area, the appearance now
//and after loading of the editing area won't be the same (and padding/margin
//calculation above may not be accurate)
// tmpContent.style.display = "none";
// this.editingArea.appendChild(this.iframe);
 
var _iframeInitialized = false;
// console.debug(this.iframe);
// var contentDoc = this.iframe.contentWindow.document;
 
 
// note that on Safari lower than 420+, we have to get the iframe
// by ID in order to get something w/ a contentDocument property
 
var contentDoc = this.iframe.contentDocument;
contentDoc.open();
contentDoc.write(this._getIframeDocTxt(html));
contentDoc.close();
 
// now we wait for onload. Janky hack!
var ifrFunc = dojo.hitch(this, function(){
if(!_iframeInitialized){
_iframeInitialized = true;
}else{ return; }
if(!this.editNode){
try{
if(this.iframe.contentWindow){
this.window = this.iframe.contentWindow;
this.document = this.iframe.contentWindow.document
}else if(this.iframe.contentDocument){
// for opera
this.window = this.iframe.contentDocument.window;
this.document = this.iframe.contentDocument;
}
if(!this.document.body){
throw 'Error';
}
}catch(e){
setTimeout(ifrFunc,500);
_iframeInitialized = false;
return;
}
 
dojo._destroyElement(tmpContent);
this.document.designMode = "on";
// try{
// this.document.designMode = "on";
// }catch(e){
// this._tryDesignModeOnClick=true;
// }
 
this.onLoad();
}else{
dojo._destroyElement(tmpContent);
this.editNode.innerHTML = html;
this.onDisplayChanged();
}
this._preDomFilterContent(this.editNode);
});
 
ifrFunc();
},
 
_applyEditingAreaStyleSheets: function(){
// summary:
// apply the specified css files in styleSheets
var files = [];
if(this.styleSheets){
files = this.styleSheets.split(';');
this.styleSheets = '';
}
 
//empty this.editingAreaStyleSheets here, as it will be filled in addStyleSheet
files = files.concat(this.editingAreaStyleSheets);
this.editingAreaStyleSheets = [];
 
var text='', i=0, url;
while((url=files[i++])){
var abstring = (new dojo._Url(dojo.global.location, url)).toString();
this.editingAreaStyleSheets.push(abstring);
text += '<link rel="stylesheet" type="text/css" href="'+abstring+'"/>'
}
return text;
},
 
addStyleSheet: function(/*dojo._Url*/uri){
// summary:
// add an external stylesheet for the editing area
// uri: a dojo.uri.Uri pointing to the url of the external css file
var url=uri.toString();
 
//if uri is relative, then convert it to absolute so that it can be resolved correctly in iframe
if(url.charAt(0) == '.' || (url.charAt(0) != '/' && !uri.host)){
url = (new dojo._Url(dojo.global.location, url)).toString();
}
 
if(dojo.indexOf(this.editingAreaStyleSheets, url) > -1){
console.debug("dijit._editor.RichText.addStyleSheet: Style sheet "+url+" is already applied to the editing area!");
return;
}
 
this.editingAreaStyleSheets.push(url);
if(this.document.createStyleSheet){ //IE
this.document.createStyleSheet(url);
}else{ //other browser
var head = this.document.getElementsByTagName("head")[0];
var stylesheet = this.document.createElement("link");
with(stylesheet){
rel="stylesheet";
type="text/css";
href=url;
}
head.appendChild(stylesheet);
}
},
 
removeStyleSheet: function(/*dojo._Url*/uri){
// summary:
// remove an external stylesheet for the editing area
var url=uri.toString();
//if uri is relative, then convert it to absolute so that it can be resolved correctly in iframe
if(url.charAt(0) == '.' || (url.charAt(0) != '/' && !uri.host)){
url = (new dojo._Url(dojo.global.location, url)).toString();
}
var index = dojo.indexOf(this.editingAreaStyleSheets, url);
if(index == -1){
console.debug("dijit._editor.RichText.removeStyleSheet: Style sheet "+url+" is not applied to the editing area so it can not be removed!");
return;
}
delete this.editingAreaStyleSheets[index];
dojo.withGlobal(this.window,'query', dojo, ['link:[href="'+url+'"]']).orphan()
},
 
disabled: false,
_mozSettingProps: ['styleWithCSS','insertBrOnReturn'],
setDisabled: function(/*Boolean*/ disabled){
if(dojo.isIE || dojo.isSafari || dojo.isOpera){
this.editNode.contentEditable=!disabled;
}else{ //moz
if(disabled){
this._mozSettings=[false,this.blockNodeForEnter==='BR'];
}
this.document.designMode=(disabled?'off':'on');
if(!disabled){
dojo.forEach(this._mozSettingProps, function(s,i){
this.document.execCommand(s,false,this._mozSettings[i]);
},this);
}
// this.document.execCommand('contentReadOnly', false, disabled);
// if(disabled){
// this.blur(); //to remove the blinking caret
// }
//
}
this.disabled=disabled;
},
 
/* Event handlers
*****************/
 
_isResized: function(){ return false; },
 
onLoad: function(/* Event */ e){
// summary: handler after the content of the document finishes loading
this.isLoaded = true;
if(this.height || dojo.isMoz){
this.editNode=this.document.body;
}else{
this.editNode=this.document.body.firstChild;
}
this.editNode.contentEditable = true; //should do no harm in FF
this._preDomFilterContent(this.editNode);
 
var events=this.events.concat(this.captureEvents),i=0,et;
while((et=events[i++])){
this.connect(this.document, et.toLowerCase(), et);
}
if(!dojo.isIE){
try{ // sanity check for Mozilla
// this.document.execCommand("useCSS", false, true); // old moz call
this.document.execCommand("styleWithCSS", false, false); // new moz call
//this.document.execCommand("insertBrOnReturn", false, false); // new moz call
}catch(e2){ }
// FIXME: when scrollbars appear/disappear this needs to be fired
}else{ // IE contentEditable
// give the node Layout on IE
this.editNode.style.zoom = 1.0;
}
 
if(this.focusOnLoad){
this.focus();
}
 
this.onDisplayChanged(e);
if(this.onLoadDeferred){
this.onLoadDeferred.callback(true);
}
},
 
onKeyDown: function(/* Event */ e){
// summary: Fired on keydown
 
// console.info("onkeydown:", e.keyCode);
 
// we need this event at the moment to get the events from control keys
// such as the backspace. It might be possible to add this to Dojo, so that
// keyPress events can be emulated by the keyDown and keyUp detection.
if(dojo.isIE){
if(e.keyCode === dojo.keys.BACKSPACE && this.document.selection.type === "Control"){
// IE has a bug where if a non-text object is selected in the editor,
// hitting backspace would act as if the browser's back button was
// clicked instead of deleting the object. see #1069
dojo.stopEvent(e);
this.execCommand("delete");
}else if( (65 <= e.keyCode&&e.keyCode <= 90) ||
(e.keyCode>=37&&e.keyCode<=40) // FIXME: get this from connect() instead!
){ //arrow keys
e.charCode = e.keyCode;
this.onKeyPress(e);
}
}
else if (dojo.isMoz){
if(e.keyCode == dojo.keys.TAB && !e.shiftKey && !e.ctrlKey && !e.altKey && this.iframe){
// update iframe document title for screen reader
this.iframe.contentDocument.title = this._localizedIframeTitles.iframeFocusTitle;
// Place focus on the iframe. A subsequent tab or shift tab will put focus
// on the correct control.
this.iframe.focus(); // this.focus(); won't work
dojo.stopEvent(e);
}else if (e.keyCode == dojo.keys.TAB && e.shiftKey){
// if there is a toolbar, set focus to it, otherwise ignore
if (this.toolbar){
this.toolbar.focus();
}
dojo.stopEvent(e);
}
}
},
 
onKeyUp: function(e){
// summary: Fired on keyup
return;
},
 
KEY_CTRL: 1,
KEY_SHIFT: 2,
 
onKeyPress: function(e){
// summary: Fired on keypress
 
// console.info("onkeypress:", e.keyCode);
 
// handle the various key events
var modifiers = e.ctrlKey ? this.KEY_CTRL : 0 | e.shiftKey?this.KEY_SHIFT : 0;
 
var key = e.keyChar||e.keyCode;
if(this._keyHandlers[key]){
// console.debug("char:", e.key);
var handlers = this._keyHandlers[key], i = 0, h;
while((h = handlers[i++])){
if(modifiers == h.modifiers){
if(!h.handler.apply(this,arguments)){
e.preventDefault();
}
break;
}
}
}
 
// function call after the character has been inserted
setTimeout(dojo.hitch(this, function(){
this.onKeyPressed(e);
}), 1);
},
 
addKeyHandler: function(/*String*/key, /*Int*/modifiers, /*Function*/handler){
// summary: add a handler for a keyboard shortcut
if(!dojo.isArray(this._keyHandlers[key])){ this._keyHandlers[key] = []; }
this._keyHandlers[key].push({
modifiers: modifiers || 0,
handler: handler
});
},
 
onKeyPressed: function(/*Event*/e){
this.onDisplayChanged(/*e*/); // can't pass in e
},
 
onClick: function(/*Event*/e){
// console.debug('onClick',this._tryDesignModeOnClick);
// if(this._tryDesignModeOnClick){
// try{
// this.document.designMode='on';
// this._tryDesignModeOnClick=false;
// }catch(e){}
// }
this.onDisplayChanged(e); },
_onBlur: function(e){
var _c=this.getValue(true);
if(_c!=this.savedContent){
this.onChange(_c);
this.savedContent=_c;
}
if (dojo.isMoz && this.iframe){
this.iframe.contentDocument.title = this._localizedIframeTitles.iframeEditTitle;
}
// console.info('_onBlur')
},
_initialFocus: true,
_onFocus: function(/*Event*/e){
// console.info('_onFocus')
// summary: Fired on focus
if( (dojo.isMoz)&&(this._initialFocus) ){
this._initialFocus = false;
if(this.editNode.innerHTML.replace(/^\s+|\s+$/g, "") == "&nbsp;"){
this.placeCursorAtStart();
// this.execCommand("selectall");
// this.window.getSelection().collapseToStart();
}
}
},
 
blur: function(){
// summary: remove focus from this instance
if(this.iframe){
this.window.blur();
}else if(this.editNode){
this.editNode.blur();
}
},
 
focus: function(){
// summary: move focus to this instance
if(this.iframe && !dojo.isIE){
dijit.focus(this.iframe);
}else if(this.editNode && this.editNode.focus){
// editNode may be hidden in display:none div, lets just punt in this case
dijit.focus(this.editNode);
}else{
console.debug("Have no idea how to focus into the editor!");
}
},
 
// _lastUpdate: 0,
updateInterval: 200,
_updateTimer: null,
onDisplayChanged: function(/*Event*/e){
// summary:
// This event will be fired everytime the display context
// changes and the result needs to be reflected in the UI.
// description:
// If you don't want to have update too often,
// onNormalizedDisplayChanged should be used instead
 
// var _t=new Date();
if(!this._updateTimer){
// this._lastUpdate=_t;
if(this._updateTimer){
clearTimeout(this._updateTimer);
}
this._updateTimer=setTimeout(dojo.hitch(this,this.onNormalizedDisplayChanged),this.updateInterval);
}
},
onNormalizedDisplayChanged: function(){
// summary:
// This event is fired every updateInterval ms or more
// description:
// If something needs to happen immidiately after a
// user change, please use onDisplayChanged instead
this._updateTimer=null;
},
onChange: function(newContent){
// summary:
// this is fired if and only if the editor loses focus and
// the content is changed
 
// console.log('onChange',newContent);
},
_normalizeCommand: function(/*String*/cmd){
// summary:
// Used as the advice function by dojo.connect to map our
// normalized set of commands to those supported by the target
// browser
 
var command = cmd.toLowerCase();
if(command == "formatblock"){
if(dojo.isSafari){ command = "heading"; }
}else if(command == "hilitecolor" && !dojo.isMoz){
command = "backcolor";
}
 
return command;
},
 
queryCommandAvailable: function(/*String*/command){
// summary:
// Tests whether a command is supported by the host. Clients SHOULD check
// whether a command is supported before attempting to use it, behaviour
// for unsupported commands is undefined.
// command: The command to test for
var ie = 1;
var mozilla = 1 << 1;
var safari = 1 << 2;
var opera = 1 << 3;
var safari420 = 1 << 4;
 
var gt420 = dojo.isSafari;
 
function isSupportedBy(browsers){
return {
ie: Boolean(browsers & ie),
mozilla: Boolean(browsers & mozilla),
safari: Boolean(browsers & safari),
safari420: Boolean(browsers & safari420),
opera: Boolean(browsers & opera)
}
}
 
var supportedBy = null;
 
switch(command.toLowerCase()){
case "bold": case "italic": case "underline":
case "subscript": case "superscript":
case "fontname": case "fontsize":
case "forecolor": case "hilitecolor":
case "justifycenter": case "justifyfull": case "justifyleft":
case "justifyright": case "delete": case "selectall":
supportedBy = isSupportedBy(mozilla | ie | safari | opera);
break;
 
case "createlink": case "unlink": case "removeformat":
case "inserthorizontalrule": case "insertimage":
case "insertorderedlist": case "insertunorderedlist":
case "indent": case "outdent": case "formatblock":
case "inserthtml": case "undo": case "redo": case "strikethrough":
supportedBy = isSupportedBy(mozilla | ie | opera | safari420);
break;
 
case "blockdirltr": case "blockdirrtl":
case "dirltr": case "dirrtl":
case "inlinedirltr": case "inlinedirrtl":
supportedBy = isSupportedBy(ie);
break;
case "cut": case "copy": case "paste":
supportedBy = isSupportedBy( ie | mozilla | safari420);
break;
 
case "inserttable":
supportedBy = isSupportedBy(mozilla | ie);
break;
 
case "insertcell": case "insertcol": case "insertrow":
case "deletecells": case "deletecols": case "deleterows":
case "mergecells": case "splitcell":
supportedBy = isSupportedBy(ie | mozilla);
break;
 
default: return false;
}
 
return (dojo.isIE && supportedBy.ie) ||
(dojo.isMoz && supportedBy.mozilla) ||
(dojo.isSafari && supportedBy.safari) ||
(gt420 && supportedBy.safari420) ||
(dojo.isOpera && supportedBy.opera); // Boolean return true if the command is supported, false otherwise
},
 
execCommand: function(/*String*/command, argument){
// summary: Executes a command in the Rich Text area
// command: The command to execute
// argument: An optional argument to the command
var returnValue;
 
//focus() is required for IE to work
//In addition, focus() makes sure after the execution of
//the command, the editor receives the focus as expected
this.focus();
 
command = this._normalizeCommand(command);
if(argument != undefined){
if(command == "heading"){
throw new Error("unimplemented");
}else if((command == "formatblock") && dojo.isIE){
argument = '<'+argument+'>';
}
}
if(command == "inserthtml"){
//TODO: we shall probably call _preDomFilterContent here as well
argument=this._preFilterContent(argument);
if(dojo.isIE){
var insertRange = this.document.selection.createRange();
insertRange.pasteHTML(argument);
insertRange.select();
//insertRange.collapse(true);
returnValue=true;
}else if(dojo.isMoz && !argument.length){
//mozilla can not inserthtml an empty html to delete current selection
//so we delete the selection instead in this case
dojo.withGlobal(this.window,'remove',dijit._editor.selection); // FIXME
returnValue=true;
}else{
returnValue=this.document.execCommand(command, false, argument);
}
}else if(
(command == "unlink")&&
(this.queryCommandEnabled("unlink"))&&
(dojo.isMoz || dojo.isSafari)
){
// fix up unlink in Mozilla to unlink the link and not just the selection
 
// grab selection
// Mozilla gets upset if we just store the range so we have to
// get the basic properties and recreate to save the selection
var selection = this.window.getSelection();
// var selectionRange = selection.getRangeAt(0);
// var selectionStartContainer = selectionRange.startContainer;
// var selectionStartOffset = selectionRange.startOffset;
// var selectionEndContainer = selectionRange.endContainer;
// var selectionEndOffset = selectionRange.endOffset;
 
// select our link and unlink
var a = dojo.withGlobal(this.window, "getAncestorElement",dijit._editor.selection, ['a']);
dojo.withGlobal(this.window, "selectElement", dijit._editor.selection, [a]);
 
returnValue=this.document.execCommand("unlink", false, null);
}else if((command == "hilitecolor")&&(dojo.isMoz)){
// // mozilla doesn't support hilitecolor properly when useCSS is
// // set to false (bugzilla #279330)
 
this.document.execCommand("styleWithCSS", false, true);
returnValue = this.document.execCommand(command, false, argument);
this.document.execCommand("styleWithCSS", false, false);
 
}else if((dojo.isIE)&&( (command == "backcolor")||(command == "forecolor") )){
// Tested under IE 6 XP2, no problem here, comment out
// IE weirdly collapses ranges when we exec these commands, so prevent it
// var tr = this.document.selection.createRange();
argument = arguments.length > 1 ? argument : null;
returnValue = this.document.execCommand(command, false, argument);
 
// timeout is workaround for weird IE behavior were the text
// selection gets correctly re-created, but subsequent input
// apparently isn't bound to it
// setTimeout(function(){tr.select();}, 1);
}else{
argument = arguments.length > 1 ? argument : null;
// if(dojo.isMoz){
// this.document = this.iframe.contentWindow.document
// }
 
if(argument || command!="createlink"){
returnValue = this.document.execCommand(command, false, argument);
}
}
 
this.onDisplayChanged();
return returnValue;
},
 
queryCommandEnabled: function(/*String*/command){
// summary: check whether a command is enabled or not
command = this._normalizeCommand(command);
if(dojo.isMoz || dojo.isSafari){
if(command == "unlink"){ // mozilla returns true always
// console.debug(dojo.withGlobal(this.window, "hasAncestorElement",dijit._editor.selection, ['a']));
return dojo.withGlobal(this.window, "hasAncestorElement",dijit._editor.selection, ['a']);
}else if (command == "inserttable"){
return true;
}
}
//see #4109
if(dojo.isSafari)
if(command == "copy"){
command="cut";
}else if(command == "paste"){
return true;
}
 
// return this.document.queryCommandEnabled(command);
var elem = (dojo.isIE) ? this.document.selection.createRange() : this.document;
return elem.queryCommandEnabled(command);
},
 
queryCommandState: function(command){
// summary: check the state of a given command
command = this._normalizeCommand(command);
return this.document.queryCommandState(command);
},
 
queryCommandValue: function(command){
// summary: check the value of a given command
command = this._normalizeCommand(command);
if(dojo.isIE && command == "formatblock"){
return this._local2NativeFormatNames[this.document.queryCommandValue(command)];
}
return this.document.queryCommandValue(command);
},
 
// Misc.
 
placeCursorAtStart: function(){
// summary:
// place the cursor at the start of the editing area
this.focus();
 
//see comments in placeCursorAtEnd
var isvalid=false;
if(dojo.isMoz){
var first=this.editNode.firstChild;
while(first){
if(first.nodeType == 3){
if(first.nodeValue.replace(/^\s+|\s+$/g, "").length>0){
isvalid=true;
dojo.withGlobal(this.window, "selectElement", dijit._editor.selection, [first]);
break;
}
}else if(first.nodeType == 1){
isvalid=true;
dojo.withGlobal(this.window, "selectElementChildren",dijit._editor.selection, [first]);
break;
}
first = first.nextSibling;
}
}else{
isvalid=true;
dojo.withGlobal(this.window, "selectElementChildren",dijit._editor.selection, [this.editNode]);
}
if(isvalid){
dojo.withGlobal(this.window, "collapse", dijit._editor.selection, [true]);
}
},
 
placeCursorAtEnd: function(){
// summary:
// place the cursor at the end of the editing area
this.focus();
 
//In mozilla, if last child is not a text node, we have to use selectElementChildren on this.editNode.lastChild
//otherwise the cursor would be placed at the end of the closing tag of this.editNode.lastChild
var isvalid=false;
if(dojo.isMoz){
var last=this.editNode.lastChild;
while(last){
if(last.nodeType == 3){
if(last.nodeValue.replace(/^\s+|\s+$/g, "").length>0){
isvalid=true;
dojo.withGlobal(this.window, "selectElement",dijit._editor.selection, [last]);
break;
}
}else if(last.nodeType == 1){
isvalid=true;
if(last.lastChild){
dojo.withGlobal(this.window, "selectElement",dijit._editor.selection, [last.lastChild]);
}else{
dojo.withGlobal(this.window, "selectElement",dijit._editor.selection, [last]);
}
break;
}
last = last.previousSibling;
}
}else{
isvalid=true;
dojo.withGlobal(this.window, "selectElementChildren",dijit._editor.selection, [this.editNode]);
}
if(isvalid){
dojo.withGlobal(this.window, "collapse", dijit._editor.selection, [false]);
}
},
 
getValue: function(/*Boolean?*/nonDestructive){
// summary:
// return the current content of the editing area (post filters are applied)
if(this.textarea){
if(this.isClosed || !this.isLoaded){
return this.textarea.value;
}
}
 
return this._postFilterContent(null, nonDestructive);
},
 
setValue: function(/*String*/html){
// summary:
// this function set the content. No undo history is preserved
if(this.textarea && (this.isClosed || !this.isLoaded)){
this.textarea.value=html;
}else{
html = this._preFilterContent(html);
if(this.isClosed){
this.domNode.innerHTML = html;
this._preDomFilterContent(this.domNode);
}else{
this.editNode.innerHTML = html;
this._preDomFilterContent(this.editNode);
}
}
},
 
replaceValue: function(/*String*/html){
// summary:
// this function set the content while trying to maintain the undo stack
// (now only works fine with Moz, this is identical to setValue in all
// other browsers)
if(this.isClosed){
this.setValue(html);
}else if(this.window && this.window.getSelection && !dojo.isMoz){ // Safari
// look ma! it's a totally f'd browser!
this.setValue(html);
}else if(this.window && this.window.getSelection){ // Moz
html = this._preFilterContent(html);
this.execCommand("selectall");
if(dojo.isMoz && !html){ html = "&nbsp;" }
this.execCommand("inserthtml", html);
this._preDomFilterContent(this.editNode);
}else if(this.document && this.document.selection){//IE
//In IE, when the first element is not a text node, say
//an <a> tag, when replacing the content of the editing
//area, the <a> tag will be around all the content
//so for now, use setValue for IE too
this.setValue(html);
}
},
 
_preFilterContent: function(/*String*/html){
// summary:
// filter the input before setting the content of the editing area
var ec = html;
dojo.forEach(this.contentPreFilters, function(ef){ if(ef){ ec = ef(ec); } });
return ec;
},
_preDomFilterContent: function(/*DomNode*/dom){
// summary:
// filter the input
dom = dom || this.editNode;
dojo.forEach(this.contentDomPreFilters, function(ef){
if(ef && dojo.isFunction(ef)){
ef(dom);
}
}, this);
},
 
_postFilterContent: function(/*DomNode|DomNode[]?*/dom,/*Boolean?*/nonDestructive){
// summary:
// filter the output after getting the content of the editing area
dom = dom || this.editNode;
if(this.contentDomPostFilters.length){
if(nonDestructive && dom['cloneNode']){
dom = dom.cloneNode(true);
}
dojo.forEach(this.contentDomPostFilters, function(ef){
dom = ef(dom);
});
}
var ec = this.getNodeChildrenHtml(dom);
if(!ec.replace(/^(?:\s|\xA0)+/g, "").replace(/(?:\s|\xA0)+$/g,"").length){ ec = ""; }
 
// if(dojo.isIE){
// //removing appended <P>&nbsp;</P> for IE
// ec = ec.replace(/(?:<p>&nbsp;</p>[\n\r]*)+$/i,"");
// }
dojo.forEach(this.contentPostFilters, function(ef){
ec = ef(ec);
});
 
return ec;
},
 
_saveContent: function(/*Event*/e){
// summary:
// Saves the content in an onunload event if the editor has not been closed
var saveTextarea = dojo.byId("dijit._editor.RichText.savedContent");
saveTextarea.value += this._SEPARATOR + this.name + ":" + this.getValue();
},
 
 
escapeXml: function(/*String*/str, /*Boolean*/noSingleQuotes){
//summary:
// Adds escape sequences for special characters in XML: &<>"'
// Optionally skips escapes for single quotes
str = str.replace(/&/gm, "&amp;").replace(/</gm, "&lt;").replace(/>/gm, "&gt;").replace(/"/gm, "&quot;");
if(!noSingleQuotes){
str = str.replace(/'/gm, "&#39;");
}
return str; // string
},
 
getNodeHtml: function(/* DomNode */node){
switch(node.nodeType){
case 1: //element node
var output = '<'+node.tagName.toLowerCase();
if(dojo.isMoz){
if(node.getAttribute('type')=='_moz'){
node.removeAttribute('type');
}
if(node.getAttribute('_moz_dirty') != undefined){
node.removeAttribute('_moz_dirty');
}
}
//store the list of attributes and sort it to have the
//attributes appear in the dictionary order
var attrarray = [];
if(dojo.isIE){
var s = node.outerHTML;
s = s.substr(0,s.indexOf('>'));
s = s.replace(/(?:['"])[^"']*\1/g, '');//to make the following regexp safe
var reg = /([^\s=]+)=/g;
var m, key;
while((m = reg.exec(s)) != undefined){
key=m[1];
if(key.substr(0,3) != '_dj'){
if(key == 'src' || key == 'href'){
if(node.getAttribute('_djrealurl')){
attrarray.push([key,node.getAttribute('_djrealurl')]);
continue;
}
}
if(key == 'class'){
attrarray.push([key,node.className]);
}else{
attrarray.push([key,node.getAttribute(key)]);
}
}
}
}else{
var attr, i=0, attrs = node.attributes;
while((attr=attrs[i++])){
//ignore all attributes starting with _dj which are
//internal temporary attributes used by the editor
if(attr.name.substr(0,3) != '_dj' /*&&
(attr.specified == undefined || attr.specified)*/){
var v = attr.value;
if(attr.name == 'src' || attr.name == 'href'){
if(node.getAttribute('_djrealurl')){
v = node.getAttribute('_djrealurl');
}
}
attrarray.push([attr.name,v]);
}
}
}
attrarray.sort(function(a,b){
return a[0]<b[0]?-1:(a[0]==b[0]?0:1);
});
i=0;
while((attr=attrarray[i++])){
output += ' '+attr[0]+'="'+attr[1]+'"';
}
if(node.childNodes.length){
output += '>' + this.getNodeChildrenHtml(node)+'</'+node.tagName.toLowerCase()+'>';
}else{
output += ' />';
}
break;
case 3: //text
// FIXME:
var output = this.escapeXml(node.nodeValue,true);
break;
case 8: //comment
// FIXME:
var output = '<!--'+this.escapeXml(node.nodeValue,true)+'-->';
break;
default:
var output = "Element not recognized - Type: " + node.nodeType + " Name: " + node.nodeName;
}
return output;
},
 
getNodeChildrenHtml: function(/* DomNode */dom){
// summary: Returns the html content of a DomNode and children
var out = "";
if(!dom){ return out; }
var nodes = dom["childNodes"]||dom;
var i=0;
var node;
while((node=nodes[i++])){
out += this.getNodeHtml(node);
}
return out; // String
},
 
close: function(/*Boolean*/save, /*Boolean*/force){
// summary:
// Kills the editor and optionally writes back the modified contents to the
// element from which it originated.
// save:
// Whether or not to save the changes. If false, the changes are discarded.
// force:
if(this.isClosed){return false; }
 
if(!arguments.length){ save = true; }
this._content = this.getValue();
var changed = (this.savedContent != this._content);
 
// line height is squashed for iframes
// FIXME: why was this here? if (this.iframe){ this.domNode.style.lineHeight = null; }
 
if(this.interval){ clearInterval(this.interval); }
 
if(this.textarea){
with(this.textarea.style){
position = "";
left = top = "";
if(dojo.isIE){
overflow = this.__overflow;
this.__overflow = null;
}
}
if(save){
this.textarea.value = this._content;
}else{
this.textarea.value = this.savedContent;
}
dojo._destroyElement(this.domNode);
this.domNode = this.textarea;
}else{
if(save){
//why we treat moz differently? comment out to fix #1061
// if(dojo.isMoz){
// var nc = dojo.doc.createElement("span");
// this.domNode.appendChild(nc);
// nc.innerHTML = this.editNode.innerHTML;
// }else{
// this.domNode.innerHTML = this._content;
// }
this.domNode.innerHTML = this._content;
}else{
this.domNode.innerHTML = this.savedContent;
}
}
 
dojo.removeClass(this.domNode, "RichTextEditable");
this.isClosed = true;
this.isLoaded = false;
// FIXME: is this always the right thing to do?
delete this.editNode;
 
if(this.window && this.window._frameElement){
this.window._frameElement = null;
}
 
this.window = null;
this.document = null;
this.editingArea = null;
this.editorObject = null;
 
return changed; // Boolean: whether the content has been modified
},
 
destroyRendering: function(){
// summary: stub
},
 
destroy: function(){
this.destroyRendering();
if(!this.isClosed){ this.close(false); }
this.inherited("destroy",arguments);
//dijit._editor.RichText.superclass.destroy.call(this);
},
 
_fixContentForMoz: function(/* String */ html){
// summary:
// Moz can not handle strong/em tags correctly, convert them to b/i
html = html.replace(/<(\/)?strong([ \>])/gi, '<$1b$2' );
html = html.replace(/<(\/)?em([ \>])/gi, '<$1i$2' );
return html; // String
},
 
_srcInImgRegex : /(?:(<img(?=\s).*?\ssrc=)("|')(.*?)\2)|(?:(<img\s.*?src=)([^"'][^ >]+))/gi ,
_hrefInARegex : /(?:(<a(?=\s).*?\shref=)("|')(.*?)\2)|(?:(<a\s.*?href=)([^"'][^ >]+))/gi ,
 
_preFixUrlAttributes: function(/* String */ html){
html = html.replace(this._hrefInARegex, '$1$4$2$3$5$2 _djrealurl=$2$3$5$2') ;
html = html.replace(this._srcInImgRegex, '$1$4$2$3$5$2 _djrealurl=$2$3$5$2') ;
return html; // String
}
});
 
}
 
if(!dojo._hasResource["dijit.Toolbar"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.Toolbar"] = true;
dojo.provide("dijit.Toolbar");
 
 
 
 
 
dojo.declare(
"dijit.Toolbar",
[dijit._Widget, dijit._Templated, dijit._KeyNavContainer],
{
templateString:
'<div class="dijit dijitToolbar" waiRole="toolbar" tabIndex="${tabIndex}" dojoAttachPoint="containerNode">' +
// '<table style="table-layout: fixed" class="dijitReset dijitToolbarTable">' + // factor out style
// '<tr class="dijitReset" dojoAttachPoint="containerNode"></tr>'+
// '</table>' +
'</div>',
 
tabIndex: "0",
 
postCreate: function(){
this.connectKeyNavHandlers(
this.isLeftToRight() ? [dojo.keys.LEFT_ARROW] : [dojo.keys.RIGHT_ARROW],
this.isLeftToRight() ? [dojo.keys.RIGHT_ARROW] : [dojo.keys.LEFT_ARROW]
);
},
 
startup: function(){
this.startupKeyNavChildren();
}
}
);
 
// Combine with dijit.MenuSeparator??
dojo.declare(
"dijit.ToolbarSeparator",
[ dijit._Widget, dijit._Templated ],
{
// summary
// A line between two menu items
templateString: '<div class="dijitToolbarSeparator dijitInline"></div>',
postCreate: function(){ dojo.setSelectable(this.domNode, false); },
isFocusable: function(){ return false; }
});
 
}
 
if(!dojo._hasResource["dijit.form.Button"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.form.Button"] = true;
dojo.provide("dijit.form.Button");
 
 
 
 
dojo.declare("dijit.form.Button", dijit.form._FormWidget, {
/*
* usage
* <button dojoType="button" onClick="...">Hello world</button>
*
* var button1 = new dijit.form.Button({label: "hello world", onClick: foo});
* dojo.body().appendChild(button1.domNode);
*/
// summary
// Basically the same thing as a normal HTML button, but with special styling.
 
// label: String
// text to display in button
label: "",
 
// showLabel: Boolean
// whether or not to display the text label in button
showLabel: true,
 
// iconClass: String
// class to apply to div in button to make it display an icon
iconClass: "",
 
type: "button",
baseClass: "dijitButton",
templateString:"<div class=\"dijit dijitLeft dijitInline dijitButton\"\n\tdojoAttachEvent=\"onclick:_onButtonClick,onmouseenter:_onMouse,onmouseleave:_onMouse,onmousedown:_onMouse\"\n\t><div class='dijitRight'\n\t\t><button class=\"dijitStretch dijitButtonNode dijitButtonContents\" dojoAttachPoint=\"focusNode,titleNode\"\n\t\t\ttype=\"${type}\" waiRole=\"button\" waiState=\"labelledby-${id}_label\"\n\t\t\t><span class=\"dijitInline ${iconClass}\" dojoAttachPoint=\"iconNode\" \n \t\t\t\t><span class=\"dijitToggleButtonIconChar\">&#10003</span \n\t\t\t></span\n\t\t\t><span class=\"dijitButtonText\" id=\"${id}_label\" dojoAttachPoint=\"containerNode\">${label}</span\n\t\t></button\n\t></div\n></div>\n",
 
// TODO: set button's title to this.containerNode.innerText
 
_onClick: function(/*Event*/ e){
// summary: internal function to handle click actions
if(this.disabled){ return false; }
this._clicked(); // widget click actions
return this.onClick(e); // user click actions
},
 
_onButtonClick: function(/*Event*/ e){
// summary: callback when the user mouse clicks the button portion
dojo.stopEvent(e);
var okToSubmit = this._onClick(e) !== false; // returning nothing is same as true
 
// for some reason type=submit buttons don't automatically submit the form; do it manually
if(this.type=="submit" && okToSubmit){
for(var node=this.domNode; node; node=node.parentNode){
var widget=dijit.byNode(node);
if(widget && widget._onSubmit){
widget._onSubmit(e);
break;
}
if(node.tagName.toLowerCase() == "form"){
if(!node.onsubmit || node.onsubmit()){ node.submit(); }
break;
}
}
}
},
 
postCreate: function(){
// summary:
// get label and set as title on button icon if necessary
if (this.showLabel == false){
var labelText = "";
this.label = this.containerNode.innerHTML;
labelText = dojo.trim(this.containerNode.innerText || this.containerNode.textContent);
// set title attrib on iconNode
this.titleNode.title=labelText;
dojo.addClass(this.containerNode,"dijitDisplayNone");
}
this.inherited(arguments);
},
 
onClick: function(/*Event*/ e){
// summary: user callback for when button is clicked
// if type="submit", return value != false to perform submit
return true;
},
 
_clicked: function(/*Event*/ e){
// summary: internal replaceable function for when the button is clicked
},
 
setLabel: function(/*String*/ content){
// summary: reset the label (text) of the button; takes an HTML string
this.containerNode.innerHTML = this.label = content;
if(dojo.isMozilla){ // Firefox has re-render issues with tables
var oldDisplay = dojo.getComputedStyle(this.domNode).display;
this.domNode.style.display="none";
var _this = this;
setTimeout(function(){_this.domNode.style.display=oldDisplay;},1);
}
if (this.showLabel == false){
this.titleNode.title=dojo.trim(this.containerNode.innerText || this.containerNode.textContent);
}
}
});
 
/*
* usage
* <button dojoType="DropDownButton" label="Hello world"><div dojotype=dijit.Menu>...</div></button>
*
* var button1 = new dijit.form.DropDownButton({ label: "hi", dropDown: new dijit.Menu(...) });
* dojo.body().appendChild(button1);
*/
dojo.declare("dijit.form.DropDownButton", [dijit.form.Button, dijit._Container], {
// summary
// push the button and a menu shows up
 
baseClass : "dijitDropDownButton",
 
templateString:"<div class=\"dijit dijitLeft dijitInline\"\n\tdojoAttachEvent=\"onmouseenter:_onMouse,onmouseleave:_onMouse,onmousedown:_onMouse,onclick:_onDropDownClick,onkeydown:_onDropDownKeydown,onblur:_onDropDownBlur,onkeypress:_onKey\"\n\t><div class='dijitRight'>\n\t<button class=\"dijitStretch dijitButtonNode dijitButtonContents\" type=\"${type}\"\n\t\tdojoAttachPoint=\"focusNode,titleNode\" waiRole=\"button\" waiState=\"haspopup-true,labelledby-${id}_label\"\n\t\t><div class=\"dijitInline ${iconClass}\" dojoAttachPoint=\"iconNode\"></div\n\t\t><span class=\"dijitButtonText\" \tdojoAttachPoint=\"containerNode,popupStateNode\"\n\t\tid=\"${id}_label\">${label}</span\n\t\t><span class='dijitA11yDownArrow'>&#9660;</span>\n\t</button>\n</div></div>\n",
 
_fillContent: function(){
// my inner HTML contains both the button contents and a drop down widget, like
// <DropDownButton> <span>push me</span> <Menu> ... </Menu> </DropDownButton>
// The first node is assumed to be the button content. The widget is the popup.
if(this.srcNodeRef){ // programatically created buttons might not define srcNodeRef
//FIXME: figure out how to filter out the widget and use all remaining nodes as button
// content, not just nodes[0]
var nodes = dojo.query("*", this.srcNodeRef);
dijit.form.DropDownButton.superclass._fillContent.call(this, nodes[0]);
 
// save pointer to srcNode so we can grab the drop down widget after it's instantiated
this.dropDownContainer = this.srcNodeRef;
}
},
 
startup: function(){
// the child widget from srcNodeRef is the dropdown widget. Insert it in the page DOM,
// make it invisible, and store a reference to pass to the popup code.
if(!this.dropDown){
var dropDownNode = dojo.query("[widgetId]", this.dropDownContainer)[0];
this.dropDown = dijit.byNode(dropDownNode);
delete this.dropDownContainer;
}
dojo.body().appendChild(this.dropDown.domNode);
this.dropDown.domNode.style.display="none";
},
 
_onArrowClick: function(/*Event*/ e){
// summary: callback when the user mouse clicks on menu popup node
if(this.disabled){ return; }
this._toggleDropDown();
},
 
_onDropDownClick: function(/*Event*/ e){
// on Firefox 2 on the Mac it is possible to fire onclick
// by pressing enter down on a second element and transferring
// focus to the DropDownButton;
// we want to prevent opening our menu in this situation
// and only do so if we have seen a keydown on this button;
// e.detail != 0 means that we were fired by mouse
var isMacFFlessThan3 = dojo.isFF && dojo.isFF < 3
&& navigator.appVersion.indexOf("Macintosh") != -1;
if(!isMacFFlessThan3 || e.detail != 0 || this._seenKeydown){
this._onArrowClick(e);
}
this._seenKeydown = false;
},
 
_onDropDownKeydown: function(/*Event*/ e){
this._seenKeydown = true;
},
 
_onDropDownBlur: function(/*Event*/ e){
this._seenKeydown = false;
},
 
_onKey: function(/*Event*/ e){
// summary: callback when the user presses a key on menu popup node
if(this.disabled){ return; }
if(e.keyCode == dojo.keys.DOWN_ARROW){
if(!this.dropDown || this.dropDown.domNode.style.display=="none"){
dojo.stopEvent(e);
return this._toggleDropDown();
}
}
},
 
_onBlur: function(){
// summary: called magically when focus has shifted away from this widget and it's dropdown
this._closeDropDown();
// don't focus on button. the user has explicitly focused on something else.
},
 
_toggleDropDown: function(){
// summary: toggle the drop-down widget; if it is up, close it, if not, open it
if(this.disabled){ return; }
dijit.focus(this.popupStateNode);
var dropDown = this.dropDown;
if(!dropDown){ return false; }
if(!dropDown.isShowingNow){
// If there's an href, then load that first, so we don't get a flicker
if(dropDown.href && !dropDown.isLoaded){
var self = this;
var handler = dojo.connect(dropDown, "onLoad", function(){
dojo.disconnect(handler);
self._openDropDown();
});
dropDown._loadCheck(true);
return;
}else{
this._openDropDown();
}
}else{
this._closeDropDown();
}
},
 
_openDropDown: function(){
var dropDown = this.dropDown;
var oldWidth=dropDown.domNode.style.width;
var self = this;
 
dijit.popup.open({
parent: this,
popup: dropDown,
around: this.domNode,
orient: this.isLeftToRight() ? {'BL':'TL', 'BR':'TR', 'TL':'BL', 'TR':'BR'}
: {'BR':'TR', 'BL':'TL', 'TR':'BR', 'TL':'BL'},
onExecute: function(){
self._closeDropDown(true);
},
onCancel: function(){
self._closeDropDown(true);
},
onClose: function(){
dropDown.domNode.style.width = oldWidth;
self.popupStateNode.removeAttribute("popupActive");
this._opened = false;
}
});
if(this.domNode.offsetWidth > dropDown.domNode.offsetWidth){
var adjustNode = null;
if(!this.isLeftToRight()){
adjustNode = dropDown.domNode.parentNode;
var oldRight = adjustNode.offsetLeft + adjustNode.offsetWidth;
}
// make menu at least as wide as the button
dojo.marginBox(dropDown.domNode, {w: this.domNode.offsetWidth});
if(adjustNode){
adjustNode.style.left = oldRight - this.domNode.offsetWidth + "px";
}
}
this.popupStateNode.setAttribute("popupActive", "true");
this._opened=true;
if(dropDown.focus){
dropDown.focus();
}
// TODO: set this.checked and call setStateClass(), to affect button look while drop down is shown
},
_closeDropDown: function(/*Boolean*/ focus){
if(this._opened){
dijit.popup.close(this.dropDown);
if(focus){ this.focus(); }
this._opened = false;
}
}
});
 
/*
* usage
* <button dojoType="ComboButton" onClick="..."><span>Hello world</span><div dojoType=dijit.Menu>...</div></button>
*
* var button1 = new dijit.form.ComboButton({label: "hello world", onClick: foo, dropDown: "myMenu"});
* dojo.body().appendChild(button1.domNode);
*/
dojo.declare("dijit.form.ComboButton", dijit.form.DropDownButton, {
// summary
// left side is normal button, right side displays menu
templateString:"<table class='dijit dijitReset dijitInline dijitLeft'\n\tcellspacing='0' cellpadding='0'\n\tdojoAttachEvent=\"onmouseenter:_onMouse,onmouseleave:_onMouse,onmousedown:_onMouse\">\n\t<tr>\n\t\t<td\tclass=\"dijitStretch dijitButtonContents dijitButtonNode\"\n\t\t\ttabIndex=\"${tabIndex}\"\n\t\t\tdojoAttachEvent=\"ondijitclick:_onButtonClick\" dojoAttachPoint=\"titleNode\"\n\t\t\twaiRole=\"button\" waiState=\"labelledby-${id}_label\">\n\t\t\t<div class=\"dijitInline ${iconClass}\" dojoAttachPoint=\"iconNode\"></div>\n\t\t\t<span class=\"dijitButtonText\" id=\"${id}_label\" dojoAttachPoint=\"containerNode\">${label}</span>\n\t\t</td>\n\t\t<td class='dijitReset dijitRight dijitButtonNode dijitDownArrowButton'\n\t\t\tdojoAttachPoint=\"popupStateNode,focusNode\"\n\t\t\tdojoAttachEvent=\"ondijitclick:_onArrowClick, onkeypress:_onKey\"\n\t\t\tstateModifier=\"DownArrow\"\n\t\t\ttitle=\"${optionsTitle}\" name=\"${name}\"\n\t\t\twaiRole=\"button\" waiState=\"haspopup-true\"\n\t\t><div waiRole=\"presentation\">&#9660;</div>\n\t</td></tr>\n</table>\n",
 
attributeMap: dojo.mixin(dojo.clone(dijit.form._FormWidget.prototype.attributeMap),
{id:"", name:""}),
 
// optionsTitle: String
// text that describes the options menu (accessibility)
optionsTitle: "",
 
baseClass: "dijitComboButton",
 
_focusedNode: null,
 
postCreate: function(){
this.inherited(arguments);
this._focalNodes = [this.titleNode, this.popupStateNode];
dojo.forEach(this._focalNodes, dojo.hitch(this, function(node){
if(dojo.isIE){
this.connect(node, "onactivate", this._onNodeFocus);
}else{
this.connect(node, "onfocus", this._onNodeFocus);
}
}));
},
 
focusFocalNode: function(node){
// summary: Focus the focal node node.
this._focusedNode = node;
dijit.focus(node);
},
 
hasNextFocalNode: function(){
// summary: Returns true if this widget has no node currently
// focused or if there is a node following the focused one.
// False is returned if the last node has focus.
return this._focusedNode !== this.getFocalNodes()[1];
},
 
focusNext: function(){
// summary: Focus the focal node following the current node with focus
// or the first one if no node currently has focus.
this._focusedNode = this.getFocalNodes()[this._focusedNode ? 1 : 0];
dijit.focus(this._focusedNode);
},
 
hasPrevFocalNode: function(){
// summary: Returns true if this widget has no node currently
// focused or if there is a node before the focused one.
// False is returned if the first node has focus.
return this._focusedNode !== this.getFocalNodes()[0];
},
 
focusPrev: function(){
// summary: Focus the focal node before the current node with focus
// or the last one if no node currently has focus.
this._focusedNode = this.getFocalNodes()[this._focusedNode ? 0 : 1];
dijit.focus(this._focusedNode);
},
 
getFocalNodes: function(){
// summary: Returns an array of focal nodes for this widget.
return this._focalNodes;
},
 
_onNodeFocus: function(evt){
this._focusedNode = evt.currentTarget;
},
 
_onBlur: function(evt){
this.inherited(arguments);
this._focusedNode = null;
}
});
 
dojo.declare("dijit.form.ToggleButton", dijit.form.Button, {
// summary
// A button that can be in two states (checked or not).
// Can be base class for things like tabs or checkbox or radio buttons
 
baseClass: "dijitToggleButton",
 
// checked: Boolean
// Corresponds to the native HTML <input> element's attribute.
// In markup, specified as "checked='checked'" or just "checked".
// True if the button is depressed, or the checkbox is checked,
// or the radio button is selected, etc.
checked: false,
 
_clicked: function(/*Event*/ evt){
this.setChecked(!this.checked);
},
 
setChecked: function(/*Boolean*/ checked){
// summary
// Programatically deselect the button
this.checked = checked;
dijit.setWaiState(this.focusNode || this.domNode, "pressed", this.checked);
this._setStateClass();
this.onChange(checked);
}
});
 
}
 
if(!dojo._hasResource["dijit._editor._Plugin"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit._editor._Plugin"] = true;
dojo.provide("dijit._editor._Plugin");
 
 
 
 
dojo.declare("dijit._editor._Plugin", null, {
// summary
// This represents a "plugin" to the editor, which is basically
// a single button on the Toolbar and some associated code
constructor: function(/*Object?*/args, /*DomNode?*/node){
if(args){
dojo.mixin(this, args);
}
},
 
editor: null,
iconClassPrefix: "dijitEditorIcon",
button: null,
queryCommand: null,
command: "",
commandArg: null,
useDefaultCommand: true,
buttonClass: dijit.form.Button,
updateInterval: 200, // only allow updates every two tenths of a second
_initButton: function(){
if(this.command.length){
var label = this.editor.commands[this.command];
var className = "dijitEditorIcon "+this.iconClassPrefix + this.command.charAt(0).toUpperCase() + this.command.substr(1);
if(!this.button){
var props = {
label: label,
showLabel: false,
iconClass: className,
dropDown: this.dropDown
};
this.button = new this.buttonClass(props);
}
}
},
updateState: function(){
var _e = this.editor;
var _c = this.command;
if(!_e){ return; }
if(!_e.isLoaded){ return; }
if(!_c.length){ return; }
if(this.button){
try{
var enabled = _e.queryCommandEnabled(_c);
this.button.setDisabled(!enabled);
if(this.button.setChecked){
this.button.setChecked(_e.queryCommandState(_c));
}
}catch(e){
console.debug(e);
}
}
},
setEditor: function(/*Widget*/editor){
// FIXME: detatch from previous editor!!
this.editor = editor;
 
// FIXME: prevent creating this if we don't need to (i.e., editor can't handle our command)
this._initButton();
 
// FIXME: wire up editor to button here!
if( (this.command.length) &&
(!this.editor.queryCommandAvailable(this.command))
){
// console.debug("hiding:", this.command);
if(this.button){
this.button.domNode.style.display = "none";
}
}
if(this.button && this.useDefaultCommand){
dojo.connect(this.button, "onClick",
dojo.hitch(this.editor, "execCommand", this.command, this.commandArg)
);
}
dojo.connect(this.editor, "onNormalizedDisplayChanged", this, "updateState");
},
setToolbar: function(/*Widget*/toolbar){
if(this.button){
toolbar.addChild(this.button);
}
// console.debug("adding", this.button, "to:", toolbar);
}
});
 
}
 
if(!dojo._hasResource["dijit.Editor"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.Editor"] = true;
dojo.provide("dijit.Editor");
 
 
 
 
 
 
 
dojo.declare(
"dijit.Editor",
dijit._editor.RichText,
{
// summary: A rich-text Editing widget
 
// plugins: Array
// a list of plugin names (as strings) or instances (as objects)
// for this widget.
plugins: null,
 
// extraPlugins: Array
// a list of extra plugin names which will be appended to plugins array
extraPlugins: null,
 
constructor: function(){
this.plugins=["undo","redo","|","cut","copy","paste","|","bold","italic","underline","strikethrough","|",
"insertOrderedList","insertUnorderedList","indent","outdent","|","justifyLeft","justifyRight","justifyCenter","justifyFull"/*"createLink"*/];
 
this._plugins=[];
this._editInterval = this.editActionInterval * 1000;
},
 
postCreate: function(){
//for custom undo/redo
if(this.customUndo){
dojo['require']("dijit._editor.range");
this._steps=this._steps.slice(0);
this._undoedSteps=this._undoedSteps.slice(0);
// this.addKeyHandler('z',this.KEY_CTRL,this.undo);
// this.addKeyHandler('y',this.KEY_CTRL,this.redo);
}
if(dojo.isArray(this.extraPlugins)){
this.plugins=this.plugins.concat(this.extraPlugins);
}
 
// try{
dijit.Editor.superclass.postCreate.apply(this, arguments);
 
this.commands = dojo.i18n.getLocalization("dijit._editor", "commands", this.lang);
 
if(!this.toolbar){
// if we haven't been assigned a toolbar, create one
var toolbarNode = dojo.doc.createElement("div");
dojo.place(toolbarNode, this.editingArea, "before");
this.toolbar = new dijit.Toolbar({}, toolbarNode);
}
 
dojo.forEach(this.plugins, this.addPlugin, this);
this.onNormalizedDisplayChanged(); //update toolbar button status
// }catch(e){ console.debug(e); }
},
destroy: function(){
dojo.forEach(this._plugins, function(p){
if(p.destroy){
p.destroy();
}
});
this._plugins=[];
this.toolbar.destroy(); delete this.toolbar;
this.inherited('destroy',arguments);
},
addPlugin: function(/*String||Object*/plugin, /*Integer?*/index){
// summary:
// takes a plugin name as a string or a plugin instance and
// adds it to the toolbar and associates it with this editor
// instance. The resulting plugin is added to the Editor's
// plugins array. If index is passed, it's placed in the plugins
// array at that index. No big magic, but a nice helper for
// passing in plugin names via markup.
// plugin: String, args object or plugin instance. Required.
// args: This object will be passed to the plugin constructor.
// index:
// Integer, optional. Used when creating an instance from
// something already in this.plugins. Ensures that the new
// instance is assigned to this.plugins at that index.
var args=dojo.isString(plugin)?{name:plugin}:plugin;
if(!args.setEditor){
var o={"args":args,"plugin":null,"editor":this};
dojo.publish("dijit.Editor.getPlugin",[o]);
if(!o.plugin){
var pc = dojo.getObject(args.name);
if(pc){
o.plugin=new pc(args);
}
}
if(!o.plugin){
console.debug('Cannot find plugin',plugin);
return;
}
plugin=o.plugin;
}
if(arguments.length > 1){
this._plugins[index] = plugin;
}else{
this._plugins.push(plugin);
}
plugin.setEditor(this);
if(dojo.isFunction(plugin.setToolbar)){
plugin.setToolbar(this.toolbar);
}
},
/* beginning of custom undo/redo support */
 
// customUndo: Boolean
// Whether we shall use custom undo/redo support instead of the native
// browser support. By default, we only enable customUndo for IE, as it
// has broken native undo/redo support. Note: the implementation does
// support other browsers which have W3C DOM2 Range API.
customUndo: dojo.isIE,
 
// editActionInterval: Integer
// When using customUndo, not every keystroke will be saved as a step.
// Instead typing (including delete) will be grouped together: after
// a user stop typing for editActionInterval seconds, a step will be
// saved; if a user resume typing within editActionInterval seconds,
// the timeout will be restarted. By default, editActionInterval is 3
// seconds.
editActionInterval: 3,
beginEditing: function(cmd){
if(!this._inEditing){
this._inEditing=true;
this._beginEditing(cmd);
}
if(this.editActionInterval>0){
if(this._editTimer){
clearTimeout(this._editTimer);
}
this._editTimer = setTimeout(dojo.hitch(this, this.endEditing), this._editInterval);
}
},
_steps:[],
_undoedSteps:[],
execCommand: function(cmd){
if(this.customUndo && (cmd=='undo' || cmd=='redo')){
return this[cmd]();
}else{
try{
if(this.customUndo){
this.endEditing();
this._beginEditing();
}
var r = this.inherited('execCommand',arguments);
if(this.customUndo){
this._endEditing();
}
return r;
}catch(e){
if(dojo.isMoz && /copy|cut|paste/.test(cmd)){
// Warn user of platform limitation. Cannot programmatically access keyboard. See ticket #4136
var sub = dojo.string.substitute,
accel = {cut:'X', copy:'C', paste:'V'},
isMac = navigator.userAgent.indexOf("Macintosh") != -1;
alert(sub(this.commands.systemShortcutFF,
[this.commands[cmd], sub(this.commands[isMac ? 'appleKey' : 'ctrlKey'], [accel[cmd]])]));
}
return false;
}
}
},
queryCommandEnabled: function(cmd){
if(this.customUndo && (cmd=='undo' || cmd=='redo')){
return cmd=='undo'?(this._steps.length>1):(this._undoedSteps.length>0);
}else{
return this.inherited('queryCommandEnabled',arguments);
}
},
_changeToStep: function(from,to){
this.setValue(to.text);
var b=to.bookmark;
if(!b){ return; }
if(dojo.isIE){
if(dojo.isArray(b)){//IE CONTROL
var tmp=[];
dojo.forEach(b,function(n){
tmp.push(dijit.range.getNode(n,this.editNode));
},this);
b=tmp;
}
}else{//w3c range
var r=dijit.range.create();
r.setStart(dijit.range.getNode(b.startContainer,this.editNode),b.startOffset);
r.setEnd(dijit.range.getNode(b.endContainer,this.editNode),b.endOffset);
b=r;
}
dojo.withGlobal(this.window,'moveToBookmark',dijit,[b]);
},
undo: function(){
// console.log('undo');
this.endEditing(true);
var s=this._steps.pop();
if(this._steps.length>0){
this.focus();
this._changeToStep(s,this._steps[this._steps.length-1]);
this._undoedSteps.push(s);
this.onDisplayChanged();
return true;
}
return false;
},
redo: function(){
// console.log('redo');
this.endEditing(true);
var s=this._undoedSteps.pop();
if(s && this._steps.length>0){
this.focus();
this._changeToStep(this._steps[this._steps.length-1],s);
this._steps.push(s);
this.onDisplayChanged();
return true;
}
return false;
},
endEditing: function(ignore_caret){
if(this._editTimer){
clearTimeout(this._editTimer);
}
if(this._inEditing){
this._endEditing(ignore_caret);
this._inEditing=false;
}
},
_getBookmark: function(){
var b=dojo.withGlobal(this.window,dijit.getBookmark);
if(dojo.isIE){
if(dojo.isArray(b)){//CONTROL
var tmp=[];
dojo.forEach(b,function(n){
tmp.push(dijit.range.getIndex(n,this.editNode).o);
},this);
b=tmp;
}
}else{//w3c range
var tmp=dijit.range.getIndex(b.startContainer,this.editNode).o
b={startContainer:tmp,
startOffset:b.startOffset,
endContainer:b.endContainer===b.startContainer?tmp:dijit.range.getIndex(b.endContainer,this.editNode).o,
endOffset:b.endOffset};
}
return b;
},
_beginEditing: function(cmd){
if(this._steps.length===0){
this._steps.push({'text':this.savedContent,'bookmark':this._getBookmark()});
}
},
_endEditing: function(ignore_caret){
var v=this.getValue(true);
 
this._undoedSteps=[];//clear undoed steps
this._steps.push({'text':v,'bookmark':this._getBookmark()});
},
onKeyDown: function(e){
if(!this.customUndo){
this.inherited('onKeyDown',arguments);
return;
}
var k=e.keyCode,ks=dojo.keys;
if(e.ctrlKey){
if(k===90||k===122){ //z
dojo.stopEvent(e);
this.undo();
return;
}else if(k===89||k===121){ //y
dojo.stopEvent(e);
this.redo();
return;
}
}
this.inherited('onKeyDown',arguments);
 
switch(k){
case ks.ENTER:
this.beginEditing();
break;
case ks.BACKSPACE:
case ks.DELETE:
this.beginEditing();
break;
case 88: //x
case 86: //v
if(e.ctrlKey && !e.altKey && !e.metaKey){
this.endEditing();//end current typing step if any
if(e.keyCode == 88){
this.beginEditing('cut');
//use timeout to trigger after the cut is complete
setTimeout(dojo.hitch(this, this.endEditing), 1);
}else{
this.beginEditing('paste');
//use timeout to trigger after the paste is complete
setTimeout(dojo.hitch(this, this.endEditing), 1);
}
break;
}
//pass through
default:
if(!e.ctrlKey && !e.altKey && !e.metaKey && (e.keyCode<dojo.keys.F1 || e.keyCode>dojo.keys.F15)){
this.beginEditing();
break;
}
//pass through
case ks.ALT:
this.endEditing();
break;
case ks.UP_ARROW:
case ks.DOWN_ARROW:
case ks.LEFT_ARROW:
case ks.RIGHT_ARROW:
case ks.HOME:
case ks.END:
case ks.PAGE_UP:
case ks.PAGE_DOWN:
this.endEditing(true);
break;
//maybe ctrl+backspace/delete, so don't endEditing when ctrl is pressed
case ks.CTRL:
case ks.SHIFT:
case ks.TAB:
break;
}
},
_onBlur: function(){
this.inherited('_onBlur',arguments);
this.endEditing(true);
},
onClick: function(){
this.endEditing(true);
this.inherited('onClick',arguments);
}
/* end of custom undo/redo support */
}
);
 
/* the following code is to registered a handler to get default plugins */
dojo.subscribe("dijit.Editor.getPlugin",null,function(o){
if(o.plugin){ return; }
var args=o.args, p;
var _p = dijit._editor._Plugin;
var name=args.name;
switch(name){
case "undo": case "redo": case "cut": case "copy": case "paste": case "insertOrderedList":
case "insertUnorderedList": case "indent": case "outdent": case "justifyCenter":
case "justifyFull": case "justifyLeft": case "justifyRight": case "delete":
case "selectAll": case "removeFormat":
p = new _p({ command: name });
break;
 
case "bold": case "italic": case "underline": case "strikethrough":
case "subscript": case "superscript":
p = new _p({ buttonClass: dijit.form.ToggleButton, command: name });
break;
case "|":
p = new _p({ button: new dijit.ToolbarSeparator() });
break;
case "createLink":
// dojo['require']('dijit._editor.plugins.LinkDialog');
p = new dijit._editor.plugins.LinkDialog({ command: name });
break;
case "foreColor": case "hiliteColor":
p = new dijit._editor.plugins.TextColor({ command: name });
break;
case "fontName": case "fontSize": case "formatBlock":
p = new dijit._editor.plugins.FontChoice({ command: name });
}
// console.log('name',name,p);
o.plugin=p;
});
 
}
 
if(!dojo._hasResource["dijit.Menu"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.Menu"] = true;
dojo.provide("dijit.Menu");
 
 
 
 
 
dojo.declare(
"dijit.Menu",
[dijit._Widget, dijit._Templated, dijit._KeyNavContainer],
{
constructor: function() {
this._bindings = [];
},
 
templateString:
'<table class="dijit dijitMenu dijitReset dijitMenuTable" waiRole="menu" dojoAttachEvent="onkeypress:_onKeyPress">' +
'<tbody class="dijitReset" dojoAttachPoint="containerNode"></tbody>'+
'</table>',
 
// targetNodeIds: String[]
// Array of dom node ids of nodes to attach to.
// Fill this with nodeIds upon widget creation and it becomes context menu for those nodes.
targetNodeIds: [],
 
// contextMenuForWindow: Boolean
// if true, right clicking anywhere on the window will cause this context menu to open;
// if false, must specify targetNodeIds
contextMenuForWindow: false,
 
// parentMenu: Widget
// pointer to menu that displayed me
parentMenu: null,
 
// popupDelay: Integer
// number of milliseconds before hovering (without clicking) causes the popup to automatically open
popupDelay: 500,
 
// _contextMenuWithMouse: Boolean
// used to record mouse and keyboard events to determine if a context
// menu is being opened with the keyboard or the mouse
_contextMenuWithMouse: false,
 
postCreate: function(){
if(this.contextMenuForWindow){
this.bindDomNode(dojo.body());
}else{
dojo.forEach(this.targetNodeIds, this.bindDomNode, this);
}
this.connectKeyNavHandlers([dojo.keys.UP_ARROW], [dojo.keys.DOWN_ARROW]);
},
 
startup: function(){
dojo.forEach(this.getChildren(), function(child){ child.startup(); });
this.startupKeyNavChildren();
},
 
onExecute: function(){
// summary: attach point for notification about when a menu item has been executed
},
 
onCancel: function(/*Boolean*/ closeAll){
// summary: attach point for notification about when the user cancels the current menu
},
 
_moveToPopup: function(/*Event*/ evt){
if(this.focusedChild && this.focusedChild.popup && !this.focusedChild.disabled){
this.focusedChild._onClick(evt);
}
},
 
_onKeyPress: function(/*Event*/ evt){
// summary
// Handle keyboard based menu navigation.
if(evt.ctrlKey || evt.altKey){ return; }
 
switch(evt.keyCode){
case dojo.keys.RIGHT_ARROW:
this._moveToPopup(evt);
dojo.stopEvent(evt);
break;
case dojo.keys.LEFT_ARROW:
if(this.parentMenu){
this.onCancel(false);
}else{
dojo.stopEvent(evt);
}
break;
}
},
 
onItemHover: function(/*MenuItem*/ item){
this.focusChild(item);
 
if(this.focusedChild.popup && !this.focusedChild.disabled && !this.hover_timer){
this.hover_timer = setTimeout(dojo.hitch(this, "_openPopup"), this.popupDelay);
}
},
 
_onChildBlur: function(item){
// Close all popups that are open and descendants of this menu
dijit.popup.close(item.popup);
item._blur();
this._stopPopupTimer();
},
 
onItemUnhover: function(/*MenuItem*/ item){
},
 
_stopPopupTimer: function(){
if(this.hover_timer){
clearTimeout(this.hover_timer);
this.hover_timer = null;
}
},
 
_getTopMenu: function(){
for(var top=this; top.parentMenu; top=top.parentMenu);
return top;
},
 
onItemClick: function(/*Widget*/ item){
// summary: user defined function to handle clicks on an item
// summary: internal function for clicks
if(item.disabled){ return false; }
 
if(item.popup){
if(!this.is_open){
this._openPopup();
}
}else{
// before calling user defined handler, close hierarchy of menus
// and restore focus to place it was when menu was opened
this.onExecute();
 
// user defined handler for click
item.onClick();
}
},
 
// thanks burstlib!
_iframeContentWindow: function(/* HTMLIFrameElement */iframe_el) {
// summary
// returns the window reference of the passed iframe
var win = dijit.getDocumentWindow(dijit.Menu._iframeContentDocument(iframe_el)) ||
// Moz. TODO: is this available when defaultView isn't?
dijit.Menu._iframeContentDocument(iframe_el)['__parent__'] ||
(iframe_el.name && document.frames[iframe_el.name]) || null;
return win; // Window
},
 
_iframeContentDocument: function(/* HTMLIFrameElement */iframe_el){
// summary
// returns a reference to the document object inside iframe_el
var doc = iframe_el.contentDocument // W3
|| (iframe_el.contentWindow && iframe_el.contentWindow.document) // IE
|| (iframe_el.name && document.frames[iframe_el.name] && document.frames[iframe_el.name].document)
|| null;
return doc; // HTMLDocument
},
 
bindDomNode: function(/*String|DomNode*/ node){
// summary: attach menu to given node
node = dojo.byId(node);
 
//TODO: this is to support context popups in Editor. Maybe this shouldn't be in dijit.Menu
var win = dijit.getDocumentWindow(node.ownerDocument);
if(node.tagName.toLowerCase()=="iframe"){
win = this._iframeContentWindow(node);
node = dojo.withGlobal(win, dojo.body);
}
 
// to capture these events at the top level,
// attach to document, not body
var cn = (node == dojo.body() ? dojo.doc : node);
 
node[this.id] = this._bindings.push([
dojo.connect(cn, "oncontextmenu", this, "_openMyself"),
dojo.connect(cn, "onkeydown", this, "_contextKey"),
dojo.connect(cn, "onmousedown", this, "_contextMouse")
]);
},
 
unBindDomNode: function(/*String|DomNode*/ nodeName){
// summary: detach menu from given node
var node = dojo.byId(nodeName);
var bid = node[this.id]-1, b = this._bindings[bid];
dojo.forEach(b, dojo.disconnect);
delete this._bindings[bid];
},
 
_contextKey: function(e){
this._contextMenuWithMouse = false;
if (e.keyCode == dojo.keys.F10) {
dojo.stopEvent(e);
if (e.shiftKey && e.type=="keydown") {
// FF: copying the wrong property from e will cause the system
// context menu to appear in spite of stopEvent. Don't know
// exactly which properties cause this effect.
var _e = { target: e.target, pageX: e.pageX, pageY: e.pageY };
_e.preventDefault = _e.stopPropagation = function(){};
// IE: without the delay, focus work in "open" causes the system
// context menu to appear in spite of stopEvent.
window.setTimeout(dojo.hitch(this, function(){ this._openMyself(_e); }), 1);
}
}
},
 
_contextMouse: function(e){
this._contextMenuWithMouse = true;
},
 
_openMyself: function(/*Event*/ e){
// summary:
// Internal function for opening myself when the user
// does a right-click or something similar
 
dojo.stopEvent(e);
 
// Get coordinates.
// if we are opening the menu with the mouse or on safari open
// the menu at the mouse cursor
// (Safari does not have a keyboard command to open the context menu
// and we don't currently have a reliable way to determine
// _contextMenuWithMouse on Safari)
var x,y;
if(dojo.isSafari || this._contextMenuWithMouse){
x=e.pageX;
y=e.pageY;
}else{
// otherwise open near e.target
var coords = dojo.coords(e.target, true);
x = coords.x + 10;
y = coords.y + 10;
}
 
var self=this;
var savedFocus = dijit.getFocus(this);
function closeAndRestoreFocus(){
// user has clicked on a menu or popup
dijit.focus(savedFocus);
dijit.popup.close(self);
}
dijit.popup.open({
popup: this,
x: x,
y: y,
onExecute: closeAndRestoreFocus,
onCancel: closeAndRestoreFocus,
orient: this.isLeftToRight() ? 'L' : 'R'
});
this.focus();
 
this._onBlur = function(){
// Usually the parent closes the child widget but if this is a context
// menu then there is no parent
dijit.popup.close(this);
// don't try to restore focus; user has clicked another part of the screen
// and set focus there
}
},
 
onOpen: function(/*Event*/ e){
// summary
// Open menu relative to the mouse
this.isShowingNow = true;
},
 
onClose: function(){
// summary: callback when this menu is closed
this._stopPopupTimer();
this.parentMenu = null;
this.isShowingNow = false;
this.currentPopup = null;
if(this.focusedChild){
this._onChildBlur(this.focusedChild);
this.focusedChild = null;
}
},
 
_openPopup: function(){
// summary: open the popup to the side of the current menu item
this._stopPopupTimer();
var from_item = this.focusedChild;
var popup = from_item.popup;
 
if(popup.isShowingNow){ return; }
popup.parentMenu = this;
var self = this;
dijit.popup.open({
parent: this,
popup: popup,
around: from_item.arrowCell,
orient: this.isLeftToRight() ? {'TR': 'TL', 'TL': 'TR'} : {'TL': 'TR', 'TR': 'TL'},
onCancel: function(){
// called when the child menu is canceled
dijit.popup.close(popup);
from_item.focus(); // put focus back on my node
self.currentPopup = null;
}
});
 
this.currentPopup = popup;
 
if(popup.focus){
popup.focus();
}
}
}
);
 
dojo.declare(
"dijit.MenuItem",
[dijit._Widget, dijit._Templated, dijit._Contained],
{
// summary
// A line item in a Menu2
 
// Make 3 columns
// icon, label, and expand arrow (BiDi-dependent) indicating sub-menu
templateString:
'<tr class="dijitReset dijitMenuItem"'
+'dojoAttachEvent="onmouseenter:_onHover,onmouseleave:_onUnhover,ondijitclick:_onClick">'
+'<td class="dijitReset"><div class="dijitMenuItemIcon ${iconClass}" dojoAttachPoint="iconNode" ></div></td>'
+'<td tabIndex="-1" class="dijitReset dijitMenuItemLabel" dojoAttachPoint="containerNode" waiRole="menuitem"></td>'
+'<td class="dijitReset" dojoAttachPoint="arrowCell">'
+'<div class="dijitMenuExpand" dojoAttachPoint="expand" style="display:none">'
+'<span class="dijitInline dijitArrowNode dijitMenuExpandInner">+</span>'
+'</div>'
+'</td>'
+'</tr>',
 
// label: String
// menu text
label: '',
 
// iconClass: String
// class to apply to div in button to make it display an icon
iconClass: "",
 
// disabled: Boolean
// if true, the menu item is disabled
// if false, the menu item is enabled
disabled: false,
 
postCreate: function(){
dojo.setSelectable(this.domNode, false);
this.setDisabled(this.disabled);
if(this.label){
this.containerNode.innerHTML=this.label;
}
},
 
_onHover: function(){
// summary: callback when mouse is moved onto menu item
this.getParent().onItemHover(this);
},
 
_onUnhover: function(){
// summary: callback when mouse is moved off of menu item
// if we are unhovering the currently selected item
// then unselect it
this.getParent().onItemUnhover(this);
},
 
_onClick: function(evt){
this.getParent().onItemClick(this);
dojo.stopEvent(evt);
},
 
onClick: function() {
// summary
// User defined function to handle clicks
},
 
focus: function(){
dojo.addClass(this.domNode, 'dijitMenuItemHover');
try{
dijit.focus(this.containerNode);
}catch(e){
// this throws on IE (at least) in some scenarios
}
},
 
_blur: function(){
dojo.removeClass(this.domNode, 'dijitMenuItemHover');
},
 
setDisabled: function(/*Boolean*/ value){
// summary: enable or disable this menu item
this.disabled = value;
dojo[value ? "addClass" : "removeClass"](this.domNode, 'dijitMenuItemDisabled');
dijit.setWaiState(this.containerNode, 'disabled', value ? 'true' : 'false');
}
});
 
dojo.declare(
"dijit.PopupMenuItem",
dijit.MenuItem,
{
_fillContent: function(){
// my inner HTML contains both the menu item text and a popup widget, like
// <div dojoType="dijit.PopupMenuItem">
// <span>pick me</span>
// <popup> ... </popup>
// </div>
// the first part holds the menu item text and the second part is the popup
if(this.srcNodeRef){
var nodes = dojo.query("*", this.srcNodeRef);
dijit.PopupMenuItem.superclass._fillContent.call(this, nodes[0]);
 
// save pointer to srcNode so we can grab the drop down widget after it's instantiated
this.dropDownContainer = this.srcNodeRef;
}
},
 
startup: function(){
// we didn't copy the dropdown widget from the this.srcNodeRef, so it's in no-man's
// land now. move it to document.body.
if(!this.popup){
var node = dojo.query("[widgetId]", this.dropDownContainer)[0];
this.popup = dijit.byNode(node);
}
dojo.body().appendChild(this.popup.domNode);
 
this.popup.domNode.style.display="none";
dojo.addClass(this.expand, "dijitMenuExpandEnabled");
dojo.style(this.expand, "display", "");
dijit.setWaiState(this.containerNode, "haspopup", "true");
}
});
 
dojo.declare(
"dijit.MenuSeparator",
[dijit._Widget, dijit._Templated, dijit._Contained],
{
// summary
// A line between two menu items
 
templateString: '<tr class="dijitMenuSeparator"><td colspan=3>'
+'<div class="dijitMenuSeparatorTop"></div>'
+'<div class="dijitMenuSeparatorBottom"></div>'
+'</td></tr>',
 
postCreate: function(){
dojo.setSelectable(this.domNode, false);
},
isFocusable: function(){
// summary:
// over ride to always return false
return false;
}
});
 
}
 
if(!dojo._hasResource["dojo.regexp"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dojo.regexp"] = true;
dojo.provide("dojo.regexp");
 
dojo.regexp.escapeString = function(/*String*/str, /*String?*/except){
// summary:
// Adds escape sequences for special characters in regular expressions
// except:
// a String with special characters to be left unescaped
 
// return str.replace(/([\f\b\n\t\r[\^$|?*+(){}])/gm, "\\$1"); // string
return str.replace(/([\.$?*!=:|{}\(\)\[\]\\\/^])/g, function(ch){
if(except && except.indexOf(ch) != -1){
return ch;
}
return "\\" + ch;
}); // String
}
 
dojo.regexp.buildGroupRE = function(/*Object|Array*/arr, /*Function*/re, /*Boolean?*/nonCapture){
// summary:
// Builds a regular expression that groups subexpressions
// description:
// A utility function used by some of the RE generators. The
// subexpressions are constructed by the function, re, in the second
// parameter. re builds one subexpression for each elem in the array
// a, in the first parameter. Returns a string for a regular
// expression that groups all the subexpressions.
// arr:
// A single value or an array of values.
// re:
// A function. Takes one parameter and converts it to a regular
// expression.
// nonCapture:
// If true, uses non-capturing match, otherwise matches are retained
// by regular expression. Defaults to false
 
// case 1: a is a single value.
if(!(arr instanceof Array)){
return re(arr); // String
}
 
// case 2: a is an array
var b = [];
for(var i = 0; i < arr.length; i++){
// convert each elem to a RE
b.push(re(arr[i]));
}
 
// join the REs as alternatives in a RE group.
return dojo.regexp.group(b.join("|"), nonCapture); // String
}
 
dojo.regexp.group = function(/*String*/expression, /*Boolean?*/nonCapture){
// summary:
// adds group match to expression
// nonCapture:
// If true, uses non-capturing match, otherwise matches are retained
// by regular expression.
return "(" + (nonCapture ? "?:":"") + expression + ")"; // String
}
 
}
 
if(!dojo._hasResource["dojo.number"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dojo.number"] = true;
dojo.provide("dojo.number");
 
 
 
 
 
 
 
/*=====
dojo.number.__formatOptions = function(kwArgs){
// pattern: String?
// override formatting pattern with this string (see
// dojo.number._applyPattern)
// type: String?
// choose a format type based on the locale from the following:
// decimal, scientific, percent, currency. decimal by default.
// places: Number?
// fixed number of decimal places to show. This overrides any
// information in the provided pattern.
// round: NUmber?
// 5 rounds to nearest .5; 0 rounds to nearest whole (default). -1
// means don't round.
// currency: String?
// iso4217 currency code
// symbol: String?
// localized currency symbol
// locale: String?
// override the locale used to determine formatting rules
}
=====*/
 
dojo.number.format = function(/*Number*/value, /*dojo.number.__formatOptions?*/options){
// summary:
// Format a Number as a String, using locale-specific settings
// description:
// Create a string from a Number using a known localized pattern.
// Formatting patterns appropriate to the locale are chosen from the
// CLDR http://unicode.org/cldr as well as the appropriate symbols and
// delimiters. See http://www.unicode.org/reports/tr35/#Number_Elements
// value:
// the number to be formatted. If not a valid JavaScript number,
// return null.
 
options = dojo.mixin({}, options || {});
var locale = dojo.i18n.normalizeLocale(options.locale);
var bundle = dojo.i18n.getLocalization("dojo.cldr", "number", locale);
options.customs = bundle;
var pattern = options.pattern || bundle[(options.type || "decimal") + "Format"];
if(isNaN(value)){ return null; } // null
return dojo.number._applyPattern(value, pattern, options); // String
};
 
//dojo.number._numberPatternRE = /(?:[#0]*,?)*[#0](?:\.0*#*)?/; // not precise, but good enough
dojo.number._numberPatternRE = /[#0,]*[#0](?:\.0*#*)?/; // not precise, but good enough
 
dojo.number._applyPattern = function(/*Number*/value, /*String*/pattern, /*dojo.number.__formatOptions?*/options){
// summary:
// Apply pattern to format value as a string using options. Gives no
// consideration to local customs.
// value:
// the number to be formatted.
// pattern:
// a pattern string as described in
// http://www.unicode.org/reports/tr35/#Number_Format_Patterns
// options: dojo.number.__formatOptions?
// _applyPattern is usually called via dojo.number.format() which
// populates an extra property in the options parameter, "customs".
// The customs object specifies group and decimal parameters if set.
 
//TODO: support escapes
options = options || {};
var group = options.customs.group;
var decimal = options.customs.decimal;
 
var patternList = pattern.split(';');
var positivePattern = patternList[0];
pattern = patternList[(value < 0) ? 1 : 0] || ("-" + positivePattern);
 
//TODO: only test against unescaped
if(pattern.indexOf('%') != -1){
value *= 100;
}else if(pattern.indexOf('\u2030') != -1){
value *= 1000; // per mille
}else if(pattern.indexOf('\u00a4') != -1){
group = options.customs.currencyGroup || group;//mixins instead?
decimal = options.customs.currencyDecimal || decimal;// Should these be mixins instead?
pattern = pattern.replace(/\u00a4{1,3}/, function(match){
var prop = ["symbol", "currency", "displayName"][match.length-1];
return options[prop] || options.currency || "";
});
}else if(pattern.indexOf('E') != -1){
throw new Error("exponential notation not supported");
}
//TODO: support @ sig figs?
var numberPatternRE = dojo.number._numberPatternRE;
var numberPattern = positivePattern.match(numberPatternRE);
if(!numberPattern){
throw new Error("unable to find a number expression in pattern: "+pattern);
}
return pattern.replace(numberPatternRE,
dojo.number._formatAbsolute(value, numberPattern[0], {decimal: decimal, group: group, places: options.places}));
}
 
dojo.number.round = function(/*Number*/value, /*Number*/places, /*Number?*/multiple){
// summary:
// Rounds the number at the given number of places
// value:
// the number to round
// places:
// the number of decimal places where rounding takes place
// multiple:
// rounds next place to nearest multiple
 
var pieces = String(value).split(".");
var length = (pieces[1] && pieces[1].length) || 0;
if(length > places){
var factor = Math.pow(10, places);
if(multiple > 0){factor *= 10/multiple;places++;} //FIXME
value = Math.round(value * factor)/factor;
 
// truncate to remove any residual floating point values
pieces = String(value).split(".");
length = (pieces[1] && pieces[1].length) || 0;
if(length > places){
pieces[1] = pieces[1].substr(0, places);
value = Number(pieces.join("."));
}
}
return value; //Number
}
 
/*=====
dojo.number.__formatAbsoluteOptions = function(kwArgs){
// decimal: String?
// the decimal separator
// group: String?
// the group separator
// places: Integer?
// number of decimal places
// round: Number?
// 5 rounds to nearest .5; 0 rounds to nearest whole (default). -1
// means don't round.
}
=====*/
 
dojo.number._formatAbsolute = function(/*Number*/value, /*String*/pattern, /*dojo.number.__formatAbsoluteOptions?*/options){
// summary:
// Apply numeric pattern to absolute value using options. Gives no
// consideration to local customs.
// value:
// the number to be formatted, ignores sign
// pattern:
// the number portion of a pattern (e.g. #,##0.00)
options = options || {};
if(options.places === true){options.places=0;}
if(options.places === Infinity){options.places=6;} // avoid a loop; pick a limit
 
var patternParts = pattern.split(".");
var maxPlaces = (options.places >= 0) ? options.places : (patternParts[1] && patternParts[1].length) || 0;
if(!(options.round < 0)){
value = dojo.number.round(value, maxPlaces, options.round);
}
 
var valueParts = String(Math.abs(value)).split(".");
var fractional = valueParts[1] || "";
if(options.places){
valueParts[1] = dojo.string.pad(fractional.substr(0, options.places), options.places, '0', true);
}else if(patternParts[1] && options.places !== 0){
// Pad fractional with trailing zeros
var pad = patternParts[1].lastIndexOf("0") + 1;
if(pad > fractional.length){
valueParts[1] = dojo.string.pad(fractional, pad, '0', true);
}
 
// Truncate fractional
var places = patternParts[1].length;
if(places < fractional.length){
valueParts[1] = fractional.substr(0, places);
}
}else{
if(valueParts[1]){ valueParts.pop(); }
}
 
// Pad whole with leading zeros
var patternDigits = patternParts[0].replace(',', '');
pad = patternDigits.indexOf("0");
if(pad != -1){
pad = patternDigits.length - pad;
if(pad > valueParts[0].length){
valueParts[0] = dojo.string.pad(valueParts[0], pad);
}
 
// Truncate whole
if(patternDigits.indexOf("#") == -1){
valueParts[0] = valueParts[0].substr(valueParts[0].length - pad);
}
}
 
// Add group separators
var index = patternParts[0].lastIndexOf(',');
var groupSize, groupSize2;
if(index != -1){
groupSize = patternParts[0].length - index - 1;
var remainder = patternParts[0].substr(0, index);
index = remainder.lastIndexOf(',');
if(index != -1){
groupSize2 = remainder.length - index - 1;
}
}
var pieces = [];
for(var whole = valueParts[0]; whole;){
var off = whole.length - groupSize;
pieces.push((off > 0) ? whole.substr(off) : whole);
whole = (off > 0) ? whole.slice(0, off) : "";
if(groupSize2){
groupSize = groupSize2;
delete groupSize2;
}
}
valueParts[0] = pieces.reverse().join(options.group || ",");
 
return valueParts.join(options.decimal || ".");
};
 
/*=====
dojo.number.__regexpOptions = function(kwArgs){
// pattern: String?
// override pattern with this string. Default is provided based on
// locale.
// type: String?
// choose a format type based on the locale from the following:
// decimal, scientific, percent, currency. decimal by default.
// locale: String?
// override the locale used to determine formatting rules
// strict: Boolean?
// strict parsing, false by default
// places: Number|String?
// number of decimal places to accept: Infinity, a positive number, or
// a range "n,m". By default, defined by pattern.
}
=====*/
dojo.number.regexp = function(/*dojo.number.__regexpOptions?*/options){
// summary:
// Builds the regular needed to parse a number
// description:
// Returns regular expression with positive and negative match, group
// and decimal separators
return dojo.number._parseInfo(options).regexp; // String
}
 
dojo.number._parseInfo = function(/*Object?*/options){
options = options || {};
var locale = dojo.i18n.normalizeLocale(options.locale);
var bundle = dojo.i18n.getLocalization("dojo.cldr", "number", locale);
var pattern = options.pattern || bundle[(options.type || "decimal") + "Format"];
//TODO: memoize?
var group = bundle.group;
var decimal = bundle.decimal;
var factor = 1;
 
if(pattern.indexOf('%') != -1){
factor /= 100;
}else if(pattern.indexOf('\u2030') != -1){
factor /= 1000; // per mille
}else{
var isCurrency = pattern.indexOf('\u00a4') != -1;
if(isCurrency){
group = bundle.currencyGroup || group;
decimal = bundle.currencyDecimal || decimal;
}
}
 
//TODO: handle quoted escapes
var patternList = pattern.split(';');
if(patternList.length == 1){
patternList.push("-" + patternList[0]);
}
 
var re = dojo.regexp.buildGroupRE(patternList, function(pattern){
pattern = "(?:"+dojo.regexp.escapeString(pattern, '.')+")";
return pattern.replace(dojo.number._numberPatternRE, function(format){
var flags = {
signed: false,
separator: options.strict ? group : [group,""],
fractional: options.fractional,
decimal: decimal,
exponent: false};
var parts = format.split('.');
var places = options.places;
if(parts.length == 1 || places === 0){flags.fractional = false;}
else{
if(typeof places == "undefined"){ places = parts[1].lastIndexOf('0')+1; }
if(places && options.fractional == undefined){flags.fractional = true;} // required fractional, unless otherwise specified
if(!options.places && (places < parts[1].length)){ places += "," + parts[1].length; }
flags.places = places;
}
var groups = parts[0].split(',');
if(groups.length>1){
flags.groupSize = groups.pop().length;
if(groups.length>1){
flags.groupSize2 = groups.pop().length;
}
}
return "("+dojo.number._realNumberRegexp(flags)+")";
});
}, true);
 
if(isCurrency){
// substitute the currency symbol for the placeholder in the pattern
re = re.replace(/(\s*)(\u00a4{1,3})(\s*)/g, function(match, before, target, after){
var prop = ["symbol", "currency", "displayName"][target.length-1];
var symbol = dojo.regexp.escapeString(options[prop] || options.currency || "");
before = before ? "\\s" : "";
after = after ? "\\s" : "";
if(!options.strict){
if(before){before += "*";}
if(after){after += "*";}
return "(?:"+before+symbol+after+")?";
}
return before+symbol+after;
});
}
 
//TODO: substitute localized sign/percent/permille/etc.?
 
// normalize whitespace and return
return {regexp: re.replace(/[\xa0 ]/g, "[\\s\\xa0]"), group: group, decimal: decimal, factor: factor}; // Object
}
 
/*=====
dojo.number.__parseOptions = function(kwArgs){
// pattern: String
// override pattern with this string. Default is provided based on
// locale.
// type: String?
// choose a format type based on the locale from the following:
// decimal, scientific, percent, currency. decimal by default.
// locale: String
// override the locale used to determine formatting rules
// strict: Boolean?
// strict parsing, false by default
// currency: Object
// object with currency information
}
=====*/
dojo.number.parse = function(/*String*/expression, /*dojo.number.__parseOptions?*/options){
// summary:
// Convert a properly formatted string to a primitive Number, using
// locale-specific settings.
// description:
// Create a Number from a string using a known localized pattern.
// Formatting patterns are chosen appropriate to the locale.
// Formatting patterns are implemented using the syntax described at
// *URL*
// expression:
// A string representation of a Number
var info = dojo.number._parseInfo(options);
var results = (new RegExp("^"+info.regexp+"$")).exec(expression);
if(!results){
return NaN; //NaN
}
var absoluteMatch = results[1]; // match for the positive expression
if(!results[1]){
if(!results[2]){
return NaN; //NaN
}
// matched the negative pattern
absoluteMatch =results[2];
info.factor *= -1;
}
 
// Transform it to something Javascript can parse as a number. Normalize
// decimal point and strip out group separators or alternate forms of whitespace
absoluteMatch = absoluteMatch.
replace(new RegExp("["+info.group + "\\s\\xa0"+"]", "g"), "").
replace(info.decimal, ".");
// Adjust for negative sign, percent, etc. as necessary
return Number(absoluteMatch) * info.factor; //Number
};
 
/*=====
dojo.number.__realNumberRegexpFlags = function(kwArgs){
// places: Number?
// The integer number of decimal places or a range given as "n,m". If
// not given, the decimal part is optional and the number of places is
// unlimited.
// decimal: String?
// A string for the character used as the decimal point. Default
// is ".".
// fractional: Boolean|Array?
// Whether decimal places are allowed. Can be true, false, or [true,
// false]. Default is [true, false]
// exponent: Boolean|Array?
// Express in exponential notation. Can be true, false, or [true,
// false]. Default is [true, false], (i.e. will match if the
// exponential part is present are not).
// eSigned: Boolean|Array?
// The leading plus-or-minus sign on the exponent. Can be true,
// false, or [true, false]. Default is [true, false], (i.e. will
// match if it is signed or unsigned). flags in regexp.integer can be
// applied.
}
=====*/
 
dojo.number._realNumberRegexp = function(/*dojo.number.__realNumberRegexpFlags?*/flags){
// summary:
// Builds a regular expression to match a real number in exponential
// notation
// flags:
// An object
 
// assign default values to missing paramters
flags = flags || {};
if(typeof flags.places == "undefined"){ flags.places = Infinity; }
if(typeof flags.decimal != "string"){ flags.decimal = "."; }
if(typeof flags.fractional == "undefined" || /^0/.test(flags.places)){ flags.fractional = [true, false]; }
if(typeof flags.exponent == "undefined"){ flags.exponent = [true, false]; }
if(typeof flags.eSigned == "undefined"){ flags.eSigned = [true, false]; }
 
// integer RE
var integerRE = dojo.number._integerRegexp(flags);
 
// decimal RE
var decimalRE = dojo.regexp.buildGroupRE(flags.fractional,
function(q){
var re = "";
if(q && (flags.places!==0)){
re = "\\" + flags.decimal;
if(flags.places == Infinity){
re = "(?:" + re + "\\d+)?";
}else{
re += "\\d{" + flags.places + "}";
}
}
return re;
},
true
);
 
// exponent RE
var exponentRE = dojo.regexp.buildGroupRE(flags.exponent,
function(q){
if(q){ return "([eE]" + dojo.number._integerRegexp({ signed: flags.eSigned}) + ")"; }
return "";
}
);
 
// real number RE
var realRE = integerRE + decimalRE;
// allow for decimals without integers, e.g. .25
if(decimalRE){realRE = "(?:(?:"+ realRE + ")|(?:" + decimalRE + "))";}
return realRE + exponentRE; // String
};
 
/*=====
dojo.number.__integerRegexpFlags = function(kwArgs){
// signed: Boolean?
// The leading plus-or-minus sign. Can be true, false, or [true,
// false]. Default is [true, false], (i.e. will match if it is signed
// or unsigned).
// separator: String?
// The character used as the thousands separator. Default is no
// separator. For more than one symbol use an array, e.g. [",", ""],
// makes ',' optional.
// groupSize: Number?
// group size between separators
// flags.groupSize2: Number?
// second grouping (for India)
}
=====*/
 
dojo.number._integerRegexp = function(/*dojo.number.__integerRegexpFlags?*/flags){
// summary:
// Builds a regular expression that matches an integer
// flags:
// An object
 
// assign default values to missing paramters
flags = flags || {};
if(typeof flags.signed == "undefined"){ flags.signed = [true, false]; }
if(typeof flags.separator == "undefined"){
flags.separator = "";
}else if(typeof flags.groupSize == "undefined"){
flags.groupSize = 3;
}
// build sign RE
var signRE = dojo.regexp.buildGroupRE(flags.signed,
function(q) { return q ? "[-+]" : ""; },
true
);
 
// number RE
var numberRE = dojo.regexp.buildGroupRE(flags.separator,
function(sep){
if(!sep){
return "(?:0|[1-9]\\d*)";
}
 
sep = dojo.regexp.escapeString(sep);
if(sep == " "){ sep = "\\s"; }
else if(sep == "\xa0"){ sep = "\\s\\xa0"; }
 
var grp = flags.groupSize, grp2 = flags.groupSize2;
if(grp2){
var grp2RE = "(?:0|[1-9]\\d{0," + (grp2-1) + "}(?:[" + sep + "]\\d{" + grp2 + "})*[" + sep + "]\\d{" + grp + "})";
return ((grp-grp2) > 0) ? "(?:" + grp2RE + "|(?:0|[1-9]\\d{0," + (grp-1) + "}))" : grp2RE;
}
return "(?:0|[1-9]\\d{0," + (grp-1) + "}(?:[" + sep + "]\\d{" + grp + "})*)";
},
true
);
 
// integer RE
return signRE + numberRE; // String
}
 
}
 
if(!dojo._hasResource["dijit.ProgressBar"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.ProgressBar"] = true;
dojo.provide("dijit.ProgressBar");
 
 
 
 
 
 
 
dojo.declare("dijit.ProgressBar", [dijit._Widget, dijit._Templated], {
// summary:
// a progress widget
//
// usage:
// <div dojoType="ProgressBar"
// places="0"
// progress="..." maximum="..."></div>
 
// progress: String (Percentage or Number)
// initial progress value.
// with "%": percentage value, 0% <= progress <= 100%
// or without "%": absolute value, 0 <= progress <= maximum
progress: "0",
 
// maximum: Float
// max sample number
maximum: 100,
 
// places: Number
// number of places to show in values; 0 by default
places: 0,
 
// indeterminate: Boolean
// false: show progress
// true: show that a process is underway but that the progress is unknown
indeterminate: false,
 
templateString:"<div class=\"dijitProgressBar dijitProgressBarEmpty\"\n\t><div waiRole=\"progressbar\" tabindex=\"0\" dojoAttachPoint=\"internalProgress\" class=\"dijitProgressBarFull\"\n\t\t><div class=\"dijitProgressBarTile\"></div\n\t\t><span style=\"visibility:hidden\">&nbsp;</span\n\t></div\n\t><div dojoAttachPoint=\"label\" class=\"dijitProgressBarLabel\" id=\"${id}_label\">&nbsp;</div\n\t><img dojoAttachPoint=\"inteterminateHighContrastImage\" class=\"dijitProgressBarIndeterminateHighContrastImage\"\n\t></img\n></div>\n",
 
_indeterminateHighContrastImagePath:
dojo.moduleUrl("dijit", "themes/a11y/indeterminate_progress.gif"),
 
// public functions
postCreate: function(){
this.inherited("postCreate",arguments);
this.inteterminateHighContrastImage.setAttribute("src",
this._indeterminateHighContrastImagePath);
this.update();
},
 
update: function(/*Object?*/attributes){
// summary: update progress information
//
// attributes: may provide progress and/or maximum properties on this parameter,
// see attribute specs for details.
dojo.mixin(this, attributes||{});
var percent = 1, classFunc;
if(this.indeterminate){
classFunc = "addClass";
dijit.removeWaiState(this.internalProgress, "valuenow");
dijit.removeWaiState(this.internalProgress, "valuemin");
dijit.removeWaiState(this.internalProgress, "valuemax");
}else{
classFunc = "removeClass";
if(String(this.progress).indexOf("%") != -1){
percent = Math.min(parseFloat(this.progress)/100, 1);
this.progress = percent * this.maximum;
}else{
this.progress = Math.min(this.progress, this.maximum);
percent = this.progress / this.maximum;
}
var text = this.report(percent);
this.label.firstChild.nodeValue = text;
dijit.setWaiState(this.internalProgress, "describedby", this.label.id);
dijit.setWaiState(this.internalProgress, "valuenow", this.progress);
dijit.setWaiState(this.internalProgress, "valuemin", 0);
dijit.setWaiState(this.internalProgress, "valuemax", this.maximum);
}
dojo[classFunc](this.domNode, "dijitProgressBarIndeterminate");
this.internalProgress.style.width = (percent * 100) + "%";
this.onChange();
},
 
report: function(/*float*/percent){
// Generates message to show; may be overridden by user
return dojo.number.format(percent, {type: "percent", places: this.places, locale: this.lang});
},
 
onChange: function(){}
});
 
}
 
if(!dojo._hasResource["dijit.TitlePane"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.TitlePane"] = true;
dojo.provide("dijit.TitlePane");
 
 
 
 
 
 
dojo.declare(
"dijit.TitlePane",
[dijit.layout.ContentPane, dijit._Templated],
{
// summary
// A pane with a title on top, that can be opened or collapsed.
//
// title: String
// Title of the pane
title: "",
 
// open: Boolean
// Whether pane is opened or closed.
open: true,
 
// duration: Integer
// Time in milliseconds to fade in/fade out
duration: 250,
 
// baseClass: String
// the root className to use for the various states of this widget
baseClass: "dijitTitlePane",
 
templateString:"<div class=\"dijitTitlePane\">\n\t<div dojoAttachEvent=\"onclick:toggle,onkeypress: _onTitleKey,onfocus:_handleFocus,onblur:_handleFocus\" tabindex=\"0\"\n\t\t\twaiRole=\"button\" class=\"dijitTitlePaneTitle\" dojoAttachPoint=\"focusNode\">\n\t\t<div dojoAttachPoint=\"arrowNode\" class=\"dijitInline dijitArrowNode\"><span dojoAttachPoint=\"arrowNodeInner\" class=\"dijitArrowNodeInner\"></span></div>\n\t\t<div dojoAttachPoint=\"titleNode\" class=\"dijitTitlePaneTextNode\"></div>\n\t</div>\n\t<div class=\"dijitTitlePaneContentOuter\" dojoAttachPoint=\"hideNode\">\n\t\t<div class=\"dijitReset\" dojoAttachPoint=\"wipeNode\">\n\t\t\t<div class=\"dijitTitlePaneContentInner\" dojoAttachPoint=\"containerNode\" waiRole=\"region\" tabindex=\"-1\">\n\t\t\t\t<!-- nested divs because wipeIn()/wipeOut() doesn't work right on node w/padding etc. Put padding on inner div. -->\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</div>\n",
 
postCreate: function(){
this.setTitle(this.title);
if(!this.open){
this.hideNode.style.display = this.wipeNode.style.display = "none";
}
this._setCss();
dojo.setSelectable(this.titleNode, false);
this.inherited("postCreate",arguments);
dijit.setWaiState(this.containerNode, "labelledby", this.titleNode.id);
dijit.setWaiState(this.focusNode, "haspopup", "true");
 
// setup open/close animations
var hideNode = this.hideNode, wipeNode = this.wipeNode;
this._wipeIn = dojo.fx.wipeIn({
node: this.wipeNode,
duration: this.duration,
beforeBegin: function(){
hideNode.style.display="";
}
});
this._wipeOut = dojo.fx.wipeOut({
node: this.wipeNode,
duration: this.duration,
onEnd: function(){
hideNode.style.display="none";
}
});
},
 
setContent: function(content){
// summary
// Typically called when an href is loaded. Our job is to make the animation smooth
if(this._wipeOut.status() == "playing"){
// we are currently *closing* the pane, so just let that continue
this.inherited("setContent",arguments);
}else{
if(this._wipeIn.status() == "playing"){
this._wipeIn.stop();
}
 
// freeze container at current height so that adding new content doesn't make it jump
dojo.marginBox(this.wipeNode, {h: dojo.marginBox(this.wipeNode).h});
 
// add the new content (erasing the old content, if any)
this.inherited("setContent",arguments);
 
// call _wipeIn.play() to animate from current height to new height
this._wipeIn.play();
}
},
 
toggle: function(){
// summary: switches between opened and closed state
dojo.forEach([this._wipeIn, this._wipeOut], function(animation){
if(animation.status() == "playing"){
animation.stop();
}
});
 
this[this.open ? "_wipeOut" : "_wipeIn"].play();
this.open =! this.open;
 
// load content (if this is the first time we are opening the TitlePane
// and content is specified as an href, or we have setHref when hidden)
this._loadCheck();
 
this._setCss();
},
 
_setCss: function(){
// summary: set the open/close css state for the TitlePane
var classes = ["dijitClosed", "dijitOpen"];
var boolIndex = this.open;
dojo.removeClass(this.focusNode, classes[!boolIndex+0]);
this.focusNode.className += " " + classes[boolIndex+0];
 
// provide a character based indicator for images-off mode
this.arrowNodeInner.innerHTML = this.open ? "-" : "+";
},
 
_onTitleKey: function(/*Event*/ e){
// summary: callback when user hits a key
if(e.keyCode == dojo.keys.ENTER || e.charCode == dojo.keys.SPACE){
this.toggle();
}
else if(e.keyCode == dojo.keys.DOWN_ARROW){
if(this.open){
this.containerNode.focus();
e.preventDefault();
}
}
},
_handleFocus: function(/*Event*/ e){
// summary: handle blur and focus for this widget
// add/removeClass is safe to call without hasClass in this case
dojo[(e.type=="focus" ? "addClass" : "removeClass")](this.focusNode,this.baseClass+"Focused");
},
 
setTitle: function(/*String*/ title){
// summary: sets the text of the title
this.titleNode.innerHTML=title;
}
});
 
}
 
if(!dojo._hasResource["dijit.Tooltip"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.Tooltip"] = true;
dojo.provide("dijit.Tooltip");
 
 
 
 
dojo.declare(
"dijit._MasterTooltip",
[dijit._Widget, dijit._Templated],
{
// summary
// Internal widget that holds the actual tooltip markup,
// which occurs once per page.
// Called by Tooltip widgets which are just containers to hold
// the markup
 
// duration: Integer
// Milliseconds to fade in/fade out
duration: 200,
 
templateString:"<div class=\"dijitTooltip dijitTooltipLeft\" id=\"dojoTooltip\">\n\t<div class=\"dijitTooltipContainer dijitTooltipContents\" dojoAttachPoint=\"containerNode\" waiRole='alert'></div>\n\t<div class=\"dijitTooltipConnector\"></div>\n</div>\n",
 
postCreate: function(){
dojo.body().appendChild(this.domNode);
 
this.bgIframe = new dijit.BackgroundIframe(this.domNode);
 
// Setup fade-in and fade-out functions.
this.fadeIn = dojo.fadeIn({ node: this.domNode, duration: this.duration, onEnd: dojo.hitch(this, "_onShow") });
this.fadeOut = dojo.fadeOut({ node: this.domNode, duration: this.duration, onEnd: dojo.hitch(this, "_onHide") });
 
},
 
show: function(/*String*/ innerHTML, /*DomNode*/ aroundNode){
// summary:
// Display tooltip w/specified contents to right specified node
// (To left if there's no space on the right, or if LTR==right)
 
if(this.aroundNode && this.aroundNode === aroundNode){
return;
}
 
if(this.fadeOut.status() == "playing"){
// previous tooltip is being hidden; wait until the hide completes then show new one
this._onDeck=arguments;
return;
}
this.containerNode.innerHTML=innerHTML;
 
// Firefox bug. when innerHTML changes to be shorter than previous
// one, the node size will not be updated until it moves.
this.domNode.style.top = (this.domNode.offsetTop + 1) + "px";
 
// position the element and change CSS according to position
var align = this.isLeftToRight() ? {'BR': 'BL', 'BL': 'BR'} : {'BL': 'BR', 'BR': 'BL'};
var pos = dijit.placeOnScreenAroundElement(this.domNode, aroundNode, align);
this.domNode.className="dijitTooltip dijitTooltip" + (pos.corner=='BL' ? "Right" : "Left");//FIXME: might overwrite class
 
// show it
dojo.style(this.domNode, "opacity", 0);
this.fadeIn.play();
this.isShowingNow = true;
this.aroundNode = aroundNode;
},
 
_onShow: function(){
if(dojo.isIE){
// the arrow won't show up on a node w/an opacity filter
this.domNode.style.filter="";
}
},
 
hide: function(aroundNode){
// summary: hide the tooltip
if(!this.aroundNode || this.aroundNode !== aroundNode){
return;
}
if(this._onDeck){
// this hide request is for a show() that hasn't even started yet;
// just cancel the pending show()
this._onDeck=null;
return;
}
this.fadeIn.stop();
this.isShowingNow = false;
this.aroundNode = null;
this.fadeOut.play();
},
 
_onHide: function(){
this.domNode.style.cssText=""; // to position offscreen again
if(this._onDeck){
// a show request has been queued up; do it now
this.show.apply(this, this._onDeck);
this._onDeck=null;
}
}
 
}
);
 
dijit.showTooltip = function(/*String*/ innerHTML, /*DomNode*/ aroundNode){
// summary:
// Display tooltip w/specified contents to right specified node
// (To left if there's no space on the right, or if LTR==right)
if(!dijit._masterTT){ dijit._masterTT = new dijit._MasterTooltip(); }
return dijit._masterTT.show(innerHTML, aroundNode);
};
 
dijit.hideTooltip = function(aroundNode){
// summary: hide the tooltip
if(!dijit._masterTT){ dijit._masterTT = new dijit._MasterTooltip(); }
return dijit._masterTT.hide(aroundNode);
};
 
dojo.declare(
"dijit.Tooltip",
dijit._Widget,
{
// summary
// Pops up a tooltip (a help message) when you hover over a node.
 
// label: String
// Text to display in the tooltip.
// Specified as innerHTML when creating the widget from markup.
label: "",
 
// showDelay: Integer
// Number of milliseconds to wait after hovering over/focusing on the object, before
// the tooltip is displayed.
showDelay: 400,
 
// connectId: String[]
// Id(s) of domNodes to attach the tooltip to.
// When user hovers over any of the specified dom nodes, the tooltip will appear.
connectId: [],
 
postCreate: function(){
if(this.srcNodeRef){
this.srcNodeRef.style.display = "none";
}
 
this._connectNodes = [];
dojo.forEach(this.connectId, function(id) {
var node = dojo.byId(id);
if (node) {
this._connectNodes.push(node);
dojo.forEach(["onMouseOver", "onMouseOut", "onFocus", "onBlur", "onHover", "onUnHover"], function(event){
this.connect(node, event.toLowerCase(), "_"+event);
}, this);
if(dojo.isIE){
// BiDi workaround
node.style.zoom = 1;
}
}
}, this);
},
 
_onMouseOver: function(/*Event*/ e){
this._onHover(e);
},
 
_onMouseOut: function(/*Event*/ e){
if(dojo.isDescendant(e.relatedTarget, e.target)){
// false event; just moved from target to target child; ignore.
return;
}
this._onUnHover(e);
},
 
_onFocus: function(/*Event*/ e){
this._focus = true;
this._onHover(e);
},
_onBlur: function(/*Event*/ e){
this._focus = false;
this._onUnHover(e);
},
 
_onHover: function(/*Event*/ e){
if(!this._showTimer){
var target = e.target;
this._showTimer = setTimeout(dojo.hitch(this, function(){this.open(target)}), this.showDelay);
}
},
 
_onUnHover: function(/*Event*/ e){
// keep a tooltip open if the associated element has focus
if(this._focus){ return; }
if(this._showTimer){
clearTimeout(this._showTimer);
delete this._showTimer;
}
this.close();
},
 
open: function(/*DomNode*/ target){
// summary: display the tooltip; usually not called directly.
target = target || this._connectNodes[0];
if(!target){ return; }
 
if(this._showTimer){
clearTimeout(this._showTimer);
delete this._showTimer;
}
dijit.showTooltip(this.label || this.domNode.innerHTML, target);
this._connectNode = target;
},
 
close: function(){
// summary: hide the tooltip; usually not called directly.
dijit.hideTooltip(this._connectNode);
delete this._connectNode;
if(this._showTimer){
clearTimeout(this._showTimer);
delete this._showTimer;
}
},
 
uninitialize: function(){
this.close();
}
}
);
 
}
 
if(!dojo._hasResource["dojo.cookie"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dojo.cookie"] = true;
dojo.provide("dojo.cookie");
 
/*=====
dojo.__cookieProps = function(kwArgs){
// expires: Date|Number?
// If a number, seen as the number of days from today. If a date, the
// date past which the cookie is invalid. If expires is in the past,
// the cookie will be deleted If expires is left out or is 0, the
// cookie will expire when the browser closes.
// path: String?
// The path to use for the cookie.
// domain: String?
// The domain to use for the cookie.
// secure: Boolean?
// Whether to only send the cookie on secure connections
}
=====*/
 
 
dojo.cookie = function(/*String*/name, /*String?*/value, /*dojo.__cookieProps?*/props){
// summary:
// Get or set a cookie.
// description:
// If you pass in one argument, the the value of the cookie is returned
//
// If you pass in two arguments, the cookie value is set to the second
// argument.
//
// If you pass in three arguments, the cookie value is set to the
// second argument, and the options on the third argument are used for
// extended properties on the cookie
// name:
// The name of the cookie
// value:
// Optional. The value for the cookie.
// props:
// Optional additional properties for the cookie
// example:
// set a cookie with the JSON-serialized contents of an object which
// will expire 5 days from now:
// | dojo.cookie("configObj", dojo.toJson(config), { expires: 5 });
//
// example:
// de-serialize a cookie back into a JavaScript object:
// | var config = dojo.fromJson(dojo.cookie("configObj"));
//
// example:
// delete a cookie:
// | dojo.cookie("configObj", null);
var c = document.cookie;
if(arguments.length == 1){
var idx = c.lastIndexOf(name+'=');
if(idx == -1){ return null; }
var start = idx+name.length+1;
var end = c.indexOf(';', idx+name.length+1);
if(end == -1){ end = c.length; }
return decodeURIComponent(c.substring(start, end));
}else{
props = props || {};
value = encodeURIComponent(value);
if(typeof(props.expires) == "number"){
var d = new Date();
d.setTime(d.getTime()+(props.expires*24*60*60*1000));
props.expires = d;
}
document.cookie = name + "=" + value
+ (props.expires ? "; expires=" + props.expires.toUTCString() : "")
+ (props.path ? "; path=" + props.path : "")
+ (props.domain ? "; domain=" + props.domain : "")
+ (props.secure ? "; secure" : "");
return null;
}
};
 
}
 
if(!dojo._hasResource["dijit.Tree"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.Tree"] = true;
dojo.provide("dijit.Tree");
 
 
 
 
 
 
 
 
dojo.declare(
"dijit._TreeNode",
[dijit._Widget, dijit._Templated, dijit._Container, dijit._Contained],
{
// summary
// Single node within a tree
 
// item: dojo.data.Item
// the dojo.data entry this tree represents
item: null,
 
isTreeNode: true,
 
// label: String
// Text of this tree node
label: "",
isExpandable: null, // show expando node
isExpanded: false,
 
// state: String
// dynamic loading-related stuff.
// When an empty folder node appears, it is "UNCHECKED" first,
// then after dojo.data query it becomes "LOADING" and, finally "LOADED"
state: "UNCHECKED",
templateString:"<div class=\"dijitTreeNode dijitTreeExpandLeaf dijitTreeChildrenNo\" waiRole=\"presentation\"\n\t><span dojoAttachPoint=\"expandoNode\" class=\"dijitTreeExpando\" waiRole=\"presentation\"\n\t></span\n\t><span dojoAttachPoint=\"expandoNodeText\" class=\"dijitExpandoText\" waiRole=\"presentation\"\n\t></span\n\t>\n\t<div dojoAttachPoint=\"contentNode\" class=\"dijitTreeContent\" waiRole=\"presentation\">\n\t\t<div dojoAttachPoint=\"iconNode\" class=\"dijitInline dijitTreeIcon\" waiRole=\"presentation\"></div>\n\t\t<span dojoAttachPoint=\"labelNode\" class=\"dijitTreeLabel\" wairole=\"treeitem\" tabindex=\"-1\"></span>\n\t</div>\n</div>\n",
 
postCreate: function(){
// set label, escaping special characters
this.setLabelNode(this.label);
 
// set expand icon for leaf
this._setExpando();
 
// set icon and label class based on item
this._updateItemClasses(this.item);
 
if(this.isExpandable){
dijit.setWaiState(this.labelNode, "expanded", this.isExpanded);
}
},
 
markProcessing: function(){
// summary: visually denote that tree is loading data, etc.
this.state = "LOADING";
this._setExpando(true);
},
 
unmarkProcessing: function(){
// summary: clear markup from markProcessing() call
this._setExpando(false);
},
 
_updateItemClasses: function(item){
// summary: set appropriate CSS classes for item (used to allow for item updates to change respective CSS)
this.iconNode.className = "dijitInline dijitTreeIcon " + this.tree.getIconClass(item);
this.labelNode.className = "dijitTreeLabel " + this.tree.getLabelClass(item);
},
_updateLayout: function(){
// summary: set appropriate CSS classes for this.domNode
var parent = this.getParent();
if(parent && parent.isTree && parent._hideRoot){
/* if we are hiding the root node then make every first level child look like a root node */
dojo.addClass(this.domNode, "dijitTreeIsRoot");
}else{
dojo.toggleClass(this.domNode, "dijitTreeIsLast", !this.getNextSibling());
}
},
 
_setExpando: function(/*Boolean*/ processing){
// summary: set the right image for the expando node
 
// apply the appropriate class to the expando node
var styles = ["dijitTreeExpandoLoading", "dijitTreeExpandoOpened",
"dijitTreeExpandoClosed", "dijitTreeExpandoLeaf"];
var idx = processing ? 0 : (this.isExpandable ? (this.isExpanded ? 1 : 2) : 3);
dojo.forEach(styles,
function(s){
dojo.removeClass(this.expandoNode, s);
}, this
);
dojo.addClass(this.expandoNode, styles[idx]);
 
// provide a non-image based indicator for images-off mode
this.expandoNodeText.innerHTML =
processing ? "*" :
(this.isExpandable ?
(this.isExpanded ? "-" : "+") : "*");
},
 
expand: function(){
// summary: show my children
if(this.isExpanded){ return; }
// cancel in progress collapse operation
if(this._wipeOut.status() == "playing"){
this._wipeOut.stop();
}
 
this.isExpanded = true;
dijit.setWaiState(this.labelNode, "expanded", "true");
dijit.setWaiRole(this.containerNode, "group");
 
this._setExpando();
 
this._wipeIn.play();
},
 
collapse: function(){
if(!this.isExpanded){ return; }
 
// cancel in progress expand operation
if(this._wipeIn.status() == "playing"){
this._wipeIn.stop();
}
 
this.isExpanded = false;
dijit.setWaiState(this.labelNode, "expanded", "false");
this._setExpando();
 
this._wipeOut.play();
},
 
setLabelNode: function(label){
this.labelNode.innerHTML="";
this.labelNode.appendChild(document.createTextNode(label));
},
 
_setChildren: function(/* Object[] */ childrenArray){
// summary:
// Sets the children of this node.
// Sets this.isExpandable based on whether or not there are children
// Takes array of objects like: {label: ...} (_TreeNode options basically)
// See parameters of _TreeNode for details.
 
this.destroyDescendants();
 
this.state = "LOADED";
var nodeMap= {};
if(childrenArray && childrenArray.length > 0){
this.isExpandable = true;
if(!this.containerNode){ // maybe this node was unfolderized and still has container
this.containerNode = this.tree.containerNodeTemplate.cloneNode(true);
this.domNode.appendChild(this.containerNode);
}
 
// Create _TreeNode widget for each specified tree node
dojo.forEach(childrenArray, function(childParams){
var child = new dijit._TreeNode(dojo.mixin({
tree: this.tree,
label: this.tree.getLabel(childParams.item)
}, childParams));
this.addChild(child);
var identity = this.tree.store.getIdentity(childParams.item);
nodeMap[identity] = child;
if(this.tree.persist){
if(this.tree._openedItemIds[identity]){
this.tree._expandNode(child);
}
}
}, this);
 
// note that updateLayout() needs to be called on each child after
// _all_ the children exist
dojo.forEach(this.getChildren(), function(child, idx){
child._updateLayout();
});
}else{
this.isExpandable=false;
}
 
if(this._setExpando){
// change expando to/form dot or + icon, as appropriate
this._setExpando(false);
}
 
if(this.isTree && this._hideRoot){
// put first child in tab index if one exists.
var fc = this.getChildren()[0];
var tabnode = fc ? fc.labelNode : this.domNode;
tabnode.setAttribute("tabIndex", "0");
}
 
// create animations for showing/hiding the children (if children exist)
if(this.containerNode && !this._wipeIn){
this._wipeIn = dojo.fx.wipeIn({node: this.containerNode, duration: 150});
this._wipeOut = dojo.fx.wipeOut({node: this.containerNode, duration: 150});
}
 
return nodeMap;
},
 
_addChildren: function(/* object[] */ childrenArray){
// summary:
// adds the children to this node.
// Takes array of objects like: {label: ...} (_TreeNode options basically)
 
// See parameters of _TreeNode for details.
var nodeMap = {};
if(childrenArray && childrenArray.length > 0){
dojo.forEach(childrenArray, function(childParams){
var child = new dijit._TreeNode(
dojo.mixin({
tree: this.tree,
label: this.tree.getLabel(childParams.item)
}, childParams)
);
this.addChild(child);
nodeMap[this.tree.store.getIdentity(childParams.item)] = child;
}, this);
 
dojo.forEach(this.getChildren(), function(child, idx){
child._updateLayout();
});
}
 
return nodeMap;
},
 
deleteNode: function(/* treeNode */ node){
node.destroy();
 
var children = this.getChildren();
if(children.length == 0){
this.isExpandable = false;
this.collapse();
}
 
dojo.forEach(children, function(child){
child._updateLayout();
});
},
 
makeExpandable: function(){
//summary
// if this node wasn't already showing the expando node,
// turn it into one and call _setExpando()
this.isExpandable = true;
this._setExpando(false);
}
});
 
dojo.declare(
"dijit.Tree",
dijit._TreeNode,
{
// summary
// This widget displays hierarchical data from a store. A query is specified
// to get the "top level children" from a data store, and then those items are
// queried for their children and so on (but lazily, as the user clicks the expand node).
//
// Thus in the default mode of operation this widget is technically a forest, not a tree,
// in that there can be multiple "top level children". However, if you specify label,
// then a special top level node (not corresponding to any item in the datastore) is
// created, to father all the top level children.
 
// store: String||dojo.data.Store
// The store to get data to display in the tree
store: null,
 
// query: String
// query to get top level node(s) of tree (ex: {type:'continent'})
query: null,
 
// childrenAttr: String
// one ore more attributes that holds children of a tree node
childrenAttr: ["children"],
 
templateString:"<div class=\"dijitTreeContainer\" style=\"\" waiRole=\"tree\"\n\tdojoAttachEvent=\"onclick:_onClick,onkeypress:_onKeyPress\">\n\t<div class=\"dijitTreeNode dijitTreeIsRoot dijitTreeExpandLeaf dijitTreeChildrenNo\" waiRole=\"presentation\"\n\t\tdojoAttachPoint=\"rowNode\"\n\t\t><span dojoAttachPoint=\"expandoNode\" class=\"dijitTreeExpando\" waiRole=\"presentation\"\n\t\t></span\n\t\t><span dojoAttachPoint=\"expandoNodeText\" class=\"dijitExpandoText\" waiRole=\"presentation\"\n\t\t></span\n\t\t>\n\t\t<div dojoAttachPoint=\"contentNode\" class=\"dijitTreeContent\" waiRole=\"presentation\">\n\t\t\t<div dojoAttachPoint=\"iconNode\" class=\"dijitInline dijitTreeIcon\" waiRole=\"presentation\"></div>\n\t\t\t<span dojoAttachPoint=\"labelNode\" class=\"dijitTreeLabel\" wairole=\"treeitem\" tabindex=\"0\"></span>\n\t\t</div>\n\t</div>\n</div>\n",
 
isExpandable: true,
 
isTree: true,
 
// persist: Boolean
// enables/disables use of cookies for state saving.
persist: true,
// dndController: String
// class name to use as as the dnd controller
dndController: null,
 
//parameters to pull off of the tree and pass on to the dndController as its params
dndParams: ["onDndDrop","itemCreator","onDndCancel","checkAcceptance", "checkItemAcceptance"],
 
//declare the above items so they can be pulled from the tree's markup
onDndDrop:null,
itemCreator:null,
onDndCancel:null,
checkAcceptance:null,
checkItemAcceptance:null,
 
_publish: function(/*String*/ topicName, /*Object*/ message){
// summary:
// Publish a message for this widget/topic
dojo.publish(this.id, [dojo.mixin({tree: this, event: topicName}, message||{})]);
},
 
postMixInProperties: function(){
this.tree = this;
this.lastFocused = this.labelNode;
 
this._itemNodeMap={};
 
this._hideRoot = !this.label;
 
if(!this.store.getFeatures()['dojo.data.api.Identity']){
throw new Error("dijit.tree requires access to a store supporting the dojo.data Identity api");
}
 
if(!this.cookieName){
this.cookieName = this.id + "SaveStateCookie";
}
 
// if the store supports Notification, subscribe to the notification events
if(this.store.getFeatures()['dojo.data.api.Notification']){
this.connect(this.store, "onNew", "_onNewItem");
this.connect(this.store, "onDelete", "_onDeleteItem");
this.connect(this.store, "onSet", "_onSetItem");
}
},
 
postCreate: function(){
// load in which nodes should be opened automatically
if(this.persist){
var cookie = dojo.cookie(this.cookieName);
this._openedItemIds = {};
if(cookie){
dojo.forEach(cookie.split(','), function(item){
this._openedItemIds[item] = true;
}, this);
}
}
// make template for container node (we will clone this and insert it into
// any nodes that have children)
var div = document.createElement('div');
div.style.display = 'none';
div.className = "dijitTreeContainer";
dijit.setWaiRole(div, "presentation");
this.containerNodeTemplate = div;
 
if(this._hideRoot){
this.rowNode.style.display="none";
}
 
this.inherited("postCreate", arguments);
 
// load top level children
this._expandNode(this);
 
if(this.dndController){
if(dojo.isString(this.dndController)){
this.dndController= dojo.getObject(this.dndController);
}
var params={};
for (var i=0; i<this.dndParams.length;i++){
if(this[this.dndParams[i]]){
params[this.dndParams[i]]=this[this.dndParams[i]];
}
}
this.dndController= new this.dndController(this, params);
}
 
this.connect(this.domNode,
dojo.isIE ? "onactivate" : "onfocus",
"_onTreeFocus");
},
 
////////////// Data store related functions //////////////////////
 
mayHaveChildren: function(/*dojo.data.Item*/ item){
// summary
// User overridable function to tell if an item has or may have children.
// Controls whether or not +/- expando icon is shown.
// (For efficiency reasons we may not want to check if an element has
// children until user clicks the expando node)
 
return dojo.some(this.childrenAttr, function(attr){
return this.store.hasAttribute(item, attr);
}, this);
},
 
getItemChildren: function(/*dojo.data.Item*/ parentItem, /*function(items)*/ onComplete){
// summary
// User overridable function that return array of child items of given parent item,
// or if parentItem==null then return top items in tree
var store = this.store;
if(parentItem == null){
// get top level nodes
store.fetch({ query: this.query, onComplete: onComplete});
}else{
// get children of specified node
var childItems = [];
for (var i=0; i<this.childrenAttr.length; i++){
childItems= childItems.concat(store.getValues(parentItem, this.childrenAttr[i]));
}
// count how many items need to be loaded
var _waitCount = 0;
dojo.forEach(childItems, function(item){ if(!store.isItemLoaded(item)){ _waitCount++; } });
 
if(_waitCount == 0){
// all items are already loaded. proceed..
onComplete(childItems);
}else{
// still waiting for some or all of the items to load
function onItem(item){
if(--_waitCount == 0){
// all nodes have been loaded, send them to the tree
onComplete(childItems);
}
}
dojo.forEach(childItems, function(item){
if(!store.isItemLoaded(item)){
store.loadItem({item: item, onItem: onItem});
}
});
}
}
},
 
getItemParentIdentity: function(/*dojo.data.Item*/ item, /*Object*/ parentInfo){
// summary
// User overridable function, to return id of parent (or null if top level).
// It's called with args from dojo.store.onNew
return this.store.getIdentity(parentInfo.item); // String
},
 
getLabel: function(/*dojo.data.Item*/ item){
// summary: user overridable function to get the label for a tree node (given the item)
return this.store.getLabel(item); // String
},
 
getIconClass: function(/*dojo.data.Item*/ item){
// summary: user overridable function to return CSS class name to display icon
},
 
getLabelClass: function(/*dojo.data.Item*/ item){
// summary: user overridable function to return CSS class name to display label
},
 
_onLoadAllItems: function(/*_TreeNode*/ node, /*dojo.data.Item[]*/ items){
// sumary: callback when all the children of a given node have been loaded
var childParams=dojo.map(items, function(item){
return {
item: item,
isExpandable: this.mayHaveChildren(item)
};
}, this);
 
dojo.mixin(this._itemNodeMap,node._setChildren(childParams));
 
this._expandNode(node);
},
 
/////////// Keyboard and Mouse handlers ////////////////////
 
_onKeyPress: function(/*Event*/ e){
// summary: translates keypress events into commands for the controller
if(e.altKey){ return; }
var treeNode = dijit.getEnclosingWidget(e.target);
if(!treeNode){ return; }
 
// Note: On IE e.keyCode is not 0 for printables so check e.charCode.
// In dojo charCode is universally 0 for non-printables.
if(e.charCode){ // handle printables (letter navigation)
// Check for key navigation.
var navKey = e.charCode;
if(!e.altKey && !e.ctrlKey && !e.shiftKey && !e.metaKey){
navKey = (String.fromCharCode(navKey)).toLowerCase();
this._onLetterKeyNav( { node: treeNode, key: navKey } );
dojo.stopEvent(e);
}
}else{ // handle non-printables (arrow keys)
var map = this._keyHandlerMap;
if(!map){
// setup table mapping keys to events
map = {};
map[dojo.keys.ENTER]="_onEnterKey";
map[dojo.keys.LEFT_ARROW]="_onLeftArrow";
map[dojo.keys.RIGHT_ARROW]="_onRightArrow";
map[dojo.keys.UP_ARROW]="_onUpArrow";
map[dojo.keys.DOWN_ARROW]="_onDownArrow";
map[dojo.keys.HOME]="_onHomeKey";
map[dojo.keys.END]="_onEndKey";
this._keyHandlerMap = map;
}
if(this._keyHandlerMap[e.keyCode]){
this[this._keyHandlerMap[e.keyCode]]( { node: treeNode, item: treeNode.item } );
dojo.stopEvent(e);
}
}
},
 
_onEnterKey: function(/*Object*/ message){
this._publish("execute", { item: message.item, node: message.node} );
this.onClick(message.item, message.node);
},
 
_onDownArrow: function(/*Object*/ message){
// summary: down arrow pressed; get next visible node, set focus there
var returnNode = this._navToNextNode(message.node);
if(returnNode && returnNode.isTreeNode){
returnNode.tree.focusNode(returnNode);
return returnNode;
}
},
 
_onUpArrow: function(/*Object*/ message){
// summary: up arrow pressed; move to previous visible node
 
var nodeWidget = message.node;
var returnWidget = nodeWidget;
 
// if younger siblings
var previousSibling = nodeWidget.getPreviousSibling();
if(previousSibling){
nodeWidget = previousSibling;
// if the previous nodeWidget is expanded, dive in deep
while(nodeWidget.isExpandable && nodeWidget.isExpanded && nodeWidget.hasChildren()){
returnWidget = nodeWidget;
// move to the last child
var children = nodeWidget.getChildren();
nodeWidget = children[children.length-1];
}
}else{
// if this is the first child, return the parent
// unless the parent is the root of a tree with a hidden root
var parent = nodeWidget.getParent();
if(!(this._hideRoot && parent === this)){
nodeWidget = parent;
}
}
 
if(nodeWidget && nodeWidget.isTreeNode){
returnWidget = nodeWidget;
}
 
if(returnWidget && returnWidget.isTreeNode){
returnWidget.tree.focusNode(returnWidget);
return returnWidget;
}
},
 
_onRightArrow: function(/*Object*/ message){
// summary: right arrow pressed; go to child node
var nodeWidget = message.node;
var returnWidget = nodeWidget;
 
// if not expanded, expand, else move to 1st child
if(nodeWidget.isExpandable && !nodeWidget.isExpanded){
this._expandNode(nodeWidget);
}else if(nodeWidget.hasChildren()){
nodeWidget = nodeWidget.getChildren()[0];
}
 
if(nodeWidget && nodeWidget.isTreeNode){
returnWidget = nodeWidget;
}
 
if(returnWidget && returnWidget.isTreeNode){
returnWidget.tree.focusNode(returnWidget);
return returnWidget;
}
},
 
_onLeftArrow: function(/*Object*/ message){
// summary: left arrow pressed; go to parent
 
var node = message.node;
var returnWidget = node;
 
// if not collapsed, collapse, else move to parent
if(node.isExpandable && node.isExpanded){
this._collapseNode(node);
}else{
node = node.getParent();
}
if(node && node.isTreeNode){
returnWidget = node;
}
 
if(returnWidget && returnWidget.isTreeNode){
returnWidget.tree.focusNode(returnWidget);
return returnWidget;
}
},
 
_onHomeKey: function(){
// summary: home pressed; get first visible node, set focus there
var returnNode = this._navToRootOrFirstNode();
if(returnNode){
returnNode.tree.focusNode(returnNode);
return returnNode;
}
},
 
_onEndKey: function(/*Object*/ message){
// summary: end pressed; go to last visible node
 
var returnWidget = message.node.tree;
 
var lastChild = returnWidget;
while(lastChild.isExpanded){
var c = lastChild.getChildren();
lastChild = c[c.length - 1];
if(lastChild.isTreeNode){
returnWidget = lastChild;
}
}
 
if(returnWidget && returnWidget.isTreeNode){
returnWidget.tree.focusNode(returnWidget);
return returnWidget;
}
},
 
_onLetterKeyNav: function(message){
// summary: letter key pressed; search for node starting with first char = key
var node = startNode = message.node;
var key = message.key;
do{
node = this._navToNextNode(node);
//check for last node, jump to first node if necessary
if(!node){
node = this._navToRootOrFirstNode();
}
}while(node !== startNode && (node.label.charAt(0).toLowerCase() != key));
if(node && node.isTreeNode){
// no need to set focus if back where we started
if(node !== startNode){
node.tree.focusNode(node);
}
return node;
}
},
 
_onClick: function(/*Event*/ e){
// summary: translates click events into commands for the controller to process
var domElement = e.target;
 
// find node
var nodeWidget = dijit.getEnclosingWidget(domElement);
if(!nodeWidget || !nodeWidget.isTreeNode){
return;
}
 
if(domElement == nodeWidget.expandoNode ||
domElement == nodeWidget.expandoNodeText){
// expando node was clicked
if(nodeWidget.isExpandable){
this._onExpandoClick({node:nodeWidget});
}
}else{
this._publish("execute", { item: nodeWidget.item, node: nodeWidget} );
this.onClick(nodeWidget.item, nodeWidget);
this.focusNode(nodeWidget);
}
dojo.stopEvent(e);
},
 
_onExpandoClick: function(/*Object*/ message){
// summary: user clicked the +/- icon; expand or collapse my children.
var node = message.node;
if(node.isExpanded){
this._collapseNode(node);
}else{
this._expandNode(node);
}
},
 
onClick: function(/* dojo.data */ item, /*TreeNode*/ node){
// summary: user overridable function for executing a tree item
},
 
_navToNextNode: function(node){
// summary: get next visible node
var returnNode;
// if this is an expanded node, get the first child
if(node.isExpandable && node.isExpanded && node.hasChildren()){
returnNode = node.getChildren()[0];
}else{
// find a parent node with a sibling
while(node && node.isTreeNode){
returnNode = node.getNextSibling();
if(returnNode){
break;
}
node = node.getParent();
}
}
return returnNode;
},
 
_navToRootOrFirstNode: function(){
// summary: get first visible node
if(!this._hideRoot){
return this;
}else{
var returnNode = this.getChildren()[0];
if(returnNode && returnNode.isTreeNode){
return returnNode;
}
}
},
 
_collapseNode: function(/*_TreeNode*/ node){
// summary: called when the user has requested to collapse the node
 
if(node.isExpandable){
if(node.state == "LOADING"){
// ignore clicks while we are in the process of loading data
return;
}
if(this.lastFocused){
// are we collapsing a descendant with focus?
if(dojo.isDescendant(this.lastFocused.domNode, node.domNode)){
this.focusNode(node);
}else{
// clicking the expando node might have erased focus from
// the current item; restore it
this.focusNode(this.lastFocused);
}
}
node.collapse();
if(this.persist && node.item){
delete this._openedItemIds[this.store.getIdentity(node.item)];
this._saveState();
}
}
},
 
_expandNode: function(/*_TreeNode*/ node){
// summary: called when the user has requested to expand the node
 
// clicking the expando node might have erased focus from the current item; restore it
var t = node.tree;
if(t.lastFocused){ t.focusNode(t.lastFocused); }
 
if(!node.isExpandable){
return;
}
 
var store = this.store;
var getValue = this.store.getValue;
 
switch(node.state){
case "LOADING":
// ignore clicks while we are in the process of loading data
return;
 
case "UNCHECKED":
// need to load all the children, and then expand
node.markProcessing();
var _this = this;
var onComplete = function(childItems){
node.unmarkProcessing();
_this._onLoadAllItems(node, childItems);
};
this.getItemChildren(node.item, onComplete);
break;
 
default:
// data is already loaded; just proceed
if(node.expand){ // top level Tree doesn't have expand() method
node.expand();
if(this.persist && node.item){
this._openedItemIds[this.store.getIdentity(node.item)] = true;
this._saveState();
}
}
break;
}
},
 
////////////////// Miscellaneous functions ////////////////
 
blurNode: function(){
// summary
// Removes focus from the currently focused node (which must be visible).
// Usually not called directly (just call focusNode() on another node instead)
var node = this.lastFocused;
if(!node){ return; }
var labelNode = node.labelNode;
dojo.removeClass(labelNode, "dijitTreeLabelFocused");
labelNode.setAttribute("tabIndex", "-1");
this.lastFocused = null;
},
 
focusNode: function(/* _tree.Node */ node){
// summary
// Focus on the specified node (which must be visible)
 
// set focus so that the label will be voiced using screen readers
node.labelNode.focus();
},
 
_onBlur: function(){
// summary:
// We've moved away from the whole tree. The currently "focused" node
// (see focusNode above) should remain as the lastFocused node so we can
// tab back into the tree. Just change CSS to get rid of the dotted border
// until that time
if(this.lastFocused){
var labelNode = this.lastFocused.labelNode;
dojo.removeClass(labelNode, "dijitTreeLabelFocused");
}
},
 
_onTreeFocus: function(evt){
var node = dijit.getEnclosingWidget(evt.target);
if(node != this.lastFocused){
this.blurNode();
}
var labelNode = node.labelNode;
// set tabIndex so that the tab key can find this node
labelNode.setAttribute("tabIndex", "0");
dojo.addClass(labelNode, "dijitTreeLabelFocused");
this.lastFocused = node;
},
 
//////////////// Events from data store //////////////////////////
 
 
_onNewItem: function(/*Object*/ item, parentInfo){
//summary: callback when new item has been added to the store.
 
var loadNewItem; // should new item be displayed in tree?
 
if(parentInfo){
var parent = this._itemNodeMap[this.getItemParentIdentity(item, parentInfo)];
// If new item's parent item not in tree view yet, can safely ignore.
// Also, if a query of specified parent wouldn't return this item, then ignore.
if(!parent ||
dojo.indexOf(this.childrenAttr, parentInfo.attribute) == -1){
return;
}
}
 
var childParams = {
item: item,
isExpandable: this.mayHaveChildren(item)
};
if(parent){
if(!parent.isExpandable){
parent.makeExpandable();
}
if(parent.state=="LOADED" || parent.isExpanded){
var childrenMap=parent._addChildren([childParams]);
}
}else{
// top level node
var childrenMap=this._addChildren([childParams]);
}
 
if(childrenMap){
dojo.mixin(this._itemNodeMap, childrenMap);
//this._itemNodeMap[this.store.getIdentity(item)]=child;
}
},
_onDeleteItem: function(/*Object*/ item){
//summary: delete event from the store
//since the object has just been deleted, we need to
//use the name directly
var identity = this.store.getIdentity(item);
var node = this._itemNodeMap[identity];
 
if(node){
var parent = node.getParent();
parent.deleteNode(node);
this._itemNodeMap[identity]=null;
}
},
 
_onSetItem: function(/*Object*/ item){
//summary: set data event on an item in the store
var identity = this.store.getIdentity(item);
node = this._itemNodeMap[identity];
 
if(node){
node.setLabelNode(this.getLabel(item));
node._updateItemClasses(item);
}
},
_saveState: function(){
//summary: create and save a cookie with the currently expanded nodes identifiers
if(!this.persist){
return;
}
var ary = [];
for(var id in this._openedItemIds){
ary.push(id);
}
dojo.cookie(this.cookieName, ary.join(","));
}
});
 
}
 
if(!dojo._hasResource["dijit.form.TextBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.form.TextBox"] = true;
dojo.provide("dijit.form.TextBox");
 
 
 
dojo.declare(
"dijit.form.TextBox",
dijit.form._FormWidget,
{
// summary:
// A generic textbox field.
// Serves as a base class to derive more specialized functionality in subclasses.
 
// trim: Boolean
// Removes leading and trailing whitespace if true. Default is false.
trim: false,
 
// uppercase: Boolean
// Converts all characters to uppercase if true. Default is false.
uppercase: false,
 
// lowercase: Boolean
// Converts all characters to lowercase if true. Default is false.
lowercase: false,
 
// propercase: Boolean
// Converts the first character of each word to uppercase if true.
propercase: false,
 
// maxLength: String
// HTML INPUT tag maxLength declaration.
maxLength: "",
 
templateString:"<input class=\"dojoTextBox\" dojoAttachPoint='textbox,focusNode' name=\"${name}\"\n\tdojoAttachEvent='onmouseenter:_onMouse,onmouseleave:_onMouse,onfocus:_onMouse,onblur:_onMouse,onkeyup,onkeypress:_onKeyPress'\n\tautocomplete=\"off\" type=\"${type}\"\n\t/>\n",
baseClass: "dijitTextBox",
 
attributeMap: dojo.mixin(dojo.clone(dijit.form._FormWidget.prototype.attributeMap),
{maxLength:"focusNode"}),
 
getDisplayedValue: function(){
return this.filter(this.textbox.value);
},
 
getValue: function(){
return this.parse(this.getDisplayedValue(), this.constraints);
},
 
setValue: function(value, /*Boolean, optional*/ priorityChange, /*String, optional*/ formattedValue){
var filteredValue = this.filter(value);
if((typeof filteredValue == typeof value) && (formattedValue == null || formattedValue == undefined)){
formattedValue = this.format(filteredValue, this.constraints);
}
if(formattedValue != null && formattedValue != undefined){
this.textbox.value = formattedValue;
}
dijit.form.TextBox.superclass.setValue.call(this, filteredValue, priorityChange);
},
 
setDisplayedValue: function(/*String*/value){
this.textbox.value = value;
this.setValue(this.getValue(), true);
},
 
forWaiValuenow: function(){
return this.getDisplayedValue();
},
 
format: function(/* String */ value, /* Object */ constraints){
// summary: Replacable function to convert a value to a properly formatted string
return ((value == null || value == undefined) ? "" : (value.toString ? value.toString() : value));
},
 
parse: function(/* String */ value, /* Object */ constraints){
// summary: Replacable function to convert a formatted string to a value
return value;
},
 
postCreate: function(){
// setting the value here is needed since value="" in the template causes "undefined"
// and setting in the DOM (instead of the JS object) helps with form reset actions
this.textbox.setAttribute("value", this.getDisplayedValue());
this.inherited('postCreate', arguments);
 
if(this.srcNodeRef){
dojo.style(this.textbox, "cssText", this.style);
this.textbox.className += " " + this["class"];
}
this._layoutHack();
},
 
_layoutHack: function(){
// summary: work around table sizing bugs on FF2 by forcing redraw
if(dojo.isFF == 2 && this.domNode.tagName=="TABLE"){
var node=this.domNode;
var old = node.style.opacity;
node.style.opacity = "0.999";
setTimeout(function(){
node.style.opacity = old;
}, 0);
}
},
 
filter: function(val){
// summary: Apply various filters to textbox value
if(val == undefined || val == null){ return ""; }
else if(typeof val != "string"){ return val; }
if(this.trim){
val = dojo.trim(val);
}
if(this.uppercase){
val = val.toUpperCase();
}
if(this.lowercase){
val = val.toLowerCase();
}
if(this.propercase){
val = val.replace(/[^\s]+/g, function(word){
return word.substring(0,1).toUpperCase() + word.substring(1);
});
}
return val;
},
 
// event handlers, you can over-ride these in your own subclasses
_onBlur: function(){
this.setValue(this.getValue(), (this.isValid ? this.isValid() : true));
},
 
onkeyup: function(){
// TODO: it would be nice to massage the value (ie: automatic uppercase, etc) as the user types
// but this messes up the cursor position if you are typing into the middle of a word, and
// also trimming doesn't work correctly (it prevents spaces between words too!)
// this.setValue(this.getValue());
}
}
);
 
}
 
if(!dojo._hasResource["dijit.InlineEditBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.InlineEditBox"] = true;
dojo.provide("dijit.InlineEditBox");
 
 
 
 
 
 
 
 
 
 
dojo.declare("dijit.InlineEditBox",
dijit._Widget,
{
// summary: An element with in-line edit capabilitites
//
// description:
// Behavior for an existing node (<p>, <div>, <span>, etc.) so that
// when you click it, an editor shows up in place of the original
// text. Optionally, Save and Cancel button are displayed below the edit widget.
// When Save is clicked, the text is pulled from the edit
// widget and redisplayed and the edit widget is again hidden.
// By default a plain Textarea widget is used as the editor (or for
// inline values a TextBox), but you can specify an editor such as
// dijit.Editor (for editing HTML) or a Slider (for adjusting a number).
// An edit widget must support the following API to be used:
// String getDisplayedValue() OR String getValue()
// void setDisplayedValue(String) OR void setValue(String)
// void focus()
//
// editing: Boolean
// Is the node currently in edit mode?
editing: false,
 
// autoSave: Boolean
// Changing the value automatically saves it; don't have to push save button
// (and save button isn't even displayed)
autoSave: true,
 
// buttonSave: String
// Save button label
buttonSave: "",
 
// buttonCancel: String
// Cancel button label
buttonCancel: "",
 
// renderAsHtml: Boolean
// Set this to true if the specified Editor's value should be interpreted as HTML
// rather than plain text (ie, dijit.Editor)
renderAsHtml: false,
 
// editor: String
// Class name for Editor widget
editor: "dijit.form.TextBox",
 
// editorParams: Object
// Set of parameters for editor, like {required: true}
editorParams: {},
 
onChange: function(value){
// summary: User should set this handler to be notified of changes to value
},
 
// width: String
// Width of editor. By default it's width=100% (ie, block mode)
width: "100%",
 
// value: String
// The display value of the widget in read-only mode
value: "",
 
// noValueIndicator: String
// The text that gets displayed when there is no value (so that the user has a place to click to edit)
noValueIndicator: "<span style='font-family: wingdings; text-decoration: underline;'>&nbsp;&nbsp;&nbsp;&nbsp;&#x270d;&nbsp;&nbsp;&nbsp;&nbsp;</span>",
 
postMixInProperties: function(){
this.inherited('postMixInProperties', arguments);
 
// save pointer to original source node, since Widget nulls-out srcNodeRef
this.displayNode = this.srcNodeRef;
 
// connect handlers to the display node
var events = {
ondijitclick: "_onClick",
onmouseover: "_onMouseOver",
onmouseout: "_onMouseOut",
onfocus: "_onMouseOver",
onblur: "_onMouseOut"
};
for(var name in events){
this.connect(this.displayNode, name, events[name]);
}
dijit.setWaiRole(this.displayNode, "button");
if(!this.displayNode.getAttribute("tabIndex")){
this.displayNode.setAttribute("tabIndex", 0);
}
 
if(!this.value){
this.value = this.displayNode.innerHTML;
}
this._setDisplayValue(this.value); // if blank, change to icon for "input needed"
},
 
_onMouseOver: function(){
dojo.addClass(this.displayNode, this.disabled ? "dijitDisabledClickableRegion" : "dijitClickableRegion");
},
 
_onMouseOut: function(){
dojo.removeClass(this.displayNode, this.disabled ? "dijitDisabledClickableRegion" : "dijitClickableRegion");
},
 
_onClick: function(/*Event*/ e){
if(this.disabled){ return; }
if(e){ dojo.stopEvent(e); }
this._onMouseOut();
 
// Since FF gets upset if you move a node while in an event handler for that node...
setTimeout(dojo.hitch(this, "_edit"), 0);
},
 
_edit: function(){
// summary: display the editor widget in place of the original (read only) markup
 
this.editing = true;
 
var editValue =
(this.renderAsHtml ?
this.value :
this.value.replace(/\s*\r?\n\s*/g,"").replace(/<br\/?>/gi, "\n").replace(/&gt;/g,">").replace(/&lt;/g,"<").replace(/&amp;/g,"&"));
 
// Placeholder for edit widget
// Put place holder (and eventually editWidget) before the display node so that it's positioned correctly
// when Calendar dropdown appears, which happens automatically on focus.
var placeholder = document.createElement("span");
dojo.place(placeholder, this.domNode, "before");
 
var ew = this.editWidget = new dijit._InlineEditor({
value: dojo.trim(editValue),
autoSave: this.autoSave,
buttonSave: this.buttonSave,
buttonCancel: this.buttonCancel,
renderAsHtml: this.renderAsHtml,
editor: this.editor,
editorParams: this.editorParams,
style: dojo.getComputedStyle(this.displayNode),
save: dojo.hitch(this, "save"),
cancel: dojo.hitch(this, "cancel"),
width: this.width
}, placeholder);
 
// to avoid screen jitter, we first create the editor with position:absolute, visibility:hidden,
// and then when it's finished rendering, we switch from display mode to editor
var ews = ew.domNode.style;
this.displayNode.style.display="none";
ews.position = "static";
ews.visibility = "visible";
 
// Replace the display widget with edit widget, leaving them both displayed for a brief time so that
// focus can be shifted without incident. (browser may needs some time to render the editor.)
this.domNode = ew.domNode;
setTimeout(function(){
ew.focus();
}, 100);
},
 
_showText: function(/*Boolean*/ focus){
// summary: revert to display mode, and optionally focus on display node
 
// display the read-only text and then quickly hide the editor (to avoid screen jitter)
this.displayNode.style.display="";
var ews = this.editWidget.domNode.style;
ews.position="absolute";
ews.visibility="hidden";
 
this.domNode = this.displayNode;
 
// give the browser some time to render the display node and then shift focus to it
// and hide the edit widget
var _this = this;
setTimeout(function(){
if(focus){
dijit.focus(_this.displayNode);
}
_this.editWidget.destroy();
delete _this.editWidget;
}, 100);
},
 
save: function(/*Boolean*/ focus){
// summary:
// Save the contents of the editor and revert to display mode.
// focus: Boolean
// Focus on the display mode text
this.editing = false;
 
this.value = this.editWidget.getValue() + "";
if(this.renderAsHtml){
this.value = this.value.replace(/&/gm, "&amp;").replace(/</gm, "&lt;").replace(/>/gm, "&gt;").replace(/"/gm, "&quot;")
.replace("\n", "<br>");
}
this._setDisplayValue(this.value);
 
// tell the world that we have changed
this.onChange(this.value);
 
this._showText(focus);
},
 
_setDisplayValue: function(/*String*/ val){
// summary: inserts specified HTML value into this node, or an "input needed" character if node is blank
this.displayNode.innerHTML = val || this.noValueIndicator;
},
 
cancel: function(/*Boolean*/ focus){
// summary:
// Revert to display mode, discarding any changes made in the editor
this.editing = false;
this._showText(focus);
}
});
 
dojo.declare(
"dijit._InlineEditor",
[dijit._Widget, dijit._Templated],
{
// summary:
// internal widget used by InlineEditBox, displayed when in editing mode
// to display the editor and maybe save/cancel buttons. Calling code should
// connect to save/cancel methods to detect when editing is finished
//
// Has mainly the same parameters as InlineEditBox, plus these values:
//
// style: Object
// Set of CSS attributes of display node, to replicate in editor
//
// value: String
// Value as an HTML string or plain text string, depending on renderAsHTML flag
 
templateString:"<fieldset dojoAttachPoint=\"editNode\" waiRole=\"presentation\" style=\"position: absolute; visibility:hidden\" class=\"dijitReset dijitInline\"\n\tdojoAttachEvent=\"onkeypress: _onKeyPress\" \n\t><input dojoAttachPoint=\"editorPlaceholder\"\n\t/><span dojoAttachPoint=\"buttonContainer\"\n\t\t><button class='saveButton' dojoAttachPoint=\"saveButton\" dojoType=\"dijit.form.Button\" dojoAttachEvent=\"onClick:save\">${buttonSave}</button\n\t\t><button class='cancelButton' dojoAttachPoint=\"cancelButton\" dojoType=\"dijit.form.Button\" dojoAttachEvent=\"onClick:cancel\">${buttonCancel}</button\n\t></span\n></fieldset>\n",
widgetsInTemplate: true,
 
postMixInProperties: function(){
this.inherited('postMixInProperties', arguments);
this.messages = dojo.i18n.getLocalization("dijit", "common", this.lang);
dojo.forEach(["buttonSave", "buttonCancel"], function(prop){
if(!this[prop]){ this[prop] = this.messages[prop]; }
}, this);
},
 
postCreate: function(){
// Create edit widget in place in the template
var cls = dojo.getObject(this.editor);
var ew = this.editWidget = new cls(this.editorParams, this.editorPlaceholder);
 
// Copy the style from the source
// Don't copy ALL properties though, just the necessary/applicable ones
var srcStyle = this.style;
dojo.forEach(["fontWeight","fontFamily","fontSize","fontStyle"], function(prop){
ew.focusNode.style[prop]=srcStyle[prop];
}, this);
dojo.forEach(["marginTop","marginBottom","marginLeft", "marginRight"], function(prop){
this.domNode.style[prop]=srcStyle[prop];
}, this);
if(this.width=="100%"){
// block mode
ew.domNode.style.width = "100%"; // because display: block doesn't work for table widgets
this.domNode.style.display="block";
}else{
// inline-block mode
ew.domNode.style.width = this.width + (Number(this.width)==this.width ? "px" : "");
}
 
this.connect(this.editWidget, "onChange", "_onChange");
 
// setting the value of the edit widget will cause a possibly asynchronous onChange() call.
// we need to ignore it, since we are only interested in when the user changes the value.
this._ignoreNextOnChange = true;
(this.editWidget.setDisplayedValue||this.editWidget.setValue).call(this.editWidget, this.value);
 
this._initialText = this.getValue();
 
if(this.autoSave){
this.buttonContainer.style.display="none";
}
},
 
destroy: function(){
this.editWidget.destroy();
this.inherited(arguments);
},
 
getValue: function(){
var ew = this.editWidget;
return ew.getDisplayedValue ? ew.getDisplayedValue() : ew.getValue();
},
 
_onKeyPress: function(e){
// summary: Callback when keypress in the edit box (see template).
// description:
// For autoSave widgets, if Esc/Enter, call cancel/save.
// For non-autoSave widgets, enable save button if the text value is
// different than the original value.
if(this._exitInProgress){
return;
}
if(this.autoSave){
// If Enter/Esc pressed, treat as save/cancel.
if(e.keyCode == dojo.keys.ESCAPE){
dojo.stopEvent(e);
this._exitInProgress = true;
this.cancel(true);
}else if(e.keyCode == dojo.keys.ENTER){
dojo.stopEvent(e);
this._exitInProgress = true;
this.save(true);
}
}else{
var _this = this;
// Delay before calling getValue().
// The delay gives the browser a chance to update the Textarea.
setTimeout(
function(){
_this.saveButton.setDisabled(_this.getValue() == _this._initialText);
}, 100);
}
},
 
_onBlur: function(){
// summary:
// Called when focus moves outside the editor
if(this._exitInProgress){
// when user clicks the "save" button, focus is shifted back to display text, causing this
// function to be called, but in that case don't do anything
return;
}
if(this.autoSave){
this._exitInProgress = true;
if(this.getValue() == this._initialText){
this.cancel(false);
}else{
this.save(false);
}
}
},
 
enableSave: function(){
// summary: User replacable function returning a Boolean to indicate
// if the Save button should be enabled or not - usually due to invalid conditions
return this.editWidget.isValid ? this.editWidget.isValid() : true; // Boolean
},
 
_onChange: function(){
// summary:
// Called when the underlying widget fires an onChange event,
// which means that the user has finished entering the value
if(this._ignoreNextOnChange){
delete this._ignoreNextOnChange;
return;
}
if(this._exitInProgress){
// TODO: the onChange event might happen after the return key for an async widget
// like FilteringSelect. Shouldn't be deleting the edit widget on end-of-edit
return;
}
if(this.autoSave){
this._exitInProgress = true;
this.save(true);
}else{
// in case the keypress event didn't get through (old problem with Textarea that has been fixed
// in theory) or if the keypress event comes too quickly and the value inside the Textarea hasn't
// been updated yet)
this.saveButton.setDisabled((this.getValue() == this._initialText) || !this.enableSave());
}
},
enableSave: function(){
// summary: User replacable function returning a Boolean to indicate
// if the Save button should be enabled or not - usually due to invalid conditions
return this.editWidget.isValid ? this.editWidget.isValid() : true;
},
 
focus: function(){
this.editWidget.focus();
dijit.selectInputText(this.editWidget.focusNode);
}
});
 
dijit.selectInputText = function(/*DomNode*/element){
// summary: select all the text in an input element
 
// TODO: use functions in _editor/selection.js?
var _window = dojo.global;
var _document = dojo.doc;
element = dojo.byId(element);
if(_document["selection"] && dojo.body()["createTextRange"]){ // IE
if(element.createTextRange){
var range = element.createTextRange();
range.moveStart("character", 0);
range.moveEnd("character", element.value.length);
range.select();
}
}else if(_window["getSelection"]){
var selection = _window.getSelection();
// FIXME: does this work on Safari?
if(element.setSelectionRange){
element.setSelectionRange(0, element.value.length);
}
}
element.focus();
};
 
 
}
 
if(!dojo._hasResource["dijit.form.CheckBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.form.CheckBox"] = true;
dojo.provide("dijit.form.CheckBox");
 
 
 
dojo.declare(
"dijit.form.CheckBox",
dijit.form.ToggleButton,
{
// summary:
// Same as an HTML checkbox, but with fancy styling.
//
// description:
// User interacts with real html inputs.
// On onclick (which occurs by mouse click, space-bar, or
// using the arrow keys to switch the selected radio button),
// we update the state of the checkbox/radio.
//
// There are two modes:
// 1. High contrast mode
// 2. Normal mode
// In case 1, the regular html inputs are shown and used by the user.
// In case 2, the regular html inputs are invisible but still used by
// the user. They are turned quasi-invisible and overlay the background-image.
 
templateString:"<fieldset class=\"dijitReset dijitInline\" waiRole=\"presentation\"\n\t><input\n\t \ttype=\"${type}\" name=\"${name}\"\n\t\tclass=\"dijitReset dijitCheckBoxInput\"\n\t\tdojoAttachPoint=\"inputNode,focusNode\"\n\t \tdojoAttachEvent=\"onmouseover:_onMouse,onmouseout:_onMouse,onclick:_onClick\"\n/></fieldset>\n",
 
baseClass: "dijitCheckBox",
 
// Value of "type" attribute for <input>
type: "checkbox",
 
// value: Value
// equivalent to value field on normal checkbox (if checked, the value is passed as
// the value when form is submitted)
value: "on",
 
postCreate: function(){
dojo.setSelectable(this.inputNode, false);
this.setChecked(this.checked);
this.inherited(arguments);
},
 
setChecked: function(/*Boolean*/ checked){
if(dojo.isIE){
if(checked){ this.inputNode.setAttribute('checked', 'checked'); }
else{ this.inputNode.removeAttribute('checked'); }
}else{ this.inputNode.checked = checked; }
this.inherited(arguments);
},
 
setValue: function(/*String*/ value){
if(value == null){ value = ""; }
this.inputNode.value = value;
dijit.form.CheckBox.superclass.setValue.call(this,value);
}
}
);
 
dojo.declare(
"dijit.form.RadioButton",
dijit.form.CheckBox,
{
// summary:
// Same as an HTML radio, but with fancy styling.
//
// description:
// Implementation details
//
// Specialization:
// We keep track of dijit radio groups so that we can update the state
// of all the siblings (the "context") in a group based on input
// events. We don't rely on browser radio grouping.
 
type: "radio",
baseClass: "dijitRadio",
 
// This shared object keeps track of all widgets, grouped by name
_groups: {},
 
postCreate: function(){
// add this widget to _groups
(this._groups[this.name] = this._groups[this.name] || []).push(this);
 
this.inherited(arguments);
},
 
uninitialize: function(){
// remove this widget from _groups
dojo.forEach(this._groups[this.name], function(widget, i, arr){
if(widget === this){
arr.splice(i, 1);
return;
}
}, this);
},
 
setChecked: function(/*Boolean*/ checked){
// If I am being checked then have to deselect currently checked radio button
if(checked){
dojo.forEach(this._groups[this.name], function(widget){
if(widget != this && widget.checked){
widget.setChecked(false);
}
}, this);
}
this.inherited(arguments);
},
 
_clicked: function(/*Event*/ e){
if(!this.checked){
this.setChecked(true);
}
}
}
);
 
}
 
if(!dojo._hasResource["dojo.data.util.filter"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dojo.data.util.filter"] = true;
dojo.provide("dojo.data.util.filter");
 
dojo.data.util.filter.patternToRegExp = function(/*String*/pattern, /*boolean?*/ ignoreCase){
// summary:
// Helper function to convert a simple pattern to a regular expression for matching.
// description:
// Returns a regular expression object that conforms to the defined conversion rules.
// For example:
// ca* -> /^ca.*$/
// *ca* -> /^.*ca.*$/
// *c\*a* -> /^.*c\*a.*$/
// *c\*a?* -> /^.*c\*a..*$/
// and so on.
//
// pattern: string
// A simple matching pattern to convert that follows basic rules:
// * Means match anything, so ca* means match anything starting with ca
// ? Means match single character. So, b?b will match to bob and bab, and so on.
// \ is an escape character. So for example, \* means do not treat * as a match, but literal character *.
// To use a \ as a character in the string, it must be escaped. So in the pattern it should be
// represented by \\ to be treated as an ordinary \ character instead of an escape.
//
// ignoreCase:
// An optional flag to indicate if the pattern matching should be treated as case-sensitive or not when comparing
// By default, it is assumed case sensitive.
 
var rxp = "^";
var c = null;
for(var i = 0; i < pattern.length; i++){
c = pattern.charAt(i);
switch (c) {
case '\\':
rxp += c;
i++;
rxp += pattern.charAt(i);
break;
case '*':
rxp += ".*"; break;
case '?':
rxp += "."; break;
case '$':
case '^':
case '/':
case '+':
case '.':
case '|':
case '(':
case ')':
case '{':
case '}':
case '[':
case ']':
rxp += "\\"; //fallthrough
default:
rxp += c;
}
}
rxp += "$";
if(ignoreCase){
return new RegExp(rxp,"i"); //RegExp
}else{
return new RegExp(rxp); //RegExp
}
};
 
}
 
if(!dojo._hasResource["dojo.data.util.sorter"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dojo.data.util.sorter"] = true;
dojo.provide("dojo.data.util.sorter");
 
dojo.data.util.sorter.basicComparator = function( /*anything*/ a,
/*anything*/ b){
// summary:
// Basic comparision function that compares if an item is greater or less than another item
// description:
// returns 1 if a > b, -1 if a < b, 0 if equal.
// undefined values are treated as larger values so that they're pushed to the end of the list.
 
var ret = 0;
if(a > b || typeof a === "undefined" || a === null){
ret = 1;
}else if(a < b || typeof b === "undefined" || b === null){
ret = -1;
}
return ret; //int, {-1,0,1}
};
 
dojo.data.util.sorter.createSortFunction = function( /* attributes array */sortSpec,
/*dojo.data.core.Read*/ store){
// summary:
// Helper function to generate the sorting function based off the list of sort attributes.
// description:
// The sort function creation will look for a property on the store called 'comparatorMap'. If it exists
// it will look in the mapping for comparisons function for the attributes. If one is found, it will
// use it instead of the basic comparator, which is typically used for strings, ints, booleans, and dates.
// Returns the sorting function for this particular list of attributes and sorting directions.
//
// sortSpec: array
// A JS object that array that defines out what attribute names to sort on and whether it should be descenting or asending.
// The objects should be formatted as follows:
// {
// attribute: "attributeName-string" || attribute,
// descending: true|false; // Default is false.
// }
// store: object
// The datastore object to look up item values from.
//
var sortFunctions=[];
 
function createSortFunction(attr, dir){
return function(itemA, itemB){
var a = store.getValue(itemA, attr);
var b = store.getValue(itemB, attr);
//See if we have a override for an attribute comparison.
var comparator = null;
if(store.comparatorMap){
if(typeof attr !== "string"){
attr = store.getIdentity(attr);
}
comparator = store.comparatorMap[attr]||dojo.data.util.sorter.basicComparator;
}
comparator = comparator||dojo.data.util.sorter.basicComparator;
return dir * comparator(a,b); //int
};
}
 
for(var i = 0; i < sortSpec.length; i++){
sortAttribute = sortSpec[i];
if(sortAttribute.attribute){
var direction = (sortAttribute.descending) ? -1 : 1;
sortFunctions.push(createSortFunction(sortAttribute.attribute, direction));
}
}
 
return function(rowA, rowB){
var i=0;
while(i < sortFunctions.length){
var ret = sortFunctions[i++](rowA, rowB);
if(ret !== 0){
return ret;//int
}
}
return 0; //int
}; // Function
};
 
}
 
if(!dojo._hasResource["dojo.data.util.simpleFetch"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dojo.data.util.simpleFetch"] = true;
dojo.provide("dojo.data.util.simpleFetch");
 
 
dojo.data.util.simpleFetch.fetch = function(/* Object? */ request){
// summary:
// The simpleFetch mixin is designed to serve as a set of function(s) that can
// be mixed into other datastore implementations to accelerate their development.
// The simpleFetch mixin should work well for any datastore that can respond to a _fetchItems()
// call by returning an array of all the found items that matched the query. The simpleFetch mixin
// is not designed to work for datastores that respond to a fetch() call by incrementally
// loading items, or sequentially loading partial batches of the result
// set. For datastores that mixin simpleFetch, simpleFetch
// implements a fetch method that automatically handles eight of the fetch()
// arguments -- onBegin, onItem, onComplete, onError, start, count, sort and scope
// The class mixing in simpleFetch should not implement fetch(),
// but should instead implement a _fetchItems() method. The _fetchItems()
// method takes three arguments, the keywordArgs object that was passed
// to fetch(), a callback function to be called when the result array is
// available, and an error callback to be called if something goes wrong.
// The _fetchItems() method should ignore any keywordArgs parameters for
// start, count, onBegin, onItem, onComplete, onError, sort, and scope.
// The _fetchItems() method needs to correctly handle any other keywordArgs
// parameters, including the query parameter and any optional parameters
// (such as includeChildren). The _fetchItems() method should create an array of
// result items and pass it to the fetchHandler along with the original request object
// -- or, the _fetchItems() method may, if it wants to, create an new request object
// with other specifics about the request that are specific to the datastore and pass
// that as the request object to the handler.
//
// For more information on this specific function, see dojo.data.api.Read.fetch()
request = request || {};
if(!request.store){
request.store = this;
}
var self = this;
 
var _errorHandler = function(errorData, requestObject){
if(requestObject.onError){
var scope = requestObject.scope || dojo.global;
requestObject.onError.call(scope, errorData, requestObject);
}
};
 
var _fetchHandler = function(items, requestObject){
var oldAbortFunction = requestObject.abort || null;
var aborted = false;
 
var startIndex = requestObject.start?requestObject.start:0;
var endIndex = requestObject.count?(startIndex + requestObject.count):items.length;
 
requestObject.abort = function(){
aborted = true;
if(oldAbortFunction){
oldAbortFunction.call(requestObject);
}
};
 
var scope = requestObject.scope || dojo.global;
if(!requestObject.store){
requestObject.store = self;
}
if(requestObject.onBegin){
requestObject.onBegin.call(scope, items.length, requestObject);
}
if(requestObject.sort){
items.sort(dojo.data.util.sorter.createSortFunction(requestObject.sort, self));
}
if(requestObject.onItem){
for(var i = startIndex; (i < items.length) && (i < endIndex); ++i){
var item = items[i];
if(!aborted){
requestObject.onItem.call(scope, item, requestObject);
}
}
}
if(requestObject.onComplete && !aborted){
var subset = null;
if (!requestObject.onItem) {
subset = items.slice(startIndex, endIndex);
}
requestObject.onComplete.call(scope, subset, requestObject);
}
};
this._fetchItems(request, _fetchHandler, _errorHandler);
return request; // Object
};
 
}
 
if(!dojo._hasResource["dojo.data.ItemFileReadStore"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dojo.data.ItemFileReadStore"] = true;
dojo.provide("dojo.data.ItemFileReadStore");
 
 
 
 
 
dojo.declare("dojo.data.ItemFileReadStore", null,{
// summary:
// The ItemFileReadStore implements the dojo.data.api.Read API and reads
// data from JSON files that have contents in this format --
// { items: [
// { name:'Kermit', color:'green', age:12, friends:['Gonzo', {_reference:{name:'Fozzie Bear'}}]},
// { name:'Fozzie Bear', wears:['hat', 'tie']},
// { name:'Miss Piggy', pets:'Foo-Foo'}
// ]}
// Note that it can also contain an 'identifer' property that specified which attribute on the items
// in the array of items that acts as the unique identifier for that item.
//
constructor: function(/* Object */ keywordParameters){
// summary: constructor
// keywordParameters: {url: String}
// keywordParameters: {data: jsonObject}
// keywordParameters: {typeMap: object)
// The structure of the typeMap object is as follows:
// {
// type0: function || object,
// type1: function || object,
// ...
// typeN: function || object
// }
// Where if it is a function, it is assumed to be an object constructor that takes the
// value of _value as the initialization parameters. If it is an object, then it is assumed
// to be an object of general form:
// {
// type: function, //constructor.
// deserialize: function(value) //The function that parses the value and constructs the object defined by type appropriately.
// }
this._arrayOfAllItems = [];
this._arrayOfTopLevelItems = [];
this._loadFinished = false;
this._jsonFileUrl = keywordParameters.url;
this._jsonData = keywordParameters.data;
this._datatypeMap = keywordParameters.typeMap || {};
if(!this._datatypeMap['Date']){
//If no default mapping for dates, then set this as default.
//We use the dojo.date.stamp here because the ISO format is the 'dojo way'
//of generically representing dates.
this._datatypeMap['Date'] = {
type: Date,
deserialize: function(value){
return dojo.date.stamp.fromISOString(value);
}
};
}
this._features = {'dojo.data.api.Read':true, 'dojo.data.api.Identity':true};
this._itemsByIdentity = null;
this._storeRefPropName = "_S"; // Default name for the store reference to attach to every item.
this._itemNumPropName = "_0"; // Default Item Id for isItem to attach to every item.
this._rootItemPropName = "_RI"; // Default Item Id for isItem to attach to every item.
this._loadInProgress = false; //Got to track the initial load to prevent duelling loads of the dataset.
this._queuedFetches = [];
},
url: "", // use "" rather than undefined for the benefit of the parser (#3539)
 
_assertIsItem: function(/* item */ item){
// summary:
// This function tests whether the item passed in is indeed an item in the store.
// item:
// The item to test for being contained by the store.
if(!this.isItem(item)){
throw new Error("dojo.data.ItemFileReadStore: Invalid item argument.");
}
},
 
_assertIsAttribute: function(/* attribute-name-string */ attribute){
// summary:
// This function tests whether the item passed in is indeed a valid 'attribute' like type for the store.
// attribute:
// The attribute to test for being contained by the store.
if(typeof attribute !== "string"){
throw new Error("dojo.data.ItemFileReadStore: Invalid attribute argument.");
}
},
 
getValue: function( /* item */ item,
/* attribute-name-string */ attribute,
/* value? */ defaultValue){
// summary:
// See dojo.data.api.Read.getValue()
var values = this.getValues(item, attribute);
return (values.length > 0)?values[0]:defaultValue; // mixed
},
 
getValues: function(/* item */ item,
/* attribute-name-string */ attribute){
// summary:
// See dojo.data.api.Read.getValues()
 
this._assertIsItem(item);
this._assertIsAttribute(attribute);
return item[attribute] || []; // Array
},
 
getAttributes: function(/* item */ item){
// summary:
// See dojo.data.api.Read.getAttributes()
this._assertIsItem(item);
var attributes = [];
for(var key in item){
// Save off only the real item attributes, not the special id marks for O(1) isItem.
if((key !== this._storeRefPropName) && (key !== this._itemNumPropName) && (key !== this._rootItemPropName)){
attributes.push(key);
}
}
return attributes; // Array
},
 
hasAttribute: function( /* item */ item,
/* attribute-name-string */ attribute) {
// summary:
// See dojo.data.api.Read.hasAttribute()
return this.getValues(item, attribute).length > 0;
},
 
containsValue: function(/* item */ item,
/* attribute-name-string */ attribute,
/* anything */ value){
// summary:
// See dojo.data.api.Read.containsValue()
var regexp = undefined;
if(typeof value === "string"){
regexp = dojo.data.util.filter.patternToRegExp(value, false);
}
return this._containsValue(item, attribute, value, regexp); //boolean.
},
 
_containsValue: function( /* item */ item,
/* attribute-name-string */ attribute,
/* anything */ value,
/* RegExp?*/ regexp){
// summary:
// Internal function for looking at the values contained by the item.
// description:
// Internal function for looking at the values contained by the item. This
// function allows for denoting if the comparison should be case sensitive for
// strings or not (for handling filtering cases where string case should not matter)
//
// item:
// The data item to examine for attribute values.
// attribute:
// The attribute to inspect.
// value:
// The value to match.
// regexp:
// Optional regular expression generated off value if value was of string type to handle wildcarding.
// If present and attribute values are string, then it can be used for comparison instead of 'value'
return dojo.some(this.getValues(item, attribute), function(possibleValue){
if(possibleValue !== null && !dojo.isObject(possibleValue) && regexp){
if(possibleValue.toString().match(regexp)){
return true; // Boolean
}
}else if(value === possibleValue){
return true; // Boolean
}
});
},
 
isItem: function(/* anything */ something){
// summary:
// See dojo.data.api.Read.isItem()
if(something && something[this._storeRefPropName] === this){
if(this._arrayOfAllItems[something[this._itemNumPropName]] === something){
return true;
}
}
return false; // Boolean
},
 
isItemLoaded: function(/* anything */ something){
// summary:
// See dojo.data.api.Read.isItemLoaded()
return this.isItem(something); //boolean
},
 
loadItem: function(/* object */ keywordArgs){
// summary:
// See dojo.data.api.Read.loadItem()
this._assertIsItem(keywordArgs.item);
},
 
getFeatures: function(){
// summary:
// See dojo.data.api.Read.getFeatures()
return this._features; //Object
},
 
getLabel: function(/* item */ item){
// summary:
// See dojo.data.api.Read.getLabel()
if(this._labelAttr && this.isItem(item)){
return this.getValue(item,this._labelAttr); //String
}
return undefined; //undefined
},
 
getLabelAttributes: function(/* item */ item){
// summary:
// See dojo.data.api.Read.getLabelAttributes()
if(this._labelAttr){
return [this._labelAttr]; //array
}
return null; //null
},
 
_fetchItems: function( /* Object */ keywordArgs,
/* Function */ findCallback,
/* Function */ errorCallback){
// summary:
// See dojo.data.util.simpleFetch.fetch()
var self = this;
var filter = function(requestArgs, arrayOfItems){
var items = [];
if(requestArgs.query){
var ignoreCase = requestArgs.queryOptions ? requestArgs.queryOptions.ignoreCase : false;
 
//See if there are any string values that can be regexp parsed first to avoid multiple regexp gens on the
//same value for each item examined. Much more efficient.
var regexpList = {};
for(var key in requestArgs.query){
var value = requestArgs.query[key];
if(typeof value === "string"){
regexpList[key] = dojo.data.util.filter.patternToRegExp(value, ignoreCase);
}
}
 
for(var i = 0; i < arrayOfItems.length; ++i){
var match = true;
var candidateItem = arrayOfItems[i];
if(candidateItem === null){
match = false;
}else{
for(var key in requestArgs.query) {
var value = requestArgs.query[key];
if (!self._containsValue(candidateItem, key, value, regexpList[key])){
match = false;
}
}
}
if(match){
items.push(candidateItem);
}
}
findCallback(items, requestArgs);
}else{
// We want a copy to pass back in case the parent wishes to sort the array.
// We shouldn't allow resort of the internal list, so that multiple callers
// can get lists and sort without affecting each other. We also need to
// filter out any null values that have been left as a result of deleteItem()
// calls in ItemFileWriteStore.
for(var i = 0; i < arrayOfItems.length; ++i){
var item = arrayOfItems[i];
if(item !== null){
items.push(item);
}
}
findCallback(items, requestArgs);
}
};
 
if(this._loadFinished){
filter(keywordArgs, this._getItemsArray(keywordArgs.queryOptions));
}else{
 
if(this._jsonFileUrl){
//If fetches come in before the loading has finished, but while
//a load is in progress, we have to defer the fetching to be
//invoked in the callback.
if(this._loadInProgress){
this._queuedFetches.push({args: keywordArgs, filter: filter});
}else{
this._loadInProgress = true;
var getArgs = {
url: self._jsonFileUrl,
handleAs: "json-comment-optional"
};
var getHandler = dojo.xhrGet(getArgs);
getHandler.addCallback(function(data){
try{
self._getItemsFromLoadedData(data);
self._loadFinished = true;
self._loadInProgress = false;
filter(keywordArgs, self._getItemsArray(keywordArgs.queryOptions));
self._handleQueuedFetches();
}catch(e){
self._loadFinished = true;
self._loadInProgress = false;
errorCallback(e, keywordArgs);
}
});
getHandler.addErrback(function(error){
self._loadInProgress = false;
errorCallback(error, keywordArgs);
});
}
}else if(this._jsonData){
try{
this._loadFinished = true;
this._getItemsFromLoadedData(this._jsonData);
this._jsonData = null;
filter(keywordArgs, this._getItemsArray(keywordArgs.queryOptions));
}catch(e){
errorCallback(e, keywordArgs);
}
}else{
errorCallback(new Error("dojo.data.ItemFileReadStore: No JSON source data was provided as either URL or a nested Javascript object."), keywordArgs);
}
}
},
 
_handleQueuedFetches: function(){
// summary:
// Internal function to execute delayed request in the store.
//Execute any deferred fetches now.
if (this._queuedFetches.length > 0) {
for(var i = 0; i < this._queuedFetches.length; i++){
var fData = this._queuedFetches[i];
var delayedQuery = fData.args;
var delayedFilter = fData.filter;
if(delayedFilter){
delayedFilter(delayedQuery, this._getItemsArray(delayedQuery.queryOptions));
}else{
this.fetchItemByIdentity(delayedQuery);
}
}
this._queuedFetches = [];
}
},
 
_getItemsArray: function(/*object?*/queryOptions){
// summary:
// Internal function to determine which list of items to search over.
// queryOptions: The query options parameter, if any.
if(queryOptions && queryOptions.deep) {
return this._arrayOfAllItems;
}
return this._arrayOfTopLevelItems;
},
 
close: function(/*dojo.data.api.Request || keywordArgs || null */ request){
// summary:
// See dojo.data.api.Read.close()
},
 
_getItemsFromLoadedData: function(/* Object */ dataObject){
// summary:
// Function to parse the loaded data into item format and build the internal items array.
// description:
// Function to parse the loaded data into item format and build the internal items array.
//
// dataObject:
// The JS data object containing the raw data to convery into item format.
//
// returns: array
// Array of items in store item format.
// First, we define a couple little utility functions...
function valueIsAnItem(/* anything */ aValue){
// summary:
// Given any sort of value that could be in the raw json data,
// return true if we should interpret the value as being an
// item itself, rather than a literal value or a reference.
// example:
// | false == valueIsAnItem("Kermit");
// | false == valueIsAnItem(42);
// | false == valueIsAnItem(new Date());
// | false == valueIsAnItem({_type:'Date', _value:'May 14, 1802'});
// | false == valueIsAnItem({_reference:'Kermit'});
// | true == valueIsAnItem({name:'Kermit', color:'green'});
// | true == valueIsAnItem({iggy:'pop'});
// | true == valueIsAnItem({foo:42});
var isItem = (
(aValue != null) &&
(typeof aValue == "object") &&
(!dojo.isArray(aValue)) &&
(!dojo.isFunction(aValue)) &&
(aValue.constructor == Object) &&
(typeof aValue._reference == "undefined") &&
(typeof aValue._type == "undefined") &&
(typeof aValue._value == "undefined")
);
return isItem;
}
var self = this;
function addItemAndSubItemsToArrayOfAllItems(/* Item */ anItem){
self._arrayOfAllItems.push(anItem);
for(var attribute in anItem){
var valueForAttribute = anItem[attribute];
if(valueForAttribute){
if(dojo.isArray(valueForAttribute)){
var valueArray = valueForAttribute;
for(var k = 0; k < valueArray.length; ++k){
var singleValue = valueArray[k];
if(valueIsAnItem(singleValue)){
addItemAndSubItemsToArrayOfAllItems(singleValue);
}
}
}else{
if(valueIsAnItem(valueForAttribute)){
addItemAndSubItemsToArrayOfAllItems(valueForAttribute);
}
}
}
}
}
 
this._labelAttr = dataObject.label;
 
// We need to do some transformations to convert the data structure
// that we read from the file into a format that will be convenient
// to work with in memory.
 
// Step 1: Walk through the object hierarchy and build a list of all items
var i;
var item;
this._arrayOfAllItems = [];
this._arrayOfTopLevelItems = dataObject.items;
 
for(i = 0; i < this._arrayOfTopLevelItems.length; ++i){
item = this._arrayOfTopLevelItems[i];
addItemAndSubItemsToArrayOfAllItems(item);
item[this._rootItemPropName]=true;
}
 
// Step 2: Walk through all the attribute values of all the items,
// and replace single values with arrays. For example, we change this:
// { name:'Miss Piggy', pets:'Foo-Foo'}
// into this:
// { name:['Miss Piggy'], pets:['Foo-Foo']}
//
// We also store the attribute names so we can validate our store
// reference and item id special properties for the O(1) isItem
var allAttributeNames = {};
var key;
 
for(i = 0; i < this._arrayOfAllItems.length; ++i){
item = this._arrayOfAllItems[i];
for(key in item){
if (key !== this._rootItemPropName)
{
var value = item[key];
if(value !== null){
if(!dojo.isArray(value)){
item[key] = [value];
}
}else{
item[key] = [null];
}
}
allAttributeNames[key]=key;
}
}
 
// Step 3: Build unique property names to use for the _storeRefPropName and _itemNumPropName
// This should go really fast, it will generally never even run the loop.
while(allAttributeNames[this._storeRefPropName]){
this._storeRefPropName += "_";
}
while(allAttributeNames[this._itemNumPropName]){
this._itemNumPropName += "_";
}
 
// Step 4: Some data files specify an optional 'identifier', which is
// the name of an attribute that holds the identity of each item.
// If this data file specified an identifier attribute, then build a
// hash table of items keyed by the identity of the items.
var arrayOfValues;
 
var identifier = dataObject.identifier;
if(identifier){
this._itemsByIdentity = {};
this._features['dojo.data.api.Identity'] = identifier;
for(i = 0; i < this._arrayOfAllItems.length; ++i){
item = this._arrayOfAllItems[i];
arrayOfValues = item[identifier];
var identity = arrayOfValues[0];
if(!this._itemsByIdentity[identity]){
this._itemsByIdentity[identity] = item;
}else{
if(this._jsonFileUrl){
throw new Error("dojo.data.ItemFileReadStore: The json data as specified by: [" + this._jsonFileUrl + "] is malformed. Items within the list have identifier: [" + identifier + "]. Value collided: [" + identity + "]");
}else if(this._jsonData){
throw new Error("dojo.data.ItemFileReadStore: The json data provided by the creation arguments is malformed. Items within the list have identifier: [" + identifier + "]. Value collided: [" + identity + "]");
}
}
}
}else{
this._features['dojo.data.api.Identity'] = Number;
}
 
// Step 5: Walk through all the items, and set each item's properties
// for _storeRefPropName and _itemNumPropName, so that store.isItem() will return true.
for(i = 0; i < this._arrayOfAllItems.length; ++i){
item = this._arrayOfAllItems[i];
item[this._storeRefPropName] = this;
item[this._itemNumPropName] = i;
}
 
// Step 6: We walk through all the attribute values of all the items,
// looking for type/value literals and item-references.
//
// We replace item-references with pointers to items. For example, we change:
// { name:['Kermit'], friends:[{_reference:{name:'Miss Piggy'}}] }
// into this:
// { name:['Kermit'], friends:[miss_piggy] }
// (where miss_piggy is the object representing the 'Miss Piggy' item).
//
// We replace type/value pairs with typed-literals. For example, we change:
// { name:['Nelson Mandela'], born:[{_type:'Date', _value:'July 18, 1918'}] }
// into this:
// { name:['Kermit'], born:(new Date('July 18, 1918')) }
//
// We also generate the associate map for all items for the O(1) isItem function.
for(i = 0; i < this._arrayOfAllItems.length; ++i){
item = this._arrayOfAllItems[i]; // example: { name:['Kermit'], friends:[{_reference:{name:'Miss Piggy'}}] }
for(key in item){
arrayOfValues = item[key]; // example: [{_reference:{name:'Miss Piggy'}}]
for(var j = 0; j < arrayOfValues.length; ++j) {
value = arrayOfValues[j]; // example: {_reference:{name:'Miss Piggy'}}
if(value !== null && typeof value == "object"){
if(value._type && value._value){
var type = value._type; // examples: 'Date', 'Color', or 'ComplexNumber'
var mappingObj = this._datatypeMap[type]; // examples: Date, dojo.Color, foo.math.ComplexNumber, {type: dojo.Color, deserialize(value){ return new dojo.Color(value)}}
if(!mappingObj){
throw new Error("dojo.data.ItemFileReadStore: in the typeMap constructor arg, no object class was specified for the datatype '" + type + "'");
}else if(dojo.isFunction(mappingObj)){
arrayOfValues[j] = new mappingObj(value._value);
}else if(dojo.isFunction(mappingObj.deserialize)){
arrayOfValues[j] = mappingObj.deserialize(value._value);
}else{
throw new Error("dojo.data.ItemFileReadStore: Value provided in typeMap was neither a constructor, nor a an object with a deserialize function");
}
}
if(value._reference){
var referenceDescription = value._reference; // example: {name:'Miss Piggy'}
if(dojo.isString(referenceDescription)){
// example: 'Miss Piggy'
// from an item like: { name:['Kermit'], friends:[{_reference:'Miss Piggy'}]}
arrayOfValues[j] = this._itemsByIdentity[referenceDescription];
}else{
// example: {name:'Miss Piggy'}
// from an item like: { name:['Kermit'], friends:[{_reference:{name:'Miss Piggy'}}] }
for(var k = 0; k < this._arrayOfAllItems.length; ++k){
var candidateItem = this._arrayOfAllItems[k];
var found = true;
for(var refKey in referenceDescription){
if(candidateItem[refKey] != referenceDescription[refKey]){
found = false;
}
}
if(found){
arrayOfValues[j] = candidateItem;
}
}
}
}
}
}
}
}
},
 
getIdentity: function(/* item */ item){
// summary:
// See dojo.data.api.Identity.getIdentity()
var identifier = this._features['dojo.data.api.Identity'];
if(identifier === Number){
return item[this._itemNumPropName]; // Number
}else{
var arrayOfValues = item[identifier];
if(arrayOfValues){
return arrayOfValues[0]; // Object || String
}
}
return null; // null
},
 
fetchItemByIdentity: function(/* Object */ keywordArgs){
// summary:
// See dojo.data.api.Identity.fetchItemByIdentity()
 
// Hasn't loaded yet, we have to trigger the load.
if(!this._loadFinished){
var self = this;
if(this._jsonFileUrl){
 
if(this._loadInProgress){
this._queuedFetches.push({args: keywordArgs});
}else{
this._loadInProgress = true;
var getArgs = {
url: self._jsonFileUrl,
handleAs: "json-comment-optional"
};
var getHandler = dojo.xhrGet(getArgs);
getHandler.addCallback(function(data){
var scope = keywordArgs.scope?keywordArgs.scope:dojo.global;
try{
self._getItemsFromLoadedData(data);
self._loadFinished = true;
self._loadInProgress = false;
var item = self._getItemByIdentity(keywordArgs.identity);
if(keywordArgs.onItem){
keywordArgs.onItem.call(scope, item);
}
self._handleQueuedFetches();
}catch(error){
self._loadInProgress = false;
if(keywordArgs.onError){
keywordArgs.onError.call(scope, error);
}
}
});
getHandler.addErrback(function(error){
self._loadInProgress = false;
if(keywordArgs.onError){
var scope = keywordArgs.scope?keywordArgs.scope:dojo.global;
keywordArgs.onError.call(scope, error);
}
});
}
 
}else if(this._jsonData){
// Passed in data, no need to xhr.
self._getItemsFromLoadedData(self._jsonData);
self._jsonData = null;
self._loadFinished = true;
var item = self._getItemByIdentity(keywordArgs.identity);
if(keywordArgs.onItem){
var scope = keywordArgs.scope?keywordArgs.scope:dojo.global;
keywordArgs.onItem.call(scope, item);
}
}
}else{
// Already loaded. We can just look it up and call back.
var item = this._getItemByIdentity(keywordArgs.identity);
if(keywordArgs.onItem){
var scope = keywordArgs.scope?keywordArgs.scope:dojo.global;
keywordArgs.onItem.call(scope, item);
}
}
},
 
_getItemByIdentity: function(/* Object */ identity){
// summary:
// Internal function to look an item up by its identity map.
var item = null;
if(this._itemsByIdentity){
item = this._itemsByIdentity[identity];
}else{
item = this._arrayOfAllItems[identity];
}
if(item === undefined){
item = null;
}
return item; // Object
},
 
getIdentityAttributes: function(/* item */ item){
// summary:
// See dojo.data.api.Identity.getIdentifierAttributes()
var identifier = this._features['dojo.data.api.Identity'];
if(identifier === Number){
// If (identifier === Number) it means getIdentity() just returns
// an integer item-number for each item. The dojo.data.api.Identity
// spec says we need to return null if the identity is not composed
// of attributes
return null; // null
}else{
return [identifier]; // Array
}
},
_forceLoad: function(){
// summary:
// Internal function to force a load of the store if it hasn't occurred yet. This is required
// for specific functions to work properly.
var self = this;
if(this._jsonFileUrl){
var getArgs = {
url: self._jsonFileUrl,
handleAs: "json-comment-optional",
sync: true
};
var getHandler = dojo.xhrGet(getArgs);
getHandler.addCallback(function(data){
try{
//Check to be sure there wasn't another load going on concurrently
//So we don't clobber data that comes in on it. If there is a load going on
//then do not save this data. It will potentially clobber current data.
//We mainly wanted to sync/wait here.
//TODO: Revisit the loading scheme of this store to improve multi-initial
//request handling.
if (self._loadInProgress !== true && !self._loadFinished) {
self._getItemsFromLoadedData(data);
self._loadFinished = true;
}
}catch(e){
console.log(e);
throw e;
}
});
getHandler.addErrback(function(error){
throw error;
});
}else if(this._jsonData){
self._getItemsFromLoadedData(self._jsonData);
self._jsonData = null;
self._loadFinished = true;
}
}
});
//Mix in the simple fetch implementation to this class.
dojo.extend(dojo.data.ItemFileReadStore,dojo.data.util.simpleFetch);
 
}
 
if(!dojo._hasResource["dijit.form.ValidationTextBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.form.ValidationTextBox"] = true;
dojo.provide("dijit.form.ValidationTextBox");
 
 
 
 
 
 
 
 
dojo.declare(
"dijit.form.ValidationTextBox",
dijit.form.TextBox,
{
// summary:
// A subclass of TextBox.
// Over-ride isValid in subclasses to perform specific kinds of validation.
 
templateString:"<table style=\"display: -moz-inline-stack;\" class=\"dijit dijitReset dijitInlineTable\" cellspacing=\"0\" cellpadding=\"0\"\n\tid=\"widget_${id}\" name=\"${name}\"\n\tdojoAttachEvent=\"onmouseenter:_onMouse,onmouseleave:_onMouse\" waiRole=\"presentation\"\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset dijitInputField\" width=\"100%\"\n\t\t\t><input dojoAttachPoint='textbox,focusNode' dojoAttachEvent='onfocus,onblur:_onMouse,onkeyup,onkeypress:_onKeyPress' autocomplete=\"off\"\n\t\t\ttype='${type}' name='${name}'\n\t\t/></td\n\t\t><td class=\"dijitReset dijitValidationIconField\" width=\"0%\"\n\t\t\t><div dojoAttachPoint='iconNode' class='dijitValidationIcon'></div><div class='dijitValidationIconText'>&Chi;</div\n\t\t></td\n\t></tr\n></table>\n",
baseClass: "dijitTextBox",
 
// default values for new subclass properties
// required: Boolean
// Can be true or false, default is false.
required: false,
// promptMessage: String
// Hint string
promptMessage: "",
// invalidMessage: String
// The message to display if value is invalid.
invalidMessage: "$_unset_$", // read from the message file if not overridden
// constraints: Object
// user-defined object needed to pass parameters to the validator functions
constraints: {},
// regExp: String
// regular expression string used to validate the input
// Do not specify both regExp and regExpGen
regExp: ".*",
// regExpGen: Function
// user replaceable function used to generate regExp when dependent on constraints
// Do not specify both regExp and regExpGen
regExpGen: function(constraints){ return this.regExp; },
// state: String
// Shows current state (ie, validation result) of input (Normal, Warning, or Error)
state: "",
 
setValue: function(){
this.inherited('setValue', arguments);
this.validate(false);
},
 
validator: function(value,constraints){
// summary: user replaceable function used to validate the text input against the regular expression.
return (new RegExp("^(" + this.regExpGen(constraints) + ")"+(this.required?"":"?")+"$")).test(value) &&
(!this.required || !this._isEmpty(value)) &&
(this._isEmpty(value) || this.parse(value, constraints) !== null);
},
 
isValid: function(/* Boolean*/ isFocused){
// summary: Need to over-ride with your own validation code in subclasses
return this.validator(this.textbox.value, this.constraints);
},
 
_isEmpty: function(value){
// summary: Checks for whitespace
return /^\s*$/.test(value); // Boolean
},
 
getErrorMessage: function(/* Boolean*/ isFocused){
// summary: return an error message to show if appropriate
return this.invalidMessage;
},
 
getPromptMessage: function(/* Boolean*/ isFocused){
// summary: return a hint to show if appropriate
return this.promptMessage;
},
 
validate: function(/* Boolean*/ isFocused){
// summary:
// Called by oninit, onblur, and onkeypress.
// description:
// Show missing or invalid messages if appropriate, and highlight textbox field.
var message = "";
var isValid = this.isValid(isFocused);
var isEmpty = this._isEmpty(this.textbox.value);
this.state = (isValid || (!this._hasBeenBlurred && isEmpty)) ? "" : "Error";
this._setStateClass();
dijit.setWaiState(this.focusNode, "invalid", (isValid? "false" : "true"));
if(isFocused){
if(isEmpty){
message = this.getPromptMessage(true);
}
if(!message && !isValid){
message = this.getErrorMessage(true);
}
}
this._displayMessage(message);
},
 
// currently displayed message
_message: "",
 
_displayMessage: function(/*String*/ message){
if(this._message == message){ return; }
this._message = message;
this.displayMessage(message);
},
 
displayMessage: function(/*String*/ message){
// summary:
// User overridable method to display validation errors/hints.
// By default uses a tooltip.
if(message){
dijit.showTooltip(message, this.domNode);
}else{
dijit.hideTooltip(this.domNode);
}
},
 
_hasBeenBlurred: false,
 
_onBlur: function(evt){
this._hasBeenBlurred = true;
this.validate(false);
this.inherited('_onBlur', arguments);
},
 
onfocus: function(evt){
// TODO: change to _onFocus?
this.validate(true);
this._onMouse(evt); // update CSS classes
},
 
onkeyup: function(evt){
this.onfocus(evt);
},
 
//////////// INITIALIZATION METHODS ///////////////////////////////////////
constructor: function(){
this.constraints = {};
},
 
postMixInProperties: function(){
this.inherited('postMixInProperties', arguments);
this.constraints.locale=this.lang;
this.messages = dojo.i18n.getLocalization("dijit.form", "validate", this.lang);
if(this.invalidMessage == "$_unset_$"){ this.invalidMessage = this.messages.invalidMessage; }
var p = this.regExpGen(this.constraints);
this.regExp = p;
// make value a string for all types so that form reset works well
}
}
);
 
dojo.declare(
"dijit.form.MappedTextBox",
dijit.form.ValidationTextBox,
{
// summary:
// A subclass of ValidationTextBox.
// Provides a hidden input field and a serialize method to override
 
serialize: function(val, /*Object?*/options){
// summary: user replaceable function used to convert the getValue() result to a String
return (val.toString ? val.toString() : "");
},
 
toString: function(){
// summary: display the widget as a printable string using the widget's value
var val = this.filter(this.getValue());
return (val!=null) ? ((typeof val == "string") ? val : this.serialize(val, this.constraints)) : "";
},
 
validate: function(){
this.valueNode.value = this.toString();
this.inherited('validate', arguments);
},
 
postCreate: function(){
var textbox = this.textbox;
var valueNode = (this.valueNode = document.createElement("input"));
valueNode.setAttribute("type", textbox.type);
valueNode.setAttribute("value", this.toString());
dojo.style(valueNode, "display", "none");
valueNode.name = this.textbox.name;
this.textbox.name = "_" + this.textbox.name + "_displayed_";
this.textbox.removeAttribute("name");
dojo.place(valueNode, textbox, "after");
 
this.inherited('postCreate', arguments);
}
}
);
 
dojo.declare(
"dijit.form.RangeBoundTextBox",
dijit.form.MappedTextBox,
{
// summary:
// A subclass of MappedTextBox.
// Tests for a value out-of-range
/*===== contraints object:
// min: Number
// Minimum signed value. Default is -Infinity
min: undefined,
// max: Number
// Maximum signed value. Default is +Infinity
max: undefined,
=====*/
 
// rangeMessage: String
// The message to display if value is out-of-range
rangeMessage: "",
 
compare: function(val1, val2){
// summary: compare 2 values
return val1 - val2;
},
 
rangeCheck: function(/* Number */ primitive, /* Object */ constraints){
// summary: user replaceable function used to validate the range of the numeric input value
var isMin = (typeof constraints.min != "undefined");
var isMax = (typeof constraints.max != "undefined");
if(isMin || isMax){
return (!isMin || this.compare(primitive,constraints.min) >= 0) &&
(!isMax || this.compare(primitive,constraints.max) <= 0);
}else{ return true; }
},
 
isInRange: function(/* Boolean*/ isFocused){
// summary: Need to over-ride with your own validation code in subclasses
return this.rangeCheck(this.getValue(), this.constraints);
},
 
isValid: function(/* Boolean*/ isFocused){
return this.inherited('isValid', arguments) &&
((this._isEmpty(this.textbox.value) && !this.required) || this.isInRange(isFocused));
},
 
getErrorMessage: function(/* Boolean*/ isFocused){
if(dijit.form.RangeBoundTextBox.superclass.isValid.call(this, false) && !this.isInRange(isFocused)){ return this.rangeMessage; }
else{ return this.inherited('getErrorMessage', arguments); }
},
 
postMixInProperties: function(){
this.inherited('postMixInProperties', arguments);
if(!this.rangeMessage){
this.messages = dojo.i18n.getLocalization("dijit.form", "validate", this.lang);
this.rangeMessage = this.messages.rangeMessage;
}
},
 
postCreate: function(){
this.inherited('postCreate', arguments);
if(typeof this.constraints.min != "undefined"){
dijit.setWaiState(this.focusNode, "valuemin", this.constraints.min);
}
if(typeof this.constraints.max != "undefined"){
dijit.setWaiState(this.focusNode, "valuemax", this.constraints.max);
}
}
}
);
 
}
 
if(!dojo._hasResource["dijit.form.ComboBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.form.ComboBox"] = true;
dojo.provide("dijit.form.ComboBox");
 
 
 
 
 
dojo.declare(
"dijit.form.ComboBoxMixin",
null,
{
// summary:
// Auto-completing text box, and base class for FilteringSelect widget.
//
// The drop down box's values are populated from an class called
// a data provider, which returns a list of values based on the characters
// that the user has typed into the input box.
//
// Some of the options to the ComboBox are actually arguments to the data
// provider.
//
// You can assume that all the form widgets (and thus anything that mixes
// in ComboBoxMixin) will inherit from _FormWidget and thus the "this"
// reference will also "be a" _FormWidget.
 
// item: Object
// This is the item returned by the dojo.data.store implementation that
// provides the data for this cobobox, it's the currently selected item.
item: null,
 
// pageSize: Integer
// Argument to data provider.
// Specifies number of search results per page (before hitting "next" button)
pageSize: Infinity,
 
// store: Object
// Reference to data provider object used by this ComboBox
store: null,
 
// query: Object
// A query that can be passed to 'store' to initially filter the items,
// before doing further filtering based on searchAttr and the key.
query: {},
 
// autoComplete: Boolean
// If you type in a partial string, and then tab out of the <input> box,
// automatically copy the first entry displayed in the drop down list to
// the <input> field
autoComplete: true,
 
// searchDelay: Integer
// Delay in milliseconds between when user types something and we start
// searching based on that value
searchDelay: 100,
 
// searchAttr: String
// Searches pattern match against this field
searchAttr: "name",
 
// ignoreCase: Boolean
// Set true if the ComboBox should ignore case when matching possible items
ignoreCase: true,
 
// hasDownArrow: Boolean
// Set this textbox to have a down arrow button.
// Defaults to true.
hasDownArrow:true,
 
// _hasFocus: Boolean
// Represents focus state of the textbox
// TODO: get rid of this; it's unnecessary (but currently referenced in FilteringSelect)
_hasFocus:false,
 
templateString:"<table class=\"dijit dijitReset dijitInlineTable dijitLeft\" cellspacing=\"0\" cellpadding=\"0\"\n\tid=\"widget_${id}\" name=\"${name}\" dojoAttachEvent=\"onmouseenter:_onMouse,onmouseleave:_onMouse\" waiRole=\"presentation\"\n\t><tr class=\"dijitReset\"\n\t\t><td class='dijitReset dijitStretch dijitInputField' width=\"100%\"\n\t\t\t><input type=\"text\" autocomplete=\"off\" name=\"${name}\"\n\t\t\tdojoAttachEvent=\"onkeypress, onkeyup, onfocus, compositionend\"\n\t\t\tdojoAttachPoint=\"textbox,focusNode\" waiRole=\"combobox\"\n\t\t/></td\n\t\t><td class=\"dijitReset dijitValidationIconField\" width=\"0%\"\n\t\t\t><div dojoAttachPoint='iconNode' class='dijitValidationIcon'></div\n\t\t\t><div class='dijitValidationIconText'>&Chi;</div\n\t\t></td\n\t\t><td class='dijitReset dijitRight dijitButtonNode dijitDownArrowButton' width=\"0%\"\n\t\t\tdojoAttachPoint=\"downArrowNode\"\n\t\t\tdojoAttachEvent=\"onmousedown:_onArrowMouseDown,onmouseup:_onMouse,onmouseenter:_onMouse,onmouseleave:_onMouse\"\n\t\t\t><div class=\"dijitDownArrowButtonInner\" waiRole=\"presentation\"\n\t\t\t\t><div class=\"dijitDownArrowButtonChar\">&#9660;</div\n\t\t\t></div\n\t\t></td\t\n\t></tr\n></table>\n",
 
baseClass:"dijitComboBox",
 
_lastDisplayedValue: "",
 
getValue:function(){
// don't get the textbox value but rather the previously set hidden value
return dijit.form.TextBox.superclass.getValue.apply(this, arguments);
},
 
setDisplayedValue:function(/*String*/ value){
this._lastDisplayedValue = value;
this.setValue(value, true);
},
 
_getCaretPos: function(/*DomNode*/ element){
// khtml 3.5.2 has selection* methods as does webkit nightlies from 2005-06-22
if(typeof(element.selectionStart)=="number"){
// FIXME: this is totally borked on Moz < 1.3. Any recourse?
return element.selectionStart;
}else if(dojo.isIE){
// in the case of a mouse click in a popup being handled,
// then the document.selection is not the textarea, but the popup
// var r = document.selection.createRange();
// hack to get IE 6 to play nice. What a POS browser.
var tr = document.selection.createRange().duplicate();
var ntr = element.createTextRange();
tr.move("character",0);
ntr.move("character",0);
try{
// If control doesnt have focus, you get an exception.
// Seems to happen on reverse-tab, but can also happen on tab (seems to be a race condition - only happens sometimes).
// There appears to be no workaround for this - googled for quite a while.
ntr.setEndPoint("EndToEnd", tr);
return String(ntr.text).replace(/\r/g,"").length;
}catch(e){
return 0; // If focus has shifted, 0 is fine for caret pos.
}
}
},
 
_setCaretPos: function(/*DomNode*/ element, /*Number*/ location){
location = parseInt(location);
this._setSelectedRange(element, location, location);
},
 
_setSelectedRange: function(/*DomNode*/ element, /*Number*/ start, /*Number*/ end){
if(!end){
end = element.value.length;
} // NOTE: Strange - should be able to put caret at start of text?
// Mozilla
// parts borrowed from http://www.faqts.com/knowledge_base/view.phtml/aid/13562/fid/130
if(element.setSelectionRange){
dijit.focus(element);
element.setSelectionRange(start, end);
}else if(element.createTextRange){ // IE
var range = element.createTextRange();
with(range){
collapse(true);
moveEnd('character', end);
moveStart('character', start);
select();
}
}else{ //otherwise try the event-creation hack (our own invention)
// do we need these?
element.value = element.value;
element.blur();
dijit.focus(element);
// figure out how far back to go
var dist = parseInt(element.value.length)-end;
var tchar = String.fromCharCode(37);
var tcc = tchar.charCodeAt(0);
for(var x = 0; x < dist; x++){
var te = document.createEvent("KeyEvents");
te.initKeyEvent("keypress", true, true, null, false, false, false, false, tcc, tcc);
element.dispatchEvent(te);
}
}
},
 
onkeypress: function(/*Event*/ evt){
// summary: handles keyboard events
 
//except for pasting case - ctrl + v(118)
if(evt.altKey || (evt.ctrlKey && evt.charCode != 118)){
return;
}
var doSearch = false;
this.item = null; // #4872
if(this._isShowingNow){this._popupWidget.handleKey(evt);}
switch(evt.keyCode){
case dojo.keys.PAGE_DOWN:
case dojo.keys.DOWN_ARROW:
if(!this._isShowingNow||this._prev_key_esc){
this._arrowPressed();
doSearch=true;
}else{
this._announceOption(this._popupWidget.getHighlightedOption());
}
dojo.stopEvent(evt);
this._prev_key_backspace = false;
this._prev_key_esc = false;
break;
 
case dojo.keys.PAGE_UP:
case dojo.keys.UP_ARROW:
if(this._isShowingNow){
this._announceOption(this._popupWidget.getHighlightedOption());
}
dojo.stopEvent(evt);
this._prev_key_backspace = false;
this._prev_key_esc = false;
break;
 
case dojo.keys.ENTER:
// prevent submitting form if user presses enter
// also prevent accepting the value if either Next or Previous are selected
var highlighted;
if(this._isShowingNow&&(highlighted=this._popupWidget.getHighlightedOption())){
// only stop event on prev/next
if(highlighted==this._popupWidget.nextButton){
this._nextSearch(1);
dojo.stopEvent(evt);
break;
}
else if(highlighted==this._popupWidget.previousButton){
this._nextSearch(-1);
dojo.stopEvent(evt);
break;
}
}else{
this.setDisplayedValue(this.getDisplayedValue());
}
// default case:
// prevent submit, but allow event to bubble
evt.preventDefault();
// fall through
 
case dojo.keys.TAB:
var newvalue=this.getDisplayedValue();
// #4617: if the user had More Choices selected fall into the _onBlur handler
if(this._popupWidget &&
(newvalue == this._popupWidget._messages["previousMessage"] ||
newvalue == this._popupWidget._messages["nextMessage"])){
break;
}
if(this._isShowingNow){
this._prev_key_backspace = false;
this._prev_key_esc = false;
if(this._popupWidget.getHighlightedOption()){
this._popupWidget.setValue({target:this._popupWidget.getHighlightedOption()}, true);
}
this._hideResultList();
}
break;
 
case dojo.keys.SPACE:
this._prev_key_backspace = false;
this._prev_key_esc = false;
if(this._isShowingNow && this._popupWidget.getHighlightedOption()){
dojo.stopEvent(evt);
this._selectOption();
this._hideResultList();
}else{
doSearch = true;
}
break;
 
case dojo.keys.ESCAPE:
this._prev_key_backspace = false;
this._prev_key_esc = true;
this._hideResultList();
if(this._lastDisplayedValue != this.getDisplayedValue()){
this.setDisplayedValue(this._lastDisplayedValue);
dojo.stopEvent(evt);
}else{
this.setValue(this.getValue(), false);
}
break;
 
case dojo.keys.DELETE:
case dojo.keys.BACKSPACE:
this._prev_key_esc = false;
this._prev_key_backspace = true;
doSearch = true;
break;
 
case dojo.keys.RIGHT_ARROW: // fall through
 
case dojo.keys.LEFT_ARROW: // fall through
this._prev_key_backspace = false;
this._prev_key_esc = false;
break;
 
default:// non char keys (F1-F12 etc..) shouldn't open list
this._prev_key_backspace = false;
this._prev_key_esc = false;
if(dojo.isIE || evt.charCode != 0){
doSearch=true;
}
}
if(this.searchTimer){
clearTimeout(this.searchTimer);
}
if(doSearch){
// need to wait a tad before start search so that the event bubbles through DOM and we have value visible
this.searchTimer = setTimeout(dojo.hitch(this, this._startSearchFromInput), this.searchDelay);
}
},
 
_autoCompleteText: function(/*String*/ text){
// summary:
// Fill in the textbox with the first item from the drop down list, and
// highlight the characters that were auto-completed. For example, if user
// typed "CA" and the drop down list appeared, the textbox would be changed to
// "California" and "ifornia" would be highlighted.
 
// IE7: clear selection so next highlight works all the time
this._setSelectedRange(this.focusNode, this.focusNode.value.length, this.focusNode.value.length);
// does text autoComplete the value in the textbox?
// #3744: escape regexp so the user's input isn't treated as a regular expression.
// Example: If the user typed "(" then the regexp would throw "unterminated parenthetical."
// Also see #2558 for the autocompletion bug this regular expression fixes.
if(new RegExp("^"+escape(this.focusNode.value), this.ignoreCase ? "i" : "").test(escape(text))){
var cpos = this._getCaretPos(this.focusNode);
// only try to extend if we added the last character at the end of the input
if((cpos+1) > this.focusNode.value.length){
// only add to input node as we would overwrite Capitalisation of chars
// actually, that is ok
this.focusNode.value = text;//.substr(cpos);
// visually highlight the autocompleted characters
this._setSelectedRange(this.focusNode, cpos, this.focusNode.value.length);
dijit.setWaiState(this.focusNode, "valuenow", text);
}
}else{
// text does not autoComplete; replace the whole value and highlight
this.focusNode.value = text;
this._setSelectedRange(this.focusNode, 0, this.focusNode.value.length);
dijit.setWaiState(this.focusNode, "valuenow", text);
}
},
 
_openResultList: function(/*Object*/ results, /*Object*/ dataObject){
if(this.disabled || dataObject.query[this.searchAttr] != this._lastQuery){
return;
}
this._popupWidget.clearResultList();
if(!results.length){
this._hideResultList();
return;
}
 
// Fill in the textbox with the first item from the drop down list, and
// highlight the characters that were auto-completed. For example, if user
// typed "CA" and the drop down list appeared, the textbox would be changed to
// "California" and "ifornia" would be highlighted.
 
var zerothvalue=new String(this.store.getValue(results[0], this.searchAttr));
if(zerothvalue && this.autoComplete && !this._prev_key_backspace &&
// when the user clicks the arrow button to show the full list,
// startSearch looks for "*".
// it does not make sense to autocomplete
// if they are just previewing the options available.
(dataObject.query[this.searchAttr] != "*")){
this._autoCompleteText(zerothvalue);
// announce the autocompleted value
dijit.setWaiState(this.focusNode || this.domNode, "valuenow", zerothvalue);
}
this._popupWidget.createOptions(results, dataObject, dojo.hitch(this, this._getMenuLabelFromItem));
 
// show our list (only if we have content, else nothing)
this._showResultList();
 
// #4091: tell the screen reader that the paging callback finished by shouting the next choice
if(dataObject.direction){
if(dataObject.direction==1){
this._popupWidget.highlightFirstOption();
}else if(dataObject.direction==-1){
this._popupWidget.highlightLastOption();
}
this._announceOption(this._popupWidget.getHighlightedOption());
}
},
 
_showResultList: function(){
this._hideResultList();
var items = this._popupWidget.getItems(),
visibleCount = Math.min(items.length,this.maxListLength);
this._arrowPressed();
// hide the tooltip
this._displayMessage("");
// Position the list and if it's too big to fit on the screen then
// size it to the maximum possible height
// Our dear friend IE doesnt take max-height so we need to calculate that on our own every time
// TODO: want to redo this, see http://trac.dojotoolkit.org/ticket/3272, http://trac.dojotoolkit.org/ticket/4108
with(this._popupWidget.domNode.style){
// natural size of the list has changed, so erase old width/height settings,
// which were hardcoded in a previous call to this function (via dojo.marginBox() call)
width="";
height="";
}
var best=this.open();
// #3212: only set auto scroll bars if necessary
// prevents issues with scroll bars appearing when they shouldn't when node is made wider (fractional pixels cause this)
var popupbox=dojo.marginBox(this._popupWidget.domNode);
this._popupWidget.domNode.style.overflow=((best.h==popupbox.h)&&(best.w==popupbox.w))?"hidden":"auto";
// #4134: borrow TextArea scrollbar test so content isn't covered by scrollbar and horizontal scrollbar doesn't appear
var newwidth=best.w;
if(best.h<this._popupWidget.domNode.scrollHeight){newwidth+=16;}
dojo.marginBox(this._popupWidget.domNode, {h:best.h,w:Math.max(newwidth,this.domNode.offsetWidth)});
},
 
_hideResultList: function(){
if(this._isShowingNow){
dijit.popup.close(this._popupWidget);
this._arrowIdle();
this._isShowingNow=false;
}
},
 
_onBlur: function(){
// summary: called magically when focus has shifted away from this widget and it's dropdown
this._hasFocus=false;
this._hasBeenBlurred = true;
this._hideResultList();
this._arrowIdle();
// if the user clicks away from the textbox OR tabs away, set the value to the textbox value
// #4617: if value is now more choices or previous choices, revert the value
var newvalue=this.getDisplayedValue();
if(this._popupWidget&&(newvalue==this._popupWidget._messages["previousMessage"]||newvalue==this._popupWidget._messages["nextMessage"])){
this.setValue(this._lastValueReported, true);
}else{
this.setDisplayedValue(newvalue);
}
},
 
onfocus:function(/*Event*/ evt){
this._hasFocus=true;
// update styling to reflect that we are focused
this._onMouse(evt);
},
 
_announceOption: function(/*Node*/ node){
// summary:
// a11y code that puts the highlighted option in the textbox
// This way screen readers will know what is happening in the menu
 
if(node==null){return;}
// pull the text value from the item attached to the DOM node
var newValue;
if(node==this._popupWidget.nextButton||node==this._popupWidget.previousButton){
newValue=node.innerHTML;
}else{
newValue=this.store.getValue(node.item, this.searchAttr);
}
// get the text that the user manually entered (cut off autocompleted text)
this.focusNode.value=this.focusNode.value.substring(0, this._getCaretPos(this.focusNode));
// autocomplete the rest of the option to announce change
this._autoCompleteText(newValue);
},
 
_selectOption: function(/*Event*/ evt){
var tgt = null;
if(!evt){
evt ={ target: this._popupWidget.getHighlightedOption()};
}
// what if nothing is highlighted yet?
if(!evt.target){
// handle autocompletion where the the user has hit ENTER or TAB
this.setDisplayedValue(this.getDisplayedValue());
return;
// otherwise the user has accepted the autocompleted value
}else{
tgt = evt.target;
}
if(!evt.noHide){
this._hideResultList();
this._setCaretPos(this.focusNode, this.store.getValue(tgt.item, this.searchAttr).length);
}
this._doSelect(tgt);
},
 
_doSelect: function(tgt){
this.item = tgt.item;
this.setValue(this.store.getValue(tgt.item, this.searchAttr), true);
},
 
_onArrowMouseDown: function(evt){
// summary: callback when arrow is clicked
if(this.disabled){
return;
}
dojo.stopEvent(evt);
this.focus();
if(this._isShowingNow){
this._hideResultList();
}else{
// forces full population of results, if they click
// on the arrow it means they want to see more options
this._startSearch("");
}
},
 
_startSearchFromInput: function(){
this._startSearch(this.focusNode.value);
},
 
_startSearch: function(/*String*/ key){
if(!this._popupWidget){
this._popupWidget = new dijit.form._ComboBoxMenu({
onChange: dojo.hitch(this, this._selectOption)
});
}
// create a new query to prevent accidentally querying for a hidden value from FilteringSelect's keyField
var query=this.query;
this._lastQuery=query[this.searchAttr]=key+"*";
var dataObject=this.store.fetch({queryOptions:{ignoreCase:this.ignoreCase, deep:true}, query: query, onComplete:dojo.hitch(this, "_openResultList"), start:0, count:this.pageSize});
function nextSearch(dataObject, direction){
dataObject.start+=dataObject.count*direction;
// #4091: tell callback the direction of the paging so the screen reader knows which menu option to shout
dataObject.direction=direction;
dataObject.store.fetch(dataObject);
}
this._nextSearch=this._popupWidget.onPage=dojo.hitch(this, nextSearch, dataObject);
},
 
_getValueField:function(){
return this.searchAttr;
},
 
/////////////// Event handlers /////////////////////
 
_arrowPressed: function(){
if(!this.disabled&&this.hasDownArrow){
dojo.addClass(this.downArrowNode, "dijitArrowButtonActive");
}
},
 
_arrowIdle: function(){
if(!this.disabled&&this.hasDownArrow){
dojo.removeClass(this.downArrowNode, "dojoArrowButtonPushed");
}
},
 
compositionend: function(/*Event*/ evt){
// summary: When inputting characters using an input method, such as Asian
// languages, it will generate this event instead of onKeyDown event
// Note: this event is only triggered in FF (not in IE)
this.onkeypress({charCode:-1});
},
 
//////////// INITIALIZATION METHODS ///////////////////////////////////////
constructor: function(){
this.query={};
},
 
postMixInProperties: function(){
if(!this.hasDownArrow){
this.baseClass = "dijitTextBox";
}
if(!this.store){
// if user didn't specify store, then assume there are option tags
var items = this.srcNodeRef ? dojo.query("> option", this.srcNodeRef).map(function(node){
node.style.display="none";
return { value: node.getAttribute("value"), name: String(node.innerHTML) };
}) : {};
this.store = new dojo.data.ItemFileReadStore({data: {identifier:this._getValueField(), items:items}});
 
// if there is no value set and there is an option list,
// set the value to the first value to be consistent with native Select
if(items && items.length && !this.value){
// For <select>, IE does not let you set the value attribute of the srcNodeRef (and thus dojo.mixin does not copy it).
// IE does understand selectedIndex though, which is automatically set by the selected attribute of an option tag
this.value = items[this.srcNodeRef.selectedIndex != -1 ? this.srcNodeRef.selectedIndex : 0]
[this._getValueField()];
}
}
},
 
uninitialize:function(){
if(this._popupWidget){
this._hideResultList();
this._popupWidget.destroy()
};
},
 
_getMenuLabelFromItem:function(/*Item*/ item){
return {html:false, label:this.store.getValue(item, this.searchAttr)};
},
 
open:function(){
this._isShowingNow=true;
return dijit.popup.open({
popup: this._popupWidget,
around: this.domNode,
parent: this
});
}
}
);
 
dojo.declare(
"dijit.form._ComboBoxMenu",
[dijit._Widget, dijit._Templated],
 
{
// summary:
// Focus-less div based menu for internal use in ComboBox
 
templateString:"<div class='dijitMenu' dojoAttachEvent='onmousedown,onmouseup,onmouseover,onmouseout' tabIndex='-1' style='overflow:\"auto\";'>"
+"<div class='dijitMenuItem dijitMenuPreviousButton' dojoAttachPoint='previousButton'></div>"
+"<div class='dijitMenuItem dijitMenuNextButton' dojoAttachPoint='nextButton'></div>"
+"</div>",
_messages:null,
 
postMixInProperties:function(){
this._messages = dojo.i18n.getLocalization("dijit.form", "ComboBox", this.lang);
this.inherited("postMixInProperties", arguments);
},
 
setValue:function(/*Object*/ value){
this.value=value;
this.onChange(value);
},
 
onChange:function(/*Object*/ value){},
onPage:function(/*Number*/ direction){},
 
postCreate:function(){
// fill in template with i18n messages
this.previousButton.innerHTML=this._messages["previousMessage"];
this.nextButton.innerHTML=this._messages["nextMessage"];
this.inherited("postCreate", arguments);
},
 
onClose:function(){
this._blurOptionNode();
},
 
_createOption:function(/*Object*/ item, labelFunc){
// summary: creates an option to appear on the popup menu
// subclassed by FilteringSelect
 
var labelObject=labelFunc(item);
var menuitem = document.createElement("div");
if(labelObject.html){menuitem.innerHTML=labelObject.label;}
else{menuitem.appendChild(document.createTextNode(labelObject.label));}
// #3250: in blank options, assign a normal height
if(menuitem.innerHTML==""){
menuitem.innerHTML="&nbsp;"
}
menuitem.item=item;
return menuitem;
},
 
createOptions:function(results, dataObject, labelFunc){
//this._dataObject=dataObject;
//this._dataObject.onComplete=dojo.hitch(comboBox, comboBox._openResultList);
// display "Previous . . ." button
this.previousButton.style.display=dataObject.start==0?"none":"";
// create options using _createOption function defined by parent ComboBox (or FilteringSelect) class
// #2309: iterate over cache nondestructively
var _this=this;
dojo.forEach(results, function(item){
var menuitem=_this._createOption(item, labelFunc);
menuitem.className = "dijitMenuItem";
_this.domNode.insertBefore(menuitem, _this.nextButton);
});
// display "Next . . ." button
this.nextButton.style.display=dataObject.count==results.length?"":"none";
},
 
clearResultList:function(){
// keep the previous and next buttons of course
while(this.domNode.childNodes.length>2){
this.domNode.removeChild(this.domNode.childNodes[this.domNode.childNodes.length-2]);
}
},
 
// these functions are called in showResultList
getItems:function(){
return this.domNode.childNodes;
},
 
getListLength:function(){
return this.domNode.childNodes.length-2;
},
 
onmousedown:function(/*Event*/ evt){
dojo.stopEvent(evt);
},
 
onmouseup:function(/*Event*/ evt){
if(evt.target === this.domNode){
return;
}else if(evt.target==this.previousButton){
this.onPage(-1);
}else if(evt.target==this.nextButton){
this.onPage(1);
}else{
var tgt=evt.target;
// while the clicked node is inside the div
while(!tgt.item){
// recurse to the top
tgt=tgt.parentNode;
}
this.setValue({target:tgt}, true);
}
},
 
onmouseover:function(/*Event*/ evt){
if(evt.target === this.domNode){ return; }
var tgt=evt.target;
if(!(tgt==this.previousButton||tgt==this.nextButton)){
// while the clicked node is inside the div
while(!tgt.item){
// recurse to the top
tgt=tgt.parentNode;
}
}
this._focusOptionNode(tgt);
},
 
onmouseout:function(/*Event*/ evt){
if(evt.target === this.domNode){ return; }
this._blurOptionNode();
},
 
_focusOptionNode:function(/*DomNode*/ node){
// summary:
// does the actual highlight
if(this._highlighted_option != node){
this._blurOptionNode();
this._highlighted_option = node;
dojo.addClass(this._highlighted_option, "dijitMenuItemHover");
}
},
 
_blurOptionNode:function(){
// summary:
// removes highlight on highlighted option
if(this._highlighted_option){
dojo.removeClass(this._highlighted_option, "dijitMenuItemHover");
this._highlighted_option = null;
}
},
 
_highlightNextOption:function(){
// because each press of a button clears the menu,
// the highlighted option sometimes becomes detached from the menu!
// test to see if the option has a parent to see if this is the case.
if(!this.getHighlightedOption()){
this._focusOptionNode(this.domNode.firstChild.style.display=="none"?this.domNode.firstChild.nextSibling:this.domNode.firstChild);
}else if(this._highlighted_option.nextSibling&&this._highlighted_option.nextSibling.style.display!="none"){
this._focusOptionNode(this._highlighted_option.nextSibling);
}
// scrollIntoView is called outside of _focusOptionNode because in IE putting it inside causes the menu to scroll up on mouseover
dijit.scrollIntoView(this._highlighted_option);
},
 
highlightFirstOption:function(){
// highlight the non-Previous choices option
this._focusOptionNode(this.domNode.firstChild.nextSibling);
dijit.scrollIntoView(this._highlighted_option);
},
 
highlightLastOption:function(){
// highlight the noon-More choices option
this._focusOptionNode(this.domNode.lastChild.previousSibling);
dijit.scrollIntoView(this._highlighted_option);
},
 
_highlightPrevOption:function(){
// if nothing selected, highlight last option
// makes sense if you select Previous and try to keep scrolling up the list
if(!this.getHighlightedOption()){
this._focusOptionNode(this.domNode.lastChild.style.display=="none"?this.domNode.lastChild.previousSibling:this.domNode.lastChild);
}else if(this._highlighted_option.previousSibling&&this._highlighted_option.previousSibling.style.display!="none"){
this._focusOptionNode(this._highlighted_option.previousSibling);
}
dijit.scrollIntoView(this._highlighted_option);
},
 
_page:function(/*Boolean*/ up){
var scrollamount=0;
var oldscroll=this.domNode.scrollTop;
var height=parseInt(dojo.getComputedStyle(this.domNode).height);
// if no item is highlighted, highlight the first option
if(!this.getHighlightedOption()){this._highlightNextOption();}
while(scrollamount<height){
if(up){
// stop at option 1
if(!this.getHighlightedOption().previousSibling||this._highlighted_option.previousSibling.style.display=="none"){break;}
this._highlightPrevOption();
}else{
// stop at last option
if(!this.getHighlightedOption().nextSibling||this._highlighted_option.nextSibling.style.display=="none"){break;}
this._highlightNextOption();
}
// going backwards
var newscroll=this.domNode.scrollTop;
scrollamount+=(newscroll-oldscroll)*(up ? -1:1);
oldscroll=newscroll;
}
},
 
pageUp:function(){
this._page(true);
},
 
pageDown:function(){
this._page(false);
},
 
getHighlightedOption:function(){
// summary:
// Returns the highlighted option.
return this._highlighted_option&&this._highlighted_option.parentNode ? this._highlighted_option : null;
},
 
handleKey:function(evt){
switch(evt.keyCode){
case dojo.keys.DOWN_ARROW:
this._highlightNextOption();
break;
case dojo.keys.PAGE_DOWN:
this.pageDown();
break;
case dojo.keys.UP_ARROW:
this._highlightPrevOption();
break;
case dojo.keys.PAGE_UP:
this.pageUp();
break;
}
}
}
);
 
dojo.declare(
"dijit.form.ComboBox",
[dijit.form.ValidationTextBox, dijit.form.ComboBoxMixin],
{
postMixInProperties: function(){
dijit.form.ComboBoxMixin.prototype.postMixInProperties.apply(this, arguments);
dijit.form.ValidationTextBox.prototype.postMixInProperties.apply(this, arguments);
}
}
);
 
}
 
if(!dojo._hasResource["dojo.cldr.monetary"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dojo.cldr.monetary"] = true;
dojo.provide("dojo.cldr.monetary");
 
dojo.cldr.monetary.getData = function(code){
// summary: A mapping of currency code to currency-specific formatting information. Returns a unique object with properties: places, round.
// code: an iso4217 currency code
 
// from http://www.unicode.org/cldr/data/common/supplemental/supplementalData.xml:supplementalData/currencyData/fractions
 
var placesData = {
ADP:0,BHD:3,BIF:0,BYR:0,CLF:0,CLP:0,DJF:0,ESP:0,GNF:0,
IQD:3,ITL:0,JOD:3,JPY:0,KMF:0,KRW:0,KWD:3,LUF:0,LYD:3,
MGA:0,MGF:0,OMR:3,PYG:0,RWF:0,TND:3,TRL:0,VUV:0,XAF:0,
XOF:0,XPF: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
};
 
}
 
if(!dojo._hasResource["dojo.currency"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dojo.currency"] = true;
dojo.provide("dojo.currency");
 
 
 
 
 
 
dojo.currency._mixInDefaults = function(options){
options = options || {};
options.type = "currency";
 
// Get locale-depenent currency data, like the symbol
var bundle = dojo.i18n.getLocalization("dojo.cldr", "currency", options.locale) || {};
 
// Mixin locale-independent currency data, like # of places
var iso = options.currency;
var data = dojo.cldr.monetary.getData(iso);
 
dojo.forEach(["displayName","symbol","group","decimal"], function(prop){
data[prop] = bundle[iso+"_"+prop];
});
 
data.fractional = [true, false];
 
// Mixin with provided options
return dojo.mixin(data, options);
}
 
dojo.currency.format = function(/*Number*/value, /*Object?*/options){
// summary:
// Format a Number as a String, using locale-specific settings
//
// description:
// Create a string from a Number using a known localized pattern.
// Formatting patterns appropriate to the locale are chosen from the CLDR http://unicode.org/cldr
// as well as the appropriate symbols and delimiters. See http://www.unicode.org/reports/tr35/#Number_Elements
//
// value:
// the number to be formatted.
//
// options: object {currency: String, pattern: String?, places: Number?, round: Number?, symbol: String?, locale: String?}
// currency- the ISO4217 currency code, a three letter sequence like "USD"
// See http://en.wikipedia.org/wiki/ISO_4217
// symbol- override currency symbol. Normally, will be looked up in table of supported currencies, and ISO currency code will
// be used if not found. See dojo.i18n.cldr.nls->currency.js
// pattern- override formatting pattern with this string (see dojo.number.applyPattern)
// places- fixed number of decimal places to show. Default is defined by the currency.
// round- 5 rounds to nearest .5; 0 rounds to nearest whole (default). -1 means don't round.
// locale- override the locale used to determine formatting rules
 
return dojo.number.format(value, dojo.currency._mixInDefaults(options));
}
 
dojo.currency.regexp = function(/*Object?*/options){
//
// summary:
// Builds the regular needed to parse a number
//
// description:
// Returns regular expression with positive and negative match, group and decimal separators
//
// options: object {pattern: String, locale: String, strict: Boolean, places: mixed}
// currency- the ISO4217 currency code, a three letter sequence like "USD"
// See http://en.wikipedia.org/wiki/ISO_4217
// symbol- override currency symbol. Normally, will be looked up in table of supported currencies, and ISO currency code will
// be used if not found. See dojo.i18n.cldr.nls->currency.js
// pattern- override pattern with this string
// locale- override the locale used to determine formatting rules
// strict- strict parsing, false by default
// places- number of decimal places to accept. Default is defined by currency.
return dojo.number.regexp(dojo.currency._mixInDefaults(options)); // String
}
 
dojo.currency.parse = function(/*String*/expression, /*Object?*/options){
//
// summary:
// Convert a properly formatted string to a primitive Number,
// using locale-specific settings.
//
// description:
// Create a Number from a string using a known localized pattern.
// Formatting patterns are chosen appropriate to the locale.
// Formatting patterns are implemented using the syntax described at *URL*
//
// expression: A string representation of a Number
//
// options: object {pattern: string, locale: string, strict: boolean}
// currency- the ISO4217 currency code, a three letter sequence like "USD"
// See http://en.wikipedia.org/wiki/ISO_4217
// symbol- override currency symbol. Normally, will be looked up in table of supported currencies, and ISO currency code will
// be used if not found. See dojo.i18n.cldr.nls->currency.js
// pattern- override pattern with this string
// locale- override the locale used to determine formatting rules
// strict- strict parsing, false by default
// places- number of decimal places to accept. Default is defined by currency.
// fractional- where places are implied by pattern or explicit 'places' parameter, whether to include the fractional portion.
// By default for currencies, it the fractional portion is optional.
return dojo.number.parse(expression, dojo.currency._mixInDefaults(options));
}
 
}
 
if(!dojo._hasResource["dijit.form.NumberTextBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.form.NumberTextBox"] = true;
dojo.provide("dijit.form.NumberTextBox");
 
 
 
 
dojo.declare(
"dijit.form.NumberTextBoxMixin",
null,
{
// summary:
// A mixin for all number textboxes
regExpGen: dojo.number.regexp,
 
format: function(/*Number*/ value, /*Object*/ constraints){
if(isNaN(value)){ return ""; }
return dojo.number.format(value, constraints);
},
 
parse: dojo.number.parse,
 
filter: function(/*Number*/ value){
if(typeof value == "string"){ return this.inherited('filter', arguments); }
return (isNaN(value) ? '' : value);
},
 
value: NaN
}
);
 
dojo.declare(
"dijit.form.NumberTextBox",
[dijit.form.RangeBoundTextBox,dijit.form.NumberTextBoxMixin],
{
// summary:
// A validating, serializable, range-bound text box.
// constraints object: min, max, places
}
);
 
}
 
if(!dojo._hasResource["dijit.form.CurrencyTextBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.form.CurrencyTextBox"] = true;
dojo.provide("dijit.form.CurrencyTextBox");
 
//FIXME: dojo.experimental throws an unreadable exception?
//dojo.experimental("dijit.form.CurrencyTextBox");
 
 
 
 
dojo.declare(
"dijit.form.CurrencyTextBox",
dijit.form.NumberTextBox,
{
// code: String
// the ISO4217 currency code, a three letter sequence like "USD"
// See http://en.wikipedia.org/wiki/ISO_4217
currency: "",
 
regExpGen: dojo.currency.regexp,
format: dojo.currency.format,
parse: dojo.currency.parse,
 
postMixInProperties: function(){
if(this.constraints === dijit.form.ValidationTextBox.prototype.constraints){
// declare a constraints property on 'this' so we don't overwrite the shared default object in 'prototype'
this.constraints = {};
}
this.constraints.currency = this.currency;
dijit.form.CurrencyTextBox.superclass.postMixInProperties.apply(this, arguments);
}
}
);
 
}
 
if(!dojo._hasResource["dojo.cldr.supplemental"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dojo.cldr.supplemental"] = true;
dojo.provide("dojo.cldr.supplemental");
 
 
 
dojo.cldr.supplemental.getFirstDayOfWeek = function(/*String?*/locale){
// summary: Returns a zero-based index for first day of the week
// description:
// Returns a zero-based index for first day of the week, as used by the local (Gregorian) calendar.
// e.g. Sunday (returns 0), or Monday (returns 1)
 
// from http://www.unicode.org/cldr/data/common/supplemental/supplementalData.xml:supplementalData/weekData/firstDay
var firstDay = {/*default is 1=Monday*/
mv:5,
ae:6,af:6,bh:6,dj:6,dz:6,eg:6,er:6,et:6,iq:6,ir:6,jo:6,ke:6,kw:6,lb:6,ly:6,ma:6,om:6,qa:6,sa:6,
sd:6,so:6,tn:6,ye:6,
as:0,au:0,az:0,bw:0,ca:0,cn:0,fo:0,ge:0,gl:0,gu:0,hk:0,ie:0,il:0,is:0,jm:0,jp:0,kg:0,kr:0,la:0,
mh:0,mo:0,mp:0,mt:0,nz:0,ph:0,pk:0,sg:0,th:0,tt:0,tw:0,um:0,us:0,uz:0,vi:0,za:0,zw:0,
et:0,mw:0,ng:0,tj:0,
gb:0,
sy:4
};
 
var country = dojo.cldr.supplemental._region(locale);
var dow = firstDay[country];
return (typeof dow == 'undefined') ? 1 : dow; /*Number*/
};
 
dojo.cldr.supplemental._region = function(/*String?*/locale){
locale = dojo.i18n.normalizeLocale(locale);
var tags = locale.split('-');
var region = tags[1];
if(!region){
// IE often gives language only (#2269)
// Arbitrary mappings of language-only locales to a country:
region = {de:"de", en:"us", es:"es", fi:"fi", fr:"fr", hu:"hu", it:"it",
ja:"jp", ko:"kr", nl:"nl", pt:"br", sv:"se", zh:"cn"}[tags[0]];
}else if(region.length == 4){
// The ISO 3166 country code is usually in the second position, unless a
// 4-letter script is given. See http://www.ietf.org/rfc/rfc4646.txt
region = tags[2];
}
return region;
}
 
dojo.cldr.supplemental.getWeekend = function(/*String?*/locale){
// summary: Returns a hash containing the start and end days of the weekend
// description:
// Returns a hash containing the start and end days of the weekend according to local custom using locale,
// or by default in the user's locale.
// e.g. {start:6, end:0}
 
// from http://www.unicode.org/cldr/data/common/supplemental/supplementalData.xml:supplementalData/weekData/weekend{Start,End}
var weekendStart = {/*default is 6=Saturday*/
eg:5,il:5,sy:5,
'in':0,
ae:4,bh:4,dz:4,iq:4,jo:4,kw:4,lb:4,ly:4,ma:4,om:4,qa:4,sa:4,sd:4,tn:4,ye:4
};
 
var weekendEnd = {/*default is 0=Sunday*/
ae:5,bh:5,dz:5,iq:5,jo:5,kw:5,lb:5,ly:5,ma:5,om:5,qa:5,sa:5,sd:5,tn:5,ye:5,af:5,ir:5,
eg:6,il:6,sy:6
};
 
var country = dojo.cldr.supplemental._region(locale);
var start = weekendStart[country];
var end = weekendEnd[country];
if(typeof start == 'undefined'){start=6;}
if(typeof end == 'undefined'){end=0;}
return {start:start, end:end}; /*Object {start,end}*/
};
 
}
 
if(!dojo._hasResource["dojo.date"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dojo.date"] = true;
dojo.provide("dojo.date");
 
dojo.date.getDaysInMonth = function(/*Date*/dateObject){
// summary:
// Returns the number of days in the month used by dateObject
var month = dateObject.getMonth();
var days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
if(month == 1 && dojo.date.isLeapYear(dateObject)){ return 29; } // Number
return days[month]; // Number
}
 
dojo.date.isLeapYear = function(/*Date*/dateObject){
// summary:
// Determines if the year of the dateObject is a leap year
// description:
// Leap years are years with an additional day YYYY-02-29, where the
// year number is a multiple of four with the following exception: If
// a year is a multiple of 100, then it is only a leap year if it is
// also a multiple of 400. For example, 1900 was not a leap year, but
// 2000 is one.
 
var year = dateObject.getFullYear();
return !(year%400) || (!(year%4) && !!(year%100)); // Boolean
}
 
// FIXME: This is not localized
dojo.date.getTimezoneName = function(/*Date*/dateObject){
// summary:
// Get the user's time zone as provided by the browser
// dateObject:
// Needed because the timezone may vary with time (daylight savings)
// description:
// Try to get time zone info from toString or toLocaleString method of
// the Date object -- UTC offset is not a time zone. See
// http://www.twinsun.com/tz/tz-link.htm Note: results may be
// inconsistent across browsers.
 
var str = dateObject.toString(); // Start looking in toString
var tz = ''; // The result -- return empty string if nothing found
var match;
 
// First look for something in parentheses -- fast lookup, no regex
var pos = str.indexOf('(');
if(pos > -1){
tz = str.substring(++pos, str.indexOf(')'));
}else{
// If at first you don't succeed ...
// If IE knows about the TZ, it appears before the year
// Capital letters or slash before a 4-digit year
// at the end of string
var pat = /([A-Z\/]+) \d{4}$/;
if((match = str.match(pat))){
tz = match[1];
}else{
// Some browsers (e.g. Safari) glue the TZ on the end
// of toLocaleString instead of putting it in toString
str = dateObject.toLocaleString();
// Capital letters or slash -- end of string,
// after space
pat = / ([A-Z\/]+)$/;
if((match = str.match(pat))){
tz = match[1];
}
}
}
 
// Make sure it doesn't somehow end up return AM or PM
return (tz == 'AM' || tz == 'PM') ? '' : tz; // String
}
 
// Utility methods to do arithmetic calculations with Dates
 
dojo.date.compare = function(/*Date*/date1, /*Date?*/date2, /*String?*/portion){
// summary:
// Compare two date objects by date, time, or both.
// description:
// Returns 0 if equal, positive if a > b, else negative.
// date1:
// Date object
// date2:
// Date object. If not specified, the current Date is used.
// portion:
// A string indicating the "date" or "time" portion of a Date object.
// Compares both "date" and "time" by default. One of the following:
// "date", "time", "datetime"
 
// Extra step required in copy for IE - see #3112
date1 = new Date(Number(date1));
date2 = new Date(Number(date2 || new Date()));
 
if(typeof portion !== "undefined"){
if(portion == "date"){
// Ignore times and compare dates.
date1.setHours(0, 0, 0, 0);
date2.setHours(0, 0, 0, 0);
}else if(portion == "time"){
// Ignore dates and compare times.
date1.setFullYear(0, 0, 0);
date2.setFullYear(0, 0, 0);
}
}
if(date1 > date2){ return 1; } // int
if(date1 < date2){ return -1; } // int
return 0; // int
};
 
dojo.date.add = function(/*Date*/date, /*String*/interval, /*int*/amount){
// summary:
// Add to a Date in intervals of different size, from milliseconds to years
// date: Date
// Date object to start with
// interval:
// A string representing the interval. One of the following:
// "year", "month", "day", "hour", "minute", "second",
// "millisecond", "quarter", "week", "weekday"
// amount:
// How much to add to the date.
 
var sum = new Date(Number(date)); // convert to Number before copying to accomodate IE (#3112)
var fixOvershoot = false;
var property = "Date";
 
switch(interval){
case "day":
break;
case "weekday":
//i18n FIXME: assumes Saturday/Sunday weekend, but even this is not standard. There are CLDR entries to localize this.
var days, weeks;
var adj = 0;
// Divide the increment time span into weekspans plus leftover days
// e.g., 8 days is one 5-day weekspan / and two leftover days
// Can't have zero leftover days, so numbers divisible by 5 get
// a days value of 5, and the remaining days make up the number of weeks
var mod = amount % 5;
if(!mod){
days = (amount > 0) ? 5 : -5;
weeks = (amount > 0) ? ((amount-5)/5) : ((amount+5)/5);
}else{
days = mod;
weeks = parseInt(amount/5);
}
// Get weekday value for orig date param
var strt = date.getDay();
// Orig date is Sat / positive incrementer
// Jump over Sun
if(strt == 6 && amount > 0){
adj = 1;
}else if(strt == 0 && amount < 0){
// Orig date is Sun / negative incrementer
// Jump back over Sat
adj = -1;
}
// Get weekday val for the new date
var trgt = strt + days;
// New date is on Sat or Sun
if(trgt == 0 || trgt == 6){
adj = (amount > 0) ? 2 : -2;
}
// Increment by number of weeks plus leftover days plus
// weekend adjustments
amount = 7 * weeks + days + adj;
break;
case "year":
property = "FullYear";
// Keep increment/decrement from 2/29 out of March
fixOvershoot = true;
break;
case "week":
amount *= 7;
break;
case "quarter":
// Naive quarter is just three months
amount *= 3;
// fallthrough...
case "month":
// Reset to last day of month if you overshoot
fixOvershoot = true;
property = "Month";
break;
case "hour":
case "minute":
case "second":
case "millisecond":
property = "UTC" + interval.charAt(0).toUpperCase() + interval.substring(1) + "s";
}
 
if(property){
sum["set"+property](sum["get"+property]()+amount);
}
 
if(fixOvershoot && (sum.getDate() < date.getDate())){
sum.setDate(0);
}
 
return sum; // Date
};
 
dojo.date.difference = function(/*Date*/date1, /*Date?*/date2, /*String?*/interval){
// summary:
// Get the difference in a specific unit of time (e.g., number of
// months, weeks, days, etc.) between two dates, rounded to the
// nearest integer.
// date1:
// Date object
// date2:
// Date object. If not specified, the current Date is used.
// interval:
// A string representing the interval. One of the following:
// "year", "month", "day", "hour", "minute", "second",
// "millisecond", "quarter", "week", "weekday"
// Defaults to "day".
 
date2 = date2 || new Date();
interval = interval || "day";
var yearDiff = date2.getFullYear() - date1.getFullYear();
var delta = 1; // Integer return value
 
switch(interval){
case "quarter":
var m1 = date1.getMonth();
var m2 = date2.getMonth();
// Figure out which quarter the months are in
var q1 = Math.floor(m1/3) + 1;
var q2 = Math.floor(m2/3) + 1;
// Add quarters for any year difference between the dates
q2 += (yearDiff * 4);
delta = q2 - q1;
break;
case "weekday":
var days = Math.round(dojo.date.difference(date1, date2, "day"));
var weeks = parseInt(dojo.date.difference(date1, date2, "week"));
var mod = days % 7;
 
// Even number of weeks
if(mod == 0){
days = weeks*5;
}else{
// Weeks plus spare change (< 7 days)
var adj = 0;
var aDay = date1.getDay();
var bDay = date2.getDay();
 
weeks = parseInt(days/7);
mod = days % 7;
// Mark the date advanced by the number of
// round weeks (may be zero)
var dtMark = new Date(date1);
dtMark.setDate(dtMark.getDate()+(weeks*7));
var dayMark = dtMark.getDay();
 
// Spare change days -- 6 or less
if(days > 0){
switch(true){
// Range starts on Sat
case aDay == 6:
adj = -1;
break;
// Range starts on Sun
case aDay == 0:
adj = 0;
break;
// Range ends on Sat
case bDay == 6:
adj = -1;
break;
// Range ends on Sun
case bDay == 0:
adj = -2;
break;
// Range contains weekend
case (dayMark + mod) > 5:
adj = -2;
}
}else if(days < 0){
switch(true){
// Range starts on Sat
case aDay == 6:
adj = 0;
break;
// Range starts on Sun
case aDay == 0:
adj = 1;
break;
// Range ends on Sat
case bDay == 6:
adj = 2;
break;
// Range ends on Sun
case bDay == 0:
adj = 1;
break;
// Range contains weekend
case (dayMark + mod) < 0:
adj = 2;
}
}
days += adj;
days -= (weeks*2);
}
delta = days;
break;
case "year":
delta = yearDiff;
break;
case "month":
delta = (date2.getMonth() - date1.getMonth()) + (yearDiff * 12);
break;
case "week":
// Truncate instead of rounding
// Don't use Math.floor -- value may be negative
delta = parseInt(dojo.date.difference(date1, date2, "day")/7);
break;
case "day":
delta /= 24;
// fallthrough
case "hour":
delta /= 60;
// fallthrough
case "minute":
delta /= 60;
// fallthrough
case "second":
delta /= 1000;
// fallthrough
case "millisecond":
delta *= date2.getTime() - date1.getTime();
}
 
// Round for fractional values and DST leaps
return Math.round(delta); // Number (integer)
};
 
}
 
if(!dojo._hasResource["dojo.date.locale"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dojo.date.locale"] = true;
dojo.provide("dojo.date.locale");
 
// Localization methods for Date. Honor local customs using locale-dependent dojo.cldr data.
 
 
 
 
 
 
 
// Load the bundles containing localization information for
// names and formats
 
 
//NOTE: Everything in this module assumes Gregorian calendars.
// Other calendars will be implemented in separate modules.
 
(function(){
// Format a pattern without literals
function formatPattern(dateObject, bundle, pattern){
return pattern.replace(/([a-z])\1*/ig, function(match){
var s;
var c = match.charAt(0);
var l = match.length;
var pad;
var widthList = ["abbr", "wide", "narrow"];
switch(c){
case 'G':
s = bundle[(l < 4) ? "eraAbbr" : "eraNames"][dateObject.getFullYear() < 0 ? 0 : 1];
break;
case 'y':
s = dateObject.getFullYear();
switch(l){
case 1:
break;
case 2:
s = String(s); s = s.substr(s.length - 2);
break;
default:
pad = true;
}
break;
case 'Q':
case 'q':
s = Math.ceil((dateObject.getMonth()+1)/3);
// switch(l){
// case 1: case 2:
pad = true;
// break;
// case 3: case 4: // unimplemented
// }
break;
case 'M':
case 'L':
var m = dateObject.getMonth();
var width;
switch(l){
case 1: case 2:
s = m+1; pad = true;
break;
case 3: case 4: case 5:
width = widthList[l-3];
break;
}
if(width){
var type = (c == "L") ? "standalone" : "format";
var prop = ["months",type,width].join("-");
s = bundle[prop][m];
}
break;
case 'w':
var firstDay = 0;
s = dojo.date.locale._getWeekOfYear(dateObject, firstDay); pad = true;
break;
case 'd':
s = dateObject.getDate(); pad = true;
break;
case 'D':
s = dojo.date.locale._getDayOfYear(dateObject); pad = true;
break;
case 'E':
case 'e':
case 'c': // REVIEW: don't see this in the spec?
var d = dateObject.getDay();
var width;
switch(l){
case 1: case 2:
if(c == 'e'){
var first = dojo.cldr.supplemental.getFirstDayOfWeek(options.locale);
d = (d-first+7)%7;
}
if(c != 'c'){
s = d+1; pad = true;
break;
}
// else fallthrough...
case 3: case 4: case 5:
width = widthList[l-3];
break;
}
if(width){
var type = (c == "c") ? "standalone" : "format";
var prop = ["days",type,width].join("-");
s = bundle[prop][d];
}
break;
case 'a':
var timePeriod = (dateObject.getHours() < 12) ? 'am' : 'pm';
s = bundle[timePeriod];
break;
case 'h':
case 'H':
case 'K':
case 'k':
var h = dateObject.getHours();
// strange choices in the date format make it impossible to write this succinctly
switch (c) {
case 'h': // 1-12
s = (h % 12) || 12;
break;
case 'H': // 0-23
s = h;
break;
case 'K': // 0-11
s = (h % 12);
break;
case 'k': // 1-24
s = h || 24;
break;
}
pad = true;
break;
case 'm':
s = dateObject.getMinutes(); pad = true;
break;
case 's':
s = dateObject.getSeconds(); pad = true;
break;
case 'S':
s = Math.round(dateObject.getMilliseconds() * Math.pow(10, l-3));
break;
case 'v': // FIXME: don't know what this is. seems to be same as z?
case 'z':
// We only have one timezone to offer; the one from the browser
s = dojo.date.getTimezoneName(dateObject);
if(s){break;}
l=4;
// fallthrough... use GMT if tz not available
case 'Z':
var offset = dateObject.getTimezoneOffset();
var tz = [
(offset<=0 ? "+" : "-"),
dojo.string.pad(Math.floor(Math.abs(offset)/60), 2),
dojo.string.pad(Math.abs(offset)% 60, 2)
];
if(l==4){
tz.splice(0, 0, "GMT");
tz.splice(3, 0, ":");
}
s = tz.join("");
break;
// case 'Y': case 'u': case 'W': case 'F': case 'g': case 'A':
// console.debug(match+" modifier unimplemented");
default:
throw new Error("dojo.date.locale.format: invalid pattern char: "+pattern);
}
if(pad){ s = dojo.string.pad(s, l); }
return s;
});
}
 
dojo.date.locale.format = function(/*Date*/dateObject, /*Object?*/options){
// summary:
// Format a Date object as a String, using locale-specific settings.
//
// description:
// Create a string from a Date object using a known localized pattern.
// By default, this method formats both date and time from dateObject.
// Formatting patterns are chosen appropriate to the locale. Different
// formatting lengths may be chosen, with "full" used by default.
// Custom patterns may be used or registered with translations using
// the addCustomFormats method.
// Formatting patterns are implemented using the syntax described at
// http://www.unicode.org/reports/tr35/tr35-4.html#Date_Format_Patterns
//
// dateObject:
// the date and/or time to be formatted. If a time only is formatted,
// the values in the year, month, and day fields are irrelevant. The
// opposite is true when formatting only dates.
//
// options: object {selector: string, formatLength: string, datePattern: string, timePattern: string, locale: string}
// selector- choice of 'time','date' (default: date and time)
// formatLength- choice of long, short, medium or full (plus any custom additions). Defaults to 'short'
// datePattern,timePattern- override pattern with this string
// am,pm- override strings for am/pm in times
// locale- override the locale used to determine formatting rules
 
options = options || {};
 
var locale = dojo.i18n.normalizeLocale(options.locale);
var formatLength = options.formatLength || 'short';
var bundle = dojo.date.locale._getGregorianBundle(locale);
var str = [];
var sauce = dojo.hitch(this, formatPattern, dateObject, bundle);
if(options.selector == "year"){
// Special case as this is not yet driven by CLDR data
var year = dateObject.getFullYear();
if(locale.match(/^zh|^ja/)){
year += "\u5E74";
}
return year;
}
if(options.selector != "time"){
var datePattern = options.datePattern || bundle["dateFormat-"+formatLength];
if(datePattern){str.push(_processPattern(datePattern, sauce));}
}
if(options.selector != "date"){
var timePattern = options.timePattern || bundle["timeFormat-"+formatLength];
if(timePattern){str.push(_processPattern(timePattern, sauce));}
}
var result = str.join(" "); //TODO: use locale-specific pattern to assemble date + time
return result; // String
};
 
dojo.date.locale.regexp = function(/*Object?*/options){
// summary:
// Builds the regular needed to parse a localized date
//
// options: object {selector: string, formatLength: string, datePattern: string, timePattern: string, locale: string, strict: boolean}
// selector- choice of 'time', 'date' (default: date and time)
// formatLength- choice of long, short, medium or full (plus any custom additions). Defaults to 'short'
// datePattern,timePattern- override pattern with this string
// locale- override the locale used to determine formatting rules
 
return dojo.date.locale._parseInfo(options).regexp; // String
};
 
dojo.date.locale._parseInfo = function(/*Object?*/options){
options = options || {};
var locale = dojo.i18n.normalizeLocale(options.locale);
var bundle = dojo.date.locale._getGregorianBundle(locale);
var formatLength = options.formatLength || 'short';
var datePattern = options.datePattern || bundle["dateFormat-" + formatLength];
var timePattern = options.timePattern || bundle["timeFormat-" + formatLength];
var pattern;
if(options.selector == 'date'){
pattern = datePattern;
}else if(options.selector == 'time'){
pattern = timePattern;
}else{
pattern = datePattern + ' ' + timePattern; //TODO: use locale-specific pattern to assemble date + time
}
 
var tokens = [];
var re = _processPattern(pattern, dojo.hitch(this, _buildDateTimeRE, tokens, bundle, options));
return {regexp: re, tokens: tokens, bundle: bundle};
};
 
dojo.date.locale.parse = function(/*String*/value, /*Object?*/options){
// summary:
// Convert a properly formatted string to a primitive Date object,
// using locale-specific settings.
//
// description:
// Create a Date object from a string using a known localized pattern.
// By default, this method parses looking for both date and time in the string.
// Formatting patterns are chosen appropriate to the locale. Different
// formatting lengths may be chosen, with "full" used by default.
// Custom patterns may be used or registered with translations using
// the addCustomFormats method.
// Formatting patterns are implemented using the syntax described at
// http://www.unicode.org/reports/tr35/#Date_Format_Patterns
//
// value:
// A string representation of a date
//
// options: object {selector: string, formatLength: string, datePattern: string, timePattern: string, locale: string, strict: boolean}
// selector- choice of 'time', 'date' (default: date and time)
// formatLength- choice of long, short, medium or full (plus any custom additions). Defaults to 'short'
// datePattern,timePattern- override pattern with this string
// am,pm- override strings for am/pm in times
// locale- override the locale used to determine formatting rules
// strict- strict parsing, off by default
 
var info = dojo.date.locale._parseInfo(options);
var tokens = info.tokens, bundle = info.bundle;
var re = new RegExp("^" + info.regexp + "$");
var match = re.exec(value);
if(!match){ return null; } // null
 
var widthList = ['abbr', 'wide', 'narrow'];
//1972 is a leap year. We want to avoid Feb 29 rolling over into Mar 1,
//in the cases where the year is parsed after the month and day.
var result = new Date(1972, 0);
var expected = {};
var amPm = "";
dojo.forEach(match, function(v, i){
if(!i){return;}
var token=tokens[i-1];
var l=token.length;
switch(token.charAt(0)){
case 'y':
if(l != 2){
//interpret year literally, so '5' would be 5 A.D.
result.setFullYear(v);
expected.year = v;
}else{
if(v<100){
v = Number(v);
//choose century to apply, according to a sliding window
//of 80 years before and 20 years after present year
var year = '' + new Date().getFullYear();
var century = year.substring(0, 2) * 100;
var yearPart = Number(year.substring(2, 4));
var cutoff = Math.min(yearPart + 20, 99);
var num = (v < cutoff) ? century + v : century - 100 + v;
result.setFullYear(num);
expected.year = num;
}else{
//we expected 2 digits and got more...
if(options.strict){
return null;
}
//interpret literally, so '150' would be 150 A.D.
//also tolerate '1950', if 'yyyy' input passed to 'yy' format
result.setFullYear(v);
expected.year = v;
}
}
break;
case 'M':
if(l>2){
var months = bundle['months-format-' + widthList[l-3]].concat();
if(!options.strict){
//Tolerate abbreviating period in month part
//Case-insensitive comparison
v = v.replace(".","").toLowerCase();
months = dojo.map(months, function(s){ return s.replace(".","").toLowerCase(); } );
}
v = dojo.indexOf(months, v);
if(v == -1){
// console.debug("dojo.date.locale.parse: Could not parse month name: '" + v + "'.");
return null;
}
}else{
v--;
}
result.setMonth(v);
expected.month = v;
break;
case 'E':
case 'e':
var days = bundle['days-format-' + widthList[l-3]].concat();
if(!options.strict){
//Case-insensitive comparison
v = v.toLowerCase();
days = dojo.map(days, "".toLowerCase);
}
v = dojo.indexOf(days, v);
if(v == -1){
// console.debug("dojo.date.locale.parse: Could not parse weekday name: '" + v + "'.");
return null;
}
 
//TODO: not sure what to actually do with this input,
//in terms of setting something on the Date obj...?
//without more context, can't affect the actual date
//TODO: just validate?
break;
case 'd':
result.setDate(v);
expected.date = v;
break;
case 'D':
//FIXME: need to defer this until after the year is set for leap-year?
result.setMonth(0);
result.setDate(v);
break;
case 'a': //am/pm
var am = options.am || bundle.am;
var pm = options.pm || bundle.pm;
if(!options.strict){
var period = /\./g;
v = v.replace(period,'').toLowerCase();
am = am.replace(period,'').toLowerCase();
pm = pm.replace(period,'').toLowerCase();
}
if(options.strict && v != am && v != pm){
// console.debug("dojo.date.locale.parse: Could not parse am/pm part.");
return null;
}
 
// we might not have seen the hours field yet, so store the state and apply hour change later
amPm = (v == pm) ? 'p' : (v == am) ? 'a' : '';
break;
case 'K': //hour (1-24)
if(v==24){v=0;}
// fallthrough...
case 'h': //hour (1-12)
case 'H': //hour (0-23)
case 'k': //hour (0-11)
//TODO: strict bounds checking, padding
if(v > 23){
// console.debug("dojo.date.locale.parse: Illegal hours value");
return null;
}
 
//in the 12-hour case, adjusting for am/pm requires the 'a' part
//which could come before or after the hour, so we will adjust later
result.setHours(v);
break;
case 'm': //minutes
result.setMinutes(v);
break;
case 's': //seconds
result.setSeconds(v);
break;
case 'S': //milliseconds
result.setMilliseconds(v);
// break;
// case 'w':
//TODO var firstDay = 0;
// default:
//TODO: throw?
// console.debug("dojo.date.locale.parse: unsupported pattern char=" + token.charAt(0));
}
});
 
var hours = result.getHours();
if(amPm === 'p' && hours < 12){
result.setHours(hours + 12); //e.g., 3pm -> 15
}else if(amPm === 'a' && hours == 12){
result.setHours(0); //12am -> 0
}
 
//validate parse date fields versus input date fields
if(expected.year && result.getFullYear() != expected.year){
// console.debug("dojo.date.locale.parse: Parsed year: '" + result.getFullYear() + "' did not match input year: '" + expected.year + "'.");
return null;
}
if(expected.month && result.getMonth() != expected.month){
// console.debug("dojo.date.locale.parse: Parsed month: '" + result.getMonth() + "' did not match input month: '" + expected.month + "'.");
return null;
}
if(expected.date && result.getDate() != expected.date){
// console.debug("dojo.date.locale.parse: Parsed day of month: '" + result.getDate() + "' did not match input day of month: '" + expected.date + "'.");
return null;
}
 
//TODO: implement a getWeekday() method in order to test
//validity of input strings containing 'EEE' or 'EEEE'...
return result; // Date
};
 
function _processPattern(pattern, applyPattern, applyLiteral, applyAll){
//summary: Process a pattern with literals in it
 
// Break up on single quotes, treat every other one as a literal, except '' which becomes '
var identity = function(x){return x;};
applyPattern = applyPattern || identity;
applyLiteral = applyLiteral || identity;
applyAll = applyAll || identity;
 
//split on single quotes (which escape literals in date format strings)
//but preserve escaped single quotes (e.g., o''clock)
var chunks = pattern.match(/(''|[^'])+/g);
var literal = false;
 
dojo.forEach(chunks, function(chunk, i){
if(!chunk){
chunks[i]='';
}else{
chunks[i]=(literal ? applyLiteral : applyPattern)(chunk);
literal = !literal;
}
});
return applyAll(chunks.join(''));
}
 
function _buildDateTimeRE(tokens, bundle, options, pattern){
pattern = dojo.regexp.escapeString(pattern);
if(!options.strict){ pattern = pattern.replace(" a", " ?a"); } // kludge to tolerate no space before am/pm
return pattern.replace(/([a-z])\1*/ig, function(match){
// Build a simple regexp. Avoid captures, which would ruin the tokens list
var s;
var c = match.charAt(0);
var l = match.length;
var p2 = '', p3 = '';
if(options.strict){
if(l > 1){ p2 = '0' + '{'+(l-1)+'}'; }
if(l > 2){ p3 = '0' + '{'+(l-2)+'}'; }
}else{
p2 = '0?'; p3 = '0{0,2}';
}
switch(c){
case 'y':
s = '\\d{2,4}';
break;
case 'M':
s = (l>2) ? '\\S+' : p2+'[1-9]|1[0-2]';
break;
case 'D':
s = p2+'[1-9]|'+p3+'[1-9][0-9]|[12][0-9][0-9]|3[0-5][0-9]|36[0-6]';
break;
case 'd':
s = p2+'[1-9]|[12]\\d|3[01]';
break;
case 'w':
s = p2+'[1-9]|[1-4][0-9]|5[0-3]';
break;
case 'E':
s = '\\S+';
break;
case 'h': //hour (1-12)
s = p2+'[1-9]|1[0-2]';
break;
case 'k': //hour (0-11)
s = p2+'\\d|1[01]';
break;
case 'H': //hour (0-23)
s = p2+'\\d|1\\d|2[0-3]';
break;
case 'K': //hour (1-24)
s = p2+'[1-9]|1\\d|2[0-4]';
break;
case 'm':
case 's':
s = '[0-5]\\d';
break;
case 'S':
s = '\\d{'+l+'}';
break;
case 'a':
var am = options.am || bundle.am || 'AM';
var pm = options.pm || bundle.pm || 'PM';
if(options.strict){
s = am + '|' + pm;
}else{
s = am + '|' + pm;
if(am != am.toLowerCase()){ s += '|' + am.toLowerCase(); }
if(pm != pm.toLowerCase()){ s += '|' + pm.toLowerCase(); }
}
break;
default:
// case 'v':
// case 'z':
// case 'Z':
s = ".*";
// console.debug("parse of date format, pattern=" + pattern);
}
 
if(tokens){ tokens.push(match); }
 
return "(" + s + ")"; // add capture
}).replace(/[\xa0 ]/g, "[\\s\\xa0]"); // normalize whitespace. Need explicit handling of \xa0 for IE.
}
})();
 
(function(){
var _customFormats = [];
dojo.date.locale.addCustomFormats = function(/*String*/packageName, /*String*/bundleName){
// summary:
// Add a reference to a bundle containing localized custom formats to be
// used by date/time formatting and parsing routines.
//
// description:
// The user may add custom localized formats where the bundle has properties following the
// same naming convention used by dojo for the CLDR data: dateFormat-xxxx / timeFormat-xxxx
// The pattern string should match the format used by the CLDR.
// See dojo.date.format for details.
// The resources must be loaded by dojo.requireLocalization() prior to use
 
_customFormats.push({pkg:packageName,name:bundleName});
};
 
dojo.date.locale._getGregorianBundle = function(/*String*/locale){
var gregorian = {};
dojo.forEach(_customFormats, function(desc){
var bundle = dojo.i18n.getLocalization(desc.pkg, desc.name, locale);
gregorian = dojo.mixin(gregorian, bundle);
}, this);
return gregorian; /*Object*/
};
})();
 
dojo.date.locale.addCustomFormats("dojo.cldr","gregorian");
 
dojo.date.locale.getNames = function(/*String*/item, /*String*/type, /*String?*/use, /*String?*/locale){
// summary:
// Used to get localized strings from dojo.cldr for day or month names.
//
// item: 'months' || 'days'
// type: 'wide' || 'narrow' || 'abbr' (e.g. "Monday", "Mon", or "M" respectively, in English)
// use: 'standAlone' || 'format' (default)
// locale: override locale used to find the names
 
var label;
var lookup = dojo.date.locale._getGregorianBundle(locale);
var props = [item, use, type];
if(use == 'standAlone'){
label = lookup[props.join('-')];
}
props[1] = 'format';
 
// return by copy so changes won't be made accidentally to the in-memory model
return (label || lookup[props.join('-')]).concat(); /*Array*/
};
 
dojo.date.locale.isWeekend = function(/*Date?*/dateObject, /*String?*/locale){
// summary:
// Determines if the date falls on a weekend, according to local custom.
 
var weekend = dojo.cldr.supplemental.getWeekend(locale);
var day = (dateObject || new Date()).getDay();
if(weekend.end < weekend.start){
weekend.end += 7;
if(day < weekend.start){ day += 7; }
}
return day >= weekend.start && day <= weekend.end; // Boolean
};
 
// These are used only by format and strftime. Do they need to be public? Which module should they go in?
 
dojo.date.locale._getDayOfYear = function(/*Date*/dateObject){
// summary: gets the day of the year as represented by dateObject
return dojo.date.difference(new Date(dateObject.getFullYear(), 0, 1), dateObject) + 1; // Number
};
 
dojo.date.locale._getWeekOfYear = function(/*Date*/dateObject, /*Number*/firstDayOfWeek){
if(arguments.length == 1){ firstDayOfWeek = 0; } // Sunday
 
var firstDayOfYear = new Date(dateObject.getFullYear(), 0, 1).getDay();
var adj = (firstDayOfYear - firstDayOfWeek + 7) % 7;
var week = Math.floor((dojo.date.locale._getDayOfYear(dateObject) + adj - 1) / 7);
 
// if year starts on the specified day, start counting weeks at 1
if(firstDayOfYear == firstDayOfWeek){ week++; }
 
return week; // Number
};
 
}
 
if(!dojo._hasResource["dijit._Calendar"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit._Calendar"] = true;
dojo.provide("dijit._Calendar");
 
 
 
 
 
 
 
 
dojo.declare(
"dijit._Calendar",
[dijit._Widget, dijit._Templated],
{
/*
summary:
A simple GUI for choosing a date in the context of a monthly calendar.
 
description:
This widget is used internally by other widgets and is not accessible
as a standalone widget.
This widget can't be used in a form because it doesn't serialize the date to an
<input> field. For a form element, use DateTextBox instead.
 
Note that the parser takes all dates attributes passed in the `RFC 3339` format:
http://www.faqs.org/rfcs/rfc3339.html (2005-06-30T08:05:00-07:00)
so that they are serializable and locale-independent.
 
usage:
var calendar = new dijit._Calendar({}, dojo.byId("calendarNode"));
-or-
<div dojoType="dijit._Calendar"></div>
*/
templateString:"<table cellspacing=\"0\" cellpadding=\"0\" class=\"dijitCalendarContainer\">\n\t<thead>\n\t\t<tr class=\"dijitReset dijitCalendarMonthContainer\" valign=\"top\">\n\t\t\t<th class='dijitReset' dojoAttachPoint=\"decrementMonth\">\n\t\t\t\t<span class=\"dijitInline dijitCalendarIncrementControl dijitCalendarDecrease\"><span dojoAttachPoint=\"decreaseArrowNode\" class=\"dijitA11ySideArrow dijitCalendarIncrementControl dijitCalendarDecreaseInner\">-</span></span>\n\t\t\t</th>\n\t\t\t<th class='dijitReset' colspan=\"5\">\n\t\t\t\t<div dojoAttachPoint=\"monthLabelSpacer\" class=\"dijitCalendarMonthLabelSpacer\"></div>\n\t\t\t\t<div dojoAttachPoint=\"monthLabelNode\" class=\"dijitCalendarMonth\"></div>\n\t\t\t</th>\n\t\t\t<th class='dijitReset' dojoAttachPoint=\"incrementMonth\">\n\t\t\t\t<div class=\"dijitInline dijitCalendarIncrementControl dijitCalendarIncrease\"><span dojoAttachPoint=\"increaseArrowNode\" class=\"dijitA11ySideArrow dijitCalendarIncrementControl dijitCalendarIncreaseInner\">+</span></div>\n\t\t\t</th>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<th class=\"dijitReset dijitCalendarDayLabelTemplate\"><span class=\"dijitCalendarDayLabel\"></span></th>\n\t\t</tr>\n\t</thead>\n\t<tbody dojoAttachEvent=\"onclick: _onDayClick\" class=\"dijitReset dijitCalendarBodyContainer\">\n\t\t<tr class=\"dijitReset dijitCalendarWeekTemplate\">\n\t\t\t<td class=\"dijitReset dijitCalendarDateTemplate\"><span class=\"dijitCalendarDateLabel\"></span></td>\n\t\t</tr>\n\t</tbody>\n\t<tfoot class=\"dijitReset dijitCalendarYearContainer\">\n\t\t<tr>\n\t\t\t<td class='dijitReset' valign=\"top\" colspan=\"7\">\n\t\t\t\t<h3 class=\"dijitCalendarYearLabel\">\n\t\t\t\t\t<span dojoAttachPoint=\"previousYearLabelNode\" class=\"dijitInline dijitCalendarPreviousYear\"></span>\n\t\t\t\t\t<span dojoAttachPoint=\"currentYearLabelNode\" class=\"dijitInline dijitCalendarSelectedYear\"></span>\n\t\t\t\t\t<span dojoAttachPoint=\"nextYearLabelNode\" class=\"dijitInline dijitCalendarNextYear\"></span>\n\t\t\t\t</h3>\n\t\t\t</td>\n\t\t</tr>\n\t</tfoot>\n</table>\t\n",
 
// value: Date
// the currently selected Date
value: new Date(),
 
// dayWidth: String
// How to represent the days of the week in the calendar header. See dojo.date.locale
dayWidth: "narrow",
 
setValue: function(/*Date*/ value){
// summary: set the current date and update the UI. If the date is disabled, the selection will
// not change, but the display will change to the corresponding month.
if(!this.value || dojo.date.compare(value, this.value)){
value = new Date(value);
this.displayMonth = new Date(value);
if(!this.isDisabledDate(value, this.lang)){
this.value = value;
this.value.setHours(0,0,0,0);
this.onChange(this.value);
}
this._populateGrid();
}
},
 
_setText: function(node, text){
while(node.firstChild){
node.removeChild(node.firstChild);
}
node.appendChild(document.createTextNode(text));
},
 
_populateGrid: function(){
var month = this.displayMonth;
month.setDate(1);
var firstDay = month.getDay();
var daysInMonth = dojo.date.getDaysInMonth(month);
var daysInPreviousMonth = dojo.date.getDaysInMonth(dojo.date.add(month, "month", -1));
var today = new Date();
var selected = this.value;
 
var dayOffset = dojo.cldr.supplemental.getFirstDayOfWeek(this.lang);
if(dayOffset > firstDay){ dayOffset -= 7; }
 
// Iterate through dates in the calendar and fill in date numbers and style info
dojo.query(".dijitCalendarDateTemplate", this.domNode).forEach(function(template, i){
i += dayOffset;
var date = new Date(month);
var number, clazz = "dijitCalendar", adj = 0;
 
if(i < firstDay){
number = daysInPreviousMonth - firstDay + i + 1;
adj = -1;
clazz += "Previous";
}else if(i >= (firstDay + daysInMonth)){
number = i - firstDay - daysInMonth + 1;
adj = 1;
clazz += "Next";
}else{
number = i - firstDay + 1;
clazz += "Current";
}
 
if(adj){
date = dojo.date.add(date, "month", adj);
}
date.setDate(number);
 
if(!dojo.date.compare(date, today, "date")){
clazz = "dijitCalendarCurrentDate " + clazz;
}
 
if(!dojo.date.compare(date, selected, "date")){
clazz = "dijitCalendarSelectedDate " + clazz;
}
 
if(this.isDisabledDate(date, this.lang)){
clazz = "dijitCalendarDisabledDate " + clazz;
}
 
template.className = clazz + "Month dijitCalendarDateTemplate";
template.dijitDateValue = date.valueOf();
var label = dojo.query(".dijitCalendarDateLabel", template)[0];
this._setText(label, date.getDate());
}, this);
 
// Fill in localized month name
var monthNames = dojo.date.locale.getNames('months', 'wide', 'standAlone', this.lang);
this._setText(this.monthLabelNode, monthNames[month.getMonth()]);
 
// Fill in localized prev/current/next years
var y = month.getFullYear() - 1;
dojo.forEach(["previous", "current", "next"], function(name){
this._setText(this[name+"YearLabelNode"],
dojo.date.locale.format(new Date(y++, 0), {selector:'year', locale:this.lang}));
}, this);
 
// Set up repeating mouse behavior
var _this = this;
var typematic = function(nodeProp, dateProp, adj){
dijit.typematic.addMouseListener(_this[nodeProp], _this, function(count){
if(count >= 0){ _this._adjustDisplay(dateProp, adj); }
}, 0.8, 500);
};
typematic("incrementMonth", "month", 1);
typematic("decrementMonth", "month", -1);
typematic("nextYearLabelNode", "year", 1);
typematic("previousYearLabelNode", "year", -1);
},
 
postCreate: function(){
dijit._Calendar.superclass.postCreate.apply(this);
 
var cloneClass = dojo.hitch(this, function(clazz, n){
var template = dojo.query(clazz, this.domNode)[0];
for(var i=0; i<n; i++){
template.parentNode.appendChild(template.cloneNode(true));
}
});
 
// clone the day label and calendar day templates 6 times to make 7 columns
cloneClass(".dijitCalendarDayLabelTemplate", 6);
cloneClass(".dijitCalendarDateTemplate", 6);
 
// now make 6 week rows
cloneClass(".dijitCalendarWeekTemplate", 5);
 
// insert localized day names in the header
var dayNames = dojo.date.locale.getNames('days', this.dayWidth, 'standAlone', this.lang);
var dayOffset = dojo.cldr.supplemental.getFirstDayOfWeek(this.lang);
dojo.query(".dijitCalendarDayLabel", this.domNode).forEach(function(label, i){
this._setText(label, dayNames[(i + dayOffset) % 7]);
}, this);
 
// Fill in spacer element with all the month names (invisible) so that the maximum width will affect layout
var monthNames = dojo.date.locale.getNames('months', 'wide', 'standAlone', this.lang);
dojo.forEach(monthNames, function(name){
var monthSpacer = dojo.doc.createElement("div");
this._setText(monthSpacer, name);
this.monthLabelSpacer.appendChild(monthSpacer);
}, this);
 
this.value = null;
this.setValue(new Date());
},
 
_adjustDisplay: function(/*String*/part, /*int*/amount){
this.displayMonth = dojo.date.add(this.displayMonth, part, amount);
this._populateGrid();
},
 
_onDayClick: function(/*Event*/evt){
var node = evt.target;
dojo.stopEvent(evt);
while(!node.dijitDateValue){
node = node.parentNode;
}
if(!dojo.hasClass(node, "dijitCalendarDisabledDate")){
this.setValue(node.dijitDateValue);
this.onValueSelected(this.value);
}
},
 
onValueSelected: function(/*Date*/date){
//summary: a date cell was selected. It may be the same as the previous value.
},
 
onChange: function(/*Date*/date){
//summary: called only when the selected date has changed
},
 
isDisabledDate: function(/*Date*/dateObject, /*String?*/locale){
// summary:
// May be overridden to disable certain dates in the calendar e.g. isDisabledDate=dojo.date.locale.isWeekend
return false; // Boolean
}
}
);
 
}
 
if(!dojo._hasResource["dijit._TimePicker"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit._TimePicker"] = true;
dojo.provide("dijit._TimePicker");
 
 
 
 
dojo.declare("dijit._TimePicker",
[dijit._Widget, dijit._Templated],
{
// summary:
// A graphical time picker that TimeTextBox pops up
// It is functionally modeled after the Java applet at http://java.arcadevillage.com/applets/timepica.htm
// See ticket #599
 
templateString:"<div id=\"widget_${id}\" class=\"dijitMenu\"\n ><div dojoAttachPoint=\"upArrow\" class=\"dijitButtonNode\"><span class=\"dijitTimePickerA11yText\">&#9650;</span></div\n ><div dojoAttachPoint=\"timeMenu,focusNode\" dojoAttachEvent=\"onclick:_onOptionSelected,onmouseover,onmouseout\"></div\n ><div dojoAttachPoint=\"downArrow\" class=\"dijitButtonNode\"><span class=\"dijitTimePickerA11yText\">&#9660;</span></div\n></div>\n",
baseClass: "dijitTimePicker",
 
// clickableIncrement: String
// ISO-8601 string representing the amount by which
// every clickable element in the time picker increases
// Set in non-Zulu time, without a time zone
// Example: "T00:15:00" creates 15 minute increments
// Must divide visibleIncrement evenly
clickableIncrement: "T00:15:00",
 
// visibleIncrement: String
// ISO-8601 string representing the amount by which
// every element with a visible time in the time picker increases
// Set in non Zulu time, without a time zone
// Example: "T01:00:00" creates text in every 1 hour increment
visibleIncrement: "T01:00:00",
 
// visibleRange: String
// ISO-8601 string representing the range of this TimePicker
// The TimePicker will only display times in this range
// Example: "T05:00:00" displays 5 hours of options
visibleRange: "T05:00:00",
 
// value: String
// Date to display.
// Defaults to current time and date.
// Can be a Date object or an ISO-8601 string
// If you specify the GMT time zone ("-01:00"),
// the time will be converted to the local time in the local time zone.
// Otherwise, the time is considered to be in the local time zone.
// If you specify the date and isDate is true, the date is used.
// Example: if your local time zone is GMT -05:00,
// "T10:00:00" becomes "T10:00:00-05:00" (considered to be local time),
// "T10:00:00-01:00" becomes "T06:00:00-05:00" (4 hour difference),
// "T10:00:00Z" becomes "T05:00:00-05:00" (5 hour difference between Zulu and local time)
// "yyyy-mm-ddThh:mm:ss" is the format to set the date and time
// Example: "2007-06-01T09:00:00"
value: new Date(),
 
_visibleIncrement:2,
_clickableIncrement:1,
_totalIncrements:10,
constraints:{},
 
serialize: dojo.date.stamp.toISOString,
 
setValue:function(/*Date*/ date, /*Boolean*/ priority){
// summary:
// Set the value of the TimePicker
// Redraws the TimePicker around the new date
 
//dijit._TimePicker.superclass.setValue.apply(this, arguments);
this.value=date;
this._showText();
},
 
isDisabledDate: function(/*Date*/dateObject, /*String?*/locale){
// summary:
// May be overridden to disable certain dates in the TimePicker e.g. isDisabledDate=dojo.date.locale.isWeekend
return false; // Boolean
},
 
_showText:function(){
this.timeMenu.innerHTML="";
var fromIso = dojo.date.stamp.fromISOString;
this._clickableIncrementDate=fromIso(this.clickableIncrement);
this._visibleIncrementDate=fromIso(this.visibleIncrement);
this._visibleRangeDate=fromIso(this.visibleRange);
// get the value of the increments and the range in seconds (since 00:00:00) to find out how many divs to create
var sinceMidnight = function(/*Date*/ date){
return date.getHours()*60*60+date.getMinutes()*60+date.getSeconds();
};
 
var clickableIncrementSeconds = sinceMidnight(this._clickableIncrementDate);
var visibleIncrementSeconds = sinceMidnight(this._visibleIncrementDate);
var visibleRangeSeconds = sinceMidnight(this._visibleRangeDate);
 
// round reference date to previous visible increment
var time = this.value.getTime();
this._refDate = new Date(time - time % (visibleIncrementSeconds*1000));
 
// assume clickable increment is the smallest unit
this._clickableIncrement=1;
// divide the visible range by the clickable increment to get the number of divs to create
// example: 10:00:00/00:15:00 -> display 40 divs
this._totalIncrements=visibleRangeSeconds/clickableIncrementSeconds;
// divide the visible increments by the clickable increments to get how often to display the time inline
// example: 01:00:00/00:15:00 -> display the time every 4 divs
this._visibleIncrement=visibleIncrementSeconds/clickableIncrementSeconds;
for(var i=-this._totalIncrements/2; i<=this._totalIncrements/2; i+=this._clickableIncrement){
var div=this._createOption(i);
this.timeMenu.appendChild(div);
}
// TODO:
// I commented this out because it
// causes problems for a TimeTextBox in a Dialog, or as the editor of an InlineEditBox,
// because the timeMenu node isn't visible yet. -- Bill (Bug #????)
// dijit.focus(this.timeMenu);
},
 
postCreate:function(){
// instantiate constraints
if(this.constraints===dijit._TimePicker.prototype.constraints){
this.constraints={};
}
// dojo.date.locale needs the lang in the constraints as locale
if(!this.constraints.locale){
this.constraints.locale=this.lang;
}
 
// assign typematic mouse listeners to the arrow buttons
this.connect(this.timeMenu, dojo.isIE ? "onmousewheel" : 'DOMMouseScroll', "_mouseWheeled");
dijit.typematic.addMouseListener(this.upArrow,this,this._onArrowUp, 0.8, 500);
dijit.typematic.addMouseListener(this.downArrow,this,this._onArrowDown, 0.8, 500);
//dijit.typematic.addListener(this.upArrow,this.timeMenu, {keyCode:dojo.keys.UP_ARROW,ctrlKey:false,altKey:false,shiftKey:false}, this, "_onArrowUp", 0.8, 500);
//dijit.typematic.addListener(this.downArrow, this.timeMenu, {keyCode:dojo.keys.DOWN_ARROW,ctrlKey:false,altKey:false,shiftKey:false}, this, "_onArrowDown", 0.8,500);
 
this.inherited("postCreate", arguments);
this.setValue(this.value);
},
 
_createOption:function(/*Number*/ index){
// summary: creates a clickable time option
var div=document.createElement("div");
var date = (div.date = new Date(this._refDate));
div.index=index;
var incrementDate = this._clickableIncrementDate;
date.setHours(date.getHours()+incrementDate.getHours()*index,
date.getMinutes()+incrementDate.getMinutes()*index,
date.getSeconds()+incrementDate.getSeconds()*index);
 
var innerDiv = document.createElement('div');
dojo.addClass(div,this.baseClass+"Item");
dojo.addClass(innerDiv,this.baseClass+"ItemInner");
innerDiv.innerHTML=dojo.date.locale.format(date, this.constraints);
div.appendChild(innerDiv);
 
if(index%this._visibleIncrement<1 && index%this._visibleIncrement>-1){
dojo.addClass(div, this.baseClass+"Marker");
}else if(index%this._clickableIncrement==0){
dojo.addClass(div, this.baseClass+"Tick");
}
if(this.isDisabledDate(date)){
// set disabled
dojo.addClass(div, this.baseClass+"ItemDisabled");
}
if(dojo.date.compare(this.value, date, this.constraints.selector)==0){
div.selected=true;
dojo.addClass(div, this.baseClass+"ItemSelected");
}
return div;
},
 
_onOptionSelected:function(/*Object*/ tgt){
var tdate = tgt.target.date || tgt.target.parentNode.date;
if(!tdate||this.isDisabledDate(tdate)){return;}
this.setValue(tdate);
this.onValueSelected(tdate);
},
 
onValueSelected:function(value){
},
 
onmouseover:function(/*Event*/ e){
var tgr = (e.target.parentNode === this.timeMenu) ? e.target : e.target.parentNode;
this._highlighted_option=tgr;
dojo.addClass(tgr, this.baseClass+"ItemHover");
},
 
onmouseout:function(/*Event*/ e){
var tgr = (e.target.parentNode === this.timeMenu) ? e.target : e.target.parentNode;
if(this._highlighted_option===tgr){
dojo.removeClass(tgr, this.baseClass+"ItemHover");
}
},
 
_mouseWheeled:function(/*Event*/e){
// summary: handle the mouse wheel listener
dojo.stopEvent(e);
// we're not _measuring_ the scroll amount, just direction
var scrollAmount = (dojo.isIE ? e.wheelDelta : -e.detail);
this[(scrollAmount>0 ? "_onArrowUp" : "_onArrowDown")](); // yes, we're making a new dom node every time you mousewheel, or click
},
 
_onArrowUp:function(){
// summary: remove the bottom time and add one to the top
var index=this.timeMenu.childNodes[0].index-1;
var div=this._createOption(index);
this.timeMenu.removeChild(this.timeMenu.childNodes[this.timeMenu.childNodes.length-1]);
this.timeMenu.insertBefore(div, this.timeMenu.childNodes[0]);
},
 
_onArrowDown:function(){
// summary: remove the top time and add one to the bottom
var index=this.timeMenu.childNodes[this.timeMenu.childNodes.length-1].index+1;
var div=this._createOption(index);
this.timeMenu.removeChild(this.timeMenu.childNodes[0]);
this.timeMenu.appendChild(div);
}
}
);
 
}
 
if(!dojo._hasResource["dijit.form.TimeTextBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.form.TimeTextBox"] = true;
dojo.provide("dijit.form.TimeTextBox");
 
 
 
 
 
 
 
dojo.declare(
"dijit.form.TimeTextBox",
dijit.form.RangeBoundTextBox,
{
// summary:
// A validating, serializable, range-bound date text box.
 
// constraints object: min, max
regExpGen: dojo.date.locale.regexp,
compare: dojo.date.compare,
format: function(/*Date*/ value, /*Object*/ constraints){
if(!value || value.toString() == this._invalid){ return null; }
return dojo.date.locale.format(value, constraints);
},
parse: dojo.date.locale.parse,
serialize: dojo.date.stamp.toISOString,
 
value: new Date(""), // NaN
_invalid: (new Date("")).toString(), // NaN
 
_popupClass: "dijit._TimePicker",
 
postMixInProperties: function(){
//dijit.form.RangeBoundTextBox.prototype.postMixInProperties.apply(this, arguments);
this.inherited("postMixInProperties",arguments);
var constraints = this.constraints;
constraints.selector = 'time';
if(typeof constraints.min == "string"){ constraints.min = dojo.date.stamp.fromISOString(constraints.min); }
if(typeof constraints.max == "string"){ constraints.max = dojo.date.stamp.fromISOString(constraints.max); }
},
 
_onFocus: function(/*Event*/ evt){
// summary: open the TimePicker popup
this._open();
},
 
setValue: function(/*Date*/ value, /*Boolean, optional*/ priorityChange){
// summary:
// Sets the date on this textbox
this.inherited('setValue', arguments);
if(this._picker){
// #3948: fix blank date on popup only
if(!value || value.toString() == this._invalid){value=new Date();}
this._picker.setValue(value);
}
},
 
_open: function(){
// summary:
// opens the TimePicker, and sets the onValueSelected value
 
if(this.disabled){return;}
 
var self = this;
 
if(!this._picker){
var popupProto=dojo.getObject(this._popupClass, false);
this._picker = new popupProto({
onValueSelected: function(value){
 
self.focus(); // focus the textbox before the popup closes to avoid reopening the popup
setTimeout(dojo.hitch(self, "_close"), 1); // allow focus time to take
 
// this will cause InlineEditBox and other handlers to do stuff so make sure it's last
dijit.form.TimeTextBox.superclass.setValue.call(self, value, true);
},
lang: this.lang,
constraints:this.constraints,
isDisabledDate: function(/*Date*/ date){
// summary:
// disables dates outside of the min/max of the TimeTextBox
return self.constraints && (dojo.date.compare(self.constraints.min,date) > 0 || dojo.date.compare(self.constraints.max,date) < 0);
}
});
this._picker.setValue(this.getValue() || new Date());
}
if(!this._opened){
dijit.popup.open({
parent: this,
popup: this._picker,
around: this.domNode,
onCancel: dojo.hitch(this, this._close),
onClose: function(){ self._opened=false; }
});
this._opened=true;
}
dojo.marginBox(this._picker.domNode,{ w:this.domNode.offsetWidth });
},
 
_close: function(){
if(this._opened){
dijit.popup.close(this._picker);
this._opened=false;
}
},
 
_onBlur: function(){
// summary: called magically when focus has shifted away from this widget and it's dropdown
this._close();
this.inherited('_onBlur', arguments);
// don't focus on <input>. the user has explicitly focused on something else.
},
 
getDisplayedValue:function(){
return this.textbox.value;
},
 
setDisplayedValue:function(/*String*/ value){
this.textbox.value=value;
}
}
);
 
}
 
if(!dojo._hasResource["dijit.form.DateTextBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.form.DateTextBox"] = true;
dojo.provide("dijit.form.DateTextBox");
 
 
 
 
dojo.declare(
"dijit.form.DateTextBox",
dijit.form.TimeTextBox,
{
// summary:
// A validating, serializable, range-bound date text box.
 
_popupClass: "dijit._Calendar",
 
postMixInProperties: function(){
this.inherited('postMixInProperties', arguments);
this.constraints.selector = 'date';
}
}
);
 
}
 
if(!dojo._hasResource["dijit.form.FilteringSelect"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.form.FilteringSelect"] = true;
dojo.provide("dijit.form.FilteringSelect");
 
 
 
dojo.declare(
"dijit.form.FilteringSelect",
[dijit.form.MappedTextBox, dijit.form.ComboBoxMixin],
{
/*
* summary
* Enhanced version of HTML's <select> tag.
*
* Similar features:
* - There is a drop down list of possible values.
* - You can only enter a value from the drop down list. (You can't enter an arbitrary value.)
* - The value submitted with the form is the hidden value (ex: CA),
* not the displayed value a.k.a. label (ex: California)
*
* Enhancements over plain HTML version:
* - If you type in some text then it will filter down the list of possible values in the drop down list.
* - List can be specified either as a static list or via a javascript function (that can get the list from a server)
*/
 
// searchAttr: String
// Searches pattern match against this field
 
// labelAttr: String
// Optional. The text that actually appears in the drop down.
// If not specified, the searchAttr text is used instead.
labelAttr: "",
 
// labelType: String
// "html" or "text"
labelType: "text",
 
_isvalid:true,
 
isValid:function(){
return this._isvalid;
},
 
_callbackSetLabel: function(/*Array*/ result, /*Object*/ dataObject, /*Boolean, optional*/ priorityChange){
// summary
// Callback function that dynamically sets the label of the ComboBox
 
// setValue does a synchronous lookup,
// so it calls _callbackSetLabel directly,
// and so does not pass dataObject
// dataObject==null means do not test the lastQuery, just continue
if(dataObject&&dataObject.query[this.searchAttr]!=this._lastQuery){return;}
if(!result.length){
//#3268: do nothing on bad input
//this._setValue("", "");
//#3285: change CSS to indicate error
if(!this._hasFocus){ this.valueNode.value=""; }
dijit.form.TextBox.superclass.setValue.call(this, undefined, !this._hasFocus);
this._isvalid=false;
this.validate(this._hasFocus);
}else{
this._setValueFromItem(result[0], priorityChange);
}
},
 
_openResultList: function(/*Object*/ results, /*Object*/ dataObject){
// #3285: tap into search callback to see if user's query resembles a match
if(dataObject.query[this.searchAttr]!=this._lastQuery){return;}
this._isvalid=results.length!=0;
this.validate(true);
dijit.form.ComboBoxMixin.prototype._openResultList.apply(this, arguments);
},
 
getValue:function(){
// don't get the textbox value but rather the previously set hidden value
return this.valueNode.value;
},
 
_getValueField:function(){
// used for option tag selects
return "value";
},
 
_setValue:function(/*String*/ value, /*String*/ displayedValue, /*Boolean, optional*/ priorityChange){
this.valueNode.value = value;
dijit.form.FilteringSelect.superclass.setValue.call(this, value, priorityChange, displayedValue);
this._lastDisplayedValue = displayedValue;
},
 
setValue: function(/*String*/ value, /*Boolean, optional*/ priorityChange){
// summary
// Sets the value of the select.
// Also sets the label to the corresponding value by reverse lookup.
 
//#3347: fetchItemByIdentity if no keyAttr specified
var self=this;
var handleFetchByIdentity = function(item, priorityChange){
if(item){
if(self.store.isItemLoaded(item)){
self._callbackSetLabel([item], undefined, priorityChange);
}else{
self.store.loadItem({item:item, onItem: function(result, dataObject){self._callbackSetLabel(result, dataObject, priorityChange)}});
}
}else{
self._isvalid=false;
// prevent errors from Tooltip not being created yet
self.validate(false);
}
}
this.store.fetchItemByIdentity({identity: value, onItem: function(item){handleFetchByIdentity(item, priorityChange)}});
},
 
_setValueFromItem: function(/*item*/ item, /*Boolean, optional*/ priorityChange){
// summary
// Set the displayed valued in the input box, based on a selected item.
// Users shouldn't call this function; they should be calling setDisplayedValue() instead
this._isvalid=true;
this._setValue(this.store.getIdentity(item), this.labelFunc(item, this.store), priorityChange);
},
 
labelFunc: function(/*item*/ item, /*dojo.data.store*/ store){
// summary: Event handler called when the label changes
// returns the label that the ComboBox should display
return store.getValue(item, this.searchAttr);
},
 
onkeyup: function(/*Event*/ evt){
// summary: internal function
// FilteringSelect needs to wait for the complete label before committing to a reverse lookup
//this.setDisplayedValue(this.textbox.value);
},
 
_doSelect: function(/*Event*/ tgt){
// summary:
// ComboBox's menu callback function
// FilteringSelect overrides this to set both the visible and hidden value from the information stored in the menu
this.item = tgt.item;
this._setValueFromItem(tgt.item, true);
},
 
setDisplayedValue:function(/*String*/ label){
// summary:
// Set textbox to display label
// Also performs reverse lookup to set the hidden value
// Used in InlineEditBox
 
if(this.store){
var query={};
this._lastQuery=query[this.searchAttr]=label;
// if the label is not valid, the callback will never set it,
// so the last valid value will get the warning textbox
// set the textbox value now so that the impending warning will make sense to the user
this.textbox.value=label;
this._lastDisplayedValue=label;
this.store.fetch({query:query, queryOptions:{ignoreCase:this.ignoreCase, deep:true}, onComplete: dojo.hitch(this, this._callbackSetLabel)});
}
},
 
_getMenuLabelFromItem:function(/*Item*/ item){
// internal function to help ComboBoxMenu figure out what to display
if(this.labelAttr){return {html:this.labelType=="html", label:this.store.getValue(item, this.labelAttr)};}
else{
// because this function is called by ComboBoxMenu, this.inherited tries to find the superclass of ComboBoxMenu
return dijit.form.ComboBoxMixin.prototype._getMenuLabelFromItem.apply(this, arguments);
}
},
 
postMixInProperties: function(){
dijit.form.ComboBoxMixin.prototype.postMixInProperties.apply(this, arguments);
dijit.form.MappedTextBox.prototype.postMixInProperties.apply(this, arguments);
}
}
);
 
}
 
if(!dojo._hasResource["dijit.form._Spinner"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.form._Spinner"] = true;
dojo.provide("dijit.form._Spinner");
 
 
 
dojo.declare(
"dijit.form._Spinner",
dijit.form.RangeBoundTextBox,
{
 
// summary: Mixin for validation widgets with a spinner
// description: This class basically (conceptually) extends dijit.form.ValidationTextBox.
// It modifies the template to have up/down arrows, and provides related handling code.
 
// defaultTimeout: Number
// number of milliseconds before a held key or button becomes typematic
defaultTimeout: 500,
 
// timeoutChangeRate: Number
// fraction of time used to change the typematic timer between events
// 1.0 means that each typematic event fires at defaultTimeout intervals
// < 1.0 means that each typematic event fires at an increasing faster rate
timeoutChangeRate: 0.90,
 
// smallDelta: Number
// adjust the value by this much when spinning using the arrow keys/buttons
smallDelta: 1,
// largeDelta: Number
// adjust the value by this much when spinning using the PgUp/Dn keys
largeDelta: 10,
 
templateString:"<table class=\"dijit dijitReset dijitInlineTable dijitLeft\" cellspacing=\"0\" cellpadding=\"0\"\n\tid=\"widget_${id}\" name=\"${name}\"\n\tdojoAttachEvent=\"onmouseenter:_onMouse,onmouseleave:_onMouse,onkeypress:_onKeyPress\"\n\twaiRole=\"presentation\"\n\t><tr class=\"dijitReset\"\n\t\t><td rowspan=\"2\" class=\"dijitReset dijitStretch dijitInputField\" width=\"100%\"\n\t\t\t><input dojoAttachPoint=\"textbox,focusNode\" type=\"${type}\" dojoAttachEvent=\"onfocus,onkeyup\"\n\t\t\t\twaiRole=\"spinbutton\" autocomplete=\"off\" name=\"${name}\"\n\t\t></td\n\t\t><td rowspan=\"2\" class=\"dijitReset dijitValidationIconField\" width=\"0%\" \n\t\t\t><div dojoAttachPoint='iconNode' class='dijitValidationIcon'></div\n\t\t></td\n\t\t><td class=\"dijitReset dijitRight dijitButtonNode dijitUpArrowButton\" width=\"0%\"\n\t\t\t\tdojoAttachPoint=\"upArrowNode\"\n\t\t\t\tdojoAttachEvent=\"onmousedown:_handleUpArrowEvent,onmouseup:_handleUpArrowEvent,onmouseover:_handleUpArrowEvent,onmouseout:_handleUpArrowEvent\"\n\t\t\t\tstateModifier=\"UpArrow\"\n\t\t\t><div class=\"dijitA11yUpArrow\">&#9650;</div\n\t\t></td\n\t></tr\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset dijitRight dijitButtonNode dijitDownArrowButton\" width=\"0%\"\n\t\t\t\tdojoAttachPoint=\"downArrowNode\"\n\t\t\t\tdojoAttachEvent=\"onmousedown:_handleDownArrowEvent,onmouseup:_handleDownArrowEvent,onmouseover:_handleDownArrowEvent,onmouseout:_handleDownArrowEvent\"\n\t\t\t\tstateModifier=\"DownArrow\"\n\t\t\t><div class=\"dijitA11yDownArrow\">&#9660;</div\n\t\t></td\n\t></tr\n></table>\n\n",
baseClass: "dijitSpinner",
 
adjust: function(/* Object */ val, /*Number*/ delta){
// summary: user replaceable function used to adjust a primitive value(Number/Date/...) by the delta amount specified
// the val is adjusted in a way that makes sense to the object type
return val;
},
 
_handleUpArrowEvent : function(/*Event*/ e){
this._onMouse(e, this.upArrowNode);
},
 
_handleDownArrowEvent : function(/*Event*/ e){
this._onMouse(e, this.downArrowNode);
},
 
 
_arrowPressed: function(/*Node*/ nodePressed, /*Number*/ direction){
if(this.disabled){ return; }
dojo.addClass(nodePressed, "dijitSpinnerButtonActive");
this.setValue(this.adjust(this.getValue(), direction*this.smallDelta), false);
},
 
_arrowReleased: function(/*Node*/ node){
if(this.disabled){ return; }
this._wheelTimer = null;
dijit.focus(this.textbox);
dojo.removeClass(node, "dijitSpinnerButtonActive");
},
 
_typematicCallback: function(/*Number*/ count, /*DOMNode*/ node, /*Event*/ evt){
if(node == this.textbox){ node = (evt.keyCode == dojo.keys.UP_ARROW) ? this.upArrowNode : this.downArrowNode; }
if(count == -1){ this._arrowReleased(node); }
else{ this._arrowPressed(node, (node == this.upArrowNode) ? 1 : -1); }
},
 
_wheelTimer: null,
_mouseWheeled: function(/*Event*/ evt){
dojo.stopEvent(evt);
var scrollAmount = 0;
if(typeof evt.wheelDelta == 'number'){ // IE
scrollAmount = evt.wheelDelta;
}else if(typeof evt.detail == 'number'){ // Mozilla+Firefox
scrollAmount = -evt.detail;
}
if(scrollAmount > 0){
var node = this.upArrowNode;
var dir = +1;
}else if(scrollAmount < 0){
var node = this.downArrowNode;
var dir = -1;
}else{ return; }
this._arrowPressed(node, dir);
if(this._wheelTimer != null){
clearTimeout(this._wheelTimer);
}
var _this = this;
this._wheelTimer = setTimeout(function(){_this._arrowReleased(node);}, 50);
},
 
postCreate: function(){
this.inherited('postCreate', arguments);
 
// extra listeners
this.connect(this.textbox, dojo.isIE ? "onmousewheel" : 'DOMMouseScroll', "_mouseWheeled");
dijit.typematic.addListener(this.upArrowNode, this.textbox, {keyCode:dojo.keys.UP_ARROW,ctrlKey:false,altKey:false,shiftKey:false}, this, "_typematicCallback", this.timeoutChangeRate, this.defaultTimeout);
dijit.typematic.addListener(this.downArrowNode, this.textbox, {keyCode:dojo.keys.DOWN_ARROW,ctrlKey:false,altKey:false,shiftKey:false}, this, "_typematicCallback", this.timeoutChangeRate, this.defaultTimeout);
}
});
 
}
 
if(!dojo._hasResource["dijit.form.NumberSpinner"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.form.NumberSpinner"] = true;
dojo.provide("dijit.form.NumberSpinner");
 
 
 
 
dojo.declare(
"dijit.form.NumberSpinner",
[dijit.form._Spinner, dijit.form.NumberTextBoxMixin],
{
// summary: Number Spinner
// description: This widget is the same as NumberTextBox but with up/down arrows added
 
required: true,
 
adjust: function(/* Object */ val, /*Number*/ delta){
// summary: change Number val by the given amount
var newval = val+delta;
if(isNaN(val) || isNaN(newval)){ return val; }
if((typeof this.constraints.max == "number") && (newval > this.constraints.max)){
newval = this.constraints.max;
}
if((typeof this.constraints.min == "number") && (newval < this.constraints.min)){
newval = this.constraints.min;
}
return newval;
}
});
 
}
 
if(!dojo._hasResource["dijit.form.Slider"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.form.Slider"] = true;
dojo.provide("dijit.form.Slider");
 
 
 
 
 
 
 
dojo.declare(
"dijit.form.HorizontalSlider",
[dijit.form._FormWidget, dijit._Container],
{
// summary
// A form widget that allows one to select a value with a horizontally draggable image
 
templateString:"<table class=\"dijit dijitReset dijitSlider\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\" rules=\"none\"\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset\" colspan=\"2\"></td\n\t\t><td dojoAttachPoint=\"containerNode,topDecoration\" class=\"dijitReset\" style=\"text-align:center;width:100%;\"></td\n\t\t><td class=\"dijitReset\" colspan=\"2\"></td\n\t></tr\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset dijitSliderButtonContainer dijitHorizontalSliderButtonContainer\"\n\t\t\t><div class=\"dijitHorizontalSliderDecrementIcon\" tabIndex=\"-1\" style=\"display:none\" dojoAttachPoint=\"decrementButton\" dojoAttachEvent=\"onclick: decrement\"><span class=\"dijitSliderButtonInner\">-</span></div\n\t\t></td\n\t\t><td class=\"dijitReset\"\n\t\t\t><div class=\"dijitSliderBar dijitSliderBumper dijitHorizontalSliderBumper dijitSliderLeftBumper dijitHorizontalSliderLeftBumper\"></div\n\t\t></td\n\t\t><td class=\"dijitReset\"\n\t\t\t><input dojoAttachPoint=\"valueNode\" type=\"hidden\" name=\"${name}\"\n\t\t\t/><div style=\"position:relative;\" dojoAttachPoint=\"sliderBarContainer\"\n\t\t\t\t><div dojoAttachPoint=\"progressBar\" class=\"dijitSliderBar dijitHorizontalSliderBar dijitSliderProgressBar dijitHorizontalSliderProgressBar\" dojoAttachEvent=\"onclick:_onBarClick\"\n\t\t\t\t\t><div dojoAttachPoint=\"sliderHandle,focusNode\" class=\"dijitSliderMoveable dijitHorizontalSliderMoveable\" dojoAttachEvent=\"onkeypress:_onKeyPress,onclick:_onHandleClick\" waiRole=\"slider\" valuemin=\"${minimum}\" valuemax=\"${maximum}\"\n\t\t\t\t\t\t><div class=\"dijitSliderImageHandle dijitHorizontalSliderImageHandle\"></div\n\t\t\t\t\t></div\n\t\t\t\t></div\n\t\t\t\t><div dojoAttachPoint=\"remainingBar\" class=\"dijitSliderBar dijitHorizontalSliderBar dijitSliderRemainingBar dijitHorizontalSliderRemainingBar\" dojoAttachEvent=\"onclick:_onBarClick\"></div\n\t\t\t></div\n\t\t></td\n\t\t><td class=\"dijitReset\"\n\t\t\t><div class=\"dijitSliderBar dijitSliderBumper dijitHorizontalSliderBumper dijitSliderRightBumper dijitHorizontalSliderRightBumper\"></div\n\t\t></td\n\t\t><td class=\"dijitReset dijitSliderButtonContainer dijitHorizontalSliderButtonContainer\" style=\"right:0px;\"\n\t\t\t><div class=\"dijitHorizontalSliderIncrementIcon\" tabIndex=\"-1\" style=\"display:none\" dojoAttachPoint=\"incrementButton\" dojoAttachEvent=\"onclick: increment\"><span class=\"dijitSliderButtonInner\">+</span></div\n\t\t></td\n\t></tr\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset\" colspan=\"2\"></td\n\t\t><td dojoAttachPoint=\"containerNode,bottomDecoration\" class=\"dijitReset\" style=\"text-align:center;\"></td\n\t\t><td class=\"dijitReset\" colspan=\"2\"></td\n\t></tr\n></table>\n",
value: 0,
 
// showButtons: boolean
// Show increment/decrement buttons at the ends of the slider?
showButtons: true,
 
// minimum:: integer
// The minimum value allowed.
minimum: 0,
 
// maximum: integer
// The maximum allowed value.
maximum: 100,
 
// discreteValues: integer
// The maximum allowed values dispersed evenly between minimum and maximum (inclusive).
discreteValues: Infinity,
 
// pageIncrement: integer
// The amount of change with shift+arrow
pageIncrement: 2,
 
// clickSelect: boolean
// If clicking the progress bar changes the value or not
clickSelect: true,
 
widgetsInTemplate: true,
 
attributeMap: dojo.mixin(dojo.clone(dijit.form._FormWidget.prototype.attributeMap),
{id:"", name:"valueNode"}),
 
baseClass: "dijitSlider",
 
_mousePixelCoord: "pageX",
_pixelCount: "w",
_startingPixelCoord: "x",
_startingPixelCount: "l",
_handleOffsetCoord: "left",
_progressPixelSize: "width",
_upsideDown: false,
 
_onKeyPress: function(/*Event*/ e){
if(this.disabled || e.altKey || e.ctrlKey){ return; }
switch(e.keyCode){
case dojo.keys.HOME:
this.setValue(this.minimum, false);
break;
case dojo.keys.END:
this.setValue(this.maximum, false);
break;
case dojo.keys.UP_ARROW:
case (this._isReversed() ? dojo.keys.LEFT_ARROW : dojo.keys.RIGHT_ARROW):
case dojo.keys.PAGE_UP:
this.increment(e);
break;
case dojo.keys.DOWN_ARROW:
case (this._isReversed() ? dojo.keys.RIGHT_ARROW : dojo.keys.LEFT_ARROW):
case dojo.keys.PAGE_DOWN:
this.decrement(e);
break;
default:
this.inherited("_onKeyPress", arguments);
return;
}
dojo.stopEvent(e);
},
 
_onHandleClick: function(e){
if(this.disabled){ return; }
if(!dojo.isIE){
// make sure you get focus when dragging the handle
// (but don't do on IE because it causes a flicker on mouse up (due to blur then focus)
dijit.focus(this.sliderHandle);
}
dojo.stopEvent(e);
},
_isReversed: function() {
return !(this._upsideDown || this.isLeftToRight());
},
 
_onBarClick: function(e){
if(this.disabled || !this.clickSelect){ return; }
dijit.focus(this.sliderHandle);
dojo.stopEvent(e);
var abspos = dojo.coords(this.sliderBarContainer, true);
var pixelValue = e[this._mousePixelCoord] - abspos[this._startingPixelCoord];
this._setPixelValue(this._isReversed() || this._upsideDown ? (abspos[this._pixelCount] - pixelValue) : pixelValue, abspos[this._pixelCount], true);
},
 
_setPixelValue: function(/*Number*/ pixelValue, /*Number*/ maxPixels, /*Boolean, optional*/ priorityChange){
if(this.disabled){ return; }
pixelValue = pixelValue < 0 ? 0 : maxPixels < pixelValue ? maxPixels : pixelValue;
var count = this.discreteValues;
if(count <= 1 || count == Infinity){ count = maxPixels; }
count--;
var pixelsPerValue = maxPixels / count;
var wholeIncrements = Math.round(pixelValue / pixelsPerValue);
this.setValue((this.maximum-this.minimum)*wholeIncrements/count + this.minimum, priorityChange);
},
 
setValue: function(/*Number*/ value, /*Boolean, optional*/ priorityChange){
this.valueNode.value = this.value = value;
this.inherited('setValue', arguments);
var percent = (value - this.minimum) / (this.maximum - this.minimum);
this.progressBar.style[this._progressPixelSize] = (percent*100) + "%";
this.remainingBar.style[this._progressPixelSize] = ((1-percent)*100) + "%";
},
 
_bumpValue: function(signedChange){
if(this.disabled){ return; }
var s = dojo.getComputedStyle(this.sliderBarContainer);
var c = dojo._getContentBox(this.sliderBarContainer, s);
var count = this.discreteValues;
if(count <= 1 || count == Infinity){ count = c[this._pixelCount]; }
count--;
var value = (this.value - this.minimum) * count / (this.maximum - this.minimum) + signedChange;
if(value < 0){ value = 0; }
if(value > count){ value = count; }
value = value * (this.maximum - this.minimum) / count + this.minimum;
this.setValue(value, true);
},
 
decrement: function(e){
// summary
// decrement slider by 1 unit
this._bumpValue(e.keyCode == dojo.keys.PAGE_DOWN?-this.pageIncrement:-1);
},
 
increment: function(e){
// summary
// increment slider by 1 unit
this._bumpValue(e.keyCode == dojo.keys.PAGE_UP?this.pageIncrement:1);
},
 
_mouseWheeled: function(/*Event*/ evt){
dojo.stopEvent(evt);
var scrollAmount = 0;
if(typeof evt.wheelDelta == 'number'){ // IE
scrollAmount = evt.wheelDelta;
}else if(typeof evt.detail == 'number'){ // Mozilla+Firefox
scrollAmount = -evt.detail;
}
if(scrollAmount > 0){
this.increment(evt);
}else if(scrollAmount < 0){
this.decrement(evt);
}
},
 
startup: function(){
dojo.forEach(this.getChildren(), function(child){
if(this[child.container] != this.containerNode){
this[child.container].appendChild(child.domNode);
}
}, this);
},
 
_onBlur: function(){
dijit.form.HorizontalSlider.superclass.setValue.call(this, this.value, true);
},
 
postCreate: function(){
if(this.showButtons){
this.incrementButton.style.display="";
this.decrementButton.style.display="";
}
this.connect(this.domNode, dojo.isIE ? "onmousewheel" : 'DOMMouseScroll', "_mouseWheeled");
 
// define a custom constructor for a SliderMover that points back to me
var _self = this;
var mover = function(){
dijit.form._SliderMover.apply(this, arguments);
this.widget = _self;
};
dojo.extend(mover, dijit.form._SliderMover.prototype);
 
this._movable = new dojo.dnd.Moveable(this.sliderHandle, {mover: mover});
this.inherited('postCreate', arguments);
},
 
destroy: function(){
this._movable.destroy();
this.inherited('destroy', arguments);
}
});
 
dojo.declare(
"dijit.form.VerticalSlider",
dijit.form.HorizontalSlider,
{
// summary
// A form widget that allows one to select a value with a vertically draggable image
 
templateString:"<table class=\"dijitReset dijitSlider\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\" rules=\"none\"\n><tbody class=\"dijitReset\"\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset\"></td\n\t\t><td class=\"dijitReset dijitSliderButtonContainer dijitVerticalSliderButtonContainer\"\n\t\t\t><div class=\"dijitVerticalSliderIncrementIcon\" tabIndex=\"-1\" style=\"display:none\" dojoAttachPoint=\"incrementButton\" dojoAttachEvent=\"onclick: increment\"><span class=\"dijitSliderButtonInner\">+</span></div\n\t\t></td\n\t\t><td class=\"dijitReset\"></td\n\t></tr\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset\"></td\n\t\t><td class=\"dijitReset\"\n\t\t\t><center><div class=\"dijitSliderBar dijitSliderBumper dijitVerticalSliderBumper dijitSliderTopBumper dijitVerticalSliderTopBumper\"></div></center\n\t\t></td\n\t\t><td class=\"dijitReset\"></td\n\t></tr\n\t><tr class=\"dijitReset\"\n\t\t><td dojoAttachPoint=\"leftDecoration\" class=\"dijitReset\" style=\"text-align:center;height:100%;\"></td\n\t\t><td class=\"dijitReset\" style=\"height:100%;\"\n\t\t\t><input dojoAttachPoint=\"valueNode\" type=\"hidden\" name=\"${name}\"\n\t\t\t/><center style=\"position:relative;height:100%;\" dojoAttachPoint=\"sliderBarContainer\"\n\t\t\t\t><div dojoAttachPoint=\"remainingBar\" class=\"dijitSliderBar dijitVerticalSliderBar dijitSliderRemainingBar dijitVerticalSliderRemainingBar\" dojoAttachEvent=\"onclick:_onBarClick\"></div\n\t\t\t\t><div dojoAttachPoint=\"progressBar\" class=\"dijitSliderBar dijitVerticalSliderBar dijitSliderProgressBar dijitVerticalSliderProgressBar\" dojoAttachEvent=\"onclick:_onBarClick\"\n\t\t\t\t\t><div dojoAttachPoint=\"sliderHandle,focusNode\" class=\"dijitSliderMoveable\" dojoAttachEvent=\"onkeypress:_onKeyPress,onclick:_onHandleClick\" style=\"vertical-align:top;\" waiRole=\"slider\" valuemin=\"${minimum}\" valuemax=\"${maximum}\"\n\t\t\t\t\t\t><div class=\"dijitSliderImageHandle dijitVerticalSliderImageHandle\"></div\n\t\t\t\t\t></div\n\t\t\t\t></div\n\t\t\t></center\n\t\t></td\n\t\t><td dojoAttachPoint=\"containerNode,rightDecoration\" class=\"dijitReset\" style=\"text-align:center;height:100%;\"></td\n\t></tr\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset\"></td\n\t\t><td class=\"dijitReset\"\n\t\t\t><center><div class=\"dijitSliderBar dijitSliderBumper dijitVerticalSliderBumper dijitSliderBottomBumper dijitVerticalSliderBottomBumper\"></div></center\n\t\t></td\n\t\t><td class=\"dijitReset\"></td\n\t></tr\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset\"></td\n\t\t><td class=\"dijitReset dijitSliderButtonContainer dijitVerticalSliderButtonContainer\"\n\t\t\t><div class=\"dijitVerticalSliderDecrementIcon\" tabIndex=\"-1\" style=\"display:none\" dojoAttachPoint=\"decrementButton\" dojoAttachEvent=\"onclick: decrement\"><span class=\"dijitSliderButtonInner\">-</span></div\n\t\t></td\n\t\t><td class=\"dijitReset\"></td\n\t></tr\n></tbody></table>\n",
_mousePixelCoord: "pageY",
_pixelCount: "h",
_startingPixelCoord: "y",
_startingPixelCount: "t",
_handleOffsetCoord: "top",
_progressPixelSize: "height",
_upsideDown: true
});
 
dojo.declare("dijit.form._SliderMover",
dojo.dnd.Mover,
{
onMouseMove: function(e){
var widget = this.widget;
var c = this.constraintBox;
if(!c){
var container = widget.sliderBarContainer;
var s = dojo.getComputedStyle(container);
var c = dojo._getContentBox(container, s);
c[widget._startingPixelCount] = 0;
this.constraintBox = c;
}
var m = this.marginBox;
var pixelValue = widget._isReversed() ?
e[widget._mousePixelCoord] - dojo._abs(widget.sliderBarContainer).x :
m[widget._startingPixelCount] + e[widget._mousePixelCoord];
dojo.hitch(widget, "_setPixelValue")(widget._isReversed() || widget._upsideDown? (c[widget._pixelCount]-pixelValue) : pixelValue, c[widget._pixelCount]);
},
destroy: function(e){
var widget = this.widget;
widget.setValue(widget.value, true);
dojo.dnd.Mover.prototype.destroy.call(this);
}
});
 
 
dojo.declare("dijit.form.HorizontalRule", [dijit._Widget, dijit._Templated],
{
// Summary:
// Create hash marks for the Horizontal slider
templateString: '<div class="RuleContainer HorizontalRuleContainer"></div>',
 
// count: Integer
// Number of hash marks to generate
count: 3,
 
// container: Node
// If this is a child widget, connect it to this parent node
container: "containerNode",
 
// ruleStyle: String
// CSS style to apply to individual hash marks
ruleStyle: "",
 
_positionPrefix: '<div class="RuleMark HorizontalRuleMark" style="left:',
_positionSuffix: '%;',
_suffix: '"></div>',
 
_genHTML: function(pos, ndx){
return this._positionPrefix + pos + this._positionSuffix + this.ruleStyle + this._suffix;
},
_isHorizontal: true,
 
postCreate: function(){
if(this.count==1){
var innerHTML = this._genHTML(50, 0);
}else{
var interval = 100 / (this.count-1);
if(!this._isHorizontal || this.isLeftToRight()){
var innerHTML = this._genHTML(0, 0);
for(var i=1; i < this.count-1; i++){
innerHTML += this._genHTML(interval*i, i);
}
innerHTML += this._genHTML(100, this.count-1);
}else{
var innerHTML = this._genHTML(100, 0);
for(var i=1; i < this.count-1; i++){
innerHTML += this._genHTML(100-interval*i, i);
}
innerHTML += this._genHTML(0, this.count-1);
}
}
this.domNode.innerHTML = innerHTML;
}
});
 
dojo.declare("dijit.form.VerticalRule", dijit.form.HorizontalRule,
{
// Summary:
// Create hash marks for the Vertical slider
templateString: '<div class="RuleContainer VerticalRuleContainer"></div>',
_positionPrefix: '<div class="RuleMark VerticalRuleMark" style="top:',
_isHorizontal: false
});
 
dojo.declare("dijit.form.HorizontalRuleLabels", dijit.form.HorizontalRule,
{
// Summary:
// Create labels for the Horizontal slider
templateString: '<div class="RuleContainer HorizontalRuleContainer"></div>',
 
// labelStyle: String
// CSS style to apply to individual text labels
labelStyle: "",
 
// labels: Array
// Array of text labels to render - evenly spaced from left-to-right or bottom-to-top
labels: [],
 
// numericMargin: Integer
// Number of generated numeric labels that should be rendered as '' on the ends when labels[] are not specified
numericMargin: 0,
 
// numericMinimum: Integer
// Leftmost label value for generated numeric labels when labels[] are not specified
minimum: 0,
 
// numericMaximum: Integer
// Rightmost label value for generated numeric labels when labels[] are not specified
maximum: 1,
 
// constraints: object
// pattern, places, lang, et al (see dojo.number) for generated numeric labels when labels[] are not specified
constraints: {pattern:"#%"},
 
_positionPrefix: '<div class="RuleLabelContainer HorizontalRuleLabelContainer" style="left:',
_labelPrefix: '"><span class="RuleLabel HorizontalRuleLabel">',
_suffix: '</span></div>',
 
_calcPosition: function(pos){
return pos;
},
 
_genHTML: function(pos, ndx){
return this._positionPrefix + this._calcPosition(pos) + this._positionSuffix + this.labelStyle + this._labelPrefix + this.labels[ndx] + this._suffix;
},
 
getLabels: function(){
// summary: user replaceable function to return the labels array
 
// if the labels array was not specified directly, then see if <li> children were
var labels = this.labels;
if(!labels.length){
// for markup creation, labels are specified as child elements
labels = dojo.query("> li", this.srcNodeRef).map(function(node){
return String(node.innerHTML);
});
}
this.srcNodeRef.innerHTML = '';
// if the labels were not specified directly and not as <li> children, then calculate numeric labels
if(!labels.length && this.count > 1){
var start = this.minimum;
var inc = (this.maximum - start) / (this.count-1);
for (var i=0; i < this.count; i++){
labels.push((i<this.numericMargin||i>=(this.count-this.numericMargin))? '' : dojo.number.format(start, this.constraints));
start += inc;
}
}
return labels;
},
 
postMixInProperties: function(){
this.inherited('postMixInProperties', arguments);
this.labels = this.getLabels();
this.count = this.labels.length;
}
});
 
dojo.declare("dijit.form.VerticalRuleLabels", dijit.form.HorizontalRuleLabels,
{
// Summary:
// Create labels for the Vertical slider
templateString: '<div class="RuleContainer VerticalRuleContainer"></div>',
 
_positionPrefix: '<div class="RuleLabelContainer VerticalRuleLabelContainer" style="top:',
_labelPrefix: '"><span class="RuleLabel VerticalRuleLabel">',
 
_calcPosition: function(pos){
return 100-pos;
},
_isHorizontal: false
});
 
}
 
if(!dojo._hasResource["dijit.form.Textarea"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.form.Textarea"] = true;
dojo.provide("dijit.form.Textarea");
 
 
 
 
 
dojo.declare(
"dijit.form.Textarea",
dijit.form._FormWidget,
{
// summary
// A textarea that resizes vertically to contain the data.
// Takes nearly all the parameters (name, value, etc.) that a vanilla textarea takes.
// Cols is not supported and the width should be specified with style width.
// Rows is not supported since this widget adjusts the height.
// usage:
// <textarea dojoType="dijit.form.TextArea">...</textarea>
 
attributeMap: dojo.mixin(dojo.clone(dijit.form._FormWidget.prototype.attributeMap),
{style:"styleNode", 'class':"styleNode"}),
 
templateString: (dojo.isIE || dojo.isSafari || dojo.isMozilla) ?
((dojo.isIE || dojo.isSafari) ? '<fieldset id="${id}" class="dijitInline dijitInputField dijitTextArea" dojoAttachPoint="styleNode" waiRole="presentation"><div dojoAttachPoint="editNode,focusNode,eventNode" dojoAttachEvent="onpaste:_changing,oncut:_changing" waiRole="textarea" style="text-decoration:none;_padding-bottom:16px;display:block;overflow:auto;" contentEditable="true"></div>'
: '<span id="${id}" class="dijitReset">'+
'<iframe src="javascript:<html><head><title>${_iframeEditTitle}</title></head><body><script>var _postCreate=window.frameElement?window.frameElement.postCreate:null;if(_postCreate)_postCreate();</script></body></html>"'+
' dojoAttachPoint="iframe,styleNode" dojoAttachEvent="onblur:_onIframeBlur" class="dijitInline dijitInputField dijitTextArea"></iframe>')
+ '<textarea name="${name}" value="${value}" dojoAttachPoint="formValueNode" style="display:none;"></textarea>'
+ ((dojo.isIE || dojo.isSafari) ? '</fieldset>':'</span>')
: '<textarea id="${id}" name="${name}" value="${value}" dojoAttachPoint="formValueNode,editNode,focusNode,styleNode" class="dijitInputField dijitTextArea"></textarea>',
 
focus: function(){
// summary: Received focus, needed for the InlineEditBox widget
if(!this.disabled){
this._changing(); // set initial height
}
if(dojo.isMozilla){
dijit.focus(this.iframe);
}else{
dijit.focus(this.focusNode);
}
},
 
setValue: function(/*String*/ value, /*Boolean, optional*/ priorityChange){
var editNode = this.editNode;
if(typeof value == "string"){
editNode.innerHTML = ""; // wipe out old nodes
if(value.split){
var _this=this;
var isFirst = true;
dojo.forEach(value.split("\n"), function(line){
if(isFirst){ isFirst = false; }
else {
editNode.appendChild(document.createElement("BR")); // preserve line breaks
}
editNode.appendChild(document.createTextNode(line)); // use text nodes so that imbedded tags can be edited
});
}else{
editNode.appendChild(document.createTextNode(value));
}
}else{
// blah<BR>blah --> blah\nblah
// <P>blah</P><P>blah</P> --> blah\nblah
// <DIV>blah</DIV><DIV>blah</DIV> --> blah\nblah
// &amp;&lt;&gt; -->&< >
value = editNode.innerHTML;
if(this.iframe){ // strip sizeNode
value = value.replace(/<div><\/div>\r?\n?$/i,"");
}
value = value.replace(/\s*\r?\n|^\s+|\s+$|&nbsp;/g,"").replace(/>\s+</g,"><").replace(/<\/(p|div)>$|^<(p|div)[^>]*>/gi,"").replace(/([^>])<div>/g,"$1\n").replace(/<\/p>\s*<p[^>]*>|<br[^>]*>/gi,"\n").replace(/<[^>]*>/g,"").replace(/&amp;/gi,"\&").replace(/&lt;/gi,"<").replace(/&gt;/gi,">");
}
this.value = this.formValueNode.value = value;
if(this.iframe){
var sizeNode = document.createElement('div');
editNode.appendChild(sizeNode);
var newHeight = sizeNode.offsetTop;
if(editNode.scrollWidth > editNode.clientWidth){ newHeight+=16; } // scrollbar space needed?
if(this.lastHeight != newHeight){ // cache size so that we don't get a resize event because of a resize event
if(newHeight == 0){ newHeight = 16; } // height = 0 causes the browser to not set scrollHeight
dojo.contentBox(this.iframe, {h: newHeight});
this.lastHeight = newHeight;
}
editNode.removeChild(sizeNode);
}
dijit.form.Textarea.superclass.setValue.call(this, this.getValue(), priorityChange);
},
 
getValue: function(){
return this.formValueNode.value.replace(/\r/g,"");
},
 
postMixInProperties: function(){
dijit.form.Textarea.superclass.postMixInProperties.apply(this,arguments);
// don't let the source text be converted to a DOM structure since we just want raw text
if(this.srcNodeRef && this.srcNodeRef.innerHTML != ""){
this.value = this.srcNodeRef.innerHTML;
this.srcNodeRef.innerHTML = "";
}
if((!this.value || this.value == "") && this.srcNodeRef && this.srcNodeRef.value){
this.value = this.srcNodeRef.value;
}
if(!this.value){ this.value = ""; }
this.value = this.value.replace(/\r\n/g,"\n").replace(/&gt;/g,">").replace(/&lt;/g,"<").replace(/&amp;/g,"&");
if(dojo.isMozilla){
// In the case of Firefox an iframe is used and when the text gets focus,
// focus is fired from the document object. There isn't a way to put a
// waiRole on the document object and as a result screen readers don't
// announce the role. As a result screen reader users are lost.
//
// An additional problem is that the browser gives the document object a
// very cryptic accessible name, e.g.
// wysiwyg://13/http://archive.dojotoolkit.org/nightly/dojotoolkit/dijit/tests/form/test_InlineEditBox.html
// When focus is fired from the document object, the screen reader speaks
// the accessible name. The cyptic accessile name is confusing.
//
// A workaround for both of these problems is to give the iframe's
// document a title, the name of which is similar to a role name, i.e.
// "edit area". This will be used as the accessible name which will replace
// the cryptic name and will also convey the role information to the user.
// Because it is read directly to the user, the string must be localized.
// In addition, since a <label> element can not be associated with an iframe, if
// this control has a label, insert the text into the title as well.
var _nlsResources = dojo.i18n.getLocalization("dijit", "Textarea");
this._iframeEditTitle = _nlsResources.iframeEditTitle;
this._iframeFocusTitle = _nlsResources.iframeFocusTitle;
var label=dojo.query('label[for="'+this.id+'"]');
if(label.length){
this._iframeEditTitle = label[0].innerHTML + " " + this._iframeEditTitle;
}
var body = this.focusNode = this.editNode = document.createElement('BODY');
body.style.margin="0px";
body.style.padding="0px";
body.style.border="0px";
}
},
 
postCreate: function(){
if(dojo.isIE || dojo.isSafari){
this.domNode.style.overflowY = 'hidden';
}else if(dojo.isMozilla){
var w = this.iframe.contentWindow;
try { // #4715: peeking at the title can throw a security exception during iframe setup
var title = this.iframe.contentDocument.title;
} catch(e) { var title = ''; }
if(!w || !title){
this.iframe.postCreate = dojo.hitch(this, this.postCreate);
return;
}
var d = w.document;
d.getElementsByTagName('HTML')[0].replaceChild(this.editNode, d.getElementsByTagName('BODY')[0]);
if(!this.isLeftToRight()){
d.getElementsByTagName('HTML')[0].dir = "rtl";
}
this.iframe.style.overflowY = 'hidden';
this.eventNode = d;
// this.connect won't destroy this handler cleanly since its on the iframe's window object
// resize is a method of window, not document
w.addEventListener("resize", dojo.hitch(this, this._changed), false); // resize is only on the window object
}else{
this.focusNode = this.domNode;
}
if(this.eventNode){
this.connect(this.eventNode, "keypress", this._onKeyPress);
this.connect(this.eventNode, "mousemove", this._changed);
this.connect(this.eventNode, "focus", this._focused);
this.connect(this.eventNode, "blur", this._blurred);
}
if(this.editNode){
this.connect(this.editNode, "change", this._changed); // needed for mouse paste events per #3479
}
this.inherited('postCreate', arguments);
},
 
// event handlers, you can over-ride these in your own subclasses
_focused: function(e){
dojo.addClass(this.iframe||this.domNode, "dijitInputFieldFocused");
this._changed(e);
},
 
_blurred: function(e){
dojo.removeClass(this.iframe||this.domNode, "dijitInputFieldFocused");
this._changed(e, true);
},
 
_onIframeBlur: function(){
// Reset the title back to "edit area".
this.iframe.contentDocument.title = this._iframeEditTitle;
},
 
_onKeyPress: function(e){
if(e.keyCode == dojo.keys.TAB && !e.shiftKey && !e.ctrlKey && !e.altKey && this.iframe){
// Pressing the tab key in the iframe (with designMode on) will cause the
// entry of a tab character so we have to trap that here. Since we don't
// know the next focusable object we put focus on the iframe and then the
// user has to press tab again (which then does the expected thing).
// A problem with that is that the screen reader user hears "edit area"
// announced twice which causes confusion. By setting the
// contentDocument's title to "edit area frame" the confusion should be
// eliminated.
this.iframe.contentDocument.title = this._iframeFocusTitle;
// Place focus on the iframe. A subsequent tab or shift tab will put focus
// on the correct control.
// Note: Can't use this.focus() because that results in a call to
// dijit.focus and if that receives an iframe target it will set focus
// on the iframe's contentWindow.
this.iframe.focus(); // this.focus(); won't work
dojo.stopEvent(e);
}else if(e.keyCode == dojo.keys.ENTER){
e.stopPropagation();
}else if(this.inherited("_onKeyPress", arguments) && this.iframe){
// #3752:
// The key press will not make it past the iframe.
// If a widget is listening outside of the iframe, (like InlineEditBox)
// it will not hear anything.
// Create an equivalent event so everyone else knows what is going on.
var te = document.createEvent("KeyEvents");
te.initKeyEvent("keypress", true, true, null, e.ctrlKey, e.altKey, e.shiftKey, e.metaKey, e.keyCode, e.charCode);
this.iframe.dispatchEvent(te);
}
this._changing();
},
 
_changing: function(e){
// summary: event handler for when a change is imminent
setTimeout(dojo.hitch(this, "_changed", e, false), 1);
},
 
_changed: function(e, priorityChange){
// summary: event handler for when a change has already happened
if(this.iframe && this.iframe.contentDocument.designMode != "on"){
this.iframe.contentDocument.designMode="on"; // in case this failed on init due to being hidden
}
this.setValue(null, priorityChange);
}
});
 
}
 
if(!dojo._hasResource["dijit.layout.StackContainer"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.layout.StackContainer"] = true;
dojo.provide("dijit.layout.StackContainer");
 
 
 
 
 
dojo.declare(
"dijit.layout.StackContainer",
dijit.layout._LayoutWidget,
 
// summary
// A container that has multiple children, but shows only
// one child at a time (like looking at the pages in a book one by one).
//
// Publishes topics <widgetId>-addChild, <widgetId>-removeChild, and <widgetId>-selectChild
//
// Can be base class for container, Wizard, Show, etc.
{
// doLayout: Boolean
// if true, change the size of my currently displayed child to match my size
doLayout: true,
 
_started: false,
 
// selectedChildWidget: Widget
// References the currently selected child widget, if any
 
postCreate: function(){
dijit.setWaiRole((this.containerNode || this.domNode), "tabpanel");
this.connect(this.domNode, "onkeypress", this._onKeyPress);
},
startup: function(){
if(this._started){ return; }
 
var children = this.getChildren();
 
// Setup each page panel
dojo.forEach(children, this._setupChild, this);
 
// Figure out which child to initially display
dojo.some(children, function(child){
if(child.selected){
this.selectedChildWidget = child;
}
return child.selected;
}, this);
 
var selected = this.selectedChildWidget;
 
// Default to the first child
if(!selected && children[0]){
selected = this.selectedChildWidget = children[0];
selected.selected = true;
}
if(selected){
this._showChild(selected);
}
 
// Now publish information about myself so any StackControllers can initialize..
dojo.publish(this.id+"-startup", [{children: children, selected: selected}]);
this.inherited("startup",arguments);
this._started = true;
},
 
_setupChild: function(/*Widget*/ page){
// Summary: prepare the given child
 
page.domNode.style.display = "none";
 
// since we are setting the width/height of the child elements, they need
// to be position:relative, or IE has problems (See bug #2033)
page.domNode.style.position = "relative";
 
return page; // dijit._Widget
},
 
addChild: function(/*Widget*/ child, /*Integer?*/ insertIndex){
// summary: Adds a widget to the stack
dijit._Container.prototype.addChild.apply(this, arguments);
child = this._setupChild(child);
 
if(this._started){
// in case the tab titles have overflowed from one line to two lines
this.layout();
 
dojo.publish(this.id+"-addChild", [child, insertIndex]);
 
// if this is the first child, then select it
if(!this.selectedChildWidget){
this.selectChild(child);
}
}
},
 
removeChild: function(/*Widget*/ page){
// summary: Removes the pane from the stack
 
dijit._Container.prototype.removeChild.apply(this, arguments);
 
// If we are being destroyed than don't run the code below (to select another page), because we are deleting
// every page one by one
if(this._beingDestroyed){ return; }
 
if(this._started){
// this will notify any tablists to remove a button; do this first because it may affect sizing
dojo.publish(this.id+"-removeChild", [page]);
 
// in case the tab titles now take up one line instead of two lines
this.layout();
}
 
if(this.selectedChildWidget === page){
this.selectedChildWidget = undefined;
if(this._started){
var children = this.getChildren();
if(children.length){
this.selectChild(children[0]);
}
}
}
},
 
selectChild: function(/*Widget*/ page){
// summary:
// Show the given widget (which must be one of my children)
 
page = dijit.byId(page);
 
if(this.selectedChildWidget != page){
// Deselect old page and select new one
this._transition(page, this.selectedChildWidget);
this.selectedChildWidget = page;
dojo.publish(this.id+"-selectChild", [page]);
}
},
 
_transition: function(/*Widget*/newWidget, /*Widget*/oldWidget){
if(oldWidget){
this._hideChild(oldWidget);
}
this._showChild(newWidget);
 
// Size the new widget, in case this is the first time it's being shown,
// or I have been resized since the last time it was shown.
// page must be visible for resizing to work
if(this.doLayout && newWidget.resize){
newWidget.resize(this._containerContentBox || this._contentBox);
}
},
 
_adjacent: function(/*Boolean*/ forward){
// summary: Gets the next/previous child widget in this container from the current selection
var children = this.getChildren();
var index = dojo.indexOf(children, this.selectedChildWidget);
index += forward ? 1 : children.length - 1;
return children[ index % children.length ]; // dijit._Widget
},
 
forward: function(){
// Summary: advance to next page
this.selectChild(this._adjacent(true));
},
 
back: function(){
// Summary: go back to previous page
this.selectChild(this._adjacent(false));
},
 
_onKeyPress: function(e){
dojo.publish(this.id+"-containerKeyPress", [{ e: e, page: this}]);
},
 
layout: function(){
if(this.doLayout && this.selectedChildWidget && this.selectedChildWidget.resize){
this.selectedChildWidget.resize(this._contentBox);
}
},
 
_showChild: function(/*Widget*/ page){
var children = this.getChildren();
page.isFirstChild = (page == children[0]);
page.isLastChild = (page == children[children.length-1]);
page.selected = true;
 
page.domNode.style.display="";
if(page._loadCheck){
page._loadCheck(); // trigger load in ContentPane
}
if(page.onShow){
page.onShow();
}
},
 
_hideChild: function(/*Widget*/ page){
page.selected=false;
page.domNode.style.display="none";
if(page.onHide){
page.onHide();
}
},
 
closeChild: function(/*Widget*/ page){
// summary
// callback when user clicks the [X] to remove a page
// if onClose() returns true then remove and destroy the childd
var remove = page.onClose(this, page);
if(remove){
this.removeChild(page);
// makes sure we can clean up executeScripts in ContentPane onUnLoad
page.destroy();
}
},
 
destroy: function(){
this._beingDestroyed = true;
this.inherited("destroy",arguments);
}
});
 
dojo.declare(
"dijit.layout.StackController",
[dijit._Widget, dijit._Templated, dijit._Container],
{
// summary:
// Set of buttons to select a page in a page list.
// Monitors the specified StackContainer, and whenever a page is
// added, deleted, or selected, updates itself accordingly.
 
templateString: "<span wairole='tablist' dojoAttachEvent='onkeypress' class='dijitStackController'></span>",
 
// containerId: String
// the id of the page container that I point to
containerId: "",
 
// buttonWidget: String
// the name of the button widget to create to correspond to each page
buttonWidget: "dijit.layout._StackButton",
 
postCreate: function(){
dijit.setWaiRole(this.domNode, "tablist");
 
this.pane2button = {}; // mapping from panes to buttons
this._subscriptions=[
dojo.subscribe(this.containerId+"-startup", this, "onStartup"),
dojo.subscribe(this.containerId+"-addChild", this, "onAddChild"),
dojo.subscribe(this.containerId+"-removeChild", this, "onRemoveChild"),
dojo.subscribe(this.containerId+"-selectChild", this, "onSelectChild"),
dojo.subscribe(this.containerId+"-containerKeyPress", this, "onContainerKeyPress")
];
},
 
onStartup: function(/*Object*/ info){
// summary: called after StackContainer has finished initializing
dojo.forEach(info.children, this.onAddChild, this);
this.onSelectChild(info.selected);
},
 
destroy: function(){
dojo.forEach(this._subscriptions, dojo.unsubscribe);
this.inherited("destroy",arguments);
},
 
onAddChild: function(/*Widget*/ page, /*Integer?*/ insertIndex){
// summary:
// Called whenever a page is added to the container.
// Create button corresponding to the page.
 
// add a node that will be promoted to the button widget
var refNode = document.createElement("span");
this.domNode.appendChild(refNode);
// create an instance of the button widget
var cls = dojo.getObject(this.buttonWidget);
var button = new cls({label: page.title, closeButton: page.closable}, refNode);
this.addChild(button, insertIndex);
this.pane2button[page] = button;
page.controlButton = button; // this value might be overwritten if two tabs point to same container
dojo.connect(button, "onClick", dojo.hitch(this,"onButtonClick",page));
dojo.connect(button, "onClickCloseButton", dojo.hitch(this,"onCloseButtonClick",page));
if(!this._currentChild){ // put the first child into the tab order
button.focusNode.setAttribute("tabIndex","0");
this._currentChild = page;
}
},
 
onRemoveChild: function(/*Widget*/ page){
// summary:
// Called whenever a page is removed from the container.
// Remove the button corresponding to the page.
if(this._currentChild === page){ this._currentChild = null; }
var button = this.pane2button[page];
if(button){
// TODO? if current child { reassign }
button.destroy();
}
this.pane2button[page] = null;
},
 
onSelectChild: function(/*Widget*/ page){
// summary:
// Called when a page has been selected in the StackContainer, either by me or by another StackController
 
if(!page){ return; }
 
if(this._currentChild){
var oldButton=this.pane2button[this._currentChild];
oldButton.setChecked(false);
oldButton.focusNode.setAttribute("tabIndex", "-1");
}
 
var newButton=this.pane2button[page];
newButton.setChecked(true);
this._currentChild = page;
newButton.focusNode.setAttribute("tabIndex", "0");
},
 
onButtonClick: function(/*Widget*/ page){
// summary:
// Called whenever one of my child buttons is pressed in an attempt to select a page
var container = dijit.byId(this.containerId); // TODO: do this via topics?
container.selectChild(page);
},
 
onCloseButtonClick: function(/*Widget*/ page){
// summary:
// Called whenever one of my child buttons [X] is pressed in an attempt to close a page
var container = dijit.byId(this.containerId);
container.closeChild(page);
var b = this.pane2button[this._currentChild];
if(b){
dijit.focus(b.focusNode || b.domNode);
}
},
// TODO: this is a bit redundant with forward, back api in StackContainer
adjacent: function(/*Boolean*/ forward){
// find currently focused button in children array
var children = this.getChildren();
var current = dojo.indexOf(children, this.pane2button[this._currentChild]);
// pick next button to focus on
var offset = forward ? 1 : children.length - 1;
return children[ (current + offset) % children.length ]; // dijit._Widget
},
 
onkeypress: function(/*Event*/ e){
// summary:
// Handle keystrokes on the page list, for advancing to next/previous button
// and closing the current page if the page is closable.
 
if(this.disabled || e.altKey ){ return; }
var forward = true;
if(e.ctrlKey || !e._djpage){
var k = dojo.keys;
switch(e.keyCode){
case k.LEFT_ARROW:
case k.UP_ARROW:
case k.PAGE_UP:
forward = false;
// fall through
case k.RIGHT_ARROW:
case k.DOWN_ARROW:
case k.PAGE_DOWN:
this.adjacent(forward).onClick();
dojo.stopEvent(e);
break;
case k.DELETE:
if(this._currentChild.closable){
this.onCloseButtonClick(this._currentChild);
}
dojo.stopEvent(e);
break;
default:
if(e.ctrlKey){
if(e.keyCode == k.TAB){
this.adjacent(!e.shiftKey).onClick();
dojo.stopEvent(e);
}else if(e.keyChar == "w"){
if(this._currentChild.closable){
this.onCloseButtonClick(this._currentChild);
}
dojo.stopEvent(e); // avoid browser tab closing.
}
}
}
}
},
 
onContainerKeyPress: function(/*Object*/ info){
info.e._djpage = info.page;
this.onkeypress(info.e);
}
});
 
dojo.declare("dijit.layout._StackButton",
dijit.form.ToggleButton,
{
// summary
// Internal widget used by StackContainer.
// The button-like or tab-like object you click to select or delete a page
tabIndex: "-1", // StackContainer buttons are not in the tab order by default
postCreate: function(/*Event*/ evt){
dijit.setWaiRole((this.focusNode || this.domNode), "tab");
this.inherited("postCreate", arguments);
},
onClick: function(/*Event*/ evt){
// summary: This is for TabContainer where the tabs are <span> rather than button,
// so need to set focus explicitly (on some browsers)
dijit.focus(this.focusNode);
 
// ... now let StackController catch the event and tell me what to do
},
 
onClickCloseButton: function(/*Event*/ evt){
// summary
// StackContainer connects to this function; if your widget contains a close button
// then clicking it should call this function.
evt.stopPropagation();
}
});
 
// These arguments can be specified for the children of a StackContainer.
// Since any widget can be specified as a StackContainer child, mix them
// into the base widget class. (This is a hack, but it's effective.)
dojo.extend(dijit._Widget, {
// title: String
// Title of this widget. Used by TabContainer to the name the tab, etc.
title: "",
 
// selected: Boolean
// Is this child currently selected?
selected: false,
 
// closable: Boolean
// True if user can close (destroy) this child, such as (for example) clicking the X on the tab.
closable: false, // true if user can close this tab pane
 
onClose: function(){
// summary: Callback if someone tries to close the child, child will be closed if func returns true
return true;
}
});
 
}
 
if(!dojo._hasResource["dijit.layout.AccordionContainer"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.layout.AccordionContainer"] = true;
dojo.provide("dijit.layout.AccordionContainer");
 
 
 
 
 
 
 
 
dojo.declare(
"dijit.layout.AccordionContainer",
dijit.layout.StackContainer,
{
// summary:
// Holds a set of panes where every pane's title is visible, but only one pane's content is visible at a time,
// and switching between panes is visualized by sliding the other panes up/down.
// usage:
// <div dojoType="dijit.layout.AccordionContainer">
// <div dojoType="dijit.layout.AccordionPane" title="pane 1">
// <div dojoType="dijit.layout.ContentPane">...</div>
// </div>
// <div dojoType="dijit.layout.AccordionPane" title="pane 2">
// <p>This is some text</p>
// ...
// </div>
 
// duration: Integer
// Amount of time (in ms) it takes to slide panes
duration: 250,
 
_verticalSpace: 0,
 
postCreate: function(){
this.domNode.style.overflow="hidden";
this.inherited("postCreate",arguments);
dijit.setWaiRole(this.domNode, "tablist");
dojo.addClass(this.domNode,"dijitAccordionContainer");
},
 
startup: function(){
if(this._started){ return; }
this.inherited("startup",arguments);
if(this.selectedChildWidget){
var style = this.selectedChildWidget.containerNode.style;
style.display = "";
style.overflow = "auto";
this.selectedChildWidget._setSelectedState(true);
}
},
 
layout: function(){
// summary
// Set the height of the open pane based on what room remains
// get cumulative height of all the title bars, and figure out which pane is open
var totalCollapsedHeight = 0;
var openPane = this.selectedChildWidget;
dojo.forEach(this.getChildren(), function(child){
totalCollapsedHeight += child.getTitleHeight();
});
var mySize = this._contentBox;
this._verticalSpace = (mySize.h - totalCollapsedHeight);
if(openPane){
openPane.containerNode.style.height = this._verticalSpace + "px";
/***
TODO: this is wrong. probably you wanted to call resize on the SplitContainer
inside the AccordionPane??
if(openPane.resize){
openPane.resize({h: this._verticalSpace});
}
***/
}
},
 
_setupChild: function(/*Widget*/ page){
// Summary: prepare the given child
return page;
},
 
_transition: function(/*Widget?*/newWidget, /*Widget?*/oldWidget){
//TODO: should be able to replace this with calls to slideIn/slideOut
if(this._inTransition){ return; }
this._inTransition = true;
var animations = [];
var paneHeight = this._verticalSpace;
if(newWidget){
newWidget.setSelected(true);
var newContents = newWidget.containerNode;
newContents.style.display = "";
 
animations.push(dojo.animateProperty({
node: newContents,
duration: this.duration,
properties: {
height: { start: "1", end: paneHeight }
},
onEnd: function(){
newContents.style.overflow = "auto";
}
}));
}
if(oldWidget){
oldWidget.setSelected(false);
var oldContents = oldWidget.containerNode;
oldContents.style.overflow = "hidden";
animations.push(dojo.animateProperty({
node: oldContents,
duration: this.duration,
properties: {
height: { start: paneHeight, end: "1" }
},
onEnd: function(){
oldContents.style.display = "none";
}
}));
}
 
this._inTransition = false;
 
dojo.fx.combine(animations).play();
},
 
// note: we are treating the container as controller here
_onKeyPress: function(/*Event*/ e){
if(this.disabled || e.altKey ){ return; }
var k = dojo.keys;
switch(e.keyCode){
case k.LEFT_ARROW:
case k.UP_ARROW:
case k.PAGE_UP:
this._adjacent(false)._onTitleClick();
dojo.stopEvent(e);
break;
case k.RIGHT_ARROW:
case k.DOWN_ARROW:
case k.PAGE_DOWN:
this._adjacent(true)._onTitleClick();
dojo.stopEvent(e);
break;
default:
if(e.ctrlKey && e.keyCode == k.TAB){
this._adjacent(e._dijitWidget, !e.shiftKey)._onTitleClick();
dojo.stopEvent(e);
}
}
}
}
);
 
dojo.declare(
"dijit.layout.AccordionPane",
[dijit.layout.ContentPane, dijit._Templated, dijit._Contained],
{
// summary
// AccordionPane is a ContentPane with a title that may contain another widget.
// Nested layout widgets, such as SplitContainer, are not supported at this time.
 
templateString:"<div class='dijitAccordionPane'\n\t><div dojoAttachPoint='titleNode,focusNode' dojoAttachEvent='ondijitclick:_onTitleClick,onkeypress:_onTitleKeyPress,onfocus:_handleFocus,onblur:_handleFocus'\n\t\tclass='dijitAccordionTitle' wairole=\"tab\"\n\t\t><div class='dijitAccordionArrow'></div\n\t\t><div class='arrowTextUp' waiRole=\"presentation\">&#9650;</div\n\t\t><div class='arrowTextDown' waiRole=\"presentation\">&#9660;</div\n\t\t><div dojoAttachPoint='titleTextNode' class='dijitAccordionText'>${title}</div></div\n\t><div><div dojoAttachPoint='containerNode' style='overflow: hidden; height: 1px; display: none'\n\t\tclass='dijitAccordionBody' wairole=\"tabpanel\"\n\t></div></div>\n</div>\n",
 
postCreate: function(){
this.inherited("postCreate",arguments)
dojo.setSelectable(this.titleNode, false);
this.setSelected(this.selected);
},
 
getTitleHeight: function(){
// summary: returns the height of the title dom node
return dojo.marginBox(this.titleNode).h; // Integer
},
 
_onTitleClick: function(){
// summary: callback when someone clicks my title
var parent = this.getParent();
if(!parent._inTransition){
parent.selectChild(this);
dijit.focus(this.focusNode);
}
},
 
_onTitleKeyPress: function(/*Event*/ evt){
evt._dijitWidget = this;
return this.getParent()._onKeyPress(evt);
},
 
_setSelectedState: function(/*Boolean*/ isSelected){
this.selected = isSelected;
dojo[(isSelected ? "addClass" : "removeClass")](this.domNode,"dijitAccordionPane-selected");
this.focusNode.setAttribute("tabIndex", isSelected ? "0" : "-1");
},
_handleFocus: function(/*Event*/e){
// summary: handle the blur and focus state of this widget
dojo[(e.type=="focus" ? "addClass" : "removeClass")](this.focusNode,"dijitAccordionPaneFocused");
},
 
setSelected: function(/*Boolean*/ isSelected){
// summary: change the selected state on this pane
this._setSelectedState(isSelected);
if(isSelected){ this.onSelected(); }
},
 
onSelected: function(){
// summary: called when this pane is selected
}
});
 
}
 
if(!dojo._hasResource["dijit.layout.LayoutContainer"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.layout.LayoutContainer"] = true;
dojo.provide("dijit.layout.LayoutContainer");
 
 
 
dojo.declare(
"dijit.layout.LayoutContainer",
dijit.layout._LayoutWidget,
{
// summary
// Provides Delphi-style panel layout semantics.
//
// details
// A LayoutContainer is a box with a specified size (like style="width: 500px; height: 500px;"),
// that contains children widgets marked with "layoutAlign" of "left", "right", "bottom", "top", and "client".
// It takes it's children marked as left/top/bottom/right, and lays them out along the edges of the box,
// and then it takes the child marked "client" and puts it into the remaining space in the middle.
//
// Left/right positioning is similar to CSS's "float: left" and "float: right",
// and top/bottom positioning would be similar to "float: top" and "float: bottom", if there were such
// CSS.
//
// Note that there can only be one client element, but there can be multiple left, right, top,
// or bottom elements.
//
// usage
// <style>
// html, body{ height: 100%; width: 100%; }
// </style>
// <div dojoType="dijit.layout.LayoutContainer" style="width: 100%; height: 100%">
// <div dojoType="dijit.layout.ContentPane" layoutAlign="top">header text</div>
// <div dojoType="dijit.layout.ContentPane" layoutAlign="left" style="width: 200px;">table of contents</div>
// <div dojoType="dijit.layout.ContentPane" layoutAlign="client">client area</div>
// </div>
//
// Lays out each child in the natural order the children occur in.
// Basically each child is laid out into the "remaining space", where "remaining space" is initially
// the content area of this widget, but is reduced to a smaller rectangle each time a child is added.
//
 
layout: function(){
dijit.layout.layoutChildren(this.domNode, this._contentBox, this.getChildren());
},
 
addChild: function(/*Widget*/ child, /*Integer?*/ insertIndex){
dijit._Container.prototype.addChild.apply(this, arguments);
if(this._started){
dijit.layout.layoutChildren(this.domNode, this._contentBox, this.getChildren());
}
},
 
removeChild: function(/*Widget*/ widget){
dijit._Container.prototype.removeChild.apply(this, arguments);
if(this._started){
dijit.layout.layoutChildren(this.domNode, this._contentBox, this.getChildren());
}
}
});
 
// This argument can be specified for the children of a LayoutContainer.
// Since any widget can be specified as a LayoutContainer child, mix it
// into the base widget class. (This is a hack, but it's effective.)
dojo.extend(dijit._Widget, {
// layoutAlign: String
// "none", "left", "right", "bottom", "top", and "client".
// See the LayoutContainer description for details on this parameter.
layoutAlign: 'none'
});
 
}
 
if(!dojo._hasResource["dijit.layout.LinkPane"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.layout.LinkPane"] = true;
dojo.provide("dijit.layout.LinkPane");
 
 
 
 
dojo.declare("dijit.layout.LinkPane",
[dijit.layout.ContentPane, dijit._Templated],
{
// summary:
// A ContentPane that loads data remotely
// description:
// LinkPane is just a ContentPane that loads data remotely (via the href attribute),
// and has markup similar to an anchor. The anchor's body (the words between <a> and </a>)
// become the title of the widget (used for TabContainer, AccordionContainer, etc.)
// example:
// <a href="foo.html">my title</a>
 
// I'm using a template because the user may specify the input as
// <a href="foo.html">title</a>, in which case we need to get rid of the
// <a> because we don't want a link.
templateString: '<div class="dijitLinkPane"></div>',
 
postCreate: function(){
 
// If user has specified node contents, they become the title
// (the link must be plain text)
if(this.srcNodeRef){
this.title += this.srcNodeRef.innerHTML;
}
this.inherited("postCreate",arguments);
}
});
 
}
 
if(!dojo._hasResource["dijit.layout.SplitContainer"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.layout.SplitContainer"] = true;
dojo.provide("dijit.layout.SplitContainer");
 
//
// FIXME: make it prettier
// FIXME: active dragging upwards doesn't always shift other bars (direction calculation is wrong in this case)
//
 
 
 
 
dojo.declare("dijit.layout.SplitContainer",
dijit.layout._LayoutWidget,
{
// summary:
// A Container widget with sizing handles in-between each child
// description:
// Contains multiple children widgets, all of which are displayed side by side
// (either horizontally or vertically); there's a bar between each of the children,
// and you can adjust the relative size of each child by dragging the bars.
//
// You must specify a size (width and height) for the SplitContainer.
//
// activeSizing: Boolean
// If true, the children's size changes as you drag the bar;
// otherwise, the sizes don't change until you drop the bar (by mouse-up)
activeSizing: false,
 
// sizerWidth: Integer
// Size in pixels of the bar between each child
sizerWidth: 7, // FIXME: this should be a CSS attribute (at 7 because css wants it to be 7 until we fix to css)
 
// orientation: String
// either 'horizontal' or vertical; indicates whether the children are
// arranged side-by-side or up/down.
orientation: 'horizontal',
 
// persist: Boolean
// Save splitter positions in a cookie
persist: true,
 
postMixInProperties: function(){
this.inherited("postMixInProperties",arguments);
this.isHorizontal = (this.orientation == 'horizontal');
},
 
postCreate: function(){
this.inherited("postCreate",arguments);
this.sizers = [];
dojo.addClass(this.domNode, "dijitSplitContainer");
// overflow has to be explicitly hidden for splitContainers using gekko (trac #1435)
// to keep other combined css classes from inadvertantly making the overflow visible
if(dojo.isMozilla){
this.domNode.style.overflow = '-moz-scrollbars-none'; // hidden doesn't work
}
 
// create the fake dragger
if(typeof this.sizerWidth == "object"){
try{ //FIXME: do this without a try/catch
this.sizerWidth = parseInt(this.sizerWidth.toString());
}catch(e){ this.sizerWidth = 7; }
}
var sizer = this.virtualSizer = document.createElement('div');
sizer.style.position = 'relative';
 
// #1681: work around the dreaded 'quirky percentages in IE' layout bug
// If the splitcontainer's dimensions are specified in percentages, it
// will be resized when the virtualsizer is displayed in _showSizingLine
// (typically expanding its bounds unnecessarily). This happens because
// we use position: relative for .dijitSplitContainer.
// The workaround: instead of changing the display style attribute,
// switch to changing the zIndex (bring to front/move to back)
 
sizer.style.zIndex = 10;
sizer.className = this.isHorizontal ? 'dijitSplitContainerVirtualSizerH' : 'dijitSplitContainerVirtualSizerV';
this.domNode.appendChild(sizer);
dojo.setSelectable(sizer, false);
},
 
startup: function(){
if(this._started){ return; }
dojo.forEach(this.getChildren(), function(child, i, children){
// attach the children and create the draggers
this._injectChild(child);
 
if(i < children.length-1){
this._addSizer();
}
}, this);
 
if(this.persist){
this._restoreState();
}
this.inherited("startup",arguments);
this._started = true;
},
 
_injectChild: function(child){
child.domNode.style.position = "absolute";
dojo.addClass(child.domNode, "dijitSplitPane");
},
 
_addSizer: function(){
var i = this.sizers.length;
 
// TODO: use a template for this!!!
var sizer = this.sizers[i] = document.createElement('div');
sizer.className = this.isHorizontal ? 'dijitSplitContainerSizerH' : 'dijitSplitContainerSizerV';
 
// add the thumb div
var thumb = document.createElement('div');
thumb.className = 'thumb';
sizer.appendChild(thumb);
 
// FIXME: are you serious? why aren't we using mover start/stop combo?
var self = this;
var handler = (function(){ var sizer_i = i; return function(e){ self.beginSizing(e, sizer_i); } })();
dojo.connect(sizer, "onmousedown", handler);
 
this.domNode.appendChild(sizer);
dojo.setSelectable(sizer, false);
},
 
removeChild: function(widget){
// summary: Remove sizer, but only if widget is really our child and
// we have at least one sizer to throw away
if(this.sizers.length && dojo.indexOf(this.getChildren(), widget) != -1){
var i = this.sizers.length - 1;
dojo._destroyElement(this.sizers[i]);
this.sizers.length--;
}
 
// Remove widget and repaint
this.inherited("removeChild",arguments);
if(this._started){
this.layout();
}
},
 
addChild: function(/*Widget*/ child, /*Integer?*/ insertIndex){
// summary: Add a child widget to the container
// child: a widget to add
// insertIndex: postion in the "stack" to add the child widget
this.inherited("addChild",arguments);
 
if(this._started){
// Do the stuff that startup() does for each widget
this._injectChild(child);
var children = this.getChildren();
if(children.length > 1){
this._addSizer();
}
 
// and then reposition (ie, shrink) every pane to make room for the new guy
this.layout();
}
},
 
layout: function(){
// summary:
// Do layout of panels
 
// base class defines this._contentBox on initial creation and also
// on resize
this.paneWidth = this._contentBox.w;
this.paneHeight = this._contentBox.h;
 
var children = this.getChildren();
if(!children.length){ return; }
 
//
// calculate space
//
 
var space = this.isHorizontal ? this.paneWidth : this.paneHeight;
if(children.length > 1){
space -= this.sizerWidth * (children.length - 1);
}
 
//
// calculate total of SizeShare values
//
var outOf = 0;
dojo.forEach(children, function(child){
outOf += child.sizeShare;
});
 
//
// work out actual pixels per sizeshare unit
//
var pixPerUnit = space / outOf;
 
//
// set the SizeActual member of each pane
//
var totalSize = 0;
dojo.forEach(children.slice(0, children.length - 1), function(child){
var size = Math.round(pixPerUnit * child.sizeShare);
child.sizeActual = size;
totalSize += size;
});
 
children[children.length-1].sizeActual = space - totalSize;
 
//
// make sure the sizes are ok
//
this._checkSizes();
 
//
// now loop, positioning each pane and letting children resize themselves
//
 
var pos = 0;
var size = children[0].sizeActual;
this._movePanel(children[0], pos, size);
children[0].position = pos;
pos += size;
 
// if we don't have any sizers, our layout method hasn't been called yet
// so bail until we are called..TODO: REVISIT: need to change the startup
// algorithm to guaranteed the ordering of calls to layout method
if(!this.sizers){
return;
}
 
dojo.some(children.slice(1), function(child, i){
// error-checking
if(!this.sizers[i]){
return true;
}
// first we position the sizing handle before this pane
this._moveSlider(this.sizers[i], pos, this.sizerWidth);
this.sizers[i].position = pos;
pos += this.sizerWidth;
 
size = child.sizeActual;
this._movePanel(child, pos, size);
child.position = pos;
pos += size;
}, this);
},
 
_movePanel: function(panel, pos, size){
if(this.isHorizontal){
panel.domNode.style.left = pos + 'px'; // TODO: resize() takes l and t parameters too, don't need to set manually
panel.domNode.style.top = 0;
var box = {w: size, h: this.paneHeight};
if(panel.resize){
panel.resize(box);
}else{
dojo.marginBox(panel.domNode, box);
}
}else{
panel.domNode.style.left = 0; // TODO: resize() takes l and t parameters too, don't need to set manually
panel.domNode.style.top = pos + 'px';
var box = {w: this.paneWidth, h: size};
if(panel.resize){
panel.resize(box);
}else{
dojo.marginBox(panel.domNode, box);
}
}
},
 
_moveSlider: function(slider, pos, size){
if(this.isHorizontal){
slider.style.left = pos + 'px';
slider.style.top = 0;
dojo.marginBox(slider, { w: size, h: this.paneHeight });
}else{
slider.style.left = 0;
slider.style.top = pos + 'px';
dojo.marginBox(slider, { w: this.paneWidth, h: size });
}
},
 
_growPane: function(growth, pane){
if(growth > 0){
if(pane.sizeActual > pane.sizeMin){
if((pane.sizeActual - pane.sizeMin) > growth){
 
// stick all the growth in this pane
pane.sizeActual = pane.sizeActual - growth;
growth = 0;
}else{
// put as much growth in here as we can
growth -= pane.sizeActual - pane.sizeMin;
pane.sizeActual = pane.sizeMin;
}
}
}
return growth;
},
 
_checkSizes: function(){
 
var totalMinSize = 0;
var totalSize = 0;
var children = this.getChildren();
 
dojo.forEach(children, function(child){
totalSize += child.sizeActual;
totalMinSize += child.sizeMin;
});
 
// only make adjustments if we have enough space for all the minimums
 
if(totalMinSize <= totalSize){
 
var growth = 0;
 
dojo.forEach(children, function(child){
if(child.sizeActual < child.sizeMin){
growth += child.sizeMin - child.sizeActual;
child.sizeActual = child.sizeMin;
}
});
 
if(growth > 0){
var list = this.isDraggingLeft ? children.reverse() : children;
dojo.forEach(list, function(child){
growth = this._growPane(growth, child);
}, this);
}
}else{
dojo.forEach(children, function(child){
child.sizeActual = Math.round(totalSize * (child.sizeMin / totalMinSize));
});
}
},
 
beginSizing: function(e, i){
var children = this.getChildren();
this.paneBefore = children[i];
this.paneAfter = children[i+1];
 
this.isSizing = true;
this.sizingSplitter = this.sizers[i];
 
if(!this.cover){
this.cover = dojo.doc.createElement('div');
this.domNode.appendChild(this.cover);
var s = this.cover.style;
s.position = 'absolute';
s.zIndex = 1;
s.top = 0;
s.left = 0;
s.width = "100%";
s.height = "100%";
}else{
this.cover.style.zIndex = 1;
}
this.sizingSplitter.style.zIndex = 2;
 
// TODO: REVISIT - we want MARGIN_BOX and core hasn't exposed that yet (but can't we use it anyway if we pay attention? we do elsewhere.)
this.originPos = dojo.coords(children[0].domNode, true);
if(this.isHorizontal){
var client = (e.layerX ? e.layerX : e.offsetX);
var screen = e.pageX;
this.originPos = this.originPos.x;
}else{
var client = (e.layerY ? e.layerY : e.offsetY);
var screen = e.pageY;
this.originPos = this.originPos.y;
}
this.startPoint = this.lastPoint = screen;
this.screenToClientOffset = screen - client;
this.dragOffset = this.lastPoint - this.paneBefore.sizeActual - this.originPos - this.paneBefore.position;
 
if(!this.activeSizing){
this._showSizingLine();
}
 
//
// attach mouse events
//
this._connects = [];
this._connects.push(dojo.connect(document.documentElement, "onmousemove", this, "changeSizing"));
this._connects.push(dojo.connect(document.documentElement, "onmouseup", this, "endSizing"));
 
dojo.stopEvent(e);
},
 
changeSizing: function(e){
if(!this.isSizing){ return; }
this.lastPoint = this.isHorizontal ? e.pageX : e.pageY;
this.movePoint();
if(this.activeSizing){
this._updateSize();
}else{
this._moveSizingLine();
}
dojo.stopEvent(e);
},
 
endSizing: function(e){
if(!this.isSizing){ return; }
if(this.cover){
this.cover.style.zIndex = -1;
}
if(!this.activeSizing){
this._hideSizingLine();
}
 
this._updateSize();
 
this.isSizing = false;
 
if(this.persist){
this._saveState(this);
}
 
dojo.forEach(this._connects,dojo.disconnect);
},
 
movePoint: function(){
 
// make sure lastPoint is a legal point to drag to
var p = this.lastPoint - this.screenToClientOffset;
 
var a = p - this.dragOffset;
a = this.legaliseSplitPoint(a);
p = a + this.dragOffset;
 
this.lastPoint = p + this.screenToClientOffset;
},
 
legaliseSplitPoint: function(a){
 
a += this.sizingSplitter.position;
 
this.isDraggingLeft = !!(a > 0);
 
if(!this.activeSizing){
var min = this.paneBefore.position + this.paneBefore.sizeMin;
if(a < min){
a = min;
}
 
var max = this.paneAfter.position + (this.paneAfter.sizeActual - (this.sizerWidth + this.paneAfter.sizeMin));
if(a > max){
a = max;
}
}
 
a -= this.sizingSplitter.position;
 
this._checkSizes();
 
return a;
},
 
_updateSize: function(){
//FIXME: sometimes this.lastPoint is NaN
var pos = this.lastPoint - this.dragOffset - this.originPos;
 
var start_region = this.paneBefore.position;
var end_region = this.paneAfter.position + this.paneAfter.sizeActual;
 
this.paneBefore.sizeActual = pos - start_region;
this.paneAfter.position = pos + this.sizerWidth;
this.paneAfter.sizeActual = end_region - this.paneAfter.position;
 
dojo.forEach(this.getChildren(), function(child){
child.sizeShare = child.sizeActual;
});
 
if(this._started){
this.layout();
}
},
 
_showSizingLine: function(){
 
this._moveSizingLine();
 
dojo.marginBox(this.virtualSizer,
this.isHorizontal ? { w: this.sizerWidth, h: this.paneHeight } : { w: this.paneWidth, h: this.sizerWidth });
 
this.virtualSizer.style.display = 'block';
},
 
_hideSizingLine: function(){
this.virtualSizer.style.display = 'none';
},
 
_moveSizingLine: function(){
var pos = (this.lastPoint - this.startPoint) + this.sizingSplitter.position;
dojo.style(this.virtualSizer,(this.isHorizontal ? "left" : "top"),pos+"px");
// this.virtualSizer.style[ this.isHorizontal ? "left" : "top" ] = pos + 'px'; // FIXME: remove this line if the previous is better
},
 
_getCookieName: function(i){
return this.id + "_" + i;
},
 
_restoreState: function(){
dojo.forEach(this.getChildren(), function(child, i){
var cookieName = this._getCookieName(i);
var cookieValue = dojo.cookie(cookieName);
if(cookieValue){
var pos = parseInt(cookieValue);
if(typeof pos == "number"){
child.sizeShare = pos;
}
}
}, this);
},
 
_saveState: function(){
dojo.forEach(this.getChildren(), function(child, i){
dojo.cookie(this._getCookieName(i), child.sizeShare);
}, this);
}
});
 
// These arguments can be specified for the children of a SplitContainer.
// Since any widget can be specified as a SplitContainer child, mix them
// into the base widget class. (This is a hack, but it's effective.)
dojo.extend(dijit._Widget, {
// sizeMin: Integer
// Minimum size (width or height) of a child of a SplitContainer.
// The value is relative to other children's sizeShare properties.
sizeMin: 10,
 
// sizeShare: Integer
// Size (width or height) of a child of a SplitContainer.
// The value is relative to other children's sizeShare properties.
// For example, if there are two children and each has sizeShare=10, then
// each takes up 50% of the available space.
sizeShare: 10
});
 
}
 
if(!dojo._hasResource["dijit.layout.TabContainer"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.layout.TabContainer"] = true;
dojo.provide("dijit.layout.TabContainer");
 
 
 
 
dojo.declare("dijit.layout.TabContainer",
[dijit.layout.StackContainer, dijit._Templated],
{
// summary:
// A Container with Title Tabs, each one pointing at a pane in the container.
// description:
// A TabContainer is a container that has multiple panes, but shows only
// one pane at a time. There are a set of tabs corresponding to each pane,
// where each tab has the title (aka title) of the pane, and optionally a close button.
//
// Publishes topics <widgetId>-addChild, <widgetId>-removeChild, and <widgetId>-selectChild
// (where <widgetId> is the id of the TabContainer itself.
//
// tabPosition: String
// Defines where tabs go relative to tab content.
// "top", "bottom", "left-h", "right-h"
tabPosition: "top",
 
templateString: null, // override setting in StackContainer
templateString:"<div class=\"dijitTabContainer\">\n\t<div dojoAttachPoint=\"tablistNode\"></div>\n\t<div class=\"dijitTabPaneWrapper\" dojoAttachPoint=\"containerNode\"></div>\n</div>\n",
 
postCreate: function(){
dijit.layout.TabContainer.superclass.postCreate.apply(this, arguments);
// create the tab list that will have a tab (a.k.a. tab button) for each tab panel
this.tablist = new dijit.layout.TabController(
{
id: this.id + "_tablist",
tabPosition: this.tabPosition,
doLayout: this.doLayout,
containerId: this.id
}, this.tablistNode);
},
 
_setupChild: function(/* Widget */tab){
dojo.addClass(tab.domNode, "dijitTabPane");
this.inherited("_setupChild",arguments);
return tab; // Widget
},
 
startup: function(){
if(this._started){ return; }
 
// wire up the tablist and its tabs
this.tablist.startup();
this.inherited("startup",arguments);
 
if(dojo.isSafari){
// sometimes safari 3.0.3 miscalculates the height of the tab labels, see #4058
setTimeout(dojo.hitch(this, "layout"), 0);
}
},
 
layout: function(){
// Summary: Configure the content pane to take up all the space except for where the tabs are
if(!this.doLayout){ return; }
 
// position and size the titles and the container node
var titleAlign=this.tabPosition.replace(/-h/,"");
var children = [
{domNode: this.tablist.domNode, layoutAlign: titleAlign},
{domNode: this.containerNode, layoutAlign: "client"}
];
dijit.layout.layoutChildren(this.domNode, this._contentBox, children);
 
// Compute size to make each of my children.
// children[1] is the margin-box size of this.containerNode, set by layoutChildren() call above
this._containerContentBox = dijit.layout.marginBox2contentBox(this.containerNode, children[1]);
 
if(this.selectedChildWidget){
this._showChild(this.selectedChildWidget);
if(this.doLayout && this.selectedChildWidget.resize){
this.selectedChildWidget.resize(this._containerContentBox);
}
}
},
 
destroy: function(){
this.tablist.destroy();
this.inherited("destroy",arguments);
}
});
 
//TODO: make private?
dojo.declare("dijit.layout.TabController",
dijit.layout.StackController,
{
// summary:
// Set of tabs (the things with titles and a close button, that you click to show a tab panel).
// description:
// Lets the user select the currently shown pane in a TabContainer or StackContainer.
// TabController also monitors the TabContainer, and whenever a pane is
// added or deleted updates itself accordingly.
 
templateString: "<div wairole='tablist' dojoAttachEvent='onkeypress:onkeypress'></div>",
 
// tabPosition: String
// Defines where tabs go relative to the content.
// "top", "bottom", "left-h", "right-h"
tabPosition: "top",
 
// doLayout: Boolean
// TODOC: deprecate doLayout? not sure.
doLayout: true,
 
// buttonWidget: String
// the name of the tab widget to create to correspond to each page
buttonWidget: "dijit.layout._TabButton",
 
postMixInProperties: function(){
this["class"] = "dijitTabLabels-" + this.tabPosition + (this.doLayout ? "" : " dijitTabNoLayout");
this.inherited("postMixInProperties",arguments);
}
});
 
dojo.declare("dijit.layout._TabButton",
dijit.layout._StackButton,
{
// summary:
// A tab (the thing you click to select a pane).
// description:
// Contains the title of the pane, and optionally a close-button to destroy the pane.
// This is an internal widget and should not be instantiated directly.
 
baseClass: "dijitTab",
 
templateString:"<div dojoAttachEvent='onclick:onClick,onmouseenter:_onMouse,onmouseleave:_onMouse'>\n <div class='dijitTabInnerDiv' dojoAttachPoint='innerDiv'>\n <span dojoAttachPoint='containerNode,focusNode'>${!label}</span>\n <span dojoAttachPoint='closeButtonNode' class='closeImage' dojoAttachEvent='onmouseenter:_onMouse, onmouseleave:_onMouse, onclick:onClickCloseButton' stateModifier='CloseButton'>\n <span dojoAttachPoint='closeText' class='closeText'>x</span>\n </span>\n </div>\n</div>\n",
 
postCreate: function(){
if(this.closeButton){
dojo.addClass(this.innerDiv, "dijitClosable");
} else {
this.closeButtonNode.style.display="none";
}
this.inherited("postCreate",arguments);
dojo.setSelectable(this.containerNode, false);
}
});
 
}
 
if(!dojo._hasResource["dijit.dijit-all"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.dijit-all"] = true;
console.warn("dijit-all may include much more code than your application actually requires. We strongly recommend that you investigate a custom build or the web build tool");
dojo.provide("dijit.dijit-all");
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
}
 
 
dojo.i18n._preloadLocalizations("dijit.nls.dijit-all", ["es-es", "es", "hu", "it-it", "de", "pt-br", "pl", "fr-fr", "zh-cn", "pt", "en-us", "zh", "ru", "xx", "fr", "zh-tw", "it", "cs", "en-gb", "de-de", "ja-jp", "ko-kr", "ko", "en", "ROOT", "ja"]);
/trunk/api/js/dojo1.0/dijit/Tooltip.js
New file
0,0 → 1,230
if(!dojo._hasResource["dijit.Tooltip"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.Tooltip"] = true;
dojo.provide("dijit.Tooltip");
 
dojo.require("dijit._Widget");
dojo.require("dijit._Templated");
 
dojo.declare(
"dijit._MasterTooltip",
[dijit._Widget, dijit._Templated],
{
// summary
// Internal widget that holds the actual tooltip markup,
// which occurs once per page.
// Called by Tooltip widgets which are just containers to hold
// the markup
 
// duration: Integer
// Milliseconds to fade in/fade out
duration: 200,
 
templateString:"<div class=\"dijitTooltip dijitTooltipLeft\" id=\"dojoTooltip\">\n\t<div class=\"dijitTooltipContainer dijitTooltipContents\" dojoAttachPoint=\"containerNode\" waiRole='alert'></div>\n\t<div class=\"dijitTooltipConnector\"></div>\n</div>\n",
 
postCreate: function(){
dojo.body().appendChild(this.domNode);
 
this.bgIframe = new dijit.BackgroundIframe(this.domNode);
 
// Setup fade-in and fade-out functions.
this.fadeIn = dojo.fadeIn({ node: this.domNode, duration: this.duration, onEnd: dojo.hitch(this, "_onShow") });
this.fadeOut = dojo.fadeOut({ node: this.domNode, duration: this.duration, onEnd: dojo.hitch(this, "_onHide") });
 
},
 
show: function(/*String*/ innerHTML, /*DomNode*/ aroundNode){
// summary:
// Display tooltip w/specified contents to right specified node
// (To left if there's no space on the right, or if LTR==right)
 
if(this.aroundNode && this.aroundNode === aroundNode){
return;
}
 
if(this.fadeOut.status() == "playing"){
// previous tooltip is being hidden; wait until the hide completes then show new one
this._onDeck=arguments;
return;
}
this.containerNode.innerHTML=innerHTML;
 
// Firefox bug. when innerHTML changes to be shorter than previous
// one, the node size will not be updated until it moves.
this.domNode.style.top = (this.domNode.offsetTop + 1) + "px";
 
// position the element and change CSS according to position
var align = this.isLeftToRight() ? {'BR': 'BL', 'BL': 'BR'} : {'BL': 'BR', 'BR': 'BL'};
var pos = dijit.placeOnScreenAroundElement(this.domNode, aroundNode, align);
this.domNode.className="dijitTooltip dijitTooltip" + (pos.corner=='BL' ? "Right" : "Left");//FIXME: might overwrite class
 
// show it
dojo.style(this.domNode, "opacity", 0);
this.fadeIn.play();
this.isShowingNow = true;
this.aroundNode = aroundNode;
},
 
_onShow: function(){
if(dojo.isIE){
// the arrow won't show up on a node w/an opacity filter
this.domNode.style.filter="";
}
},
 
hide: function(aroundNode){
// summary: hide the tooltip
if(!this.aroundNode || this.aroundNode !== aroundNode){
return;
}
if(this._onDeck){
// this hide request is for a show() that hasn't even started yet;
// just cancel the pending show()
this._onDeck=null;
return;
}
this.fadeIn.stop();
this.isShowingNow = false;
this.aroundNode = null;
this.fadeOut.play();
},
 
_onHide: function(){
this.domNode.style.cssText=""; // to position offscreen again
if(this._onDeck){
// a show request has been queued up; do it now
this.show.apply(this, this._onDeck);
this._onDeck=null;
}
}
 
}
);
 
dijit.showTooltip = function(/*String*/ innerHTML, /*DomNode*/ aroundNode){
// summary:
// Display tooltip w/specified contents to right specified node
// (To left if there's no space on the right, or if LTR==right)
if(!dijit._masterTT){ dijit._masterTT = new dijit._MasterTooltip(); }
return dijit._masterTT.show(innerHTML, aroundNode);
};
 
dijit.hideTooltip = function(aroundNode){
// summary: hide the tooltip
if(!dijit._masterTT){ dijit._masterTT = new dijit._MasterTooltip(); }
return dijit._masterTT.hide(aroundNode);
};
 
dojo.declare(
"dijit.Tooltip",
dijit._Widget,
{
// summary
// Pops up a tooltip (a help message) when you hover over a node.
 
// label: String
// Text to display in the tooltip.
// Specified as innerHTML when creating the widget from markup.
label: "",
 
// showDelay: Integer
// Number of milliseconds to wait after hovering over/focusing on the object, before
// the tooltip is displayed.
showDelay: 400,
 
// connectId: String[]
// Id(s) of domNodes to attach the tooltip to.
// When user hovers over any of the specified dom nodes, the tooltip will appear.
connectId: [],
 
postCreate: function(){
if(this.srcNodeRef){
this.srcNodeRef.style.display = "none";
}
 
this._connectNodes = [];
dojo.forEach(this.connectId, function(id) {
var node = dojo.byId(id);
if (node) {
this._connectNodes.push(node);
dojo.forEach(["onMouseOver", "onMouseOut", "onFocus", "onBlur", "onHover", "onUnHover"], function(event){
this.connect(node, event.toLowerCase(), "_"+event);
}, this);
if(dojo.isIE){
// BiDi workaround
node.style.zoom = 1;
}
}
}, this);
},
 
_onMouseOver: function(/*Event*/ e){
this._onHover(e);
},
 
_onMouseOut: function(/*Event*/ e){
if(dojo.isDescendant(e.relatedTarget, e.target)){
// false event; just moved from target to target child; ignore.
return;
}
this._onUnHover(e);
},
 
_onFocus: function(/*Event*/ e){
this._focus = true;
this._onHover(e);
},
_onBlur: function(/*Event*/ e){
this._focus = false;
this._onUnHover(e);
},
 
_onHover: function(/*Event*/ e){
if(!this._showTimer){
var target = e.target;
this._showTimer = setTimeout(dojo.hitch(this, function(){this.open(target)}), this.showDelay);
}
},
 
_onUnHover: function(/*Event*/ e){
// keep a tooltip open if the associated element has focus
if(this._focus){ return; }
if(this._showTimer){
clearTimeout(this._showTimer);
delete this._showTimer;
}
this.close();
},
 
open: function(/*DomNode*/ target){
// summary: display the tooltip; usually not called directly.
target = target || this._connectNodes[0];
if(!target){ return; }
 
if(this._showTimer){
clearTimeout(this._showTimer);
delete this._showTimer;
}
dijit.showTooltip(this.label || this.domNode.innerHTML, target);
this._connectNode = target;
},
 
close: function(){
// summary: hide the tooltip; usually not called directly.
dijit.hideTooltip(this._connectNode);
delete this._connectNode;
if(this._showTimer){
clearTimeout(this._showTimer);
delete this._showTimer;
}
},
 
uninitialize: function(){
this.close();
}
}
);
 
}
/trunk/api/js/dojo1.0/dijit/ColorPalette.js
New file
0,0 → 1,262
if(!dojo._hasResource["dijit.ColorPalette"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.ColorPalette"] = true;
dojo.provide("dijit.ColorPalette");
 
dojo.require("dijit._Widget");
dojo.require("dijit._Templated");
dojo.require("dojo.colors");
dojo.require("dojo.i18n");
dojo.requireLocalization("dojo", "colors", null, "ko,zh,ja,zh-tw,ru,it,hu,ROOT,fr,pt,pl,es,de,cs");
 
dojo.declare(
"dijit.ColorPalette",
[dijit._Widget, dijit._Templated],
{
// summary
// Grid showing various colors, so the user can pick a certain color
 
// defaultTimeout: Number
// number of milliseconds before a held key or button becomes typematic
defaultTimeout: 500,
 
// timeoutChangeRate: Number
// fraction of time used to change the typematic timer between events
// 1.0 means that each typematic event fires at defaultTimeout intervals
// < 1.0 means that each typematic event fires at an increasing faster rate
timeoutChangeRate: 0.90,
 
// palette: String
// Size of grid, either "7x10" or "3x4".
palette: "7x10",
 
//_value: String
// The value of the selected color.
value: null,
 
//_currentFocus: Integer
// Index of the currently focused color.
_currentFocus: 0,
 
// _xDim: Integer
// This is the number of colors horizontally across.
_xDim: null,
 
// _yDim: Integer
/// This is the number of colors vertically down.
_yDim: null,
 
// _palettes: Map
// This represents the value of the colors.
// The first level is a hashmap of the different arrays available
// The next two dimensions represent the columns and rows of colors.
_palettes: {
 
"7x10": [["white", "seashell", "cornsilk", "lemonchiffon","lightyellow", "palegreen", "paleturquoise", "lightcyan", "lavender", "plum"],
["lightgray", "pink", "bisque", "moccasin", "khaki", "lightgreen", "lightseagreen", "lightskyblue", "cornflowerblue", "violet"],
["silver", "lightcoral", "sandybrown", "orange", "palegoldenrod", "chartreuse", "mediumturquoise", "skyblue", "mediumslateblue","orchid"],
["gray", "red", "orangered", "darkorange", "yellow", "limegreen", "darkseagreen", "royalblue", "slateblue", "mediumorchid"],
["dimgray", "crimson", "chocolate", "coral", "gold", "forestgreen", "seagreen", "blue", "blueviolet", "darkorchid"],
["darkslategray","firebrick","saddlebrown", "sienna", "olive", "green", "darkcyan", "mediumblue","darkslateblue", "darkmagenta" ],
["black", "darkred", "maroon", "brown", "darkolivegreen", "darkgreen", "midnightblue", "navy", "indigo", "purple"]],
 
"3x4": [["white", "lime", "green", "blue"],
["silver", "yellow", "fuchsia", "navy"],
["gray", "red", "purple", "black"]]
 
},
 
// _imagePaths: Map
// This is stores the path to the palette images
_imagePaths: {
"7x10": dojo.moduleUrl("dijit", "templates/colors7x10.png"),
"3x4": dojo.moduleUrl("dijit", "templates/colors3x4.png")
},
 
// _paletteCoords: Map
// This is a map that is used to calculate the coordinates of the
// images that make up the palette.
_paletteCoords: {
"leftOffset": 4, "topOffset": 4,
"cWidth": 20, "cHeight": 20
},
 
// templatePath: String
// Path to the template of this widget.
templateString:"<div class=\"dijitInline dijitColorPalette\">\n\t<div class=\"dijitColorPaletteInner\" dojoAttachPoint=\"divNode\" waiRole=\"grid\" tabIndex=\"-1\">\n\t\t<img class=\"dijitColorPaletteUnder\" dojoAttachPoint=\"imageNode\" waiRole=\"presentation\">\n\t</div>\t\n</div>\n",
 
// _paletteDims: Object
// Size of the supported palettes for alignment purposes.
_paletteDims: {
"7x10": {"width": "206px", "height": "145px"},
"3x4": {"width": "86px", "height": "64px"}
},
 
 
postCreate: function(){
// A name has to be given to the colorMap, this needs to be unique per Palette.
dojo.mixin(this.divNode.style, this._paletteDims[this.palette]);
this.imageNode.setAttribute("src", this._imagePaths[this.palette]);
var choices = this._palettes[this.palette];
this.domNode.style.position = "relative";
this._highlightNodes = [];
this.colorNames = dojo.i18n.getLocalization("dojo", "colors", this.lang);
var url= dojo.moduleUrl("dijit", "templates/blank.gif");
var colorObject = new dojo.Color(),
coords = this._paletteCoords;
for(var row=0; row < choices.length; row++){
for(var col=0; col < choices[row].length; col++) {
var highlightNode = document.createElement("img");
highlightNode.src = url;
dojo.addClass(highlightNode, "dijitPaletteImg");
var color = choices[row][col],
colorValue = colorObject.setColor(dojo.Color.named[color]);
highlightNode.alt = this.colorNames[color];
highlightNode.color = colorValue.toHex();
var highlightStyle = highlightNode.style;
highlightStyle.color = highlightStyle.backgroundColor = highlightNode.color;
dojo.forEach(["Dijitclick", "MouseOut", "MouseOver", "Blur", "Focus"], function(handler) {
this.connect(highlightNode, "on" + handler.toLowerCase(), "_onColor" + handler);
}, this);
this.divNode.appendChild(highlightNode);
highlightStyle.top = coords.topOffset + (row * coords.cHeight) + "px";
highlightStyle.left = coords.leftOffset + (col * coords.cWidth) + "px";
highlightNode.setAttribute("tabIndex", "-1");
highlightNode.title = this.colorNames[color];
dijit.setWaiRole(highlightNode, "gridcell");
highlightNode.index = this._highlightNodes.length;
this._highlightNodes.push(highlightNode);
}
}
this._highlightNodes[this._currentFocus].tabIndex = 0;
this._xDim = choices[0].length;
this._yDim = choices.length;
 
// Now set all events
// The palette itself is navigated to with the tab key on the keyboard
// Keyboard navigation within the Palette is with the arrow keys
// Spacebar selects the color.
// For the up key the index is changed by negative the x dimension.
 
var keyIncrementMap = {
UP_ARROW: -this._xDim,
// The down key the index is increase by the x dimension.
DOWN_ARROW: this._xDim,
// Right and left move the index by 1.
RIGHT_ARROW: 1,
LEFT_ARROW: -1
};
for(var key in keyIncrementMap){
this._connects.push(dijit.typematic.addKeyListener(this.domNode,
{keyCode:dojo.keys[key], ctrlKey:false, altKey:false, shiftKey:false},
this,
function(){
var increment = keyIncrementMap[key];
return function(count){ this._navigateByKey(increment, count); };
}(),
this.timeoutChangeRate, this.defaultTimeout));
}
},
 
focus: function(){
// summary:
// Focus this ColorPalette.
dijit.focus(this._highlightNodes[this._currentFocus]);
},
 
onChange: function(color){
// summary:
// Callback when a color is selected.
// color: String
// Hex value corresponding to color.
// console.debug("Color selected is: "+color);
},
 
_onColorDijitclick: function(/*Event*/ evt){
// summary:
// Handler for click, enter key & space key. Selects the color.
// evt:
// The event.
var target = evt.currentTarget;
if (this._currentFocus != target.index){
this._currentFocus = target.index;
dijit.focus(target);
}
this._selectColor(target);
dojo.stopEvent(evt);
},
 
_onColorMouseOut: function(/*Event*/ evt){
// summary:
// Handler for onMouseOut. Removes highlight.
// evt:
// The mouse event.
dojo.removeClass(evt.currentTarget, "dijitPaletteImgHighlight");
},
 
_onColorMouseOver: function(/*Event*/ evt){
// summary:
// Handler for onMouseOver. Highlights the color.
// evt:
// The mouse event.
var target = evt.currentTarget;
target.tabIndex = 0;
target.focus();
},
 
_onColorBlur: function(/*Event*/ evt){
// summary:
// Handler for onBlur. Removes highlight and sets
// the first color as the palette's tab point.
// evt:
// The blur event.
dojo.removeClass(evt.currentTarget, "dijitPaletteImgHighlight");
evt.currentTarget.tabIndex = -1;
this._currentFocus = 0;
this._highlightNodes[0].tabIndex = 0;
},
 
_onColorFocus: function(/*Event*/ evt){
// summary:
// Handler for onFocus. Highlights the color.
// evt:
// The focus event.
if(this._currentFocus != evt.currentTarget.index){
this._highlightNodes[this._currentFocus].tabIndex = -1;
}
this._currentFocus = evt.currentTarget.index;
dojo.addClass(evt.currentTarget, "dijitPaletteImgHighlight");
 
},
 
_selectColor: function(selectNode){
// summary:
// This selects a color. It triggers the onChange event
// area:
// The area node that covers the color being selected.
this.onChange(this.value = selectNode.color);
},
 
_navigateByKey: function(increment, typeCount){
// summary:we
// This is the callback for typematic.
// It changes the focus and the highlighed color.
// increment:
// How much the key is navigated.
// typeCount:
// How many times typematic has fired.
 
// typecount == -1 means the key is released.
if(typeCount == -1){ return; }
 
var newFocusIndex = this._currentFocus + increment;
if(newFocusIndex < this._highlightNodes.length && newFocusIndex > -1)
{
var focusNode = this._highlightNodes[newFocusIndex];
focusNode.tabIndex = 0;
focusNode.focus();
}
}
});
 
}
/trunk/api/js/dojo1.0/dijit/Tree.js
New file
0,0 → 1,914
if(!dojo._hasResource["dijit.Tree"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.Tree"] = true;
dojo.provide("dijit.Tree");
 
dojo.require("dojo.fx");
 
dojo.require("dijit._Widget");
dojo.require("dijit._Templated");
dojo.require("dijit._Container");
dojo.require("dojo.cookie");
 
dojo.declare(
"dijit._TreeNode",
[dijit._Widget, dijit._Templated, dijit._Container, dijit._Contained],
{
// summary
// Single node within a tree
 
// item: dojo.data.Item
// the dojo.data entry this tree represents
item: null,
 
isTreeNode: true,
 
// label: String
// Text of this tree node
label: "",
isExpandable: null, // show expando node
isExpanded: false,
 
// state: String
// dynamic loading-related stuff.
// When an empty folder node appears, it is "UNCHECKED" first,
// then after dojo.data query it becomes "LOADING" and, finally "LOADED"
state: "UNCHECKED",
templateString:"<div class=\"dijitTreeNode dijitTreeExpandLeaf dijitTreeChildrenNo\" waiRole=\"presentation\"\n\t><span dojoAttachPoint=\"expandoNode\" class=\"dijitTreeExpando\" waiRole=\"presentation\"\n\t></span\n\t><span dojoAttachPoint=\"expandoNodeText\" class=\"dijitExpandoText\" waiRole=\"presentation\"\n\t></span\n\t>\n\t<div dojoAttachPoint=\"contentNode\" class=\"dijitTreeContent\" waiRole=\"presentation\">\n\t\t<div dojoAttachPoint=\"iconNode\" class=\"dijitInline dijitTreeIcon\" waiRole=\"presentation\"></div>\n\t\t<span dojoAttachPoint=\"labelNode\" class=\"dijitTreeLabel\" wairole=\"treeitem\" tabindex=\"-1\"></span>\n\t</div>\n</div>\n",
 
postCreate: function(){
// set label, escaping special characters
this.setLabelNode(this.label);
 
// set expand icon for leaf
this._setExpando();
 
// set icon and label class based on item
this._updateItemClasses(this.item);
 
if(this.isExpandable){
dijit.setWaiState(this.labelNode, "expanded", this.isExpanded);
}
},
 
markProcessing: function(){
// summary: visually denote that tree is loading data, etc.
this.state = "LOADING";
this._setExpando(true);
},
 
unmarkProcessing: function(){
// summary: clear markup from markProcessing() call
this._setExpando(false);
},
 
_updateItemClasses: function(item){
// summary: set appropriate CSS classes for item (used to allow for item updates to change respective CSS)
this.iconNode.className = "dijitInline dijitTreeIcon " + this.tree.getIconClass(item);
this.labelNode.className = "dijitTreeLabel " + this.tree.getLabelClass(item);
},
_updateLayout: function(){
// summary: set appropriate CSS classes for this.domNode
var parent = this.getParent();
if(parent && parent.isTree && parent._hideRoot){
/* if we are hiding the root node then make every first level child look like a root node */
dojo.addClass(this.domNode, "dijitTreeIsRoot");
}else{
dojo.toggleClass(this.domNode, "dijitTreeIsLast", !this.getNextSibling());
}
},
 
_setExpando: function(/*Boolean*/ processing){
// summary: set the right image for the expando node
 
// apply the appropriate class to the expando node
var styles = ["dijitTreeExpandoLoading", "dijitTreeExpandoOpened",
"dijitTreeExpandoClosed", "dijitTreeExpandoLeaf"];
var idx = processing ? 0 : (this.isExpandable ? (this.isExpanded ? 1 : 2) : 3);
dojo.forEach(styles,
function(s){
dojo.removeClass(this.expandoNode, s);
}, this
);
dojo.addClass(this.expandoNode, styles[idx]);
 
// provide a non-image based indicator for images-off mode
this.expandoNodeText.innerHTML =
processing ? "*" :
(this.isExpandable ?
(this.isExpanded ? "-" : "+") : "*");
},
 
expand: function(){
// summary: show my children
if(this.isExpanded){ return; }
// cancel in progress collapse operation
if(this._wipeOut.status() == "playing"){
this._wipeOut.stop();
}
 
this.isExpanded = true;
dijit.setWaiState(this.labelNode, "expanded", "true");
dijit.setWaiRole(this.containerNode, "group");
 
this._setExpando();
 
this._wipeIn.play();
},
 
collapse: function(){
if(!this.isExpanded){ return; }
 
// cancel in progress expand operation
if(this._wipeIn.status() == "playing"){
this._wipeIn.stop();
}
 
this.isExpanded = false;
dijit.setWaiState(this.labelNode, "expanded", "false");
this._setExpando();
 
this._wipeOut.play();
},
 
setLabelNode: function(label){
this.labelNode.innerHTML="";
this.labelNode.appendChild(document.createTextNode(label));
},
 
_setChildren: function(/* Object[] */ childrenArray){
// summary:
// Sets the children of this node.
// Sets this.isExpandable based on whether or not there are children
// Takes array of objects like: {label: ...} (_TreeNode options basically)
// See parameters of _TreeNode for details.
 
this.destroyDescendants();
 
this.state = "LOADED";
var nodeMap= {};
if(childrenArray && childrenArray.length > 0){
this.isExpandable = true;
if(!this.containerNode){ // maybe this node was unfolderized and still has container
this.containerNode = this.tree.containerNodeTemplate.cloneNode(true);
this.domNode.appendChild(this.containerNode);
}
 
// Create _TreeNode widget for each specified tree node
dojo.forEach(childrenArray, function(childParams){
var child = new dijit._TreeNode(dojo.mixin({
tree: this.tree,
label: this.tree.getLabel(childParams.item)
}, childParams));
this.addChild(child);
var identity = this.tree.store.getIdentity(childParams.item);
nodeMap[identity] = child;
if(this.tree.persist){
if(this.tree._openedItemIds[identity]){
this.tree._expandNode(child);
}
}
}, this);
 
// note that updateLayout() needs to be called on each child after
// _all_ the children exist
dojo.forEach(this.getChildren(), function(child, idx){
child._updateLayout();
});
}else{
this.isExpandable=false;
}
 
if(this._setExpando){
// change expando to/form dot or + icon, as appropriate
this._setExpando(false);
}
 
if(this.isTree && this._hideRoot){
// put first child in tab index if one exists.
var fc = this.getChildren()[0];
var tabnode = fc ? fc.labelNode : this.domNode;
tabnode.setAttribute("tabIndex", "0");
}
 
// create animations for showing/hiding the children (if children exist)
if(this.containerNode && !this._wipeIn){
this._wipeIn = dojo.fx.wipeIn({node: this.containerNode, duration: 150});
this._wipeOut = dojo.fx.wipeOut({node: this.containerNode, duration: 150});
}
 
return nodeMap;
},
 
_addChildren: function(/* object[] */ childrenArray){
// summary:
// adds the children to this node.
// Takes array of objects like: {label: ...} (_TreeNode options basically)
 
// See parameters of _TreeNode for details.
var nodeMap = {};
if(childrenArray && childrenArray.length > 0){
dojo.forEach(childrenArray, function(childParams){
var child = new dijit._TreeNode(
dojo.mixin({
tree: this.tree,
label: this.tree.getLabel(childParams.item)
}, childParams)
);
this.addChild(child);
nodeMap[this.tree.store.getIdentity(childParams.item)] = child;
}, this);
 
dojo.forEach(this.getChildren(), function(child, idx){
child._updateLayout();
});
}
 
return nodeMap;
},
 
deleteNode: function(/* treeNode */ node){
node.destroy();
 
var children = this.getChildren();
if(children.length == 0){
this.isExpandable = false;
this.collapse();
}
 
dojo.forEach(children, function(child){
child._updateLayout();
});
},
 
makeExpandable: function(){
//summary
// if this node wasn't already showing the expando node,
// turn it into one and call _setExpando()
this.isExpandable = true;
this._setExpando(false);
}
});
 
dojo.declare(
"dijit.Tree",
dijit._TreeNode,
{
// summary
// This widget displays hierarchical data from a store. A query is specified
// to get the "top level children" from a data store, and then those items are
// queried for their children and so on (but lazily, as the user clicks the expand node).
//
// Thus in the default mode of operation this widget is technically a forest, not a tree,
// in that there can be multiple "top level children". However, if you specify label,
// then a special top level node (not corresponding to any item in the datastore) is
// created, to father all the top level children.
 
// store: String||dojo.data.Store
// The store to get data to display in the tree
store: null,
 
// query: String
// query to get top level node(s) of tree (ex: {type:'continent'})
query: null,
 
// childrenAttr: String
// one ore more attributes that holds children of a tree node
childrenAttr: ["children"],
 
templateString:"<div class=\"dijitTreeContainer\" style=\"\" waiRole=\"tree\"\n\tdojoAttachEvent=\"onclick:_onClick,onkeypress:_onKeyPress\">\n\t<div class=\"dijitTreeNode dijitTreeIsRoot dijitTreeExpandLeaf dijitTreeChildrenNo\" waiRole=\"presentation\"\n\t\tdojoAttachPoint=\"rowNode\"\n\t\t><span dojoAttachPoint=\"expandoNode\" class=\"dijitTreeExpando\" waiRole=\"presentation\"\n\t\t></span\n\t\t><span dojoAttachPoint=\"expandoNodeText\" class=\"dijitExpandoText\" waiRole=\"presentation\"\n\t\t></span\n\t\t>\n\t\t<div dojoAttachPoint=\"contentNode\" class=\"dijitTreeContent\" waiRole=\"presentation\">\n\t\t\t<div dojoAttachPoint=\"iconNode\" class=\"dijitInline dijitTreeIcon\" waiRole=\"presentation\"></div>\n\t\t\t<span dojoAttachPoint=\"labelNode\" class=\"dijitTreeLabel\" wairole=\"treeitem\" tabindex=\"0\"></span>\n\t\t</div>\n\t</div>\n</div>\n",
 
isExpandable: true,
 
isTree: true,
 
// persist: Boolean
// enables/disables use of cookies for state saving.
persist: true,
// dndController: String
// class name to use as as the dnd controller
dndController: null,
 
//parameters to pull off of the tree and pass on to the dndController as its params
dndParams: ["onDndDrop","itemCreator","onDndCancel","checkAcceptance", "checkItemAcceptance"],
 
//declare the above items so they can be pulled from the tree's markup
onDndDrop:null,
itemCreator:null,
onDndCancel:null,
checkAcceptance:null,
checkItemAcceptance:null,
 
_publish: function(/*String*/ topicName, /*Object*/ message){
// summary:
// Publish a message for this widget/topic
dojo.publish(this.id, [dojo.mixin({tree: this, event: topicName}, message||{})]);
},
 
postMixInProperties: function(){
this.tree = this;
this.lastFocused = this.labelNode;
 
this._itemNodeMap={};
 
this._hideRoot = !this.label;
 
if(!this.store.getFeatures()['dojo.data.api.Identity']){
throw new Error("dijit.tree requires access to a store supporting the dojo.data Identity api");
}
 
if(!this.cookieName){
this.cookieName = this.id + "SaveStateCookie";
}
 
// if the store supports Notification, subscribe to the notification events
if(this.store.getFeatures()['dojo.data.api.Notification']){
this.connect(this.store, "onNew", "_onNewItem");
this.connect(this.store, "onDelete", "_onDeleteItem");
this.connect(this.store, "onSet", "_onSetItem");
}
},
 
postCreate: function(){
// load in which nodes should be opened automatically
if(this.persist){
var cookie = dojo.cookie(this.cookieName);
this._openedItemIds = {};
if(cookie){
dojo.forEach(cookie.split(','), function(item){
this._openedItemIds[item] = true;
}, this);
}
}
// make template for container node (we will clone this and insert it into
// any nodes that have children)
var div = document.createElement('div');
div.style.display = 'none';
div.className = "dijitTreeContainer";
dijit.setWaiRole(div, "presentation");
this.containerNodeTemplate = div;
 
if(this._hideRoot){
this.rowNode.style.display="none";
}
 
this.inherited("postCreate", arguments);
 
// load top level children
this._expandNode(this);
 
if(this.dndController){
if(dojo.isString(this.dndController)){
this.dndController= dojo.getObject(this.dndController);
}
var params={};
for (var i=0; i<this.dndParams.length;i++){
if(this[this.dndParams[i]]){
params[this.dndParams[i]]=this[this.dndParams[i]];
}
}
this.dndController= new this.dndController(this, params);
}
 
this.connect(this.domNode,
dojo.isIE ? "onactivate" : "onfocus",
"_onTreeFocus");
},
 
////////////// Data store related functions //////////////////////
 
mayHaveChildren: function(/*dojo.data.Item*/ item){
// summary
// User overridable function to tell if an item has or may have children.
// Controls whether or not +/- expando icon is shown.
// (For efficiency reasons we may not want to check if an element has
// children until user clicks the expando node)
 
return dojo.some(this.childrenAttr, function(attr){
return this.store.hasAttribute(item, attr);
}, this);
},
 
getItemChildren: function(/*dojo.data.Item*/ parentItem, /*function(items)*/ onComplete){
// summary
// User overridable function that return array of child items of given parent item,
// or if parentItem==null then return top items in tree
var store = this.store;
if(parentItem == null){
// get top level nodes
store.fetch({ query: this.query, onComplete: onComplete});
}else{
// get children of specified node
var childItems = [];
for (var i=0; i<this.childrenAttr.length; i++){
childItems= childItems.concat(store.getValues(parentItem, this.childrenAttr[i]));
}
// count how many items need to be loaded
var _waitCount = 0;
dojo.forEach(childItems, function(item){ if(!store.isItemLoaded(item)){ _waitCount++; } });
 
if(_waitCount == 0){
// all items are already loaded. proceed..
onComplete(childItems);
}else{
// still waiting for some or all of the items to load
function onItem(item){
if(--_waitCount == 0){
// all nodes have been loaded, send them to the tree
onComplete(childItems);
}
}
dojo.forEach(childItems, function(item){
if(!store.isItemLoaded(item)){
store.loadItem({item: item, onItem: onItem});
}
});
}
}
},
 
getItemParentIdentity: function(/*dojo.data.Item*/ item, /*Object*/ parentInfo){
// summary
// User overridable function, to return id of parent (or null if top level).
// It's called with args from dojo.store.onNew
return this.store.getIdentity(parentInfo.item); // String
},
 
getLabel: function(/*dojo.data.Item*/ item){
// summary: user overridable function to get the label for a tree node (given the item)
return this.store.getLabel(item); // String
},
 
getIconClass: function(/*dojo.data.Item*/ item){
// summary: user overridable function to return CSS class name to display icon
},
 
getLabelClass: function(/*dojo.data.Item*/ item){
// summary: user overridable function to return CSS class name to display label
},
 
_onLoadAllItems: function(/*_TreeNode*/ node, /*dojo.data.Item[]*/ items){
// sumary: callback when all the children of a given node have been loaded
var childParams=dojo.map(items, function(item){
return {
item: item,
isExpandable: this.mayHaveChildren(item)
};
}, this);
 
dojo.mixin(this._itemNodeMap,node._setChildren(childParams));
 
this._expandNode(node);
},
 
/////////// Keyboard and Mouse handlers ////////////////////
 
_onKeyPress: function(/*Event*/ e){
// summary: translates keypress events into commands for the controller
if(e.altKey){ return; }
var treeNode = dijit.getEnclosingWidget(e.target);
if(!treeNode){ return; }
 
// Note: On IE e.keyCode is not 0 for printables so check e.charCode.
// In dojo charCode is universally 0 for non-printables.
if(e.charCode){ // handle printables (letter navigation)
// Check for key navigation.
var navKey = e.charCode;
if(!e.altKey && !e.ctrlKey && !e.shiftKey && !e.metaKey){
navKey = (String.fromCharCode(navKey)).toLowerCase();
this._onLetterKeyNav( { node: treeNode, key: navKey } );
dojo.stopEvent(e);
}
}else{ // handle non-printables (arrow keys)
var map = this._keyHandlerMap;
if(!map){
// setup table mapping keys to events
map = {};
map[dojo.keys.ENTER]="_onEnterKey";
map[dojo.keys.LEFT_ARROW]="_onLeftArrow";
map[dojo.keys.RIGHT_ARROW]="_onRightArrow";
map[dojo.keys.UP_ARROW]="_onUpArrow";
map[dojo.keys.DOWN_ARROW]="_onDownArrow";
map[dojo.keys.HOME]="_onHomeKey";
map[dojo.keys.END]="_onEndKey";
this._keyHandlerMap = map;
}
if(this._keyHandlerMap[e.keyCode]){
this[this._keyHandlerMap[e.keyCode]]( { node: treeNode, item: treeNode.item } );
dojo.stopEvent(e);
}
}
},
 
_onEnterKey: function(/*Object*/ message){
this._publish("execute", { item: message.item, node: message.node} );
this.onClick(message.item, message.node);
},
 
_onDownArrow: function(/*Object*/ message){
// summary: down arrow pressed; get next visible node, set focus there
var returnNode = this._navToNextNode(message.node);
if(returnNode && returnNode.isTreeNode){
returnNode.tree.focusNode(returnNode);
return returnNode;
}
},
 
_onUpArrow: function(/*Object*/ message){
// summary: up arrow pressed; move to previous visible node
 
var nodeWidget = message.node;
var returnWidget = nodeWidget;
 
// if younger siblings
var previousSibling = nodeWidget.getPreviousSibling();
if(previousSibling){
nodeWidget = previousSibling;
// if the previous nodeWidget is expanded, dive in deep
while(nodeWidget.isExpandable && nodeWidget.isExpanded && nodeWidget.hasChildren()){
returnWidget = nodeWidget;
// move to the last child
var children = nodeWidget.getChildren();
nodeWidget = children[children.length-1];
}
}else{
// if this is the first child, return the parent
// unless the parent is the root of a tree with a hidden root
var parent = nodeWidget.getParent();
if(!(this._hideRoot && parent === this)){
nodeWidget = parent;
}
}
 
if(nodeWidget && nodeWidget.isTreeNode){
returnWidget = nodeWidget;
}
 
if(returnWidget && returnWidget.isTreeNode){
returnWidget.tree.focusNode(returnWidget);
return returnWidget;
}
},
 
_onRightArrow: function(/*Object*/ message){
// summary: right arrow pressed; go to child node
var nodeWidget = message.node;
var returnWidget = nodeWidget;
 
// if not expanded, expand, else move to 1st child
if(nodeWidget.isExpandable && !nodeWidget.isExpanded){
this._expandNode(nodeWidget);
}else if(nodeWidget.hasChildren()){
nodeWidget = nodeWidget.getChildren()[0];
}
 
if(nodeWidget && nodeWidget.isTreeNode){
returnWidget = nodeWidget;
}
 
if(returnWidget && returnWidget.isTreeNode){
returnWidget.tree.focusNode(returnWidget);
return returnWidget;
}
},
 
_onLeftArrow: function(/*Object*/ message){
// summary: left arrow pressed; go to parent
 
var node = message.node;
var returnWidget = node;
 
// if not collapsed, collapse, else move to parent
if(node.isExpandable && node.isExpanded){
this._collapseNode(node);
}else{
node = node.getParent();
}
if(node && node.isTreeNode){
returnWidget = node;
}
 
if(returnWidget && returnWidget.isTreeNode){
returnWidget.tree.focusNode(returnWidget);
return returnWidget;
}
},
 
_onHomeKey: function(){
// summary: home pressed; get first visible node, set focus there
var returnNode = this._navToRootOrFirstNode();
if(returnNode){
returnNode.tree.focusNode(returnNode);
return returnNode;
}
},
 
_onEndKey: function(/*Object*/ message){
// summary: end pressed; go to last visible node
 
var returnWidget = message.node.tree;
 
var lastChild = returnWidget;
while(lastChild.isExpanded){
var c = lastChild.getChildren();
lastChild = c[c.length - 1];
if(lastChild.isTreeNode){
returnWidget = lastChild;
}
}
 
if(returnWidget && returnWidget.isTreeNode){
returnWidget.tree.focusNode(returnWidget);
return returnWidget;
}
},
 
_onLetterKeyNav: function(message){
// summary: letter key pressed; search for node starting with first char = key
var node = startNode = message.node;
var key = message.key;
do{
node = this._navToNextNode(node);
//check for last node, jump to first node if necessary
if(!node){
node = this._navToRootOrFirstNode();
}
}while(node !== startNode && (node.label.charAt(0).toLowerCase() != key));
if(node && node.isTreeNode){
// no need to set focus if back where we started
if(node !== startNode){
node.tree.focusNode(node);
}
return node;
}
},
 
_onClick: function(/*Event*/ e){
// summary: translates click events into commands for the controller to process
var domElement = e.target;
 
// find node
var nodeWidget = dijit.getEnclosingWidget(domElement);
if(!nodeWidget || !nodeWidget.isTreeNode){
return;
}
 
if(domElement == nodeWidget.expandoNode ||
domElement == nodeWidget.expandoNodeText){
// expando node was clicked
if(nodeWidget.isExpandable){
this._onExpandoClick({node:nodeWidget});
}
}else{
this._publish("execute", { item: nodeWidget.item, node: nodeWidget} );
this.onClick(nodeWidget.item, nodeWidget);
this.focusNode(nodeWidget);
}
dojo.stopEvent(e);
},
 
_onExpandoClick: function(/*Object*/ message){
// summary: user clicked the +/- icon; expand or collapse my children.
var node = message.node;
if(node.isExpanded){
this._collapseNode(node);
}else{
this._expandNode(node);
}
},
 
onClick: function(/* dojo.data */ item, /*TreeNode*/ node){
// summary: user overridable function for executing a tree item
},
 
_navToNextNode: function(node){
// summary: get next visible node
var returnNode;
// if this is an expanded node, get the first child
if(node.isExpandable && node.isExpanded && node.hasChildren()){
returnNode = node.getChildren()[0];
}else{
// find a parent node with a sibling
while(node && node.isTreeNode){
returnNode = node.getNextSibling();
if(returnNode){
break;
}
node = node.getParent();
}
}
return returnNode;
},
 
_navToRootOrFirstNode: function(){
// summary: get first visible node
if(!this._hideRoot){
return this;
}else{
var returnNode = this.getChildren()[0];
if(returnNode && returnNode.isTreeNode){
return returnNode;
}
}
},
 
_collapseNode: function(/*_TreeNode*/ node){
// summary: called when the user has requested to collapse the node
 
if(node.isExpandable){
if(node.state == "LOADING"){
// ignore clicks while we are in the process of loading data
return;
}
if(this.lastFocused){
// are we collapsing a descendant with focus?
if(dojo.isDescendant(this.lastFocused.domNode, node.domNode)){
this.focusNode(node);
}else{
// clicking the expando node might have erased focus from
// the current item; restore it
this.focusNode(this.lastFocused);
}
}
node.collapse();
if(this.persist && node.item){
delete this._openedItemIds[this.store.getIdentity(node.item)];
this._saveState();
}
}
},
 
_expandNode: function(/*_TreeNode*/ node){
// summary: called when the user has requested to expand the node
 
// clicking the expando node might have erased focus from the current item; restore it
var t = node.tree;
if(t.lastFocused){ t.focusNode(t.lastFocused); }
 
if(!node.isExpandable){
return;
}
 
var store = this.store;
var getValue = this.store.getValue;
 
switch(node.state){
case "LOADING":
// ignore clicks while we are in the process of loading data
return;
 
case "UNCHECKED":
// need to load all the children, and then expand
node.markProcessing();
var _this = this;
var onComplete = function(childItems){
node.unmarkProcessing();
_this._onLoadAllItems(node, childItems);
};
this.getItemChildren(node.item, onComplete);
break;
 
default:
// data is already loaded; just proceed
if(node.expand){ // top level Tree doesn't have expand() method
node.expand();
if(this.persist && node.item){
this._openedItemIds[this.store.getIdentity(node.item)] = true;
this._saveState();
}
}
break;
}
},
 
////////////////// Miscellaneous functions ////////////////
 
blurNode: function(){
// summary
// Removes focus from the currently focused node (which must be visible).
// Usually not called directly (just call focusNode() on another node instead)
var node = this.lastFocused;
if(!node){ return; }
var labelNode = node.labelNode;
dojo.removeClass(labelNode, "dijitTreeLabelFocused");
labelNode.setAttribute("tabIndex", "-1");
this.lastFocused = null;
},
 
focusNode: function(/* _tree.Node */ node){
// summary
// Focus on the specified node (which must be visible)
 
// set focus so that the label will be voiced using screen readers
node.labelNode.focus();
},
 
_onBlur: function(){
// summary:
// We've moved away from the whole tree. The currently "focused" node
// (see focusNode above) should remain as the lastFocused node so we can
// tab back into the tree. Just change CSS to get rid of the dotted border
// until that time
if(this.lastFocused){
var labelNode = this.lastFocused.labelNode;
dojo.removeClass(labelNode, "dijitTreeLabelFocused");
}
},
 
_onTreeFocus: function(evt){
var node = dijit.getEnclosingWidget(evt.target);
if(node != this.lastFocused){
this.blurNode();
}
var labelNode = node.labelNode;
// set tabIndex so that the tab key can find this node
labelNode.setAttribute("tabIndex", "0");
dojo.addClass(labelNode, "dijitTreeLabelFocused");
this.lastFocused = node;
},
 
//////////////// Events from data store //////////////////////////
 
 
_onNewItem: function(/*Object*/ item, parentInfo){
//summary: callback when new item has been added to the store.
 
var loadNewItem; // should new item be displayed in tree?
 
if(parentInfo){
var parent = this._itemNodeMap[this.getItemParentIdentity(item, parentInfo)];
// If new item's parent item not in tree view yet, can safely ignore.
// Also, if a query of specified parent wouldn't return this item, then ignore.
if(!parent ||
dojo.indexOf(this.childrenAttr, parentInfo.attribute) == -1){
return;
}
}
 
var childParams = {
item: item,
isExpandable: this.mayHaveChildren(item)
};
if(parent){
if(!parent.isExpandable){
parent.makeExpandable();
}
if(parent.state=="LOADED" || parent.isExpanded){
var childrenMap=parent._addChildren([childParams]);
}
}else{
// top level node
var childrenMap=this._addChildren([childParams]);
}
 
if(childrenMap){
dojo.mixin(this._itemNodeMap, childrenMap);
//this._itemNodeMap[this.store.getIdentity(item)]=child;
}
},
_onDeleteItem: function(/*Object*/ item){
//summary: delete event from the store
//since the object has just been deleted, we need to
//use the name directly
var identity = this.store.getIdentity(item);
var node = this._itemNodeMap[identity];
 
if(node){
var parent = node.getParent();
parent.deleteNode(node);
this._itemNodeMap[identity]=null;
}
},
 
_onSetItem: function(/*Object*/ item){
//summary: set data event on an item in the store
var identity = this.store.getIdentity(item);
node = this._itemNodeMap[identity];
 
if(node){
node.setLabelNode(this.getLabel(item));
node._updateItemClasses(item);
}
},
_saveState: function(){
//summary: create and save a cookie with the currently expanded nodes identifiers
if(!this.persist){
return;
}
var ary = [];
for(var id in this._openedItemIds){
ary.push(id);
}
dojo.cookie(this.cookieName, ary.join(","));
}
});
 
}
/trunk/api/js/dojo1.0/dijit/layout/LinkPane.js
New file
0,0 → 1,36
if(!dojo._hasResource["dijit.layout.LinkPane"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.layout.LinkPane"] = true;
dojo.provide("dijit.layout.LinkPane");
 
dojo.require("dijit.layout.ContentPane");
dojo.require("dijit._Templated");
 
dojo.declare("dijit.layout.LinkPane",
[dijit.layout.ContentPane, dijit._Templated],
{
// summary:
// A ContentPane that loads data remotely
// description:
// LinkPane is just a ContentPane that loads data remotely (via the href attribute),
// and has markup similar to an anchor. The anchor's body (the words between <a> and </a>)
// become the title of the widget (used for TabContainer, AccordionContainer, etc.)
// example:
// <a href="foo.html">my title</a>
 
// I'm using a template because the user may specify the input as
// <a href="foo.html">title</a>, in which case we need to get rid of the
// <a> because we don't want a link.
templateString: '<div class="dijitLinkPane"></div>',
 
postCreate: function(){
 
// If user has specified node contents, they become the title
// (the link must be plain text)
if(this.srcNodeRef){
this.title += this.srcNodeRef.innerHTML;
}
this.inherited("postCreate",arguments);
}
});
 
}
/trunk/api/js/dojo1.0/dijit/layout/templates/TabContainer.html
New file
0,0 → 1,4
<div class="dijitTabContainer">
<div dojoAttachPoint="tablistNode"></div>
<div class="dijitTabPaneWrapper" dojoAttachPoint="containerNode"></div>
</div>
/trunk/api/js/dojo1.0/dijit/layout/templates/TooltipDialog.html
New file
0,0 → 1,7
<div class="dijitTooltipDialog" >
<div class="dijitTooltipContainer">
<div class ="dijitTooltipContents dijitTooltipFocusNode" dojoAttachPoint="containerNode" tabindex="0" waiRole="dialog"></div>
</div>
<span dojoAttachPoint="tabEnd" tabindex="0" dojoAttachEvent="focus:_cycleFocus"></span>
<div class="dijitTooltipConnector" ></div>
</div>
/trunk/api/js/dojo1.0/dijit/layout/templates/_TabButton.html
New file
0,0 → 1,8
<div dojoAttachEvent='onclick:onClick,onmouseenter:_onMouse,onmouseleave:_onMouse'>
<div class='dijitTabInnerDiv' dojoAttachPoint='innerDiv'>
<span dojoAttachPoint='containerNode,focusNode'>${!label}</span>
<span dojoAttachPoint='closeButtonNode' class='closeImage' dojoAttachEvent='onmouseenter:_onMouse, onmouseleave:_onMouse, onclick:onClickCloseButton' stateModifier='CloseButton'>
<span dojoAttachPoint='closeText' class='closeText'>x</span>
</span>
</div>
</div>
/trunk/api/js/dojo1.0/dijit/layout/templates/AccordionPane.html
New file
0,0 → 1,11
<div class='dijitAccordionPane'
><div dojoAttachPoint='titleNode,focusNode' dojoAttachEvent='ondijitclick:_onTitleClick,onkeypress:_onTitleKeyPress,onfocus:_handleFocus,onblur:_handleFocus'
class='dijitAccordionTitle' wairole="tab"
><div class='dijitAccordionArrow'></div
><div class='arrowTextUp' waiRole="presentation">&#9650;</div
><div class='arrowTextDown' waiRole="presentation">&#9660;</div
><div dojoAttachPoint='titleTextNode' class='dijitAccordionText'>${title}</div></div
><div><div dojoAttachPoint='containerNode' style='overflow: hidden; height: 1px; display: none'
class='dijitAccordionBody' wairole="tabpanel"
></div></div>
</div>
/trunk/api/js/dojo1.0/dijit/layout/AccordionContainer.js
New file
0,0 → 1,209
if(!dojo._hasResource["dijit.layout.AccordionContainer"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.layout.AccordionContainer"] = true;
dojo.provide("dijit.layout.AccordionContainer");
 
dojo.require("dojo.fx");
 
dojo.require("dijit._Container");
dojo.require("dijit._Templated");
dojo.require("dijit.layout.StackContainer");
dojo.require("dijit.layout.ContentPane");
 
dojo.declare(
"dijit.layout.AccordionContainer",
dijit.layout.StackContainer,
{
// summary:
// Holds a set of panes where every pane's title is visible, but only one pane's content is visible at a time,
// and switching between panes is visualized by sliding the other panes up/down.
// usage:
// <div dojoType="dijit.layout.AccordionContainer">
// <div dojoType="dijit.layout.AccordionPane" title="pane 1">
// <div dojoType="dijit.layout.ContentPane">...</div>
// </div>
// <div dojoType="dijit.layout.AccordionPane" title="pane 2">
// <p>This is some text</p>
// ...
// </div>
 
// duration: Integer
// Amount of time (in ms) it takes to slide panes
duration: 250,
 
_verticalSpace: 0,
 
postCreate: function(){
this.domNode.style.overflow="hidden";
this.inherited("postCreate",arguments);
dijit.setWaiRole(this.domNode, "tablist");
dojo.addClass(this.domNode,"dijitAccordionContainer");
},
 
startup: function(){
if(this._started){ return; }
this.inherited("startup",arguments);
if(this.selectedChildWidget){
var style = this.selectedChildWidget.containerNode.style;
style.display = "";
style.overflow = "auto";
this.selectedChildWidget._setSelectedState(true);
}
},
 
layout: function(){
// summary
// Set the height of the open pane based on what room remains
// get cumulative height of all the title bars, and figure out which pane is open
var totalCollapsedHeight = 0;
var openPane = this.selectedChildWidget;
dojo.forEach(this.getChildren(), function(child){
totalCollapsedHeight += child.getTitleHeight();
});
var mySize = this._contentBox;
this._verticalSpace = (mySize.h - totalCollapsedHeight);
if(openPane){
openPane.containerNode.style.height = this._verticalSpace + "px";
/***
TODO: this is wrong. probably you wanted to call resize on the SplitContainer
inside the AccordionPane??
if(openPane.resize){
openPane.resize({h: this._verticalSpace});
}
***/
}
},
 
_setupChild: function(/*Widget*/ page){
// Summary: prepare the given child
return page;
},
 
_transition: function(/*Widget?*/newWidget, /*Widget?*/oldWidget){
//TODO: should be able to replace this with calls to slideIn/slideOut
if(this._inTransition){ return; }
this._inTransition = true;
var animations = [];
var paneHeight = this._verticalSpace;
if(newWidget){
newWidget.setSelected(true);
var newContents = newWidget.containerNode;
newContents.style.display = "";
 
animations.push(dojo.animateProperty({
node: newContents,
duration: this.duration,
properties: {
height: { start: "1", end: paneHeight }
},
onEnd: function(){
newContents.style.overflow = "auto";
}
}));
}
if(oldWidget){
oldWidget.setSelected(false);
var oldContents = oldWidget.containerNode;
oldContents.style.overflow = "hidden";
animations.push(dojo.animateProperty({
node: oldContents,
duration: this.duration,
properties: {
height: { start: paneHeight, end: "1" }
},
onEnd: function(){
oldContents.style.display = "none";
}
}));
}
 
this._inTransition = false;
 
dojo.fx.combine(animations).play();
},
 
// note: we are treating the container as controller here
_onKeyPress: function(/*Event*/ e){
if(this.disabled || e.altKey ){ return; }
var k = dojo.keys;
switch(e.keyCode){
case k.LEFT_ARROW:
case k.UP_ARROW:
case k.PAGE_UP:
this._adjacent(false)._onTitleClick();
dojo.stopEvent(e);
break;
case k.RIGHT_ARROW:
case k.DOWN_ARROW:
case k.PAGE_DOWN:
this._adjacent(true)._onTitleClick();
dojo.stopEvent(e);
break;
default:
if(e.ctrlKey && e.keyCode == k.TAB){
this._adjacent(e._dijitWidget, !e.shiftKey)._onTitleClick();
dojo.stopEvent(e);
}
}
}
}
);
 
dojo.declare(
"dijit.layout.AccordionPane",
[dijit.layout.ContentPane, dijit._Templated, dijit._Contained],
{
// summary
// AccordionPane is a ContentPane with a title that may contain another widget.
// Nested layout widgets, such as SplitContainer, are not supported at this time.
 
templateString:"<div class='dijitAccordionPane'\n\t><div dojoAttachPoint='titleNode,focusNode' dojoAttachEvent='ondijitclick:_onTitleClick,onkeypress:_onTitleKeyPress,onfocus:_handleFocus,onblur:_handleFocus'\n\t\tclass='dijitAccordionTitle' wairole=\"tab\"\n\t\t><div class='dijitAccordionArrow'></div\n\t\t><div class='arrowTextUp' waiRole=\"presentation\">&#9650;</div\n\t\t><div class='arrowTextDown' waiRole=\"presentation\">&#9660;</div\n\t\t><div dojoAttachPoint='titleTextNode' class='dijitAccordionText'>${title}</div></div\n\t><div><div dojoAttachPoint='containerNode' style='overflow: hidden; height: 1px; display: none'\n\t\tclass='dijitAccordionBody' wairole=\"tabpanel\"\n\t></div></div>\n</div>\n",
 
postCreate: function(){
this.inherited("postCreate",arguments)
dojo.setSelectable(this.titleNode, false);
this.setSelected(this.selected);
},
 
getTitleHeight: function(){
// summary: returns the height of the title dom node
return dojo.marginBox(this.titleNode).h; // Integer
},
 
_onTitleClick: function(){
// summary: callback when someone clicks my title
var parent = this.getParent();
if(!parent._inTransition){
parent.selectChild(this);
dijit.focus(this.focusNode);
}
},
 
_onTitleKeyPress: function(/*Event*/ evt){
evt._dijitWidget = this;
return this.getParent()._onKeyPress(evt);
},
 
_setSelectedState: function(/*Boolean*/ isSelected){
this.selected = isSelected;
dojo[(isSelected ? "addClass" : "removeClass")](this.domNode,"dijitAccordionPane-selected");
this.focusNode.setAttribute("tabIndex", isSelected ? "0" : "-1");
},
_handleFocus: function(/*Event*/e){
// summary: handle the blur and focus state of this widget
dojo[(e.type=="focus" ? "addClass" : "removeClass")](this.focusNode,"dijitAccordionPaneFocused");
},
 
setSelected: function(/*Boolean*/ isSelected){
// summary: change the selected state on this pane
this._setSelectedState(isSelected);
if(isSelected){ this.onSelected(); }
},
 
onSelected: function(){
// summary: called when this pane is selected
}
});
 
}
/trunk/api/js/dojo1.0/dijit/layout/StackContainer.js
New file
0,0 → 1,451
if(!dojo._hasResource["dijit.layout.StackContainer"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.layout.StackContainer"] = true;
dojo.provide("dijit.layout.StackContainer");
 
dojo.require("dijit._Templated");
dojo.require("dijit.layout._LayoutWidget");
dojo.require("dijit.form.Button");
 
dojo.declare(
"dijit.layout.StackContainer",
dijit.layout._LayoutWidget,
 
// summary
// A container that has multiple children, but shows only
// one child at a time (like looking at the pages in a book one by one).
//
// Publishes topics <widgetId>-addChild, <widgetId>-removeChild, and <widgetId>-selectChild
//
// Can be base class for container, Wizard, Show, etc.
{
// doLayout: Boolean
// if true, change the size of my currently displayed child to match my size
doLayout: true,
 
_started: false,
 
// selectedChildWidget: Widget
// References the currently selected child widget, if any
 
postCreate: function(){
dijit.setWaiRole((this.containerNode || this.domNode), "tabpanel");
this.connect(this.domNode, "onkeypress", this._onKeyPress);
},
startup: function(){
if(this._started){ return; }
 
var children = this.getChildren();
 
// Setup each page panel
dojo.forEach(children, this._setupChild, this);
 
// Figure out which child to initially display
dojo.some(children, function(child){
if(child.selected){
this.selectedChildWidget = child;
}
return child.selected;
}, this);
 
var selected = this.selectedChildWidget;
 
// Default to the first child
if(!selected && children[0]){
selected = this.selectedChildWidget = children[0];
selected.selected = true;
}
if(selected){
this._showChild(selected);
}
 
// Now publish information about myself so any StackControllers can initialize..
dojo.publish(this.id+"-startup", [{children: children, selected: selected}]);
this.inherited("startup",arguments);
this._started = true;
},
 
_setupChild: function(/*Widget*/ page){
// Summary: prepare the given child
 
page.domNode.style.display = "none";
 
// since we are setting the width/height of the child elements, they need
// to be position:relative, or IE has problems (See bug #2033)
page.domNode.style.position = "relative";
 
return page; // dijit._Widget
},
 
addChild: function(/*Widget*/ child, /*Integer?*/ insertIndex){
// summary: Adds a widget to the stack
dijit._Container.prototype.addChild.apply(this, arguments);
child = this._setupChild(child);
 
if(this._started){
// in case the tab titles have overflowed from one line to two lines
this.layout();
 
dojo.publish(this.id+"-addChild", [child, insertIndex]);
 
// if this is the first child, then select it
if(!this.selectedChildWidget){
this.selectChild(child);
}
}
},
 
removeChild: function(/*Widget*/ page){
// summary: Removes the pane from the stack
 
dijit._Container.prototype.removeChild.apply(this, arguments);
 
// If we are being destroyed than don't run the code below (to select another page), because we are deleting
// every page one by one
if(this._beingDestroyed){ return; }
 
if(this._started){
// this will notify any tablists to remove a button; do this first because it may affect sizing
dojo.publish(this.id+"-removeChild", [page]);
 
// in case the tab titles now take up one line instead of two lines
this.layout();
}
 
if(this.selectedChildWidget === page){
this.selectedChildWidget = undefined;
if(this._started){
var children = this.getChildren();
if(children.length){
this.selectChild(children[0]);
}
}
}
},
 
selectChild: function(/*Widget*/ page){
// summary:
// Show the given widget (which must be one of my children)
 
page = dijit.byId(page);
 
if(this.selectedChildWidget != page){
// Deselect old page and select new one
this._transition(page, this.selectedChildWidget);
this.selectedChildWidget = page;
dojo.publish(this.id+"-selectChild", [page]);
}
},
 
_transition: function(/*Widget*/newWidget, /*Widget*/oldWidget){
if(oldWidget){
this._hideChild(oldWidget);
}
this._showChild(newWidget);
 
// Size the new widget, in case this is the first time it's being shown,
// or I have been resized since the last time it was shown.
// page must be visible for resizing to work
if(this.doLayout && newWidget.resize){
newWidget.resize(this._containerContentBox || this._contentBox);
}
},
 
_adjacent: function(/*Boolean*/ forward){
// summary: Gets the next/previous child widget in this container from the current selection
var children = this.getChildren();
var index = dojo.indexOf(children, this.selectedChildWidget);
index += forward ? 1 : children.length - 1;
return children[ index % children.length ]; // dijit._Widget
},
 
forward: function(){
// Summary: advance to next page
this.selectChild(this._adjacent(true));
},
 
back: function(){
// Summary: go back to previous page
this.selectChild(this._adjacent(false));
},
 
_onKeyPress: function(e){
dojo.publish(this.id+"-containerKeyPress", [{ e: e, page: this}]);
},
 
layout: function(){
if(this.doLayout && this.selectedChildWidget && this.selectedChildWidget.resize){
this.selectedChildWidget.resize(this._contentBox);
}
},
 
_showChild: function(/*Widget*/ page){
var children = this.getChildren();
page.isFirstChild = (page == children[0]);
page.isLastChild = (page == children[children.length-1]);
page.selected = true;
 
page.domNode.style.display="";
if(page._loadCheck){
page._loadCheck(); // trigger load in ContentPane
}
if(page.onShow){
page.onShow();
}
},
 
_hideChild: function(/*Widget*/ page){
page.selected=false;
page.domNode.style.display="none";
if(page.onHide){
page.onHide();
}
},
 
closeChild: function(/*Widget*/ page){
// summary
// callback when user clicks the [X] to remove a page
// if onClose() returns true then remove and destroy the childd
var remove = page.onClose(this, page);
if(remove){
this.removeChild(page);
// makes sure we can clean up executeScripts in ContentPane onUnLoad
page.destroy();
}
},
 
destroy: function(){
this._beingDestroyed = true;
this.inherited("destroy",arguments);
}
});
 
dojo.declare(
"dijit.layout.StackController",
[dijit._Widget, dijit._Templated, dijit._Container],
{
// summary:
// Set of buttons to select a page in a page list.
// Monitors the specified StackContainer, and whenever a page is
// added, deleted, or selected, updates itself accordingly.
 
templateString: "<span wairole='tablist' dojoAttachEvent='onkeypress' class='dijitStackController'></span>",
 
// containerId: String
// the id of the page container that I point to
containerId: "",
 
// buttonWidget: String
// the name of the button widget to create to correspond to each page
buttonWidget: "dijit.layout._StackButton",
 
postCreate: function(){
dijit.setWaiRole(this.domNode, "tablist");
 
this.pane2button = {}; // mapping from panes to buttons
this._subscriptions=[
dojo.subscribe(this.containerId+"-startup", this, "onStartup"),
dojo.subscribe(this.containerId+"-addChild", this, "onAddChild"),
dojo.subscribe(this.containerId+"-removeChild", this, "onRemoveChild"),
dojo.subscribe(this.containerId+"-selectChild", this, "onSelectChild"),
dojo.subscribe(this.containerId+"-containerKeyPress", this, "onContainerKeyPress")
];
},
 
onStartup: function(/*Object*/ info){
// summary: called after StackContainer has finished initializing
dojo.forEach(info.children, this.onAddChild, this);
this.onSelectChild(info.selected);
},
 
destroy: function(){
dojo.forEach(this._subscriptions, dojo.unsubscribe);
this.inherited("destroy",arguments);
},
 
onAddChild: function(/*Widget*/ page, /*Integer?*/ insertIndex){
// summary:
// Called whenever a page is added to the container.
// Create button corresponding to the page.
 
// add a node that will be promoted to the button widget
var refNode = document.createElement("span");
this.domNode.appendChild(refNode);
// create an instance of the button widget
var cls = dojo.getObject(this.buttonWidget);
var button = new cls({label: page.title, closeButton: page.closable}, refNode);
this.addChild(button, insertIndex);
this.pane2button[page] = button;
page.controlButton = button; // this value might be overwritten if two tabs point to same container
dojo.connect(button, "onClick", dojo.hitch(this,"onButtonClick",page));
dojo.connect(button, "onClickCloseButton", dojo.hitch(this,"onCloseButtonClick",page));
if(!this._currentChild){ // put the first child into the tab order
button.focusNode.setAttribute("tabIndex","0");
this._currentChild = page;
}
},
 
onRemoveChild: function(/*Widget*/ page){
// summary:
// Called whenever a page is removed from the container.
// Remove the button corresponding to the page.
if(this._currentChild === page){ this._currentChild = null; }
var button = this.pane2button[page];
if(button){
// TODO? if current child { reassign }
button.destroy();
}
this.pane2button[page] = null;
},
 
onSelectChild: function(/*Widget*/ page){
// summary:
// Called when a page has been selected in the StackContainer, either by me or by another StackController
 
if(!page){ return; }
 
if(this._currentChild){
var oldButton=this.pane2button[this._currentChild];
oldButton.setChecked(false);
oldButton.focusNode.setAttribute("tabIndex", "-1");
}
 
var newButton=this.pane2button[page];
newButton.setChecked(true);
this._currentChild = page;
newButton.focusNode.setAttribute("tabIndex", "0");
},
 
onButtonClick: function(/*Widget*/ page){
// summary:
// Called whenever one of my child buttons is pressed in an attempt to select a page
var container = dijit.byId(this.containerId); // TODO: do this via topics?
container.selectChild(page);
},
 
onCloseButtonClick: function(/*Widget*/ page){
// summary:
// Called whenever one of my child buttons [X] is pressed in an attempt to close a page
var container = dijit.byId(this.containerId);
container.closeChild(page);
var b = this.pane2button[this._currentChild];
if(b){
dijit.focus(b.focusNode || b.domNode);
}
},
// TODO: this is a bit redundant with forward, back api in StackContainer
adjacent: function(/*Boolean*/ forward){
// find currently focused button in children array
var children = this.getChildren();
var current = dojo.indexOf(children, this.pane2button[this._currentChild]);
// pick next button to focus on
var offset = forward ? 1 : children.length - 1;
return children[ (current + offset) % children.length ]; // dijit._Widget
},
 
onkeypress: function(/*Event*/ e){
// summary:
// Handle keystrokes on the page list, for advancing to next/previous button
// and closing the current page if the page is closable.
 
if(this.disabled || e.altKey ){ return; }
var forward = true;
if(e.ctrlKey || !e._djpage){
var k = dojo.keys;
switch(e.keyCode){
case k.LEFT_ARROW:
case k.UP_ARROW:
case k.PAGE_UP:
forward = false;
// fall through
case k.RIGHT_ARROW:
case k.DOWN_ARROW:
case k.PAGE_DOWN:
this.adjacent(forward).onClick();
dojo.stopEvent(e);
break;
case k.DELETE:
if(this._currentChild.closable){
this.onCloseButtonClick(this._currentChild);
}
dojo.stopEvent(e);
break;
default:
if(e.ctrlKey){
if(e.keyCode == k.TAB){
this.adjacent(!e.shiftKey).onClick();
dojo.stopEvent(e);
}else if(e.keyChar == "w"){
if(this._currentChild.closable){
this.onCloseButtonClick(this._currentChild);
}
dojo.stopEvent(e); // avoid browser tab closing.
}
}
}
}
},
 
onContainerKeyPress: function(/*Object*/ info){
info.e._djpage = info.page;
this.onkeypress(info.e);
}
});
 
dojo.declare("dijit.layout._StackButton",
dijit.form.ToggleButton,
{
// summary
// Internal widget used by StackContainer.
// The button-like or tab-like object you click to select or delete a page
tabIndex: "-1", // StackContainer buttons are not in the tab order by default
postCreate: function(/*Event*/ evt){
dijit.setWaiRole((this.focusNode || this.domNode), "tab");
this.inherited("postCreate", arguments);
},
onClick: function(/*Event*/ evt){
// summary: This is for TabContainer where the tabs are <span> rather than button,
// so need to set focus explicitly (on some browsers)
dijit.focus(this.focusNode);
 
// ... now let StackController catch the event and tell me what to do
},
 
onClickCloseButton: function(/*Event*/ evt){
// summary
// StackContainer connects to this function; if your widget contains a close button
// then clicking it should call this function.
evt.stopPropagation();
}
});
 
// These arguments can be specified for the children of a StackContainer.
// Since any widget can be specified as a StackContainer child, mix them
// into the base widget class. (This is a hack, but it's effective.)
dojo.extend(dijit._Widget, {
// title: String
// Title of this widget. Used by TabContainer to the name the tab, etc.
title: "",
 
// selected: Boolean
// Is this child currently selected?
selected: false,
 
// closable: Boolean
// True if user can close (destroy) this child, such as (for example) clicking the X on the tab.
closable: false, // true if user can close this tab pane
 
onClose: function(){
// summary: Callback if someone tries to close the child, child will be closed if func returns true
return true;
}
});
 
}
/trunk/api/js/dojo1.0/dijit/layout/TabContainer.js
New file
0,0 → 1,146
if(!dojo._hasResource["dijit.layout.TabContainer"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.layout.TabContainer"] = true;
dojo.provide("dijit.layout.TabContainer");
 
dojo.require("dijit.layout.StackContainer");
dojo.require("dijit._Templated");
 
dojo.declare("dijit.layout.TabContainer",
[dijit.layout.StackContainer, dijit._Templated],
{
// summary:
// A Container with Title Tabs, each one pointing at a pane in the container.
// description:
// A TabContainer is a container that has multiple panes, but shows only
// one pane at a time. There are a set of tabs corresponding to each pane,
// where each tab has the title (aka title) of the pane, and optionally a close button.
//
// Publishes topics <widgetId>-addChild, <widgetId>-removeChild, and <widgetId>-selectChild
// (where <widgetId> is the id of the TabContainer itself.
//
// tabPosition: String
// Defines where tabs go relative to tab content.
// "top", "bottom", "left-h", "right-h"
tabPosition: "top",
 
templateString: null, // override setting in StackContainer
templateString:"<div class=\"dijitTabContainer\">\n\t<div dojoAttachPoint=\"tablistNode\"></div>\n\t<div class=\"dijitTabPaneWrapper\" dojoAttachPoint=\"containerNode\"></div>\n</div>\n",
 
postCreate: function(){
dijit.layout.TabContainer.superclass.postCreate.apply(this, arguments);
// create the tab list that will have a tab (a.k.a. tab button) for each tab panel
this.tablist = new dijit.layout.TabController(
{
id: this.id + "_tablist",
tabPosition: this.tabPosition,
doLayout: this.doLayout,
containerId: this.id
}, this.tablistNode);
},
 
_setupChild: function(/* Widget */tab){
dojo.addClass(tab.domNode, "dijitTabPane");
this.inherited("_setupChild",arguments);
return tab; // Widget
},
 
startup: function(){
if(this._started){ return; }
 
// wire up the tablist and its tabs
this.tablist.startup();
this.inherited("startup",arguments);
 
if(dojo.isSafari){
// sometimes safari 3.0.3 miscalculates the height of the tab labels, see #4058
setTimeout(dojo.hitch(this, "layout"), 0);
}
},
 
layout: function(){
// Summary: Configure the content pane to take up all the space except for where the tabs are
if(!this.doLayout){ return; }
 
// position and size the titles and the container node
var titleAlign=this.tabPosition.replace(/-h/,"");
var children = [
{domNode: this.tablist.domNode, layoutAlign: titleAlign},
{domNode: this.containerNode, layoutAlign: "client"}
];
dijit.layout.layoutChildren(this.domNode, this._contentBox, children);
 
// Compute size to make each of my children.
// children[1] is the margin-box size of this.containerNode, set by layoutChildren() call above
this._containerContentBox = dijit.layout.marginBox2contentBox(this.containerNode, children[1]);
 
if(this.selectedChildWidget){
this._showChild(this.selectedChildWidget);
if(this.doLayout && this.selectedChildWidget.resize){
this.selectedChildWidget.resize(this._containerContentBox);
}
}
},
 
destroy: function(){
this.tablist.destroy();
this.inherited("destroy",arguments);
}
});
 
//TODO: make private?
dojo.declare("dijit.layout.TabController",
dijit.layout.StackController,
{
// summary:
// Set of tabs (the things with titles and a close button, that you click to show a tab panel).
// description:
// Lets the user select the currently shown pane in a TabContainer or StackContainer.
// TabController also monitors the TabContainer, and whenever a pane is
// added or deleted updates itself accordingly.
 
templateString: "<div wairole='tablist' dojoAttachEvent='onkeypress:onkeypress'></div>",
 
// tabPosition: String
// Defines where tabs go relative to the content.
// "top", "bottom", "left-h", "right-h"
tabPosition: "top",
 
// doLayout: Boolean
// TODOC: deprecate doLayout? not sure.
doLayout: true,
 
// buttonWidget: String
// the name of the tab widget to create to correspond to each page
buttonWidget: "dijit.layout._TabButton",
 
postMixInProperties: function(){
this["class"] = "dijitTabLabels-" + this.tabPosition + (this.doLayout ? "" : " dijitTabNoLayout");
this.inherited("postMixInProperties",arguments);
}
});
 
dojo.declare("dijit.layout._TabButton",
dijit.layout._StackButton,
{
// summary:
// A tab (the thing you click to select a pane).
// description:
// Contains the title of the pane, and optionally a close-button to destroy the pane.
// This is an internal widget and should not be instantiated directly.
 
baseClass: "dijitTab",
 
templateString:"<div dojoAttachEvent='onclick:onClick,onmouseenter:_onMouse,onmouseleave:_onMouse'>\n <div class='dijitTabInnerDiv' dojoAttachPoint='innerDiv'>\n <span dojoAttachPoint='containerNode,focusNode'>${!label}</span>\n <span dojoAttachPoint='closeButtonNode' class='closeImage' dojoAttachEvent='onmouseenter:_onMouse, onmouseleave:_onMouse, onclick:onClickCloseButton' stateModifier='CloseButton'>\n <span dojoAttachPoint='closeText' class='closeText'>x</span>\n </span>\n </div>\n</div>\n",
 
postCreate: function(){
if(this.closeButton){
dojo.addClass(this.innerDiv, "dijitClosable");
} else {
this.closeButtonNode.style.display="none";
}
this.inherited("postCreate",arguments);
dojo.setSelectable(this.containerNode, false);
}
});
 
}
/trunk/api/js/dojo1.0/dijit/layout/ContentPane.js
New file
0,0 → 1,409
if(!dojo._hasResource["dijit.layout.ContentPane"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.layout.ContentPane"] = true;
dojo.provide("dijit.layout.ContentPane");
 
dojo.require("dijit._Widget");
dojo.require("dijit.layout._LayoutWidget");
 
dojo.require("dojo.parser");
dojo.require("dojo.string");
dojo.requireLocalization("dijit", "loading", null, "ko,zh,ja,zh-tw,ru,it,ROOT,hu,fr,pt,pl,es,de,cs");
 
dojo.declare(
"dijit.layout.ContentPane",
dijit._Widget,
{
// summary:
// A widget that acts as a Container for other widgets, and includes a ajax interface
// description:
// A widget that can be used as a standalone widget
// or as a baseclass for other widgets
// Handles replacement of document fragment using either external uri or javascript
// generated markup or DOM content, instantiating widgets within that content.
// Don't confuse it with an iframe, it only needs/wants document fragments.
// It's useful as a child of LayoutContainer, SplitContainer, or TabContainer.
// But note that those classes can contain any widget as a child.
// example:
// Some quick samples:
// To change the innerHTML use .setContent('<b>new content</b>')
//
// Or you can send it a NodeList, .setContent(dojo.query('div [class=selected]', userSelection))
// please note that the nodes in NodeList will copied, not moved
//
// To do a ajax update use .setHref('url')
//
// href: String
// The href of the content that displays now.
// Set this at construction if you want to load data externally when the
// pane is shown. (Set preload=true to load it immediately.)
// Changing href after creation doesn't have any effect; see setHref();
href: "",
 
// extractContent: Boolean
// Extract visible content from inside of <body> .... </body>
extractContent: false,
 
// parseOnLoad: Boolean
// parse content and create the widgets, if any
parseOnLoad: true,
 
// preventCache: Boolean
// Cache content retreived externally
preventCache: false,
 
// preload: Boolean
// Force load of data even if pane is hidden.
preload: false,
 
// refreshOnShow: Boolean
// Refresh (re-download) content when pane goes from hidden to shown
refreshOnShow: false,
 
// loadingMessage: String
// Message that shows while downloading
loadingMessage: "<span class='dijitContentPaneLoading'>${loadingState}</span>",
 
// errorMessage: String
// Message that shows if an error occurs
errorMessage: "<span class='dijitContentPaneError'>${errorState}</span>",
 
// isLoaded: Boolean
// Tells loading status see onLoad|onUnload for event hooks
isLoaded: false,
 
// class: String
// Class name to apply to ContentPane dom nodes
"class": "dijitContentPane",
 
postCreate: function(){
// remove the title attribute so it doesn't show up when i hover
// over a node
this.domNode.title = "";
 
if(this.preload){
this._loadCheck();
}
 
var messages = dojo.i18n.getLocalization("dijit", "loading", this.lang);
this.loadingMessage = dojo.string.substitute(this.loadingMessage, messages);
this.errorMessage = dojo.string.substitute(this.errorMessage, messages);
 
// for programatically created ContentPane (with <span> tag), need to muck w/CSS
// or it's as though overflow:visible is set
dojo.addClass(this.domNode, this["class"]);
},
 
startup: function(){
if(this._started){ return; }
this._checkIfSingleChild();
if(this._singleChild){
this._singleChild.startup();
}
this._loadCheck();
this._started = true;
},
 
_checkIfSingleChild: function(){
// summary:
// Test if we have exactly one widget as a child, and if so assume that we are a container for that widget,
// and should propogate startup() and resize() calls to it.
var childNodes = dojo.query(">", this.containerNode || this.domNode),
childWidgets = childNodes.filter("[widgetId]");
 
if(childNodes.length == 1 && childWidgets.length == 1){
this.isContainer = true;
this._singleChild = dijit.byNode(childWidgets[0]);
}else{
delete this.isContainer;
delete this._singleChild;
}
},
 
refresh: function(){
// summary:
// Force a refresh (re-download) of content, be sure to turn off cache
 
// we return result of _prepareLoad here to avoid code dup. in dojox.layout.ContentPane
return this._prepareLoad(true);
},
 
setHref: function(/*String|Uri*/ href){
// summary:
// Reset the (external defined) content of this pane and replace with new url
// Note: It delays the download until widget is shown if preload is false
// href:
// url to the page you want to get, must be within the same domain as your mainpage
this.href = href;
 
// we return result of _prepareLoad here to avoid code dup. in dojox.layout.ContentPane
return this._prepareLoad();
},
 
setContent: function(/*String|DomNode|Nodelist*/data){
// summary:
// Replaces old content with data content, include style classes from old content
// data:
// the new Content may be String, DomNode or NodeList
//
// if data is a NodeList (or an array of nodes) nodes are copied
// so you can import nodes from another document implicitly
 
// clear href so we cant run refresh and clear content
// refresh should only work if we downloaded the content
if(!this._isDownloaded){
this.href = "";
this._onUnloadHandler();
}
 
this._setContent(data || "");
 
this._isDownloaded = false; // must be set after _setContent(..), pathadjust in dojox.layout.ContentPane
 
if(this.parseOnLoad){
this._createSubWidgets();
}
 
this._checkIfSingleChild();
if(this._singleChild && this._singleChild.resize){
this._singleChild.resize(this._contentBox);
}
 
this._onLoadHandler();
},
 
cancel: function(){
// summary:
// Cancels a inflight download of content
if(this._xhrDfd && (this._xhrDfd.fired == -1)){
this._xhrDfd.cancel();
}
delete this._xhrDfd; // garbage collect
},
 
destroy: function(){
// if we have multiple controllers destroying us, bail after the first
if(this._beingDestroyed){
return;
}
// make sure we call onUnload
this._onUnloadHandler();
this._beingDestroyed = true;
this.inherited("destroy",arguments);
},
 
resize: function(size){
dojo.marginBox(this.domNode, size);
 
// Compute content box size in case we [later] need to size child
// If either height or width wasn't specified by the user, then query node for it.
// But note that setting the margin box and then immediately querying dimensions may return
// inaccurate results, so try not to depend on it.
var node = this.containerNode || this.domNode,
mb = dojo.mixin(dojo.marginBox(node), size||{});
 
this._contentBox = dijit.layout.marginBox2contentBox(node, mb);
 
// If we have a single widget child then size it to fit snugly within my borders
if(this._singleChild && this._singleChild.resize){
this._singleChild.resize(this._contentBox);
}
},
 
_prepareLoad: function(forceLoad){
// sets up for a xhrLoad, load is deferred until widget onShow
// cancels a inflight download
this.cancel();
this.isLoaded = false;
this._loadCheck(forceLoad);
},
 
_loadCheck: function(forceLoad){
// call this when you change onShow (onSelected) status when selected in parent container
// it's used as a trigger for href download when this.domNode.display != 'none'
 
// sequence:
// if no href -> bail
// forceLoad -> always load
// this.preload -> load when download not in progress, domNode display doesn't matter
// this.refreshOnShow -> load when download in progress bails, domNode display !='none' AND
// this.open !== false (undefined is ok), isLoaded doesn't matter
// else -> load when download not in progress, if this.open !== false (undefined is ok) AND
// domNode display != 'none', isLoaded must be false
 
var displayState = ((this.open !== false) && (this.domNode.style.display != 'none'));
 
if(this.href &&
(forceLoad ||
(this.preload && !this._xhrDfd) ||
(this.refreshOnShow && displayState && !this._xhrDfd) ||
(!this.isLoaded && displayState && !this._xhrDfd)
)
){
this._downloadExternalContent();
}
},
 
_downloadExternalContent: function(){
this._onUnloadHandler();
 
// display loading message
this._setContent(
this.onDownloadStart.call(this)
);
 
var self = this;
var getArgs = {
preventCache: (this.preventCache || this.refreshOnShow),
url: this.href,
handleAs: "text"
};
if(dojo.isObject(this.ioArgs)){
dojo.mixin(getArgs, this.ioArgs);
}
 
var hand = this._xhrDfd = (this.ioMethod || dojo.xhrGet)(getArgs);
 
hand.addCallback(function(html){
try{
self.onDownloadEnd.call(self);
self._isDownloaded = true;
self.setContent.call(self, html); // onload event is called from here
}catch(err){
self._onError.call(self, 'Content', err); // onContentError
}
delete self._xhrDfd;
return html;
});
 
hand.addErrback(function(err){
if(!hand.cancelled){
// show error message in the pane
self._onError.call(self, 'Download', err); // onDownloadError
}
delete self._xhrDfd;
return err;
});
},
 
_onLoadHandler: function(){
this.isLoaded = true;
try{
this.onLoad.call(this);
}catch(e){
console.error('Error '+this.widgetId+' running custom onLoad code');
}
},
 
_onUnloadHandler: function(){
this.isLoaded = false;
this.cancel();
try{
this.onUnload.call(this);
}catch(e){
console.error('Error '+this.widgetId+' running custom onUnload code');
}
},
 
_setContent: function(cont){
this.destroyDescendants();
 
try{
var node = this.containerNode || this.domNode;
while(node.firstChild){
dojo._destroyElement(node.firstChild);
}
if(typeof cont == "string"){
// dijit.ContentPane does only minimal fixes,
// No pathAdjustments, script retrieval, style clean etc
// some of these should be available in the dojox.layout.ContentPane
if(this.extractContent){
match = cont.match(/<body[^>]*>\s*([\s\S]+)\s*<\/body>/im);
if(match){ cont = match[1]; }
}
node.innerHTML = cont;
}else{
// domNode or NodeList
if(cont.nodeType){ // domNode (htmlNode 1 or textNode 3)
node.appendChild(cont);
}else{// nodelist or array such as dojo.Nodelist
dojo.forEach(cont, function(n){
node.appendChild(n.cloneNode(true));
});
}
}
}catch(e){
// check if a domfault occurs when we are appending this.errorMessage
// like for instance if domNode is a UL and we try append a DIV
var errMess = this.onContentError(e);
try{
node.innerHTML = errMess;
}catch(e){
console.error('Fatal '+this.id+' could not change content due to '+e.message, e);
}
}
},
 
_onError: function(type, err, consoleText){
// shows user the string that is returned by on[type]Error
// overide on[type]Error and return your own string to customize
var errText = this['on' + type + 'Error'].call(this, err);
if(consoleText){
console.error(consoleText, err);
}else if(errText){// a empty string won't change current content
this._setContent.call(this, errText);
}
},
 
_createSubWidgets: function(){
// summary: scan my contents and create subwidgets
var rootNode = this.containerNode || this.domNode;
try{
dojo.parser.parse(rootNode, true);
}catch(e){
this._onError('Content', e, "Couldn't create widgets in "+this.id
+(this.href ? " from "+this.href : ""));
}
},
 
// EVENT's, should be overide-able
onLoad: function(e){
// summary:
// Event hook, is called after everything is loaded and widgetified
},
 
onUnload: function(e){
// summary:
// Event hook, is called before old content is cleared
},
 
onDownloadStart: function(){
// summary:
// called before download starts
// the string returned by this function will be the html
// that tells the user we are loading something
// override with your own function if you want to change text
return this.loadingMessage;
},
 
onContentError: function(/*Error*/ error){
// summary:
// called on DOM faults, require fault etc in content
// default is to display errormessage inside pane
},
 
onDownloadError: function(/*Error*/ error){
// summary:
// Called when download error occurs, default is to display
// errormessage inside pane. Overide function to change that.
// The string returned by this function will be the html
// that tells the user a error happend
return this.errorMessage;
},
 
onDownloadEnd: function(){
// summary:
// called when download is finished
}
});
 
}
/trunk/api/js/dojo1.0/dijit/layout/SplitContainer.js
New file
0,0 → 1,537
if(!dojo._hasResource["dijit.layout.SplitContainer"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.layout.SplitContainer"] = true;
dojo.provide("dijit.layout.SplitContainer");
 
//
// FIXME: make it prettier
// FIXME: active dragging upwards doesn't always shift other bars (direction calculation is wrong in this case)
//
 
dojo.require("dojo.cookie");
dojo.require("dijit.layout._LayoutWidget");
 
dojo.declare("dijit.layout.SplitContainer",
dijit.layout._LayoutWidget,
{
// summary:
// A Container widget with sizing handles in-between each child
// description:
// Contains multiple children widgets, all of which are displayed side by side
// (either horizontally or vertically); there's a bar between each of the children,
// and you can adjust the relative size of each child by dragging the bars.
//
// You must specify a size (width and height) for the SplitContainer.
//
// activeSizing: Boolean
// If true, the children's size changes as you drag the bar;
// otherwise, the sizes don't change until you drop the bar (by mouse-up)
activeSizing: false,
 
// sizerWidth: Integer
// Size in pixels of the bar between each child
sizerWidth: 7, // FIXME: this should be a CSS attribute (at 7 because css wants it to be 7 until we fix to css)
 
// orientation: String
// either 'horizontal' or vertical; indicates whether the children are
// arranged side-by-side or up/down.
orientation: 'horizontal',
 
// persist: Boolean
// Save splitter positions in a cookie
persist: true,
 
postMixInProperties: function(){
this.inherited("postMixInProperties",arguments);
this.isHorizontal = (this.orientation == 'horizontal');
},
 
postCreate: function(){
this.inherited("postCreate",arguments);
this.sizers = [];
dojo.addClass(this.domNode, "dijitSplitContainer");
// overflow has to be explicitly hidden for splitContainers using gekko (trac #1435)
// to keep other combined css classes from inadvertantly making the overflow visible
if(dojo.isMozilla){
this.domNode.style.overflow = '-moz-scrollbars-none'; // hidden doesn't work
}
 
// create the fake dragger
if(typeof this.sizerWidth == "object"){
try{ //FIXME: do this without a try/catch
this.sizerWidth = parseInt(this.sizerWidth.toString());
}catch(e){ this.sizerWidth = 7; }
}
var sizer = this.virtualSizer = document.createElement('div');
sizer.style.position = 'relative';
 
// #1681: work around the dreaded 'quirky percentages in IE' layout bug
// If the splitcontainer's dimensions are specified in percentages, it
// will be resized when the virtualsizer is displayed in _showSizingLine
// (typically expanding its bounds unnecessarily). This happens because
// we use position: relative for .dijitSplitContainer.
// The workaround: instead of changing the display style attribute,
// switch to changing the zIndex (bring to front/move to back)
 
sizer.style.zIndex = 10;
sizer.className = this.isHorizontal ? 'dijitSplitContainerVirtualSizerH' : 'dijitSplitContainerVirtualSizerV';
this.domNode.appendChild(sizer);
dojo.setSelectable(sizer, false);
},
 
startup: function(){
if(this._started){ return; }
dojo.forEach(this.getChildren(), function(child, i, children){
// attach the children and create the draggers
this._injectChild(child);
 
if(i < children.length-1){
this._addSizer();
}
}, this);
 
if(this.persist){
this._restoreState();
}
this.inherited("startup",arguments);
this._started = true;
},
 
_injectChild: function(child){
child.domNode.style.position = "absolute";
dojo.addClass(child.domNode, "dijitSplitPane");
},
 
_addSizer: function(){
var i = this.sizers.length;
 
// TODO: use a template for this!!!
var sizer = this.sizers[i] = document.createElement('div');
sizer.className = this.isHorizontal ? 'dijitSplitContainerSizerH' : 'dijitSplitContainerSizerV';
 
// add the thumb div
var thumb = document.createElement('div');
thumb.className = 'thumb';
sizer.appendChild(thumb);
 
// FIXME: are you serious? why aren't we using mover start/stop combo?
var self = this;
var handler = (function(){ var sizer_i = i; return function(e){ self.beginSizing(e, sizer_i); } })();
dojo.connect(sizer, "onmousedown", handler);
 
this.domNode.appendChild(sizer);
dojo.setSelectable(sizer, false);
},
 
removeChild: function(widget){
// summary: Remove sizer, but only if widget is really our child and
// we have at least one sizer to throw away
if(this.sizers.length && dojo.indexOf(this.getChildren(), widget) != -1){
var i = this.sizers.length - 1;
dojo._destroyElement(this.sizers[i]);
this.sizers.length--;
}
 
// Remove widget and repaint
this.inherited("removeChild",arguments);
if(this._started){
this.layout();
}
},
 
addChild: function(/*Widget*/ child, /*Integer?*/ insertIndex){
// summary: Add a child widget to the container
// child: a widget to add
// insertIndex: postion in the "stack" to add the child widget
this.inherited("addChild",arguments);
 
if(this._started){
// Do the stuff that startup() does for each widget
this._injectChild(child);
var children = this.getChildren();
if(children.length > 1){
this._addSizer();
}
 
// and then reposition (ie, shrink) every pane to make room for the new guy
this.layout();
}
},
 
layout: function(){
// summary:
// Do layout of panels
 
// base class defines this._contentBox on initial creation and also
// on resize
this.paneWidth = this._contentBox.w;
this.paneHeight = this._contentBox.h;
 
var children = this.getChildren();
if(!children.length){ return; }
 
//
// calculate space
//
 
var space = this.isHorizontal ? this.paneWidth : this.paneHeight;
if(children.length > 1){
space -= this.sizerWidth * (children.length - 1);
}
 
//
// calculate total of SizeShare values
//
var outOf = 0;
dojo.forEach(children, function(child){
outOf += child.sizeShare;
});
 
//
// work out actual pixels per sizeshare unit
//
var pixPerUnit = space / outOf;
 
//
// set the SizeActual member of each pane
//
var totalSize = 0;
dojo.forEach(children.slice(0, children.length - 1), function(child){
var size = Math.round(pixPerUnit * child.sizeShare);
child.sizeActual = size;
totalSize += size;
});
 
children[children.length-1].sizeActual = space - totalSize;
 
//
// make sure the sizes are ok
//
this._checkSizes();
 
//
// now loop, positioning each pane and letting children resize themselves
//
 
var pos = 0;
var size = children[0].sizeActual;
this._movePanel(children[0], pos, size);
children[0].position = pos;
pos += size;
 
// if we don't have any sizers, our layout method hasn't been called yet
// so bail until we are called..TODO: REVISIT: need to change the startup
// algorithm to guaranteed the ordering of calls to layout method
if(!this.sizers){
return;
}
 
dojo.some(children.slice(1), function(child, i){
// error-checking
if(!this.sizers[i]){
return true;
}
// first we position the sizing handle before this pane
this._moveSlider(this.sizers[i], pos, this.sizerWidth);
this.sizers[i].position = pos;
pos += this.sizerWidth;
 
size = child.sizeActual;
this._movePanel(child, pos, size);
child.position = pos;
pos += size;
}, this);
},
 
_movePanel: function(panel, pos, size){
if(this.isHorizontal){
panel.domNode.style.left = pos + 'px'; // TODO: resize() takes l and t parameters too, don't need to set manually
panel.domNode.style.top = 0;
var box = {w: size, h: this.paneHeight};
if(panel.resize){
panel.resize(box);
}else{
dojo.marginBox(panel.domNode, box);
}
}else{
panel.domNode.style.left = 0; // TODO: resize() takes l and t parameters too, don't need to set manually
panel.domNode.style.top = pos + 'px';
var box = {w: this.paneWidth, h: size};
if(panel.resize){
panel.resize(box);
}else{
dojo.marginBox(panel.domNode, box);
}
}
},
 
_moveSlider: function(slider, pos, size){
if(this.isHorizontal){
slider.style.left = pos + 'px';
slider.style.top = 0;
dojo.marginBox(slider, { w: size, h: this.paneHeight });
}else{
slider.style.left = 0;
slider.style.top = pos + 'px';
dojo.marginBox(slider, { w: this.paneWidth, h: size });
}
},
 
_growPane: function(growth, pane){
if(growth > 0){
if(pane.sizeActual > pane.sizeMin){
if((pane.sizeActual - pane.sizeMin) > growth){
 
// stick all the growth in this pane
pane.sizeActual = pane.sizeActual - growth;
growth = 0;
}else{
// put as much growth in here as we can
growth -= pane.sizeActual - pane.sizeMin;
pane.sizeActual = pane.sizeMin;
}
}
}
return growth;
},
 
_checkSizes: function(){
 
var totalMinSize = 0;
var totalSize = 0;
var children = this.getChildren();
 
dojo.forEach(children, function(child){
totalSize += child.sizeActual;
totalMinSize += child.sizeMin;
});
 
// only make adjustments if we have enough space for all the minimums
 
if(totalMinSize <= totalSize){
 
var growth = 0;
 
dojo.forEach(children, function(child){
if(child.sizeActual < child.sizeMin){
growth += child.sizeMin - child.sizeActual;
child.sizeActual = child.sizeMin;
}
});
 
if(growth > 0){
var list = this.isDraggingLeft ? children.reverse() : children;
dojo.forEach(list, function(child){
growth = this._growPane(growth, child);
}, this);
}
}else{
dojo.forEach(children, function(child){
child.sizeActual = Math.round(totalSize * (child.sizeMin / totalMinSize));
});
}
},
 
beginSizing: function(e, i){
var children = this.getChildren();
this.paneBefore = children[i];
this.paneAfter = children[i+1];
 
this.isSizing = true;
this.sizingSplitter = this.sizers[i];
 
if(!this.cover){
this.cover = dojo.doc.createElement('div');
this.domNode.appendChild(this.cover);
var s = this.cover.style;
s.position = 'absolute';
s.zIndex = 1;
s.top = 0;
s.left = 0;
s.width = "100%";
s.height = "100%";
}else{
this.cover.style.zIndex = 1;
}
this.sizingSplitter.style.zIndex = 2;
 
// TODO: REVISIT - we want MARGIN_BOX and core hasn't exposed that yet (but can't we use it anyway if we pay attention? we do elsewhere.)
this.originPos = dojo.coords(children[0].domNode, true);
if(this.isHorizontal){
var client = (e.layerX ? e.layerX : e.offsetX);
var screen = e.pageX;
this.originPos = this.originPos.x;
}else{
var client = (e.layerY ? e.layerY : e.offsetY);
var screen = e.pageY;
this.originPos = this.originPos.y;
}
this.startPoint = this.lastPoint = screen;
this.screenToClientOffset = screen - client;
this.dragOffset = this.lastPoint - this.paneBefore.sizeActual - this.originPos - this.paneBefore.position;
 
if(!this.activeSizing){
this._showSizingLine();
}
 
//
// attach mouse events
//
this._connects = [];
this._connects.push(dojo.connect(document.documentElement, "onmousemove", this, "changeSizing"));
this._connects.push(dojo.connect(document.documentElement, "onmouseup", this, "endSizing"));
 
dojo.stopEvent(e);
},
 
changeSizing: function(e){
if(!this.isSizing){ return; }
this.lastPoint = this.isHorizontal ? e.pageX : e.pageY;
this.movePoint();
if(this.activeSizing){
this._updateSize();
}else{
this._moveSizingLine();
}
dojo.stopEvent(e);
},
 
endSizing: function(e){
if(!this.isSizing){ return; }
if(this.cover){
this.cover.style.zIndex = -1;
}
if(!this.activeSizing){
this._hideSizingLine();
}
 
this._updateSize();
 
this.isSizing = false;
 
if(this.persist){
this._saveState(this);
}
 
dojo.forEach(this._connects,dojo.disconnect);
},
 
movePoint: function(){
 
// make sure lastPoint is a legal point to drag to
var p = this.lastPoint - this.screenToClientOffset;
 
var a = p - this.dragOffset;
a = this.legaliseSplitPoint(a);
p = a + this.dragOffset;
 
this.lastPoint = p + this.screenToClientOffset;
},
 
legaliseSplitPoint: function(a){
 
a += this.sizingSplitter.position;
 
this.isDraggingLeft = !!(a > 0);
 
if(!this.activeSizing){
var min = this.paneBefore.position + this.paneBefore.sizeMin;
if(a < min){
a = min;
}
 
var max = this.paneAfter.position + (this.paneAfter.sizeActual - (this.sizerWidth + this.paneAfter.sizeMin));
if(a > max){
a = max;
}
}
 
a -= this.sizingSplitter.position;
 
this._checkSizes();
 
return a;
},
 
_updateSize: function(){
//FIXME: sometimes this.lastPoint is NaN
var pos = this.lastPoint - this.dragOffset - this.originPos;
 
var start_region = this.paneBefore.position;
var end_region = this.paneAfter.position + this.paneAfter.sizeActual;
 
this.paneBefore.sizeActual = pos - start_region;
this.paneAfter.position = pos + this.sizerWidth;
this.paneAfter.sizeActual = end_region - this.paneAfter.position;
 
dojo.forEach(this.getChildren(), function(child){
child.sizeShare = child.sizeActual;
});
 
if(this._started){
this.layout();
}
},
 
_showSizingLine: function(){
 
this._moveSizingLine();
 
dojo.marginBox(this.virtualSizer,
this.isHorizontal ? { w: this.sizerWidth, h: this.paneHeight } : { w: this.paneWidth, h: this.sizerWidth });
 
this.virtualSizer.style.display = 'block';
},
 
_hideSizingLine: function(){
this.virtualSizer.style.display = 'none';
},
 
_moveSizingLine: function(){
var pos = (this.lastPoint - this.startPoint) + this.sizingSplitter.position;
dojo.style(this.virtualSizer,(this.isHorizontal ? "left" : "top"),pos+"px");
// this.virtualSizer.style[ this.isHorizontal ? "left" : "top" ] = pos + 'px'; // FIXME: remove this line if the previous is better
},
 
_getCookieName: function(i){
return this.id + "_" + i;
},
 
_restoreState: function(){
dojo.forEach(this.getChildren(), function(child, i){
var cookieName = this._getCookieName(i);
var cookieValue = dojo.cookie(cookieName);
if(cookieValue){
var pos = parseInt(cookieValue);
if(typeof pos == "number"){
child.sizeShare = pos;
}
}
}, this);
},
 
_saveState: function(){
dojo.forEach(this.getChildren(), function(child, i){
dojo.cookie(this._getCookieName(i), child.sizeShare);
}, this);
}
});
 
// These arguments can be specified for the children of a SplitContainer.
// Since any widget can be specified as a SplitContainer child, mix them
// into the base widget class. (This is a hack, but it's effective.)
dojo.extend(dijit._Widget, {
// sizeMin: Integer
// Minimum size (width or height) of a child of a SplitContainer.
// The value is relative to other children's sizeShare properties.
sizeMin: 10,
 
// sizeShare: Integer
// Size (width or height) of a child of a SplitContainer.
// The value is relative to other children's sizeShare properties.
// For example, if there are two children and each has sizeShare=10, then
// each takes up 50% of the available space.
sizeShare: 10
});
 
}
/trunk/api/js/dojo1.0/dijit/layout/LayoutContainer.js
New file
0,0 → 1,71
if(!dojo._hasResource["dijit.layout.LayoutContainer"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.layout.LayoutContainer"] = true;
dojo.provide("dijit.layout.LayoutContainer");
 
dojo.require("dijit.layout._LayoutWidget");
 
dojo.declare(
"dijit.layout.LayoutContainer",
dijit.layout._LayoutWidget,
{
// summary
// Provides Delphi-style panel layout semantics.
//
// details
// A LayoutContainer is a box with a specified size (like style="width: 500px; height: 500px;"),
// that contains children widgets marked with "layoutAlign" of "left", "right", "bottom", "top", and "client".
// It takes it's children marked as left/top/bottom/right, and lays them out along the edges of the box,
// and then it takes the child marked "client" and puts it into the remaining space in the middle.
//
// Left/right positioning is similar to CSS's "float: left" and "float: right",
// and top/bottom positioning would be similar to "float: top" and "float: bottom", if there were such
// CSS.
//
// Note that there can only be one client element, but there can be multiple left, right, top,
// or bottom elements.
//
// usage
// <style>
// html, body{ height: 100%; width: 100%; }
// </style>
// <div dojoType="dijit.layout.LayoutContainer" style="width: 100%; height: 100%">
// <div dojoType="dijit.layout.ContentPane" layoutAlign="top">header text</div>
// <div dojoType="dijit.layout.ContentPane" layoutAlign="left" style="width: 200px;">table of contents</div>
// <div dojoType="dijit.layout.ContentPane" layoutAlign="client">client area</div>
// </div>
//
// Lays out each child in the natural order the children occur in.
// Basically each child is laid out into the "remaining space", where "remaining space" is initially
// the content area of this widget, but is reduced to a smaller rectangle each time a child is added.
//
 
layout: function(){
dijit.layout.layoutChildren(this.domNode, this._contentBox, this.getChildren());
},
 
addChild: function(/*Widget*/ child, /*Integer?*/ insertIndex){
dijit._Container.prototype.addChild.apply(this, arguments);
if(this._started){
dijit.layout.layoutChildren(this.domNode, this._contentBox, this.getChildren());
}
},
 
removeChild: function(/*Widget*/ widget){
dijit._Container.prototype.removeChild.apply(this, arguments);
if(this._started){
dijit.layout.layoutChildren(this.domNode, this._contentBox, this.getChildren());
}
}
});
 
// This argument can be specified for the children of a LayoutContainer.
// Since any widget can be specified as a LayoutContainer child, mix it
// into the base widget class. (This is a hack, but it's effective.)
dojo.extend(dijit._Widget, {
// layoutAlign: String
// "none", "left", "right", "bottom", "top", and "client".
// See the LayoutContainer description for details on this parameter.
layoutAlign: 'none'
});
 
}
/trunk/api/js/dojo1.0/dijit/layout/_LayoutWidget.js
New file
0,0 → 1,187
if(!dojo._hasResource["dijit.layout._LayoutWidget"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.layout._LayoutWidget"] = true;
dojo.provide("dijit.layout._LayoutWidget");
 
dojo.require("dijit._Widget");
dojo.require("dijit._Container");
 
dojo.declare("dijit.layout._LayoutWidget",
[dijit._Widget, dijit._Container, dijit._Contained],
{
// summary
// Mixin for widgets that contain a list of children like SplitContainer.
// Widgets which mixin this code must define layout() to lay out the children
 
isLayoutContainer: true,
 
postCreate: function(){
dojo.addClass(this.domNode, "dijitContainer");
},
 
startup: function(){
// summary:
// Called after all the widgets have been instantiated and their
// dom nodes have been inserted somewhere under document.body.
//
// Widgets should override this method to do any initialization
// dependent on other widgets existing, and then call
// this superclass method to finish things off.
//
// startup() in subclasses shouldn't do anything
// size related because the size of the widget hasn't been set yet.
 
if(this._started){ return; }
this._started=true;
 
if(this.getChildren){
dojo.forEach(this.getChildren(), function(child){ child.startup(); });
}
 
// If I am a top level widget
if(!this.getParent || !this.getParent()){
// Do recursive sizing and layout of all my descendants
// (passing in no argument to resize means that it has to glean the size itself)
this.resize();
 
// since my parent isn't a layout container, and my style is width=height=100% (or something similar),
// then I need to watch when the window resizes, and size myself accordingly
// (passing in no argument to resize means that it has to glean the size itself)
this.connect(window, 'onresize', function(){this.resize();});
}
},
 
resize: function(args){
// summary:
// Explicitly set this widget's size (in pixels),
// and then call layout() to resize contents (and maybe adjust child widgets)
//
// args: Object?
// {w: int, h: int, l: int, t: int}
 
var node = this.domNode;
 
// set margin box size, unless it wasn't specified, in which case use current size
if(args){
dojo.marginBox(node, args);
 
// set offset of the node
if(args.t){ node.style.top = args.t + "px"; }
if(args.l){ node.style.left = args.l + "px"; }
}
// If either height or width wasn't specified by the user, then query node for it.
// But note that setting the margin box and then immediately querying dimensions may return
// inaccurate results, so try not to depend on it.
var mb = dojo.mixin(dojo.marginBox(node), args||{});
 
// Save the size of my content box.
this._contentBox = dijit.layout.marginBox2contentBox(node, mb);
 
// Callback for widget to adjust size of it's children
this.layout();
},
 
layout: function(){
// summary
// Widgets override this method to size & position their contents/children.
// When this is called this._contentBox is guaranteed to be set (see resize()).
//
// This is called after startup(), and also when the widget's size has been
// changed.
}
}
);
 
dijit.layout.marginBox2contentBox = function(/*DomNode*/ node, /*Object*/ mb){
// summary:
// Given the margin-box size of a node, return it's content box size.
// Functions like dojo.contentBox() but is more reliable since it doesn't have
// to wait for the browser to compute sizes.
var cs = dojo.getComputedStyle(node);
var me=dojo._getMarginExtents(node, cs);
var pb=dojo._getPadBorderExtents(node, cs);
return {
l: dojo._toPixelValue(node, cs.paddingLeft),
t: dojo._toPixelValue(node, cs.paddingTop),
w: mb.w - (me.w + pb.w),
h: mb.h - (me.h + pb.h)
};
};
 
(function(){
var capitalize = function(word){
return word.substring(0,1).toUpperCase() + word.substring(1);
};
 
var size = function(widget, dim){
// size the child
widget.resize ? widget.resize(dim) : dojo.marginBox(widget.domNode, dim);
 
// record child's size, but favor our own numbers when we have them.
// the browser lies sometimes
dojo.mixin(widget, dojo.marginBox(widget.domNode));
dojo.mixin(widget, dim);
};
 
dijit.layout.layoutChildren = function(/*DomNode*/ container, /*Object*/ dim, /*Object[]*/ children){
/**
* summary
* Layout a bunch of child dom nodes within a parent dom node
* container:
* parent node
* dim:
* {l, t, w, h} object specifying dimensions of container into which to place children
* children:
* an array like [ {domNode: foo, layoutAlign: "bottom" }, {domNode: bar, layoutAlign: "client"} ]
*/
 
// copy dim because we are going to modify it
dim = dojo.mixin({}, dim);
 
dojo.addClass(container, "dijitLayoutContainer");
 
// Move "client" elements to the end of the array for layout. a11y dictates that the author
// needs to be able to put them in the document in tab-order, but this algorithm requires that
// client be last.
children = dojo.filter(children, function(item){ return item.layoutAlign != "client"; })
.concat(dojo.filter(children, function(item){ return item.layoutAlign == "client"; }));
 
// set positions/sizes
dojo.forEach(children, function(child){
var elm = child.domNode,
pos = child.layoutAlign;
 
// set elem to upper left corner of unused space; may move it later
var elmStyle = elm.style;
elmStyle.left = dim.l+"px";
elmStyle.top = dim.t+"px";
elmStyle.bottom = elmStyle.right = "auto";
 
dojo.addClass(elm, "dijitAlign" + capitalize(pos));
 
// set size && adjust record of remaining space.
// note that setting the width of a <div> may affect it's height.
if(pos=="top" || pos=="bottom"){
size(child, { w: dim.w });
dim.h -= child.h;
if(pos=="top"){
dim.t += child.h;
}else{
elmStyle.top = dim.t + dim.h + "px";
}
}else if(pos=="left" || pos=="right"){
size(child, { h: dim.h });
dim.w -= child.w;
if(pos=="left"){
dim.l += child.w;
}else{
elmStyle.left = dim.l + dim.w + "px";
}
}else if(pos=="client"){
size(child, dim);
}
});
};
 
})();
 
}
/trunk/api/js/dojo1.0/dijit/dijit.js
New file
0,0 → 1,20
/*
Copyright (c) 2004-2007, The Dojo Foundation
All Rights Reserved.
 
Licensed under the Academic Free License version 2.1 or above OR the
modified BSD license. For more information on Dojo licensing, see:
 
http://dojotoolkit.org/book/dojo-book-0-9/introduction/licensing
*/
 
/*
This is a compiled version of Dojo, built for deployment and not for
development. To get an editable version, please visit:
 
http://dojotoolkit.org
 
for documentation and information on getting the source.
*/
 
if(!dojo._hasResource["dijit._base.focus"]){dojo._hasResource["dijit._base.focus"]=true;dojo.provide("dijit._base.focus");dojo.mixin(dijit,{_curFocus:null,_prevFocus:null,isCollapsed:function(){var _1=dojo.global;var _2=dojo.doc;if(_2.selection){return !_2.selection.createRange().text;}else{if(_1.getSelection){var _3=_1.getSelection();if(dojo.isString(_3)){return !_3;}else{return _3.isCollapsed||!_3.toString();}}}},getBookmark:function(){var _4,_5=dojo.doc.selection;if(_5){var _6=_5.createRange();if(_5.type.toUpperCase()=="CONTROL"){_4=_6.length?dojo._toArray(_6):null;}else{_4=_6.getBookmark();}}else{if(dojo.global.getSelection){_5=dojo.global.getSelection();if(_5){var _6=_5.getRangeAt(0);_4=_6.cloneRange();}}else{console.debug("No idea how to store the current selection for this browser!");}}return _4;},moveToBookmark:function(_7){var _8=dojo.doc;if(_8.selection){var _9;if(dojo.isArray(_7)){_9=_8.body.createControlRange();dojo.forEach(_7,_9.addElement);}else{_9=_8.selection.createRange();_9.moveToBookmark(_7);}_9.select();}else{var _a=dojo.global.getSelection&&dojo.global.getSelection();if(_a&&_a.removeAllRanges){_a.removeAllRanges();_a.addRange(_7);}else{console.debug("No idea how to restore selection for this browser!");}}},getFocus:function(_b,_c){return {node:_b&&dojo.isDescendant(dijit._curFocus,_b.domNode)?dijit._prevFocus:dijit._curFocus,bookmark:!dojo.withGlobal(_c||dojo.global,dijit.isCollapsed)?dojo.withGlobal(_c||dojo.global,dijit.getBookmark):null,openedForWindow:_c};},focus:function(_d){if(!_d){return;}var _e="node" in _d?_d.node:_d,_f=_d.bookmark,_10=_d.openedForWindow;if(_e){var _11=(_e.tagName.toLowerCase()=="iframe")?_e.contentWindow:_e;if(_11&&_11.focus){try{_11.focus();}catch(e){}}dijit._onFocusNode(_e);}if(_f&&dojo.withGlobal(_10||dojo.global,dijit.isCollapsed)){if(_10){_10.focus();}try{dojo.withGlobal(_10||dojo.global,moveToBookmark,null,[_f]);}catch(e){}}},_activeStack:[],registerWin:function(_12){if(!_12){_12=window;}dojo.connect(_12.document,"onmousedown",null,function(evt){dijit._justMouseDowned=true;setTimeout(function(){dijit._justMouseDowned=false;},0);dijit._onTouchNode(evt.target||evt.srcElement);});var _14=_12.document.body||_12.document.getElementsByTagName("body")[0];if(_14){if(dojo.isIE){_14.attachEvent("onactivate",function(evt){if(evt.srcElement.tagName.toLowerCase()!="body"){dijit._onFocusNode(evt.srcElement);}});_14.attachEvent("ondeactivate",function(evt){dijit._onBlurNode(evt.srcElement);});}else{_14.addEventListener("focus",function(evt){dijit._onFocusNode(evt.target);},true);_14.addEventListener("blur",function(evt){dijit._onBlurNode(evt.target);},true);}}_14=null;},_onBlurNode:function(_19){dijit._prevFocus=dijit._curFocus;dijit._curFocus=null;var w=dijit.getEnclosingWidget(_19);if(w&&w._setStateClass){w._focused=false;w._setStateClass();}if(dijit._justMouseDowned){return;}if(dijit._clearActiveWidgetsTimer){clearTimeout(dijit._clearActiveWidgetsTimer);}dijit._clearActiveWidgetsTimer=setTimeout(function(){delete dijit._clearActiveWidgetsTimer;dijit._setStack([]);},100);},_onTouchNode:function(_1b){if(dijit._clearActiveWidgetsTimer){clearTimeout(dijit._clearActiveWidgetsTimer);delete dijit._clearActiveWidgetsTimer;}var _1c=[];try{while(_1b){if(_1b.dijitPopupParent){_1b=dijit.byId(_1b.dijitPopupParent).domNode;}else{if(_1b.tagName&&_1b.tagName.toLowerCase()=="body"){if(_1b===dojo.body()){break;}_1b=dojo.query("iframe").filter(function(_1d){return _1d.contentDocument.body===_1b;})[0];}else{var id=_1b.getAttribute&&_1b.getAttribute("widgetId");if(id){_1c.unshift(id);}_1b=_1b.parentNode;}}}}catch(e){}dijit._setStack(_1c);},_onFocusNode:function(_1f){if(_1f&&_1f.tagName&&_1f.tagName.toLowerCase()=="body"){return;}dijit._onTouchNode(_1f);if(_1f==dijit._curFocus){return;}dijit._prevFocus=dijit._curFocus;dijit._curFocus=_1f;dojo.publish("focusNode",[_1f]);var w=dijit.getEnclosingWidget(_1f);if(w&&w._setStateClass){w._focused=true;w._setStateClass();}},_setStack:function(_21){var _22=dijit._activeStack;dijit._activeStack=_21;for(var _23=0;_23<Math.min(_22.length,_21.length);_23++){if(_22[_23]!=_21[_23]){break;}}for(var i=_22.length-1;i>=_23;i--){var _25=dijit.byId(_22[i]);if(_25){dojo.publish("widgetBlur",[_25]);if(_25._onBlur){_25._onBlur();}}}for(var i=_23;i<_21.length;i++){var _25=dijit.byId(_21[i]);if(_25){dojo.publish("widgetFocus",[_25]);if(_25._onFocus){_25._onFocus();}}}}});dojo.addOnLoad(dijit.registerWin);}if(!dojo._hasResource["dijit._base.manager"]){dojo._hasResource["dijit._base.manager"]=true;dojo.provide("dijit._base.manager");dojo.declare("dijit.WidgetSet",null,{constructor:function(){this._hash={};},add:function(_26){if(this._hash[_26.id]){throw new Error("Tried to register widget with id=="+_26.id+" but that id is already registered");}this._hash[_26.id]=_26;},remove:function(id){delete this._hash[id];},forEach:function(_28){for(var id in this._hash){_28(this._hash[id]);}},filter:function(_2a){var res=new dijit.WidgetSet();this.forEach(function(_2c){if(_2a(_2c)){res.add(_2c);}});return res;},byId:function(id){return this._hash[id];},byClass:function(cls){return this.filter(function(_2f){return _2f.declaredClass==cls;});}});dijit.registry=new dijit.WidgetSet();dijit._widgetTypeCtr={};dijit.getUniqueId=function(_30){var id;do{id=_30+"_"+(dijit._widgetTypeCtr[_30]!==undefined?++dijit._widgetTypeCtr[_30]:dijit._widgetTypeCtr[_30]=0);}while(dijit.byId(id));return id;};if(dojo.isIE){dojo.addOnUnload(function(){dijit.registry.forEach(function(_32){_32.destroy();});});}dijit.byId=function(id){return (dojo.isString(id))?dijit.registry.byId(id):id;};dijit.byNode=function(_34){return dijit.registry.byId(_34.getAttribute("widgetId"));};dijit.getEnclosingWidget=function(_35){while(_35){if(_35.getAttribute&&_35.getAttribute("widgetId")){return dijit.registry.byId(_35.getAttribute("widgetId"));}_35=_35.parentNode;}return null;};}if(!dojo._hasResource["dijit._base.place"]){dojo._hasResource["dijit._base.place"]=true;dojo.provide("dijit._base.place");dijit.getViewport=function(){var _36=dojo.global;var _37=dojo.doc;var w=0,h=0;if(dojo.isMozilla){var _3a,_3b,_3c,_3d;if(_37.body.clientWidth>_37.documentElement.clientWidth){_3a=_37.documentElement.clientWidth;_3c=_37.body.clientWidth;}else{_3c=_37.documentElement.clientWidth;_3a=_37.body.clientWidth;}if(_37.body.clientHeight>_37.documentElement.clientHeight){_3b=_37.documentElement.clientHeight;_3d=_37.body.clientHeight;}else{_3d=_37.documentElement.clientHeight;_3b=_37.body.clientHeight;}w=(_3c>_36.innerWidth)?_3a:_3c;h=(_3d>_36.innerHeight)?_3b:_3d;}else{if(!dojo.isOpera&&_36.innerWidth){w=_36.innerWidth;h=_36.innerHeight;}else{if(dojo.isIE&&_37.documentElement&&_37.documentElement.clientHeight){w=_37.documentElement.clientWidth;h=_37.documentElement.clientHeight;}else{if(dojo.body().clientWidth){w=dojo.body().clientWidth;h=dojo.body().clientHeight;}}}}var _3e=dojo._docScroll();return {w:w,h:h,l:_3e.x,t:_3e.y};};dijit.placeOnScreen=function(_3f,pos,_41,_42){var _43=dojo.map(_41,function(_44){return {corner:_44,pos:pos};});return dijit._place(_3f,_43);};dijit._place=function(_45,_46,_47){var _48=dijit.getViewport();if(!_45.parentNode||String(_45.parentNode.tagName).toLowerCase()!="body"){dojo.body().appendChild(_45);}var _49=null;for(var i=0;i<_46.length;i++){var _4b=_46[i].corner;var pos=_46[i].pos;if(_47){_47(_4b);}var _4d=_45.style.display;var _4e=_45.style.visibility;_45.style.visibility="hidden";_45.style.display="";var mb=dojo.marginBox(_45);_45.style.display=_4d;_45.style.visibility=_4e;var _50=(_4b.charAt(1)=="L"?pos.x:Math.max(_48.l,pos.x-mb.w)),_51=(_4b.charAt(0)=="T"?pos.y:Math.max(_48.t,pos.y-mb.h)),_52=(_4b.charAt(1)=="L"?Math.min(_48.l+_48.w,_50+mb.w):pos.x),_53=(_4b.charAt(0)=="T"?Math.min(_48.t+_48.h,_51+mb.h):pos.y),_54=_52-_50,_55=_53-_51,_56=(mb.w-_54)+(mb.h-_55);if(_49==null||_56<_49.overflow){_49={corner:_4b,aroundCorner:_46[i].aroundCorner,x:_50,y:_51,w:_54,h:_55,overflow:_56};}if(_56==0){break;}}_45.style.left=_49.x+"px";_45.style.top=_49.y+"px";return _49;};dijit.placeOnScreenAroundElement=function(_57,_58,_59,_5a){_58=dojo.byId(_58);var _5b=_58.style.display;_58.style.display="";var _5c=_58.offsetWidth;var _5d=_58.offsetHeight;var _5e=dojo.coords(_58,true);_58.style.display=_5b;var _5f=[];for(var _60 in _59){_5f.push({aroundCorner:_60,corner:_59[_60],pos:{x:_5e.x+(_60.charAt(1)=="L"?0:_5c),y:_5e.y+(_60.charAt(0)=="T"?0:_5d)}});}return dijit._place(_57,_5f,_5a);};}if(!dojo._hasResource["dijit._base.window"]){dojo._hasResource["dijit._base.window"]=true;dojo.provide("dijit._base.window");dijit.getDocumentWindow=function(doc){if(dojo.isSafari&&!doc._parentWindow){var fix=function(win){win.document._parentWindow=win;for(var i=0;i<win.frames.length;i++){fix(win.frames[i]);}};fix(window.top);}if(dojo.isIE&&window!==document.parentWindow&&!doc._parentWindow){doc.parentWindow.execScript("document._parentWindow = window;","Javascript");var win=doc._parentWindow;doc._parentWindow=null;return win;}return doc._parentWindow||doc.parentWindow||doc.defaultView;};}if(!dojo._hasResource["dijit._base.popup"]){dojo._hasResource["dijit._base.popup"]=true;dojo.provide("dijit._base.popup");dijit.popup=new function(){var _66=[],_67=1000,_68=1;this.open=function(_69){var _6a=_69.popup,_6b=_69.orient||{"BL":"TL","TL":"BL"},_6c=_69.around,id=(_69.around&&_69.around.id)?(_69.around.id+"_dropdown"):("popup_"+_68++);var _6e=dojo.doc.createElement("div");_6e.id=id;_6e.className="dijitPopup";_6e.style.zIndex=_67+_66.length;_6e.style.visibility="hidden";if(_69.parent){_6e.dijitPopupParent=_69.parent.id;}dojo.body().appendChild(_6e);_6a.domNode.style.display="";_6e.appendChild(_6a.domNode);var _6f=new dijit.BackgroundIframe(_6e);var _70=_6c?dijit.placeOnScreenAroundElement(_6e,_6c,_6b,_6a.orient?dojo.hitch(_6a,"orient"):null):dijit.placeOnScreen(_6e,_69,_6b=="R"?["TR","BR","TL","BL"]:["TL","BL","TR","BR"]);_6e.style.visibility="visible";var _71=[];function getTopPopup(){for(var pi=_66.length-1;pi>0&&_66[pi].parent===_66[pi-1].widget;pi--){}return _66[pi];};_71.push(dojo.connect(_6e,"onkeypress",this,function(evt){if(evt.keyCode==dojo.keys.ESCAPE&&_69.onCancel){_69.onCancel();}else{if(evt.keyCode==dojo.keys.TAB){dojo.stopEvent(evt);var _74=getTopPopup();if(_74&&_74.onCancel){_74.onCancel();}}}}));if(_6a.onCancel){_71.push(dojo.connect(_6a,"onCancel",null,_69.onCancel));}_71.push(dojo.connect(_6a,_6a.onExecute?"onExecute":"onChange",null,function(){var _75=getTopPopup();if(_75&&_75.onExecute){_75.onExecute();}}));_66.push({wrapper:_6e,iframe:_6f,widget:_6a,parent:_69.parent,onExecute:_69.onExecute,onCancel:_69.onCancel,onClose:_69.onClose,handlers:_71});if(_6a.onOpen){_6a.onOpen(_70);}return _70;};this.close=function(_76){while(dojo.some(_66,function(_77){return _77.widget==_76;})){var top=_66.pop(),_79=top.wrapper,_7a=top.iframe,_7b=top.widget,_7c=top.onClose;if(_7b.onClose){_7b.onClose();}dojo.forEach(top.handlers,dojo.disconnect);if(!_7b||!_7b.domNode){return;}dojo.style(_7b.domNode,"display","none");dojo.body().appendChild(_7b.domNode);_7a.destroy();dojo._destroyElement(_79);if(_7c){_7c();}}};}();dijit._frames=new function(){var _7d=[];this.pop=function(){var _7e;if(_7d.length){_7e=_7d.pop();_7e.style.display="";}else{if(dojo.isIE){var _7f="<iframe src='javascript:\"\"'"+" style='position: absolute; left: 0px; top: 0px;"+"z-index: -1; filter:Alpha(Opacity=\"0\");'>";_7e=dojo.doc.createElement(_7f);}else{var _7e=dojo.doc.createElement("iframe");_7e.src="javascript:\"\"";_7e.className="dijitBackgroundIframe";}_7e.tabIndex=-1;dojo.body().appendChild(_7e);}return _7e;};this.push=function(_80){_80.style.display="";if(dojo.isIE){_80.style.removeExpression("width");_80.style.removeExpression("height");}_7d.push(_80);};}();if(dojo.isIE&&dojo.isIE<7){dojo.addOnLoad(function(){var f=dijit._frames;dojo.forEach([f.pop()],f.push);});}dijit.BackgroundIframe=function(_82){if(!_82.id){throw new Error("no id");}if((dojo.isIE&&dojo.isIE<7)||(dojo.isFF&&dojo.isFF<3&&dojo.hasClass(dojo.body(),"dijit_a11y"))){var _83=dijit._frames.pop();_82.appendChild(_83);if(dojo.isIE){_83.style.setExpression("width","document.getElementById('"+_82.id+"').offsetWidth");_83.style.setExpression("height","document.getElementById('"+_82.id+"').offsetHeight");}this.iframe=_83;}};dojo.extend(dijit.BackgroundIframe,{destroy:function(){if(this.iframe){dijit._frames.push(this.iframe);delete this.iframe;}}});}if(!dojo._hasResource["dijit._base.scroll"]){dojo._hasResource["dijit._base.scroll"]=true;dojo.provide("dijit._base.scroll");dijit.scrollIntoView=function(_84){if(dojo.isIE){if(dojo.marginBox(_84.parentNode).h<=_84.parentNode.scrollHeight){_84.scrollIntoView(false);}}else{if(dojo.isMozilla){_84.scrollIntoView(false);}else{var _85=_84.parentNode;var _86=_85.scrollTop+dojo.marginBox(_85).h;var _87=_84.offsetTop+dojo.marginBox(_84).h;if(_86<_87){_85.scrollTop+=(_87-_86);}else{if(_85.scrollTop>_84.offsetTop){_85.scrollTop-=(_85.scrollTop-_84.offsetTop);}}}}};}if(!dojo._hasResource["dijit._base.sniff"]){dojo._hasResource["dijit._base.sniff"]=true;dojo.provide("dijit._base.sniff");(function(){var d=dojo;var ie=d.isIE;var _8a=d.isOpera;var maj=Math.floor;var _8c={dj_ie:ie,dj_ie6:maj(ie)==6,dj_ie7:maj(ie)==7,dj_iequirks:ie&&d.isQuirks,dj_opera:_8a,dj_opera8:maj(_8a)==8,dj_opera9:maj(_8a)==9,dj_khtml:d.isKhtml,dj_safari:d.isSafari,dj_gecko:d.isMozilla};for(var p in _8c){if(_8c[p]){var _8e=dojo.doc.documentElement;if(_8e.className){_8e.className+=" "+p;}else{_8e.className=p;}}}})();}if(!dojo._hasResource["dijit._base.bidi"]){dojo._hasResource["dijit._base.bidi"]=true;dojo.provide("dijit._base.bidi");dojo.addOnLoad(function(){if(!dojo._isBodyLtr()){dojo.addClass(dojo.body(),"dijitRtl");}});}if(!dojo._hasResource["dijit._base.typematic"]){dojo._hasResource["dijit._base.typematic"]=true;dojo.provide("dijit._base.typematic");dijit.typematic={_fireEventAndReload:function(){this._timer=null;this._callback(++this._count,this._node,this._evt);this._currentTimeout=(this._currentTimeout<0)?this._initialDelay:((this._subsequentDelay>1)?this._subsequentDelay:Math.round(this._currentTimeout*this._subsequentDelay));this._timer=setTimeout(dojo.hitch(this,"_fireEventAndReload"),this._currentTimeout);},trigger:function(evt,_90,_91,_92,obj,_94,_95){if(obj!=this._obj){this.stop();this._initialDelay=_95||500;this._subsequentDelay=_94||0.9;this._obj=obj;this._evt=evt;this._node=_91;this._currentTimeout=-1;this._count=-1;this._callback=dojo.hitch(_90,_92);this._fireEventAndReload();}},stop:function(){if(this._timer){clearTimeout(this._timer);this._timer=null;}if(this._obj){this._callback(-1,this._node,this._evt);this._obj=null;}},addKeyListener:function(_96,_97,_98,_99,_9a,_9b){return [dojo.connect(_96,"onkeypress",this,function(evt){if(evt.keyCode==_97.keyCode&&(!_97.charCode||_97.charCode==evt.charCode)&&(_97.ctrlKey===undefined||_97.ctrlKey==evt.ctrlKey)&&(_97.altKey===undefined||_97.altKey==evt.ctrlKey)&&(_97.shiftKey===undefined||_97.shiftKey==evt.ctrlKey)){dojo.stopEvent(evt);dijit.typematic.trigger(_97,_98,_96,_99,_97,_9a,_9b);}else{if(dijit.typematic._obj==_97){dijit.typematic.stop();}}}),dojo.connect(_96,"onkeyup",this,function(evt){if(dijit.typematic._obj==_97){dijit.typematic.stop();}})];},addMouseListener:function(_9e,_9f,_a0,_a1,_a2){var dc=dojo.connect;return [dc(_9e,"mousedown",this,function(evt){dojo.stopEvent(evt);dijit.typematic.trigger(evt,_9f,_9e,_a0,_9e,_a1,_a2);}),dc(_9e,"mouseup",this,function(evt){dojo.stopEvent(evt);dijit.typematic.stop();}),dc(_9e,"mouseout",this,function(evt){dojo.stopEvent(evt);dijit.typematic.stop();}),dc(_9e,"mousemove",this,function(evt){dojo.stopEvent(evt);}),dc(_9e,"dblclick",this,function(evt){dojo.stopEvent(evt);if(dojo.isIE){dijit.typematic.trigger(evt,_9f,_9e,_a0,_9e,_a1,_a2);setTimeout(dijit.typematic.stop,50);}})];},addListener:function(_a9,_aa,_ab,_ac,_ad,_ae,_af){return this.addKeyListener(_aa,_ab,_ac,_ad,_ae,_af).concat(this.addMouseListener(_a9,_ac,_ad,_ae,_af));}};}if(!dojo._hasResource["dijit._base.wai"]){dojo._hasResource["dijit._base.wai"]=true;dojo.provide("dijit._base.wai");dijit.wai={onload:function(){var div=document.createElement("div");div.id="a11yTestNode";div.style.cssText="border: 1px solid;"+"border-color:red green;"+"position: absolute;"+"height: 5px;"+"top: -999px;"+"background-image: url(\""+dojo.moduleUrl("dijit","form/templates/blank.gif")+"\");";dojo.body().appendChild(div);function check(){var cs=dojo.getComputedStyle(div);if(cs){var _b2=cs.backgroundImage;var _b3=(cs.borderTopColor==cs.borderRightColor)||(_b2!=null&&(_b2=="none"||_b2=="url(invalid-url:)"));dojo[_b3?"addClass":"removeClass"](dojo.body(),"dijit_a11y");}};check();if(dojo.isIE){setInterval(check,4000);}}};if(dojo.isIE||dojo.isMoz){dojo._loaders.unshift(dijit.wai.onload);}dojo.mixin(dijit,{hasWaiRole:function(_b4){if(_b4.hasAttribute){return _b4.hasAttribute("role");}else{return _b4.getAttribute("role")?true:false;}},getWaiRole:function(_b5){var _b6=_b5.getAttribute("role");if(_b6){var _b7=_b6.indexOf(":");return _b7==-1?_b6:_b6.substring(_b7+1);}else{return "";}},setWaiRole:function(_b8,_b9){if(dojo.isFF&&dojo.isFF<3){_b8.setAttribute("role","wairole:"+_b9);}else{_b8.setAttribute("role",_b9);}},removeWaiRole:function(_ba){_ba.removeAttribute("role");},hasWaiState:function(_bb,_bc){if(dojo.isFF&&dojo.isFF<3){return _bb.hasAttributeNS("http://www.w3.org/2005/07/aaa",_bc);}else{if(_bb.hasAttribute){return _bb.hasAttribute("aria-"+_bc);}else{return _bb.getAttribute("aria-"+_bc)?true:false;}}},getWaiState:function(_bd,_be){if(dojo.isFF&&dojo.isFF<3){return _bd.getAttributeNS("http://www.w3.org/2005/07/aaa",_be);}else{var _bf=_bd.getAttribute("aria-"+_be);return _bf?_bf:"";}},setWaiState:function(_c0,_c1,_c2){if(dojo.isFF&&dojo.isFF<3){_c0.setAttributeNS("http://www.w3.org/2005/07/aaa","aaa:"+_c1,_c2);}else{_c0.setAttribute("aria-"+_c1,_c2);}},removeWaiState:function(_c3,_c4){if(dojo.isFF&&dojo.isFF<3){_c3.removeAttributeNS("http://www.w3.org/2005/07/aaa",_c4);}else{_c3.removeAttribute("aria-"+_c4);}}});}if(!dojo._hasResource["dijit._base"]){dojo._hasResource["dijit._base"]=true;dojo.provide("dijit._base");}if(!dojo._hasResource["dojo.date.stamp"]){dojo._hasResource["dojo.date.stamp"]=true;dojo.provide("dojo.date.stamp");dojo.date.stamp.fromISOString=function(_c5,_c6){if(!dojo.date.stamp._isoRegExp){dojo.date.stamp._isoRegExp=/^(?:(\d{4})(?:-(\d{2})(?:-(\d{2}))?)?)?(?:T(\d{2}):(\d{2})(?::(\d{2})(.\d+)?)?((?:[+-](\d{2}):(\d{2}))|Z)?)?$/;}var _c7=dojo.date.stamp._isoRegExp.exec(_c5);var _c8=null;if(_c7){_c7.shift();_c7[1]&&_c7[1]--;_c7[6]&&(_c7[6]*=1000);if(_c6){_c6=new Date(_c6);dojo.map(["FullYear","Month","Date","Hours","Minutes","Seconds","Milliseconds"],function(_c9){return _c6["get"+_c9]();}).forEach(function(_ca,_cb){if(_c7[_cb]===undefined){_c7[_cb]=_ca;}});}_c8=new Date(_c7[0]||1970,_c7[1]||0,_c7[2]||0,_c7[3]||0,_c7[4]||0,_c7[5]||0,_c7[6]||0);var _cc=0;var _cd=_c7[7]&&_c7[7].charAt(0);if(_cd!="Z"){_cc=((_c7[8]||0)*60)+(Number(_c7[9])||0);if(_cd!="-"){_cc*=-1;}}if(_cd){_cc-=_c8.getTimezoneOffset();}if(_cc){_c8.setTime(_c8.getTime()+_cc*60000);}}return _c8;};dojo.date.stamp.toISOString=function(_ce,_cf){var _=function(n){return (n<10)?"0"+n:n;};_cf=_cf||{};var _d2=[];var _d3=_cf.zulu?"getUTC":"get";var _d4="";if(_cf.selector!="time"){_d4=[_ce[_d3+"FullYear"](),_(_ce[_d3+"Month"]()+1),_(_ce[_d3+"Date"]())].join("-");}_d2.push(_d4);if(_cf.selector!="date"){var _d5=[_(_ce[_d3+"Hours"]()),_(_ce[_d3+"Minutes"]()),_(_ce[_d3+"Seconds"]())].join(":");var _d6=_ce[_d3+"Milliseconds"]();if(_cf.milliseconds){_d5+="."+(_d6<100?"0":"")+_(_d6);}if(_cf.zulu){_d5+="Z";}else{if(_cf.selector!="time"){var _d7=_ce.getTimezoneOffset();var _d8=Math.abs(_d7);_d5+=(_d7>0?"-":"+")+_(Math.floor(_d8/60))+":"+_(_d8%60);}}_d2.push(_d5);}return _d2.join("T");};}if(!dojo._hasResource["dojo.parser"]){dojo._hasResource["dojo.parser"]=true;dojo.provide("dojo.parser");dojo.parser=new function(){var d=dojo;function val2type(_da){if(d.isString(_da)){return "string";}if(typeof _da=="number"){return "number";}if(typeof _da=="boolean"){return "boolean";}if(d.isFunction(_da)){return "function";}if(d.isArray(_da)){return "array";}if(_da instanceof Date){return "date";}if(_da instanceof d._Url){return "url";}return "object";};function str2obj(_db,_dc){switch(_dc){case "string":return _db;case "number":return _db.length?Number(_db):NaN;case "boolean":return typeof _db=="boolean"?_db:!(_db.toLowerCase()=="false");case "function":if(d.isFunction(_db)){_db=_db.toString();_db=d.trim(_db.substring(_db.indexOf("{")+1,_db.length-1));}try{if(_db.search(/[^\w\.]+/i)!=-1){_db=d.parser._nameAnonFunc(new Function(_db),this);}return d.getObject(_db,false);}catch(e){return new Function();}case "array":return _db.split(/\s*,\s*/);case "date":switch(_db){case "":return new Date("");case "now":return new Date();default:return d.date.stamp.fromISOString(_db);}case "url":return d.baseUrl+_db;default:return d.fromJson(_db);}};var _dd={};function getClassInfo(_de){if(!_dd[_de]){var cls=d.getObject(_de);if(!d.isFunction(cls)){throw new Error("Could not load class '"+_de+"'. Did you spell the name correctly and use a full path, like 'dijit.form.Button'?");}var _e0=cls.prototype;var _e1={};for(var _e2 in _e0){if(_e2.charAt(0)=="_"){continue;}var _e3=_e0[_e2];_e1[_e2]=val2type(_e3);}_dd[_de]={cls:cls,params:_e1};}return _dd[_de];};this._functionFromScript=function(_e4){var _e5="";var _e6="";var _e7=_e4.getAttribute("args");if(_e7){d.forEach(_e7.split(/\s*,\s*/),function(_e8,idx){_e5+="var "+_e8+" = arguments["+idx+"]; ";});}var _ea=_e4.getAttribute("with");if(_ea&&_ea.length){d.forEach(_ea.split(/\s*,\s*/),function(_eb){_e5+="with("+_eb+"){";_e6+="}";});}return new Function(_e5+_e4.innerHTML+_e6);};this.instantiate=function(_ec){var _ed=[];d.forEach(_ec,function(_ee){if(!_ee){return;}var _ef=_ee.getAttribute("dojoType");if((!_ef)||(!_ef.length)){return;}var _f0=getClassInfo(_ef);var _f1=_f0.cls;var ps=_f1._noScript||_f1.prototype._noScript;var _f3={};var _f4=_ee.attributes;for(var _f5 in _f0.params){var _f6=_f4.getNamedItem(_f5);if(!_f6||(!_f6.specified&&(!dojo.isIE||_f5.toLowerCase()!="value"))){continue;}var _f7=_f6.value;switch(_f5){case "class":_f7=_ee.className;break;case "style":_f7=_ee.style&&_ee.style.cssText;}var _f8=_f0.params[_f5];_f3[_f5]=str2obj(_f7,_f8);}if(!ps){var _f9=[],_fa=[];d.query("> script[type^='dojo/']",_ee).orphan().forEach(function(_fb){var _fc=_fb.getAttribute("event"),_ef=_fb.getAttribute("type"),nf=d.parser._functionFromScript(_fb);if(_fc){if(_ef=="dojo/connect"){_f9.push({event:_fc,func:nf});}else{_f3[_fc]=nf;}}else{_fa.push(nf);}});}var _fe=_f1["markupFactory"];if(!_fe&&_f1["prototype"]){_fe=_f1.prototype["markupFactory"];}var _ff=_fe?_fe(_f3,_ee,_f1):new _f1(_f3,_ee);_ed.push(_ff);var _100=_ee.getAttribute("jsId");if(_100){d.setObject(_100,_ff);}if(!ps){dojo.forEach(_f9,function(_101){dojo.connect(_ff,_101.event,null,_101.func);});dojo.forEach(_fa,function(func){func.call(_ff);});}});d.forEach(_ed,function(_103){if(_103&&(_103.startup)&&((!_103.getParent)||(!_103.getParent()))){_103.startup();}});return _ed;};this.parse=function(_104){var list=d.query("[dojoType]",_104);var _106=this.instantiate(list);return _106;};}();(function(){var _107=function(){if(djConfig["parseOnLoad"]==true){dojo.parser.parse();}};if(dojo.exists("dijit.wai.onload")&&(dijit.wai.onload===dojo._loaders[0])){dojo._loaders.splice(1,0,_107);}else{dojo._loaders.unshift(_107);}})();dojo.parser._anonCtr=0;dojo.parser._anon={};dojo.parser._nameAnonFunc=function(_108,_109){var jpn="$joinpoint";var nso=(_109||dojo.parser._anon);if(dojo.isIE){var cn=_108["__dojoNameCache"];if(cn&&nso[cn]===_108){return _108["__dojoNameCache"];}}var ret="__"+dojo.parser._anonCtr++;while(typeof nso[ret]!="undefined"){ret="__"+dojo.parser._anonCtr++;}nso[ret]=_108;return ret;};}if(!dojo._hasResource["dijit._Widget"]){dojo._hasResource["dijit._Widget"]=true;dojo.provide("dijit._Widget");dojo.declare("dijit._Widget",null,{id:"",lang:"",dir:"","class":"",style:"",title:"",srcNodeRef:null,domNode:null,attributeMap:{id:"",dir:"",lang:"","class":"",style:"",title:""},postscript:function(_10e,_10f){this.create(_10e,_10f);},create:function(_110,_111){this.srcNodeRef=dojo.byId(_111);this._connects=[];this._attaches=[];if(this.srcNodeRef&&(typeof this.srcNodeRef.id=="string")){this.id=this.srcNodeRef.id;}if(_110){dojo.mixin(this,_110);}this.postMixInProperties();if(!this.id){this.id=dijit.getUniqueId(this.declaredClass.replace(/\./g,"_"));}dijit.registry.add(this);this.buildRendering();if(this.domNode){for(var attr in this.attributeMap){var _113=this[this.attributeMap[attr]||"domNode"];var _114=this[attr];if(typeof _114!="object"&&(_114!==""||(_110&&_110[attr]))){switch(attr){case "class":dojo.addClass(_113,_114);break;case "style":if(_113.style.cssText){_113.style.cssText+="; "+_114;}else{_113.style.cssText=_114;}break;default:_113.setAttribute(attr,_114);}}}}if(this.domNode){this.domNode.setAttribute("widgetId",this.id);}this.postCreate();if(this.srcNodeRef&&!this.srcNodeRef.parentNode){delete this.srcNodeRef;}},postMixInProperties:function(){},buildRendering:function(){this.domNode=this.srcNodeRef||dojo.doc.createElement("div");},postCreate:function(){},startup:function(){},destroyRecursive:function(_115){this.destroyDescendants();this.destroy();},destroy:function(_116){this.uninitialize();dojo.forEach(this._connects,function(_117){dojo.forEach(_117,dojo.disconnect);});this.destroyRendering(_116);dijit.registry.remove(this.id);},destroyRendering:function(_118){if(this.bgIframe){this.bgIframe.destroy();delete this.bgIframe;}if(this.domNode){dojo._destroyElement(this.domNode);delete this.domNode;}if(this.srcNodeRef){dojo._destroyElement(this.srcNodeRef);delete this.srcNodeRef;}},destroyDescendants:function(){dojo.forEach(this.getDescendants(),function(_119){_119.destroy();});},uninitialize:function(){return false;},toString:function(){return "[Widget "+this.declaredClass+", "+(this.id||"NO ID")+"]";},getDescendants:function(){var list=dojo.query("[widgetId]",this.domNode);return list.map(dijit.byNode);},nodesWithKeyClick:["input","button"],connect:function(obj,_11c,_11d){var _11e=[];if(_11c=="ondijitclick"){var w=this;if(!this.nodesWithKeyClick[obj.nodeName]){_11e.push(dojo.connect(obj,"onkeydown",this,function(e){if(e.keyCode==dojo.keys.ENTER){return (dojo.isString(_11d))?w[_11d](e):_11d.call(w,e);}else{if(e.keyCode==dojo.keys.SPACE){dojo.stopEvent(e);}}}));_11e.push(dojo.connect(obj,"onkeyup",this,function(e){if(e.keyCode==dojo.keys.SPACE){return dojo.isString(_11d)?w[_11d](e):_11d.call(w,e);}}));}_11c="onclick";}_11e.push(dojo.connect(obj,_11c,this,_11d));this._connects.push(_11e);return _11e;},disconnect:function(_122){for(var i=0;i<this._connects.length;i++){if(this._connects[i]==_122){dojo.forEach(_122,dojo.disconnect);this._connects.splice(i,1);return;}}},isLeftToRight:function(){if(typeof this._ltr=="undefined"){this._ltr=dojo.getComputedStyle(this.domNode).direction!="rtl";}return this._ltr;},isFocusable:function(){return this.focus&&(dojo.style(this.domNode,"display")!="none");}});}if(!dojo._hasResource["dojo.string"]){dojo._hasResource["dojo.string"]=true;dojo.provide("dojo.string");dojo.string.pad=function(text,size,ch,end){var out=String(text);if(!ch){ch="0";}while(out.length<size){if(end){out+=ch;}else{out=ch+out;}}return out;};dojo.string.substitute=function(_129,map,_12b,_12c){return _129.replace(/\$\{([^\s\:\}]+)(?:\:([^\s\:\}]+))?\}/g,function(_12d,key,_12f){var _130=dojo.getObject(key,false,map);if(_12f){_130=dojo.getObject(_12f,false,_12c)(_130);}if(_12b){_130=_12b(_130,key);}return _130.toString();});};dojo.string.trim=function(str){str=str.replace(/^\s+/,"");for(var i=str.length-1;i>0;i--){if(/\S/.test(str.charAt(i))){str=str.substring(0,i+1);break;}}return str;};}if(!dojo._hasResource["dijit._Templated"]){dojo._hasResource["dijit._Templated"]=true;dojo.provide("dijit._Templated");dojo.declare("dijit._Templated",null,{templateNode:null,templateString:null,templatePath:null,widgetsInTemplate:false,containerNode:null,_skipNodeCache:false,buildRendering:function(){var _133=dijit._Templated.getCachedTemplate(this.templatePath,this.templateString,this._skipNodeCache);var node;if(dojo.isString(_133)){var _135=this.declaredClass,_136=this;var tstr=dojo.string.substitute(_133,this,function(_138,key){if(key.charAt(0)=="!"){_138=_136[key.substr(1)];}if(typeof _138=="undefined"){throw new Error(_135+" template:"+key);}if(!_138){return "";}return key.charAt(0)=="!"?_138:_138.toString().replace(/"/g,"&quot;");},this);node=dijit._Templated._createNodesFromText(tstr)[0];}else{node=_133.cloneNode(true);}this._attachTemplateNodes(node);var _13a=this.srcNodeRef;if(_13a&&_13a.parentNode){_13a.parentNode.replaceChild(node,_13a);}this.domNode=node;if(this.widgetsInTemplate){var _13b=dojo.parser.parse(node);this._attachTemplateNodes(_13b,function(n,p){return n[p];});}this._fillContent(_13a);},_fillContent:function(_13e){var dest=this.containerNode;if(_13e&&dest){while(_13e.hasChildNodes()){dest.appendChild(_13e.firstChild);}}},_attachTemplateNodes:function(_140,_141){_141=_141||function(n,p){return n.getAttribute(p);};var _144=dojo.isArray(_140)?_140:(_140.all||_140.getElementsByTagName("*"));var x=dojo.isArray(_140)?0:-1;for(;x<_144.length;x++){var _146=(x==-1)?_140:_144[x];if(this.widgetsInTemplate&&_141(_146,"dojoType")){continue;}var _147=_141(_146,"dojoAttachPoint");if(_147){var _148,_149=_147.split(/\s*,\s*/);while(_148=_149.shift()){if(dojo.isArray(this[_148])){this[_148].push(_146);}else{this[_148]=_146;}}}var _14a=_141(_146,"dojoAttachEvent");if(_14a){var _14b,_14c=_14a.split(/\s*,\s*/);var trim=dojo.trim;while(_14b=_14c.shift()){if(_14b){var _14e=null;if(_14b.indexOf(":")!=-1){var _14f=_14b.split(":");_14b=trim(_14f[0]);_14e=trim(_14f[1]);}else{_14b=trim(_14b);}if(!_14e){_14e=_14b;}this.connect(_146,_14b,_14e);}}}var role=_141(_146,"waiRole");if(role){dijit.setWaiRole(_146,role);}var _151=_141(_146,"waiState");if(_151){dojo.forEach(_151.split(/\s*,\s*/),function(_152){if(_152.indexOf("-")!=-1){var pair=_152.split("-");dijit.setWaiState(_146,pair[0],pair[1]);}});}}}});dijit._Templated._templateCache={};dijit._Templated.getCachedTemplate=function(_154,_155,_156){var _157=dijit._Templated._templateCache;var key=_155||_154;var _159=_157[key];if(_159){return _159;}if(!_155){_155=dijit._Templated._sanitizeTemplateString(dojo._getText(_154));}_155=dojo.string.trim(_155);if(_155.match(/\$\{([^\}]+)\}/g)||_156){return (_157[key]=_155);}else{return (_157[key]=dijit._Templated._createNodesFromText(_155)[0]);}};dijit._Templated._sanitizeTemplateString=function(_15a){if(_15a){_15a=_15a.replace(/^\s*<\?xml(\s)+version=[\'\"](\d)*.(\d)*[\'\"](\s)*\?>/im,"");var _15b=_15a.match(/<body[^>]*>\s*([\s\S]+)\s*<\/body>/im);if(_15b){_15a=_15b[1];}}else{_15a="";}return _15a;};if(dojo.isIE){dojo.addOnUnload(function(){var _15c=dijit._Templated._templateCache;for(var key in _15c){var _15e=_15c[key];if(!isNaN(_15e.nodeType)){dojo._destroyElement(_15e);}delete _15c[key];}});}(function(){var _15f={cell:{re:/^<t[dh][\s\r\n>]/i,pre:"<table><tbody><tr>",post:"</tr></tbody></table>"},row:{re:/^<tr[\s\r\n>]/i,pre:"<table><tbody>",post:"</tbody></table>"},section:{re:/^<(thead|tbody|tfoot)[\s\r\n>]/i,pre:"<table>",post:"</table>"}};var tn;dijit._Templated._createNodesFromText=function(text){if(!tn){tn=dojo.doc.createElement("div");tn.style.display="none";dojo.body().appendChild(tn);}var _162="none";var _163=text.replace(/^\s+/,"");for(var type in _15f){var map=_15f[type];if(map.re.test(_163)){_162=type;text=map.pre+text+map.post;break;}}tn.innerHTML=text;if(tn.normalize){tn.normalize();}var tag={cell:"tr",row:"tbody",section:"table"}[_162];var _167=(typeof tag!="undefined")?tn.getElementsByTagName(tag)[0]:tn;var _168=[];while(_167.firstChild){_168.push(_167.removeChild(_167.firstChild));}tn.innerHTML="";return _168;};})();dojo.extend(dijit._Widget,{dojoAttachEvent:"",dojoAttachPoint:"",waiRole:"",waiState:""});}if(!dojo._hasResource["dijit._Container"]){dojo._hasResource["dijit._Container"]=true;dojo.provide("dijit._Container");dojo.declare("dijit._Contained",null,{getParent:function(){for(var p=this.domNode.parentNode;p;p=p.parentNode){var id=p.getAttribute&&p.getAttribute("widgetId");if(id){var _16b=dijit.byId(id);return _16b.isContainer?_16b:null;}}return null;},_getSibling:function(_16c){var node=this.domNode;do{node=node[_16c+"Sibling"];}while(node&&node.nodeType!=1);if(!node){return null;}var id=node.getAttribute("widgetId");return dijit.byId(id);},getPreviousSibling:function(){return this._getSibling("previous");},getNextSibling:function(){return this._getSibling("next");}});dojo.declare("dijit._Container",null,{isContainer:true,addChild:function(_16f,_170){if(_170===undefined){_170="last";}var _171=this.containerNode||this.domNode;if(_170&&typeof _170=="number"){var _172=dojo.query("> [widgetid]",_171);if(_172&&_172.length>=_170){_171=_172[_170-1];_170="after";}}dojo.place(_16f.domNode,_171,_170);if(this._started&&!_16f._started){_16f.startup();}},removeChild:function(_173){var node=_173.domNode;node.parentNode.removeChild(node);},_nextElement:function(node){do{node=node.nextSibling;}while(node&&node.nodeType!=1);return node;},_firstElement:function(node){node=node.firstChild;if(node&&node.nodeType!=1){node=this._nextElement(node);}return node;},getChildren:function(){return dojo.query("> [widgetId]",this.containerNode||this.domNode).map(dijit.byNode);},hasChildren:function(){var cn=this.containerNode||this.domNode;return !!this._firstElement(cn);},_getSiblingOfChild:function(_178,dir){var node=_178.domNode;var _17b=(dir>0?"nextSibling":"previousSibling");do{node=node[_17b];}while(node&&(node.nodeType!=1||!dijit.byNode(node)));return node?dijit.byNode(node):null;}});dojo.declare("dijit._KeyNavContainer",[dijit._Container],{_keyNavCodes:{},connectKeyNavHandlers:function(_17c,_17d){var _17e=this._keyNavCodes={};var prev=dojo.hitch(this,this.focusPrev);var next=dojo.hitch(this,this.focusNext);dojo.forEach(_17c,function(code){_17e[code]=prev;});dojo.forEach(_17d,function(code){_17e[code]=next;});this.connect(this.domNode,"onkeypress","_onContainerKeypress");if(dojo.isIE){this.connect(this.domNode,"onactivate","_onContainerFocus");this.connect(this.domNode,"ondeactivate","_onContainerBlur");}else{this.connect(this.domNode,"onfocus","_onContainerFocus");this.connect(this.domNode,"onblur","_onContainerBlur");}},startupKeyNavChildren:function(){dojo.forEach(this.getChildren(),dojo.hitch(this,"_setTabIndexMinusOne"));},addChild:function(_183,_184){dijit._KeyNavContainer.superclass.addChild.apply(this,arguments);this._setTabIndexMinusOne(_183);},focus:function(){this.focusFirstChild();},focusFirstChild:function(){this.focusChild(this._getFirstFocusableChild());},focusNext:function(){if(this.focusedChild&&this.focusedChild.hasNextFocalNode&&this.focusedChild.hasNextFocalNode()){this.focusedChild.focusNext();return;}var _185=this._getNextFocusableChild(this.focusedChild,1);if(_185.getFocalNodes){this.focusChild(_185,_185.getFocalNodes()[0]);}else{this.focusChild(_185);}},focusPrev:function(){if(this.focusedChild&&this.focusedChild.hasPrevFocalNode&&this.focusedChild.hasPrevFocalNode()){this.focusedChild.focusPrev();return;}var _186=this._getNextFocusableChild(this.focusedChild,-1);if(_186.getFocalNodes){var _187=_186.getFocalNodes();this.focusChild(_186,_187[_187.length-1]);}else{this.focusChild(_186);}},focusChild:function(_188,node){if(_188){if(this.focusedChild&&_188!==this.focusedChild){this._onChildBlur(this.focusedChild);}this.focusedChild=_188;if(node&&_188.focusFocalNode){_188.focusFocalNode(node);}else{_188.focus();}}},_setTabIndexMinusOne:function(_18a){if(_18a.getFocalNodes){dojo.forEach(_18a.getFocalNodes(),function(node){node.setAttribute("tabIndex",-1);});}else{(_18a.focusNode||_18a.domNode).setAttribute("tabIndex",-1);}},_onContainerFocus:function(evt){this.domNode.setAttribute("tabIndex",-1);if(evt.target===this.domNode){this.focusFirstChild();}else{var _18d=dijit.getEnclosingWidget(evt.target);if(_18d&&_18d.isFocusable()){this.focusedChild=_18d;}}},_onContainerBlur:function(evt){if(this.tabIndex){this.domNode.setAttribute("tabIndex",this.tabIndex);}},_onContainerKeypress:function(evt){if(evt.ctrlKey||evt.altKey){return;}var func=this._keyNavCodes[evt.keyCode];if(func){func();dojo.stopEvent(evt);}},_onChildBlur:function(_191){},_getFirstFocusableChild:function(){return this._getNextFocusableChild(null,1);},_getNextFocusableChild:function(_192,dir){if(_192){_192=this._getSiblingOfChild(_192,dir);}var _194=this.getChildren();for(var i=0;i<_194.length;i++){if(!_192){_192=_194[(dir>0)?0:(_194.length-1)];}if(_192.isFocusable()){return _192;}_192=this._getSiblingOfChild(_192,dir);}}});}if(!dojo._hasResource["dijit.layout._LayoutWidget"]){dojo._hasResource["dijit.layout._LayoutWidget"]=true;dojo.provide("dijit.layout._LayoutWidget");dojo.declare("dijit.layout._LayoutWidget",[dijit._Widget,dijit._Container,dijit._Contained],{isLayoutContainer:true,postCreate:function(){dojo.addClass(this.domNode,"dijitContainer");},startup:function(){if(this._started){return;}this._started=true;if(this.getChildren){dojo.forEach(this.getChildren(),function(_196){_196.startup();});}if(!this.getParent||!this.getParent()){this.resize();this.connect(window,"onresize",function(){this.resize();});}},resize:function(args){var node=this.domNode;if(args){dojo.marginBox(node,args);if(args.t){node.style.top=args.t+"px";}if(args.l){node.style.left=args.l+"px";}}var mb=dojo.mixin(dojo.marginBox(node),args||{});this._contentBox=dijit.layout.marginBox2contentBox(node,mb);this.layout();},layout:function(){}});dijit.layout.marginBox2contentBox=function(node,mb){var cs=dojo.getComputedStyle(node);var me=dojo._getMarginExtents(node,cs);var pb=dojo._getPadBorderExtents(node,cs);return {l:dojo._toPixelValue(node,cs.paddingLeft),t:dojo._toPixelValue(node,cs.paddingTop),w:mb.w-(me.w+pb.w),h:mb.h-(me.h+pb.h)};};(function(){var _19f=function(word){return word.substring(0,1).toUpperCase()+word.substring(1);};var size=function(_1a2,dim){_1a2.resize?_1a2.resize(dim):dojo.marginBox(_1a2.domNode,dim);dojo.mixin(_1a2,dojo.marginBox(_1a2.domNode));dojo.mixin(_1a2,dim);};dijit.layout.layoutChildren=function(_1a4,dim,_1a6){dim=dojo.mixin({},dim);dojo.addClass(_1a4,"dijitLayoutContainer");_1a6=dojo.filter(_1a6,function(item){return item.layoutAlign!="client";}).concat(dojo.filter(_1a6,function(item){return item.layoutAlign=="client";}));dojo.forEach(_1a6,function(_1a9){var elm=_1a9.domNode,pos=_1a9.layoutAlign;var _1ac=elm.style;_1ac.left=dim.l+"px";_1ac.top=dim.t+"px";_1ac.bottom=_1ac.right="auto";dojo.addClass(elm,"dijitAlign"+_19f(pos));if(pos=="top"||pos=="bottom"){size(_1a9,{w:dim.w});dim.h-=_1a9.h;if(pos=="top"){dim.t+=_1a9.h;}else{_1ac.top=dim.t+dim.h+"px";}}else{if(pos=="left"||pos=="right"){size(_1a9,{h:dim.h});dim.w-=_1a9.w;if(pos=="left"){dim.l+=_1a9.w;}else{_1ac.left=dim.l+dim.w+"px";}}else{if(pos=="client"){size(_1a9,dim);}}}});};})();}if(!dojo._hasResource["dijit.form._FormWidget"]){dojo._hasResource["dijit.form._FormWidget"]=true;dojo.provide("dijit.form._FormWidget");dojo.declare("dijit.form._FormWidget",[dijit._Widget,dijit._Templated],{baseClass:"",value:"",name:"",id:"",alt:"",type:"text",tabIndex:"0",disabled:false,intermediateChanges:false,attributeMap:dojo.mixin(dojo.clone(dijit._Widget.prototype.attributeMap),{id:"focusNode",tabIndex:"focusNode",alt:"focusNode"}),setDisabled:function(_1ad){this.domNode.disabled=this.disabled=_1ad;if(this.focusNode){this.focusNode.disabled=_1ad;}if(_1ad){this._hovering=false;this._active=false;}dijit.setWaiState(this.focusNode||this.domNode,"disabled",_1ad);this._setStateClass();},_onMouse:function(_1ae){var _1af=_1ae.target;if(_1af&&_1af.getAttribute){this.stateModifier=_1af.getAttribute("stateModifier")||"";}if(!this.disabled){switch(_1ae.type){case "mouseenter":case "mouseover":this._hovering=true;break;case "mouseout":case "mouseleave":this._hovering=false;break;case "mousedown":this._active=true;var self=this;var _1b1=this.connect(dojo.body(),"onmouseup",function(){self._active=false;self._setStateClass();self.disconnect(_1b1);});break;}this._setStateClass();}},isFocusable:function(){return !this.disabled&&(dojo.style(this.domNode,"display")!="none");},focus:function(){dijit.focus(this.focusNode);},_setStateClass:function(){if(!("staticClass" in this)){this.staticClass=(this.stateNode||this.domNode).className;}var _1b2=[this.baseClass];function multiply(_1b3){_1b2=_1b2.concat(dojo.map(_1b2,function(c){return c+_1b3;}));};if(this.checked){multiply("Checked");}if(this.state){multiply(this.state);}if(this.selected){multiply("Selected");}if(this.disabled){multiply("Disabled");}else{if(this._active){multiply(this.stateModifier+"Active");}else{if(this._focused){multiply("Focused");}if((this.stateModifier||!this._focused)&&this._hovering){multiply(this.stateModifier+"Hover");}}}(this.stateNode||this.domNode).className=this.staticClass+" "+_1b2.join(" ");},onChange:function(_1b5){},postCreate:function(){this.setValue(this.value,null);this.setDisabled(this.disabled);this._setStateClass();},setValue:function(_1b6,_1b7){this._lastValue=_1b6;dijit.setWaiState(this.focusNode||this.domNode,"valuenow",this.forWaiValuenow());if(_1b7===undefined){_1b7=true;}if(this._lastValueReported==undefined&&_1b7===null){this._lastValueReported=_1b6;}if((this.intermediateChanges||_1b7)&&((_1b6&&_1b6.toString)?_1b6.toString():_1b6)!==((this._lastValueReported&&this._lastValueReported.toString)?this._lastValueReported.toString():this._lastValueReported)){this._lastValueReported=_1b6;this.onChange(_1b6);}},getValue:function(){return this._lastValue;},undo:function(){this.setValue(this._lastValueReported,false);},_onKeyPress:function(e){if(e.keyCode==dojo.keys.ESCAPE&&!e.shiftKey&&!e.ctrlKey&&!e.altKey){var v=this.getValue();var lv=this._lastValueReported;if((typeof lv!="undefined")&&((v!==null&&v.toString)?v.toString():null)!==lv.toString()){this.undo();dojo.stopEvent(e);return false;}}return true;},forWaiValuenow:function(){return this.getValue();}});}if(!dojo._hasResource["dijit.dijit"]){dojo._hasResource["dijit.dijit"]=true;dojo.provide("dijit.dijit");}
/trunk/api/js/dojo1.0/dijit/bench/benchReceive.php
New file
0,0 → 1,127
<?php
/*
 
benchReceive.php - example way to handle incoming benchmark data,
or how to use JSON php class to mangle data. No benchmark data
is stored currently.
 
--
-- Table structure for table `benchmarks`
--
 
CREATE TABLE `benchmarks` (
`id` int(11) NOT NULL auto_increment,
`useragent` varchar(242) NOT NULL default '',
`dojover` varchar(96) NOT NULL default '',
`testNum` int(11) NOT NULL default '0',
`dijit` varchar(64) NOT NULL default '',
`testCount` int(11) NOT NULL default '0',
`testAverage` float NOT NULL default '0',
`testMethod` varchar(10) NOT NULL default '',
`testTime` bigint(20) NOT NULL default '0',
`dataSet` varchar(64) NOT NULL default '',
PRIMARY KEY (`id`),
KEY `dijit` (`dijit`,`testAverage`),
KEY `dataSet` (`dataSet`)
) TYPE=MyISAM;
 
--
-- [end table struct] --
 
*/
 
if (is_array($_POST)) {
 
$username = '';
$password = '';
$dataBase = '';
$table = '';
 
mysql_connect("localhost",$username,$password);
mysql_select_db($dataBase);
 
require("../../dojo/tests/resources/JSON.php");
$json = new Services_JSON();
 
// see "escape()" call in benchTest.html
$string = $json->decode(urldecode($_POST['key']));
// $string = $json->decode($_POST['key']);
 
print "<h1>Thank YOU!</h1>";
print "
<p>Your results have been added to our database. No
personal information outside of what you see here
has been stored.
</p>
 
<p>You can <a href= \"javascript:history.back()\">go back</a>
and run more tests, or even better, load up another browser
and the submit your tests again!
</p>
 
<p>again ... thanks for your time.</p>
 
";
 
print "<h3>Results Submitted:</h3>";
print "<pre style=\"font:6pt Terminal,sans-serif; border:1px solid #cecece; background-color:#ededed; padding:20px; \">";
 
$ua = $string->clientNavigator;
$dojov = $string->dojoVersion;
 
print "Client: ".$ua."\n";
print "Dojo v".$dojov."\n";
 
if (is_array($string->dataSet)) {
print "\nTest Results:";
// should client serialize a key, or is this safer?
$dataSet = md5(serialize($string));
foreach ($string->dataSet as $test) {
$data = array(
'dataSet' => $dataSet,
'useragent' => $ua,
'dojover' => $dojov,
'testNum' => $test->testNum,
'testMethod' => $test->testMethod,
'testTime' => $test->testTime,
'testAverage' => $test->testAverage,
'testCount' => $test->testCount,
'dijit' => $test->dijit
);
print_r($data);
add_rec($table,$data);
}
}
 
if (is_array($string->errors)) {
// not saving errors at this point
print "\nErrors:";
foreach ($string->errors as $error) {
print_r($error);
}
}
print "</pre>";
}
 
function add_rec($table, $data) {
 
if (!is_array($data)) { return FALSE; }
 
$keys = array_keys($data);
$values = array_values($data);
$field=0;
 
for ($field;$field<sizeof($data);$field++) {
if (!ereg("^[0-9].*$",$keys[$field])) {
$sqlfields = $sqlfields.$keys[$field]."=\"".$values[$field]."\", ";
}
}
$sqlfields = (substr($sqlfields,0,(strlen($sqlfields)-2)));
 
if ($query = mysql_query("insert into $table set $sqlfields")) {
$id = mysql_insert_id();
return ($id); } else { return FALSE; }
}
}
 
?>
/trunk/api/js/dojo1.0/dijit/bench/create_widgets.html
New file
0,0 → 1,73
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>PROGRAMMATIC - Dojo Widget Creation Test</title>
<script type="text/javascript" src="../../dojo/dojo.js"></script>
<script type="text/javascript" src="../dijit.js"></script>
<script type="text/javascript">
var queryCount = location.search.match(/count=(\d*)/);
var count = (queryCount ? parseInt(queryCount[1]) : 100);
var queryClass = location.search.match(/class=([a-zA-z.]*)/);
var className = (queryClass ? queryClass[1] : "form.Button");
 
dojo.require("dijit." + className);
dojo.require("dojo.parser");
logMessage = window.alert;
</script>
<style type="text/css">
@import "../themes/tundra/tundra.css";
/* group multiple buttons in a row */
.box {
display: block;
text-align: center;
}
.box .dojoButton {
width: 80px;
margin-right: 10px;
}
.dojoButtonContents {
font-size: 1.6em;
}
 
#buttonContainer {
border: 1px solid black;
width: 100%;
}
 
#results {
color: darkred;
}
</style>
</head>
<body class=tundra>
<script language='javascript'>
document.write("<h2>Currently Creating "+count+" "+className+" instances</h2>");
</script>
Pass <code>?count=<i><b>100</b></i></code> in the query string to change the number of widgets.<br>
Pass <code>?class=<i><b>form.Button</b></i></code> in the query string to change the widget class.
<h3 id="results"></h3>
 
<div id="buttonContainer" class='box'></div>
<br>
<script type="text/javascript">
// See if we can make a widget in script and attach it to the DOM ourselves.
var constructor = dojo.getObject("dijit."+className);
function makeEm(){
var container = dojo.byId("buttonContainer");
var t0 = new Date().getTime();
for (var i = 1; i <= count; i++) {
var it =
new constructor(
{label:"Button "+i, onclick:'logMessage("clicked simple")'}
);
container.appendChild(it.domNode);
it.domNode.style.display = '';
}
var t1 = new Date().getTime();
dojo.byId("results").innerHTML = "It took " + (t1 - t0) + " msec to create " + count + " "+className+" instances programmatically.";
}
dojo.addOnLoad(makeEm);
</script>
</body>
</html>
/trunk/api/js/dojo1.0/dijit/bench/test_button-results.html
New file
0,0 → 1,66
<html>
<style>
th { vertical-align:bottom; }
td {
padding:10px;
text-align:right;
}
.computer { vertical-align:top; }
</style>
<body>
<h3>Widget instantiation timing test results</h3>
 
<table>
 
<tr><th rowspan=2>Computer/OS</th><th rowspan=2>Browser</th><th colspan=3>Parsing</th><th colspan=3>Programmatic</th></tr>
<tr> <th>100</th><th>500</th><th>1000</th><th>100</th><th>500</th><th>1000</th></tr>
<tr><td class='computer' rowspan=3>MacBook Pro 2.16<br> OS 10.4 2GB RAM</td>
<td>FF (2.0.0.3)</td>
<td>303</td><td>1724</td><td>3505</td>
<td>195</td><td>1006</td><td>2266</td>
</tr>
<tr><td>Safari (2.04)</td>
<td>192</td><td>1460</td><td>4463</td>
<td>142</td><td>895</td><td>2403</td>
</tr>
<tr><td>WebKit Nightly (21223)</td>
<td>110</td><td>540</td><td>1096</td>
<td>85</td><td>458</td><td>940</td>
</tr>
 
 
<tr><td class='computer' rowspan=2>Dell Precision 2.13 PPro<br> XP SP 2 - 2GB RAM</td>
<td>FF (2.0.0.3)</td>
<td>282</td><td>1266</td><td>2484</td>
<td>250</td><td>890</td><td>1766</td>
</tr>
 
<tr>
<td>IE7 (7.0.5730.11)</td>
<td>303</td><td>2079</td><td>5172</td>
<td>203</td><td>1140</td><td>2422</td>
</tr>
 
<tr><td><!--browser--></td>
<td><!--100 parse--></td><td><!--500 parse--></td><td><!--1000 parse--></td>
<td><!--100 code--></td><td><!--500 code--></td><td><!--1000 code--></td>
</tr>
</table>
 
 
<H3>If you want to play:</H3>
<p></p>
<ol>
<li> Run the following tests:
<ul>
<li><a href='http://dojotoolkit.org/~owen/bench/dojo/dijit/bench/test_Button-parse.php?count=100'>http://dojotoolkit.org/~owen/bench/dojo/dijit/bench/test_Button-parse.php?count=100</a></li>
<li><a href='http://dojotoolkit.org/~owen/bench/dojo/dijit/bench/test_Button-programmatic.html?count=100'>http://dojotoolkit.org/~owen/bench/dojo/dijit/bench/test_Button-programmatic.html?count=100</a></li>
</ul>
<br>
Change the "count=" to 100, 500, 1000 for each.
<br><br>
Restart the browser between each test/count. Run each test 3 times and record the smallest number.
</li>
<li>Record your tests in the copy of this file in SVN: <code>dijit/bench/test_Button-results.html</code> and check it in. Reference ticket #2968.</li>
</ol>
</body>
/trunk/api/js/dojo1.0/dijit/bench/benchTool.html
New file
0,0 → 1,189
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Dojo interactive benchmark tool</title>
<script type="text/javascript" src="../../dojo/dojo.js"></script>
<script type="text/javascript">
// FIXME:
// the url below points to dojo.inpdx.net/benchResults.php
// need to setup DB on dtk.org and change URL here to store
// results elsewhere ... work db structure in accompanying
// .php file
// basic stats are located at http://dojo.inpdx.net/benchmarks.html
dojo.require("dojo.fx");
// FIXME: this seems an excessive fix for IE6 issue ...
dojo.require("dijit.dijit");
// dojo.require("dijit.form.Button");
dojo.require("dijit.dijit-all");
dojo.require("dojo.parser");
 
// setup global variables
var masterResults = { clientNavigator: navigator.userAgent, dataSet: [], errors: [] }
var isRunning = false;
var theCount, theClass, runner = null;
var testCount = 0;
dojo.addOnLoad(function(){
theCount = dojo.byId('countNode');
theClass = dojo.byId('classNode');
runner = dojo.byId('runner');
masterResults.dojoVersion = dojo.version.toString();
});
 
function _toggleRunMsg(){
var newMsg = (isRunning) ? " Run Test " : " Running ..."
dojo.fx.chain([
dojo.fadeOut({
node:runner,
duration:200,
onEnd: function(){
runner.innerHTML = newMsg;
isRunning=!isRunning;
}
}),
dojo.fadeIn({ node:runner, duration: 200 })
]).play();
}
 
function runTest(){
if(isRunning){ return; }
_toggleRunMsg();
setTimeout("_runRealTest()",1000);
}
 
function _runRealTest(){
 
var _error = false;
var count = theCount.value;
var aclass = theClass.value.toString();
var theMethod = (dojo.byId('parse').checked) ? "parse" : "create";
 
var tmpNode = document.createElement('div');
 
switch(theMethod){
case "parse" :
var tmpString = [];
for(var i=0; i<count; i++){
tmpString.push('<div dojoType="', aclass, '"></div>');
}
tmpNode.innerHTML = tmpString.join("");
var tmpTimer = new Date().getTime();
dojo.parser.parse(tmpNode);
var endTime = new Date().getTime() - tmpTimer;
break;
case "create" :
var construction = dojo.getObject(aclass);
var tmpTimer = new Date().getTime();
for(var i=0; i<count; i++){
var tmp = new construction({});
tmpNode.appendChild(tmp.domNode);
}
var endTime = new Date().getTime() - tmpTimer;
break;
}
 
var average = (endTime / count);
var msg = "It took: "+endTime+"ms to "+theMethod+" "+count+" "+aclass+" widgets"+
"<br>(average: "+average+" ms/widget)<br><br>";
 
masterResults.dataSet.push({
testNum: ++testCount,
dijit: aclass,
testCount: count,
testAverage: average,
testMethod: theMethod,
testTime: endTime
});
 
dojo.byId("results").innerHTML += msg;
setTimeout("_toggleRunMsg()",250);
// Nodes have to be in the document for IE7 to GC them.
// Do this after generating the widgets to dispel
// notion that widget parents have to be in document
// a-priori.
dojo.byId("limbo").appendChild(tmpNode);
}
 
function doDebug(){
var key = escape(dojo.toJson(masterResults));
dojo.byId('hiddenHolder').value = key;
return true;
}
 
</script>
<style>
@import "../../dijit/themes/tundra/tundra.css";
@import "../../dijit/themes/dijit.css";
@import "../../dojo/resources/dojo.css";
@import "../../dijit/tests/css/dijitTests.css";
 
#limbo {
display: none;
}
#theContainer {
float:left;
display: block; padding:12px; padding-top:0;
width:420px; margin-left:20px;
background-color:#fff; -moz-border-radius:8pt 8pt;
border:2px solid #ededed;
}
#leftControl { float:left; width:300px; }
#testControl, #submitControl { border:2px solid #ededed; padding:12px; -moz-border-radius:8pt 8pt; background-color:#fff; }
#results { overflow:auto; height:300px; border:1px solid #ccc; color:darkred; padding:8px; }
#results li { list-style-type: none; }
#results ul { margin:0; padding:0; }
.runHolder, .submitButton {
border:1px solid #ccc; padding:3px; -moz-border-radius:8pt 8pt; text-align:center;
cursor:pointer; background-color:#ededed; display:block; width:125px;
}
 
</style>
</head>
<body class="tundra">
<div id="limbo"></div>
<h1 class="testTitle">Dojo Benchmark Tool</h1>
 
<div id="leftControl">
<div id="testControl">
 
Class: <input type="text" name="dijit" id="classNode" value="dijit.form.Button"><br><br>
Count: <input type="text" name="count" id="countNode" value="100" size="4" ><br><br>
Method: <label for="parse">
<input type="radio" name="theMethod" value="parse" id="parse" checked="on"> Parse
</label>
<label for="create">
<input type="radio" name="theMethod" value="create" id="create"> Create
</label>
 
<br><br>
<span onclick="runTest()" class="runHolder"><span id="runner"> Run Test </span></span>
 
</div>
<br>
 
<div id="submitControl">
<p>
* The results of these tests are important to us. Please feel free to submit your dataSet
to Dojotoolkit.org. Your privacy will be respected.
</p>
<div id="hiddenResults">
<form id="resultForm" action="http://dojo.inpdx.net/benchResults.php"
method="POST" onsubmit="doDebug()">
<input type="hidden" id="hiddenHolder" value="" name="key">
<input type="submit" value=" Submit Data " class="submitButton">
</form>
</div>
</div>
</div>
 
<div id="theContainer"><h3>Results:</h3><div id="results"></div></div>
</body>
</html>
/trunk/api/js/dojo1.0/dijit/bench/test_Button-programmatic.html
New file
0,0 → 1,75
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>PROGRAMMATIC - Dojo Button 100 Test</title>
<script type="text/javascript" src="../../dojo/dojo.js" XdjConfig='isDebug: true, debugAtAllCosts: true'></script>
<script type="text/javascript">
dojo.require("dijit.form.Button");
dojo.require("dojo.parser");
logMessage = window.alert;
</script>
 
<style>
 
@import "../themes/tundra/tundra.css";
 
/* group multiple buttons in a row */
.box {
display: block;
text-align: center;
}
.box .dojoButton {
width:80px;
margin-right: 10px;
}
.dojoButtonContents {
font-size: 1.6em;
}
 
#buttonContainer {
border:1px solid black;
width:100%;
}
 
#results {
color:darkred;
}
 
</style>
</head>
<body class=tundra>
<h2>Creating dojot.form.buttons programmatically</h2>
<h3 id="results"></h3>
 
<div id="buttonContainer" class='box'></div>
 
<br>
Pass "?count=<i><b>n</b></i>" in the query string to change the number of buttons.
 
<script type="text/javascript">
// See if we can make a widget in script and attach it to the DOM ourselves.
 
function makeEm() {
var queryCount = location.search.match(/count=(\d*)/);
var count = (queryCount ? parseInt(queryCount[1]) : 100);
var container = dojo.byId("buttonContainer");
var t0 = new Date().getTime();
for (var i = 1; i <= count; i++) {
var it =
new dijit.form.Button(
{label:"Button "+i, onclick:'logMessage("clicked simple")'}
);
container.appendChild(it.domNode);
it.domNode.style.display = '';
}
var t1 = new Date().getTime();
dojo.byId("results").innerHTML = "It took " + (t1 - t0) + " msec to create " + count + " Buttons programmatically.";
}
dojo.addOnLoad(makeEm);
 
 
</script>
 
</body>
</html>
/trunk/api/js/dojo1.0/dijit/bench/widget_construction_test.php
New file
0,0 → 1,186
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
 
<html>
<head>
<title>test of various synchronous page searching methods</title>
<style type="text/css">
@import "../../dojo/resources/dojo.css";
@import "../themes/tundra/tundra.css";
</style>
<script type="text/javascript" src="../../dojo/dojo.js"
djConfig="parseOnLoad: true, isDebug: true"></script>
<script type="text/javascript">
dojo.require("dojo.parser"); // scan page for widgets and instantiate them
dojo.require("dijit._Widget");
dojo.require("dijit._Templated");
 
/* dummy widget for benchmarking purposes */
dojo.declare(
"SimpleButton",
[ dijit._Widget, dijit._Templated ],
function(){ },
{
label: "",
templateString: "<button dojoAttachEvent='onclick:onClick'>${label}</button>",
onClick: function(){
this.domNode.style.backgroundColor="green";
},
postCreate: function(){
}
}
);
</script>
</head>
<body>
<h1 style="font-size: 40px; line-height: 50px;">This page contains a huge number of nodes, most of which are "chaff".</h1>
<h3>Here's the relative timings for this page</h3>
<div id="profileOutputTable"></div>
<!--
<h3>And some comparison data</h3>
<table border=1>
<thead>
<tr>
<th>IE
<th>Safari
<th>Gecko (on PC)
<th>Gecko (on intel mac)
</tr>
</thead>
<tbody>
<tr>
<td>4890
<td>3242
<td>3094
<td>3782
</tr>
</tbody>
</table>
-->
 
 
<?
$containerDepth = 30;
$leadingChaff = 100;
$trailingChaff = 100;
$items = 100;
?>
<?
function generateChaff($iters){
for($i=0;$i<$iters;$i++){ ?>
<pre class="highlighted"><code><span class="hl-reserved">var </span><span class="hl-identifier">dlg</span><span class="hl-default"> = </span><span class="hl-reserved">new </span><span class="hl-identifier">blah</span><span class="hl-default">.</span><span class="hl-identifier">ext</span><span class="hl-default">.</span><span class="hl-identifier">LayoutDialog</span><span class="hl-brackets">(</span><span class="hl-identifier">config</span><span class="hl-code">.</span><span class="hl-identifier">id</span><span class="hl-code"> || </span><span class="hl-identifier">blah</span><span class="hl-code">.</span><span class="hl-identifier">util</span><span class="hl-code">.</span><span class="hl-identifier">Dom</span><span class="hl-code">.</span><span class="hl-identifier">generateId</span><span class="hl-brackets">()</span><span class="hl-code">, </span><span class="hl-brackets">{
</span><span title="autoCreate" class="hl-identifier">autoCreate</span><span class="hl-code"> : </span><span class="hl-reserved">true</span><span class="hl-code">,
</span><span title="minWidth" class="hl-identifier">minWidth</span><span class="hl-code">:</span><span class="hl-number">400</span><span class="hl-code">,
</span><span title="minHeight" class="hl-identifier">minHeight</span><span class="hl-code">:</span><span class="hl-number">300</span><span class="hl-code">,
</span>
<span title="syncHeightBeforeShow" class="hl-identifier">syncHeightBeforeShow</span><span class="hl-code">: </span><span class="hl-reserved">true</span><span class="hl-code">,
</span><span title="shadow" class="hl-identifier">shadow</span><span class="hl-code">:</span><span class="hl-reserved">true</span><span class="hl-code">,
</span><span title="fixedcenter" class="hl-identifier">fixedcenter</span><span class="hl-code">: </span><span class="hl-reserved">true</span><span class="hl-code">,
</span><span title="center" class="hl-identifier">center</span><span class="hl-code">:</span><span class="hl-brackets">{</span><span class="hl-identifier">autoScroll</span><span class="hl-code">:</span><span class="hl-reserved">false</span><span class="hl-brackets">}</span><span class="hl-code">,
</span><span title="east" class="hl-identifier">east</span><span class="hl-code">:</span><span class="hl-brackets">{</span><span class="hl-identifier">split</span><span class="hl-code">:</span><span class="hl-reserved">true</span><span class="hl-code">,</span><span class="hl-identifier">initialSize</span><span class="hl-code">:</span><span class="hl-number">150</span><span class="hl-code">,</span><span class="hl-identifier">minSize</span><span class="hl-code">:</span><span class="hl-number">150</span><span class="hl-code">,</span><span class="hl-identifier">maxSize</span><span class="hl-code">:</span><span class="hl-number">250</span><span class="hl-brackets">}
})</span><span class="hl-default">;
</span><span class="hl-identifier">dlg</span><span class="hl-default">.</span><span class="hl-identifier">setTitle</span><span class="hl-brackets">(</span><span class="hl-quotes">'</span><span class="hl-string">Choose an Image</span><span class="hl-quotes">'</span><span class="hl-brackets">)</span><span class="hl-default">;
</span><span class="hl-identifier">dlg</span><span class="hl-default">.</span><span class="hl-identifier">getEl</span><span class="hl-brackets">()</span><span class="hl-default">.</span><span class="hl-identifier">addClass</span><span class="hl-brackets">(</span><span class="hl-quotes">'</span><span class="hl-string">ychooser-dlg</span><span class="hl-quotes">'</span><span class="hl-brackets">)</span><span class="hl-default">;</span></code></pre><br />
<pre class="highlighted"><code><span class="hl-reserved">var </span><span class="hl-identifier">animated</span><span class="hl-default"> = </span><span class="hl-reserved">new </span><span class="hl-identifier">blah</span><span class="hl-default">.</span><span class="hl-identifier">ext</span><span class="hl-default">.</span><span class="hl-identifier">Resizable</span><span class="hl-brackets">(</span><span class="hl-quotes">'</span><span class="hl-string">animated</span><span class="hl-quotes">'</span><span class="hl-code">, </span><span class="hl-brackets">{
</span><span title="east" class="hl-identifier">width</span><span class="hl-code">: </span><span class="hl-number">200</span><span class="hl-code">,
</span><span title="east" class="hl-identifier">height</span><span class="hl-code">: </span><span class="hl-number">100</span><span class="hl-code">,
</span><span title="east" class="hl-identifier">minWidth</span><span class="hl-code">:</span><span class="hl-number">100</span><span class="hl-code">,
</span><span class="hl-identifier">minHeight</span><span class="hl-code">:</span><span class="hl-number">50</span><span class="hl-code">,
</span><span class="hl-identifier">animate</span><span class="hl-code">:</span><span class="hl-reserved">true</span><span class="hl-code">,
</span><span class="hl-identifier">easing</span><span class="hl-code">: </span><span class="hl-identifier">YAHOO</span><span class="hl-code">.</span><span class="hl-identifier">util</span><span class="hl-code">.</span><span class="hl-identifier">Easing</span><span class="hl-code">.</span><span class="hl-identifier">backIn</span><span class="hl-code">,
</span><span class="hl-identifier">duration</span><span class="hl-code">:</span><span class="hl-number">.6
</span><span class="hl-brackets">})</span><span class="hl-default">;</span></code></pre>
<h4>The standard Lorem Ipsum passage, used since the 1500s</h4>
<p>
"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim
ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
aliquip ex ea commodo consequat. Duis aute irure dolor in
reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
pariatur. Excepteur sint occaecat cupidatat non proident, sunt in
culpa qui officia deserunt mollit anim id est laborum."
</p>
 
<h4>Section 1.10.32 of "de Finibus Bonorum et Malorum", written by Cicero in 45 BC</h4>
 
<p>
"Sed ut perspiciatis unde omnis iste natus error sit voluptatem
accusantium doloremque laudantium, totam rem aperiam, eaque ipsa
quae ab illo inventore veritatis et quasi architecto beatae vitae
dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit
aspernatur aut odit aut fugit, sed quia consequuntur magni dolores
eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam
est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci
velit, sed quia non numquam eius modi tempora incidunt ut labore et
dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam,
quis nostrum exercitationem ullam corporis suscipit laboriosam,
nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure
reprehenderit qui in ea voluptate velit esse quam nihil molestiae
consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla
pariatur?"
</p>
 
<h4>1914 translation by H. Rackham</h4>
 
<p>
"But I must explain to you how all this mistaken idea of denouncing
pleasure and praising pain was born and I will give you a complete
account of the system, and expound the actual teachings of the
great explorer of the truth, the master-builder of human happiness.
No one rejects, dislikes, or avoids pleasure itself, because it is
pleasure, but because those who do not know how to pursue pleasure
rationally encounter consequences that are extremely painful. Nor
again is there anyone who loves or pursues or desires to obtain
pain of itself, because it is pain, but because occasionally
circumstances occur in which toil and pain can procure him some
great pleasure. To take a trivial example, which of us ever
undertakes laborious physical exercise, except to obtain some
advantage from it? But who has any right to find fault with a man
who chooses to enjoy a pleasure that has no annoying consequences,
or one who avoids a pain that produces no resultant pleasure?"
</p>
<? }
} // end generateChaff
$widgetName = "SimpleButton";
?>
<? generateChaff($leadingChaff); ?>
<hr>
<? for($i=0;$i<$containerDepth;$i++){ ?>
<table border="1" cellpadding="0" cellspacing="0" width="100%">
<!--
<table>
-->
<tr>
<td>
<br>
chaff!
<br>
<? } ?>
<? for($i=0;$i<$items;$i++){ ?>
<div dojoType="<?= $widgetName ?>" label="item2 <?= $i ?>">item2 <?= $i ?></div>
<? } ?>
<? for($i=0;$i<$containerDepth;$i++){ ?>
</td>
</tr>
</table>
<? } ?>
<? generateChaff($trailingChaff); ?>
<? for($i=0;$i<$items;$i++){ ?>
<div dojoType="<?= $widgetName ?>" label="item2 <?= $i ?>"><span>item <?= $i ?></span></div>
<? } ?>
 
<script type="text/javascript">
 
oldTime = new Date();
dojo.addOnLoad(function(){
var time = new Date().getTime() - oldTime;
var p = document.createElement("p");
alert("Widgets loaded in " + time + "ms");
});
 
</script>
 
</body>
</html>
/trunk/api/js/dojo1.0/dijit/_Calendar.js
New file
0,0 → 1,214
if(!dojo._hasResource["dijit._Calendar"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit._Calendar"] = true;
dojo.provide("dijit._Calendar");
 
dojo.require("dojo.cldr.supplemental");
dojo.require("dojo.date");
dojo.require("dojo.date.locale");
 
dojo.require("dijit._Widget");
dojo.require("dijit._Templated");
 
dojo.declare(
"dijit._Calendar",
[dijit._Widget, dijit._Templated],
{
/*
summary:
A simple GUI for choosing a date in the context of a monthly calendar.
 
description:
This widget is used internally by other widgets and is not accessible
as a standalone widget.
This widget can't be used in a form because it doesn't serialize the date to an
<input> field. For a form element, use DateTextBox instead.
 
Note that the parser takes all dates attributes passed in the `RFC 3339` format:
http://www.faqs.org/rfcs/rfc3339.html (2005-06-30T08:05:00-07:00)
so that they are serializable and locale-independent.
 
usage:
var calendar = new dijit._Calendar({}, dojo.byId("calendarNode"));
-or-
<div dojoType="dijit._Calendar"></div>
*/
templateString:"<table cellspacing=\"0\" cellpadding=\"0\" class=\"dijitCalendarContainer\">\n\t<thead>\n\t\t<tr class=\"dijitReset dijitCalendarMonthContainer\" valign=\"top\">\n\t\t\t<th class='dijitReset' dojoAttachPoint=\"decrementMonth\">\n\t\t\t\t<span class=\"dijitInline dijitCalendarIncrementControl dijitCalendarDecrease\"><span dojoAttachPoint=\"decreaseArrowNode\" class=\"dijitA11ySideArrow dijitCalendarIncrementControl dijitCalendarDecreaseInner\">-</span></span>\n\t\t\t</th>\n\t\t\t<th class='dijitReset' colspan=\"5\">\n\t\t\t\t<div dojoAttachPoint=\"monthLabelSpacer\" class=\"dijitCalendarMonthLabelSpacer\"></div>\n\t\t\t\t<div dojoAttachPoint=\"monthLabelNode\" class=\"dijitCalendarMonth\"></div>\n\t\t\t</th>\n\t\t\t<th class='dijitReset' dojoAttachPoint=\"incrementMonth\">\n\t\t\t\t<div class=\"dijitInline dijitCalendarIncrementControl dijitCalendarIncrease\"><span dojoAttachPoint=\"increaseArrowNode\" class=\"dijitA11ySideArrow dijitCalendarIncrementControl dijitCalendarIncreaseInner\">+</span></div>\n\t\t\t</th>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<th class=\"dijitReset dijitCalendarDayLabelTemplate\"><span class=\"dijitCalendarDayLabel\"></span></th>\n\t\t</tr>\n\t</thead>\n\t<tbody dojoAttachEvent=\"onclick: _onDayClick\" class=\"dijitReset dijitCalendarBodyContainer\">\n\t\t<tr class=\"dijitReset dijitCalendarWeekTemplate\">\n\t\t\t<td class=\"dijitReset dijitCalendarDateTemplate\"><span class=\"dijitCalendarDateLabel\"></span></td>\n\t\t</tr>\n\t</tbody>\n\t<tfoot class=\"dijitReset dijitCalendarYearContainer\">\n\t\t<tr>\n\t\t\t<td class='dijitReset' valign=\"top\" colspan=\"7\">\n\t\t\t\t<h3 class=\"dijitCalendarYearLabel\">\n\t\t\t\t\t<span dojoAttachPoint=\"previousYearLabelNode\" class=\"dijitInline dijitCalendarPreviousYear\"></span>\n\t\t\t\t\t<span dojoAttachPoint=\"currentYearLabelNode\" class=\"dijitInline dijitCalendarSelectedYear\"></span>\n\t\t\t\t\t<span dojoAttachPoint=\"nextYearLabelNode\" class=\"dijitInline dijitCalendarNextYear\"></span>\n\t\t\t\t</h3>\n\t\t\t</td>\n\t\t</tr>\n\t</tfoot>\n</table>\t\n",
 
// value: Date
// the currently selected Date
value: new Date(),
 
// dayWidth: String
// How to represent the days of the week in the calendar header. See dojo.date.locale
dayWidth: "narrow",
 
setValue: function(/*Date*/ value){
// summary: set the current date and update the UI. If the date is disabled, the selection will
// not change, but the display will change to the corresponding month.
if(!this.value || dojo.date.compare(value, this.value)){
value = new Date(value);
this.displayMonth = new Date(value);
if(!this.isDisabledDate(value, this.lang)){
this.value = value;
this.value.setHours(0,0,0,0);
this.onChange(this.value);
}
this._populateGrid();
}
},
 
_setText: function(node, text){
while(node.firstChild){
node.removeChild(node.firstChild);
}
node.appendChild(document.createTextNode(text));
},
 
_populateGrid: function(){
var month = this.displayMonth;
month.setDate(1);
var firstDay = month.getDay();
var daysInMonth = dojo.date.getDaysInMonth(month);
var daysInPreviousMonth = dojo.date.getDaysInMonth(dojo.date.add(month, "month", -1));
var today = new Date();
var selected = this.value;
 
var dayOffset = dojo.cldr.supplemental.getFirstDayOfWeek(this.lang);
if(dayOffset > firstDay){ dayOffset -= 7; }
 
// Iterate through dates in the calendar and fill in date numbers and style info
dojo.query(".dijitCalendarDateTemplate", this.domNode).forEach(function(template, i){
i += dayOffset;
var date = new Date(month);
var number, clazz = "dijitCalendar", adj = 0;
 
if(i < firstDay){
number = daysInPreviousMonth - firstDay + i + 1;
adj = -1;
clazz += "Previous";
}else if(i >= (firstDay + daysInMonth)){
number = i - firstDay - daysInMonth + 1;
adj = 1;
clazz += "Next";
}else{
number = i - firstDay + 1;
clazz += "Current";
}
 
if(adj){
date = dojo.date.add(date, "month", adj);
}
date.setDate(number);
 
if(!dojo.date.compare(date, today, "date")){
clazz = "dijitCalendarCurrentDate " + clazz;
}
 
if(!dojo.date.compare(date, selected, "date")){
clazz = "dijitCalendarSelectedDate " + clazz;
}
 
if(this.isDisabledDate(date, this.lang)){
clazz = "dijitCalendarDisabledDate " + clazz;
}
 
template.className = clazz + "Month dijitCalendarDateTemplate";
template.dijitDateValue = date.valueOf();
var label = dojo.query(".dijitCalendarDateLabel", template)[0];
this._setText(label, date.getDate());
}, this);
 
// Fill in localized month name
var monthNames = dojo.date.locale.getNames('months', 'wide', 'standAlone', this.lang);
this._setText(this.monthLabelNode, monthNames[month.getMonth()]);
 
// Fill in localized prev/current/next years
var y = month.getFullYear() - 1;
dojo.forEach(["previous", "current", "next"], function(name){
this._setText(this[name+"YearLabelNode"],
dojo.date.locale.format(new Date(y++, 0), {selector:'year', locale:this.lang}));
}, this);
 
// Set up repeating mouse behavior
var _this = this;
var typematic = function(nodeProp, dateProp, adj){
dijit.typematic.addMouseListener(_this[nodeProp], _this, function(count){
if(count >= 0){ _this._adjustDisplay(dateProp, adj); }
}, 0.8, 500);
};
typematic("incrementMonth", "month", 1);
typematic("decrementMonth", "month", -1);
typematic("nextYearLabelNode", "year", 1);
typematic("previousYearLabelNode", "year", -1);
},
 
postCreate: function(){
dijit._Calendar.superclass.postCreate.apply(this);
 
var cloneClass = dojo.hitch(this, function(clazz, n){
var template = dojo.query(clazz, this.domNode)[0];
for(var i=0; i<n; i++){
template.parentNode.appendChild(template.cloneNode(true));
}
});
 
// clone the day label and calendar day templates 6 times to make 7 columns
cloneClass(".dijitCalendarDayLabelTemplate", 6);
cloneClass(".dijitCalendarDateTemplate", 6);
 
// now make 6 week rows
cloneClass(".dijitCalendarWeekTemplate", 5);
 
// insert localized day names in the header
var dayNames = dojo.date.locale.getNames('days', this.dayWidth, 'standAlone', this.lang);
var dayOffset = dojo.cldr.supplemental.getFirstDayOfWeek(this.lang);
dojo.query(".dijitCalendarDayLabel", this.domNode).forEach(function(label, i){
this._setText(label, dayNames[(i + dayOffset) % 7]);
}, this);
 
// Fill in spacer element with all the month names (invisible) so that the maximum width will affect layout
var monthNames = dojo.date.locale.getNames('months', 'wide', 'standAlone', this.lang);
dojo.forEach(monthNames, function(name){
var monthSpacer = dojo.doc.createElement("div");
this._setText(monthSpacer, name);
this.monthLabelSpacer.appendChild(monthSpacer);
}, this);
 
this.value = null;
this.setValue(new Date());
},
 
_adjustDisplay: function(/*String*/part, /*int*/amount){
this.displayMonth = dojo.date.add(this.displayMonth, part, amount);
this._populateGrid();
},
 
_onDayClick: function(/*Event*/evt){
var node = evt.target;
dojo.stopEvent(evt);
while(!node.dijitDateValue){
node = node.parentNode;
}
if(!dojo.hasClass(node, "dijitCalendarDisabledDate")){
this.setValue(node.dijitDateValue);
this.onValueSelected(this.value);
}
},
 
onValueSelected: function(/*Date*/date){
//summary: a date cell was selected. It may be the same as the previous value.
},
 
onChange: function(/*Date*/date){
//summary: called only when the selected date has changed
},
 
isDisabledDate: function(/*Date*/dateObject, /*String?*/locale){
// summary:
// May be overridden to disable certain dates in the calendar e.g. isDisabledDate=dojo.date.locale.isWeekend
return false; // Boolean
}
}
);
 
}
/trunk/api/js/dojo1.0/dijit/dijit-all.js
New file
0,0 → 1,20
/*
Copyright (c) 2004-2007, The Dojo Foundation
All Rights Reserved.
 
Licensed under the Academic Free License version 2.1 or above OR the
modified BSD license. For more information on Dojo licensing, see:
 
http://dojotoolkit.org/book/dojo-book-0-9/introduction/licensing
*/
 
/*
This is a compiled version of Dojo, built for deployment and not for
development. To get an editable version, please visit:
 
http://dojotoolkit.org
 
for documentation and information on getting the source.
*/
 
if(!dojo._hasResource["dojo.colors"]){dojo._hasResource["dojo.colors"]=true;dojo.provide("dojo.colors");(function(){var _1=function(m1,m2,h){if(h<0){++h;}if(h>1){--h;}var h6=6*h;if(h6<1){return m1+(m2-m1)*h6;}if(2*h<1){return m2;}if(3*h<2){return m1+(m2-m1)*(2/3-h)*6;}return m1;};dojo.colorFromRgb=function(_6,_7){var m=_6.toLowerCase().match(/^(rgba?|hsla?)\(([\s\.\-,%0-9]+)\)/);if(m){var c=m[2].split(/\s*,\s*/),l=c.length,t=m[1];if((t=="rgb"&&l==3)||(t=="rgba"&&l==4)){var r=c[0];if(r.charAt(r.length-1)=="%"){var a=dojo.map(c,function(x){return parseFloat(x)*2.56;});if(l==4){a[3]=c[3];}return dojo.colorFromArray(a,_7);}return dojo.colorFromArray(c,_7);}if((t=="hsl"&&l==3)||(t=="hsla"&&l==4)){var H=((parseFloat(c[0])%360)+360)%360/360,S=parseFloat(c[1])/100,L=parseFloat(c[2])/100,m2=L<=0.5?L*(S+1):L+S-L*S,m1=2*L-m2,a=[_1(m1,m2,H+1/3)*256,_1(m1,m2,H)*256,_1(m1,m2,H-1/3)*256,1];if(l==4){a[3]=c[3];}return dojo.colorFromArray(a,_7);}}return null;};var _14=function(c,low,_17){c=Number(c);return isNaN(c)?_17:c<low?low:c>_17?_17:c;};dojo.Color.prototype.sanitize=function(){var t=this;t.r=Math.round(_14(t.r,0,255));t.g=Math.round(_14(t.g,0,255));t.b=Math.round(_14(t.b,0,255));t.a=_14(t.a,0,1);return this;};})();dojo.colors.makeGrey=function(g,a){return dojo.colorFromArray([g,g,g,a]);};dojo.Color.named=dojo.mixin({aliceblue:[240,248,255],antiquewhite:[250,235,215],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],blanchedalmond:[255,235,205],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],oldlace:[253,245,230],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],thistle:[216,191,216],tomato:[255,99,71],transparent:[0,0,0,0],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],whitesmoke:[245,245,245],yellowgreen:[154,205,50]},dojo.Color.named);}if(!dojo._hasResource["dojo.i18n"]){dojo._hasResource["dojo.i18n"]=true;dojo.provide("dojo.i18n");dojo.i18n.getLocalization=function(_1b,_1c,_1d){_1d=dojo.i18n.normalizeLocale(_1d);var _1e=_1d.split("-");var _1f=[_1b,"nls",_1c].join(".");var _20=dojo._loadedModules[_1f];if(_20){var _21;for(var i=_1e.length;i>0;i--){var loc=_1e.slice(0,i).join("_");if(_20[loc]){_21=_20[loc];break;}}if(!_21){_21=_20.ROOT;}if(_21){var _24=function(){};_24.prototype=_21;return new _24();}}throw new Error("Bundle not found: "+_1c+" in "+_1b+" , locale="+_1d);};dojo.i18n.normalizeLocale=function(_25){var _26=_25?_25.toLowerCase():dojo.locale;if(_26=="root"){_26="ROOT";}return _26;};dojo.i18n._requireLocalization=function(_27,_28,_29,_2a){var _2b=dojo.i18n.normalizeLocale(_29);var _2c=[_27,"nls",_28].join(".");var _2d="";if(_2a){var _2e=_2a.split(",");for(var i=0;i<_2e.length;i++){if(_2b.indexOf(_2e[i])==0){if(_2e[i].length>_2d.length){_2d=_2e[i];}}}if(!_2d){_2d="ROOT";}}var _30=_2a?_2d:_2b;var _31=dojo._loadedModules[_2c];var _32=null;if(_31){if(djConfig.localizationComplete&&_31._built){return;}var _33=_30.replace(/-/g,"_");var _34=_2c+"."+_33;_32=dojo._loadedModules[_34];}if(!_32){_31=dojo["provide"](_2c);var _35=dojo._getModuleSymbols(_27);var _36=_35.concat("nls").join("/");var _37;dojo.i18n._searchLocalePath(_30,_2a,function(loc){var _39=loc.replace(/-/g,"_");var _3a=_2c+"."+_39;var _3b=false;if(!dojo._loadedModules[_3a]){dojo["provide"](_3a);var _3c=[_36];if(loc!="ROOT"){_3c.push(loc);}_3c.push(_28);var _3d=_3c.join("/")+".js";_3b=dojo._loadPath(_3d,null,function(_3e){var _3f=function(){};_3f.prototype=_37;_31[_39]=new _3f();for(var j in _3e){_31[_39][j]=_3e[j];}});}else{_3b=true;}if(_3b&&_31[_39]){_37=_31[_39];}else{_31[_39]=_37;}if(_2a){return true;}});}if(_2a&&_2b!=_2d){_31[_2b.replace(/-/g,"_")]=_31[_2d.replace(/-/g,"_")];}};(function(){var _41=djConfig.extraLocale;if(_41){if(!_41 instanceof Array){_41=[_41];}var req=dojo.i18n._requireLocalization;dojo.i18n._requireLocalization=function(m,b,_45,_46){req(m,b,_45,_46);if(_45){return;}for(var i=0;i<_41.length;i++){req(m,b,_41[i],_46);}};}})();dojo.i18n._searchLocalePath=function(_48,_49,_4a){_48=dojo.i18n.normalizeLocale(_48);var _4b=_48.split("-");var _4c=[];for(var i=_4b.length;i>0;i--){_4c.push(_4b.slice(0,i).join("-"));}_4c.push(false);if(_49){_4c.reverse();}for(var j=_4c.length-1;j>=0;j--){var loc=_4c[j]||"ROOT";var _50=_4a(loc);if(_50){break;}}};dojo.i18n._preloadLocalizations=function(_51,_52){function preload(_53){_53=dojo.i18n.normalizeLocale(_53);dojo.i18n._searchLocalePath(_53,true,function(loc){for(var i=0;i<_52.length;i++){if(_52[i]==loc){dojo["require"](_51+"_"+loc);return true;}}return false;});};preload();var _56=djConfig.extraLocale||[];for(var i=0;i<_56.length;i++){preload(_56[i]);}};}if(!dojo._hasResource["dijit.ColorPalette"]){dojo._hasResource["dijit.ColorPalette"]=true;dojo.provide("dijit.ColorPalette");dojo.declare("dijit.ColorPalette",[dijit._Widget,dijit._Templated],{defaultTimeout:500,timeoutChangeRate:0.9,palette:"7x10",value:null,_currentFocus:0,_xDim:null,_yDim:null,_palettes:{"7x10":[["white","seashell","cornsilk","lemonchiffon","lightyellow","palegreen","paleturquoise","lightcyan","lavender","plum"],["lightgray","pink","bisque","moccasin","khaki","lightgreen","lightseagreen","lightskyblue","cornflowerblue","violet"],["silver","lightcoral","sandybrown","orange","palegoldenrod","chartreuse","mediumturquoise","skyblue","mediumslateblue","orchid"],["gray","red","orangered","darkorange","yellow","limegreen","darkseagreen","royalblue","slateblue","mediumorchid"],["dimgray","crimson","chocolate","coral","gold","forestgreen","seagreen","blue","blueviolet","darkorchid"],["darkslategray","firebrick","saddlebrown","sienna","olive","green","darkcyan","mediumblue","darkslateblue","darkmagenta"],["black","darkred","maroon","brown","darkolivegreen","darkgreen","midnightblue","navy","indigo","purple"]],"3x4":[["white","lime","green","blue"],["silver","yellow","fuchsia","navy"],["gray","red","purple","black"]]},_imagePaths:{"7x10":dojo.moduleUrl("dijit","templates/colors7x10.png"),"3x4":dojo.moduleUrl("dijit","templates/colors3x4.png")},_paletteCoords:{"leftOffset":4,"topOffset":4,"cWidth":20,"cHeight":20},templateString:"<div class=\"dijitInline dijitColorPalette\">\n\t<div class=\"dijitColorPaletteInner\" dojoAttachPoint=\"divNode\" waiRole=\"grid\" tabIndex=\"-1\">\n\t\t<img class=\"dijitColorPaletteUnder\" dojoAttachPoint=\"imageNode\" waiRole=\"presentation\">\n\t</div>\t\n</div>\n",_paletteDims:{"7x10":{"width":"206px","height":"145px"},"3x4":{"width":"86px","height":"64px"}},postCreate:function(){dojo.mixin(this.divNode.style,this._paletteDims[this.palette]);this.imageNode.setAttribute("src",this._imagePaths[this.palette]);var _58=this._palettes[this.palette];this.domNode.style.position="relative";this._highlightNodes=[];this.colorNames=dojo.i18n.getLocalization("dojo","colors",this.lang);var url=dojo.moduleUrl("dijit","templates/blank.gif");var _5a=new dojo.Color(),_5b=this._paletteCoords;for(var row=0;row<_58.length;row++){for(var col=0;col<_58[row].length;col++){var _5e=document.createElement("img");_5e.src=url;dojo.addClass(_5e,"dijitPaletteImg");var _5f=_58[row][col],_60=_5a.setColor(dojo.Color.named[_5f]);_5e.alt=this.colorNames[_5f];_5e.color=_60.toHex();var _61=_5e.style;_61.color=_61.backgroundColor=_5e.color;dojo.forEach(["Dijitclick","MouseOut","MouseOver","Blur","Focus"],function(_62){this.connect(_5e,"on"+_62.toLowerCase(),"_onColor"+_62);},this);this.divNode.appendChild(_5e);_61.top=_5b.topOffset+(row*_5b.cHeight)+"px";_61.left=_5b.leftOffset+(col*_5b.cWidth)+"px";_5e.setAttribute("tabIndex","-1");_5e.title=this.colorNames[_5f];dijit.setWaiRole(_5e,"gridcell");_5e.index=this._highlightNodes.length;this._highlightNodes.push(_5e);}}this._highlightNodes[this._currentFocus].tabIndex=0;this._xDim=_58[0].length;this._yDim=_58.length;var _63={UP_ARROW:-this._xDim,DOWN_ARROW:this._xDim,RIGHT_ARROW:1,LEFT_ARROW:-1};for(var key in _63){this._connects.push(dijit.typematic.addKeyListener(this.domNode,{keyCode:dojo.keys[key],ctrlKey:false,altKey:false,shiftKey:false},this,function(){var _65=_63[key];return function(_66){this._navigateByKey(_65,_66);};}(),this.timeoutChangeRate,this.defaultTimeout));}},focus:function(){dijit.focus(this._highlightNodes[this._currentFocus]);},onChange:function(_67){},_onColorDijitclick:function(evt){var _69=evt.currentTarget;if(this._currentFocus!=_69.index){this._currentFocus=_69.index;dijit.focus(_69);}this._selectColor(_69);dojo.stopEvent(evt);},_onColorMouseOut:function(evt){dojo.removeClass(evt.currentTarget,"dijitPaletteImgHighlight");},_onColorMouseOver:function(evt){var _6c=evt.currentTarget;_6c.tabIndex=0;_6c.focus();},_onColorBlur:function(evt){dojo.removeClass(evt.currentTarget,"dijitPaletteImgHighlight");evt.currentTarget.tabIndex=-1;this._currentFocus=0;this._highlightNodes[0].tabIndex=0;},_onColorFocus:function(evt){if(this._currentFocus!=evt.currentTarget.index){this._highlightNodes[this._currentFocus].tabIndex=-1;}this._currentFocus=evt.currentTarget.index;dojo.addClass(evt.currentTarget,"dijitPaletteImgHighlight");},_selectColor:function(_6f){this.onChange(this.value=_6f.color);},_navigateByKey:function(_70,_71){if(_71==-1){return;}var _72=this._currentFocus+_70;if(_72<this._highlightNodes.length&&_72>-1){var _73=this._highlightNodes[_72];_73.tabIndex=0;_73.focus();}}});}if(!dojo._hasResource["dijit.Declaration"]){dojo._hasResource["dijit.Declaration"]=true;dojo.provide("dijit.Declaration");dojo.declare("dijit.Declaration",dijit._Widget,{_noScript:true,widgetClass:"",replaceVars:true,defaults:null,mixins:[],buildRendering:function(){var src=this.srcNodeRef.parentNode.removeChild(this.srcNodeRef);var _75=dojo.query("> script[type='dojo/method'][event='preamble']",src).orphan();var _76=dojo.query("> script[type^='dojo/']",src).orphan();var _77=src.nodeName;var _78=this.defaults||{};this.mixins=this.mixins.length?dojo.map(this.mixins,function(_79){return dojo.getObject(_79);}):[dijit._Widget,dijit._Templated];if(_75.length){_78.preamble=dojo.parser._functionFromScript(_75[0]);}var _7a=dojo.map(_76,function(s){var evt=s.getAttribute("event")||"postscript";return {event:evt,func:dojo.parser._functionFromScript(s)};});this.mixins.push(function(){dojo.forEach(_7a,function(s){dojo.connect(this,s.event,this,s.func);},this);});_78.widgetsInTemplate=true;_78._skipNodeCache=true;_78.templateString="<"+_77+" class='"+src.className+"' dojoAttachPoint='"+(src.getAttribute("dojoAttachPoint")||"")+"' dojoAttachEvent='"+(src.getAttribute("dojoAttachEvent")||"")+"' >"+src.innerHTML.replace(/\%7B/g,"{").replace(/\%7D/g,"}")+"</"+_77+">";dojo.query("[dojoType]",src).forEach(function(_7e){_7e.removeAttribute("dojoType");});dojo.declare(this.widgetClass,this.mixins,_78);}});}if(!dojo._hasResource["dojo.dnd.common"]){dojo._hasResource["dojo.dnd.common"]=true;dojo.provide("dojo.dnd.common");dojo.dnd._copyKey=navigator.appVersion.indexOf("Macintosh")<0?"ctrlKey":"metaKey";dojo.dnd.getCopyKeyState=function(e){return e[dojo.dnd._copyKey];};dojo.dnd._uniqueId=0;dojo.dnd.getUniqueId=function(){var id;do{id="dojoUnique"+(++dojo.dnd._uniqueId);}while(dojo.byId(id));return id;};dojo.dnd._empty={};dojo.dnd.isFormElement=function(e){var t=e.target;if(t.nodeType==3){t=t.parentNode;}return " button textarea input select option ".indexOf(" "+t.tagName.toLowerCase()+" ")>=0;};}if(!dojo._hasResource["dojo.dnd.autoscroll"]){dojo._hasResource["dojo.dnd.autoscroll"]=true;dojo.provide("dojo.dnd.autoscroll");dojo.dnd.getViewport=function(){var d=dojo.doc,dd=d.documentElement,w=window,b=dojo.body();if(dojo.isMozilla){return {w:dd.clientWidth,h:w.innerHeight};}else{if(!dojo.isOpera&&w.innerWidth){return {w:w.innerWidth,h:w.innerHeight};}else{if(!dojo.isOpera&&dd&&dd.clientWidth){return {w:dd.clientWidth,h:dd.clientHeight};}else{if(b.clientWidth){return {w:b.clientWidth,h:b.clientHeight};}}}}return null;};dojo.dnd.V_TRIGGER_AUTOSCROLL=32;dojo.dnd.H_TRIGGER_AUTOSCROLL=32;dojo.dnd.V_AUTOSCROLL_VALUE=16;dojo.dnd.H_AUTOSCROLL_VALUE=16;dojo.dnd.autoScroll=function(e){var v=dojo.dnd.getViewport(),dx=0,dy=0;if(e.clientX<dojo.dnd.H_TRIGGER_AUTOSCROLL){dx=-dojo.dnd.H_AUTOSCROLL_VALUE;}else{if(e.clientX>v.w-dojo.dnd.H_TRIGGER_AUTOSCROLL){dx=dojo.dnd.H_AUTOSCROLL_VALUE;}}if(e.clientY<dojo.dnd.V_TRIGGER_AUTOSCROLL){dy=-dojo.dnd.V_AUTOSCROLL_VALUE;}else{if(e.clientY>v.h-dojo.dnd.V_TRIGGER_AUTOSCROLL){dy=dojo.dnd.V_AUTOSCROLL_VALUE;}}window.scrollBy(dx,dy);};dojo.dnd._validNodes={"div":1,"p":1,"td":1};dojo.dnd._validOverflow={"auto":1,"scroll":1};dojo.dnd.autoScrollNodes=function(e){for(var n=e.target;n;){if(n.nodeType==1&&(n.tagName.toLowerCase() in dojo.dnd._validNodes)){var s=dojo.getComputedStyle(n);if(s.overflow.toLowerCase() in dojo.dnd._validOverflow){var b=dojo._getContentBox(n,s),t=dojo._abs(n,true);b.l+=t.x+n.scrollLeft;b.t+=t.y+n.scrollTop;var w=Math.min(dojo.dnd.H_TRIGGER_AUTOSCROLL,b.w/2),h=Math.min(dojo.dnd.V_TRIGGER_AUTOSCROLL,b.h/2),rx=e.pageX-b.l,ry=e.pageY-b.t,dx=0,dy=0;if(rx>0&&rx<b.w){if(rx<w){dx=-dojo.dnd.H_AUTOSCROLL_VALUE;}else{if(rx>b.w-w){dx=dojo.dnd.H_AUTOSCROLL_VALUE;}}}if(ry>0&&ry<b.h){if(ry<h){dy=-dojo.dnd.V_AUTOSCROLL_VALUE;}else{if(ry>b.h-h){dy=dojo.dnd.V_AUTOSCROLL_VALUE;}}}var _96=n.scrollLeft,_97=n.scrollTop;n.scrollLeft=n.scrollLeft+dx;n.scrollTop=n.scrollTop+dy;if(_96!=n.scrollLeft||_97!=n.scrollTop){return;}}}try{n=n.parentNode;}catch(x){n=null;}}dojo.dnd.autoScroll(e);};}if(!dojo._hasResource["dojo.dnd.Mover"]){dojo._hasResource["dojo.dnd.Mover"]=true;dojo.provide("dojo.dnd.Mover");dojo.declare("dojo.dnd.Mover",null,{constructor:function(_98,e,_9a){this.node=dojo.byId(_98);this.marginBox={l:e.pageX,t:e.pageY};this.mouseButton=e.button;var h=this.host=_9a,d=_98.ownerDocument,_9d=dojo.connect(d,"onmousemove",this,"onFirstMove");this.events=[dojo.connect(d,"onmousemove",this,"onMouseMove"),dojo.connect(d,"onmouseup",this,"onMouseUp"),dojo.connect(d,"ondragstart",dojo,"stopEvent"),dojo.connect(d,"onselectstart",dojo,"stopEvent"),_9d];if(h&&h.onMoveStart){h.onMoveStart(this);}},onMouseMove:function(e){dojo.dnd.autoScroll(e);var m=this.marginBox;this.host.onMove(this,{l:m.l+e.pageX,t:m.t+e.pageY});},onMouseUp:function(e){if(this.mouseButton==e.button){this.destroy();}},onFirstMove:function(){this.node.style.position="absolute";var m=dojo.marginBox(this.node);m.l-=this.marginBox.l;m.t-=this.marginBox.t;this.marginBox=m;this.host.onFirstMove(this);dojo.disconnect(this.events.pop());},destroy:function(){dojo.forEach(this.events,dojo.disconnect);var h=this.host;if(h&&h.onMoveStop){h.onMoveStop(this);}this.events=this.node=null;}});}if(!dojo._hasResource["dojo.dnd.Moveable"]){dojo._hasResource["dojo.dnd.Moveable"]=true;dojo.provide("dojo.dnd.Moveable");dojo.declare("dojo.dnd.Moveable",null,{handle:"",delay:0,skip:false,constructor:function(_a3,_a4){this.node=dojo.byId(_a3);if(!_a4){_a4={};}this.handle=_a4.handle?dojo.byId(_a4.handle):null;if(!this.handle){this.handle=this.node;}this.delay=_a4.delay>0?_a4.delay:0;this.skip=_a4.skip;this.mover=_a4.mover?_a4.mover:dojo.dnd.Mover;this.events=[dojo.connect(this.handle,"onmousedown",this,"onMouseDown"),dojo.connect(this.handle,"ondragstart",this,"onSelectStart"),dojo.connect(this.handle,"onselectstart",this,"onSelectStart")];},markupFactory:function(_a5,_a6){return new dojo.dnd.Moveable(_a6,_a5);},destroy:function(){dojo.forEach(this.events,dojo.disconnect);this.events=this.node=this.handle=null;},onMouseDown:function(e){if(this.skip&&dojo.dnd.isFormElement(e)){return;}if(this.delay){this.events.push(dojo.connect(this.handle,"onmousemove",this,"onMouseMove"));this.events.push(dojo.connect(this.handle,"onmouseup",this,"onMouseUp"));this._lastX=e.pageX;this._lastY=e.pageY;}else{new this.mover(this.node,e,this);}dojo.stopEvent(e);},onMouseMove:function(e){if(Math.abs(e.pageX-this._lastX)>this.delay||Math.abs(e.pageY-this._lastY)>this.delay){this.onMouseUp(e);new this.mover(this.node,e,this);}dojo.stopEvent(e);},onMouseUp:function(e){dojo.disconnect(this.events.pop());dojo.disconnect(this.events.pop());},onSelectStart:function(e){if(!this.skip||!dojo.dnd.isFormElement(e)){dojo.stopEvent(e);}},onMoveStart:function(_ab){dojo.publish("/dnd/move/start",[_ab]);dojo.addClass(dojo.body(),"dojoMove");dojo.addClass(this.node,"dojoMoveItem");},onMoveStop:function(_ac){dojo.publish("/dnd/move/stop",[_ac]);dojo.removeClass(dojo.body(),"dojoMove");dojo.removeClass(this.node,"dojoMoveItem");},onFirstMove:function(_ad){},onMove:function(_ae,_af){this.onMoving(_ae,_af);dojo.marginBox(_ae.node,_af);this.onMoved(_ae,_af);},onMoving:function(_b0,_b1){},onMoved:function(_b2,_b3){}});}if(!dojo._hasResource["dojo.dnd.move"]){dojo._hasResource["dojo.dnd.move"]=true;dojo.provide("dojo.dnd.move");dojo.declare("dojo.dnd.move.constrainedMoveable",dojo.dnd.Moveable,{constraints:function(){},within:false,markupFactory:function(_b4,_b5){return new dojo.dnd.move.constrainedMoveable(_b5,_b4);},constructor:function(_b6,_b7){if(!_b7){_b7={};}this.constraints=_b7.constraints;this.within=_b7.within;},onFirstMove:function(_b8){var c=this.constraintBox=this.constraints.call(this,_b8),m=_b8.marginBox;c.r=c.l+c.w-(this.within?m.w:0);c.b=c.t+c.h-(this.within?m.h:0);},onMove:function(_bb,_bc){var c=this.constraintBox;_bc.l=_bc.l<c.l?c.l:c.r<_bc.l?c.r:_bc.l;_bc.t=_bc.t<c.t?c.t:c.b<_bc.t?c.b:_bc.t;dojo.marginBox(_bb.node,_bc);}});dojo.declare("dojo.dnd.move.boxConstrainedMoveable",dojo.dnd.move.constrainedMoveable,{box:{},markupFactory:function(_be,_bf){return new dojo.dnd.move.boxConstrainedMoveable(_bf,_be);},constructor:function(_c0,_c1){var box=_c1&&_c1.box;this.constraints=function(){return box;};}});dojo.declare("dojo.dnd.move.parentConstrainedMoveable",dojo.dnd.move.constrainedMoveable,{area:"content",markupFactory:function(_c3,_c4){return new dojo.dnd.move.parentConstrainedMoveable(_c4,_c3);},constructor:function(_c5,_c6){var _c7=_c6&&_c6.area;this.constraints=function(){var n=this.node.parentNode,s=dojo.getComputedStyle(n),mb=dojo._getMarginBox(n,s);if(_c7=="margin"){return mb;}var t=dojo._getMarginExtents(n,s);mb.l+=t.l,mb.t+=t.t,mb.w-=t.w,mb.h-=t.h;if(_c7=="border"){return mb;}t=dojo._getBorderExtents(n,s);mb.l+=t.l,mb.t+=t.t,mb.w-=t.w,mb.h-=t.h;if(_c7=="padding"){return mb;}t=dojo._getPadExtents(n,s);mb.l+=t.l,mb.t+=t.t,mb.w-=t.w,mb.h-=t.h;return mb;};}});dojo.dnd.move.constrainedMover=function(fun,_cd){var _ce=function(_cf,e,_d1){dojo.dnd.Mover.call(this,_cf,e,_d1);};dojo.extend(_ce,dojo.dnd.Mover.prototype);dojo.extend(_ce,{onMouseMove:function(e){dojo.dnd.autoScroll(e);var m=this.marginBox,c=this.constraintBox,l=m.l+e.pageX,t=m.t+e.pageY;l=l<c.l?c.l:c.r<l?c.r:l;t=t<c.t?c.t:c.b<t?c.b:t;this.host.onMove(this,{l:l,t:t});},onFirstMove:function(){dojo.dnd.Mover.prototype.onFirstMove.call(this);var c=this.constraintBox=fun.call(this),m=this.marginBox;c.r=c.l+c.w-(_cd?m.w:0);c.b=c.t+c.h-(_cd?m.h:0);}});return _ce;};dojo.dnd.move.boxConstrainedMover=function(box,_da){return dojo.dnd.move.constrainedMover(function(){return box;},_da);};dojo.dnd.move.parentConstrainedMover=function(_db,_dc){var fun=function(){var n=this.node.parentNode,s=dojo.getComputedStyle(n),mb=dojo._getMarginBox(n,s);if(_db=="margin"){return mb;}var t=dojo._getMarginExtents(n,s);mb.l+=t.l,mb.t+=t.t,mb.w-=t.w,mb.h-=t.h;if(_db=="border"){return mb;}t=dojo._getBorderExtents(n,s);mb.l+=t.l,mb.t+=t.t,mb.w-=t.w,mb.h-=t.h;if(_db=="padding"){return mb;}t=dojo._getPadExtents(n,s);mb.l+=t.l,mb.t+=t.t,mb.w-=t.w,mb.h-=t.h;return mb;};return dojo.dnd.move.constrainedMover(fun,_dc);};dojo.dnd.constrainedMover=dojo.dnd.move.constrainedMover;dojo.dnd.boxConstrainedMover=dojo.dnd.move.boxConstrainedMover;dojo.dnd.parentConstrainedMover=dojo.dnd.move.parentConstrainedMover;}if(!dojo._hasResource["dojo.fx"]){dojo._hasResource["dojo.fx"]=true;dojo.provide("dojo.fx");dojo.provide("dojo.fx.Toggler");dojo.fx.chain=function(_e2){var _e3=_e2.shift();var _e4=_e3;dojo.forEach(_e2,function(_e5){dojo.connect(_e4,"onEnd",_e5,"play");_e4=_e5;});return _e3;};dojo.fx.combine=function(_e6){var ctr=new dojo._Animation({curve:[0,1]});if(!_e6.length){return ctr;}ctr.duration=_e6[0].duration;dojo.forEach(_e6,function(_e8){dojo.forEach(["play","pause","stop"],function(e){if(_e8[e]){dojo.connect(ctr,e,_e8,e);}});});return ctr;};dojo.declare("dojo.fx.Toggler",null,{constructor:function(_ea){var _t=this;dojo.mixin(_t,_ea);_t.node=_ea.node;_t._showArgs=dojo.mixin({},_ea);_t._showArgs.node=_t.node;_t._showArgs.duration=_t.showDuration;_t.showAnim=_t.showFunc(_t._showArgs);_t._hideArgs=dojo.mixin({},_ea);_t._hideArgs.node=_t.node;_t._hideArgs.duration=_t.hideDuration;_t.hideAnim=_t.hideFunc(_t._hideArgs);dojo.connect(_t.showAnim,"beforeBegin",dojo.hitch(_t.hideAnim,"stop",true));dojo.connect(_t.hideAnim,"beforeBegin",dojo.hitch(_t.showAnim,"stop",true));},node:null,showFunc:dojo.fadeIn,hideFunc:dojo.fadeOut,showDuration:200,hideDuration:200,show:function(_ec){return this.showAnim.play(_ec||0);},hide:function(_ed){return this.hideAnim.play(_ed||0);}});dojo.fx.wipeIn=function(_ee){_ee.node=dojo.byId(_ee.node);var _ef=_ee.node,s=_ef.style;var _f1=dojo.animateProperty(dojo.mixin({properties:{height:{start:function(){s.overflow="hidden";if(s.visibility=="hidden"||s.display=="none"){s.height="1px";s.display="";s.visibility="";return 1;}else{var _f2=dojo.style(_ef,"height");return Math.max(_f2,1);}},end:function(){return _ef.scrollHeight;}}}},_ee));dojo.connect(_f1,"onEnd",function(){s.height="auto";});return _f1;};dojo.fx.wipeOut=function(_f3){var _f4=_f3.node=dojo.byId(_f3.node);var s=_f4.style;var _f6=dojo.animateProperty(dojo.mixin({properties:{height:{end:1}}},_f3));dojo.connect(_f6,"beforeBegin",function(){s.overflow="hidden";s.display="";});dojo.connect(_f6,"onEnd",function(){s.height="auto";s.display="none";});return _f6;};dojo.fx.slideTo=function(_f7){var _f8=(_f7.node=dojo.byId(_f7.node));var top=null;var _fa=null;var _fb=(function(n){return function(){var cs=dojo.getComputedStyle(n);var pos=cs.position;top=(pos=="absolute"?n.offsetTop:parseInt(cs.top)||0);_fa=(pos=="absolute"?n.offsetLeft:parseInt(cs.left)||0);if(pos!="absolute"&&pos!="relative"){var ret=dojo.coords(n,true);top=ret.y;_fa=ret.x;n.style.position="absolute";n.style.top=top+"px";n.style.left=_fa+"px";}};})(_f8);_fb();var anim=dojo.animateProperty(dojo.mixin({properties:{top:{end:_f7.top||0},left:{end:_f7.left||0}}},_f7));dojo.connect(anim,"beforeBegin",anim,_fb);return anim;};}if(!dojo._hasResource["dijit.layout.ContentPane"]){dojo._hasResource["dijit.layout.ContentPane"]=true;dojo.provide("dijit.layout.ContentPane");dojo.declare("dijit.layout.ContentPane",dijit._Widget,{href:"",extractContent:false,parseOnLoad:true,preventCache:false,preload:false,refreshOnShow:false,loadingMessage:"<span class='dijitContentPaneLoading'>${loadingState}</span>",errorMessage:"<span class='dijitContentPaneError'>${errorState}</span>",isLoaded:false,"class":"dijitContentPane",postCreate:function(){this.domNode.title="";if(this.preload){this._loadCheck();}var _101=dojo.i18n.getLocalization("dijit","loading",this.lang);this.loadingMessage=dojo.string.substitute(this.loadingMessage,_101);this.errorMessage=dojo.string.substitute(this.errorMessage,_101);dojo.addClass(this.domNode,this["class"]);},startup:function(){if(this._started){return;}this._checkIfSingleChild();if(this._singleChild){this._singleChild.startup();}this._loadCheck();this._started=true;},_checkIfSingleChild:function(){var _102=dojo.query(">",this.containerNode||this.domNode),_103=_102.filter("[widgetId]");if(_102.length==1&&_103.length==1){this.isContainer=true;this._singleChild=dijit.byNode(_103[0]);}else{delete this.isContainer;delete this._singleChild;}},refresh:function(){return this._prepareLoad(true);},setHref:function(href){this.href=href;return this._prepareLoad();},setContent:function(data){if(!this._isDownloaded){this.href="";this._onUnloadHandler();}this._setContent(data||"");this._isDownloaded=false;if(this.parseOnLoad){this._createSubWidgets();}this._checkIfSingleChild();if(this._singleChild&&this._singleChild.resize){this._singleChild.resize(this._contentBox);}this._onLoadHandler();},cancel:function(){if(this._xhrDfd&&(this._xhrDfd.fired==-1)){this._xhrDfd.cancel();}delete this._xhrDfd;},destroy:function(){if(this._beingDestroyed){return;}this._onUnloadHandler();this._beingDestroyed=true;this.inherited("destroy",arguments);},resize:function(size){dojo.marginBox(this.domNode,size);var node=this.containerNode||this.domNode,mb=dojo.mixin(dojo.marginBox(node),size||{});this._contentBox=dijit.layout.marginBox2contentBox(node,mb);if(this._singleChild&&this._singleChild.resize){this._singleChild.resize(this._contentBox);}},_prepareLoad:function(_109){this.cancel();this.isLoaded=false;this._loadCheck(_109);},_loadCheck:function(_10a){var _10b=((this.open!==false)&&(this.domNode.style.display!="none"));if(this.href&&(_10a||(this.preload&&!this._xhrDfd)||(this.refreshOnShow&&_10b&&!this._xhrDfd)||(!this.isLoaded&&_10b&&!this._xhrDfd))){this._downloadExternalContent();}},_downloadExternalContent:function(){this._onUnloadHandler();this._setContent(this.onDownloadStart.call(this));var self=this;var _10d={preventCache:(this.preventCache||this.refreshOnShow),url:this.href,handleAs:"text"};if(dojo.isObject(this.ioArgs)){dojo.mixin(_10d,this.ioArgs);}var hand=this._xhrDfd=(this.ioMethod||dojo.xhrGet)(_10d);hand.addCallback(function(html){try{self.onDownloadEnd.call(self);self._isDownloaded=true;self.setContent.call(self,html);}catch(err){self._onError.call(self,"Content",err);}delete self._xhrDfd;return html;});hand.addErrback(function(err){if(!hand.cancelled){self._onError.call(self,"Download",err);}delete self._xhrDfd;return err;});},_onLoadHandler:function(){this.isLoaded=true;try{this.onLoad.call(this);}catch(e){console.error("Error "+this.widgetId+" running custom onLoad code");}},_onUnloadHandler:function(){this.isLoaded=false;this.cancel();try{this.onUnload.call(this);}catch(e){console.error("Error "+this.widgetId+" running custom onUnload code");}},_setContent:function(cont){this.destroyDescendants();try{var node=this.containerNode||this.domNode;while(node.firstChild){dojo._destroyElement(node.firstChild);}if(typeof cont=="string"){if(this.extractContent){match=cont.match(/<body[^>]*>\s*([\s\S]+)\s*<\/body>/im);if(match){cont=match[1];}}node.innerHTML=cont;}else{if(cont.nodeType){node.appendChild(cont);}else{dojo.forEach(cont,function(n){node.appendChild(n.cloneNode(true));});}}}catch(e){var _114=this.onContentError(e);try{node.innerHTML=_114;}catch(e){console.error("Fatal "+this.id+" could not change content due to "+e.message,e);}}},_onError:function(type,err,_117){var _118=this["on"+type+"Error"].call(this,err);if(_117){console.error(_117,err);}else{if(_118){this._setContent.call(this,_118);}}},_createSubWidgets:function(){var _119=this.containerNode||this.domNode;try{dojo.parser.parse(_119,true);}catch(e){this._onError("Content",e,"Couldn't create widgets in "+this.id+(this.href?" from "+this.href:""));}},onLoad:function(e){},onUnload:function(e){},onDownloadStart:function(){return this.loadingMessage;},onContentError:function(_11c){},onDownloadError:function(_11d){return this.errorMessage;},onDownloadEnd:function(){}});}if(!dojo._hasResource["dijit.form.Form"]){dojo._hasResource["dijit.form.Form"]=true;dojo.provide("dijit.form.Form");dojo.declare("dijit.form._FormMixin",null,{action:"",method:"",enctype:"",name:"","accept-charset":"",accept:"",target:"",attributeMap:dojo.mixin(dojo.clone(dijit._Widget.prototype.attributeMap),{action:"",method:"",enctype:"","accept-charset":"",accept:"",target:""}),execute:function(_11e){},onCancel:function(){},onExecute:function(){},templateString:"<form dojoAttachPoint='containerNode' dojoAttachEvent='onsubmit:_onSubmit' name='${name}' enctype='multipart/form-data'></form>",_onSubmit:function(e){dojo.stopEvent(e);this.onExecute();this.execute(this.getValues());},submit:function(){this.containerNode.submit();},setValues:function(obj){var map={};dojo.forEach(this.getDescendants(),function(_122){if(!_122.name){return;}var _123=map[_122.name]||(map[_122.name]=[]);_123.push(_122);});for(var name in map){var _125=map[name],_126=dojo.getObject(name,false,obj);if(!dojo.isArray(_126)){_126=[_126];}if(_125[0].setChecked){dojo.forEach(_125,function(w,i){w.setChecked(dojo.indexOf(_126,w.value)!=-1);});}else{dojo.forEach(_125,function(w,i){w.setValue(_126[i]);});}}},getValues:function(){var obj={};dojo.forEach(this.getDescendants(),function(_12c){var _12d=_12c.getValue?_12c.getValue():_12c.value;var name=_12c.name;if(!name){return;}if(_12c.setChecked){if(/Radio/.test(_12c.declaredClass)){if(_12c.checked){dojo.setObject(name,_12d,obj);}}else{var ary=dojo.getObject(name,false,obj);if(!ary){ary=[];dojo.setObject(name,ary,obj);}if(_12c.checked){ary.push(_12d);}}}else{dojo.setObject(name,_12d,obj);}});return obj;},isValid:function(){return dojo.every(this.getDescendants(),function(_130){return !_130.isValid||_130.isValid();});}});dojo.declare("dijit.form.Form",[dijit._Widget,dijit._Templated,dijit.form._FormMixin],null);}if(!dojo._hasResource["dijit.Dialog"]){dojo._hasResource["dijit.Dialog"]=true;dojo.provide("dijit.Dialog");dojo.declare("dijit.DialogUnderlay",[dijit._Widget,dijit._Templated],{templateString:"<div class=dijitDialogUnderlayWrapper id='${id}_underlay'><div class=dijitDialogUnderlay dojoAttachPoint='node'></div></div>",postCreate:function(){dojo.body().appendChild(this.domNode);this.bgIframe=new dijit.BackgroundIframe(this.domNode);},layout:function(){var _131=dijit.getViewport();var is=this.node.style,os=this.domNode.style;os.top=_131.t+"px";os.left=_131.l+"px";is.width=_131.w+"px";is.height=_131.h+"px";var _134=dijit.getViewport();if(_131.w!=_134.w){is.width=_134.w+"px";}if(_131.h!=_134.h){is.height=_134.h+"px";}},show:function(){this.domNode.style.display="block";this.layout();if(this.bgIframe.iframe){this.bgIframe.iframe.style.display="block";}this._resizeHandler=this.connect(window,"onresize","layout");},hide:function(){this.domNode.style.display="none";if(this.bgIframe.iframe){this.bgIframe.iframe.style.display="none";}this.disconnect(this._resizeHandler);},uninitialize:function(){if(this.bgIframe){this.bgIframe.destroy();}}});dojo.declare("dijit.Dialog",[dijit.layout.ContentPane,dijit._Templated,dijit.form._FormMixin],{templateString:null,templateString:"<div class=\"dijitDialog\">\n\t<div dojoAttachPoint=\"titleBar\" class=\"dijitDialogTitleBar\" tabindex=\"0\" waiRole=\"dialog\">\n\t<span dojoAttachPoint=\"titleNode\" class=\"dijitDialogTitle\">${title}</span>\n\t<span dojoAttachPoint=\"closeButtonNode\" class=\"dijitDialogCloseIcon\" dojoAttachEvent=\"onclick: hide\">\n\t\t<span dojoAttachPoint=\"closeText\" class=\"closeText\">x</span>\n\t</span>\n\t</div>\n\t\t<div dojoAttachPoint=\"containerNode\" class=\"dijitDialogPaneContent\"></div>\n\t<span dojoAttachPoint=\"tabEnd\" dojoAttachEvent=\"onfocus:_cycleFocus\" tabindex=\"0\"></span>\n</div>\n",open:false,duration:400,_lastFocusItem:null,attributeMap:dojo.mixin(dojo.clone(dijit._Widget.prototype.attributeMap),{title:"titleBar"}),postCreate:function(){dojo.body().appendChild(this.domNode);this.inherited("postCreate",arguments);this.domNode.style.display="none";this.connect(this,"onExecute","hide");this.connect(this,"onCancel","hide");},onLoad:function(){this._position();this.inherited("onLoad",arguments);},_setup:function(){this._modalconnects=[];if(this.titleBar){this._moveable=new dojo.dnd.Moveable(this.domNode,{handle:this.titleBar});}this._underlay=new dijit.DialogUnderlay();var node=this.domNode;this._fadeIn=dojo.fx.combine([dojo.fadeIn({node:node,duration:this.duration}),dojo.fadeIn({node:this._underlay.domNode,duration:this.duration,onBegin:dojo.hitch(this._underlay,"show")})]);this._fadeOut=dojo.fx.combine([dojo.fadeOut({node:node,duration:this.duration,onEnd:function(){node.style.display="none";}}),dojo.fadeOut({node:this._underlay.domNode,duration:this.duration,onEnd:dojo.hitch(this._underlay,"hide")})]);},uninitialize:function(){if(this._underlay){this._underlay.destroy();}},_position:function(){if(dojo.hasClass(dojo.body(),"dojoMove")){return;}var _136=dijit.getViewport();var mb=dojo.marginBox(this.domNode);var _138=this.domNode.style;_138.left=Math.floor((_136.l+(_136.w-mb.w)/2))+"px";_138.top=Math.floor((_136.t+(_136.h-mb.h)/2))+"px";},_findLastFocus:function(evt){this._lastFocused=evt.target;},_cycleFocus:function(evt){if(!this._lastFocusItem){this._lastFocusItem=this._lastFocused;}this.titleBar.focus();},_onKey:function(evt){if(evt.keyCode){var node=evt.target;if(node==this.titleBar&&evt.shiftKey&&evt.keyCode==dojo.keys.TAB){if(this._lastFocusItem){this._lastFocusItem.focus();}dojo.stopEvent(evt);}else{while(node){if(node==this.domNode){if(evt.keyCode==dojo.keys.ESCAPE){this.hide();}else{return;}}node=node.parentNode;}if(evt.keyCode!=dojo.keys.TAB){dojo.stopEvent(evt);}else{if(!dojo.isOpera){try{this.titleBar.focus();}catch(e){}}}}}},show:function(){if(!this._alreadyInitialized){this._setup();this._alreadyInitialized=true;}if(this._fadeOut.status()=="playing"){this._fadeOut.stop();}this._modalconnects.push(dojo.connect(window,"onscroll",this,"layout"));this._modalconnects.push(dojo.connect(document.documentElement,"onkeypress",this,"_onKey"));var ev=typeof (document.ondeactivate)=="object"?"ondeactivate":"onblur";this._modalconnects.push(dojo.connect(this.containerNode,ev,this,"_findLastFocus"));dojo.style(this.domNode,"opacity",0);this.domNode.style.display="block";this.open=true;this._loadCheck();this._position();this._fadeIn.play();this._savedFocus=dijit.getFocus(this);setTimeout(dojo.hitch(this,function(){dijit.focus(this.titleBar);}),50);},hide:function(){if(!this._alreadyInitialized){return;}if(this._fadeIn.status()=="playing"){this._fadeIn.stop();}this._fadeOut.play();if(this._scrollConnected){this._scrollConnected=false;}dojo.forEach(this._modalconnects,dojo.disconnect);this._modalconnects=[];this.connect(this._fadeOut,"onEnd",dojo.hitch(this,function(){dijit.focus(this._savedFocus);}));this.open=false;},layout:function(){if(this.domNode.style.display=="block"){this._underlay.layout();this._position();}}});dojo.declare("dijit.TooltipDialog",[dijit.layout.ContentPane,dijit._Templated,dijit.form._FormMixin],{title:"",_lastFocusItem:null,templateString:null,templateString:"<div class=\"dijitTooltipDialog\" >\n\t<div class=\"dijitTooltipContainer\">\n\t\t<div class =\"dijitTooltipContents dijitTooltipFocusNode\" dojoAttachPoint=\"containerNode\" tabindex=\"0\" waiRole=\"dialog\"></div>\n\t</div>\n\t<span dojoAttachPoint=\"tabEnd\" tabindex=\"0\" dojoAttachEvent=\"focus:_cycleFocus\"></span>\n\t<div class=\"dijitTooltipConnector\" ></div>\n</div>\n",postCreate:function(){this.inherited("postCreate",arguments);this.connect(this.containerNode,"onkeypress","_onKey");var ev=typeof (document.ondeactivate)=="object"?"ondeactivate":"onblur";this.connect(this.containerNode,ev,"_findLastFocus");this.containerNode.title=this.title;},orient:function(_13f){this.domNode.className="dijitTooltipDialog "+" dijitTooltipAB"+(_13f.charAt(1)=="L"?"Left":"Right")+" dijitTooltip"+(_13f.charAt(0)=="T"?"Below":"Above");},onOpen:function(pos){this.orient(pos.corner);this._loadCheck();this.containerNode.focus();},_onKey:function(evt){if(evt.keyCode==dojo.keys.ESCAPE){this.onCancel();}else{if(evt.target==this.containerNode&&evt.shiftKey&&evt.keyCode==dojo.keys.TAB){if(this._lastFocusItem){this._lastFocusItem.focus();}dojo.stopEvent(evt);}else{if(evt.keyCode==dojo.keys.TAB){evt.stopPropagation();}}}},_findLastFocus:function(evt){this._lastFocused=evt.target;},_cycleFocus:function(evt){if(!this._lastFocusItem){this._lastFocusItem=this._lastFocused;}this.containerNode.focus();}});}if(!dojo._hasResource["dijit._editor.selection"]){dojo._hasResource["dijit._editor.selection"]=true;dojo.provide("dijit._editor.selection");dojo.mixin(dijit._editor.selection,{getType:function(){if(dojo.doc["selection"]){return dojo.doc.selection.type.toLowerCase();}else{var _144="text";var oSel;try{oSel=dojo.global.getSelection();}catch(e){}if(oSel&&oSel.rangeCount==1){var _146=oSel.getRangeAt(0);if((_146.startContainer==_146.endContainer)&&((_146.endOffset-_146.startOffset)==1)&&(_146.startContainer.nodeType!=3)){_144="control";}}return _144;}},getSelectedText:function(){if(dojo.doc["selection"]){if(dijit._editor.selection.getType()=="control"){return null;}return dojo.doc.selection.createRange().text;}else{var _147=dojo.global.getSelection();if(_147){return _147.toString();}}},getSelectedHtml:function(){if(dojo.doc["selection"]){if(dijit._editor.selection.getType()=="control"){return null;}return dojo.doc.selection.createRange().htmlText;}else{var _148=dojo.global.getSelection();if(_148&&_148.rangeCount){var frag=_148.getRangeAt(0).cloneContents();var div=document.createElement("div");div.appendChild(frag);return div.innerHTML;}return null;}},getSelectedElement:function(){if(this.getType()=="control"){if(dojo.doc["selection"]){var _14b=dojo.doc.selection.createRange();if(_14b&&_14b.item){return dojo.doc.selection.createRange().item(0);}}else{var _14c=dojo.global.getSelection();return _14c.anchorNode.childNodes[_14c.anchorOffset];}}},getParentElement:function(){if(this.getType()=="control"){var p=this.getSelectedElement();if(p){return p.parentNode;}}else{if(dojo.doc["selection"]){return dojo.doc.selection.createRange().parentElement();}else{var _14e=dojo.global.getSelection();if(_14e){var node=_14e.anchorNode;while(node&&(node.nodeType!=1)){node=node.parentNode;}return node;}}}},hasAncestorElement:function(_150){return (this.getAncestorElement.apply(this,arguments)!=null);},getAncestorElement:function(_151){var node=this.getSelectedElement()||this.getParentElement();return this.getParentOfType(node,arguments);},isTag:function(node,tags){if(node&&node.tagName){var _nlc=node.tagName.toLowerCase();for(var i=0;i<tags.length;i++){var _tlc=String(tags[i]).toLowerCase();if(_nlc==_tlc){return _tlc;}}}return "";},getParentOfType:function(node,tags){while(node){if(this.isTag(node,tags).length){return node;}node=node.parentNode;}return null;},remove:function(){var _s=dojo.doc.selection;if(_s){if(_s.type.toLowerCase()!="none"){_s.clear();}return _s;}else{_s=dojo.global.getSelection();_s.deleteFromDocument();return _s;}},selectElementChildren:function(_15b,_15c){var _15d=dojo.global;var _15e=dojo.doc;_15b=dojo.byId(_15b);if(_15e.selection&&dojo.body().createTextRange){var _15f=_15b.ownerDocument.body.createTextRange();_15f.moveToElementText(_15b);if(!_15c){_15f.select();}}else{if(_15d["getSelection"]){var _160=_15d.getSelection();if(_160["setBaseAndExtent"]){_160.setBaseAndExtent(_15b,0,_15b,_15b.innerText.length-1);}else{if(_160["selectAllChildren"]){_160.selectAllChildren(_15b);}}}}},selectElement:function(_161,_162){var _163=dojo.doc;_161=dojo.byId(_161);if(_163.selection&&dojo.body().createTextRange){try{var _164=dojo.body().createControlRange();_164.addElement(_161);if(!_162){_164.select();}}catch(e){this.selectElementChildren(_161,_162);}}else{if(dojo.global["getSelection"]){var _165=dojo.global.getSelection();if(_165["removeAllRanges"]){var _164=_163.createRange();_164.selectNode(_161);_165.removeAllRanges();_165.addRange(_164);}}}}});}if(!dojo._hasResource["dijit._editor.RichText"]){dojo._hasResource["dijit._editor.RichText"]=true;dojo.provide("dijit._editor.RichText");if(!djConfig["useXDomain"]||djConfig["allowXdRichTextSave"]){if(dojo._postLoad){(function(){var _166=dojo.doc.createElement("textarea");_166.id="dijit._editor.RichText.savedContent";var s=_166.style;s.display="none";s.position="absolute";s.top="-100px";s.left="-100px";s.height="3px";s.width="3px";dojo.body().appendChild(_166);})();}else{try{dojo.doc.write("<textarea id=\"dijit._editor.RichText.savedContent\" "+"style=\"display:none;position:absolute;top:-100px;left:-100px;height:3px;width:3px;overflow:hidden;\"></textarea>");}catch(e){}}}dojo.declare("dijit._editor.RichText",[dijit._Widget],{constructor:function(){this.contentPreFilters=[];this.contentPostFilters=[];this.contentDomPreFilters=[];this.contentDomPostFilters=[];this.editingAreaStyleSheets=[];this._keyHandlers={};this.contentPreFilters.push(dojo.hitch(this,"_preFixUrlAttributes"));if(dojo.isMoz){this.contentPreFilters.push(this._fixContentForMoz);}this.onLoadDeferred=new dojo.Deferred();},inheritWidth:false,focusOnLoad:false,name:"",styleSheets:"",_content:"",height:"300px",minHeight:"1em",isClosed:true,isLoaded:false,_SEPARATOR:"@@**%%__RICHTEXTBOUNDRY__%%**@@",onLoadDeferred:null,postCreate:function(){dojo.publish("dijit._editor.RichText::init",[this]);this.open();this.setupDefaultShortcuts();},setupDefaultShortcuts:function(){var ctrl=this.KEY_CTRL;var exec=function(cmd,arg){return arguments.length==1?function(){this.execCommand(cmd);}:function(){this.execCommand(cmd,arg);};};this.addKeyHandler("b",ctrl,exec("bold"));this.addKeyHandler("i",ctrl,exec("italic"));this.addKeyHandler("u",ctrl,exec("underline"));this.addKeyHandler("a",ctrl,exec("selectall"));this.addKeyHandler("s",ctrl,function(){this.save(true);});this.addKeyHandler("1",ctrl,exec("formatblock","h1"));this.addKeyHandler("2",ctrl,exec("formatblock","h2"));this.addKeyHandler("3",ctrl,exec("formatblock","h3"));this.addKeyHandler("4",ctrl,exec("formatblock","h4"));this.addKeyHandler("\\",ctrl,exec("insertunorderedlist"));if(!dojo.isIE){this.addKeyHandler("Z",ctrl,exec("redo"));}},events:["onKeyPress","onKeyDown","onKeyUp","onClick"],captureEvents:[],_editorCommandsLocalized:false,_localizeEditorCommands:function(){if(this._editorCommandsLocalized){return;}this._editorCommandsLocalized=true;var _16c=["p","pre","address","h1","h2","h3","h4","h5","h6","ol","div","ul"];var _16d="",_16e,i=0;while((_16e=_16c[i++])){if(_16e.charAt(1)!="l"){_16d+="<"+_16e+"><span>content</span></"+_16e+">";}else{_16d+="<"+_16e+"><li>content</li></"+_16e+">";}}var div=document.createElement("div");div.style.position="absolute";div.style.left="-2000px";div.style.top="-2000px";document.body.appendChild(div);div.innerHTML=_16d;var node=div.firstChild;while(node){dijit._editor.selection.selectElement(node.firstChild);dojo.withGlobal(this.window,"selectElement",dijit._editor.selection,[node.firstChild]);var _172=node.tagName.toLowerCase();this._local2NativeFormatNames[_172]=document.queryCommandValue("formatblock");this._native2LocalFormatNames[this._local2NativeFormatNames[_172]]=_172;node=node.nextSibling;}document.body.removeChild(div);},open:function(_173){if((!this.onLoadDeferred)||(this.onLoadDeferred.fired>=0)){this.onLoadDeferred=new dojo.Deferred();}if(!this.isClosed){this.close();}dojo.publish("dijit._editor.RichText::open",[this]);this._content="";if((arguments.length==1)&&(_173["nodeName"])){this.domNode=_173;}if((this.domNode["nodeName"])&&(this.domNode.nodeName.toLowerCase()=="textarea")){this.textarea=this.domNode;this.name=this.textarea.name;var html=this._preFilterContent(this.textarea.value);this.domNode=dojo.doc.createElement("div");this.domNode.setAttribute("widgetId",this.id);this.textarea.removeAttribute("widgetId");this.domNode.cssText=this.textarea.cssText;this.domNode.className+=" "+this.textarea.className;dojo.place(this.domNode,this.textarea,"before");var _175=dojo.hitch(this,function(){with(this.textarea.style){display="block";position="absolute";left=top="-1000px";if(dojo.isIE){this.__overflow=overflow;overflow="hidden";}}});if(dojo.isIE){setTimeout(_175,10);}else{_175();}}else{var html=this._preFilterContent(this.getNodeChildrenHtml(this.domNode));this.domNode.innerHTML="";}if(html==""){html="&nbsp;";}var _176=dojo.contentBox(this.domNode);this._oldHeight=_176.h;this._oldWidth=_176.w;this.savedContent=html;if((this.domNode["nodeName"])&&(this.domNode.nodeName=="LI")){this.domNode.innerHTML=" <br>";}this.editingArea=dojo.doc.createElement("div");this.domNode.appendChild(this.editingArea);if(this.name!=""&&(!djConfig["useXDomain"]||djConfig["allowXdRichTextSave"])){var _177=dojo.byId("dijit._editor.RichText.savedContent");if(_177.value!=""){var _178=_177.value.split(this._SEPARATOR),i=0,dat;while((dat=_178[i++])){var data=dat.split(":");if(data[0]==this.name){html=data[1];_178.splice(i,1);break;}}}dojo.connect(window,"onbeforeunload",this,"_saveContent");}this.isClosed=false;if(dojo.isIE||dojo.isSafari||dojo.isOpera){var ifr=this.iframe=dojo.doc.createElement("iframe");ifr.src="javascript:void(0)";this.editorObject=ifr;ifr.style.border="none";ifr.style.width="100%";ifr.frameBorder=0;this.editingArea.appendChild(ifr);this.window=ifr.contentWindow;this.document=this.window.document;this.document.open();this.document.write(this._getIframeDocTxt(html));this.document.close();if(dojo.isIE>=7){if(this.height){ifr.style.height=this.height;}if(this.minHeight){ifr.style.minHeight=this.minHeight;}}else{ifr.style.height=this.height?this.height:this.minHeight;}if(dojo.isIE){this._localizeEditorCommands();}this.onLoad();}else{this._drawIframe(html);}if(this.domNode.nodeName=="LI"){this.domNode.lastChild.style.marginTop="-1.2em";}this.domNode.className+=" RichTextEditable";},_local2NativeFormatNames:{},_native2LocalFormatNames:{},_localizedIframeTitles:null,_getIframeDocTxt:function(html){var _cs=dojo.getComputedStyle(this.domNode);if(!this.height&&!dojo.isMoz){html="<div>"+html+"</div>";}var font=[_cs.fontWeight,_cs.fontSize,_cs.fontFamily].join(" ");var _180=_cs.lineHeight;if(_180.indexOf("px")>=0){_180=parseFloat(_180)/parseFloat(_cs.fontSize);}else{if(_180.indexOf("em")>=0){_180=parseFloat(_180);}else{_180="1.0";}}return [this.isLeftToRight()?"<html><head>":"<html dir='rtl'><head>",(dojo.isMoz?"<title>"+this._localizedIframeTitles.iframeEditTitle+"</title>":""),"<style>","body,html {","\tbackground:transparent;","\tpadding: 0;","\tmargin: 0;","}","body{","\ttop:0px; left:0px; right:0px;",((this.height||dojo.isOpera)?"":"position: fixed;"),"\tfont:",font,";","\tmin-height:",this.minHeight,";","\tline-height:",_180,"}","p{ margin: 1em 0 !important; }",(this.height?"":"body,html{overflow-y:hidden;/*for IE*/} body > div {overflow-x:auto;/*for FF to show vertical scrollbar*/}"),"li > ul:-moz-first-node, li > ol:-moz-first-node{ padding-top: 1.2em; } ","li{ min-height:1.2em; }","</style>",this._applyEditingAreaStyleSheets(),"</head><body>"+html+"</body></html>"].join("");},_drawIframe:function(html){if(!this.iframe){var ifr=this.iframe=dojo.doc.createElement("iframe");var ifrs=ifr.style;ifrs.border="none";ifrs.lineHeight="0";ifrs.verticalAlign="bottom";this.editorObject=this.iframe;this._localizedIframeTitles=dojo.i18n.getLocalization("dijit","Textarea");var _184=dojo.query("label[for=\""+this.id+"\"]");if(_184.length){this._localizedIframeTitles.iframeEditTitle=_184[0].innerHTML+" "+this._localizedIframeTitles.iframeEditTitle;}}this.iframe.style.width=this.inheritWidth?this._oldWidth:"100%";if(this.height){this.iframe.style.height=this.height;}else{this.iframe.height=this._oldHeight;}if(this.textarea){var _185=this.srcNodeRef;}else{var _185=dojo.doc.createElement("div");_185.style.display="none";_185.innerHTML=html;this.editingArea.appendChild(_185);}this.editingArea.appendChild(this.iframe);var _186=false;var _187=this.iframe.contentDocument;_187.open();_187.write(this._getIframeDocTxt(html));_187.close();var _188=dojo.hitch(this,function(){if(!_186){_186=true;}else{return;}if(!this.editNode){try{if(this.iframe.contentWindow){this.window=this.iframe.contentWindow;this.document=this.iframe.contentWindow.document;}else{if(this.iframe.contentDocument){this.window=this.iframe.contentDocument.window;this.document=this.iframe.contentDocument;}}if(!this.document.body){throw "Error";}}catch(e){setTimeout(_188,500);_186=false;return;}dojo._destroyElement(_185);this.document.designMode="on";this.onLoad();}else{dojo._destroyElement(_185);this.editNode.innerHTML=html;this.onDisplayChanged();}this._preDomFilterContent(this.editNode);});_188();},_applyEditingAreaStyleSheets:function(){var _189=[];if(this.styleSheets){_189=this.styleSheets.split(";");this.styleSheets="";}_189=_189.concat(this.editingAreaStyleSheets);this.editingAreaStyleSheets=[];var text="",i=0,url;while((url=_189[i++])){var _18d=(new dojo._Url(dojo.global.location,url)).toString();this.editingAreaStyleSheets.push(_18d);text+="<link rel=\"stylesheet\" type=\"text/css\" href=\""+_18d+"\"/>";}return text;},addStyleSheet:function(uri){var url=uri.toString();if(url.charAt(0)=="."||(url.charAt(0)!="/"&&!uri.host)){url=(new dojo._Url(dojo.global.location,url)).toString();}if(dojo.indexOf(this.editingAreaStyleSheets,url)>-1){console.debug("dijit._editor.RichText.addStyleSheet: Style sheet "+url+" is already applied to the editing area!");return;}this.editingAreaStyleSheets.push(url);if(this.document.createStyleSheet){this.document.createStyleSheet(url);}else{var head=this.document.getElementsByTagName("head")[0];var _191=this.document.createElement("link");with(_191){rel="stylesheet";type="text/css";href=url;}head.appendChild(_191);}},removeStyleSheet:function(uri){var url=uri.toString();if(url.charAt(0)=="."||(url.charAt(0)!="/"&&!uri.host)){url=(new dojo._Url(dojo.global.location,url)).toString();}var _194=dojo.indexOf(this.editingAreaStyleSheets,url);if(_194==-1){console.debug("dijit._editor.RichText.removeStyleSheet: Style sheet "+url+" is not applied to the editing area so it can not be removed!");return;}delete this.editingAreaStyleSheets[_194];dojo.withGlobal(this.window,"query",dojo,["link:[href=\""+url+"\"]"]).orphan();},disabled:false,_mozSettingProps:["styleWithCSS","insertBrOnReturn"],setDisabled:function(_195){if(dojo.isIE||dojo.isSafari||dojo.isOpera){this.editNode.contentEditable=!_195;}else{if(_195){this._mozSettings=[false,this.blockNodeForEnter==="BR"];}this.document.designMode=(_195?"off":"on");if(!_195){dojo.forEach(this._mozSettingProps,function(s,i){this.document.execCommand(s,false,this._mozSettings[i]);},this);}}this.disabled=_195;},_isResized:function(){return false;},onLoad:function(e){this.isLoaded=true;if(this.height||dojo.isMoz){this.editNode=this.document.body;}else{this.editNode=this.document.body.firstChild;}this.editNode.contentEditable=true;this._preDomFilterContent(this.editNode);var _199=this.events.concat(this.captureEvents),i=0,et;while((et=_199[i++])){this.connect(this.document,et.toLowerCase(),et);}if(!dojo.isIE){try{this.document.execCommand("styleWithCSS",false,false);}catch(e2){}}else{this.editNode.style.zoom=1;}if(this.focusOnLoad){this.focus();}this.onDisplayChanged(e);if(this.onLoadDeferred){this.onLoadDeferred.callback(true);}},onKeyDown:function(e){if(dojo.isIE){if(e.keyCode===dojo.keys.BACKSPACE&&this.document.selection.type==="Control"){dojo.stopEvent(e);this.execCommand("delete");}else{if((65<=e.keyCode&&e.keyCode<=90)||(e.keyCode>=37&&e.keyCode<=40)){e.charCode=e.keyCode;this.onKeyPress(e);}}}else{if(dojo.isMoz){if(e.keyCode==dojo.keys.TAB&&!e.shiftKey&&!e.ctrlKey&&!e.altKey&&this.iframe){this.iframe.contentDocument.title=this._localizedIframeTitles.iframeFocusTitle;this.iframe.focus();dojo.stopEvent(e);}else{if(e.keyCode==dojo.keys.TAB&&e.shiftKey){if(this.toolbar){this.toolbar.focus();}dojo.stopEvent(e);}}}}},onKeyUp:function(e){return;},KEY_CTRL:1,KEY_SHIFT:2,onKeyPress:function(e){var _19f=e.ctrlKey?this.KEY_CTRL:0|e.shiftKey?this.KEY_SHIFT:0;var key=e.keyChar||e.keyCode;if(this._keyHandlers[key]){var _1a1=this._keyHandlers[key],i=0,h;while((h=_1a1[i++])){if(_19f==h.modifiers){if(!h.handler.apply(this,arguments)){e.preventDefault();}break;}}}setTimeout(dojo.hitch(this,function(){this.onKeyPressed(e);}),1);},addKeyHandler:function(key,_1a5,_1a6){if(!dojo.isArray(this._keyHandlers[key])){this._keyHandlers[key]=[];}this._keyHandlers[key].push({modifiers:_1a5||0,handler:_1a6});},onKeyPressed:function(e){this.onDisplayChanged();},onClick:function(e){this.onDisplayChanged(e);},_onBlur:function(e){var _c=this.getValue(true);if(_c!=this.savedContent){this.onChange(_c);this.savedContent=_c;}if(dojo.isMoz&&this.iframe){this.iframe.contentDocument.title=this._localizedIframeTitles.iframeEditTitle;}},_initialFocus:true,_onFocus:function(e){if((dojo.isMoz)&&(this._initialFocus)){this._initialFocus=false;if(this.editNode.innerHTML.replace(/^\s+|\s+$/g,"")=="&nbsp;"){this.placeCursorAtStart();}}},blur:function(){if(this.iframe){this.window.blur();}else{if(this.editNode){this.editNode.blur();}}},focus:function(){if(this.iframe&&!dojo.isIE){dijit.focus(this.iframe);}else{if(this.editNode&&this.editNode.focus){dijit.focus(this.editNode);}else{console.debug("Have no idea how to focus into the editor!");}}},updateInterval:200,_updateTimer:null,onDisplayChanged:function(e){if(!this._updateTimer){if(this._updateTimer){clearTimeout(this._updateTimer);}this._updateTimer=setTimeout(dojo.hitch(this,this.onNormalizedDisplayChanged),this.updateInterval);}},onNormalizedDisplayChanged:function(){this._updateTimer=null;},onChange:function(_1ad){},_normalizeCommand:function(cmd){var _1af=cmd.toLowerCase();if(_1af=="formatblock"){if(dojo.isSafari){_1af="heading";}}else{if(_1af=="hilitecolor"&&!dojo.isMoz){_1af="backcolor";}}return _1af;},queryCommandAvailable:function(_1b0){var ie=1;var _1b2=1<<1;var _1b3=1<<2;var _1b4=1<<3;var _1b5=1<<4;var _1b6=dojo.isSafari;function isSupportedBy(_1b7){return {ie:Boolean(_1b7&ie),mozilla:Boolean(_1b7&_1b2),safari:Boolean(_1b7&_1b3),safari420:Boolean(_1b7&_1b5),opera:Boolean(_1b7&_1b4)};};var _1b8=null;switch(_1b0.toLowerCase()){case "bold":case "italic":case "underline":case "subscript":case "superscript":case "fontname":case "fontsize":case "forecolor":case "hilitecolor":case "justifycenter":case "justifyfull":case "justifyleft":case "justifyright":case "delete":case "selectall":_1b8=isSupportedBy(_1b2|ie|_1b3|_1b4);break;case "createlink":case "unlink":case "removeformat":case "inserthorizontalrule":case "insertimage":case "insertorderedlist":case "insertunorderedlist":case "indent":case "outdent":case "formatblock":case "inserthtml":case "undo":case "redo":case "strikethrough":_1b8=isSupportedBy(_1b2|ie|_1b4|_1b5);break;case "blockdirltr":case "blockdirrtl":case "dirltr":case "dirrtl":case "inlinedirltr":case "inlinedirrtl":_1b8=isSupportedBy(ie);break;case "cut":case "copy":case "paste":_1b8=isSupportedBy(ie|_1b2|_1b5);break;case "inserttable":_1b8=isSupportedBy(_1b2|ie);break;case "insertcell":case "insertcol":case "insertrow":case "deletecells":case "deletecols":case "deleterows":case "mergecells":case "splitcell":_1b8=isSupportedBy(ie|_1b2);break;default:return false;}return (dojo.isIE&&_1b8.ie)||(dojo.isMoz&&_1b8.mozilla)||(dojo.isSafari&&_1b8.safari)||(_1b6&&_1b8.safari420)||(dojo.isOpera&&_1b8.opera);},execCommand:function(_1b9,_1ba){var _1bb;this.focus();_1b9=this._normalizeCommand(_1b9);if(_1ba!=undefined){if(_1b9=="heading"){throw new Error("unimplemented");}else{if((_1b9=="formatblock")&&dojo.isIE){_1ba="<"+_1ba+">";}}}if(_1b9=="inserthtml"){_1ba=this._preFilterContent(_1ba);if(dojo.isIE){var _1bc=this.document.selection.createRange();_1bc.pasteHTML(_1ba);_1bc.select();_1bb=true;}else{if(dojo.isMoz&&!_1ba.length){dojo.withGlobal(this.window,"remove",dijit._editor.selection);_1bb=true;}else{_1bb=this.document.execCommand(_1b9,false,_1ba);}}}else{if((_1b9=="unlink")&&(this.queryCommandEnabled("unlink"))&&(dojo.isMoz||dojo.isSafari)){var _1bd=this.window.getSelection();var a=dojo.withGlobal(this.window,"getAncestorElement",dijit._editor.selection,["a"]);dojo.withGlobal(this.window,"selectElement",dijit._editor.selection,[a]);_1bb=this.document.execCommand("unlink",false,null);}else{if((_1b9=="hilitecolor")&&(dojo.isMoz)){this.document.execCommand("styleWithCSS",false,true);_1bb=this.document.execCommand(_1b9,false,_1ba);this.document.execCommand("styleWithCSS",false,false);}else{if((dojo.isIE)&&((_1b9=="backcolor")||(_1b9=="forecolor"))){_1ba=arguments.length>1?_1ba:null;_1bb=this.document.execCommand(_1b9,false,_1ba);}else{_1ba=arguments.length>1?_1ba:null;if(_1ba||_1b9!="createlink"){_1bb=this.document.execCommand(_1b9,false,_1ba);}}}}}this.onDisplayChanged();return _1bb;},queryCommandEnabled:function(_1bf){_1bf=this._normalizeCommand(_1bf);if(dojo.isMoz||dojo.isSafari){if(_1bf=="unlink"){return dojo.withGlobal(this.window,"hasAncestorElement",dijit._editor.selection,["a"]);}else{if(_1bf=="inserttable"){return true;}}}if(dojo.isSafari){if(_1bf=="copy"){_1bf="cut";}else{if(_1bf=="paste"){return true;}}}var elem=(dojo.isIE)?this.document.selection.createRange():this.document;return elem.queryCommandEnabled(_1bf);},queryCommandState:function(_1c1){_1c1=this._normalizeCommand(_1c1);return this.document.queryCommandState(_1c1);},queryCommandValue:function(_1c2){_1c2=this._normalizeCommand(_1c2);if(dojo.isIE&&_1c2=="formatblock"){return this._local2NativeFormatNames[this.document.queryCommandValue(_1c2)];}return this.document.queryCommandValue(_1c2);},placeCursorAtStart:function(){this.focus();var _1c3=false;if(dojo.isMoz){var _1c4=this.editNode.firstChild;while(_1c4){if(_1c4.nodeType==3){if(_1c4.nodeValue.replace(/^\s+|\s+$/g,"").length>0){_1c3=true;dojo.withGlobal(this.window,"selectElement",dijit._editor.selection,[_1c4]);break;}}else{if(_1c4.nodeType==1){_1c3=true;dojo.withGlobal(this.window,"selectElementChildren",dijit._editor.selection,[_1c4]);break;}}_1c4=_1c4.nextSibling;}}else{_1c3=true;dojo.withGlobal(this.window,"selectElementChildren",dijit._editor.selection,[this.editNode]);}if(_1c3){dojo.withGlobal(this.window,"collapse",dijit._editor.selection,[true]);}},placeCursorAtEnd:function(){this.focus();var _1c5=false;if(dojo.isMoz){var last=this.editNode.lastChild;while(last){if(last.nodeType==3){if(last.nodeValue.replace(/^\s+|\s+$/g,"").length>0){_1c5=true;dojo.withGlobal(this.window,"selectElement",dijit._editor.selection,[last]);break;}}else{if(last.nodeType==1){_1c5=true;if(last.lastChild){dojo.withGlobal(this.window,"selectElement",dijit._editor.selection,[last.lastChild]);}else{dojo.withGlobal(this.window,"selectElement",dijit._editor.selection,[last]);}break;}}last=last.previousSibling;}}else{_1c5=true;dojo.withGlobal(this.window,"selectElementChildren",dijit._editor.selection,[this.editNode]);}if(_1c5){dojo.withGlobal(this.window,"collapse",dijit._editor.selection,[false]);}},getValue:function(_1c7){if(this.textarea){if(this.isClosed||!this.isLoaded){return this.textarea.value;}}return this._postFilterContent(null,_1c7);},setValue:function(html){if(this.textarea&&(this.isClosed||!this.isLoaded)){this.textarea.value=html;}else{html=this._preFilterContent(html);if(this.isClosed){this.domNode.innerHTML=html;this._preDomFilterContent(this.domNode);}else{this.editNode.innerHTML=html;this._preDomFilterContent(this.editNode);}}},replaceValue:function(html){if(this.isClosed){this.setValue(html);}else{if(this.window&&this.window.getSelection&&!dojo.isMoz){this.setValue(html);}else{if(this.window&&this.window.getSelection){html=this._preFilterContent(html);this.execCommand("selectall");if(dojo.isMoz&&!html){html="&nbsp;";}this.execCommand("inserthtml",html);this._preDomFilterContent(this.editNode);}else{if(this.document&&this.document.selection){this.setValue(html);}}}}},_preFilterContent:function(html){var ec=html;dojo.forEach(this.contentPreFilters,function(ef){if(ef){ec=ef(ec);}});return ec;},_preDomFilterContent:function(dom){dom=dom||this.editNode;dojo.forEach(this.contentDomPreFilters,function(ef){if(ef&&dojo.isFunction(ef)){ef(dom);}},this);},_postFilterContent:function(dom,_1d0){dom=dom||this.editNode;if(this.contentDomPostFilters.length){if(_1d0&&dom["cloneNode"]){dom=dom.cloneNode(true);}dojo.forEach(this.contentDomPostFilters,function(ef){dom=ef(dom);});}var ec=this.getNodeChildrenHtml(dom);if(!ec.replace(/^(?:\s|\xA0)+/g,"").replace(/(?:\s|\xA0)+$/g,"").length){ec="";}dojo.forEach(this.contentPostFilters,function(ef){ec=ef(ec);});return ec;},_saveContent:function(e){var _1d5=dojo.byId("dijit._editor.RichText.savedContent");_1d5.value+=this._SEPARATOR+this.name+":"+this.getValue();},escapeXml:function(str,_1d7){str=str.replace(/&/gm,"&amp;").replace(/</gm,"&lt;").replace(/>/gm,"&gt;").replace(/"/gm,"&quot;");if(!_1d7){str=str.replace(/'/gm,"&#39;");}return str;},getNodeHtml:function(node){switch(node.nodeType){case 1:var _1d9="<"+node.tagName.toLowerCase();if(dojo.isMoz){if(node.getAttribute("type")=="_moz"){node.removeAttribute("type");}if(node.getAttribute("_moz_dirty")!=undefined){node.removeAttribute("_moz_dirty");}}var _1da=[];if(dojo.isIE){var s=node.outerHTML;s=s.substr(0,s.indexOf(">"));s=s.replace(/(?:['"])[^"']*\1/g,"");var reg=/([^\s=]+)=/g;var m,key;while((m=reg.exec(s))!=undefined){key=m[1];if(key.substr(0,3)!="_dj"){if(key=="src"||key=="href"){if(node.getAttribute("_djrealurl")){_1da.push([key,node.getAttribute("_djrealurl")]);continue;}}if(key=="class"){_1da.push([key,node.className]);}else{_1da.push([key,node.getAttribute(key)]);}}}}else{var attr,i=0,_1e1=node.attributes;while((attr=_1e1[i++])){if(attr.name.substr(0,3)!="_dj"){var v=attr.value;if(attr.name=="src"||attr.name=="href"){if(node.getAttribute("_djrealurl")){v=node.getAttribute("_djrealurl");}}_1da.push([attr.name,v]);}}}_1da.sort(function(a,b){return a[0]<b[0]?-1:(a[0]==b[0]?0:1);});i=0;while((attr=_1da[i++])){_1d9+=" "+attr[0]+"=\""+attr[1]+"\"";}if(node.childNodes.length){_1d9+=">"+this.getNodeChildrenHtml(node)+"</"+node.tagName.toLowerCase()+">";}else{_1d9+=" />";}break;case 3:var _1d9=this.escapeXml(node.nodeValue,true);break;case 8:var _1d9="<!--"+this.escapeXml(node.nodeValue,true)+"-->";break;default:var _1d9="Element not recognized - Type: "+node.nodeType+" Name: "+node.nodeName;}return _1d9;},getNodeChildrenHtml:function(dom){var out="";if(!dom){return out;}var _1e7=dom["childNodes"]||dom;var i=0;var node;while((node=_1e7[i++])){out+=this.getNodeHtml(node);}return out;},close:function(save,_1eb){if(this.isClosed){return false;}if(!arguments.length){save=true;}this._content=this.getValue();var _1ec=(this.savedContent!=this._content);if(this.interval){clearInterval(this.interval);}if(this.textarea){with(this.textarea.style){position="";left=top="";if(dojo.isIE){overflow=this.__overflow;this.__overflow=null;}}if(save){this.textarea.value=this._content;}else{this.textarea.value=this.savedContent;}dojo._destroyElement(this.domNode);this.domNode=this.textarea;}else{if(save){this.domNode.innerHTML=this._content;}else{this.domNode.innerHTML=this.savedContent;}}dojo.removeClass(this.domNode,"RichTextEditable");this.isClosed=true;this.isLoaded=false;delete this.editNode;if(this.window&&this.window._frameElement){this.window._frameElement=null;}this.window=null;this.document=null;this.editingArea=null;this.editorObject=null;return _1ec;},destroyRendering:function(){},destroy:function(){this.destroyRendering();if(!this.isClosed){this.close(false);}this.inherited("destroy",arguments);},_fixContentForMoz:function(html){html=html.replace(/<(\/)?strong([ \>])/gi,"<$1b$2");html=html.replace(/<(\/)?em([ \>])/gi,"<$1i$2");return html;},_srcInImgRegex:/(?:(<img(?=\s).*?\ssrc=)("|')(.*?)\2)|(?:(<img\s.*?src=)([^"'][^ >]+))/gi,_hrefInARegex:/(?:(<a(?=\s).*?\shref=)("|')(.*?)\2)|(?:(<a\s.*?href=)([^"'][^ >]+))/gi,_preFixUrlAttributes:function(html){html=html.replace(this._hrefInARegex,"$1$4$2$3$5$2 _djrealurl=$2$3$5$2");html=html.replace(this._srcInImgRegex,"$1$4$2$3$5$2 _djrealurl=$2$3$5$2");return html;}});}if(!dojo._hasResource["dijit.Toolbar"]){dojo._hasResource["dijit.Toolbar"]=true;dojo.provide("dijit.Toolbar");dojo.declare("dijit.Toolbar",[dijit._Widget,dijit._Templated,dijit._KeyNavContainer],{templateString:"<div class=\"dijit dijitToolbar\" waiRole=\"toolbar\" tabIndex=\"${tabIndex}\" dojoAttachPoint=\"containerNode\">"+"</div>",tabIndex:"0",postCreate:function(){this.connectKeyNavHandlers(this.isLeftToRight()?[dojo.keys.LEFT_ARROW]:[dojo.keys.RIGHT_ARROW],this.isLeftToRight()?[dojo.keys.RIGHT_ARROW]:[dojo.keys.LEFT_ARROW]);},startup:function(){this.startupKeyNavChildren();}});dojo.declare("dijit.ToolbarSeparator",[dijit._Widget,dijit._Templated],{templateString:"<div class=\"dijitToolbarSeparator dijitInline\"></div>",postCreate:function(){dojo.setSelectable(this.domNode,false);},isFocusable:function(){return false;}});}if(!dojo._hasResource["dijit.form.Button"]){dojo._hasResource["dijit.form.Button"]=true;dojo.provide("dijit.form.Button");dojo.declare("dijit.form.Button",dijit.form._FormWidget,{label:"",showLabel:true,iconClass:"",type:"button",baseClass:"dijitButton",templateString:"<div class=\"dijit dijitLeft dijitInline dijitButton\"\n\tdojoAttachEvent=\"onclick:_onButtonClick,onmouseenter:_onMouse,onmouseleave:_onMouse,onmousedown:_onMouse\"\n\t><div class='dijitRight'\n\t\t><button class=\"dijitStretch dijitButtonNode dijitButtonContents\" dojoAttachPoint=\"focusNode,titleNode\"\n\t\t\ttype=\"${type}\" waiRole=\"button\" waiState=\"labelledby-${id}_label\"\n\t\t\t><span class=\"dijitInline ${iconClass}\" dojoAttachPoint=\"iconNode\" \n \t\t\t\t><span class=\"dijitToggleButtonIconChar\">&#10003</span \n\t\t\t></span\n\t\t\t><span class=\"dijitButtonText\" id=\"${id}_label\" dojoAttachPoint=\"containerNode\">${label}</span\n\t\t></button\n\t></div\n></div>\n",_onClick:function(e){if(this.disabled){return false;}this._clicked();return this.onClick(e);},_onButtonClick:function(e){dojo.stopEvent(e);var _1f1=this._onClick(e)!==false;if(this.type=="submit"&&_1f1){for(var node=this.domNode;node;node=node.parentNode){var _1f3=dijit.byNode(node);if(_1f3&&_1f3._onSubmit){_1f3._onSubmit(e);break;}if(node.tagName.toLowerCase()=="form"){if(!node.onsubmit||node.onsubmit()){node.submit();}break;}}}},postCreate:function(){if(this.showLabel==false){var _1f4="";this.label=this.containerNode.innerHTML;_1f4=dojo.trim(this.containerNode.innerText||this.containerNode.textContent);this.titleNode.title=_1f4;dojo.addClass(this.containerNode,"dijitDisplayNone");}this.inherited(arguments);},onClick:function(e){return true;},_clicked:function(e){},setLabel:function(_1f7){this.containerNode.innerHTML=this.label=_1f7;if(dojo.isMozilla){var _1f8=dojo.getComputedStyle(this.domNode).display;this.domNode.style.display="none";var _1f9=this;setTimeout(function(){_1f9.domNode.style.display=_1f8;},1);}if(this.showLabel==false){this.titleNode.title=dojo.trim(this.containerNode.innerText||this.containerNode.textContent);}}});dojo.declare("dijit.form.DropDownButton",[dijit.form.Button,dijit._Container],{baseClass:"dijitDropDownButton",templateString:"<div class=\"dijit dijitLeft dijitInline\"\n\tdojoAttachEvent=\"onmouseenter:_onMouse,onmouseleave:_onMouse,onmousedown:_onMouse,onclick:_onDropDownClick,onkeydown:_onDropDownKeydown,onblur:_onDropDownBlur,onkeypress:_onKey\"\n\t><div class='dijitRight'>\n\t<button class=\"dijitStretch dijitButtonNode dijitButtonContents\" type=\"${type}\"\n\t\tdojoAttachPoint=\"focusNode,titleNode\" waiRole=\"button\" waiState=\"haspopup-true,labelledby-${id}_label\"\n\t\t><div class=\"dijitInline ${iconClass}\" dojoAttachPoint=\"iconNode\"></div\n\t\t><span class=\"dijitButtonText\" \tdojoAttachPoint=\"containerNode,popupStateNode\"\n\t\tid=\"${id}_label\">${label}</span\n\t\t><span class='dijitA11yDownArrow'>&#9660;</span>\n\t</button>\n</div></div>\n",_fillContent:function(){if(this.srcNodeRef){var _1fa=dojo.query("*",this.srcNodeRef);dijit.form.DropDownButton.superclass._fillContent.call(this,_1fa[0]);this.dropDownContainer=this.srcNodeRef;}},startup:function(){if(!this.dropDown){var _1fb=dojo.query("[widgetId]",this.dropDownContainer)[0];this.dropDown=dijit.byNode(_1fb);delete this.dropDownContainer;}dojo.body().appendChild(this.dropDown.domNode);this.dropDown.domNode.style.display="none";},_onArrowClick:function(e){if(this.disabled){return;}this._toggleDropDown();},_onDropDownClick:function(e){var _1fe=dojo.isFF&&dojo.isFF<3&&navigator.appVersion.indexOf("Macintosh")!=-1;if(!_1fe||e.detail!=0||this._seenKeydown){this._onArrowClick(e);}this._seenKeydown=false;},_onDropDownKeydown:function(e){this._seenKeydown=true;},_onDropDownBlur:function(e){this._seenKeydown=false;},_onKey:function(e){if(this.disabled){return;}if(e.keyCode==dojo.keys.DOWN_ARROW){if(!this.dropDown||this.dropDown.domNode.style.display=="none"){dojo.stopEvent(e);return this._toggleDropDown();}}},_onBlur:function(){this._closeDropDown();},_toggleDropDown:function(){if(this.disabled){return;}dijit.focus(this.popupStateNode);var _202=this.dropDown;if(!_202){return false;}if(!_202.isShowingNow){if(_202.href&&!_202.isLoaded){var self=this;var _204=dojo.connect(_202,"onLoad",function(){dojo.disconnect(_204);self._openDropDown();});_202._loadCheck(true);return;}else{this._openDropDown();}}else{this._closeDropDown();}},_openDropDown:function(){var _205=this.dropDown;var _206=_205.domNode.style.width;var self=this;dijit.popup.open({parent:this,popup:_205,around:this.domNode,orient:this.isLeftToRight()?{"BL":"TL","BR":"TR","TL":"BL","TR":"BR"}:{"BR":"TR","BL":"TL","TR":"BR","TL":"BL"},onExecute:function(){self._closeDropDown(true);},onCancel:function(){self._closeDropDown(true);},onClose:function(){_205.domNode.style.width=_206;self.popupStateNode.removeAttribute("popupActive");this._opened=false;}});if(this.domNode.offsetWidth>_205.domNode.offsetWidth){var _208=null;if(!this.isLeftToRight()){_208=_205.domNode.parentNode;var _209=_208.offsetLeft+_208.offsetWidth;}dojo.marginBox(_205.domNode,{w:this.domNode.offsetWidth});if(_208){_208.style.left=_209-this.domNode.offsetWidth+"px";}}this.popupStateNode.setAttribute("popupActive","true");this._opened=true;if(_205.focus){_205.focus();}},_closeDropDown:function(_20a){if(this._opened){dijit.popup.close(this.dropDown);if(_20a){this.focus();}this._opened=false;}}});dojo.declare("dijit.form.ComboButton",dijit.form.DropDownButton,{templateString:"<table class='dijit dijitReset dijitInline dijitLeft'\n\tcellspacing='0' cellpadding='0'\n\tdojoAttachEvent=\"onmouseenter:_onMouse,onmouseleave:_onMouse,onmousedown:_onMouse\">\n\t<tr>\n\t\t<td\tclass=\"dijitStretch dijitButtonContents dijitButtonNode\"\n\t\t\ttabIndex=\"${tabIndex}\"\n\t\t\tdojoAttachEvent=\"ondijitclick:_onButtonClick\" dojoAttachPoint=\"titleNode\"\n\t\t\twaiRole=\"button\" waiState=\"labelledby-${id}_label\">\n\t\t\t<div class=\"dijitInline ${iconClass}\" dojoAttachPoint=\"iconNode\"></div>\n\t\t\t<span class=\"dijitButtonText\" id=\"${id}_label\" dojoAttachPoint=\"containerNode\">${label}</span>\n\t\t</td>\n\t\t<td class='dijitReset dijitRight dijitButtonNode dijitDownArrowButton'\n\t\t\tdojoAttachPoint=\"popupStateNode,focusNode\"\n\t\t\tdojoAttachEvent=\"ondijitclick:_onArrowClick, onkeypress:_onKey\"\n\t\t\tstateModifier=\"DownArrow\"\n\t\t\ttitle=\"${optionsTitle}\" name=\"${name}\"\n\t\t\twaiRole=\"button\" waiState=\"haspopup-true\"\n\t\t><div waiRole=\"presentation\">&#9660;</div>\n\t</td></tr>\n</table>\n",attributeMap:dojo.mixin(dojo.clone(dijit.form._FormWidget.prototype.attributeMap),{id:"",name:""}),optionsTitle:"",baseClass:"dijitComboButton",_focusedNode:null,postCreate:function(){this.inherited(arguments);this._focalNodes=[this.titleNode,this.popupStateNode];dojo.forEach(this._focalNodes,dojo.hitch(this,function(node){if(dojo.isIE){this.connect(node,"onactivate",this._onNodeFocus);}else{this.connect(node,"onfocus",this._onNodeFocus);}}));},focusFocalNode:function(node){this._focusedNode=node;dijit.focus(node);},hasNextFocalNode:function(){return this._focusedNode!==this.getFocalNodes()[1];},focusNext:function(){this._focusedNode=this.getFocalNodes()[this._focusedNode?1:0];dijit.focus(this._focusedNode);},hasPrevFocalNode:function(){return this._focusedNode!==this.getFocalNodes()[0];},focusPrev:function(){this._focusedNode=this.getFocalNodes()[this._focusedNode?0:1];dijit.focus(this._focusedNode);},getFocalNodes:function(){return this._focalNodes;},_onNodeFocus:function(evt){this._focusedNode=evt.currentTarget;},_onBlur:function(evt){this.inherited(arguments);this._focusedNode=null;}});dojo.declare("dijit.form.ToggleButton",dijit.form.Button,{baseClass:"dijitToggleButton",checked:false,_clicked:function(evt){this.setChecked(!this.checked);},setChecked:function(_210){this.checked=_210;dijit.setWaiState(this.focusNode||this.domNode,"pressed",this.checked);this._setStateClass();this.onChange(_210);}});}if(!dojo._hasResource["dijit._editor._Plugin"]){dojo._hasResource["dijit._editor._Plugin"]=true;dojo.provide("dijit._editor._Plugin");dojo.declare("dijit._editor._Plugin",null,{constructor:function(args,node){if(args){dojo.mixin(this,args);}},editor:null,iconClassPrefix:"dijitEditorIcon",button:null,queryCommand:null,command:"",commandArg:null,useDefaultCommand:true,buttonClass:dijit.form.Button,updateInterval:200,_initButton:function(){if(this.command.length){var _213=this.editor.commands[this.command];var _214="dijitEditorIcon "+this.iconClassPrefix+this.command.charAt(0).toUpperCase()+this.command.substr(1);if(!this.button){var _215={label:_213,showLabel:false,iconClass:_214,dropDown:this.dropDown};this.button=new this.buttonClass(_215);}}},updateState:function(){var _e=this.editor;var _c=this.command;if(!_e){return;}if(!_e.isLoaded){return;}if(!_c.length){return;}if(this.button){try{var _218=_e.queryCommandEnabled(_c);this.button.setDisabled(!_218);if(this.button.setChecked){this.button.setChecked(_e.queryCommandState(_c));}}catch(e){console.debug(e);}}},setEditor:function(_219){this.editor=_219;this._initButton();if((this.command.length)&&(!this.editor.queryCommandAvailable(this.command))){if(this.button){this.button.domNode.style.display="none";}}if(this.button&&this.useDefaultCommand){dojo.connect(this.button,"onClick",dojo.hitch(this.editor,"execCommand",this.command,this.commandArg));}dojo.connect(this.editor,"onNormalizedDisplayChanged",this,"updateState");},setToolbar:function(_21a){if(this.button){_21a.addChild(this.button);}}});}if(!dojo._hasResource["dijit.Editor"]){dojo._hasResource["dijit.Editor"]=true;dojo.provide("dijit.Editor");dojo.declare("dijit.Editor",dijit._editor.RichText,{plugins:null,extraPlugins:null,constructor:function(){this.plugins=["undo","redo","|","cut","copy","paste","|","bold","italic","underline","strikethrough","|","insertOrderedList","insertUnorderedList","indent","outdent","|","justifyLeft","justifyRight","justifyCenter","justifyFull"];this._plugins=[];this._editInterval=this.editActionInterval*1000;},postCreate:function(){if(this.customUndo){dojo["require"]("dijit._editor.range");this._steps=this._steps.slice(0);this._undoedSteps=this._undoedSteps.slice(0);}if(dojo.isArray(this.extraPlugins)){this.plugins=this.plugins.concat(this.extraPlugins);}dijit.Editor.superclass.postCreate.apply(this,arguments);this.commands=dojo.i18n.getLocalization("dijit._editor","commands",this.lang);if(!this.toolbar){var _21b=dojo.doc.createElement("div");dojo.place(_21b,this.editingArea,"before");this.toolbar=new dijit.Toolbar({},_21b);}dojo.forEach(this.plugins,this.addPlugin,this);this.onNormalizedDisplayChanged();},destroy:function(){dojo.forEach(this._plugins,function(p){if(p.destroy){p.destroy();}});this._plugins=[];this.toolbar.destroy();delete this.toolbar;this.inherited("destroy",arguments);},addPlugin:function(_21d,_21e){var args=dojo.isString(_21d)?{name:_21d}:_21d;if(!args.setEditor){var o={"args":args,"plugin":null,"editor":this};dojo.publish("dijit.Editor.getPlugin",[o]);if(!o.plugin){var pc=dojo.getObject(args.name);if(pc){o.plugin=new pc(args);}}if(!o.plugin){console.debug("Cannot find plugin",_21d);return;}_21d=o.plugin;}if(arguments.length>1){this._plugins[_21e]=_21d;}else{this._plugins.push(_21d);}_21d.setEditor(this);if(dojo.isFunction(_21d.setToolbar)){_21d.setToolbar(this.toolbar);}},customUndo:dojo.isIE,editActionInterval:3,beginEditing:function(cmd){if(!this._inEditing){this._inEditing=true;this._beginEditing(cmd);}if(this.editActionInterval>0){if(this._editTimer){clearTimeout(this._editTimer);}this._editTimer=setTimeout(dojo.hitch(this,this.endEditing),this._editInterval);}},_steps:[],_undoedSteps:[],execCommand:function(cmd){if(this.customUndo&&(cmd=="undo"||cmd=="redo")){return this[cmd]();}else{try{if(this.customUndo){this.endEditing();this._beginEditing();}var r=this.inherited("execCommand",arguments);if(this.customUndo){this._endEditing();}return r;}catch(e){if(dojo.isMoz&&/copy|cut|paste/.test(cmd)){var sub=dojo.string.substitute,_226={cut:"X",copy:"C",paste:"V"},_227=navigator.userAgent.indexOf("Macintosh")!=-1;alert(sub(this.commands.systemShortcutFF,[this.commands[cmd],sub(this.commands[_227?"appleKey":"ctrlKey"],[_226[cmd]])]));}return false;}}},queryCommandEnabled:function(cmd){if(this.customUndo&&(cmd=="undo"||cmd=="redo")){return cmd=="undo"?(this._steps.length>1):(this._undoedSteps.length>0);}else{return this.inherited("queryCommandEnabled",arguments);}},_changeToStep:function(from,to){this.setValue(to.text);var b=to.bookmark;if(!b){return;}if(dojo.isIE){if(dojo.isArray(b)){var tmp=[];dojo.forEach(b,function(n){tmp.push(dijit.range.getNode(n,this.editNode));},this);b=tmp;}}else{var r=dijit.range.create();r.setStart(dijit.range.getNode(b.startContainer,this.editNode),b.startOffset);r.setEnd(dijit.range.getNode(b.endContainer,this.editNode),b.endOffset);b=r;}dojo.withGlobal(this.window,"moveToBookmark",dijit,[b]);},undo:function(){this.endEditing(true);var s=this._steps.pop();if(this._steps.length>0){this.focus();this._changeToStep(s,this._steps[this._steps.length-1]);this._undoedSteps.push(s);this.onDisplayChanged();return true;}return false;},redo:function(){this.endEditing(true);var s=this._undoedSteps.pop();if(s&&this._steps.length>0){this.focus();this._changeToStep(this._steps[this._steps.length-1],s);this._steps.push(s);this.onDisplayChanged();return true;}return false;},endEditing:function(_231){if(this._editTimer){clearTimeout(this._editTimer);}if(this._inEditing){this._endEditing(_231);this._inEditing=false;}},_getBookmark:function(){var b=dojo.withGlobal(this.window,dijit.getBookmark);if(dojo.isIE){if(dojo.isArray(b)){var tmp=[];dojo.forEach(b,function(n){tmp.push(dijit.range.getIndex(n,this.editNode).o);},this);b=tmp;}}else{var tmp=dijit.range.getIndex(b.startContainer,this.editNode).o;b={startContainer:tmp,startOffset:b.startOffset,endContainer:b.endContainer===b.startContainer?tmp:dijit.range.getIndex(b.endContainer,this.editNode).o,endOffset:b.endOffset};}return b;},_beginEditing:function(cmd){if(this._steps.length===0){this._steps.push({"text":this.savedContent,"bookmark":this._getBookmark()});}},_endEditing:function(_236){var v=this.getValue(true);this._undoedSteps=[];this._steps.push({"text":v,"bookmark":this._getBookmark()});},onKeyDown:function(e){if(!this.customUndo){this.inherited("onKeyDown",arguments);return;}var k=e.keyCode,ks=dojo.keys;if(e.ctrlKey){if(k===90||k===122){dojo.stopEvent(e);this.undo();return;}else{if(k===89||k===121){dojo.stopEvent(e);this.redo();return;}}}this.inherited("onKeyDown",arguments);switch(k){case ks.ENTER:this.beginEditing();break;case ks.BACKSPACE:case ks.DELETE:this.beginEditing();break;case 88:case 86:if(e.ctrlKey&&!e.altKey&&!e.metaKey){this.endEditing();if(e.keyCode==88){this.beginEditing("cut");setTimeout(dojo.hitch(this,this.endEditing),1);}else{this.beginEditing("paste");setTimeout(dojo.hitch(this,this.endEditing),1);}break;}default:if(!e.ctrlKey&&!e.altKey&&!e.metaKey&&(e.keyCode<dojo.keys.F1||e.keyCode>dojo.keys.F15)){this.beginEditing();break;}case ks.ALT:this.endEditing();break;case ks.UP_ARROW:case ks.DOWN_ARROW:case ks.LEFT_ARROW:case ks.RIGHT_ARROW:case ks.HOME:case ks.END:case ks.PAGE_UP:case ks.PAGE_DOWN:this.endEditing(true);break;case ks.CTRL:case ks.SHIFT:case ks.TAB:break;}},_onBlur:function(){this.inherited("_onBlur",arguments);this.endEditing(true);},onClick:function(){this.endEditing(true);this.inherited("onClick",arguments);}});dojo.subscribe("dijit.Editor.getPlugin",null,function(o){if(o.plugin){return;}var args=o.args,p;var _p=dijit._editor._Plugin;var name=args.name;switch(name){case "undo":case "redo":case "cut":case "copy":case "paste":case "insertOrderedList":case "insertUnorderedList":case "indent":case "outdent":case "justifyCenter":case "justifyFull":case "justifyLeft":case "justifyRight":case "delete":case "selectAll":case "removeFormat":p=new _p({command:name});break;case "bold":case "italic":case "underline":case "strikethrough":case "subscript":case "superscript":p=new _p({buttonClass:dijit.form.ToggleButton,command:name});break;case "|":p=new _p({button:new dijit.ToolbarSeparator()});break;case "createLink":p=new dijit._editor.plugins.LinkDialog({command:name});break;case "foreColor":case "hiliteColor":p=new dijit._editor.plugins.TextColor({command:name});break;case "fontName":case "fontSize":case "formatBlock":p=new dijit._editor.plugins.FontChoice({command:name});}o.plugin=p;});}if(!dojo._hasResource["dijit.Menu"]){dojo._hasResource["dijit.Menu"]=true;dojo.provide("dijit.Menu");dojo.declare("dijit.Menu",[dijit._Widget,dijit._Templated,dijit._KeyNavContainer],{constructor:function(){this._bindings=[];},templateString:"<table class=\"dijit dijitMenu dijitReset dijitMenuTable\" waiRole=\"menu\" dojoAttachEvent=\"onkeypress:_onKeyPress\">"+"<tbody class=\"dijitReset\" dojoAttachPoint=\"containerNode\"></tbody>"+"</table>",targetNodeIds:[],contextMenuForWindow:false,parentMenu:null,popupDelay:500,_contextMenuWithMouse:false,postCreate:function(){if(this.contextMenuForWindow){this.bindDomNode(dojo.body());}else{dojo.forEach(this.targetNodeIds,this.bindDomNode,this);}this.connectKeyNavHandlers([dojo.keys.UP_ARROW],[dojo.keys.DOWN_ARROW]);},startup:function(){dojo.forEach(this.getChildren(),function(_240){_240.startup();});this.startupKeyNavChildren();},onExecute:function(){},onCancel:function(_241){},_moveToPopup:function(evt){if(this.focusedChild&&this.focusedChild.popup&&!this.focusedChild.disabled){this.focusedChild._onClick(evt);}},_onKeyPress:function(evt){if(evt.ctrlKey||evt.altKey){return;}switch(evt.keyCode){case dojo.keys.RIGHT_ARROW:this._moveToPopup(evt);dojo.stopEvent(evt);break;case dojo.keys.LEFT_ARROW:if(this.parentMenu){this.onCancel(false);}else{dojo.stopEvent(evt);}break;}},onItemHover:function(item){this.focusChild(item);if(this.focusedChild.popup&&!this.focusedChild.disabled&&!this.hover_timer){this.hover_timer=setTimeout(dojo.hitch(this,"_openPopup"),this.popupDelay);}},_onChildBlur:function(item){dijit.popup.close(item.popup);item._blur();this._stopPopupTimer();},onItemUnhover:function(item){},_stopPopupTimer:function(){if(this.hover_timer){clearTimeout(this.hover_timer);this.hover_timer=null;}},_getTopMenu:function(){for(var top=this;top.parentMenu;top=top.parentMenu){}return top;},onItemClick:function(item){if(item.disabled){return false;}if(item.popup){if(!this.is_open){this._openPopup();}}else{this.onExecute();item.onClick();}},_iframeContentWindow:function(_249){var win=dijit.getDocumentWindow(dijit.Menu._iframeContentDocument(_249))||dijit.Menu._iframeContentDocument(_249)["__parent__"]||(_249.name&&document.frames[_249.name])||null;return win;},_iframeContentDocument:function(_24b){var doc=_24b.contentDocument||(_24b.contentWindow&&_24b.contentWindow.document)||(_24b.name&&document.frames[_24b.name]&&document.frames[_24b.name].document)||null;return doc;},bindDomNode:function(node){node=dojo.byId(node);var win=dijit.getDocumentWindow(node.ownerDocument);if(node.tagName.toLowerCase()=="iframe"){win=this._iframeContentWindow(node);node=dojo.withGlobal(win,dojo.body);}var cn=(node==dojo.body()?dojo.doc:node);node[this.id]=this._bindings.push([dojo.connect(cn,"oncontextmenu",this,"_openMyself"),dojo.connect(cn,"onkeydown",this,"_contextKey"),dojo.connect(cn,"onmousedown",this,"_contextMouse")]);},unBindDomNode:function(_250){var node=dojo.byId(_250);var bid=node[this.id]-1,b=this._bindings[bid];dojo.forEach(b,dojo.disconnect);delete this._bindings[bid];},_contextKey:function(e){this._contextMenuWithMouse=false;if(e.keyCode==dojo.keys.F10){dojo.stopEvent(e);if(e.shiftKey&&e.type=="keydown"){var _e={target:e.target,pageX:e.pageX,pageY:e.pageY};_e.preventDefault=_e.stopPropagation=function(){};window.setTimeout(dojo.hitch(this,function(){this._openMyself(_e);}),1);}}},_contextMouse:function(e){this._contextMenuWithMouse=true;},_openMyself:function(e){dojo.stopEvent(e);var x,y;if(dojo.isSafari||this._contextMenuWithMouse){x=e.pageX;y=e.pageY;}else{var _25a=dojo.coords(e.target,true);x=_25a.x+10;y=_25a.y+10;}var self=this;var _25c=dijit.getFocus(this);function closeAndRestoreFocus(){dijit.focus(_25c);dijit.popup.close(self);};dijit.popup.open({popup:this,x:x,y:y,onExecute:closeAndRestoreFocus,onCancel:closeAndRestoreFocus,orient:this.isLeftToRight()?"L":"R"});this.focus();this._onBlur=function(){dijit.popup.close(this);};},onOpen:function(e){this.isShowingNow=true;},onClose:function(){this._stopPopupTimer();this.parentMenu=null;this.isShowingNow=false;this.currentPopup=null;if(this.focusedChild){this._onChildBlur(this.focusedChild);this.focusedChild=null;}},_openPopup:function(){this._stopPopupTimer();var _25e=this.focusedChild;var _25f=_25e.popup;if(_25f.isShowingNow){return;}_25f.parentMenu=this;var self=this;dijit.popup.open({parent:this,popup:_25f,around:_25e.arrowCell,orient:this.isLeftToRight()?{"TR":"TL","TL":"TR"}:{"TL":"TR","TR":"TL"},onCancel:function(){dijit.popup.close(_25f);_25e.focus();self.currentPopup=null;}});this.currentPopup=_25f;if(_25f.focus){_25f.focus();}}});dojo.declare("dijit.MenuItem",[dijit._Widget,dijit._Templated,dijit._Contained],{templateString:"<tr class=\"dijitReset dijitMenuItem\""+"dojoAttachEvent=\"onmouseenter:_onHover,onmouseleave:_onUnhover,ondijitclick:_onClick\">"+"<td class=\"dijitReset\"><div class=\"dijitMenuItemIcon ${iconClass}\" dojoAttachPoint=\"iconNode\" ></div></td>"+"<td tabIndex=\"-1\" class=\"dijitReset dijitMenuItemLabel\" dojoAttachPoint=\"containerNode\" waiRole=\"menuitem\"></td>"+"<td class=\"dijitReset\" dojoAttachPoint=\"arrowCell\">"+"<div class=\"dijitMenuExpand\" dojoAttachPoint=\"expand\" style=\"display:none\">"+"<span class=\"dijitInline dijitArrowNode dijitMenuExpandInner\">+</span>"+"</div>"+"</td>"+"</tr>",label:"",iconClass:"",disabled:false,postCreate:function(){dojo.setSelectable(this.domNode,false);this.setDisabled(this.disabled);if(this.label){this.containerNode.innerHTML=this.label;}},_onHover:function(){this.getParent().onItemHover(this);},_onUnhover:function(){this.getParent().onItemUnhover(this);},_onClick:function(evt){this.getParent().onItemClick(this);dojo.stopEvent(evt);},onClick:function(){},focus:function(){dojo.addClass(this.domNode,"dijitMenuItemHover");try{dijit.focus(this.containerNode);}catch(e){}},_blur:function(){dojo.removeClass(this.domNode,"dijitMenuItemHover");},setDisabled:function(_262){this.disabled=_262;dojo[_262?"addClass":"removeClass"](this.domNode,"dijitMenuItemDisabled");dijit.setWaiState(this.containerNode,"disabled",_262?"true":"false");}});dojo.declare("dijit.PopupMenuItem",dijit.MenuItem,{_fillContent:function(){if(this.srcNodeRef){var _263=dojo.query("*",this.srcNodeRef);dijit.PopupMenuItem.superclass._fillContent.call(this,_263[0]);this.dropDownContainer=this.srcNodeRef;}},startup:function(){if(!this.popup){var node=dojo.query("[widgetId]",this.dropDownContainer)[0];this.popup=dijit.byNode(node);}dojo.body().appendChild(this.popup.domNode);this.popup.domNode.style.display="none";dojo.addClass(this.expand,"dijitMenuExpandEnabled");dojo.style(this.expand,"display","");dijit.setWaiState(this.containerNode,"haspopup","true");}});dojo.declare("dijit.MenuSeparator",[dijit._Widget,dijit._Templated,dijit._Contained],{templateString:"<tr class=\"dijitMenuSeparator\"><td colspan=3>"+"<div class=\"dijitMenuSeparatorTop\"></div>"+"<div class=\"dijitMenuSeparatorBottom\"></div>"+"</td></tr>",postCreate:function(){dojo.setSelectable(this.domNode,false);},isFocusable:function(){return false;}});}if(!dojo._hasResource["dojo.regexp"]){dojo._hasResource["dojo.regexp"]=true;dojo.provide("dojo.regexp");dojo.regexp.escapeString=function(str,_266){return str.replace(/([\.$?*!=:|{}\(\)\[\]\\\/^])/g,function(ch){if(_266&&_266.indexOf(ch)!=-1){return ch;}return "\\"+ch;});};dojo.regexp.buildGroupRE=function(arr,re,_26a){if(!(arr instanceof Array)){return re(arr);}var b=[];for(var i=0;i<arr.length;i++){b.push(re(arr[i]));}return dojo.regexp.group(b.join("|"),_26a);};dojo.regexp.group=function(_26d,_26e){return "("+(_26e?"?:":"")+_26d+")";};}if(!dojo._hasResource["dojo.number"]){dojo._hasResource["dojo.number"]=true;dojo.provide("dojo.number");dojo.number.format=function(_26f,_270){_270=dojo.mixin({},_270||{});var _271=dojo.i18n.normalizeLocale(_270.locale);var _272=dojo.i18n.getLocalization("dojo.cldr","number",_271);_270.customs=_272;var _273=_270.pattern||_272[(_270.type||"decimal")+"Format"];if(isNaN(_26f)){return null;}return dojo.number._applyPattern(_26f,_273,_270);};dojo.number._numberPatternRE=/[#0,]*[#0](?:\.0*#*)?/;dojo.number._applyPattern=function(_274,_275,_276){_276=_276||{};var _277=_276.customs.group;var _278=_276.customs.decimal;var _279=_275.split(";");var _27a=_279[0];_275=_279[(_274<0)?1:0]||("-"+_27a);if(_275.indexOf("%")!=-1){_274*=100;}else{if(_275.indexOf("‰")!=-1){_274*=1000;}else{if(_275.indexOf("¤")!=-1){_277=_276.customs.currencyGroup||_277;_278=_276.customs.currencyDecimal||_278;_275=_275.replace(/\u00a4{1,3}/,function(_27b){var prop=["symbol","currency","displayName"][_27b.length-1];return _276[prop]||_276.currency||"";});}else{if(_275.indexOf("E")!=-1){throw new Error("exponential notation not supported");}}}}var _27d=dojo.number._numberPatternRE;var _27e=_27a.match(_27d);if(!_27e){throw new Error("unable to find a number expression in pattern: "+_275);}return _275.replace(_27d,dojo.number._formatAbsolute(_274,_27e[0],{decimal:_278,group:_277,places:_276.places}));};dojo.number.round=function(_27f,_280,_281){var _282=String(_27f).split(".");var _283=(_282[1]&&_282[1].length)||0;if(_283>_280){var _284=Math.pow(10,_280);if(_281>0){_284*=10/_281;_280++;}_27f=Math.round(_27f*_284)/_284;_282=String(_27f).split(".");_283=(_282[1]&&_282[1].length)||0;if(_283>_280){_282[1]=_282[1].substr(0,_280);_27f=Number(_282.join("."));}}return _27f;};dojo.number._formatAbsolute=function(_285,_286,_287){_287=_287||{};if(_287.places===true){_287.places=0;}if(_287.places===Infinity){_287.places=6;}var _288=_286.split(".");var _289=(_287.places>=0)?_287.places:(_288[1]&&_288[1].length)||0;if(!(_287.round<0)){_285=dojo.number.round(_285,_289,_287.round);}var _28a=String(Math.abs(_285)).split(".");var _28b=_28a[1]||"";if(_287.places){_28a[1]=dojo.string.pad(_28b.substr(0,_287.places),_287.places,"0",true);}else{if(_288[1]&&_287.places!==0){var pad=_288[1].lastIndexOf("0")+1;if(pad>_28b.length){_28a[1]=dojo.string.pad(_28b,pad,"0",true);}var _28d=_288[1].length;if(_28d<_28b.length){_28a[1]=_28b.substr(0,_28d);}}else{if(_28a[1]){_28a.pop();}}}var _28e=_288[0].replace(",","");pad=_28e.indexOf("0");if(pad!=-1){pad=_28e.length-pad;if(pad>_28a[0].length){_28a[0]=dojo.string.pad(_28a[0],pad);}if(_28e.indexOf("#")==-1){_28a[0]=_28a[0].substr(_28a[0].length-pad);}}var _28f=_288[0].lastIndexOf(",");var _290,_291;if(_28f!=-1){_290=_288[0].length-_28f-1;var _292=_288[0].substr(0,_28f);_28f=_292.lastIndexOf(",");if(_28f!=-1){_291=_292.length-_28f-1;}}var _293=[];for(var _294=_28a[0];_294;){var off=_294.length-_290;_293.push((off>0)?_294.substr(off):_294);_294=(off>0)?_294.slice(0,off):"";if(_291){_290=_291;delete _291;}}_28a[0]=_293.reverse().join(_287.group||",");return _28a.join(_287.decimal||".");};dojo.number.regexp=function(_296){return dojo.number._parseInfo(_296).regexp;};dojo.number._parseInfo=function(_297){_297=_297||{};var _298=dojo.i18n.normalizeLocale(_297.locale);var _299=dojo.i18n.getLocalization("dojo.cldr","number",_298);var _29a=_297.pattern||_299[(_297.type||"decimal")+"Format"];var _29b=_299.group;var _29c=_299.decimal;var _29d=1;if(_29a.indexOf("%")!=-1){_29d/=100;}else{if(_29a.indexOf("‰")!=-1){_29d/=1000;}else{var _29e=_29a.indexOf("¤")!=-1;if(_29e){_29b=_299.currencyGroup||_29b;_29c=_299.currencyDecimal||_29c;}}}var _29f=_29a.split(";");if(_29f.length==1){_29f.push("-"+_29f[0]);}var re=dojo.regexp.buildGroupRE(_29f,function(_2a1){_2a1="(?:"+dojo.regexp.escapeString(_2a1,".")+")";return _2a1.replace(dojo.number._numberPatternRE,function(_2a2){var _2a3={signed:false,separator:_297.strict?_29b:[_29b,""],fractional:_297.fractional,decimal:_29c,exponent:false};var _2a4=_2a2.split(".");var _2a5=_297.places;if(_2a4.length==1||_2a5===0){_2a3.fractional=false;}else{if(typeof _2a5=="undefined"){_2a5=_2a4[1].lastIndexOf("0")+1;}if(_2a5&&_297.fractional==undefined){_2a3.fractional=true;}if(!_297.places&&(_2a5<_2a4[1].length)){_2a5+=","+_2a4[1].length;}_2a3.places=_2a5;}var _2a6=_2a4[0].split(",");if(_2a6.length>1){_2a3.groupSize=_2a6.pop().length;if(_2a6.length>1){_2a3.groupSize2=_2a6.pop().length;}}return "("+dojo.number._realNumberRegexp(_2a3)+")";});},true);if(_29e){re=re.replace(/(\s*)(\u00a4{1,3})(\s*)/g,function(_2a7,_2a8,_2a9,_2aa){var prop=["symbol","currency","displayName"][_2a9.length-1];var _2ac=dojo.regexp.escapeString(_297[prop]||_297.currency||"");_2a8=_2a8?"\\s":"";_2aa=_2aa?"\\s":"";if(!_297.strict){if(_2a8){_2a8+="*";}if(_2aa){_2aa+="*";}return "(?:"+_2a8+_2ac+_2aa+")?";}return _2a8+_2ac+_2aa;});}return {regexp:re.replace(/[\xa0 ]/g,"[\\s\\xa0]"),group:_29b,decimal:_29c,factor:_29d};};dojo.number.parse=function(_2ad,_2ae){var info=dojo.number._parseInfo(_2ae);var _2b0=(new RegExp("^"+info.regexp+"$")).exec(_2ad);if(!_2b0){return NaN;}var _2b1=_2b0[1];if(!_2b0[1]){if(!_2b0[2]){return NaN;}_2b1=_2b0[2];info.factor*=-1;}_2b1=_2b1.replace(new RegExp("["+info.group+"\\s\\xa0"+"]","g"),"").replace(info.decimal,".");return Number(_2b1)*info.factor;};dojo.number._realNumberRegexp=function(_2b2){_2b2=_2b2||{};if(typeof _2b2.places=="undefined"){_2b2.places=Infinity;}if(typeof _2b2.decimal!="string"){_2b2.decimal=".";}if(typeof _2b2.fractional=="undefined"||/^0/.test(_2b2.places)){_2b2.fractional=[true,false];}if(typeof _2b2.exponent=="undefined"){_2b2.exponent=[true,false];}if(typeof _2b2.eSigned=="undefined"){_2b2.eSigned=[true,false];}var _2b3=dojo.number._integerRegexp(_2b2);var _2b4=dojo.regexp.buildGroupRE(_2b2.fractional,function(q){var re="";if(q&&(_2b2.places!==0)){re="\\"+_2b2.decimal;if(_2b2.places==Infinity){re="(?:"+re+"\\d+)?";}else{re+="\\d{"+_2b2.places+"}";}}return re;},true);var _2b7=dojo.regexp.buildGroupRE(_2b2.exponent,function(q){if(q){return "([eE]"+dojo.number._integerRegexp({signed:_2b2.eSigned})+")";}return "";});var _2b9=_2b3+_2b4;if(_2b4){_2b9="(?:(?:"+_2b9+")|(?:"+_2b4+"))";}return _2b9+_2b7;};dojo.number._integerRegexp=function(_2ba){_2ba=_2ba||{};if(typeof _2ba.signed=="undefined"){_2ba.signed=[true,false];}if(typeof _2ba.separator=="undefined"){_2ba.separator="";}else{if(typeof _2ba.groupSize=="undefined"){_2ba.groupSize=3;}}var _2bb=dojo.regexp.buildGroupRE(_2ba.signed,function(q){return q?"[-+]":"";},true);var _2bd=dojo.regexp.buildGroupRE(_2ba.separator,function(sep){if(!sep){return "(?:0|[1-9]\\d*)";}sep=dojo.regexp.escapeString(sep);if(sep==" "){sep="\\s";}else{if(sep==" "){sep="\\s\\xa0";}}var grp=_2ba.groupSize,grp2=_2ba.groupSize2;if(grp2){var _2c1="(?:0|[1-9]\\d{0,"+(grp2-1)+"}(?:["+sep+"]\\d{"+grp2+"})*["+sep+"]\\d{"+grp+"})";return ((grp-grp2)>0)?"(?:"+_2c1+"|(?:0|[1-9]\\d{0,"+(grp-1)+"}))":_2c1;}return "(?:0|[1-9]\\d{0,"+(grp-1)+"}(?:["+sep+"]\\d{"+grp+"})*)";},true);return _2bb+_2bd;};}if(!dojo._hasResource["dijit.ProgressBar"]){dojo._hasResource["dijit.ProgressBar"]=true;dojo.provide("dijit.ProgressBar");dojo.declare("dijit.ProgressBar",[dijit._Widget,dijit._Templated],{progress:"0",maximum:100,places:0,indeterminate:false,templateString:"<div class=\"dijitProgressBar dijitProgressBarEmpty\"\n\t><div waiRole=\"progressbar\" tabindex=\"0\" dojoAttachPoint=\"internalProgress\" class=\"dijitProgressBarFull\"\n\t\t><div class=\"dijitProgressBarTile\"></div\n\t\t><span style=\"visibility:hidden\">&nbsp;</span\n\t></div\n\t><div dojoAttachPoint=\"label\" class=\"dijitProgressBarLabel\" id=\"${id}_label\">&nbsp;</div\n\t><img dojoAttachPoint=\"inteterminateHighContrastImage\" class=\"dijitProgressBarIndeterminateHighContrastImage\"\n\t></img\n></div>\n",_indeterminateHighContrastImagePath:dojo.moduleUrl("dijit","themes/a11y/indeterminate_progress.gif"),postCreate:function(){this.inherited("postCreate",arguments);this.inteterminateHighContrastImage.setAttribute("src",this._indeterminateHighContrastImagePath);this.update();},update:function(_2c2){dojo.mixin(this,_2c2||{});var _2c3=1,_2c4;if(this.indeterminate){_2c4="addClass";dijit.removeWaiState(this.internalProgress,"valuenow");dijit.removeWaiState(this.internalProgress,"valuemin");dijit.removeWaiState(this.internalProgress,"valuemax");}else{_2c4="removeClass";if(String(this.progress).indexOf("%")!=-1){_2c3=Math.min(parseFloat(this.progress)/100,1);this.progress=_2c3*this.maximum;}else{this.progress=Math.min(this.progress,this.maximum);_2c3=this.progress/this.maximum;}var text=this.report(_2c3);this.label.firstChild.nodeValue=text;dijit.setWaiState(this.internalProgress,"describedby",this.label.id);dijit.setWaiState(this.internalProgress,"valuenow",this.progress);dijit.setWaiState(this.internalProgress,"valuemin",0);dijit.setWaiState(this.internalProgress,"valuemax",this.maximum);}dojo[_2c4](this.domNode,"dijitProgressBarIndeterminate");this.internalProgress.style.width=(_2c3*100)+"%";this.onChange();},report:function(_2c6){return dojo.number.format(_2c6,{type:"percent",places:this.places,locale:this.lang});},onChange:function(){}});}if(!dojo._hasResource["dijit.TitlePane"]){dojo._hasResource["dijit.TitlePane"]=true;dojo.provide("dijit.TitlePane");dojo.declare("dijit.TitlePane",[dijit.layout.ContentPane,dijit._Templated],{title:"",open:true,duration:250,baseClass:"dijitTitlePane",templateString:"<div class=\"dijitTitlePane\">\n\t<div dojoAttachEvent=\"onclick:toggle,onkeypress: _onTitleKey,onfocus:_handleFocus,onblur:_handleFocus\" tabindex=\"0\"\n\t\t\twaiRole=\"button\" class=\"dijitTitlePaneTitle\" dojoAttachPoint=\"focusNode\">\n\t\t<div dojoAttachPoint=\"arrowNode\" class=\"dijitInline dijitArrowNode\"><span dojoAttachPoint=\"arrowNodeInner\" class=\"dijitArrowNodeInner\"></span></div>\n\t\t<div dojoAttachPoint=\"titleNode\" class=\"dijitTitlePaneTextNode\"></div>\n\t</div>\n\t<div class=\"dijitTitlePaneContentOuter\" dojoAttachPoint=\"hideNode\">\n\t\t<div class=\"dijitReset\" dojoAttachPoint=\"wipeNode\">\n\t\t\t<div class=\"dijitTitlePaneContentInner\" dojoAttachPoint=\"containerNode\" waiRole=\"region\" tabindex=\"-1\">\n\t\t\t\t<!-- nested divs because wipeIn()/wipeOut() doesn't work right on node w/padding etc. Put padding on inner div. -->\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</div>\n",postCreate:function(){this.setTitle(this.title);if(!this.open){this.hideNode.style.display=this.wipeNode.style.display="none";}this._setCss();dojo.setSelectable(this.titleNode,false);this.inherited("postCreate",arguments);dijit.setWaiState(this.containerNode,"labelledby",this.titleNode.id);dijit.setWaiState(this.focusNode,"haspopup","true");var _2c7=this.hideNode,_2c8=this.wipeNode;this._wipeIn=dojo.fx.wipeIn({node:this.wipeNode,duration:this.duration,beforeBegin:function(){_2c7.style.display="";}});this._wipeOut=dojo.fx.wipeOut({node:this.wipeNode,duration:this.duration,onEnd:function(){_2c7.style.display="none";}});},setContent:function(_2c9){if(this._wipeOut.status()=="playing"){this.inherited("setContent",arguments);}else{if(this._wipeIn.status()=="playing"){this._wipeIn.stop();}dojo.marginBox(this.wipeNode,{h:dojo.marginBox(this.wipeNode).h});this.inherited("setContent",arguments);this._wipeIn.play();}},toggle:function(){dojo.forEach([this._wipeIn,this._wipeOut],function(_2ca){if(_2ca.status()=="playing"){_2ca.stop();}});this[this.open?"_wipeOut":"_wipeIn"].play();this.open=!this.open;this._loadCheck();this._setCss();},_setCss:function(){var _2cb=["dijitClosed","dijitOpen"];var _2cc=this.open;dojo.removeClass(this.focusNode,_2cb[!_2cc+0]);this.focusNode.className+=" "+_2cb[_2cc+0];this.arrowNodeInner.innerHTML=this.open?"-":"+";},_onTitleKey:function(e){if(e.keyCode==dojo.keys.ENTER||e.charCode==dojo.keys.SPACE){this.toggle();}else{if(e.keyCode==dojo.keys.DOWN_ARROW){if(this.open){this.containerNode.focus();e.preventDefault();}}}},_handleFocus:function(e){dojo[(e.type=="focus"?"addClass":"removeClass")](this.focusNode,this.baseClass+"Focused");},setTitle:function(_2cf){this.titleNode.innerHTML=_2cf;}});}if(!dojo._hasResource["dijit.Tooltip"]){dojo._hasResource["dijit.Tooltip"]=true;dojo.provide("dijit.Tooltip");dojo.declare("dijit._MasterTooltip",[dijit._Widget,dijit._Templated],{duration:200,templateString:"<div class=\"dijitTooltip dijitTooltipLeft\" id=\"dojoTooltip\">\n\t<div class=\"dijitTooltipContainer dijitTooltipContents\" dojoAttachPoint=\"containerNode\" waiRole='alert'></div>\n\t<div class=\"dijitTooltipConnector\"></div>\n</div>\n",postCreate:function(){dojo.body().appendChild(this.domNode);this.bgIframe=new dijit.BackgroundIframe(this.domNode);this.fadeIn=dojo.fadeIn({node:this.domNode,duration:this.duration,onEnd:dojo.hitch(this,"_onShow")});this.fadeOut=dojo.fadeOut({node:this.domNode,duration:this.duration,onEnd:dojo.hitch(this,"_onHide")});},show:function(_2d0,_2d1){if(this.aroundNode&&this.aroundNode===_2d1){return;}if(this.fadeOut.status()=="playing"){this._onDeck=arguments;return;}this.containerNode.innerHTML=_2d0;this.domNode.style.top=(this.domNode.offsetTop+1)+"px";var _2d2=this.isLeftToRight()?{"BR":"BL","BL":"BR"}:{"BL":"BR","BR":"BL"};var pos=dijit.placeOnScreenAroundElement(this.domNode,_2d1,_2d2);this.domNode.className="dijitTooltip dijitTooltip"+(pos.corner=="BL"?"Right":"Left");dojo.style(this.domNode,"opacity",0);this.fadeIn.play();this.isShowingNow=true;this.aroundNode=_2d1;},_onShow:function(){if(dojo.isIE){this.domNode.style.filter="";}},hide:function(_2d4){if(!this.aroundNode||this.aroundNode!==_2d4){return;}if(this._onDeck){this._onDeck=null;return;}this.fadeIn.stop();this.isShowingNow=false;this.aroundNode=null;this.fadeOut.play();},_onHide:function(){this.domNode.style.cssText="";if(this._onDeck){this.show.apply(this,this._onDeck);this._onDeck=null;}}});dijit.showTooltip=function(_2d5,_2d6){if(!dijit._masterTT){dijit._masterTT=new dijit._MasterTooltip();}return dijit._masterTT.show(_2d5,_2d6);};dijit.hideTooltip=function(_2d7){if(!dijit._masterTT){dijit._masterTT=new dijit._MasterTooltip();}return dijit._masterTT.hide(_2d7);};dojo.declare("dijit.Tooltip",dijit._Widget,{label:"",showDelay:400,connectId:[],postCreate:function(){if(this.srcNodeRef){this.srcNodeRef.style.display="none";}this._connectNodes=[];dojo.forEach(this.connectId,function(id){var node=dojo.byId(id);if(node){this._connectNodes.push(node);dojo.forEach(["onMouseOver","onMouseOut","onFocus","onBlur","onHover","onUnHover"],function(_2da){this.connect(node,_2da.toLowerCase(),"_"+_2da);},this);if(dojo.isIE){node.style.zoom=1;}}},this);},_onMouseOver:function(e){this._onHover(e);},_onMouseOut:function(e){if(dojo.isDescendant(e.relatedTarget,e.target)){return;}this._onUnHover(e);},_onFocus:function(e){this._focus=true;this._onHover(e);},_onBlur:function(e){this._focus=false;this._onUnHover(e);},_onHover:function(e){if(!this._showTimer){var _2e0=e.target;this._showTimer=setTimeout(dojo.hitch(this,function(){this.open(_2e0);}),this.showDelay);}},_onUnHover:function(e){if(this._focus){return;}if(this._showTimer){clearTimeout(this._showTimer);delete this._showTimer;}this.close();},open:function(_2e2){_2e2=_2e2||this._connectNodes[0];if(!_2e2){return;}if(this._showTimer){clearTimeout(this._showTimer);delete this._showTimer;}dijit.showTooltip(this.label||this.domNode.innerHTML,_2e2);this._connectNode=_2e2;},close:function(){dijit.hideTooltip(this._connectNode);delete this._connectNode;if(this._showTimer){clearTimeout(this._showTimer);delete this._showTimer;}},uninitialize:function(){this.close();}});}if(!dojo._hasResource["dojo.cookie"]){dojo._hasResource["dojo.cookie"]=true;dojo.provide("dojo.cookie");dojo.cookie=function(name,_2e4,_2e5){var c=document.cookie;if(arguments.length==1){var idx=c.lastIndexOf(name+"=");if(idx==-1){return null;}var _2e8=idx+name.length+1;var end=c.indexOf(";",idx+name.length+1);if(end==-1){end=c.length;}return decodeURIComponent(c.substring(_2e8,end));}else{_2e5=_2e5||{};_2e4=encodeURIComponent(_2e4);if(typeof (_2e5.expires)=="number"){var d=new Date();d.setTime(d.getTime()+(_2e5.expires*24*60*60*1000));_2e5.expires=d;}document.cookie=name+"="+_2e4+(_2e5.expires?"; expires="+_2e5.expires.toUTCString():"")+(_2e5.path?"; path="+_2e5.path:"")+(_2e5.domain?"; domain="+_2e5.domain:"")+(_2e5.secure?"; secure":"");return null;}};}if(!dojo._hasResource["dijit.Tree"]){dojo._hasResource["dijit.Tree"]=true;dojo.provide("dijit.Tree");dojo.declare("dijit._TreeNode",[dijit._Widget,dijit._Templated,dijit._Container,dijit._Contained],{item:null,isTreeNode:true,label:"",isExpandable:null,isExpanded:false,state:"UNCHECKED",templateString:"<div class=\"dijitTreeNode dijitTreeExpandLeaf dijitTreeChildrenNo\" waiRole=\"presentation\"\n\t><span dojoAttachPoint=\"expandoNode\" class=\"dijitTreeExpando\" waiRole=\"presentation\"\n\t></span\n\t><span dojoAttachPoint=\"expandoNodeText\" class=\"dijitExpandoText\" waiRole=\"presentation\"\n\t></span\n\t>\n\t<div dojoAttachPoint=\"contentNode\" class=\"dijitTreeContent\" waiRole=\"presentation\">\n\t\t<div dojoAttachPoint=\"iconNode\" class=\"dijitInline dijitTreeIcon\" waiRole=\"presentation\"></div>\n\t\t<span dojoAttachPoint=\"labelNode\" class=\"dijitTreeLabel\" wairole=\"treeitem\" tabindex=\"-1\"></span>\n\t</div>\n</div>\n",postCreate:function(){this.setLabelNode(this.label);this._setExpando();this._updateItemClasses(this.item);if(this.isExpandable){dijit.setWaiState(this.labelNode,"expanded",this.isExpanded);}},markProcessing:function(){this.state="LOADING";this._setExpando(true);},unmarkProcessing:function(){this._setExpando(false);},_updateItemClasses:function(item){this.iconNode.className="dijitInline dijitTreeIcon "+this.tree.getIconClass(item);this.labelNode.className="dijitTreeLabel "+this.tree.getLabelClass(item);},_updateLayout:function(){var _2ec=this.getParent();if(_2ec&&_2ec.isTree&&_2ec._hideRoot){dojo.addClass(this.domNode,"dijitTreeIsRoot");}else{dojo.toggleClass(this.domNode,"dijitTreeIsLast",!this.getNextSibling());}},_setExpando:function(_2ed){var _2ee=["dijitTreeExpandoLoading","dijitTreeExpandoOpened","dijitTreeExpandoClosed","dijitTreeExpandoLeaf"];var idx=_2ed?0:(this.isExpandable?(this.isExpanded?1:2):3);dojo.forEach(_2ee,function(s){dojo.removeClass(this.expandoNode,s);},this);dojo.addClass(this.expandoNode,_2ee[idx]);this.expandoNodeText.innerHTML=_2ed?"*":(this.isExpandable?(this.isExpanded?"-":"+"):"*");},expand:function(){if(this.isExpanded){return;}if(this._wipeOut.status()=="playing"){this._wipeOut.stop();}this.isExpanded=true;dijit.setWaiState(this.labelNode,"expanded","true");dijit.setWaiRole(this.containerNode,"group");this._setExpando();this._wipeIn.play();},collapse:function(){if(!this.isExpanded){return;}if(this._wipeIn.status()=="playing"){this._wipeIn.stop();}this.isExpanded=false;dijit.setWaiState(this.labelNode,"expanded","false");this._setExpando();this._wipeOut.play();},setLabelNode:function(_2f1){this.labelNode.innerHTML="";this.labelNode.appendChild(document.createTextNode(_2f1));},_setChildren:function(_2f2){this.destroyDescendants();this.state="LOADED";var _2f3={};if(_2f2&&_2f2.length>0){this.isExpandable=true;if(!this.containerNode){this.containerNode=this.tree.containerNodeTemplate.cloneNode(true);this.domNode.appendChild(this.containerNode);}dojo.forEach(_2f2,function(_2f4){var _2f5=new dijit._TreeNode(dojo.mixin({tree:this.tree,label:this.tree.getLabel(_2f4.item)},_2f4));this.addChild(_2f5);var _2f6=this.tree.store.getIdentity(_2f4.item);_2f3[_2f6]=_2f5;if(this.tree.persist){if(this.tree._openedItemIds[_2f6]){this.tree._expandNode(_2f5);}}},this);dojo.forEach(this.getChildren(),function(_2f7,idx){_2f7._updateLayout();});}else{this.isExpandable=false;}if(this._setExpando){this._setExpando(false);}if(this.isTree&&this._hideRoot){var fc=this.getChildren()[0];var _2fa=fc?fc.labelNode:this.domNode;_2fa.setAttribute("tabIndex","0");}if(this.containerNode&&!this._wipeIn){this._wipeIn=dojo.fx.wipeIn({node:this.containerNode,duration:150});this._wipeOut=dojo.fx.wipeOut({node:this.containerNode,duration:150});}return _2f3;},_addChildren:function(_2fb){var _2fc={};if(_2fb&&_2fb.length>0){dojo.forEach(_2fb,function(_2fd){var _2fe=new dijit._TreeNode(dojo.mixin({tree:this.tree,label:this.tree.getLabel(_2fd.item)},_2fd));this.addChild(_2fe);_2fc[this.tree.store.getIdentity(_2fd.item)]=_2fe;},this);dojo.forEach(this.getChildren(),function(_2ff,idx){_2ff._updateLayout();});}return _2fc;},deleteNode:function(node){node.destroy();var _302=this.getChildren();if(_302.length==0){this.isExpandable=false;this.collapse();}dojo.forEach(_302,function(_303){_303._updateLayout();});},makeExpandable:function(){this.isExpandable=true;this._setExpando(false);}});dojo.declare("dijit.Tree",dijit._TreeNode,{store:null,query:null,childrenAttr:["children"],templateString:"<div class=\"dijitTreeContainer\" style=\"\" waiRole=\"tree\"\n\tdojoAttachEvent=\"onclick:_onClick,onkeypress:_onKeyPress\">\n\t<div class=\"dijitTreeNode dijitTreeIsRoot dijitTreeExpandLeaf dijitTreeChildrenNo\" waiRole=\"presentation\"\n\t\tdojoAttachPoint=\"rowNode\"\n\t\t><span dojoAttachPoint=\"expandoNode\" class=\"dijitTreeExpando\" waiRole=\"presentation\"\n\t\t></span\n\t\t><span dojoAttachPoint=\"expandoNodeText\" class=\"dijitExpandoText\" waiRole=\"presentation\"\n\t\t></span\n\t\t>\n\t\t<div dojoAttachPoint=\"contentNode\" class=\"dijitTreeContent\" waiRole=\"presentation\">\n\t\t\t<div dojoAttachPoint=\"iconNode\" class=\"dijitInline dijitTreeIcon\" waiRole=\"presentation\"></div>\n\t\t\t<span dojoAttachPoint=\"labelNode\" class=\"dijitTreeLabel\" wairole=\"treeitem\" tabindex=\"0\"></span>\n\t\t</div>\n\t</div>\n</div>\n",isExpandable:true,isTree:true,persist:true,dndController:null,dndParams:["onDndDrop","itemCreator","onDndCancel","checkAcceptance","checkItemAcceptance"],onDndDrop:null,itemCreator:null,onDndCancel:null,checkAcceptance:null,checkItemAcceptance:null,_publish:function(_304,_305){dojo.publish(this.id,[dojo.mixin({tree:this,event:_304},_305||{})]);},postMixInProperties:function(){this.tree=this;this.lastFocused=this.labelNode;this._itemNodeMap={};this._hideRoot=!this.label;if(!this.store.getFeatures()["dojo.data.api.Identity"]){throw new Error("dijit.tree requires access to a store supporting the dojo.data Identity api");}if(!this.cookieName){this.cookieName=this.id+"SaveStateCookie";}if(this.store.getFeatures()["dojo.data.api.Notification"]){this.connect(this.store,"onNew","_onNewItem");this.connect(this.store,"onDelete","_onDeleteItem");this.connect(this.store,"onSet","_onSetItem");}},postCreate:function(){if(this.persist){var _306=dojo.cookie(this.cookieName);this._openedItemIds={};if(_306){dojo.forEach(_306.split(","),function(item){this._openedItemIds[item]=true;},this);}}var div=document.createElement("div");div.style.display="none";div.className="dijitTreeContainer";dijit.setWaiRole(div,"presentation");this.containerNodeTemplate=div;if(this._hideRoot){this.rowNode.style.display="none";}this.inherited("postCreate",arguments);this._expandNode(this);if(this.dndController){if(dojo.isString(this.dndController)){this.dndController=dojo.getObject(this.dndController);}var _309={};for(var i=0;i<this.dndParams.length;i++){if(this[this.dndParams[i]]){_309[this.dndParams[i]]=this[this.dndParams[i]];}}this.dndController=new this.dndController(this,_309);}this.connect(this.domNode,dojo.isIE?"onactivate":"onfocus","_onTreeFocus");},mayHaveChildren:function(item){return dojo.some(this.childrenAttr,function(attr){return this.store.hasAttribute(item,attr);},this);},getItemChildren:function(_30d,_30e){var _30f=this.store;if(_30d==null){_30f.fetch({query:this.query,onComplete:_30e});}else{var _310=[];for(var i=0;i<this.childrenAttr.length;i++){_310=_310.concat(_30f.getValues(_30d,this.childrenAttr[i]));}var _312=0;dojo.forEach(_310,function(item){if(!_30f.isItemLoaded(item)){_312++;}});if(_312==0){_30e(_310);}else{function onItem(item){if(--_312==0){_30e(_310);}};dojo.forEach(_310,function(item){if(!_30f.isItemLoaded(item)){_30f.loadItem({item:item,onItem:onItem});}});}}},getItemParentIdentity:function(item,_317){return this.store.getIdentity(_317.item);},getLabel:function(item){return this.store.getLabel(item);},getIconClass:function(item){},getLabelClass:function(item){},_onLoadAllItems:function(node,_31c){var _31d=dojo.map(_31c,function(item){return {item:item,isExpandable:this.mayHaveChildren(item)};},this);dojo.mixin(this._itemNodeMap,node._setChildren(_31d));this._expandNode(node);},_onKeyPress:function(e){if(e.altKey){return;}var _320=dijit.getEnclosingWidget(e.target);if(!_320){return;}if(e.charCode){var _321=e.charCode;if(!e.altKey&&!e.ctrlKey&&!e.shiftKey&&!e.metaKey){_321=(String.fromCharCode(_321)).toLowerCase();this._onLetterKeyNav({node:_320,key:_321});dojo.stopEvent(e);}}else{var map=this._keyHandlerMap;if(!map){map={};map[dojo.keys.ENTER]="_onEnterKey";map[dojo.keys.LEFT_ARROW]="_onLeftArrow";map[dojo.keys.RIGHT_ARROW]="_onRightArrow";map[dojo.keys.UP_ARROW]="_onUpArrow";map[dojo.keys.DOWN_ARROW]="_onDownArrow";map[dojo.keys.HOME]="_onHomeKey";map[dojo.keys.END]="_onEndKey";this._keyHandlerMap=map;}if(this._keyHandlerMap[e.keyCode]){this[this._keyHandlerMap[e.keyCode]]({node:_320,item:_320.item});dojo.stopEvent(e);}}},_onEnterKey:function(_323){this._publish("execute",{item:_323.item,node:_323.node});this.onClick(_323.item,_323.node);},_onDownArrow:function(_324){var _325=this._navToNextNode(_324.node);if(_325&&_325.isTreeNode){_325.tree.focusNode(_325);return _325;}},_onUpArrow:function(_326){var _327=_326.node;var _328=_327;var _329=_327.getPreviousSibling();if(_329){_327=_329;while(_327.isExpandable&&_327.isExpanded&&_327.hasChildren()){_328=_327;var _32a=_327.getChildren();_327=_32a[_32a.length-1];}}else{var _32b=_327.getParent();if(!(this._hideRoot&&_32b===this)){_327=_32b;}}if(_327&&_327.isTreeNode){_328=_327;}if(_328&&_328.isTreeNode){_328.tree.focusNode(_328);return _328;}},_onRightArrow:function(_32c){var _32d=_32c.node;var _32e=_32d;if(_32d.isExpandable&&!_32d.isExpanded){this._expandNode(_32d);}else{if(_32d.hasChildren()){_32d=_32d.getChildren()[0];}}if(_32d&&_32d.isTreeNode){_32e=_32d;}if(_32e&&_32e.isTreeNode){_32e.tree.focusNode(_32e);return _32e;}},_onLeftArrow:function(_32f){var node=_32f.node;var _331=node;if(node.isExpandable&&node.isExpanded){this._collapseNode(node);}else{node=node.getParent();}if(node&&node.isTreeNode){_331=node;}if(_331&&_331.isTreeNode){_331.tree.focusNode(_331);return _331;}},_onHomeKey:function(){var _332=this._navToRootOrFirstNode();if(_332){_332.tree.focusNode(_332);return _332;}},_onEndKey:function(_333){var _334=_333.node.tree;var _335=_334;while(_335.isExpanded){var c=_335.getChildren();_335=c[c.length-1];if(_335.isTreeNode){_334=_335;}}if(_334&&_334.isTreeNode){_334.tree.focusNode(_334);return _334;}},_onLetterKeyNav:function(_337){var node=startNode=_337.node;var key=_337.key;do{node=this._navToNextNode(node);if(!node){node=this._navToRootOrFirstNode();}}while(node!==startNode&&(node.label.charAt(0).toLowerCase()!=key));if(node&&node.isTreeNode){if(node!==startNode){node.tree.focusNode(node);}return node;}},_onClick:function(e){var _33b=e.target;var _33c=dijit.getEnclosingWidget(_33b);if(!_33c||!_33c.isTreeNode){return;}if(_33b==_33c.expandoNode||_33b==_33c.expandoNodeText){if(_33c.isExpandable){this._onExpandoClick({node:_33c});}}else{this._publish("execute",{item:_33c.item,node:_33c});this.onClick(_33c.item,_33c);this.focusNode(_33c);}dojo.stopEvent(e);},_onExpandoClick:function(_33d){var node=_33d.node;if(node.isExpanded){this._collapseNode(node);}else{this._expandNode(node);}},onClick:function(item,node){},_navToNextNode:function(node){var _342;if(node.isExpandable&&node.isExpanded&&node.hasChildren()){_342=node.getChildren()[0];}else{while(node&&node.isTreeNode){_342=node.getNextSibling();if(_342){break;}node=node.getParent();}}return _342;},_navToRootOrFirstNode:function(){if(!this._hideRoot){return this;}else{var _343=this.getChildren()[0];if(_343&&_343.isTreeNode){return _343;}}},_collapseNode:function(node){if(node.isExpandable){if(node.state=="LOADING"){return;}if(this.lastFocused){if(dojo.isDescendant(this.lastFocused.domNode,node.domNode)){this.focusNode(node);}else{this.focusNode(this.lastFocused);}}node.collapse();if(this.persist&&node.item){delete this._openedItemIds[this.store.getIdentity(node.item)];this._saveState();}}},_expandNode:function(node){var t=node.tree;if(t.lastFocused){t.focusNode(t.lastFocused);}if(!node.isExpandable){return;}var _347=this.store;var _348=this.store.getValue;switch(node.state){case "LOADING":return;case "UNCHECKED":node.markProcessing();var _349=this;var _34a=function(_34b){node.unmarkProcessing();_349._onLoadAllItems(node,_34b);};this.getItemChildren(node.item,_34a);break;default:if(node.expand){node.expand();if(this.persist&&node.item){this._openedItemIds[this.store.getIdentity(node.item)]=true;this._saveState();}}break;}},blurNode:function(){var node=this.lastFocused;if(!node){return;}var _34d=node.labelNode;dojo.removeClass(_34d,"dijitTreeLabelFocused");_34d.setAttribute("tabIndex","-1");this.lastFocused=null;},focusNode:function(node){node.labelNode.focus();},_onBlur:function(){if(this.lastFocused){var _34f=this.lastFocused.labelNode;dojo.removeClass(_34f,"dijitTreeLabelFocused");}},_onTreeFocus:function(evt){var node=dijit.getEnclosingWidget(evt.target);if(node!=this.lastFocused){this.blurNode();}var _352=node.labelNode;_352.setAttribute("tabIndex","0");dojo.addClass(_352,"dijitTreeLabelFocused");this.lastFocused=node;},_onNewItem:function(item,_354){var _355;if(_354){var _356=this._itemNodeMap[this.getItemParentIdentity(item,_354)];if(!_356||dojo.indexOf(this.childrenAttr,_354.attribute)==-1){return;}}var _357={item:item,isExpandable:this.mayHaveChildren(item)};if(_356){if(!_356.isExpandable){_356.makeExpandable();}if(_356.state=="LOADED"||_356.isExpanded){var _358=_356._addChildren([_357]);}}else{var _358=this._addChildren([_357]);}if(_358){dojo.mixin(this._itemNodeMap,_358);}},_onDeleteItem:function(item){var _35a=this.store.getIdentity(item);var node=this._itemNodeMap[_35a];if(node){var _35c=node.getParent();_35c.deleteNode(node);this._itemNodeMap[_35a]=null;}},_onSetItem:function(item){var _35e=this.store.getIdentity(item);node=this._itemNodeMap[_35e];if(node){node.setLabelNode(this.getLabel(item));node._updateItemClasses(item);}},_saveState:function(){if(!this.persist){return;}var ary=[];for(var id in this._openedItemIds){ary.push(id);}dojo.cookie(this.cookieName,ary.join(","));}});}if(!dojo._hasResource["dijit.form.TextBox"]){dojo._hasResource["dijit.form.TextBox"]=true;dojo.provide("dijit.form.TextBox");dojo.declare("dijit.form.TextBox",dijit.form._FormWidget,{trim:false,uppercase:false,lowercase:false,propercase:false,maxLength:"",templateString:"<input class=\"dojoTextBox\" dojoAttachPoint='textbox,focusNode' name=\"${name}\"\n\tdojoAttachEvent='onmouseenter:_onMouse,onmouseleave:_onMouse,onfocus:_onMouse,onblur:_onMouse,onkeyup,onkeypress:_onKeyPress'\n\tautocomplete=\"off\" type=\"${type}\"\n\t/>\n",baseClass:"dijitTextBox",attributeMap:dojo.mixin(dojo.clone(dijit.form._FormWidget.prototype.attributeMap),{maxLength:"focusNode"}),getDisplayedValue:function(){return this.filter(this.textbox.value);},getValue:function(){return this.parse(this.getDisplayedValue(),this.constraints);},setValue:function(_361,_362,_363){var _364=this.filter(_361);if((typeof _364==typeof _361)&&(_363==null||_363==undefined)){_363=this.format(_364,this.constraints);}if(_363!=null&&_363!=undefined){this.textbox.value=_363;}dijit.form.TextBox.superclass.setValue.call(this,_364,_362);},setDisplayedValue:function(_365){this.textbox.value=_365;this.setValue(this.getValue(),true);},forWaiValuenow:function(){return this.getDisplayedValue();},format:function(_366,_367){return ((_366==null||_366==undefined)?"":(_366.toString?_366.toString():_366));},parse:function(_368,_369){return _368;},postCreate:function(){this.textbox.setAttribute("value",this.getDisplayedValue());this.inherited("postCreate",arguments);if(this.srcNodeRef){dojo.style(this.textbox,"cssText",this.style);this.textbox.className+=" "+this["class"];}this._layoutHack();},_layoutHack:function(){if(dojo.isFF==2&&this.domNode.tagName=="TABLE"){var node=this.domNode;var old=node.style.opacity;node.style.opacity="0.999";setTimeout(function(){node.style.opacity=old;},0);}},filter:function(val){if(val==undefined||val==null){return "";}else{if(typeof val!="string"){return val;}}if(this.trim){val=dojo.trim(val);}if(this.uppercase){val=val.toUpperCase();}if(this.lowercase){val=val.toLowerCase();}if(this.propercase){val=val.replace(/[^\s]+/g,function(word){return word.substring(0,1).toUpperCase()+word.substring(1);});}return val;},_onBlur:function(){this.setValue(this.getValue(),(this.isValid?this.isValid():true));},onkeyup:function(){}});}if(!dojo._hasResource["dijit.InlineEditBox"]){dojo._hasResource["dijit.InlineEditBox"]=true;dojo.provide("dijit.InlineEditBox");dojo.declare("dijit.InlineEditBox",dijit._Widget,{editing:false,autoSave:true,buttonSave:"",buttonCancel:"",renderAsHtml:false,editor:"dijit.form.TextBox",editorParams:{},onChange:function(_36e){},width:"100%",value:"",noValueIndicator:"<span style='font-family: wingdings; text-decoration: underline;'>&nbsp;&nbsp;&nbsp;&nbsp;&#x270d;&nbsp;&nbsp;&nbsp;&nbsp;</span>",postMixInProperties:function(){this.inherited("postMixInProperties",arguments);this.displayNode=this.srcNodeRef;var _36f={ondijitclick:"_onClick",onmouseover:"_onMouseOver",onmouseout:"_onMouseOut",onfocus:"_onMouseOver",onblur:"_onMouseOut"};for(var name in _36f){this.connect(this.displayNode,name,_36f[name]);}dijit.setWaiRole(this.displayNode,"button");if(!this.displayNode.getAttribute("tabIndex")){this.displayNode.setAttribute("tabIndex",0);}if(!this.value){this.value=this.displayNode.innerHTML;}this._setDisplayValue(this.value);},_onMouseOver:function(){dojo.addClass(this.displayNode,this.disabled?"dijitDisabledClickableRegion":"dijitClickableRegion");},_onMouseOut:function(){dojo.removeClass(this.displayNode,this.disabled?"dijitDisabledClickableRegion":"dijitClickableRegion");},_onClick:function(e){if(this.disabled){return;}if(e){dojo.stopEvent(e);}this._onMouseOut();setTimeout(dojo.hitch(this,"_edit"),0);},_edit:function(){this.editing=true;var _372=(this.renderAsHtml?this.value:this.value.replace(/\s*\r?\n\s*/g,"").replace(/<br\/?>/gi,"\n").replace(/&gt;/g,">").replace(/&lt;/g,"<").replace(/&amp;/g,"&"));var _373=document.createElement("span");dojo.place(_373,this.domNode,"before");var ew=this.editWidget=new dijit._InlineEditor({value:dojo.trim(_372),autoSave:this.autoSave,buttonSave:this.buttonSave,buttonCancel:this.buttonCancel,renderAsHtml:this.renderAsHtml,editor:this.editor,editorParams:this.editorParams,style:dojo.getComputedStyle(this.displayNode),save:dojo.hitch(this,"save"),cancel:dojo.hitch(this,"cancel"),width:this.width},_373);var ews=ew.domNode.style;this.displayNode.style.display="none";ews.position="static";ews.visibility="visible";this.domNode=ew.domNode;setTimeout(function(){ew.focus();},100);},_showText:function(_376){this.displayNode.style.display="";var ews=this.editWidget.domNode.style;ews.position="absolute";ews.visibility="hidden";this.domNode=this.displayNode;var _378=this;setTimeout(function(){if(_376){dijit.focus(_378.displayNode);}_378.editWidget.destroy();delete _378.editWidget;},100);},save:function(_379){this.editing=false;this.value=this.editWidget.getValue()+"";if(this.renderAsHtml){this.value=this.value.replace(/&/gm,"&amp;").replace(/</gm,"&lt;").replace(/>/gm,"&gt;").replace(/"/gm,"&quot;").replace("\n","<br>");}this._setDisplayValue(this.value);this.onChange(this.value);this._showText(_379);},_setDisplayValue:function(val){this.displayNode.innerHTML=val||this.noValueIndicator;},cancel:function(_37b){this.editing=false;this._showText(_37b);}});dojo.declare("dijit._InlineEditor",[dijit._Widget,dijit._Templated],{templateString:"<fieldset dojoAttachPoint=\"editNode\" waiRole=\"presentation\" style=\"position: absolute; visibility:hidden\" class=\"dijitReset dijitInline\"\n\tdojoAttachEvent=\"onkeypress: _onKeyPress\" \n\t><input dojoAttachPoint=\"editorPlaceholder\"\n\t/><span dojoAttachPoint=\"buttonContainer\"\n\t\t><button class='saveButton' dojoAttachPoint=\"saveButton\" dojoType=\"dijit.form.Button\" dojoAttachEvent=\"onClick:save\">${buttonSave}</button\n\t\t><button class='cancelButton' dojoAttachPoint=\"cancelButton\" dojoType=\"dijit.form.Button\" dojoAttachEvent=\"onClick:cancel\">${buttonCancel}</button\n\t></span\n></fieldset>\n",widgetsInTemplate:true,postMixInProperties:function(){this.inherited("postMixInProperties",arguments);this.messages=dojo.i18n.getLocalization("dijit","common",this.lang);dojo.forEach(["buttonSave","buttonCancel"],function(prop){if(!this[prop]){this[prop]=this.messages[prop];}},this);},postCreate:function(){var cls=dojo.getObject(this.editor);var ew=this.editWidget=new cls(this.editorParams,this.editorPlaceholder);var _37f=this.style;dojo.forEach(["fontWeight","fontFamily","fontSize","fontStyle"],function(prop){ew.focusNode.style[prop]=_37f[prop];},this);dojo.forEach(["marginTop","marginBottom","marginLeft","marginRight"],function(prop){this.domNode.style[prop]=_37f[prop];},this);if(this.width=="100%"){ew.domNode.style.width="100%";this.domNode.style.display="block";}else{ew.domNode.style.width=this.width+(Number(this.width)==this.width?"px":"");}this.connect(this.editWidget,"onChange","_onChange");this._ignoreNextOnChange=true;(this.editWidget.setDisplayedValue||this.editWidget.setValue).call(this.editWidget,this.value);this._initialText=this.getValue();if(this.autoSave){this.buttonContainer.style.display="none";}},destroy:function(){this.editWidget.destroy();this.inherited(arguments);},getValue:function(){var ew=this.editWidget;return ew.getDisplayedValue?ew.getDisplayedValue():ew.getValue();},_onKeyPress:function(e){if(this._exitInProgress){return;}if(this.autoSave){if(e.keyCode==dojo.keys.ESCAPE){dojo.stopEvent(e);this._exitInProgress=true;this.cancel(true);}else{if(e.keyCode==dojo.keys.ENTER){dojo.stopEvent(e);this._exitInProgress=true;this.save(true);}}}else{var _384=this;setTimeout(function(){_384.saveButton.setDisabled(_384.getValue()==_384._initialText);},100);}},_onBlur:function(){if(this._exitInProgress){return;}if(this.autoSave){this._exitInProgress=true;if(this.getValue()==this._initialText){this.cancel(false);}else{this.save(false);}}},enableSave:function(){return this.editWidget.isValid?this.editWidget.isValid():true;},_onChange:function(){if(this._ignoreNextOnChange){delete this._ignoreNextOnChange;return;}if(this._exitInProgress){return;}if(this.autoSave){this._exitInProgress=true;this.save(true);}else{this.saveButton.setDisabled((this.getValue()==this._initialText)||!this.enableSave());}},enableSave:function(){return this.editWidget.isValid?this.editWidget.isValid():true;},focus:function(){this.editWidget.focus();dijit.selectInputText(this.editWidget.focusNode);}});dijit.selectInputText=function(_385){var _386=dojo.global;var _387=dojo.doc;_385=dojo.byId(_385);if(_387["selection"]&&dojo.body()["createTextRange"]){if(_385.createTextRange){var _388=_385.createTextRange();_388.moveStart("character",0);_388.moveEnd("character",_385.value.length);_388.select();}}else{if(_386["getSelection"]){var _389=_386.getSelection();if(_385.setSelectionRange){_385.setSelectionRange(0,_385.value.length);}}}_385.focus();};}if(!dojo._hasResource["dijit.form.CheckBox"]){dojo._hasResource["dijit.form.CheckBox"]=true;dojo.provide("dijit.form.CheckBox");dojo.declare("dijit.form.CheckBox",dijit.form.ToggleButton,{templateString:"<fieldset class=\"dijitReset dijitInline\" waiRole=\"presentation\"\n\t><input\n\t \ttype=\"${type}\" name=\"${name}\"\n\t\tclass=\"dijitReset dijitCheckBoxInput\"\n\t\tdojoAttachPoint=\"inputNode,focusNode\"\n\t \tdojoAttachEvent=\"onmouseover:_onMouse,onmouseout:_onMouse,onclick:_onClick\"\n/></fieldset>\n",baseClass:"dijitCheckBox",type:"checkbox",value:"on",postCreate:function(){dojo.setSelectable(this.inputNode,false);this.setChecked(this.checked);this.inherited(arguments);},setChecked:function(_38a){if(dojo.isIE){if(_38a){this.inputNode.setAttribute("checked","checked");}else{this.inputNode.removeAttribute("checked");}}else{this.inputNode.checked=_38a;}this.inherited(arguments);},setValue:function(_38b){if(_38b==null){_38b="";}this.inputNode.value=_38b;dijit.form.CheckBox.superclass.setValue.call(this,_38b);}});dojo.declare("dijit.form.RadioButton",dijit.form.CheckBox,{type:"radio",baseClass:"dijitRadio",_groups:{},postCreate:function(){(this._groups[this.name]=this._groups[this.name]||[]).push(this);this.inherited(arguments);},uninitialize:function(){dojo.forEach(this._groups[this.name],function(_38c,i,arr){if(_38c===this){arr.splice(i,1);return;}},this);},setChecked:function(_38f){if(_38f){dojo.forEach(this._groups[this.name],function(_390){if(_390!=this&&_390.checked){_390.setChecked(false);}},this);}this.inherited(arguments);},_clicked:function(e){if(!this.checked){this.setChecked(true);}}});}if(!dojo._hasResource["dojo.data.util.filter"]){dojo._hasResource["dojo.data.util.filter"]=true;dojo.provide("dojo.data.util.filter");dojo.data.util.filter.patternToRegExp=function(_392,_393){var rxp="^";var c=null;for(var i=0;i<_392.length;i++){c=_392.charAt(i);switch(c){case "\\":rxp+=c;i++;rxp+=_392.charAt(i);break;case "*":rxp+=".*";break;case "?":rxp+=".";break;case "$":case "^":case "/":case "+":case ".":case "|":case "(":case ")":case "{":case "}":case "[":case "]":rxp+="\\";default:rxp+=c;}}rxp+="$";if(_393){return new RegExp(rxp,"i");}else{return new RegExp(rxp);}};}if(!dojo._hasResource["dojo.data.util.sorter"]){dojo._hasResource["dojo.data.util.sorter"]=true;dojo.provide("dojo.data.util.sorter");dojo.data.util.sorter.basicComparator=function(a,b){var ret=0;if(a>b||typeof a==="undefined"||a===null){ret=1;}else{if(a<b||typeof b==="undefined"||b===null){ret=-1;}}return ret;};dojo.data.util.sorter.createSortFunction=function(_39a,_39b){var _39c=[];function createSortFunction(attr,dir){return function(_39f,_3a0){var a=_39b.getValue(_39f,attr);var b=_39b.getValue(_3a0,attr);var _3a3=null;if(_39b.comparatorMap){if(typeof attr!=="string"){attr=_39b.getIdentity(attr);}_3a3=_39b.comparatorMap[attr]||dojo.data.util.sorter.basicComparator;}_3a3=_3a3||dojo.data.util.sorter.basicComparator;return dir*_3a3(a,b);};};for(var i=0;i<_39a.length;i++){sortAttribute=_39a[i];if(sortAttribute.attribute){var _3a5=(sortAttribute.descending)?-1:1;_39c.push(createSortFunction(sortAttribute.attribute,_3a5));}}return function(rowA,rowB){var i=0;while(i<_39c.length){var ret=_39c[i++](rowA,rowB);if(ret!==0){return ret;}}return 0;};};}if(!dojo._hasResource["dojo.data.util.simpleFetch"]){dojo._hasResource["dojo.data.util.simpleFetch"]=true;dojo.provide("dojo.data.util.simpleFetch");dojo.data.util.simpleFetch.fetch=function(_3aa){_3aa=_3aa||{};if(!_3aa.store){_3aa.store=this;}var self=this;var _3ac=function(_3ad,_3ae){if(_3ae.onError){var _3af=_3ae.scope||dojo.global;_3ae.onError.call(_3af,_3ad,_3ae);}};var _3b0=function(_3b1,_3b2){var _3b3=_3b2.abort||null;var _3b4=false;var _3b5=_3b2.start?_3b2.start:0;var _3b6=_3b2.count?(_3b5+_3b2.count):_3b1.length;_3b2.abort=function(){_3b4=true;if(_3b3){_3b3.call(_3b2);}};var _3b7=_3b2.scope||dojo.global;if(!_3b2.store){_3b2.store=self;}if(_3b2.onBegin){_3b2.onBegin.call(_3b7,_3b1.length,_3b2);}if(_3b2.sort){_3b1.sort(dojo.data.util.sorter.createSortFunction(_3b2.sort,self));}if(_3b2.onItem){for(var i=_3b5;(i<_3b1.length)&&(i<_3b6);++i){var item=_3b1[i];if(!_3b4){_3b2.onItem.call(_3b7,item,_3b2);}}}if(_3b2.onComplete&&!_3b4){var _3ba=null;if(!_3b2.onItem){_3ba=_3b1.slice(_3b5,_3b6);}_3b2.onComplete.call(_3b7,_3ba,_3b2);}};this._fetchItems(_3aa,_3b0,_3ac);return _3aa;};}if(!dojo._hasResource["dojo.data.ItemFileReadStore"]){dojo._hasResource["dojo.data.ItemFileReadStore"]=true;dojo.provide("dojo.data.ItemFileReadStore");dojo.declare("dojo.data.ItemFileReadStore",null,{constructor:function(_3bb){this._arrayOfAllItems=[];this._arrayOfTopLevelItems=[];this._loadFinished=false;this._jsonFileUrl=_3bb.url;this._jsonData=_3bb.data;this._datatypeMap=_3bb.typeMap||{};if(!this._datatypeMap["Date"]){this._datatypeMap["Date"]={type:Date,deserialize:function(_3bc){return dojo.date.stamp.fromISOString(_3bc);}};}this._features={"dojo.data.api.Read":true,"dojo.data.api.Identity":true};this._itemsByIdentity=null;this._storeRefPropName="_S";this._itemNumPropName="_0";this._rootItemPropName="_RI";this._loadInProgress=false;this._queuedFetches=[];},url:"",_assertIsItem:function(item){if(!this.isItem(item)){throw new Error("dojo.data.ItemFileReadStore: Invalid item argument.");}},_assertIsAttribute:function(_3be){if(typeof _3be!=="string"){throw new Error("dojo.data.ItemFileReadStore: Invalid attribute argument.");}},getValue:function(item,_3c0,_3c1){var _3c2=this.getValues(item,_3c0);return (_3c2.length>0)?_3c2[0]:_3c1;},getValues:function(item,_3c4){this._assertIsItem(item);this._assertIsAttribute(_3c4);return item[_3c4]||[];},getAttributes:function(item){this._assertIsItem(item);var _3c6=[];for(var key in item){if((key!==this._storeRefPropName)&&(key!==this._itemNumPropName)&&(key!==this._rootItemPropName)){_3c6.push(key);}}return _3c6;},hasAttribute:function(item,_3c9){return this.getValues(item,_3c9).length>0;},containsValue:function(item,_3cb,_3cc){var _3cd=undefined;if(typeof _3cc==="string"){_3cd=dojo.data.util.filter.patternToRegExp(_3cc,false);}return this._containsValue(item,_3cb,_3cc,_3cd);},_containsValue:function(item,_3cf,_3d0,_3d1){return dojo.some(this.getValues(item,_3cf),function(_3d2){if(_3d2!==null&&!dojo.isObject(_3d2)&&_3d1){if(_3d2.toString().match(_3d1)){return true;}}else{if(_3d0===_3d2){return true;}}});},isItem:function(_3d3){if(_3d3&&_3d3[this._storeRefPropName]===this){if(this._arrayOfAllItems[_3d3[this._itemNumPropName]]===_3d3){return true;}}return false;},isItemLoaded:function(_3d4){return this.isItem(_3d4);},loadItem:function(_3d5){this._assertIsItem(_3d5.item);},getFeatures:function(){return this._features;},getLabel:function(item){if(this._labelAttr&&this.isItem(item)){return this.getValue(item,this._labelAttr);}return undefined;},getLabelAttributes:function(item){if(this._labelAttr){return [this._labelAttr];}return null;},_fetchItems:function(_3d8,_3d9,_3da){var self=this;var _3dc=function(_3dd,_3de){var _3df=[];if(_3dd.query){var _3e0=_3dd.queryOptions?_3dd.queryOptions.ignoreCase:false;var _3e1={};for(var key in _3dd.query){var _3e3=_3dd.query[key];if(typeof _3e3==="string"){_3e1[key]=dojo.data.util.filter.patternToRegExp(_3e3,_3e0);}}for(var i=0;i<_3de.length;++i){var _3e5=true;var _3e6=_3de[i];if(_3e6===null){_3e5=false;}else{for(var key in _3dd.query){var _3e3=_3dd.query[key];if(!self._containsValue(_3e6,key,_3e3,_3e1[key])){_3e5=false;}}}if(_3e5){_3df.push(_3e6);}}_3d9(_3df,_3dd);}else{for(var i=0;i<_3de.length;++i){var item=_3de[i];if(item!==null){_3df.push(item);}}_3d9(_3df,_3dd);}};if(this._loadFinished){_3dc(_3d8,this._getItemsArray(_3d8.queryOptions));}else{if(this._jsonFileUrl){if(this._loadInProgress){this._queuedFetches.push({args:_3d8,filter:_3dc});}else{this._loadInProgress=true;var _3e8={url:self._jsonFileUrl,handleAs:"json-comment-optional"};var _3e9=dojo.xhrGet(_3e8);_3e9.addCallback(function(data){try{self._getItemsFromLoadedData(data);self._loadFinished=true;self._loadInProgress=false;_3dc(_3d8,self._getItemsArray(_3d8.queryOptions));self._handleQueuedFetches();}catch(e){self._loadFinished=true;self._loadInProgress=false;_3da(e,_3d8);}});_3e9.addErrback(function(_3eb){self._loadInProgress=false;_3da(_3eb,_3d8);});}}else{if(this._jsonData){try{this._loadFinished=true;this._getItemsFromLoadedData(this._jsonData);this._jsonData=null;_3dc(_3d8,this._getItemsArray(_3d8.queryOptions));}catch(e){_3da(e,_3d8);}}else{_3da(new Error("dojo.data.ItemFileReadStore: No JSON source data was provided as either URL or a nested Javascript object."),_3d8);}}}},_handleQueuedFetches:function(){if(this._queuedFetches.length>0){for(var i=0;i<this._queuedFetches.length;i++){var _3ed=this._queuedFetches[i];var _3ee=_3ed.args;var _3ef=_3ed.filter;if(_3ef){_3ef(_3ee,this._getItemsArray(_3ee.queryOptions));}else{this.fetchItemByIdentity(_3ee);}}this._queuedFetches=[];}},_getItemsArray:function(_3f0){if(_3f0&&_3f0.deep){return this._arrayOfAllItems;}return this._arrayOfTopLevelItems;},close:function(_3f1){},_getItemsFromLoadedData:function(_3f2){function valueIsAnItem(_3f3){var _3f4=((_3f3!=null)&&(typeof _3f3=="object")&&(!dojo.isArray(_3f3))&&(!dojo.isFunction(_3f3))&&(_3f3.constructor==Object)&&(typeof _3f3._reference=="undefined")&&(typeof _3f3._type=="undefined")&&(typeof _3f3._value=="undefined"));return _3f4;};var self=this;function addItemAndSubItemsToArrayOfAllItems(_3f6){self._arrayOfAllItems.push(_3f6);for(var _3f7 in _3f6){var _3f8=_3f6[_3f7];if(_3f8){if(dojo.isArray(_3f8)){var _3f9=_3f8;for(var k=0;k<_3f9.length;++k){var _3fb=_3f9[k];if(valueIsAnItem(_3fb)){addItemAndSubItemsToArrayOfAllItems(_3fb);}}}else{if(valueIsAnItem(_3f8)){addItemAndSubItemsToArrayOfAllItems(_3f8);}}}}};this._labelAttr=_3f2.label;var i;var item;this._arrayOfAllItems=[];this._arrayOfTopLevelItems=_3f2.items;for(i=0;i<this._arrayOfTopLevelItems.length;++i){item=this._arrayOfTopLevelItems[i];addItemAndSubItemsToArrayOfAllItems(item);item[this._rootItemPropName]=true;}var _3fe={};var key;for(i=0;i<this._arrayOfAllItems.length;++i){item=this._arrayOfAllItems[i];for(key in item){if(key!==this._rootItemPropName){var _400=item[key];if(_400!==null){if(!dojo.isArray(_400)){item[key]=[_400];}}else{item[key]=[null];}}_3fe[key]=key;}}while(_3fe[this._storeRefPropName]){this._storeRefPropName+="_";}while(_3fe[this._itemNumPropName]){this._itemNumPropName+="_";}var _401;var _402=_3f2.identifier;if(_402){this._itemsByIdentity={};this._features["dojo.data.api.Identity"]=_402;for(i=0;i<this._arrayOfAllItems.length;++i){item=this._arrayOfAllItems[i];_401=item[_402];var _403=_401[0];if(!this._itemsByIdentity[_403]){this._itemsByIdentity[_403]=item;}else{if(this._jsonFileUrl){throw new Error("dojo.data.ItemFileReadStore: The json data as specified by: ["+this._jsonFileUrl+"] is malformed. Items within the list have identifier: ["+_402+"]. Value collided: ["+_403+"]");}else{if(this._jsonData){throw new Error("dojo.data.ItemFileReadStore: The json data provided by the creation arguments is malformed. Items within the list have identifier: ["+_402+"]. Value collided: ["+_403+"]");}}}}}else{this._features["dojo.data.api.Identity"]=Number;}for(i=0;i<this._arrayOfAllItems.length;++i){item=this._arrayOfAllItems[i];item[this._storeRefPropName]=this;item[this._itemNumPropName]=i;}for(i=0;i<this._arrayOfAllItems.length;++i){item=this._arrayOfAllItems[i];for(key in item){_401=item[key];for(var j=0;j<_401.length;++j){_400=_401[j];if(_400!==null&&typeof _400=="object"){if(_400._type&&_400._value){var type=_400._type;var _406=this._datatypeMap[type];if(!_406){throw new Error("dojo.data.ItemFileReadStore: in the typeMap constructor arg, no object class was specified for the datatype '"+type+"'");}else{if(dojo.isFunction(_406)){_401[j]=new _406(_400._value);}else{if(dojo.isFunction(_406.deserialize)){_401[j]=_406.deserialize(_400._value);}else{throw new Error("dojo.data.ItemFileReadStore: Value provided in typeMap was neither a constructor, nor a an object with a deserialize function");}}}}if(_400._reference){var _407=_400._reference;if(dojo.isString(_407)){_401[j]=this._itemsByIdentity[_407];}else{for(var k=0;k<this._arrayOfAllItems.length;++k){var _409=this._arrayOfAllItems[k];var _40a=true;for(var _40b in _407){if(_409[_40b]!=_407[_40b]){_40a=false;}}if(_40a){_401[j]=_409;}}}}}}}}},getIdentity:function(item){var _40d=this._features["dojo.data.api.Identity"];if(_40d===Number){return item[this._itemNumPropName];}else{var _40e=item[_40d];if(_40e){return _40e[0];}}return null;},fetchItemByIdentity:function(_40f){if(!this._loadFinished){var self=this;if(this._jsonFileUrl){if(this._loadInProgress){this._queuedFetches.push({args:_40f});}else{this._loadInProgress=true;var _411={url:self._jsonFileUrl,handleAs:"json-comment-optional"};var _412=dojo.xhrGet(_411);_412.addCallback(function(data){var _414=_40f.scope?_40f.scope:dojo.global;try{self._getItemsFromLoadedData(data);self._loadFinished=true;self._loadInProgress=false;var item=self._getItemByIdentity(_40f.identity);if(_40f.onItem){_40f.onItem.call(_414,item);}self._handleQueuedFetches();}catch(error){self._loadInProgress=false;if(_40f.onError){_40f.onError.call(_414,error);}}});_412.addErrback(function(_416){self._loadInProgress=false;if(_40f.onError){var _417=_40f.scope?_40f.scope:dojo.global;_40f.onError.call(_417,_416);}});}}else{if(this._jsonData){self._getItemsFromLoadedData(self._jsonData);self._jsonData=null;self._loadFinished=true;var item=self._getItemByIdentity(_40f.identity);if(_40f.onItem){var _419=_40f.scope?_40f.scope:dojo.global;_40f.onItem.call(_419,item);}}}}else{var item=this._getItemByIdentity(_40f.identity);if(_40f.onItem){var _419=_40f.scope?_40f.scope:dojo.global;_40f.onItem.call(_419,item);}}},_getItemByIdentity:function(_41a){var item=null;if(this._itemsByIdentity){item=this._itemsByIdentity[_41a];}else{item=this._arrayOfAllItems[_41a];}if(item===undefined){item=null;}return item;},getIdentityAttributes:function(item){var _41d=this._features["dojo.data.api.Identity"];if(_41d===Number){return null;}else{return [_41d];}},_forceLoad:function(){var self=this;if(this._jsonFileUrl){var _41f={url:self._jsonFileUrl,handleAs:"json-comment-optional",sync:true};var _420=dojo.xhrGet(_41f);_420.addCallback(function(data){try{if(self._loadInProgress!==true&&!self._loadFinished){self._getItemsFromLoadedData(data);self._loadFinished=true;}}catch(e){console.log(e);throw e;}});_420.addErrback(function(_422){throw _422;});}else{if(this._jsonData){self._getItemsFromLoadedData(self._jsonData);self._jsonData=null;self._loadFinished=true;}}}});dojo.extend(dojo.data.ItemFileReadStore,dojo.data.util.simpleFetch);}if(!dojo._hasResource["dijit.form.ValidationTextBox"]){dojo._hasResource["dijit.form.ValidationTextBox"]=true;dojo.provide("dijit.form.ValidationTextBox");dojo.declare("dijit.form.ValidationTextBox",dijit.form.TextBox,{templateString:"<table style=\"display: -moz-inline-stack;\" class=\"dijit dijitReset dijitInlineTable\" cellspacing=\"0\" cellpadding=\"0\"\n\tid=\"widget_${id}\" name=\"${name}\"\n\tdojoAttachEvent=\"onmouseenter:_onMouse,onmouseleave:_onMouse\" waiRole=\"presentation\"\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset dijitInputField\" width=\"100%\"\n\t\t\t><input dojoAttachPoint='textbox,focusNode' dojoAttachEvent='onfocus,onblur:_onMouse,onkeyup,onkeypress:_onKeyPress' autocomplete=\"off\"\n\t\t\ttype='${type}' name='${name}'\n\t\t/></td\n\t\t><td class=\"dijitReset dijitValidationIconField\" width=\"0%\"\n\t\t\t><div dojoAttachPoint='iconNode' class='dijitValidationIcon'></div><div class='dijitValidationIconText'>&Chi;</div\n\t\t></td\n\t></tr\n></table>\n",baseClass:"dijitTextBox",required:false,promptMessage:"",invalidMessage:"$_unset_$",constraints:{},regExp:".*",regExpGen:function(_423){return this.regExp;},state:"",setValue:function(){this.inherited("setValue",arguments);this.validate(false);},validator:function(_424,_425){return (new RegExp("^("+this.regExpGen(_425)+")"+(this.required?"":"?")+"$")).test(_424)&&(!this.required||!this._isEmpty(_424))&&(this._isEmpty(_424)||this.parse(_424,_425)!==null);},isValid:function(_426){return this.validator(this.textbox.value,this.constraints);},_isEmpty:function(_427){return /^\s*$/.test(_427);},getErrorMessage:function(_428){return this.invalidMessage;},getPromptMessage:function(_429){return this.promptMessage;},validate:function(_42a){var _42b="";var _42c=this.isValid(_42a);var _42d=this._isEmpty(this.textbox.value);this.state=(_42c||(!this._hasBeenBlurred&&_42d))?"":"Error";this._setStateClass();dijit.setWaiState(this.focusNode,"invalid",(_42c?"false":"true"));if(_42a){if(_42d){_42b=this.getPromptMessage(true);}if(!_42b&&!_42c){_42b=this.getErrorMessage(true);}}this._displayMessage(_42b);},_message:"",_displayMessage:function(_42e){if(this._message==_42e){return;}this._message=_42e;this.displayMessage(_42e);},displayMessage:function(_42f){if(_42f){dijit.showTooltip(_42f,this.domNode);}else{dijit.hideTooltip(this.domNode);}},_hasBeenBlurred:false,_onBlur:function(evt){this._hasBeenBlurred=true;this.validate(false);this.inherited("_onBlur",arguments);},onfocus:function(evt){this.validate(true);this._onMouse(evt);},onkeyup:function(evt){this.onfocus(evt);},constructor:function(){this.constraints={};},postMixInProperties:function(){this.inherited("postMixInProperties",arguments);this.constraints.locale=this.lang;this.messages=dojo.i18n.getLocalization("dijit.form","validate",this.lang);if(this.invalidMessage=="$_unset_$"){this.invalidMessage=this.messages.invalidMessage;}var p=this.regExpGen(this.constraints);this.regExp=p;}});dojo.declare("dijit.form.MappedTextBox",dijit.form.ValidationTextBox,{serialize:function(val,_435){return (val.toString?val.toString():"");},toString:function(){var val=this.filter(this.getValue());return (val!=null)?((typeof val=="string")?val:this.serialize(val,this.constraints)):"";},validate:function(){this.valueNode.value=this.toString();this.inherited("validate",arguments);},postCreate:function(){var _437=this.textbox;var _438=(this.valueNode=document.createElement("input"));_438.setAttribute("type",_437.type);_438.setAttribute("value",this.toString());dojo.style(_438,"display","none");_438.name=this.textbox.name;this.textbox.name="_"+this.textbox.name+"_displayed_";this.textbox.removeAttribute("name");dojo.place(_438,_437,"after");this.inherited("postCreate",arguments);}});dojo.declare("dijit.form.RangeBoundTextBox",dijit.form.MappedTextBox,{rangeMessage:"",compare:function(val1,val2){return val1-val2;},rangeCheck:function(_43b,_43c){var _43d=(typeof _43c.min!="undefined");var _43e=(typeof _43c.max!="undefined");if(_43d||_43e){return (!_43d||this.compare(_43b,_43c.min)>=0)&&(!_43e||this.compare(_43b,_43c.max)<=0);}else{return true;}},isInRange:function(_43f){return this.rangeCheck(this.getValue(),this.constraints);},isValid:function(_440){return this.inherited("isValid",arguments)&&((this._isEmpty(this.textbox.value)&&!this.required)||this.isInRange(_440));},getErrorMessage:function(_441){if(dijit.form.RangeBoundTextBox.superclass.isValid.call(this,false)&&!this.isInRange(_441)){return this.rangeMessage;}else{return this.inherited("getErrorMessage",arguments);}},postMixInProperties:function(){this.inherited("postMixInProperties",arguments);if(!this.rangeMessage){this.messages=dojo.i18n.getLocalization("dijit.form","validate",this.lang);this.rangeMessage=this.messages.rangeMessage;}},postCreate:function(){this.inherited("postCreate",arguments);if(typeof this.constraints.min!="undefined"){dijit.setWaiState(this.focusNode,"valuemin",this.constraints.min);}if(typeof this.constraints.max!="undefined"){dijit.setWaiState(this.focusNode,"valuemax",this.constraints.max);}}});}if(!dojo._hasResource["dijit.form.ComboBox"]){dojo._hasResource["dijit.form.ComboBox"]=true;dojo.provide("dijit.form.ComboBox");dojo.declare("dijit.form.ComboBoxMixin",null,{item:null,pageSize:Infinity,store:null,query:{},autoComplete:true,searchDelay:100,searchAttr:"name",ignoreCase:true,hasDownArrow:true,_hasFocus:false,templateString:"<table class=\"dijit dijitReset dijitInlineTable dijitLeft\" cellspacing=\"0\" cellpadding=\"0\"\n\tid=\"widget_${id}\" name=\"${name}\" dojoAttachEvent=\"onmouseenter:_onMouse,onmouseleave:_onMouse\" waiRole=\"presentation\"\n\t><tr class=\"dijitReset\"\n\t\t><td class='dijitReset dijitStretch dijitInputField' width=\"100%\"\n\t\t\t><input type=\"text\" autocomplete=\"off\" name=\"${name}\"\n\t\t\tdojoAttachEvent=\"onkeypress, onkeyup, onfocus, compositionend\"\n\t\t\tdojoAttachPoint=\"textbox,focusNode\" waiRole=\"combobox\"\n\t\t/></td\n\t\t><td class=\"dijitReset dijitValidationIconField\" width=\"0%\"\n\t\t\t><div dojoAttachPoint='iconNode' class='dijitValidationIcon'></div\n\t\t\t><div class='dijitValidationIconText'>&Chi;</div\n\t\t></td\n\t\t><td class='dijitReset dijitRight dijitButtonNode dijitDownArrowButton' width=\"0%\"\n\t\t\tdojoAttachPoint=\"downArrowNode\"\n\t\t\tdojoAttachEvent=\"onmousedown:_onArrowMouseDown,onmouseup:_onMouse,onmouseenter:_onMouse,onmouseleave:_onMouse\"\n\t\t\t><div class=\"dijitDownArrowButtonInner\" waiRole=\"presentation\"\n\t\t\t\t><div class=\"dijitDownArrowButtonChar\">&#9660;</div\n\t\t\t></div\n\t\t></td\t\n\t></tr\n></table>\n",baseClass:"dijitComboBox",_lastDisplayedValue:"",getValue:function(){return dijit.form.TextBox.superclass.getValue.apply(this,arguments);},setDisplayedValue:function(_442){this._lastDisplayedValue=_442;this.setValue(_442,true);},_getCaretPos:function(_443){if(typeof (_443.selectionStart)=="number"){return _443.selectionStart;}else{if(dojo.isIE){var tr=document.selection.createRange().duplicate();var ntr=_443.createTextRange();tr.move("character",0);ntr.move("character",0);try{ntr.setEndPoint("EndToEnd",tr);return String(ntr.text).replace(/\r/g,"").length;}catch(e){return 0;}}}},_setCaretPos:function(_446,_447){_447=parseInt(_447);this._setSelectedRange(_446,_447,_447);},_setSelectedRange:function(_448,_449,end){if(!end){end=_448.value.length;}if(_448.setSelectionRange){dijit.focus(_448);_448.setSelectionRange(_449,end);}else{if(_448.createTextRange){var _44b=_448.createTextRange();with(_44b){collapse(true);moveEnd("character",end);moveStart("character",_449);select();}}else{_448.value=_448.value;_448.blur();dijit.focus(_448);var dist=parseInt(_448.value.length)-end;var _44d=String.fromCharCode(37);var tcc=_44d.charCodeAt(0);for(var x=0;x<dist;x++){var te=document.createEvent("KeyEvents");te.initKeyEvent("keypress",true,true,null,false,false,false,false,tcc,tcc);_448.dispatchEvent(te);}}}},onkeypress:function(evt){if(evt.altKey||(evt.ctrlKey&&evt.charCode!=118)){return;}var _452=false;this.item=null;if(this._isShowingNow){this._popupWidget.handleKey(evt);}switch(evt.keyCode){case dojo.keys.PAGE_DOWN:case dojo.keys.DOWN_ARROW:if(!this._isShowingNow||this._prev_key_esc){this._arrowPressed();_452=true;}else{this._announceOption(this._popupWidget.getHighlightedOption());}dojo.stopEvent(evt);this._prev_key_backspace=false;this._prev_key_esc=false;break;case dojo.keys.PAGE_UP:case dojo.keys.UP_ARROW:if(this._isShowingNow){this._announceOption(this._popupWidget.getHighlightedOption());}dojo.stopEvent(evt);this._prev_key_backspace=false;this._prev_key_esc=false;break;case dojo.keys.ENTER:var _453;if(this._isShowingNow&&(_453=this._popupWidget.getHighlightedOption())){if(_453==this._popupWidget.nextButton){this._nextSearch(1);dojo.stopEvent(evt);break;}else{if(_453==this._popupWidget.previousButton){this._nextSearch(-1);dojo.stopEvent(evt);break;}}}else{this.setDisplayedValue(this.getDisplayedValue());}evt.preventDefault();case dojo.keys.TAB:var _454=this.getDisplayedValue();if(this._popupWidget&&(_454==this._popupWidget._messages["previousMessage"]||_454==this._popupWidget._messages["nextMessage"])){break;}if(this._isShowingNow){this._prev_key_backspace=false;this._prev_key_esc=false;if(this._popupWidget.getHighlightedOption()){this._popupWidget.setValue({target:this._popupWidget.getHighlightedOption()},true);}this._hideResultList();}break;case dojo.keys.SPACE:this._prev_key_backspace=false;this._prev_key_esc=false;if(this._isShowingNow&&this._popupWidget.getHighlightedOption()){dojo.stopEvent(evt);this._selectOption();this._hideResultList();}else{_452=true;}break;case dojo.keys.ESCAPE:this._prev_key_backspace=false;this._prev_key_esc=true;this._hideResultList();if(this._lastDisplayedValue!=this.getDisplayedValue()){this.setDisplayedValue(this._lastDisplayedValue);dojo.stopEvent(evt);}else{this.setValue(this.getValue(),false);}break;case dojo.keys.DELETE:case dojo.keys.BACKSPACE:this._prev_key_esc=false;this._prev_key_backspace=true;_452=true;break;case dojo.keys.RIGHT_ARROW:case dojo.keys.LEFT_ARROW:this._prev_key_backspace=false;this._prev_key_esc=false;break;default:this._prev_key_backspace=false;this._prev_key_esc=false;if(dojo.isIE||evt.charCode!=0){_452=true;}}if(this.searchTimer){clearTimeout(this.searchTimer);}if(_452){this.searchTimer=setTimeout(dojo.hitch(this,this._startSearchFromInput),this.searchDelay);}},_autoCompleteText:function(text){this._setSelectedRange(this.focusNode,this.focusNode.value.length,this.focusNode.value.length);if(new RegExp("^"+escape(this.focusNode.value),this.ignoreCase?"i":"").test(escape(text))){var cpos=this._getCaretPos(this.focusNode);if((cpos+1)>this.focusNode.value.length){this.focusNode.value=text;this._setSelectedRange(this.focusNode,cpos,this.focusNode.value.length);dijit.setWaiState(this.focusNode,"valuenow",text);}}else{this.focusNode.value=text;this._setSelectedRange(this.focusNode,0,this.focusNode.value.length);dijit.setWaiState(this.focusNode,"valuenow",text);}},_openResultList:function(_457,_458){if(this.disabled||_458.query[this.searchAttr]!=this._lastQuery){return;}this._popupWidget.clearResultList();if(!_457.length){this._hideResultList();return;}var _459=new String(this.store.getValue(_457[0],this.searchAttr));if(_459&&this.autoComplete&&!this._prev_key_backspace&&(_458.query[this.searchAttr]!="*")){this._autoCompleteText(_459);dijit.setWaiState(this.focusNode||this.domNode,"valuenow",_459);}this._popupWidget.createOptions(_457,_458,dojo.hitch(this,this._getMenuLabelFromItem));this._showResultList();if(_458.direction){if(_458.direction==1){this._popupWidget.highlightFirstOption();}else{if(_458.direction==-1){this._popupWidget.highlightLastOption();}}this._announceOption(this._popupWidget.getHighlightedOption());}},_showResultList:function(){this._hideResultList();var _45a=this._popupWidget.getItems(),_45b=Math.min(_45a.length,this.maxListLength);this._arrowPressed();this._displayMessage("");with(this._popupWidget.domNode.style){width="";height="";}var best=this.open();var _45d=dojo.marginBox(this._popupWidget.domNode);this._popupWidget.domNode.style.overflow=((best.h==_45d.h)&&(best.w==_45d.w))?"hidden":"auto";var _45e=best.w;if(best.h<this._popupWidget.domNode.scrollHeight){_45e+=16;}dojo.marginBox(this._popupWidget.domNode,{h:best.h,w:Math.max(_45e,this.domNode.offsetWidth)});},_hideResultList:function(){if(this._isShowingNow){dijit.popup.close(this._popupWidget);this._arrowIdle();this._isShowingNow=false;}},_onBlur:function(){this._hasFocus=false;this._hasBeenBlurred=true;this._hideResultList();this._arrowIdle();var _45f=this.getDisplayedValue();if(this._popupWidget&&(_45f==this._popupWidget._messages["previousMessage"]||_45f==this._popupWidget._messages["nextMessage"])){this.setValue(this._lastValueReported,true);}else{this.setDisplayedValue(_45f);}},onfocus:function(evt){this._hasFocus=true;this._onMouse(evt);},_announceOption:function(node){if(node==null){return;}var _462;if(node==this._popupWidget.nextButton||node==this._popupWidget.previousButton){_462=node.innerHTML;}else{_462=this.store.getValue(node.item,this.searchAttr);}this.focusNode.value=this.focusNode.value.substring(0,this._getCaretPos(this.focusNode));this._autoCompleteText(_462);},_selectOption:function(evt){var tgt=null;if(!evt){evt={target:this._popupWidget.getHighlightedOption()};}if(!evt.target){this.setDisplayedValue(this.getDisplayedValue());return;}else{tgt=evt.target;}if(!evt.noHide){this._hideResultList();this._setCaretPos(this.focusNode,this.store.getValue(tgt.item,this.searchAttr).length);}this._doSelect(tgt);},_doSelect:function(tgt){this.item=tgt.item;this.setValue(this.store.getValue(tgt.item,this.searchAttr),true);},_onArrowMouseDown:function(evt){if(this.disabled){return;}dojo.stopEvent(evt);this.focus();if(this._isShowingNow){this._hideResultList();}else{this._startSearch("");}},_startSearchFromInput:function(){this._startSearch(this.focusNode.value);},_startSearch:function(key){if(!this._popupWidget){this._popupWidget=new dijit.form._ComboBoxMenu({onChange:dojo.hitch(this,this._selectOption)});}var _468=this.query;this._lastQuery=_468[this.searchAttr]=key+"*";var _469=this.store.fetch({queryOptions:{ignoreCase:this.ignoreCase,deep:true},query:_468,onComplete:dojo.hitch(this,"_openResultList"),start:0,count:this.pageSize});function nextSearch(_46a,_46b){_46a.start+=_46a.count*_46b;_46a.direction=_46b;_46a.store.fetch(_46a);};this._nextSearch=this._popupWidget.onPage=dojo.hitch(this,nextSearch,_469);},_getValueField:function(){return this.searchAttr;},_arrowPressed:function(){if(!this.disabled&&this.hasDownArrow){dojo.addClass(this.downArrowNode,"dijitArrowButtonActive");}},_arrowIdle:function(){if(!this.disabled&&this.hasDownArrow){dojo.removeClass(this.downArrowNode,"dojoArrowButtonPushed");}},compositionend:function(evt){this.onkeypress({charCode:-1});},constructor:function(){this.query={};},postMixInProperties:function(){if(!this.hasDownArrow){this.baseClass="dijitTextBox";}if(!this.store){var _46d=this.srcNodeRef?dojo.query("> option",this.srcNodeRef).map(function(node){node.style.display="none";return {value:node.getAttribute("value"),name:String(node.innerHTML)};}):{};this.store=new dojo.data.ItemFileReadStore({data:{identifier:this._getValueField(),items:_46d}});if(_46d&&_46d.length&&!this.value){this.value=_46d[this.srcNodeRef.selectedIndex!=-1?this.srcNodeRef.selectedIndex:0][this._getValueField()];}}},uninitialize:function(){if(this._popupWidget){this._hideResultList();this._popupWidget.destroy();}},_getMenuLabelFromItem:function(item){return {html:false,label:this.store.getValue(item,this.searchAttr)};},open:function(){this._isShowingNow=true;return dijit.popup.open({popup:this._popupWidget,around:this.domNode,parent:this});}});dojo.declare("dijit.form._ComboBoxMenu",[dijit._Widget,dijit._Templated],{templateString:"<div class='dijitMenu' dojoAttachEvent='onmousedown,onmouseup,onmouseover,onmouseout' tabIndex='-1' style='overflow:\"auto\";'>"+"<div class='dijitMenuItem dijitMenuPreviousButton' dojoAttachPoint='previousButton'></div>"+"<div class='dijitMenuItem dijitMenuNextButton' dojoAttachPoint='nextButton'></div>"+"</div>",_messages:null,postMixInProperties:function(){this._messages=dojo.i18n.getLocalization("dijit.form","ComboBox",this.lang);this.inherited("postMixInProperties",arguments);},setValue:function(_470){this.value=_470;this.onChange(_470);},onChange:function(_471){},onPage:function(_472){},postCreate:function(){this.previousButton.innerHTML=this._messages["previousMessage"];this.nextButton.innerHTML=this._messages["nextMessage"];this.inherited("postCreate",arguments);},onClose:function(){this._blurOptionNode();},_createOption:function(item,_474){var _475=_474(item);var _476=document.createElement("div");if(_475.html){_476.innerHTML=_475.label;}else{_476.appendChild(document.createTextNode(_475.label));}if(_476.innerHTML==""){_476.innerHTML="&nbsp;";}_476.item=item;return _476;},createOptions:function(_477,_478,_479){this.previousButton.style.display=_478.start==0?"none":"";var _47a=this;dojo.forEach(_477,function(item){var _47c=_47a._createOption(item,_479);_47c.className="dijitMenuItem";_47a.domNode.insertBefore(_47c,_47a.nextButton);});this.nextButton.style.display=_478.count==_477.length?"":"none";},clearResultList:function(){while(this.domNode.childNodes.length>2){this.domNode.removeChild(this.domNode.childNodes[this.domNode.childNodes.length-2]);}},getItems:function(){return this.domNode.childNodes;},getListLength:function(){return this.domNode.childNodes.length-2;},onmousedown:function(evt){dojo.stopEvent(evt);},onmouseup:function(evt){if(evt.target===this.domNode){return;}else{if(evt.target==this.previousButton){this.onPage(-1);}else{if(evt.target==this.nextButton){this.onPage(1);}else{var tgt=evt.target;while(!tgt.item){tgt=tgt.parentNode;}this.setValue({target:tgt},true);}}}},onmouseover:function(evt){if(evt.target===this.domNode){return;}var tgt=evt.target;if(!(tgt==this.previousButton||tgt==this.nextButton)){while(!tgt.item){tgt=tgt.parentNode;}}this._focusOptionNode(tgt);},onmouseout:function(evt){if(evt.target===this.domNode){return;}this._blurOptionNode();},_focusOptionNode:function(node){if(this._highlighted_option!=node){this._blurOptionNode();this._highlighted_option=node;dojo.addClass(this._highlighted_option,"dijitMenuItemHover");}},_blurOptionNode:function(){if(this._highlighted_option){dojo.removeClass(this._highlighted_option,"dijitMenuItemHover");this._highlighted_option=null;}},_highlightNextOption:function(){if(!this.getHighlightedOption()){this._focusOptionNode(this.domNode.firstChild.style.display=="none"?this.domNode.firstChild.nextSibling:this.domNode.firstChild);}else{if(this._highlighted_option.nextSibling&&this._highlighted_option.nextSibling.style.display!="none"){this._focusOptionNode(this._highlighted_option.nextSibling);}}dijit.scrollIntoView(this._highlighted_option);},highlightFirstOption:function(){this._focusOptionNode(this.domNode.firstChild.nextSibling);dijit.scrollIntoView(this._highlighted_option);},highlightLastOption:function(){this._focusOptionNode(this.domNode.lastChild.previousSibling);dijit.scrollIntoView(this._highlighted_option);},_highlightPrevOption:function(){if(!this.getHighlightedOption()){this._focusOptionNode(this.domNode.lastChild.style.display=="none"?this.domNode.lastChild.previousSibling:this.domNode.lastChild);}else{if(this._highlighted_option.previousSibling&&this._highlighted_option.previousSibling.style.display!="none"){this._focusOptionNode(this._highlighted_option.previousSibling);}}dijit.scrollIntoView(this._highlighted_option);},_page:function(up){var _485=0;var _486=this.domNode.scrollTop;var _487=parseInt(dojo.getComputedStyle(this.domNode).height);if(!this.getHighlightedOption()){this._highlightNextOption();}while(_485<_487){if(up){if(!this.getHighlightedOption().previousSibling||this._highlighted_option.previousSibling.style.display=="none"){break;}this._highlightPrevOption();}else{if(!this.getHighlightedOption().nextSibling||this._highlighted_option.nextSibling.style.display=="none"){break;}this._highlightNextOption();}var _488=this.domNode.scrollTop;_485+=(_488-_486)*(up?-1:1);_486=_488;}},pageUp:function(){this._page(true);},pageDown:function(){this._page(false);},getHighlightedOption:function(){return this._highlighted_option&&this._highlighted_option.parentNode?this._highlighted_option:null;},handleKey:function(evt){switch(evt.keyCode){case dojo.keys.DOWN_ARROW:this._highlightNextOption();break;case dojo.keys.PAGE_DOWN:this.pageDown();break;case dojo.keys.UP_ARROW:this._highlightPrevOption();break;case dojo.keys.PAGE_UP:this.pageUp();break;}}});dojo.declare("dijit.form.ComboBox",[dijit.form.ValidationTextBox,dijit.form.ComboBoxMixin],{postMixInProperties:function(){dijit.form.ComboBoxMixin.prototype.postMixInProperties.apply(this,arguments);dijit.form.ValidationTextBox.prototype.postMixInProperties.apply(this,arguments);}});}if(!dojo._hasResource["dojo.cldr.monetary"]){dojo._hasResource["dojo.cldr.monetary"]=true;dojo.provide("dojo.cldr.monetary");dojo.cldr.monetary.getData=function(code){var _48b={ADP:0,BHD:3,BIF:0,BYR:0,CLF:0,CLP:0,DJF:0,ESP:0,GNF:0,IQD:3,ITL:0,JOD:3,JPY:0,KMF:0,KRW:0,KWD:3,LUF:0,LYD:3,MGA:0,MGF:0,OMR:3,PYG:0,RWF:0,TND:3,TRL:0,VUV:0,XAF:0,XOF:0,XPF:0};var _48c={CHF:5};var _48d=_48b[code],_48e=_48c[code];if(typeof _48d=="undefined"){_48d=2;}if(typeof _48e=="undefined"){_48e=0;}return {places:_48d,round:_48e};};}if(!dojo._hasResource["dojo.currency"]){dojo._hasResource["dojo.currency"]=true;dojo.provide("dojo.currency");dojo.currency._mixInDefaults=function(_48f){_48f=_48f||{};_48f.type="currency";var _490=dojo.i18n.getLocalization("dojo.cldr","currency",_48f.locale)||{};var iso=_48f.currency;var data=dojo.cldr.monetary.getData(iso);dojo.forEach(["displayName","symbol","group","decimal"],function(prop){data[prop]=_490[iso+"_"+prop];});data.fractional=[true,false];return dojo.mixin(data,_48f);};dojo.currency.format=function(_494,_495){return dojo.number.format(_494,dojo.currency._mixInDefaults(_495));};dojo.currency.regexp=function(_496){return dojo.number.regexp(dojo.currency._mixInDefaults(_496));};dojo.currency.parse=function(_497,_498){return dojo.number.parse(_497,dojo.currency._mixInDefaults(_498));};}if(!dojo._hasResource["dijit.form.NumberTextBox"]){dojo._hasResource["dijit.form.NumberTextBox"]=true;dojo.provide("dijit.form.NumberTextBox");dojo.declare("dijit.form.NumberTextBoxMixin",null,{regExpGen:dojo.number.regexp,format:function(_499,_49a){if(isNaN(_499)){return "";}return dojo.number.format(_499,_49a);},parse:dojo.number.parse,filter:function(_49b){if(typeof _49b=="string"){return this.inherited("filter",arguments);}return (isNaN(_49b)?"":_49b);},value:NaN});dojo.declare("dijit.form.NumberTextBox",[dijit.form.RangeBoundTextBox,dijit.form.NumberTextBoxMixin],{});}if(!dojo._hasResource["dijit.form.CurrencyTextBox"]){dojo._hasResource["dijit.form.CurrencyTextBox"]=true;dojo.provide("dijit.form.CurrencyTextBox");dojo.declare("dijit.form.CurrencyTextBox",dijit.form.NumberTextBox,{currency:"",regExpGen:dojo.currency.regexp,format:dojo.currency.format,parse:dojo.currency.parse,postMixInProperties:function(){if(this.constraints===dijit.form.ValidationTextBox.prototype.constraints){this.constraints={};}this.constraints.currency=this.currency;dijit.form.CurrencyTextBox.superclass.postMixInProperties.apply(this,arguments);}});}if(!dojo._hasResource["dojo.cldr.supplemental"]){dojo._hasResource["dojo.cldr.supplemental"]=true;dojo.provide("dojo.cldr.supplemental");dojo.cldr.supplemental.getFirstDayOfWeek=function(_49c){var _49d={mv:5,ae:6,af:6,bh:6,dj:6,dz:6,eg:6,er:6,et:6,iq:6,ir:6,jo:6,ke:6,kw:6,lb:6,ly:6,ma:6,om:6,qa:6,sa:6,sd:6,so:6,tn:6,ye:6,as:0,au:0,az:0,bw:0,ca:0,cn:0,fo:0,ge:0,gl:0,gu:0,hk:0,ie:0,il:0,is:0,jm:0,jp:0,kg:0,kr:0,la:0,mh:0,mo:0,mp:0,mt:0,nz:0,ph:0,pk:0,sg:0,th:0,tt:0,tw:0,um:0,us:0,uz:0,vi:0,za:0,zw:0,et:0,mw:0,ng:0,tj:0,gb:0,sy:4};var _49e=dojo.cldr.supplemental._region(_49c);var dow=_49d[_49e];return (typeof dow=="undefined")?1:dow;};dojo.cldr.supplemental._region=function(_4a0){_4a0=dojo.i18n.normalizeLocale(_4a0);var tags=_4a0.split("-");var _4a2=tags[1];if(!_4a2){_4a2={de:"de",en:"us",es:"es",fi:"fi",fr:"fr",hu:"hu",it:"it",ja:"jp",ko:"kr",nl:"nl",pt:"br",sv:"se",zh:"cn"}[tags[0]];}else{if(_4a2.length==4){_4a2=tags[2];}}return _4a2;};dojo.cldr.supplemental.getWeekend=function(_4a3){var _4a4={eg:5,il:5,sy:5,"in":0,ae:4,bh:4,dz:4,iq:4,jo:4,kw:4,lb:4,ly:4,ma:4,om:4,qa:4,sa:4,sd:4,tn:4,ye:4};var _4a5={ae:5,bh:5,dz:5,iq:5,jo:5,kw:5,lb:5,ly:5,ma:5,om:5,qa:5,sa:5,sd:5,tn:5,ye:5,af:5,ir:5,eg:6,il:6,sy:6};var _4a6=dojo.cldr.supplemental._region(_4a3);var _4a7=_4a4[_4a6];var end=_4a5[_4a6];if(typeof _4a7=="undefined"){_4a7=6;}if(typeof end=="undefined"){end=0;}return {start:_4a7,end:end};};}if(!dojo._hasResource["dojo.date"]){dojo._hasResource["dojo.date"]=true;dojo.provide("dojo.date");dojo.date.getDaysInMonth=function(_4a9){var _4aa=_4a9.getMonth();var days=[31,28,31,30,31,30,31,31,30,31,30,31];if(_4aa==1&&dojo.date.isLeapYear(_4a9)){return 29;}return days[_4aa];};dojo.date.isLeapYear=function(_4ac){var year=_4ac.getFullYear();return !(year%400)||(!(year%4)&&!!(year%100));};dojo.date.getTimezoneName=function(_4ae){var str=_4ae.toString();var tz="";var _4b1;var pos=str.indexOf("(");if(pos>-1){tz=str.substring(++pos,str.indexOf(")"));}else{var pat=/([A-Z\/]+) \d{4}$/;if((_4b1=str.match(pat))){tz=_4b1[1];}else{str=_4ae.toLocaleString();pat=/ ([A-Z\/]+)$/;if((_4b1=str.match(pat))){tz=_4b1[1];}}}return (tz=="AM"||tz=="PM")?"":tz;};dojo.date.compare=function(_4b4,_4b5,_4b6){_4b4=new Date(Number(_4b4));_4b5=new Date(Number(_4b5||new Date()));if(typeof _4b6!=="undefined"){if(_4b6=="date"){_4b4.setHours(0,0,0,0);_4b5.setHours(0,0,0,0);}else{if(_4b6=="time"){_4b4.setFullYear(0,0,0);_4b5.setFullYear(0,0,0);}}}if(_4b4>_4b5){return 1;}if(_4b4<_4b5){return -1;}return 0;};dojo.date.add=function(date,_4b8,_4b9){var sum=new Date(Number(date));var _4bb=false;var _4bc="Date";switch(_4b8){case "day":break;case "weekday":var days,_4be;var adj=0;var mod=_4b9%5;if(!mod){days=(_4b9>0)?5:-5;_4be=(_4b9>0)?((_4b9-5)/5):((_4b9+5)/5);}else{days=mod;_4be=parseInt(_4b9/5);}var strt=date.getDay();if(strt==6&&_4b9>0){adj=1;}else{if(strt==0&&_4b9<0){adj=-1;}}var trgt=strt+days;if(trgt==0||trgt==6){adj=(_4b9>0)?2:-2;}_4b9=7*_4be+days+adj;break;case "year":_4bc="FullYear";_4bb=true;break;case "week":_4b9*=7;break;case "quarter":_4b9*=3;case "month":_4bb=true;_4bc="Month";break;case "hour":case "minute":case "second":case "millisecond":_4bc="UTC"+_4b8.charAt(0).toUpperCase()+_4b8.substring(1)+"s";}if(_4bc){sum["set"+_4bc](sum["get"+_4bc]()+_4b9);}if(_4bb&&(sum.getDate()<date.getDate())){sum.setDate(0);}return sum;};dojo.date.difference=function(_4c3,_4c4,_4c5){_4c4=_4c4||new Date();_4c5=_4c5||"day";var _4c6=_4c4.getFullYear()-_4c3.getFullYear();var _4c7=1;switch(_4c5){case "quarter":var m1=_4c3.getMonth();var m2=_4c4.getMonth();var q1=Math.floor(m1/3)+1;var q2=Math.floor(m2/3)+1;q2+=(_4c6*4);_4c7=q2-q1;break;case "weekday":var days=Math.round(dojo.date.difference(_4c3,_4c4,"day"));var _4cd=parseInt(dojo.date.difference(_4c3,_4c4,"week"));var mod=days%7;if(mod==0){days=_4cd*5;}else{var adj=0;var aDay=_4c3.getDay();var bDay=_4c4.getDay();_4cd=parseInt(days/7);mod=days%7;var _4d2=new Date(_4c3);_4d2.setDate(_4d2.getDate()+(_4cd*7));var _4d3=_4d2.getDay();if(days>0){switch(true){case aDay==6:adj=-1;break;case aDay==0:adj=0;break;case bDay==6:adj=-1;break;case bDay==0:adj=-2;break;case (_4d3+mod)>5:adj=-2;}}else{if(days<0){switch(true){case aDay==6:adj=0;break;case aDay==0:adj=1;break;case bDay==6:adj=2;break;case bDay==0:adj=1;break;case (_4d3+mod)<0:adj=2;}}}days+=adj;days-=(_4cd*2);}_4c7=days;break;case "year":_4c7=_4c6;break;case "month":_4c7=(_4c4.getMonth()-_4c3.getMonth())+(_4c6*12);break;case "week":_4c7=parseInt(dojo.date.difference(_4c3,_4c4,"day")/7);break;case "day":_4c7/=24;case "hour":_4c7/=60;case "minute":_4c7/=60;case "second":_4c7/=1000;case "millisecond":_4c7*=_4c4.getTime()-_4c3.getTime();}return Math.round(_4c7);};}if(!dojo._hasResource["dojo.date.locale"]){dojo._hasResource["dojo.date.locale"]=true;dojo.provide("dojo.date.locale");(function(){function formatPattern(_4d4,_4d5,_4d6){return _4d6.replace(/([a-z])\1*/ig,function(_4d7){var s;var c=_4d7.charAt(0);var l=_4d7.length;var pad;var _4dc=["abbr","wide","narrow"];switch(c){case "G":s=_4d5[(l<4)?"eraAbbr":"eraNames"][_4d4.getFullYear()<0?0:1];break;case "y":s=_4d4.getFullYear();switch(l){case 1:break;case 2:s=String(s);s=s.substr(s.length-2);break;default:pad=true;}break;case "Q":case "q":s=Math.ceil((_4d4.getMonth()+1)/3);pad=true;break;case "M":case "L":var m=_4d4.getMonth();var _4de;switch(l){case 1:case 2:s=m+1;pad=true;break;case 3:case 4:case 5:_4de=_4dc[l-3];break;}if(_4de){var type=(c=="L")?"standalone":"format";var prop=["months",type,_4de].join("-");s=_4d5[prop][m];}break;case "w":var _4e1=0;s=dojo.date.locale._getWeekOfYear(_4d4,_4e1);pad=true;break;case "d":s=_4d4.getDate();pad=true;break;case "D":s=dojo.date.locale._getDayOfYear(_4d4);pad=true;break;case "E":case "e":case "c":var d=_4d4.getDay();var _4de;switch(l){case 1:case 2:if(c=="e"){var _4e3=dojo.cldr.supplemental.getFirstDayOfWeek(options.locale);d=(d-_4e3+7)%7;}if(c!="c"){s=d+1;pad=true;break;}case 3:case 4:case 5:_4de=_4dc[l-3];break;}if(_4de){var type=(c=="c")?"standalone":"format";var prop=["days",type,_4de].join("-");s=_4d5[prop][d];}break;case "a":var _4e4=(_4d4.getHours()<12)?"am":"pm";s=_4d5[_4e4];break;case "h":case "H":case "K":case "k":var h=_4d4.getHours();switch(c){case "h":s=(h%12)||12;break;case "H":s=h;break;case "K":s=(h%12);break;case "k":s=h||24;break;}pad=true;break;case "m":s=_4d4.getMinutes();pad=true;break;case "s":s=_4d4.getSeconds();pad=true;break;case "S":s=Math.round(_4d4.getMilliseconds()*Math.pow(10,l-3));break;case "v":case "z":s=dojo.date.getTimezoneName(_4d4);if(s){break;}l=4;case "Z":var _4e6=_4d4.getTimezoneOffset();var tz=[(_4e6<=0?"+":"-"),dojo.string.pad(Math.floor(Math.abs(_4e6)/60),2),dojo.string.pad(Math.abs(_4e6)%60,2)];if(l==4){tz.splice(0,0,"GMT");tz.splice(3,0,":");}s=tz.join("");break;default:throw new Error("dojo.date.locale.format: invalid pattern char: "+_4d6);}if(pad){s=dojo.string.pad(s,l);}return s;});};dojo.date.locale.format=function(_4e8,_4e9){_4e9=_4e9||{};var _4ea=dojo.i18n.normalizeLocale(_4e9.locale);var _4eb=_4e9.formatLength||"short";var _4ec=dojo.date.locale._getGregorianBundle(_4ea);var str=[];var _4ee=dojo.hitch(this,formatPattern,_4e8,_4ec);if(_4e9.selector=="year"){var year=_4e8.getFullYear();if(_4ea.match(/^zh|^ja/)){year+="年";}return year;}if(_4e9.selector!="time"){var _4f0=_4e9.datePattern||_4ec["dateFormat-"+_4eb];if(_4f0){str.push(_processPattern(_4f0,_4ee));}}if(_4e9.selector!="date"){var _4f1=_4e9.timePattern||_4ec["timeFormat-"+_4eb];if(_4f1){str.push(_processPattern(_4f1,_4ee));}}var _4f2=str.join(" ");return _4f2;};dojo.date.locale.regexp=function(_4f3){return dojo.date.locale._parseInfo(_4f3).regexp;};dojo.date.locale._parseInfo=function(_4f4){_4f4=_4f4||{};var _4f5=dojo.i18n.normalizeLocale(_4f4.locale);var _4f6=dojo.date.locale._getGregorianBundle(_4f5);var _4f7=_4f4.formatLength||"short";var _4f8=_4f4.datePattern||_4f6["dateFormat-"+_4f7];var _4f9=_4f4.timePattern||_4f6["timeFormat-"+_4f7];var _4fa;if(_4f4.selector=="date"){_4fa=_4f8;}else{if(_4f4.selector=="time"){_4fa=_4f9;}else{_4fa=_4f8+" "+_4f9;}}var _4fb=[];var re=_processPattern(_4fa,dojo.hitch(this,_buildDateTimeRE,_4fb,_4f6,_4f4));return {regexp:re,tokens:_4fb,bundle:_4f6};};dojo.date.locale.parse=function(_4fd,_4fe){var info=dojo.date.locale._parseInfo(_4fe);var _500=info.tokens,_501=info.bundle;var re=new RegExp("^"+info.regexp+"$");var _503=re.exec(_4fd);if(!_503){return null;}var _504=["abbr","wide","narrow"];var _505=new Date(1972,0);var _506={};var amPm="";dojo.forEach(_503,function(v,i){if(!i){return;}var _50a=_500[i-1];var l=_50a.length;switch(_50a.charAt(0)){case "y":if(l!=2){_505.setFullYear(v);_506.year=v;}else{if(v<100){v=Number(v);var year=""+new Date().getFullYear();var _50d=year.substring(0,2)*100;var _50e=Number(year.substring(2,4));var _50f=Math.min(_50e+20,99);var num=(v<_50f)?_50d+v:_50d-100+v;_505.setFullYear(num);_506.year=num;}else{if(_4fe.strict){return null;}_505.setFullYear(v);_506.year=v;}}break;case "M":if(l>2){var _511=_501["months-format-"+_504[l-3]].concat();if(!_4fe.strict){v=v.replace(".","").toLowerCase();_511=dojo.map(_511,function(s){return s.replace(".","").toLowerCase();});}v=dojo.indexOf(_511,v);if(v==-1){return null;}}else{v--;}_505.setMonth(v);_506.month=v;break;case "E":case "e":var days=_501["days-format-"+_504[l-3]].concat();if(!_4fe.strict){v=v.toLowerCase();days=dojo.map(days,"".toLowerCase);}v=dojo.indexOf(days,v);if(v==-1){return null;}break;case "d":_505.setDate(v);_506.date=v;break;case "D":_505.setMonth(0);_505.setDate(v);break;case "a":var am=_4fe.am||_501.am;var pm=_4fe.pm||_501.pm;if(!_4fe.strict){var _516=/\./g;v=v.replace(_516,"").toLowerCase();am=am.replace(_516,"").toLowerCase();pm=pm.replace(_516,"").toLowerCase();}if(_4fe.strict&&v!=am&&v!=pm){return null;}amPm=(v==pm)?"p":(v==am)?"a":"";break;case "K":if(v==24){v=0;}case "h":case "H":case "k":if(v>23){return null;}_505.setHours(v);break;case "m":_505.setMinutes(v);break;case "s":_505.setSeconds(v);break;case "S":_505.setMilliseconds(v);}});var _517=_505.getHours();if(amPm==="p"&&_517<12){_505.setHours(_517+12);}else{if(amPm==="a"&&_517==12){_505.setHours(0);}}if(_506.year&&_505.getFullYear()!=_506.year){return null;}if(_506.month&&_505.getMonth()!=_506.month){return null;}if(_506.date&&_505.getDate()!=_506.date){return null;}return _505;};function _processPattern(_518,_519,_51a,_51b){var _51c=function(x){return x;};_519=_519||_51c;_51a=_51a||_51c;_51b=_51b||_51c;var _51e=_518.match(/(''|[^'])+/g);var _51f=false;dojo.forEach(_51e,function(_520,i){if(!_520){_51e[i]="";}else{_51e[i]=(_51f?_51a:_519)(_520);_51f=!_51f;}});return _51b(_51e.join(""));};function _buildDateTimeRE(_522,_523,_524,_525){_525=dojo.regexp.escapeString(_525);if(!_524.strict){_525=_525.replace(" a"," ?a");}return _525.replace(/([a-z])\1*/ig,function(_526){var s;var c=_526.charAt(0);var l=_526.length;var p2="",p3="";if(_524.strict){if(l>1){p2="0"+"{"+(l-1)+"}";}if(l>2){p3="0"+"{"+(l-2)+"}";}}else{p2="0?";p3="0{0,2}";}switch(c){case "y":s="\\d{2,4}";break;case "M":s=(l>2)?"\\S+":p2+"[1-9]|1[0-2]";break;case "D":s=p2+"[1-9]|"+p3+"[1-9][0-9]|[12][0-9][0-9]|3[0-5][0-9]|36[0-6]";break;case "d":s=p2+"[1-9]|[12]\\d|3[01]";break;case "w":s=p2+"[1-9]|[1-4][0-9]|5[0-3]";break;case "E":s="\\S+";break;case "h":s=p2+"[1-9]|1[0-2]";break;case "k":s=p2+"\\d|1[01]";break;case "H":s=p2+"\\d|1\\d|2[0-3]";break;case "K":s=p2+"[1-9]|1\\d|2[0-4]";break;case "m":case "s":s="[0-5]\\d";break;case "S":s="\\d{"+l+"}";break;case "a":var am=_524.am||_523.am||"AM";var pm=_524.pm||_523.pm||"PM";if(_524.strict){s=am+"|"+pm;}else{s=am+"|"+pm;if(am!=am.toLowerCase()){s+="|"+am.toLowerCase();}if(pm!=pm.toLowerCase()){s+="|"+pm.toLowerCase();}}break;default:s=".*";}if(_522){_522.push(_526);}return "("+s+")";}).replace(/[\xa0 ]/g,"[\\s\\xa0]");};})();(function(){var _52e=[];dojo.date.locale.addCustomFormats=function(_52f,_530){_52e.push({pkg:_52f,name:_530});};dojo.date.locale._getGregorianBundle=function(_531){var _532={};dojo.forEach(_52e,function(desc){var _534=dojo.i18n.getLocalization(desc.pkg,desc.name,_531);_532=dojo.mixin(_532,_534);},this);return _532;};})();dojo.date.locale.addCustomFormats("dojo.cldr","gregorian");dojo.date.locale.getNames=function(item,type,use,_538){var _539;var _53a=dojo.date.locale._getGregorianBundle(_538);var _53b=[item,use,type];if(use=="standAlone"){_539=_53a[_53b.join("-")];}_53b[1]="format";return (_539||_53a[_53b.join("-")]).concat();};dojo.date.locale.isWeekend=function(_53c,_53d){var _53e=dojo.cldr.supplemental.getWeekend(_53d);var day=(_53c||new Date()).getDay();if(_53e.end<_53e.start){_53e.end+=7;if(day<_53e.start){day+=7;}}return day>=_53e.start&&day<=_53e.end;};dojo.date.locale._getDayOfYear=function(_540){return dojo.date.difference(new Date(_540.getFullYear(),0,1),_540)+1;};dojo.date.locale._getWeekOfYear=function(_541,_542){if(arguments.length==1){_542=0;}var _543=new Date(_541.getFullYear(),0,1).getDay();var adj=(_543-_542+7)%7;var week=Math.floor((dojo.date.locale._getDayOfYear(_541)+adj-1)/7);if(_543==_542){week++;}return week;};}if(!dojo._hasResource["dijit._Calendar"]){dojo._hasResource["dijit._Calendar"]=true;dojo.provide("dijit._Calendar");dojo.declare("dijit._Calendar",[dijit._Widget,dijit._Templated],{templateString:"<table cellspacing=\"0\" cellpadding=\"0\" class=\"dijitCalendarContainer\">\n\t<thead>\n\t\t<tr class=\"dijitReset dijitCalendarMonthContainer\" valign=\"top\">\n\t\t\t<th class='dijitReset' dojoAttachPoint=\"decrementMonth\">\n\t\t\t\t<span class=\"dijitInline dijitCalendarIncrementControl dijitCalendarDecrease\"><span dojoAttachPoint=\"decreaseArrowNode\" class=\"dijitA11ySideArrow dijitCalendarIncrementControl dijitCalendarDecreaseInner\">-</span></span>\n\t\t\t</th>\n\t\t\t<th class='dijitReset' colspan=\"5\">\n\t\t\t\t<div dojoAttachPoint=\"monthLabelSpacer\" class=\"dijitCalendarMonthLabelSpacer\"></div>\n\t\t\t\t<div dojoAttachPoint=\"monthLabelNode\" class=\"dijitCalendarMonth\"></div>\n\t\t\t</th>\n\t\t\t<th class='dijitReset' dojoAttachPoint=\"incrementMonth\">\n\t\t\t\t<div class=\"dijitInline dijitCalendarIncrementControl dijitCalendarIncrease\"><span dojoAttachPoint=\"increaseArrowNode\" class=\"dijitA11ySideArrow dijitCalendarIncrementControl dijitCalendarIncreaseInner\">+</span></div>\n\t\t\t</th>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<th class=\"dijitReset dijitCalendarDayLabelTemplate\"><span class=\"dijitCalendarDayLabel\"></span></th>\n\t\t</tr>\n\t</thead>\n\t<tbody dojoAttachEvent=\"onclick: _onDayClick\" class=\"dijitReset dijitCalendarBodyContainer\">\n\t\t<tr class=\"dijitReset dijitCalendarWeekTemplate\">\n\t\t\t<td class=\"dijitReset dijitCalendarDateTemplate\"><span class=\"dijitCalendarDateLabel\"></span></td>\n\t\t</tr>\n\t</tbody>\n\t<tfoot class=\"dijitReset dijitCalendarYearContainer\">\n\t\t<tr>\n\t\t\t<td class='dijitReset' valign=\"top\" colspan=\"7\">\n\t\t\t\t<h3 class=\"dijitCalendarYearLabel\">\n\t\t\t\t\t<span dojoAttachPoint=\"previousYearLabelNode\" class=\"dijitInline dijitCalendarPreviousYear\"></span>\n\t\t\t\t\t<span dojoAttachPoint=\"currentYearLabelNode\" class=\"dijitInline dijitCalendarSelectedYear\"></span>\n\t\t\t\t\t<span dojoAttachPoint=\"nextYearLabelNode\" class=\"dijitInline dijitCalendarNextYear\"></span>\n\t\t\t\t</h3>\n\t\t\t</td>\n\t\t</tr>\n\t</tfoot>\n</table>\t\n",value:new Date(),dayWidth:"narrow",setValue:function(_546){if(!this.value||dojo.date.compare(_546,this.value)){_546=new Date(_546);this.displayMonth=new Date(_546);if(!this.isDisabledDate(_546,this.lang)){this.value=_546;this.value.setHours(0,0,0,0);this.onChange(this.value);}this._populateGrid();}},_setText:function(node,text){while(node.firstChild){node.removeChild(node.firstChild);}node.appendChild(document.createTextNode(text));},_populateGrid:function(){var _549=this.displayMonth;_549.setDate(1);var _54a=_549.getDay();var _54b=dojo.date.getDaysInMonth(_549);var _54c=dojo.date.getDaysInMonth(dojo.date.add(_549,"month",-1));var _54d=new Date();var _54e=this.value;var _54f=dojo.cldr.supplemental.getFirstDayOfWeek(this.lang);if(_54f>_54a){_54f-=7;}dojo.query(".dijitCalendarDateTemplate",this.domNode).forEach(function(_550,i){i+=_54f;var date=new Date(_549);var _553,_554="dijitCalendar",adj=0;if(i<_54a){_553=_54c-_54a+i+1;adj=-1;_554+="Previous";}else{if(i>=(_54a+_54b)){_553=i-_54a-_54b+1;adj=1;_554+="Next";}else{_553=i-_54a+1;_554+="Current";}}if(adj){date=dojo.date.add(date,"month",adj);}date.setDate(_553);if(!dojo.date.compare(date,_54d,"date")){_554="dijitCalendarCurrentDate "+_554;}if(!dojo.date.compare(date,_54e,"date")){_554="dijitCalendarSelectedDate "+_554;}if(this.isDisabledDate(date,this.lang)){_554="dijitCalendarDisabledDate "+_554;}_550.className=_554+"Month dijitCalendarDateTemplate";_550.dijitDateValue=date.valueOf();var _556=dojo.query(".dijitCalendarDateLabel",_550)[0];this._setText(_556,date.getDate());},this);var _557=dojo.date.locale.getNames("months","wide","standAlone",this.lang);this._setText(this.monthLabelNode,_557[_549.getMonth()]);var y=_549.getFullYear()-1;dojo.forEach(["previous","current","next"],function(name){this._setText(this[name+"YearLabelNode"],dojo.date.locale.format(new Date(y++,0),{selector:"year",locale:this.lang}));},this);var _55a=this;var _55b=function(_55c,_55d,adj){dijit.typematic.addMouseListener(_55a[_55c],_55a,function(_55f){if(_55f>=0){_55a._adjustDisplay(_55d,adj);}},0.8,500);};_55b("incrementMonth","month",1);_55b("decrementMonth","month",-1);_55b("nextYearLabelNode","year",1);_55b("previousYearLabelNode","year",-1);},postCreate:function(){dijit._Calendar.superclass.postCreate.apply(this);var _560=dojo.hitch(this,function(_561,n){var _563=dojo.query(_561,this.domNode)[0];for(var i=0;i<n;i++){_563.parentNode.appendChild(_563.cloneNode(true));}});_560(".dijitCalendarDayLabelTemplate",6);_560(".dijitCalendarDateTemplate",6);_560(".dijitCalendarWeekTemplate",5);var _565=dojo.date.locale.getNames("days",this.dayWidth,"standAlone",this.lang);var _566=dojo.cldr.supplemental.getFirstDayOfWeek(this.lang);dojo.query(".dijitCalendarDayLabel",this.domNode).forEach(function(_567,i){this._setText(_567,_565[(i+_566)%7]);},this);var _569=dojo.date.locale.getNames("months","wide","standAlone",this.lang);dojo.forEach(_569,function(name){var _56b=dojo.doc.createElement("div");this._setText(_56b,name);this.monthLabelSpacer.appendChild(_56b);},this);this.value=null;this.setValue(new Date());},_adjustDisplay:function(part,_56d){this.displayMonth=dojo.date.add(this.displayMonth,part,_56d);this._populateGrid();},_onDayClick:function(evt){var node=evt.target;dojo.stopEvent(evt);while(!node.dijitDateValue){node=node.parentNode;}if(!dojo.hasClass(node,"dijitCalendarDisabledDate")){this.setValue(node.dijitDateValue);this.onValueSelected(this.value);}},onValueSelected:function(date){},onChange:function(date){},isDisabledDate:function(_572,_573){return false;}});}if(!dojo._hasResource["dijit._TimePicker"]){dojo._hasResource["dijit._TimePicker"]=true;dojo.provide("dijit._TimePicker");dojo.declare("dijit._TimePicker",[dijit._Widget,dijit._Templated],{templateString:"<div id=\"widget_${id}\" class=\"dijitMenu\"\n ><div dojoAttachPoint=\"upArrow\" class=\"dijitButtonNode\"><span class=\"dijitTimePickerA11yText\">&#9650;</span></div\n ><div dojoAttachPoint=\"timeMenu,focusNode\" dojoAttachEvent=\"onclick:_onOptionSelected,onmouseover,onmouseout\"></div\n ><div dojoAttachPoint=\"downArrow\" class=\"dijitButtonNode\"><span class=\"dijitTimePickerA11yText\">&#9660;</span></div\n></div>\n",baseClass:"dijitTimePicker",clickableIncrement:"T00:15:00",visibleIncrement:"T01:00:00",visibleRange:"T05:00:00",value:new Date(),_visibleIncrement:2,_clickableIncrement:1,_totalIncrements:10,constraints:{},serialize:dojo.date.stamp.toISOString,setValue:function(date,_575){this.value=date;this._showText();},isDisabledDate:function(_576,_577){return false;},_showText:function(){this.timeMenu.innerHTML="";var _578=dojo.date.stamp.fromISOString;this._clickableIncrementDate=_578(this.clickableIncrement);this._visibleIncrementDate=_578(this.visibleIncrement);this._visibleRangeDate=_578(this.visibleRange);var _579=function(date){return date.getHours()*60*60+date.getMinutes()*60+date.getSeconds();};var _57b=_579(this._clickableIncrementDate);var _57c=_579(this._visibleIncrementDate);var _57d=_579(this._visibleRangeDate);var time=this.value.getTime();this._refDate=new Date(time-time%(_57c*1000));this._clickableIncrement=1;this._totalIncrements=_57d/_57b;this._visibleIncrement=_57c/_57b;for(var i=-this._totalIncrements/2;i<=this._totalIncrements/2;i+=this._clickableIncrement){var div=this._createOption(i);this.timeMenu.appendChild(div);}},postCreate:function(){if(this.constraints===dijit._TimePicker.prototype.constraints){this.constraints={};}if(!this.constraints.locale){this.constraints.locale=this.lang;}this.connect(this.timeMenu,dojo.isIE?"onmousewheel":"DOMMouseScroll","_mouseWheeled");dijit.typematic.addMouseListener(this.upArrow,this,this._onArrowUp,0.8,500);dijit.typematic.addMouseListener(this.downArrow,this,this._onArrowDown,0.8,500);this.inherited("postCreate",arguments);this.setValue(this.value);},_createOption:function(_581){var div=document.createElement("div");var date=(div.date=new Date(this._refDate));div.index=_581;var _584=this._clickableIncrementDate;date.setHours(date.getHours()+_584.getHours()*_581,date.getMinutes()+_584.getMinutes()*_581,date.getSeconds()+_584.getSeconds()*_581);var _585=document.createElement("div");dojo.addClass(div,this.baseClass+"Item");dojo.addClass(_585,this.baseClass+"ItemInner");_585.innerHTML=dojo.date.locale.format(date,this.constraints);div.appendChild(_585);if(_581%this._visibleIncrement<1&&_581%this._visibleIncrement>-1){dojo.addClass(div,this.baseClass+"Marker");}else{if(_581%this._clickableIncrement==0){dojo.addClass(div,this.baseClass+"Tick");}}if(this.isDisabledDate(date)){dojo.addClass(div,this.baseClass+"ItemDisabled");}if(dojo.date.compare(this.value,date,this.constraints.selector)==0){div.selected=true;dojo.addClass(div,this.baseClass+"ItemSelected");}return div;},_onOptionSelected:function(tgt){var _587=tgt.target.date||tgt.target.parentNode.date;if(!_587||this.isDisabledDate(_587)){return;}this.setValue(_587);this.onValueSelected(_587);},onValueSelected:function(_588){},onmouseover:function(e){var tgr=(e.target.parentNode===this.timeMenu)?e.target:e.target.parentNode;this._highlighted_option=tgr;dojo.addClass(tgr,this.baseClass+"ItemHover");},onmouseout:function(e){var tgr=(e.target.parentNode===this.timeMenu)?e.target:e.target.parentNode;if(this._highlighted_option===tgr){dojo.removeClass(tgr,this.baseClass+"ItemHover");}},_mouseWheeled:function(e){dojo.stopEvent(e);var _58e=(dojo.isIE?e.wheelDelta:-e.detail);this[(_58e>0?"_onArrowUp":"_onArrowDown")]();},_onArrowUp:function(){var _58f=this.timeMenu.childNodes[0].index-1;var div=this._createOption(_58f);this.timeMenu.removeChild(this.timeMenu.childNodes[this.timeMenu.childNodes.length-1]);this.timeMenu.insertBefore(div,this.timeMenu.childNodes[0]);},_onArrowDown:function(){var _591=this.timeMenu.childNodes[this.timeMenu.childNodes.length-1].index+1;var div=this._createOption(_591);this.timeMenu.removeChild(this.timeMenu.childNodes[0]);this.timeMenu.appendChild(div);}});}if(!dojo._hasResource["dijit.form.TimeTextBox"]){dojo._hasResource["dijit.form.TimeTextBox"]=true;dojo.provide("dijit.form.TimeTextBox");dojo.declare("dijit.form.TimeTextBox",dijit.form.RangeBoundTextBox,{regExpGen:dojo.date.locale.regexp,compare:dojo.date.compare,format:function(_593,_594){if(!_593||_593.toString()==this._invalid){return null;}return dojo.date.locale.format(_593,_594);},parse:dojo.date.locale.parse,serialize:dojo.date.stamp.toISOString,value:new Date(""),_invalid:(new Date("")).toString(),_popupClass:"dijit._TimePicker",postMixInProperties:function(){this.inherited("postMixInProperties",arguments);var _595=this.constraints;_595.selector="time";if(typeof _595.min=="string"){_595.min=dojo.date.stamp.fromISOString(_595.min);}if(typeof _595.max=="string"){_595.max=dojo.date.stamp.fromISOString(_595.max);}},_onFocus:function(evt){this._open();},setValue:function(_597,_598){this.inherited("setValue",arguments);if(this._picker){if(!_597||_597.toString()==this._invalid){_597=new Date();}this._picker.setValue(_597);}},_open:function(){if(this.disabled){return;}var self=this;if(!this._picker){var _59a=dojo.getObject(this._popupClass,false);this._picker=new _59a({onValueSelected:function(_59b){self.focus();setTimeout(dojo.hitch(self,"_close"),1);dijit.form.TimeTextBox.superclass.setValue.call(self,_59b,true);},lang:this.lang,constraints:this.constraints,isDisabledDate:function(date){return self.constraints&&(dojo.date.compare(self.constraints.min,date)>0||dojo.date.compare(self.constraints.max,date)<0);}});this._picker.setValue(this.getValue()||new Date());}if(!this._opened){dijit.popup.open({parent:this,popup:this._picker,around:this.domNode,onCancel:dojo.hitch(this,this._close),onClose:function(){self._opened=false;}});this._opened=true;}dojo.marginBox(this._picker.domNode,{w:this.domNode.offsetWidth});},_close:function(){if(this._opened){dijit.popup.close(this._picker);this._opened=false;}},_onBlur:function(){this._close();this.inherited("_onBlur",arguments);},getDisplayedValue:function(){return this.textbox.value;},setDisplayedValue:function(_59d){this.textbox.value=_59d;}});}if(!dojo._hasResource["dijit.form.DateTextBox"]){dojo._hasResource["dijit.form.DateTextBox"]=true;dojo.provide("dijit.form.DateTextBox");dojo.declare("dijit.form.DateTextBox",dijit.form.TimeTextBox,{_popupClass:"dijit._Calendar",postMixInProperties:function(){this.inherited("postMixInProperties",arguments);this.constraints.selector="date";}});}if(!dojo._hasResource["dijit.form.FilteringSelect"]){dojo._hasResource["dijit.form.FilteringSelect"]=true;dojo.provide("dijit.form.FilteringSelect");dojo.declare("dijit.form.FilteringSelect",[dijit.form.MappedTextBox,dijit.form.ComboBoxMixin],{labelAttr:"",labelType:"text",_isvalid:true,isValid:function(){return this._isvalid;},_callbackSetLabel:function(_59e,_59f,_5a0){if(_59f&&_59f.query[this.searchAttr]!=this._lastQuery){return;}if(!_59e.length){if(!this._hasFocus){this.valueNode.value="";}dijit.form.TextBox.superclass.setValue.call(this,undefined,!this._hasFocus);this._isvalid=false;this.validate(this._hasFocus);}else{this._setValueFromItem(_59e[0],_5a0);}},_openResultList:function(_5a1,_5a2){if(_5a2.query[this.searchAttr]!=this._lastQuery){return;}this._isvalid=_5a1.length!=0;this.validate(true);dijit.form.ComboBoxMixin.prototype._openResultList.apply(this,arguments);},getValue:function(){return this.valueNode.value;},_getValueField:function(){return "value";},_setValue:function(_5a3,_5a4,_5a5){this.valueNode.value=_5a3;dijit.form.FilteringSelect.superclass.setValue.call(this,_5a3,_5a5,_5a4);this._lastDisplayedValue=_5a4;},setValue:function(_5a6,_5a7){var self=this;var _5a9=function(item,_5ab){if(item){if(self.store.isItemLoaded(item)){self._callbackSetLabel([item],undefined,_5ab);}else{self.store.loadItem({item:item,onItem:function(_5ac,_5ad){self._callbackSetLabel(_5ac,_5ad,_5ab);}});}}else{self._isvalid=false;self.validate(false);}};this.store.fetchItemByIdentity({identity:_5a6,onItem:function(item){_5a9(item,_5a7);}});},_setValueFromItem:function(item,_5b0){this._isvalid=true;this._setValue(this.store.getIdentity(item),this.labelFunc(item,this.store),_5b0);},labelFunc:function(item,_5b2){return _5b2.getValue(item,this.searchAttr);},onkeyup:function(evt){},_doSelect:function(tgt){this.item=tgt.item;this._setValueFromItem(tgt.item,true);},setDisplayedValue:function(_5b5){if(this.store){var _5b6={};this._lastQuery=_5b6[this.searchAttr]=_5b5;this.textbox.value=_5b5;this._lastDisplayedValue=_5b5;this.store.fetch({query:_5b6,queryOptions:{ignoreCase:this.ignoreCase,deep:true},onComplete:dojo.hitch(this,this._callbackSetLabel)});}},_getMenuLabelFromItem:function(item){if(this.labelAttr){return {html:this.labelType=="html",label:this.store.getValue(item,this.labelAttr)};}else{return dijit.form.ComboBoxMixin.prototype._getMenuLabelFromItem.apply(this,arguments);}},postMixInProperties:function(){dijit.form.ComboBoxMixin.prototype.postMixInProperties.apply(this,arguments);dijit.form.MappedTextBox.prototype.postMixInProperties.apply(this,arguments);}});}if(!dojo._hasResource["dijit.form._Spinner"]){dojo._hasResource["dijit.form._Spinner"]=true;dojo.provide("dijit.form._Spinner");dojo.declare("dijit.form._Spinner",dijit.form.RangeBoundTextBox,{defaultTimeout:500,timeoutChangeRate:0.9,smallDelta:1,largeDelta:10,templateString:"<table class=\"dijit dijitReset dijitInlineTable dijitLeft\" cellspacing=\"0\" cellpadding=\"0\"\n\tid=\"widget_${id}\" name=\"${name}\"\n\tdojoAttachEvent=\"onmouseenter:_onMouse,onmouseleave:_onMouse,onkeypress:_onKeyPress\"\n\twaiRole=\"presentation\"\n\t><tr class=\"dijitReset\"\n\t\t><td rowspan=\"2\" class=\"dijitReset dijitStretch dijitInputField\" width=\"100%\"\n\t\t\t><input dojoAttachPoint=\"textbox,focusNode\" type=\"${type}\" dojoAttachEvent=\"onfocus,onkeyup\"\n\t\t\t\twaiRole=\"spinbutton\" autocomplete=\"off\" name=\"${name}\"\n\t\t></td\n\t\t><td rowspan=\"2\" class=\"dijitReset dijitValidationIconField\" width=\"0%\" \n\t\t\t><div dojoAttachPoint='iconNode' class='dijitValidationIcon'></div\n\t\t></td\n\t\t><td class=\"dijitReset dijitRight dijitButtonNode dijitUpArrowButton\" width=\"0%\"\n\t\t\t\tdojoAttachPoint=\"upArrowNode\"\n\t\t\t\tdojoAttachEvent=\"onmousedown:_handleUpArrowEvent,onmouseup:_handleUpArrowEvent,onmouseover:_handleUpArrowEvent,onmouseout:_handleUpArrowEvent\"\n\t\t\t\tstateModifier=\"UpArrow\"\n\t\t\t><div class=\"dijitA11yUpArrow\">&#9650;</div\n\t\t></td\n\t></tr\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset dijitRight dijitButtonNode dijitDownArrowButton\" width=\"0%\"\n\t\t\t\tdojoAttachPoint=\"downArrowNode\"\n\t\t\t\tdojoAttachEvent=\"onmousedown:_handleDownArrowEvent,onmouseup:_handleDownArrowEvent,onmouseover:_handleDownArrowEvent,onmouseout:_handleDownArrowEvent\"\n\t\t\t\tstateModifier=\"DownArrow\"\n\t\t\t><div class=\"dijitA11yDownArrow\">&#9660;</div\n\t\t></td\n\t></tr\n></table>\n\n",baseClass:"dijitSpinner",adjust:function(val,_5b9){return val;},_handleUpArrowEvent:function(e){this._onMouse(e,this.upArrowNode);},_handleDownArrowEvent:function(e){this._onMouse(e,this.downArrowNode);},_arrowPressed:function(_5bc,_5bd){if(this.disabled){return;}dojo.addClass(_5bc,"dijitSpinnerButtonActive");this.setValue(this.adjust(this.getValue(),_5bd*this.smallDelta),false);},_arrowReleased:function(node){if(this.disabled){return;}this._wheelTimer=null;dijit.focus(this.textbox);dojo.removeClass(node,"dijitSpinnerButtonActive");},_typematicCallback:function(_5bf,node,evt){if(node==this.textbox){node=(evt.keyCode==dojo.keys.UP_ARROW)?this.upArrowNode:this.downArrowNode;}if(_5bf==-1){this._arrowReleased(node);}else{this._arrowPressed(node,(node==this.upArrowNode)?1:-1);}},_wheelTimer:null,_mouseWheeled:function(evt){dojo.stopEvent(evt);var _5c3=0;if(typeof evt.wheelDelta=="number"){_5c3=evt.wheelDelta;}else{if(typeof evt.detail=="number"){_5c3=-evt.detail;}}if(_5c3>0){var node=this.upArrowNode;var dir=+1;}else{if(_5c3<0){var node=this.downArrowNode;var dir=-1;}else{return;}}this._arrowPressed(node,dir);if(this._wheelTimer!=null){clearTimeout(this._wheelTimer);}var _5c6=this;this._wheelTimer=setTimeout(function(){_5c6._arrowReleased(node);},50);},postCreate:function(){this.inherited("postCreate",arguments);this.connect(this.textbox,dojo.isIE?"onmousewheel":"DOMMouseScroll","_mouseWheeled");dijit.typematic.addListener(this.upArrowNode,this.textbox,{keyCode:dojo.keys.UP_ARROW,ctrlKey:false,altKey:false,shiftKey:false},this,"_typematicCallback",this.timeoutChangeRate,this.defaultTimeout);dijit.typematic.addListener(this.downArrowNode,this.textbox,{keyCode:dojo.keys.DOWN_ARROW,ctrlKey:false,altKey:false,shiftKey:false},this,"_typematicCallback",this.timeoutChangeRate,this.defaultTimeout);}});}if(!dojo._hasResource["dijit.form.NumberSpinner"]){dojo._hasResource["dijit.form.NumberSpinner"]=true;dojo.provide("dijit.form.NumberSpinner");dojo.declare("dijit.form.NumberSpinner",[dijit.form._Spinner,dijit.form.NumberTextBoxMixin],{required:true,adjust:function(val,_5c8){var _5c9=val+_5c8;if(isNaN(val)||isNaN(_5c9)){return val;}if((typeof this.constraints.max=="number")&&(_5c9>this.constraints.max)){_5c9=this.constraints.max;}if((typeof this.constraints.min=="number")&&(_5c9<this.constraints.min)){_5c9=this.constraints.min;}return _5c9;}});}if(!dojo._hasResource["dijit.form.Slider"]){dojo._hasResource["dijit.form.Slider"]=true;dojo.provide("dijit.form.Slider");dojo.declare("dijit.form.HorizontalSlider",[dijit.form._FormWidget,dijit._Container],{templateString:"<table class=\"dijit dijitReset dijitSlider\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\" rules=\"none\"\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset\" colspan=\"2\"></td\n\t\t><td dojoAttachPoint=\"containerNode,topDecoration\" class=\"dijitReset\" style=\"text-align:center;width:100%;\"></td\n\t\t><td class=\"dijitReset\" colspan=\"2\"></td\n\t></tr\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset dijitSliderButtonContainer dijitHorizontalSliderButtonContainer\"\n\t\t\t><div class=\"dijitHorizontalSliderDecrementIcon\" tabIndex=\"-1\" style=\"display:none\" dojoAttachPoint=\"decrementButton\" dojoAttachEvent=\"onclick: decrement\"><span class=\"dijitSliderButtonInner\">-</span></div\n\t\t></td\n\t\t><td class=\"dijitReset\"\n\t\t\t><div class=\"dijitSliderBar dijitSliderBumper dijitHorizontalSliderBumper dijitSliderLeftBumper dijitHorizontalSliderLeftBumper\"></div\n\t\t></td\n\t\t><td class=\"dijitReset\"\n\t\t\t><input dojoAttachPoint=\"valueNode\" type=\"hidden\" name=\"${name}\"\n\t\t\t/><div style=\"position:relative;\" dojoAttachPoint=\"sliderBarContainer\"\n\t\t\t\t><div dojoAttachPoint=\"progressBar\" class=\"dijitSliderBar dijitHorizontalSliderBar dijitSliderProgressBar dijitHorizontalSliderProgressBar\" dojoAttachEvent=\"onclick:_onBarClick\"\n\t\t\t\t\t><div dojoAttachPoint=\"sliderHandle,focusNode\" class=\"dijitSliderMoveable dijitHorizontalSliderMoveable\" dojoAttachEvent=\"onkeypress:_onKeyPress,onclick:_onHandleClick\" waiRole=\"slider\" valuemin=\"${minimum}\" valuemax=\"${maximum}\"\n\t\t\t\t\t\t><div class=\"dijitSliderImageHandle dijitHorizontalSliderImageHandle\"></div\n\t\t\t\t\t></div\n\t\t\t\t></div\n\t\t\t\t><div dojoAttachPoint=\"remainingBar\" class=\"dijitSliderBar dijitHorizontalSliderBar dijitSliderRemainingBar dijitHorizontalSliderRemainingBar\" dojoAttachEvent=\"onclick:_onBarClick\"></div\n\t\t\t></div\n\t\t></td\n\t\t><td class=\"dijitReset\"\n\t\t\t><div class=\"dijitSliderBar dijitSliderBumper dijitHorizontalSliderBumper dijitSliderRightBumper dijitHorizontalSliderRightBumper\"></div\n\t\t></td\n\t\t><td class=\"dijitReset dijitSliderButtonContainer dijitHorizontalSliderButtonContainer\" style=\"right:0px;\"\n\t\t\t><div class=\"dijitHorizontalSliderIncrementIcon\" tabIndex=\"-1\" style=\"display:none\" dojoAttachPoint=\"incrementButton\" dojoAttachEvent=\"onclick: increment\"><span class=\"dijitSliderButtonInner\">+</span></div\n\t\t></td\n\t></tr\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset\" colspan=\"2\"></td\n\t\t><td dojoAttachPoint=\"containerNode,bottomDecoration\" class=\"dijitReset\" style=\"text-align:center;\"></td\n\t\t><td class=\"dijitReset\" colspan=\"2\"></td\n\t></tr\n></table>\n",value:0,showButtons:true,minimum:0,maximum:100,discreteValues:Infinity,pageIncrement:2,clickSelect:true,widgetsInTemplate:true,attributeMap:dojo.mixin(dojo.clone(dijit.form._FormWidget.prototype.attributeMap),{id:"",name:"valueNode"}),baseClass:"dijitSlider",_mousePixelCoord:"pageX",_pixelCount:"w",_startingPixelCoord:"x",_startingPixelCount:"l",_handleOffsetCoord:"left",_progressPixelSize:"width",_upsideDown:false,_onKeyPress:function(e){if(this.disabled||e.altKey||e.ctrlKey){return;}switch(e.keyCode){case dojo.keys.HOME:this.setValue(this.minimum,false);break;case dojo.keys.END:this.setValue(this.maximum,false);break;case dojo.keys.UP_ARROW:case (this._isReversed()?dojo.keys.LEFT_ARROW:dojo.keys.RIGHT_ARROW):case dojo.keys.PAGE_UP:this.increment(e);break;case dojo.keys.DOWN_ARROW:case (this._isReversed()?dojo.keys.RIGHT_ARROW:dojo.keys.LEFT_ARROW):case dojo.keys.PAGE_DOWN:this.decrement(e);break;default:this.inherited("_onKeyPress",arguments);return;}dojo.stopEvent(e);},_onHandleClick:function(e){if(this.disabled){return;}if(!dojo.isIE){dijit.focus(this.sliderHandle);}dojo.stopEvent(e);},_isReversed:function(){return !(this._upsideDown||this.isLeftToRight());},_onBarClick:function(e){if(this.disabled||!this.clickSelect){return;}dijit.focus(this.sliderHandle);dojo.stopEvent(e);var _5cd=dojo.coords(this.sliderBarContainer,true);var _5ce=e[this._mousePixelCoord]-_5cd[this._startingPixelCoord];this._setPixelValue(this._isReversed()||this._upsideDown?(_5cd[this._pixelCount]-_5ce):_5ce,_5cd[this._pixelCount],true);},_setPixelValue:function(_5cf,_5d0,_5d1){if(this.disabled){return;}_5cf=_5cf<0?0:_5d0<_5cf?_5d0:_5cf;var _5d2=this.discreteValues;if(_5d2<=1||_5d2==Infinity){_5d2=_5d0;}_5d2--;var _5d3=_5d0/_5d2;var _5d4=Math.round(_5cf/_5d3);this.setValue((this.maximum-this.minimum)*_5d4/_5d2+this.minimum,_5d1);},setValue:function(_5d5,_5d6){this.valueNode.value=this.value=_5d5;this.inherited("setValue",arguments);var _5d7=(_5d5-this.minimum)/(this.maximum-this.minimum);this.progressBar.style[this._progressPixelSize]=(_5d7*100)+"%";this.remainingBar.style[this._progressPixelSize]=((1-_5d7)*100)+"%";},_bumpValue:function(_5d8){if(this.disabled){return;}var s=dojo.getComputedStyle(this.sliderBarContainer);var c=dojo._getContentBox(this.sliderBarContainer,s);var _5db=this.discreteValues;if(_5db<=1||_5db==Infinity){_5db=c[this._pixelCount];}_5db--;var _5dc=(this.value-this.minimum)*_5db/(this.maximum-this.minimum)+_5d8;if(_5dc<0){_5dc=0;}if(_5dc>_5db){_5dc=_5db;}_5dc=_5dc*(this.maximum-this.minimum)/_5db+this.minimum;this.setValue(_5dc,true);},decrement:function(e){this._bumpValue(e.keyCode==dojo.keys.PAGE_DOWN?-this.pageIncrement:-1);},increment:function(e){this._bumpValue(e.keyCode==dojo.keys.PAGE_UP?this.pageIncrement:1);},_mouseWheeled:function(evt){dojo.stopEvent(evt);var _5e0=0;if(typeof evt.wheelDelta=="number"){_5e0=evt.wheelDelta;}else{if(typeof evt.detail=="number"){_5e0=-evt.detail;}}if(_5e0>0){this.increment(evt);}else{if(_5e0<0){this.decrement(evt);}}},startup:function(){dojo.forEach(this.getChildren(),function(_5e1){if(this[_5e1.container]!=this.containerNode){this[_5e1.container].appendChild(_5e1.domNode);}},this);},_onBlur:function(){dijit.form.HorizontalSlider.superclass.setValue.call(this,this.value,true);},postCreate:function(){if(this.showButtons){this.incrementButton.style.display="";this.decrementButton.style.display="";}this.connect(this.domNode,dojo.isIE?"onmousewheel":"DOMMouseScroll","_mouseWheeled");var _5e2=this;var _5e3=function(){dijit.form._SliderMover.apply(this,arguments);this.widget=_5e2;};dojo.extend(_5e3,dijit.form._SliderMover.prototype);this._movable=new dojo.dnd.Moveable(this.sliderHandle,{mover:_5e3});this.inherited("postCreate",arguments);},destroy:function(){this._movable.destroy();this.inherited("destroy",arguments);}});dojo.declare("dijit.form.VerticalSlider",dijit.form.HorizontalSlider,{templateString:"<table class=\"dijitReset dijitSlider\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\" rules=\"none\"\n><tbody class=\"dijitReset\"\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset\"></td\n\t\t><td class=\"dijitReset dijitSliderButtonContainer dijitVerticalSliderButtonContainer\"\n\t\t\t><div class=\"dijitVerticalSliderIncrementIcon\" tabIndex=\"-1\" style=\"display:none\" dojoAttachPoint=\"incrementButton\" dojoAttachEvent=\"onclick: increment\"><span class=\"dijitSliderButtonInner\">+</span></div\n\t\t></td\n\t\t><td class=\"dijitReset\"></td\n\t></tr\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset\"></td\n\t\t><td class=\"dijitReset\"\n\t\t\t><center><div class=\"dijitSliderBar dijitSliderBumper dijitVerticalSliderBumper dijitSliderTopBumper dijitVerticalSliderTopBumper\"></div></center\n\t\t></td\n\t\t><td class=\"dijitReset\"></td\n\t></tr\n\t><tr class=\"dijitReset\"\n\t\t><td dojoAttachPoint=\"leftDecoration\" class=\"dijitReset\" style=\"text-align:center;height:100%;\"></td\n\t\t><td class=\"dijitReset\" style=\"height:100%;\"\n\t\t\t><input dojoAttachPoint=\"valueNode\" type=\"hidden\" name=\"${name}\"\n\t\t\t/><center style=\"position:relative;height:100%;\" dojoAttachPoint=\"sliderBarContainer\"\n\t\t\t\t><div dojoAttachPoint=\"remainingBar\" class=\"dijitSliderBar dijitVerticalSliderBar dijitSliderRemainingBar dijitVerticalSliderRemainingBar\" dojoAttachEvent=\"onclick:_onBarClick\"></div\n\t\t\t\t><div dojoAttachPoint=\"progressBar\" class=\"dijitSliderBar dijitVerticalSliderBar dijitSliderProgressBar dijitVerticalSliderProgressBar\" dojoAttachEvent=\"onclick:_onBarClick\"\n\t\t\t\t\t><div dojoAttachPoint=\"sliderHandle,focusNode\" class=\"dijitSliderMoveable\" dojoAttachEvent=\"onkeypress:_onKeyPress,onclick:_onHandleClick\" style=\"vertical-align:top;\" waiRole=\"slider\" valuemin=\"${minimum}\" valuemax=\"${maximum}\"\n\t\t\t\t\t\t><div class=\"dijitSliderImageHandle dijitVerticalSliderImageHandle\"></div\n\t\t\t\t\t></div\n\t\t\t\t></div\n\t\t\t></center\n\t\t></td\n\t\t><td dojoAttachPoint=\"containerNode,rightDecoration\" class=\"dijitReset\" style=\"text-align:center;height:100%;\"></td\n\t></tr\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset\"></td\n\t\t><td class=\"dijitReset\"\n\t\t\t><center><div class=\"dijitSliderBar dijitSliderBumper dijitVerticalSliderBumper dijitSliderBottomBumper dijitVerticalSliderBottomBumper\"></div></center\n\t\t></td\n\t\t><td class=\"dijitReset\"></td\n\t></tr\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset\"></td\n\t\t><td class=\"dijitReset dijitSliderButtonContainer dijitVerticalSliderButtonContainer\"\n\t\t\t><div class=\"dijitVerticalSliderDecrementIcon\" tabIndex=\"-1\" style=\"display:none\" dojoAttachPoint=\"decrementButton\" dojoAttachEvent=\"onclick: decrement\"><span class=\"dijitSliderButtonInner\">-</span></div\n\t\t></td\n\t\t><td class=\"dijitReset\"></td\n\t></tr\n></tbody></table>\n",_mousePixelCoord:"pageY",_pixelCount:"h",_startingPixelCoord:"y",_startingPixelCount:"t",_handleOffsetCoord:"top",_progressPixelSize:"height",_upsideDown:true});dojo.declare("dijit.form._SliderMover",dojo.dnd.Mover,{onMouseMove:function(e){var _5e5=this.widget;var c=this.constraintBox;if(!c){var _5e7=_5e5.sliderBarContainer;var s=dojo.getComputedStyle(_5e7);var c=dojo._getContentBox(_5e7,s);c[_5e5._startingPixelCount]=0;this.constraintBox=c;}var m=this.marginBox;var _5ea=_5e5._isReversed()?e[_5e5._mousePixelCoord]-dojo._abs(_5e5.sliderBarContainer).x:m[_5e5._startingPixelCount]+e[_5e5._mousePixelCoord];dojo.hitch(_5e5,"_setPixelValue")(_5e5._isReversed()||_5e5._upsideDown?(c[_5e5._pixelCount]-_5ea):_5ea,c[_5e5._pixelCount]);},destroy:function(e){var _5ec=this.widget;_5ec.setValue(_5ec.value,true);dojo.dnd.Mover.prototype.destroy.call(this);}});dojo.declare("dijit.form.HorizontalRule",[dijit._Widget,dijit._Templated],{templateString:"<div class=\"RuleContainer HorizontalRuleContainer\"></div>",count:3,container:"containerNode",ruleStyle:"",_positionPrefix:"<div class=\"RuleMark HorizontalRuleMark\" style=\"left:",_positionSuffix:"%;",_suffix:"\"></div>",_genHTML:function(pos,ndx){return this._positionPrefix+pos+this._positionSuffix+this.ruleStyle+this._suffix;},_isHorizontal:true,postCreate:function(){if(this.count==1){var _5ef=this._genHTML(50,0);}else{var _5f0=100/(this.count-1);if(!this._isHorizontal||this.isLeftToRight()){var _5ef=this._genHTML(0,0);for(var i=1;i<this.count-1;i++){_5ef+=this._genHTML(_5f0*i,i);}_5ef+=this._genHTML(100,this.count-1);}else{var _5ef=this._genHTML(100,0);for(var i=1;i<this.count-1;i++){_5ef+=this._genHTML(100-_5f0*i,i);}_5ef+=this._genHTML(0,this.count-1);}}this.domNode.innerHTML=_5ef;}});dojo.declare("dijit.form.VerticalRule",dijit.form.HorizontalRule,{templateString:"<div class=\"RuleContainer VerticalRuleContainer\"></div>",_positionPrefix:"<div class=\"RuleMark VerticalRuleMark\" style=\"top:",_isHorizontal:false});dojo.declare("dijit.form.HorizontalRuleLabels",dijit.form.HorizontalRule,{templateString:"<div class=\"RuleContainer HorizontalRuleContainer\"></div>",labelStyle:"",labels:[],numericMargin:0,minimum:0,maximum:1,constraints:{pattern:"#%"},_positionPrefix:"<div class=\"RuleLabelContainer HorizontalRuleLabelContainer\" style=\"left:",_labelPrefix:"\"><span class=\"RuleLabel HorizontalRuleLabel\">",_suffix:"</span></div>",_calcPosition:function(pos){return pos;},_genHTML:function(pos,ndx){return this._positionPrefix+this._calcPosition(pos)+this._positionSuffix+this.labelStyle+this._labelPrefix+this.labels[ndx]+this._suffix;},getLabels:function(){var _5f5=this.labels;if(!_5f5.length){_5f5=dojo.query("> li",this.srcNodeRef).map(function(node){return String(node.innerHTML);});}this.srcNodeRef.innerHTML="";if(!_5f5.length&&this.count>1){var _5f7=this.minimum;var inc=(this.maximum-_5f7)/(this.count-1);for(var i=0;i<this.count;i++){_5f5.push((i<this.numericMargin||i>=(this.count-this.numericMargin))?"":dojo.number.format(_5f7,this.constraints));_5f7+=inc;}}return _5f5;},postMixInProperties:function(){this.inherited("postMixInProperties",arguments);this.labels=this.getLabels();this.count=this.labels.length;}});dojo.declare("dijit.form.VerticalRuleLabels",dijit.form.HorizontalRuleLabels,{templateString:"<div class=\"RuleContainer VerticalRuleContainer\"></div>",_positionPrefix:"<div class=\"RuleLabelContainer VerticalRuleLabelContainer\" style=\"top:",_labelPrefix:"\"><span class=\"RuleLabel VerticalRuleLabel\">",_calcPosition:function(pos){return 100-pos;},_isHorizontal:false});}if(!dojo._hasResource["dijit.form.Textarea"]){dojo._hasResource["dijit.form.Textarea"]=true;dojo.provide("dijit.form.Textarea");dojo.declare("dijit.form.Textarea",dijit.form._FormWidget,{attributeMap:dojo.mixin(dojo.clone(dijit.form._FormWidget.prototype.attributeMap),{style:"styleNode","class":"styleNode"}),templateString:(dojo.isIE||dojo.isSafari||dojo.isMozilla)?((dojo.isIE||dojo.isSafari)?"<fieldset id=\"${id}\" class=\"dijitInline dijitInputField dijitTextArea\" dojoAttachPoint=\"styleNode\" waiRole=\"presentation\"><div dojoAttachPoint=\"editNode,focusNode,eventNode\" dojoAttachEvent=\"onpaste:_changing,oncut:_changing\" waiRole=\"textarea\" style=\"text-decoration:none;_padding-bottom:16px;display:block;overflow:auto;\" contentEditable=\"true\"></div>":"<span id=\"${id}\" class=\"dijitReset\">"+"<iframe src=\"javascript:<html><head><title>${_iframeEditTitle}</title></head><body><script>var _postCreate=window.frameElement?window.frameElement.postCreate:null;if(_postCreate)_postCreate();</script></body></html>\""+" dojoAttachPoint=\"iframe,styleNode\" dojoAttachEvent=\"onblur:_onIframeBlur\" class=\"dijitInline dijitInputField dijitTextArea\"></iframe>")+"<textarea name=\"${name}\" value=\"${value}\" dojoAttachPoint=\"formValueNode\" style=\"display:none;\"></textarea>"+((dojo.isIE||dojo.isSafari)?"</fieldset>":"</span>"):"<textarea id=\"${id}\" name=\"${name}\" value=\"${value}\" dojoAttachPoint=\"formValueNode,editNode,focusNode,styleNode\" class=\"dijitInputField dijitTextArea\"></textarea>",focus:function(){if(!this.disabled){this._changing();}if(dojo.isMozilla){dijit.focus(this.iframe);}else{dijit.focus(this.focusNode);}},setValue:function(_5fb,_5fc){var _5fd=this.editNode;if(typeof _5fb=="string"){_5fd.innerHTML="";if(_5fb.split){var _5fe=this;var _5ff=true;dojo.forEach(_5fb.split("\n"),function(line){if(_5ff){_5ff=false;}else{_5fd.appendChild(document.createElement("BR"));}_5fd.appendChild(document.createTextNode(line));});}else{_5fd.appendChild(document.createTextNode(_5fb));}}else{_5fb=_5fd.innerHTML;if(this.iframe){_5fb=_5fb.replace(/<div><\/div>\r?\n?$/i,"");}_5fb=_5fb.replace(/\s*\r?\n|^\s+|\s+$|&nbsp;/g,"").replace(/>\s+</g,"><").replace(/<\/(p|div)>$|^<(p|div)[^>]*>/gi,"").replace(/([^>])<div>/g,"$1\n").replace(/<\/p>\s*<p[^>]*>|<br[^>]*>/gi,"\n").replace(/<[^>]*>/g,"").replace(/&amp;/gi,"&").replace(/&lt;/gi,"<").replace(/&gt;/gi,">");}this.value=this.formValueNode.value=_5fb;if(this.iframe){var _601=document.createElement("div");_5fd.appendChild(_601);var _602=_601.offsetTop;if(_5fd.scrollWidth>_5fd.clientWidth){_602+=16;}if(this.lastHeight!=_602){if(_602==0){_602=16;}dojo.contentBox(this.iframe,{h:_602});this.lastHeight=_602;}_5fd.removeChild(_601);}dijit.form.Textarea.superclass.setValue.call(this,this.getValue(),_5fc);},getValue:function(){return this.formValueNode.value.replace(/\r/g,"");},postMixInProperties:function(){dijit.form.Textarea.superclass.postMixInProperties.apply(this,arguments);if(this.srcNodeRef&&this.srcNodeRef.innerHTML!=""){this.value=this.srcNodeRef.innerHTML;this.srcNodeRef.innerHTML="";}if((!this.value||this.value=="")&&this.srcNodeRef&&this.srcNodeRef.value){this.value=this.srcNodeRef.value;}if(!this.value){this.value="";}this.value=this.value.replace(/\r\n/g,"\n").replace(/&gt;/g,">").replace(/&lt;/g,"<").replace(/&amp;/g,"&");if(dojo.isMozilla){var _603=dojo.i18n.getLocalization("dijit","Textarea");this._iframeEditTitle=_603.iframeEditTitle;this._iframeFocusTitle=_603.iframeFocusTitle;var _604=dojo.query("label[for=\""+this.id+"\"]");if(_604.length){this._iframeEditTitle=_604[0].innerHTML+" "+this._iframeEditTitle;}var body=this.focusNode=this.editNode=document.createElement("BODY");body.style.margin="0px";body.style.padding="0px";body.style.border="0px";}},postCreate:function(){if(dojo.isIE||dojo.isSafari){this.domNode.style.overflowY="hidden";}else{if(dojo.isMozilla){var w=this.iframe.contentWindow;try{var _607=this.iframe.contentDocument.title;}catch(e){var _607="";}if(!w||!_607){this.iframe.postCreate=dojo.hitch(this,this.postCreate);return;}var d=w.document;d.getElementsByTagName("HTML")[0].replaceChild(this.editNode,d.getElementsByTagName("BODY")[0]);if(!this.isLeftToRight()){d.getElementsByTagName("HTML")[0].dir="rtl";}this.iframe.style.overflowY="hidden";this.eventNode=d;w.addEventListener("resize",dojo.hitch(this,this._changed),false);}else{this.focusNode=this.domNode;}}if(this.eventNode){this.connect(this.eventNode,"keypress",this._onKeyPress);this.connect(this.eventNode,"mousemove",this._changed);this.connect(this.eventNode,"focus",this._focused);this.connect(this.eventNode,"blur",this._blurred);}if(this.editNode){this.connect(this.editNode,"change",this._changed);}this.inherited("postCreate",arguments);},_focused:function(e){dojo.addClass(this.iframe||this.domNode,"dijitInputFieldFocused");this._changed(e);},_blurred:function(e){dojo.removeClass(this.iframe||this.domNode,"dijitInputFieldFocused");this._changed(e,true);},_onIframeBlur:function(){this.iframe.contentDocument.title=this._iframeEditTitle;},_onKeyPress:function(e){if(e.keyCode==dojo.keys.TAB&&!e.shiftKey&&!e.ctrlKey&&!e.altKey&&this.iframe){this.iframe.contentDocument.title=this._iframeFocusTitle;this.iframe.focus();dojo.stopEvent(e);}else{if(e.keyCode==dojo.keys.ENTER){e.stopPropagation();}else{if(this.inherited("_onKeyPress",arguments)&&this.iframe){var te=document.createEvent("KeyEvents");te.initKeyEvent("keypress",true,true,null,e.ctrlKey,e.altKey,e.shiftKey,e.metaKey,e.keyCode,e.charCode);this.iframe.dispatchEvent(te);}}}this._changing();},_changing:function(e){setTimeout(dojo.hitch(this,"_changed",e,false),1);},_changed:function(e,_60f){if(this.iframe&&this.iframe.contentDocument.designMode!="on"){this.iframe.contentDocument.designMode="on";}this.setValue(null,_60f);}});}if(!dojo._hasResource["dijit.layout.StackContainer"]){dojo._hasResource["dijit.layout.StackContainer"]=true;dojo.provide("dijit.layout.StackContainer");dojo.declare("dijit.layout.StackContainer",dijit.layout._LayoutWidget,{doLayout:true,_started:false,postCreate:function(){dijit.setWaiRole((this.containerNode||this.domNode),"tabpanel");this.connect(this.domNode,"onkeypress",this._onKeyPress);},startup:function(){if(this._started){return;}var _610=this.getChildren();dojo.forEach(_610,this._setupChild,this);dojo.some(_610,function(_611){if(_611.selected){this.selectedChildWidget=_611;}return _611.selected;},this);var _612=this.selectedChildWidget;if(!_612&&_610[0]){_612=this.selectedChildWidget=_610[0];_612.selected=true;}if(_612){this._showChild(_612);}dojo.publish(this.id+"-startup",[{children:_610,selected:_612}]);this.inherited("startup",arguments);this._started=true;},_setupChild:function(page){page.domNode.style.display="none";page.domNode.style.position="relative";return page;},addChild:function(_614,_615){dijit._Container.prototype.addChild.apply(this,arguments);_614=this._setupChild(_614);if(this._started){this.layout();dojo.publish(this.id+"-addChild",[_614,_615]);if(!this.selectedChildWidget){this.selectChild(_614);}}},removeChild:function(page){dijit._Container.prototype.removeChild.apply(this,arguments);if(this._beingDestroyed){return;}if(this._started){dojo.publish(this.id+"-removeChild",[page]);this.layout();}if(this.selectedChildWidget===page){this.selectedChildWidget=undefined;if(this._started){var _617=this.getChildren();if(_617.length){this.selectChild(_617[0]);}}}},selectChild:function(page){page=dijit.byId(page);if(this.selectedChildWidget!=page){this._transition(page,this.selectedChildWidget);this.selectedChildWidget=page;dojo.publish(this.id+"-selectChild",[page]);}},_transition:function(_619,_61a){if(_61a){this._hideChild(_61a);}this._showChild(_619);if(this.doLayout&&_619.resize){_619.resize(this._containerContentBox||this._contentBox);}},_adjacent:function(_61b){var _61c=this.getChildren();var _61d=dojo.indexOf(_61c,this.selectedChildWidget);_61d+=_61b?1:_61c.length-1;return _61c[_61d%_61c.length];},forward:function(){this.selectChild(this._adjacent(true));},back:function(){this.selectChild(this._adjacent(false));},_onKeyPress:function(e){dojo.publish(this.id+"-containerKeyPress",[{e:e,page:this}]);},layout:function(){if(this.doLayout&&this.selectedChildWidget&&this.selectedChildWidget.resize){this.selectedChildWidget.resize(this._contentBox);}},_showChild:function(page){var _620=this.getChildren();page.isFirstChild=(page==_620[0]);page.isLastChild=(page==_620[_620.length-1]);page.selected=true;page.domNode.style.display="";if(page._loadCheck){page._loadCheck();}if(page.onShow){page.onShow();}},_hideChild:function(page){page.selected=false;page.domNode.style.display="none";if(page.onHide){page.onHide();}},closeChild:function(page){var _623=page.onClose(this,page);if(_623){this.removeChild(page);page.destroy();}},destroy:function(){this._beingDestroyed=true;this.inherited("destroy",arguments);}});dojo.declare("dijit.layout.StackController",[dijit._Widget,dijit._Templated,dijit._Container],{templateString:"<span wairole='tablist' dojoAttachEvent='onkeypress' class='dijitStackController'></span>",containerId:"",buttonWidget:"dijit.layout._StackButton",postCreate:function(){dijit.setWaiRole(this.domNode,"tablist");this.pane2button={};this._subscriptions=[dojo.subscribe(this.containerId+"-startup",this,"onStartup"),dojo.subscribe(this.containerId+"-addChild",this,"onAddChild"),dojo.subscribe(this.containerId+"-removeChild",this,"onRemoveChild"),dojo.subscribe(this.containerId+"-selectChild",this,"onSelectChild"),dojo.subscribe(this.containerId+"-containerKeyPress",this,"onContainerKeyPress")];},onStartup:function(info){dojo.forEach(info.children,this.onAddChild,this);this.onSelectChild(info.selected);},destroy:function(){dojo.forEach(this._subscriptions,dojo.unsubscribe);this.inherited("destroy",arguments);},onAddChild:function(page,_626){var _627=document.createElement("span");this.domNode.appendChild(_627);var cls=dojo.getObject(this.buttonWidget);var _629=new cls({label:page.title,closeButton:page.closable},_627);this.addChild(_629,_626);this.pane2button[page]=_629;page.controlButton=_629;dojo.connect(_629,"onClick",dojo.hitch(this,"onButtonClick",page));dojo.connect(_629,"onClickCloseButton",dojo.hitch(this,"onCloseButtonClick",page));if(!this._currentChild){_629.focusNode.setAttribute("tabIndex","0");this._currentChild=page;}},onRemoveChild:function(page){if(this._currentChild===page){this._currentChild=null;}var _62b=this.pane2button[page];if(_62b){_62b.destroy();}this.pane2button[page]=null;},onSelectChild:function(page){if(!page){return;}if(this._currentChild){var _62d=this.pane2button[this._currentChild];_62d.setChecked(false);_62d.focusNode.setAttribute("tabIndex","-1");}var _62e=this.pane2button[page];_62e.setChecked(true);this._currentChild=page;_62e.focusNode.setAttribute("tabIndex","0");},onButtonClick:function(page){var _630=dijit.byId(this.containerId);_630.selectChild(page);},onCloseButtonClick:function(page){var _632=dijit.byId(this.containerId);_632.closeChild(page);var b=this.pane2button[this._currentChild];if(b){dijit.focus(b.focusNode||b.domNode);}},adjacent:function(_634){var _635=this.getChildren();var _636=dojo.indexOf(_635,this.pane2button[this._currentChild]);var _637=_634?1:_635.length-1;return _635[(_636+_637)%_635.length];},onkeypress:function(e){if(this.disabled||e.altKey){return;}var _639=true;if(e.ctrlKey||!e._djpage){var k=dojo.keys;switch(e.keyCode){case k.LEFT_ARROW:case k.UP_ARROW:case k.PAGE_UP:_639=false;case k.RIGHT_ARROW:case k.DOWN_ARROW:case k.PAGE_DOWN:this.adjacent(_639).onClick();dojo.stopEvent(e);break;case k.DELETE:if(this._currentChild.closable){this.onCloseButtonClick(this._currentChild);}dojo.stopEvent(e);break;default:if(e.ctrlKey){if(e.keyCode==k.TAB){this.adjacent(!e.shiftKey).onClick();dojo.stopEvent(e);}else{if(e.keyChar=="w"){if(this._currentChild.closable){this.onCloseButtonClick(this._currentChild);}dojo.stopEvent(e);}}}}}},onContainerKeyPress:function(info){info.e._djpage=info.page;this.onkeypress(info.e);}});dojo.declare("dijit.layout._StackButton",dijit.form.ToggleButton,{tabIndex:"-1",postCreate:function(evt){dijit.setWaiRole((this.focusNode||this.domNode),"tab");this.inherited("postCreate",arguments);},onClick:function(evt){dijit.focus(this.focusNode);},onClickCloseButton:function(evt){evt.stopPropagation();}});dojo.extend(dijit._Widget,{title:"",selected:false,closable:false,onClose:function(){return true;}});}if(!dojo._hasResource["dijit.layout.AccordionContainer"]){dojo._hasResource["dijit.layout.AccordionContainer"]=true;dojo.provide("dijit.layout.AccordionContainer");dojo.declare("dijit.layout.AccordionContainer",dijit.layout.StackContainer,{duration:250,_verticalSpace:0,postCreate:function(){this.domNode.style.overflow="hidden";this.inherited("postCreate",arguments);dijit.setWaiRole(this.domNode,"tablist");dojo.addClass(this.domNode,"dijitAccordionContainer");},startup:function(){if(this._started){return;}this.inherited("startup",arguments);if(this.selectedChildWidget){var _63f=this.selectedChildWidget.containerNode.style;_63f.display="";_63f.overflow="auto";this.selectedChildWidget._setSelectedState(true);}},layout:function(){var _640=0;var _641=this.selectedChildWidget;dojo.forEach(this.getChildren(),function(_642){_640+=_642.getTitleHeight();});var _643=this._contentBox;this._verticalSpace=(_643.h-_640);if(_641){_641.containerNode.style.height=this._verticalSpace+"px";}},_setupChild:function(page){return page;},_transition:function(_645,_646){if(this._inTransition){return;}this._inTransition=true;var _647=[];var _648=this._verticalSpace;if(_645){_645.setSelected(true);var _649=_645.containerNode;_649.style.display="";_647.push(dojo.animateProperty({node:_649,duration:this.duration,properties:{height:{start:"1",end:_648}},onEnd:function(){_649.style.overflow="auto";}}));}if(_646){_646.setSelected(false);var _64a=_646.containerNode;_64a.style.overflow="hidden";_647.push(dojo.animateProperty({node:_64a,duration:this.duration,properties:{height:{start:_648,end:"1"}},onEnd:function(){_64a.style.display="none";}}));}this._inTransition=false;dojo.fx.combine(_647).play();},_onKeyPress:function(e){if(this.disabled||e.altKey){return;}var k=dojo.keys;switch(e.keyCode){case k.LEFT_ARROW:case k.UP_ARROW:case k.PAGE_UP:this._adjacent(false)._onTitleClick();dojo.stopEvent(e);break;case k.RIGHT_ARROW:case k.DOWN_ARROW:case k.PAGE_DOWN:this._adjacent(true)._onTitleClick();dojo.stopEvent(e);break;default:if(e.ctrlKey&&e.keyCode==k.TAB){this._adjacent(e._dijitWidget,!e.shiftKey)._onTitleClick();dojo.stopEvent(e);}}}});dojo.declare("dijit.layout.AccordionPane",[dijit.layout.ContentPane,dijit._Templated,dijit._Contained],{templateString:"<div class='dijitAccordionPane'\n\t><div dojoAttachPoint='titleNode,focusNode' dojoAttachEvent='ondijitclick:_onTitleClick,onkeypress:_onTitleKeyPress,onfocus:_handleFocus,onblur:_handleFocus'\n\t\tclass='dijitAccordionTitle' wairole=\"tab\"\n\t\t><div class='dijitAccordionArrow'></div\n\t\t><div class='arrowTextUp' waiRole=\"presentation\">&#9650;</div\n\t\t><div class='arrowTextDown' waiRole=\"presentation\">&#9660;</div\n\t\t><div dojoAttachPoint='titleTextNode' class='dijitAccordionText'>${title}</div></div\n\t><div><div dojoAttachPoint='containerNode' style='overflow: hidden; height: 1px; display: none'\n\t\tclass='dijitAccordionBody' wairole=\"tabpanel\"\n\t></div></div>\n</div>\n",postCreate:function(){this.inherited("postCreate",arguments);dojo.setSelectable(this.titleNode,false);this.setSelected(this.selected);},getTitleHeight:function(){return dojo.marginBox(this.titleNode).h;},_onTitleClick:function(){var _64d=this.getParent();if(!_64d._inTransition){_64d.selectChild(this);dijit.focus(this.focusNode);}},_onTitleKeyPress:function(evt){evt._dijitWidget=this;return this.getParent()._onKeyPress(evt);},_setSelectedState:function(_64f){this.selected=_64f;dojo[(_64f?"addClass":"removeClass")](this.domNode,"dijitAccordionPane-selected");this.focusNode.setAttribute("tabIndex",_64f?"0":"-1");},_handleFocus:function(e){dojo[(e.type=="focus"?"addClass":"removeClass")](this.focusNode,"dijitAccordionPaneFocused");},setSelected:function(_651){this._setSelectedState(_651);if(_651){this.onSelected();}},onSelected:function(){}});}if(!dojo._hasResource["dijit.layout.LayoutContainer"]){dojo._hasResource["dijit.layout.LayoutContainer"]=true;dojo.provide("dijit.layout.LayoutContainer");dojo.declare("dijit.layout.LayoutContainer",dijit.layout._LayoutWidget,{layout:function(){dijit.layout.layoutChildren(this.domNode,this._contentBox,this.getChildren());},addChild:function(_652,_653){dijit._Container.prototype.addChild.apply(this,arguments);if(this._started){dijit.layout.layoutChildren(this.domNode,this._contentBox,this.getChildren());}},removeChild:function(_654){dijit._Container.prototype.removeChild.apply(this,arguments);if(this._started){dijit.layout.layoutChildren(this.domNode,this._contentBox,this.getChildren());}}});dojo.extend(dijit._Widget,{layoutAlign:"none"});}if(!dojo._hasResource["dijit.layout.LinkPane"]){dojo._hasResource["dijit.layout.LinkPane"]=true;dojo.provide("dijit.layout.LinkPane");dojo.declare("dijit.layout.LinkPane",[dijit.layout.ContentPane,dijit._Templated],{templateString:"<div class=\"dijitLinkPane\"></div>",postCreate:function(){if(this.srcNodeRef){this.title+=this.srcNodeRef.innerHTML;}this.inherited("postCreate",arguments);}});}if(!dojo._hasResource["dijit.layout.SplitContainer"]){dojo._hasResource["dijit.layout.SplitContainer"]=true;dojo.provide("dijit.layout.SplitContainer");dojo.declare("dijit.layout.SplitContainer",dijit.layout._LayoutWidget,{activeSizing:false,sizerWidth:7,orientation:"horizontal",persist:true,postMixInProperties:function(){this.inherited("postMixInProperties",arguments);this.isHorizontal=(this.orientation=="horizontal");},postCreate:function(){this.inherited("postCreate",arguments);this.sizers=[];dojo.addClass(this.domNode,"dijitSplitContainer");if(dojo.isMozilla){this.domNode.style.overflow="-moz-scrollbars-none";}if(typeof this.sizerWidth=="object"){try{this.sizerWidth=parseInt(this.sizerWidth.toString());}catch(e){this.sizerWidth=7;}}var _655=this.virtualSizer=document.createElement("div");_655.style.position="relative";_655.style.zIndex=10;_655.className=this.isHorizontal?"dijitSplitContainerVirtualSizerH":"dijitSplitContainerVirtualSizerV";this.domNode.appendChild(_655);dojo.setSelectable(_655,false);},startup:function(){if(this._started){return;}dojo.forEach(this.getChildren(),function(_656,i,_658){this._injectChild(_656);if(i<_658.length-1){this._addSizer();}},this);if(this.persist){this._restoreState();}this.inherited("startup",arguments);this._started=true;},_injectChild:function(_659){_659.domNode.style.position="absolute";dojo.addClass(_659.domNode,"dijitSplitPane");},_addSizer:function(){var i=this.sizers.length;var _65b=this.sizers[i]=document.createElement("div");_65b.className=this.isHorizontal?"dijitSplitContainerSizerH":"dijitSplitContainerSizerV";var _65c=document.createElement("div");_65c.className="thumb";_65b.appendChild(_65c);var self=this;var _65e=(function(){var _65f=i;return function(e){self.beginSizing(e,_65f);};})();dojo.connect(_65b,"onmousedown",_65e);this.domNode.appendChild(_65b);dojo.setSelectable(_65b,false);},removeChild:function(_661){if(this.sizers.length&&dojo.indexOf(this.getChildren(),_661)!=-1){var i=this.sizers.length-1;dojo._destroyElement(this.sizers[i]);this.sizers.length--;}this.inherited("removeChild",arguments);if(this._started){this.layout();}},addChild:function(_663,_664){this.inherited("addChild",arguments);if(this._started){this._injectChild(_663);var _665=this.getChildren();if(_665.length>1){this._addSizer();}this.layout();}},layout:function(){this.paneWidth=this._contentBox.w;this.paneHeight=this._contentBox.h;var _666=this.getChildren();if(!_666.length){return;}var _667=this.isHorizontal?this.paneWidth:this.paneHeight;if(_666.length>1){_667-=this.sizerWidth*(_666.length-1);}var _668=0;dojo.forEach(_666,function(_669){_668+=_669.sizeShare;});var _66a=_667/_668;var _66b=0;dojo.forEach(_666.slice(0,_666.length-1),function(_66c){var size=Math.round(_66a*_66c.sizeShare);_66c.sizeActual=size;_66b+=size;});_666[_666.length-1].sizeActual=_667-_66b;this._checkSizes();var pos=0;var size=_666[0].sizeActual;this._movePanel(_666[0],pos,size);_666[0].position=pos;pos+=size;if(!this.sizers){return;}dojo.some(_666.slice(1),function(_670,i){if(!this.sizers[i]){return true;}this._moveSlider(this.sizers[i],pos,this.sizerWidth);this.sizers[i].position=pos;pos+=this.sizerWidth;size=_670.sizeActual;this._movePanel(_670,pos,size);_670.position=pos;pos+=size;},this);},_movePanel:function(_672,pos,size){if(this.isHorizontal){_672.domNode.style.left=pos+"px";_672.domNode.style.top=0;var box={w:size,h:this.paneHeight};if(_672.resize){_672.resize(box);}else{dojo.marginBox(_672.domNode,box);}}else{_672.domNode.style.left=0;_672.domNode.style.top=pos+"px";var box={w:this.paneWidth,h:size};if(_672.resize){_672.resize(box);}else{dojo.marginBox(_672.domNode,box);}}},_moveSlider:function(_676,pos,size){if(this.isHorizontal){_676.style.left=pos+"px";_676.style.top=0;dojo.marginBox(_676,{w:size,h:this.paneHeight});}else{_676.style.left=0;_676.style.top=pos+"px";dojo.marginBox(_676,{w:this.paneWidth,h:size});}},_growPane:function(_679,pane){if(_679>0){if(pane.sizeActual>pane.sizeMin){if((pane.sizeActual-pane.sizeMin)>_679){pane.sizeActual=pane.sizeActual-_679;_679=0;}else{_679-=pane.sizeActual-pane.sizeMin;pane.sizeActual=pane.sizeMin;}}}return _679;},_checkSizes:function(){var _67b=0;var _67c=0;var _67d=this.getChildren();dojo.forEach(_67d,function(_67e){_67c+=_67e.sizeActual;_67b+=_67e.sizeMin;});if(_67b<=_67c){var _67f=0;dojo.forEach(_67d,function(_680){if(_680.sizeActual<_680.sizeMin){_67f+=_680.sizeMin-_680.sizeActual;_680.sizeActual=_680.sizeMin;}});if(_67f>0){var list=this.isDraggingLeft?_67d.reverse():_67d;dojo.forEach(list,function(_682){_67f=this._growPane(_67f,_682);},this);}}else{dojo.forEach(_67d,function(_683){_683.sizeActual=Math.round(_67c*(_683.sizeMin/_67b));});}},beginSizing:function(e,i){var _686=this.getChildren();this.paneBefore=_686[i];this.paneAfter=_686[i+1];this.isSizing=true;this.sizingSplitter=this.sizers[i];if(!this.cover){this.cover=dojo.doc.createElement("div");this.domNode.appendChild(this.cover);var s=this.cover.style;s.position="absolute";s.zIndex=1;s.top=0;s.left=0;s.width="100%";s.height="100%";}else{this.cover.style.zIndex=1;}this.sizingSplitter.style.zIndex=2;this.originPos=dojo.coords(_686[0].domNode,true);if(this.isHorizontal){var _688=(e.layerX?e.layerX:e.offsetX);var _689=e.pageX;this.originPos=this.originPos.x;}else{var _688=(e.layerY?e.layerY:e.offsetY);var _689=e.pageY;this.originPos=this.originPos.y;}this.startPoint=this.lastPoint=_689;this.screenToClientOffset=_689-_688;this.dragOffset=this.lastPoint-this.paneBefore.sizeActual-this.originPos-this.paneBefore.position;if(!this.activeSizing){this._showSizingLine();}this._connects=[];this._connects.push(dojo.connect(document.documentElement,"onmousemove",this,"changeSizing"));this._connects.push(dojo.connect(document.documentElement,"onmouseup",this,"endSizing"));dojo.stopEvent(e);},changeSizing:function(e){if(!this.isSizing){return;}this.lastPoint=this.isHorizontal?e.pageX:e.pageY;this.movePoint();if(this.activeSizing){this._updateSize();}else{this._moveSizingLine();}dojo.stopEvent(e);},endSizing:function(e){if(!this.isSizing){return;}if(this.cover){this.cover.style.zIndex=-1;}if(!this.activeSizing){this._hideSizingLine();}this._updateSize();this.isSizing=false;if(this.persist){this._saveState(this);}dojo.forEach(this._connects,dojo.disconnect);},movePoint:function(){var p=this.lastPoint-this.screenToClientOffset;var a=p-this.dragOffset;a=this.legaliseSplitPoint(a);p=a+this.dragOffset;this.lastPoint=p+this.screenToClientOffset;},legaliseSplitPoint:function(a){a+=this.sizingSplitter.position;this.isDraggingLeft=!!(a>0);if(!this.activeSizing){var min=this.paneBefore.position+this.paneBefore.sizeMin;if(a<min){a=min;}var max=this.paneAfter.position+(this.paneAfter.sizeActual-(this.sizerWidth+this.paneAfter.sizeMin));if(a>max){a=max;}}a-=this.sizingSplitter.position;this._checkSizes();return a;},_updateSize:function(){var pos=this.lastPoint-this.dragOffset-this.originPos;var _692=this.paneBefore.position;var _693=this.paneAfter.position+this.paneAfter.sizeActual;this.paneBefore.sizeActual=pos-_692;this.paneAfter.position=pos+this.sizerWidth;this.paneAfter.sizeActual=_693-this.paneAfter.position;dojo.forEach(this.getChildren(),function(_694){_694.sizeShare=_694.sizeActual;});if(this._started){this.layout();}},_showSizingLine:function(){this._moveSizingLine();dojo.marginBox(this.virtualSizer,this.isHorizontal?{w:this.sizerWidth,h:this.paneHeight}:{w:this.paneWidth,h:this.sizerWidth});this.virtualSizer.style.display="block";},_hideSizingLine:function(){this.virtualSizer.style.display="none";},_moveSizingLine:function(){var pos=(this.lastPoint-this.startPoint)+this.sizingSplitter.position;dojo.style(this.virtualSizer,(this.isHorizontal?"left":"top"),pos+"px");},_getCookieName:function(i){return this.id+"_"+i;},_restoreState:function(){dojo.forEach(this.getChildren(),function(_697,i){var _699=this._getCookieName(i);var _69a=dojo.cookie(_699);if(_69a){var pos=parseInt(_69a);if(typeof pos=="number"){_697.sizeShare=pos;}}},this);},_saveState:function(){dojo.forEach(this.getChildren(),function(_69c,i){dojo.cookie(this._getCookieName(i),_69c.sizeShare);},this);}});dojo.extend(dijit._Widget,{sizeMin:10,sizeShare:10});}if(!dojo._hasResource["dijit.layout.TabContainer"]){dojo._hasResource["dijit.layout.TabContainer"]=true;dojo.provide("dijit.layout.TabContainer");dojo.declare("dijit.layout.TabContainer",[dijit.layout.StackContainer,dijit._Templated],{tabPosition:"top",templateString:null,templateString:"<div class=\"dijitTabContainer\">\n\t<div dojoAttachPoint=\"tablistNode\"></div>\n\t<div class=\"dijitTabPaneWrapper\" dojoAttachPoint=\"containerNode\"></div>\n</div>\n",postCreate:function(){dijit.layout.TabContainer.superclass.postCreate.apply(this,arguments);this.tablist=new dijit.layout.TabController({id:this.id+"_tablist",tabPosition:this.tabPosition,doLayout:this.doLayout,containerId:this.id},this.tablistNode);},_setupChild:function(tab){dojo.addClass(tab.domNode,"dijitTabPane");this.inherited("_setupChild",arguments);return tab;},startup:function(){if(this._started){return;}this.tablist.startup();this.inherited("startup",arguments);if(dojo.isSafari){setTimeout(dojo.hitch(this,"layout"),0);}},layout:function(){if(!this.doLayout){return;}var _69f=this.tabPosition.replace(/-h/,"");var _6a0=[{domNode:this.tablist.domNode,layoutAlign:_69f},{domNode:this.containerNode,layoutAlign:"client"}];dijit.layout.layoutChildren(this.domNode,this._contentBox,_6a0);this._containerContentBox=dijit.layout.marginBox2contentBox(this.containerNode,_6a0[1]);if(this.selectedChildWidget){this._showChild(this.selectedChildWidget);if(this.doLayout&&this.selectedChildWidget.resize){this.selectedChildWidget.resize(this._containerContentBox);}}},destroy:function(){this.tablist.destroy();this.inherited("destroy",arguments);}});dojo.declare("dijit.layout.TabController",dijit.layout.StackController,{templateString:"<div wairole='tablist' dojoAttachEvent='onkeypress:onkeypress'></div>",tabPosition:"top",doLayout:true,buttonWidget:"dijit.layout._TabButton",postMixInProperties:function(){this["class"]="dijitTabLabels-"+this.tabPosition+(this.doLayout?"":" dijitTabNoLayout");this.inherited("postMixInProperties",arguments);}});dojo.declare("dijit.layout._TabButton",dijit.layout._StackButton,{baseClass:"dijitTab",templateString:"<div dojoAttachEvent='onclick:onClick,onmouseenter:_onMouse,onmouseleave:_onMouse'>\n <div class='dijitTabInnerDiv' dojoAttachPoint='innerDiv'>\n <span dojoAttachPoint='containerNode,focusNode'>${!label}</span>\n <span dojoAttachPoint='closeButtonNode' class='closeImage' dojoAttachEvent='onmouseenter:_onMouse, onmouseleave:_onMouse, onclick:onClickCloseButton' stateModifier='CloseButton'>\n <span dojoAttachPoint='closeText' class='closeText'>x</span>\n </span>\n </div>\n</div>\n",postCreate:function(){if(this.closeButton){dojo.addClass(this.innerDiv,"dijitClosable");}else{this.closeButtonNode.style.display="none";}this.inherited("postCreate",arguments);dojo.setSelectable(this.containerNode,false);}});}if(!dojo._hasResource["dijit.dijit-all"]){dojo._hasResource["dijit.dijit-all"]=true;console.warn("dijit-all may include much more code than your application actually requires. We strongly recommend that you investigate a custom build or the web build tool");dojo.provide("dijit.dijit-all");}dojo.i18n._preloadLocalizations("dijit.nls.dijit-all",["es-es","es","hu","it-it","de","pt-br","pl","fr-fr","zh-cn","pt","en-us","zh","ru","xx","fr","zh-tw","it","cs","en-gb","de-de","ja-jp","ko-kr","ko","en","ROOT","ja"]);
/trunk/api/js/dojo1.0/dijit/_base.js
New file
0,0 → 1,16
if(!dojo._hasResource["dijit._base"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit._base"] = true;
dojo.provide("dijit._base");
 
dojo.require("dijit._base.focus");
dojo.require("dijit._base.manager");
dojo.require("dijit._base.place");
dojo.require("dijit._base.popup");
dojo.require("dijit._base.scroll");
dojo.require("dijit._base.sniff");
dojo.require("dijit._base.bidi");
dojo.require("dijit._base.typematic");
dojo.require("dijit._base.wai");
dojo.require("dijit._base.window");
 
}
/trunk/api/js/dojo1.0/dijit/_editor/_Plugin.js
New file
0,0 → 1,91
if(!dojo._hasResource["dijit._editor._Plugin"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit._editor._Plugin"] = true;
dojo.provide("dijit._editor._Plugin");
dojo.require("dijit._Widget");
dojo.require("dijit.Editor");
dojo.require("dijit.form.Button");
 
dojo.declare("dijit._editor._Plugin", null, {
// summary
// This represents a "plugin" to the editor, which is basically
// a single button on the Toolbar and some associated code
constructor: function(/*Object?*/args, /*DomNode?*/node){
if(args){
dojo.mixin(this, args);
}
},
 
editor: null,
iconClassPrefix: "dijitEditorIcon",
button: null,
queryCommand: null,
command: "",
commandArg: null,
useDefaultCommand: true,
buttonClass: dijit.form.Button,
updateInterval: 200, // only allow updates every two tenths of a second
_initButton: function(){
if(this.command.length){
var label = this.editor.commands[this.command];
var className = "dijitEditorIcon "+this.iconClassPrefix + this.command.charAt(0).toUpperCase() + this.command.substr(1);
if(!this.button){
var props = {
label: label,
showLabel: false,
iconClass: className,
dropDown: this.dropDown
};
this.button = new this.buttonClass(props);
}
}
},
updateState: function(){
var _e = this.editor;
var _c = this.command;
if(!_e){ return; }
if(!_e.isLoaded){ return; }
if(!_c.length){ return; }
if(this.button){
try{
var enabled = _e.queryCommandEnabled(_c);
this.button.setDisabled(!enabled);
if(this.button.setChecked){
this.button.setChecked(_e.queryCommandState(_c));
}
}catch(e){
console.debug(e);
}
}
},
setEditor: function(/*Widget*/editor){
// FIXME: detatch from previous editor!!
this.editor = editor;
 
// FIXME: prevent creating this if we don't need to (i.e., editor can't handle our command)
this._initButton();
 
// FIXME: wire up editor to button here!
if( (this.command.length) &&
(!this.editor.queryCommandAvailable(this.command))
){
// console.debug("hiding:", this.command);
if(this.button){
this.button.domNode.style.display = "none";
}
}
if(this.button && this.useDefaultCommand){
dojo.connect(this.button, "onClick",
dojo.hitch(this.editor, "execCommand", this.command, this.commandArg)
);
}
dojo.connect(this.editor, "onNormalizedDisplayChanged", this, "updateState");
},
setToolbar: function(/*Widget*/toolbar){
if(this.button){
toolbar.addChild(this.button);
}
// console.debug("adding", this.button, "to:", toolbar);
}
});
 
}
/trunk/api/js/dojo1.0/dijit/_editor/nls/ja/LinkDialog.js
New file
0,0 → 1,0
({"set": "設定", "text": "テキスト:", "title": "URL にリンク", "url": "URL:", "urlInvalidMessage": "無効な URL です。完全な URL (例えば、http://www.dojotoolkit.org) を入力してください。"})
/trunk/api/js/dojo1.0/dijit/_editor/nls/ja/commands.js
New file
0,0 → 1,0
({"removeFormat": "形式の除去", "copy": "コピー", "paste": "貼り付け", "selectAll": "すべて選択", "insertOrderedList": "番号付きリスト", "insertTable": "テーブルの挿入/編集", "underline": "下線", "foreColor": "前景色", "htmlToggle": "HTML ソース", "formatBlock": "段落スタイル", "insertHorizontalRule": "水平罫線", "delete": "削除", "insertUnorderedList": "黒丸付きリスト", "tableProp": "テーブル・プロパティー", "insertImage": "イメージの挿入", "superscript": "上付き文字", "subscript": "下付き文字", "createLink": "リンクの作成", "undo": "元に戻す", "italic": "イタリック", "fontName": "フォント名", "justifyLeft": "左揃え", "unlink": "リンクの除去", "toggleTableBorder": "テーブル・ボーダーの切り替え", "fontSize": "フォント・サイズ", "indent": "インデント", "redo": "やり直し", "strikethrough": "取り消し線", "justifyFull": "両端揃え", "justifyCenter": "中央揃え", "hiliteColor": "背景色", "deleteTable": "テーブルの削除", "outdent": "アウトデント", "cut": "切り取り", "plainFormatBlock": "段落スタイル", "bold": "太字", "systemShortcutFF": "\"${0}\" アクションは、キーボード・ショートカットを使用して Mozilla Firefox でのみ使用できます。${1} を使用してください。", "justifyRight": "右揃え", "appleKey": "⌘${0}", "ctrlKey": "ctrl+${0}"})
/trunk/api/js/dojo1.0/dijit/_editor/nls/FontChoice.js
New file
0,0 → 1,0
({"1": "xx-small", "2": "x-small", "formatBlock": "Format", "monospaced": "monospaced", "3": "small", "4": "medium", "5": "large", "6": "x-large", "7": "xx-large", "fantasy": "fantasy", "serif": "serif", "p": "Paragraph", "pre": "Pre-formatted", "sans-serif": "sans-serif", "fontName": "Font", "h1": "Heading", "h2": "Subheading", "h3": "Sub-subheading", "fontSize": "Size", "cursive": "cursive"})
/trunk/api/js/dojo1.0/dijit/_editor/nls/cs/LinkDialog.js
New file
0,0 → 1,0
({"set": "Nastavit", "text": "Text:", "title": "Adresa URL odkazu", "url": "Adresa URL:", "urlInvalidMessage": "Neplatná adresa URL. Zadejte úplnou adresu URL ve tvaru 'http://www.dojotoolkit.org'"})
/trunk/api/js/dojo1.0/dijit/_editor/nls/cs/commands.js
New file
0,0 → 1,0
({"removeFormat": "Odebrat formát", "copy": "Kopírovat", "paste": "Vložit", "selectAll": "Vybrat vše", "insertOrderedList": "Číslovaný seznam", "insertTable": "Vložit/upravit tabulku", "underline": "Podtržení", "foreColor": "Barva popředí", "htmlToggle": "Zdroj HTML", "formatBlock": "Styl odstavce", "insertHorizontalRule": "Vodorovné pravítko", "delete": "Odstranit", "insertUnorderedList": "Seznam s odrážkami", "tableProp": "Vlastnost tabulky", "insertImage": "Vložit obraz", "superscript": "Horní index", "subscript": "Dolní index", "createLink": "Vytvořit odkaz", "undo": "Zpět", "italic": "Kurzíva", "fontName": "Název písma", "justifyLeft": "Zarovnat vlevo", "unlink": "Odebrat odkaz", "toggleTableBorder": "Přepnout ohraničení tabulky", "fontSize": "Velikost písma", "indent": "Odsadit", "redo": "Opakovat", "strikethrough": "Přeškrtnutí", "justifyFull": "Do bloku", "justifyCenter": "Zarovnat na střed", "hiliteColor": "Barva pozadí", "deleteTable": "Odstranit tabulku", "outdent": "Předsadit", "cut": "Vyjmout", "plainFormatBlock": "Styl odstavce", "bold": "Tučné", "systemShortcutFF": "Akce \"${0}\" je v prohlížeči Mozilla Firefox dostupná pouze prostřednictvím klávesové zkratky. Použijte klávesy ${1}.", "justifyRight": "Zarovnat vpravo", "appleKey": "⌘${0}", "ctrlKey": "ctrl+${0}"})
/trunk/api/js/dojo1.0/dijit/_editor/nls/es/LinkDialog.js
New file
0,0 → 1,0
({"set": "Establecer", "text": "Texto:", "title": "Enlazar URL", "url": "URL:", "urlInvalidMessage": "URL no válido. Especifique un URL completo como 'http://www.dojotoolkit.org'"})
/trunk/api/js/dojo1.0/dijit/_editor/nls/es/commands.js
New file
0,0 → 1,0
({"removeFormat": "Eliminar formato", "copy": "Copiar", "paste": "Pegar", "selectAll": "Seleccionar todo", "insertOrderedList": "Lista numerada", "insertTable": "Insertar/Editar tabla", "underline": "Subrayado", "foreColor": "Color de primer plano", "htmlToggle": "Fuente HTML", "formatBlock": "Estilo de párrafo", "insertHorizontalRule": "Regla horizontal", "delete": "Suprimir", "insertUnorderedList": "Lista con viñetas", "tableProp": "Propiedad de tabla", "insertImage": "Insertar imagen", "superscript": "Superíndice", "subscript": "Subíndice", "createLink": "Crear enlace", "undo": "Deshacer", "italic": "Cursiva", "fontName": "Nombre de font", "justifyLeft": "Alinear izquierda", "unlink": "Eliminar enlace", "toggleTableBorder": "Conmutar borde de tabla", "ctrlKey": "Control+${0}", "fontSize": "Tamaño de font", "indent": "Sangría", "redo": "Rehacer", "strikethrough": "Tachado", "justifyFull": "Justificar", "justifyCenter": "Alinear centro", "hiliteColor": "Color de segundo plano", "deleteTable": "Suprimir tabla", "outdent": "Anular sangría", "cut": "Cortar", "plainFormatBlock": "Estilo de párrafo", "bold": "Negrita", "systemShortcutFF": "La acción \"${0}\" sólo está disponible en Mozilla Firefox mediante un atajo de teclado. Utilice ${1}.", "justifyRight": "Alinear derecha", "appleKey": "⌘${0}"})
/trunk/api/js/dojo1.0/dijit/_editor/nls/fr/LinkDialog.js
New file
0,0 → 1,0
({"set": "Définir", "text": "Texte :", "title": "URL du lien", "url": "URL :", "urlInvalidMessage": "Adresse URL non valide. Entrez une adresse URL complète de type 'http://www.dojotoolkit.org'"})
/trunk/api/js/dojo1.0/dijit/_editor/nls/fr/commands.js
New file
0,0 → 1,0
({"removeFormat": "Supprimer la mise en forme", "copy": "Copier", "paste": "Coller", "selectAll": "Sélectionner tout", "insertOrderedList": "Liste numérotée", "insertTable": "Insérer/Modifier un tableau", "underline": "Souligner", "foreColor": "Couleur d'avant-plan", "htmlToggle": "Source HTML", "formatBlock": "Style de paragraphe", "insertHorizontalRule": "Règle horizontale", "delete": "Supprimer", "insertUnorderedList": "Liste à puces", "tableProp": "Propriété du tableau", "insertImage": "Insérer une image", "superscript": "Exposant", "subscript": "Indice", "createLink": "Créer un lien", "undo": "Annuler", "italic": "Italique", "fontName": "Nom de police", "justifyLeft": "Aligner à gauche", "unlink": "Supprimer le lien", "toggleTableBorder": "Afficher/Masquer la bordure du tableau", "fontSize": "Taille de police", "indent": "Retrait", "redo": "Rétablir", "strikethrough": "Barrer", "justifyFull": "Justifier", "justifyCenter": "Aligner au centre", "hiliteColor": "Couleur d'arrière-plan", "deleteTable": "Supprimer le tableau", "outdent": "Retrait négatif", "cut": "Couper", "plainFormatBlock": "Style de paragraphe", "bold": "Gras", "systemShortcutFF": "L'action \"${0}\" est disponible dans Mozilla Firefox uniquement, par le biais d'un raccourci-clavier. Utilisez ${1}.", "justifyRight": "Aligner à droite", "appleKey": "⌘${0}", "ctrlKey": "ctrl+${0}"})
/trunk/api/js/dojo1.0/dijit/_editor/nls/ko/commands.js
New file
0,0 → 1,0
({"removeFormat": "형식 제거", "copy": "복사", "paste": "붙여넣기", "selectAll": "모두 선택", "insertOrderedList": "번호 목록", "insertTable": "테이블 삽입/편집", "underline": "밑줄", "foreColor": "전경색", "htmlToggle": "HTML 소스", "formatBlock": "단락 양식", "insertHorizontalRule": "수평 자", "delete": "삭제", "insertUnorderedList": "글머리표 목록", "tableProp": "테이블 특성", "insertImage": "이미지 삽입", "superscript": "위첨자", "subscript": "아래첨자", "createLink": "링크 작성", "undo": "실행 취소", "italic": "이탤릭체", "fontName": "글꼴 이름", "justifyLeft": "왼쪽 맞춤", "unlink": "링크 제거", "toggleTableBorder": "토글 테이블 경계", "fontSize": "글꼴 크기", "indent": "들여쓰기", "redo": "다시 실행", "strikethrough": "취소선", "justifyFull": "양쪽 맞춤", "justifyCenter": "가운데 맞춤", "hiliteColor": "배경색", "deleteTable": "테이블 삭제", "outdent": "내어쓰기", "cut": "잘라내기", "plainFormatBlock": "단락 양식", "bold": "굵은체", "systemShortcutFF": "\"${0}\" 조치는 키보드 바로 가기를 사용하는 Mozilla Firefox에서만 사용 가능합니다. ${1} 사용.", "justifyRight": "오른쪽 맞춤", "appleKey": "⌘${0}", "ctrlKey": "ctrl+${0}"})
/trunk/api/js/dojo1.0/dijit/_editor/nls/ko/LinkDialog.js
New file
0,0 → 1,0
({"set": "설정", "text": "텍스트:", "title": "URL 링크", "url": "URL:", "urlInvalidMessage": "유효하지 않은 URL입니다. 'http://www.dojotoolkit.org'와 같이 전체 URL을 입력하십시오. "})
/trunk/api/js/dojo1.0/dijit/_editor/nls/zh-tw/LinkDialog.js
New file
0,0 → 1,0
({"set": "設定", "text": "文字:", "title": "鏈結 URL", "url": "URL:", "urlInvalidMessage": "URL 無效。請輸入完整的 URL,例如 'http://www.dojotoolkit.org'"})
/trunk/api/js/dojo1.0/dijit/_editor/nls/zh-tw/commands.js
New file
0,0 → 1,0
({"removeFormat": "移除格式", "copy": "複製", "paste": "貼上", "selectAll": "全選", "insertOrderedList": "編號清單", "insertTable": "插入/編輯表格", "underline": "底線", "foreColor": "前景顏色", "htmlToggle": "HTML 原始檔", "formatBlock": "段落樣式", "insertHorizontalRule": "水平尺規", "delete": "刪除", "insertUnorderedList": "項目符號清單", "tableProp": "表格內容", "insertImage": "插入影像", "superscript": "上標", "subscript": "下標", "createLink": "建立鏈結", "undo": "復原", "italic": "斜體", "fontName": "字型名稱", "justifyLeft": "靠左對齊", "unlink": "移除鏈結", "toggleTableBorder": "切換表格邊框", "fontSize": "字型大小", "indent": "縮排", "redo": "重做", "strikethrough": "加刪除線", "justifyFull": "對齊", "justifyCenter": "置中對齊", "hiliteColor": "背景顏色", "deleteTable": "刪除表格", "outdent": "凸排", "cut": "剪下", "plainFormatBlock": "段落樣式", "bold": "粗體", "systemShortcutFF": "\"${0}\" 動作在 Mozilla Firefox 中,只能使用鍵盤快速鍵。請使用 ${1}。", "justifyRight": "靠右對齊", "appleKey": "⌘${0}", "ctrlKey": "ctrl+${0}"})
/trunk/api/js/dojo1.0/dijit/_editor/nls/pl/commands.js
New file
0,0 → 1,0
({"removeFormat": "Usuń formatowanie", "copy": "Kopiuj", "paste": "Wklej", "selectAll": "Wybierz wszystko", "insertOrderedList": "Lista numerowana", "insertTable": "Wstaw/edytuj tabelę", "underline": "Podkreślenie", "foreColor": "Kolor pierwszego planu", "htmlToggle": "Źródło HTML", "formatBlock": "Styl akapitu", "insertHorizontalRule": "Linia pozioma", "delete": "Usuń", "insertUnorderedList": "Lista wypunktowana", "tableProp": "Właściwość tabeli", "insertImage": "Wstaw obraz", "superscript": "Indeks górny", "subscript": "Indeks dolny", "createLink": "Utwórz odsyłacz", "undo": "Cofnij", "italic": "Kursywa", "fontName": "Nazwa czcionki", "justifyLeft": "Wyrównaj do lewej", "unlink": "Usuń odsyłacz", "toggleTableBorder": "Przełącz ramkę tabeli", "fontSize": "Wielkość czcionki", "indent": "Wcięcie", "redo": "Przywróć", "strikethrough": "Przekreślenie", "justifyFull": "Wyrównaj do lewej i prawej", "justifyCenter": "Wyrównaj do środka", "hiliteColor": "Kolor tła", "deleteTable": "Usuń tabelę", "outdent": "Usuń wcięcie", "cut": "Wytnij", "plainFormatBlock": "Styl akapitu", "bold": "Pogrubienie", "systemShortcutFF": "Działanie ${0} jest dostępne w przeglądarce Mozilla Firefox wyłącznie za pomocą skrótu klawiaturowego. Użyj ${1}.", "justifyRight": "Wyrównaj do prawej", "appleKey": "⌘${0}", "ctrlKey": "ctrl+${0}"})
/trunk/api/js/dojo1.0/dijit/_editor/nls/pl/LinkDialog.js
New file
0,0 → 1,0
({"set": "Ustaw", "text": "Tekst:", "title": "Adres URL odsyłacza", "url": "Adres URL:", "urlInvalidMessage": "Nieprawidłowy adres URL. Wprowadź pełny adres URL, na przykład http://www.dojotoolkit.org."})
/trunk/api/js/dojo1.0/dijit/_editor/nls/commands.js
New file
0,0 → 1,0
({"removeFormat": "Remove Format", "copy": "Copy", "paste": "Paste", "selectAll": "Select All", "insertOrderedList": "Numbered List", "insertTable": "Insert/Edit Table", "underline": "Underline", "foreColor": "Foreground Color", "htmlToggle": "HTML Source", "formatBlock": "Paragraph Style", "insertHorizontalRule": "Horizontal Rule", "delete": "Delete", "appleKey": "⌘${0}", "insertUnorderedList": "Bullet List", "tableProp": "Table Property", "insertImage": "Insert Image", "superscript": "Superscript", "subscript": "Subscript", "createLink": "Create Link", "undo": "Undo", "italic": "Italic", "fontName": "Font Name", "justifyLeft": "Align Left", "unlink": "Remove Link", "toggleTableBorder": "Toggle Table Border", "ctrlKey": "ctrl+${0}", "fontSize": "Font Size", "indent": "Indent", "redo": "Redo", "strikethrough": "Strikethrough", "justifyFull": "Justify", "justifyCenter": "Align Center", "hiliteColor": "Background Color", "deleteTable": "Delete Table", "outdent": "Outdent", "cut": "Cut", "plainFormatBlock": "Paragraph Style", "bold": "Bold", "systemShortcutFF": "The \"${0}\" action is only available in Mozilla Firefox using a keyboard shortcut. Use ${1}.", "justifyRight": "Align Right"})
/trunk/api/js/dojo1.0/dijit/_editor/nls/hu/LinkDialog.js
New file
0,0 → 1,0
({"set": "Beállítás", "text": "Szöveg:", "title": "Hivatkozás URL címe", "url": "URL:", "urlInvalidMessage": "Érvénytelen URL cím. Adjon meg teljes URL címet, például: 'http://www.dojotoolkit.org'"})
/trunk/api/js/dojo1.0/dijit/_editor/nls/hu/commands.js
New file
0,0 → 1,0
({"removeFormat": "Formázás eltávolítása", "copy": "Másolás", "paste": "Beillesztés", "selectAll": "Összes kijelölése", "insertOrderedList": "Számozott lista", "insertTable": "Táblázat beszúrása/szerkesztése", "underline": "Aláhúzott", "foreColor": "Előtérszín", "htmlToggle": "HTML forrás", "formatBlock": "Bekezdés stílusa", "insertHorizontalRule": "Vízszintes vonalzó", "delete": "Törlés", "insertUnorderedList": "Felsorolásjeles lista", "tableProp": "Táblázat tulajdonságai", "insertImage": "Kép beszúrása", "superscript": "Felső index", "subscript": "Alsó index", "createLink": "Hivatkozás létrehozása", "undo": "Visszavonás", "italic": "Dőlt", "fontName": "Betűtípus", "justifyLeft": "Balra igazítás", "unlink": "Hivatkozás eltávolítása", "toggleTableBorder": "Táblázatszegély ki-/bekapcsolása", "fontSize": "Betűméret", "indent": "Behúzás", "redo": "Újra", "strikethrough": "Áthúzott", "justifyFull": "Sorkizárás", "justifyCenter": "Középre igazítás", "hiliteColor": "Háttérszín", "deleteTable": "Táblázat törlése", "outdent": "Negatív behúzás", "cut": "Kivágás", "plainFormatBlock": "Bekezdés stílusa", "bold": "Félkövér", "systemShortcutFF": "A(z) \"${0}\" művelet csak Mozilla Firefox böngészőben érhető el billentyűparancs használatával. Használja a következőt: ${1}.", "justifyRight": "Jobbra igazítás", "appleKey": "⌘${0}", "ctrlKey": "ctrl+${0}"})
/trunk/api/js/dojo1.0/dijit/_editor/nls/it/commands.js
New file
0,0 → 1,0
({"removeFormat": "Rimuovi formato", "copy": "Copia", "paste": "Incolla", "selectAll": "Seleziona tutto", "insertOrderedList": "Elenco numerato", "insertTable": "Inserisci/Modifica tabella", "underline": "Sottolineato", "foreColor": "Colore primo piano", "htmlToggle": "Origine HTML", "formatBlock": "Stile paragrafo", "insertHorizontalRule": "Righello orizzontale", "delete": "Elimina", "insertUnorderedList": "Elenco puntato", "tableProp": "Proprietà tabella", "insertImage": "Inserisci immagine", "superscript": "Apice", "subscript": "Pedice", "createLink": "Crea collegamento", "undo": "Annulla", "italic": "Corsivo", "fontName": "Nome carattere", "justifyLeft": "Allinea a sinistra", "unlink": "Rimuovi collegamento", "toggleTableBorder": "Mostra/Nascondi margine tabella", "fontSize": "Dimensione carattere", "indent": "Rientra", "redo": "Ripristina", "strikethrough": "Barrato", "justifyFull": "Giustifica", "justifyCenter": "Allinea al centro", "hiliteColor": "Colore sfondo", "deleteTable": "Elimina tabella", "outdent": "Rimuovi rientro", "cut": "Taglia", "plainFormatBlock": "Stile paragrafo", "bold": "Grassetto", "systemShortcutFF": "L'azione \"${0}\" è disponibile solo in Mozilla Firefox tramite tasti di scelta rapida. Utilizzare ${1}.", "justifyRight": "Allinea a destra", "appleKey": "⌘${0}", "ctrlKey": "ctrl+${0}"})
/trunk/api/js/dojo1.0/dijit/_editor/nls/it/LinkDialog.js
New file
0,0 → 1,0
({"set": "Imposta", "text": "Testo:", "title": "URL di collegamento", "url": "URL:", "urlInvalidMessage": "URL non valido. Immettere un URL completo come nel seguente esempio: 'http://www.dojotoolkit.org'"})
/trunk/api/js/dojo1.0/dijit/_editor/nls/zh/LinkDialog.js
New file
0,0 → 1,0
({"set": "设定", "text": "文本:", "title": "链接 URL", "url": "URL:", "urlInvalidMessage": "URL 无效。请输入完整的 URL,如“http://www.dojotoolkit.org”"})
/trunk/api/js/dojo1.0/dijit/_editor/nls/zh/commands.js
New file
0,0 → 1,0
({"removeFormat": "除去格式", "copy": "复制", "paste": "粘贴", "selectAll": "全选", "insertOrderedList": "编号列表", "insertTable": "插入/编辑表", "underline": "下划线", "foreColor": "前景色", "htmlToggle": "HTML 源代码", "formatBlock": "段落样式", "insertHorizontalRule": "水平线", "delete": "删除", "insertUnorderedList": "符号列表", "tableProp": "表属性", "insertImage": "插入图像", "superscript": "上标", "subscript": "下标", "createLink": "创建链接", "undo": "撤销", "italic": "斜体", "fontName": "字体名称", "justifyLeft": "左对齐", "unlink": "除去链接", "toggleTableBorder": "切换表边框", "fontSize": "字体大小", "indent": "增加缩进", "redo": "重做", "strikethrough": "删除线", "justifyFull": "对齐", "justifyCenter": "居中", "hiliteColor": "背景色", "deleteTable": "删除表", "outdent": "减少缩进", "cut": "剪切", "plainFormatBlock": "段落样式", "bold": "粗体", "systemShortcutFF": "只能在 Mozilla Firefox 中通过键盘快捷方式执行“${0}”操作。请使用 ${1}。", "justifyRight": "右对齐", "appleKey": "⌘${0}", "ctrlKey": "ctrl+${0}"})
/trunk/api/js/dojo1.0/dijit/_editor/nls/pt/LinkDialog.js
New file
0,0 → 1,0
({"set": "Definir\n", "text": "Texto:\n", "title": "Vincular URL", "url": "URL:", "urlInvalidMessage": "URL inválida. Digite uma URL completa, como 'http://www.dojotoolkit.org'"})
/trunk/api/js/dojo1.0/dijit/_editor/nls/pt/commands.js
New file
0,0 → 1,0
({"removeFormat": "Remover Formato", "copy": "Copiar", "paste": "Colar", "selectAll": "Selecionar Todos", "insertOrderedList": "Lista Numerada", "insertTable": "Inserir/Editar Tabela", "underline": "Sublinhado", "foreColor": "Cor do Primeiro Plano", "htmlToggle": "Origem HTML", "formatBlock": "Estilo de Parágrafo", "insertHorizontalRule": "Régua Horizontal", "delete": "Excluir ", "insertUnorderedList": "Lista com Marcadores", "tableProp": "Propriedade da Tabela", "insertImage": "Inserir Imagem", "superscript": "Sobrescrito", "subscript": "Subscrito", "createLink": "Criar Link", "undo": "Desfazer", "italic": "Itálico", "fontName": "Nome da Fonte", "justifyLeft": "Alinhar pela Esquerda", "unlink": "Remover Link", "toggleTableBorder": "Alternar Moldura da Tabela", "fontSize": "Tamanho da Fonte", "indent": "Recuar", "redo": "Refazer", "strikethrough": "Tachado", "justifyFull": "Justificar", "justifyCenter": "Alinhar pelo Centro", "hiliteColor": "Cor de segundo plano", "deleteTable": "Excluir Tabela", "outdent": "Avançar", "cut": "Recortar", "plainFormatBlock": "Estilo de Parágrafo", "bold": "Negrito", "systemShortcutFF": "A ação \"${0}\" está disponível apenas no Mozilla Firefox utilizando um atalho do teclado. Utilize ${1}.", "justifyRight": "Alinhar pela Direita", "appleKey": "⌘${0}", "ctrlKey": "ctrl+${0}"})
/trunk/api/js/dojo1.0/dijit/_editor/nls/ru/commands.js
New file
0,0 → 1,0
({"removeFormat": "Удалить формат", "copy": "Копировать", "paste": "Вставить", "selectAll": "Выбрать все", "insertOrderedList": "Нумерованный список", "insertTable": "Вставить/изменить таблицу", "underline": "Подчеркивание", "foreColor": "Цвет текста", "htmlToggle": "Код HTML", "formatBlock": "Стиль абзаца", "insertHorizontalRule": "Горизонтальная линейка", "delete": "Удалить", "insertUnorderedList": "Список с маркерами", "tableProp": "Свойства таблицы", "insertImage": "Вставить изображение", "superscript": "Верхний индекс", "subscript": "Нижний индекс", "createLink": "Создать ссылку", "undo": "Отменить", "italic": "Курсив", "fontName": "Название шрифта", "justifyLeft": "По левому краю", "unlink": "Удалить ссылку", "toggleTableBorder": "Переключить рамку таблицы", "fontSize": "Размер шрифта", "indent": "Отступ", "redo": "Повторить", "strikethrough": "Перечеркивание", "justifyFull": "По ширине", "justifyCenter": "По центру", "hiliteColor": "Цвет фона", "deleteTable": "Удалить таблицу", "outdent": "Втяжка", "cut": "Вырезать", "plainFormatBlock": "Стиль абзаца", "bold": "Полужирный", "systemShortcutFF": "Действие \"${0}\" доступно в Mozilla Firefox только через сочетание клавиш. Используйте ${1}.", "justifyRight": "По правому краю", "appleKey": "⌘${0}", "ctrlKey": "ctrl+${0}"})
/trunk/api/js/dojo1.0/dijit/_editor/nls/ru/LinkDialog.js
New file
0,0 → 1,0
({"set": "Задать", "text": "Текст:", "title": "URL ссылки", "url": "URL:", "urlInvalidMessage": "Недопустимый адрес URL. Укажите полный URL, например: 'http://www.dojotoolkit.org'"})
/trunk/api/js/dojo1.0/dijit/_editor/nls/LinkDialog.js
New file
0,0 → 1,0
({"set": "Set", "text": "Text:", "title": "Link URL", "url": "URL:", "urlInvalidMessage": "Invalid URL. Enter a full URL like 'http://www.dojotoolkit.org'"})
/trunk/api/js/dojo1.0/dijit/_editor/nls/de/commands.js
New file
0,0 → 1,0
({"removeFormat": "Formatierung entfernen", "copy": "Kopieren", "paste": "Einfügen", "selectAll": "Alles auswählen", "insertOrderedList": "Nummerierung", "insertTable": "Tabelle einfügen/bearbeiten", "underline": "Unterstrichen", "foreColor": "Vordergrundfarbe", "htmlToggle": "HTML-Quelltext", "formatBlock": "Absatzstil", "insertHorizontalRule": "Horizontaler Strich", "delete": "Löschen", "insertUnorderedList": "Aufzählungszeichen", "tableProp": "Tabelleneigenschaft", "insertImage": "Grafik einfügen", "superscript": "Hochgestellt", "subscript": "Tiefgestellt", "createLink": "Link erstellen", "undo": "Rückgängig", "italic": "Kursiv", "fontName": "Schriftartname", "justifyLeft": "Linksbündig", "unlink": "Link entfernen", "toggleTableBorder": "Tabellenumrandung ein-/ausschalten", "ctrlKey": "Strg+${0}", "fontSize": "Schriftgröße", "indent": "Einrücken", "redo": "Wiederherstellen", "strikethrough": "Durchgestrichen", "justifyFull": "Blocksatz", "justifyCenter": "Zentriert", "hiliteColor": "Hintergrundfarbe", "deleteTable": "Tabelle löschen", "outdent": "Ausrücken", "cut": "Ausschneiden", "plainFormatBlock": "Absatzstil", "bold": "Fett", "systemShortcutFF": "Die Aktion \"${0}\" ist in Mozilla Firefox nur über einen Tastaturkurzbefehl verfügbar. Verwenden Sie ${1}.", "justifyRight": "Rechtsbündig", "appleKey": "⌘${0}"})
/trunk/api/js/dojo1.0/dijit/_editor/nls/de/LinkDialog.js
New file
0,0 → 1,0
({"set": "Festlegen", "text": "Text:", "title": "Link-URL", "url": "URL:", "urlInvalidMessage": "Ungültiger URL. Geben Sie einen vollständigen URL ein. Beispiel: 'http://www.dojotoolkit.org'"})
/trunk/api/js/dojo1.0/dijit/_editor/selection.js
New file
0,0 → 1,220
if(!dojo._hasResource["dijit._editor.selection"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit._editor.selection"] = true;
dojo.provide("dijit._editor.selection");
 
// FIXME:
// all of these methods branch internally for IE. This is probably
// sub-optimal in terms of runtime performance. We should investigate the
// size difference for differentiating at definition time.
 
dojo.mixin(dijit._editor.selection, {
getType: function(){
// summary: Get the selection type (like document.select.type in IE).
if(dojo.doc["selection"]){ //IE
return dojo.doc.selection.type.toLowerCase();
}else{
var stype = "text";
 
// Check if the actual selection is a CONTROL (IMG, TABLE, HR, etc...).
var oSel;
try{
oSel = dojo.global.getSelection();
}catch(e){ /*squelch*/ }
 
if(oSel && oSel.rangeCount==1){
var oRange = oSel.getRangeAt(0);
if( (oRange.startContainer == oRange.endContainer) &&
((oRange.endOffset - oRange.startOffset) == 1) &&
(oRange.startContainer.nodeType != 3 /* text node*/)
){
stype = "control";
}
}
return stype;
}
},
 
getSelectedText: function(){
// summary:
// Return the text (no html tags) included in the current selection or null if no text is selected
if(dojo.doc["selection"]){ //IE
if(dijit._editor.selection.getType() == 'control'){
return null;
}
return dojo.doc.selection.createRange().text;
}else{
var selection = dojo.global.getSelection();
if(selection){
return selection.toString();
}
}
},
 
getSelectedHtml: function(){
// summary:
// Return the html of the current selection or null if unavailable
if(dojo.doc["selection"]){ //IE
if(dijit._editor.selection.getType() == 'control'){
return null;
}
return dojo.doc.selection.createRange().htmlText;
}else{
var selection = dojo.global.getSelection();
if(selection && selection.rangeCount){
var frag = selection.getRangeAt(0).cloneContents();
var div = document.createElement("div");
div.appendChild(frag);
return div.innerHTML;
}
return null;
}
},
 
getSelectedElement: function(){
// summary:
// Retrieves the selected element (if any), just in the case that
// a single element (object like and image or a table) is
// selected.
if(this.getType() == "control"){
if(dojo.doc["selection"]){ //IE
var range = dojo.doc.selection.createRange();
if(range && range.item){
return dojo.doc.selection.createRange().item(0);
}
}else{
var selection = dojo.global.getSelection();
return selection.anchorNode.childNodes[ selection.anchorOffset ];
}
}
},
 
getParentElement: function(){
// summary:
// Get the parent element of the current selection
if(this.getType() == "control"){
var p = this.getSelectedElement();
if(p){ return p.parentNode; }
}else{
if(dojo.doc["selection"]){ //IE
return dojo.doc.selection.createRange().parentElement();
}else{
var selection = dojo.global.getSelection();
if(selection){
var node = selection.anchorNode;
 
while(node && (node.nodeType != 1)){ // not an element
node = node.parentNode;
}
 
return node;
}
}
}
},
 
hasAncestorElement: function(/*String*/tagName /* ... */){
// summary:
// Check whether current selection has a parent element which is
// of type tagName (or one of the other specified tagName)
return (this.getAncestorElement.apply(this, arguments) != null);
},
 
getAncestorElement: function(/*String*/tagName /* ... */){
// summary:
// Return the parent element of the current selection which is of
// type tagName (or one of the other specified tagName)
 
var node = this.getSelectedElement() || this.getParentElement();
return this.getParentOfType(node, arguments);
},
 
isTag: function(/*DomNode*/node, /*Array*/tags){
if(node && node.tagName){
var _nlc = node.tagName.toLowerCase();
for(var i=0; i<tags.length; i++){
var _tlc = String(tags[i]).toLowerCase();
if(_nlc == _tlc){
return _tlc;
}
}
}
return "";
},
 
getParentOfType: function(/*DomNode*/node, /*Array*/tags){
while(node){
if(this.isTag(node, tags).length){
return node;
}
node = node.parentNode;
}
return null;
},
 
remove: function(){
// summary: delete current selection
var _s = dojo.doc.selection;
if(_s){ //IE
if(_s.type.toLowerCase() != "none"){
_s.clear();
}
return _s;
}else{
_s = dojo.global.getSelection();
_s.deleteFromDocument();
return _s;
}
},
 
selectElementChildren: function(/*DomNode*/element,/*Boolean?*/nochangefocus){
// summary:
// clear previous selection and select the content of the node
// (excluding the node itself)
var _window = dojo.global;
var _document = dojo.doc;
element = dojo.byId(element);
if(_document.selection && dojo.body().createTextRange){ // IE
var range = element.ownerDocument.body.createTextRange();
range.moveToElementText(element);
if(!nochangefocus){
range.select();
}
}else if(_window["getSelection"]){
var selection = _window.getSelection();
if(selection["setBaseAndExtent"]){ // Safari
selection.setBaseAndExtent(element, 0, element, element.innerText.length - 1);
}else if(selection["selectAllChildren"]){ // Mozilla
selection.selectAllChildren(element);
}
}
},
 
selectElement: function(/*DomNode*/element,/*Boolean?*/nochangefocus){
// summary:
// clear previous selection and select element (including all its children)
var _document = dojo.doc;
element = dojo.byId(element);
if(_document.selection && dojo.body().createTextRange){ // IE
try{
var range = dojo.body().createControlRange();
range.addElement(element);
if(!nochangefocus){
range.select();
}
}catch(e){
this.selectElementChildren(element,nochangefocus);
}
}else if(dojo.global["getSelection"]){
var selection = dojo.global.getSelection();
// FIXME: does this work on Safari?
if(selection["removeAllRanges"]){ // Mozilla
var range = _document.createRange() ;
range.selectNode(element) ;
selection.removeAllRanges() ;
selection.addRange(range) ;
}
}
}
});
 
}
/trunk/api/js/dojo1.0/dijit/_editor/plugins/EnterKeyHandling.js
New file
0,0 → 1,422
if(!dojo._hasResource["dijit._editor.plugins.EnterKeyHandling"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit._editor.plugins.EnterKeyHandling"] = true;
dojo.provide("dijit._editor.plugins.EnterKeyHandling");
 
 
dojo.declare("dijit._editor.plugins.EnterKeyHandling",null,{
// blockNodeForEnter: String
// this property decides the behavior of Enter key. It can be either P,
// DIV, BR, or empty (which means disable this feature). Anything else
// will trigger errors.
blockNodeForEnter: 'P',
constructor: function(args){
if(args){
dojo.mixin(this,args);
}
},
setEditor: function(editor){
this.editor=editor;
if(this.blockNodeForEnter=='BR'){
if(dojo.isIE){
editor.contentDomPreFilters.push(dojo.hitch(this, "regularPsToSingleLinePs"));
editor.contentDomPostFilters.push(dojo.hitch(this, "singleLinePsToRegularPs"));
editor.onLoadDeferred.addCallback(dojo.hitch(this, "_fixNewLineBehaviorForIE"));
}else{
editor.onLoadDeferred.addCallback(dojo.hitch(this,function(d){
try{
this.editor.document.execCommand("insertBrOnReturn", false, true);
}catch(e){};
return d;
}));
}
}else if(this.blockNodeForEnter){
//add enter key handler
// FIXME: need to port to the new event code!!
dojo['require']('dijit._editor.range');
var h=dojo.hitch(this,this.handleEnterKey);
editor.addKeyHandler(13, 0, h); //enter
editor.addKeyHandler(13, 2, h); //shift+enter
this.connect(this.editor,'onKeyPressed','onKeyPressed');
}
},
connect: function(o,f,tf){
if(!this._connects){
this._connects=[];
}
this._connects.push(dojo.connect(o,f,this,tf));
},
destroy: function(){
dojo.forEach(this._connects,dojo.disconnect);
this._connects=[];
},
onKeyPressed: function(e){
if(this._checkListLater){
if(dojo.withGlobal(this.editor.window, 'isCollapsed', dijit._editor.selection)){
if(!dojo.withGlobal(this.editor.window, 'hasAncestorElement', dijit._editor.selection, ['LI'])){
//circulate the undo detection code by calling RichText::execCommand directly
dijit._editor.RichText.prototype.execCommand.apply(this.editor, ['formatblock',this.blockNodeForEnter]);
//set the innerHTML of the new block node
var block = dojo.withGlobal(this.editor.window, 'getAncestorElement', dijit._editor.selection, [this.blockNodeForEnter])
if(block){
block.innerHTML=this.bogusHtmlContent;
if(dojo.isIE){
//the following won't work, it will move the caret to the last list item in the previous list
// var newrange = dijit.range.create();
// newrange.setStart(block.firstChild,0);
// var selection = dijit.range.getSelection(this.editor.window)
// selection.removeAllRanges();
// selection.addRange(newrange);
//move to the start by move backward one char
var r = this.editor.document.selection.createRange();
r.move('character',-1);
r.select();
}
}else{
alert('onKeyPressed: Can not find the new block node');
}
}
}
this._checkListLater = false;
}else if(this._pressedEnterInBlock){
//the new created is the original current P, so we have previousSibling below
this.removeTrailingBr(this._pressedEnterInBlock.previousSibling);
delete this._pressedEnterInBlock;
}
},
bogusHtmlContent: '&nbsp;',
blockNodes: /^(?:H1|H2|H3|H4|H5|H6|LI)$/,
handleEnterKey: function(e){
// summary: manually handle enter key event to make the behavior consistant across
// all supported browsers. See property blockNodeForEnter for available options
if(!this.blockNodeForEnter){ return true; } //let browser handle this
if(e.shiftKey //shift+enter always generates <br>
|| this.blockNodeForEnter=='BR'){
var parent = dojo.withGlobal(this.editor.window, "getParentElement", dijit._editor.selection);
var header = dijit.range.getAncestor(parent,this.editor.blockNodes);
if(header){
if(header.tagName=='LI'){
return true; //let brower handle
}
var selection = dijit.range.getSelection(this.editor.window);
var range = selection.getRangeAt(0);
if(!range.collapsed){
range.deleteContents();
}
if(dijit.range.atBeginningOfContainer(header, range.startContainer, range.startOffset)){
dojo.place(this.editor.document.createElement('br'), header, "before");
}else if(dijit.range.atEndOfContainer(header, range.startContainer, range.startOffset)){
dojo.place(this.editor.document.createElement('br'), header, "after");
var newrange = dijit.range.create();
newrange.setStartAfter(header);
 
selection.removeAllRanges();
selection.addRange(newrange);
}else{
return true; //let brower handle
}
}else{
//don't change this: do not call this.execCommand, as that may have other logic in subclass
// FIXME
dijit._editor.RichText.prototype.execCommand.call(this.editor, 'inserthtml', '<br>');
}
return false;
}
var _letBrowserHandle = true;
//blockNodeForEnter is either P or DIV
//first remove selection
var selection = dijit.range.getSelection(this.editor.window);
var range = selection.getRangeAt(0);
if(!range.collapsed){
range.deleteContents();
}
 
var block = dijit.range.getBlockAncestor(range.endContainer, null, this.editor.editNode);
 
if(block.blockNode && block.blockNode.tagName == 'LI'){
this._checkListLater = true;
return true;
}else{
this._checkListLater = false;
}
 
//text node directly under body, let's wrap them in a node
if(!block.blockNode){
this.editor.document.execCommand('formatblock',false, this.blockNodeForEnter);
//get the newly created block node
// FIXME
block = {blockNode:dojo.withGlobal(this.editor.window, "getAncestorElement", dijit._editor.selection, [this.blockNodeForEnter]),
blockContainer: this.editor.editNode};
if(block.blockNode){
if((block.blockNode.textContent||block.blockNode.innerHTML).replace(/^\s+|\s+$/g, "").length==0){
this.removeTrailingBr(block.blockNode);
return false;
}
}else{
block.blockNode = this.editor.editNode;
}
selection = dijit.range.getSelection(this.editor.window);
range = selection.getRangeAt(0);
}
var newblock = this.editor.document.createElement(this.blockNodeForEnter);
newblock.innerHTML=this.bogusHtmlContent;
this.removeTrailingBr(block.blockNode);
if(dijit.range.atEndOfContainer(block.blockNode, range.endContainer, range.endOffset)){
if(block.blockNode === block.blockContainer){
block.blockNode.appendChild(newblock);
}else{
dojo.place(newblock, block.blockNode, "after");
}
_letBrowserHandle = false;
//lets move caret to the newly created block
var newrange = dijit.range.create();
newrange.setStart(newblock,0);
selection.removeAllRanges();
selection.addRange(newrange);
if(this.editor.height){
newblock.scrollIntoView(false);
}
}else if(dijit.range.atBeginningOfContainer(block.blockNode,
range.startContainer, range.startOffset)){
if(block.blockNode === block.blockContainer){
dojo.place(newblock, block.blockNode, "first");
}else{
dojo.place(newblock, block.blockNode, "before");
}
if(this.editor.height){
//browser does not scroll the caret position into view, do it manually
newblock.scrollIntoView(false);
}
_letBrowserHandle = false;
}else{ //press enter in the middle of P
if(dojo.isMoz){
//press enter in middle of P may leave a trailing <br/>, let's remove it later
this._pressedEnterInBlock = block.blockNode;
}
}
return _letBrowserHandle;
},
removeTrailingBr: function(container){
if(/P|DIV|LI/i .test(container.tagName)){
var para = container;
}else{
var para = dijit._editor.selection.getParentOfType(container,['P','DIV','LI']);
}
 
if(!para){ return; }
if(para.lastChild){
if(para.childNodes.length>1 && para.lastChild.nodeType==3 && /^[\s\xAD]*$/ .test(para.lastChild.nodeValue)){
dojo._destroyElement(para.lastChild);
}
if(para.lastChild && para.lastChild.tagName=='BR'){
dojo._destroyElement(para.lastChild);
}
}
if(para.childNodes.length==0){
para.innerHTML=this.bogusHtmlContent;
}
},
_fixNewLineBehaviorForIE: function(d){
if(typeof this.editor.document.__INSERTED_EDITIOR_NEWLINE_CSS == "undefined"){
var lineFixingStyles = "p{margin:0 !important;}";
var insertCssText = function(
/*String*/ cssStr,
/*Document*/ doc,
/*String*/ URI)
{
// summary:
// Attempt to insert CSS rules into the document through inserting a
// style element
 
// DomNode Style = insertCssText(String ".dojoMenu {color: green;}"[, DomDoc document, dojo.uri.Uri Url ])
if(!cssStr){
return; // HTMLStyleElement
}
if(!doc){ doc = document; }
// if(URI){// fix paths in cssStr
// cssStr = dojo.html.fixPathsInCssText(cssStr, URI);
// }
var style = doc.createElement("style");
style.setAttribute("type", "text/css");
// IE is b0rken enough to require that we add the element to the doc
// before changing it's properties
var head = doc.getElementsByTagName("head")[0];
if(!head){ // must have a head tag
console.debug("No head tag in document, aborting styles");
return; // HTMLStyleElement
}else{
head.appendChild(style);
}
if(style.styleSheet){// IE
var setFunc = function(){
try{
style.styleSheet.cssText = cssStr;
}catch(e){ dojo.debug(e); }
};
if(style.styleSheet.disabled){
setTimeout(setFunc, 10);
}else{
setFunc();
}
}else{ // w3c
var cssText = doc.createTextNode(cssStr);
style.appendChild(cssText);
}
return style; // HTMLStyleElement
}
insertCssText(lineFixingStyles, this.editor.document);
this.editor.document.__INSERTED_EDITIOR_NEWLINE_CSS = true;
// this.regularPsToSingleLinePs(this.editNode);
return d;
}
},
regularPsToSingleLinePs: function(element, noWhiteSpaceInEmptyP){
function wrapLinesInPs(el){
// move "lines" of top-level text nodes into ps
function wrapNodes(nodes){
// nodes are assumed to all be siblings
var newP = nodes[0].ownerDocument.createElement('p'); // FIXME: not very idiomatic
nodes[0].parentNode.insertBefore(newP, nodes[0]);
for(var i=0; i<nodes.length; i++){
newP.appendChild(nodes[i]);
}
}
 
var currentNodeIndex = 0;
var nodesInLine = [];
var currentNode;
while(currentNodeIndex < el.childNodes.length){
currentNode = el.childNodes[currentNodeIndex];
if( (currentNode.nodeName!='BR') &&
(currentNode.nodeType==1) &&
(dojo.style(currentNode, "display")!="block")
){
nodesInLine.push(currentNode);
}else{
// hit line delimiter; process nodesInLine if there are any
var nextCurrentNode = currentNode.nextSibling;
if(nodesInLine.length){
wrapNodes(nodesInLine);
currentNodeIndex = (currentNodeIndex+1)-nodesInLine.length;
if(currentNode.nodeName=="BR"){
dojo._destroyElement(currentNode);
}
}
nodesInLine = [];
}
currentNodeIndex++;
}
if(nodesInLine.length){ wrapNodes(nodesInLine); }
}
 
function splitP(el){
// split a paragraph into seperate paragraphs at BRs
var currentNode = null;
var trailingNodes = [];
var lastNodeIndex = el.childNodes.length-1;
for(var i=lastNodeIndex; i>=0; i--){
currentNode = el.childNodes[i];
if(currentNode.nodeName=="BR"){
var newP = currentNode.ownerDocument.createElement('p');
dojo.place(newP, el, "after");
if (trailingNodes.length==0 && i != lastNodeIndex) {
newP.innerHTML = "&nbsp;"
}
dojo.forEach(trailingNodes, function(node){
newP.appendChild(node);
});
dojo._destroyElement(currentNode);
trailingNodes = [];
}else{
trailingNodes.unshift(currentNode);
}
}
}
 
var pList = [];
var ps = element.getElementsByTagName('p');
dojo.forEach(ps, function(p){ pList.push(p); });
dojo.forEach(pList, function(p){
if( (p.previousSibling) &&
(p.previousSibling.nodeName == 'P' || dojo.style(p.previousSibling, 'display') != 'block')
){
var newP = p.parentNode.insertBefore(this.document.createElement('p'), p);
// this is essential to prevent IE from losing the P.
// if it's going to be innerHTML'd later we need
// to add the &nbsp; to _really_ force the issue
newP.innerHTML = noWhiteSpaceInEmptyP ? "" : "&nbsp;";
}
splitP(p);
},this.editor);
wrapLinesInPs(element);
return element;
},
 
singleLinePsToRegularPs: function(element){
function getParagraphParents(node){
var ps = node.getElementsByTagName('p');
var parents = [];
for(var i=0; i<ps.length; i++){
var p = ps[i];
var knownParent = false;
for(var k=0; k < parents.length; k++){
if(parents[k] === p.parentNode){
knownParent = true;
break;
}
}
if(!knownParent){
parents.push(p.parentNode);
}
}
return parents;
}
 
function isParagraphDelimiter(node){
if(node.nodeType != 1 || node.tagName != 'P'){
return (dojo.style(node, 'display') == 'block');
}else{
if(!node.childNodes.length || node.innerHTML=="&nbsp;"){ return true }
//return node.innerHTML.match(/^(<br\ ?\/?>| |\&nbsp\;)$/i);
}
}
 
var paragraphContainers = getParagraphParents(element);
for(var i=0; i<paragraphContainers.length; i++){
var container = paragraphContainers[i];
var firstPInBlock = null;
var node = container.firstChild;
var deleteNode = null;
while(node){
if(node.nodeType != "1" || node.tagName != 'P'){
firstPInBlock = null;
}else if (isParagraphDelimiter(node)){
deleteNode = node;
firstPInBlock = null;
}else{
if(firstPInBlock == null){
firstPInBlock = node;
}else{
if( (!firstPInBlock.lastChild || firstPInBlock.lastChild.nodeName != 'BR') &&
(node.firstChild) &&
(node.firstChild.nodeName != 'BR')
){
firstPInBlock.appendChild(this.editor.document.createElement('br'));
}
while(node.firstChild){
firstPInBlock.appendChild(node.firstChild);
}
deleteNode = node;
}
}
node = node.nextSibling;
if(deleteNode){
dojo._destroyElement(deleteNode);
deleteNode = null;
}
}
}
return element;
}
});
 
}
/trunk/api/js/dojo1.0/dijit/_editor/plugins/LinkDialog.js
New file
0,0 → 1,150
if(!dojo._hasResource["dijit._editor.plugins.LinkDialog"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit._editor.plugins.LinkDialog"] = true;
dojo.provide("dijit._editor.plugins.LinkDialog");
 
dojo.require("dijit._Widget");
dojo.require("dijit._Templated");
dojo.require("dijit._editor._Plugin");
dojo.require("dijit.Dialog");
dojo.require("dijit.form.Button");
dojo.require("dijit.form.ValidationTextBox");
dojo.require("dojo.i18n");
dojo.require("dojo.string");
dojo.requireLocalization("dijit._editor", "LinkDialog", null, "ko,zh,ja,zh-tw,ru,it,ROOT,hu,fr,pt,pl,es,de,cs");
 
dojo.declare("dijit._editor.plugins.DualStateDropDownButton",
dijit.form.DropDownButton,
{
// summary: a DropDownButton but button can be displayed in two states (checked or unchecked)
setChecked: dijit.form.ToggleButton.prototype.setChecked
}
);
 
dojo.declare("dijit._editor.plugins.UrlTextBox",
dijit.form.ValidationTextBox,
{
// summary: the URL input box we use in our dialog
 
// regular expression for URLs, generated from dojo.regexp.url()
regExp: "((https?|ftps?)\\://|)(([0-9a-zA-Z]([-0-9a-zA-Z]{0,61}[0-9a-zA-Z])?\\.)+(arpa|aero|biz|com|coop|edu|gov|info|int|mil|museum|name|net|org|pro|travel|xxx|jobs|mobi|post|ac|ad|ae|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|ee|eg|er|eu|es|et|fi|fj|fk|fm|fo|fr|ga|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sk|sl|sm|sn|sr|st|su|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|tn|to|tr|tt|tv|tw|tz|ua|ug|uk|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw)|(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.){3}(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])|(0[xX]0*[\\da-fA-F]?[\\da-fA-F]\\.){3}0[xX]0*[\\da-fA-F]?[\\da-fA-F]|(0+[0-3][0-7][0-7]\\.){3}0+[0-3][0-7][0-7]|(0|[1-9]\\d{0,8}|[1-3]\\d{9}|4[01]\\d{8}|42[0-8]\\d{7}|429[0-3]\\d{6}|4294[0-8]\\d{5}|42949[0-5]\\d{4}|429496[0-6]\\d{3}|4294967[01]\\d{2}|42949672[0-8]\\d|429496729[0-5])|0[xX]0*[\\da-fA-F]{1,8}|([\\da-fA-F]{1,4}\\:){7}[\\da-fA-F]{1,4}|([\\da-fA-F]{1,4}\\:){6}((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.){3}(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])))(\\:(0|[1-9]\\d*))?(/([^?#\\s/]+/)*)?([^?#\\s/]+(\\?[^?#\\s/]*)?(#[A-Za-z][\\w.:-]*)?)?",
 
required: true,
 
postMixInProperties: function(){
this.inherited("postMixInProperties", arguments);
this.invalidMessage = dojo.i18n.getLocalization("dijit._editor", "LinkDialog", this.lang).urlInvalidMessage;
},
 
getValue: function(){
if(!/^(https?|ftps?)/.test(this.textbox.value)){
this.textbox.value="http://"+this.textbox.value;
}
return this.textbox.value;
}
}
);
 
dojo.declare("dijit._editor.plugins.LinkDialog",
dijit._editor._Plugin,
{
buttonClass: dijit._editor.plugins.DualStateDropDownButton,
useDefaultCommand: false,
command: "createLink",
linkDialogTemplate: [
"<label for='urlInput'>${url}&nbsp;</label>",
"<input dojoType=dijit._editor.plugins.UrlTextBox name='urlInput'><br>",
"<label for='textInput'>${text}&nbsp;</label>",
"<input dojoType=dijit.form.TextBox name='textInput'>",
"<br>",
"<button dojoType=dijit.form.Button type='submit'>${set}</button>"
].join(""),
 
constructor: function(){
var _this = this;
var messages = dojo.i18n.getLocalization("dijit._editor", "LinkDialog", this.lang);
this.dropDown = new dijit.TooltipDialog({
title: messages.title,
execute: dojo.hitch(this, "setValue"),
onOpen: function(){
_this._onOpenDialog();
dijit.TooltipDialog.prototype.onOpen.apply(this, arguments);
},
onCancel: function(){
setTimeout(dojo.hitch(_this, "_onCloseDialog"),0);
},
onClose: dojo.hitch(this, "_onCloseDialog")
});
this.dropDown.setContent(dojo.string.substitute(this.linkDialogTemplate, messages));
this.dropDown.startup();
},
 
setValue: function(args){
// summary: callback from the dialog when user hits "set" button
//TODO: prevent closing popup if the text is empty
this._onCloseDialog();
if(dojo.isIE){ //see #4151
var a = dojo.withGlobal(this.editor.window, "getAncestorElement",dijit._editor.selection, ['a']);
if(a){
dojo.withGlobal(this.editor.window, "selectElement",dijit._editor.selection, [a]);
}
}
var attstr='href="'+args.urlInput+'" _djrealurl="'+args.urlInput+'"';
// console.log(args,this.editor,'<a '+attstr+'>'+args.textInput+'</a>');
this.editor.execCommand('inserthtml', '<a '+attstr+'>'+args.textInput+'</a>');
// this.editor.execCommand(this.command, args.urlInput);
},
 
// _savedSelection: null,
_onCloseDialog: function(){
// FIXME: IE is really messed up here!!
if(dojo.isIE){
if(this._savedSelection){
var b=this._savedSelection;
this._savedSelection=null;
this.editor.focus();
var range = this.editor.document.selection.createRange();
range.moveToBookmark(b);
range.select();
}
}else{this.editor.focus();
}
},
_onOpenDialog: function(){
var a = dojo.withGlobal(this.editor.window, "getAncestorElement",dijit._editor.selection, ['a']);
var url='',text='';
if(a){
url=a.getAttribute('_djrealurl');
text=a.textContent||a.innerText;
dojo.withGlobal(this.editor.window, "selectElement",dijit._editor.selection, [a,true]);
}else{
text=dojo.withGlobal(this.editor.window, dijit._editor.selection.getSelectedText);
}
// FIXME: IE is *really* b0rken
if(dojo.isIE){
var range = this.editor.document.selection.createRange();
this._savedSelection = range.getBookmark();
}
this.dropDown.setValues({'urlInput':url,'textInput':text});
//dijit.focus(this.urlInput);
},
 
updateState: function(){
// summary: change shading on button if we are over a link (or not)
 
var _e = this.editor;
if(!_e){ return; }
if(!_e.isLoaded){ return; }
if(this.button){
try{
// display button differently if there is an existing link associated with the current selection
var hasA = dojo.withGlobal(this.editor.window, "hasAncestorElement",dijit._editor.selection, ['a']);
this.button.setChecked(hasA);
}catch(e){
console.debug(e); //FIXME: probably shouldn't squelch an exception here
}
}
}
}
);
 
}
/trunk/api/js/dojo1.0/dijit/_editor/plugins/FontChoice.js
New file
0,0 → 1,66
if(!dojo._hasResource["dijit._editor.plugins.FontChoice"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit._editor.plugins.FontChoice"] = true;
dojo.provide("dijit._editor.plugins.FontChoice");
 
dojo.require("dijit._editor._Plugin");
dojo.require("dijit.form.FilteringSelect");
dojo.require("dojo.data.ItemFileReadStore");
dojo.require("dojo.i18n");
 
dojo.requireLocalization("dijit._editor", "FontChoice", null, "ROOT");
 
dojo.declare("dijit._editor.plugins.FontChoice",
dijit._editor._Plugin,
{
_uniqueId: 0,
 
buttonClass: dijit.form.FilteringSelect,
 
_initButton: function(){
this.inherited("_initButton", arguments);
 
//TODO: do we need nls for font names? provide css font lists? or otherwise make this more configurable?
var names = {
fontName: ["serif", "sans-serif", "monospaced", "cursive", "fantasy"],
fontSize: [1,2,3,4,5,6,7],
formatBlock: ["p", "h1", "h2", "h3", "pre"] }[this.command];
var strings = dojo.i18n.getLocalization("dijit._editor", "FontChoice");
var items = dojo.map(names, function(x){ return { name: strings[x], value: x }; });
items.push({name:"", value:""}); // FilteringSelect doesn't like unmatched blank strings
this.button.store = new dojo.data.ItemFileReadStore(
{ data: { identifier: "value",
items: items }
});
this.button.setValue("");
 
dojo.connect(this.button, "onChange", this, function(choice){
this.editor.execCommand(this.command, choice);
});
},
 
updateState: function(){
this.inherited("updateState", arguments);
var _e = this.editor;
var _c = this.command;
if(!_e || !_e.isLoaded || !_c.length){ return; }
if(this.button){
var value = _e.queryCommandValue(_c);
this.button.setValue(value);
}
},
 
setToolbar: function(){
this.inherited("setToolbar", arguments);
 
var forRef = this.button;
if(!forRef.id){ forRef.id = "dijitEditorButton-"+this.command+(this._uniqueId++); } //TODO: is this necessary? FilteringSelects always seem to have an id?
var label = dojo.doc.createElement("label");
label.setAttribute("for", forRef.id);
var strings = dojo.i18n.getLocalization("dijit._editor", "FontChoice");
label.appendChild(dojo.doc.createTextNode(strings[this.command]));
dojo.place(label, this.button.domNode, "before");
}
}
);
 
}
/trunk/api/js/dojo1.0/dijit/_editor/plugins/TextColor.js
New file
0,0 → 1,24
if(!dojo._hasResource["dijit._editor.plugins.TextColor"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit._editor.plugins.TextColor"] = true;
dojo.provide("dijit._editor.plugins.TextColor");
 
dojo.require("dijit._editor._Plugin");
dojo.require("dijit.ColorPalette");
 
dojo.declare("dijit._editor.plugins.TextColor",
dijit._editor._Plugin,
{
buttonClass: dijit.form.DropDownButton,
 
//TODO: set initial focus/selection state?
 
constructor: function(){
this.dropDown = new dijit.ColorPalette();
dojo.connect(this.dropDown, "onChange", this, function(color){
this.editor.execCommand(this.command, color);
});
}
}
);
 
}
/trunk/api/js/dojo1.0/dijit/_editor/plugins/AlwaysShowToolbar.js
New file
0,0 → 1,147
if(!dojo._hasResource["dijit._editor.plugins.AlwaysShowToolbar"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit._editor.plugins.AlwaysShowToolbar"] = true;
dojo.provide("dijit._editor.plugins.AlwaysShowToolbar");
 
dojo.declare("dijit._editor.plugins.AlwaysShowToolbar", null,
{
_handleScroll: true,
setEditor: function(e){
this.editor=e;
// setTimeout(dojo.hitch(this,this.enable),10000);
e.onLoadDeferred.addCallback(dojo.hitch(this,this.enable));
// this.scrollInterval = setInterval(dojo.hitch(this, "globalOnScrollHandler"), 100);
},
enable: function(d){
this._updateHeight();
this._connects=[dojo.connect(window,'onscroll',this,"globalOnScrollHandler"),
dojo.connect(this.editor,'onNormalizedDisplayChanged',this,"_updateHeight")];
return d;
},
_updateHeight: function(){
// summary:
// Updates the height of the editor area to fit the contents.
var e=this.editor;
if(!e.isLoaded){ return; }
if(e.height){ return; }
 
var height = dojo.marginBox(e.editNode).h;
if(dojo.isOpera){
height = e.editNode.scrollHeight;
}
// console.debug('height',height);
// alert(this.editNode);
 
//height maybe zero in some cases even though the content is not empty,
//we try the height of body instead
if(!height){
height = dojo.marginBox(e.document.body).h;
}
 
if(height == 0){
console.debug("Can not figure out the height of the editing area!");
return; //prevent setting height to 0
}
if(height != this._lastHeight){
this._lastHeight = height;
// this.editorObject.style.height = this._lastHeight + "px";
dojo.marginBox(e.iframe, { h: this._lastHeight });
// this.iframe.height=this._lastHeight+10+'px';
// this.iframe.style.height=this._lastHeight+'px';
}
},
_lastHeight: 0,
globalOnScrollHandler: function(){
var isIE = dojo.isIE && dojo.isIE<7;
if(!this._handleScroll){ return; }
var tdn = this.editor.toolbar.domNode;
var db = dojo.body;
 
if(!this._scrollSetUp){
this._scrollSetUp = true;
this._scrollThreshold = dojo._abs(tdn, true).y;
// console.log("threshold:", this._scrollThreshold);
//what's this for?? comment out for now
// if((isIE)&&(db)&&(dojo.style(db, "backgroundIimage")=="none")){
// db.style.backgroundImage = "url(" + dojo.uri.moduleUri("dijit", "templates/blank.gif") + ")";
// db.style.backgroundAttachment = "fixed";
// }
}
 
var scrollPos = dojo._docScroll().y;
 
if(scrollPos > this._scrollThreshold && scrollPos < this._scrollThreshold+this._lastHeight){
// dojo.debug(scrollPos);
if(!this._fixEnabled){
var tdnbox = dojo.marginBox(tdn);
this.editor.iframe.style.marginTop = tdnbox.h+"px";
 
if(isIE){
tdn.style.left = dojo._abs(tdn).x;
if(tdn.previousSibling){
this._IEOriginalPos = ['after',tdn.previousSibling];
}else if(tdn.nextSibling){
this._IEOriginalPos = ['before',tdn.nextSibling];
}else{
this._IEOriginalPos = ['last',tdn.parentNode];
}
dojo.body().appendChild(tdn);
dojo.addClass(tdn,'IEFixedToolbar');
}else{
with(tdn.style){
position = "fixed";
top = "0px";
}
}
 
dojo.marginBox(tdn, { w: tdnbox.w });
tdn.style.zIndex = 2000;
this._fixEnabled = true;
}
// if we're showing the floating toolbar, make sure that if
// we've scrolled past the bottom of the editor that we hide
// the toolbar for this instance of the editor.
 
// TODO: when we get multiple editor toolbar support working
// correctly, ensure that we check this against the scroll
// position of the bottom-most editor instance.
var eHeight = (this.height) ? parseInt(this.editor.height) : this.editor._lastHeight;
if(scrollPos > (this._scrollThreshold+eHeight)){
tdn.style.display = "none";
}else{
tdn.style.display = "";
}
}else if(this._fixEnabled){
this.editor.iframe.style.marginTop = '';
with(tdn.style){
position = "";
top = "";
zIndex = "";
display = "";
}
if(isIE){
tdn.style.left = "";
dojo.removeClass(tdn,'IEFixedToolbar');
if(this._IEOriginalPos){
dojo.place(tdn, this._IEOriginalPos[1], this._IEOriginalPos[0]);
this._IEOriginalPos = null;
}else{
dojo.place(tdn, this.editor.iframe,'before');
}
}
tdn.style.width = "";
this._fixEnabled = false;
}
},
destroy: function(){
this._IEOriginalPos = null;
this._handleScroll = false;
dojo.forEach(this._connects,dojo.disconnect);
// clearInterval(this.scrollInterval);
 
if(dojo.isIE && dojo.isIE<7){
dojo.removeClass(this.editor.toolbar.domNode,'IEFixedToolbar');
}
}
});
 
}
/trunk/api/js/dojo1.0/dijit/_editor/RichText.js
New file
0,0 → 1,1446
if(!dojo._hasResource["dijit._editor.RichText"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit._editor.RichText"] = true;
dojo.provide("dijit._editor.RichText");
 
dojo.require("dijit._Widget");
dojo.require("dijit._editor.selection");
dojo.require("dojo.i18n");
dojo.requireLocalization("dijit", "Textarea", null, "ROOT");
 
// used to restore content when user leaves this page then comes back
// but do not try doing document.write if we are using xd loading.
// document.write will only work if RichText.js is included in the dojo.js
// file. If it is included in dojo.js and you want to allow rich text saving
// for back/forward actions, then set djConfig.allowXdRichTextSave = true.
if(!djConfig["useXDomain"] || djConfig["allowXdRichTextSave"]){
if(dojo._postLoad){
(function(){
var savetextarea = dojo.doc.createElement('textarea');
savetextarea.id = "dijit._editor.RichText.savedContent";
var s = savetextarea.style;
s.display='none';
s.position='absolute';
s.top="-100px";
s.left="-100px"
s.height="3px";
s.width="3px";
dojo.body().appendChild(savetextarea);
})();
}else{
//dojo.body() is not available before onLoad is fired
try {
dojo.doc.write('<textarea id="dijit._editor.RichText.savedContent" ' +
'style="display:none;position:absolute;top:-100px;left:-100px;height:3px;width:3px;overflow:hidden;"></textarea>');
}catch(e){ }
}
}
dojo.declare("dijit._editor.RichText", [ dijit._Widget ], {
constructor: function(){
// summary:
// dijit._editor.RichText is the core of the WYSIWYG editor in dojo, which
// provides the basic editing features. It also encapsulates the differences
// of different js engines for various browsers
//
// contentPreFilters: Array
// pre content filter function register array.
// these filters will be executed before the actual
// editing area get the html content
this.contentPreFilters = [];
 
// contentPostFilters: Array
// post content filter function register array.
// these will be used on the resulting html
// from contentDomPostFilters. The resuling
// content is the final html (returned by getValue())
this.contentPostFilters = [];
 
// contentDomPreFilters: Array
// pre content dom filter function register array.
// these filters are applied after the result from
// contentPreFilters are set to the editing area
this.contentDomPreFilters = [];
 
// contentDomPostFilters: Array
// post content dom filter function register array.
// these filters are executed on the editing area dom
// the result from these will be passed to contentPostFilters
this.contentDomPostFilters = [];
 
// editingAreaStyleSheets: Array
// array to store all the stylesheets applied to the editing area
this.editingAreaStyleSheets=[];
 
this._keyHandlers = {};
this.contentPreFilters.push(dojo.hitch(this, "_preFixUrlAttributes"));
if(dojo.isMoz){
this.contentPreFilters.push(this._fixContentForMoz);
}
//this.contentDomPostFilters.push(this._postDomFixUrlAttributes);
 
this.onLoadDeferred = new dojo.Deferred();
},
 
// inheritWidth: Boolean
// whether to inherit the parent's width or simply use 100%
inheritWidth: false,
 
// focusOnLoad: Boolean
// whether focusing into this instance of richtext when page onload
focusOnLoad: false,
 
// name: String
// If a save name is specified the content is saved and restored when the user
// leave this page can come back, or if the editor is not properly closed after
// editing has started.
name: "",
 
// styleSheets: String
// semicolon (";") separated list of css files for the editing area
styleSheets: "",
 
// _content: String
// temporary content storage
_content: "",
 
// height: String
// set height to fix the editor at a specific height, with scrolling.
// By default, this is 300px. If you want to have the editor always
// resizes to accommodate the content, use AlwaysShowToolbar plugin
// and set height=""
height: "300px",
 
// minHeight: String
// The minimum height that the editor should have
minHeight: "1em",
// isClosed: Boolean
isClosed: true,
 
// isLoaded: Boolean
isLoaded: false,
 
// _SEPARATOR: String
// used to concat contents from multiple textareas into a single string
_SEPARATOR: "@@**%%__RICHTEXTBOUNDRY__%%**@@",
 
// onLoadDeferred: dojo.Deferred
// deferred which is fired when the editor finishes loading
onLoadDeferred: null,
 
postCreate: function(){
// summary: init
dojo.publish("dijit._editor.RichText::init", [this]);
this.open();
this.setupDefaultShortcuts();
},
 
setupDefaultShortcuts: function(){
// summary: add some default key handlers
// description:
// Overwrite this to setup your own handlers. The default
// implementation does not use Editor commands, but directly
// executes the builtin commands within the underlying browser
// support.
var ctrl = this.KEY_CTRL;
var exec = function(cmd, arg){
return arguments.length == 1 ? function(){ this.execCommand(cmd); } :
function(){ this.execCommand(cmd, arg); }
}
this.addKeyHandler("b", ctrl, exec("bold"));
this.addKeyHandler("i", ctrl, exec("italic"));
this.addKeyHandler("u", ctrl, exec("underline"));
this.addKeyHandler("a", ctrl, exec("selectall"));
this.addKeyHandler("s", ctrl, function () { this.save(true); });
 
this.addKeyHandler("1", ctrl, exec("formatblock", "h1"));
this.addKeyHandler("2", ctrl, exec("formatblock", "h2"));
this.addKeyHandler("3", ctrl, exec("formatblock", "h3"));
this.addKeyHandler("4", ctrl, exec("formatblock", "h4"));
 
this.addKeyHandler("\\", ctrl, exec("insertunorderedlist"));
if(!dojo.isIE){
this.addKeyHandler("Z", ctrl, exec("redo"));
}
},
 
// events: Array
// events which should be connected to the underlying editing area
events: ["onKeyPress", "onKeyDown", "onKeyUp", "onClick"],
 
// events: Array
// events which should be connected to the underlying editing
// area, events in this array will be addListener with
// capture=true
captureEvents: [],
 
_editorCommandsLocalized: false,
_localizeEditorCommands: function(){
if(this._editorCommandsLocalized){
return;
}
this._editorCommandsLocalized = true;
 
//in IE, names for blockformat is locale dependent, so we cache the values here
 
//if the normal way fails, we try the hard way to get the list
 
//do not use _cacheLocalBlockFormatNames here, as it will
//trigger security warning in IE7
 
//in the array below, ul can not come directly after ol,
//otherwise the queryCommandValue returns Normal for it
var formats = ['p', 'pre', 'address', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'ol', 'div', 'ul'];
var localhtml = "", format, i=0;
while((format=formats[i++])){
if(format.charAt(1) != 'l'){
localhtml += "<"+format+"><span>content</span></"+format+">";
}else{
localhtml += "<"+format+"><li>content</li></"+format+">";
}
}
//queryCommandValue returns empty if we hide editNode, so move it out of screen temporary
var div=document.createElement('div');
div.style.position = "absolute";
div.style.left = "-2000px";
div.style.top = "-2000px";
document.body.appendChild(div);
div.innerHTML = localhtml;
var node = div.firstChild;
while(node){
dijit._editor.selection.selectElement(node.firstChild);
dojo.withGlobal(this.window, "selectElement", dijit._editor.selection, [node.firstChild]);
var nativename = node.tagName.toLowerCase();
this._local2NativeFormatNames[nativename] = document.queryCommandValue("formatblock");//this.queryCommandValue("formatblock");
this._native2LocalFormatNames[this._local2NativeFormatNames[nativename]] = nativename;
node = node.nextSibling;
}
document.body.removeChild(div);
},
 
open: function(/*DomNode?*/element){
// summary:
// Transforms the node referenced in this.domNode into a rich text editing
// node. This will result in the creation and replacement with an <iframe>
// if designMode(FF)/contentEditable(IE) is used.
 
if((!this.onLoadDeferred)||(this.onLoadDeferred.fired >= 0)){
this.onLoadDeferred = new dojo.Deferred();
}
 
if(!this.isClosed){ this.close(); }
dojo.publish("dijit._editor.RichText::open", [ this ]);
 
this._content = "";
if((arguments.length == 1)&&(element["nodeName"])){ this.domNode = element; } // else unchanged
 
if( (this.domNode["nodeName"])&&
(this.domNode.nodeName.toLowerCase() == "textarea")){
// if we were created from a textarea, then we need to create a
// new editing harness node.
this.textarea = this.domNode;
this.name=this.textarea.name;
var html = this._preFilterContent(this.textarea.value);
this.domNode = dojo.doc.createElement("div");
this.domNode.setAttribute('widgetId',this.id);
this.textarea.removeAttribute('widgetId');
this.domNode.cssText = this.textarea.cssText;
this.domNode.className += " "+this.textarea.className;
dojo.place(this.domNode, this.textarea, "before");
var tmpFunc = dojo.hitch(this, function(){
//some browsers refuse to submit display=none textarea, so
//move the textarea out of screen instead
with(this.textarea.style){
display = "block";
position = "absolute";
left = top = "-1000px";
 
if(dojo.isIE){ //nasty IE bug: abnormal formatting if overflow is not hidden
this.__overflow = overflow;
overflow = "hidden";
}
}
});
if(dojo.isIE){
setTimeout(tmpFunc, 10);
}else{
tmpFunc();
}
 
// this.domNode.innerHTML = html;
 
// if(this.textarea.form){
// // FIXME: port: this used to be before advice!!!
// dojo.connect(this.textarea.form, "onsubmit", this, function(){
// // FIXME: should we be calling close() here instead?
// this.textarea.value = this.getValue();
// });
// }
}else{
var html = this._preFilterContent(this.getNodeChildrenHtml(this.domNode));
this.domNode.innerHTML = '';
}
if(html == ""){ html = "&nbsp;"; }
 
var content = dojo.contentBox(this.domNode);
// var content = dojo.contentBox(this.srcNodeRef);
this._oldHeight = content.h;
this._oldWidth = content.w;
 
this.savedContent = html;
 
// If we're a list item we have to put in a blank line to force the
// bullet to nicely align at the top of text
if( (this.domNode["nodeName"]) &&
(this.domNode.nodeName == "LI") ){
this.domNode.innerHTML = " <br>";
}
 
this.editingArea = dojo.doc.createElement("div");
this.domNode.appendChild(this.editingArea);
 
if(this.name != "" && (!djConfig["useXDomain"] || djConfig["allowXdRichTextSave"])){
var saveTextarea = dojo.byId("dijit._editor.RichText.savedContent");
if(saveTextarea.value != ""){
var datas = saveTextarea.value.split(this._SEPARATOR), i=0, dat;
while((dat=datas[i++])){
var data = dat.split(":");
if(data[0] == this.name){
html = data[1];
datas.splice(i, 1);
break;
}
}
}
 
// FIXME: need to do something different for Opera/Safari
dojo.connect(window, "onbeforeunload", this, "_saveContent");
// dojo.connect(window, "onunload", this, "_saveContent");
}
 
this.isClosed = false;
// Safari's selections go all out of whack if we do it inline,
// so for now IE is our only hero
//if (typeof document.body.contentEditable != "undefined") {
if(dojo.isIE || dojo.isSafari || dojo.isOpera){ // contentEditable, easy
var ifr = this.iframe = dojo.doc.createElement('iframe');
ifr.src = 'javascript:void(0)';
this.editorObject = ifr;
ifr.style.border = "none";
ifr.style.width = "100%";
ifr.frameBorder = 0;
// ifr.style.scrolling = this.height ? "auto" : "vertical";
this.editingArea.appendChild(ifr);
this.window = ifr.contentWindow;
this.document = this.window.document;
this.document.open();
this.document.write(this._getIframeDocTxt(html));
this.document.close();
 
if(dojo.isIE >= 7){
if(this.height){
ifr.style.height = this.height;
}
if(this.minHeight){
ifr.style.minHeight = this.minHeight;
}
}else{
ifr.style.height = this.height ? this.height : this.minHeight;
}
 
if(dojo.isIE){
this._localizeEditorCommands();
}
 
this.onLoad();
}else{ // designMode in iframe
this._drawIframe(html);
}
 
// TODO: this is a guess at the default line-height, kinda works
if(this.domNode.nodeName == "LI"){ this.domNode.lastChild.style.marginTop = "-1.2em"; }
this.domNode.className += " RichTextEditable";
},
 
//static cache variables shared among all instance of this class
_local2NativeFormatNames: {},
_native2LocalFormatNames: {},
_localizedIframeTitles: null,
 
_getIframeDocTxt: function(/* String */ html){
var _cs = dojo.getComputedStyle(this.domNode);
if(!this.height && !dojo.isMoz){
html="<div>"+html+"</div>";
}
var font = [ _cs.fontWeight, _cs.fontSize, _cs.fontFamily ].join(" ");
 
// line height is tricky - applying a units value will mess things up.
// if we can't get a non-units value, bail out.
var lineHeight = _cs.lineHeight;
if(lineHeight.indexOf("px") >= 0){
lineHeight = parseFloat(lineHeight)/parseFloat(_cs.fontSize);
// console.debug(lineHeight);
}else if(lineHeight.indexOf("em")>=0){
lineHeight = parseFloat(lineHeight);
}else{
lineHeight = "1.0";
}
return [
this.isLeftToRight() ? "<html><head>" : "<html dir='rtl'><head>",
(dojo.isMoz ? "<title>" + this._localizedIframeTitles.iframeEditTitle + "</title>" : ""),
"<style>",
"body,html {",
" background:transparent;",
" padding: 0;",
" margin: 0;",
"}",
// TODO: left positioning will cause contents to disappear out of view
// if it gets too wide for the visible area
"body{",
" top:0px; left:0px; right:0px;",
((this.height||dojo.isOpera) ? "" : "position: fixed;"),
" font:", font, ";",
// FIXME: IE 6 won't understand min-height?
" min-height:", this.minHeight, ";",
" line-height:", lineHeight,
"}",
"p{ margin: 1em 0 !important; }",
(this.height ?
"" : "body,html{overflow-y:hidden;/*for IE*/} body > div {overflow-x:auto;/*for FF to show vertical scrollbar*/}"
),
"li > ul:-moz-first-node, li > ol:-moz-first-node{ padding-top: 1.2em; } ",
"li{ min-height:1.2em; }",
"</style>",
this._applyEditingAreaStyleSheets(),
"</head><body>"+html+"</body></html>"
].join(""); // String
},
 
_drawIframe: function(/*String*/html){
// summary:
// Draws an iFrame using the existing one if one exists.
// Used by Mozilla, Safari, and Opera
 
if(!this.iframe){
var ifr = this.iframe = dojo.doc.createElement("iframe");
// this.iframe.src = "about:blank";
// document.body.appendChild(this.iframe);
// console.debug(this.iframe.contentDocument.open());
// dojo.body().appendChild(this.iframe);
var ifrs = ifr.style;
// ifrs.border = "1px solid black";
ifrs.border = "none";
ifrs.lineHeight = "0"; // squash line height
ifrs.verticalAlign = "bottom";
// ifrs.scrolling = this.height ? "auto" : "vertical";
this.editorObject = this.iframe;
// get screen reader text for mozilla here, too
this._localizedIframeTitles = dojo.i18n.getLocalization("dijit", "Textarea");
// need to find any associated label element and update iframe document title
var label=dojo.query('label[for="'+this.id+'"]');
if(label.length){
this._localizedIframeTitles.iframeEditTitle = label[0].innerHTML + " " + this._localizedIframeTitles.iframeEditTitle;
}
}
// opera likes this to be outside the with block
// this.iframe.src = "javascript:void(0)";//dojo.uri.dojoUri("src/widget/templates/richtextframe.html") + ((dojo.doc.domain != currentDomain) ? ("#"+dojo.doc.domain) : "");
this.iframe.style.width = this.inheritWidth ? this._oldWidth : "100%";
 
if(this.height){
this.iframe.style.height = this.height;
}else{
this.iframe.height = this._oldHeight;
}
 
if(this.textarea){
var tmpContent = this.srcNodeRef;
}else{
var tmpContent = dojo.doc.createElement('div');
tmpContent.style.display="none";
tmpContent.innerHTML = html;
//append tmpContent to under the current domNode so that the margin
//calculation below is correct
this.editingArea.appendChild(tmpContent);
}
 
this.editingArea.appendChild(this.iframe);
 
//do we want to show the content before the editing area finish loading here?
//if external style sheets are used for the editing area, the appearance now
//and after loading of the editing area won't be the same (and padding/margin
//calculation above may not be accurate)
// tmpContent.style.display = "none";
// this.editingArea.appendChild(this.iframe);
 
var _iframeInitialized = false;
// console.debug(this.iframe);
// var contentDoc = this.iframe.contentWindow.document;
 
 
// note that on Safari lower than 420+, we have to get the iframe
// by ID in order to get something w/ a contentDocument property
 
var contentDoc = this.iframe.contentDocument;
contentDoc.open();
contentDoc.write(this._getIframeDocTxt(html));
contentDoc.close();
 
// now we wait for onload. Janky hack!
var ifrFunc = dojo.hitch(this, function(){
if(!_iframeInitialized){
_iframeInitialized = true;
}else{ return; }
if(!this.editNode){
try{
if(this.iframe.contentWindow){
this.window = this.iframe.contentWindow;
this.document = this.iframe.contentWindow.document
}else if(this.iframe.contentDocument){
// for opera
this.window = this.iframe.contentDocument.window;
this.document = this.iframe.contentDocument;
}
if(!this.document.body){
throw 'Error';
}
}catch(e){
setTimeout(ifrFunc,500);
_iframeInitialized = false;
return;
}
 
dojo._destroyElement(tmpContent);
this.document.designMode = "on";
// try{
// this.document.designMode = "on";
// }catch(e){
// this._tryDesignModeOnClick=true;
// }
 
this.onLoad();
}else{
dojo._destroyElement(tmpContent);
this.editNode.innerHTML = html;
this.onDisplayChanged();
}
this._preDomFilterContent(this.editNode);
});
 
ifrFunc();
},
 
_applyEditingAreaStyleSheets: function(){
// summary:
// apply the specified css files in styleSheets
var files = [];
if(this.styleSheets){
files = this.styleSheets.split(';');
this.styleSheets = '';
}
 
//empty this.editingAreaStyleSheets here, as it will be filled in addStyleSheet
files = files.concat(this.editingAreaStyleSheets);
this.editingAreaStyleSheets = [];
 
var text='', i=0, url;
while((url=files[i++])){
var abstring = (new dojo._Url(dojo.global.location, url)).toString();
this.editingAreaStyleSheets.push(abstring);
text += '<link rel="stylesheet" type="text/css" href="'+abstring+'"/>'
}
return text;
},
 
addStyleSheet: function(/*dojo._Url*/uri){
// summary:
// add an external stylesheet for the editing area
// uri: a dojo.uri.Uri pointing to the url of the external css file
var url=uri.toString();
 
//if uri is relative, then convert it to absolute so that it can be resolved correctly in iframe
if(url.charAt(0) == '.' || (url.charAt(0) != '/' && !uri.host)){
url = (new dojo._Url(dojo.global.location, url)).toString();
}
 
if(dojo.indexOf(this.editingAreaStyleSheets, url) > -1){
console.debug("dijit._editor.RichText.addStyleSheet: Style sheet "+url+" is already applied to the editing area!");
return;
}
 
this.editingAreaStyleSheets.push(url);
if(this.document.createStyleSheet){ //IE
this.document.createStyleSheet(url);
}else{ //other browser
var head = this.document.getElementsByTagName("head")[0];
var stylesheet = this.document.createElement("link");
with(stylesheet){
rel="stylesheet";
type="text/css";
href=url;
}
head.appendChild(stylesheet);
}
},
 
removeStyleSheet: function(/*dojo._Url*/uri){
// summary:
// remove an external stylesheet for the editing area
var url=uri.toString();
//if uri is relative, then convert it to absolute so that it can be resolved correctly in iframe
if(url.charAt(0) == '.' || (url.charAt(0) != '/' && !uri.host)){
url = (new dojo._Url(dojo.global.location, url)).toString();
}
var index = dojo.indexOf(this.editingAreaStyleSheets, url);
if(index == -1){
console.debug("dijit._editor.RichText.removeStyleSheet: Style sheet "+url+" is not applied to the editing area so it can not be removed!");
return;
}
delete this.editingAreaStyleSheets[index];
dojo.withGlobal(this.window,'query', dojo, ['link:[href="'+url+'"]']).orphan()
},
 
disabled: false,
_mozSettingProps: ['styleWithCSS','insertBrOnReturn'],
setDisabled: function(/*Boolean*/ disabled){
if(dojo.isIE || dojo.isSafari || dojo.isOpera){
this.editNode.contentEditable=!disabled;
}else{ //moz
if(disabled){
this._mozSettings=[false,this.blockNodeForEnter==='BR'];
}
this.document.designMode=(disabled?'off':'on');
if(!disabled){
dojo.forEach(this._mozSettingProps, function(s,i){
this.document.execCommand(s,false,this._mozSettings[i]);
},this);
}
// this.document.execCommand('contentReadOnly', false, disabled);
// if(disabled){
// this.blur(); //to remove the blinking caret
// }
//
}
this.disabled=disabled;
},
 
/* Event handlers
*****************/
 
_isResized: function(){ return false; },
 
onLoad: function(/* Event */ e){
// summary: handler after the content of the document finishes loading
this.isLoaded = true;
if(this.height || dojo.isMoz){
this.editNode=this.document.body;
}else{
this.editNode=this.document.body.firstChild;
}
this.editNode.contentEditable = true; //should do no harm in FF
this._preDomFilterContent(this.editNode);
 
var events=this.events.concat(this.captureEvents),i=0,et;
while((et=events[i++])){
this.connect(this.document, et.toLowerCase(), et);
}
if(!dojo.isIE){
try{ // sanity check for Mozilla
// this.document.execCommand("useCSS", false, true); // old moz call
this.document.execCommand("styleWithCSS", false, false); // new moz call
//this.document.execCommand("insertBrOnReturn", false, false); // new moz call
}catch(e2){ }
// FIXME: when scrollbars appear/disappear this needs to be fired
}else{ // IE contentEditable
// give the node Layout on IE
this.editNode.style.zoom = 1.0;
}
 
if(this.focusOnLoad){
this.focus();
}
 
this.onDisplayChanged(e);
if(this.onLoadDeferred){
this.onLoadDeferred.callback(true);
}
},
 
onKeyDown: function(/* Event */ e){
// summary: Fired on keydown
 
// console.info("onkeydown:", e.keyCode);
 
// we need this event at the moment to get the events from control keys
// such as the backspace. It might be possible to add this to Dojo, so that
// keyPress events can be emulated by the keyDown and keyUp detection.
if(dojo.isIE){
if(e.keyCode === dojo.keys.BACKSPACE && this.document.selection.type === "Control"){
// IE has a bug where if a non-text object is selected in the editor,
// hitting backspace would act as if the browser's back button was
// clicked instead of deleting the object. see #1069
dojo.stopEvent(e);
this.execCommand("delete");
}else if( (65 <= e.keyCode&&e.keyCode <= 90) ||
(e.keyCode>=37&&e.keyCode<=40) // FIXME: get this from connect() instead!
){ //arrow keys
e.charCode = e.keyCode;
this.onKeyPress(e);
}
}
else if (dojo.isMoz){
if(e.keyCode == dojo.keys.TAB && !e.shiftKey && !e.ctrlKey && !e.altKey && this.iframe){
// update iframe document title for screen reader
this.iframe.contentDocument.title = this._localizedIframeTitles.iframeFocusTitle;
// Place focus on the iframe. A subsequent tab or shift tab will put focus
// on the correct control.
this.iframe.focus(); // this.focus(); won't work
dojo.stopEvent(e);
}else if (e.keyCode == dojo.keys.TAB && e.shiftKey){
// if there is a toolbar, set focus to it, otherwise ignore
if (this.toolbar){
this.toolbar.focus();
}
dojo.stopEvent(e);
}
}
},
 
onKeyUp: function(e){
// summary: Fired on keyup
return;
},
 
KEY_CTRL: 1,
KEY_SHIFT: 2,
 
onKeyPress: function(e){
// summary: Fired on keypress
 
// console.info("onkeypress:", e.keyCode);
 
// handle the various key events
var modifiers = e.ctrlKey ? this.KEY_CTRL : 0 | e.shiftKey?this.KEY_SHIFT : 0;
 
var key = e.keyChar||e.keyCode;
if(this._keyHandlers[key]){
// console.debug("char:", e.key);
var handlers = this._keyHandlers[key], i = 0, h;
while((h = handlers[i++])){
if(modifiers == h.modifiers){
if(!h.handler.apply(this,arguments)){
e.preventDefault();
}
break;
}
}
}
 
// function call after the character has been inserted
setTimeout(dojo.hitch(this, function(){
this.onKeyPressed(e);
}), 1);
},
 
addKeyHandler: function(/*String*/key, /*Int*/modifiers, /*Function*/handler){
// summary: add a handler for a keyboard shortcut
if(!dojo.isArray(this._keyHandlers[key])){ this._keyHandlers[key] = []; }
this._keyHandlers[key].push({
modifiers: modifiers || 0,
handler: handler
});
},
 
onKeyPressed: function(/*Event*/e){
this.onDisplayChanged(/*e*/); // can't pass in e
},
 
onClick: function(/*Event*/e){
// console.debug('onClick',this._tryDesignModeOnClick);
// if(this._tryDesignModeOnClick){
// try{
// this.document.designMode='on';
// this._tryDesignModeOnClick=false;
// }catch(e){}
// }
this.onDisplayChanged(e); },
_onBlur: function(e){
var _c=this.getValue(true);
if(_c!=this.savedContent){
this.onChange(_c);
this.savedContent=_c;
}
if (dojo.isMoz && this.iframe){
this.iframe.contentDocument.title = this._localizedIframeTitles.iframeEditTitle;
}
// console.info('_onBlur')
},
_initialFocus: true,
_onFocus: function(/*Event*/e){
// console.info('_onFocus')
// summary: Fired on focus
if( (dojo.isMoz)&&(this._initialFocus) ){
this._initialFocus = false;
if(this.editNode.innerHTML.replace(/^\s+|\s+$/g, "") == "&nbsp;"){
this.placeCursorAtStart();
// this.execCommand("selectall");
// this.window.getSelection().collapseToStart();
}
}
},
 
blur: function(){
// summary: remove focus from this instance
if(this.iframe){
this.window.blur();
}else if(this.editNode){
this.editNode.blur();
}
},
 
focus: function(){
// summary: move focus to this instance
if(this.iframe && !dojo.isIE){
dijit.focus(this.iframe);
}else if(this.editNode && this.editNode.focus){
// editNode may be hidden in display:none div, lets just punt in this case
dijit.focus(this.editNode);
}else{
console.debug("Have no idea how to focus into the editor!");
}
},
 
// _lastUpdate: 0,
updateInterval: 200,
_updateTimer: null,
onDisplayChanged: function(/*Event*/e){
// summary:
// This event will be fired everytime the display context
// changes and the result needs to be reflected in the UI.
// description:
// If you don't want to have update too often,
// onNormalizedDisplayChanged should be used instead
 
// var _t=new Date();
if(!this._updateTimer){
// this._lastUpdate=_t;
if(this._updateTimer){
clearTimeout(this._updateTimer);
}
this._updateTimer=setTimeout(dojo.hitch(this,this.onNormalizedDisplayChanged),this.updateInterval);
}
},
onNormalizedDisplayChanged: function(){
// summary:
// This event is fired every updateInterval ms or more
// description:
// If something needs to happen immidiately after a
// user change, please use onDisplayChanged instead
this._updateTimer=null;
},
onChange: function(newContent){
// summary:
// this is fired if and only if the editor loses focus and
// the content is changed
 
// console.log('onChange',newContent);
},
_normalizeCommand: function(/*String*/cmd){
// summary:
// Used as the advice function by dojo.connect to map our
// normalized set of commands to those supported by the target
// browser
 
var command = cmd.toLowerCase();
if(command == "formatblock"){
if(dojo.isSafari){ command = "heading"; }
}else if(command == "hilitecolor" && !dojo.isMoz){
command = "backcolor";
}
 
return command;
},
 
queryCommandAvailable: function(/*String*/command){
// summary:
// Tests whether a command is supported by the host. Clients SHOULD check
// whether a command is supported before attempting to use it, behaviour
// for unsupported commands is undefined.
// command: The command to test for
var ie = 1;
var mozilla = 1 << 1;
var safari = 1 << 2;
var opera = 1 << 3;
var safari420 = 1 << 4;
 
var gt420 = dojo.isSafari;
 
function isSupportedBy(browsers){
return {
ie: Boolean(browsers & ie),
mozilla: Boolean(browsers & mozilla),
safari: Boolean(browsers & safari),
safari420: Boolean(browsers & safari420),
opera: Boolean(browsers & opera)
}
}
 
var supportedBy = null;
 
switch(command.toLowerCase()){
case "bold": case "italic": case "underline":
case "subscript": case "superscript":
case "fontname": case "fontsize":
case "forecolor": case "hilitecolor":
case "justifycenter": case "justifyfull": case "justifyleft":
case "justifyright": case "delete": case "selectall":
supportedBy = isSupportedBy(mozilla | ie | safari | opera);
break;
 
case "createlink": case "unlink": case "removeformat":
case "inserthorizontalrule": case "insertimage":
case "insertorderedlist": case "insertunorderedlist":
case "indent": case "outdent": case "formatblock":
case "inserthtml": case "undo": case "redo": case "strikethrough":
supportedBy = isSupportedBy(mozilla | ie | opera | safari420);
break;
 
case "blockdirltr": case "blockdirrtl":
case "dirltr": case "dirrtl":
case "inlinedirltr": case "inlinedirrtl":
supportedBy = isSupportedBy(ie);
break;
case "cut": case "copy": case "paste":
supportedBy = isSupportedBy( ie | mozilla | safari420);
break;
 
case "inserttable":
supportedBy = isSupportedBy(mozilla | ie);
break;
 
case "insertcell": case "insertcol": case "insertrow":
case "deletecells": case "deletecols": case "deleterows":
case "mergecells": case "splitcell":
supportedBy = isSupportedBy(ie | mozilla);
break;
 
default: return false;
}
 
return (dojo.isIE && supportedBy.ie) ||
(dojo.isMoz && supportedBy.mozilla) ||
(dojo.isSafari && supportedBy.safari) ||
(gt420 && supportedBy.safari420) ||
(dojo.isOpera && supportedBy.opera); // Boolean return true if the command is supported, false otherwise
},
 
execCommand: function(/*String*/command, argument){
// summary: Executes a command in the Rich Text area
// command: The command to execute
// argument: An optional argument to the command
var returnValue;
 
//focus() is required for IE to work
//In addition, focus() makes sure after the execution of
//the command, the editor receives the focus as expected
this.focus();
 
command = this._normalizeCommand(command);
if(argument != undefined){
if(command == "heading"){
throw new Error("unimplemented");
}else if((command == "formatblock") && dojo.isIE){
argument = '<'+argument+'>';
}
}
if(command == "inserthtml"){
//TODO: we shall probably call _preDomFilterContent here as well
argument=this._preFilterContent(argument);
if(dojo.isIE){
var insertRange = this.document.selection.createRange();
insertRange.pasteHTML(argument);
insertRange.select();
//insertRange.collapse(true);
returnValue=true;
}else if(dojo.isMoz && !argument.length){
//mozilla can not inserthtml an empty html to delete current selection
//so we delete the selection instead in this case
dojo.withGlobal(this.window,'remove',dijit._editor.selection); // FIXME
returnValue=true;
}else{
returnValue=this.document.execCommand(command, false, argument);
}
}else if(
(command == "unlink")&&
(this.queryCommandEnabled("unlink"))&&
(dojo.isMoz || dojo.isSafari)
){
// fix up unlink in Mozilla to unlink the link and not just the selection
 
// grab selection
// Mozilla gets upset if we just store the range so we have to
// get the basic properties and recreate to save the selection
var selection = this.window.getSelection();
// var selectionRange = selection.getRangeAt(0);
// var selectionStartContainer = selectionRange.startContainer;
// var selectionStartOffset = selectionRange.startOffset;
// var selectionEndContainer = selectionRange.endContainer;
// var selectionEndOffset = selectionRange.endOffset;
 
// select our link and unlink
var a = dojo.withGlobal(this.window, "getAncestorElement",dijit._editor.selection, ['a']);
dojo.withGlobal(this.window, "selectElement", dijit._editor.selection, [a]);
 
returnValue=this.document.execCommand("unlink", false, null);
}else if((command == "hilitecolor")&&(dojo.isMoz)){
// // mozilla doesn't support hilitecolor properly when useCSS is
// // set to false (bugzilla #279330)
 
this.document.execCommand("styleWithCSS", false, true);
returnValue = this.document.execCommand(command, false, argument);
this.document.execCommand("styleWithCSS", false, false);
 
}else if((dojo.isIE)&&( (command == "backcolor")||(command == "forecolor") )){
// Tested under IE 6 XP2, no problem here, comment out
// IE weirdly collapses ranges when we exec these commands, so prevent it
// var tr = this.document.selection.createRange();
argument = arguments.length > 1 ? argument : null;
returnValue = this.document.execCommand(command, false, argument);
 
// timeout is workaround for weird IE behavior were the text
// selection gets correctly re-created, but subsequent input
// apparently isn't bound to it
// setTimeout(function(){tr.select();}, 1);
}else{
argument = arguments.length > 1 ? argument : null;
// if(dojo.isMoz){
// this.document = this.iframe.contentWindow.document
// }
 
if(argument || command!="createlink"){
returnValue = this.document.execCommand(command, false, argument);
}
}
 
this.onDisplayChanged();
return returnValue;
},
 
queryCommandEnabled: function(/*String*/command){
// summary: check whether a command is enabled or not
command = this._normalizeCommand(command);
if(dojo.isMoz || dojo.isSafari){
if(command == "unlink"){ // mozilla returns true always
// console.debug(dojo.withGlobal(this.window, "hasAncestorElement",dijit._editor.selection, ['a']));
return dojo.withGlobal(this.window, "hasAncestorElement",dijit._editor.selection, ['a']);
}else if (command == "inserttable"){
return true;
}
}
//see #4109
if(dojo.isSafari)
if(command == "copy"){
command="cut";
}else if(command == "paste"){
return true;
}
 
// return this.document.queryCommandEnabled(command);
var elem = (dojo.isIE) ? this.document.selection.createRange() : this.document;
return elem.queryCommandEnabled(command);
},
 
queryCommandState: function(command){
// summary: check the state of a given command
command = this._normalizeCommand(command);
return this.document.queryCommandState(command);
},
 
queryCommandValue: function(command){
// summary: check the value of a given command
command = this._normalizeCommand(command);
if(dojo.isIE && command == "formatblock"){
return this._local2NativeFormatNames[this.document.queryCommandValue(command)];
}
return this.document.queryCommandValue(command);
},
 
// Misc.
 
placeCursorAtStart: function(){
// summary:
// place the cursor at the start of the editing area
this.focus();
 
//see comments in placeCursorAtEnd
var isvalid=false;
if(dojo.isMoz){
var first=this.editNode.firstChild;
while(first){
if(first.nodeType == 3){
if(first.nodeValue.replace(/^\s+|\s+$/g, "").length>0){
isvalid=true;
dojo.withGlobal(this.window, "selectElement", dijit._editor.selection, [first]);
break;
}
}else if(first.nodeType == 1){
isvalid=true;
dojo.withGlobal(this.window, "selectElementChildren",dijit._editor.selection, [first]);
break;
}
first = first.nextSibling;
}
}else{
isvalid=true;
dojo.withGlobal(this.window, "selectElementChildren",dijit._editor.selection, [this.editNode]);
}
if(isvalid){
dojo.withGlobal(this.window, "collapse", dijit._editor.selection, [true]);
}
},
 
placeCursorAtEnd: function(){
// summary:
// place the cursor at the end of the editing area
this.focus();
 
//In mozilla, if last child is not a text node, we have to use selectElementChildren on this.editNode.lastChild
//otherwise the cursor would be placed at the end of the closing tag of this.editNode.lastChild
var isvalid=false;
if(dojo.isMoz){
var last=this.editNode.lastChild;
while(last){
if(last.nodeType == 3){
if(last.nodeValue.replace(/^\s+|\s+$/g, "").length>0){
isvalid=true;
dojo.withGlobal(this.window, "selectElement",dijit._editor.selection, [last]);
break;
}
}else if(last.nodeType == 1){
isvalid=true;
if(last.lastChild){
dojo.withGlobal(this.window, "selectElement",dijit._editor.selection, [last.lastChild]);
}else{
dojo.withGlobal(this.window, "selectElement",dijit._editor.selection, [last]);
}
break;
}
last = last.previousSibling;
}
}else{
isvalid=true;
dojo.withGlobal(this.window, "selectElementChildren",dijit._editor.selection, [this.editNode]);
}
if(isvalid){
dojo.withGlobal(this.window, "collapse", dijit._editor.selection, [false]);
}
},
 
getValue: function(/*Boolean?*/nonDestructive){
// summary:
// return the current content of the editing area (post filters are applied)
if(this.textarea){
if(this.isClosed || !this.isLoaded){
return this.textarea.value;
}
}
 
return this._postFilterContent(null, nonDestructive);
},
 
setValue: function(/*String*/html){
// summary:
// this function set the content. No undo history is preserved
if(this.textarea && (this.isClosed || !this.isLoaded)){
this.textarea.value=html;
}else{
html = this._preFilterContent(html);
if(this.isClosed){
this.domNode.innerHTML = html;
this._preDomFilterContent(this.domNode);
}else{
this.editNode.innerHTML = html;
this._preDomFilterContent(this.editNode);
}
}
},
 
replaceValue: function(/*String*/html){
// summary:
// this function set the content while trying to maintain the undo stack
// (now only works fine with Moz, this is identical to setValue in all
// other browsers)
if(this.isClosed){
this.setValue(html);
}else if(this.window && this.window.getSelection && !dojo.isMoz){ // Safari
// look ma! it's a totally f'd browser!
this.setValue(html);
}else if(this.window && this.window.getSelection){ // Moz
html = this._preFilterContent(html);
this.execCommand("selectall");
if(dojo.isMoz && !html){ html = "&nbsp;" }
this.execCommand("inserthtml", html);
this._preDomFilterContent(this.editNode);
}else if(this.document && this.document.selection){//IE
//In IE, when the first element is not a text node, say
//an <a> tag, when replacing the content of the editing
//area, the <a> tag will be around all the content
//so for now, use setValue for IE too
this.setValue(html);
}
},
 
_preFilterContent: function(/*String*/html){
// summary:
// filter the input before setting the content of the editing area
var ec = html;
dojo.forEach(this.contentPreFilters, function(ef){ if(ef){ ec = ef(ec); } });
return ec;
},
_preDomFilterContent: function(/*DomNode*/dom){
// summary:
// filter the input
dom = dom || this.editNode;
dojo.forEach(this.contentDomPreFilters, function(ef){
if(ef && dojo.isFunction(ef)){
ef(dom);
}
}, this);
},
 
_postFilterContent: function(/*DomNode|DomNode[]?*/dom,/*Boolean?*/nonDestructive){
// summary:
// filter the output after getting the content of the editing area
dom = dom || this.editNode;
if(this.contentDomPostFilters.length){
if(nonDestructive && dom['cloneNode']){
dom = dom.cloneNode(true);
}
dojo.forEach(this.contentDomPostFilters, function(ef){
dom = ef(dom);
});
}
var ec = this.getNodeChildrenHtml(dom);
if(!ec.replace(/^(?:\s|\xA0)+/g, "").replace(/(?:\s|\xA0)+$/g,"").length){ ec = ""; }
 
// if(dojo.isIE){
// //removing appended <P>&nbsp;</P> for IE
// ec = ec.replace(/(?:<p>&nbsp;</p>[\n\r]*)+$/i,"");
// }
dojo.forEach(this.contentPostFilters, function(ef){
ec = ef(ec);
});
 
return ec;
},
 
_saveContent: function(/*Event*/e){
// summary:
// Saves the content in an onunload event if the editor has not been closed
var saveTextarea = dojo.byId("dijit._editor.RichText.savedContent");
saveTextarea.value += this._SEPARATOR + this.name + ":" + this.getValue();
},
 
 
escapeXml: function(/*String*/str, /*Boolean*/noSingleQuotes){
//summary:
// Adds escape sequences for special characters in XML: &<>"'
// Optionally skips escapes for single quotes
str = str.replace(/&/gm, "&amp;").replace(/</gm, "&lt;").replace(/>/gm, "&gt;").replace(/"/gm, "&quot;");
if(!noSingleQuotes){
str = str.replace(/'/gm, "&#39;");
}
return str; // string
},
 
getNodeHtml: function(/* DomNode */node){
switch(node.nodeType){
case 1: //element node
var output = '<'+node.tagName.toLowerCase();
if(dojo.isMoz){
if(node.getAttribute('type')=='_moz'){
node.removeAttribute('type');
}
if(node.getAttribute('_moz_dirty') != undefined){
node.removeAttribute('_moz_dirty');
}
}
//store the list of attributes and sort it to have the
//attributes appear in the dictionary order
var attrarray = [];
if(dojo.isIE){
var s = node.outerHTML;
s = s.substr(0,s.indexOf('>'));
s = s.replace(/(?:['"])[^"']*\1/g, '');//to make the following regexp safe
var reg = /([^\s=]+)=/g;
var m, key;
while((m = reg.exec(s)) != undefined){
key=m[1];
if(key.substr(0,3) != '_dj'){
if(key == 'src' || key == 'href'){
if(node.getAttribute('_djrealurl')){
attrarray.push([key,node.getAttribute('_djrealurl')]);
continue;
}
}
if(key == 'class'){
attrarray.push([key,node.className]);
}else{
attrarray.push([key,node.getAttribute(key)]);
}
}
}
}else{
var attr, i=0, attrs = node.attributes;
while((attr=attrs[i++])){
//ignore all attributes starting with _dj which are
//internal temporary attributes used by the editor
if(attr.name.substr(0,3) != '_dj' /*&&
(attr.specified == undefined || attr.specified)*/){
var v = attr.value;
if(attr.name == 'src' || attr.name == 'href'){
if(node.getAttribute('_djrealurl')){
v = node.getAttribute('_djrealurl');
}
}
attrarray.push([attr.name,v]);
}
}
}
attrarray.sort(function(a,b){
return a[0]<b[0]?-1:(a[0]==b[0]?0:1);
});
i=0;
while((attr=attrarray[i++])){
output += ' '+attr[0]+'="'+attr[1]+'"';
}
if(node.childNodes.length){
output += '>' + this.getNodeChildrenHtml(node)+'</'+node.tagName.toLowerCase()+'>';
}else{
output += ' />';
}
break;
case 3: //text
// FIXME:
var output = this.escapeXml(node.nodeValue,true);
break;
case 8: //comment
// FIXME:
var output = '<!--'+this.escapeXml(node.nodeValue,true)+'-->';
break;
default:
var output = "Element not recognized - Type: " + node.nodeType + " Name: " + node.nodeName;
}
return output;
},
 
getNodeChildrenHtml: function(/* DomNode */dom){
// summary: Returns the html content of a DomNode and children
var out = "";
if(!dom){ return out; }
var nodes = dom["childNodes"]||dom;
var i=0;
var node;
while((node=nodes[i++])){
out += this.getNodeHtml(node);
}
return out; // String
},
 
close: function(/*Boolean*/save, /*Boolean*/force){
// summary:
// Kills the editor and optionally writes back the modified contents to the
// element from which it originated.
// save:
// Whether or not to save the changes. If false, the changes are discarded.
// force:
if(this.isClosed){return false; }
 
if(!arguments.length){ save = true; }
this._content = this.getValue();
var changed = (this.savedContent != this._content);
 
// line height is squashed for iframes
// FIXME: why was this here? if (this.iframe){ this.domNode.style.lineHeight = null; }
 
if(this.interval){ clearInterval(this.interval); }
 
if(this.textarea){
with(this.textarea.style){
position = "";
left = top = "";
if(dojo.isIE){
overflow = this.__overflow;
this.__overflow = null;
}
}
if(save){
this.textarea.value = this._content;
}else{
this.textarea.value = this.savedContent;
}
dojo._destroyElement(this.domNode);
this.domNode = this.textarea;
}else{
if(save){
//why we treat moz differently? comment out to fix #1061
// if(dojo.isMoz){
// var nc = dojo.doc.createElement("span");
// this.domNode.appendChild(nc);
// nc.innerHTML = this.editNode.innerHTML;
// }else{
// this.domNode.innerHTML = this._content;
// }
this.domNode.innerHTML = this._content;
}else{
this.domNode.innerHTML = this.savedContent;
}
}
 
dojo.removeClass(this.domNode, "RichTextEditable");
this.isClosed = true;
this.isLoaded = false;
// FIXME: is this always the right thing to do?
delete this.editNode;
 
if(this.window && this.window._frameElement){
this.window._frameElement = null;
}
 
this.window = null;
this.document = null;
this.editingArea = null;
this.editorObject = null;
 
return changed; // Boolean: whether the content has been modified
},
 
destroyRendering: function(){
// summary: stub
},
 
destroy: function(){
this.destroyRendering();
if(!this.isClosed){ this.close(false); }
this.inherited("destroy",arguments);
//dijit._editor.RichText.superclass.destroy.call(this);
},
 
_fixContentForMoz: function(/* String */ html){
// summary:
// Moz can not handle strong/em tags correctly, convert them to b/i
html = html.replace(/<(\/)?strong([ \>])/gi, '<$1b$2' );
html = html.replace(/<(\/)?em([ \>])/gi, '<$1i$2' );
return html; // String
},
 
_srcInImgRegex : /(?:(<img(?=\s).*?\ssrc=)("|')(.*?)\2)|(?:(<img\s.*?src=)([^"'][^ >]+))/gi ,
_hrefInARegex : /(?:(<a(?=\s).*?\shref=)("|')(.*?)\2)|(?:(<a\s.*?href=)([^"'][^ >]+))/gi ,
 
_preFixUrlAttributes: function(/* String */ html){
html = html.replace(this._hrefInARegex, '$1$4$2$3$5$2 _djrealurl=$2$3$5$2') ;
html = html.replace(this._srcInImgRegex, '$1$4$2$3$5$2 _djrealurl=$2$3$5$2') ;
return html; // String
}
});
 
}
/trunk/api/js/dojo1.0/dijit/_editor/range.js
New file
0,0 → 1,566
if(!dojo._hasResource["dijit._editor.range"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit._editor.range"] = true;
dojo.provide("dijit._editor.range");
 
dijit.range={};
 
dijit.range.getIndex=function(/*DomNode*/node, /*DomNode*/parent){
// dojo.profile.start("dijit.range.getIndex");
var ret=[], retR=[];
var stop = parent;
var onode = node;
 
while(node != stop){
var i = 0;
var pnode = node.parentNode, n;
while(n=pnode.childNodes[i++]){
if(n===node){
--i;
break;
}
}
if(i>=pnode.childNodes.length){
dojo.debug("Error finding index of a node in dijit.range.getIndex");
}
ret.unshift(i);
retR.unshift(i-pnode.childNodes.length);
node = pnode;
}
 
//normalized() can not be called so often to prevent
//invalidating selection/range, so we have to detect
//here that any text nodes in a row
if(ret.length>0 && onode.nodeType==3){
var n = onode.previousSibling;
while(n && n.nodeType==3){
ret[ret.length-1]--;
n = n.previousSibling;
}
n = onode.nextSibling;
while(n && n.nodeType==3){
retR[retR.length-1]++;
n = n.nextSibling;
}
}
// dojo.profile.end("dijit.range.getIndex");
return {o: ret, r:retR};
}
 
dijit.range.getNode = function(/*Array*/index, /*DomNode*/parent){
if(!dojo.isArray(index) || index.length==0){
return parent;
}
var node = parent;
// if(!node)debugger
dojo.every(index, function(i){
if(i>=0&&i< node.childNodes.length){
node = node.childNodes[i];
}else{
node = null;
console.debug('Error: can not find node with index',index,'under parent node',parent );
return false; //terminate dojo.every
}
return true; //carry on the every loop
});
 
return node;
}
 
dijit.range.getCommonAncestor = function(n1,n2,root){
var getAncestors = function(n,root){
var as=[];
while(n){
as.unshift(n);
if(n!=root && n.tagName!='BODY'){
n = n.parentNode;
}else{
break;
}
}
return as;
};
var n1as = getAncestors(n1,root);
var n2as = getAncestors(n2,root);
 
var m = Math.min(n1as.length,n2as.length);
var com = n1as[0]; //at least, one element should be in the array: the root (BODY by default)
for(var i=1;i<m;i++){
if(n1as[i]===n2as[i]){
com = n1as[i]
}else{
break;
}
}
return com;
}
 
dijit.range.getAncestor = function(/*DomNode*/node, /*RegEx?*/regex, /*DomNode?*/root){
root = root || node.ownerDocument.body;
while(node && node !== root){
var name = node.nodeName.toUpperCase() ;
if(regex.test(name)){
return node;
}
 
node = node.parentNode;
}
return null;
}
 
dijit.range.BlockTagNames = /^(?:P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|DT|DE)$/;
dijit.range.getBlockAncestor = function(/*DomNode*/node, /*RegEx?*/regex, /*DomNode?*/root){
root = root || node.ownerDocument.body;
regex = regex || dijit.range.BlockTagNames;
var block=null, blockContainer;
while(node && node !== root){
var name = node.nodeName.toUpperCase() ;
if(!block && regex.test(name)){
block = node;
}
if(!blockContainer && (/^(?:BODY|TD|TH|CAPTION)$/).test(name)){
blockContainer = node;
}
 
node = node.parentNode;
}
return {blockNode:block, blockContainer:blockContainer || node.ownerDocument.body};
}
 
dijit.range.atBeginningOfContainer = function(/*DomNode*/container, /*DomNode*/node, /*Int*/offset){
var atBeginning = false;
var offsetAtBeginning = (offset == 0);
if(!offsetAtBeginning && node.nodeType==3){ //if this is a text node, check whether the left part is all space
if(dojo.trim(node.nodeValue.substr(0,offset))==0){
offsetAtBeginning = true;
}
}
if(offsetAtBeginning){
var cnode = node;
atBeginning = true;
while(cnode && cnode !== container){
if(cnode.previousSibling){
atBeginning = false;
break;
}
cnode = cnode.parentNode;
}
}
return atBeginning;
}
 
dijit.range.atEndOfContainer = function(/*DomNode*/container, /*DomNode*/node, /*Int*/offset){
var atEnd = false;
var offsetAtEnd = (offset == (node.length || node.childNodes.length));
if(!offsetAtEnd && node.nodeType==3){ //if this is a text node, check whether the right part is all space
if(dojo.trim(node.nodeValue.substr(offset))==0){
offsetAtEnd = true;
}
}
if(offsetAtEnd){
var cnode = node;
atEnd = true;
while(cnode && cnode !== container){
if(cnode.nextSibling){
atEnd = false;
break;
}
cnode = cnode.parentNode;
}
}
return atEnd;
}
 
dijit.range.adjacentNoneTextNode=function(startnode, next){
var node = startnode;
var len = (0-startnode.length) || 0;
var prop = next?'nextSibling':'previousSibling';
while(node){
if(node.nodeType!=3){
break;
}
len += node.length
node = node[prop];
}
return [node,len];
}
 
dijit.range._w3c = Boolean(window['getSelection']);
dijit.range.create = function(){
if(dijit.range._w3c){
return document.createRange();
}else{//IE
return new dijit.range.W3CRange;
}
}
 
dijit.range.getSelection = function(win, /*Boolean?*/ignoreUpdate){
if(dijit.range._w3c){
return win.getSelection();
}else{//IE
var id=win.__W3CRange;
if(!id || !dijit.range.ie.cachedSelection[id]){
var s = new dijit.range.ie.selection(win);
//use win as the key in an object is not reliable, which
//can leads to quite odd behaviors. thus we generate a
//string and use it as a key in the cache
id=(new Date).getTime();
while(id in dijit.range.ie.cachedSelection){
id=id+1;
}
id=String(id);
dijit.range.ie.cachedSelection[id] = s;
}else{
var s = dijit.range.ie.cachedSelection[id];
}
if(!ignoreUpdate){
s._getCurrentSelection();
}
return s;
}
}
 
if(!dijit.range._w3c){
dijit.range.ie={
cachedSelection: {},
selection: function(win){
this._ranges = [];
this.addRange = function(r, /*boolean*/internal){
this._ranges.push(r);
if(!internal){
r._select();
}
this.rangeCount = this._ranges.length;
};
this.removeAllRanges = function(){
//don't detach, the range may be used later
// for(var i=0;i<this._ranges.length;i++){
// this._ranges[i].detach();
// }
this._ranges = [];
this.rangeCount = 0;
};
var _initCurrentRange = function(){
var r = win.document.selection.createRange();
var type=win.document.selection.type.toUpperCase();
if(type == "CONTROL"){
//TODO: multiple range selection(?)
return new dijit.range.W3CRange(dijit.range.ie.decomposeControlRange(r));
}else{
return new dijit.range.W3CRange(dijit.range.ie.decomposeTextRange(r));
}
};
this.getRangeAt = function(i){
return this._ranges[i];
};
this._getCurrentSelection = function(){
this.removeAllRanges();
var r=_initCurrentRange();
if(r){
this.addRange(r, true);
}
};
},
decomposeControlRange: function(range){
var firstnode = range.item(0), lastnode = range.item(range.length-1)
var startContainer = firstnode.parentNode, endContainer = lastnode.parentNode;
var startOffset = dijit.range.getIndex(firstnode, startContainer).o;
var endOffset = dijit.range.getIndex(lastnode, endContainer).o+1;
return [[startContainer, startOffset],[endContainer, endOffset]];
},
getEndPoint: function(range, end){
var atmrange = range.duplicate();
atmrange.collapse(!end);
var cmpstr = 'EndTo' + (end?'End':'Start');
var parentNode = atmrange.parentElement();
 
var startnode, startOffset, lastNode;
if(parentNode.childNodes.length>0){
dojo.every(parentNode.childNodes, function(node,i){
var calOffset;
if(node.nodeType != 3){
atmrange.moveToElementText(node);
 
if(atmrange.compareEndPoints(cmpstr,range) > 0){
startnode = node.previousSibling;
if(lastNode && lastNode.nodeType == 3){
//where share we put the start? in the text node or after?
startnode = lastNode;
calOffset = true;
}else{
startnode = parentNode;
startOffset = i;
return false;
}
}else{
if(i==parentNode.childNodes.length-1){
startnode = parentNode;
startOffset = parentNode.childNodes.length;
return false;
}
}
}else{
if(i==parentNode.childNodes.length-1){//at the end of this node
startnode = node;
calOffset = true;
}
}
// try{
if(calOffset && startnode){
var prevnode = dijit.range.adjacentNoneTextNode(startnode)[0];
if(prevnode){
startnode = prevnode.nextSibling;
}else{
startnode = parentNode.firstChild; //firstChild must be a text node
}
var prevnodeobj = dijit.range.adjacentNoneTextNode(startnode);
prevnode = prevnodeobj[0];
var lenoffset = prevnodeobj[1];
if(prevnode){
atmrange.moveToElementText(prevnode);
atmrange.collapse(false);
}else{
atmrange.moveToElementText(parentNode);
}
atmrange.setEndPoint(cmpstr, range);
startOffset = atmrange.text.length-lenoffset;
 
return false;
}
// }catch(e){ debugger }
lastNode = node;
return true;
});
}else{
startnode = parentNode;
startOffset = 0;
}
 
//if at the end of startnode and we are dealing with start container, then
//move the startnode to nextSibling if it is a text node
//TODO: do this for end container?
if(!end && startnode.nodeType!=3 && startOffset == startnode.childNodes.length){
if(startnode.nextSibling && startnode.nextSibling.nodeType==3){
startnode = startnode.nextSibling;
startOffset = 0;
}
}
return [startnode, startOffset];
},
setEndPoint: function(range, container, offset){
//text node
var atmrange = range.duplicate();
if(container.nodeType!=3){ //normal node
atmrange.moveToElementText(container);
atmrange.collapse(true);
if(offset == container.childNodes.length){
if(offset > 0){
//a simple atmrange.collapse(false); won't work here:
//although moveToElementText(node) is supposed to encompass the content of the node,
//but when collapse to end, it is in fact after the ending tag of node (collapse to start
//is after the begining tag of node as expected)
var node = container.lastChild;
var len = 0;
while(node && node.nodeType == 3){
len += node.length;
container = node; //pass through
node = node.previousSibling;
}
if(node){
atmrange.moveToElementText(node);
}
atmrange.collapse(false);
offset = len; //pass through
}else{ //no childNodes
atmrange.moveToElementText(container);
atmrange.collapse(true);
}
}else{
if(offset > 0){
var node = container.childNodes[offset-1];
if(node.nodeType==3){
container = node;
offset = node.length;
//pass through
}else{
atmrange.moveToElementText(node);
atmrange.collapse(false);
}
}
}
}
if(container.nodeType==3){
var prevnodeobj = dijit.range.adjacentNoneTextNode(container);
var prevnode = prevnodeobj[0], len = prevnodeobj[1];
if(prevnode){
atmrange.moveToElementText(prevnode);
atmrange.collapse(false);
//if contentEditable is not inherit, the above collapse won't make the end point
//in the correctly position: it always has a -1 offset, so compensate it
if(prevnode.contentEditable!='inherit'){
len++;
}
}else{
atmrange.moveToElementText(container.parentNode);
atmrange.collapse(true);
}
 
offset += len;
if(offset>0){
if(atmrange.moveEnd('character',offset) != offset){
alert('Error when moving!');
}
atmrange.collapse(false);
}
}
 
return atmrange;
},
decomposeTextRange: function(range){
var tmpary = dijit.range.ie.getEndPoint(range);
var startContainter = tmpary[0], startOffset = tmpary[1];
var endContainter = tmpary[0], endOffset = tmpary[1];
 
if(range.htmlText.length){
if(range.htmlText == range.text){ //in the same text node
endOffset = startOffset+range.text.length;
}else{
tmpary = dijit.range.ie.getEndPoint(range,true);
endContainter = tmpary[0], endOffset = tmpary[1];
}
}
return [[startContainter, startOffset],[endContainter, endOffset], range.parentElement()];
},
setRange: function(range, startContainter,
startOffset, endContainter, endOffset, check){
var startrange = dijit.range.ie.setEndPoint(range, startContainter, startOffset);
range.setEndPoint('StartToStart', startrange);
if(!this.collapsed){
var endrange = dijit.range.ie.setEndPoint(range, endContainter, endOffset);
range.setEndPoint('EndToEnd', endrange);
}
 
return range;
}
}
 
dojo.declare("dijit.range.W3CRange",null, {
constructor: function(){
if(arguments.length>0){
this.setStart(arguments[0][0][0],arguments[0][0][1]);
this.setEnd(arguments[0][1][0],arguments[0][1][1],arguments[0][2]);
}else{
this.commonAncestorContainer = null;
this.startContainer = null;
this.startOffset = 0;
this.endContainer = null;
this.endOffset = 0;
this.collapsed = true;
}
},
_simpleSetEndPoint: function(node, range, end){
var r = (this._body||node.ownerDocument.body).createTextRange();
if(node.nodeType!=1){
r.moveToElementText(node.parentNode);
}else{
r.moveToElementText(node);
}
r.collapse(true);
range.setEndPoint(end?'EndToEnd':'StartToStart',r);
},
_updateInternal: function(__internal_common){
if(this.startContainer !== this.endContainer){
if(!__internal_common){
var r = (this._body||this.startContainer.ownerDocument.body).createTextRange();
this._simpleSetEndPoint(this.startContainer,r);
this._simpleSetEndPoint(this.endContainer,r,true);
__internal_common = r.parentElement();
}
this.commonAncestorContainer = dijit.range.getCommonAncestor(this.startContainer, this.endContainer, __internal_common);
}else{
this.commonAncestorContainer = this.startContainer;
}
this.collapsed = (this.startContainer === this.endContainer) && (this.startOffset == this.endOffset);
},
setStart: function(node, offset, __internal_common){
if(this.startContainer === node && this.startOffset == offset){
return;
}
delete this._cachedBookmark;
 
this.startContainer = node;
this.startOffset = offset;
if(!this.endContainer){
this.setEnd(node, offset, __internal_common);
}else{
this._updateInternal(__internal_common);
}
},
setEnd: function(node, offset, __internal_common){
if(this.endContainer === node && this.endOffset == offset){
return;
}
delete this._cachedBookmark;
 
this.endContainer = node;
this.endOffset = offset;
if(!this.startContainer){
this.setStart(node, offset, __internal_common);
}else{
this._updateInternal(__internal_common);
}
},
setStartAfter: function(node, offset){
this._setPoint('setStart', node, offset, 1);
},
setStartBefore: function(node, offset){
this._setPoint('setStart', node, offset, 0);
},
setEndAfter: function(node, offset){
this._setPoint('setEnd', node, offset, 1);
},
setEndBefore: function(node, offset){
this._setPoint('setEnd', node, offset, 0);
},
_setPoint: function(what, node, offset, ext){
var index = dijit.range.getIndex(node, node.parentNode).o;
this[what](node.parentNode, index.pop()+ext);
},
_getIERange: function(){
var r=(this._body||this.endContainer.ownerDocument.body).createTextRange();
dijit.range.ie.setRange(r, this.startContainer, this.startOffset, this.endContainer, this.endOffset);
return r;
},
getBookmark: function(body){
this._getIERange();
return this._cachedBookmark;
},
_select: function(){
var r = this._getIERange();
r.select();
},
deleteContents: function(){
var r = this._getIERange();
r.pasteHTML('');
this.endContainer = this.startContainer;
this.endOffset = this.startOffset;
this.collapsed = true;
},
cloneRange: function(){
var r = new dijit.range.W3CRange([[this.startContainer,this.startOffset],
[this.endContainer,this.endOffset]]);
r._body = this._body;
return r;
},
detach: function(){
this._body = null;
this.commonAncestorContainer = null;
this.startContainer = null;
this.startOffset = 0;
this.endContainer = null;
this.endOffset = 0;
this.collapsed = true;
}
});
} //if(!dijit.range._w3c)
 
}
/trunk/api/js/dojo1.0/dijit/changes.txt
New file
0,0 → 1,93
Changes from Dojo 0.4 dojo.widgets to new dijit project
=======================================================
 
The widgets and widget infrastructure have been separated into separate project,
vastly streamlined and with a new directory structure. There are many other changes.
 
Markup
------
 
dojoType="button" replaced by dojoType="dijit.Button" Must use fully qualified class name,
and it's case-sensitive.
 
Need to manually dojo.require("dojo.parser") to get parsing
 
Widget namespaces and widget auto-loading are desupported.
 
onClick="foo" now overrides (ie, replaces) the default onClick() function rather than attaching to it,
so widget designers should make empty onClick() functions (when appropriate).
 
Programmatic creation
---------------------
Create widgets via
 
new dijit.Button(params, srcNodeRef)
 
createWidget() call removed since multiple renderers are no longer supported (see next section).
 
At least for the dijit widgets, all widgets are guaranteed to work programmatically, which in
effect means that all widgets must have templates, unless the default <div> works.
 
Renderers
---------
Removed support for multiple renderers (svg & vml & a11y) for a single widget.
If a widget wants to render differently on different platforms, there must be
branching code inside the widget, or it needs to call a library that branches
based on the browser type (like dojo.gfx or dojo.charting).
 
 
Templates
---------
"this." is no longer used within ${} substitution notation. See ticket #2905.
dojoRoot,buildScriptBase,dojoModuleUrl are no longer supported, but
any JavaScript properties on the widget's 'this' may be referenced with dotted notation.
The attributes dojoOn* are desupported (including dojoOnBuild);
also can't use id attribute to affect a dojoAttachPoint.
 
dojoAttachEvent is case sensitive, so capitalization matters. You will probably have
to change
 
dojoAttachEvent="onClick"
 
to
 
dojoAttachEvent="onclick: onClick"
 
(given that the event name is lowercase, and assuming that the method name is camel case)
 
lists within dojoAttachPoint, dojoAttachEvent, waiRole, and waiState are now comma-separated
(not separated by semi-colons)
 
Standard HTML attributes like 'id', 'name', 'lang', etc. are carried over programmatically
by the _Widget constructor and do not need to be declared in the template (see _Widget.attributeMap)
 
Parent/Child relationships
--------------------------
By default widgets exist as islands, not knowing about their parent widget or children widgets.
The exception is the destroy() function which will also delete all descendant widgets.
Some widgets like Tree and SplitContainer will know about their children, but those widgets
will use the special mixins in Container.js / Layout.js.
 
Widget.js base class
--------------------
 
- Widget.js, Domwidget.js, HtmlWidget.js combined into dijit.base.Widget, with TemplatedWidget mixin
for widgets with templates
 
- on widget creation, postMixInProperties(), buildRendering() and postCreate() is called.
fillInTemplate() is no longer called. In addition, those functions call signatures have changed.
No arguments are passed. To get the source dom Node, just reference this.srcDomNode.
When postCreate() is called the widget children don't yet exist.
 
- The TemplatedWidget mixin defines buildRendering(). widgetsInTemplate not ported yet.
 
- onResized() removed
 
- the whole parent/child relationship thing is gone
 
- extraArgs[] is gone
 
- postCreate() called but child widgets don't exist yet
 
- templateCssPath ignored. User must manually include tundra.css file
/trunk/api/js/dojo1.0/dijit/_Container.js
New file
0,0 → 1,315
if(!dojo._hasResource["dijit._Container"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit._Container"] = true;
dojo.provide("dijit._Container");
 
dojo.declare("dijit._Contained",
null,
{
// summary
// Mixin for widgets that are children of a container widget
 
getParent: function(){
// summary:
// returns the parent widget of this widget, assuming the parent
// implements dijit._Container
for(var p=this.domNode.parentNode; p; p=p.parentNode){
var id = p.getAttribute && p.getAttribute("widgetId");
if(id){
var parent = dijit.byId(id);
return parent.isContainer ? parent : null;
}
}
return null;
},
 
_getSibling: function(which){
var node = this.domNode;
do{
node = node[which+"Sibling"];
}while(node && node.nodeType != 1);
if(!node){ return null; } // null
var id = node.getAttribute("widgetId");
return dijit.byId(id);
},
 
getPreviousSibling: function(){
// summary:
// returns null if this is the first child of the parent,
// otherwise returns the next element sibling to the "left".
 
return this._getSibling("previous");
},
 
getNextSibling: function(){
// summary:
// returns null if this is the last child of the parent,
// otherwise returns the next element sibling to the "right".
 
return this._getSibling("next");
}
}
);
 
dojo.declare("dijit._Container",
null,
{
// summary
// Mixin for widgets that contain a list of children like SplitContainer
 
isContainer: true,
 
addChild: function(/*Widget*/ widget, /*int?*/ insertIndex){
// summary:
// Process the given child widget, inserting it's dom node as
// a child of our dom node
 
if(insertIndex === undefined){
insertIndex = "last";
}
var refNode = this.containerNode || this.domNode;
if(insertIndex && typeof insertIndex == "number"){
var children = dojo.query("> [widgetid]", refNode);
if(children && children.length >= insertIndex){
refNode = children[insertIndex-1]; insertIndex = "after";
}
}
dojo.place(widget.domNode, refNode, insertIndex);
 
// If I've been started but the child widget hasn't been started,
// start it now. Make sure to do this after widget has been
// inserted into the DOM tree, so it can see that it's being controlled by me,
// so it doesn't try to size itself.
if(this._started && !widget._started){
widget.startup();
}
},
 
removeChild: function(/*Widget*/ widget){
// summary:
// removes the passed widget instance from this widget but does
// not destroy it
var node = widget.domNode;
node.parentNode.removeChild(node); // detach but don't destroy
},
 
_nextElement: function(node){
do{
node = node.nextSibling;
}while(node && node.nodeType != 1);
return node;
},
 
_firstElement: function(node){
node = node.firstChild;
if(node && node.nodeType != 1){
node = this._nextElement(node);
}
return node;
},
 
getChildren: function(){
// summary:
// Returns array of children widgets
return dojo.query("> [widgetId]", this.containerNode || this.domNode).map(dijit.byNode); // Array
},
 
hasChildren: function(){
// summary:
// Returns true if widget has children
var cn = this.containerNode || this.domNode;
return !!this._firstElement(cn); // Boolean
},
 
_getSiblingOfChild: function(/*Widget*/ child, /*int*/ dir){
// summary:
// get the next or previous widget sibling of child
// dir:
// if 1, get the next sibling
// if -1, get the previous sibling
var node = child.domNode;
var which = (dir>0 ? "nextSibling" : "previousSibling");
do{
node = node[which];
}while(node && (node.nodeType != 1 || !dijit.byNode(node)));
return node ? dijit.byNode(node) : null;
}
}
);
 
dojo.declare("dijit._KeyNavContainer",
[dijit._Container],
{
 
// summary:
// A _Container with keyboard navigation of its children.
// To use this mixin, call connectKeyNavHandlers() in
// postCreate() and call startupKeyNavChildren() in startup().
 
/*=====
// focusedChild: Widget
// The currently focused child widget, or null if there isn't one
focusedChild: null,
=====*/
 
_keyNavCodes: {},
 
connectKeyNavHandlers: function(/*Array*/ prevKeyCodes, /*Array*/ nextKeyCodes){
// summary:
// Call in postCreate() to attach the keyboard handlers
// to the container.
// preKeyCodes: Array
// Key codes for navigating to the previous child.
// nextKeyCodes: Array
// Key codes for navigating to the next child.
 
var keyCodes = this._keyNavCodes = {};
var prev = dojo.hitch(this, this.focusPrev);
var next = dojo.hitch(this, this.focusNext);
dojo.forEach(prevKeyCodes, function(code){ keyCodes[code] = prev });
dojo.forEach(nextKeyCodes, function(code){ keyCodes[code] = next });
this.connect(this.domNode, "onkeypress", "_onContainerKeypress");
if(dojo.isIE){
this.connect(this.domNode, "onactivate", "_onContainerFocus");
this.connect(this.domNode, "ondeactivate", "_onContainerBlur");
}else{
this.connect(this.domNode, "onfocus", "_onContainerFocus");
this.connect(this.domNode, "onblur", "_onContainerBlur");
}
},
 
startupKeyNavChildren: function(){
// summary:
// Call in startup() to set child tabindexes to -1
dojo.forEach(this.getChildren(), dojo.hitch(this, "_setTabIndexMinusOne"));
},
 
addChild: function(/*Widget*/ widget, /*int?*/ insertIndex){
// summary: Add a child to our _Container
dijit._KeyNavContainer.superclass.addChild.apply(this, arguments);
this._setTabIndexMinusOne(widget);
},
 
focus: function(){
// summary: Default focus() implementation: focus the first child.
this.focusFirstChild();
},
 
focusFirstChild: function(){
// summary: Focus the first focusable child in the container.
this.focusChild(this._getFirstFocusableChild());
},
 
focusNext: function(){
// summary: Focus the next widget or focal node (for widgets
// with multiple focal nodes) within this container.
if(this.focusedChild && this.focusedChild.hasNextFocalNode
&& this.focusedChild.hasNextFocalNode()){
this.focusedChild.focusNext();
return;
}
var child = this._getNextFocusableChild(this.focusedChild, 1);
if(child.getFocalNodes){
this.focusChild(child, child.getFocalNodes()[0]);
}else{
this.focusChild(child);
}
},
 
focusPrev: function(){
// summary: Focus the previous widget or focal node (for widgets
// with multiple focal nodes) within this container.
if(this.focusedChild && this.focusedChild.hasPrevFocalNode
&& this.focusedChild.hasPrevFocalNode()){
this.focusedChild.focusPrev();
return;
}
var child = this._getNextFocusableChild(this.focusedChild, -1);
if(child.getFocalNodes){
var nodes = child.getFocalNodes();
this.focusChild(child, nodes[nodes.length-1]);
}else{
this.focusChild(child);
}
},
 
focusChild: function(/*Widget*/ widget, /*Node?*/ node){
// summary: Focus widget. Optionally focus 'node' within widget.
if(widget){
if(this.focusedChild && widget !== this.focusedChild){
this._onChildBlur(this.focusedChild);
}
this.focusedChild = widget;
if(node && widget.focusFocalNode){
widget.focusFocalNode(node);
}else{
widget.focus();
}
}
},
 
_setTabIndexMinusOne: function(/*Widget*/ widget){
if(widget.getFocalNodes){
dojo.forEach(widget.getFocalNodes(), function(node){
node.setAttribute("tabIndex", -1);
});
}else{
(widget.focusNode || widget.domNode).setAttribute("tabIndex", -1);
}
},
 
_onContainerFocus: function(evt){
this.domNode.setAttribute("tabIndex", -1);
if(evt.target === this.domNode){
this.focusFirstChild();
}else{
var widget = dijit.getEnclosingWidget(evt.target);
if(widget && widget.isFocusable()){
this.focusedChild = widget;
}
}
},
 
_onContainerBlur: function(evt){
if(this.tabIndex){
this.domNode.setAttribute("tabIndex", this.tabIndex);
}
},
 
_onContainerKeypress: function(evt){
if(evt.ctrlKey || evt.altKey){ return; }
var func = this._keyNavCodes[evt.keyCode];
if(func){
func();
dojo.stopEvent(evt);
}
},
 
_onChildBlur: function(/*Widget*/ widget){
// summary:
// Called when focus leaves a child widget to go
// to a sibling widget.
},
 
_getFirstFocusableChild: function(){
return this._getNextFocusableChild(null, 1);
},
 
_getNextFocusableChild: function(child, dir){
if(child){
child = this._getSiblingOfChild(child, dir);
}
var children = this.getChildren();
for(var i=0; i < children.length; i++){
if(!child){
child = children[(dir>0) ? 0 : (children.length-1)];
}
if(child.isFocusable()){
return child;
}
child = this._getSiblingOfChild(child, dir);
}
}
}
);
 
}
/trunk/api/js/dojo1.0/dijit/nls/pl/loading.js
New file
0,0 → 1,0
({"loadingState": "Trwa ładowanie...", "errorState": "Niestety, wystąpił błąd"})
/trunk/api/js/dojo1.0/dijit/nls/pl/common.js
New file
0,0 → 1,0
({"buttonCancel": "Anuluj", "buttonSave": "Zapisz", "buttonOk": "OK"})
/trunk/api/js/dojo1.0/dijit/nls/dijit-all_fr.js
New file
0,0 → 1,0
dojo.provide("dijit.nls.dijit-all_fr");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.fr");dojo.nls.colors.fr={"lightsteelblue": "bleu acier clair", "orangered": "rouge orangé", "midnightblue": "bleu nuit", "cadetblue": "bleu pétrole", "seashell": "coquillage", "slategrey": "gris ardoise", "coral": "corail", "darkturquoise": "turquoise foncé", "antiquewhite": "blanc antique", "mediumspringgreen": "vert printemps moyen", "salmon": "saumon", "darkgrey": "gris foncé", "ivory": "ivoire", "greenyellow": "vert-jaune", "mistyrose": "rose pâle", "lightsalmon": "saumon clair", "silver": "argent", "dimgrey": "gris soutenu", "orange": "orange", "white": "blanc", "navajowhite": "chair", "royalblue": "bleu roi", "deeppink": "rose soutenu", "lime": "vert citron", "oldlace": "blanc cassé", "chartreuse": "vert vif", "darkcyan": "cyan foncé", "yellow": "jaune", "linen": "écru", "olive": "olive", "gold": "or", "lawngreen": "vert prairie", "lightyellow": "jaune clair", "tan": "grège", "darkviolet": "violet foncé", "lightslategrey": "gris ardoise clair", "grey": "gris", "darkkhaki": "kaki foncé", "green": "vert", "deepskyblue": "bleu ciel soutenu", "aqua": "bleu-vert", "sienna": "terre de sienne", "mintcream": "crème de menthe", "rosybrown": "vieux rose", "mediumslateblue": "bleu ardoise moyen", "magenta": "magenta", "lightseagreen": "vert d'eau clair", "cyan": "cyan", "olivedrab": "brun verdâtre", "darkgoldenrod": "jaune paille foncé", "slateblue": "bleu ardoise", "mediumaquamarine": "aigue-marine moyen", "lavender": "lavande", "mediumseagreen": "vert d'eau moyen ", "maroon": "marron", "darkslategray": "gris ardoise foncé", "mediumturquoise": "turquoise moyen", "ghostwhite": "blanc laiteux", "darkblue": "bleu foncé", "mediumvioletred": "rouge violacé moyen", "brown": "brun", "lightgray": "gris clair", "sandybrown": "sable", "pink": "rose", "firebrick": "rouge brique", "indigo": "indigo", "snow": "neige", "darkorchid": "lilas foncé", "turquoise": "turquoise", "chocolate": "chocolat", "springgreen": "vert printemps", "moccasin": "chamois", "navy": "bleu marine", "lemonchiffon": "mousse de citron", "teal": "sarcelle", "floralwhite": "lys", "cornflowerblue": "bleuet", "paleturquoise": "turquoise pâle", "purple": "pourpre", "gainsboro": "gris souris", "plum": "prune", "red": "rouge", "blue": "bleu", "forestgreen": "vert sapin", "darkgreen": "vert foncé", "honeydew": "opalin", "darkseagreen": "vert d'eau foncé", "lightcoral": "corail clair", "palevioletred": "rouge violacé pâle", "mediumpurple": "pourpre moyen", "saddlebrown": "brun cuir", "darkmagenta": "magenta foncé", "thistle": "chardon", "whitesmoke": "blanc cendré", "wheat": "blé", "violet": "violet", "lightskyblue": "bleu ciel clair", "goldenrod": "jaune paille", "mediumblue": "bleu moyen", "skyblue": "bleu ciel", "crimson": "cramoisi", "darksalmon": "saumon foncé", "darkred": "rouge foncé", "darkslategrey": "gris ardoise foncé", "peru": "caramel", "lightgrey": "gris clair", "lightgoldenrodyellow": "jaune paille clair", "blanchedalmond": "coquille d'oeuf", "aliceblue": "bleu gris", "bisque": "beige rosé", "slategray": "gris ardoise", "palegoldenrod": "jaune paille pâle", "darkorange": "orange foncé", "aquamarine": "aigue-marine", "lightgreen": "vert clair", "burlywood": "bois précieux", "dodgerblue": "bleu France", "darkgray": "gris foncé", "lightcyan": "cyan clair", "powderblue": "bleu de smalt", "blueviolet": "bleu-violet", "orchid": "lilas", "dimgray": "gris soutenu", "beige": "beige", "fuchsia": "fuchsia", "lavenderblush": "lavandin", "hotpink": "rose intense", "steelblue": "bleu acier", "tomato": "tomate", "lightpink": "rose clair", "limegreen": "citron vert", "indianred": "rose indien", "papayawhip": "crème de papaye", "lightslategray": "gris ardoise clair", "gray": "gris", "mediumorchid": "lilas moyen", "cornsilk": "vanille", "black": "noir", "seagreen": "vert d'eau", "darkslateblue": "bleu ardoise foncé", "khaki": "kaki", "lightblue": "bleu clair", "palegreen": "vert pâle", "azure": "bleu azur", "peachpuff": "pêche", "darkolivegreen": "olive foncé", "yellowgreen": "vert jaunâtre"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.fr");dijit.nls.loading.fr={"loadingState": "Chargement...", "errorState": "Une erreur est survenue"};dojo.provide("dijit.nls.Textarea");dijit.nls.Textarea._built=true;dojo.provide("dijit.nls.Textarea.fr");dijit.nls.Textarea.fr={"iframeEditTitle": "edit area", "iframeFocusTitle": "edit area frame"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.fr");dijit._editor.nls.commands.fr={"removeFormat": "Supprimer la mise en forme", "copy": "Copier", "paste": "Coller", "selectAll": "Sélectionner tout", "insertOrderedList": "Liste numérotée", "insertTable": "Insérer/Modifier un tableau", "underline": "Souligner", "foreColor": "Couleur d'avant-plan", "htmlToggle": "Source HTML", "formatBlock": "Style de paragraphe", "insertHorizontalRule": "Règle horizontale", "delete": "Supprimer", "insertUnorderedList": "Liste à puces", "tableProp": "Propriété du tableau", "insertImage": "Insérer une image", "superscript": "Exposant", "subscript": "Indice", "createLink": "Créer un lien", "undo": "Annuler", "italic": "Italique", "fontName": "Nom de police", "justifyLeft": "Aligner à gauche", "unlink": "Supprimer le lien", "toggleTableBorder": "Afficher/Masquer la bordure du tableau", "fontSize": "Taille de police", "indent": "Retrait", "redo": "Rétablir", "strikethrough": "Barrer", "justifyFull": "Justifier", "justifyCenter": "Aligner au centre", "hiliteColor": "Couleur d'arrière-plan", "deleteTable": "Supprimer le tableau", "outdent": "Retrait négatif", "cut": "Couper", "plainFormatBlock": "Style de paragraphe", "bold": "Gras", "systemShortcutFF": "L'action \"${0}\" est disponible dans Mozilla Firefox uniquement, par le biais d'un raccourci-clavier. Utilisez ${1}.", "justifyRight": "Aligner à droite", "appleKey": "⌘${0}", "ctrlKey": "ctrl+${0}"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.fr");dojo.cldr.nls.number.fr={"group": " ", "percentFormat": "#,##0 %", "currencyFormat": "#,##0.00 ¤", "decimal": ",", "scientificFormat": "#E0", "currencySpacing-afterCurrency-currencyMatch": "[:letter:]", "infinity": "∞", "list": ";", "percentSign": "%", "minusSign": "-", "currencySpacing-beforeCurrency-surroundingMatch": "[:digit:]", "currencySpacing-afterCurrency-insertBetween": " ", "nan": "NaN", "nativeZeroDigit": "0", "plusSign": "+", "currencySpacing-afterCurrency-surroundingMatch": "[:digit:]", "currencySpacing-beforeCurrency-currencyMatch": "[:letter:]", "perMille": "‰", "decimalFormat": "#,##0.###", "patternDigit": "#", "currencySpacing-beforeCurrency-insertBetween": " ", "exponential": "E"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.fr");dijit.nls.common.fr={"buttonCancel": "Annuler", "buttonSave": "Sauvegarder", "buttonOk": "OK"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.fr");dijit.form.nls.validate.fr={"rangeMessage": "* Cette valeur n'est pas comprise dans la plage autorisée. ", "invalidMessage": "* La valeur indiquée n'est pas correcte. ", "missingMessage": "* Cette valeur est requise. "};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.fr");dijit.form.nls.ComboBox.fr={"previousMessage": "Choix précédents", "nextMessage": "Plus de choix"};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.fr");dojo.cldr.nls.currency.fr={"HKD_displayName": "dollar de Hong Kong", "CHF_displayName": "franc suisse", "CHF_symbol": "sFr.", "CAD_displayName": "dollar canadien", "AUD_displayName": "dollar australien", "JPY_displayName": "yen", "USD_displayName": "dollar des États-Unis", "GBP_displayName": "livre sterling", "EUR_displayName": "euro", "USD_symbol": "$", "GBP_symbol": "£", "JPY_symbol": "¥", "EUR_symbol": "€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.fr");dojo.cldr.nls.gregorian.fr={"eraNames": ["av. J.-C.", "ap. J.-C."], "timeFormat-full": "HH' h 'mm z", "eraAbbr": ["av. J.-C.", "apr. J.-C."], "dateFormat-medium": "d MMM yy", "months-format-abbr": ["janv.", "févr.", "mars", "avr.", "mai", "juin", "juil.", "août", "sept.", "oct.", "nov.", "déc."], "dateFormat-full": "EEEE d MMMM yyyy", "days-format-abbr": ["dim.", "lun.", "mar.", "mer.", "jeu.", "ven.", "sam."], "quarters-format-wide": ["1er trimestre", "2e trimestre", "3e trimestre", "4e trimestre"], "dateFormat-short": "dd/MM/yy", "quarters-format-abbreviated": ["T1", "T2", "T3", "T4"], "months-format-wide": ["janvier", "février", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre", "décembre"], "months-standAlone-narrow": ["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], "days-standAlone-narrow": ["D", "L", "M", "M", "J", "V", "S"], "dateFormat-long": "d MMMM yyyy", "days-format-wide": ["dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi"], "dateTimeFormats-appendItem-Second": "{0} ({2}: {1})", "field-dayperiod": "Dayperiod", "field-minute": "Minute", "field-weekday": "Day of the Week", "dateTimeFormats-appendItem-Year": "{0} {1}", "field-era": "Era", "field-hour": "Hour", "dateTimeFormats-appendItem-Week": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Timezone": "{0} {1}", "dateTimeFormats-appendItem-Month": "{0} ({2}: {1})", "timeFormat-medium": "HH:mm:ss", "field-zone": "Zone", "dateTimeFormats-appendItem-Minute": "{0} ({2}: {1})", "dateTimeFormat": "{1} {0}", "field-year": "Year", "dateTimeFormats-appendItem-Day": "{0} ({2}: {1})", "field-week": "Week", "timeFormat-long": "HH:mm:ss z", "timeFormat-short": "HH:mm", "field-month": "Month", "dateTimeFormats-appendItem-Quarter": "{0} ({2}: {1})", "pm": "PM", "field-second": "Second", "field-day": "Day", "dateTimeFormats-appendItem-Day-Of-Week": "{0} {1}", "dateTimeFormats-appendItem-Hour": "{0} ({2}: {1})", "am": "AM", "dateTimeFormats-appendItem-Era": "{0} {1}"};dojo.provide("dijit.nls.Textarea");dijit.nls.Textarea._built=true;dojo.provide("dijit.nls.Textarea.fr");dijit.nls.Textarea.fr={"iframeEditTitle": "edit area", "iframeFocusTitle": "edit area frame"};
/trunk/api/js/dojo1.0/dijit/nls/hu/loading.js
New file
0,0 → 1,0
({"loadingState": "Betöltés...", "errorState": "Sajnálom, hiba történt"})
/trunk/api/js/dojo1.0/dijit/nls/hu/common.js
New file
0,0 → 1,0
({"buttonCancel": "Mégse", "buttonSave": "Mentés", "buttonOk": "OK"})
/trunk/api/js/dojo1.0/dijit/nls/dijit-all_pl.js
New file
0,0 → 1,0
dojo.provide("dijit.nls.dijit-all_pl");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.pl");dojo.nls.colors.pl={"lightsteelblue": "jasny stalowoniebieski", "orangered": "pomarańczowoczerwony", "midnightblue": "ciemnogranatowy", "cadetblue": "niebieskoszary", "seashell": "muszla", "slategrey": "łupkowy szary", "coral": "koralowy", "darkturquoise": "ciemnoturkusowy", "antiquewhite": "biel antyczna", "mediumspringgreen": "średnia wiosenna zieleń", "salmon": "łososiowy", "darkgrey": "ciemnoszary", "ivory": "kość słoniowa", "greenyellow": "zielonożółty", "mistyrose": "bladoróżany", "lightsalmon": "jasnołososiowy", "silver": "srebrny", "dimgrey": "przytłumiony szary", "orange": "pomarańczowy", "white": "biały", "navajowhite": "piaskowy", "royalblue": "błękit królewski", "deeppink": "głęboki różowy", "lime": "limetkowy", "oldlace": "bladopomarańczowy", "chartreuse": "jaskrawozielony", "darkcyan": "ciemny cyjan", "yellow": "żółty", "linen": "lniany", "olive": "oliwkowy", "gold": "złoty", "lawngreen": "trawiasty", "lightyellow": "jasnożółty", "tan": "kawowy", "darkviolet": "ciemnofioletowy", "lightslategrey": "jasny łupkowy szary", "grey": "szary", "darkkhaki": "ciemny khaki", "green": "zielony", "deepskyblue": "intensywny błękit nieba", "aqua": "wodny", "sienna": "siena", "mintcream": "jasnomiętowy", "rosybrown": "różowobrązowy", "mediumslateblue": "średni łupkowy niebieski", "magenta": "magenta", "lightseagreen": "jasna morska zieleń", "cyan": "cyjan", "olivedrab": "oliwkowa zieleń", "darkgoldenrod": "ciemnogliniany", "slateblue": "łupkowy niebieski", "mediumaquamarine": "średnia akwamaryna", "lavender": "lawendowy", "mediumseagreen": "średnia morska zieleń", "maroon": "bordowy", "darkslategray": "ciemny łupkowy szary", "mediumturquoise": "średni turkusowy", "ghostwhite": "bladobiały", "darkblue": "ciemnoniebieski", "mediumvioletred": "średni fioletowoczerwony", "brown": "brązowy", "lightgray": "jasnoszary", "sandybrown": "piaskowy brąz", "pink": "różowy", "firebrick": "ceglasty", "indigo": "indygo", "snow": "śnieżny", "darkorchid": "ciemna orchidea", "turquoise": "turkusowy", "chocolate": "czekoladowy", "springgreen": "wiosenna zieleń", "moccasin": "mokasynowy", "navy": "granatowy", "lemonchiffon": "cytrynowy", "teal": "cyrankowy", "floralwhite": "kwiatowa biel", "cornflowerblue": "chabrowy", "paleturquoise": "bladoturkusowy", "purple": "purpurowy", "gainsboro": "bladoszary", "plum": "śliwkowy", "red": "czerwony", "blue": "niebieski", "forestgreen": "leśna zieleń", "darkgreen": "ciemnozielony", "honeydew": "melon", "darkseagreen": "ciemna morska zieleń", "lightcoral": "jasnokoralowy", "palevioletred": "blady fioletowoczerwony", "mediumpurple": "średnia purpura", "saddlebrown": "skórzany brązowy", "darkmagenta": "ciemna magenta", "thistle": "bladofioletowy", "whitesmoke": "przydymiony biały", "wheat": "pszeniczny", "violet": "fioletowy", "lightskyblue": "jasny błękit nieba", "goldenrod": "gliniany", "mediumblue": "średni niebieski", "skyblue": "błękit nieba", "crimson": "karmazynowy", "darksalmon": "ciemnołososiowy", "darkred": "ciemnoczerwony", "darkslategrey": "ciemny łupkowy szary", "peru": "jasnobrązowy", "lightgrey": "jasnoszary", "lightgoldenrodyellow": "jasnogliniana żółć", "blanchedalmond": "migdałowy", "aliceblue": "bladoniebieski", "bisque": "biszkoptowy", "slategray": "łupkowy szary", "palegoldenrod": "bladogliniany", "darkorange": "ciemnopomarańczowy", "aquamarine": "akwamaryna", "lightgreen": "jasnozielony", "burlywood": "kolor drewna", "dodgerblue": "błękit Dodgers", "darkgray": "ciemnoszary", "lightcyan": "jasny cyjan", "powderblue": "pudrowy niebieski", "blueviolet": "niebieskofioletowy", "orchid": "orchidea", "dimgray": "przytłumiony szary", "beige": "beżowy", "fuchsia": "fuksja", "lavenderblush": "lawendoworóżowy", "hotpink": "intensywny różowy", "steelblue": "stalowy niebieski", "tomato": "pomidorowy", "lightpink": "jasnoróżowy", "limegreen": "limetkowozielony", "indianred": "kasztanowy", "papayawhip": "papaja", "lightslategray": "jasny łupkowy szary", "gray": "szary", "mediumorchid": "średnia orchidea", "cornsilk": "kukurydziany", "black": "czarny", "seagreen": "morska zieleń", "darkslateblue": "ciemny łupkowy niebieski", "khaki": "khaki", "lightblue": "jasnoniebieski", "palegreen": "bladozielony", "azure": "lazur", "peachpuff": "brzoskwiniowy", "darkolivegreen": "ciemnooliwkowy", "yellowgreen": "żółtozielony"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.pl");dijit.nls.loading.pl={"loadingState": "Trwa ładowanie...", "errorState": "Niestety, wystąpił błąd"};dojo.provide("dijit.nls.Textarea");dijit.nls.Textarea._built=true;dojo.provide("dijit.nls.Textarea.pl");dijit.nls.Textarea.pl={"iframeEditTitle": "edit area", "iframeFocusTitle": "edit area frame"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.pl");dijit._editor.nls.commands.pl={"removeFormat": "Usuń formatowanie", "copy": "Kopiuj", "paste": "Wklej", "selectAll": "Wybierz wszystko", "insertOrderedList": "Lista numerowana", "insertTable": "Wstaw/edytuj tabelę", "underline": "Podkreślenie", "foreColor": "Kolor pierwszego planu", "htmlToggle": "Źródło HTML", "formatBlock": "Styl akapitu", "insertHorizontalRule": "Linia pozioma", "delete": "Usuń", "insertUnorderedList": "Lista wypunktowana", "tableProp": "Właściwość tabeli", "insertImage": "Wstaw obraz", "superscript": "Indeks górny", "subscript": "Indeks dolny", "createLink": "Utwórz odsyłacz", "undo": "Cofnij", "italic": "Kursywa", "fontName": "Nazwa czcionki", "justifyLeft": "Wyrównaj do lewej", "unlink": "Usuń odsyłacz", "toggleTableBorder": "Przełącz ramkę tabeli", "fontSize": "Wielkość czcionki", "indent": "Wcięcie", "redo": "Przywróć", "strikethrough": "Przekreślenie", "justifyFull": "Wyrównaj do lewej i prawej", "justifyCenter": "Wyrównaj do środka", "hiliteColor": "Kolor tła", "deleteTable": "Usuń tabelę", "outdent": "Usuń wcięcie", "cut": "Wytnij", "plainFormatBlock": "Styl akapitu", "bold": "Pogrubienie", "systemShortcutFF": "Działanie ${0} jest dostępne w przeglądarce Mozilla Firefox wyłącznie za pomocą skrótu klawiaturowego. Użyj ${1}.", "justifyRight": "Wyrównaj do prawej", "appleKey": "⌘${0}", "ctrlKey": "ctrl+${0}"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.pl");dojo.cldr.nls.number.pl={"scientificFormat": "#E0", "currencySpacing-afterCurrency-currencyMatch": "[:letter:]", "infinity": "∞", "list": ";", "percentSign": "%", "minusSign": "-", "currencySpacing-beforeCurrency-surroundingMatch": "[:digit:]", "currencySpacing-afterCurrency-insertBetween": " ", "nan": "NaN", "nativeZeroDigit": "0", "plusSign": "+", "currencySpacing-afterCurrency-surroundingMatch": "[:digit:]", "currencyFormat": "¤ #,##0.00", "currencySpacing-beforeCurrency-currencyMatch": "[:letter:]", "perMille": "‰", "group": ",", "percentFormat": "#,##0%", "decimalFormat": "#,##0.###", "decimal": ".", "patternDigit": "#", "currencySpacing-beforeCurrency-insertBetween": " ", "exponential": "E"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.pl");dijit.nls.common.pl={"buttonCancel": "Anuluj", "buttonSave": "Zapisz", "buttonOk": "OK"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.pl");dijit.form.nls.validate.pl={"rangeMessage": "* Ta wartość jest spoza zakresu.", "invalidMessage": "* Wprowadzona wartość nie jest poprawna.", "missingMessage": "* Ta wartość jest wymagana."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.pl");dijit.form.nls.ComboBox.pl={"previousMessage": "Poprzednie wybory", "nextMessage": "Więcej wyborów"};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.pl");dojo.cldr.nls.currency.pl={"USD_symbol": "$", "EUR_displayName": "EUR", "GBP_displayName": "GBP", "JPY_displayName": "JPY", "GBP_symbol": "£", "JPY_symbol": "¥", "EUR_symbol": "€", "USD_displayName": "USD"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.pl");dojo.cldr.nls.gregorian.pl={"dateTimeFormats-appendItem-Second": "{0} ({2}: {1})", "field-dayperiod": "Dayperiod", "field-minute": "Minute", "eraNames": ["BCE", "CE"], "field-weekday": "Day of the Week", "months-standAlone-narrow": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"], "dateTimeFormats-appendItem-Year": "{0} {1}", "field-era": "Era", "field-hour": "Hour", "timeFormat-full": "HH:mm:ss z", "dateTimeFormats-appendItem-Week": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Timezone": "{0} {1}", "dateTimeFormats-appendItem-Month": "{0} ({2}: {1})", "days-standAlone-narrow": ["1", "2", "3", "4", "5", "6", "7"], "eraAbbr": ["BCE", "CE"], "dateFormat-long": "yyyy MMMM d", "timeFormat-medium": "HH:mm:ss", "field-zone": "Zone", "dateTimeFormats-appendItem-Minute": "{0} ({2}: {1})", "dateFormat-medium": "yyyy MMM d", "quarters-format-abbreviated": ["Q1", "Q2", "Q3", "Q4"], "dateTimeFormat": "{1} {0}", "field-year": "Year", "dateTimeFormats-appendItem-Day": "{0} ({2}: {1})", "field-week": "Week", "timeFormat-long": "HH:mm:ss z", "months-format-abbr": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"], "timeFormat-short": "HH:mm", "field-month": "Month", "dateTimeFormats-appendItem-Quarter": "{0} ({2}: {1})", "days-format-abbr": ["1", "2", "3", "4", "5", "6", "7"], "pm": "PM", "field-second": "Second", "field-day": "Day", "dateTimeFormats-appendItem-Day-Of-Week": "{0} {1}", "dateTimeFormats-appendItem-Hour": "{0} ({2}: {1})", "am": "AM", "dateFormat-short": "yy/MM/dd", "dateFormat-full": "EEEE, yyyy MMMM dd", "months-format-wide": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"], "dateTimeFormats-appendItem-Era": "{0} {1}", "quarters-format-wide": ["Q1", "Q2", "Q3", "Q4"], "days-format-wide": ["1", "2", "3", "4", "5", "6", "7"]};dojo.provide("dijit.nls.Textarea");dijit.nls.Textarea._built=true;dojo.provide("dijit.nls.Textarea.pl");dijit.nls.Textarea.pl={"iframeEditTitle": "edit area", "iframeFocusTitle": "edit area frame"};
/trunk/api/js/dojo1.0/dijit/nls/dijit-all_it.js
New file
0,0 → 1,0
dojo.provide("dijit.nls.dijit-all_it");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.it");dojo.nls.colors.it={"lightsteelblue": "blu acciao chiaro", "orangered": "vermiglio", "midnightblue": "blu melanzana scuro", "cadetblue": "verde acqua", "seashell": "sabbia rosa", "slategrey": "grigio ardesia", "coral": "corallo", "darkturquoise": "turchese scuro", "antiquewhite": "bianco antico", "mediumspringgreen": "verde primavera medio", "salmon": "salmone", "darkgrey": "grigio scuro", "ivory": "avorio", "greenyellow": "giallo verde", "mistyrose": "rosa pallido", "lightsalmon": "salmone chiaro", "silver": "grigio 25%", "dimgrey": "grigio 80%", "orange": "arancione", "white": "bianco", "navajowhite": "pesca chiaro", "royalblue": "blu reale", "deeppink": "ciclamino", "lime": "verde fluorescente", "oldlace": "mandorla", "chartreuse": "verde brillante", "darkcyan": "ciano scuro", "yellow": "giallo", "linen": "lino", "olive": "verde oliva", "gold": "oro", "lawngreen": "verde prato", "lightyellow": "giallo chiaro", "tan": "grigio bruno", "darkviolet": "viola scuro", "lightslategrey": "grigio ardesia chiaro", "grey": "grigio", "darkkhaki": "kaki scuro", "green": "verde", "deepskyblue": "azzurro cielo scuro", "aqua": "acqua", "sienna": "cuoio", "mintcream": "bianco nuvola", "rosybrown": "marrone rosato", "mediumslateblue": "blu ardesia medio", "magenta": "magenta", "lightseagreen": "verde mare chiaro", "cyan": "ciano", "olivedrab": "marrone oliva", "darkgoldenrod": "ocra scuro", "slateblue": "blu ardesia", "mediumaquamarine": "acquamarina medio", "lavender": "lavanda", "mediumseagreen": "verde mare medio", "maroon": "scarlatto", "darkslategray": "grigio ardesia scuro", "mediumturquoise": "turchese medio", "ghostwhite": "bianco gesso", "darkblue": "blu scuro", "mediumvioletred": "vinaccia", "brown": "marrone", "lightgray": "grigio chiaro", "sandybrown": "marrone sabbia", "pink": "rosa", "firebrick": "rosso mattone", "indigo": "indaco", "snow": "neve", "darkorchid": "orchidea scuro", "turquoise": "turchese", "chocolate": "cioccolato", "springgreen": "verde primavera", "moccasin": "mocassino", "navy": "blu notte", "lemonchiffon": "caffelatte chiaro", "teal": "verde turchese", "floralwhite": "bianco giglio", "cornflowerblue": "blu fiordaliso", "paleturquoise": "turchese pallido", "purple": "porpora", "gainsboro": "grigio 10%", "plum": "prugna", "red": "rosso", "blue": "blu", "forestgreen": "verde foresta", "darkgreen": "verde scuro", "honeydew": "bianco germoglio", "darkseagreen": "verde mare scuro", "lightcoral": "rosa corallo", "palevioletred": "vinaccia chiaro", "mediumpurple": "porpora medio", "saddlebrown": "cacao", "darkmagenta": "magenta scuro", "thistle": "rosa cenere", "whitesmoke": "bianco fumo", "wheat": "sabbia", "violet": "viola", "lightskyblue": "azzurro cielo chiaro", "goldenrod": "ocra gialla", "mediumblue": "blu medio", "skyblue": "azzurro cielo", "crimson": "cremisi", "darksalmon": "salmone scuro", "darkred": "rosso scuro", "darkslategrey": "grigio ardesia scuro", "peru": "marrone terra bruciata", "lightgrey": "grigio chiaro", "lightgoldenrodyellow": "giallo tenue", "blanchedalmond": "mandorla chiaro", "aliceblue": "blu alice", "bisque": "incarnato", "slategray": "grigio ardesia", "palegoldenrod": "giallo zolfo chiaro", "darkorange": "arancione scuro", "aquamarine": "acquamarina", "lightgreen": "verde chiaro", "burlywood": "tabacco", "dodgerblue": "blu d'oriente", "darkgray": "grigio scuro", "lightcyan": "ciano chiaro", "powderblue": "azzurro polvere", "blueviolet": "blu violetto", "orchid": "orchidea", "dimgray": "grigio 80%", "beige": "beige", "fuchsia": "fucsia", "lavenderblush": "bianco rosato", "hotpink": "rosa acceso", "steelblue": "blu acciao", "tomato": "pomodoro", "lightpink": "rosa chiaro", "limegreen": "verde lime", "indianred": "terra indiana", "papayawhip": "cipria", "lightslategray": "grigio ardesia chiaro", "gray": "grigio", "mediumorchid": "orchidea medio", "cornsilk": "crema", "black": "nero", "seagreen": "verde mare", "darkslateblue": "blu ardesia scuro", "khaki": "kaki", "lightblue": "azzurro", "palegreen": "verde pallido", "azure": "azzurro ghiaccio", "peachpuff": "pesca", "darkolivegreen": "verde oliva scuro", "yellowgreen": "giallo verde"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.it");dijit.nls.loading.it={"loadingState": "Caricamento in corso...", "errorState": "Si è verificato un errore"};dojo.provide("dijit.nls.Textarea");dijit.nls.Textarea._built=true;dojo.provide("dijit.nls.Textarea.it");dijit.nls.Textarea.it={"iframeEditTitle": "edit area", "iframeFocusTitle": "edit area frame"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.it");dijit._editor.nls.commands.it={"removeFormat": "Rimuovi formato", "copy": "Copia", "paste": "Incolla", "selectAll": "Seleziona tutto", "insertOrderedList": "Elenco numerato", "insertTable": "Inserisci/Modifica tabella", "underline": "Sottolineato", "foreColor": "Colore primo piano", "htmlToggle": "Origine HTML", "formatBlock": "Stile paragrafo", "insertHorizontalRule": "Righello orizzontale", "delete": "Elimina", "insertUnorderedList": "Elenco puntato", "tableProp": "Proprietà tabella", "insertImage": "Inserisci immagine", "superscript": "Apice", "subscript": "Pedice", "createLink": "Crea collegamento", "undo": "Annulla", "italic": "Corsivo", "fontName": "Nome carattere", "justifyLeft": "Allinea a sinistra", "unlink": "Rimuovi collegamento", "toggleTableBorder": "Mostra/Nascondi margine tabella", "fontSize": "Dimensione carattere", "indent": "Rientra", "redo": "Ripristina", "strikethrough": "Barrato", "justifyFull": "Giustifica", "justifyCenter": "Allinea al centro", "hiliteColor": "Colore sfondo", "deleteTable": "Elimina tabella", "outdent": "Rimuovi rientro", "cut": "Taglia", "plainFormatBlock": "Stile paragrafo", "bold": "Grassetto", "systemShortcutFF": "L'azione \"${0}\" è disponibile solo in Mozilla Firefox tramite tasti di scelta rapida. Utilizzare ${1}.", "justifyRight": "Allinea a destra", "appleKey": "⌘${0}", "ctrlKey": "ctrl+${0}"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.it");dojo.cldr.nls.number.it={"group": ".", "decimal": ",", "scientificFormat": "#E0", "currencySpacing-afterCurrency-currencyMatch": "[:letter:]", "infinity": "∞", "list": ";", "percentSign": "%", "minusSign": "-", "currencySpacing-beforeCurrency-surroundingMatch": "[:digit:]", "currencySpacing-afterCurrency-insertBetween": " ", "nan": "NaN", "nativeZeroDigit": "0", "plusSign": "+", "currencySpacing-afterCurrency-surroundingMatch": "[:digit:]", "currencyFormat": "¤ #,##0.00", "currencySpacing-beforeCurrency-currencyMatch": "[:letter:]", "perMille": "‰", "percentFormat": "#,##0%", "decimalFormat": "#,##0.###", "patternDigit": "#", "currencySpacing-beforeCurrency-insertBetween": " ", "exponential": "E"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.it");dijit.nls.common.it={"buttonCancel": "Annulla", "buttonSave": "Salva", "buttonOk": "OK"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.it");dijit.form.nls.validate.it={"rangeMessage": "* Questo valore non è compreso nell'intervallo.", "invalidMessage": "* Il valore immesso non è valido.", "missingMessage": "* Questo valore è obbligatorio."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.it");dijit.form.nls.ComboBox.it={"previousMessage": "Scelte precedenti", "nextMessage": "Altre scelte"};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.it");dojo.cldr.nls.currency.it={"HKD_displayName": "Dollaro di Hong Kong", "CHF_displayName": "Franco Svizzero", "CHF_symbol": "SFr.", "CAD_displayName": "Dollaro Canadese", "AUD_displayName": "Dollaro Australiano", "JPY_displayName": "Yen Giapponese", "USD_displayName": "Dollaro Statunitense", "GBP_displayName": "Sterlina Inglese", "EUR_displayName": "Euro", "USD_symbol": "$", "GBP_symbol": "£", "JPY_symbol": "¥", "EUR_symbol": "€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.it");dojo.cldr.nls.gregorian.it={"quarters-format-abbreviated": ["T1", "T2", "T3", "T4"], "dateFormat-medium": "dd/MMM/yy", "field-second": "secondo", "field-week": "settimana", "pm": "p.", "months-standAlone-narrow": ["G", "F", "M", "A", "M", "G", "L", "A", "S", "O", "N", "D"], "am": "m.", "days-standAlone-narrow": ["D", "L", "M", "M", "G", "V", "S"], "field-year": "anno", "field-minute": "minuto", "field-hour": "ora", "dateFormat-long": "dd MMMM yyyy", "field-day": "giorno", "field-dayperiod": "periodo del giorno", "field-month": "mese", "dateFormat-short": "dd/MM/yy", "months-format-wide": ["gennaio", "febbraio", "marzo", "aprile", "maggio", "giugno", "luglio", "agosto", "settembre", "ottobre", "novembre", "dicembre"], "field-era": "era", "months-format-abbr": ["gen", "feb", "mar", "apr", "mag", "giu", "lug", "ago", "set", "ott", "nov", "dic"], "days-format-wide": ["domenica", "lunedì", "martedì", "mercoledì", "giovedì", "venerdì", "sabato"], "eraAbbr": ["aC", "dC"], "quarters-format-wide": ["1o trimestre", "2o trimestre", "3o trimestre", "4o trimestre"], "dateFormat-full": "EEEE d MMMM yyyy", "field-weekday": "giorno della settimana", "days-format-abbr": ["dom", "lun", "mar", "mer", "gio", "ven", "sab"], "field-zone": "zona", "dateTimeFormats-appendItem-Second": "{0} ({2}: {1})", "eraNames": ["BCE", "CE"], "dateTimeFormats-appendItem-Year": "{0} {1}", "timeFormat-full": "HH:mm:ss z", "dateTimeFormats-appendItem-Week": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Timezone": "{0} {1}", "dateTimeFormats-appendItem-Month": "{0} ({2}: {1})", "timeFormat-medium": "HH:mm:ss", "dateTimeFormats-appendItem-Minute": "{0} ({2}: {1})", "dateTimeFormat": "{1} {0}", "dateTimeFormats-appendItem-Day": "{0} ({2}: {1})", "timeFormat-long": "HH:mm:ss z", "timeFormat-short": "HH:mm", "dateTimeFormats-appendItem-Quarter": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Day-Of-Week": "{0} {1}", "dateTimeFormats-appendItem-Hour": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Era": "{0} {1}"};dojo.provide("dijit.nls.Textarea");dijit.nls.Textarea._built=true;dojo.provide("dijit.nls.Textarea.it");dijit.nls.Textarea.it={"iframeEditTitle": "edit area", "iframeFocusTitle": "edit area frame"};
/trunk/api/js/dojo1.0/dijit/nls/zh/common.js
New file
0,0 → 1,0
({"buttonCancel": "取消", "buttonSave": "保存", "buttonOk": "确定"})
/trunk/api/js/dojo1.0/dijit/nls/zh/loading.js
New file
0,0 → 1,0
({"loadingState": "正在装入...", "errorState": "对不起,发生了错误"})
/trunk/api/js/dojo1.0/dijit/nls/pt/common.js
New file
0,0 → 1,0
({"buttonCancel": "Cancelar ", "buttonSave": "Salvar", "buttonOk": "OK"})
/trunk/api/js/dojo1.0/dijit/nls/pt/loading.js
New file
0,0 → 1,0
({"loadingState": "Carregando...", "errorState": "Ocorreu um erro"})
/trunk/api/js/dojo1.0/dijit/nls/dijit-all_zh.js
New file
0,0 → 1,0
dojo.provide("dijit.nls.dijit-all_zh");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.zh");dojo.nls.colors.zh={"lightsteelblue": "浅钢蓝色", "orangered": "橙红色", "midnightblue": "深蓝色", "cadetblue": "灰蓝色", "seashell": "海贝色", "slategrey": "灰石色", "coral": "珊瑚色", "darkturquoise": "深粉蓝", "antiquewhite": "古董白", "mediumspringgreen": "间春绿色", "salmon": "橙红", "darkgrey": "深灰色", "ivory": "象牙色", "greenyellow": "绿黄色", "mistyrose": "浅玫瑰色", "lightsalmon": "淡橙色", "silver": "银白色", "dimgrey": "暗灰色", "orange": "橙色", "white": "白色", "navajowhite": "纳瓦白", "royalblue": "品蓝", "deeppink": "深粉红色", "lime": "淡黄绿色", "oldlace": "老白色", "chartreuse": "黄绿色", "darkcyan": "深青绿", "yellow": "黄色", "linen": "亚麻色", "olive": "橄榄绿", "gold": "金黄色", "lawngreen": "草绿色", "lightyellow": "浅黄色", "tan": "棕褐色", "darkviolet": "深紫色", "lightslategrey": "浅青灰", "grey": "灰色", "darkkhaki": "深卡其色", "green": "绿色", "deepskyblue": "深天蓝色", "aqua": "浅绿色", "sienna": "赭色", "mintcream": "薄荷色", "rosybrown": "褐玫瑰红", "mediumslateblue": "间暗蓝色", "magenta": "洋红色", "lightseagreen": "浅海藻绿", "cyan": "青蓝色", "olivedrab": "草绿色", "darkgoldenrod": "深金黄", "slateblue": "石蓝色", "mediumaquamarine": "间绿色", "lavender": "淡紫色", "mediumseagreen": "间海蓝色", "maroon": "栗色", "darkslategray": "深青灰", "mediumturquoise": "间绿宝石色", "ghostwhite": "苍白", "darkblue": "深蓝", "mediumvioletred": "间紫罗兰色", "brown": "棕色", "lightgray": "浅灰色", "sandybrown": "沙褐色", "pink": "粉红色", "firebrick": "砖红", "indigo": "靛青", "snow": "雪白色", "darkorchid": "深紫色", "turquoise": "绿宝石色", "chocolate": "巧克力色", "springgreen": "春绿色", "moccasin": "鹿皮色", "navy": "深蓝色", "lemonchiffon": "柠檬绸色", "teal": "水鸭色", "floralwhite": "花白色", "cornflowerblue": "浅蓝色", "paleturquoise": "苍绿色", "purple": "紫色", "gainsboro": "淡灰色", "plum": "杨李色", "red": "红色", "blue": "蓝色", "forestgreen": "森林绿", "darkgreen": "深绿色", "honeydew": "蜜汁色", "darkseagreen": "深海藻绿", "lightcoral": "浅珊瑚色", "palevioletred": "苍紫罗兰色", "mediumpurple": "间紫色", "saddlebrown": "重褐色", "darkmagenta": "深洋红色", "thistle": "蓟色", "whitesmoke": "烟白色", "wheat": "浅黄色", "violet": "紫色", "lightskyblue": "浅天蓝色", "goldenrod": "金麒麟色", "mediumblue": "间蓝色", "skyblue": "天蓝色", "crimson": "深红色", "darksalmon": "深橙红", "darkred": "深红色", "darkslategrey": "深青灰", "peru": "秘鲁色", "lightgrey": "浅灰色", "lightgoldenrodyellow": "浅金黄色", "blanchedalmond": "白杏色", "aliceblue": "爱丽丝蓝", "bisque": "桔黄色", "slategray": "灰石色", "palegoldenrod": "淡金黄色", "darkorange": "深橙色", "aquamarine": "碧绿色", "lightgreen": "浅绿色", "burlywood": "实木色", "dodgerblue": "闪蓝色", "darkgray": "深灰色", "lightcyan": "浅青色", "powderblue": "铁蓝", "blueviolet": "紫罗兰色", "orchid": "紫色", "dimgray": "暗灰色", "beige": "米色", "fuchsia": "紫红色", "lavenderblush": "淡紫红", "hotpink": "深粉红", "steelblue": "钢蓝色", "tomato": "西红柿色", "lightpink": "浅粉红色", "limegreen": "橙绿色", "indianred": "印度红", "papayawhip": "木瓜色", "lightslategray": "浅青灰", "gray": "灰色", "mediumorchid": "间紫色", "cornsilk": "米绸色", "black": "黑色", "seagreen": "海绿色", "darkslateblue": "深青蓝", "khaki": "卡其色", "lightblue": "淡蓝色", "palegreen": "淡绿色", "azure": "天蓝色", "peachpuff": "桃色", "darkolivegreen": "深橄榄绿", "yellowgreen": "黄绿色"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.zh");dijit.nls.loading.zh={"loadingState": "正在装入...", "errorState": "对不起,发生了错误"};dojo.provide("dijit.nls.Textarea");dijit.nls.Textarea._built=true;dojo.provide("dijit.nls.Textarea.zh");dijit.nls.Textarea.zh={"iframeEditTitle": "edit area", "iframeFocusTitle": "edit area frame"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.zh");dijit._editor.nls.commands.zh={"removeFormat": "除去格式", "copy": "复制", "paste": "粘贴", "selectAll": "全选", "insertOrderedList": "编号列表", "insertTable": "插入/编辑表", "underline": "下划线", "foreColor": "前景色", "htmlToggle": "HTML 源代码", "formatBlock": "段落样式", "insertHorizontalRule": "水平线", "delete": "删除", "insertUnorderedList": "符号列表", "tableProp": "表属性", "insertImage": "插入图像", "superscript": "上标", "subscript": "下标", "createLink": "创建链接", "undo": "撤销", "italic": "斜体", "fontName": "字体名称", "justifyLeft": "左对齐", "unlink": "除去链接", "toggleTableBorder": "切换表边框", "fontSize": "字体大小", "indent": "增加缩进", "redo": "重做", "strikethrough": "删除线", "justifyFull": "对齐", "justifyCenter": "居中", "hiliteColor": "背景色", "deleteTable": "删除表", "outdent": "减少缩进", "cut": "剪切", "plainFormatBlock": "段落样式", "bold": "粗体", "systemShortcutFF": "只能在 Mozilla Firefox 中通过键盘快捷方式执行“${0}”操作。请使用 ${1}。", "justifyRight": "右对齐", "appleKey": "⌘${0}", "ctrlKey": "ctrl+${0}"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.zh");dojo.cldr.nls.number.zh={"scientificFormat": "#E0", "currencySpacing-afterCurrency-currencyMatch": "[:letter:]", "infinity": "∞", "list": ";", "percentSign": "%", "minusSign": "-", "currencySpacing-beforeCurrency-surroundingMatch": "[:digit:]", "currencySpacing-afterCurrency-insertBetween": " ", "nan": "NaN", "nativeZeroDigit": "0", "plusSign": "+", "currencySpacing-afterCurrency-surroundingMatch": "[:digit:]", "currencyFormat": "¤ #,##0.00", "currencySpacing-beforeCurrency-currencyMatch": "[:letter:]", "perMille": "‰", "group": ",", "percentFormat": "#,##0%", "decimalFormat": "#,##0.###", "decimal": ".", "patternDigit": "#", "currencySpacing-beforeCurrency-insertBetween": " ", "exponential": "E"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.zh");dijit.nls.common.zh={"buttonCancel": "取消", "buttonSave": "保存", "buttonOk": "确定"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.zh");dijit.form.nls.validate.zh={"rangeMessage": "* 此值超出范围。", "invalidMessage": "* 输入的值无效。", "missingMessage": "* 此值是必需值。"};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.zh");dijit.form.nls.ComboBox.zh={"previousMessage": "先前选项", "nextMessage": "更多选项"};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.zh");dojo.cldr.nls.currency.zh={"HKD_displayName": "港元", "CHF_displayName": "瑞士法郎", "JPY_symbol": "JP¥", "HKD_symbol": "HK$", "CAD_displayName": "加拿大元", "USD_symbol": "US$", "AUD_displayName": "澳大利亚元", "JPY_displayName": "日元", "USD_displayName": "美元", "GBP_displayName": "英磅", "EUR_displayName": "欧元", "GBP_symbol": "£", "EUR_symbol": "€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.zh");dojo.cldr.nls.gregorian.zh={"eraAbbr": ["公元前", "公元"], "am": "上午", "months-format-abbr": ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"], "days-format-abbr": ["周日", "周一", "周二", "周三", "周四", "周五", "周六"], "pm": "下午", "months-format-wide": ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"], "months-standAlone-narrow": ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"], "days-standAlone-narrow": ["日", "一", "二", "三", "四", "五", "六"], "days-format-wide": ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"], "dateTimeFormats-appendItem-Second": "{0} ({2}: {1})", "field-dayperiod": "Dayperiod", "field-minute": "Minute", "eraNames": ["BCE", "CE"], "field-weekday": "Day of the Week", "dateTimeFormats-appendItem-Year": "{0} {1}", "field-era": "Era", "field-hour": "Hour", "timeFormat-full": "HH:mm:ss z", "dateTimeFormats-appendItem-Week": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Timezone": "{0} {1}", "dateTimeFormats-appendItem-Month": "{0} ({2}: {1})", "dateFormat-long": "yyyy MMMM d", "timeFormat-medium": "HH:mm:ss", "field-zone": "Zone", "dateTimeFormats-appendItem-Minute": "{0} ({2}: {1})", "dateFormat-medium": "yyyy MMM d", "quarters-format-abbreviated": ["Q1", "Q2", "Q3", "Q4"], "dateTimeFormat": "{1} {0}", "field-year": "Year", "dateTimeFormats-appendItem-Day": "{0} ({2}: {1})", "field-week": "Week", "timeFormat-long": "HH:mm:ss z", "timeFormat-short": "HH:mm", "field-month": "Month", "dateTimeFormats-appendItem-Quarter": "{0} ({2}: {1})", "field-second": "Second", "field-day": "Day", "dateTimeFormats-appendItem-Day-Of-Week": "{0} {1}", "dateTimeFormats-appendItem-Hour": "{0} ({2}: {1})", "dateFormat-short": "yy/MM/dd", "dateFormat-full": "EEEE, yyyy MMMM dd", "dateTimeFormats-appendItem-Era": "{0} {1}", "quarters-format-wide": ["Q1", "Q2", "Q3", "Q4"]};dojo.provide("dijit.nls.Textarea");dijit.nls.Textarea._built=true;dojo.provide("dijit.nls.Textarea.zh");dijit.nls.Textarea.zh={"iframeEditTitle": "edit area", "iframeFocusTitle": "edit area frame"};
/trunk/api/js/dojo1.0/dijit/nls/ru/common.js
New file
0,0 → 1,0
({"buttonCancel": "Отмена", "buttonSave": "Сохранить", "buttonOk": "ОК"})
/trunk/api/js/dojo1.0/dijit/nls/ru/loading.js
New file
0,0 → 1,0
({"loadingState": "Загрузка...", "errorState": "Извините, возникла ошибка"})
/trunk/api/js/dojo1.0/dijit/nls/dijit-all_pt.js
New file
0,0 → 1,0
dojo.provide("dijit.nls.dijit-all_pt");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.pt");dojo.nls.colors.pt={"lightsteelblue": "azul metálico claro", "orangered": "vermelho-alaranjado", "midnightblue": "azul noturno", "cadetblue": "azul-cadete", "seashell": "concha marinha", "slategrey": "ardósia cinza", "coral": "coral", "darkturquoise": "turquesa-escuro", "antiquewhite": "branco velho", "mediumspringgreen": "verde primavera médio", "salmon": "salmão", "darkgrey": "cinza-escuro", "ivory": "marfim", "greenyellow": "verde-amarelado", "mistyrose": "rosa nublado", "lightsalmon": "salmão claro", "silver": "prata", "dimgrey": "cinza-escuro", "orange": "laranja", "white": "branco", "navajowhite": "branco navajo", "royalblue": "azul real", "deeppink": "rosa profundo", "lime": "lima", "oldlace": "fita velha", "chartreuse": "verde-amarelado", "darkcyan": "ciano-escuro", "yellow": "amarelo", "linen": "linho", "olive": "verde-oliva", "gold": "dourado", "lawngreen": "verde grama", "lightyellow": "amarelo-claro", "tan": "canela", "darkviolet": "violeta-escuro", "lightslategrey": "ardósia cinza-claro", "grey": "cinza", "darkkhaki": "cáqui-escuro", "green": "verde", "deepskyblue": "azul celeste profundo", "aqua": "azul-água", "sienna": "marrom-avermelhado", "mintcream": "menta", "rosybrown": "marrom rosado", "mediumslateblue": "ardósia azul médio", "magenta": "magenta", "lightseagreen": "verde-mar claro", "cyan": "ciano", "olivedrab": "verde-acastanhado", "darkgoldenrod": "ouro-escuro", "slateblue": "ardósia azul", "mediumaquamarine": "verde-azulado temperado", "lavender": "lavanda", "mediumseagreen": "verde mar temperado", "maroon": "castanho", "darkslategray": "ardósia cinza-escuro", "mediumturquoise": "turquesa médio", "ghostwhite": "branco sombreado", "darkblue": "azul-escuro", "mediumvioletred": "violeta avermelhado médio", "brown": "marrom", "lightgray": "cinza-claro", "sandybrown": "marrom arenoso", "pink": "rosado", "firebrick": "tijolo queimado", "indigo": "índigo", "snow": "branco neve", "darkorchid": "orquídea-escuro", "turquoise": "turquesa", "chocolate": "chocolate", "springgreen": "verde primavera", "moccasin": "mocassim", "navy": "marinho", "lemonchiffon": "gaze limão", "teal": "azul-esverdeado", "floralwhite": "branco floral", "cornflowerblue": "centáurea azul", "paleturquoise": "turquesa pálida", "purple": "púrpura", "gainsboro": "gainsboro", "plum": "ameixa", "red": "vermelho", "blue": "azul", "forestgreen": "verde floresta", "darkgreen": "verde-escuro", "honeydew": "verde mel", "darkseagreen": "verde-mar escuro", "lightcoral": "coral-claro", "palevioletred": "violeta pálida", "mediumpurple": "púrpura temperado", "saddlebrown": "marrom couro", "darkmagenta": "magenta-escuro", "thistle": "cardo", "whitesmoke": "branco esfumaçado", "wheat": "trigo", "violet": "violeta", "lightskyblue": "azul celeste claro", "goldenrod": "ouro", "mediumblue": "azul temperado", "skyblue": "azul celeste", "crimson": "carmim", "darksalmon": "salmão escuro", "darkred": "vermelho-escuro", "darkslategrey": "ardósia cinza-escuro", "peru": "peru", "lightgrey": "cinza-claro", "lightgoldenrodyellow": "amarelo-claro", "blanchedalmond": "branco-amêndoa", "aliceblue": "azul-bebê", "bisque": "biscuit", "slategray": "ardósia cinza", "palegoldenrod": "ouro pálido", "darkorange": "laranja-escuro", "aquamarine": "água-marinha", "lightgreen": "verde-claro", "burlywood": "madeira", "dodgerblue": "azul fugidio", "darkgray": "cinza-escuro", "lightcyan": "ciano-claro", "powderblue": "azul pólvora", "blueviolet": "violeta azulado", "orchid": "orquídea", "dimgray": "cinza-escuro", "beige": "bege", "fuchsia": "fúcsia", "lavenderblush": "lavanda avermelhada", "hotpink": "rosa quente", "steelblue": "azul metálico", "tomato": "vermelho tomate", "lightpink": "rosa-claro", "limegreen": "verde lima", "indianred": "vermelho oriental", "papayawhip": "mamão papaia", "lightslategray": "ardósia cinza-claro", "gray": "cinza", "mediumorchid": "orquídea temperado", "cornsilk": "fios de milho", "black": "preto", "seagreen": "verde-mar", "darkslateblue": "ardósia azul-escuro", "khaki": "cáqui", "lightblue": "azul-claro", "palegreen": "verde pálido", "azure": "azul-celeste", "peachpuff": "pêssego", "darkolivegreen": "verde-oliva escuro", "yellowgreen": "amarelo esverdeado"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.pt");dijit.nls.loading.pt={"loadingState": "Carregando...", "errorState": "Ocorreu um erro"};dojo.provide("dijit.nls.Textarea");dijit.nls.Textarea._built=true;dojo.provide("dijit.nls.Textarea.pt");dijit.nls.Textarea.pt={"iframeEditTitle": "edit area", "iframeFocusTitle": "edit area frame"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.pt");dijit._editor.nls.commands.pt={"removeFormat": "Remover Formato", "copy": "Copiar", "paste": "Colar", "selectAll": "Selecionar Todos", "insertOrderedList": "Lista Numerada", "insertTable": "Inserir/Editar Tabela", "underline": "Sublinhado", "foreColor": "Cor do Primeiro Plano", "htmlToggle": "Origem HTML", "formatBlock": "Estilo de Parágrafo", "insertHorizontalRule": "Régua Horizontal", "delete": "Excluir ", "insertUnorderedList": "Lista com Marcadores", "tableProp": "Propriedade da Tabela", "insertImage": "Inserir Imagem", "superscript": "Sobrescrito", "subscript": "Subscrito", "createLink": "Criar Link", "undo": "Desfazer", "italic": "Itálico", "fontName": "Nome da Fonte", "justifyLeft": "Alinhar pela Esquerda", "unlink": "Remover Link", "toggleTableBorder": "Alternar Moldura da Tabela", "fontSize": "Tamanho da Fonte", "indent": "Recuar", "redo": "Refazer", "strikethrough": "Tachado", "justifyFull": "Justificar", "justifyCenter": "Alinhar pelo Centro", "hiliteColor": "Cor de segundo plano", "deleteTable": "Excluir Tabela", "outdent": "Avançar", "cut": "Recortar", "plainFormatBlock": "Estilo de Parágrafo", "bold": "Negrito", "systemShortcutFF": "A ação \"${0}\" está disponível apenas no Mozilla Firefox utilizando um atalho do teclado. Utilize ${1}.", "justifyRight": "Alinhar pela Direita", "appleKey": "⌘${0}", "ctrlKey": "ctrl+${0}"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.pt");dojo.cldr.nls.number.pt={"group": ".", "decimal": ",", "scientificFormat": "#E0", "currencySpacing-afterCurrency-currencyMatch": "[:letter:]", "infinity": "∞", "list": ";", "percentSign": "%", "minusSign": "-", "currencySpacing-beforeCurrency-surroundingMatch": "[:digit:]", "currencySpacing-afterCurrency-insertBetween": " ", "nan": "NaN", "nativeZeroDigit": "0", "plusSign": "+", "currencySpacing-afterCurrency-surroundingMatch": "[:digit:]", "currencyFormat": "¤ #,##0.00", "currencySpacing-beforeCurrency-currencyMatch": "[:letter:]", "perMille": "‰", "percentFormat": "#,##0%", "decimalFormat": "#,##0.###", "patternDigit": "#", "currencySpacing-beforeCurrency-insertBetween": " ", "exponential": "E"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.pt");dijit.nls.common.pt={"buttonCancel": "Cancelar ", "buttonSave": "Salvar", "buttonOk": "OK"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.pt");dijit.form.nls.validate.pt={"rangeMessage": "* Esse valor está fora do intervalo.", "invalidMessage": "* O valor digitado não é válido.", "missingMessage": "* Esse valor é necessário."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.pt");dijit.form.nls.ComboBox.pt={"previousMessage": "Opções anteriores", "nextMessage": "Mais opções"};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.pt");dojo.cldr.nls.currency.pt={"EUR_displayName": "Euro", "CHF_displayName": "Franco suíço", "HKD_displayName": "Dólar de Hong Kong", "CAD_displayName": "Dólar canadense", "GBP_displayName": "Libra esterlina britânica", "JPY_displayName": "Iene japonês", "AUD_displayName": "Dólar australiano", "USD_displayName": "Dólar norte-americano", "USD_symbol": "$", "GBP_symbol": "£", "JPY_symbol": "¥", "EUR_symbol": "€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.pt");dojo.cldr.nls.gregorian.pt={"timeFormat-full": "HH'H'mm'm'ss's' z", "eraAbbr": ["a.C.", "d.C."], "dateFormat-medium": "d/MMM/yyyy", "months-format-abbr": ["jan", "fev", "mar", "abr", "mai", "jun", "jul", "ago", "set", "out", "nov", "dez"], "dateFormat-full": "EEEE, d' de 'MMMM' de 'yyyy", "days-format-abbr": ["dom", "seg", "ter", "qua", "qui", "sex", "sáb"], "quarters-format-wide": ["1º trimestre", "2º trimestre", "3º trimestre", "4º trimestre"], "dateFormat-short": "dd-MM-yyyy", "quarters-format-abbreviated": ["T1", "T2", "T3", "T4"], "months-format-wide": ["janeiro", "fevereiro", "março", "abril", "maio", "junho", "julho", "agosto", "setembro", "outubro", "novembro", "dezembro"], "months-standAlone-narrow": ["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], "days-standAlone-narrow": ["D", "S", "T", "Q", "Q", "S", "S"], "dateFormat-long": "d' de 'MMMM' de 'yyyy", "days-format-wide": ["domingo", "segunda-feira", "terça-feira", "quarta-feira", "quinta-feira", "sexta-feira", "sábado"], "dateTimeFormats-appendItem-Second": "{0} ({2}: {1})", "field-dayperiod": "Dayperiod", "field-minute": "Minute", "eraNames": ["BCE", "CE"], "field-weekday": "Day of the Week", "dateTimeFormats-appendItem-Year": "{0} {1}", "field-era": "Era", "field-hour": "Hour", "dateTimeFormats-appendItem-Week": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Timezone": "{0} {1}", "dateTimeFormats-appendItem-Month": "{0} ({2}: {1})", "timeFormat-medium": "HH:mm:ss", "field-zone": "Zone", "dateTimeFormats-appendItem-Minute": "{0} ({2}: {1})", "dateTimeFormat": "{1} {0}", "field-year": "Year", "dateTimeFormats-appendItem-Day": "{0} ({2}: {1})", "field-week": "Week", "timeFormat-long": "HH:mm:ss z", "timeFormat-short": "HH:mm", "field-month": "Month", "dateTimeFormats-appendItem-Quarter": "{0} ({2}: {1})", "pm": "PM", "field-second": "Second", "field-day": "Day", "dateTimeFormats-appendItem-Day-Of-Week": "{0} {1}", "dateTimeFormats-appendItem-Hour": "{0} ({2}: {1})", "am": "AM", "dateTimeFormats-appendItem-Era": "{0} {1}"};dojo.provide("dijit.nls.Textarea");dijit.nls.Textarea._built=true;dojo.provide("dijit.nls.Textarea.pt");dijit.nls.Textarea.pt={"iframeEditTitle": "edit area", "iframeFocusTitle": "edit area frame"};
/trunk/api/js/dojo1.0/dijit/nls/dijit-all_ko-kr.js
New file
0,0 → 1,0
dojo.provide("dijit.nls.dijit-all_ko-kr");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.ko_kr");dojo.nls.colors.ko_kr={"lightsteelblue": "라이트 스틸 블루(light steel blue)", "orangered": "오렌지 레드(orange red)", "midnightblue": "미드나잇 블루(midnight blue)", "cadetblue": "카뎃 블루(cadet blue)", "seashell": "씨쉘(seashell)", "slategrey": "슬레이트 그레이(slate gray)", "coral": "코랄(coral)", "darkturquoise": "다크 터콰즈(dark turquoise)", "antiquewhite": "앤틱 화이트(antique white)", "mediumspringgreen": "미디엄 스프링 그린(medium spring green)", "salmon": "샐몬(salmon)", "darkgrey": "다크 그레이(dark gray)", "ivory": "아이보리(ivory)", "greenyellow": "그린 옐로우(green-yellow)", "mistyrose": "미스티 로즈(misty rose)", "lightsalmon": "라이트 샐몬(light salmon)", "silver": "실버(silver)", "dimgrey": "딤 그레이(dim gray)", "orange": "오렌지(orange)", "white": "화이트(white)", "navajowhite": "나바호 화이트(navajo white)", "royalblue": "로얄 블루(royal blue)", "deeppink": "딥 핑크(deep pink)", "lime": "라임(lime)", "oldlace": "올드 레이스(old lace)", "chartreuse": "샤르트뢰즈(chartreuse)", "darkcyan": "다크 시안(dark cyan)", "yellow": "옐로우(yellow)", "linen": "리넨(linen)", "olive": "올리브(olive)", "gold": "골드(gold)", "lawngreen": "론 그린(lawn green)", "lightyellow": "라이트 옐로우(light yellow)", "tan": "탠(tan)", "darkviolet": "다크 바이올렛(dark violet)", "lightslategrey": "라이트 슬레이트 그레이(light slate gray)", "grey": "그레이(gray)", "darkkhaki": "다크 카키(dark khaki)", "green": "그린(green)", "deepskyblue": "딥 스카이 블루(deep sky blue)", "aqua": "아쿠아(aqua)", "sienna": "시에나(sienna)", "mintcream": "민트 크림(mint cream)", "rosybrown": "로지 브라운(rosy brown)", "mediumslateblue": "미디엄 슬레이트 블루(medium slate blue)", "magenta": "마젠타(magenta)", "lightseagreen": "라이트 씨 그린(light sea green)", "cyan": "시안(cyan)", "olivedrab": "올리브 드랩(olive drab)", "darkgoldenrod": "다크 골든로드(dark goldenrod)", "slateblue": "슬레이트 블루(slate blue)", "mediumaquamarine": "미디엄 아쿠아마린(medium aquamarine)", "lavender": "라벤더(lavender)", "mediumseagreen": "미디엄 씨 그린(medium sea green)", "maroon": "마룬(maroon)", "darkslategray": "다크 슬레이트 그레이(dark slate gray)", "mediumturquoise": "미디엄 터콰즈(medium turquoise)", "ghostwhite": "고스트 화이트(ghost white)", "darkblue": "다크 블루(dark blue)", "mediumvioletred": "미디엄 바이올렛 레드(medium violet-red)", "brown": "브라운(brown)", "lightgray": "라이트 그레이(light gray)", "sandybrown": "샌디 브라운(sandy brown)", "pink": "핑크(pink)", "firebrick": "파이어 브릭(fire brick)", "indigo": "인디고(indigo)", "snow": "스노우(snow)", "darkorchid": "다크 오키드(dark orchid)", "turquoise": "터콰즈(turquoise)", "chocolate": "초콜렛(chocolate)", "springgreen": "스프링 그린(spring green)", "moccasin": "모카신(moccasin)", "navy": "네이비(navy)", "lemonchiffon": "레몬 쉬폰(lemon chiffon)", "teal": "틸(teal)", "floralwhite": "플로랄 화이트(floral white)", "cornflowerblue": "콘플라워 블루(cornflower blue)", "paleturquoise": "페일 터콰즈(pale turquoise)", "purple": "퍼플(purple)", "gainsboro": "게인스브로(gainsboro)", "plum": "플럼(plum)", "red": "레드(red)", "blue": "블루(blue)", "forestgreen": "포레스트 그린(forest green)", "darkgreen": "다크 그린(dark green)", "honeydew": "허니듀(honeydew)", "darkseagreen": "다크 씨 그린(dark sea green)", "lightcoral": "라이트 코랄(light coral)", "palevioletred": "페일 바이올렛 레드(pale violet-red)", "mediumpurple": "미디엄 퍼플(medium purple)", "saddlebrown": "새들 브라운(saddle brown)", "darkmagenta": "다크 마젠타(dark magenta)", "thistle": "시슬(thistle)", "whitesmoke": "화이트 스모크(white smoke)", "wheat": "휘트(wheat)", "violet": "바이올렛(violet)", "lightskyblue": "라이트 스카이 블루(light sky blue)", "goldenrod": "골든로드(goldenrod)", "mediumblue": "미디엄 블루(medium blue)", "skyblue": "스카이 블루(sky blue)", "crimson": "크림슨(crimson)", "darksalmon": "다크 샐몬(dark salmon)", "darkred": "다크 레드(dark red)", "darkslategrey": "다크 슬레이트 그레이(dark slate gray)", "peru": "페루(peru)", "lightgrey": "라이트 그레이(light gray)", "lightgoldenrodyellow": "라이트 골든로드 옐로우(light goldenrod yellow)", "blanchedalmond": "블랜치 아몬드(blanched almond)", "aliceblue": "앨리스 블루(alice blue)", "bisque": "비스크(bisque)", "slategray": "슬레이트 그레이(slate gray)", "palegoldenrod": "페일 골든로드(pale goldenrod)", "darkorange": "다크 오렌지(dark orange)", "aquamarine": "아쿠아마린(aquamarine)", "lightgreen": "라이트 그린(light green)", "burlywood": "벌리우드(burlywood)", "dodgerblue": "다저 블루(dodger blue)", "darkgray": "다크 그레이(dark gray)", "lightcyan": "라이트 시안(light cyan)", "powderblue": "파우더 블루(powder blue)", "blueviolet": "블루 바이올렛(blue-violet)", "orchid": "오키드(orchid)", "dimgray": "딤 그레이(dim gray)", "beige": "베이지(beige)", "fuchsia": "후크샤(fuchsia)", "lavenderblush": "라벤더 블러쉬(lavender blush)", "hotpink": "핫 핑크(hot pink)", "steelblue": "스틸 블루(steel blue)", "tomato": "토마토(tomato)", "lightpink": "라이트 핑크(light pink)", "limegreen": "라임 그린(lime green)", "indianred": "인디안 레드(indian red)", "papayawhip": "파파야 휩(papaya whip)", "lightslategray": "라이트 슬레이트 그레이(light slate gray)", "gray": "그레이(gray)", "mediumorchid": "미디엄 오키드(medium orchid)", "cornsilk": "콘실크(cornsilk)", "black": "블랙(black)", "seagreen": "씨 그린(sea green)", "darkslateblue": "다크 슬레이트 블루(dark slate blue)", "khaki": "카키(khaki)", "lightblue": "라이트 블루(light blue)", "palegreen": "페일 그린(pale green)", "azure": "애쥬어(azure)", "peachpuff": "피치 퍼프(peach puff)", "darkolivegreen": "다크 올리브 그린(dark olive green)", "yellowgreen": "옐로우 그린(yellow green)"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.ko_kr");dijit.nls.loading.ko_kr={"loadingState": "로드 중...", "errorState": "죄송합니다. 오류가 발생했습니다."};dojo.provide("dijit.nls.Textarea");dijit.nls.Textarea._built=true;dojo.provide("dijit.nls.Textarea.ko_kr");dijit.nls.Textarea.ko_kr={"iframeEditTitle": "edit area", "iframeFocusTitle": "edit area frame"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.ko_kr");dijit._editor.nls.commands.ko_kr={"removeFormat": "형식 제거", "copy": "복사", "paste": "붙여넣기", "selectAll": "모두 선택", "insertOrderedList": "번호 목록", "insertTable": "테이블 삽입/편집", "underline": "밑줄", "foreColor": "전경색", "htmlToggle": "HTML 소스", "formatBlock": "단락 양식", "insertHorizontalRule": "수평 자", "delete": "삭제", "insertUnorderedList": "글머리표 목록", "tableProp": "테이블 특성", "insertImage": "이미지 삽입", "superscript": "위첨자", "subscript": "아래첨자", "createLink": "링크 작성", "undo": "실행 취소", "italic": "이탤릭체", "fontName": "글꼴 이름", "justifyLeft": "왼쪽 맞춤", "unlink": "링크 제거", "toggleTableBorder": "토글 테이블 경계", "fontSize": "글꼴 크기", "indent": "들여쓰기", "redo": "다시 실행", "strikethrough": "취소선", "justifyFull": "양쪽 맞춤", "justifyCenter": "가운데 맞춤", "hiliteColor": "배경색", "deleteTable": "테이블 삭제", "outdent": "내어쓰기", "cut": "잘라내기", "plainFormatBlock": "단락 양식", "bold": "굵은체", "systemShortcutFF": "\"${0}\" 조치는 키보드 바로 가기를 사용하는 Mozilla Firefox에서만 사용 가능합니다. ${1} 사용.", "justifyRight": "오른쪽 맞춤", "appleKey": "⌘${0}", "ctrlKey": "ctrl+${0}"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.ko_kr");dojo.cldr.nls.number.ko_kr={"currencyFormat": "¤#,##0.00", "scientificFormat": "#E0", "currencySpacing-afterCurrency-currencyMatch": "[:letter:]", "infinity": "∞", "list": ";", "percentSign": "%", "minusSign": "-", "currencySpacing-beforeCurrency-surroundingMatch": "[:digit:]", "currencySpacing-afterCurrency-insertBetween": " ", "nan": "NaN", "nativeZeroDigit": "0", "plusSign": "+", "currencySpacing-afterCurrency-surroundingMatch": "[:digit:]", "currencySpacing-beforeCurrency-currencyMatch": "[:letter:]", "perMille": "‰", "group": ",", "percentFormat": "#,##0%", "decimalFormat": "#,##0.###", "decimal": ".", "patternDigit": "#", "currencySpacing-beforeCurrency-insertBetween": " ", "exponential": "E"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.ko_kr");dijit.nls.common.ko_kr={"buttonCancel": "취소", "buttonSave": "저장", "buttonOk": "확인"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.ko_kr");dijit.form.nls.validate.ko_kr={"rangeMessage": "* 이 값은 범위를 벗어납니다. ", "invalidMessage": "* 입력한 값이 유효하지 않습니다. ", "missingMessage": "* 이 값은 필수입니다. "};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.ko_kr");dijit.form.nls.ComboBox.ko_kr={"previousMessage": "이전 선택사항", "nextMessage": "기타 선택사항"};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.ko_kr");dojo.cldr.nls.currency.ko_kr={"HKD_displayName": "홍콩 달러", "CHF_displayName": "스위스 프랑달러", "JPY_symbol": "¥", "CAD_displayName": "캐나다 달러", "USD_symbol": "US$", "AUD_displayName": "호주 달러", "JPY_displayName": "일본 엔화", "USD_displayName": "미국 달러", "GBP_displayName": "영국령 파운드 스털링", "EUR_displayName": "유로화", "GBP_symbol": "£", "EUR_symbol": "€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.ko_kr");dojo.cldr.nls.gregorian.ko_kr={"timeFormat-medium": "a h:mm:ss", "timeFormat-short": "a h:mm", "dateFormat-medium": "yyyy. MM. dd", "pm": "오후", "timeFormat-full": "a hh'시' mm'분' ss'초' z", "months-standAlone-narrow": ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"], "eraNames": ["서력기원전", "서력기원"], "am": "오전", "days-standAlone-narrow": ["일", "월", "화", "수", "목", "금", "토"], "dateFormat-long": "yyyy'년' M'월' d'일'", "dateFormat-short": "yy. MM. dd", "months-format-wide": ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"], "months-format-abbr": ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"], "days-format-wide": ["일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일"], "timeFormat-long": "a hh'시' mm'분' ss'초'", "eraAbbr": ["기원전", "서기"], "dateFormat-full": "yyyy'년' M'월' d'일' EEEE", "days-format-abbr": ["일", "월", "화", "수", "목", "금", "토"], "dateTimeFormats-appendItem-Second": "{0} ({2}: {1})", "field-dayperiod": "Dayperiod", "field-minute": "Minute", "field-weekday": "Day of the Week", "dateTimeFormats-appendItem-Year": "{0} {1}", "field-era": "Era", "field-hour": "Hour", "dateTimeFormats-appendItem-Week": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Timezone": "{0} {1}", "dateTimeFormats-appendItem-Month": "{0} ({2}: {1})", "field-zone": "Zone", "dateTimeFormats-appendItem-Minute": "{0} ({2}: {1})", "quarters-format-abbreviated": ["Q1", "Q2", "Q3", "Q4"], "dateTimeFormat": "{1} {0}", "field-year": "Year", "dateTimeFormats-appendItem-Day": "{0} ({2}: {1})", "field-week": "Week", "field-month": "Month", "dateTimeFormats-appendItem-Quarter": "{0} ({2}: {1})", "field-second": "Second", "field-day": "Day", "dateTimeFormats-appendItem-Day-Of-Week": "{0} {1}", "dateTimeFormats-appendItem-Hour": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Era": "{0} {1}", "quarters-format-wide": ["Q1", "Q2", "Q3", "Q4"]};dojo.provide("dijit.nls.Textarea");dijit.nls.Textarea._built=true;dojo.provide("dijit.nls.Textarea.ko_kr");dijit.nls.Textarea.ko_kr={"iframeEditTitle": "edit area", "iframeFocusTitle": "edit area frame"};
/trunk/api/js/dojo1.0/dijit/nls/dijit-all_ROOT.js
New file
0,0 → 1,0
dojo.provide("dijit.nls.dijit-all_ROOT");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.ROOT");dojo.nls.colors.ROOT={"lightsteelblue": "light steel blue", "orangered": "orange red", "midnightblue": "midnight blue", "cadetblue": "cadet blue", "seashell": "seashell", "slategrey": "slate gray", "coral": "coral", "darkturquoise": "dark turquoise", "antiquewhite": "antique white", "mediumspringgreen": "medium spring green", "salmon": "salmon", "darkgrey": "dark gray", "ivory": "ivory", "greenyellow": "green-yellow", "mistyrose": "misty rose", "lightsalmon": "light salmon", "silver": "silver", "dimgrey": "dim gray", "orange": "orange", "white": "white", "navajowhite": "navajo white", "royalblue": "royal blue", "deeppink": "deep pink", "lime": "lime", "oldlace": "old lace", "chartreuse": "chartreuse", "darkcyan": "dark cyan", "yellow": "yellow", "linen": "linen", "olive": "olive", "gold": "gold", "lawngreen": "lawn green", "lightyellow": "light yellow", "tan": "tan", "darkviolet": "dark violet", "lightslategrey": "light slate gray", "grey": "gray", "darkkhaki": "dark khaki", "green": "green", "deepskyblue": "deep sky blue", "aqua": "aqua", "sienna": "sienna", "mintcream": "mint cream", "rosybrown": "rosy brown", "mediumslateblue": "medium slate blue", "magenta": "magenta", "lightseagreen": "light sea green", "cyan": "cyan", "olivedrab": "olive drab", "darkgoldenrod": "dark goldenrod", "slateblue": "slate blue", "mediumaquamarine": "medium aquamarine", "lavender": "lavender", "mediumseagreen": "medium sea green", "maroon": "maroon", "darkslategray": "dark slate gray", "mediumturquoise": "medium turquoise", "ghostwhite": "ghost white", "darkblue": "dark blue", "mediumvioletred": "medium violet-red", "brown": "brown", "lightgray": "light gray", "sandybrown": "sandy brown", "pink": "pink", "firebrick": "fire brick", "indigo": "indigo", "snow": "snow", "darkorchid": "dark orchid", "turquoise": "turquoise", "chocolate": "chocolate", "springgreen": "spring green", "moccasin": "moccasin", "navy": "navy", "lemonchiffon": "lemon chiffon", "teal": "teal", "floralwhite": "floral white", "cornflowerblue": "cornflower blue", "paleturquoise": "pale turquoise", "purple": "purple", "gainsboro": "gainsboro", "plum": "plum", "red": "red", "blue": "blue", "forestgreen": "forest green", "darkgreen": "dark green", "honeydew": "honeydew", "darkseagreen": "dark sea green", "lightcoral": "light coral", "palevioletred": "pale violet-red", "mediumpurple": "medium purple", "saddlebrown": "saddle brown", "darkmagenta": "dark magenta", "thistle": "thistle", "whitesmoke": "white smoke", "wheat": "wheat", "violet": "violet", "lightskyblue": "light sky blue", "goldenrod": "goldenrod", "mediumblue": "medium blue", "skyblue": "sky blue", "crimson": "crimson", "darksalmon": "dark salmon", "darkred": "dark red", "darkslategrey": "dark slate gray", "peru": "peru", "lightgrey": "light gray", "lightgoldenrodyellow": "light goldenrod yellow", "blanchedalmond": "blanched almond", "aliceblue": "alice blue", "bisque": "bisque", "slategray": "slate gray", "palegoldenrod": "pale goldenrod", "darkorange": "dark orange", "aquamarine": "aquamarine", "lightgreen": "light green", "burlywood": "burlywood", "dodgerblue": "dodger blue", "darkgray": "dark gray", "lightcyan": "light cyan", "powderblue": "powder blue", "blueviolet": "blue-violet", "orchid": "orchid", "dimgray": "dim gray", "beige": "beige", "fuchsia": "fuchsia", "lavenderblush": "lavender blush", "hotpink": "hot pink", "steelblue": "steel blue", "tomato": "tomato", "lightpink": "light pink", "limegreen": "lime green", "indianred": "indian red", "papayawhip": "papaya whip", "lightslategray": "light slate gray", "gray": "gray", "mediumorchid": "medium orchid", "cornsilk": "cornsilk", "black": "black", "seagreen": "sea green", "darkslateblue": "dark slate blue", "khaki": "khaki", "lightblue": "light blue", "palegreen": "pale green", "azure": "azure", "peachpuff": "peach puff", "darkolivegreen": "dark olive green", "yellowgreen": "yellow green"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.ROOT");dijit.nls.loading.ROOT={"loadingState": "Loading...", "errorState": "Sorry, an error occurred"};dojo.provide("dijit.nls.Textarea");dijit.nls.Textarea._built=true;dojo.provide("dijit.nls.Textarea.ROOT");dijit.nls.Textarea.ROOT={"iframeEditTitle": "edit area", "iframeFocusTitle": "edit area frame"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.ROOT");dijit._editor.nls.commands.ROOT={"removeFormat": "Remove Format", "copy": "Copy", "paste": "Paste", "selectAll": "Select All", "insertOrderedList": "Numbered List", "insertTable": "Insert/Edit Table", "underline": "Underline", "foreColor": "Foreground Color", "htmlToggle": "HTML Source", "formatBlock": "Paragraph Style", "insertHorizontalRule": "Horizontal Rule", "delete": "Delete", "appleKey": "⌘${0}", "insertUnorderedList": "Bullet List", "tableProp": "Table Property", "insertImage": "Insert Image", "superscript": "Superscript", "subscript": "Subscript", "createLink": "Create Link", "undo": "Undo", "italic": "Italic", "fontName": "Font Name", "justifyLeft": "Align Left", "unlink": "Remove Link", "toggleTableBorder": "Toggle Table Border", "ctrlKey": "ctrl+${0}", "fontSize": "Font Size", "indent": "Indent", "redo": "Redo", "strikethrough": "Strikethrough", "justifyFull": "Justify", "justifyCenter": "Align Center", "hiliteColor": "Background Color", "deleteTable": "Delete Table", "outdent": "Outdent", "cut": "Cut", "plainFormatBlock": "Paragraph Style", "bold": "Bold", "systemShortcutFF": "The \"${0}\" action is only available in Mozilla Firefox using a keyboard shortcut. Use ${1}.", "justifyRight": "Align Right"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.ROOT");dojo.cldr.nls.number.ROOT={"scientificFormat": "#E0", "currencySpacing-afterCurrency-currencyMatch": "[:letter:]", "infinity": "∞", "list": ";", "percentSign": "%", "minusSign": "-", "currencySpacing-beforeCurrency-surroundingMatch": "[:digit:]", "currencySpacing-afterCurrency-insertBetween": " ", "nan": "NaN", "nativeZeroDigit": "0", "plusSign": "+", "currencySpacing-afterCurrency-surroundingMatch": "[:digit:]", "currencyFormat": "¤ #,##0.00", "currencySpacing-beforeCurrency-currencyMatch": "[:letter:]", "perMille": "‰", "group": ",", "percentFormat": "#,##0%", "decimalFormat": "#,##0.###", "decimal": ".", "patternDigit": "#", "currencySpacing-beforeCurrency-insertBetween": " ", "exponential": "E"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.ROOT");dijit.nls.common.ROOT={"buttonCancel": "Cancel", "buttonSave": "Save", "buttonOk": "OK"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.ROOT");dijit.form.nls.validate.ROOT={"rangeMessage": "* This value is out of range.", "invalidMessage": "* The value entered is not valid.", "missingMessage": "* This value is required."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.ROOT");dijit.form.nls.ComboBox.ROOT={"previousMessage": "Previous choices", "nextMessage": "More choices"};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.ROOT");dojo.cldr.nls.currency.ROOT={"USD_symbol": "$", "EUR_displayName": "EUR", "GBP_displayName": "GBP", "JPY_displayName": "JPY", "GBP_symbol": "£", "JPY_symbol": "¥", "EUR_symbol": "€", "USD_displayName": "USD"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.ROOT");dojo.cldr.nls.gregorian.ROOT={"dateTimeFormats-appendItem-Second": "{0} ({2}: {1})", "field-dayperiod": "Dayperiod", "field-minute": "Minute", "eraNames": ["BCE", "CE"], "field-weekday": "Day of the Week", "months-standAlone-narrow": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"], "dateTimeFormats-appendItem-Year": "{0} {1}", "field-era": "Era", "field-hour": "Hour", "timeFormat-full": "HH:mm:ss z", "dateTimeFormats-appendItem-Week": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Timezone": "{0} {1}", "dateTimeFormats-appendItem-Month": "{0} ({2}: {1})", "days-standAlone-narrow": ["1", "2", "3", "4", "5", "6", "7"], "eraAbbr": ["BCE", "CE"], "dateFormat-long": "yyyy MMMM d", "timeFormat-medium": "HH:mm:ss", "field-zone": "Zone", "dateTimeFormats-appendItem-Minute": "{0} ({2}: {1})", "dateFormat-medium": "yyyy MMM d", "quarters-format-abbreviated": ["Q1", "Q2", "Q3", "Q4"], "dateTimeFormat": "{1} {0}", "field-year": "Year", "dateTimeFormats-appendItem-Day": "{0} ({2}: {1})", "field-week": "Week", "timeFormat-long": "HH:mm:ss z", "months-format-abbr": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"], "timeFormat-short": "HH:mm", "field-month": "Month", "dateTimeFormats-appendItem-Quarter": "{0} ({2}: {1})", "days-format-abbr": ["1", "2", "3", "4", "5", "6", "7"], "pm": "PM", "field-second": "Second", "field-day": "Day", "dateTimeFormats-appendItem-Day-Of-Week": "{0} {1}", "dateTimeFormats-appendItem-Hour": "{0} ({2}: {1})", "am": "AM", "dateFormat-short": "yy/MM/dd", "dateFormat-full": "EEEE, yyyy MMMM dd", "months-format-wide": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"], "dateTimeFormats-appendItem-Era": "{0} {1}", "quarters-format-wide": ["Q1", "Q2", "Q3", "Q4"], "days-format-wide": ["1", "2", "3", "4", "5", "6", "7"]};dojo.provide("dijit.nls.Textarea");dijit.nls.Textarea._built=true;dojo.provide("dijit.nls.Textarea.ROOT");dijit.nls.Textarea.ROOT={"iframeEditTitle": "edit area", "iframeFocusTitle": "edit area frame"};
/trunk/api/js/dojo1.0/dijit/nls/Textarea.js
New file
0,0 → 1,0
({"iframeEditTitle": "edit area", "iframeFocusTitle": "edit area frame"})
/trunk/api/js/dojo1.0/dijit/nls/dijit-all_it-it.js
New file
0,0 → 1,0
dojo.provide("dijit.nls.dijit-all_it-it");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.it_it");dojo.nls.colors.it_it={"lightsteelblue": "blu acciao chiaro", "orangered": "vermiglio", "midnightblue": "blu melanzana scuro", "cadetblue": "verde acqua", "seashell": "sabbia rosa", "slategrey": "grigio ardesia", "coral": "corallo", "darkturquoise": "turchese scuro", "antiquewhite": "bianco antico", "mediumspringgreen": "verde primavera medio", "salmon": "salmone", "darkgrey": "grigio scuro", "ivory": "avorio", "greenyellow": "giallo verde", "mistyrose": "rosa pallido", "lightsalmon": "salmone chiaro", "silver": "grigio 25%", "dimgrey": "grigio 80%", "orange": "arancione", "white": "bianco", "navajowhite": "pesca chiaro", "royalblue": "blu reale", "deeppink": "ciclamino", "lime": "verde fluorescente", "oldlace": "mandorla", "chartreuse": "verde brillante", "darkcyan": "ciano scuro", "yellow": "giallo", "linen": "lino", "olive": "verde oliva", "gold": "oro", "lawngreen": "verde prato", "lightyellow": "giallo chiaro", "tan": "grigio bruno", "darkviolet": "viola scuro", "lightslategrey": "grigio ardesia chiaro", "grey": "grigio", "darkkhaki": "kaki scuro", "green": "verde", "deepskyblue": "azzurro cielo scuro", "aqua": "acqua", "sienna": "cuoio", "mintcream": "bianco nuvola", "rosybrown": "marrone rosato", "mediumslateblue": "blu ardesia medio", "magenta": "magenta", "lightseagreen": "verde mare chiaro", "cyan": "ciano", "olivedrab": "marrone oliva", "darkgoldenrod": "ocra scuro", "slateblue": "blu ardesia", "mediumaquamarine": "acquamarina medio", "lavender": "lavanda", "mediumseagreen": "verde mare medio", "maroon": "scarlatto", "darkslategray": "grigio ardesia scuro", "mediumturquoise": "turchese medio", "ghostwhite": "bianco gesso", "darkblue": "blu scuro", "mediumvioletred": "vinaccia", "brown": "marrone", "lightgray": "grigio chiaro", "sandybrown": "marrone sabbia", "pink": "rosa", "firebrick": "rosso mattone", "indigo": "indaco", "snow": "neve", "darkorchid": "orchidea scuro", "turquoise": "turchese", "chocolate": "cioccolato", "springgreen": "verde primavera", "moccasin": "mocassino", "navy": "blu notte", "lemonchiffon": "caffelatte chiaro", "teal": "verde turchese", "floralwhite": "bianco giglio", "cornflowerblue": "blu fiordaliso", "paleturquoise": "turchese pallido", "purple": "porpora", "gainsboro": "grigio 10%", "plum": "prugna", "red": "rosso", "blue": "blu", "forestgreen": "verde foresta", "darkgreen": "verde scuro", "honeydew": "bianco germoglio", "darkseagreen": "verde mare scuro", "lightcoral": "rosa corallo", "palevioletred": "vinaccia chiaro", "mediumpurple": "porpora medio", "saddlebrown": "cacao", "darkmagenta": "magenta scuro", "thistle": "rosa cenere", "whitesmoke": "bianco fumo", "wheat": "sabbia", "violet": "viola", "lightskyblue": "azzurro cielo chiaro", "goldenrod": "ocra gialla", "mediumblue": "blu medio", "skyblue": "azzurro cielo", "crimson": "cremisi", "darksalmon": "salmone scuro", "darkred": "rosso scuro", "darkslategrey": "grigio ardesia scuro", "peru": "marrone terra bruciata", "lightgrey": "grigio chiaro", "lightgoldenrodyellow": "giallo tenue", "blanchedalmond": "mandorla chiaro", "aliceblue": "blu alice", "bisque": "incarnato", "slategray": "grigio ardesia", "palegoldenrod": "giallo zolfo chiaro", "darkorange": "arancione scuro", "aquamarine": "acquamarina", "lightgreen": "verde chiaro", "burlywood": "tabacco", "dodgerblue": "blu d'oriente", "darkgray": "grigio scuro", "lightcyan": "ciano chiaro", "powderblue": "azzurro polvere", "blueviolet": "blu violetto", "orchid": "orchidea", "dimgray": "grigio 80%", "beige": "beige", "fuchsia": "fucsia", "lavenderblush": "bianco rosato", "hotpink": "rosa acceso", "steelblue": "blu acciao", "tomato": "pomodoro", "lightpink": "rosa chiaro", "limegreen": "verde lime", "indianred": "terra indiana", "papayawhip": "cipria", "lightslategray": "grigio ardesia chiaro", "gray": "grigio", "mediumorchid": "orchidea medio", "cornsilk": "crema", "black": "nero", "seagreen": "verde mare", "darkslateblue": "blu ardesia scuro", "khaki": "kaki", "lightblue": "azzurro", "palegreen": "verde pallido", "azure": "azzurro ghiaccio", "peachpuff": "pesca", "darkolivegreen": "verde oliva scuro", "yellowgreen": "giallo verde"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.it_it");dijit.nls.loading.it_it={"loadingState": "Caricamento in corso...", "errorState": "Si è verificato un errore"};dojo.provide("dijit.nls.Textarea");dijit.nls.Textarea._built=true;dojo.provide("dijit.nls.Textarea.it_it");dijit.nls.Textarea.it_it={"iframeEditTitle": "edit area", "iframeFocusTitle": "edit area frame"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.it_it");dijit._editor.nls.commands.it_it={"removeFormat": "Rimuovi formato", "copy": "Copia", "paste": "Incolla", "selectAll": "Seleziona tutto", "insertOrderedList": "Elenco numerato", "insertTable": "Inserisci/Modifica tabella", "underline": "Sottolineato", "foreColor": "Colore primo piano", "htmlToggle": "Origine HTML", "formatBlock": "Stile paragrafo", "insertHorizontalRule": "Righello orizzontale", "delete": "Elimina", "insertUnorderedList": "Elenco puntato", "tableProp": "Proprietà tabella", "insertImage": "Inserisci immagine", "superscript": "Apice", "subscript": "Pedice", "createLink": "Crea collegamento", "undo": "Annulla", "italic": "Corsivo", "fontName": "Nome carattere", "justifyLeft": "Allinea a sinistra", "unlink": "Rimuovi collegamento", "toggleTableBorder": "Mostra/Nascondi margine tabella", "fontSize": "Dimensione carattere", "indent": "Rientra", "redo": "Ripristina", "strikethrough": "Barrato", "justifyFull": "Giustifica", "justifyCenter": "Allinea al centro", "hiliteColor": "Colore sfondo", "deleteTable": "Elimina tabella", "outdent": "Rimuovi rientro", "cut": "Taglia", "plainFormatBlock": "Stile paragrafo", "bold": "Grassetto", "systemShortcutFF": "L'azione \"${0}\" è disponibile solo in Mozilla Firefox tramite tasti di scelta rapida. Utilizzare ${1}.", "justifyRight": "Allinea a destra", "appleKey": "⌘${0}", "ctrlKey": "ctrl+${0}"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.it_it");dojo.cldr.nls.number.it_it={"group": ".", "decimal": ",", "scientificFormat": "#E0", "currencySpacing-afterCurrency-currencyMatch": "[:letter:]", "infinity": "∞", "list": ";", "percentSign": "%", "minusSign": "-", "currencySpacing-beforeCurrency-surroundingMatch": "[:digit:]", "currencySpacing-afterCurrency-insertBetween": " ", "nan": "NaN", "nativeZeroDigit": "0", "plusSign": "+", "currencySpacing-afterCurrency-surroundingMatch": "[:digit:]", "currencyFormat": "¤ #,##0.00", "currencySpacing-beforeCurrency-currencyMatch": "[:letter:]", "perMille": "‰", "percentFormat": "#,##0%", "decimalFormat": "#,##0.###", "patternDigit": "#", "currencySpacing-beforeCurrency-insertBetween": " ", "exponential": "E"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.it_it");dijit.nls.common.it_it={"buttonCancel": "Annulla", "buttonSave": "Salva", "buttonOk": "OK"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.it_it");dijit.form.nls.validate.it_it={"rangeMessage": "* Questo valore non è compreso nell'intervallo.", "invalidMessage": "* Il valore immesso non è valido.", "missingMessage": "* Questo valore è obbligatorio."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.it_it");dijit.form.nls.ComboBox.it_it={"previousMessage": "Scelte precedenti", "nextMessage": "Altre scelte"};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.it_it");dojo.cldr.nls.currency.it_it={"HKD_displayName": "Dollaro di Hong Kong", "CHF_displayName": "Franco Svizzero", "CHF_symbol": "SFr.", "CAD_displayName": "Dollaro Canadese", "AUD_displayName": "Dollaro Australiano", "JPY_displayName": "Yen Giapponese", "USD_displayName": "Dollaro Statunitense", "GBP_displayName": "Sterlina Inglese", "EUR_displayName": "Euro", "USD_symbol": "$", "GBP_symbol": "£", "JPY_symbol": "¥", "EUR_symbol": "€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.it_it");dojo.cldr.nls.gregorian.it_it={"timeFormat-long": "H:mm:ss z", "quarters-format-abbreviated": ["T1", "T2", "T3", "T4"], "dateFormat-medium": "dd/MMM/yy", "field-second": "secondo", "field-week": "settimana", "pm": "p.", "months-standAlone-narrow": ["G", "F", "M", "A", "M", "G", "L", "A", "S", "O", "N", "D"], "am": "m.", "days-standAlone-narrow": ["D", "L", "M", "M", "G", "V", "S"], "field-year": "anno", "field-minute": "minuto", "field-hour": "ora", "dateFormat-long": "dd MMMM yyyy", "field-day": "giorno", "field-dayperiod": "periodo del giorno", "field-month": "mese", "dateFormat-short": "dd/MM/yy", "months-format-wide": ["gennaio", "febbraio", "marzo", "aprile", "maggio", "giugno", "luglio", "agosto", "settembre", "ottobre", "novembre", "dicembre"], "field-era": "era", "months-format-abbr": ["gen", "feb", "mar", "apr", "mag", "giu", "lug", "ago", "set", "ott", "nov", "dic"], "days-format-wide": ["domenica", "lunedì", "martedì", "mercoledì", "giovedì", "venerdì", "sabato"], "eraAbbr": ["aC", "dC"], "quarters-format-wide": ["1o trimestre", "2o trimestre", "3o trimestre", "4o trimestre"], "dateFormat-full": "EEEE d MMMM yyyy", "field-weekday": "giorno della settimana", "days-format-abbr": ["dom", "lun", "mar", "mer", "gio", "ven", "sab"], "field-zone": "zona", "dateTimeFormats-appendItem-Second": "{0} ({2}: {1})", "eraNames": ["BCE", "CE"], "dateTimeFormats-appendItem-Year": "{0} {1}", "timeFormat-full": "HH:mm:ss z", "dateTimeFormats-appendItem-Week": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Timezone": "{0} {1}", "dateTimeFormats-appendItem-Month": "{0} ({2}: {1})", "timeFormat-medium": "HH:mm:ss", "dateTimeFormats-appendItem-Minute": "{0} ({2}: {1})", "dateTimeFormat": "{1} {0}", "dateTimeFormats-appendItem-Day": "{0} ({2}: {1})", "timeFormat-short": "HH:mm", "dateTimeFormats-appendItem-Quarter": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Day-Of-Week": "{0} {1}", "dateTimeFormats-appendItem-Hour": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Era": "{0} {1}"};dojo.provide("dijit.nls.Textarea");dijit.nls.Textarea._built=true;dojo.provide("dijit.nls.Textarea.it_it");dijit.nls.Textarea.it_it={"iframeEditTitle": "edit area", "iframeFocusTitle": "edit area frame"};
/trunk/api/js/dojo1.0/dijit/nls/dijit-all_de.js
New file
0,0 → 1,0
dojo.provide("dijit.nls.dijit-all_de");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.de");dojo.nls.colors.de={"lightsteelblue": "Helles Stahlblau", "orangered": "Orangerot", "midnightblue": "Mitternachtblau", "cadetblue": "Kadettenblau", "seashell": "Muschelweiß", "slategrey": "Schiefergrau", "coral": "Koralle", "darkturquoise": "Dunkeltürkis", "antiquewhite": "Antikweiß", "mediumspringgreen": "Mittelfrühlingsgrün", "salmon": "Lachs", "darkgrey": "Dunkelgrau", "ivory": "Elfenbein", "greenyellow": "Grüngelb", "mistyrose": "Blassrose", "lightsalmon": "Helllachs", "silver": "Silbergrau", "dimgrey": "Blassgrau", "orange": "Orange", "white": "Weiß", "navajowhite": "Navajo-weiß", "royalblue": "Königsblau", "deeppink": "Tiefrosa", "lime": "Limone", "oldlace": "Alte Spitze", "chartreuse": "Helles Gelbgrün", "darkcyan": "Dunkelzyan", "yellow": "Gelb", "linen": "Leinen", "olive": "Oliv", "gold": "Gold", "lawngreen": "Grasgrün", "lightyellow": "Hellgelb", "tan": "Hautfarben", "darkviolet": "Dunkelviolett", "lightslategrey": "Helles Schiefergrau", "grey": "Grau", "darkkhaki": "Dunkelkhaki", "green": "Grün", "deepskyblue": "Dunkles Himmelblau", "aqua": "Wasserblau", "sienna": "Sienna", "mintcream": "Mintcreme", "rosybrown": "Rosigbraun", "mediumslateblue": "Mittelschieferblau ", "magenta": "Magenta", "lightseagreen": "Helles Meergrün", "cyan": "Zyan", "olivedrab": "Olivgrau", "darkgoldenrod": "Dunkelgoldgelb", "slateblue": "Schieferblau", "mediumaquamarine": "Mittelaquamarin", "lavender": "Lavendelblau", "mediumseagreen": "Mittelmeeresgrün", "maroon": "Kastanienbraun", "darkslategray": "Dunkelschiefergrau", "mediumturquoise": "Mitteltürkis ", "ghostwhite": "Geisterweiß", "darkblue": "Dunkelblau", "mediumvioletred": "Mittelviolettrot ", "brown": "Braun", "lightgray": "Hellgrau", "sandybrown": "Sandbraun", "pink": "Rosa", "firebrick": "Schamottestein", "indigo": "Indigoblau", "snow": "Schneeweiß", "darkorchid": "Dunkelorchidee", "turquoise": "Türkis", "chocolate": "Schokoladenbraun", "springgreen": "Frühlingsgrün", "moccasin": "Mokassin", "navy": "Marineblau", "lemonchiffon": "Zitronenchiffon", "teal": "Smaragdgrün", "floralwhite": "Blütenweiß", "cornflowerblue": "Kornblumenblau", "paleturquoise": "Blasstürkis", "purple": "Purpurrot", "gainsboro": "Gainsboro", "plum": "Pflaume", "red": "Rot", "blue": "Blau", "forestgreen": "Forstgrün", "darkgreen": "Dunkelgrün", "honeydew": "Honigtau", "darkseagreen": "Dunkles Meergrün", "lightcoral": "Hellkoralle", "palevioletred": "Blassviolettrot ", "mediumpurple": "Mittelpurpur", "saddlebrown": "Sattelbraun", "darkmagenta": "Dunkelmagenta", "thistle": "Distel", "whitesmoke": "Rauchweiß", "wheat": "Weizen", "violet": "Violett", "lightskyblue": "Helles Himmelblau", "goldenrod": "Goldgelb", "mediumblue": "Mittelblau", "skyblue": "Himmelblau", "crimson": "Karmesinrot", "darksalmon": "Dunkellachs", "darkred": "Dunkelrot", "darkslategrey": "Dunkelschiefergrau", "peru": "Peru", "lightgrey": "Hellgrau", "lightgoldenrodyellow": "Hellgoldgelb", "blanchedalmond": "Mandelweiß", "aliceblue": "Alice-blau", "bisque": "Bisquit", "slategray": "Schiefergrau", "palegoldenrod": "Blassgoldgelb", "darkorange": "Dunkelorange", "aquamarine": "Aquamarin", "lightgreen": "Hellgrün", "burlywood": "Burlywood", "dodgerblue": "Dodger-blau", "darkgray": "Dunkelgrau", "lightcyan": "Hellzyan", "powderblue": "Pulverblau", "blueviolet": "Blauviolett", "orchid": "Orchidee", "dimgray": "Blassgrau", "beige": "Beige", "fuchsia": "Fuchsia", "lavenderblush": "Lavendelhauch", "hotpink": "Knallrosa", "steelblue": "Stahlblau", "tomato": "Tomatenrot", "lightpink": "Hellrosa", "limegreen": "Limonengrün", "indianred": "Indischrot", "papayawhip": "Papayacreme", "lightslategray": "Helles Schiefergrau", "gray": "Grau", "mediumorchid": "Mittelorchidee", "cornsilk": "Kornseide", "black": "Schwarz", "seagreen": "Meeresgrün", "darkslateblue": "Dunkelschieferblau", "khaki": "Khaki", "lightblue": "Hellblau", "palegreen": "Blassgrün", "azure": "Azur", "peachpuff": "Pfirsich", "darkolivegreen": "Dunkelolivgrün", "yellowgreen": "Gelbgrün"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.de");dijit.nls.loading.de={"loadingState": "Wird geladen...", "errorState": "Es ist ein Fehler aufgetreten."};dojo.provide("dijit.nls.Textarea");dijit.nls.Textarea._built=true;dojo.provide("dijit.nls.Textarea.de");dijit.nls.Textarea.de={"iframeEditTitle": "edit area", "iframeFocusTitle": "edit area frame"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.de");dijit._editor.nls.commands.de={"removeFormat": "Formatierung entfernen", "copy": "Kopieren", "paste": "Einfügen", "selectAll": "Alles auswählen", "insertOrderedList": "Nummerierung", "insertTable": "Tabelle einfügen/bearbeiten", "underline": "Unterstrichen", "foreColor": "Vordergrundfarbe", "htmlToggle": "HTML-Quelltext", "formatBlock": "Absatzstil", "insertHorizontalRule": "Horizontaler Strich", "delete": "Löschen", "insertUnorderedList": "Aufzählungszeichen", "tableProp": "Tabelleneigenschaft", "insertImage": "Grafik einfügen", "superscript": "Hochgestellt", "subscript": "Tiefgestellt", "createLink": "Link erstellen", "undo": "Rückgängig", "italic": "Kursiv", "fontName": "Schriftartname", "justifyLeft": "Linksbündig", "unlink": "Link entfernen", "toggleTableBorder": "Tabellenumrandung ein-/ausschalten", "ctrlKey": "Strg+${0}", "fontSize": "Schriftgröße", "indent": "Einrücken", "redo": "Wiederherstellen", "strikethrough": "Durchgestrichen", "justifyFull": "Blocksatz", "justifyCenter": "Zentriert", "hiliteColor": "Hintergrundfarbe", "deleteTable": "Tabelle löschen", "outdent": "Ausrücken", "cut": "Ausschneiden", "plainFormatBlock": "Absatzstil", "bold": "Fett", "systemShortcutFF": "Die Aktion \"${0}\" ist in Mozilla Firefox nur über einen Tastaturkurzbefehl verfügbar. Verwenden Sie ${1}.", "justifyRight": "Rechtsbündig", "appleKey": "⌘${0}"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.de");dojo.cldr.nls.number.de={"group": ".", "percentFormat": "#,##0 %", "decimal": ",", "scientificFormat": "#E0", "currencySpacing-afterCurrency-currencyMatch": "[:letter:]", "infinity": "∞", "list": ";", "percentSign": "%", "minusSign": "-", "currencySpacing-beforeCurrency-surroundingMatch": "[:digit:]", "currencySpacing-afterCurrency-insertBetween": " ", "nan": "NaN", "nativeZeroDigit": "0", "plusSign": "+", "currencySpacing-afterCurrency-surroundingMatch": "[:digit:]", "currencyFormat": "¤ #,##0.00", "currencySpacing-beforeCurrency-currencyMatch": "[:letter:]", "perMille": "‰", "decimalFormat": "#,##0.###", "patternDigit": "#", "currencySpacing-beforeCurrency-insertBetween": " ", "exponential": "E"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.de");dijit.nls.common.de={"buttonCancel": "Abbrechen", "buttonSave": "Speichern", "buttonOk": "OK"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.de");dijit.form.nls.validate.de={"rangeMessage": "* Dieser Wert ist außerhalb des gültigen Bereichs. ", "invalidMessage": "* Der eingegebene Wert ist ungültig. ", "missingMessage": "* Dieser Wert ist erforderlich."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.de");dijit.form.nls.ComboBox.de={"previousMessage": "Vorherige Auswahl", "nextMessage": "Weitere Auswahlmöglichkeiten"};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.de");dojo.cldr.nls.currency.de={"HKD_displayName": "Hongkong Dollar", "CHF_displayName": "Schweizer Franken", "CHF_symbol": "SFr.", "CAD_displayName": "Kanadischer Dollar", "AUD_displayName": "Australischer Dollar", "JPY_displayName": "Yen", "USD_displayName": "US Dollar", "GBP_displayName": "Pfund Sterling", "EUR_displayName": "Euro", "USD_symbol": "$", "GBP_symbol": "£", "JPY_symbol": "¥", "EUR_symbol": "€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.de");dojo.cldr.nls.gregorian.de={"eraNames": ["v. Chr.", "n. Chr."], "timeFormat-full": "H:mm' Uhr 'z", "eraAbbr": ["v. Chr.", "n. Chr."], "dateFormat-medium": "dd.MM.yyyy", "am": "vorm.", "months-format-abbr": ["Jan", "Feb", "Mrz", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"], "dateFormat-full": "EEEE, d. MMMM yyyy", "days-format-abbr": ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"], "quarters-format-wide": ["1. Quartal", "2. Quartal", "3. Quartal", "4. Quartal"], "pm": "nachm.", "dateFormat-short": "dd.MM.yy", "months-format-wide": ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"], "months-standAlone-narrow": ["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], "days-standAlone-narrow": ["S", "M", "D", "M", "D", "F", "S"], "dateFormat-long": "d. MMMM yyyy", "days-format-wide": ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"], "dateTimeFormats-appendItem-Second": "{0} ({2}: {1})", "field-dayperiod": "Dayperiod", "field-minute": "Minute", "field-weekday": "Day of the Week", "dateTimeFormats-appendItem-Year": "{0} {1}", "field-era": "Era", "field-hour": "Hour", "dateTimeFormats-appendItem-Week": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Timezone": "{0} {1}", "dateTimeFormats-appendItem-Month": "{0} ({2}: {1})", "timeFormat-medium": "HH:mm:ss", "field-zone": "Zone", "dateTimeFormats-appendItem-Minute": "{0} ({2}: {1})", "quarters-format-abbreviated": ["Q1", "Q2", "Q3", "Q4"], "dateTimeFormat": "{1} {0}", "field-year": "Year", "dateTimeFormats-appendItem-Day": "{0} ({2}: {1})", "field-week": "Week", "timeFormat-long": "HH:mm:ss z", "timeFormat-short": "HH:mm", "field-month": "Month", "dateTimeFormats-appendItem-Quarter": "{0} ({2}: {1})", "field-second": "Second", "field-day": "Day", "dateTimeFormats-appendItem-Day-Of-Week": "{0} {1}", "dateTimeFormats-appendItem-Hour": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Era": "{0} {1}"};dojo.provide("dijit.nls.Textarea");dijit.nls.Textarea._built=true;dojo.provide("dijit.nls.Textarea.de");dijit.nls.Textarea.de={"iframeEditTitle": "edit area", "iframeFocusTitle": "edit area frame"};
/trunk/api/js/dojo1.0/dijit/nls/dijit-all_ja.js
New file
0,0 → 1,0
dojo.provide("dijit.nls.dijit-all_ja");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.ja");dojo.nls.colors.ja={"lightsteelblue": "ライト・スチール・ブルー", "orangered": "オレンジ・レッド", "midnightblue": "ミッドナイト・ブルー", "cadetblue": "くすんだ青", "seashell": "シーシェル", "slategrey": "スレート・グレイ", "coral": "珊瑚", "darkturquoise": "ダーク・ターコイズ", "antiquewhite": "アンティーク・ホワイト", "mediumspringgreen": "ミディアム・スプリング・グリーン", "salmon": "サーモン", "darkgrey": "ダーク・グレイ", "ivory": "アイボリー", "greenyellow": "緑黄色", "mistyrose": "ミスティ・ローズ", "lightsalmon": "ライト・サーモン", "silver": "銀", "dimgrey": "くすんだグレイ", "orange": "オレンジ", "white": "白", "navajowhite": "ナバホ・ホワイト", "royalblue": "藤色", "deeppink": "濃いピンク", "lime": "ライム", "oldlace": "オールド・レイス", "chartreuse": "淡黄緑", "darkcyan": "ダーク・シアン・ブルー", "yellow": "黄", "linen": "亜麻色", "olive": "オリーブ", "gold": "金", "lawngreen": "ローン・グリーン", "lightyellow": "ライト・イエロー", "tan": "茶褐色", "darkviolet": "ダーク・バイオレット", "lightslategrey": "ライト・スレート・グレイ", "grey": "グレイ", "darkkhaki": "ダーク・カーキー", "green": "緑", "deepskyblue": "濃い空色", "aqua": "アクア", "sienna": "黄褐色", "mintcream": "ミント・クリーム", "rosybrown": "ロージー・ブラウン", "mediumslateblue": "ミディアム・スレート・ブルー", "magenta": "赤紫", "lightseagreen": "ライト・シー・グリーン", "cyan": "シアン・ブルー", "olivedrab": "濃黄緑", "darkgoldenrod": "ダーク・ゴールデン・ロッド", "slateblue": "スレート・ブルー", "mediumaquamarine": "ミディアム・アクアマリーン", "lavender": "ラベンダー", "mediumseagreen": "ミディアム・シー・グリーン", "maroon": "えび茶", "darkslategray": "ダーク・スレート・グレイ", "mediumturquoise": "ミディアム・ターコイズ", "ghostwhite": "ゴースト・ホワイト", "darkblue": "ダーク・ブルー", "mediumvioletred": "ミディアム・バイオレット・レッド", "brown": "茶", "lightgray": "ライト・グレイ", "sandybrown": "砂褐色", "pink": "ピンク", "firebrick": "赤煉瓦色", "indigo": "藍色", "snow": "雪色", "darkorchid": "ダーク・オーキッド", "turquoise": "ターコイズ", "chocolate": "チョコレート", "springgreen": "スプリング・グリーン", "moccasin": "モカシン", "navy": "濃紺", "lemonchiffon": "レモン・シフォン", "teal": "ティール", "floralwhite": "フローラル・ホワイト", "cornflowerblue": "コーンフラワー・ブルー", "paleturquoise": "ペイル・ターコイズ", "purple": "紫", "gainsboro": "ゲインズボーロ", "plum": "深紫", "red": "赤", "blue": "青", "forestgreen": "フォレスト・グリーン", "darkgreen": "ダーク・グリーン", "honeydew": "ハニーデュー", "darkseagreen": "ダーク・シー・グリーン", "lightcoral": "ライト・コーラル", "palevioletred": "ペイル・バイオレット・レッド", "mediumpurple": "ミディアム・パープル", "saddlebrown": "サドル・ブラウン", "darkmagenta": "ダーク・マジェンタ", "thistle": "シスル", "whitesmoke": "ホワイト・スモーク", "wheat": "小麦色", "violet": "すみれ色", "lightskyblue": "ライト・スカイ・ブルー", "goldenrod": "ゴールデン・ロッド", "mediumblue": "ミディアム・ブルー", "skyblue": "スカイ・ブルー", "crimson": "深紅", "darksalmon": "ダーク・サーモン", "darkred": "ダーク・レッド", "darkslategrey": "ダーク・スレート・グレイ", "peru": "ペルー", "lightgrey": "ライト・グレイ", "lightgoldenrodyellow": "ライト・ゴールデン・ロッド・イエロー", "blanchedalmond": "皮なしアーモンド", "aliceblue": "アリス・ブルー", "bisque": "ビスク", "slategray": "スレート・グレイ", "palegoldenrod": "ペイル・ゴールデン・ロッド", "darkorange": "ダーク・オレンジ", "aquamarine": "碧緑", "lightgreen": "ライト・グリーン", "burlywood": "バーリーウッド", "dodgerblue": "ドッジャー・ブルー", "darkgray": "ダーク・グレイ", "lightcyan": "ライト・シアン", "powderblue": "淡青", "blueviolet": "青紫", "orchid": "薄紫", "dimgray": "くすんだグレイ", "beige": "ベージュ", "fuchsia": "紫紅色", "lavenderblush": "ラベンダー・ブラッシ", "hotpink": "ホット・ピンク", "steelblue": "鋼色", "tomato": "トマト色", "lightpink": "ライト・ピンク", "limegreen": "ライム・グリーン", "indianred": "インディアン・レッド", "papayawhip": "パパイア・ホイップ", "lightslategray": "ライト・スレート・グレイ", "gray": "グレイ", "mediumorchid": "ミディアム・オーキッド", "cornsilk": "コーンシルク", "black": "黒", "seagreen": "シー・グリーン", "darkslateblue": "ダーク・スレート・ブルー", "khaki": "カーキー", "lightblue": "ライト・ブルー", "palegreen": "ペイル・グリーン", "azure": "薄い空色", "peachpuff": "ピーチ・パフ", "darkolivegreen": "ダーク・オリーブ・グリーン", "yellowgreen": "黄緑"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.ja");dijit.nls.loading.ja={"loadingState": "ロード中...", "errorState": "エラーが発生しました。"};dojo.provide("dijit.nls.Textarea");dijit.nls.Textarea._built=true;dojo.provide("dijit.nls.Textarea.ja");dijit.nls.Textarea.ja={"iframeEditTitle": "edit area", "iframeFocusTitle": "edit area frame"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.ja");dijit._editor.nls.commands.ja={"removeFormat": "形式の除去", "copy": "コピー", "paste": "貼り付け", "selectAll": "すべて選択", "insertOrderedList": "番号付きリスト", "insertTable": "テーブルの挿入/編集", "underline": "下線", "foreColor": "前景色", "htmlToggle": "HTML ソース", "formatBlock": "段落スタイル", "insertHorizontalRule": "水平罫線", "delete": "削除", "insertUnorderedList": "黒丸付きリスト", "tableProp": "テーブル・プロパティー", "insertImage": "イメージの挿入", "superscript": "上付き文字", "subscript": "下付き文字", "createLink": "リンクの作成", "undo": "元に戻す", "italic": "イタリック", "fontName": "フォント名", "justifyLeft": "左揃え", "unlink": "リンクの除去", "toggleTableBorder": "テーブル・ボーダーの切り替え", "fontSize": "フォント・サイズ", "indent": "インデント", "redo": "やり直し", "strikethrough": "取り消し線", "justifyFull": "両端揃え", "justifyCenter": "中央揃え", "hiliteColor": "背景色", "deleteTable": "テーブルの削除", "outdent": "アウトデント", "cut": "切り取り", "plainFormatBlock": "段落スタイル", "bold": "太字", "systemShortcutFF": "\"${0}\" アクションは、キーボード・ショートカットを使用して Mozilla Firefox でのみ使用できます。${1} を使用してください。", "justifyRight": "右揃え", "appleKey": "⌘${0}", "ctrlKey": "ctrl+${0}"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.ja");dojo.cldr.nls.number.ja={"scientificFormat": "#E0", "currencySpacing-afterCurrency-currencyMatch": "[:letter:]", "infinity": "∞", "list": ";", "percentSign": "%", "minusSign": "-", "currencySpacing-beforeCurrency-surroundingMatch": "[:digit:]", "currencySpacing-afterCurrency-insertBetween": " ", "nan": "NaN", "nativeZeroDigit": "0", "plusSign": "+", "currencySpacing-afterCurrency-surroundingMatch": "[:digit:]", "currencyFormat": "¤ #,##0.00", "currencySpacing-beforeCurrency-currencyMatch": "[:letter:]", "perMille": "‰", "group": ",", "percentFormat": "#,##0%", "decimalFormat": "#,##0.###", "decimal": ".", "patternDigit": "#", "currencySpacing-beforeCurrency-insertBetween": " ", "exponential": "E"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.ja");dijit.nls.common.ja={"buttonCancel": "キャンセル", "buttonSave": "保存", "buttonOk": "OK"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.ja");dijit.form.nls.validate.ja={"rangeMessage": "* この値は範囲外です。", "invalidMessage": "* 入力した値は無効です。", "missingMessage": "* この値は必須です。"};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.ja");dijit.form.nls.ComboBox.ja={"previousMessage": "以前の選択項目", "nextMessage": "追加の選択項目"};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.ja");dojo.cldr.nls.currency.ja={"HKD_displayName": "香港ドル", "CHF_displayName": "スイス フラン", "JPY_symbol": "¥", "CAD_displayName": "カナダ ドル", "AUD_displayName": "オーストラリア ドル", "JPY_displayName": "日本円", "USD_displayName": "米ドル", "GBP_displayName": "英国ポンド", "EUR_displayName": "ユーロ", "USD_symbol": "$", "GBP_symbol": "£", "EUR_symbol": "€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.ja");dojo.cldr.nls.gregorian.ja={"eraNames": ["紀元前", "西暦"], "timeFormat-full": "H'時'mm'分'ss'秒'z", "timeFormat-medium": "H:mm:ss", "eraAbbr": ["紀元前", "西暦"], "dateFormat-medium": "yyyy/MM/dd", "am": "午前", "months-format-abbr": ["1 月", "2 月", "3 月", "4 月", "5 月", "6 月", "7 月", "8 月", "9 月", "10 月", "11 月", "12 月"], "dateFormat-full": "yyyy'年'M'月'd'日'EEEE", "days-format-abbr": ["日", "月", "火", "水", "木", "金", "土"], "timeFormat-long": "H:mm:ss:z", "quarters-format-wide": ["第 1 四半期", "第 2 四半期", "第 3 四半期", "第 4 四半期"], "pm": "午後", "timeFormat-short": "H:mm", "months-format-wide": ["1 月", "2 月", "3 月", "4 月", "5 月", "6 月", "7 月", "8 月", "9 月", "10 月", "11 月", "12 月"], "days-standAlone-narrow": ["日", "月", "火", "水", "木", "金", "土"], "dateFormat-long": "yyyy'年'M'月'd'日'", "days-format-wide": ["日曜日", "月曜日", "火曜日", "水曜日", "木曜日", "金曜日", "土曜日"], "dateTimeFormats-appendItem-Second": "{0} ({2}: {1})", "field-dayperiod": "Dayperiod", "field-minute": "Minute", "field-weekday": "Day of the Week", "months-standAlone-narrow": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"], "dateTimeFormats-appendItem-Year": "{0} {1}", "field-era": "Era", "field-hour": "Hour", "dateTimeFormats-appendItem-Week": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Timezone": "{0} {1}", "dateTimeFormats-appendItem-Month": "{0} ({2}: {1})", "field-zone": "Zone", "dateTimeFormats-appendItem-Minute": "{0} ({2}: {1})", "quarters-format-abbreviated": ["Q1", "Q2", "Q3", "Q4"], "dateTimeFormat": "{1} {0}", "field-year": "Year", "dateTimeFormats-appendItem-Day": "{0} ({2}: {1})", "field-week": "Week", "field-month": "Month", "dateTimeFormats-appendItem-Quarter": "{0} ({2}: {1})", "field-second": "Second", "field-day": "Day", "dateTimeFormats-appendItem-Day-Of-Week": "{0} {1}", "dateTimeFormats-appendItem-Hour": "{0} ({2}: {1})", "dateFormat-short": "yy/MM/dd", "dateTimeFormats-appendItem-Era": "{0} {1}"};dojo.provide("dijit.nls.Textarea");dijit.nls.Textarea._built=true;dojo.provide("dijit.nls.Textarea.ja");dijit.nls.Textarea.ja={"iframeEditTitle": "edit area", "iframeFocusTitle": "edit area frame"};
/trunk/api/js/dojo1.0/dijit/nls/dijit-all_xx.js
New file
0,0 → 1,0
dojo.provide("dijit.nls.dijit-all_xx");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.xx");dojo.nls.colors.xx={"lightsteelblue": "light steel blue", "orangered": "orange red", "midnightblue": "midnight blue", "cadetblue": "cadet blue", "seashell": "seashell", "slategrey": "slate gray", "coral": "coral", "darkturquoise": "dark turquoise", "antiquewhite": "antique white", "mediumspringgreen": "medium spring green", "salmon": "salmon", "darkgrey": "dark gray", "ivory": "ivory", "greenyellow": "green-yellow", "mistyrose": "misty rose", "lightsalmon": "light salmon", "silver": "silver", "dimgrey": "dim gray", "orange": "orange", "white": "white", "navajowhite": "navajo white", "royalblue": "royal blue", "deeppink": "deep pink", "lime": "lime", "oldlace": "old lace", "chartreuse": "chartreuse", "darkcyan": "dark cyan", "yellow": "yellow", "linen": "linen", "olive": "olive", "gold": "gold", "lawngreen": "lawn green", "lightyellow": "light yellow", "tan": "tan", "darkviolet": "dark violet", "lightslategrey": "light slate gray", "grey": "gray", "darkkhaki": "dark khaki", "green": "green", "deepskyblue": "deep sky blue", "aqua": "aqua", "sienna": "sienna", "mintcream": "mint cream", "rosybrown": "rosy brown", "mediumslateblue": "medium slate blue", "magenta": "magenta", "lightseagreen": "light sea green", "cyan": "cyan", "olivedrab": "olive drab", "darkgoldenrod": "dark goldenrod", "slateblue": "slate blue", "mediumaquamarine": "medium aquamarine", "lavender": "lavender", "mediumseagreen": "medium sea green", "maroon": "maroon", "darkslategray": "dark slate gray", "mediumturquoise": "medium turquoise", "ghostwhite": "ghost white", "darkblue": "dark blue", "mediumvioletred": "medium violet-red", "brown": "brown", "lightgray": "light gray", "sandybrown": "sandy brown", "pink": "pink", "firebrick": "fire brick", "indigo": "indigo", "snow": "snow", "darkorchid": "dark orchid", "turquoise": "turquoise", "chocolate": "chocolate", "springgreen": "spring green", "moccasin": "moccasin", "navy": "navy", "lemonchiffon": "lemon chiffon", "teal": "teal", "floralwhite": "floral white", "cornflowerblue": "cornflower blue", "paleturquoise": "pale turquoise", "purple": "purple", "gainsboro": "gainsboro", "plum": "plum", "red": "red", "blue": "blue", "forestgreen": "forest green", "darkgreen": "dark green", "honeydew": "honeydew", "darkseagreen": "dark sea green", "lightcoral": "light coral", "palevioletred": "pale violet-red", "mediumpurple": "medium purple", "saddlebrown": "saddle brown", "darkmagenta": "dark magenta", "thistle": "thistle", "whitesmoke": "white smoke", "wheat": "wheat", "violet": "violet", "lightskyblue": "light sky blue", "goldenrod": "goldenrod", "mediumblue": "medium blue", "skyblue": "sky blue", "crimson": "crimson", "darksalmon": "dark salmon", "darkred": "dark red", "darkslategrey": "dark slate gray", "peru": "peru", "lightgrey": "light gray", "lightgoldenrodyellow": "light goldenrod yellow", "blanchedalmond": "blanched almond", "aliceblue": "alice blue", "bisque": "bisque", "slategray": "slate gray", "palegoldenrod": "pale goldenrod", "darkorange": "dark orange", "aquamarine": "aquamarine", "lightgreen": "light green", "burlywood": "burlywood", "dodgerblue": "dodger blue", "darkgray": "dark gray", "lightcyan": "light cyan", "powderblue": "powder blue", "blueviolet": "blue-violet", "orchid": "orchid", "dimgray": "dim gray", "beige": "beige", "fuchsia": "fuchsia", "lavenderblush": "lavender blush", "hotpink": "hot pink", "steelblue": "steel blue", "tomato": "tomato", "lightpink": "light pink", "limegreen": "lime green", "indianred": "indian red", "papayawhip": "papaya whip", "lightslategray": "light slate gray", "gray": "gray", "mediumorchid": "medium orchid", "cornsilk": "cornsilk", "black": "black", "seagreen": "sea green", "darkslateblue": "dark slate blue", "khaki": "khaki", "lightblue": "light blue", "palegreen": "pale green", "azure": "azure", "peachpuff": "peach puff", "darkolivegreen": "dark olive green", "yellowgreen": "yellow green"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.xx");dijit.nls.loading.xx={"loadingState": "Loading...", "errorState": "Sorry, an error occurred"};dojo.provide("dijit.nls.Textarea");dijit.nls.Textarea._built=true;dojo.provide("dijit.nls.Textarea.xx");dijit.nls.Textarea.xx={"iframeEditTitle": "edit area", "iframeFocusTitle": "edit area frame"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.xx");dijit._editor.nls.commands.xx={"removeFormat": "Remove Format", "copy": "Copy", "paste": "Paste", "selectAll": "Select All", "insertOrderedList": "Numbered List", "insertTable": "Insert/Edit Table", "underline": "Underline", "foreColor": "Foreground Color", "htmlToggle": "HTML Source", "formatBlock": "Paragraph Style", "insertHorizontalRule": "Horizontal Rule", "delete": "Delete", "appleKey": "⌘${0}", "insertUnorderedList": "Bullet List", "tableProp": "Table Property", "insertImage": "Insert Image", "superscript": "Superscript", "subscript": "Subscript", "createLink": "Create Link", "undo": "Undo", "italic": "Italic", "fontName": "Font Name", "justifyLeft": "Align Left", "unlink": "Remove Link", "toggleTableBorder": "Toggle Table Border", "ctrlKey": "ctrl+${0}", "fontSize": "Font Size", "indent": "Indent", "redo": "Redo", "strikethrough": "Strikethrough", "justifyFull": "Justify", "justifyCenter": "Align Center", "hiliteColor": "Background Color", "deleteTable": "Delete Table", "outdent": "Outdent", "cut": "Cut", "plainFormatBlock": "Paragraph Style", "bold": "Bold", "systemShortcutFF": "The \"${0}\" action is only available in Mozilla Firefox using a keyboard shortcut. Use ${1}.", "justifyRight": "Align Right"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.xx");dojo.cldr.nls.number.xx={"scientificFormat": "#E0", "currencySpacing-afterCurrency-currencyMatch": "[:letter:]", "infinity": "∞", "list": ";", "percentSign": "%", "minusSign": "-", "currencySpacing-beforeCurrency-surroundingMatch": "[:digit:]", "currencySpacing-afterCurrency-insertBetween": " ", "nan": "NaN", "nativeZeroDigit": "0", "plusSign": "+", "currencySpacing-afterCurrency-surroundingMatch": "[:digit:]", "currencyFormat": "¤ #,##0.00", "currencySpacing-beforeCurrency-currencyMatch": "[:letter:]", "perMille": "‰", "group": ",", "percentFormat": "#,##0%", "decimalFormat": "#,##0.###", "decimal": ".", "patternDigit": "#", "currencySpacing-beforeCurrency-insertBetween": " ", "exponential": "E"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.xx");dijit.nls.common.xx={"buttonCancel": "Cancel", "buttonSave": "Save", "buttonOk": "OK"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.xx");dijit.form.nls.validate.xx={"rangeMessage": "* This value is out of range.", "invalidMessage": "* The value entered is not valid.", "missingMessage": "* This value is required."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.xx");dijit.form.nls.ComboBox.xx={"previousMessage": "Previous choices", "nextMessage": "More choices"};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.xx");dojo.cldr.nls.currency.xx={"USD_symbol": "$", "EUR_displayName": "EUR", "GBP_displayName": "GBP", "JPY_displayName": "JPY", "GBP_symbol": "£", "JPY_symbol": "¥", "EUR_symbol": "€", "USD_displayName": "USD"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.xx");dojo.cldr.nls.gregorian.xx={"dateTimeFormats-appendItem-Second": "{0} ({2}: {1})", "field-dayperiod": "Dayperiod", "field-minute": "Minute", "eraNames": ["BCE", "CE"], "field-weekday": "Day of the Week", "months-standAlone-narrow": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"], "dateTimeFormats-appendItem-Year": "{0} {1}", "field-era": "Era", "field-hour": "Hour", "timeFormat-full": "HH:mm:ss z", "dateTimeFormats-appendItem-Week": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Timezone": "{0} {1}", "dateTimeFormats-appendItem-Month": "{0} ({2}: {1})", "days-standAlone-narrow": ["1", "2", "3", "4", "5", "6", "7"], "eraAbbr": ["BCE", "CE"], "dateFormat-long": "yyyy MMMM d", "timeFormat-medium": "HH:mm:ss", "field-zone": "Zone", "dateTimeFormats-appendItem-Minute": "{0} ({2}: {1})", "dateFormat-medium": "yyyy MMM d", "quarters-format-abbreviated": ["Q1", "Q2", "Q3", "Q4"], "dateTimeFormat": "{1} {0}", "field-year": "Year", "dateTimeFormats-appendItem-Day": "{0} ({2}: {1})", "field-week": "Week", "timeFormat-long": "HH:mm:ss z", "months-format-abbr": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"], "timeFormat-short": "HH:mm", "field-month": "Month", "dateTimeFormats-appendItem-Quarter": "{0} ({2}: {1})", "days-format-abbr": ["1", "2", "3", "4", "5", "6", "7"], "pm": "PM", "field-second": "Second", "field-day": "Day", "dateTimeFormats-appendItem-Day-Of-Week": "{0} {1}", "dateTimeFormats-appendItem-Hour": "{0} ({2}: {1})", "am": "AM", "dateFormat-short": "yy/MM/dd", "dateFormat-full": "EEEE, yyyy MMMM dd", "months-format-wide": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"], "dateTimeFormats-appendItem-Era": "{0} {1}", "quarters-format-wide": ["Q1", "Q2", "Q3", "Q4"], "days-format-wide": ["1", "2", "3", "4", "5", "6", "7"]};dojo.provide("dijit.nls.Textarea");dijit.nls.Textarea._built=true;dojo.provide("dijit.nls.Textarea.xx");dijit.nls.Textarea.xx={"iframeEditTitle": "edit area", "iframeFocusTitle": "edit area frame"};
/trunk/api/js/dojo1.0/dijit/nls/common.js
New file
0,0 → 1,0
({"buttonCancel": "Cancel", "buttonSave": "Save", "buttonOk": "OK"})
/trunk/api/js/dojo1.0/dijit/nls/dijit-all_ja-jp.js
New file
0,0 → 1,0
dojo.provide("dijit.nls.dijit-all_ja-jp");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.ja_jp");dojo.nls.colors.ja_jp={"lightsteelblue": "ライト・スチール・ブルー", "orangered": "オレンジ・レッド", "midnightblue": "ミッドナイト・ブルー", "cadetblue": "くすんだ青", "seashell": "シーシェル", "slategrey": "スレート・グレイ", "coral": "珊瑚", "darkturquoise": "ダーク・ターコイズ", "antiquewhite": "アンティーク・ホワイト", "mediumspringgreen": "ミディアム・スプリング・グリーン", "salmon": "サーモン", "darkgrey": "ダーク・グレイ", "ivory": "アイボリー", "greenyellow": "緑黄色", "mistyrose": "ミスティ・ローズ", "lightsalmon": "ライト・サーモン", "silver": "銀", "dimgrey": "くすんだグレイ", "orange": "オレンジ", "white": "白", "navajowhite": "ナバホ・ホワイト", "royalblue": "藤色", "deeppink": "濃いピンク", "lime": "ライム", "oldlace": "オールド・レイス", "chartreuse": "淡黄緑", "darkcyan": "ダーク・シアン・ブルー", "yellow": "黄", "linen": "亜麻色", "olive": "オリーブ", "gold": "金", "lawngreen": "ローン・グリーン", "lightyellow": "ライト・イエロー", "tan": "茶褐色", "darkviolet": "ダーク・バイオレット", "lightslategrey": "ライト・スレート・グレイ", "grey": "グレイ", "darkkhaki": "ダーク・カーキー", "green": "緑", "deepskyblue": "濃い空色", "aqua": "アクア", "sienna": "黄褐色", "mintcream": "ミント・クリーム", "rosybrown": "ロージー・ブラウン", "mediumslateblue": "ミディアム・スレート・ブルー", "magenta": "赤紫", "lightseagreen": "ライト・シー・グリーン", "cyan": "シアン・ブルー", "olivedrab": "濃黄緑", "darkgoldenrod": "ダーク・ゴールデン・ロッド", "slateblue": "スレート・ブルー", "mediumaquamarine": "ミディアム・アクアマリーン", "lavender": "ラベンダー", "mediumseagreen": "ミディアム・シー・グリーン", "maroon": "えび茶", "darkslategray": "ダーク・スレート・グレイ", "mediumturquoise": "ミディアム・ターコイズ", "ghostwhite": "ゴースト・ホワイト", "darkblue": "ダーク・ブルー", "mediumvioletred": "ミディアム・バイオレット・レッド", "brown": "茶", "lightgray": "ライト・グレイ", "sandybrown": "砂褐色", "pink": "ピンク", "firebrick": "赤煉瓦色", "indigo": "藍色", "snow": "雪色", "darkorchid": "ダーク・オーキッド", "turquoise": "ターコイズ", "chocolate": "チョコレート", "springgreen": "スプリング・グリーン", "moccasin": "モカシン", "navy": "濃紺", "lemonchiffon": "レモン・シフォン", "teal": "ティール", "floralwhite": "フローラル・ホワイト", "cornflowerblue": "コーンフラワー・ブルー", "paleturquoise": "ペイル・ターコイズ", "purple": "紫", "gainsboro": "ゲインズボーロ", "plum": "深紫", "red": "赤", "blue": "青", "forestgreen": "フォレスト・グリーン", "darkgreen": "ダーク・グリーン", "honeydew": "ハニーデュー", "darkseagreen": "ダーク・シー・グリーン", "lightcoral": "ライト・コーラル", "palevioletred": "ペイル・バイオレット・レッド", "mediumpurple": "ミディアム・パープル", "saddlebrown": "サドル・ブラウン", "darkmagenta": "ダーク・マジェンタ", "thistle": "シスル", "whitesmoke": "ホワイト・スモーク", "wheat": "小麦色", "violet": "すみれ色", "lightskyblue": "ライト・スカイ・ブルー", "goldenrod": "ゴールデン・ロッド", "mediumblue": "ミディアム・ブルー", "skyblue": "スカイ・ブルー", "crimson": "深紅", "darksalmon": "ダーク・サーモン", "darkred": "ダーク・レッド", "darkslategrey": "ダーク・スレート・グレイ", "peru": "ペルー", "lightgrey": "ライト・グレイ", "lightgoldenrodyellow": "ライト・ゴールデン・ロッド・イエロー", "blanchedalmond": "皮なしアーモンド", "aliceblue": "アリス・ブルー", "bisque": "ビスク", "slategray": "スレート・グレイ", "palegoldenrod": "ペイル・ゴールデン・ロッド", "darkorange": "ダーク・オレンジ", "aquamarine": "碧緑", "lightgreen": "ライト・グリーン", "burlywood": "バーリーウッド", "dodgerblue": "ドッジャー・ブルー", "darkgray": "ダーク・グレイ", "lightcyan": "ライト・シアン", "powderblue": "淡青", "blueviolet": "青紫", "orchid": "薄紫", "dimgray": "くすんだグレイ", "beige": "ベージュ", "fuchsia": "紫紅色", "lavenderblush": "ラベンダー・ブラッシ", "hotpink": "ホット・ピンク", "steelblue": "鋼色", "tomato": "トマト色", "lightpink": "ライト・ピンク", "limegreen": "ライム・グリーン", "indianred": "インディアン・レッド", "papayawhip": "パパイア・ホイップ", "lightslategray": "ライト・スレート・グレイ", "gray": "グレイ", "mediumorchid": "ミディアム・オーキッド", "cornsilk": "コーンシルク", "black": "黒", "seagreen": "シー・グリーン", "darkslateblue": "ダーク・スレート・ブルー", "khaki": "カーキー", "lightblue": "ライト・ブルー", "palegreen": "ペイル・グリーン", "azure": "薄い空色", "peachpuff": "ピーチ・パフ", "darkolivegreen": "ダーク・オリーブ・グリーン", "yellowgreen": "黄緑"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.ja_jp");dijit.nls.loading.ja_jp={"loadingState": "ロード中...", "errorState": "エラーが発生しました。"};dojo.provide("dijit.nls.Textarea");dijit.nls.Textarea._built=true;dojo.provide("dijit.nls.Textarea.ja_jp");dijit.nls.Textarea.ja_jp={"iframeEditTitle": "edit area", "iframeFocusTitle": "edit area frame"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.ja_jp");dijit._editor.nls.commands.ja_jp={"removeFormat": "形式の除去", "copy": "コピー", "paste": "貼り付け", "selectAll": "すべて選択", "insertOrderedList": "番号付きリスト", "insertTable": "テーブルの挿入/編集", "underline": "下線", "foreColor": "前景色", "htmlToggle": "HTML ソース", "formatBlock": "段落スタイル", "insertHorizontalRule": "水平罫線", "delete": "削除", "insertUnorderedList": "黒丸付きリスト", "tableProp": "テーブル・プロパティー", "insertImage": "イメージの挿入", "superscript": "上付き文字", "subscript": "下付き文字", "createLink": "リンクの作成", "undo": "元に戻す", "italic": "イタリック", "fontName": "フォント名", "justifyLeft": "左揃え", "unlink": "リンクの除去", "toggleTableBorder": "テーブル・ボーダーの切り替え", "fontSize": "フォント・サイズ", "indent": "インデント", "redo": "やり直し", "strikethrough": "取り消し線", "justifyFull": "両端揃え", "justifyCenter": "中央揃え", "hiliteColor": "背景色", "deleteTable": "テーブルの削除", "outdent": "アウトデント", "cut": "切り取り", "plainFormatBlock": "段落スタイル", "bold": "太字", "systemShortcutFF": "\"${0}\" アクションは、キーボード・ショートカットを使用して Mozilla Firefox でのみ使用できます。${1} を使用してください。", "justifyRight": "右揃え", "appleKey": "⌘${0}", "ctrlKey": "ctrl+${0}"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.ja_jp");dojo.cldr.nls.number.ja_jp={"currencyFormat": "¤#,##0.00", "scientificFormat": "#E0", "currencySpacing-afterCurrency-currencyMatch": "[:letter:]", "infinity": "∞", "list": ";", "percentSign": "%", "minusSign": "-", "currencySpacing-beforeCurrency-surroundingMatch": "[:digit:]", "currencySpacing-afterCurrency-insertBetween": " ", "nan": "NaN", "nativeZeroDigit": "0", "plusSign": "+", "currencySpacing-afterCurrency-surroundingMatch": "[:digit:]", "currencySpacing-beforeCurrency-currencyMatch": "[:letter:]", "perMille": "‰", "group": ",", "percentFormat": "#,##0%", "decimalFormat": "#,##0.###", "decimal": ".", "patternDigit": "#", "currencySpacing-beforeCurrency-insertBetween": " ", "exponential": "E"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.ja_jp");dijit.nls.common.ja_jp={"buttonCancel": "キャンセル", "buttonSave": "保存", "buttonOk": "OK"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.ja_jp");dijit.form.nls.validate.ja_jp={"rangeMessage": "* この値は範囲外です。", "invalidMessage": "* 入力した値は無効です。", "missingMessage": "* この値は必須です。"};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.ja_jp");dijit.form.nls.ComboBox.ja_jp={"previousMessage": "以前の選択項目", "nextMessage": "追加の選択項目"};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.ja_jp");dojo.cldr.nls.currency.ja_jp={"HKD_displayName": "香港ドル", "CHF_displayName": "スイス フラン", "JPY_symbol": "¥", "CAD_displayName": "カナダ ドル", "AUD_displayName": "オーストラリア ドル", "JPY_displayName": "日本円", "USD_displayName": "米ドル", "GBP_displayName": "英国ポンド", "EUR_displayName": "ユーロ", "USD_symbol": "$", "GBP_symbol": "£", "EUR_symbol": "€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.ja_jp");dojo.cldr.nls.gregorian.ja_jp={"eraNames": ["紀元前", "西暦"], "timeFormat-full": "H'時'mm'分'ss'秒'z", "timeFormat-medium": "H:mm:ss", "eraAbbr": ["紀元前", "西暦"], "dateFormat-medium": "yyyy/MM/dd", "am": "午前", "months-format-abbr": ["1 月", "2 月", "3 月", "4 月", "5 月", "6 月", "7 月", "8 月", "9 月", "10 月", "11 月", "12 月"], "dateFormat-full": "yyyy'年'M'月'd'日'EEEE", "days-format-abbr": ["日", "月", "火", "水", "木", "金", "土"], "timeFormat-long": "H:mm:ss:z", "quarters-format-wide": ["第 1 四半期", "第 2 四半期", "第 3 四半期", "第 4 四半期"], "pm": "午後", "timeFormat-short": "H:mm", "months-format-wide": ["1 月", "2 月", "3 月", "4 月", "5 月", "6 月", "7 月", "8 月", "9 月", "10 月", "11 月", "12 月"], "days-standAlone-narrow": ["日", "月", "火", "水", "木", "金", "土"], "dateFormat-long": "yyyy'年'M'月'd'日'", "days-format-wide": ["日曜日", "月曜日", "火曜日", "水曜日", "木曜日", "金曜日", "土曜日"], "dateTimeFormats-appendItem-Second": "{0} ({2}: {1})", "field-dayperiod": "Dayperiod", "field-minute": "Minute", "field-weekday": "Day of the Week", "months-standAlone-narrow": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"], "dateTimeFormats-appendItem-Year": "{0} {1}", "field-era": "Era", "field-hour": "Hour", "dateTimeFormats-appendItem-Week": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Timezone": "{0} {1}", "dateTimeFormats-appendItem-Month": "{0} ({2}: {1})", "field-zone": "Zone", "dateTimeFormats-appendItem-Minute": "{0} ({2}: {1})", "quarters-format-abbreviated": ["Q1", "Q2", "Q3", "Q4"], "dateTimeFormat": "{1} {0}", "field-year": "Year", "dateTimeFormats-appendItem-Day": "{0} ({2}: {1})", "field-week": "Week", "field-month": "Month", "dateTimeFormats-appendItem-Quarter": "{0} ({2}: {1})", "field-second": "Second", "field-day": "Day", "dateTimeFormats-appendItem-Day-Of-Week": "{0} {1}", "dateTimeFormats-appendItem-Hour": "{0} ({2}: {1})", "dateFormat-short": "yy/MM/dd", "dateTimeFormats-appendItem-Era": "{0} {1}"};dojo.provide("dijit.nls.Textarea");dijit.nls.Textarea._built=true;dojo.provide("dijit.nls.Textarea.ja_jp");dijit.nls.Textarea.ja_jp={"iframeEditTitle": "edit area", "iframeFocusTitle": "edit area frame"};
/trunk/api/js/dojo1.0/dijit/nls/cs/common.js
New file
0,0 → 1,0
({"buttonCancel": "Storno", "buttonSave": "Uložit", "buttonOk": "OK"})
/trunk/api/js/dojo1.0/dijit/nls/cs/loading.js
New file
0,0 → 1,0
({"loadingState": "Probíhá načítání...", "errorState": "Omlouváme se, došlo k chybě"})
/trunk/api/js/dojo1.0/dijit/nls/es/common.js
New file
0,0 → 1,0
({"buttonCancel": "Cancelar", "buttonSave": "Guardar", "buttonOk": "Aceptar"})
/trunk/api/js/dojo1.0/dijit/nls/es/loading.js
New file
0,0 → 1,0
({"loadingState": "Cargando...", "errorState": "Lo siento, se ha producido un error"})
/trunk/api/js/dojo1.0/dijit/nls/dijit-all_cs.js
New file
0,0 → 1,0
dojo.provide("dijit.nls.dijit-all_cs");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.cs");dojo.nls.colors.cs={"lightsteelblue": "světlá ocelová modrá", "orangered": "oranžovočervená", "midnightblue": "temně modrá", "cadetblue": "šedomodrá", "seashell": "lasturová", "slategrey": "břidlicová šedá", "coral": "korálová červená", "darkturquoise": "tmavě tyrkysová", "antiquewhite": "krémově bílá", "mediumspringgreen": "střední jarní zelená", "salmon": "lososová", "darkgrey": "tmavě šedá", "ivory": "slonovinová", "greenyellow": "zelenožlutá", "mistyrose": "růžovobílá", "lightsalmon": "světle lososová", "silver": "stříbrná", "dimgrey": "kouřově šedá", "orange": "oranžová", "white": "bílá", "navajowhite": "světle krémová", "royalblue": "královská modrá", "deeppink": "sytě růžová", "lime": "limetková", "oldlace": "světle béžová", "chartreuse": "chartreuska", "darkcyan": "tmavě azurová", "yellow": "žlutá", "linen": "bledě šedobéžová", "olive": "olivová", "gold": "zlatá", "lawngreen": "jasně zelená", "lightyellow": "bledě žlutá", "tan": "šedobéžová", "darkviolet": "tmavě fialová", "lightslategrey": "světlá břidlicová šedá", "grey": "šedá", "darkkhaki": "pískově hnědá", "green": "zelená", "deepskyblue": "sytá nebeská modrá", "aqua": "azurová", "sienna": "siena", "mintcream": "mentolová", "rosybrown": "růžovohnědá", "mediumslateblue": "střední břidlicová modrá", "magenta": "purpurová", "lightseagreen": "světlá mořská zelená", "cyan": "azurová", "olivedrab": "khaki", "darkgoldenrod": "tmavě béžová", "slateblue": "břidlicová modrá", "mediumaquamarine": "střední akvamarínová", "lavender": "levandulová", "mediumseagreen": "střední mořská zelená", "maroon": "kaštanová", "darkslategray": "tmavá břidlicová šedá", "mediumturquoise": "středně tyrkysová", "ghostwhite": "modravě bílá", "darkblue": "tmavě modrá", "mediumvioletred": "středně fialovočervená", "brown": "červenohnědá", "lightgray": "světle šedá", "sandybrown": "oranžovohnědá", "pink": "růžová", "firebrick": "cihlová", "indigo": "indigově modrá", "snow": "sněhobílá", "darkorchid": "tmavě orchidejová", "turquoise": "tyrkysová", "chocolate": "hnědobéžová", "springgreen": "jarní zelená", "moccasin": "bledě krémová", "navy": "námořnická modrá", "lemonchiffon": "světle citrónová", "teal": "šedozelená", "floralwhite": "květinově bílá", "cornflowerblue": "chrpově modrá", "paleturquoise": "bledě tyrkysová", "purple": "nachová", "gainsboro": "bledě šedá", "plum": "švestková", "red": "červená", "blue": "modrá", "forestgreen": "lesní zelená", "darkgreen": "tmavě zelená", "honeydew": "nazelenalá", "darkseagreen": "tmavá mořská zelená", "lightcoral": "světle korálová", "palevioletred": "bledě fialovočervená", "mediumpurple": "středně nachová", "saddlebrown": "hnědá", "darkmagenta": "tmavě purpurová", "thistle": "bodláková", "whitesmoke": "kouřově bílá", "wheat": "zlatohnědá", "violet": "fialová", "lightskyblue": "světlá nebeská modrá", "goldenrod": "béžová", "mediumblue": "středně modrá", "skyblue": "nebeská modrá", "crimson": "karmínová", "darksalmon": "tmavě lososová", "darkred": "tmavě červená", "darkslategrey": "tmavá břidlicová šedá", "peru": "karamelová", "lightgrey": "světle šedá", "lightgoldenrodyellow": "světle žlutá", "blanchedalmond": "mandlová", "aliceblue": "modravá", "bisque": "bledě oranžová", "slategray": "břidlicová šedá", "palegoldenrod": "bledě písková", "darkorange": "tmavě oranžová", "aquamarine": "akvamarínová", "lightgreen": "světle zelená", "burlywood": "krémová", "dodgerblue": "jasně modrá", "darkgray": "tmavě šedá", "lightcyan": "světle azurová", "powderblue": "bledě modrá", "blueviolet": "modrofialová", "orchid": "orchidejová", "dimgray": "kouřově šedá", "beige": "bledě béžová", "fuchsia": "fuchsiová", "lavenderblush": "levandulová růžová", "hotpink": "jasně růžová", "steelblue": "ocelová modrá", "tomato": "tomatová", "lightpink": "světle růžová", "limegreen": "limetkově zelená", "indianred": "indiánská červená", "papayawhip": "papájová", "lightslategray": "světlá břidlicová šedá", "gray": "šedá", "mediumorchid": "středně orchidejová", "cornsilk": "režná", "black": "černá", "seagreen": "mořská zelená", "darkslateblue": "tmavá břidlicová modrá", "khaki": "písková", "lightblue": "světle modrá", "palegreen": "bledě zelená", "azure": "bledě azurová", "peachpuff": "broskvová", "darkolivegreen": "tmavě olivová", "yellowgreen": "žlutozelená"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.cs");dijit.nls.loading.cs={"loadingState": "Probíhá načítání...", "errorState": "Omlouváme se, došlo k chybě"};dojo.provide("dijit.nls.Textarea");dijit.nls.Textarea._built=true;dojo.provide("dijit.nls.Textarea.cs");dijit.nls.Textarea.cs={"iframeEditTitle": "edit area", "iframeFocusTitle": "edit area frame"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.cs");dijit._editor.nls.commands.cs={"removeFormat": "Odebrat formát", "copy": "Kopírovat", "paste": "Vložit", "selectAll": "Vybrat vše", "insertOrderedList": "Číslovaný seznam", "insertTable": "Vložit/upravit tabulku", "underline": "Podtržení", "foreColor": "Barva popředí", "htmlToggle": "Zdroj HTML", "formatBlock": "Styl odstavce", "insertHorizontalRule": "Vodorovné pravítko", "delete": "Odstranit", "insertUnorderedList": "Seznam s odrážkami", "tableProp": "Vlastnost tabulky", "insertImage": "Vložit obraz", "superscript": "Horní index", "subscript": "Dolní index", "createLink": "Vytvořit odkaz", "undo": "Zpět", "italic": "Kurzíva", "fontName": "Název písma", "justifyLeft": "Zarovnat vlevo", "unlink": "Odebrat odkaz", "toggleTableBorder": "Přepnout ohraničení tabulky", "fontSize": "Velikost písma", "indent": "Odsadit", "redo": "Opakovat", "strikethrough": "Přeškrtnutí", "justifyFull": "Do bloku", "justifyCenter": "Zarovnat na střed", "hiliteColor": "Barva pozadí", "deleteTable": "Odstranit tabulku", "outdent": "Předsadit", "cut": "Vyjmout", "plainFormatBlock": "Styl odstavce", "bold": "Tučné", "systemShortcutFF": "Akce \"${0}\" je v prohlížeči Mozilla Firefox dostupná pouze prostřednictvím klávesové zkratky. Použijte klávesy ${1}.", "justifyRight": "Zarovnat vpravo", "appleKey": "⌘${0}", "ctrlKey": "ctrl+${0}"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.cs");dojo.cldr.nls.number.cs={"scientificFormat": "#E0", "currencySpacing-afterCurrency-currencyMatch": "[:letter:]", "infinity": "∞", "list": ";", "percentSign": "%", "minusSign": "-", "currencySpacing-beforeCurrency-surroundingMatch": "[:digit:]", "currencySpacing-afterCurrency-insertBetween": " ", "nan": "NaN", "nativeZeroDigit": "0", "plusSign": "+", "currencySpacing-afterCurrency-surroundingMatch": "[:digit:]", "currencyFormat": "¤ #,##0.00", "currencySpacing-beforeCurrency-currencyMatch": "[:letter:]", "perMille": "‰", "group": ",", "percentFormat": "#,##0%", "decimalFormat": "#,##0.###", "decimal": ".", "patternDigit": "#", "currencySpacing-beforeCurrency-insertBetween": " ", "exponential": "E"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.cs");dijit.nls.common.cs={"buttonCancel": "Storno", "buttonSave": "Uložit", "buttonOk": "OK"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.cs");dijit.form.nls.validate.cs={"rangeMessage": "* Tato hodnota je mimo rozsah.", "invalidMessage": "* Zadaná hodnota není platná.", "missingMessage": "* Tato hodnota je vyžadována."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.cs");dijit.form.nls.ComboBox.cs={"previousMessage": "Předchozí volby", "nextMessage": "Další volby"};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.cs");dojo.cldr.nls.currency.cs={"USD_symbol": "$", "EUR_displayName": "EUR", "GBP_displayName": "GBP", "JPY_displayName": "JPY", "GBP_symbol": "£", "JPY_symbol": "¥", "EUR_symbol": "€", "USD_displayName": "USD"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.cs");dojo.cldr.nls.gregorian.cs={"dateTimeFormats-appendItem-Second": "{0} ({2}: {1})", "field-dayperiod": "Dayperiod", "field-minute": "Minute", "eraNames": ["BCE", "CE"], "field-weekday": "Day of the Week", "months-standAlone-narrow": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"], "dateTimeFormats-appendItem-Year": "{0} {1}", "field-era": "Era", "field-hour": "Hour", "timeFormat-full": "HH:mm:ss z", "dateTimeFormats-appendItem-Week": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Timezone": "{0} {1}", "dateTimeFormats-appendItem-Month": "{0} ({2}: {1})", "days-standAlone-narrow": ["1", "2", "3", "4", "5", "6", "7"], "eraAbbr": ["BCE", "CE"], "dateFormat-long": "yyyy MMMM d", "timeFormat-medium": "HH:mm:ss", "field-zone": "Zone", "dateTimeFormats-appendItem-Minute": "{0} ({2}: {1})", "dateFormat-medium": "yyyy MMM d", "quarters-format-abbreviated": ["Q1", "Q2", "Q3", "Q4"], "dateTimeFormat": "{1} {0}", "field-year": "Year", "dateTimeFormats-appendItem-Day": "{0} ({2}: {1})", "field-week": "Week", "timeFormat-long": "HH:mm:ss z", "months-format-abbr": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"], "timeFormat-short": "HH:mm", "field-month": "Month", "dateTimeFormats-appendItem-Quarter": "{0} ({2}: {1})", "days-format-abbr": ["1", "2", "3", "4", "5", "6", "7"], "pm": "PM", "field-second": "Second", "field-day": "Day", "dateTimeFormats-appendItem-Day-Of-Week": "{0} {1}", "dateTimeFormats-appendItem-Hour": "{0} ({2}: {1})", "am": "AM", "dateFormat-short": "yy/MM/dd", "dateFormat-full": "EEEE, yyyy MMMM dd", "months-format-wide": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"], "dateTimeFormats-appendItem-Era": "{0} {1}", "quarters-format-wide": ["Q1", "Q2", "Q3", "Q4"], "days-format-wide": ["1", "2", "3", "4", "5", "6", "7"]};dojo.provide("dijit.nls.Textarea");dijit.nls.Textarea._built=true;dojo.provide("dijit.nls.Textarea.cs");dijit.nls.Textarea.cs={"iframeEditTitle": "edit area", "iframeFocusTitle": "edit area frame"};
/trunk/api/js/dojo1.0/dijit/nls/ko/loading.js
New file
0,0 → 1,0
({"loadingState": "로드 중...", "errorState": "죄송합니다. 오류가 발생했습니다."})
/trunk/api/js/dojo1.0/dijit/nls/ko/common.js
New file
0,0 → 1,0
({"buttonCancel": "취소", "buttonSave": "저장", "buttonOk": "확인"})
/trunk/api/js/dojo1.0/dijit/nls/dijit-all_es.js
New file
0,0 → 1,0
dojo.provide("dijit.nls.dijit-all_es");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.es");dojo.nls.colors.es={"lightsteelblue": "azul acero claro", "orangered": "rojo anaranjado", "midnightblue": "azul medianoche", "cadetblue": "azul cadete", "seashell": "blanco marfil", "slategrey": "gris pizarra", "coral": "coral", "darkturquoise": "turquesa oscuro", "antiquewhite": "blanco antiguo", "mediumspringgreen": "verde primavera medio", "salmon": "salmón", "darkgrey": "gris oscuro", "ivory": "marfil", "greenyellow": "amarillo verdoso", "mistyrose": "rosa difuminado", "lightsalmon": "salmón claro", "silver": "plateado", "dimgrey": "gris marengo", "orange": "naranja", "white": "blanco", "navajowhite": "blanco navajo", "royalblue": "azul real", "deeppink": "rosa fuerte", "lime": "lima", "oldlace": "encaje antiguo", "chartreuse": "verde pálido 2", "darkcyan": "cian oscuro", "yellow": "amarillo", "linen": "blanco arena", "olive": "verde oliva", "gold": "oro", "lawngreen": "verde césped", "lightyellow": "amarillo claro", "tan": "canela", "darkviolet": "violeta oscuro", "lightslategrey": "gris pizarra claro", "grey": "gris", "darkkhaki": "caqui oscuro", "green": "verde", "deepskyblue": "azul cielo fuerte", "aqua": "aguamarina", "sienna": "siena", "mintcream": "crema menta", "rosybrown": "marrón rosáceo", "mediumslateblue": "azul pizarra medio", "magenta": "magenta", "lightseagreen": "verde mar claro", "cyan": "cian", "olivedrab": "verde oliva pardusco", "darkgoldenrod": "ocre oscuro", "slateblue": "azul pizarra", "mediumaquamarine": "aguamarina medio", "lavender": "lavanda", "mediumseagreen": "verde mar medio", "maroon": "granate", "darkslategray": "gris pizarra oscuro", "mediumturquoise": "turquesa medio", "ghostwhite": "blanco ligero", "darkblue": "azul oscuro", "mediumvioletred": "rojo violáceo medio", "brown": "marrón", "lightgray": "gris claro", "sandybrown": "marrón arcilla", "pink": "rosa", "firebrick": "teja", "indigo": "añil", "snow": "nieve", "darkorchid": "orquídea oscuro", "turquoise": "turquesa", "chocolate": "chocolate", "springgreen": "verde fuerte", "moccasin": "arena", "navy": "azul marino", "lemonchiffon": "amarillo pastel", "teal": "verde azulado", "floralwhite": "blanco manteca", "cornflowerblue": "azul aciano", "paleturquoise": "turquesa pálido", "purple": "púrpura", "gainsboro": "azul gainsboro", "plum": "ciruela", "red": "rojo", "blue": "azul", "forestgreen": "verde pino", "darkgreen": "verde oscuro", "honeydew": "flor de rocío", "darkseagreen": "verde mar oscuro", "lightcoral": "coral claro", "palevioletred": "rojo violáceo pálido", "mediumpurple": "púrpura medio", "saddlebrown": "cuero", "darkmagenta": "magenta oscuro", "thistle": "cardo", "whitesmoke": "blanco ahumado", "wheat": "trigo", "violet": "violeta", "lightskyblue": "azul cielo claro", "goldenrod": "ocre", "mediumblue": "azul medio", "skyblue": "azul cielo", "crimson": "carmesí", "darksalmon": "salmón oscuro", "darkred": "rojo oscuro", "darkslategrey": "gris pizarra oscuro", "peru": "perú", "lightgrey": "gris claro", "lightgoldenrodyellow": "ocre claro", "blanchedalmond": "almendra pálido", "aliceblue": "blanco azulado", "bisque": "miel", "slategray": "gris pizarra", "palegoldenrod": "ocre pálido", "darkorange": "naranja oscuro", "aquamarine": "aguamarina 2", "lightgreen": "verde claro", "burlywood": "madera", "dodgerblue": "azul fuerte", "darkgray": "gris oscuro", "lightcyan": "cian claro", "powderblue": "azul suave", "blueviolet": "azul violáceo", "orchid": "orquídea", "dimgray": "gris marengo", "beige": "beige", "fuchsia": "fucsia", "lavenderblush": "lavanda rosácea", "hotpink": "rosa oscuro", "steelblue": "azul acero", "tomato": "tomate", "lightpink": "rosa claro", "limegreen": "lima limón", "indianred": "rojo teja", "papayawhip": "papaya claro", "lightslategray": "gris pizarra claro", "gray": "gris", "mediumorchid": "orquídea medio", "cornsilk": "crudo", "black": "negro", "seagreen": "verde mar", "darkslateblue": "azul pizarra oscuro", "khaki": "caqui", "lightblue": "azul claro", "palegreen": "verde pálido", "azure": "blanco cielo", "peachpuff": "melocotón", "darkolivegreen": "verde oliva oscuro", "yellowgreen": "verde amarillento"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.es");dijit.nls.loading.es={"loadingState": "Cargando...", "errorState": "Lo siento, se ha producido un error"};dojo.provide("dijit.nls.Textarea");dijit.nls.Textarea._built=true;dojo.provide("dijit.nls.Textarea.es");dijit.nls.Textarea.es={"iframeEditTitle": "edit area", "iframeFocusTitle": "edit area frame"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.es");dijit._editor.nls.commands.es={"removeFormat": "Eliminar formato", "copy": "Copiar", "paste": "Pegar", "selectAll": "Seleccionar todo", "insertOrderedList": "Lista numerada", "insertTable": "Insertar/Editar tabla", "underline": "Subrayado", "foreColor": "Color de primer plano", "htmlToggle": "Fuente HTML", "formatBlock": "Estilo de párrafo", "insertHorizontalRule": "Regla horizontal", "delete": "Suprimir", "insertUnorderedList": "Lista con viñetas", "tableProp": "Propiedad de tabla", "insertImage": "Insertar imagen", "superscript": "Superíndice", "subscript": "Subíndice", "createLink": "Crear enlace", "undo": "Deshacer", "italic": "Cursiva", "fontName": "Nombre de font", "justifyLeft": "Alinear izquierda", "unlink": "Eliminar enlace", "toggleTableBorder": "Conmutar borde de tabla", "ctrlKey": "Control+${0}", "fontSize": "Tamaño de font", "indent": "Sangría", "redo": "Rehacer", "strikethrough": "Tachado", "justifyFull": "Justificar", "justifyCenter": "Alinear centro", "hiliteColor": "Color de segundo plano", "deleteTable": "Suprimir tabla", "outdent": "Anular sangría", "cut": "Cortar", "plainFormatBlock": "Estilo de párrafo", "bold": "Negrita", "systemShortcutFF": "La acción \"${0}\" sólo está disponible en Mozilla Firefox mediante un atajo de teclado. Utilice ${1}.", "justifyRight": "Alinear derecha", "appleKey": "⌘${0}"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.es");dojo.cldr.nls.number.es={"currencyFormat": "¤#,##0.00;(¤#,##0.00)", "group": ".", "decimal": ",", "scientificFormat": "#E0", "currencySpacing-afterCurrency-currencyMatch": "[:letter:]", "infinity": "∞", "list": ";", "percentSign": "%", "minusSign": "-", "currencySpacing-beforeCurrency-surroundingMatch": "[:digit:]", "currencySpacing-afterCurrency-insertBetween": " ", "nan": "NaN", "nativeZeroDigit": "0", "plusSign": "+", "currencySpacing-afterCurrency-surroundingMatch": "[:digit:]", "currencySpacing-beforeCurrency-currencyMatch": "[:letter:]", "perMille": "‰", "percentFormat": "#,##0%", "decimalFormat": "#,##0.###", "patternDigit": "#", "currencySpacing-beforeCurrency-insertBetween": " ", "exponential": "E"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.es");dijit.nls.common.es={"buttonCancel": "Cancelar", "buttonSave": "Guardar", "buttonOk": "Aceptar"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.es");dijit.form.nls.validate.es={"rangeMessage": "* Este valor está fuera del intervalo.", "invalidMessage": "* El valor especificado no es válido.", "missingMessage": "* Este valor es necesario."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.es");dijit.form.nls.ComboBox.es={"previousMessage": "Opciones anteriores", "nextMessage": "Más opciones"};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.es");dojo.cldr.nls.currency.es={"HKD_displayName": "dólar de Hong Kong", "CHF_displayName": "franco suizo", "CHF_symbol": "SwF", "HKD_symbol": "HK$", "CAD_displayName": "dólar canadiense", "USD_symbol": "US$", "AUD_displayName": "dólar australiano", "JPY_displayName": "yen japonés", "CAD_symbol": "Can$", "USD_displayName": "dólar estadounidense", "GBP_displayName": "libra esterlina británica", "AUD_symbol": "$A", "EUR_displayName": "euro", "GBP_symbol": "£", "JPY_symbol": "¥", "EUR_symbol": "€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.es");dojo.cldr.nls.gregorian.es={"quarters-format-abbreviated": ["T1", "T2", "T3", "T4"], "dateFormat-medium": "dd-MMM-yy", "field-second": "segundo", "field-week": "semana", "pm": "p.m.", "timeFormat-full": "HH'H'mm''ss\" z", "months-standAlone-narrow": ["E", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], "am": "a.m.", "days-standAlone-narrow": ["D", "L", "M", "M", "J", "V", "S"], "field-year": "año", "field-minute": "minuto", "field-hour": "hora", "dateFormat-long": "d' de 'MMMM' de 'yyyy", "field-day": "día", "field-dayperiod": "periodo del día", "field-month": "mes", "dateFormat-short": "d/MM/yy", "months-format-wide": ["enero", "febrero", "marzo", "abril", "mayo", "junio", "julio", "agosto", "septiembre", "octubre", "noviembre", "diciembre"], "field-era": "era", "months-format-abbr": ["ene", "feb", "mar", "abr", "may", "jun", "jul", "ago", "sep", "oct", "nov", "dic"], "days-format-wide": ["domingo", "lunes", "martes", "miércoles", "jueves", "viernes", "sábado"], "eraAbbr": ["a.C.", "d.C."], "quarters-format-wide": ["1er trimestre", "2º trimestre", "3er trimestre", "4º trimestre"], "dateFormat-full": "EEEE d' de 'MMMM' de 'yyyy", "field-weekday": "día de la semana", "days-format-abbr": ["dom", "lun", "mar", "mié", "jue", "vie", "sáb"], "field-zone": "zona", "dateTimeFormats-appendItem-Second": "{0} ({2}: {1})", "eraNames": ["BCE", "CE"], "dateTimeFormats-appendItem-Year": "{0} {1}", "dateTimeFormats-appendItem-Week": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Timezone": "{0} {1}", "dateTimeFormats-appendItem-Month": "{0} ({2}: {1})", "timeFormat-medium": "HH:mm:ss", "dateTimeFormats-appendItem-Minute": "{0} ({2}: {1})", "dateTimeFormat": "{1} {0}", "dateTimeFormats-appendItem-Day": "{0} ({2}: {1})", "timeFormat-long": "HH:mm:ss z", "timeFormat-short": "HH:mm", "dateTimeFormats-appendItem-Quarter": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Day-Of-Week": "{0} {1}", "dateTimeFormats-appendItem-Hour": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Era": "{0} {1}"};dojo.provide("dijit.nls.Textarea");dijit.nls.Textarea._built=true;dojo.provide("dijit.nls.Textarea.es");dijit.nls.Textarea.es={"iframeEditTitle": "edit area", "iframeFocusTitle": "edit area frame"};
/trunk/api/js/dojo1.0/dijit/nls/it/loading.js
New file
0,0 → 1,0
({"loadingState": "Caricamento in corso...", "errorState": "Si è verificato un errore"})
/trunk/api/js/dojo1.0/dijit/nls/it/common.js
New file
0,0 → 1,0
({"buttonCancel": "Annulla", "buttonSave": "Salva", "buttonOk": "OK"})
/trunk/api/js/dojo1.0/dijit/nls/dijit-all_zh-tw.js
New file
0,0 → 1,0
dojo.provide("dijit.nls.dijit-all_zh-tw");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.zh_tw");dojo.nls.colors.zh_tw={"lightsteelblue": "淡鐵藍色", "orangered": "橙紅色", "midnightblue": "午夜藍", "cadetblue": "軍服藍", "seashell": "海貝色", "slategrey": "岩灰色", "coral": "珊瑚紅", "darkturquoise": "暗松石綠", "antiquewhite": "米白色", "mediumspringgreen": "中春綠色", "salmon": "鮭紅色", "darkgrey": "暗灰色", "ivory": "象牙色", "greenyellow": "綠黃色", "mistyrose": "霧玫瑰色", "lightsalmon": "淡鮭紅", "silver": "銀色", "dimgrey": "昏灰色", "orange": "橙色", "white": "白色", "navajowhite": "印地安黃色", "royalblue": "品藍色", "deeppink": "深粉紅色", "lime": "檸檬色", "oldlace": "舊蕾絲色", "chartreuse": "淡黃綠色", "darkcyan": "暗青色", "yellow": "黃色", "linen": "亞麻色", "olive": "橄欖色", "gold": "金色", "lawngreen": "草綠色", "lightyellow": "淡黃色", "tan": "皮革色", "darkviolet": "暗紫羅蘭色", "lightslategrey": "淡岩灰色", "grey": "灰色", "darkkhaki": "暗卡其色", "green": "綠色", "deepskyblue": "深天藍色", "aqua": "水色", "sienna": "黃土赭色", "mintcream": "薄荷乳白色", "rosybrown": "玫瑰褐", "mediumslateblue": "中岩藍色", "magenta": "紫紅色", "lightseagreen": "淡海綠色", "cyan": "青色", "olivedrab": "橄欖綠", "darkgoldenrod": "暗金菊色", "slateblue": "岩藍色", "mediumaquamarine": "中碧綠色", "lavender": "薰衣草紫", "mediumseagreen": "中海綠色", "maroon": "栗色", "darkslategray": "暗岩灰色", "mediumturquoise": "中松石綠", "ghostwhite": "幽靈色", "darkblue": "暗藍色", "mediumvioletred": "中紫羅蘭紅", "brown": "褐色", "lightgray": "淡灰色", "sandybrown": "沙褐色", "pink": "粉紅色", "firebrick": "紅磚色", "indigo": "靛藍色", "snow": "雪白色", "darkorchid": "暗蘭花色", "turquoise": "松石綠", "chocolate": "巧克力色", "springgreen": "春綠色", "moccasin": "鹿皮黃色", "navy": "海軍藍", "lemonchiffon": "奶油黃", "teal": "深藍綠色", "floralwhite": "花卉白", "cornflowerblue": "矢車菊藍", "paleturquoise": "灰松石綠", "purple": "紫色", "gainsboro": "石板灰", "plum": "李紫色", "red": "紅色", "blue": "藍色", "forestgreen": "森綠色", "darkgreen": "暗綠色", "honeydew": "密瓜色", "darkseagreen": "暗海綠色", "lightcoral": "淡珊瑚紅", "palevioletred": "灰紫羅蘭紅", "mediumpurple": "中紫色", "saddlebrown": "鞍褐色", "darkmagenta": "暗紫紅色", "thistle": "薊色", "whitesmoke": "白煙色", "wheat": "小麥色", "violet": "紫羅蘭色", "lightskyblue": "淡天藍色", "goldenrod": "金菊色", "mediumblue": "中藍色", "skyblue": "天藍色", "crimson": "暗深紅色", "darksalmon": "暗鮭紅", "darkred": "暗紅色", "darkslategrey": "暗岩灰色", "peru": "祕魯色", "lightgrey": "淡灰色", "lightgoldenrodyellow": "淡金菊黃", "blanchedalmond": "杏仁白", "aliceblue": "愛麗絲藍", "bisque": "橘黃色", "slategray": "岩灰色", "palegoldenrod": "灰金菊色", "darkorange": "暗橙色", "aquamarine": "碧綠色", "lightgreen": "淡綠色", "burlywood": "實木色", "dodgerblue": "道奇藍", "darkgray": "暗灰色", "lightcyan": "淡青色", "powderblue": "粉藍色", "blueviolet": "藍紫色", "orchid": "蘭花色", "dimgray": "昏灰色", "beige": "灰棕色", "fuchsia": "海棠紅", "lavenderblush": "薰衣草紫紅", "hotpink": "暖粉紅色", "steelblue": "鐵藍色", "tomato": "蕃茄紅", "lightpink": "淡粉紅色", "limegreen": "檸檬綠", "indianred": "印度紅", "papayawhip": "番木瓜色", "lightslategray": "淡岩灰色", "gray": "灰色", "mediumorchid": "中蘭紫色", "cornsilk": "玉米黃", "black": "黑色", "seagreen": "海綠色", "darkslateblue": "暗岩藍色", "khaki": "卡其色", "lightblue": "淡藍色", "palegreen": "灰綠色", "azure": "天藍色", "peachpuff": "粉撲桃色", "darkolivegreen": "暗橄欖綠", "yellowgreen": "黃綠色"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.zh_tw");dijit.nls.loading.zh_tw={"loadingState": "載入中...", "errorState": "抱歉,發生錯誤"};dojo.provide("dijit.nls.Textarea");dijit.nls.Textarea._built=true;dojo.provide("dijit.nls.Textarea.zh_tw");dijit.nls.Textarea.zh_tw={"iframeEditTitle": "edit area", "iframeFocusTitle": "edit area frame"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.zh_tw");dijit._editor.nls.commands.zh_tw={"removeFormat": "移除格式", "copy": "複製", "paste": "貼上", "selectAll": "全選", "insertOrderedList": "編號清單", "insertTable": "插入/編輯表格", "underline": "底線", "foreColor": "前景顏色", "htmlToggle": "HTML 原始檔", "formatBlock": "段落樣式", "insertHorizontalRule": "水平尺規", "delete": "刪除", "insertUnorderedList": "項目符號清單", "tableProp": "表格內容", "insertImage": "插入影像", "superscript": "上標", "subscript": "下標", "createLink": "建立鏈結", "undo": "復原", "italic": "斜體", "fontName": "字型名稱", "justifyLeft": "靠左對齊", "unlink": "移除鏈結", "toggleTableBorder": "切換表格邊框", "fontSize": "字型大小", "indent": "縮排", "redo": "重做", "strikethrough": "加刪除線", "justifyFull": "對齊", "justifyCenter": "置中對齊", "hiliteColor": "背景顏色", "deleteTable": "刪除表格", "outdent": "凸排", "cut": "剪下", "plainFormatBlock": "段落樣式", "bold": "粗體", "systemShortcutFF": "\"${0}\" 動作在 Mozilla Firefox 中,只能使用鍵盤快速鍵。請使用 ${1}。", "justifyRight": "靠右對齊", "appleKey": "⌘${0}", "ctrlKey": "ctrl+${0}"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.zh_tw");dojo.cldr.nls.number.zh_tw={"currencyFormat": "¤#,##0.00", "scientificFormat": "#E0", "currencySpacing-afterCurrency-currencyMatch": "[:letter:]", "infinity": "∞", "list": ";", "percentSign": "%", "minusSign": "-", "currencySpacing-beforeCurrency-surroundingMatch": "[:digit:]", "currencySpacing-afterCurrency-insertBetween": " ", "nan": "NaN", "nativeZeroDigit": "0", "plusSign": "+", "currencySpacing-afterCurrency-surroundingMatch": "[:digit:]", "currencySpacing-beforeCurrency-currencyMatch": "[:letter:]", "perMille": "‰", "group": ",", "percentFormat": "#,##0%", "decimalFormat": "#,##0.###", "decimal": ".", "patternDigit": "#", "currencySpacing-beforeCurrency-insertBetween": " ", "exponential": "E"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.zh_tw");dijit.nls.common.zh_tw={"buttonCancel": "取消", "buttonSave": "儲存", "buttonOk": "確定"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.zh_tw");dijit.form.nls.validate.zh_tw={"rangeMessage": "* 此值超出範圍。", "invalidMessage": "* 輸入的值無效。", "missingMessage": "* 必須提供此值。"};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.zh_tw");dijit.form.nls.ComboBox.zh_tw={"previousMessage": "前一個選擇項", "nextMessage": "其他選擇項"};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.zh_tw");dojo.cldr.nls.currency.zh_tw={"HKD_displayName": "港元", "CHF_displayName": "瑞士法郎", "JPY_symbol": "JP¥", "HKD_symbol": "HK$", "CAD_displayName": "加拿大元", "USD_symbol": "US$", "AUD_displayName": "澳大利亚元", "JPY_displayName": "日元", "USD_displayName": "美元", "GBP_displayName": "英磅", "EUR_displayName": "欧元", "GBP_symbol": "£", "EUR_symbol": "€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.zh_tw");dojo.cldr.nls.gregorian.zh_tw={"eraAbbr": ["公元前", "公元"], "am": "上午", "months-format-abbr": ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"], "days-format-abbr": ["周日", "周一", "周二", "周三", "周四", "周五", "周六"], "pm": "下午", "months-format-wide": ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"], "months-standAlone-narrow": ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"], "days-standAlone-narrow": ["日", "一", "二", "三", "四", "五", "六"], "days-format-wide": ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"], "dateTimeFormats-appendItem-Second": "{0} ({2}: {1})", "field-dayperiod": "Dayperiod", "field-minute": "Minute", "eraNames": ["BCE", "CE"], "field-weekday": "Day of the Week", "dateTimeFormats-appendItem-Year": "{0} {1}", "field-era": "Era", "field-hour": "Hour", "timeFormat-full": "HH:mm:ss z", "dateTimeFormats-appendItem-Week": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Timezone": "{0} {1}", "dateTimeFormats-appendItem-Month": "{0} ({2}: {1})", "dateFormat-long": "yyyy MMMM d", "timeFormat-medium": "HH:mm:ss", "field-zone": "Zone", "dateTimeFormats-appendItem-Minute": "{0} ({2}: {1})", "dateFormat-medium": "yyyy MMM d", "quarters-format-abbreviated": ["Q1", "Q2", "Q3", "Q4"], "dateTimeFormat": "{1} {0}", "field-year": "Year", "dateTimeFormats-appendItem-Day": "{0} ({2}: {1})", "field-week": "Week", "timeFormat-long": "HH:mm:ss z", "timeFormat-short": "HH:mm", "field-month": "Month", "dateTimeFormats-appendItem-Quarter": "{0} ({2}: {1})", "field-second": "Second", "field-day": "Day", "dateTimeFormats-appendItem-Day-Of-Week": "{0} {1}", "dateTimeFormats-appendItem-Hour": "{0} ({2}: {1})", "dateFormat-short": "yy/MM/dd", "dateFormat-full": "EEEE, yyyy MMMM dd", "dateTimeFormats-appendItem-Era": "{0} {1}", "quarters-format-wide": ["Q1", "Q2", "Q3", "Q4"]};dojo.provide("dijit.nls.Textarea");dijit.nls.Textarea._built=true;dojo.provide("dijit.nls.Textarea.zh_tw");dijit.nls.Textarea.zh_tw={"iframeEditTitle": "edit area", "iframeFocusTitle": "edit area frame"};
/trunk/api/js/dojo1.0/dijit/nls/dijit-all_ko.js
New file
0,0 → 1,0
dojo.provide("dijit.nls.dijit-all_ko");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.ko");dojo.nls.colors.ko={"lightsteelblue": "라이트 스틸 블루(light steel blue)", "orangered": "오렌지 레드(orange red)", "midnightblue": "미드나잇 블루(midnight blue)", "cadetblue": "카뎃 블루(cadet blue)", "seashell": "씨쉘(seashell)", "slategrey": "슬레이트 그레이(slate gray)", "coral": "코랄(coral)", "darkturquoise": "다크 터콰즈(dark turquoise)", "antiquewhite": "앤틱 화이트(antique white)", "mediumspringgreen": "미디엄 스프링 그린(medium spring green)", "salmon": "샐몬(salmon)", "darkgrey": "다크 그레이(dark gray)", "ivory": "아이보리(ivory)", "greenyellow": "그린 옐로우(green-yellow)", "mistyrose": "미스티 로즈(misty rose)", "lightsalmon": "라이트 샐몬(light salmon)", "silver": "실버(silver)", "dimgrey": "딤 그레이(dim gray)", "orange": "오렌지(orange)", "white": "화이트(white)", "navajowhite": "나바호 화이트(navajo white)", "royalblue": "로얄 블루(royal blue)", "deeppink": "딥 핑크(deep pink)", "lime": "라임(lime)", "oldlace": "올드 레이스(old lace)", "chartreuse": "샤르트뢰즈(chartreuse)", "darkcyan": "다크 시안(dark cyan)", "yellow": "옐로우(yellow)", "linen": "리넨(linen)", "olive": "올리브(olive)", "gold": "골드(gold)", "lawngreen": "론 그린(lawn green)", "lightyellow": "라이트 옐로우(light yellow)", "tan": "탠(tan)", "darkviolet": "다크 바이올렛(dark violet)", "lightslategrey": "라이트 슬레이트 그레이(light slate gray)", "grey": "그레이(gray)", "darkkhaki": "다크 카키(dark khaki)", "green": "그린(green)", "deepskyblue": "딥 스카이 블루(deep sky blue)", "aqua": "아쿠아(aqua)", "sienna": "시에나(sienna)", "mintcream": "민트 크림(mint cream)", "rosybrown": "로지 브라운(rosy brown)", "mediumslateblue": "미디엄 슬레이트 블루(medium slate blue)", "magenta": "마젠타(magenta)", "lightseagreen": "라이트 씨 그린(light sea green)", "cyan": "시안(cyan)", "olivedrab": "올리브 드랩(olive drab)", "darkgoldenrod": "다크 골든로드(dark goldenrod)", "slateblue": "슬레이트 블루(slate blue)", "mediumaquamarine": "미디엄 아쿠아마린(medium aquamarine)", "lavender": "라벤더(lavender)", "mediumseagreen": "미디엄 씨 그린(medium sea green)", "maroon": "마룬(maroon)", "darkslategray": "다크 슬레이트 그레이(dark slate gray)", "mediumturquoise": "미디엄 터콰즈(medium turquoise)", "ghostwhite": "고스트 화이트(ghost white)", "darkblue": "다크 블루(dark blue)", "mediumvioletred": "미디엄 바이올렛 레드(medium violet-red)", "brown": "브라운(brown)", "lightgray": "라이트 그레이(light gray)", "sandybrown": "샌디 브라운(sandy brown)", "pink": "핑크(pink)", "firebrick": "파이어 브릭(fire brick)", "indigo": "인디고(indigo)", "snow": "스노우(snow)", "darkorchid": "다크 오키드(dark orchid)", "turquoise": "터콰즈(turquoise)", "chocolate": "초콜렛(chocolate)", "springgreen": "스프링 그린(spring green)", "moccasin": "모카신(moccasin)", "navy": "네이비(navy)", "lemonchiffon": "레몬 쉬폰(lemon chiffon)", "teal": "틸(teal)", "floralwhite": "플로랄 화이트(floral white)", "cornflowerblue": "콘플라워 블루(cornflower blue)", "paleturquoise": "페일 터콰즈(pale turquoise)", "purple": "퍼플(purple)", "gainsboro": "게인스브로(gainsboro)", "plum": "플럼(plum)", "red": "레드(red)", "blue": "블루(blue)", "forestgreen": "포레스트 그린(forest green)", "darkgreen": "다크 그린(dark green)", "honeydew": "허니듀(honeydew)", "darkseagreen": "다크 씨 그린(dark sea green)", "lightcoral": "라이트 코랄(light coral)", "palevioletred": "페일 바이올렛 레드(pale violet-red)", "mediumpurple": "미디엄 퍼플(medium purple)", "saddlebrown": "새들 브라운(saddle brown)", "darkmagenta": "다크 마젠타(dark magenta)", "thistle": "시슬(thistle)", "whitesmoke": "화이트 스모크(white smoke)", "wheat": "휘트(wheat)", "violet": "바이올렛(violet)", "lightskyblue": "라이트 스카이 블루(light sky blue)", "goldenrod": "골든로드(goldenrod)", "mediumblue": "미디엄 블루(medium blue)", "skyblue": "스카이 블루(sky blue)", "crimson": "크림슨(crimson)", "darksalmon": "다크 샐몬(dark salmon)", "darkred": "다크 레드(dark red)", "darkslategrey": "다크 슬레이트 그레이(dark slate gray)", "peru": "페루(peru)", "lightgrey": "라이트 그레이(light gray)", "lightgoldenrodyellow": "라이트 골든로드 옐로우(light goldenrod yellow)", "blanchedalmond": "블랜치 아몬드(blanched almond)", "aliceblue": "앨리스 블루(alice blue)", "bisque": "비스크(bisque)", "slategray": "슬레이트 그레이(slate gray)", "palegoldenrod": "페일 골든로드(pale goldenrod)", "darkorange": "다크 오렌지(dark orange)", "aquamarine": "아쿠아마린(aquamarine)", "lightgreen": "라이트 그린(light green)", "burlywood": "벌리우드(burlywood)", "dodgerblue": "다저 블루(dodger blue)", "darkgray": "다크 그레이(dark gray)", "lightcyan": "라이트 시안(light cyan)", "powderblue": "파우더 블루(powder blue)", "blueviolet": "블루 바이올렛(blue-violet)", "orchid": "오키드(orchid)", "dimgray": "딤 그레이(dim gray)", "beige": "베이지(beige)", "fuchsia": "후크샤(fuchsia)", "lavenderblush": "라벤더 블러쉬(lavender blush)", "hotpink": "핫 핑크(hot pink)", "steelblue": "스틸 블루(steel blue)", "tomato": "토마토(tomato)", "lightpink": "라이트 핑크(light pink)", "limegreen": "라임 그린(lime green)", "indianred": "인디안 레드(indian red)", "papayawhip": "파파야 휩(papaya whip)", "lightslategray": "라이트 슬레이트 그레이(light slate gray)", "gray": "그레이(gray)", "mediumorchid": "미디엄 오키드(medium orchid)", "cornsilk": "콘실크(cornsilk)", "black": "블랙(black)", "seagreen": "씨 그린(sea green)", "darkslateblue": "다크 슬레이트 블루(dark slate blue)", "khaki": "카키(khaki)", "lightblue": "라이트 블루(light blue)", "palegreen": "페일 그린(pale green)", "azure": "애쥬어(azure)", "peachpuff": "피치 퍼프(peach puff)", "darkolivegreen": "다크 올리브 그린(dark olive green)", "yellowgreen": "옐로우 그린(yellow green)"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.ko");dijit.nls.loading.ko={"loadingState": "로드 중...", "errorState": "죄송합니다. 오류가 발생했습니다."};dojo.provide("dijit.nls.Textarea");dijit.nls.Textarea._built=true;dojo.provide("dijit.nls.Textarea.ko");dijit.nls.Textarea.ko={"iframeEditTitle": "edit area", "iframeFocusTitle": "edit area frame"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.ko");dijit._editor.nls.commands.ko={"removeFormat": "형식 제거", "copy": "복사", "paste": "붙여넣기", "selectAll": "모두 선택", "insertOrderedList": "번호 목록", "insertTable": "테이블 삽입/편집", "underline": "밑줄", "foreColor": "전경색", "htmlToggle": "HTML 소스", "formatBlock": "단락 양식", "insertHorizontalRule": "수평 자", "delete": "삭제", "insertUnorderedList": "글머리표 목록", "tableProp": "테이블 특성", "insertImage": "이미지 삽입", "superscript": "위첨자", "subscript": "아래첨자", "createLink": "링크 작성", "undo": "실행 취소", "italic": "이탤릭체", "fontName": "글꼴 이름", "justifyLeft": "왼쪽 맞춤", "unlink": "링크 제거", "toggleTableBorder": "토글 테이블 경계", "fontSize": "글꼴 크기", "indent": "들여쓰기", "redo": "다시 실행", "strikethrough": "취소선", "justifyFull": "양쪽 맞춤", "justifyCenter": "가운데 맞춤", "hiliteColor": "배경색", "deleteTable": "테이블 삭제", "outdent": "내어쓰기", "cut": "잘라내기", "plainFormatBlock": "단락 양식", "bold": "굵은체", "systemShortcutFF": "\"${0}\" 조치는 키보드 바로 가기를 사용하는 Mozilla Firefox에서만 사용 가능합니다. ${1} 사용.", "justifyRight": "오른쪽 맞춤", "appleKey": "⌘${0}", "ctrlKey": "ctrl+${0}"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.ko");dojo.cldr.nls.number.ko={"scientificFormat": "#E0", "currencySpacing-afterCurrency-currencyMatch": "[:letter:]", "infinity": "∞", "list": ";", "percentSign": "%", "minusSign": "-", "currencySpacing-beforeCurrency-surroundingMatch": "[:digit:]", "currencySpacing-afterCurrency-insertBetween": " ", "nan": "NaN", "nativeZeroDigit": "0", "plusSign": "+", "currencySpacing-afterCurrency-surroundingMatch": "[:digit:]", "currencyFormat": "¤ #,##0.00", "currencySpacing-beforeCurrency-currencyMatch": "[:letter:]", "perMille": "‰", "group": ",", "percentFormat": "#,##0%", "decimalFormat": "#,##0.###", "decimal": ".", "patternDigit": "#", "currencySpacing-beforeCurrency-insertBetween": " ", "exponential": "E"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.ko");dijit.nls.common.ko={"buttonCancel": "취소", "buttonSave": "저장", "buttonOk": "확인"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.ko");dijit.form.nls.validate.ko={"rangeMessage": "* 이 값은 범위를 벗어납니다. ", "invalidMessage": "* 입력한 값이 유효하지 않습니다. ", "missingMessage": "* 이 값은 필수입니다. "};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.ko");dijit.form.nls.ComboBox.ko={"previousMessage": "이전 선택사항", "nextMessage": "기타 선택사항"};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.ko");dojo.cldr.nls.currency.ko={"HKD_displayName": "홍콩 달러", "CHF_displayName": "스위스 프랑달러", "JPY_symbol": "¥", "CAD_displayName": "캐나다 달러", "USD_symbol": "US$", "AUD_displayName": "호주 달러", "JPY_displayName": "일본 엔화", "USD_displayName": "미국 달러", "GBP_displayName": "영국령 파운드 스털링", "EUR_displayName": "유로화", "GBP_symbol": "£", "EUR_symbol": "€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.ko");dojo.cldr.nls.gregorian.ko={"dateFormat-medium": "yyyy. MM. dd", "pm": "오후", "timeFormat-full": "a hh'시' mm'분' ss'초' z", "months-standAlone-narrow": ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"], "eraNames": ["서력기원전", "서력기원"], "am": "오전", "days-standAlone-narrow": ["일", "월", "화", "수", "목", "금", "토"], "timeFormat-medium": "a hh'시' mm'분'", "dateFormat-long": "yyyy'년' M'월' d'일'", "dateFormat-short": "yy. MM. dd", "months-format-wide": ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"], "timeFormat-short": "a hh'시' mm'분'", "months-format-abbr": ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"], "days-format-wide": ["일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일"], "timeFormat-long": "a hh'시' mm'분' ss'초'", "eraAbbr": ["기원전", "서기"], "dateFormat-full": "yyyy'년' M'월' d'일' EEEE", "days-format-abbr": ["일", "월", "화", "수", "목", "금", "토"], "dateTimeFormats-appendItem-Second": "{0} ({2}: {1})", "field-dayperiod": "Dayperiod", "field-minute": "Minute", "field-weekday": "Day of the Week", "dateTimeFormats-appendItem-Year": "{0} {1}", "field-era": "Era", "field-hour": "Hour", "dateTimeFormats-appendItem-Week": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Timezone": "{0} {1}", "dateTimeFormats-appendItem-Month": "{0} ({2}: {1})", "field-zone": "Zone", "dateTimeFormats-appendItem-Minute": "{0} ({2}: {1})", "quarters-format-abbreviated": ["Q1", "Q2", "Q3", "Q4"], "dateTimeFormat": "{1} {0}", "field-year": "Year", "dateTimeFormats-appendItem-Day": "{0} ({2}: {1})", "field-week": "Week", "field-month": "Month", "dateTimeFormats-appendItem-Quarter": "{0} ({2}: {1})", "field-second": "Second", "field-day": "Day", "dateTimeFormats-appendItem-Day-Of-Week": "{0} {1}", "dateTimeFormats-appendItem-Hour": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Era": "{0} {1}", "quarters-format-wide": ["Q1", "Q2", "Q3", "Q4"]};dojo.provide("dijit.nls.Textarea");dijit.nls.Textarea._built=true;dojo.provide("dijit.nls.Textarea.ko");dijit.nls.Textarea.ko={"iframeEditTitle": "edit area", "iframeFocusTitle": "edit area frame"};
/trunk/api/js/dojo1.0/dijit/nls/dijit-all_es-es.js
New file
0,0 → 1,0
dojo.provide("dijit.nls.dijit-all_es-es");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.es_es");dojo.nls.colors.es_es={"lightsteelblue": "azul acero claro", "orangered": "rojo anaranjado", "midnightblue": "azul medianoche", "cadetblue": "azul cadete", "seashell": "blanco marfil", "slategrey": "gris pizarra", "coral": "coral", "darkturquoise": "turquesa oscuro", "antiquewhite": "blanco antiguo", "mediumspringgreen": "verde primavera medio", "salmon": "salmón", "darkgrey": "gris oscuro", "ivory": "marfil", "greenyellow": "amarillo verdoso", "mistyrose": "rosa difuminado", "lightsalmon": "salmón claro", "silver": "plateado", "dimgrey": "gris marengo", "orange": "naranja", "white": "blanco", "navajowhite": "blanco navajo", "royalblue": "azul real", "deeppink": "rosa fuerte", "lime": "lima", "oldlace": "encaje antiguo", "chartreuse": "verde pálido 2", "darkcyan": "cian oscuro", "yellow": "amarillo", "linen": "blanco arena", "olive": "verde oliva", "gold": "oro", "lawngreen": "verde césped", "lightyellow": "amarillo claro", "tan": "canela", "darkviolet": "violeta oscuro", "lightslategrey": "gris pizarra claro", "grey": "gris", "darkkhaki": "caqui oscuro", "green": "verde", "deepskyblue": "azul cielo fuerte", "aqua": "aguamarina", "sienna": "siena", "mintcream": "crema menta", "rosybrown": "marrón rosáceo", "mediumslateblue": "azul pizarra medio", "magenta": "magenta", "lightseagreen": "verde mar claro", "cyan": "cian", "olivedrab": "verde oliva pardusco", "darkgoldenrod": "ocre oscuro", "slateblue": "azul pizarra", "mediumaquamarine": "aguamarina medio", "lavender": "lavanda", "mediumseagreen": "verde mar medio", "maroon": "granate", "darkslategray": "gris pizarra oscuro", "mediumturquoise": "turquesa medio", "ghostwhite": "blanco ligero", "darkblue": "azul oscuro", "mediumvioletred": "rojo violáceo medio", "brown": "marrón", "lightgray": "gris claro", "sandybrown": "marrón arcilla", "pink": "rosa", "firebrick": "teja", "indigo": "añil", "snow": "nieve", "darkorchid": "orquídea oscuro", "turquoise": "turquesa", "chocolate": "chocolate", "springgreen": "verde fuerte", "moccasin": "arena", "navy": "azul marino", "lemonchiffon": "amarillo pastel", "teal": "verde azulado", "floralwhite": "blanco manteca", "cornflowerblue": "azul aciano", "paleturquoise": "turquesa pálido", "purple": "púrpura", "gainsboro": "azul gainsboro", "plum": "ciruela", "red": "rojo", "blue": "azul", "forestgreen": "verde pino", "darkgreen": "verde oscuro", "honeydew": "flor de rocío", "darkseagreen": "verde mar oscuro", "lightcoral": "coral claro", "palevioletred": "rojo violáceo pálido", "mediumpurple": "púrpura medio", "saddlebrown": "cuero", "darkmagenta": "magenta oscuro", "thistle": "cardo", "whitesmoke": "blanco ahumado", "wheat": "trigo", "violet": "violeta", "lightskyblue": "azul cielo claro", "goldenrod": "ocre", "mediumblue": "azul medio", "skyblue": "azul cielo", "crimson": "carmesí", "darksalmon": "salmón oscuro", "darkred": "rojo oscuro", "darkslategrey": "gris pizarra oscuro", "peru": "perú", "lightgrey": "gris claro", "lightgoldenrodyellow": "ocre claro", "blanchedalmond": "almendra pálido", "aliceblue": "blanco azulado", "bisque": "miel", "slategray": "gris pizarra", "palegoldenrod": "ocre pálido", "darkorange": "naranja oscuro", "aquamarine": "aguamarina 2", "lightgreen": "verde claro", "burlywood": "madera", "dodgerblue": "azul fuerte", "darkgray": "gris oscuro", "lightcyan": "cian claro", "powderblue": "azul suave", "blueviolet": "azul violáceo", "orchid": "orquídea", "dimgray": "gris marengo", "beige": "beige", "fuchsia": "fucsia", "lavenderblush": "lavanda rosácea", "hotpink": "rosa oscuro", "steelblue": "azul acero", "tomato": "tomate", "lightpink": "rosa claro", "limegreen": "lima limón", "indianred": "rojo teja", "papayawhip": "papaya claro", "lightslategray": "gris pizarra claro", "gray": "gris", "mediumorchid": "orquídea medio", "cornsilk": "crudo", "black": "negro", "seagreen": "verde mar", "darkslateblue": "azul pizarra oscuro", "khaki": "caqui", "lightblue": "azul claro", "palegreen": "verde pálido", "azure": "blanco cielo", "peachpuff": "melocotón", "darkolivegreen": "verde oliva oscuro", "yellowgreen": "verde amarillento"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.es_es");dijit.nls.loading.es_es={"loadingState": "Cargando...", "errorState": "Lo siento, se ha producido un error"};dojo.provide("dijit.nls.Textarea");dijit.nls.Textarea._built=true;dojo.provide("dijit.nls.Textarea.es_es");dijit.nls.Textarea.es_es={"iframeEditTitle": "edit area", "iframeFocusTitle": "edit area frame"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.es_es");dijit._editor.nls.commands.es_es={"removeFormat": "Eliminar formato", "copy": "Copiar", "paste": "Pegar", "selectAll": "Seleccionar todo", "insertOrderedList": "Lista numerada", "insertTable": "Insertar/Editar tabla", "underline": "Subrayado", "foreColor": "Color de primer plano", "htmlToggle": "Fuente HTML", "formatBlock": "Estilo de párrafo", "insertHorizontalRule": "Regla horizontal", "delete": "Suprimir", "insertUnorderedList": "Lista con viñetas", "tableProp": "Propiedad de tabla", "insertImage": "Insertar imagen", "superscript": "Superíndice", "subscript": "Subíndice", "createLink": "Crear enlace", "undo": "Deshacer", "italic": "Cursiva", "fontName": "Nombre de font", "justifyLeft": "Alinear izquierda", "unlink": "Eliminar enlace", "toggleTableBorder": "Conmutar borde de tabla", "ctrlKey": "Control+${0}", "fontSize": "Tamaño de font", "indent": "Sangría", "redo": "Rehacer", "strikethrough": "Tachado", "justifyFull": "Justificar", "justifyCenter": "Alinear centro", "hiliteColor": "Color de segundo plano", "deleteTable": "Suprimir tabla", "outdent": "Anular sangría", "cut": "Cortar", "plainFormatBlock": "Estilo de párrafo", "bold": "Negrita", "systemShortcutFF": "La acción \"${0}\" sólo está disponible en Mozilla Firefox mediante un atajo de teclado. Utilice ${1}.", "justifyRight": "Alinear derecha", "appleKey": "⌘${0}"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.es_es");dojo.cldr.nls.number.es_es={"currencyFormat": "#,##0.00 ¤", "group": ".", "decimal": ",", "scientificFormat": "#E0", "currencySpacing-afterCurrency-currencyMatch": "[:letter:]", "infinity": "∞", "list": ";", "percentSign": "%", "minusSign": "-", "currencySpacing-beforeCurrency-surroundingMatch": "[:digit:]", "currencySpacing-afterCurrency-insertBetween": " ", "nan": "NaN", "nativeZeroDigit": "0", "plusSign": "+", "currencySpacing-afterCurrency-surroundingMatch": "[:digit:]", "currencySpacing-beforeCurrency-currencyMatch": "[:letter:]", "perMille": "‰", "percentFormat": "#,##0%", "decimalFormat": "#,##0.###", "patternDigit": "#", "currencySpacing-beforeCurrency-insertBetween": " ", "exponential": "E"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.es_es");dijit.nls.common.es_es={"buttonCancel": "Cancelar", "buttonSave": "Guardar", "buttonOk": "Aceptar"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.es_es");dijit.form.nls.validate.es_es={"rangeMessage": "* Este valor está fuera del intervalo.", "invalidMessage": "* El valor especificado no es válido.", "missingMessage": "* Este valor es necesario."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.es_es");dijit.form.nls.ComboBox.es_es={"previousMessage": "Opciones anteriores", "nextMessage": "Más opciones"};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.es_es");dojo.cldr.nls.currency.es_es={"HKD_displayName": "dólar de Hong Kong", "CHF_displayName": "franco suizo", "CHF_symbol": "SwF", "HKD_symbol": "HK$", "CAD_displayName": "dólar canadiense", "USD_symbol": "US$", "AUD_displayName": "dólar australiano", "JPY_displayName": "yen japonés", "CAD_symbol": "Can$", "USD_displayName": "dólar estadounidense", "GBP_displayName": "libra esterlina británica", "AUD_symbol": "$A", "EUR_displayName": "euro", "GBP_symbol": "£", "JPY_symbol": "¥", "EUR_symbol": "€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.es_es");dojo.cldr.nls.gregorian.es_es={"dateFormat-short": "dd/MM/yy", "dateFormat-medium": "dd/MM/yyyy", "timeFormat-medium": "H:mm:ss", "timeFormat-short": "H:mm", "quarters-format-abbreviated": ["T1", "T2", "T3", "T4"], "field-second": "segundo", "field-week": "semana", "pm": "p.m.", "timeFormat-full": "HH'H'mm''ss\" z", "months-standAlone-narrow": ["E", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], "am": "a.m.", "days-standAlone-narrow": ["D", "L", "M", "M", "J", "V", "S"], "field-year": "año", "field-minute": "minuto", "field-hour": "hora", "dateFormat-long": "d' de 'MMMM' de 'yyyy", "field-day": "día", "field-dayperiod": "periodo del día", "field-month": "mes", "months-format-wide": ["enero", "febrero", "marzo", "abril", "mayo", "junio", "julio", "agosto", "septiembre", "octubre", "noviembre", "diciembre"], "field-era": "era", "months-format-abbr": ["ene", "feb", "mar", "abr", "may", "jun", "jul", "ago", "sep", "oct", "nov", "dic"], "days-format-wide": ["domingo", "lunes", "martes", "miércoles", "jueves", "viernes", "sábado"], "eraAbbr": ["a.C.", "d.C."], "quarters-format-wide": ["1er trimestre", "2º trimestre", "3er trimestre", "4º trimestre"], "dateFormat-full": "EEEE d' de 'MMMM' de 'yyyy", "field-weekday": "día de la semana", "days-format-abbr": ["dom", "lun", "mar", "mié", "jue", "vie", "sáb"], "field-zone": "zona", "dateTimeFormats-appendItem-Second": "{0} ({2}: {1})", "eraNames": ["BCE", "CE"], "dateTimeFormats-appendItem-Year": "{0} {1}", "dateTimeFormats-appendItem-Week": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Timezone": "{0} {1}", "dateTimeFormats-appendItem-Month": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Minute": "{0} ({2}: {1})", "dateTimeFormat": "{1} {0}", "dateTimeFormats-appendItem-Day": "{0} ({2}: {1})", "timeFormat-long": "HH:mm:ss z", "dateTimeFormats-appendItem-Quarter": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Day-Of-Week": "{0} {1}", "dateTimeFormats-appendItem-Hour": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Era": "{0} {1}"};dojo.provide("dijit.nls.Textarea");dijit.nls.Textarea._built=true;dojo.provide("dijit.nls.Textarea.es_es");dijit.nls.Textarea.es_es={"iframeEditTitle": "edit area", "iframeFocusTitle": "edit area frame"};
/trunk/api/js/dojo1.0/dijit/nls/dijit-all_fr-fr.js
New file
0,0 → 1,0
dojo.provide("dijit.nls.dijit-all_fr-fr");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.fr_fr");dojo.nls.colors.fr_fr={"lightsteelblue": "bleu acier clair", "orangered": "rouge orangé", "midnightblue": "bleu nuit", "cadetblue": "bleu pétrole", "seashell": "coquillage", "slategrey": "gris ardoise", "coral": "corail", "darkturquoise": "turquoise foncé", "antiquewhite": "blanc antique", "mediumspringgreen": "vert printemps moyen", "salmon": "saumon", "darkgrey": "gris foncé", "ivory": "ivoire", "greenyellow": "vert-jaune", "mistyrose": "rose pâle", "lightsalmon": "saumon clair", "silver": "argent", "dimgrey": "gris soutenu", "orange": "orange", "white": "blanc", "navajowhite": "chair", "royalblue": "bleu roi", "deeppink": "rose soutenu", "lime": "vert citron", "oldlace": "blanc cassé", "chartreuse": "vert vif", "darkcyan": "cyan foncé", "yellow": "jaune", "linen": "écru", "olive": "olive", "gold": "or", "lawngreen": "vert prairie", "lightyellow": "jaune clair", "tan": "grège", "darkviolet": "violet foncé", "lightslategrey": "gris ardoise clair", "grey": "gris", "darkkhaki": "kaki foncé", "green": "vert", "deepskyblue": "bleu ciel soutenu", "aqua": "bleu-vert", "sienna": "terre de sienne", "mintcream": "crème de menthe", "rosybrown": "vieux rose", "mediumslateblue": "bleu ardoise moyen", "magenta": "magenta", "lightseagreen": "vert d'eau clair", "cyan": "cyan", "olivedrab": "brun verdâtre", "darkgoldenrod": "jaune paille foncé", "slateblue": "bleu ardoise", "mediumaquamarine": "aigue-marine moyen", "lavender": "lavande", "mediumseagreen": "vert d'eau moyen ", "maroon": "marron", "darkslategray": "gris ardoise foncé", "mediumturquoise": "turquoise moyen", "ghostwhite": "blanc laiteux", "darkblue": "bleu foncé", "mediumvioletred": "rouge violacé moyen", "brown": "brun", "lightgray": "gris clair", "sandybrown": "sable", "pink": "rose", "firebrick": "rouge brique", "indigo": "indigo", "snow": "neige", "darkorchid": "lilas foncé", "turquoise": "turquoise", "chocolate": "chocolat", "springgreen": "vert printemps", "moccasin": "chamois", "navy": "bleu marine", "lemonchiffon": "mousse de citron", "teal": "sarcelle", "floralwhite": "lys", "cornflowerblue": "bleuet", "paleturquoise": "turquoise pâle", "purple": "pourpre", "gainsboro": "gris souris", "plum": "prune", "red": "rouge", "blue": "bleu", "forestgreen": "vert sapin", "darkgreen": "vert foncé", "honeydew": "opalin", "darkseagreen": "vert d'eau foncé", "lightcoral": "corail clair", "palevioletred": "rouge violacé pâle", "mediumpurple": "pourpre moyen", "saddlebrown": "brun cuir", "darkmagenta": "magenta foncé", "thistle": "chardon", "whitesmoke": "blanc cendré", "wheat": "blé", "violet": "violet", "lightskyblue": "bleu ciel clair", "goldenrod": "jaune paille", "mediumblue": "bleu moyen", "skyblue": "bleu ciel", "crimson": "cramoisi", "darksalmon": "saumon foncé", "darkred": "rouge foncé", "darkslategrey": "gris ardoise foncé", "peru": "caramel", "lightgrey": "gris clair", "lightgoldenrodyellow": "jaune paille clair", "blanchedalmond": "coquille d'oeuf", "aliceblue": "bleu gris", "bisque": "beige rosé", "slategray": "gris ardoise", "palegoldenrod": "jaune paille pâle", "darkorange": "orange foncé", "aquamarine": "aigue-marine", "lightgreen": "vert clair", "burlywood": "bois précieux", "dodgerblue": "bleu France", "darkgray": "gris foncé", "lightcyan": "cyan clair", "powderblue": "bleu de smalt", "blueviolet": "bleu-violet", "orchid": "lilas", "dimgray": "gris soutenu", "beige": "beige", "fuchsia": "fuchsia", "lavenderblush": "lavandin", "hotpink": "rose intense", "steelblue": "bleu acier", "tomato": "tomate", "lightpink": "rose clair", "limegreen": "citron vert", "indianred": "rose indien", "papayawhip": "crème de papaye", "lightslategray": "gris ardoise clair", "gray": "gris", "mediumorchid": "lilas moyen", "cornsilk": "vanille", "black": "noir", "seagreen": "vert d'eau", "darkslateblue": "bleu ardoise foncé", "khaki": "kaki", "lightblue": "bleu clair", "palegreen": "vert pâle", "azure": "bleu azur", "peachpuff": "pêche", "darkolivegreen": "olive foncé", "yellowgreen": "vert jaunâtre"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.fr_fr");dijit.nls.loading.fr_fr={"loadingState": "Chargement...", "errorState": "Une erreur est survenue"};dojo.provide("dijit.nls.Textarea");dijit.nls.Textarea._built=true;dojo.provide("dijit.nls.Textarea.fr_fr");dijit.nls.Textarea.fr_fr={"iframeEditTitle": "edit area", "iframeFocusTitle": "edit area frame"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.fr_fr");dijit._editor.nls.commands.fr_fr={"removeFormat": "Supprimer la mise en forme", "copy": "Copier", "paste": "Coller", "selectAll": "Sélectionner tout", "insertOrderedList": "Liste numérotée", "insertTable": "Insérer/Modifier un tableau", "underline": "Souligner", "foreColor": "Couleur d'avant-plan", "htmlToggle": "Source HTML", "formatBlock": "Style de paragraphe", "insertHorizontalRule": "Règle horizontale", "delete": "Supprimer", "insertUnorderedList": "Liste à puces", "tableProp": "Propriété du tableau", "insertImage": "Insérer une image", "superscript": "Exposant", "subscript": "Indice", "createLink": "Créer un lien", "undo": "Annuler", "italic": "Italique", "fontName": "Nom de police", "justifyLeft": "Aligner à gauche", "unlink": "Supprimer le lien", "toggleTableBorder": "Afficher/Masquer la bordure du tableau", "fontSize": "Taille de police", "indent": "Retrait", "redo": "Rétablir", "strikethrough": "Barrer", "justifyFull": "Justifier", "justifyCenter": "Aligner au centre", "hiliteColor": "Couleur d'arrière-plan", "deleteTable": "Supprimer le tableau", "outdent": "Retrait négatif", "cut": "Couper", "plainFormatBlock": "Style de paragraphe", "bold": "Gras", "systemShortcutFF": "L'action \"${0}\" est disponible dans Mozilla Firefox uniquement, par le biais d'un raccourci-clavier. Utilisez ${1}.", "justifyRight": "Aligner à droite", "appleKey": "⌘${0}", "ctrlKey": "ctrl+${0}"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.fr_fr");dojo.cldr.nls.number.fr_fr={"group": " ", "percentFormat": "#,##0 %", "currencyFormat": "#,##0.00 ¤", "decimal": ",", "scientificFormat": "#E0", "currencySpacing-afterCurrency-currencyMatch": "[:letter:]", "infinity": "∞", "list": ";", "percentSign": "%", "minusSign": "-", "currencySpacing-beforeCurrency-surroundingMatch": "[:digit:]", "currencySpacing-afterCurrency-insertBetween": " ", "nan": "NaN", "nativeZeroDigit": "0", "plusSign": "+", "currencySpacing-afterCurrency-surroundingMatch": "[:digit:]", "currencySpacing-beforeCurrency-currencyMatch": "[:letter:]", "perMille": "‰", "decimalFormat": "#,##0.###", "patternDigit": "#", "currencySpacing-beforeCurrency-insertBetween": " ", "exponential": "E"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.fr_fr");dijit.nls.common.fr_fr={"buttonCancel": "Annuler", "buttonSave": "Sauvegarder", "buttonOk": "OK"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.fr_fr");dijit.form.nls.validate.fr_fr={"rangeMessage": "* Cette valeur n'est pas comprise dans la plage autorisée. ", "invalidMessage": "* La valeur indiquée n'est pas correcte. ", "missingMessage": "* Cette valeur est requise. "};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.fr_fr");dijit.form.nls.ComboBox.fr_fr={"previousMessage": "Choix précédents", "nextMessage": "Plus de choix"};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.fr_fr");dojo.cldr.nls.currency.fr_fr={"HKD_displayName": "dollar de Hong Kong", "CHF_displayName": "franc suisse", "CHF_symbol": "sFr.", "CAD_displayName": "dollar canadien", "AUD_displayName": "dollar australien", "JPY_displayName": "yen", "USD_displayName": "dollar des États-Unis", "GBP_displayName": "livre sterling", "EUR_displayName": "euro", "USD_symbol": "$", "GBP_symbol": "£", "JPY_symbol": "¥", "EUR_symbol": "€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.fr_fr");dojo.cldr.nls.gregorian.fr_fr={"eraNames": ["av. J.-C.", "ap. J.-C."], "timeFormat-full": "HH' h 'mm z", "eraAbbr": ["av. J.-C.", "apr. J.-C."], "dateFormat-medium": "d MMM yy", "months-format-abbr": ["janv.", "févr.", "mars", "avr.", "mai", "juin", "juil.", "août", "sept.", "oct.", "nov.", "déc."], "dateFormat-full": "EEEE d MMMM yyyy", "days-format-abbr": ["dim.", "lun.", "mar.", "mer.", "jeu.", "ven.", "sam."], "quarters-format-wide": ["1er trimestre", "2e trimestre", "3e trimestre", "4e trimestre"], "dateFormat-short": "dd/MM/yy", "quarters-format-abbreviated": ["T1", "T2", "T3", "T4"], "months-format-wide": ["janvier", "février", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre", "décembre"], "months-standAlone-narrow": ["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], "days-standAlone-narrow": ["D", "L", "M", "M", "J", "V", "S"], "dateFormat-long": "d MMMM yyyy", "days-format-wide": ["dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi"], "dateTimeFormats-appendItem-Second": "{0} ({2}: {1})", "field-dayperiod": "Dayperiod", "field-minute": "Minute", "field-weekday": "Day of the Week", "dateTimeFormats-appendItem-Year": "{0} {1}", "field-era": "Era", "field-hour": "Hour", "dateTimeFormats-appendItem-Week": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Timezone": "{0} {1}", "dateTimeFormats-appendItem-Month": "{0} ({2}: {1})", "timeFormat-medium": "HH:mm:ss", "field-zone": "Zone", "dateTimeFormats-appendItem-Minute": "{0} ({2}: {1})", "dateTimeFormat": "{1} {0}", "field-year": "Year", "dateTimeFormats-appendItem-Day": "{0} ({2}: {1})", "field-week": "Week", "timeFormat-long": "HH:mm:ss z", "timeFormat-short": "HH:mm", "field-month": "Month", "dateTimeFormats-appendItem-Quarter": "{0} ({2}: {1})", "pm": "PM", "field-second": "Second", "field-day": "Day", "dateTimeFormats-appendItem-Day-Of-Week": "{0} {1}", "dateTimeFormats-appendItem-Hour": "{0} ({2}: {1})", "am": "AM", "dateTimeFormats-appendItem-Era": "{0} {1}"};dojo.provide("dijit.nls.Textarea");dijit.nls.Textarea._built=true;dojo.provide("dijit.nls.Textarea.fr_fr");dijit.nls.Textarea.fr_fr={"iframeEditTitle": "edit area", "iframeFocusTitle": "edit area frame"};
/trunk/api/js/dojo1.0/dijit/nls/dijit-all_hu.js
New file
0,0 → 1,0
dojo.provide("dijit.nls.dijit-all_hu");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.hu");dojo.nls.colors.hu={"lightsteelblue": "világos acélkék", "orangered": "narancsvörös", "midnightblue": "éjkék", "cadetblue": "kadétkék", "seashell": "kagyló", "slategrey": "palaszürke", "coral": "korall", "darkturquoise": "sötét türkizkék", "antiquewhite": "antik fehér", "mediumspringgreen": "közepes tavaszzöld", "salmon": "lazacszín", "darkgrey": "sötétszürke", "ivory": "elefántcsont", "greenyellow": "zöldessárga", "mistyrose": "halvány rózsaszín", "lightsalmon": "világos lazacszín", "silver": "ezüst", "dimgrey": "halványszürke", "orange": "narancssárga", "white": "fehér", "navajowhite": "navajo fehér", "royalblue": "királykék", "deeppink": "sötétrózsaszín", "lime": "lime", "oldlace": "régi csipke", "chartreuse": "chartreuse", "darkcyan": "sötét ciánkék", "yellow": "sárga", "linen": "vászonfehér", "olive": "olajzöld", "gold": "arany", "lawngreen": "fűzöld", "lightyellow": "világossárga", "tan": "rozsdabarna", "darkviolet": "sötét ibolyaszín", "lightslategrey": "világos palaszürke", "grey": "szürke", "darkkhaki": "sötét khakiszín", "green": "zöld", "deepskyblue": "sötét égszínkék", "aqua": "vízszín", "sienna": "vörösesbarna", "mintcream": "mentaszósz", "rosybrown": "barnásrózsaszín", "mediumslateblue": "közepes palakék", "magenta": "bíbor", "lightseagreen": "világos tengerzöld", "cyan": "ciánkék", "olivedrab": "olajzöld drapp", "darkgoldenrod": "sötét aranyvessző", "slateblue": "palakék", "mediumaquamarine": "közepes akvamarin", "lavender": "levendula", "mediumseagreen": "közepes tengerzöld", "maroon": "gesztenyebarna", "darkslategray": "sötét palaszürke", "mediumturquoise": "közepes türkizkék", "ghostwhite": "szellemfehér", "darkblue": "sötétkék", "mediumvioletred": "közepes ibolyavörös", "brown": "barna", "lightgray": "világosszürke", "sandybrown": "homokbarna", "pink": "rózsaszín", "firebrick": "téglavörös", "indigo": "indigó", "snow": "hó", "darkorchid": "sötét orchidea", "turquoise": "türkizkék", "chocolate": "csokoládé", "springgreen": "tavaszzöld", "moccasin": "mokkaszín", "navy": "tengerészkék", "lemonchiffon": "sárga műselyem", "teal": "pávakék", "floralwhite": "virágfehér", "cornflowerblue": "búzavirágkék", "paleturquoise": "halvány türkizkék", "purple": "lila", "gainsboro": "gainsboro", "plum": "szilvakék", "red": "vörös", "blue": "kék", "forestgreen": "erdőzöld", "darkgreen": "sötétzöld", "honeydew": "mézharmat", "darkseagreen": "sötét tengerzöld", "lightcoral": "világos korall", "palevioletred": "halvány ibolyavörös", "mediumpurple": "közepes lila", "saddlebrown": "nyeregbarna", "darkmagenta": "sötétbíbor", "thistle": "bogáncs", "whitesmoke": "fehér füst", "wheat": "búza", "violet": "ibolyaszín", "lightskyblue": "világos égszínkék", "goldenrod": "aranyvessző", "mediumblue": "közepes kék", "skyblue": "égszínkék", "crimson": "karmazsinvörös", "darksalmon": "sötét lazacszín", "darkred": "sötétvörös", "darkslategrey": "sötét palaszürke", "peru": "peru", "lightgrey": "világosszürke", "lightgoldenrodyellow": "világos aranyvessző sárga", "blanchedalmond": "hámozott mandula", "aliceblue": "Alice kék", "bisque": "porcelán", "slategray": "palaszürke", "palegoldenrod": "halvány aranyvessző", "darkorange": "sötét narancssárga", "aquamarine": "akvamarin", "lightgreen": "világoszöld", "burlywood": "nyersfa", "dodgerblue": "dodger kék", "darkgray": "sötétszürke", "lightcyan": "világos ciánkék", "powderblue": "púderkék", "blueviolet": "ibolyakék", "orchid": "orchidea", "dimgray": "halványszürke", "beige": "bézs", "fuchsia": "fukszia", "lavenderblush": "pirosas levendula", "hotpink": "meleg rózsaszín", "steelblue": "acélkék", "tomato": "paradicsom", "lightpink": "világos rózsaszín", "limegreen": "limezöld", "indianred": "indiánvörös", "papayawhip": "papayahab", "lightslategray": "világos palaszürke", "gray": "szürke", "mediumorchid": "közepes orchidea", "cornsilk": "kukoricahaj", "black": "fekete", "seagreen": "tengerzöld", "darkslateblue": "sötét palakék", "khaki": "khakiszín", "lightblue": "világoskék", "palegreen": "halványzöld", "azure": "azúrkék", "peachpuff": "barackszín", "darkolivegreen": "sötét olajzöld", "yellowgreen": "sárgászöld"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.hu");dijit.nls.loading.hu={"loadingState": "Betöltés...", "errorState": "Sajnálom, hiba történt"};dojo.provide("dijit.nls.Textarea");dijit.nls.Textarea._built=true;dojo.provide("dijit.nls.Textarea.hu");dijit.nls.Textarea.hu={"iframeEditTitle": "edit area", "iframeFocusTitle": "edit area frame"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.hu");dijit._editor.nls.commands.hu={"removeFormat": "Formázás eltávolítása", "copy": "Másolás", "paste": "Beillesztés", "selectAll": "Összes kijelölése", "insertOrderedList": "Számozott lista", "insertTable": "Táblázat beszúrása/szerkesztése", "underline": "Aláhúzott", "foreColor": "Előtérszín", "htmlToggle": "HTML forrás", "formatBlock": "Bekezdés stílusa", "insertHorizontalRule": "Vízszintes vonalzó", "delete": "Törlés", "insertUnorderedList": "Felsorolásjeles lista", "tableProp": "Táblázat tulajdonságai", "insertImage": "Kép beszúrása", "superscript": "Felső index", "subscript": "Alsó index", "createLink": "Hivatkozás létrehozása", "undo": "Visszavonás", "italic": "Dőlt", "fontName": "Betűtípus", "justifyLeft": "Balra igazítás", "unlink": "Hivatkozás eltávolítása", "toggleTableBorder": "Táblázatszegély ki-/bekapcsolása", "fontSize": "Betűméret", "indent": "Behúzás", "redo": "Újra", "strikethrough": "Áthúzott", "justifyFull": "Sorkizárás", "justifyCenter": "Középre igazítás", "hiliteColor": "Háttérszín", "deleteTable": "Táblázat törlése", "outdent": "Negatív behúzás", "cut": "Kivágás", "plainFormatBlock": "Bekezdés stílusa", "bold": "Félkövér", "systemShortcutFF": "A(z) \"${0}\" művelet csak Mozilla Firefox böngészőben érhető el billentyűparancs használatával. Használja a következőt: ${1}.", "justifyRight": "Jobbra igazítás", "appleKey": "⌘${0}", "ctrlKey": "ctrl+${0}"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.hu");dojo.cldr.nls.number.hu={"scientificFormat": "#E0", "currencySpacing-afterCurrency-currencyMatch": "[:letter:]", "infinity": "∞", "list": ";", "percentSign": "%", "minusSign": "-", "currencySpacing-beforeCurrency-surroundingMatch": "[:digit:]", "currencySpacing-afterCurrency-insertBetween": " ", "nan": "NaN", "nativeZeroDigit": "0", "plusSign": "+", "currencySpacing-afterCurrency-surroundingMatch": "[:digit:]", "currencyFormat": "¤ #,##0.00", "currencySpacing-beforeCurrency-currencyMatch": "[:letter:]", "perMille": "‰", "group": ",", "percentFormat": "#,##0%", "decimalFormat": "#,##0.###", "decimal": ".", "patternDigit": "#", "currencySpacing-beforeCurrency-insertBetween": " ", "exponential": "E"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.hu");dijit.nls.common.hu={"buttonCancel": "Mégse", "buttonSave": "Mentés", "buttonOk": "OK"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.hu");dijit.form.nls.validate.hu={"rangeMessage": "* Az érték kívül van a megengedett tartományon. ", "invalidMessage": "* A megadott érték érvénytelen. ", "missingMessage": "* Meg kell adni egy értéket. "};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.hu");dijit.form.nls.ComboBox.hu={"previousMessage": "Előző menüpontok", "nextMessage": "További menüpontok"};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.hu");dojo.cldr.nls.currency.hu={"USD_symbol": "$", "EUR_displayName": "EUR", "GBP_displayName": "GBP", "JPY_displayName": "JPY", "GBP_symbol": "£", "JPY_symbol": "¥", "EUR_symbol": "€", "USD_displayName": "USD"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.hu");dojo.cldr.nls.gregorian.hu={"dateTimeFormats-appendItem-Second": "{0} ({2}: {1})", "field-dayperiod": "Dayperiod", "field-minute": "Minute", "eraNames": ["BCE", "CE"], "field-weekday": "Day of the Week", "months-standAlone-narrow": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"], "dateTimeFormats-appendItem-Year": "{0} {1}", "field-era": "Era", "field-hour": "Hour", "timeFormat-full": "HH:mm:ss z", "dateTimeFormats-appendItem-Week": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Timezone": "{0} {1}", "dateTimeFormats-appendItem-Month": "{0} ({2}: {1})", "days-standAlone-narrow": ["1", "2", "3", "4", "5", "6", "7"], "eraAbbr": ["BCE", "CE"], "dateFormat-long": "yyyy MMMM d", "timeFormat-medium": "HH:mm:ss", "field-zone": "Zone", "dateTimeFormats-appendItem-Minute": "{0} ({2}: {1})", "dateFormat-medium": "yyyy MMM d", "quarters-format-abbreviated": ["Q1", "Q2", "Q3", "Q4"], "dateTimeFormat": "{1} {0}", "field-year": "Year", "dateTimeFormats-appendItem-Day": "{0} ({2}: {1})", "field-week": "Week", "timeFormat-long": "HH:mm:ss z", "months-format-abbr": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"], "timeFormat-short": "HH:mm", "field-month": "Month", "dateTimeFormats-appendItem-Quarter": "{0} ({2}: {1})", "days-format-abbr": ["1", "2", "3", "4", "5", "6", "7"], "pm": "PM", "field-second": "Second", "field-day": "Day", "dateTimeFormats-appendItem-Day-Of-Week": "{0} {1}", "dateTimeFormats-appendItem-Hour": "{0} ({2}: {1})", "am": "AM", "dateFormat-short": "yy/MM/dd", "dateFormat-full": "EEEE, yyyy MMMM dd", "months-format-wide": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"], "dateTimeFormats-appendItem-Era": "{0} {1}", "quarters-format-wide": ["Q1", "Q2", "Q3", "Q4"], "days-format-wide": ["1", "2", "3", "4", "5", "6", "7"]};dojo.provide("dijit.nls.Textarea");dijit.nls.Textarea._built=true;dojo.provide("dijit.nls.Textarea.hu");dijit.nls.Textarea.hu={"iframeEditTitle": "edit area", "iframeFocusTitle": "edit area frame"};
/trunk/api/js/dojo1.0/dijit/nls/dijit-all_de-de.js
New file
0,0 → 1,0
dojo.provide("dijit.nls.dijit-all_de-de");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.de_de");dojo.nls.colors.de_de={"lightsteelblue": "Helles Stahlblau", "orangered": "Orangerot", "midnightblue": "Mitternachtblau", "cadetblue": "Kadettenblau", "seashell": "Muschelweiß", "slategrey": "Schiefergrau", "coral": "Koralle", "darkturquoise": "Dunkeltürkis", "antiquewhite": "Antikweiß", "mediumspringgreen": "Mittelfrühlingsgrün", "salmon": "Lachs", "darkgrey": "Dunkelgrau", "ivory": "Elfenbein", "greenyellow": "Grüngelb", "mistyrose": "Blassrose", "lightsalmon": "Helllachs", "silver": "Silbergrau", "dimgrey": "Blassgrau", "orange": "Orange", "white": "Weiß", "navajowhite": "Navajo-weiß", "royalblue": "Königsblau", "deeppink": "Tiefrosa", "lime": "Limone", "oldlace": "Alte Spitze", "chartreuse": "Helles Gelbgrün", "darkcyan": "Dunkelzyan", "yellow": "Gelb", "linen": "Leinen", "olive": "Oliv", "gold": "Gold", "lawngreen": "Grasgrün", "lightyellow": "Hellgelb", "tan": "Hautfarben", "darkviolet": "Dunkelviolett", "lightslategrey": "Helles Schiefergrau", "grey": "Grau", "darkkhaki": "Dunkelkhaki", "green": "Grün", "deepskyblue": "Dunkles Himmelblau", "aqua": "Wasserblau", "sienna": "Sienna", "mintcream": "Mintcreme", "rosybrown": "Rosigbraun", "mediumslateblue": "Mittelschieferblau ", "magenta": "Magenta", "lightseagreen": "Helles Meergrün", "cyan": "Zyan", "olivedrab": "Olivgrau", "darkgoldenrod": "Dunkelgoldgelb", "slateblue": "Schieferblau", "mediumaquamarine": "Mittelaquamarin", "lavender": "Lavendelblau", "mediumseagreen": "Mittelmeeresgrün", "maroon": "Kastanienbraun", "darkslategray": "Dunkelschiefergrau", "mediumturquoise": "Mitteltürkis ", "ghostwhite": "Geisterweiß", "darkblue": "Dunkelblau", "mediumvioletred": "Mittelviolettrot ", "brown": "Braun", "lightgray": "Hellgrau", "sandybrown": "Sandbraun", "pink": "Rosa", "firebrick": "Schamottestein", "indigo": "Indigoblau", "snow": "Schneeweiß", "darkorchid": "Dunkelorchidee", "turquoise": "Türkis", "chocolate": "Schokoladenbraun", "springgreen": "Frühlingsgrün", "moccasin": "Mokassin", "navy": "Marineblau", "lemonchiffon": "Zitronenchiffon", "teal": "Smaragdgrün", "floralwhite": "Blütenweiß", "cornflowerblue": "Kornblumenblau", "paleturquoise": "Blasstürkis", "purple": "Purpurrot", "gainsboro": "Gainsboro", "plum": "Pflaume", "red": "Rot", "blue": "Blau", "forestgreen": "Forstgrün", "darkgreen": "Dunkelgrün", "honeydew": "Honigtau", "darkseagreen": "Dunkles Meergrün", "lightcoral": "Hellkoralle", "palevioletred": "Blassviolettrot ", "mediumpurple": "Mittelpurpur", "saddlebrown": "Sattelbraun", "darkmagenta": "Dunkelmagenta", "thistle": "Distel", "whitesmoke": "Rauchweiß", "wheat": "Weizen", "violet": "Violett", "lightskyblue": "Helles Himmelblau", "goldenrod": "Goldgelb", "mediumblue": "Mittelblau", "skyblue": "Himmelblau", "crimson": "Karmesinrot", "darksalmon": "Dunkellachs", "darkred": "Dunkelrot", "darkslategrey": "Dunkelschiefergrau", "peru": "Peru", "lightgrey": "Hellgrau", "lightgoldenrodyellow": "Hellgoldgelb", "blanchedalmond": "Mandelweiß", "aliceblue": "Alice-blau", "bisque": "Bisquit", "slategray": "Schiefergrau", "palegoldenrod": "Blassgoldgelb", "darkorange": "Dunkelorange", "aquamarine": "Aquamarin", "lightgreen": "Hellgrün", "burlywood": "Burlywood", "dodgerblue": "Dodger-blau", "darkgray": "Dunkelgrau", "lightcyan": "Hellzyan", "powderblue": "Pulverblau", "blueviolet": "Blauviolett", "orchid": "Orchidee", "dimgray": "Blassgrau", "beige": "Beige", "fuchsia": "Fuchsia", "lavenderblush": "Lavendelhauch", "hotpink": "Knallrosa", "steelblue": "Stahlblau", "tomato": "Tomatenrot", "lightpink": "Hellrosa", "limegreen": "Limonengrün", "indianred": "Indischrot", "papayawhip": "Papayacreme", "lightslategray": "Helles Schiefergrau", "gray": "Grau", "mediumorchid": "Mittelorchidee", "cornsilk": "Kornseide", "black": "Schwarz", "seagreen": "Meeresgrün", "darkslateblue": "Dunkelschieferblau", "khaki": "Khaki", "lightblue": "Hellblau", "palegreen": "Blassgrün", "azure": "Azur", "peachpuff": "Pfirsich", "darkolivegreen": "Dunkelolivgrün", "yellowgreen": "Gelbgrün"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.de_de");dijit.nls.loading.de_de={"loadingState": "Wird geladen...", "errorState": "Es ist ein Fehler aufgetreten."};dojo.provide("dijit.nls.Textarea");dijit.nls.Textarea._built=true;dojo.provide("dijit.nls.Textarea.de_de");dijit.nls.Textarea.de_de={"iframeEditTitle": "edit area", "iframeFocusTitle": "edit area frame"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.de_de");dijit._editor.nls.commands.de_de={"removeFormat": "Formatierung entfernen", "copy": "Kopieren", "paste": "Einfügen", "selectAll": "Alles auswählen", "insertOrderedList": "Nummerierung", "insertTable": "Tabelle einfügen/bearbeiten", "underline": "Unterstrichen", "foreColor": "Vordergrundfarbe", "htmlToggle": "HTML-Quelltext", "formatBlock": "Absatzstil", "insertHorizontalRule": "Horizontaler Strich", "delete": "Löschen", "insertUnorderedList": "Aufzählungszeichen", "tableProp": "Tabelleneigenschaft", "insertImage": "Grafik einfügen", "superscript": "Hochgestellt", "subscript": "Tiefgestellt", "createLink": "Link erstellen", "undo": "Rückgängig", "italic": "Kursiv", "fontName": "Schriftartname", "justifyLeft": "Linksbündig", "unlink": "Link entfernen", "toggleTableBorder": "Tabellenumrandung ein-/ausschalten", "ctrlKey": "Strg+${0}", "fontSize": "Schriftgröße", "indent": "Einrücken", "redo": "Wiederherstellen", "strikethrough": "Durchgestrichen", "justifyFull": "Blocksatz", "justifyCenter": "Zentriert", "hiliteColor": "Hintergrundfarbe", "deleteTable": "Tabelle löschen", "outdent": "Ausrücken", "cut": "Ausschneiden", "plainFormatBlock": "Absatzstil", "bold": "Fett", "systemShortcutFF": "Die Aktion \"${0}\" ist in Mozilla Firefox nur über einen Tastaturkurzbefehl verfügbar. Verwenden Sie ${1}.", "justifyRight": "Rechtsbündig", "appleKey": "⌘${0}"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.de_de");dojo.cldr.nls.number.de_de={"currencyFormat": "#,##0.00 ¤", "group": ".", "percentFormat": "#,##0 %", "decimal": ",", "scientificFormat": "#E0", "currencySpacing-afterCurrency-currencyMatch": "[:letter:]", "infinity": "∞", "list": ";", "percentSign": "%", "minusSign": "-", "currencySpacing-beforeCurrency-surroundingMatch": "[:digit:]", "currencySpacing-afterCurrency-insertBetween": " ", "nan": "NaN", "nativeZeroDigit": "0", "plusSign": "+", "currencySpacing-afterCurrency-surroundingMatch": "[:digit:]", "currencySpacing-beforeCurrency-currencyMatch": "[:letter:]", "perMille": "‰", "decimalFormat": "#,##0.###", "patternDigit": "#", "currencySpacing-beforeCurrency-insertBetween": " ", "exponential": "E"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.de_de");dijit.nls.common.de_de={"buttonCancel": "Abbrechen", "buttonSave": "Speichern", "buttonOk": "OK"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.de_de");dijit.form.nls.validate.de_de={"rangeMessage": "* Dieser Wert ist außerhalb des gültigen Bereichs. ", "invalidMessage": "* Der eingegebene Wert ist ungültig. ", "missingMessage": "* Dieser Wert ist erforderlich."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.de_de");dijit.form.nls.ComboBox.de_de={"previousMessage": "Vorherige Auswahl", "nextMessage": "Weitere Auswahlmöglichkeiten"};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.de_de");dojo.cldr.nls.currency.de_de={"HKD_displayName": "Hongkong Dollar", "CHF_displayName": "Schweizer Franken", "CHF_symbol": "SFr.", "CAD_displayName": "Kanadischer Dollar", "AUD_displayName": "Australischer Dollar", "JPY_displayName": "Yen", "USD_displayName": "US Dollar", "GBP_displayName": "Pfund Sterling", "EUR_displayName": "Euro", "USD_symbol": "$", "GBP_symbol": "£", "JPY_symbol": "¥", "EUR_symbol": "€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.de_de");dojo.cldr.nls.gregorian.de_de={"eraNames": ["v. Chr.", "n. Chr."], "timeFormat-full": "H:mm' Uhr 'z", "eraAbbr": ["v. Chr.", "n. Chr."], "dateFormat-medium": "dd.MM.yyyy", "am": "vorm.", "months-format-abbr": ["Jan", "Feb", "Mrz", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"], "dateFormat-full": "EEEE, d. MMMM yyyy", "days-format-abbr": ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"], "quarters-format-wide": ["1. Quartal", "2. Quartal", "3. Quartal", "4. Quartal"], "pm": "nachm.", "dateFormat-short": "dd.MM.yy", "months-format-wide": ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"], "months-standAlone-narrow": ["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], "days-standAlone-narrow": ["S", "M", "D", "M", "D", "F", "S"], "dateFormat-long": "d. MMMM yyyy", "days-format-wide": ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"], "dateTimeFormats-appendItem-Second": "{0} ({2}: {1})", "field-dayperiod": "Dayperiod", "field-minute": "Minute", "field-weekday": "Day of the Week", "dateTimeFormats-appendItem-Year": "{0} {1}", "field-era": "Era", "field-hour": "Hour", "dateTimeFormats-appendItem-Week": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Timezone": "{0} {1}", "dateTimeFormats-appendItem-Month": "{0} ({2}: {1})", "timeFormat-medium": "HH:mm:ss", "field-zone": "Zone", "dateTimeFormats-appendItem-Minute": "{0} ({2}: {1})", "quarters-format-abbreviated": ["Q1", "Q2", "Q3", "Q4"], "dateTimeFormat": "{1} {0}", "field-year": "Year", "dateTimeFormats-appendItem-Day": "{0} ({2}: {1})", "field-week": "Week", "timeFormat-long": "HH:mm:ss z", "timeFormat-short": "HH:mm", "field-month": "Month", "dateTimeFormats-appendItem-Quarter": "{0} ({2}: {1})", "field-second": "Second", "field-day": "Day", "dateTimeFormats-appendItem-Day-Of-Week": "{0} {1}", "dateTimeFormats-appendItem-Hour": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Era": "{0} {1}"};dojo.provide("dijit.nls.Textarea");dijit.nls.Textarea._built=true;dojo.provide("dijit.nls.Textarea.de_de");dijit.nls.Textarea.de_de={"iframeEditTitle": "edit area", "iframeFocusTitle": "edit area frame"};
/trunk/api/js/dojo1.0/dijit/nls/dijit-all_zh-cn.js
New file
0,0 → 1,0
dojo.provide("dijit.nls.dijit-all_zh-cn");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.zh_cn");dojo.nls.colors.zh_cn={"lightsteelblue": "浅钢蓝色", "orangered": "橙红色", "midnightblue": "深蓝色", "cadetblue": "灰蓝色", "seashell": "海贝色", "slategrey": "灰石色", "coral": "珊瑚色", "darkturquoise": "深粉蓝", "antiquewhite": "古董白", "mediumspringgreen": "间春绿色", "salmon": "橙红", "darkgrey": "深灰色", "ivory": "象牙色", "greenyellow": "绿黄色", "mistyrose": "浅玫瑰色", "lightsalmon": "淡橙色", "silver": "银白色", "dimgrey": "暗灰色", "orange": "橙色", "white": "白色", "navajowhite": "纳瓦白", "royalblue": "品蓝", "deeppink": "深粉红色", "lime": "淡黄绿色", "oldlace": "老白色", "chartreuse": "黄绿色", "darkcyan": "深青绿", "yellow": "黄色", "linen": "亚麻色", "olive": "橄榄绿", "gold": "金黄色", "lawngreen": "草绿色", "lightyellow": "浅黄色", "tan": "棕褐色", "darkviolet": "深紫色", "lightslategrey": "浅青灰", "grey": "灰色", "darkkhaki": "深卡其色", "green": "绿色", "deepskyblue": "深天蓝色", "aqua": "浅绿色", "sienna": "赭色", "mintcream": "薄荷色", "rosybrown": "褐玫瑰红", "mediumslateblue": "间暗蓝色", "magenta": "洋红色", "lightseagreen": "浅海藻绿", "cyan": "青蓝色", "olivedrab": "草绿色", "darkgoldenrod": "深金黄", "slateblue": "石蓝色", "mediumaquamarine": "间绿色", "lavender": "淡紫色", "mediumseagreen": "间海蓝色", "maroon": "栗色", "darkslategray": "深青灰", "mediumturquoise": "间绿宝石色", "ghostwhite": "苍白", "darkblue": "深蓝", "mediumvioletred": "间紫罗兰色", "brown": "棕色", "lightgray": "浅灰色", "sandybrown": "沙褐色", "pink": "粉红色", "firebrick": "砖红", "indigo": "靛青", "snow": "雪白色", "darkorchid": "深紫色", "turquoise": "绿宝石色", "chocolate": "巧克力色", "springgreen": "春绿色", "moccasin": "鹿皮色", "navy": "深蓝色", "lemonchiffon": "柠檬绸色", "teal": "水鸭色", "floralwhite": "花白色", "cornflowerblue": "浅蓝色", "paleturquoise": "苍绿色", "purple": "紫色", "gainsboro": "淡灰色", "plum": "杨李色", "red": "红色", "blue": "蓝色", "forestgreen": "森林绿", "darkgreen": "深绿色", "honeydew": "蜜汁色", "darkseagreen": "深海藻绿", "lightcoral": "浅珊瑚色", "palevioletred": "苍紫罗兰色", "mediumpurple": "间紫色", "saddlebrown": "重褐色", "darkmagenta": "深洋红色", "thistle": "蓟色", "whitesmoke": "烟白色", "wheat": "浅黄色", "violet": "紫色", "lightskyblue": "浅天蓝色", "goldenrod": "金麒麟色", "mediumblue": "间蓝色", "skyblue": "天蓝色", "crimson": "深红色", "darksalmon": "深橙红", "darkred": "深红色", "darkslategrey": "深青灰", "peru": "秘鲁色", "lightgrey": "浅灰色", "lightgoldenrodyellow": "浅金黄色", "blanchedalmond": "白杏色", "aliceblue": "爱丽丝蓝", "bisque": "桔黄色", "slategray": "灰石色", "palegoldenrod": "淡金黄色", "darkorange": "深橙色", "aquamarine": "碧绿色", "lightgreen": "浅绿色", "burlywood": "实木色", "dodgerblue": "闪蓝色", "darkgray": "深灰色", "lightcyan": "浅青色", "powderblue": "铁蓝", "blueviolet": "紫罗兰色", "orchid": "紫色", "dimgray": "暗灰色", "beige": "米色", "fuchsia": "紫红色", "lavenderblush": "淡紫红", "hotpink": "深粉红", "steelblue": "钢蓝色", "tomato": "西红柿色", "lightpink": "浅粉红色", "limegreen": "橙绿色", "indianred": "印度红", "papayawhip": "木瓜色", "lightslategray": "浅青灰", "gray": "灰色", "mediumorchid": "间紫色", "cornsilk": "米绸色", "black": "黑色", "seagreen": "海绿色", "darkslateblue": "深青蓝", "khaki": "卡其色", "lightblue": "淡蓝色", "palegreen": "淡绿色", "azure": "天蓝色", "peachpuff": "桃色", "darkolivegreen": "深橄榄绿", "yellowgreen": "黄绿色"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.zh_cn");dijit.nls.loading.zh_cn={"loadingState": "正在装入...", "errorState": "对不起,发生了错误"};dojo.provide("dijit.nls.Textarea");dijit.nls.Textarea._built=true;dojo.provide("dijit.nls.Textarea.zh_cn");dijit.nls.Textarea.zh_cn={"iframeEditTitle": "edit area", "iframeFocusTitle": "edit area frame"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.zh_cn");dijit._editor.nls.commands.zh_cn={"removeFormat": "除去格式", "copy": "复制", "paste": "粘贴", "selectAll": "全选", "insertOrderedList": "编号列表", "insertTable": "插入/编辑表", "underline": "下划线", "foreColor": "前景色", "htmlToggle": "HTML 源代码", "formatBlock": "段落样式", "insertHorizontalRule": "水平线", "delete": "删除", "insertUnorderedList": "符号列表", "tableProp": "表属性", "insertImage": "插入图像", "superscript": "上标", "subscript": "下标", "createLink": "创建链接", "undo": "撤销", "italic": "斜体", "fontName": "字体名称", "justifyLeft": "左对齐", "unlink": "除去链接", "toggleTableBorder": "切换表边框", "fontSize": "字体大小", "indent": "增加缩进", "redo": "重做", "strikethrough": "删除线", "justifyFull": "对齐", "justifyCenter": "居中", "hiliteColor": "背景色", "deleteTable": "删除表", "outdent": "减少缩进", "cut": "剪切", "plainFormatBlock": "段落样式", "bold": "粗体", "systemShortcutFF": "只能在 Mozilla Firefox 中通过键盘快捷方式执行“${0}”操作。请使用 ${1}。", "justifyRight": "右对齐", "appleKey": "⌘${0}", "ctrlKey": "ctrl+${0}"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.zh_cn");dojo.cldr.nls.number.zh_cn={"currencyFormat": "¤#,##0.00", "scientificFormat": "#E0", "currencySpacing-afterCurrency-currencyMatch": "[:letter:]", "infinity": "∞", "list": ";", "percentSign": "%", "minusSign": "-", "currencySpacing-beforeCurrency-surroundingMatch": "[:digit:]", "currencySpacing-afterCurrency-insertBetween": " ", "nan": "NaN", "nativeZeroDigit": "0", "plusSign": "+", "currencySpacing-afterCurrency-surroundingMatch": "[:digit:]", "currencySpacing-beforeCurrency-currencyMatch": "[:letter:]", "perMille": "‰", "group": ",", "percentFormat": "#,##0%", "decimalFormat": "#,##0.###", "decimal": ".", "patternDigit": "#", "currencySpacing-beforeCurrency-insertBetween": " ", "exponential": "E"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.zh_cn");dijit.nls.common.zh_cn={"buttonCancel": "取消", "buttonSave": "保存", "buttonOk": "确定"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.zh_cn");dijit.form.nls.validate.zh_cn={"rangeMessage": "* 输入数据超出值域。", "invalidMessage": "* 非法的输入值。", "missingMessage": "* 此值是必须的。"};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.zh_cn");dijit.form.nls.ComboBox.zh_cn={"previousMessage": "先前选项", "nextMessage": "更多选项"};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.zh_cn");dojo.cldr.nls.currency.zh_cn={"HKD_displayName": "港元", "CHF_displayName": "瑞士法郎", "JPY_symbol": "JP¥", "HKD_symbol": "HK$", "CAD_displayName": "加拿大元", "USD_symbol": "US$", "AUD_displayName": "澳大利亚元", "JPY_displayName": "日元", "USD_displayName": "美元", "GBP_displayName": "英磅", "EUR_displayName": "欧元", "GBP_symbol": "£", "EUR_symbol": "€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.zh_cn");dojo.cldr.nls.gregorian.zh_cn={"dateFormat-short": "yy-M-d", "timeFormat-long": "ahh'时'mm'分'ss'秒'", "dateFormat-medium": "yyyy-M-d", "dateFormat-long": "yyyy'年'M'月'd'日'", "timeFormat-medium": "ahh:mm:ss", "timeFormat-short": "ah:mm", "timeFormat-full": "ahh'时'mm'分'ss'秒' z", "dateFormat-full": "yyyy'年'M'月'd'日'EEEE", "eraAbbr": ["公元前", "公元"], "am": "上午", "months-format-abbr": ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"], "days-format-abbr": ["周日", "周一", "周二", "周三", "周四", "周五", "周六"], "pm": "下午", "months-format-wide": ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"], "months-standAlone-narrow": ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"], "days-standAlone-narrow": ["日", "一", "二", "三", "四", "五", "六"], "days-format-wide": ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"], "dateTimeFormats-appendItem-Second": "{0} ({2}: {1})", "field-dayperiod": "Dayperiod", "field-minute": "Minute", "eraNames": ["BCE", "CE"], "field-weekday": "Day of the Week", "dateTimeFormats-appendItem-Year": "{0} {1}", "field-era": "Era", "field-hour": "Hour", "dateTimeFormats-appendItem-Week": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Timezone": "{0} {1}", "dateTimeFormats-appendItem-Month": "{0} ({2}: {1})", "field-zone": "Zone", "dateTimeFormats-appendItem-Minute": "{0} ({2}: {1})", "quarters-format-abbreviated": ["Q1", "Q2", "Q3", "Q4"], "dateTimeFormat": "{1} {0}", "field-year": "Year", "dateTimeFormats-appendItem-Day": "{0} ({2}: {1})", "field-week": "Week", "field-month": "Month", "dateTimeFormats-appendItem-Quarter": "{0} ({2}: {1})", "field-second": "Second", "field-day": "Day", "dateTimeFormats-appendItem-Day-Of-Week": "{0} {1}", "dateTimeFormats-appendItem-Hour": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Era": "{0} {1}", "quarters-format-wide": ["Q1", "Q2", "Q3", "Q4"]};dojo.provide("dijit.nls.Textarea");dijit.nls.Textarea._built=true;dojo.provide("dijit.nls.Textarea.zh_cn");dijit.nls.Textarea.zh_cn={"iframeEditTitle": "edit area", "iframeFocusTitle": "edit area frame"};
/trunk/api/js/dojo1.0/dijit/nls/loading.js
New file
0,0 → 1,0
({"loadingState": "Loading...", "errorState": "Sorry, an error occurred"})
/trunk/api/js/dojo1.0/dijit/nls/de/common.js
New file
0,0 → 1,0
({"buttonCancel": "Abbrechen", "buttonSave": "Speichern", "buttonOk": "OK"})
/trunk/api/js/dojo1.0/dijit/nls/de/loading.js
New file
0,0 → 1,0
({"loadingState": "Wird geladen...", "errorState": "Es ist ein Fehler aufgetreten."})
/trunk/api/js/dojo1.0/dijit/nls/dijit-all_pt-br.js
New file
0,0 → 1,0
dojo.provide("dijit.nls.dijit-all_pt-br");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.pt_br");dojo.nls.colors.pt_br={"lightsteelblue": "azul metálico claro", "orangered": "vermelho-alaranjado", "midnightblue": "azul noturno", "cadetblue": "azul-cadete", "seashell": "concha marinha", "slategrey": "ardósia cinza", "coral": "coral", "darkturquoise": "turquesa-escuro", "antiquewhite": "branco velho", "mediumspringgreen": "verde primavera médio", "salmon": "salmão", "darkgrey": "cinza-escuro", "ivory": "marfim", "greenyellow": "verde-amarelado", "mistyrose": "rosa nublado", "lightsalmon": "salmão claro", "silver": "prata", "dimgrey": "cinza-escuro", "orange": "laranja", "white": "branco", "navajowhite": "branco navajo", "royalblue": "azul real", "deeppink": "rosa profundo", "lime": "lima", "oldlace": "fita velha", "chartreuse": "verde-amarelado", "darkcyan": "ciano-escuro", "yellow": "amarelo", "linen": "linho", "olive": "verde-oliva", "gold": "dourado", "lawngreen": "verde grama", "lightyellow": "amarelo-claro", "tan": "canela", "darkviolet": "violeta-escuro", "lightslategrey": "ardósia cinza-claro", "grey": "cinza", "darkkhaki": "cáqui-escuro", "green": "verde", "deepskyblue": "azul celeste profundo", "aqua": "azul-água", "sienna": "marrom-avermelhado", "mintcream": "menta", "rosybrown": "marrom rosado", "mediumslateblue": "ardósia azul médio", "magenta": "magenta", "lightseagreen": "verde-mar claro", "cyan": "ciano", "olivedrab": "verde-acastanhado", "darkgoldenrod": "ouro-escuro", "slateblue": "ardósia azul", "mediumaquamarine": "verde-azulado temperado", "lavender": "lavanda", "mediumseagreen": "verde mar temperado", "maroon": "castanho", "darkslategray": "ardósia cinza-escuro", "mediumturquoise": "turquesa médio", "ghostwhite": "branco sombreado", "darkblue": "azul-escuro", "mediumvioletred": "violeta avermelhado médio", "brown": "marrom", "lightgray": "cinza-claro", "sandybrown": "marrom arenoso", "pink": "rosado", "firebrick": "tijolo queimado", "indigo": "índigo", "snow": "branco neve", "darkorchid": "orquídea-escuro", "turquoise": "turquesa", "chocolate": "chocolate", "springgreen": "verde primavera", "moccasin": "mocassim", "navy": "marinho", "lemonchiffon": "gaze limão", "teal": "azul-esverdeado", "floralwhite": "branco floral", "cornflowerblue": "centáurea azul", "paleturquoise": "turquesa pálida", "purple": "púrpura", "gainsboro": "gainsboro", "plum": "ameixa", "red": "vermelho", "blue": "azul", "forestgreen": "verde floresta", "darkgreen": "verde-escuro", "honeydew": "verde mel", "darkseagreen": "verde-mar escuro", "lightcoral": "coral-claro", "palevioletred": "violeta pálida", "mediumpurple": "púrpura temperado", "saddlebrown": "marrom couro", "darkmagenta": "magenta-escuro", "thistle": "cardo", "whitesmoke": "branco esfumaçado", "wheat": "trigo", "violet": "violeta", "lightskyblue": "azul celeste claro", "goldenrod": "ouro", "mediumblue": "azul temperado", "skyblue": "azul celeste", "crimson": "carmim", "darksalmon": "salmão escuro", "darkred": "vermelho-escuro", "darkslategrey": "ardósia cinza-escuro", "peru": "peru", "lightgrey": "cinza-claro", "lightgoldenrodyellow": "amarelo-claro", "blanchedalmond": "branco-amêndoa", "aliceblue": "azul-bebê", "bisque": "biscuit", "slategray": "ardósia cinza", "palegoldenrod": "ouro pálido", "darkorange": "laranja-escuro", "aquamarine": "água-marinha", "lightgreen": "verde-claro", "burlywood": "madeira", "dodgerblue": "azul fugidio", "darkgray": "cinza-escuro", "lightcyan": "ciano-claro", "powderblue": "azul pólvora", "blueviolet": "violeta azulado", "orchid": "orquídea", "dimgray": "cinza-escuro", "beige": "bege", "fuchsia": "fúcsia", "lavenderblush": "lavanda avermelhada", "hotpink": "rosa quente", "steelblue": "azul metálico", "tomato": "vermelho tomate", "lightpink": "rosa-claro", "limegreen": "verde lima", "indianred": "vermelho oriental", "papayawhip": "mamão papaia", "lightslategray": "ardósia cinza-claro", "gray": "cinza", "mediumorchid": "orquídea temperado", "cornsilk": "fios de milho", "black": "preto", "seagreen": "verde-mar", "darkslateblue": "ardósia azul-escuro", "khaki": "cáqui", "lightblue": "azul-claro", "palegreen": "verde pálido", "azure": "azul-celeste", "peachpuff": "pêssego", "darkolivegreen": "verde-oliva escuro", "yellowgreen": "amarelo esverdeado"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.pt_br");dijit.nls.loading.pt_br={"loadingState": "Carregando...", "errorState": "Ocorreu um erro"};dojo.provide("dijit.nls.Textarea");dijit.nls.Textarea._built=true;dojo.provide("dijit.nls.Textarea.pt_br");dijit.nls.Textarea.pt_br={"iframeEditTitle": "edit area", "iframeFocusTitle": "edit area frame"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.pt_br");dijit._editor.nls.commands.pt_br={"removeFormat": "Remover Formato", "copy": "Copiar", "paste": "Colar", "selectAll": "Selecionar Todos", "insertOrderedList": "Lista Numerada", "insertTable": "Inserir/Editar Tabela", "underline": "Sublinhado", "foreColor": "Cor do Primeiro Plano", "htmlToggle": "Origem HTML", "formatBlock": "Estilo de Parágrafo", "insertHorizontalRule": "Régua Horizontal", "delete": "Excluir ", "insertUnorderedList": "Lista com Marcadores", "tableProp": "Propriedade da Tabela", "insertImage": "Inserir Imagem", "superscript": "Sobrescrito", "subscript": "Subscrito", "createLink": "Criar Link", "undo": "Desfazer", "italic": "Itálico", "fontName": "Nome da Fonte", "justifyLeft": "Alinhar pela Esquerda", "unlink": "Remover Link", "toggleTableBorder": "Alternar Moldura da Tabela", "fontSize": "Tamanho da Fonte", "indent": "Recuar", "redo": "Refazer", "strikethrough": "Tachado", "justifyFull": "Justificar", "justifyCenter": "Alinhar pelo Centro", "hiliteColor": "Cor de segundo plano", "deleteTable": "Excluir Tabela", "outdent": "Avançar", "cut": "Recortar", "plainFormatBlock": "Estilo de Parágrafo", "bold": "Negrito", "systemShortcutFF": "A ação \"${0}\" está disponível apenas no Mozilla Firefox utilizando um atalho do teclado. Utilize ${1}.", "justifyRight": "Alinhar pela Direita", "appleKey": "⌘${0}", "ctrlKey": "ctrl+${0}"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.pt_br");dojo.cldr.nls.number.pt_br={"group": ".", "decimal": ",", "scientificFormat": "#E0", "currencySpacing-afterCurrency-currencyMatch": "[:letter:]", "infinity": "∞", "list": ";", "percentSign": "%", "minusSign": "-", "currencySpacing-beforeCurrency-surroundingMatch": "[:digit:]", "currencySpacing-afterCurrency-insertBetween": " ", "nan": "NaN", "nativeZeroDigit": "0", "plusSign": "+", "currencySpacing-afterCurrency-surroundingMatch": "[:digit:]", "currencyFormat": "¤ #,##0.00", "currencySpacing-beforeCurrency-currencyMatch": "[:letter:]", "perMille": "‰", "percentFormat": "#,##0%", "decimalFormat": "#,##0.###", "patternDigit": "#", "currencySpacing-beforeCurrency-insertBetween": " ", "exponential": "E"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.pt_br");dijit.nls.common.pt_br={"buttonCancel": "Cancelar ", "buttonSave": "Salvar", "buttonOk": "OK"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.pt_br");dijit.form.nls.validate.pt_br={"rangeMessage": "* Esse valor está fora do intervalo.", "invalidMessage": "* O valor digitado não é válido.", "missingMessage": "* Esse valor é necessário."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.pt_br");dijit.form.nls.ComboBox.pt_br={"previousMessage": "Opções anteriores", "nextMessage": "Mais opções"};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.pt_br");dojo.cldr.nls.currency.pt_br={"EUR_displayName": "Euro", "CHF_displayName": "Franco suíço", "HKD_displayName": "Dólar de Hong Kong", "CAD_displayName": "Dólar canadense", "GBP_displayName": "Libra esterlina britânica", "JPY_displayName": "Iene japonês", "AUD_displayName": "Dólar australiano", "USD_displayName": "Dólar norte-americano", "USD_symbol": "$", "GBP_symbol": "£", "JPY_symbol": "¥", "EUR_symbol": "€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.pt_br");dojo.cldr.nls.gregorian.pt_br={"field-hour": "Hora", "field-dayperiod": "Período do dia", "field-minute": "Minuto", "timeFormat-full": "HH'h'mm'min'ss's' z", "field-week": "Semana", "field-weekday": "Dia da semana", "field-second": "Segundo", "dateFormat-medium": "dd/MM/yyyy", "field-day": "Dia", "timeFormat-long": "H'h'm'min's's' z", "field-month": "Mês", "field-year": "Ano", "dateFormat-short": "dd/MM/yy", "field-zone": "Fuso", "eraAbbr": ["a.C.", "d.C."], "months-format-abbr": ["jan", "fev", "mar", "abr", "mai", "jun", "jul", "ago", "set", "out", "nov", "dez"], "dateFormat-full": "EEEE, d' de 'MMMM' de 'yyyy", "days-format-abbr": ["dom", "seg", "ter", "qua", "qui", "sex", "sáb"], "quarters-format-wide": ["1º trimestre", "2º trimestre", "3º trimestre", "4º trimestre"], "quarters-format-abbreviated": ["T1", "T2", "T3", "T4"], "months-format-wide": ["janeiro", "fevereiro", "março", "abril", "maio", "junho", "julho", "agosto", "setembro", "outubro", "novembro", "dezembro"], "months-standAlone-narrow": ["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], "days-standAlone-narrow": ["D", "S", "T", "Q", "Q", "S", "S"], "dateFormat-long": "d' de 'MMMM' de 'yyyy", "days-format-wide": ["domingo", "segunda-feira", "terça-feira", "quarta-feira", "quinta-feira", "sexta-feira", "sábado"], "dateTimeFormats-appendItem-Second": "{0} ({2}: {1})", "eraNames": ["BCE", "CE"], "dateTimeFormats-appendItem-Year": "{0} {1}", "field-era": "Era", "dateTimeFormats-appendItem-Week": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Timezone": "{0} {1}", "dateTimeFormats-appendItem-Month": "{0} ({2}: {1})", "timeFormat-medium": "HH:mm:ss", "dateTimeFormats-appendItem-Minute": "{0} ({2}: {1})", "dateTimeFormat": "{1} {0}", "dateTimeFormats-appendItem-Day": "{0} ({2}: {1})", "timeFormat-short": "HH:mm", "dateTimeFormats-appendItem-Quarter": "{0} ({2}: {1})", "pm": "PM", "dateTimeFormats-appendItem-Day-Of-Week": "{0} {1}", "dateTimeFormats-appendItem-Hour": "{0} ({2}: {1})", "am": "AM", "dateTimeFormats-appendItem-Era": "{0} {1}"};dojo.provide("dijit.nls.Textarea");dijit.nls.Textarea._built=true;dojo.provide("dijit.nls.Textarea.pt_br");dijit.nls.Textarea.pt_br={"iframeEditTitle": "edit area", "iframeFocusTitle": "edit area frame"};
/trunk/api/js/dojo1.0/dijit/nls/ja/common.js
New file
0,0 → 1,0
({"buttonCancel": "キャンセル", "buttonSave": "保存", "buttonOk": "OK"})
/trunk/api/js/dojo1.0/dijit/nls/ja/loading.js
New file
0,0 → 1,0
({"loadingState": "ロード中...", "errorState": "エラーが発生しました。"})
/trunk/api/js/dojo1.0/dijit/nls/dijit-all_ru.js
New file
0,0 → 1,0
dojo.provide("dijit.nls.dijit-all_ru");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.ru");dojo.nls.colors.ru={"lightsteelblue": "светлый стальной", "orangered": "оранжево-красный", "midnightblue": "полуночно-синий", "cadetblue": "серо-синий", "seashell": "морская раковина", "slategrey": "грифельно-серый", "coral": "коралловый", "darkturquoise": "темный бирюзовый", "antiquewhite": "белый антик", "mediumspringgreen": "нейтральный весенне-зеленый", "salmon": "лососевый", "darkgrey": "темно-серый", "ivory": "слоновой кости", "greenyellow": "зелено-желтый", "mistyrose": "блекло-розовый", "lightsalmon": "светло-лососевый", "silver": "серебристый", "dimgrey": "тускло-серый", "orange": "оранжевый", "white": "белый", "navajowhite": "белый навахо", "royalblue": "королевский голубой", "deeppink": "темно-розовый", "lime": "лайм", "oldlace": "матово-белый", "chartreuse": "желто-салатный", "darkcyan": "темный циан", "yellow": "желтый", "linen": "хлопковый", "olive": "оливковый", "gold": "золотой", "lawngreen": "зеленая лужайка", "lightyellow": "светло-желтый", "tan": "рыжевато-коричневый", "darkviolet": "темно-фиолетовый", "lightslategrey": "светлый грифельно-серый", "grey": "серый", "darkkhaki": "темный хаки", "green": "зеленый", "deepskyblue": "темный небесно-голубой", "aqua": "зеленовато-голубой", "sienna": "охра", "mintcream": "мятно-кремовый", "rosybrown": "розово-коричневый", "mediumslateblue": "нейтральный грифельно-синий", "magenta": "пурпурный", "lightseagreen": "светлый морской волны", "cyan": "циан", "olivedrab": "желтовато-серый", "darkgoldenrod": "темно-золотистый", "slateblue": "грифельно-синий", "mediumaquamarine": "нейтральный аквамарин", "lavender": "бледно-лиловый", "mediumseagreen": "нейтральный морской волны", "maroon": "темно-бордовый", "darkslategray": "темный грифельно-серый", "mediumturquoise": "нейтральный бирюзовый", "ghostwhite": "призрачно-белый", "darkblue": "темно-синий", "mediumvioletred": "нейтральный фиолетово-красный", "brown": "коричневый", "lightgray": "светло-серый", "sandybrown": "коричнево-песчаный", "pink": "розовый", "firebrick": "кирпичный", "indigo": "индиго", "snow": "белоснежный", "darkorchid": "темный орсель", "turquoise": "бирюзовый", "chocolate": "шоколадный", "springgreen": "весенний зеленый", "moccasin": "мокасин", "navy": "темно-синий", "lemonchiffon": "бледно-лимонный", "teal": "чирок", "floralwhite": "цветочно-белый", "cornflowerblue": "фиолетово-синий", "paleturquoise": "бледно-бирюзовый", "purple": "фиолетовый", "gainsboro": "бледно-серый", "plum": "сливовый", "red": "красный", "blue": "синий", "forestgreen": "зеленый лесной", "darkgreen": "темно-зеленый", "honeydew": "медовый", "darkseagreen": "темный морской волны", "lightcoral": "светло-коралловый", "palevioletred": "бледный фиолетово-красный", "mediumpurple": "нейтральный фиолетовый", "saddlebrown": "кожано-коричневый", "darkmagenta": "темно-пурпурный", "thistle": "чертополох", "whitesmoke": "дымчато-белый", "wheat": "пшеница", "violet": "фиолетовый", "lightskyblue": "светлый небесно-голубой", "goldenrod": "золотистый", "mediumblue": "нейтральный синий", "skyblue": "небесно-голубой", "crimson": "малиновый", "darksalmon": "темно-лососевый", "darkred": "темно-красный", "darkslategrey": "темный грифельно-серый", "peru": "перу", "lightgrey": "светло-серый", "lightgoldenrodyellow": "светло-золотистый", "blanchedalmond": "светло-миндальный", "aliceblue": "серо-голубой", "bisque": "бисквитный", "slategray": "грифельно-серый", "palegoldenrod": "бледно-золотистый", "darkorange": "темно-оранжевый", "aquamarine": "аквамарин", "lightgreen": "светло-зеленый", "burlywood": "светло-коричневый", "dodgerblue": "бледно-синий", "darkgray": "темно-серый", "lightcyan": "светлый циан", "powderblue": "пороховой", "blueviolet": "сине-фиолетовый", "orchid": "орсель", "dimgray": "тускло-серый", "beige": "бежевый", "fuchsia": "фуксин", "lavenderblush": "розовато-лиловый", "hotpink": "красно-розовый", "steelblue": "стальной", "tomato": "помидор", "lightpink": "светло-розовый", "limegreen": "зеленый лайм", "indianred": "индийский красный", "papayawhip": "черенок папайи", "lightslategray": "светлый грифельно-серый", "gray": "серый", "mediumorchid": "нейтральный орсель", "cornsilk": "шелковый оттенок", "black": "черный", "seagreen": "морской волны", "darkslateblue": "темный грифельно-синий", "khaki": "хаки", "lightblue": "светло-синий", "palegreen": "бледно-зеленый", "azure": "лазурный", "peachpuff": "персиковый", "darkolivegreen": "темно-оливковый", "yellowgreen": "желто-зеленый"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.ru");dijit.nls.loading.ru={"loadingState": "Загрузка...", "errorState": "Извините, возникла ошибка"};dojo.provide("dijit.nls.Textarea");dijit.nls.Textarea._built=true;dojo.provide("dijit.nls.Textarea.ru");dijit.nls.Textarea.ru={"iframeEditTitle": "edit area", "iframeFocusTitle": "edit area frame"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.ru");dijit._editor.nls.commands.ru={"removeFormat": "Удалить формат", "copy": "Копировать", "paste": "Вставить", "selectAll": "Выбрать все", "insertOrderedList": "Нумерованный список", "insertTable": "Вставить/изменить таблицу", "underline": "Подчеркивание", "foreColor": "Цвет текста", "htmlToggle": "Код HTML", "formatBlock": "Стиль абзаца", "insertHorizontalRule": "Горизонтальная линейка", "delete": "Удалить", "insertUnorderedList": "Список с маркерами", "tableProp": "Свойства таблицы", "insertImage": "Вставить изображение", "superscript": "Верхний индекс", "subscript": "Нижний индекс", "createLink": "Создать ссылку", "undo": "Отменить", "italic": "Курсив", "fontName": "Название шрифта", "justifyLeft": "По левому краю", "unlink": "Удалить ссылку", "toggleTableBorder": "Переключить рамку таблицы", "fontSize": "Размер шрифта", "indent": "Отступ", "redo": "Повторить", "strikethrough": "Перечеркивание", "justifyFull": "По ширине", "justifyCenter": "По центру", "hiliteColor": "Цвет фона", "deleteTable": "Удалить таблицу", "outdent": "Втяжка", "cut": "Вырезать", "plainFormatBlock": "Стиль абзаца", "bold": "Полужирный", "systemShortcutFF": "Действие \"${0}\" доступно в Mozilla Firefox только через сочетание клавиш. Используйте ${1}.", "justifyRight": "По правому краю", "appleKey": "⌘${0}", "ctrlKey": "ctrl+${0}"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.ru");dojo.cldr.nls.number.ru={"scientificFormat": "#E0", "currencySpacing-afterCurrency-currencyMatch": "[:letter:]", "infinity": "∞", "list": ";", "percentSign": "%", "minusSign": "-", "currencySpacing-beforeCurrency-surroundingMatch": "[:digit:]", "currencySpacing-afterCurrency-insertBetween": " ", "nan": "NaN", "nativeZeroDigit": "0", "plusSign": "+", "currencySpacing-afterCurrency-surroundingMatch": "[:digit:]", "currencyFormat": "¤ #,##0.00", "currencySpacing-beforeCurrency-currencyMatch": "[:letter:]", "perMille": "‰", "group": ",", "percentFormat": "#,##0%", "decimalFormat": "#,##0.###", "decimal": ".", "patternDigit": "#", "currencySpacing-beforeCurrency-insertBetween": " ", "exponential": "E"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.ru");dijit.nls.common.ru={"buttonCancel": "Отмена", "buttonSave": "Сохранить", "buttonOk": "ОК"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.ru");dijit.form.nls.validate.ru={"rangeMessage": "* Это значение вне диапазона.", "invalidMessage": "* Указано недопустимое значение.", "missingMessage": "* Это обязательное значение."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.ru");dijit.form.nls.ComboBox.ru={"previousMessage": "Предыдущие варианты", "nextMessage": "Следующие варианты"};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.ru");dojo.cldr.nls.currency.ru={"USD_symbol": "$", "EUR_displayName": "EUR", "GBP_displayName": "GBP", "JPY_displayName": "JPY", "GBP_symbol": "£", "JPY_symbol": "¥", "EUR_symbol": "€", "USD_displayName": "USD"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.ru");dojo.cldr.nls.gregorian.ru={"dateTimeFormats-appendItem-Second": "{0} ({2}: {1})", "field-dayperiod": "Dayperiod", "field-minute": "Minute", "eraNames": ["BCE", "CE"], "field-weekday": "Day of the Week", "months-standAlone-narrow": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"], "dateTimeFormats-appendItem-Year": "{0} {1}", "field-era": "Era", "field-hour": "Hour", "timeFormat-full": "HH:mm:ss z", "dateTimeFormats-appendItem-Week": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Timezone": "{0} {1}", "dateTimeFormats-appendItem-Month": "{0} ({2}: {1})", "days-standAlone-narrow": ["1", "2", "3", "4", "5", "6", "7"], "eraAbbr": ["BCE", "CE"], "dateFormat-long": "yyyy MMMM d", "timeFormat-medium": "HH:mm:ss", "field-zone": "Zone", "dateTimeFormats-appendItem-Minute": "{0} ({2}: {1})", "dateFormat-medium": "yyyy MMM d", "quarters-format-abbreviated": ["Q1", "Q2", "Q3", "Q4"], "dateTimeFormat": "{1} {0}", "field-year": "Year", "dateTimeFormats-appendItem-Day": "{0} ({2}: {1})", "field-week": "Week", "timeFormat-long": "HH:mm:ss z", "months-format-abbr": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"], "timeFormat-short": "HH:mm", "field-month": "Month", "dateTimeFormats-appendItem-Quarter": "{0} ({2}: {1})", "days-format-abbr": ["1", "2", "3", "4", "5", "6", "7"], "pm": "PM", "field-second": "Second", "field-day": "Day", "dateTimeFormats-appendItem-Day-Of-Week": "{0} {1}", "dateTimeFormats-appendItem-Hour": "{0} ({2}: {1})", "am": "AM", "dateFormat-short": "yy/MM/dd", "dateFormat-full": "EEEE, yyyy MMMM dd", "months-format-wide": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"], "dateTimeFormats-appendItem-Era": "{0} {1}", "quarters-format-wide": ["Q1", "Q2", "Q3", "Q4"], "days-format-wide": ["1", "2", "3", "4", "5", "6", "7"]};dojo.provide("dijit.nls.Textarea");dijit.nls.Textarea._built=true;dojo.provide("dijit.nls.Textarea.ru");dijit.nls.Textarea.ru={"iframeEditTitle": "edit area", "iframeFocusTitle": "edit area frame"};
/trunk/api/js/dojo1.0/dijit/nls/dijit-all_en-us.js
New file
0,0 → 1,0
dojo.provide("dijit.nls.dijit-all_en-us");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.en_us");dojo.nls.colors.en_us={"lightsteelblue": "light steel blue", "orangered": "orange red", "midnightblue": "midnight blue", "cadetblue": "cadet blue", "seashell": "seashell", "slategrey": "slate gray", "coral": "coral", "darkturquoise": "dark turquoise", "antiquewhite": "antique white", "mediumspringgreen": "medium spring green", "salmon": "salmon", "darkgrey": "dark gray", "ivory": "ivory", "greenyellow": "green-yellow", "mistyrose": "misty rose", "lightsalmon": "light salmon", "silver": "silver", "dimgrey": "dim gray", "orange": "orange", "white": "white", "navajowhite": "navajo white", "royalblue": "royal blue", "deeppink": "deep pink", "lime": "lime", "oldlace": "old lace", "chartreuse": "chartreuse", "darkcyan": "dark cyan", "yellow": "yellow", "linen": "linen", "olive": "olive", "gold": "gold", "lawngreen": "lawn green", "lightyellow": "light yellow", "tan": "tan", "darkviolet": "dark violet", "lightslategrey": "light slate gray", "grey": "gray", "darkkhaki": "dark khaki", "green": "green", "deepskyblue": "deep sky blue", "aqua": "aqua", "sienna": "sienna", "mintcream": "mint cream", "rosybrown": "rosy brown", "mediumslateblue": "medium slate blue", "magenta": "magenta", "lightseagreen": "light sea green", "cyan": "cyan", "olivedrab": "olive drab", "darkgoldenrod": "dark goldenrod", "slateblue": "slate blue", "mediumaquamarine": "medium aquamarine", "lavender": "lavender", "mediumseagreen": "medium sea green", "maroon": "maroon", "darkslategray": "dark slate gray", "mediumturquoise": "medium turquoise", "ghostwhite": "ghost white", "darkblue": "dark blue", "mediumvioletred": "medium violet-red", "brown": "brown", "lightgray": "light gray", "sandybrown": "sandy brown", "pink": "pink", "firebrick": "fire brick", "indigo": "indigo", "snow": "snow", "darkorchid": "dark orchid", "turquoise": "turquoise", "chocolate": "chocolate", "springgreen": "spring green", "moccasin": "moccasin", "navy": "navy", "lemonchiffon": "lemon chiffon", "teal": "teal", "floralwhite": "floral white", "cornflowerblue": "cornflower blue", "paleturquoise": "pale turquoise", "purple": "purple", "gainsboro": "gainsboro", "plum": "plum", "red": "red", "blue": "blue", "forestgreen": "forest green", "darkgreen": "dark green", "honeydew": "honeydew", "darkseagreen": "dark sea green", "lightcoral": "light coral", "palevioletred": "pale violet-red", "mediumpurple": "medium purple", "saddlebrown": "saddle brown", "darkmagenta": "dark magenta", "thistle": "thistle", "whitesmoke": "white smoke", "wheat": "wheat", "violet": "violet", "lightskyblue": "light sky blue", "goldenrod": "goldenrod", "mediumblue": "medium blue", "skyblue": "sky blue", "crimson": "crimson", "darksalmon": "dark salmon", "darkred": "dark red", "darkslategrey": "dark slate gray", "peru": "peru", "lightgrey": "light gray", "lightgoldenrodyellow": "light goldenrod yellow", "blanchedalmond": "blanched almond", "aliceblue": "alice blue", "bisque": "bisque", "slategray": "slate gray", "palegoldenrod": "pale goldenrod", "darkorange": "dark orange", "aquamarine": "aquamarine", "lightgreen": "light green", "burlywood": "burlywood", "dodgerblue": "dodger blue", "darkgray": "dark gray", "lightcyan": "light cyan", "powderblue": "powder blue", "blueviolet": "blue-violet", "orchid": "orchid", "dimgray": "dim gray", "beige": "beige", "fuchsia": "fuchsia", "lavenderblush": "lavender blush", "hotpink": "hot pink", "steelblue": "steel blue", "tomato": "tomato", "lightpink": "light pink", "limegreen": "lime green", "indianred": "indian red", "papayawhip": "papaya whip", "lightslategray": "light slate gray", "gray": "gray", "mediumorchid": "medium orchid", "cornsilk": "cornsilk", "black": "black", "seagreen": "sea green", "darkslateblue": "dark slate blue", "khaki": "khaki", "lightblue": "light blue", "palegreen": "pale green", "azure": "azure", "peachpuff": "peach puff", "darkolivegreen": "dark olive green", "yellowgreen": "yellow green"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.en_us");dijit.nls.loading.en_us={"loadingState": "Loading...", "errorState": "Sorry, an error occurred"};dojo.provide("dijit.nls.Textarea");dijit.nls.Textarea._built=true;dojo.provide("dijit.nls.Textarea.en_us");dijit.nls.Textarea.en_us={"iframeEditTitle": "edit area", "iframeFocusTitle": "edit area frame"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.en_us");dijit._editor.nls.commands.en_us={"removeFormat": "Remove Format", "copy": "Copy", "paste": "Paste", "selectAll": "Select All", "insertOrderedList": "Numbered List", "insertTable": "Insert/Edit Table", "underline": "Underline", "foreColor": "Foreground Color", "htmlToggle": "HTML Source", "formatBlock": "Paragraph Style", "insertHorizontalRule": "Horizontal Rule", "delete": "Delete", "appleKey": "⌘${0}", "insertUnorderedList": "Bullet List", "tableProp": "Table Property", "insertImage": "Insert Image", "superscript": "Superscript", "subscript": "Subscript", "createLink": "Create Link", "undo": "Undo", "italic": "Italic", "fontName": "Font Name", "justifyLeft": "Align Left", "unlink": "Remove Link", "toggleTableBorder": "Toggle Table Border", "ctrlKey": "ctrl+${0}", "fontSize": "Font Size", "indent": "Indent", "redo": "Redo", "strikethrough": "Strikethrough", "justifyFull": "Justify", "justifyCenter": "Align Center", "hiliteColor": "Background Color", "deleteTable": "Delete Table", "outdent": "Outdent", "cut": "Cut", "plainFormatBlock": "Paragraph Style", "bold": "Bold", "systemShortcutFF": "The \"${0}\" action is only available in Mozilla Firefox using a keyboard shortcut. Use ${1}.", "justifyRight": "Align Right"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.en_us");dojo.cldr.nls.number.en_us={"currencyFormat": "¤#,##0.00;(¤#,##0.00)", "scientificFormat": "#E0", "currencySpacing-afterCurrency-currencyMatch": "[:letter:]", "infinity": "∞", "list": ";", "percentSign": "%", "minusSign": "-", "currencySpacing-beforeCurrency-surroundingMatch": "[:digit:]", "currencySpacing-afterCurrency-insertBetween": " ", "nan": "NaN", "nativeZeroDigit": "0", "plusSign": "+", "currencySpacing-afterCurrency-surroundingMatch": "[:digit:]", "currencySpacing-beforeCurrency-currencyMatch": "[:letter:]", "perMille": "‰", "group": ",", "percentFormat": "#,##0%", "decimalFormat": "#,##0.###", "decimal": ".", "patternDigit": "#", "currencySpacing-beforeCurrency-insertBetween": " ", "exponential": "E"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.en_us");dijit.nls.common.en_us={"buttonCancel": "Cancel", "buttonSave": "Save", "buttonOk": "OK"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.en_us");dijit.form.nls.validate.en_us={"rangeMessage": "* This value is out of range.", "invalidMessage": "* The value entered is not valid.", "missingMessage": "* This value is required."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.en_us");dijit.form.nls.ComboBox.en_us={"previousMessage": "Previous choices", "nextMessage": "More choices"};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.en_us");dojo.cldr.nls.currency.en_us={"USD_symbol": "$", "HKD_displayName": "Hong Kong Dollar", "CHF_displayName": "Swiss Franc", "CHF_symbol": "SwF", "HKD_symbol": "HK$", "CAD_displayName": "Canadian Dollar", "AUD_displayName": "Australian Dollar", "JPY_displayName": "Japanese Yen", "CAD_symbol": "Can$", "USD_displayName": "US Dollar", "GBP_displayName": "British Pound Sterling", "AUD_symbol": "$A", "EUR_displayName": "Euro", "GBP_symbol": "£", "JPY_symbol": "¥", "EUR_symbol": "€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.en_us");dojo.cldr.nls.gregorian.en_us={"dateFormat-medium": "MMM d, yyyy", "timeFormat-full": "h:mm:ss a v", "months-standAlone-narrow": ["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], "eraNames": ["Before Christ", "Anno Domini"], "days-standAlone-narrow": ["S", "M", "T", "W", "T", "F", "S"], "timeFormat-medium": "h:mm:ss a", "dateFormat-long": "MMMM d, yyyy", "field-dayperiod": "AM/PM", "dateFormat-short": "M/d/yy", "months-format-wide": ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], "timeFormat-short": "h:mm a", "months-format-abbr": ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], "days-format-wide": ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], "timeFormat-long": "h:mm:ss a z", "eraAbbr": ["BC", "AD"], "quarters-format-wide": ["1st quarter", "2nd quarter", "3rd quarter", "4th quarter"], "dateFormat-full": "EEEE, MMMM d, yyyy", "days-format-abbr": ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], "dateTimeFormats-appendItem-Second": "{0} ({2}: {1})", "field-minute": "Minute", "field-weekday": "Day of the Week", "dateTimeFormats-appendItem-Year": "{0} {1}", "field-era": "Era", "field-hour": "Hour", "dateTimeFormats-appendItem-Week": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Timezone": "{0} {1}", "dateTimeFormats-appendItem-Month": "{0} ({2}: {1})", "field-zone": "Zone", "dateTimeFormats-appendItem-Minute": "{0} ({2}: {1})", "quarters-format-abbreviated": ["Q1", "Q2", "Q3", "Q4"], "dateTimeFormat": "{1} {0}", "field-year": "Year", "dateTimeFormats-appendItem-Day": "{0} ({2}: {1})", "field-week": "Week", "field-month": "Month", "dateTimeFormats-appendItem-Quarter": "{0} ({2}: {1})", "pm": "PM", "field-second": "Second", "field-day": "Day", "dateTimeFormats-appendItem-Day-Of-Week": "{0} {1}", "dateTimeFormats-appendItem-Hour": "{0} ({2}: {1})", "am": "AM", "dateTimeFormats-appendItem-Era": "{0} {1}"};dojo.provide("dijit.nls.Textarea");dijit.nls.Textarea._built=true;dojo.provide("dijit.nls.Textarea.en_us");dijit.nls.Textarea.en_us={"iframeEditTitle": "edit area", "iframeFocusTitle": "edit area frame"};
/trunk/api/js/dojo1.0/dijit/nls/dijit-all_en-gb.js
New file
0,0 → 1,0
dojo.provide("dijit.nls.dijit-all_en-gb");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.en_gb");dojo.nls.colors.en_gb={"lightsteelblue": "light steel blue", "orangered": "orange red", "midnightblue": "midnight blue", "cadetblue": "cadet blue", "seashell": "seashell", "slategrey": "slate gray", "coral": "coral", "darkturquoise": "dark turquoise", "antiquewhite": "antique white", "mediumspringgreen": "medium spring green", "salmon": "salmon", "darkgrey": "dark gray", "ivory": "ivory", "greenyellow": "green-yellow", "mistyrose": "misty rose", "lightsalmon": "light salmon", "silver": "silver", "dimgrey": "dim gray", "orange": "orange", "white": "white", "navajowhite": "navajo white", "royalblue": "royal blue", "deeppink": "deep pink", "lime": "lime", "oldlace": "old lace", "chartreuse": "chartreuse", "darkcyan": "dark cyan", "yellow": "yellow", "linen": "linen", "olive": "olive", "gold": "gold", "lawngreen": "lawn green", "lightyellow": "light yellow", "tan": "tan", "darkviolet": "dark violet", "lightslategrey": "light slate gray", "grey": "gray", "darkkhaki": "dark khaki", "green": "green", "deepskyblue": "deep sky blue", "aqua": "aqua", "sienna": "sienna", "mintcream": "mint cream", "rosybrown": "rosy brown", "mediumslateblue": "medium slate blue", "magenta": "magenta", "lightseagreen": "light sea green", "cyan": "cyan", "olivedrab": "olive drab", "darkgoldenrod": "dark goldenrod", "slateblue": "slate blue", "mediumaquamarine": "medium aquamarine", "lavender": "lavender", "mediumseagreen": "medium sea green", "maroon": "maroon", "darkslategray": "dark slate gray", "mediumturquoise": "medium turquoise", "ghostwhite": "ghost white", "darkblue": "dark blue", "mediumvioletred": "medium violet-red", "brown": "brown", "lightgray": "light gray", "sandybrown": "sandy brown", "pink": "pink", "firebrick": "fire brick", "indigo": "indigo", "snow": "snow", "darkorchid": "dark orchid", "turquoise": "turquoise", "chocolate": "chocolate", "springgreen": "spring green", "moccasin": "moccasin", "navy": "navy", "lemonchiffon": "lemon chiffon", "teal": "teal", "floralwhite": "floral white", "cornflowerblue": "cornflower blue", "paleturquoise": "pale turquoise", "purple": "purple", "gainsboro": "gainsboro", "plum": "plum", "red": "red", "blue": "blue", "forestgreen": "forest green", "darkgreen": "dark green", "honeydew": "honeydew", "darkseagreen": "dark sea green", "lightcoral": "light coral", "palevioletred": "pale violet-red", "mediumpurple": "medium purple", "saddlebrown": "saddle brown", "darkmagenta": "dark magenta", "thistle": "thistle", "whitesmoke": "white smoke", "wheat": "wheat", "violet": "violet", "lightskyblue": "light sky blue", "goldenrod": "goldenrod", "mediumblue": "medium blue", "skyblue": "sky blue", "crimson": "crimson", "darksalmon": "dark salmon", "darkred": "dark red", "darkslategrey": "dark slate gray", "peru": "peru", "lightgrey": "light gray", "lightgoldenrodyellow": "light goldenrod yellow", "blanchedalmond": "blanched almond", "aliceblue": "alice blue", "bisque": "bisque", "slategray": "slate gray", "palegoldenrod": "pale goldenrod", "darkorange": "dark orange", "aquamarine": "aquamarine", "lightgreen": "light green", "burlywood": "burlywood", "dodgerblue": "dodger blue", "darkgray": "dark gray", "lightcyan": "light cyan", "powderblue": "powder blue", "blueviolet": "blue-violet", "orchid": "orchid", "dimgray": "dim gray", "beige": "beige", "fuchsia": "fuchsia", "lavenderblush": "lavender blush", "hotpink": "hot pink", "steelblue": "steel blue", "tomato": "tomato", "lightpink": "light pink", "limegreen": "lime green", "indianred": "indian red", "papayawhip": "papaya whip", "lightslategray": "light slate gray", "gray": "gray", "mediumorchid": "medium orchid", "cornsilk": "cornsilk", "black": "black", "seagreen": "sea green", "darkslateblue": "dark slate blue", "khaki": "khaki", "lightblue": "light blue", "palegreen": "pale green", "azure": "azure", "peachpuff": "peach puff", "darkolivegreen": "dark olive green", "yellowgreen": "yellow green"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.en_gb");dijit.nls.loading.en_gb={"loadingState": "Loading...", "errorState": "Sorry, an error occurred"};dojo.provide("dijit.nls.Textarea");dijit.nls.Textarea._built=true;dojo.provide("dijit.nls.Textarea.en_gb");dijit.nls.Textarea.en_gb={"iframeEditTitle": "edit area", "iframeFocusTitle": "edit area frame"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.en_gb");dijit._editor.nls.commands.en_gb={"removeFormat": "Remove Format", "copy": "Copy", "paste": "Paste", "selectAll": "Select All", "insertOrderedList": "Numbered List", "insertTable": "Insert/Edit Table", "underline": "Underline", "foreColor": "Foreground Color", "htmlToggle": "HTML Source", "formatBlock": "Paragraph Style", "insertHorizontalRule": "Horizontal Rule", "delete": "Delete", "appleKey": "⌘${0}", "insertUnorderedList": "Bullet List", "tableProp": "Table Property", "insertImage": "Insert Image", "superscript": "Superscript", "subscript": "Subscript", "createLink": "Create Link", "undo": "Undo", "italic": "Italic", "fontName": "Font Name", "justifyLeft": "Align Left", "unlink": "Remove Link", "toggleTableBorder": "Toggle Table Border", "ctrlKey": "ctrl+${0}", "fontSize": "Font Size", "indent": "Indent", "redo": "Redo", "strikethrough": "Strikethrough", "justifyFull": "Justify", "justifyCenter": "Align Center", "hiliteColor": "Background Color", "deleteTable": "Delete Table", "outdent": "Outdent", "cut": "Cut", "plainFormatBlock": "Paragraph Style", "bold": "Bold", "systemShortcutFF": "The \"${0}\" action is only available in Mozilla Firefox using a keyboard shortcut. Use ${1}.", "justifyRight": "Align Right"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.en_gb");dojo.cldr.nls.number.en_gb={"currencyFormat": "¤#,##0.00", "scientificFormat": "#E0", "currencySpacing-afterCurrency-currencyMatch": "[:letter:]", "infinity": "∞", "list": ";", "percentSign": "%", "minusSign": "-", "currencySpacing-beforeCurrency-surroundingMatch": "[:digit:]", "currencySpacing-afterCurrency-insertBetween": " ", "nan": "NaN", "nativeZeroDigit": "0", "plusSign": "+", "currencySpacing-afterCurrency-surroundingMatch": "[:digit:]", "currencySpacing-beforeCurrency-currencyMatch": "[:letter:]", "perMille": "‰", "group": ",", "percentFormat": "#,##0%", "decimalFormat": "#,##0.###", "decimal": ".", "patternDigit": "#", "currencySpacing-beforeCurrency-insertBetween": " ", "exponential": "E"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.en_gb");dijit.nls.common.en_gb={"buttonCancel": "Cancel", "buttonSave": "Save", "buttonOk": "OK"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.en_gb");dijit.form.nls.validate.en_gb={"rangeMessage": "* This value is out of range.", "invalidMessage": "* The value entered is not valid.", "missingMessage": "* This value is required."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.en_gb");dijit.form.nls.ComboBox.en_gb={"previousMessage": "Previous choices", "nextMessage": "More choices"};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.en_gb");dojo.cldr.nls.currency.en_gb={"HKD_displayName": "Hong Kong Dollar", "CHF_displayName": "Swiss Franc", "CHF_symbol": "SwF", "HKD_symbol": "HK$", "CAD_displayName": "Canadian Dollar", "USD_symbol": "US$", "AUD_displayName": "Australian Dollar", "JPY_displayName": "Japanese Yen", "CAD_symbol": "Can$", "USD_displayName": "US Dollar", "GBP_displayName": "British Pound Sterling", "AUD_symbol": "$A", "EUR_displayName": "Euro", "GBP_symbol": "£", "JPY_symbol": "¥", "EUR_symbol": "€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.en_gb");dojo.cldr.nls.gregorian.en_gb={"dateFormat-short": "dd/MM/yyyy", "timeFormat-long": "HH:mm:ss z", "dateFormat-medium": "d MMM yyyy", "dateFormat-long": "d MMMM yyyy", "timeFormat-medium": "HH:mm:ss", "timeFormat-short": "HH:mm", "timeFormat-full": "HH:mm:ss z", "dateFormat-full": "EEEE, d MMMM yyyy", "months-standAlone-narrow": ["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], "eraNames": ["Before Christ", "Anno Domini"], "days-standAlone-narrow": ["S", "M", "T", "W", "T", "F", "S"], "field-dayperiod": "AM/PM", "months-format-wide": ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], "months-format-abbr": ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], "days-format-wide": ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], "eraAbbr": ["BC", "AD"], "quarters-format-wide": ["1st quarter", "2nd quarter", "3rd quarter", "4th quarter"], "days-format-abbr": ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], "dateTimeFormats-appendItem-Second": "{0} ({2}: {1})", "field-minute": "Minute", "field-weekday": "Day of the Week", "dateTimeFormats-appendItem-Year": "{0} {1}", "field-era": "Era", "field-hour": "Hour", "dateTimeFormats-appendItem-Week": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Timezone": "{0} {1}", "dateTimeFormats-appendItem-Month": "{0} ({2}: {1})", "field-zone": "Zone", "dateTimeFormats-appendItem-Minute": "{0} ({2}: {1})", "quarters-format-abbreviated": ["Q1", "Q2", "Q3", "Q4"], "dateTimeFormat": "{1} {0}", "field-year": "Year", "dateTimeFormats-appendItem-Day": "{0} ({2}: {1})", "field-week": "Week", "field-month": "Month", "dateTimeFormats-appendItem-Quarter": "{0} ({2}: {1})", "pm": "PM", "field-second": "Second", "field-day": "Day", "dateTimeFormats-appendItem-Day-Of-Week": "{0} {1}", "dateTimeFormats-appendItem-Hour": "{0} ({2}: {1})", "am": "AM", "dateTimeFormats-appendItem-Era": "{0} {1}"};dojo.provide("dijit.nls.Textarea");dijit.nls.Textarea._built=true;dojo.provide("dijit.nls.Textarea.en_gb");dijit.nls.Textarea.en_gb={"iframeEditTitle": "edit area", "iframeFocusTitle": "edit area frame"};
/trunk/api/js/dojo1.0/dijit/nls/dijit-all_en.js
New file
0,0 → 1,0
dojo.provide("dijit.nls.dijit-all_en");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.en");dojo.nls.colors.en={"lightsteelblue": "light steel blue", "orangered": "orange red", "midnightblue": "midnight blue", "cadetblue": "cadet blue", "seashell": "seashell", "slategrey": "slate gray", "coral": "coral", "darkturquoise": "dark turquoise", "antiquewhite": "antique white", "mediumspringgreen": "medium spring green", "salmon": "salmon", "darkgrey": "dark gray", "ivory": "ivory", "greenyellow": "green-yellow", "mistyrose": "misty rose", "lightsalmon": "light salmon", "silver": "silver", "dimgrey": "dim gray", "orange": "orange", "white": "white", "navajowhite": "navajo white", "royalblue": "royal blue", "deeppink": "deep pink", "lime": "lime", "oldlace": "old lace", "chartreuse": "chartreuse", "darkcyan": "dark cyan", "yellow": "yellow", "linen": "linen", "olive": "olive", "gold": "gold", "lawngreen": "lawn green", "lightyellow": "light yellow", "tan": "tan", "darkviolet": "dark violet", "lightslategrey": "light slate gray", "grey": "gray", "darkkhaki": "dark khaki", "green": "green", "deepskyblue": "deep sky blue", "aqua": "aqua", "sienna": "sienna", "mintcream": "mint cream", "rosybrown": "rosy brown", "mediumslateblue": "medium slate blue", "magenta": "magenta", "lightseagreen": "light sea green", "cyan": "cyan", "olivedrab": "olive drab", "darkgoldenrod": "dark goldenrod", "slateblue": "slate blue", "mediumaquamarine": "medium aquamarine", "lavender": "lavender", "mediumseagreen": "medium sea green", "maroon": "maroon", "darkslategray": "dark slate gray", "mediumturquoise": "medium turquoise", "ghostwhite": "ghost white", "darkblue": "dark blue", "mediumvioletred": "medium violet-red", "brown": "brown", "lightgray": "light gray", "sandybrown": "sandy brown", "pink": "pink", "firebrick": "fire brick", "indigo": "indigo", "snow": "snow", "darkorchid": "dark orchid", "turquoise": "turquoise", "chocolate": "chocolate", "springgreen": "spring green", "moccasin": "moccasin", "navy": "navy", "lemonchiffon": "lemon chiffon", "teal": "teal", "floralwhite": "floral white", "cornflowerblue": "cornflower blue", "paleturquoise": "pale turquoise", "purple": "purple", "gainsboro": "gainsboro", "plum": "plum", "red": "red", "blue": "blue", "forestgreen": "forest green", "darkgreen": "dark green", "honeydew": "honeydew", "darkseagreen": "dark sea green", "lightcoral": "light coral", "palevioletred": "pale violet-red", "mediumpurple": "medium purple", "saddlebrown": "saddle brown", "darkmagenta": "dark magenta", "thistle": "thistle", "whitesmoke": "white smoke", "wheat": "wheat", "violet": "violet", "lightskyblue": "light sky blue", "goldenrod": "goldenrod", "mediumblue": "medium blue", "skyblue": "sky blue", "crimson": "crimson", "darksalmon": "dark salmon", "darkred": "dark red", "darkslategrey": "dark slate gray", "peru": "peru", "lightgrey": "light gray", "lightgoldenrodyellow": "light goldenrod yellow", "blanchedalmond": "blanched almond", "aliceblue": "alice blue", "bisque": "bisque", "slategray": "slate gray", "palegoldenrod": "pale goldenrod", "darkorange": "dark orange", "aquamarine": "aquamarine", "lightgreen": "light green", "burlywood": "burlywood", "dodgerblue": "dodger blue", "darkgray": "dark gray", "lightcyan": "light cyan", "powderblue": "powder blue", "blueviolet": "blue-violet", "orchid": "orchid", "dimgray": "dim gray", "beige": "beige", "fuchsia": "fuchsia", "lavenderblush": "lavender blush", "hotpink": "hot pink", "steelblue": "steel blue", "tomato": "tomato", "lightpink": "light pink", "limegreen": "lime green", "indianred": "indian red", "papayawhip": "papaya whip", "lightslategray": "light slate gray", "gray": "gray", "mediumorchid": "medium orchid", "cornsilk": "cornsilk", "black": "black", "seagreen": "sea green", "darkslateblue": "dark slate blue", "khaki": "khaki", "lightblue": "light blue", "palegreen": "pale green", "azure": "azure", "peachpuff": "peach puff", "darkolivegreen": "dark olive green", "yellowgreen": "yellow green"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.en");dijit.nls.loading.en={"loadingState": "Loading...", "errorState": "Sorry, an error occurred"};dojo.provide("dijit.nls.Textarea");dijit.nls.Textarea._built=true;dojo.provide("dijit.nls.Textarea.en");dijit.nls.Textarea.en={"iframeEditTitle": "edit area", "iframeFocusTitle": "edit area frame"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.en");dijit._editor.nls.commands.en={"removeFormat": "Remove Format", "copy": "Copy", "paste": "Paste", "selectAll": "Select All", "insertOrderedList": "Numbered List", "insertTable": "Insert/Edit Table", "underline": "Underline", "foreColor": "Foreground Color", "htmlToggle": "HTML Source", "formatBlock": "Paragraph Style", "insertHorizontalRule": "Horizontal Rule", "delete": "Delete", "appleKey": "⌘${0}", "insertUnorderedList": "Bullet List", "tableProp": "Table Property", "insertImage": "Insert Image", "superscript": "Superscript", "subscript": "Subscript", "createLink": "Create Link", "undo": "Undo", "italic": "Italic", "fontName": "Font Name", "justifyLeft": "Align Left", "unlink": "Remove Link", "toggleTableBorder": "Toggle Table Border", "ctrlKey": "ctrl+${0}", "fontSize": "Font Size", "indent": "Indent", "redo": "Redo", "strikethrough": "Strikethrough", "justifyFull": "Justify", "justifyCenter": "Align Center", "hiliteColor": "Background Color", "deleteTable": "Delete Table", "outdent": "Outdent", "cut": "Cut", "plainFormatBlock": "Paragraph Style", "bold": "Bold", "systemShortcutFF": "The \"${0}\" action is only available in Mozilla Firefox using a keyboard shortcut. Use ${1}.", "justifyRight": "Align Right"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.en");dojo.cldr.nls.number.en={"currencyFormat": "¤#,##0.00", "scientificFormat": "#E0", "currencySpacing-afterCurrency-currencyMatch": "[:letter:]", "infinity": "∞", "list": ";", "percentSign": "%", "minusSign": "-", "currencySpacing-beforeCurrency-surroundingMatch": "[:digit:]", "currencySpacing-afterCurrency-insertBetween": " ", "nan": "NaN", "nativeZeroDigit": "0", "plusSign": "+", "currencySpacing-afterCurrency-surroundingMatch": "[:digit:]", "currencySpacing-beforeCurrency-currencyMatch": "[:letter:]", "perMille": "‰", "group": ",", "percentFormat": "#,##0%", "decimalFormat": "#,##0.###", "decimal": ".", "patternDigit": "#", "currencySpacing-beforeCurrency-insertBetween": " ", "exponential": "E"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.en");dijit.nls.common.en={"buttonCancel": "Cancel", "buttonSave": "Save", "buttonOk": "OK"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.en");dijit.form.nls.validate.en={"rangeMessage": "* This value is out of range.", "invalidMessage": "* The value entered is not valid.", "missingMessage": "* This value is required."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.en");dijit.form.nls.ComboBox.en={"previousMessage": "Previous choices", "nextMessage": "More choices"};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.en");dojo.cldr.nls.currency.en={"HKD_displayName": "Hong Kong Dollar", "CHF_displayName": "Swiss Franc", "CHF_symbol": "SwF", "HKD_symbol": "HK$", "CAD_displayName": "Canadian Dollar", "USD_symbol": "US$", "AUD_displayName": "Australian Dollar", "JPY_displayName": "Japanese Yen", "CAD_symbol": "Can$", "USD_displayName": "US Dollar", "GBP_displayName": "British Pound Sterling", "AUD_symbol": "$A", "EUR_displayName": "Euro", "GBP_symbol": "£", "JPY_symbol": "¥", "EUR_symbol": "€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.en");dojo.cldr.nls.gregorian.en={"dateFormat-medium": "MMM d, yyyy", "timeFormat-full": "h:mm:ss a v", "months-standAlone-narrow": ["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], "eraNames": ["Before Christ", "Anno Domini"], "days-standAlone-narrow": ["S", "M", "T", "W", "T", "F", "S"], "timeFormat-medium": "h:mm:ss a", "dateFormat-long": "MMMM d, yyyy", "field-dayperiod": "AM/PM", "dateFormat-short": "M/d/yy", "months-format-wide": ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], "timeFormat-short": "h:mm a", "months-format-abbr": ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], "days-format-wide": ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], "timeFormat-long": "h:mm:ss a z", "eraAbbr": ["BC", "AD"], "quarters-format-wide": ["1st quarter", "2nd quarter", "3rd quarter", "4th quarter"], "dateFormat-full": "EEEE, MMMM d, yyyy", "days-format-abbr": ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], "dateTimeFormats-appendItem-Second": "{0} ({2}: {1})", "field-minute": "Minute", "field-weekday": "Day of the Week", "dateTimeFormats-appendItem-Year": "{0} {1}", "field-era": "Era", "field-hour": "Hour", "dateTimeFormats-appendItem-Week": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Timezone": "{0} {1}", "dateTimeFormats-appendItem-Month": "{0} ({2}: {1})", "field-zone": "Zone", "dateTimeFormats-appendItem-Minute": "{0} ({2}: {1})", "quarters-format-abbreviated": ["Q1", "Q2", "Q3", "Q4"], "dateTimeFormat": "{1} {0}", "field-year": "Year", "dateTimeFormats-appendItem-Day": "{0} ({2}: {1})", "field-week": "Week", "field-month": "Month", "dateTimeFormats-appendItem-Quarter": "{0} ({2}: {1})", "pm": "PM", "field-second": "Second", "field-day": "Day", "dateTimeFormats-appendItem-Day-Of-Week": "{0} {1}", "dateTimeFormats-appendItem-Hour": "{0} ({2}: {1})", "am": "AM", "dateTimeFormats-appendItem-Era": "{0} {1}"};dojo.provide("dijit.nls.Textarea");dijit.nls.Textarea._built=true;dojo.provide("dijit.nls.Textarea.en");dijit.nls.Textarea.en={"iframeEditTitle": "edit area", "iframeFocusTitle": "edit area frame"};
/trunk/api/js/dojo1.0/dijit/nls/fr/loading.js
New file
0,0 → 1,0
({"loadingState": "Chargement...", "errorState": "Une erreur est survenue"})
/trunk/api/js/dojo1.0/dijit/nls/fr/common.js
New file
0,0 → 1,0
({"buttonCancel": "Annuler", "buttonSave": "Sauvegarder", "buttonOk": "OK"})
/trunk/api/js/dojo1.0/dijit/nls/zh-tw/common.js
New file
0,0 → 1,0
({"buttonCancel": "取消", "buttonSave": "儲存", "buttonOk": "確定"})
/trunk/api/js/dojo1.0/dijit/nls/zh-tw/loading.js
New file
0,0 → 1,0
({"loadingState": "載入中...", "errorState": "抱歉,發生錯誤"})
/trunk/api/js/dojo1.0/dijit/_Widget.js
New file
0,0 → 1,349
if(!dojo._hasResource["dijit._Widget"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit._Widget"] = true;
dojo.provide("dijit._Widget");
 
dojo.require("dijit._base");
 
dojo.declare("dijit._Widget", null, {
// summary:
// The foundation of dijit widgets.
//
// id: String
// a unique, opaque ID string that can be assigned by users or by the
// system. If the developer passes an ID which is known not to be
// unique, the specified ID is ignored and the system-generated ID is
// used instead.
id: "",
 
// lang: String
// Language to display this widget in (like en-us).
// Defaults to brower's specified preferred language (typically the language of the OS)
lang: "",
 
// dir: String
// Bi-directional support, as defined by the HTML DIR attribute. Either left-to-right "ltr" or right-to-left "rtl".
dir: "",
 
// class: String
// HTML class attribute
"class": "",
 
// style: String
// HTML style attribute
style: "",
 
// title: String
// HTML title attribute
title: "",
 
// srcNodeRef: DomNode
// pointer to original dom node
srcNodeRef: null,
 
// domNode: DomNode
// this is our visible representation of the widget! Other DOM
// Nodes may by assigned to other properties, usually through the
// template system's dojoAttachPonit syntax, but the domNode
// property is the canonical "top level" node in widget UI.
domNode: null,
 
// attributeMap: Object
// A map of attributes and attachpoints -- typically standard HTML attributes -- to set
// on the widget's dom, at the "domNode" attach point, by default.
// Other node references can be specified as properties of 'this'
attributeMap: {id:"", dir:"", lang:"", "class":"", style:"", title:""}, // TODO: add on* handlers?
 
//////////// INITIALIZATION METHODS ///////////////////////////////////////
 
postscript: function(params, srcNodeRef){
this.create(params, srcNodeRef);
},
 
create: function(params, srcNodeRef){
// summary:
// To understand the process by which widgets are instantiated, it
// is critical to understand what other methods create calls and
// which of them you'll want to override. Of course, adventurous
// developers could override create entirely, but this should
// only be done as a last resort.
//
// Below is a list of the methods that are called, in the order
// they are fired, along with notes about what they do and if/when
// you should over-ride them in your widget:
//
// postMixInProperties:
// a stub function that you can over-ride to modify
// variables that may have been naively assigned by
// mixInProperties
// # widget is added to manager object here
// buildRendering
// Subclasses use this method to handle all UI initialization
// Sets this.domNode. Templated widgets do this automatically
// and otherwise it just uses the source dom node.
// postCreate
// a stub function that you can over-ride to modify take
// actions once the widget has been placed in the UI
 
// store pointer to original dom tree
this.srcNodeRef = dojo.byId(srcNodeRef);
 
// For garbage collection. An array of handles returned by Widget.connect()
// Each handle returned from Widget.connect() is an array of handles from dojo.connect()
this._connects=[];
 
// _attaches: String[]
// names of all our dojoAttachPoint variables
this._attaches=[];
 
//mixin our passed parameters
if(this.srcNodeRef && (typeof this.srcNodeRef.id == "string")){ this.id = this.srcNodeRef.id; }
if(params){
dojo.mixin(this,params);
}
this.postMixInProperties();
 
// generate an id for the widget if one wasn't specified
// (be sure to do this before buildRendering() because that function might
// expect the id to be there.
if(!this.id){
this.id=dijit.getUniqueId(this.declaredClass.replace(/\./g,"_"));
}
dijit.registry.add(this);
 
this.buildRendering();
 
// Copy attributes listed in attributeMap into the [newly created] DOM for the widget.
// The placement of these attributes is according to the property mapping in attributeMap.
// Note special handling for 'style' and 'class' attributes which are lists and can
// have elements from both old and new structures, and some attributes like "type"
// cannot be processed this way as they are not mutable.
if(this.domNode){
for(var attr in this.attributeMap){
var mapNode = this[this.attributeMap[attr] || "domNode"];
var value = this[attr];
if(typeof value != "object" && (value !== "" || (params && params[attr]))){
switch(attr){
case "class":
dojo.addClass(mapNode, value);
break;
case "style":
if(mapNode.style.cssText){
mapNode.style.cssText += "; " + value;// FIXME: Opera
}else{
mapNode.style.cssText = value;
}
break;
default:
mapNode.setAttribute(attr, value);
}
}
}
}
 
if(this.domNode){
this.domNode.setAttribute("widgetId", this.id);
}
this.postCreate();
 
// If srcNodeRef has been processed and removed from the DOM (e.g. TemplatedWidget) then delete it to allow GC.
if(this.srcNodeRef && !this.srcNodeRef.parentNode){
delete this.srcNodeRef;
}
},
 
postMixInProperties: function(){
// summary
// Called after the parameters to the widget have been read-in,
// but before the widget template is instantiated.
// Especially useful to set properties that are referenced in the widget template.
},
 
buildRendering: function(){
// summary:
// Construct the UI for this widget, setting this.domNode.
// Most widgets will mixin TemplatedWidget, which overrides this method.
this.domNode = this.srcNodeRef || dojo.doc.createElement('div');
},
 
postCreate: function(){
// summary:
// Called after a widget's dom has been setup
},
 
startup: function(){
// summary:
// Called after a widget's children, and other widgets on the page, have been created.
// Provides an opportunity to manipulate any children before they are displayed
// This is useful for composite widgets that need to control or layout sub-widgets
// Many layout widgets can use this as a wiring phase
},
 
//////////// DESTROY FUNCTIONS ////////////////////////////////
 
destroyRecursive: function(/*Boolean*/ finalize){
// summary:
// Destroy this widget and it's descendants. This is the generic
// "destructor" function that all widget users should call to
// cleanly discard with a widget. Once a widget is destroyed, it's
// removed from the manager object.
// finalize: Boolean
// is this function being called part of global environment
// tear-down?
 
this.destroyDescendants();
this.destroy();
},
 
destroy: function(/*Boolean*/ finalize){
// summary:
// Destroy this widget, but not its descendants
// finalize: Boolean
// is this function being called part of global environment
// tear-down?
this.uninitialize();
dojo.forEach(this._connects, function(array){
dojo.forEach(array, dojo.disconnect);
});
this.destroyRendering(finalize);
dijit.registry.remove(this.id);
},
 
destroyRendering: function(/*Boolean*/ finalize){
// summary:
// Destroys the DOM nodes associated with this widget
// finalize: Boolean
// is this function being called part of global environment
// tear-down?
 
if(this.bgIframe){
this.bgIframe.destroy();
delete this.bgIframe;
}
 
if(this.domNode){
dojo._destroyElement(this.domNode);
delete this.domNode;
}
 
if(this.srcNodeRef){
dojo._destroyElement(this.srcNodeRef);
delete this.srcNodeRef;
}
},
 
destroyDescendants: function(){
// summary:
// Recursively destroy the children of this widget and their
// descendants.
 
// TODO: should I destroy in the reverse order, to go bottom up?
dojo.forEach(this.getDescendants(), function(widget){ widget.destroy(); });
},
 
uninitialize: function(){
// summary:
// stub function. Over-ride to implement custom widget tear-down
// behavior.
return false;
},
 
////////////////// MISCELLANEOUS METHODS ///////////////////
 
toString: function(){
// summary:
// returns a string that represents the widget. When a widget is
// cast to a string, this method will be used to generate the
// output. Currently, it does not implement any sort of reversable
// serialization.
return '[Widget ' + this.declaredClass + ', ' + (this.id || 'NO ID') + ']'; // String
},
 
getDescendants: function(){
// summary:
// return all the descendant widgets
var list = dojo.query('[widgetId]', this.domNode);
return list.map(dijit.byNode); // Array
},
 
nodesWithKeyClick : ["input", "button"],
 
connect: function(
/*Object|null*/ obj,
/*String*/ event,
/*String|Function*/ method){
 
// summary:
// Connects specified obj/event to specified method of this object
// and registers for disconnect() on widget destroy.
// Special event: "ondijitclick" triggers on a click or enter-down or space-up
// Similar to dojo.connect() but takes three arguments rather than four.
var handles =[];
if(event == "ondijitclick"){
var w = this;
// add key based click activation for unsupported nodes.
if(!this.nodesWithKeyClick[obj.nodeName]){
handles.push(dojo.connect(obj, "onkeydown", this,
function(e){
if(e.keyCode == dojo.keys.ENTER){
return (dojo.isString(method))?
w[method](e) : method.call(w, e);
}else if(e.keyCode == dojo.keys.SPACE){
// stop space down as it causes IE to scroll
// the browser window
dojo.stopEvent(e);
}
}));
handles.push(dojo.connect(obj, "onkeyup", this,
function(e){
if(e.keyCode == dojo.keys.SPACE){
return dojo.isString(method) ?
w[method](e) : method.call(w, e);
}
}));
}
event = "onclick";
}
handles.push(dojo.connect(obj, event, this, method));
 
// return handles for FormElement and ComboBox
this._connects.push(handles);
return handles;
},
 
disconnect: function(/*Object*/ handles){
// summary:
// Disconnects handle created by this.connect.
// Also removes handle from this widget's list of connects
for(var i=0; i<this._connects.length; i++){
if(this._connects[i]==handles){
dojo.forEach(handles, dojo.disconnect);
this._connects.splice(i, 1);
return;
}
}
},
 
isLeftToRight: function(){
// summary:
// Checks the DOM to for the text direction for bi-directional support
// description:
// This method cannot be used during widget construction because the widget
// must first be connected to the DOM tree. Parent nodes are searched for the
// 'dir' attribute until one is found, otherwise left to right mode is assumed.
// See HTML spec, DIR attribute for more information.
 
if(typeof this._ltr == "undefined"){
this._ltr = dojo.getComputedStyle(this.domNode).direction != "rtl";
}
return this._ltr; //Boolean
},
 
isFocusable: function(){
// summary:
// Return true if this widget can currently be focused
// and false if not
return this.focus && (dojo.style(this.domNode, "display") != "none");
}
});
 
}
/trunk/api/js/dojo1.0/dijit/TitlePane.js
New file
0,0 → 1,141
if(!dojo._hasResource["dijit.TitlePane"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.TitlePane"] = true;
dojo.provide("dijit.TitlePane");
 
dojo.require("dojo.fx");
 
dojo.require("dijit._Templated");
dojo.require("dijit.layout.ContentPane");
 
dojo.declare(
"dijit.TitlePane",
[dijit.layout.ContentPane, dijit._Templated],
{
// summary
// A pane with a title on top, that can be opened or collapsed.
//
// title: String
// Title of the pane
title: "",
 
// open: Boolean
// Whether pane is opened or closed.
open: true,
 
// duration: Integer
// Time in milliseconds to fade in/fade out
duration: 250,
 
// baseClass: String
// the root className to use for the various states of this widget
baseClass: "dijitTitlePane",
 
templateString:"<div class=\"dijitTitlePane\">\n\t<div dojoAttachEvent=\"onclick:toggle,onkeypress: _onTitleKey,onfocus:_handleFocus,onblur:_handleFocus\" tabindex=\"0\"\n\t\t\twaiRole=\"button\" class=\"dijitTitlePaneTitle\" dojoAttachPoint=\"focusNode\">\n\t\t<div dojoAttachPoint=\"arrowNode\" class=\"dijitInline dijitArrowNode\"><span dojoAttachPoint=\"arrowNodeInner\" class=\"dijitArrowNodeInner\"></span></div>\n\t\t<div dojoAttachPoint=\"titleNode\" class=\"dijitTitlePaneTextNode\"></div>\n\t</div>\n\t<div class=\"dijitTitlePaneContentOuter\" dojoAttachPoint=\"hideNode\">\n\t\t<div class=\"dijitReset\" dojoAttachPoint=\"wipeNode\">\n\t\t\t<div class=\"dijitTitlePaneContentInner\" dojoAttachPoint=\"containerNode\" waiRole=\"region\" tabindex=\"-1\">\n\t\t\t\t<!-- nested divs because wipeIn()/wipeOut() doesn't work right on node w/padding etc. Put padding on inner div. -->\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</div>\n",
 
postCreate: function(){
this.setTitle(this.title);
if(!this.open){
this.hideNode.style.display = this.wipeNode.style.display = "none";
}
this._setCss();
dojo.setSelectable(this.titleNode, false);
this.inherited("postCreate",arguments);
dijit.setWaiState(this.containerNode, "labelledby", this.titleNode.id);
dijit.setWaiState(this.focusNode, "haspopup", "true");
 
// setup open/close animations
var hideNode = this.hideNode, wipeNode = this.wipeNode;
this._wipeIn = dojo.fx.wipeIn({
node: this.wipeNode,
duration: this.duration,
beforeBegin: function(){
hideNode.style.display="";
}
});
this._wipeOut = dojo.fx.wipeOut({
node: this.wipeNode,
duration: this.duration,
onEnd: function(){
hideNode.style.display="none";
}
});
},
 
setContent: function(content){
// summary
// Typically called when an href is loaded. Our job is to make the animation smooth
if(this._wipeOut.status() == "playing"){
// we are currently *closing* the pane, so just let that continue
this.inherited("setContent",arguments);
}else{
if(this._wipeIn.status() == "playing"){
this._wipeIn.stop();
}
 
// freeze container at current height so that adding new content doesn't make it jump
dojo.marginBox(this.wipeNode, {h: dojo.marginBox(this.wipeNode).h});
 
// add the new content (erasing the old content, if any)
this.inherited("setContent",arguments);
 
// call _wipeIn.play() to animate from current height to new height
this._wipeIn.play();
}
},
 
toggle: function(){
// summary: switches between opened and closed state
dojo.forEach([this._wipeIn, this._wipeOut], function(animation){
if(animation.status() == "playing"){
animation.stop();
}
});
 
this[this.open ? "_wipeOut" : "_wipeIn"].play();
this.open =! this.open;
 
// load content (if this is the first time we are opening the TitlePane
// and content is specified as an href, or we have setHref when hidden)
this._loadCheck();
 
this._setCss();
},
 
_setCss: function(){
// summary: set the open/close css state for the TitlePane
var classes = ["dijitClosed", "dijitOpen"];
var boolIndex = this.open;
dojo.removeClass(this.focusNode, classes[!boolIndex+0]);
this.focusNode.className += " " + classes[boolIndex+0];
 
// provide a character based indicator for images-off mode
this.arrowNodeInner.innerHTML = this.open ? "-" : "+";
},
 
_onTitleKey: function(/*Event*/ e){
// summary: callback when user hits a key
if(e.keyCode == dojo.keys.ENTER || e.charCode == dojo.keys.SPACE){
this.toggle();
}
else if(e.keyCode == dojo.keys.DOWN_ARROW){
if(this.open){
this.containerNode.focus();
e.preventDefault();
}
}
},
_handleFocus: function(/*Event*/ e){
// summary: handle blur and focus for this widget
// add/removeClass is safe to call without hasClass in this case
dojo[(e.type=="focus" ? "addClass" : "removeClass")](this.focusNode,this.baseClass+"Focused");
},
 
setTitle: function(/*String*/ title){
// summary: sets the text of the title
this.titleNode.innerHTML=title;
}
});
 
}
/trunk/api/js/dojo1.0/dijit/Declaration.js
New file
0,0 → 1,76
if(!dojo._hasResource["dijit.Declaration"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.Declaration"] = true;
dojo.provide("dijit.Declaration");
dojo.require("dijit._Widget");
dojo.require("dijit._Templated");
 
dojo.declare(
"dijit.Declaration",
dijit._Widget,
{
// summary:
// The Declaration widget allows a user to declare new widget
// classes directly from a snippet of markup.
 
_noScript: true,
widgetClass: "",
replaceVars: true,
defaults: null,
mixins: [],
buildRendering: function(){
var src = this.srcNodeRef.parentNode.removeChild(this.srcNodeRef);
var preambles = dojo.query("> script[type='dojo/method'][event='preamble']", src).orphan();
var scripts = dojo.query("> script[type^='dojo/']", src).orphan();
var srcType = src.nodeName;
 
var propList = this.defaults||{};
 
// map array of strings like [ "dijit.form.Button" ] to array of mixin objects
// (note that dojo.map(this.mixins, dojo.getObject) doesn't work because it passes
// a bogus third argument to getObject(), confusing it)
this.mixins = this.mixins.length ?
dojo.map(this.mixins, function(name){ return dojo.getObject(name); } ) :
[ dijit._Widget, dijit._Templated ];
 
if(preambles.length){
// we only support one preamble. So be it.
propList.preamble = dojo.parser._functionFromScript(preambles[0]);
}
 
var parsedScripts = dojo.map(scripts, function(s){
var evt = s.getAttribute("event")||"postscript";
return {
event: evt,
func: dojo.parser._functionFromScript(s)
};
});
 
// do the connects for each <script type="dojo/connect" event="foo"> block and make
// all <script type="dojo/method"> tags execute right after construction
this.mixins.push(function(){
dojo.forEach(parsedScripts, function(s){
dojo.connect(this, s.event, this, s.func);
}, this);
});
 
propList.widgetsInTemplate = true;
propList._skipNodeCache = true;
propList.templateString = "<"+srcType+" class='"+src.className+"' dojoAttachPoint='"+(src.getAttribute("dojoAttachPoint")||'')+"' dojoAttachEvent='"+(src.getAttribute("dojoAttachEvent")||'')+"' >"+src.innerHTML.replace(/\%7B/g,"{").replace(/\%7D/g,"}")+"</"+srcType+">";
// console.debug(propList.templateString);
 
// strip things so we don't create stuff under us in the initial setup phase
dojo.query("[dojoType]", src).forEach(function(node){
node.removeAttribute("dojoType");
});
 
// create the new widget class
dojo.declare(
this.widgetClass,
this.mixins,
propList
);
}
}
);
 
}
/trunk/api/js/dojo1.0/dijit/tests/test_Table.html
New file
0,0 → 1,133
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Dijit Grid</title>
<script type="text/javascript">
var djConfig = {isDebug: true, debugAtAllCosts: true};
</script>
<style type="text/css">
@import "../../dojo/resources/dojo.css";
@import "css/dijitTests.css";
</style>
 
 
<script type="text/javascript" src="../../dojo/dojo.js"></script>
<script type="text/javascript" src="_testCommon.js"></script>
 
<style type="text/css">
body{ padding:1em 3em; }
 
/* The following will end up being added by code. */
.dijitGridColumn1{ width:60px; }
.dijitGridColumn2{ width:100px; }
.dijitGridColumn3{ width:100px; }
.dijitGridColumn4{ width:280px; }
/* End code add */
 
div.clear { clear:both; }
div.dijitGrid {
width:600px;
border:1px solid #ccc;
margin:1em;
}
table td {
border:1px solid #ccc;
border-collapse:none;
}
div.digitGridRow {
border:1px solid #c00;
clear:both;
}
span.dijitGridCell{
padding:0.25em;
display:block;
float:left;
}
span.dijitGridSeparator{
display:block;
float:left;
width:1px;
border-left:1px solid #ccc;
}
div.dijitGridHead {
background-color:#efefef;
border-bottom:1px solid #ccc;
font-weight:bold;
}
div.dijitGridBody {
height:200px;
overflow:auto;
}
div.dijitGridBodyContent {
overflow:visible;
}
 
div.dijitGridFoot { }
</style>
</head>
<body>
<h1>Dijit Grid: Table Test</h1>
<p>This is a pure HTML test, in order to develop the eventual markup structure for the Dijit Grid. It is <strong>not</strong> a working Grid, nor will it be the eventual Grid test.</p>
<div class="dijitGrid">
<div class="dijitGridHead">
<div class="dijitGridRow">
<span class="dijitGridCell dijitGridColumn1">Name</span>
<span class="dijitGridSeparator"></span>
<span class="dijitGridCell dijitGridColumn2">Date Added</span>
<span class="dijitGridSeparator"></span>
<span class="dijitGridCell dijitGridColumn3">Date Modified</span>
<span class="dijitGridSeparator"></span>
<span class="dijitGridCell dijitGridColumn4">Label</span>
<div class="clear"></div>
</div>
</div>
<div class="dijitGridBody">
<div class="dijitGridBodyContent">
<table cellpadding="0" cellspacing="0" border="0" width="576" style="margin:0;border:0;">
<colgroup>
<col width="60"/>
<col width="100"/>
<col width="100"/>
<col width="280"/>
</colgroup>
<tr><td>Adam</td><td>3/1/2004</td><td>11/1/2003</td><td><p><strong>Lorem ipsum</strong> dolor sit amet...</p><div>consectetuer</div></td></tr>
<tr><td>Betty</td><td>6/15/2005</td><td>1/7/2006</td><td>Adipiscing elit, sed diam nonummy nibh euismod</td></tr>
<tr><td>Carla</td><td>4/23/2002</td><td>3/1/2004</td><td>tincidunt ut laoreet dolore magna aliquam erat volutpat.</td></tr>
<tr><td>David</td><td>11/1/2003</td><td>6/15/2005</td><td>Ut wisi enim ad minim veniam, quis</td></tr>
<tr><td>Esther</td><td>1/7/2006</td><td>4/23/2002</td><td>nostrud exerci tation ullamcorper</td></tr>
<tr><td>Fred</td><td>3/1/2004</td><td>11/1/2003</td><td>suscipit lobortis nisl ut aliquip ex ea commodo consequat.</td></tr>
<tr><td>Greg</td><td>6/15/2005</td><td>1/7/2006</td><td><p><strong>Lorem ipsum</strong> dolor sit amet...</p><div>consectetuer</div></td></tr>
<tr><td>Helga</td><td>4/23/2002</td><td>3/1/2004</td><td>adipiscing elit, sed diam nonummy nibh euismod</td></tr>
<tr><td>Ianna</td><td>11/1/2003</td><td>6/15/2005</td><td>tincidunt ut laoreet dolore magna aliquam erat volutpat.</td></tr>
<tr><td>Jane</td><td>1/7/2006</td><td>4/23/2002</td><td>Ut wisi enim ad minim veniam, quis</td></tr>
</table>
</div>
</div>
<div class="dijitGridFoot">
</div>
</div>
<h2>A regular table, for comparison purposes</h2>
<table cellpadding="0" cellspacing="0" border="0" width="600">
<thead>
<tr>
<th width="60" valign="top">Name</th>
<th width="100" align="center" valign="top">Date Added</th>
<th width="100" align="center" valign="top">Date Modified</th>
<th>Label</th>
</tr>
</thead>
<tbody>
<tr><td>Adam</td><td>3/1/2004</td><td>11/1/2003</td><td><p><strong>Lorem ipsum</strong> dolor sit amet...</p><div>consectetuer</div></td></tr>
<tr><td>Betty</td><td>6/15/2005</td><td>1/7/2006</td><td>Adipiscing elit, sed diam nonummy nibh euismod</td></tr>
<tr><td>Carla</td><td>4/23/2002</td><td>3/1/2004</td><td>tincidunt ut laoreet dolore magna aliquam erat volutpat.</td></tr>
<tr><td>David</td><td>11/1/2003</td><td>6/15/2005</td><td>Ut wisi enim ad minim veniam, quis</td></tr>
<tr><td>Esther</td><td>1/7/2006</td><td>4/23/2002</td><td>nostrud exerci tation ullamcorper</td></tr>
<tr><td>Fred</td><td>3/1/2004</td><td>11/1/2003</td><td>suscipit lobortis nisl ut aliquip ex ea commodo consequat.</td></tr>
<tr><td>Greg</td><td>6/15/2005</td><td>1/7/2006</td><td><p><strong>Lorem ipsum</strong> dolor sit amet...</p><div>consectetuer</div></td></tr>
<tr><td>Helga</td><td>4/23/2002</td><td>3/1/2004</td><td>adipiscing elit, sed diam nonummy nibh euismod</td></tr>
<tr><td>Ianna</td><td>11/1/2003</td><td>6/15/2005</td><td>tincidunt ut laoreet dolore magna aliquam erat volutpat.</td></tr>
<tr><td>Jane</td><td>1/7/2006</td><td>4/23/2002</td><td>Ut wisi enim ad minim veniam, quis</td></tr>
</tbody>
</table>
</body>
</html>
/trunk/api/js/dojo1.0/dijit/tests/runTests.html
New file
0,0 → 1,9
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Dijit Unit Test Runner</title>
<meta http-equiv="REFRESH" content="0;url=../../util/doh/runner.html?testModule=dijit.tests.module"></HEAD>
<BODY>
Redirecting to D.O.H runner.
</BODY>
</HTML>
/trunk/api/js/dojo1.0/dijit/tests/test_Tree_Notification_API_Support.html
New file
0,0 → 1,105
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Dijit Tree Test</title>
 
<style someProperty="text/css">
@import "../../dojo/resources/dojo.css";
@import "css/dijitTests.css";
</style>
 
 
<script someProperty="text/javascript" src="../../dojo/dojo.js"
djConfig="parseOnLoad: true, isDebug: true"></script>
<script someProperty="text/javascript" src="_testCommon.js"></script>
 
<script language="JavaScript" someProperty="text/javascript">
dojo.require("dojo.data.ItemFileWriteStore");
dojo.require("dijit.Tree");
dojo.require("dijit.Menu");
dojo.require("dijit.form.Button");
dojo.require("dojo.parser"); // scan page for widgets and instantiate them
 
function deleteItem(){
var store = dijit.byId("myTree").store;
store.deleteItem(selectedItem);
resetForms();
}
 
function addItem(){
var store = dijit.byId("myTree").store;
var pInfo = selectedItem ? {parent: selectedItem, attribute:"children"} : null;
console.debug(pInfo);
store.newItem({id: dojo.byId('newId').value,name:dojo.byId("label").value,someProperty:dojo.byId("someProperty").value},pInfo);
resetForms();
}
 
function resetForms() {
dojo.byId('selected').innerHTML="Tree Root"
selectedItem=null;
dojo.byId("uLabel").value = "";
dojo.byId("uSomeProperty").value = "";
}
 
function updateItem(){
console.log("Updating Item");
var store = dijit.byId("myTree").store;
 
if (selectedItem!=null){
if (dojo.byId("uLabel").value != store.getValue(selectedItem, "name")){
store.setValue(selectedItem, "name", dojo.byId("uLabel").value);
}
 
if (dojo.byId("uSomeProperty").value != store.getValue(selectedItem, "someProperty")){
store.setValue(selectedItem, "someProperty", dojo.byId("uSomeProperty").value);
}
 
}else{
console.error("Can't update the tree root");
}
}
 
dojo.addOnLoad(function(){
resetForms();
});
 
function onClick(item){
selectedItem = item;
dojo.byId('selected').innerHTML= item ? treeTestStore.getLabel(item) : "";
dojo.byId('uLabel').value = item ? treeTestStore.getLabel(item) : "";
dojo.byId('uSomeProperty').value = item ? treeTestStore.getValue(item,"someProperty") : "";
}
</script>
 
</head>
<body>
 
<h1 class="testTitle">Dijit Tree Test - dojo.data.Notification API support</h1>
 
<div dojoType="dojo.data.ItemFileWriteStore" jsId="treeTestStore"
url="../tests/_data/treeTest.json"></div>
 
<div dojoType="dijit.Tree" id="myTree" label="root" store="treeTestStore" onClick="onClick" labelAttr="name" somePropertyAttr="someProperty"></div>
 
<br />
<h2>Current Selection: <span id='selected'>Tree Root</span>
 
<h2>Selected Item:</h2>
Name: <input id="uLabel" width="50" value="Enter Node Label" /><br />
Description: <input id="uSomeProperty" width="50" value="Some Test Property" /><br /><br />
<div dojoType="dijit.form.Button" iconClass="noteIcon" onClick="updateItem();">Update Item</div>
 
<h2>New Item</h2>
<p>Enter an Id, Name, and optionally a description to be added as a new item to the store. Upon successful addition, the tree will recieve notification of this event and respond accordingly. If you select a node the item will be added to that node, otherwise the item will be added to the tree root. "Id" is the identifer here and as such must be unique for all items in the store.</p>
Id: <input id="newId" width="50" value="Enter Item Id" /><br />
Name: <input id="label" width="50" value="Enter Item Name" /><br />
Description: <input id="someProperty" width="50" value="Enter Some Property Value" /><br /><br />
 
<div dojoType="dijit.form.Button" iconClass="noteIcon" onClick="addItem();">Add Item to Store</div>
<br />
<button dojoType="dijit.form.Button" iconClass="noteIcon" onClick="deleteItem()">Delete Node (and children)</button>
 
 
</body>
</html>
/trunk/api/js/dojo1.0/dijit/tests/test_Tooltip.html
New file
0,0 → 1,113
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
 
<title>Dojo Tooltip Widget Test</title>
 
 
<script type="text/javascript" src="../../dojo/dojo.js"
djConfig="parseOnLoad: true, isDebug: true"></script>
<script type="text/javascript" src="_testCommon.js"></script>
 
<script type="text/javascript">
dojo.require("dijit.Tooltip");
dojo.require("dojo.parser"); // find widgets
dojo.addOnLoad(function(){
console.log("on load func");
var tt = new dijit.Tooltip({label:"programmatically created tooltip", connectId:["programmaticTest"]});
console.log("created", tt, tt.id);
});
</script>
<style type="text/css">
@import "../../dojo/resources/dojo.css";
@import "css/dijitTests.css";
</style>
</head>
<body>
<h1 class="testTitle">Tooltip test</h1>
<p>Mouse-over or focus the items below to test tooltips. <button onclick="dijit.byId('btnTt').destroy()">Remove</button> tooltip from button.</p>
<p></p>
<div><span id="one" class="tt" tabindex="0"> focusable text </span>
<span dojoType="dijit.Tooltip" connectId="one">
<b>
<span style="color: blue;">rich formatting</span>
<span style="color: red; font-size: x-large;"><i>!</i></span>
</b>
</span>
</div>
<span id="oneA" class="tt"> plain text (not focusable) </span>
<span dojoType="dijit.Tooltip" connectId="oneA">
<span> keyboard users can not access this tooltip</span>
</span>
<a id="three" href="#bogus">anchor</a>
<span dojoType="dijit.Tooltip" connectId="three">tooltip on a link </span>
<p></p>
 
<span id="programmaticTest">this text has a programmatically created tooltip</span>
<br>
 
<button id="four">button</button>
<span id="btnTt" dojoType="dijit.Tooltip" connectId="four">tooltip on a button</span>
 
<span style="float: right">
Test tooltip on right aligned element. Tooltip should flow to the left --&gt;
<select id="seven">
<option value="alpha">Alpha</option>
<option value="beta">Beta</option>
<option value="gamma">Gamma</option>
<option value="delta">Delta</option>
</select>
 
<span dojoType="dijit.Tooltip" connectId="seven">
tooltip on a select<br>
two line tooltip.
</span>
</span>
 
<p></p>
 
<form>
<input type="input" id="id1" value="#1"><br>
<input type="input" id="id2" value="#2"><br>
<input type="input" id="id3" value="#3"><br>
<input type="input" id="id4" value="#4"><br>
<input type="input" id="id5" value="#5"><br>
<input type="input" id="id6" value="#6"><br>
</form>
<br>
 
<div style="overflow: auto; height: 100px; position: relative; border: solid blue 3px;">
<span id="s1">s1 text</span><br><br><br>
<span id="s2">s2 text</span><br><br><br>
<span id="s3">s3 text</span><br><br><br>
<span id="s4">s4 text</span><br><br><br>
<span id="s5">s5 text</span><br><br><br>
</div>
 
<span dojoType="dijit.Tooltip" connectId="id1">
 
tooltip for #1<br>
long&nbsp;long&nbsp;long&nbsp;long&nbsp;long&nbsp;long&nbsp;long&nbsp;long&nbsp;long&nbsp;long&nbsp;long&nbsp;text<br>
make sure that this works properly with a really narrow window
</span>
 
<span dojoType="dijit.Tooltip" connectId="id2">tooltip for #2</span>
<span dojoType="dijit.Tooltip" connectId="id3">tooltip for #3</span>
<span dojoType="dijit.Tooltip" connectId="id4">tooltip for #4</span>
<span dojoType="dijit.Tooltip" connectId="id5">tooltip for #5</span>
<span dojoType="dijit.Tooltip" connectId="id6">tooltip for #6</span>
 
<span dojoType="dijit.Tooltip" connectId="s1">s1 tooltip</span>
<span dojoType="dijit.Tooltip" connectId="s2">s2 tooltip</span>
<span dojoType="dijit.Tooltip" connectId="s3">s3 tooltip</span>
<span dojoType="dijit.Tooltip" connectId="s4">s4 tooltip</span>
<span dojoType="dijit.Tooltip" connectId="s5">s5 tooltip</span>
 
<h3>One Tooltip for multiple connect nodes</h3>
<span dojoType="dijit.Tooltip" connectId="multi1,multi2" style="display:none;">multi tooltip</span>
<a id="multi1" href="#bogus">multi1</a><br><a id="multi2" href="#bogus">multi2</a>
 
</body>
</html>
 
/trunk/api/js/dojo1.0/dijit/tests/widgetsInTemplate.html
New file
0,0 → 1,112
<html>
<head>
<title>testing widgetsInTemplate support</title>
<script type="text/javascript" src="../../dojo/dojo.js"
djConfig="parseOnLoad: true, isDebug: true"></script>
<script type="text/javascript">
dojo.require("doh.runner");
 
dojo.require("dijit.form.Button");
dojo.require("dijit.form.CheckBox");
dojo.require("dijit.ProgressBar");
 
dojo.addOnLoad(function(){
var testW;
doh.register("t",
[
{
name: "dojoAttachPoint",
runTest: function(t){
var testW = dijit.byId("test1Widget");
t.t(testW.normalNode);
t.f(isNaN(testW.normalNode.nodeType));
t.t(testW.buttonWidget instanceof dijit.form.Button);
t.t(testW.checkboxWidget instanceof dijit.form.CheckBox);
t.t(testW.progressBarWidget instanceof dijit.ProgressBar);
// alert((testW.buttonWidget instanceof dijit.form.Button)+(testW.checkboxWidget instanceof dijit.form.CheckBox)+(testW.progressBarWidget instanceof dijit.ProgressBar)+
// (testW.buttonWidget._counter==1)+(testW.checkboxWidget._counter==1)+(testW.progressBarWidget._counter==1));
testW = dijit.byId("test2Widget");
t.t(testW.containerNode);
t.f(isNaN(testW.containerNode.nodeType));
t.is(undefined,testW.buttonWidget);
t.t(testW.checkboxWidget instanceof dijit.form.CheckBox);
}
},
{
name: "dojoAttachEvent",
runTest: function(t){
var testW = dijit.byId("test1Widget");
testW.buttonWidget._counter=0;
testW.buttonWidget.onClick(testW.buttonWidget);
testW.checkboxWidget._counter=0;
testW.checkboxWidget.onClick(testW.checkboxWidget);
testW.progressBarWidget._counter=0;
testW.progressBarWidget.onChange(testW.progressBarWidget);
t.is(1,testW.buttonWidget._counter);
t.is(1,testW.checkboxWidget._counter);
t.is(1,testW.progressBarWidget._counter);
}
}
]
);
doh.run();
});
</script>
<style type="text/css">
@import "../themes/tundra/tundra.css";
</style>
</head>
<body>
<h1>testing widgetsInTemplate support</h1>
<xmp id="Test1Template" style="display:none;">
<div>
<div dojoAttachPoint="normalNode" >normal node</div>
<button dojoAttachPoint="buttonWidget" dojoAttachEvent="onClick:onClick" dojoType="dijit.form.Button">button #1</button>
<div dojoAttachPoint="checkboxWidget" dojoAttachEvent="onClick:onClick" dojoType="dijit.form.CheckBox"></div> checkbox #1
<div dojoAttachPoint="progressBarWidget" dojoAttachEvent="onChange:onClick" style="width:400px" annotate="true"
maximum="200" progress="20" dojoType="dijit.ProgressBar"></div>
</div>
</xmp>
<script>
dojo.declare('Test1Widget',
[dijit._Widget, dijit._Templated],
{
widgetsInTemplate: true,
// isContainer: true,
 
templateString: dojo.byId('Test1Template').textContent || dojo.byId('Test1Template').innerText,
onClick: function(e){
if(e.target){
alert('onClick widgetId='+e.target.id);
}else{
if(e._counter == undefined){
e._counter = 1;
}else{
e._counter++;
}
}
}
});
</script>
<!-- can use widget immediately in markup - no parsing occurs until document loaded and scripts run -->
<div dojoType="Test1Widget" id="test1Widget" ></div>
 
 
<xmp id="Test2Template" style="display:none;">
<div>
<div dojoAttachPoint="containerNode" ><div dojoAttachPoint="checkboxWidget" dojoType="dijit.form.CheckBox"></div> checkbox #2</div>
</div>
</xmp>
<script>
dojo.declare('Test2Widget',
[dijit._Widget, dijit._Templated],
{
widgetsInTemplate: true,
 
templateString: dojo.byId('Test2Template').textContent || dojo.byId('Test2Template').innerText
});
</script>
<div dojoType="Test2Widget" id="test2Widget" ><button dojoAttachPoint="buttonWidget" dojoType="dijit.form.Button">button #2</button></div>
</body>
</html>
 
/trunk/api/js/dojo1.0/dijit/tests/Container.js
New file
0,0 → 1,9
if(!dojo._hasResource["dijit.tests.Container"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.tests.Container"] = true;
dojo.provide("dijit.tests.Container");
 
if(dojo.isBrowser){
doh.registerUrl("dijit.tests.Container", dojo.moduleUrl("dijit", "tests/Container.html"));
}
 
}
/trunk/api/js/dojo1.0/dijit/tests/test_Dialog.html
New file
0,0 → 1,410
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Dialog Widget Dojo Tests</title>
<style type="text/css">
@import "../../dojo/resources/dojo.css";
@import "css/dijitTests.css";
table { border: none; }
</style>
<script type="text/javascript"
djConfig="parseOnLoad: true, isDebug: true"
src="../../dojo/dojo.js"></script>
<script type="text/javascript" src="_testCommon.js"></script>
 
<script type="text/javascript">
dojo.require("dijit.Dialog");
dojo.require("dijit.form.Button");
dojo.require("dijit.form.TextBox");
dojo.require("dijit.form.DateTextBox");
dojo.require("dijit.form.TimeTextBox");
dojo.require("dijit.form.FilteringSelect");
dojo.require("dijit.Menu");
dojo.require("dojo.parser"); // scan page for widgets and instantiate them
 
// create a do nothing, only for test widget
dojo.declare("dijit.TestWidget",
[dijit._Widget, dijit._Templated], {
templateString: "<div style='margin: 10px; border: inset #700 4px; padding: 5px;' dojoAttachPoint='containerNode'></div>"
});
</script>
<script type="text/javascript">
// make dojo.toJson() print dates correctly (this feels a bit dirty)
Date.prototype.json = function(){ return dojo.date.stamp.toISOString(this, {selector: 'date'});};
 
var thirdDlg;
function createDialog() {
if(!thirdDlg){
var pane = dojo.byId('thirdDialog');
pane.style.width = "300px";
thirdDlg = new dijit.Dialog({
title: "Programatic Dialog Creation"
},pane);
}
setTimeout("thirdDlg.show()","3000");
}
</script>
<style type="text/css">
body { font-family : sans-serif; }
form { margin-bottom : 0; }
</style>
</head>
<body>
<h1 class="testTitle">Dijit layout.Dialog tests</h1>
<button dojoType="dijit.form.Button" onclick="dijit.byId('dialog1').show()">Show Dialog</button> |
 
<div dojoType="dijit.Dialog" id="dialog1" title="First Dialog"
execute="alert('submitted w/args:\n' + dojo.toJson(arguments[0], true));">
<table>
<tr>
<td><label for="name">Name: </label></td>
<td><input dojoType=dijit.form.TextBox type="text" name="name" id="name"></td>
</tr>
<tr>
<td><label for="loc">Location: </label></td>
<td><input dojoType=dijit.form.TextBox type="text" name="loc" id="loc"></td>
</tr>
<tr>
<td><label for="date">Date: </label></td>
<td><input dojoType=dijit.form.DateTextBox type="text" name="date" id="date"></td>
</tr>
<tr>
<td><label for="date">Time: </label></td>
<td><input dojoType=dijit.form.TimeTextBox type="text" name="time" id="time"></td>
</tr>
<tr>
<td><label for="desc">Description: </label></td>
<td><input dojoType=dijit.form.TextBox type="text" name="desc" id="desc"></td>
</tr>
<tr>
<td colspan="2" align="center">
<button dojoType=dijit.form.Button type="submit">OK</button></td>
</tr>
</table>
</div>
 
<div dojoType="dijit.form.DropDownButton">
<span>Show Tooltip Dialog</span>
<div dojoType="dijit.TooltipDialog" id="tooltipDlg" title="Enter Login information"
execute="alert('submitted w/args:\n' + dojo.toJson(arguments[0], true));">
<table>
<tr>
<td><label for="user">User:</label></td>
<td><input dojoType=dijit.form.TextBox type="text" name="user" id="user"></td>
</tr>
<tr>
<td><label for="pwd">Password:</label></td>
<td><input dojoType=dijit.form.TextBox type="password" name="pwd" id="pwd"></td>
</tr>
<tr>
<td><label for="date2">Date:</label></td>
<td><input dojoType=dijit.form.DateTextBox name="date" id="date2"></td>
</tr>
<tr>
<td><label for="time2">Time:</label></td>
<td><input dojoType=dijit.form.TimeTextBox name="time" id="time2"></td>
</tr>
<tr>
<td><label for="combo">Pizza:</label></td>
<td>
<select dojoType=dijit.form.FilteringSelect name="combo" id="combo" hasDownArrow="true">
<option value="cheese">cheese</option>
<option value="pepperoni">pepperoni</option>
<option value="sausage">sausage</option>
</select>
</td>
</tr>
<tr>
<td colspan="2" align="center">
<button dojoType=dijit.form.Button type="submit" name="submit">Order</button>
</td>
</tr>
</table>
<div style="width: 300px;">Note: This tooltip dialog has a bunch of nested drop downs for testing keyboard and click handling</div>
</div>
</div> |
 
<button dojoType="dijit.form.Button" onclick="createDialog()" title="shows after 3 second delay">Programatic Dialog (3 second delay)</button> |
 
 
<div id="thirdDialog" style="display: none;">
<form>
<input>
<br>
<button>hello</button>
<br>
<select>
<option>Lorem</option>
<option>ipsum</option>
<option>dolor</option>
<option>sit</option>
<option>amet</option>
</select>
</form>
<p>
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean
semper sagittis velit. Cras in mi. Duis porta mauris ut ligula. Proin
porta rutrum lacus. Etiam consequat scelerisque quam. Nulla facilisi.
Maecenas luctus venenatis nulla. In sit amet dui non mi semper iaculis.
Sed molestie tortor at ipsum. Morbi dictum rutrum magna. Sed vitae
risus.
</p>
</div>
 
 
<button dojoType="dijit.form.Button" onclick="dijit.byId('fifthDlg').show();">Test slow loading HREF Dialog</button>
 
<div dojoType="dijit.Dialog" id="fifthDlg" href="layout/getResponse.php?delay=3000&messId=3" title="From HREF (slow network emulated)"></div>
 
<div dojoType="dijit.form.DropDownButton">
<span>Test slowloading HREF Tooltip Dialog</span>
<div dojoType="dijit.TooltipDialog" href="layout/getResponse.php?delay=500&messId=2">
</div>
</div> |
 
<p><b><i>(scroll down to see more links to click, for testing positioning / scroll handling)</i></b></p>
 
<p>
Here's a form. Try clicking the programatic dialog link, then focusing on the form.
After the dialog closes focus should be returned to the form
</p>
 
<form>
<input>
<br>
<button>hello</button>
<br>
<select>
<option>Lorem</option>
<option>ipsum</option>
<option>dolor</option>
<option>sit</option>
<option>amet</option>
</select>
</form>
 
<p>Aliquam vitae enim. Duis scelerisque metus auctor est venenatis
imperdiet. Fusce dignissim porta augue. Nulla vestibulum. Integer lorem
nunc, ullamcorper a, commodo ac, malesuada sed, dolor. Aenean id mi in
massa bibendum suscipit. Integer eros. Nullam suscipit mauris. In
pellentesque. Mauris ipsum est, pharetra semper, pharetra in, viverra
quis, tellus. Etiam purus. Quisque egestas, tortor ac cursus lacinia,
felis leo adipiscing nisi, et rhoncus elit dolor eget eros. Fusce ut
quam. Suspendisse eleifend leo vitae ligula. Nulla facilisi. Nulla
rutrum, erat vitae lacinia dictum, pede purus imperdiet lacus, ut
semper velit ante id metus. Praesent massa dolor, porttitor sed,
pulvinar in, consequat ut, leo. Nullam nec est. Aenean id risus blandit
tortor pharetra congue. Suspendisse pulvinar.
</p>
<p>Vestibulum convallis eros ac justo. Proin dolor. Etiam aliquam. Nam
ornare elit vel augue. Suspendisse potenti. Etiam sed mauris eu neque
nonummy mollis. Vestibulum vel purus ac pede semper accumsan. Vivamus
lobortis, sem vitae nonummy lacinia, nisl est gravida magna, non cursus
est quam sed urna. Phasellus adipiscing justo in ipsum. Duis sagittis
dolor sit amet magna. Suspendisse suscipit, neque eu dictum auctor,
nisi augue tincidunt arcu, non lacinia magna purus nec magna. Praesent
pretium sollicitudin sapien. Suspendisse imperdiet. Class aptent taciti
sociosqu ad litora torquent per conubia nostra, per inceptos
hymenaeos.
</p>
<form>
<center>
<select>
<option>1</option>
<option>2</option>
</select>
</center>
</form>
<p>Mauris pharetra lorem sit amet sapien. Nulla libero metus, tristique
et, dignissim a, tempus et, metus. Ut libero. Vivamus tempus purus vel
ipsum. Quisque mauris urna, vestibulum commodo, rutrum vitae, ultrices
vitae, nisl. Class aptent taciti sociosqu ad litora torquent per
conubia nostra, per inceptos hymenaeos. Nulla id erat sit amet odio
luctus eleifend. Proin massa libero, ultricies non, tincidunt a,
vestibulum non, tellus. Nunc nunc purus, lobortis a, pulvinar at,
egestas a, mi. Cras adipiscing velit a mauris. Morbi felis. Etiam at
felis. Cras eget eros et justo mattis pulvinar. Nullam at justo id
risus porttitor dignissim. Vestibulum sed velit vel metus tincidunt
tempus. Nunc euismod nisl id dolor tristique tincidunt. Nullam placerat
turpis sed odio. Curabitur in est id nibh tempus ultrices. Aliquam
consectetuer dapibus eros. Aliquam nisl.
</p>
<div style="float:right;clear:right;" dojoType="dijit.form.DropDownButton">
<span>dropdown at right</span>
<div dojoType="dijit.TooltipDialog" id="dialogright">
<div style="white-space:nowrap;">Aliquam vitae enim. Duis scelerisque metus auctor est venenatis</div>
</div>
</div>
<p>
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean
semper sagittis velit. Cras in mi. Duis porta mauris ut ligula. Proin
porta rutrum lacus. Etiam consequat scelerisque quam. Nulla facilisi.
Maecenas luctus venenatis nulla. In sit amet dui non mi semper iaculis.
Sed molestie tortor at ipsum. Morbi dictum rutrum magna. Sed vitae
risus.
</p>
<p>Aliquam vitae enim. Duis scelerisque metus auctor est venenatis
imperdiet. Fusce dignissim porta augue. Nulla vestibulum. Integer lorem
nunc, ullamcorper a, commodo ac, malesuada sed, dolor. Aenean id mi in
massa bibendum suscipit. Integer eros. Nullam suscipit mauris. In
pellentesque. Mauris ipsum est, pharetra semper, pharetra in, viverra
quis, tellus. Etiam purus. Quisque egestas, tortor ac cursus lacinia,
felis leo adipiscing nisi, et rhoncus elit dolor eget eros. Fusce ut
quam. Suspendisse eleifend leo vitae ligula. Nulla facilisi. Nulla
rutrum, erat vitae lacinia dictum, pede purus imperdiet lacus, ut
semper velit ante id metus. Praesent massa dolor, porttitor sed,
pulvinar in, consequat ut, leo. Nullam nec est. Aenean id risus blandit
tortor pharetra congue. Suspendisse pulvinar.
</p>
 
<div dojoType="dijit.form.DropDownButton" title="Enter Login information2">
<span>Show Tooltip Dialog pointing upwards, with links</span>
<div dojoType="dijit.TooltipDialog" title="General Information Dialog">
<p>Vestibulum convallis eros ac justo. Proin dolor. Etiam aliquam. Nam
ornare elit vel augue. Suspendisse potenti. Etiam sed mauris eu neque
nonummy mollis. <a href="http://www.lipsum.com/">Vestibulum</a> vel purus ac pede semper accumsan. Vivamus
lobortis, sem vitae nonummy lacinia, nisl est gravida magna, non cursus
est quam sed urna. Phasellus adipiscing justo in <a href="http://www.lipsum.com/">ipsum</a>. Duis sagittis
dolor sit amet magna. Suspendisse suscipit, neque eu dictum auctor,
nisi augue tincidunt arcu, non lacinia magna purus nec magna. Praesent
pretium sollicitudin sapien. <a href="http://www.lipsum.com/">Suspendisse imperdiet</a>. Class aptent taciti
sociosqu ad litora torquent per conubia nostra, per inceptos
hymenaeos.
</p>
</div>
</div>
(will go up if there isn't enough space on the bottom of the screen)
 
<p>Vestibulum convallis eros ac justo. Proin dolor. Etiam aliquam. Nam
ornare elit vel augue. Suspendisse potenti. Etiam sed mauris eu neque
nonummy mollis. Vestibulum vel purus ac pede semper accumsan. Vivamus
lobortis, sem vitae nonummy lacinia, nisl est gravida magna, non cursus
est quam sed urna. Phasellus adipiscing justo in ipsum. Duis sagittis
dolor sit amet magna. Suspendisse suscipit, neque eu dictum auctor,
nisi augue tincidunt arcu, non lacinia magna purus nec magna. Praesent
pretium sollicitudin sapien. Suspendisse imperdiet. Class aptent taciti
sociosqu ad litora torquent per conubia nostra, per inceptos
hymenaeos.
</p>
<form>
<center>
<select>
<option>1</option>
<option>2</option>
</select>
</center>
</form>
<p>Mauris pharetra lorem sit amet sapien. Nulla libero metus, tristique
et, dignissim a, tempus et, metus. Ut libero. Vivamus tempus purus vel
ipsum. Quisque mauris urna, vestibulum commodo, rutrum vitae, ultrices
vitae, nisl. Class aptent taciti sociosqu ad litora torquent per
conubia nostra, per inceptos hymenaeos. Nulla id erat sit amet odio
luctus eleifend. Proin massa libero, ultricies non, tincidunt a,
vestibulum non, tellus. Nunc nunc purus, lobortis a, pulvinar at,
egestas a, mi. Cras adipiscing velit a mauris. Morbi felis. Etiam at
felis. Cras eget eros et justo mattis pulvinar. Nullam at justo id
risus porttitor dignissim. Vestibulum sed velit vel metus tincidunt
tempus. Nunc euismod nisl id dolor tristique tincidunt. Nullam placerat
turpis sed odio. Curabitur in est id nibh tempus ultrices. Aliquam
consectetuer dapibus eros. Aliquam nisl.
</p>
 
<a href="javascript:dijit.byId('dialog1').show()">Show Dialog</a>
<p>
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean
semper sagittis velit. Cras in mi. Duis porta mauris ut ligula. Proin
porta rutrum lacus. Etiam consequat scelerisque quam. Nulla facilisi.
Maecenas luctus venenatis nulla. In sit amet dui non mi semper iaculis.
Sed molestie tortor at ipsum. Morbi dictum rutrum magna. Sed vitae
risus.
</p>
<p>Aliquam vitae enim. Duis scelerisque metus auctor est venenatis
imperdiet. Fusce dignissim porta augue. Nulla vestibulum. Integer lorem
nunc, ullamcorper a, commodo ac, malesuada sed, dolor. Aenean id mi in
massa bibendum suscipit. Integer eros. Nullam suscipit mauris. In
pellentesque. Mauris ipsum est, pharetra semper, pharetra in, viverra
quis, tellus. Etiam purus. Quisque egestas, tortor ac cursus lacinia,
felis leo adipiscing nisi, et rhoncus elit dolor eget eros. Fusce ut
quam. Suspendisse eleifend leo vitae ligula. Nulla facilisi. Nulla
rutrum, erat vitae lacinia dictum, pede purus imperdiet lacus, ut
semper velit ante id metus. Praesent massa dolor, porttitor sed,
pulvinar in, consequat ut, leo. Nullam nec est. Aenean id risus blandit
tortor pharetra congue. Suspendisse pulvinar.
</p>
<p>Vestibulum convallis eros ac justo. Proin dolor. Etiam aliquam. Nam
ornare elit vel augue. Suspendisse potenti. Etiam sed mauris eu neque
nonummy mollis. Vestibulum vel purus ac pede semper accumsan. Vivamus
lobortis, sem vitae nonummy lacinia, nisl est gravida magna, non cursus
est quam sed urna. Phasellus adipiscing justo in ipsum. Duis sagittis
dolor sit amet magna. Suspendisse suscipit, neque eu dictum auctor,
nisi augue tincidunt arcu, non lacinia magna purus nec magna. Praesent
pretium sollicitudin sapien. Suspendisse imperdiet. Class aptent taciti
sociosqu ad litora torquent per conubia nostra, per inceptos
hymenaeos.
</p>
<p>Mauris pharetra lorem sit amet sapien. Nulla libero metus, tristique
et, dignissim a, tempus et, metus. Ut libero. Vivamus tempus purus vel
ipsum. Quisque mauris urna, vestibulum commodo, rutrum vitae, ultrices
vitae, nisl. Class aptent taciti sociosqu ad litora torquent per
conubia nostra, per inceptos hymenaeos. Nulla id erat sit amet odio
luctus eleifend. Proin massa libero, ultricies non, tincidunt a,
vestibulum non, tellus. Nunc nunc purus, lobortis a, pulvinar at,
egestas a, mi. Cras adipiscing velit a mauris. Morbi felis. Etiam at
felis. Cras eget eros et justo mattis pulvinar. Nullam at justo id
risus porttitor dignissim. Vestibulum sed velit vel metus tincidunt
tempus. Nunc euismod nisl id dolor tristique tincidunt. Nullam placerat
turpis sed odio. Curabitur in est id nibh tempus ultrices. Aliquam
consectetuer dapibus eros. Aliquam nisl.
</p>
 
<p>
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean
semper sagittis velit. Cras in mi. Duis porta mauris ut ligula. Proin
porta rutrum lacus. Etiam consequat scelerisque quam. Nulla facilisi.
Maecenas luctus venenatis nulla. In sit amet dui non mi semper iaculis.
Sed molestie tortor at ipsum. Morbi dictum rutrum magna. Sed vitae
risus.
</p>
<p>Aliquam vitae enim. Duis scelerisque metus auctor est venenatis
imperdiet. Fusce dignissim porta augue. Nulla vestibulum. Integer lorem
nunc, ullamcorper a, commodo ac, malesuada sed, dolor. Aenean id mi in
massa bibendum suscipit. Integer eros. Nullam suscipit mauris. In
pellentesque. Mauris ipsum est, pharetra semper, pharetra in, viverra
quis, tellus. Etiam purus. Quisque egestas, tortor ac cursus lacinia,
felis leo adipiscing nisi, et rhoncus elit dolor eget eros. Fusce ut
quam. Suspendisse eleifend leo vitae ligula. Nulla facilisi. Nulla
rutrum, erat vitae lacinia dictum, pede purus imperdiet lacus, ut
semper velit ante id metus. Praesent massa dolor, porttitor sed,
pulvinar in, consequat ut, leo. Nullam nec est. Aenean id risus blandit
tortor pharetra congue. Suspendisse pulvinar.
</p>
<p>Vestibulum convallis eros ac justo. Proin dolor. Etiam aliquam. Nam
ornare elit vel augue. Suspendisse potenti. Etiam sed mauris eu neque
nonummy mollis. Vestibulum vel purus ac pede semper accumsan. Vivamus
lobortis, sem vitae nonummy lacinia, nisl est gravida magna, non cursus
est quam sed urna. Phasellus adipiscing justo in ipsum. Duis sagittis
dolor sit amet magna. Suspendisse suscipit, neque eu dictum auctor,
nisi augue tincidunt arcu, non lacinia magna purus nec magna. Praesent
pretium sollicitudin sapien. Suspendisse imperdiet. Class aptent taciti
sociosqu ad litora torquent per conubia nostra, per inceptos
hymenaeos.
</p>
<p>Mauris pharetra lorem sit amet sapien. Nulla libero metus, tristique
et, dignissim a, tempus et, metus. Ut libero. Vivamus tempus purus vel
ipsum. Quisque mauris urna, vestibulum commodo, rutrum vitae, ultrices
vitae, nisl. Class aptent taciti sociosqu ad litora torquent per
conubia nostra, per inceptos hymenaeos. Nulla id erat sit amet odio
luctus eleifend. Proin massa libero, ultricies non, tincidunt a,
vestibulum non, tellus. Nunc nunc purus, lobortis a, pulvinar at,
egestas a, mi. Cras adipiscing velit a mauris. Morbi felis. Etiam at
felis. Cras eget eros et justo mattis pulvinar. Nullam at justo id
risus porttitor dignissim. Vestibulum sed velit vel metus tincidunt
tempus. Nunc euismod nisl id dolor tristique tincidunt. Nullam placerat
turpis sed odio. Curabitur in est id nibh tempus ultrices. Aliquam
consectetuer dapibus eros. Aliquam nisl.
</p>
 
</body>
</html>
 
/trunk/api/js/dojo1.0/dijit/tests/form/test_CheckBox.html
New file
0,0 → 1,123
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>CheckBox Widget Demo</title>
 
<script type="text/javascript" src="../../../dojo/dojo.js"
djConfig="isDebug: true, parseOnLoad: true"></script>
<script type="text/javascript" src="../_testCommon.js"></script>
 
<script type="text/javascript">
dojo.require("dijit.form.CheckBox");
dojo.require("dojo.parser"); // find widgets
 
function outputValues(form){
var str = "";
for(var i=0;i<form.elements.length;i++){
var e = form.elements[i];
if(e.type=="submit") break;
if(e.checked){
str += "submit: name="+e.name+" id="+e.id+" value="+e.value+ "<br>";
}
}
dojo.byId("result").innerHTML = str;
return false;
}
 
function reportChecked(checked) {
dojo.byId("oncheckedoutput").innerHTML = checked;
}
 
function reportValueChanged(value) {
dojo.byId("onvaluechangedoutput").innerHTML = value;
}
 
dojo.addOnLoad(function(){
var params = {id: "cb6", name: "cb6"};
var widget = new dijit.form.CheckBox(params, dojo.byId("checkboxContainer"));
widget.setChecked(true);
});
</script>
<style type="text/css">
@import "../../../dojo/resources/dojo.css";
@import "../css/dijitTests.css";
 
label { margin-right: 0.80em; }
</style>
</head>
<body>
<h1 class="testTitle">Dijit CheckBox Test</h1>
<p>
Here are some checkboxes. Try clicking, and hovering, tabbing, and using the space bar to select:
</p>
<!-- <form onSubmit="return outputValues(this);"> -->
<form>
<input type="checkbox" name="cb0" id="cb0" />
<label for="cb0">cb0: Vanilla (non-dojo) checkbox (for comparison purposes)</label>
<br>
<input type="checkbox" name="cb1" id="cb1" value="foo" dojoType="dijit.form.CheckBox" onClick="console.log('clicked cb1')">
<label for="cb1">cb1: normal checkbox, with value=foo, clicking generates console log messages</label>
<br>
<input onChange="reportChecked" type="checkbox" name="cb2" id="cb2" dojoType="dijit.form.CheckBox" checked="checked"/>
<label for="cb2">cb2: normal checkbox, initially turned on.</label>
<span>"onChange" handler updates: [<span id="oncheckedoutput"></span>]</span>
<br>
<input type="checkbox" name="cb3" id="cb3" dojoType="dijit.form.CheckBox" disabled="disabled">
<label for="cb3">cb3: disabled checkbox</label>
<br>
<input type="checkbox" name="cb4" id="cb4" dojoType="dijit.form.CheckBox" disabled="disabled" checked="checked"/>
<label for="cb4">cb4: disabled checkbox, turned on</label>
<br>
<input type="checkbox" name="cb5" id="cb5" />
<label for="cb5">cb5: Vanilla (non-dojo) checkbox (for comparison purposes)</label>
<br>
<div id="checkboxContainer"></div>
<label for="cb6">cb6: instantiated from script</label>
<br>
<input onChange="reportValueChanged" type="checkbox" name="cb7" id="cb7" dojoType="dijit.form.CheckBox">
<label for="cb7">cb7: normal checkbox.</label>
<input type="button" onclick='dijit.byId("cb7").setDisabled(true);' value="disable" />
<input type="button" onclick='dijit.byId("cb7").setDisabled(false);' value="enable" />
<input type="button" onclick='dijit.byId("cb7").setValue("fish");' value='set value to "fish"' />
<span>"onChange" handler updates: [<span id="onvaluechangedoutput"></span>]</span>
<br>
<p>
Here are some radio buttons. Try clicking, and hovering, tabbing, and arrowing
</p>
<p>
<span>Radio group #1:</span>
<input type="radio" name="g1" id="g1rb1" value="news" dojoType="dijit.form.RadioButton">
<label for="g1rb1">news</label>
<input type="radio" name="g1" id="g1rb2" value="talk" dojoType="dijit.form.RadioButton" checked="checked"/>
<label for="g1rb2">talk</label>
<input type="radio" name="g1" id="g1rb3" value="weather" dojoType="dijit.form.RadioButton" disabled="disabled"/>
<label for="g1rb3">weather</label>
</p>
<p>
<span>Radio group #2: (no default value, and has breaks)</span><br>
<input type="radio" name="g2" id="g2rb1" value="top40" dojoType="dijit.form.RadioButton"/>
<label for="g2rb1">top 40</label><br>
<input type="radio" name="g2" id="g2rb2" value="oldies" dojoType="dijit.form.RadioButton"/>
<label for="g2rb2">oldies</label><br>
<input type="radio" name="g2" id="g2rb3" value="country" dojoType="dijit.form.RadioButton"/>
<label for="g2rb3">country</label><br>
(Note if using keyboard: tab to navigate, and use arrow or space to select)
</p>
<p>
<span>Radio group #3 (native radio buttons):</span>
<input type="radio" name="g3" id="g3rb1" value="rock"/>
<label for="g3rb1">rock</label>
<input type="radio" name="g3" id="g3rb2" value="jazz" disabled="disabled"/>
<label for="g3rb2">jazz</label>
<input type="radio" name="g3" id="g3rb3" value="classical" checked="checked"/>
<label for="g3rb3">classical</label>
</p>
<input type="submit" />
</form>
 
<!-- <p>Submitted data:</p>
<div id="result"></div>
-->
</body>
</html>
/trunk/api/js/dojo1.0/dijit/tests/form/test_ComboBox.html
New file
0,0 → 1,284
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Dojo ComboBox Widget Test</title>
<style>
@import "../../../dojo/resources/dojo.css";
@import "../css/dijitTests.css";
</style>
<script type="text/javascript" src="../../../dojo/dojo.js"
djConfig="isDebug: true, parseOnLoad: true"></script>
<script type="text/javascript" src="../_testCommon.js"></script>
 
<script type="text/javascript">
dojo.require("dojo.data.ItemFileReadStore");
dojo.require("dijit.form.ComboBox");
dojo.require("dojo.parser"); // scan page for widgets and instantiate them
 
function setVal1(val){
dojo.byId('value1').value=val;
}
function setVal2(val){
dojo.byId('value2').value=val;
console.debug("Value changed to ["+val+"] in second ComboBox (#1652)");
}
function setVal3(val){
dojo.byId('value3').value=val;
}
function setVal4(val){
dojo.byId('value4').value=val;
}
var combo;
function init(){
var store = new dojo.data.ItemFileReadStore({url: '../_data/states.json'});
combo = new dijit.form.ComboBox({
name:"prog",
autoComplete:false,
store: store,
searchAttr:"name"
}, dojo.byId("progCombo"));
 
var store2 = new dojo.data.ItemFileReadStore({url: '../../demos/i18n/data.json'});
combo = new dijit.form.ComboBox({
name:"prog2",
autoComplete:false,
store:store2,
query:{type:'country'},
searchAttr:"name"
}, dojo.byId("progCombo2"));
}
dojo.addOnLoad(init);
 
function toggleDisabled(button, widget){
widget = dijit.byId(widget);
button = dojo.byId(button);
widget.setDisabled(!widget.disabled);
button.innerHTML= widget.disabled ? "Enable" : "Disable";
}
</script>
</head>
 
<body>
<h1>Dojo ComboBox Widget Test</h1>
<p>
A ComboBox is like a text &lt;input&gt; field (ie, you can input any value you want),
but it also has a list of suggested values that you can choose from.
The drop down list is filtered by the data you have already typed in.
</p>
<form action="#" method="GET">
 
<p>ComboBox #1: inlined data, autoComplete=false, default value of Iowa, pageSize=30</p>
<label for="setvaluetest">US State test 1: </label>
<select id="setvaluetest"
name="state1"
dojoType="dijit.form.ComboBox"
class="medium"
style="width:50%;font-size:15pt;"
name="foo.bar1"
autoComplete="false"
onChange="dojo.byId('oc1').value=arguments[0]"
pageSize="30"
>
<option></option>
<option>Alabama</option>
<option>Alaska</option>
<option>American Samoa</option>
<option>Arizona</option>
<option>Arkansas</option>
<option>Armed Forces Europe</option>
<option>Armed Forces Pacific</option>
<option>Armed Forces the Americas</option>
<option>California</option>
<option>Colorado</option>
<option>Connecticut</option>
<option>Delaware</option>
<option>District of Columbia</option>
<option>Federated States of Micronesia</option>
<option>Florida</option>
<option>Georgia</option>
<option>Guam</option>
<option>Hawaii</option>
<option>Idaho</option>
<option>Illinois</option>
<option>Indiana</option>
<option selected>Iowa</option>
<option>Kansas</option>
<option>Kentucky</option>
<option>Louisiana</option>
<option>Maine</option>
<option>Marshall Islands</option>
<option>Maryland</option>
<option>Massachusetts</option>
<option>Michigan</option>
<option>Minnesota</option>
<option>Mississippi</option>
<option>Missouri</option>
<option>Montana</option>
<option>Nebraska</option>
<option>Nevada</option>
<option>New Hampshire</option>
<option>New Jersey</option>
<option>New Mexico</option>
<option>New York</option>
<option>North Carolina</option>
<option>North Dakota</option>
<option>Northern Mariana Islands</option>
<option>Ohio</option>
<option>Oklahoma</option>
<option>Oregon</option>
<option>Pennsylvania</option>
<option>Puerto Rico</option>
<option>Rhode Island</option>
<option>South Carolina</option>
<option>South Dakota</option>
<option>Tennessee</option>
<option>Texas</option>
<option>Utah</option>
<option>Vermont</option>
<option>Virgin Islands, U.S.</option>
<option>Virginia</option>
<option>Washington</option>
<option>West Virginia</option>
<option>Wisconsin</option>
<option>Wyoming</option>
</select>
onChange:<input id="oc1" disabled value="not fired yet!" autocomplete="off">
 
<hr>
 
<div dojoType="dojo.data.ItemFileReadStore" jsId="stateStore"
url="../_data/states.json"></div>
 
<div dojoType="dojo.data.ItemFileReadStore" jsId="dijitStore"
url="../_data/dijits.json"></div>
 
<p>ComboBox #2: url, autoComplete=true:</p>
<label for="datatest">US State test 2: </label>
<input dojoType="dijit.form.ComboBox"
value="California"
class="medium"
store="stateStore"
searchAttr="name"
style="width: 300px;"
name="state2"
onChange="setVal2"
id="datatest"
>
<span>Value: <input id="value2" disabled value="California"></span>
<hr>
<label for="datatest">Dijit List test #1: </label>
<input dojoType="dijit.form.ComboBox"
value="dijit.Editor"
class="medium"
store="dijitStore"
searchAttr="className"
style="width: 300px;"
name="dijitList1"
id="datatestDijit"
>
<span>Hey look, this one is kind of useful.</span>
<hr>
 
<p>ComboBox #3: initially disabled, url, autoComplete=false:</p>
<label for="combo3">US State test 3: </label>
<input id="combo3"
dojoType="dijit.form.ComboBox"
value="California"
class="medium"
store="stateStore"
searchAttr="name"
style="width: 300px;"
name="state3"
autoComplete="false"
onChange="setVal3"
disabled
>
<span>Value: <input id="value3" disabled></span>
<div>
<button id="but" onclick='toggleDisabled("but", "combo3"); return false;'>Enable</button>
</div>
<hr>
<p>ComboBox #4: url, autoComplete=false required=true:</p>
<label for="combobox4">US State test 4: </label>
<input dojoType="dijit.form.ComboBox"
value=""
class="medium"
store="stateStore"
searchAttr="name"
style="width: 300px;"
name="state4"
onChange="setVal4"
autoComplete="false"
id="combobox4"
required="true"
>
<span>Value: <input id="value4" disabled></span>
<hr>
<p>A ComboBox with no arrow</p>
<input dojoType="dijit.form.ComboBox"
value="California"
store="stateStore"
searchAttr="name"
name="state5"
autoComplete="false"
hasDownArrow="false"
>
<hr>
<p>A combo created by createWidget</p>
<input id="progCombo">
<hr>
<p>A ComboBox with an initial query. (Limits list to items with type = country.)</p>
<input id="progCombo2">
<hr>
<input type="button" value="Create one in a window" onclick="var win=window.open(window.location);"></input>
<input type="submit">
 
</form>
<p>
This is some text below the ComboBoxes. It shouldn't get pushed out of the way when search results get returned.
also: adding a simple combo box to test IE bleed through problem:
</p>
 
<select>
<option>test for</option>
<option>IE bleed through</option>
<option>problem</option>
</select>
<h3>Some tests:</h3>
<ol>
<li>Type in D - dropdown shows Delaware and District of columbia. [Would be nice if it bolded the D's in the dropdown list!]</li>
<li>Type in DX - input box shows DX and no dropdown.</li>
<li>Open dropdown, click an item, it selects and closes dropdown.</li>
<li>Click triangle icon - dropdown shows. Click it again - dropdown goes.</li>
<li>Check that you can type in more than required (e.g. alaba for alabama) and it still correctly shows alabama</li>
<li>Tab into the combo works, list should not apear.</li>
<li>Tab out of the combo works - closes dropdown and goes to next control (focus should not go to the dropdown because tabindex="-1").</li>
<li>Do the dropdown and click outside of it - the dropdown disappears.</li>
<li>Javascript disabled -&gt; fallback to old style combo?</li>
<li>Can you paste in the start of a match? [no]</li>
<li>Backspace to start - dropdown shows all all items</li>
<li>Backspace deselects last character [Borked: currently you have to backspace twice]</li>
<li>Press down key to open dropdown</li>
<li>Down and up keys select previous/next in dropdown.</li>
<li>Non-alpha keys (F12, ctrl-c, whatever) should not affect dropdown.</li>
<li>Press down arrow to highlight an item, pressing enter selects it and closes dropdown.</li>
<li>Press down arrow to highlight an item, pressing space selects it and closes dropdown.</li>
<li>Check that pressing escape undoes the previous action and closes the dropdown</li>
<li>Check that pressing escape again clears the input box.</li>
<li>In IE, mouse scroll wheel scrolls through the list. Scrolls by 1 item per click even if user has set mouse to scroll more than 1 in mouse settings. Only scrolls if text input has focus (page scrolling works as normal otherwise)</li>
<li>In IE, dropdown list does not go behind the second combo (special code to manage this).</li>
<li>Check dropdown is aligned correctly with bottom of the text input</li>
<li>Probably should try the combo in a relative div or absolute div and see where the dropdown ends up. (Strongly suspect problems in this area in IE - boo)</li>
<li>Try repeatably droppingdown and closing the dropdown. Shouldnt get hung [sometimes flicks closed just after opening due to timers, but not a biggie]</li>
<li>Check that default selection of the text makes sense. e.g. text is selected after picking an item, on tabbing in to text input etc)</li>
<li>Check that dropdown is smooth [looks uggy on second keypress in FF - hides then shows]</li>
<li>Clear the field. Type in A and then tab *very quickly* and see if the results make sense (the dropdown is on a timer - searchTimer)</li>
<li>Clear the field and enter an invalid entry and tab out e.g. Qualude. Does that make sense given the combobox setup options?</li>
<li>(Add any other tests here)</li>
</ol>
<div id="debugbox"></div>
<!-- maintain state of combo box if user presses back/forward button -->
<form name="_dojo_form" style="display:none" disabled="true"><textarea name="stabile" cols="80" rows="10"></textarea></form>
</body>
</html>
/trunk/api/js/dojo1.0/dijit/tests/form/test_validate.html
New file
0,0 → 1,402
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Test TextBox Validation Widgets</title>
 
 
<script type="text/javascript" src="../../../dojo/dojo.js"
djConfig="isDebug: true, parseOnLoad: true, extraLocale: ['de-de', 'en-us']"></script>
<script type="text/javascript" src="../_testCommon.js"></script>
 
<script type="text/javascript">
dojo.require("dijit.form.TextBox");
dojo.require("dijit.form.ValidationTextBox");
dojo.require("dijit.form.NumberTextBox");
dojo.require("dijit.form.CurrencyTextBox");
dojo.require("dojo.currency");
dojo.require("dojo.parser"); // scan page for widgets and instantiate them
</script>
<style type="text/css">
@import "../../../dojo/resources/dojo.css";
@import "../css/dijitTests.css";
 
.testExample {
background-color:#fbfbfb;
padding:1em;
margin-bottom:1em;
border:1px solid #bfbfbf;
}
 
.small {
width: 3em;
}
.medium {
width: 10em;
}
.long {
width: 20em;
}
.verylong {
width: 90%;
}
 
.noticeMessage {
color:#093669;
font-size:0.95em;
margin-left:0.5em;
}
 
.dojoTitlePaneLabel label {
font-weight:bold;
}
</style>
</head>
 
<body>
<h1 class="testTitle">Dijit Validation Widgets</h1>
<!-- to test form submission, you'll need to create an action handler similar to
http://www.utexas.edu/teamweb/cgi-bin/generic.cgi -->
<form id="form1" action="" name="example" method="post">
 
<div class="dojoTitlePaneLabel">
<label for="q01">First Name: </label>
<span class="noticeMessage"> TextBox class, <b>tabIndex=2</b>, Attributes: {trim: true, propercase: true, style: 'width:700px'}, First letter of each word is upper case.</span>
</div>
<div class="testExample">
<input id="q01" type="text" name="firstname" value="testing testing" style="width: 700px;" tabIndex=2
dojoType="dijit.form.TextBox"
trim="true"
onChange="dojo.byId('oc1').value=arguments[0]"
propercase="true" />
<br>onChange:<input id="oc1" size="34" disabled value="not fired yet!" autocomplete="off">
</div>
 
<div class="dojoTitlePaneLabel">
<label for="q02">Last Name: </label>
<span class="noticeMessage"> TextBox class, Attributes: {trim: true, uppercase: true, class: 'verylong'}, all letters converted to upper case. </span>
</div>
<div class="testExample">
<input id="q02" type="text" name="lastname" value="testing testing" class="verylong"
dojoType="dijit.form.TextBox"
trim="true"
uppercase="true" />
</div>
 
<div class="dojoTitlePaneLabel">
<label for="q03">Age: </label>
<span class="noticeMessage"> NumberTextBox class, <b>tabIndex=1</b>, Attributes: {trim: true}, no initial value specified.</span>
</div>
<div class="testExample">
<input id="q03" type="text" name="age" tabIndex=1
dojoType="dijit.form.NumberTextBox"
promptMessage="(optional) Enter an age between 0 and 120"
maxLength=3
class="small"
constraints="{places:0,min:0,max:120}"
onChange="console.debug('onChange fired for widget id = ' + this.id + ' with value = ' + arguments[0]);"
/>
</div>
 
<div class="dojoTitlePaneLabel">
<label for="q04">Occupation: </label>
<span class="noticeMessage">ValidationTextBox class,
Attributes: {lowercase: true, required: true, class: verylong, style: font-size: 15pt;}. Displays a prompt message if field is missing.</span>
</div>
<div class="testExample">
<input id="q04" type="text" name="occupation" class="verylong" style="font-size:15pt;"
dojoType="dijit.form.ValidationTextBox"
lowercase="true"
required="true"
promptMessage="Enter an occupation" />
</div>
 
<div class="dojoTitlePaneLabel">
<label for="q05">Elevation: </label>
<span class="noticeMessage">IntegerTextBox class,
Attributes: {required: true, min:-20000, max:+20000 }, Enter feet above sea level with a sign.</span>
</div>
<div class="testExample">
<input id="q05" class="small"/>
onChange:<input id="oc5" size="10" disabled value="not fired yet!" autocomplete="off">
</div>
<script>
// See if we can make a widget in script and attach it to the DOM ourselves.
dojo.addOnLoad(function(){
var props = {
name: "elevation",
value: 3000,
constraints: {min:-20000,max:20000,places:0},
promptMessage: "Enter a value between -20000 and +20000",
required: "true" ,
invalidMessage: "Invalid elevation.",
onChange: function(){dojo.byId('oc5').value=arguments[0]},
"class": "medium"
};
var w = new dijit.form.NumberTextBox(props, "q05");
});
</script>
<!--
<div class="dojoTitlePaneLabel">
<label for="attach-here">Population: </label>
<span class="noticeMessage">IntegerTextBox class,
Attributes: {trim: true, required: true, signed: false, separator: ","}. <br><b> This widget was added in script, not markup. </b> </span>
</div>
<div class="testExample" >
<input id="attach-here" type="text" name="population" class="medium" value="1500000"/>
</div>
 
<script>
// See if we can make a widget in script and attach it to the DOM ourselves.
dojo.addOnLoad(function(){
var props = {
name: "population",
value: "1,500,000",
trim: "true",
required: "true",
regExpGen: dojo.regexp.integer,
constraints: {signed:false, separator: ","},
invalidMessage: "Invalid population. Be sure to use commas."
};
var w = new dijit.form.ValidationTextBox(props, "attach-here");
});
</script>
 
<div class="dojoTitlePaneLabel">
<label for="q06">Real Number: </label>
<span class="noticeMessage">RealNumberTextBox class,
Attributes: {trim: true, required: true}. Enter any sort of real number.</span>
</div>
<div class="testExample">
<input id="q06" type="text" name="real1" class="medium" value="+0.1234"
dojoType="dijit.form.ValidationTextBox"
regExpGen="dojo.regexp.realNumber"
trim="true"
required="true"
invalidMessage="This is not a valid real number." />
</div>
<div class="dojoTitlePaneLabel">
<label for="q07">Exponential Notation: </label>
<span class="noticeMessage">RealNumberTextBox class,
Attributes: {exponent: true}. Enter a real number in exponential notation.</span>
</div>
<div class="testExample">
<input id="q07" type="text" name="real2" class="medium" value="+0.12"
dojoType="dijit.form.ValidationTextBox"
regExpGen="dojo.regexp.realNumber"
trim="true"
required="true"
constraints={exponent:true}
invalidMessage="Number must be in exponential notation. Example +5E-28" />
</div>
-->
<div class="dojoTitlePaneLabel">
<label for="q08">Annual Income: </label>
<span class="noticeMessage">CurrencyTextBox class,
Attributes: {fractional: true}. Enter whole and cents. Currency symbol is optional.</span>
</div>
<div class="testExample">
<input id="q08" type="text" name="income1" class="medium" value="54775.53"
dojoType="dijit.form.CurrencyTextBox"
required="true"
constraints="{fractional:true}"
currency="USD"
onChange="dojo.byId('oc8').value=arguments[0]"
invalidMessage="Invalid amount. Include dollar sign, commas, and cents. Cents are mandatory." />USD
&nbsp;onChange:<input id="oc8" size="15" disabled value="not fired yet!" autocomplete="off">
</div>
<div class="testExample">
euro currency (local format) fractional part is optional:
<input id="q08eur" type="text" name="income2"
class="medium" value="54775.53"
dojoType="dijit.form.CurrencyTextBox"
required="true"
currency="EUR"
invalidMessage="Invalid amount. Include dollar sign, commas, and cents." />EUR
</div>
<!--
It is unusual to override the lang properties on individual
widgets. Usually it should be the user's default or set on
a page basis by the server. This is for testing purposes
-->
<div class="testExample">
euro currency (fixed lang: de-de) programmatically created, fractional part is optional: <input id="q08eurde" class="medium"/>EUR
</div>
<script>
// See if we can make a widget in script and attach it
// to the DOM ourselves.
dojo.addOnLoad(function(){
var example = dojo.currency.format(54775.53, {locale: 'de-de', currency: "EUR"});
var props = {
name: "income3",
value: 54775.53,
lang: 'de-de',
required: "true",
currency: "EUR",
invalidMessage: "Invalid amount. Example: " + example
};
var w = new dijit.form.CurrencyTextBox(props, "q08eurde");
});
</script>
<!--
<div class="dojoTitlePaneLabel">
<label for="q08a">Annual Income: </label>
<span class="noticeMessage">Old regexp currency textbox,
Attributes: {fractional: true}. Enter dollars and cents.</span>
</div>
<div class="testExample">
<input id="q08a" type="text" name="income3" class="medium" value="$54,775.53"
dojoType="dijit.form.ValidationTextBox"
regExpGen="dojo.regexp.currency"
trim="true"
required="true"
constraints={fractional:true}
invalidMessage="Invalid amount. Include dollar sign, commas, and cents. Example: $12,000.00" />
</div>
<div class="dojoTitlePaneLabel">
<label for="q09">IPv4 Address: </label>
<span class="noticeMessage">IpAddressTextBox class,
Attributes: {allowIPv6: false, allowHybrid: false}. Also Dotted Hex works, 0x18.0x11.0x9b.0x28</span>
</div>
<div class="testExample">
<input id="q09" type="text" name="ipv4" class="medium" value="24.17.155.40"
dojoType="dijit.form.ValidationTextBox"
regExpGen="dojo.regexp.ipAddress"
trim="true"
required="true"
constraints={allowIPv6:false,allowHybrid:false}
invalidMessage="Invalid IPv4 address.">
</div>
<div class="dojoTitlePaneLabel">
<label for="q10"> IPv6 Address: </label>
<span class="noticeMessage">IpAddressTextBox class,
Attributes: {allowDottedDecimal: false, allowDottedHex: false}.
Also hybrid works, x:x:x:x:x:x:d.d.d.d</span>
</div>
<div class="testExample">
<input id="q10" type="text" name="ipv6" class="long" value="0000:0000:0000:0000:0000:0000:0000:0000"
dojoType="dijit.form.ValidationTextBox"
regExpGen="dojo.regexp.ipAddress"
trim="true"
uppercase = "true"
required="true"
constraints={allowDottedDecimal:false, allowDottedHex:false, allowDottedOctal:false}
invalidMessage="Invalid IPv6 address, please enter eight groups of four hexadecimal digits. x:x:x:x:x:x:x:x">
</div>
<div class="dojoTitlePaneLabel">
<label for="q11"> URL: </label>
<span class="noticeMessage">UrlTextBox class,
Attributes: {required: true, trim: true, scheme: true}. </span>
</div>
<div class="testExample">
<input id="q11" type="text" name="url" class="long" value="http://www.xyz.com/a/b/c?x=2#p3"
dojoType="dijit.form.ValidationTextBox"
regExpGen="dojo.regexp.url"
trim="true"
required="true"
constraints={scheme:true}
invalidMessage="Invalid URL. Be sure to include the scheme, http://..." />
</div>
<div class="dojoTitlePaneLabel">
<label for="q12"> Email Address </label>
<span class="noticeMessage">EmailTextBox class,
Attributes: {required: true, trim: true}. </span>
</div>
<div class="testExample">
<input id="q12" type="text" name="email" class="long" value="fred&barney@stonehenge.com"
dojoType="dijit.form.ValidationTextBox"
regExpGen="dojo.regexp.emailAddress"
trim="true"
required="true"
invalidMessage="Invalid Email Address." />
</div>
<div class="dojoTitlePaneLabel">
<label for="q13"> Email Address List </label>
<span class="noticeMessage">EmailListTextBox class,
Attributes: {required: true, trim: true}. </span>
</div>
<div class="testExample">
<input id="q13" type="text" name="email" class="long" value="a@xyz.com; b@xyz.com; c@xyz.com; "
dojoType="dijit.form.ValidationTextBox"
regExpGen="dojo.regexp.emailAddressList"
trim="true"
required="true"
invalidMessage="Invalid Email Address List." />
</div>
-->
<div class="dojoTitlePaneLabel">
<label for="q22">Regular Expression </label>
<span class="noticeMessage">RegexpTextBox class,
Attributes: {required: true} </span>
</div>
<div class="testExample">
<input id="q22" type="text" name="phone" class="medium" value="someTestString"
dojoType="dijit.form.ValidationTextBox"
regExp="[\w]+"
required="true"
invalidMessage="Invalid Non-Space Text.">
</div>
<div class="dojoTitlePaneLabel">
<label for="q23"> Password </label>
<span class="noticeMessage">(just a test that type attribute is obeyed) </span>
</div>
<div class="testExample">
<input id="q23" type="password" name="password" class="medium"
dojoType="dijit.form.TextBox">
</div>
<div class="dojoTitlePaneLabel">
<label for="ticket1651">Trac ticket 1651: </label>
<span class="noticeMessage">value: null should show up as empty</span>
</div>
<div class="testExample">
<input id="ticket1651" class="medium" value="not null"/>
</div>
 
<script>
// See if we can make a widget in script and attach it to the DOM ourselves.
dojo.addOnLoad(function(){
var props = {
name: "ticket1651",
id: "mname",
value: null
};
var w = new dijit.form.TextBox(props, "ticket1651");
});
</script>
<script>
function displayData() {
var f = document.getElementById("form1");
var s = "";
for (var i = 0; i < f.elements.length; i++) {
var elem = f.elements[i];
if (elem.name == "button") { continue; }
s += elem.name + ": " + elem.value + "\n";
}
alert(s);
}
</script>
 
<div>
<button name="button" onclick="displayData(); return false;">view data</button>
<input type="submit" name="submit" />
</div>
 
</form>
</body>
</html>
/trunk/api/js/dojo1.0/dijit/tests/form/test_Button.html
New file
0,0 → 1,287
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Dojo Button Widget Test</title>
 
 
<script type="text/javascript" src="../../../dojo/dojo.js"
djConfig="isDebug: true, parseOnLoad: true"></script>
<script type="text/javascript" src="../_testCommon.js"></script>
 
<script type="text/javascript">
dojo.require("dijit.ColorPalette");
dojo.require("dijit.Menu");
dojo.require("dijit.Tooltip");
dojo.require("dijit.form.Button");
dojo.require("dojo.parser");
</script>
<style type="text/css">
@import "../../../dojo/resources/dojo.css";
@import "../css/dijitTests.css";
 
/* group multiple buttons in a row */
.box {
display: block;
text-align: center;
}
.box .dojoButton {
margin-right: 10px;
}
.dojoButtonContents {
font-size: 1.6em;
}
 
/* todo: find good color for disabled menuitems, and teset */
.dojoMenuItem2Disabled .dojoMenuItem2Label span,
.dojoMenuItem2Disabled .dojoMenuItem2Accel span {
color: ThreeDShadow;
}
 
.dojoMenuItem2Disabled .dojoMenuItem2Label span span,
.dojoMenuItem2Disabled .dojoMenuItem2Accel span span {
color: ThreeDHighlight;
}
</style>
</head>
<body>
<h1 class="testTitle">Dijit Button Test</h1>
<h2>Simple, drop down &amp; combo buttons</h2>
<p>
Buttons can do an action, display a menu, or both:
</p>
<div class="box">
<button id="1465" dojoType="dijit.form.Button" onClick='console.log("clicked simple")' iconClass="plusIcon">
Create
</button>
<span dojoType="dijit.Tooltip" connectId="1465">tooltip on button</span>
<div dojoType="dijit.form.DropDownButton" iconClass="noteIcon">
<span>Edit<b>!</b></span>
<div dojoType="dijit.Menu">
<div dojoType="dijit.MenuItem" iconClass="dijitEditorIcon dijitEditorIconCut"
onClick="console.log('not actually cutting anything, just a test!')">Cut</div>
<div dojoType="dijit.MenuItem" iconClass="dijitEditorIcon dijitEditorIconCopy"
onClick="console.log('not actually copying anything, just a test!')">Copy</div>
<div dojoType="dijit.MenuItem" iconClass="dijitEditorIcon dijitEditorIconPaste"
onClick="console.log('not actually pasting anything, just a test!')">Paste</div>
<div dojoType="dijit.MenuSeparator"></div>
<div dojoType="dijit.PopupMenuItem">
<span>Submenu</span>
<div dojoType="dijit.Menu" id="submenu2">
<div dojoType="dijit.MenuItem" onClick="console.log('Submenu 1!')">Submenu Item One</div>
<div dojoType="dijit.MenuItem" onClick="console.log('Submenu 2!')">Submenu Item Two</div>
<div dojoType="dijit.PopupMenuItem">
<span>Deeper Submenu</span>
<div dojoType="dijit.Menu" id="submenu4"">
<div dojoType="dijit.MenuItem" onClick="console.log('Sub-submenu 1!')">Sub-sub-menu Item One</div>
<div dojoType="dijit.MenuItem" onClick="console.log('Sub-submenu 2!')">Sub-sub-menu Item Two</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div dojoType="dijit.form.DropDownButton" iconClass="noteIcon">
<span>Color</span>
<div dojoType="dijit.ColorPalette" id="colorPalette" style="display: none" palette="3x4"
onChange="console.log(this.value);"></div>
</div>
<div dojoType="dijit.form.ComboButton" optionsTitle='save options' onClick='console.log("clicked combo save")'
iconClass="plusBlockIcon">
<span>Save</span>
<div dojoType="dijit.Menu" id="saveMenu" style="display: none;">
<div dojoType="dijit.MenuItem" iconClass="dijitEditorIcon dijitEditorIconSave"
onClick="console.log('not actually saving anything, just a test!')">Save</div>
<div dojoType="dijit.MenuItem"
onClick="console.log('not actually saving anything, just a test!')">Save As</div>
</div>
</div>
<button dojoType="dijit.form.Button" onClick='console.log("clicked simple")' disabled='true' iconClass="plusIcon">
Disabled
</button>
</div>
<br clear=both>
<h2>Buttons with no text label</h2>
<p>Buttons have showLabel=false so text is not displayed. Should have title attribute displayed on mouse over</p>
<div class="box">
<button id="1466" dojoType="dijit.form.Button" onClick='console.log("clicked simple button with no text label")'
iconClass="plusIcon" showLabel="false">
<span><b>Rich</b><i> Text</i> Test!</span>
</button>
<div dojoType="dijit.form.DropDownButton" iconClass="noteIcon" showLabel="false">
<span>Color</span>
<div dojoType="dijit.ColorPalette" id="colorPalette2" style="display: none" palette="3x4"
onChange="console.log(this.value);">
</div>
</div>
<div dojoType="dijit.form.ComboButton" optionsTitle='save options' onClick='console.log("clicked combo save")'
iconClass="plusBlockIcon" showLabel="false">
<span>Save</span>
<div dojoType="dijit.Menu" id="saveMenu2" style="display: none;">
<div dojoType="dijit.MenuItem" iconClass="dijitEditorIcon dijitEditorIconSave"
onClick="console.log('not actually saving anything, just a test!')">Save</div>
<div dojoType="dijit.MenuItem"
onClick="console.log('not actually saving anything, just a test!')">Save As</div>
</div>
</div>
</div>
<br clear=both>
<h2>Toggle buttons</h2>
<p>The button CSS as well as the icon CSS can change on toggle </p>
<div class="box">
<button dojoType="dijit.form.ToggleButton" onChange="console.log('toggled button checked='+arguments[0]);" iconClass="dijitCheckBoxIcon">
Toggle me
</button>
<button dojoType="dijit.form.ToggleButton" onChange="console.log('toggled button checked='+arguments[0]);" iconClass="dijitRadioIcon">
Toggle me
</button>
</div>
<br clear=both>
<h2>Sizing</h2>
<p>Short button, tall buttons, big buttons, small buttons...
These buttons size to their content (just like &lt;button&gt;).</p>
<div class="box">
<button dojoType="dijit.form.Button" onclick='console.log("big");' iconClass="flatScreenIcon">
<span style="font-size:xx-large">big</span>
</button>
<button id="smallButton1" dojoType="dijit.form.Button" onclick='console.log("small");'>
<img src="../images/arrowSmall.gif" width="15" height="5">
<span style="font-size:x-small">small</span>
</button>
<button dojoType="dijit.form.Button" onclick='console.log("long");'>
<img src="../images/tube.gif" width="150" height="16">
long
</button>
<button dojoType="dijit.form.Button" onclick='console.log("tall");' width2height="0.1">
<img src="../images/tubeTall.gif" height="75" width="35"><br>
<span style="font-size:medium">tall</span>
</button>
<div style="clear: both;"></div>
</div>
<br clear=both>
<h2>Customized buttons</h2>
<p>Dojo users can mix in their styles.
Here's an example:</p>
<style>
.dc {
font-size: x-large !important;
padding-top: 10px !important;
padding-bottom: 10px !important;
}
.Acme *,
.Acme {
background: rgb(96,96,96) !important;
color: white !important;
padding: 10px !important;
}
.Acme:hover *,
.Acme:hover {
background-color: rgb(89,94,111) !important;
color: cyan !important;
}
.Acme:active *,
.Acme:active {
background-color: white !important;
color: black !important;
}
</style>
<div class="box">
<button dojoType="dijit.form.Button" class="Acme" onclick='console.log("short");'>
<div class="dc">short</div>
</button>
<button dojoType="dijit.form.Button" class="Acme" onclick='console.log("longer");'>
<div class="dc">bit longer</div>
</button>
<button dojoType="dijit.form.Button" class="Acme" onclick='console.log("longer yet");'>
<div class="dc">ridiculously long</div>
</button>
<div style="clear: both;"></div>
</div>
<h2>Toggling the display test</h2>
<p>
(Ticket <a href="http://trac.dojotoolkit.org/ticket/403">#403</a>)
</p>
<div class="box">
<button dojoType="dijit.form.Button" onclick='dojo.byId("hiddenNode").style.display="inline";'>
Show Hidden Buttons
</button>
</div>
<div class="box" style="display:none;" id="hiddenNode">
<button dojoType="dijit.form.Button" onclick='console.log("clicked simple")' iconClass="plusIcon">
Create
</button>
<button dojoType="dijit.form.Button" onclick='console.log("clicked simple")' iconClass="plusIcon">
Create
</button>
</div>
<div style="clear: both;"></div>
<h2>Programatically changing buttons</h2>
<p>clicking the buttons below will change the buttons above</p>
<script type="text/javascript">
// FIXME: doesn't the manager have a function for filtering by type?
function forEachButton(func){
dijit.registry.filter(function(widget){ return widget instanceof dijit.form.Button; }).forEach(func);
}
var disabled=false;
function toggleDisabled(){
disabled=!disabled;
forEachButton(function(widget){ widget.setDisabled(disabled); });
dojo.byId("toggle").innerHTML= disabled ? "Enable all" : "Disable all";
}
var labels=["<img src='../images/note.gif' width='20' height='20'>All", "<i>work</i>", "and no", "<h1>play</h1>",
"<span style='color: red'>makes</span>", "Jack", "<h3>a</h3>", "dull",
"<img src='../images/plus.gif' width='16' height='16'>boy"];
var idx=0;
function changeLabels(){
forEachButton(function(widget){
widget.setLabel( labels[idx++ % labels.length]);
});
}
</script>
<div>
<button id="toggle" onclick='toggleDisabled()'>Disable all</button>
<button onclick='changeLabels()'>Change labels</button>
<button onclick='location.reload()'>Revert</button>
</div>
<h3>Button instantiated via javacript:</h3>
<div id="buttonContainer"></div>
<script type="text/javascript">
// See if we can make a button in script and attach it to the DOM ourselves.
dojo.addOnLoad(function(){
var params = {
label: "hello!",
name: "programmatic"
};
var widget = new dijit.form.Button(params, document.getElementById("buttonContainer"));
});
</script>
<div id="dropdownButtonContainer"></div>
<script type="text/javascript">
// See if we can make a drop down button in script and attach it to the DOM ourselves.
dojo.addOnLoad(function(){
var menu = new dijit.Menu({ });
menu.domNode.style.display="none";
var menuItem1 = new dijit.MenuItem({
label: "Save",
iconClass:"dijitEditorIcon dijitEditorIconSave",
onClick: function(){ alert('save'); }
});
menu.addChild(menuItem1);
 
var menuItem2 = new dijit.MenuItem({
label: "Cut",
iconClass:"dijitEditorIcon dijitEditorIconCut",
onClick: function(){ alert('cut'); }
});
menu.addChild(menuItem2);
var params = {
label: "hello!",
name: "programmatic2",
dropDown: menu
};
var widget = new dijit.form.DropDownButton(params, document.getElementById("dropdownButtonContainer"));
});
</script>
</body>
</html>
/trunk/api/js/dojo1.0/dijit/tests/form/test_DateTextBox.html
New file
0,0 → 1,140
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Test DateTextBox Widget</title>
 
 
<script type="text/javascript" src="../../../dojo/dojo.js"
djConfig="isDebug: true, parseOnLoad: true, extraLocale: ['de-de', 'en-us']"></script>
<script type="text/javascript" src="../_testCommon.js"></script>
 
<script type="text/javascript">
dojo.require("dijit.form.DateTextBox");
dojo.require("dojo.date.locale");
dojo.require("dojo.parser"); // scan page for widgets and instantiate them
</script>
<style type="text/css">
@import "../../../dojo/resources/dojo.css";
@import "../css/dijitTests.css";
 
.testExample {
background-color:#fbfbfb;
padding:1em;
margin-bottom:1em;
border:1px solid #bfbfbf;
}
 
.small {
width: 3em;
}
.medium {
width: 10em;
}
.long {
width: 20em;
}
.verylong {
width: 700px;
}
 
.noticeMessage {
color:#093669;
font-size:0.95em;
margin-left:0.5em;
}
 
.dojoTitlePaneLabel label {
font-weight:bold;
}
</style>
</head>
 
<body>
<h1 class="testTitle">Test DateTextBox Widget</h1>
<!-- to test form submission, you'll need to create an action handler similar to
http://www.utexas.edu/teamweb/cgi-bin/generic.cgi -->
<form id="form1" action="" name="example" method="post">
<div class="dojoTitlePaneLabel">
<label for="q1"> Date (local format) </label>
<span class="noticeMessage">DateTextBox class, no attributes</span>
</div>
<div class="testExample">
<input id="q1" name="noDOMvalue" type="text" dojoType="dijit.form.DateTextBox">
</div>
<div class="dojoTitlePaneLabel">
<label for="q2"> Date (local format - long) </label>
<span class="noticeMessage">DateTextBox class,
Attributes: required="true", trim="true", constraints={min:'2004-01-01',max:'2006-12-31',formatLength:'long'}. Works for leap years</span>
</div>
<div class="testExample">
<input id="q2" type="text" name="date1" class="medium" value="2005-12-30"
dojoType="dijit.form.DateTextBox"
constraints="{min:'2004-01-01',max:'2006-12-31',formatLength:'long'}"
required="true"
trim="true"
promptMessage="mm/dd/yyyy"
onChange="dojo.byId('oc2').value=arguments[0]"
invalidMessage="Invalid date. Use mm/dd/yyyy format." />
onChange:<input id="oc2" size="34" disabled value="not fired yet!" autocomplete="off">
<input type="button" value="Destroy" onClick="dijit.byId('q2').destroy(); return false;">
</div>
<div class="dojoTitlePaneLabel">
<label for="q3"> Date (American format) </label>
<span class="noticeMessage">DateTextBox class,
Attributes: lang="en-us", required="true", constraints={min:'2004-01-01',max:'2006-12-31'}. Works for leap years</span>
</div>
<div class="testExample">
<input id="q3" type="text" name="date2" class="medium" value="2005-12-30"
dojoType="dijit.form.DateTextBox"
constraints="{min:'2004-01-01',max:'2006-12-31'}"
lang="en-us"
required="true"
promptMessage="mm/dd/yyyy"
invalidMessage="Invalid date. Use mm/dd/yyyy format." />
</div>
<div class="dojoTitlePaneLabel">
<label for="q4"> Date (German format) </label>
<span class="noticeMessage">DateTextBox class,
Attributes: lang="de-de", constraints={min:2004-01-01, max:2006-12-31}. Works for leap years</span>
</div>
<div class="testExample">
<input id="q4" class="medium"/>
</div>
<script>
// See if we can make a widget in script and attach it to the DOM ourselves.
dojo.addOnLoad(function(){
var props = {
name: "date4",
value: new Date(2006,10,29),
constraints: {min:new Date(2004,0,1),max:new Date(2006,11,31)},
lang: "de-de",
promptMessage: "dd.mm.yy",
rangeMessage: "Enter a date in 2006.",
invalidMessage: "Invalid date. Use dd.mm.yy format."
};
var w = new dijit.form.DateTextBox(props, "q4");
});
</script>
 
<script>
function displayData() {
var f = document.getElementById("form1");
var s = "";
for (var i = 0; i < f.elements.length; i++) {
var elem = f.elements[i];
if (elem.name == "button") { continue; }
s += elem.name + ": " + elem.value + "\n";
}
alert(s);
}
</script>
 
<div>
<button name="button" onclick="displayData(); return false;">view data</button>
<input type="submit" name="submit" />
</div>
</form>
</body>
</html>
/trunk/api/js/dojo1.0/dijit/tests/form/Form.js
New file
0,0 → 1,9
if(!dojo._hasResource["dijit.tests.form.Form"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.tests.form.Form"] = true;
dojo.provide("dijit.tests.form.Form");
 
if(dojo.isBrowser){
doh.registerUrl("dijit.tests.form.Form", dojo.moduleUrl("dijit", "tests/form/Form.html"));
}
 
}
/trunk/api/js/dojo1.0/dijit/tests/form/test_TimeTextBox.html
New file
0,0 → 1,138
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Test TimeTextBox Widget</title>
 
<script type="text/javascript" src="../../../dojo/dojo.js"
djConfig="isDebug: true, parseOnLoad: true, extraLocale: ['de-de', 'en-us']"></script>
<script type="text/javascript" src="../_testCommon.js"></script>
 
<script type="text/javascript">
dojo.require("dijit.form.TextBox");
dojo.require("dijit.form.ValidationTextBox");
dojo.require("dijit.form.NumberTextBox");
dojo.require("dijit.form.CurrencyTextBox");
dojo.require("dijit.form.DateTextBox");
dojo.require("dijit.form.TimeTextBox");
dojo.require("dojo.currency");
dojo.require("dojo.date.locale");
dojo.require("dojo.parser"); // scan page for widgets and instantiate them
</script>
<style type="text/css">
@import "../../../dojo/resources/dojo.css";
@import "../css/dijitTests.css";
 
.testExample {
background-color:#fbfbfb;
padding:1em;
margin-bottom:1em;
border:1px solid #bfbfbf;
}
 
.small {
width: 3em;
}
.medium {
width: 10em;
}
.long {
width: 20em;
}
.verylong {
width: 700px;
}
 
.noticeMessage {
color:#093669;
font-size:0.95em;
margin-left:0.5em;
}
 
.dojoTitlePaneLabel label {
font-weight:bold;
}
</style>
</head>
 
<body>
<h1 class="testTitle">Test TimeTextBox Widget</h1>
<!-- to test form submission, you'll need to create an action handler similar to
http://www.utexas.edu/teamweb/cgi-bin/generic.cgi -->
<form id="form1" action="" name="example" method="post">
 
<div class="dojoTitlePaneLabel">
<label for="q1">Time using local conventions with seconds</label>
<span class="noticeMessage">TimeTextBox class,
Attributes: {formatLength:'medium'}</span>
</div>
<div class="testExample">
<input id="q1" type="text" name="time1" class="medium" value="T17:45:00"
dojoType="dijit.form.TimeTextBox"
constraints="{formatLength:'medium'}"
required="true"
onChange="dojo.byId('oc1').value=arguments[0]"
invalidMessage="Invalid time." />
onChange:<input id="oc1" size="34" disabled value="not fired yet!" autocomplete="off">
</div>
 
<div class="dojoTitlePaneLabel">
<label for="q2">Time using local conventions without seconds, required, no invalid message tooltip</label>
<span class="noticeMessage">TimeTextBox class,
Attributes: {formatLength:'short'}</span>
</div>
<div class="testExample">
<input id="q2" type="text" name="time1a" class="medium" value="T17:45:00"
dojoType="dijit.form.TimeTextBox"
constraints="{formatLength:'short'}"
required="true"
invalidMessage="" />
</div>
 
<div class="dojoTitlePaneLabel">
<label for="q3"> 12 Hour Time </label>
<span class="noticeMessage">TimeTextBox class,
Attributes: {timePattern:'h:mm:ss a'}</span>
</div>
<div class="testExample">
<input id="q3" type="text" name="time1b" class="medium" value="T17:45:00"
dojoType="dijit.form.TimeTextBox"
constraints="{timePattern:'h:mm:ss a'}"
required="true"
invalidMessage="Invalid time." />
</div>
 
<div class="dojoTitlePaneLabel">
<label for="q4"> 24 Hour Time</label>
<span class="noticeMessage">TimeTextBox class,
Attributes: {timePattern:'HH:mm:ss'}</span>
</div>
<div class="testExample">
<input id="q4" type="text" name="time2" class="medium" value="T17:45:00"
dojoType="dijit.form.TimeTextBox"
constraints="{timePattern:'HH:mm:ss'}"
required="true"
invalidMessage="Invalid time. Use HH:mm:ss where HH is 00 - 23 hours.">
</div>
 
<script>
function displayData() {
var f = document.getElementById("form1");
var s = "";
for (var i = 0; i < f.elements.length; i++) {
var elem = f.elements[i];
if (elem.name == "button") { continue; }
s += elem.name + ": " + elem.value + "\n";
}
alert(s);
}
</script>
 
<div>
<button name="button" onclick="displayData(); return false;">view data</button>
<input type="submit" name="submit" />
</div>
 
</form>
</body>
</html>
/trunk/api/js/dojo1.0/dijit/tests/form/test_InlineEditBox.html
New file
0,0 → 1,194
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Inline Edit Box Test</title>
 
<script type="text/javascript" src="../../../dojo/dojo.js"
djConfig="isDebug: true, parseOnLoad: true"></script>
<script type="text/javascript" src="../_testCommon.js"></script>
 
<script type="text/javascript">
dojo.require("dojo.data.ItemFileReadStore");
dojo.require("dijit.form.InlineEditBox");
dojo.require("dijit.form.Textarea");
dojo.require("dijit.form.TextBox");
dojo.require("dijit.form.DateTextBox");
dojo.require("dijit.form.FilteringSelect");
dojo.require("dijit.form.NumberSpinner");
dojo.require("dijit.form.Slider");
dojo.require("dojo.parser"); // scan page for widgets and instantiate them
 
function myHandler(id,newValue){
console.debug("onChange for id = " + id + ", value: " + newValue);
};
dojo.addOnLoad(function(){
dojo.subscribe("widgetFocus", function(widget){
console.log("focused on widget " + (widget?widget:"nothing"));
});
dojo.subscribe("widgetBlur", function(widget){
console.log("blurred widget " + (widget?widget:"nothing"));
});
dojo.subscribe("focusNode", function(node){ console.log("focused on node " + (node?(node.id||node.tagName):"nothing"));});
});
</script>
<style type="text/css">
@import "../../../dojo/resources/dojo.css";
@import "../css/dijitTests.css";
 
.inlineEdit { background-color: #CCC76A; }
 
/* some style rules on nodes just to test that style gets copied to the edit widget */
p { font-family: cursive; }
h3 { font-family: helvetica; font-style: italic; }
</style>
</head>
<body>
<h1 style="color: red; margin-bottom: 5em;">dijit.form.InlineEditBox is deprecated, use <a href="../test_InlineEditBox.html">dijit.InlineEditBox</a> instead</h1>
<div>
The following tests each show a plain element followed by an editable element.
The plain element and editable element should look the same (font, font-size, block vs. inline) etc.,
and clicking an editable element should bring up an editor with the same attributes
(font, font-size, block vs. inline) as the editable element.
</div>
<hr>
 
<h2>H3</h2>
<div>
The following two h3 tags should be look the same. They are display:block, and the editor should take up the entire
width of the screen.
</div>
 
(before plain h3)
<h3>this is a plain h3, cannot be edited</h3>
(between plain and editable h3)
<h3 id="editable" dojoType="dijit.form.InlineEditBox" onChange="myHandler(this.id,arguments[0])">
<input dojoType="dijit.form.TextBox" value="this is an editable h3 - I trigger the onChange callback on save">
</h3>
(after editable h3)
<hr style="width:100%;">
 
<h2>Inline-block Text (of 400px width)</h2>
<div>
The following section uses inline block text of 400px.
When clicking the editable text it should bring up an editor which is also 400px wide.
</div>
(before plain inline) <fieldset class="dijitInline"><div style="width: 400px;">hello ladies and gentlemen, now is the time for all good men to come to the aid of their country</div></fieldset> (after plain inline)
<br>
(before editable inline)
<fieldset class="dijitInline"><div dojoType="dijit.form.InlineEditBox" onChange="myHandler(this.id,arguments[0])" style="width: 400px;">
<span dojoType="dijit.form.TextBox" value="hello ladies and gentlemen, now is the time for all good men to come to aid of their country"></span>
</div></fieldset>
(after editable inline)
 
<hr style="width:100%;">
<h2>Pararagraph</h2>
(before plain paragraph)
<p>
Aliquam vitae enim. Duis scelerisque metus auctor est venenatis
imperdiet. Fusce dignissim porta augue. Nulla vestibulum. Integer lorem
nunc, ullamcorper a, commodo ac, malesuada sed, dolor. Aenean id mi in
massa bibendum suscipit. Integer eros. Nullam suscipit mauris. In
pellentesque. Mauris ipsum est, pharetra semper, pharetra in, viverra
quis, tellus. Etiam purus. Quisque egestas, tortor ac cursus lacinia,
felis leo adipiscing nisi, et rhoncus elit dolor eget eros. Fusce ut
quam. Suspendisse eleifend leo vitae ligula. Nulla facilisi. Nulla
rutrum, erat vitae lacinia dictum, pede purus imperdiet lacus, ut
semper velit ante id metus. Praesent massa dolor, porttitor sed,
pulvinar in, consequat ut, leo. Nullam nec est. Aenean id risus blandit
tortor pharetra congue. Suspendisse pulvinar.
</p>
(before editable paragraph. the editable paragraph has Save/Cancel buttons when open.)
<p id="areaEditable" dojoType="dijit.form.InlineEditBox" autoSave="false">
<textarea dojoType="dijit.form.Textarea">Aliquam vitae enim. Duis scelerisque metus auctor est venenatis
imperdiet. Fusce dignissim porta augue. Nulla vestibulum. Integer lorem
nunc, ullamcorper a, commodo ac, malesuada sed, dolor. Aenean id mi in
massa bibendum suscipit. Integer eros. Nullam suscipit mauris. In
pellentesque. Mauris ipsum est, pharetra semper, pharetra in, viverra
quis, tellus. Etiam purus. Quisque egestas, tortor ac cursus lacinia,
felis leo adipiscing nisi, et rhoncus elit dolor eget eros. Fusce ut
quam. Suspendisse eleifend leo vitae ligula. Nulla facilisi. Nulla
rutrum, erat vitae lacinia dictum, pede purus imperdiet lacus, ut
semper velit ante id metus. Praesent massa dolor, porttitor sed,
pulvinar in, consequat ut, leo. Nullam nec est. Aenean id risus blandit
tortor pharetra congue. Suspendisse pulvinar.</textarea>
</p>
These links will
<a href="#" onClick="dijit.byId('areaEditable').setDisabled(true)">disable</a> /
<a href="#" onClick="dijit.byId('areaEditable').setDisabled(false)">enable</a>
the InlineEditBox above.
<br>
(The following editable paragraph does not have Save/Cancel buttons when open)
<p id="areaEditable_autosave" dojoType="dijit.form.InlineEditBox" autoSave="true">
<textarea dojoType="dijit.form.Textarea">Aliquam vitae enim. Duis scelerisque metus auctor est venenatis
imperdiet. Fusce dignissim porta augue. Nulla vestibulum. Integer lorem
nunc, ullamcorper a, commodo ac, malesuada sed, dolor. Aenean id mi in
massa bibendum suscipit. Integer eros. Nullam suscipit mauris. In
pellentesque. Mauris ipsum est, pharetra semper, pharetra in, viverra
quis, tellus. Etiam purus. Quisque egestas, tortor ac cursus lacinia,
felis leo adipiscing nisi, et rhoncus elit dolor eget eros. Fusce ut
quam. Suspendisse eleifend leo vitae ligula. Nulla facilisi. Nulla
rutrum, erat vitae lacinia dictum, pede purus imperdiet lacus, ut
semper velit ante id metus. Praesent massa dolor, porttitor sed,
pulvinar in, consequat ut, leo. Nullam nec est. Aenean id risus blandit
tortor pharetra congue. Suspendisse pulvinar.</textarea>
</p>
<hr style="width:100%;">
 
<h2>Date text box:</h2>
<span id="backgroundArea" dojoType="dijit.form.InlineEditBox">
<input name="date" value="2005-12-30"
dojoType="dijit.form.DateTextBox"
constraints={datePattern:'MM/dd/yy'}
lang="en-us"
required="true"
promptMessage="mm/dd/yy"
invalidMessage="Invalid date. Use mm/dd/yy format.">
</span>
<hr style="width:100%;">
 
<h2>FilteringSelect:</h2>
<span dojoType="dojo.data.ItemFileReadStore" jsId="stateStore"
url="../_data/states.json"></span>
<span id="filteringSelect" dojoType="dijit.form.InlineEditBox" >
<input searchAttr="name" keyAttr="abbreviation" id="setvaluetest" dojoType="dijit.form.FilteringSelect" value="IA"
store="stateStore" name="state1" autoComplete="true" hasDownArrow="false">
</span>
<hr style="width:100%;">
before block<div style="display:block;" id="programmatic"></div>after
<script type="text/javascript">
// See if we can make a widget in script
// do it on load so Safari does not say display is none
dojo.addOnLoad(function(){
var inlineWidget = new dijit.form.InlineEditBox({renderAsHtml: true}, 'programmatic');
var editorWidget = new dijit.form.TextBox({
value:"Click here to edit a block programmatically created inline edit region"
});
editorWidget.domNode.style.width="100%";
inlineWidget.addChild(editorWidget);
inlineWidget.startup(); // scan for editWidget here, not on widget creation
});
 
</script>
<hr style="width:100%;">
<b>Spinner:</b>
<span dojoType="dijit.form.InlineEditBox">
<input dojoType="dijit.form.NumberSpinner"
name="spinner"
value="900"
constraints="{places:0}">
</span>
<!-- InlineEditBox/Slider doesn't work on Firefox but does on IE and Safari
<hr style="width:100%;">
<b>Slider:</b>
<p dojoType="dijit.form.InlineEditBox">
<input dojoType="dijit.form.VerticalSlider"
value="10"
maximum="100"
minimum="0"
showButtons="false"
style="height:100px;width:20px;">
</p>
-->
</body>
</html>
/trunk/api/js/dojo1.0/dijit/tests/form/test_Textarea.html
New file
0,0 → 1,96
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Dojo Textarea Widget Demo</title>
<script type="text/javascript" src="../../../dojo/dojo.js"
djConfig="isDebug: true, parseOnLoad: true"></script>
<script type="text/javascript" src="../_testCommon.js"></script>
 
<script type="text/javascript">
dojo.require("dijit.form.Textarea");
dojo.require("dojo.parser");
</script>
<style type="text/css">
@import "../../../dojo/resources/dojo.css";
@import "../css/dijitTests.css";
</style>
 
</head>
<body>
<h2 class="pageSubContentTitle">Test Auto-sizing Textarea Widget</h2>
 
<form id="form1" action="" name="example" method="post">
<label for="plain">HTML textarea:</label>
<textarea name="plainTextArea" id="plain" rows=5>
this is a plain text area
for comparison
</textarea>
<br><label for="programmatic">Programmatically created:</label><textarea id="programmatic"></textarea>
<script type="text/javascript">
// See if we can make a widget in script
dojo.addOnLoad(function(){
var w = new dijit.form.Textarea({
name: "programmaticTextArea",
style: "width:400px;",
value: "test value"
}, "programmatic");
w.setValue('we will create this one programatically');
});
</script>
<br><label for="simple">Inline textarea:</label><div name="simpleTextArea" id="simple" dojoType="dijit.form.Textarea" style="width:33%;border:20px solid red;"
onChange="dojo.byId('ocSimple').value=arguments[0]"
>this is a very simple resizable text area</div>
onChange:<textarea id="ocSimple" disabled>not fired yet!</textarea>
<textarea dojoType="dijit.form.Textarea" name="largeTextArea">
this is a textarea with a LOT of content
 
 
Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi.
 
Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi.
 
Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi.
 
Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi.
 
Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi.
 
Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi.
 
Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi.
 
Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi.
 
Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi.
 
Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi.
 
Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi.
 
Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi.
 
Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi.
 
Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi.
</textarea>
<script type="text/javascript">
function displayData() {
var f = dojo.byId("form1");
var s = "";
for(var i = 0; i < f.elements.length; i++){
var elem = f.elements[i];
if(elem.name == "button" || !dojo.isString(elem.value)){ continue; }
s += elem.name + ":[" + elem.value + "]\n";
}
alert(s);
}
</script>
<div>
<button name="button" onclick="displayData(); return false;">view data</button>
<input type="submit" name="submit" />
</div>
 
</form>
</body>
</html>
/trunk/api/js/dojo1.0/dijit/tests/form/test_Spinner.html
New file
0,0 → 1,113
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Dojo Spinner Widget Test</title>
 
 
<script type="text/javascript" src="../../../dojo/dojo.js"
djConfig="isDebug: true, parseOnLoad: true, extraLocale: ['de-de', 'en-us']"></script>
<script type="text/javascript" src="../_testCommon.js"></script>
 
<script type="text/javascript">
dojo.require("dijit.form.NumberSpinner");
dojo.require("dojo.parser"); // scan page for widgets
</script>
<style type="text/css">
@import "../../../dojo/resources/dojo.css";
@import "../css/dijitTests.css";
 
#integerspinner2 .dojoSpinnerUpArrow {
border-bottom-color: blue;
}
#integerspinner2 .dojoSpinnerDownArrow {
border-top-color: red;
}
#integerspinner2 .dojoSpinnerButton {
background-color: yellow;
}
#integerspinner2 .dojoSpinnerButtonPushed {
background-color: gray;
}
#integerspinner2 .dojoSpinnerButtonPushed .dojoSpinnerDownArrow {
border-top-color: blue;
}
#integerspinner2 .dojoSpinnerButtonPushed .dojoSpinnerUpArrow {
border-bottom-color: red;
}
.dojoInputFieldValidationNormal#integerspinner2 {
color:blue;
background-color:pink;
}
</style>
</head>
 
<body>
<h1 class="testTitle">Dijit Spinner Test</h1>
Try typing values, and use the up/down arrow keys and/or the arrow push
buttons to spin
<br>
<form id="form1" action="" name="example" method="post">
<h1>number spinner</h1>
<br>
initial value=900, no delta specified, no min specified, max=1550, onChange captured<br>
<label for="integerspinner1">Spinbox #1: </label><br>
<input dojoType="dijit.form.NumberSpinner"
onChange="dojo.byId('oc1').value=arguments[0]"
value="900"
constraints="{max:1550,places:0}"
name="integerspinner1"
id="integerspinner1">
onChange:<input id="oc1" disabled value="not fired yet!" autocomplete="off">
<br>
<br>
initial value=1000, delta=10, min=9 max=1550<br>
<label for="integerspinner2">Spinbox with custom styling (width=50%): </label>
<input dojoType="dijit.form.NumberSpinner"
style="font-size:20pt;border:1px solid blue;width: 50%;"
value="1000"
smallDelta="10"
constraints="{min:9,max:1550,places:0}"
name="integerspinner2"
id="integerspinner2">
<br>
<br>
<label for="integertextbox3">Spinner line break test: </label>initial value not specified, delta not specified, min not specified, max not specified, signed not specified, separator not specified<br>
[verify no line break just after this text]
<input dojoType="dijit.form.NumberSpinner" name="integertextbox3" id="integertextbox3">
[verify no line break just before this text]
<br>
<br>
Move the cursor left and right within the input field to see the effect on the spinner.
<br>
initial value=+1.0, delta=0.1, min=-10.9, max=155, places=1, maxLength=20<br>
<label for="realspinner1">Real Number Spinbox #1: </label><br>
<input dojoType="dijit.form.NumberSpinner"
value="1.0"
smallDelta="0.1"
constraints={min:-10.9,max:155,places:1,round:true}
maxLength="20"
name="realspinner1"
id="realspinner1">
<br>
 
<script>
function displayData() {
var f = document.getElementById("form1");
var s = "";
for (var i = 0; i < f.elements.length; i++) {
var elem = f.elements[i];
if (elem.name == "button") { continue; }
s += elem.name + ": " + elem.value + "\n";
}
alert(s);
}
</script>
<div>
<button name="button" onclick="displayData(); return false;">view data</button>
<input type="submit" name="submit" />
</div>
 
</form>
</body>
</html>
/trunk/api/js/dojo1.0/dijit/tests/form/test_ComboBox_destroy.html
New file
0,0 → 1,57
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Dojo ComboBox Widget Destruction Issue</title>
 
<style type="text/css">
@import "../../../dojo/resources/dojo.css";
@import "../css/dijitTests.css";
</style>
<script type="text/javascript" src="../../../dojo/dojo.js"
djConfig="isDebug: true, parseOnLoad: true"></script>
<script type="text/javascript" src="../_testCommon.js"></script>
 
<script type="text/javascript">
dojo.require("dijit.form.ComboBox");
dojo.require("dojo.parser"); // scan page for widgets and instantiate them
 
dojo.addOnLoad(function(){
dojo.connect(dojo.byId("killit"), "onclick", function(){
dijit.byId("combo_01").destroy(true);
});
});
</script>
</head>
<body>
<h1>Dojo ComboBox Widget Destruction Issue</h1>
<p>
<tt>ComboBox</tt> does not destroy itself properly, leading to a
JavaScript error. Could it have something to do with not disconnecting
events?
</p>
<p></p>
Steps:
<ol>
<li>Pick a state from the combo box below.</li>
<li>Click the "killit" button, which calls <tt>destroy</tt> on the widget.</li>
<li>Observe the JavaScript error.</li>
</ol>
<p></p>
<form action="#" method="GET">
<input type="button" id="killit" name="killit" value="killit" />
<select name="state" searchField="name" keyField="abbreviation"
id="combo_01" dojoType="dijit.form.ComboBox" style="width: 300px;"
name="foo.bar1" autoComplete="false">
<option value="AL">Alabama</option>
 
<option value="AK">Alaska</option>
<option value="AS">American Samoa</option>
<option value="AZ">Arizona</option>
<option value="AR">Arkansas</option>
<option value="AE">Armed Forces Europe</option>
<option value="AP">Armed Forces Pacific</option>
</select>
</form>
</body>
</html>
/trunk/api/js/dojo1.0/dijit/tests/form/test_Slider.html
New file
0,0 → 1,136
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Dojo Slider Widget Demo</title>
<script type="text/javascript" src="../../../dojo/dojo.js"
djConfig="isDebug: true, parseOnLoad: true, extraLocale: ['de-de', 'en-us']"></script>
<script type="text/javascript" src="../_testCommon.js"></script>
 
<script type="text/javascript">
dojo.require("dijit.form.Slider");
dojo.require("dijit.form.Button");
dojo.require("dojo.parser"); // scan page for widgets
dojo.addOnLoad(function(){
dijit.byId("sliderH2").setDisabled(true);
});
</script>
<style type="text/css">
@import "../../../dojo/resources/dojo.css";
@import "../css/dijitTests.css";
#slider2 .dijitButtonNode {
width:12px;
height:12px;
border: none;
font-size:11px;
padding:0px;
}
</style>
</head>
 
<body>
<h1 class="testTitle">Slider</h1>
Also try using the arrow keys, buttons, or clicking on the progress bar to move the slider.
<br>
<br>initial value=10, min=0, max=100, pageIncrement=100, onChange event triggers input box value change immediately<br>
 
<div dojoType="dijit.form.HorizontalSlider" name="horizontal1"
onChange="dojo.byId('slider1input').value=dojo.number.format(arguments[0]/100,{places:1,pattern:'#%'});"
value="10"
maximum="100"
minimum="0"
pageIncrement="100"
showButtons="false"
intermediateChanges="true"
style="width:50%; height: 20px;"
id="slider1">
<ol dojoType="dijit.form.HorizontalRuleLabels" container="topDecoration" style="height:1.2em;font-size:75%;color:gray;" count="6" numericMargin="1"></ol>
<div dojoType="dijit.form.HorizontalRule" container="topDecoration" count=6 style="height:5px;"></div>
<div dojoType="dijit.form.HorizontalRule" container="bottomDecoration" count=5 style="height:5px;"></div>
<ol dojoType="dijit.form.HorizontalRuleLabels" container="bottomDecoration" style="height:1em;font-size:75%;color:gray;">
<li>lowest</li>
<li>normal</li>
<li>highest</li>
</ol>
</div>
 
Slider1 Value:<input readonly id="slider1input" size="4" value="10.0%">
<br>
<button id="disableButton" dojoType="dijit.form.Button" onClick="dijit.byId('slider1').setDisabled( true);dijit.byId('disableButton').setDisabled(true);dijit.byId('enableButton').setDisabled(false);">Disable previous slider</button>
<button id="enableButton" dojoType="dijit.form.Button" onClick="dijit.byId('slider1').setDisabled(false);dijit.byId('disableButton').setDisabled(false);dijit.byId('enableButton').setDisabled( true);" disabled>Enable previous slider</button>
<br>
<br>initial value=10, min=0, max=100, onChange event triggers input box value change when you mouse up or tab away<br>
<div dojoType="dijit.form.VerticalSlider" name="vertical1"
onChange="dojo.byId('slider2input').value=arguments[0];"
value="10"
maximum="100"
minimum="0"
discreteValues="11"
style="height:300px;"
id="slider2">
<ol dojoType="dijit.form.VerticalRuleLabels" container="leftDecoration" style="width:2em;color:gray;" labelStyle="right:0px;">
<li>0</li>
<li>100</li>
</ol>
<div dojoType="dijit.form.VerticalRule" container="leftDecoration" count=11 style="width:5px;" ruleStyle="border-color:gray;"></div>
<div dojoType="dijit.form.VerticalRule" container="rightDecoration" count=11 style="width:5px;" ruleStyle="border-color:gray;"></div>
<ol dojoType="dijit.form.VerticalRuleLabels" container="rightDecoration" style="width:2em;color:gray;" count="6" numericMargin="1" maximum="100" constraints={pattern:'#'}></ol>
</div>
Slider2 Value:<input readonly id="slider2input" size="3" value="10">
<h1>Fancy HTML labels:</h1>
<div dojoType="dijit.form.HorizontalSlider" name="horizontal2"
minimum="1"
value="2"
maximum="3"
discreteValues="3"
showButtons="false"
intermediateChanges="true"
style="width:300px; height: 40px;"
id="slider3">
<div dojoType="dijit.form.HorizontalRule" container="bottomDecoration" count=3 style="height:5px;"></div>
<ol dojoType="dijit.form.HorizontalRuleLabels" container="bottomDecoration" style="height:1em;font-size:75%;color:gray;">
<li><img width=10 height=10 src="../images/note.gif"><br><span style="font-size: small">small</span></li>
<li><img width=15 height=15 src="../images/note.gif"><br><span style="font-size: medium">medium</span></li>
<li><img width=20 height=20 src="../images/note.gif"><br><span style="font-size: large">large</span></li>
</ol>
</div>
 
<p></p><h1>Standalone ruler example:</h1><p></p>
 
<div style="width:2in;border-top:1px solid black;">
<div dojoType="dijit.form.HorizontalRule" count=17 style="height:.4em;"></div>
<div dojoType="dijit.form.HorizontalRule" count=9 style="height:.4em;"></div>
<div dojoType="dijit.form.HorizontalRule" count=5 style="height:.4em;"></div>
<div dojoType="dijit.form.HorizontalRule" count=3 style="height:.4em;"></div>
<ol dojoType="dijit.form.HorizontalRuleLabels" labelStyle="font-style:monospace;font-size:.7em;margin:-1em 0px 0px -.35em;">
<li></li>
<li>1</li>
<li>2</li>
</ol>
</div>
 
<h1>horizontal, with buttons, disabled (to show styling):</h1>
 
<div dojoType="dijit.form.HorizontalSlider" name="horizontalH2"
onChange="dojo.byId('slider1input').value=arguments[0];"
value="10"
maximum="100"
minimum="0"
disabled="true"
showButtons="true"
intermediateChanges="true"
style="width:50%; height: 20px;"
id="sliderH2">
<ol dojoType="dijit.form.HorizontalRuleLabels" container="topDecoration" style="height:1.2em;font-size:75%;color:gray;" count="7" constraints="{pattern:'#.00%'}"></ol>
<div dojoType="dijit.form.HorizontalRule" container="topDecoration" count=7 style="height:5px;"></div>
<div dojoType="dijit.form.HorizontalRule" container="bottomDecoration" count=5 style="height:5px;"></div>
<ol dojoType="dijit.form.HorizontalRuleLabels" container="bottomDecoration" style="height:1em;font-size:75%;color:gray;">
<li>lowest</li>
<li>normal</li>
<li>highest</li>
</ol>
</div>
 
</body>
</html>
/trunk/api/js/dojo1.0/dijit/tests/form/images/Alabama.jpg
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/tests/form/images/Alabama.jpg
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/tests/form/test_FilteringSelect.html
New file
0,0 → 1,271
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Dojo FilteringSelect Widget Test</title>
<style type="text/css">
@import "../../../dojo/resources/dojo.css";
@import "../css/dijitTests.css";
</style>
<script type="text/javascript" src="../../../dojo/dojo.js"
djConfig="isDebug: true, parseOnLoad: true"></script>
<script type="text/javascript" src="../_testCommon.js"></script>
 
<script type="text/javascript">
dojo.require("dijit.form.FilteringSelect");
dojo.require("dojo.parser"); // scan page for widgets and instantiate them
 
function setValue(id, val){
dojo.byId(id).value=val;
}
 
function myLabelFunc(item, store){
var label=store.getValue(item, 'name');
// DEMO: uncomment to chop off a character
//label=label.substr(0, label.length-1);
// DEMO: uncomment to set to lower case
label = label.toLowerCase();
return label;
}
</script>
</head>
 
<body>
<h1 class="testTitle">Dojo FilteringSelect Widget Test</h1>
<div dojoType="dojo.data.ItemFileReadStore" jsId="myStore"
url="../_data/states.json"></div>
<div dojoType="dojo.data.ItemFileReadStore" jsId="myStore2"
url="../_data/countries.json"></div>
<p>The FilteringSelect widget is an enhanced version of HTML's &lt;select&gt; tag.</p>
<p>Similar features:</p>
<ul>
<li>There is a drop down list of possible values.</li>
<li>You can only enter a value from the drop down list. (You can't enter an arbitrary value.)</li>
<li>The value submitted with the form is the hidden value (ex: CA),</li>
<li>not the displayed value a.k.a. label (ex: California)</li>
</ul>
<p></p>
 
<p>Enhancements over plain HTML version:</p>
<ul>
<li>If you type in some text then it will filter down the list of possible values in the drop down list.</li>
<li>List can be specified either as a static list or via a javascript function (that can get the list from a server)</li>
</ul>
<p></p>
<hr>
 
<form action="#" method="GET">
<p>FilteringSelect #1: inlined data, autoComplete=false:</p>
<label for="setvaluetest2">state list 1:</label>
<select dojoType="dijit.form.FilteringSelect"
id="setvaluetest2"
name="state1"
autoComplete="false"
invalidMessage="Invalid state name"
onChange="dojo.byId('oc1').value=arguments[0]"
>
<option value="blank"></option>
<option value="AL">Alabama</option>
<option value="AK">Alaska</option>
<option value="AS">American Samoa</option>
<option value="AZ">Arizona</option>
<option value="AR">Arkansas</option>
<option value="AE">Armed Forces Europe</option>
<option value="AP">Armed Forces Pacific</option>
<option value="AA">Armed Forces the Americas</option>
<option value="CA" selected>California</option>
<option value="CO">Colorado</option>
<option value="CT">Connecticut</option>
<option value="DE">Delaware</option>
<option value="DC">District of Columbia</option>
<option value="FM">Federated States of Micronesia</option>
<option value="FL">Florida</option>
<option value="GA">Georgia</option>
<option value="GU">Guam</option>
<option value="HI">Hawaii</option>
<option value="ID">Idaho</option>
<option value="IL">Illinois</option>
<option value="IN">Indiana</option>
<option value="IA">Iowa</option>
<option value="KS">Kansas</option>
<option value="KY">Kentucky</option>
<option value="LA">Louisiana</option>
<option value="ME">Maine</option>
<option value="MH">Marshall Islands</option>
<option value="MD">Maryland</option>
<option value="MA">Massachusetts</option>
<option value="MI">Michigan</option>
<option value="MN">Minnesota</option>
<option value="MS">Mississippi</option>
<option value="MO">Missouri</option>
<option value="MT">Montana</option>
<option value="NE">Nebraska</option>
<option value="NV">Nevada</option>
<option value="NH">New Hampshire</option>
<option value="NJ">New Jersey</option>
<option value="NM">New Mexico</option>
<option value="NY">New York</option>
<option value="NC">North Carolina</option>
<option value="ND">North Dakota</option>
<option value="MP">Northern Mariana Islands</option>
<option value="OH">Ohio</option>
<option value="OK">Oklahoma</option>
<option value="OR">Oregon</option>
<option value="PA">Pennsylvania</option>
<option value="PR">Puerto Rico</option>
<option value="RI">Rhode Island</option>
<option value="SC">South Carolina</option>
<option value="SD">South Dakota</option>
<option value="TN">Tennessee</option>
<option value="TX">Texas</option>
<option value="UT">Utah</option>
<option value="VT">Vermont</option>
<option value="VI">Virgin Islands, U.S.</option>
<option value="VA">Virginia</option>
<option value="WA">Washington</option>
<option value="WV">West Virginia</option>
<option value="WI">Wisconsin</option>
<option value="WY">Wyoming</option>
</select>
onChange:<input id="oc1" disabled value="not fired yet!" autocomplete="off">
<input type="button" value="Set displayed value to Kentucky (valid)" onClick="dijit.byId('setvaluetest2').setDisplayedValue('Kentucky')">
<input type="button" value="Set displayed value to Canada (invalid)" onClick="dijit.byId('setvaluetest2').setDisplayedValue('Canada')">
<hr>
 
<div dojoType="dojo.data.ItemFileReadStore" jsId="stateStore"
url="../_data/states.json"></div>
 
<p>FilteringSelect #2: url, autoComplete=true:</p>
<label for="setvaluetest">state list 2:</label>
<input searchAttr="name"
id="setvaluetest"
dojoType="dijit.form.FilteringSelect"
store="stateStore"
name="state2"
autoComplete="true"
onChange="setValue('value2', arguments[0]);"
invalidMessage="Invalid state name"
>
<span>Value: <input id="value2" disabled></span>
 
<p>FilteringSelect #3: url, autoComplete=false:</p>
<label for="state3">state list 3:</label>
<input searchAttr="name"
id="state3"
dojoType="dijit.form.FilteringSelect"
value="VI"
store="stateStore"
name="state3"
autoComplete="false"
onChange="setValue('value3', arguments[0]);"
invalidMessage="Invalid state name."
>
<span>Value: <input id="value3" disabled value="VI"></span>
<hr>
<p>FilteringSelect #5: custom labelFunc (value in textbox should be lower case when onChange is called), autoComplete=true:</p>
<label for="state5">state list 5:</label>
<input searchAttr="name"
id="state5"
dojoType="dijit.form.FilteringSelect"
value="OR"
labelFunc="myLabelFunc"
store="stateStore"
name="state5"
autoComplete="true"
labelAttr="label"
labelType="html"
dataProviderClass="dojo.data.ItemFileReadStore"
promptMessage="Please enter a state"
invalidMessage="Invalid state name."
>
<br>
<hr>
 
<p>FilteringSelect #7: Input method editor Chinese characters</p>
<p>Using an input method editor (see <a href="http://www.microsoft.com/windows/ie/ie6/downloads/recommended/ime/default.mspx">IME</a> for Windows) try typing &#38463; (a) or &#25226; (ba).</p>
<label for="state7">Chinese list:</label>
<select dojoType="dijit.form.FilteringSelect"
name="state7"
id="state7"
>
<option value="a" selected>&#38463;</option>
<option value="ba">&#25226;</option>
</select>
<br>
<hr>
<p>FilteringSelect #8: Japanese</p>
<p>Try typing 東、西、北、南 (north, south, east west) and a few choices will pop up.</p>
<label for="state8">Japanese list:</label>
<select name="state8" id="state8" dojoType="dijit.form.FilteringSelect" style="width: 300px;" autoComplete="false"
onChange="setValue('value8', arguments[0]);">
<option value="nanboku">南北</option>
<option value="touzai">東西</option>
<option value="toukyou">東京</option>
<option value="higashiguchi">東口</option>
<option value="nishiguchi">西口</option>
<option value="minamiguchi">南口</option>
<option value="kitaguchi">北口</option>
<option value="higashiku">東区</option>
<option value="nishiku">西区</option>
<option value="minamiku">南区</option>
<option value="kitaku">北区</option>
</select>
<span>Value: <input id="value8" disabled value="nanboku"></span>
<hr>
<p>FilteringSelect #9: No data</p>
<p>This FilteringSelect has no options to choose from. It should still load.</p>
<label for="state9">empty list:</label>
<select name="state9" id="state9" dojoType="dijit.form.FilteringSelect" style="width: 300px;" autoComplete="false">
</select>
<br>
<hr>
<p>FilteringSelect #10: hasDownArrow=false:</p>
<label for="state10">no arrow list:</label>
<input searchAttr="name"
dojoType="dijit.form.FilteringSelect"
value="AL"
name="state10"
id="state10"
autoComplete="false"
store="myStore"
invalidMessage="Invalid state name."
hasDownArrow="false"
>
<br>
<hr>
<div >
<p>FilteringSelect #11: deep data, initial query of type=country:</p>
<label for="state11">query list:</label>
<input searchAttr="name"
dojoType="dijit.form.FilteringSelect"
query={type:'country'}
value="United States of America"
name="state11"
id="state11"
autoComplete="false"
store="myStore2"
invalidMessage="Choose a country from the list."
hasDownArrow="false"
>
<br>
<hr>
<input type="submit">
</form>
<p>
this is some text below the combo boxes. It shouldn't get pushed out of
the way when search results get returned. also: adding a simple combo
box to test IE bleed through problem:
</p>
 
<select>
<option>test for</option>
<option">IE bleed through</option>
<option>problem</option>
</select>
 
<!-- maintain state of select if user presses back/forward button -->
<form name="_dojo_form" style="display:none" disabled="true"><textarea name="stabile" cols="80" rows="10"></textarea></form>
</body>
</html>
/trunk/api/js/dojo1.0/dijit/tests/form/Form.html
New file
0,0 → 1,217
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
 
<title>Form unit test</title>
<style type="text/css">
@import "../../../dojo/resources/dojo.css";
@import "../css/dijitTests.css";
</style>
<script type="text/javascript" src="../../../dojo/dojo.js"
djConfig="isDebug: true, parseOnLoad: true"></script>
<script type="text/javascript" src="../_testCommon.js"></script>
 
<script type="text/javascript">
dojo.require("doh.runner");
dojo.require("dojo.date");
dojo.require("dijit.form.Form");
dojo.require("dijit.layout.LayoutContainer");
dojo.require("dijit.layout.ContentPane");
dojo.require("dijit.form.ComboBox");
dojo.require("dijit.form.CheckBox");
dojo.require("dijit.form.DateTextBox");
dojo.require("dijit.form.Button");
dojo.require("dijit.Editor");
 
var obj;
function getValues(){
obj = dijit.byId('myForm').getValues();
console.log("Object is: " + dojo.toJson(obj, true));
}
function setValues(){
if(!obj){
obj = {testF: 'testi'};
}
console.log("Object is: " + dojo.toJson(obj, true));
dijit.byId('myForm').setValues(obj);
}
 
// make dojo.toJson() print dates correctly (this feels a bit dirty)
Date.prototype.json = function(){ return dojo.date.stamp.toISOString(this, {selector: 'date'});};
 
var d = dojo.date.stamp.fromISOString;
 
// These are the values assigned to the widgets in the page's HTML
var original = {
foo: {bar: {baz: {quux: d("2007-12-30")} } },
available: {from: d("2005-01-02"), to: d("2006-01-02")},
plop: {combo: "one"},
cb2: ["2", "3"],
r2: "2",
richtext: "<h1>original</h1><p>This is the default content</p>"
};
 
// we reset the form to these values
var changed = {
foo: {bar: {baz: {quux: d("2005-01-01")} } },
available: {from: d("2005-11-02"), to: d("2006-11-02")},
plop: {combo: "three"},
cb2: ["4"],
r2: "1",
richtext: "<h1>changed</h1><p>This is the changed content set by setValues</p>"
};
 
dojo.addOnLoad(function(){
doh.register("dijit.form.Form",
[
function getValues(){
doh.is( dojo.toJson(original), dojo.toJson(dijit.byId("myForm").getValues()) );
},
function setValues(){
dijit.byId("myForm").setValues(changed);
doh.is( dojo.toJson(changed), dojo.toJson(dijit.byId("myForm").getValues()) );
},
function nameAttributeSurvived(){ // ticket:4753
var radios = dojo.query(".RadioButton", dijit.byId("radio-cells")).forEach(
function(r) {
doh.is( r.inputNode.name, "r2" );
});
}
]
);
doh.run();
});
 
</script>
</head>
<body>
<h1>Form Widget Unit Test</h1>
<p>
The form widget takes data in a form and serializes/deserializes it,
so it can be submitted as a JSON string of nested objects.
</p>
<div style="color:red">Currently only widgets are supported, not raw elements.</div>
<form dojoType="dijit.form.Form" id="myForm" action="showPost.php" execute="alert('Execute form w/values:\n'+dojo.toJson(arguments[0],true));">
<p>Just HTML text</p>
<table border=2>
<tr><th>Description</th><th>Name</th><th>Form node/widget</th></tr>
 
<!--
<tr><td>text</td><td>testF</td><td><input type="text" name="testF" value="bar1" /></td></tr>
<tr><td>password</td><td>passwordF</td><td><input type="password" name="passwordF" value="bar4" /></td></tr>
<tr><td>hidden</td><td>hiddenF</td><td><input type="hidden" name="hiddenF" value="bar4" /></td></tr>
<tr><td>select</td><td>plop.noncombo</td><td>
<div class="group">
<select name="plop.noncombo">
<option value="1">one</option>
<option value="2">two</option>
<option value="3">three</option>
</select>
</div>
 
</td></tr>
-->
 
<tr><td>DateTextBox inside contentpane</td><td>foo.bar.baz.quux</td><td>
<div dojoType="dijit.layout.ContentPane">
<input type="text" name="foo.bar.baz.quux" dojoType="dijit.form.DateTextBox" value="2007-12-30" />
</div>
</td></tr>
<tr><td>Layoutcontainer</td><td>
<div dojoType="dijit.layout.LayoutContainer">
</div>
</td></tr>
<tr>
<td>DateTextBox 1</td><td>available.from</td><td>
<input type="text" name="available.from" dojoType="dijit.form.DateTextBox" value="2005-01-02" />
</td>
</tr>
<tr>
<td>DateTextBox 2</td><td>available.to</td><td>
<input type="text" name="available.to" dojoType="dijit.form.DateTextBox" value="2006-01-02" />
</td>
</tr>
 
<tr><td>ComboBox</td><td>plop.combo</td>
<td>
<select name="plop.combo" dojoType="dijit.form.ComboBox">
<option value="one">one</option>
<option value="two">two</option>
<option value="three">three</option>
</select>
</td></tr>
 
<!--
<tr>
<td>textarea</td><td>myTextArea</td>
<td>
<textarea name="myTextArea">
text text text """ \\\/
</textarea>
</td>
</tr>
-->
 
<!--
<tr>
<td>CheckBox</td><td>cb1</td>
<td>
<input type="checkbox" name="cb1" value="1" /> 1
<input type="checkbox" name="cb1" value="2" checked="checked" /> 2
<input type="checkbox" name="cb1" value="3" checked="checked" /> 3
<input type="checkbox" name="cb1" value="4" /> 4
</td>
</tr>
-->
 
<tr>
<td>CheckBox widget</td><td>cb2</td>
<td>
<input dojoType="dijit.form.CheckBox" type="checkbox" name="cb2" value="1" /> 1
<input dojoType="dijit.form.CheckBox" type="checkbox" name="cb2" value="2" checked="checked" /> 2
<input dojoType="dijit.form.CheckBox" type="checkbox" name="cb2" value="3" checked="checked" /> 3
<input dojoType="dijit.form.CheckBox" type="checkbox" name="cb2" value="4" /> 4
</td>
</tr>
 
<!--
<tr>
<td>radio</td><td>r1</td>
<td>
<input type="radio" name="r1" value="1" /> 1
<input type="radio" name="r1" value="2" /> 2
<input type="radio" name="r1" value="3" /> 3
<input type="radio" name="r1" value="4" /> 4
</td>
</tr>
-->
 
<tr>
<td>Radio widget</td><td>r2</td>
<td id="radio-cells">
<input dojoType="dijit.form.RadioButton" type="radio" name="r2" value="1" /> 1
<input dojoType="dijit.form.RadioButton" type="radio" name="r2" value="2" checked="checked" /> 2
<input dojoType="dijit.form.RadioButton" type="radio" name="r2" value="3"/> 3
<input dojoType="dijit.form.RadioButton" type="radio" name="r2" value="4" /> 4
</td>
</tr>
<tr>
<td>Editor widget</td><td>richtext</td>
<td>
<textarea dojoType="dijit.Editor" name="richtext" pluginsConfig="[{items:['bold','italic']}]"/><h1>original</h1><p>This is the default content</p></textarea>
</td>
</tr>
 
</table>
 
<button dojoType=dijit.form.Button onClick="getValues();">Get Values from form!</button>
<button dojoType=dijit.form.Button onClick="setValues();">Set Values to form!</button>
<button dojoType=dijit.form.Button type=submit>Submit</button>
</form>
 
 
</body>
</html>
/trunk/api/js/dojo1.0/dijit/tests/widgetsInTemplate.js
New file
0,0 → 1,9
if(!dojo._hasResource["dijit.tests.widgetsInTemplate"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.tests.widgetsInTemplate"] = true;
dojo.provide("dijit.tests.widgetsInTemplate");
 
if(dojo.isBrowser){
doh.registerUrl("dijit.tests.widgetsInTemplate", dojo.moduleUrl("dijit", "tests/widgetsInTemplate.html"));
}
 
}
/trunk/api/js/dojo1.0/dijit/tests/test_Menu.html
New file
0,0 → 1,220
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
 
<title>Menu System Test</title>
 
<style type="text/css">
@import "../../dojo/resources/dojo.css";
@import "css/dijitTests.css";
</style>
 
 
<script type="text/javascript" src="../../dojo/dojo.js"
djConfig="parseOnLoad: true, isDebug: true"></script>
<script type="text/javascript" src="_testCommon.js"></script>
 
<script language="JavaScript" type="text/javascript">
dojo.require("dijit.Menu");
dojo.require("dijit.ColorPalette");
dojo.require("dijit._Calendar");
dojo.require("dojo.parser"); // scan page for widgets and instantiate them
</script>
<script language="Javascript" type="text/javascript">
dojo.addOnLoad(function() {
// create a menu programmatically
function fClick() {alert("clicked!")};
var pMenu = new dijit.Menu({targetNodeIds:["prog_menu"], id:"progMenu"});
pMenu.addChild(new dijit.MenuItem({label:"Programmatic Context Menu", disabled:true}));
pMenu.addChild(new dijit.MenuSeparator());
pMenu.addChild(new dijit.MenuItem({label:"Simple menu item", onClick:fClick}));
pMenu.addChild(new dijit.MenuItem({label:"Another menu item", onClick:fClick}));
pMenu.addChild(new dijit.MenuItem({label:"With an icon", iconClass:"dijitEditorIcon dijitEditorIconCut", onClick:fClick}));
var mItem = new dijit.MenuItem({label:"dojo.event clicking"});
dojo.connect(mItem, "onClick", function(){alert("click! handler created via dojo.connect()")});
pMenu.addChild(mItem);
 
var pSubMenu = new dijit.Menu({parentMenu:pMenu, id:"progSubMenu"});
pSubMenu.addChild(new dijit.MenuItem({label:"Submenu item", onClick:fClick}));
pSubMenu.addChild(new dijit.MenuItem({label:"Submenu item", onClick:fClick}));
pMenu.addChild(new dijit.PopupMenuItem({label:"Submenu", popup:pSubMenu, id:"progPopupMenuItem"}));
pMenu.startup();
});
</script>
</head>
<body>
 
<div dojoType="dijit.Menu" id="submenu1" contextMenuForWindow="true" style="display: none;">
<div dojoType="dijit.MenuItem" onClick="alert('Hello world');">Enabled Item</div>
<div dojoType="dijit.MenuItem" disabled="true">Disabled Item</div>
<div dojoType="dijit.MenuSeparator"></div>
<div dojoType="dijit.MenuItem" iconClass="dijitEditorIcon dijitEditorIconCut"
onClick="alert('not actually cutting anything, just a test!')">Cut</div>
<div dojoType="dijit.MenuItem" iconClass="dijitEditorIcon dijitEditorIconCopy"
onClick="alert('not actually copying anything, just a test!')">Copy</div>
<div dojoType="dijit.MenuItem" iconClass="dijitEditorIcon dijitEditorIconPaste"
onClick="alert('not actually pasting anything, just a test!')">Paste</div>
<div dojoType="dijit.MenuSeparator"></div>
<div dojoType="dijit.PopupMenuItem">
<span>Enabled Submenu</span>
<div dojoType="dijit.Menu" id="submenu2">
<div dojoType="dijit.MenuItem" onClick="alert('Submenu 1!')">Submenu Item One</div>
<div dojoType="dijit.MenuItem" onClick="alert('Submenu 2!')">Submenu Item Two</div>
<div dojoType="dijit.PopupMenuItem">
<span>Deeper Submenu</span>
<div dojoType="dijit.Menu" id="submenu4"">
<div dojoType="dijit.MenuItem" onClick="alert('Sub-submenu 1!')">Sub-sub-menu Item One</div>
<div dojoType="dijit.MenuItem" onClick="alert('Sub-submenu 2!')">Sub-sub-menu Item Two</div>
</div>
</div>
</div>
</div>
<div dojoType="dijit.PopupMenuItem" disabled="true">
<span>Disabled Submenu</span>
<div dojoType="dijit.Menu" id="submenu3" style="display: none;">
<div dojoType="dijit.MenuItem" onClick="alert('Submenu 1!')">Submenu Item One</div>
<div dojoType="dijit.MenuItem" onClick="alert('Submenu 2!')">Submenu Item Two</div>
</div>
</div>
<div dojoType="dijit.PopupMenuItem">
<span>Different popup</span>
<div dojoType="dijit.ColorPalette"></div>
</div>
</div>
 
 
<!--
<div dojoType="dijit.MenuBar">
<div dojoType="dijit.MenuBarItem" submenuId="submenu1">File</div>
<div dojoType="dijit.MenuBarItem" submenuId="submenu">Edit</div>
<div dojoType="dijit.MenuBarItem" disabled="true">View</div>
<div dojoType="dijit.MenuBarItem" submenuId="submenu">Help</div>
<div dojoType="dijit.MenuBarItem" onClick="alert('you clicked a menu bar button');">Click Me</div>
</div>
-->
<div style="padding: 1em">
<h1 class="testTitle">Dijit Menu System Test</h1>
 
<h3>Form</h3>
 
<form>
<input id=input1 value="top-left">
<p style="text-align:right"><input id=input2 value="top-right"></p>
<textarea id=textarea>hello there!</textarea><br>
<select>
<option>check if i</option>
<option>bleed through</option>
<option>on IE6</option>
</select>
<button id=button>push me</button>
 
<div id="prog_menu" style="border:1px solid blue; padding:10px; margin:20px 0;">
This div has a programmatic context menu on it that's different to the page menu.
</div>
 
<div style="height:500px"></div>
<p>(this space intentionally left blank to aid testing with controls
at the bottom of the browser window)</p>
<div style="height:500px"></div>
<input id=input3 value="bottom-left">
<p style="text-align:right"><input id=input4 value="bottom-right"></p>
</form>
 
<p>See also: <a href="form/test_Button.html">form/test_Button</a>
(PopupMenu is used with DropDownButton and ComboButton)</p>
 
<h3>Mouse opening tests</h3>
 
<ul>
<li>Right click on the client area of the page (ctrl-click for Macintosh). Menu should open.</li>
<li>Right click on each of the form controls above. Menu should open.</li>
<li>Right click near the righthand window border. Menu should open to the left of the pointer.</li>
<li>Right click near the bottom window border. Menu should open above the pointer.</li>
</ul>
 
 
<h3>Mouse hover tests</h3>
 
<ul>
<li>Hover over the first item with the pointer. Item should highlight and get focus.</li>
<li>Hover over the second (disabled) item. Item should highlight and get focus.</li>
<li>Seperator items should not highlight on hover - no items should highlight in this case.</li>
</ul>
 
 
<h3>Mouse click tests</h3>
 
<ul>
<li>Click on the first menu item. Alert should open with the message "Hello world". The menu should dissapear.</li>
<li>Click on the second menu item (disabled). Should not do anything - focus should remain on the disabled item.</li>
<li>Click anywhere outside the menu. Menu should close. Focus will be set by the browser based on where the user clicks.</li>
</ul>
 
 
<h3>Mouse submenu tests</h3>
 
<ul>
<li>Hover over the "Enabled Submenu" item. Item should highlight and then pop open a submenu after a short (500ms) delay.</li>
<li>Hover over any of the other menu items. Submenu should close immediately and deselect the submenu parent item. The newly hovered item should become selected.</li>
<li>Hover over the "Disabled Submenu" item. Item should highlight, but no submenu should appear.</li>
<li>Clicking on the "Enabled Submenu" item before the submenu has opened (you'll have to be quick!) should immediatley open the submenu.</li>
<li>Clicking on the "Enabled Submenu" item <i>after</i> the submenu has opened should have no effect - the item is still selected and the submenu still open.</li>
<li>Hover over submenu item 1. Should select it - the parent menu item should stay selected also.</li>
<li>Hover over submenu item 2. Should select it - the parent menu item should stay selected also.</li>
</ul>
 
 
<h3>Keyboard opening tests</h3>
 
<ul>
<li>On Windows: press shift-f10 with focus on any of the form controls. Should open the menu.</li>
<li>On Windows: press the context menu key (located on the right of the space bar on North American keyboards) with focus on any of the form controls. Should open the menu.</li>
<li>On Firefox on the Mac: press ctrl-space with focus on any of the form controls. Should open the menu.</li>
</ul>
 
 
<h3>Keyboard closing tests</h3>
 
<ul>
<li>Open the menu.</li>
<li>Press tab. Should close the menu and return focus to where it was before the menu was opened.</li>
<li>Open the menu.</li>
<li>Press escape. Should close the menu and return focus to where it was before the menu was opened.</li>
</ul>
 
 
<h3>Keyboard navigation tests</h3>
 
<ul>
<li>Open the menu.</li>
<li>Pressing up or down arrow should cycle focus through the items in that menu.</li>
<li>Pressing enter or space should invoke the menu item.</li>
<li>Disabled items receive focus but no action is taken upon pressing enter or space.</li>
</ul>
 
 
<h3>Keyboard submenu tests</h3>
 
<ul>
<li>Open the menu.</li>
<li>The first item should become selected.</li>
<li>Press the right arrow key. Nothing should happen.</li>
<li>Press the left arrow key. Nothing should happen.</li>
<li>Press the down arrow until "Enabled Submenu" is selected. The submenu should not appear.</li>
<li>Press enter. The submenu should appear with the first item selected.</li>
<li>Press escape. The submenu should vanish - "Enabled Submenu" should remain selected.</li>
<li>Press the right arrow key. The submenu should appear with the first item selected.</li>
<li>Press the right arrow key. Nothing should happen.</li>
<li>Press the left arrow key. The submenu should close - "Enabled Submenu" should remain selected.</li>
<li>Press the left arrow key. The menu should <i>not</i> close and "Enabled Submenu" should remain selected.</li>
<li>Press escape. The menu should close and focus should be returned to where it was before the menu was opened.</li>
</ul>
 
</div>
 
</body>
</html>
/trunk/api/js/dojo1.0/dijit/tests/_inspector.html
New file
0,0 → 1,60
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Dijit List mini-browser | The Dojo Toolkit</title>
 
<style type="text/css">
@import "../../dojo/resources/dojo.css";
@import "css/dijitTests.css";
body, html { width:100%; height:100%; margin:0; padding:0; background:#fff !important; }
</style>
 
<script type="text/javascript" src="../../dojo/dojo.js"
djConfig="parseOnLoad: true, isDebug: true"></script>
<script type="text/javascript" src="_testCommon.js"></script>
 
<script language="JavaScript" type="text/javascript">
dojo.require("dojo.data.ItemFileReadStore");
dojo.require("dijit.Tree");
dojo.require("dijit.layout.ContentPane");
dojo.require("dijit.layout.SplitContainer");
dojo.require("dojo.parser"); // scan page for widgets and instantiate them
</script>
 
</head>
<body>
<div dojoType="dojo.data.ItemFileReadStore" jsId="theStore"
url="../tests/_data/dijits.json"></div>
 
<div dojoType="dijit.layout.SplitContainer" sizerWidth="7" style="width:100%; height:100%;">
<div dojoType="dijit.layout.ContentPane" layoutAlign="left">
<div dojoType="dijit.Tree" id="mytree" store="theStore" query="{namespace:'dijit'}"
labelAttr="className" label="Dijits">
<script type="dojo/method" event="onClick" args="item">
var str = "<h1>"+theStore.getLabel(item)+"</h1>";
 
var sum = theStore.getValue(item,'summary');
var des = theStore.getValue(item,'description')
var exp = theStore.getValue(item,'examples')
 
if(sum){ str += "<h2>summary:</h2><p><pre>" + sum + "</pre></p>"; }
if(des){ str += "<h2>details:</h2><p><pre>" + des + "</pre></code></p>"; }
if(exp){ str += "<h2>examples:</h2><p><pre>" + exp + "</pre></code></p>"; }
 
dojo.byId('detailPane').innerHTML = str;
 
</script>
<script type="dojo/method" event="getIconClass" args="item">
return "noteIcon";
</script>
</div>
</div>
<div dojoType="dijit.layout.ContentPane" id="detailPane" style="padding:10px; padding-top:0;">
</div>
</div>
</body>
</html>
/trunk/api/js/dojo1.0/dijit/tests/_base/viewport.js
New file
0,0 → 1,10
if(!dojo._hasResource["dijit.tests._base.viewport"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.tests._base.viewport"] = true;
dojo.provide("dijit.tests._base.viewport");
 
if(dojo.isBrowser){
doh.registerUrl("dijit.tests._base.viewport", dojo.moduleUrl("dijit", "tests/_base/viewport.html"));
doh.registerUrl("dijit.tests._base.viewportStrict", dojo.moduleUrl("dijit", "tests/_base/viewportStrict.html"));
}
 
}
/trunk/api/js/dojo1.0/dijit/tests/_base/viewportStrict.html
New file
0,0 → 1,81
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>dijit.getViewport() test</title>
<style type="text/css">
@import "../../../dojo/resources/dojo.css";
@import "../css/dijitTests.css";
html, body { margin: 0px; padding: 0px; }
</style>
<script type="text/javascript" src="../../../dojo/dojo.js"
djConfig="isDebug: false, parseOnLoad: false"></script>
<script type="text/javascript" src="../_testCommon.js"></script>
 
<script type="text/javascript">
dojo.require("doh.runner");
dojo.require("dijit.dijit");
 
function compute(){
var d = dojo.marginBox(dojo.byId("documentBorder")),
v = dijit.getViewport();
dojo.byId("results").innerHTML +=
"Document is " + d.w + "px x " + d.h + "px" +
", viewport is " + v.w + "px x " + v.h + "px" +
", with scroll offset of (" + v.l + ", " + v.t + ")<br>";
}
function addText(){
dojo.byId("results").innerHTML += "Adding text...<br><br>";
var text="";
for(var i=0;i<100;i++){
text += "<span style='white-space: nowrap'>";
for(var j=0;j<3;j++){ text += "Now is the time for all good men to come to the aid of their country."; }
text += "</span><br>";
}
dojo.byId("documentBorder").innerHTML += text;
}
 
dojo.addOnLoad(function(){
doh.register("dijit._base.manager",
[
function initial(t){
console.log("calling compute");
compute();
console.log("called compute");
var d = dojo.marginBox(dojo.byId("documentBorder")),
v = dijit.getViewport();
doh.t(v.h > d.h);
},
function expand(t){
var v = dijit.getViewport();
addText();
compute();
var v2 = dijit.getViewport();
doh.t(v2.h <= v.h);
doh.t(v2.h+20 >= v.h);
}
]
);
doh.run();
});
 
</script>
</head>
<body>
<div id="documentBorder" style="border: solid red 2px;">
<h1>dijit.getViewport() test</h1>
<div style="padding: 10px; border: solid blue 1px;">padding div</div>
<button onclick="addText(); compute();">add text and compute size</button>
<button onclick="compute();">recompute size</button>
<ol>
<li>check results div below to see that before adding text, document is smaller than viewport
<li>after adding text, document should be bigger than viewport,and check that viewport size hasn't changed,
except maybe being a little bit smaller (about 15px) because of the size of the scrollbars
<li>resize browser window and click the "recompute size" button; reported viewport size should change
<li>scroll the window and click "recompute size" to see that the scroll position is taken into effect
</ol>
<div id=results style="border: 5px solid blue;">
</div>
</body>
</html>
/trunk/api/js/dojo1.0/dijit/tests/_base/wai.js
New file
0,0 → 1,9
if(!dojo._hasResource["dijit.tests._base.wai"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.tests._base.wai"] = true;
dojo.provide("dijit.tests._base.wai");
 
if(dojo.isBrowser){
doh.registerUrl("dijit.tests._base.wai", dojo.moduleUrl("dijit", "tests/_base/wai.html"));
}
 
}
/trunk/api/js/dojo1.0/dijit/tests/_base/test_FocusManager.html
New file
0,0 → 1,45
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>dijit.focus Test</title>
<style type="text/css">
@import "../../../dojo/resources/dojo.css";
@import "../../themes/tundra/tundra.css";
@import "../css/dijitTests.css";
</style>
 
<script type="text/javascript" src="../../../dojo/dojo.js"
djConfig="isDebug: true"></script>
<script type="text/javascript">
dojo.require("dijit._base.focus");
var savedFocus;
dojo.addOnLoad(function(){
fakeWidget = { domNode: dojo.byId("save") };
dojo.subscribe("focusNode", function(node){ console.log("focused on " + (node?(node.id||node.tagName):"nothing"));});
});
function save(){
console.debug("save function");
savedFocus = dijit.getFocus(fakeWidget);
}
function restore(){
dijit.focus(savedFocus);
}
</script>
</head>
<body style="background-color: #fff; color: black; padding: 0; margin: 0" class="tundra">
 
<h3>Focus/Selection Save/Restore Test</h3>
<p>This is for testing whether focus and selection are restored by the focus manager</p>
<form style="border: 2px solid blue;">
<input id=input1 value=tom><br>
<input id=input2 value=jones><br>
<textarea id=textarea>hello there!</textarea><br>
<button id=button>push me</button>
</form>
 
<button id="save" onclick="save();">Save focus/selection state</button>
<button onclick="restore();">Restore focus/selection state</button>
 
</body>
</html>
/trunk/api/js/dojo1.0/dijit/tests/_base/manager.html
New file
0,0 → 1,88
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Dijit manager unit test</title>
<style type="text/css">
@import "../../../dojo/resources/dojo.css";
@import "../css/dijitTests.css";
</style>
<script type="text/javascript" src="../../../dojo/dojo.js"
djConfig="isDebug: true, parseOnLoad: true"></script>
<script type="text/javascript" src="../_testCommon.js"></script>
 
<script type="text/javascript">
dojo.require("doh.runner");
dojo.require("dijit.dijit");
 
dojo.declare("foo", dijit._Widget, {
name: "",
attr1: 0,
attr2: 0
});
 
dojo.declare("bar", dijit._Widget, {
name: "",
attr1: 0,
attr2: 0
});
 
dojo.addOnLoad(function(){
doh.register("dijit._base.manager",
[
function forEachTest(t){
var names=[];
dijit.registry.forEach(function(widget){ names.push(widget.name); });
t.is(names.join(" "), "bob is your uncle");
},
function filterTest(t){
var names=[];
dijit.registry.
filter(function(widget){ return widget.attr1==10; }).
forEach(function(widget){ names.push(widget.name); });
t.is(names.join(" "), "bob uncle");
},
function byId(t){
t.is(dijit.byId("three").name, "your");
},
function byClass(t){
var names=[];
dijit.registry.
byClass("bar").
forEach(function(widget){ names.push(widget.name); });
t.is(names.join(" "), "your uncle");
},
function deleteTest(t){
var names=[];
dijit.byId("two").destroy();
dijit.byId("four").destroy();
var names=[];
dijit.registry.forEach(function(widget){ names.push(widget.name); });
t.is(names.join(" "), "bob your");
},
function getEnclosingWidgetTest(t){
t.is(dijit.getEnclosingWidget(dojo.byId("not-a-widget")), null);
t.is(dijit.getEnclosingWidget(dojo.byId("three")).name, "your");
t.is(dijit.getEnclosingWidget(dojo.byId("three.one")).name, "your");
t.is(dijit.getEnclosingWidget(dojo.byId("three.one.one")).name, "your");
}
]
);
doh.run();
});
 
</script>
</head>
<body>
<h1>Dijit Manager Unit Test</h1>
<div dojoType="foo" id="one" name="bob" attr1="10" attr2="10"></div>
<div dojoType="foo" id="two" name="is" attr1="5" attr2="10"></div>
<div dojoType="bar" id="three" name="your" attr1="5" attr2="5">
<div id="three.one">
<div id="three.one.one"></div>
</div>
</div>
<div dojoType="bar" id="four" name="uncle" attr1="10" attr2="5"></div>
<div id="not-a-widget"></div>
</body>
</html>
/trunk/api/js/dojo1.0/dijit/tests/_base/test_placeStrict.html
New file
0,0 → 1,400
<?xml version="1.0" encoding="UTF-8"?>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>dijit.place tests</title>
<script type="text/javascript" src="../../../dojo/dojo.js"
djConfig="isDebug: true, extraLocale: ['de-de', 'en-us']"></script>
<script type="text/javascript">
dojo.require("dijit.dijit");
</script>
<script>
dojo.addOnLoad(function(){
var vp = dijit.getViewport();
alert("viewport w="+vp.w + ", h=" + vp.h);
});
</script>
<style type="text/css">
@import "../../../dojo/resources/dojo.css";
@import "../../themes/tundra/tundra.css";
@import "../css/dijitTests.css";
 
body {
padding: 1em;
}
.formQuestion {
background-color:#d0e3f5;
padding:0.3em;
font-weight:900;
font-family:Verdana, Arial, sans-serif;
font-size:0.8em;
color:#5a5a5a;
}
.formAnswer {
background-color:#f5eede;
padding:0.3em;
margin-bottom:1em;
}
.pageSubContentTitle {
color:#8e8e8e;
font-size:1em;
font-family:Verdana, Arial, sans-serif;
margin-bottom:0.75em;
}
.small {
width: 2.5em;
}
.medium {
width: 10em;
}
.long {
width: 20em;
}
 
.dojoValidationTextBoxMessage {
display: inline;
margin-left: 1em;
font-weight: bold;
font-style: italic;
font-family: Arial, Verdana, sans-serif;
color: #f66;
font-size: 0.9em;
}
 
.noticeMessage {
font-weight: normal;
font-family:Arial, Verdana, sans-serif;
color:#663;
font-size:0.9em;
}
</style>
</head>
 
<body class=tundra>
<h2 class="pageSubContentTitle">Test dijit.place</h2>
<p>Currently this just tests getViewport(). Change the size of your browser window and then reload,
and see if it reports the browser window size correctly.<br>
<p>All the text below is just filler text...<br>
<!-- to test form submission, you'll need to create an action handler similar to
http://www.utexas.edu/teamweb/cgi-bin/generic.cgi -->
<form id="form1" action="" name="example" method="post">
 
<div class="formQuestion">
<span class="emphasize"><label for="q01">First Name: </label></span>
<span class="noticeMessage"> TextBox class, <b>tabIndex=2</b>, Attributes: {trim: true, ucFirst: true, class: 'medium'}, First letter of each word is upper case.</span>
</div>
<div class="formAnswer">
<input id="q01" type="text" name="firstname" value="testing testing" class="medium" tabIndex=2
dojoType="dijit.form.TextBox"
trim="true"
ucfirst="true" />
</div>
 
<div class="formQuestion">
<span class="emphasize"><label for="q02">Last Name: </label></span>
<span class="noticeMessage"> TextBox class, Attributes: {trim: true, uppercase: true, class: 'medium'}, all letters converted to upper case. </span>
</div>
<div class="formAnswer">
<input id="q02" type="text" name="lastname" value="testing testing" class="medium"
dojoType="dijit.form.TextBox"
trim="true"
uppercase="true" />
</div>
 
<div class="formQuestion">
<span class="emphasize"><label for="q03">Age: </label></span>
<span class="noticeMessage"> TextBox class, <b>tabIndex=1</b>, Attributes: {trim: true, digit: true, class: 'small'}, all but digits extracted.</span>
</div>
<div class="formAnswer">
<input id="q03" type="text" name="age" value="38" class="small" tabIndex=1
dojoType="dijit.form.NumberTextBox"
promptMessage="(optional) Enter an age between 0 and 120"
constraints={places:0,min:0,max:120}
onChange="console.debug('onChange fired for widget id = ' + this.id + ' with value = ' + arguments[0]);"
digit="true"
trim="true"
/>
</div>
 
<div class="formQuestion">
<span class="emphasize"><label for="q04">Occupation: </label></span>
<span class="noticeMessage">ValidationTextBox class,
Attributes: {lowercase: true, required: true}. Displays a prompt message if field is missing. </span>
</div>
<div class="formAnswer">
<input id="q04" type="text" name="occupation" class="medium"
dojoType="dijit.form.ValidationTextBox"
lowercase="true"
required="true"
promptMessage="Enter an occupation" />
</div>
 
<div class="formQuestion">
<span class="emphasize"><label for="q05">Elevation: </label></span>
<span class="noticeMessage">IntegerTextBox class,
Attributes: {required: true, min:-20000, max:+20000 }, Enter feet above sea level with a sign.</span>
</div>
<div class="formAnswer">
<input id="q05" class="medium"/>
</div>
 
<div class="formQuestion">
<span class="emphasize"><label for="q08">Annual Income: </label></span>
<span class="noticeMessage">CurrencyTextBox class,
Attributes: {fractional: true}. Enter whole and cents. Currency symbol is optional.</span>
</div>
<div class="formAnswer">
<input id="q08" type="text" name="income1" class="medium" value="54775.53"
dojoType="dijit.form.CurrencyTextBox"
required="true"
currency="USD"
invalidMessage="Invalid amount. Include dollar sign, commas, and cents. Example: $12,000.00" />USD
</div>
 
<div class="formAnswer">
<input id="q08eur" type="text" name="income2" class="medium" value="54775.53"
dojoType="dijit.form.CurrencyTextBox"
required="true"
currency="EUR"
invalidMessage="Invalid amount. Include euro sign, commas, and cents. Example: &#x20ac;12,000.00" />EUR
</div>
<!--
<div class="formQuestion">
<span class="emphasize"><label for="q08a">Annual Income: </label></span>
<span class="noticeMessage">Old regexp currency textbox,
Attributes: {fractional: true}. Enter dollars and cents.</span>
</div>
<div class="formAnswer">
<input id="q08a" type="text" name="income3" class="medium" value="$54,775.53"
dojoType="dijit.form.ValidationTextBox"
regExpGen="dojo.regexp.currency"
trim="true"
required="true"
constraints={fractional:true}
invalidMessage="Invalid amount. Include dollar sign, commas, and cents. Example: $12,000.00" />
</div>
 
<div class="formQuestion">
<span class="emphasize"><label for="q09">IPv4 Address: </label></span>
<span class="noticeMessage">IpAddressTextBox class,
Attributes: {allowIPv6: false, allowHybrid: false}. Also Dotted Hex works, 0x18.0x11.0x9b.0x28</span>
</div>
<div class="formAnswer">
<input id="q09" type="text" name="ipv4" class="medium" value="24.17.155.40"
dojoType="dijit.form.ValidationTextBox"
regExpGen="dojo.regexp.ipAddress"
trim="true"
required="true"
constraints={allowIPv6:false,allowHybrid:false}
invalidMessage="Invalid IPv4 address." />
</div>
 
<div class="formQuestion">
<span class="emphasize"><label for="q10"> IPv6 Address: </label></span>
<span class="noticeMessage">IpAddressTextBox class,
Attributes: {allowDottedDecimal: false, allowDottedHex: false}.
Also hybrid works, x:x:x:x:x:x:d.d.d.d</span>
</div>
<div class="formAnswer">
<input id="q10" type="text" name="ipv6" class="long" value="0000:0000:0000:0000:0000:0000:0000:0000"
dojoType="dijit.form.ValidationTextBox"
regExpGen="dojo.regexp.ipAddress"
trim="true"
uppercase = "true"
required="true"
constraints={allowDottedDecimal:false, allowDottedHex:false, allowDottedOctal:false}
invalidMessage="Invalid IPv6 address, please enter eight groups of four hexadecimal digits. x:x:x:x:x:x:x:x" />
</div>
 
<div class="formQuestion">
<span class="emphasize"><label for="q11"> URL: </label></span>
<span class="noticeMessage">UrlTextBox class,
Attributes: {required: true, trim: true, scheme: true}. </span>
</div>
<div class="formAnswer">
<input id="q11" type="text" name="url" class="long" value="http://www.xyz.com/a/b/c?x=2#p3"
dojoType="dijit.form.ValidationTextBox"
regExpGen="dojo.regexp.url"
trim="true"
required="true"
constraints={scheme:true}
invalidMessage="Invalid URL. Be sure to include the scheme, http://..." />
</div>
 
<div class="formQuestion">
<span class="emphasize"><label for="q12"> Email Address </label></span>
<span class="noticeMessage">EmailTextBox class,
Attributes: {required: true, trim: true}. </span>
</div>
<div class="formAnswer">
<input id="q12" type="text" name="email" class="long" value="fred&barney@stonehenge.com"
dojoType="dijit.form.ValidationTextBox"
regExpGen="dojo.regexp.emailAddress"
trim="true"
required="true"
invalidMessage="Invalid Email Address." />
</div>
 
<div class="formQuestion">
<span class="emphasize"><label for="q13"> Email Address List </label></span>
<span class="noticeMessage">EmailListTextBox class,
Attributes: {required: true, trim: true}. </span>
</div>
<div class="formAnswer">
<input id="q13" type="text" name="email" class="long" value="a@xyz.com; b@xyz.com; c@xyz.com; "
dojoType="dijit.form.ValidationTextBox"
regExpGen="dojo.regexp.emailAddressList"
trim="true"
required="true"
invalidMessage="Invalid Email Address List." />
</div>
-->
 
<div class="formQuestion">
<span class="emphasize"><label for="q14"> Date (American format) </label></span>
<span class="noticeMessage">DateTextBox class,
Attributes: {locale: "en-us", required: true}. Works for leap years</span>
</div>
<div class="formAnswer">
<input id="q14" type="text" name="date1" class="medium" value="2005-12-30"
dojoType="dijit.form.DateTextBox"
constraints={locale:'en-us'}
required="true"
promptMessage="mm/dd/yyyy"
invalidMessage="Invalid date. Use mm/dd/yyyy format." />
</div>
 
<div class="formQuestion">
<span class="emphasize"><label for="q15"> Date (German format) </label></span>
<span class="noticeMessage">DateTextBox class,
Attributes: {locale: "de-de", min:2006-01-01, max:2006-12-31}. Works for leap years</span>
</div>
<div class="formAnswer">
<input id="q15" class="medium"/>
</div>
 
<div class="formQuestion">
<span class="emphasize"><label for="q16"> 12 Hour Time </label></span>
<span class="noticeMessage">TimeTextBox class,
Attributes: {formatLength: "medium", required: true, trim: true}</span>
</div>
<div class="formAnswer">
<input id="q16" type="text" name="time1" class="medium" value="5:45:00 pm"
dojoType="dijit.form.ValidationTextBox"
validator="dojo.date.local.parse"
constraints={formatLength:'medium',selector:'time'}
trim="true"
required="true"
invalidMessage="Invalid time." />
</div>
 
<div class="formQuestion">
<span class="emphasize"><label for="q17"> 24 Hour Time</label></span>
<span class="noticeMessage">TimeTextBox class,
Attributes: {displayFormat:"HH:mm:ss", required: true, trim: true}</span>
</div>
<div class="formAnswer">
<input id="q17" type="text" name="time2" class="medium" value="17:45:00"
dojoType="dijit.form.ValidationTextBox"
validator="dojo.date.local.parse"
constraints={formatLength:'short',selector:'time',timePattern:'HH:mm:ss'}
trim="true"
required="true"
invalidMessage="Invalid time. Use HH:mm:ss where HH is 00 - 23 hours." />
</div>
 
<!--
<div class="formQuestion">
<span class="emphasize"><label for="q18"> US State 2 letter abbr. </label></span>
<span class="noticeMessage">UsStateTextBox class,
Attributes: {required: true, trim: true, uppercase: true}</span>
</div>
<div class="formAnswer">
<input id="q18" type="text" name="state" class="small" value="CA"
dojoType="dijit.form.ValidationTextBox"
regExpGen="dojo.regexp.us.state"
constraints={allowTerritories:false}
trim="true"
uppercase="true"
required="true"
invalidMessage="Invalid US state abbr." />
</div>
 
<div class="formQuestion">
<span class="emphasize"><label for="q19"> US Zip Code </label></span>
<span class="noticeMessage">UsZipTextBox class,
Attributes: {required: true, trim: true} Five digit Zip code or 5 + 4.</span>
</div>
<div class="formAnswer">
<input id="q19" type="text" name="zip" class="medium" value="98225-1649"
dojoType="dijit.form.ValidationTextBox"
validator="dojo.validate.us.isZipCode"
trim="true"
required="true"
invalidMessage="Invalid US Zip Code." />
</div>
 
<div class="formQuestion">
<span class="emphasize"><label for="q20"> US Social Security Number </label></span>
<span class="noticeMessage">UsSocialSecurityNumberTextBox class,
Attributes: {required: true, trim: true} </span>
</div>
<div class="formAnswer">
<input id="q20" type="text" name="ssn" class="medium" value="123-45-6789"
dojoType="dijit.form.ValidationTextBox"
validator="dojo.validate.us.isSocialSecurityNumber"
trim="true"
required="true"
invalidMessage="Invalid US Social Security Number." />
</div>
 
<div class="formQuestion">
<span class="emphasize"><label for="q21"> 10-digit US Phone Number </label></span>
<span class="noticeMessage">UsPhoneNumberTextBox class,
Attributes: {required: true, trim: true} </span>
</div>
<div class="formAnswer">
<input id="q21" type="text" name="phone" class="medium" value="(123) 456-7890"
dojoType="dijit.form.ValidationTextBox"
validator="dojo.validate.us.isPhoneNumber"
trim="true"
required="true"
invalidMessage="Invalid US Phone Number." />
</div>
-->
<div class="formQuestion">
<span class="emphasize"><label for="q22"> Regular Expression </label></span>
<span class="noticeMessage">RegexpTextBox class,
Attributes: {required: true} </span>
</div>
<div class="formAnswer">
<input id="q22" type="text" name="phone" class="medium" value="someTestString"
dojoType="dijit.form.ValidationTextBox"
regExp="[\w]+"
required="true"
invalidMessage="Invalid Non-Space Text." />
</div>
 
<div class="formQuestion">
<span class="emphasize"><label for="q23"> Password </label></span>
<span class="noticeMessage">(just a test that type attribute is obeyed) </span>
</div>
<div class="formAnswer">
<input id="q23" type="password" name="password" class="medium"
dojoType="dijit.form.TextBox" />
</div>
 
<div class="formQuestion">
<span class="emphasize"><label for="ticket1651">Trac ticket 1651: </label></span>
<span class="noticeMessage">value: null should show up as empty</span>
</div>
<div class="formAnswer">
<input id="ticket1651" class="medium" value="not null"/>
</div>
 
<button name="button" onclick="displayData(); return false;">view data</button>
<input type="submit" name="submit" />
</form>
</body>
</html>
/trunk/api/js/dojo1.0/dijit/tests/_base/test_typematic.html
New file
0,0 → 1,56
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Typematic Test</title>
<style type="text/css">
@import "../../../dojo/resources/dojo.css";
@import "../../themes/tundra/tundra.css";
@import "../css/dijitTests.css";
</style>
 
<script type="text/javascript" src="../../../dojo/dojo.js"
djConfig="isDebug: true, debugAtAllCosts: true"></script>
<script type="text/javascript">
dojo.require("dijit._base.typematic");
 
var lastCount = 0;
function typematicCallBack(count, node, evt){
var inputNode = dojo.byId('typematicInput');
if (node == inputNode){
key = "a";
}else{
key = "b";
}
if(-1 == count){
console.debug((lastCount+1) + ' ' + key + ' events');
}else{
lastCount = count;
inputNode.value += key;
}
inputNode.focus();
}
dojo.addOnLoad(function(){
var keyNode = dojo.byId('typematicInput');
var mouseNode = dojo.byId('typematicButton');
dijit.typematic.addKeyListener(keyNode,
{
keyCode:dojo.keys.F10,
ctrlKey:true
},
this, typematicCallBack, 200, 200);
dijit.typematic.addMouseListener(mouseNode,
this, typematicCallBack, 0.9, 200);
keyNode.focus(); // make it easier to type
});
</script>
</head>
<body class="tundra">
 
<h2>Dijit typematic tests</h2>
Press and hold the <b>ctrl+F10</b> keys to see a's typed (constant rate) in the input field,<br>
or left-mouse click the button and hold down to see b's typed (increasing rate) in the input field.<br>
<input id="typematicInput" size="500"><button id="typematicButton">to B or not to B</button>
 
</body>
</html>
/trunk/api/js/dojo1.0/dijit/tests/_base/viewport.html
New file
0,0 → 1,79
<html>
<head>
<title>dijit.getViewport() test</title>
<style type="text/css">
@import "../../../dojo/resources/dojo.css";
@import "../css/dijitTests.css";
html, body { margin: 0px; padding: 0px; }
</style>
<script type="text/javascript" src="../../../dojo/dojo.js"
djConfig="isDebug: false, parseOnLoad: false"></script>
<script type="text/javascript" src="../_testCommon.js"></script>
 
<script type="text/javascript">
dojo.require("doh.runner");
dojo.require("dijit.dijit");
 
function compute(){
var d = dojo.marginBox(dojo.byId("documentBorder")),
v = dijit.getViewport();
dojo.byId("results").innerHTML +=
"Document is " + d.w + "px x " + d.h + "px" +
", viewport is " + v.w + "px x " + v.h + "px" +
", with scroll offset of (" + v.l + ", " + v.t + ")<br>";
}
function addText(){
dojo.byId("results").innerHTML += "Adding text...<br><br>";
var text="";
for(var i=0;i<100;i++){
text += "<span style='white-space: nowrap'>";
for(var j=0;j<3;j++){ text += "Now is the time for all good men to come to the aid of their country."; }
text += "</span><br>";
}
dojo.byId("documentBorder").innerHTML += text;
}
 
dojo.addOnLoad(function(){
doh.register("dijit._base.manager",
[
function initial(t){
console.log("calling compute");
compute();
console.log("called compute");
var d = dojo.marginBox(dojo.byId("documentBorder")),
v = dijit.getViewport();
doh.t(v.h > d.h);
},
function expand(t){
var v = dijit.getViewport();
addText();
compute();
var v2 = dijit.getViewport();
doh.t(v2.h <= v.h);
doh.t(v2.h+20 >= v.h);
}
]
);
doh.run();
});
 
</script>
</head>
<body>
<div id="documentBorder" style="border: solid red 2px;">
<h1>dijit.getViewport() test</h1>
<div style="padding: 10px; border: solid blue 1px;">padding div</div>
<button onclick="addText(); compute();">add text and compute size</button>
<button onclick="compute();">recompute size</button>
<ol>
<li>check results div below to see that before adding text, document is smaller than viewport
<li>after adding text, document should be bigger than viewport,and check that viewport size hasn't changed,
except maybe being a little bit smaller (about 15px) because of the size of the scrollbars
<li>resize browser window and click the "recompute size" button; reported viewport size should change
<li>scroll the window and click "recompute size" to see that the scroll position is taken into effect
</ol>
<div id=results style="border: 5px solid blue;">
</div>
</body>
</html>
/trunk/api/js/dojo1.0/dijit/tests/_base/wai.html
New file
0,0 → 1,115
<html>
<head>
<title>Dijit wai unit test</title>
<script type="text/javascript" src="../../../dojo/dojo.js"
djConfig="isDebug: true"></script>
<script type="text/javascript">
dojo.require("doh.runner");
dojo.require("dijit.dijit");
 
dojo.addOnLoad(function(){
doh.register("dijit.tests._base.wai",
[
function getWaiRoleOnElementWithNoRole(){
var elem = dojo.byId("no-role-or-states");
doh.assertFalse(dijit.hasWaiRole(elem));
doh.assertEqual("", dijit.getWaiRole(elem));
},
 
function getEmptyWairoleRole(){
var elem = dojo.byId("empty-wairole");
doh.assertTrue(dijit.hasWaiRole(elem));
doh.assertEqual("", dijit.getWaiRole(elem));
},
 
function getWairoleRole(){
var elem = dojo.byId("wairole");
doh.assertTrue(dijit.hasWaiRole(elem));
doh.assertEqual("menuitem", dijit.getWaiRole(elem));
},
 
function getUnprefixedRole(){
var elem = dojo.byId("unprefixed-role");
doh.assertTrue(dijit.hasWaiRole(elem));
doh.assertEqual("menuitem", dijit.getWaiRole(elem));
},
 
function setWaiRole(){
var div = document.createElement("div");
dijit.setWaiRole(div, "menuitem");
if(dojo.isFF && dojo.isFF < 3){
doh.assertEqual("wairole:menuitem",
div.getAttribute("role"));
}else{
doh.assertEqual("menuitem",
div.getAttribute("role"));
}
},
 
function removeWaiRole(){
var div = document.createElement("div");
dijit.setWaiRole(div, "menuitem");
dijit.removeWaiRole(div);
if(div.hasAttribute){
doh.assertFalse(div.hasAttribute("role"));
}else{
doh.assertTrue(div.getAttribute("role") == null
|| div.getAttribute("role") == "");
}
},
 
function getWaiStateOnElementWithNoState(){
var elem = dojo.byId("no-role-or-states");
doh.assertFalse(dijit.hasWaiState(elem, "checked"));
doh.assertEqual("", dijit.getWaiState(elem, "checked"));
},
 
function getWaiState(){
if(dojo.isFF && dojo.isFF < 3){
var div = document.createElement("div");
div.setAttributeNS("http://www.w3.org/2005/07/aaa",
"aaa:checked", "true");
doh.assertTrue(dijit.hasWaiState(div, "checked"));
doh.assertEqual("true",
dijit.getWaiState(div, "checked"));
}else{
var elem = dojo.byId("checked");
doh.assertTrue(dijit.hasWaiState(elem, "checked"));
doh.assertEqual("true",
dijit.getWaiState(elem, "checked"));
}
},
 
function setWaiState(){
var div = document.createElement("div");
dijit.setWaiState(div, "checked", "true");
if(dojo.isFF && dojo.isFF < 3){
doh.assertEqual("true",
div.getAttributeNS("http://www.w3.org/2005/07/aaa",
"checked"));
}else{
doh.assertEqual("true",
div.getAttribute("aria-checked"));
}
},
 
function removeWaiState(){
var div = document.createElement("div");
dijit.setWaiState(div, "checked", "true");
dijit.removeWaiState(div, "checked");
doh.assertEqual("", dijit.getWaiState(div, "checked"));
}
]
);
doh.run();
});
</script>
</head>
<body>
<div id="no-role-or-states"></div>
<div id="empty-wairole" role="wairole:"></div>
<div id="wairole" role="wairole:menuitem"></div>
<div id="unprefixed-role" role="menuitem"></div>
<div id="checked" aria-checked="true"></div>
</body>
</html>
/trunk/api/js/dojo1.0/dijit/tests/_base/manager.js
New file
0,0 → 1,9
if(!dojo._hasResource["dijit.tests._base.manager"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.tests._base.manager"] = true;
dojo.provide("dijit.tests._base.manager");
 
if(dojo.isBrowser){
doh.registerUrl("dijit.tests._base.manager", dojo.moduleUrl("dijit", "tests/_base/manager.html"));
}
 
}
/trunk/api/js/dojo1.0/dijit/tests/_base/test_focusWidget.html
New file
0,0 → 1,130
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>dijit.focus Test</title>
<style type="text/css">
@import "../../../dojo/resources/dojo.css";
@import "../../themes/tundra/tundra.css";
@import "../css/dijitTests.css";
</style>
 
<script type="text/javascript" src="../../../dojo/dojo.js"
djConfig="isDebug: true, parseOnLoad: true"></script>
<script type="text/javascript">
dojo.require("dijit.form.DateTextBox");
dojo.require("dijit.form.ComboBox");
dojo.require("dijit.form.NumberSpinner");
dojo.require("dijit.form.Button");
dojo.require("dijit.Menu");
dojo.require("dijit.layout.ContentPane");
 
var queue=[];
var animation;
function animateBorderColor(widget, color, startWidth, endWidth){
if(animation){
queue.push(arguments);
return;
}
with(widget.domNode.style){
borderStyle="solid";
outlineStyle="solid";
 
}
animation = dojo.animateProperty({
node: widget.domNode,
duration: 400,
properties: {
// depending on browser and node type, sometimes border or outline is ineffective.
// doing both seems to work in all cases though (for at least one of them)
borderColor: { end: color },
borderWidth: { start: startWidth, end: endWidth },
outlineColor: { end: color },
outlineWidth: { start: startWidth, end: endWidth }
},
onEnd: function(){
animation=null;
if(queue.length){
animateBorderColor.apply(null, queue.shift());
}
}
});
animation.play();
}
 
dojo.addOnLoad(function(){
dojo.subscribe("widgetFocus", function(widget){
console.log("focused on widget " + (widget?widget:"nothing"));
animateBorderColor(widget, "#ff0000", 2, 5);
});
dojo.subscribe("widgetBlur", function(widget){
console.log("blurred widget " + (widget?widget:"nothing"));
animateBorderColor(widget, "#0000ff", 5, 2);
});
dojo.subscribe("focusNode", function(node){ console.log("focused on node " + (node?(node.id||node.tagName):"nothing"));});
});
</script>
<style>
div, fieldset, form, input {
padding: 10px;
margin: 10px;
border: 2px solid blue;
}
</style>
</head>
<body style="background-color: #fff; color: black; padding: 0; margin: 0" class="tundra">
 
<h3>Widget Focus Test</h3>
<p>
This is for testing code to detect onBlur and onFocus on a widget level.<br>
Focused widgets' borders will turn red.<br>
Also, heck the console log for focus and blur events on widgets.
</p>
 
<label for="fieldset1">a form ContentPane widget:</label><br>
<form dojoType="dijit.layout.ContentPane">
<label for="first">simple input: </label><input id=first><br>
 
<label for="fieldset1">a fieldset ContentPane widget:</label><br>
<fieldset id=fieldset1 dojoType="dijit.layout.ContentPane">
<label for="select">a ComboBox widget:</label>
<select id=select dojoType="dijit.form.ComboBox">
<option>this</option>
<option>is</option>
<option>a</option>
<option>list</option>
</select>
<label for="plain">a plain input:</label>
<input id=plain value=plain>
</fieldset>
<br>
<label for="fieldset1">another fieldset ContentPane:</label><br>
<fieldset id=fieldset2 dojoType="dijit.layout.ContentPane">
<label for="date">a DateTextBox widget:</label>
<input id=date dojoType="dijit.form.DateTextBox"><br>
 
<label for="textarea">a plain textarea:</label><br>
<textarea id=textarea>hello there!</textarea><br>
 
<label for="spinner">a Spinner widget:</label>
<input id=spinner dojoType="dijit.form.NumberSpinner" value=100><br>
 
<label for="button">a Combobutton widget:</label>
<div id=button dojoType="dijit.form.ComboButton" tabIndex=0>
<span>push me</span>
<div id=menu dojoType="dijit.Menu">
<div id=mi1 dojoType="dijit.MenuItem">menu item 1</div>
<div id=mi2 dojoType="dijit.MenuItem">menu item 2</div>
<div id=popupMenuItem dojoType="dijit.PopupMenuItem">
<span>submenu</span>
<div id=submenu dojoType="dijit.Menu">
<div id=smi1 dojoType="dijit.MenuItem">submenu item 1</div>
<div id=smi2 dojoType="dijit.MenuItem">submenu item 2</div>
</div>
</div>
</div>
</div>
</fieldset>
</form>
</body>
</html>
/trunk/api/js/dojo1.0/dijit/tests/ondijitclick.html
New file
0,0 → 1,95
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
 
<title>Test Dijit Internal Event: "ondijitclick"</title>
 
<script type="text/javascript" src="../../dojo/dojo.js" djConfig="isDebug: true, parseOnLoad: true"></script>
<script type="text/javascript">
dojo.require("doh.runner");
dojo.require("dijit._Widget");
dojo.require("dojo.parser");
 
dojo.declare("dijit.WidgetWithOndijitclick",
dijit._Widget,
{
clickCount: 0,
_onClick: function() {
this.clickCount++;
},
postCreate: function() {
this.connect(this.domNode, "ondijitclick", "_onClick");
}
}
);
 
dojo.addOnLoad(function(){
doh.register("ondijitclick",
[
{
name: "ondijitclick fires once on a space-key-up",
runTest: function(t){
var w = dijit.byId("widget1");
if (dojo.isSafari){ // safari has error
this.name += " * SKIPPED *";
return;
}
 
// simulate space up
if (document.createEvent){
var e = document.createEvent("KeyboardEvent");
e.initKeyEvent("keyup",true,true,null,false,false,false,false,32,0);
w.domNode.focus();
w.clickCount = 0;
w.domNode.dispatchEvent(e);
t.is(1, w.clickCount);
}
}
},
{
name: "ondijitclick fires once on an enter-key-down",
runTest: function(t){
var w = dijit.byId("widget1");
if (dojo.isSafari){ // safari has error
this.name += " * SKIPPED *";
return;
}
 
// simulate enter down
if (document.createEvent && !dojo.isSafari){
var e = document.createEvent("KeyboardEvent");
e.initKeyEvent("keydown",true,true,null,false,false,false,false,13,0);
w.domNode.focus();
w.clickCount = 0;
w.domNode.dispatchEvent(e);
t.is(1, w.clickCount);
}
}
},
{
name: "ondijitclick fires once on a mouse click",
runTest: function(t){
var w = dijit.byId("widget1");
 
// simulate enter up
if (document.createEvent){
var e = document.createEvent("MouseEvents");
e.initMouseEvent('click', true, true, document.defaultView, 1, 0, 0, 3, 3, false, false, false, false, 0, w.domNode);
w.clickCount = 0;
w.domNode.dispatchEvent(e);
t.is(1, w.clickCount);
}
}
}
]
);
doh.run();
});
 
</script>
</head>
<body class="tundra">
<div id="widget1" dojoType="dijit.WidgetWithOndijitclick"></div>
</body>
</html>
/trunk/api/js/dojo1.0/dijit/tests/_programaticTest.html
New file
0,0 → 1,109
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Dijit raw programatic test suite | The Dojo Toolkit</title>
 
<style type="text/css">
@import "../../dojo/resources/dojo.css";
@import "css/dijitTests.css";
body, html { width:100%; height:100%; margin:0; padding:0; background:#fff !important; }
</style>
 
<script type="text/javascript" src="../../dojo/dojo.js"
djConfig="parseOnLoad: true, isDebug: true"></script>
<script type="text/javascript" src="_testCommon.js"></script>
 
<script language="JavaScript" type="text/javascript">
dojo.require("dojo.data.ItemFileReadStore");
dojo.require("dijit.dijit-all");
 
var randomParams = function(){
// need better params to test passing
return { "length" : 20 };
};
 
var inspectClass = function(fullClassName){
var newDijit, newDijitDom, newDijitParam = null;
var createdWidgets = [];
className = eval(fullClassName); //
 
// just try to make the class:
try{
newDijit = new className({});
createdWidgets.push(newDijit);
}catch(e){
console.warn('new only: ',fullClassName,e);
}
 
// try starting this widget
try{
if (newDijit && newDijit.startup){ newDijit.startup(); }
}catch(e){
console.warn('call startup: ',fullClassName,e);
}
 
// try with a div in the dom
try{
var tmpDiv = dojo.body().appendChild(document.createElement('div'));
newDijitDom = new className({},tmpDiv);
createdWidgets.push(newDijitDom);
}catch(e){
console.warn('attached to div: ',fullClassName,e);
}
 
// lets pass random parameters
try{
var tmpDiv = dojo.body().appendChild(document.createElement('div'));
newDijitParam = new className(randomParams(),tmpDiv);
createdWidgets.push(newDijitParam);
}catch(e){
console.warn('random param test: ',fullClassName,e);
}
// add more tests ...
 
// cleanup after ourselves
dojo.forEach(createdWidgets,function(byeWidget){
try{
if(byeWidget.destroy){ byeWidget.destroy(); }
}catch(e){
console.warn('destroying: ',byeWidget.declaredClass,e,byeWidget);
}
});
 
};
 
var storeError = function(e,request){
console.warn(e,request);
};
var storeReady = function(items,request){
dojo.forEach(items,function(item){
var testClass = theStore.getValue(item,"className");
try{
inspectClass(testClass);
}catch(e){
console.warn(e);
}
});
};
 
var init = function(){
var request = {
query: { },
onComplete: storeReady,
onError: storeError
};
theStore.fetch(request);
};
dojo.addOnLoad(init);
 
</script>
 
</head>
<body>
<div dojoType="dojo.data.ItemFileReadStore" jsId="theStore"
url="../tests/_data/dijits.json"></div>
</body>
</html>
/trunk/api/js/dojo1.0/dijit/tests/test_Calendar.html
New file
0,0 → 1,44
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Calendar Widget Test</title>
<style type="text/css">
@import "../../dojo/resources/dojo.css";
@import "css/dijitTests.css";
</style>
 
<script type="text/javascript" src="../../dojo/dojo.js"
djConfig="parseOnLoad: true, isDebug: true, extraLocale: ['en-us', 'ar-sy', 'es-es', 'zh-cn']"></script>
<script type="text/javascript" src="_testCommon.js"></script>
 
<script type="text/javascript">
dojo.require("dijit._Calendar");
dojo.require("dojo.date.locale");
dojo.require("dojo.parser"); // scan page for widgets
 
function myHandler(id,newValue){
console.debug("onChange for id = " + id + ", value: " + newValue);
}
</script>
</head>
<body>
<h1 class="testTitle">Dijit Calendar Test</h1>
 
before
<input id="calendar1" dojoType="dijit._Calendar" onChange="myHandler(this.id,arguments[0])" lang="en-us">
<input id="calendar2" dojoType="dijit._Calendar" onChange="myHandler(this.id,arguments[0])" lang="es-es">
<input id="calendar3" dojoType="dijit._Calendar" onChange="myHandler(this.id,arguments[0])" lang="zh-cn">
<input id="calendar4" dojoType="dijit._Calendar" onChange="myHandler(this.id,arguments[0])" lang="ar-sy">
after
<p>
<a href="#"
onClick="for(var i=1; i!=5; i++){
var c = dijit.byId('calendar'+i);
c.isDisabledDate=dojo.date.locale.isWeekend;
c._populateGrid();
}
">disable weekends</a>
</p>
</body>
</html>
/trunk/api/js/dojo1.0/dijit/tests/ondijitclick.js
New file
0,0 → 1,9
if(!dojo._hasResource["dijit.tests.ondijitclick"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.tests.ondijitclick"] = true;
dojo.provide("dijit.tests.ondijitclick");
 
if(dojo.isBrowser){
doh.registerUrl("dijit.tests.ondijitclick", dojo.moduleUrl("dijit", "tests/ondijitclick.html"));
}
 
}
/trunk/api/js/dojo1.0/dijit/tests/_Templated.html
New file
0,0 → 1,164
<html>
<head>
<title>_Templated tests</title>
<script type="text/javascript" src="../../dojo/dojo.js"
djConfig="parseOnLoad: true, isDebug: true"></script>
<script type="text/javascript">
dojo.require("doh.runner");
 
dojo.require("dijit._Widget");
dojo.require("dijit._Templated");
 
function getOuterHTML(/*DomNode*/ node){
var wrapper = dojo.doc.createElement("div");
wrapper.appendChild(node);
return wrapper.innerHTML.toLowerCase(); // IE prints <BUTTON> rather than <button>; normalize it.
}
 
dojo.addOnLoad(function(){
// Template with no variables (should be cached as a DOM tree)
dojo.declare("SimpleTemplate", [dijit._Widget, dijit._Templated], {
attributeMap: {},
id: "test1",
templateString: "<button><span>hello &gt; world</span></button>"
});
 
// Template with variables
dojo.declare("VariableTemplate", [dijit._Widget, dijit._Templated], {
attributeMap: {},
id: "test2",
num: 5,
text: "hello ><\"' world",
 
templateString: "<button><span num=\"${num}\">${text}</span></button>"
});
 
// Template that starts with special node (has to be constructed inside a <tbody>)
dojo.declare("TableRowTemplate", [dijit._Widget, dijit._Templated], {
attributeMap: {},
id: "test3",
text: "bar",
templateString: "<tr><td>${text}</td></tr>"
});
 
// Illegal subsitition variable name
dojo.declare("IllegalSubstitution", [dijit._Widget, dijit._Templated], {
templateString: "<tr><td>${fake}</td></tr>"
});
 
// dojoAttachPoint
dojo.declare("AttachPoint", [dijit._Widget, dijit._Templated], {
attributeMap: {foo: "", style: "", bar: "buttonNode"},
templateString: "<div style='border: 1px solid red'>" +
"<button dojoAttachPoint='buttonNode,focusNode'>hi</button>" +
'<span><input dojoAttachPoint="inputNode" value="input"></span>' +
"<span dojoAttachPoint='containerNode'></span>" +
"</div>"
});
 
// dojoAttachEvent
dojo.declare("AttachEvent", [dijit._Widget, dijit._Templated], {
click: function(){ this.clickCalled=true; },
onfocus: function(){ this.focusCalled=true; },
focus2: function(){ this.focus2Called=true; },
templateString: "<table style='border: 1px solid blue'><tr>" +
"<td><button dojoAttachPoint='left' dojoAttachEvent='onclick: click, onfocus'>left</button></td>" +
"<td><button dojoAttachPoint='right' dojoAttachEvent='onclick: click, onfocus: focus2'>right</button></td>" +
"</tr></table>"
});
 
// TODO:
// TemplatePath
 
var testW;
doh.register("dijit.tests._Templated.html",
[
function simple(t){
var widget=new SimpleTemplate();
var wrapper=dojo.byId("simpleWrapper");
wrapper.appendChild(widget.domNode);
t.is('<button widgetid=\"test1\"><span>hello &gt; world</span></button>', wrapper.innerHTML.toLowerCase());
},
function variables(t){
var widget=new VariableTemplate();
var wrapper=dojo.byId("variables1Wrapper");
wrapper.appendChild(widget.domNode);
t.is('<button widgetid=\"test2\"><span num="5">hello &gt;&lt;"\' world</span></button>', wrapper.innerHTML.toLowerCase());
},
 
function variables2(t){
var widget = new VariableTemplate({id: "myid", num: -5, text: ""});
var wrapper=dojo.byId("variables2Wrapper");
wrapper.appendChild(widget.domNode);
t.is('<button widgetid=\"myid\"><span num="-5"></span></button>', wrapper.innerHTML.toLowerCase());
},
function table(t){
var widget=new TableRowTemplate({text: "hello"});
var wrapper = dojo.byId("trWrapper");
wrapper.appendChild(widget.domNode);
var actual = wrapper.innerHTML.toLowerCase().replace(/\r/g, "").replace(/\n/g, "");
t.is('<tr widgetid="test3"><td>hello</td></tr>', actual);
},
function illegal(t){
var hadException=false;
try{
var widget=new IllegalSubstitution();
}catch(e){
console.log(e);
hadException=true;
}
t.t(hadException);
},
function attachPoint(t){
var widget=new AttachPoint();
var wrapper = dojo.byId("attachPointWrapper");
wrapper.appendChild(widget.domNode);
t.is(widget.containerNode.tagName.toLowerCase(), "span");
t.is(widget.buttonNode.tagName.toLowerCase(), "button");
t.is(widget.focusNode.tagName.toLowerCase(), "button");
t.is(widget.inputNode.tagName.toLowerCase(), "input");
},
function attributeMap(t){
var widget=new AttachPoint({foo:"value1", bar:"value2", style:"color: blue"});
var wrapper = dojo.byId("attributeMapWrapper");
wrapper.appendChild(widget.domNode);
t.is("value1", widget.domNode.getAttribute("foo"));
t.is("value2", widget.buttonNode.getAttribute("bar"));
// TODO: this is() check is unreliable, IE returns a string like
// border-right: red 1px solid; border-top: red 1px solid; border-left: red 1px solid; color: blue; border-bottom: red 1px solid
// t.is("border: 1px solid red; color: blue;", widget.domNode.style.cssText.toLowerCase());
},
function attachEvent(t){
var deferred = new doh.Deferred();
var widget=new AttachEvent();
var wrapper = dojo.byId("attachEventWrapper");
wrapper.appendChild(widget.domNode);
widget.left.focus();
widget.right.focus();
setTimeout(function(){
t.t(widget.focusCalled);
t.t(widget.focus2Called);
deferred.callback(true);
}, 0);
return deferred;
}
]
);
doh.run();
});
</script>
<style type="text/css">
@import "../themes/tundra/tundra.css";
</style>
</head>
<body>
<h1>_Templated test</h1>
<div id="simpleWrapper"></div>
<div id="variables1Wrapper"></div>
<div id="variables2Wrapper"></div>
<table><tbody id="trWrapper"></tbody></table>
<div id="attachPointWrapper"></div>
<div id="attributeMapWrapper"></div>
<div id="attachEventWrapper"></div>
</body>
</html>
/trunk/api/js/dojo1.0/dijit/tests/test.html
New file
0,0 → 1,37
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>widget infrastructure test</title>
 
<script type="text/javascript" src="../../dojo/dojo.js"
djConfig="isDebug: true, debugAtAllCosts: true"></script>
 
<script type="text/javascript">
dojo.require("dijit.form.Button");
</script>
 
<style type="text/css">
 
@import "../../dojo/resources/dojo.css";
@import "../themes/tundra/tundra.css";
@import "css/dijitTests.css";
 
body { padding: 5em; }
</style>
</head>
 
<body class="tundra">
 
<button id="b1" style="background: yellow;">button #1</button>
<button id="b2" style="background: orange;">button #2</button>
<button id="b3" style="background: violet;">button #3</button>
<script>
for(var i=1; i<=3; i++){
var node = dojo.byId("b"+i);
var myButton = new dijit.form.Button(null, node);
}
</script>
 
</body>
</html>
/trunk/api/js/dojo1.0/dijit/tests/test_TitlePane.html
New file
0,0 → 1,98
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>TitlePane Test</title>
 
<script type="text/javascript" src="../../dojo/dojo.js"
djConfig="parseOnLoad: true, isDebug: true"></script>
<script type="text/javascript" src="_testCommon.js"></script>
 
<script language="JavaScript" type="text/javascript">
dojo.require("dijit.TitlePane");
dojo.require("dojo.parser"); // scan page for widgets and instantiate them
 
// widgets used inside subpage loaded via href=
dojo.require("dijit.form.Button");
dojo.require("dijit.form.ComboBox");
 
function randomMessageId(){
return Math.floor(Math.random() * 3) + 3;
}
</script>
 
<style type="text/css">
@import "../../dojo/resources/dojo.css";
@import "css/dijitTests.css";
</style>
</head>
<body>
<h1 class="testTitle">Dijit TitlePane Test</h1>
 
<h1>Test #1: plain title pane, width=300px</h1>
<div dojoType="dijit.TitlePane" title="Title Pane #1" style="width: 300px;">
Lorem Ipsum Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Quisque
iaculis, nulla id semper faucibus, pede tellus nonummy magna, vitae adipiscing
orci arcu ut augue. Nunc condimentum, magna a vestibulum convallis, libero purus
pulvinar orci, sed vestibulum urna sem ut pede. More Ipsum...
Sed sollicitudin suscipit risus. Nam ullamcorper. Sed nisl lectus, pellentesque
nec, malesuada eget, ornare a, libero. Lorem ipsum dolor sit amet,
consectetuer adipiscing elit.
</div>
 
<h1>Test #2: title pane with form, width=300px</h1>
 
<div dojoType="dijit.TitlePane" title="Title Pane #2" id="pane_2" style="width: 300px;">
<form>
Age: <input><br>
Discount card <input type=checkbox><br>
<button>Submit</button><br>
</form>
</div>
<br>
 
<h1>Test #3: initially closed pane</h1>
<div dojoType="dijit.TitlePane" title="Initially closed pane" open="false" width="200">
<form>
<title for="age">Age: </title><input id="age"><br>
<title for="discount">Discount card </title><input type=checkbox id="discount"><br>
<button>Submit</button><br>
</form>
</div>
 
<h1>Test #4: title pane with href (initially closed)</h1>
<p>The pane should open to "Loading..." message and then 2 seconds later it should slide open more to show loaded data.</p>
<div dojoType="dijit.TitlePane" duration=1000 title="Pane from href" href="layout/getResponse.php?delay=3000&messId=3" open="false">
Loading...
</div>
 
<h1>Test #5: title pane with href (initially closed)</h1>
<p>The pane should start to open to "Loading..." but halfway through href data will be loaded, and it should expand correctly.</p>
<div dojoType="dijit.TitlePane" duration=1000 title="Pane from href" href="layout/getResponse.php?delay=500&messId=3" open="false">
Loading...
</div>
 
<h1>Test #6: nested title pane</h1>
<div dojoType="dijit.TitlePane" title="Outer pane" width="300">
<p>This is a title pane, containing another title pane ...
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Quisque iaculis, nulla id semper faucibus, pede tellus nonummy magna, vitae adipiscing orci arcu ut augue. Nunc condimentum, magna a vestibulum convallis, libero purus pulvinar orci, sed vestibulum urna sem ut pede.
More Ipsum...
 
<div dojoType="dijit.TitlePane" title="Inner pane" width="250">
<p>And this is the inner title pane...
<p>Sed sollicitudin suscipit risus. Nam ullamcorper. Sed nisl lectus, pellentesque nec, malesuada eget, ornare a, libero. Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
</div>
 
<p>And this is the closing line for the outer title pane.
</div>
 
<table style="border: solid blue 2px; margin-top: 1em;">
<tr>
<td>
Here's some text below the title panes (to make sure that closing a title pane releases the space that the content was taking up)
</td>
</tr>
</table>
 
</body>
</html>
/trunk/api/js/dojo1.0/dijit/tests/test_Declaration.html
New file
0,0 → 1,66
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Dojo Toolkit - Declaration test</title>
<style type="text/css">
@import "../../dojo/resources/dojo.css";
@import "../themes/tundra/tundra.css";
@import "css/dijitTests.css";
</style>
<script type="text/javascript" src="../../dojo/dojo.js"
djConfig="parseOnLoad: true, isDebug: true"></script>
<script type="text/javascript">
dojo.require("dijit.Declaration");
dojo.require("dijit.ProgressBar");
dojo.require("dojo.parser"); // scan page for widgets and instantiate them
</script>
</head>
<body class="tundra">
<h3>Simple macro:</h3>
<p>(Check to make sure that links contain employee number)
<div dojoType="dijit.Declaration" widgetClass="Employee" defaults="{ empid: 123, name: '' }">
<span>${name}</span>
<a href="update.php?id=${empid}">update</a>
<a href="delete.php?id=${empid}">delete</a>
</div>
<div dojoType="Employee" empid="100" name="Alan Allen"></div>
<div dojoType="Employee" empid="101" name="Bob Brown"></div>
<div dojoType="Employee" empid="102" name="Cathy Cameron"></div>
 
<h3>Using dojoAttachEvent, dojoAttachPoint</h3>
<div dojoType="dijit.Declaration" widgetClass="HideButton">
XXX<button dojoAttachEvent="onclick" dojoAttachPoint="containerNode"></button>XXX
<script type='dojo/method' event='onclick'>
this.domNode.style.display="none";
</script>
</div>
<button dojoType="HideButton">Click to hide</button>
<button dojoType="HideButton">Click to hide #2</button>
 
<h3>Extending another widget</h3>
<p>HideButton2 extends HideButton (above) and changes the template (but keeps the onclick handler).</p>
<span dojoType="dijit.Declaration" widgetClass="HideButton2" mixins="HideButton">
YYY<button dojoAttachEvent="onclick" dojoAttachPoint="containerNode"></button>YYY
</span>
<button dojoType="HideButton2">Hide me extended</button>
<button dojoType="HideButton2">Hide me extended #2</button>
 
<h3>Something more complicated:</h3>
<div dojoType="dijit.Declaration" widgetClass="foo" defaults="{ foo: 'thud', progress: 10 }">
<script type='dojo/connect' event='startup'>
this.baz.innerHTML += " (modified by dojo/connect event=startup) ";
</script>
 
<p>thinger blah stuff ${foo}</p>
 
<div style="width:400px" annotate="true" maximum="200"
progress="${progress}" dojoType="dijit.ProgressBar"></div>
<p dojoAttachPoint='baz'>baz thud</p>
</div>
 
<div dojoType="foo" foo="blah" progress="50"></div>
<div dojoType="foo" foo="thinger" progress="73"></div>
 
</body>
</html>
/trunk/api/js/dojo1.0/dijit/tests/test_Editor.html
New file
0,0 → 1,82
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Editor Test</title>
 
<style type="text/css">
@import "../../dojo/resources/dojo.css";
@import "css/dijitTests.css";
</style>
<script type="text/javascript" src="../../dojo/dojo.js"
djConfig="parseOnLoad: true, isDebug: true"></script>
<script type="text/javascript" src="_testCommon.js"></script>
 
<script type="text/javascript" src="../Editor.js"></script>
<script type="text/javascript">
dojo.require("dijit.Editor");
dojo.require("dijit._editor.plugins.AlwaysShowToolbar");
dojo.require("dijit._editor.plugins.EnterKeyHandling");
// dojo.require("dijit._editor.plugins.FontChoice"); // 'fontName','fontSize','formatBlock'
dojo.require("dijit._editor.plugins.TextColor");
dojo.require("dijit._editor.plugins.LinkDialog");
dojo.require("dojo.parser"); // scan page for widgets and instantiate them
</script>
</head>
<body>
 
<h1 class="testTitle"><label for="editor1">Editor + Plugins Test</label></h1>
 
<div style="border: 1px solid black;">
<div dojoType="dijit.Editor" id="editor1"><p>This instance is created from a div directly with default toolbar and plugins</p></div>
</div>
<button onClick="dijit.byId('editor1').destroy()">destroy</button>
<button onclick="console.log(dijit.byId('editor1').getValue().length)">getValue</button>
<hr/>
<div style="border: 1px dotted black;">
<h3><label for="thud">thud - from textarea</label></h3>
<textarea dojoType="dijit.Editor" height=""
extraPlugins="['dijit._editor.plugins.AlwaysShowToolbar']"
styleSheets="../../dojo/resources/dojo.css" id="thud">
<p>
This editor is created from a textarea with AlwaysShowToolbar plugin (don't forget to set height="").
</p>
<p>
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean
semper sagittis velit. Cras in mi. Duis porta mauris ut ligula. Proin
porta rutrum lacus. Etiam consequat scelerisque quam. Nulla facilisi.
Maecenas luctus venenatis nulla. In sit amet dui non mi semper iaculis.
Sed molestie tortor at ipsum. Morbi dictum rutrum magna. Sed vitae
risus.
</p>
</textarea>
<h3>..after</h3>
</div>
<hr/>
<div style="border: 1px dotted black;">
<h3><label for="blah">blah entry</label></h3>
<textarea dojoType="dijit.Editor"
plugins="['bold','italic','|','createLink','foreColor','hiliteColor']"
styleSheets="../../dojo/resources/dojo.css" id="blah">
This instance includes optional toolbar buttons which pull in additional ui (dijit) code.
Note the dojo.require() statements required to pull in the associated editor plugins to make
this work.
</textarea>
<h3>..after</h3>
</div>
<hr/>
<div style="border: 1px dotted black;">
<h3><label for="blah2">Another blah entry</label></h3>
<textarea dojoType="dijit.Editor"
plugins="['bold','italic','|',{name:'dijit._editor.plugins.LinkDialog'}]"
styleSheets="../../dojo/resources/dojo.css" id="blah2">
This instance demos how to:
<ol>
<li>specify which plugins to load (see the plugins property): this instance loads EnterKeyHandling plugin, among others;</li>
<li>specify options for a plugin (see the last item in the plugins array)</li>
</ol>
</textarea>
<h3>..after</h3>
</div>
</body>
</html>
/trunk/api/js/dojo1.0/dijit/tests/css/dijitTests.css
New file
0,0 → 1,56
/* Test file styles for Dijit widgets */
 
body {
background:#fff url("../images/testsBodyBg.gif") repeat-x top left;
padding:2em 2em 2em 2em;
}
 
h1.testTitle {
font-size:2em;
margin:0 0 1em 0;
}
 
/* Icons used in the tests */
 
.plusIcon, .plusBlockIcon {
background-image: url(../images/plus.gif);
background-repeat: no-repeat;
width: 16px;
height: 16px;
}
.plusBlockIcon {
display: block;
}
.noteIcon {
background-image: url(../images/note.gif);
background-repeat: no-repeat;
width: 20px;
height: 20px;
}
.flatScreenIcon {
background-image: url(../images/flatScreen.gif);
background-repeat: no-repeat;
width: 32px;
height: 32px;
}
.dijitTestNodeDialog {
position:absolute;
top:5px;
right:5px;
display:block;
width:200px;
visibility:hidden;
background-color:#fff !important;
color:#000 !important;
border:1px solid #000;
padding:5px;
}
.dijitTestNodeDialog table {
background-color:#fff !important;
}
.dijitTestNodeDialog td {
padding:3px;
}
.dijitTestNodeShowing {
visibility:visible;
}
/trunk/api/js/dojo1.0/dijit/tests/_Templated.js
New file
0,0 → 1,9
if(!dojo._hasResource["dijit.tests._Templated"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.tests._Templated"] = true;
dojo.provide("dijit.tests._Templated");
 
if(dojo.isBrowser){
doh.registerUrl("dijit.tests._Templated", dojo.moduleUrl("dijit", "tests/_Templated.html"));
}
 
}
/trunk/api/js/dojo1.0/dijit/tests/test_ProgressBar.html
New file
0,0 → 1,170
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Dojo Toolkit - ProgressBar test</title>
 
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<style type="text/css">
@import "../../dojo/resources/dojo.css";
@import "css/dijitTests.css";
body {
margin: 1em;
}
.smallred .dijitProgressBarTile {
background:red;
}
.smallred .dijitProgressBarLabel {
display:none;
}
</style>
 
 
<script type="text/javascript" src="../../dojo/dojo.js"
djConfig="parseOnLoad: true, isDebug: true"></script>
<script type="text/javascript" src="_testCommon.js"></script>
 
<script type="text/javascript">
dojo.require("dijit.ProgressBar");
dojo.require("dojo.parser"); // scan page for widgets
dojo.require("dojo.string");
</script>
 
<script type="text/javascript">
 
dojo.addOnLoad(go);
 
function go(){
//TODO: it's a little strange that id must be specified again?
var theBar = new dijit.ProgressBar({id: "testBar", width: 400, annotate: true, maximum: 256, duration: 2000,
report:function(percent){
return dojo.string.substitute("${0} out of ${1} max chars", [this.progress, this.maximum]);
}
}, dojo.byId("testBar"));
 
dojo.byId("test").value="";
dojo.byId("progressValue").focus();
dojo.byId("progressValue").value = dijit.byId("setTestBar").progress;
dojo.byId("maximum").value = dijit.byId("setTestBar").maximum;
dojo.connect(dojo.byId("test"), "onkeyup", null, keyUpHandler);
dojo.connect(dojo.byId("set"), "onclick", null, setParameters);
dojo.connect(dojo.byId("startTimer"), "onclick", null,
function(){ remoteProgress(dijit.byId("timerBar")); } );
 
function indeterminateSetter(id, value){
return function(){
dijit.byId(id).update({'indeterminate': value});
}
}
dojo.connect(dojo.byId("setIndeterminate1True"), "onclick", null,
indeterminateSetter("indeterminateBar1", true));
dojo.connect(dojo.byId("setIndeterminate1False"), "onclick", null,
indeterminateSetter("indeterminateBar1", false));
dojo.connect(dojo.byId("setIndeterminate2True"), "onclick", null,
indeterminateSetter("indeterminateBar2", true));
dojo.connect(dojo.byId("setIndeterminate2False"), "onclick", null,
indeterminateSetter("indeterminateBar2", false));
}
 
// An example of polling on a separate (heartbeat) server thread. This is useful when the progress
// is entirely server bound and there is no existing interaction with the server to determine status.
 
// We don't have a server to run against, but a simple heartbeat implementation might look something
// like this:
 
// function getProgressReport(){
// var dataSource = "http://dojotoolkit.org";
// return dojo.xhrGet({url: dataSource, handleAs: "json", content: {key: "progress"}});
// }
 
// Instead, we'll just tick off intervals of 10
 
var fakeProgress = 0;
function getProgressReport(){
var deferred = new dojo.Deferred();
fakeProgress = Math.min(fakeProgress + 10, 100);
deferred.callback(fakeProgress+"%");
return deferred;
}
 
function remoteProgress(bar){
var _timer = setInterval(function(){
var report = getProgressReport();
report.addCallback(function(response){
bar.update({progress: response});
if(response == "100%"){
clearInterval(_timer);
_timer = null;
return;
}
});
}, 3000); // on 3 second intervals
}
 
function setParameters(){
dijit.byId("setTestBar").update({maximum: dojo.byId("maximum").value, progress: dojo.byId("progressValue").value});
}
 
function keyUpHandler(){
dijit.byId("testBar").update({progress:dojo.byId("test").value.length});
dijit.byId("testBarInt").update({progress:dojo.byId("test").value.length});
dijit.byId("smallTestBar").update({progress:dojo.byId("test").value.length});
}
 
</script>
 
</head>
<body class="tundra">
 
<h1 class="testTitle">Dijit ProgressBar Tests</h1>
 
<h3>Test 1</h3>
Progress Value <input type="text" name="progressValue" id="progressValue" />
<br>
Max Progress Value <input type="text" name="maximum" id="maximum" />
<br>
<input type="button" name="set" id="set" value="set!" />
<br>
<div style="width:400px" annotate="true"
maximum="200" id="setTestBar" progress="20" dojoType="dijit.ProgressBar"></div>
 
<h3>Test 2</h3>
Write here: <input type="text" value="" name="test" maxLength="256" id="test" style="width:300"/>
<br />
<br />
<div id="testBar" style='width:300px'></div>
<br />
Small, without text and background image:
<br />
<div style="width:400px; height:10px" class="smallred"
maximum="256" id="smallTestBar" dojoType="dijit.ProgressBar"></div>
<br />
Show decimal place:
<div places="1" style="width:400px" annotate="true"
maximum="256" id="testBarInt" dojoType="dijit.ProgressBar"></div>
 
<h3>Test 3</h3>
No explicit maximum (both 50%)
<div style="width:400px" annotate="true"
id="implied1" progress="50" dojoType="dijit.ProgressBar"></div>
<br />
<div style="width:400px" annotate="true"
id="implied2" progress="50%" dojoType="dijit.ProgressBar"></div>
 
<h3>Test 4</h3>
<input type="button" name="startTimer" id="startTimer" value="Start Timer" />
<div style="width:400px" id="timerBar" annotate="true"
maximum="100" progress="0" dojoType="dijit.ProgressBar"></div>
 
<h3>Test 5 - indeterminate progess</h3>
<input type="button" name="setIndeterminate1True" id="setIndeterminate1True" value="Make Indeterminate" />
<input type="button" name="setIndeterminate1False" id="setIndeterminate1False" value="Make Determinate" />
<div style="width:400px" indeterminate="true" id="indeterminateBar1"
dojoType="dijit.ProgressBar"></div>
<input type="button" name="setIndeterminate2True" id="setIndeterminate2True" value="Make Indeterminate" />
<input type="button" name="setIndeterminate2False" id="setIndeterminate2False" value="Make Determinate" />
<div style="width:400px" progress="50" id="indeterminateBar2"
dojoType="dijit.ProgressBar"></div>
 
</body>
</html>
/trunk/api/js/dojo1.0/dijit/tests/tree/test_Tree_DnD.html
New file
0,0 → 1,223
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Dijit Tree Test</title>
 
<style someProperty="text/css">
@import "../../../dojo/resources/dojo.css";
@import "../../themes/tundra/tundra.css";
@import "../../themes/tundra/tundra_rtl.css";
@import "../css/dijitTests.css";
@import "../dndDefault.css";
@import "../../../dojo/resources/dojo.css";
@import "../../../dojo/resources/dnd.css";
@import "../../../dojo/tests/dnd/dndDefault.css";
</style>
 
<script someProperty="text/javascript" src="testBidi.js"></script>
 
<script someProperty="text/javascript" src="../../../dojo/dojo.js"
djConfig="parseOnLoad: true, isDebug: true"></script>
 
<script language="JavaScript" someProperty="text/javascript">
dojo.require("dojo.data.ItemFileWriteStore");
dojo.require("dijit.Tree");
dojo.require("dijit._tree.dndSource");
dojo.require("dijit.Menu");
dojo.require("dijit.form.Button");
dojo.require("dojo.parser"); // scan page for widgets and instantiate them
 
dojo.require("dojo.dnd.common");
dojo.require("dojo.dnd.Source");
 
selected=[];
 
globalId=1000;
lastSelected=null;
 
dojo.addOnLoad(function(){
//record the selection from tree 1
dojo.subscribe("myTree", null, function(message){
if(message.event=="execute"){
console.log("Tree1 Select: ",dijit.byId("myTree").store.getLabel(message.item));
lastSelected=selected["myTree"]=message.item;
}
});
 
//record the selection from tree 2
dojo.subscribe("myTree2", null, function(message){
if(message.event=="execute"){
console.log("Tree2 Select: ",dijit.byId("myTree2").store.getLabel(message.item));
lastSelected=selected["myTree2"]=message.item;
}
});
 
//connect to the add button and have it add a new container to the store as necessary
dojo.connect(dijit.byId("addButton"), "onClick", function(){
var pInfo = {
parent: lastSelected,
attribute: "children"
};
 
//store.newItem({name: dojo.byId('newCat').value, id:globalId++, numberOfItems:dojo.byId('numItems').value}, pInfo);
catStore.newItem({name: dojo.byId('newCat').value, numberOfItems:0,id:globalId++}, pInfo);
});
 
//since we don't have a server, we're going to connect to the store and do a few things the server/store combination would normal be taking care of for us
dojo.connect(catStore, "onNew", function(item, pInfo){
var p = pInfo.item;
if (p) {
var currentTotal = catStore.getValues(p, "numberOfItems")[0];
catStore.setValue(p, "numberOfItems", ++currentTotal);
}
});
 
 
tree1 = dijit.byId('myTree');
tree2 = dijit.byId('myTree2');
});
 
 
//create a custom label for tree one consisting of the label property pluss the value of the numberOfItems Column
function tree1CustomLabel(item){
var label = catStore.getLabel(item);
var num = catStore.getValues(item,"numberOfItems");
//return the new label
return label + ' (' + num+ ')';
}
 
 
//custom function to handle drop for tree two. Items dropped onto nodes here should be applied to the items attribute in this particular store.
function tree2CustomDrop(source,nodes,copy){
if (this.containerState=="Over"){
this.isDragging=false;
var target= this.current;
var items = this.itemCreator(nodes, target);
 
if (!target || target==this.tree.domNode){
for (var i=0; i<items.length;i++){
this.tree.store.newItem(items[i],null);
}
}else {
for (var i=0; i<items.length;i++){
pInfo={parent:dijit.getEnclosingWidget(target).item, attribute:"items"};
this.tree.store.newItem(items[i],pInfo);
}
}
}
}
 
//on tree two, we only want to drop on containers, not on items in the containers
function tree2CheckItemAcceptance(node,source) {
var item = dijit.getEnclosingWidget(node).item;
if (item && this.tree.store.hasAttribute(item,"numberOfItems")){
var numItems=this.tree.store.getValues(item, "numberOfItems");
return true;
}
return false;
}
 
function tree2ItemCreator(nodes){
var items = []
 
for(var i=0;i<nodes.length;i++){
items.push({
"name":nodes[i].textContent,
"id": nodes[i].id
});
}
return items;
}
 
function dndAccept(source,nodes){
if (this.tree.id=="myTree"){
return false;
}
return true;
}
 
function getIcon(item) {
if (!item || catStore.hasAttribute(item, "numberOfItems")) {
return "myFolder";
}
return "myItem"
}
</script>
 
<style>
.myFolder{
display: "block";
width: 16px;
height: 16px;
background: blue;
}
 
.myItem{
display: "block";
width: 16px;
height: 16px;
background: green;
 
}
</style>
 
</head>
<body class="tundra">
<h1 class="testTitle">Dijit Tree Test - Drag And Drop Support</h1>
 
<div dojoType="dojo.data.ItemFileWriteStore" jsId="catStore"
url="../_data/categories.json"></div>
 
<table width="100%" style="margin:5px solid gray" >
 
<tr style="width:100%">
<td style="width: 50%">
<h2>Custom</h2>
<p>Should add this category to the store. The second parameter is the value for numberOfItems.</p>
<div class="container">
<input id="newCat" type="text" value="Pottedmeat" /><input id="numItems" type="text" value="0" size="3"/><div id="addButton" dojoType="dijit.form.Button">Add Category</div>
</div>
</td>
<td>
<h2>Items: </h2>
<p>List of Items to be categorized<p>
<div dojoType="dojo.dnd.Source" jsId="c2" class="container" style="height: 100px; overflow: auto">
<div class="dojoDndItem" id="1001">Apple</div>
<div class="dojoDndItem" id="1002">Orange</div>
<div class="dojoDndItem" id="1003">Banana</div>
<div class="dojoDndItem" id="1004">Tomato</div>
<div class="dojoDndItem" id="1005">Pepper</div>
<div class="dojoDndItem" id="1006">Wheat</div>
<div class="dojoDndItem" id="1007">Corn</div>
<div class="dojoDndItem" id="1008">Spinach</div>
<div class="dojoDndItem" id="1009">Cucumber</div>
<div class="dojoDndItem" id="1010">Carot</div>
<div class="dojoDndItem" id="1011">Potato</div>
<div class="dojoDndItem" id="1012">Grape</div>
<div class="dojoDndItem" id="1013">Lemon</div>
<div class="dojoDndItem" id="1010">Letuce</div>
<div class="dojoDndItem" id="1010">Peanut</div>
</div>
</td>
</tr>
<tr>
<td>
<h2>Collection Count Summary</h2>
<p>You can't drop items onto this tree.</p>
<div class="container" dojoType="dijit.Tree" id="myTree" store="catStore" label="Collections"
labelAttr="name" getLabel="tree1CustomLabel" childrenAttr="children" dndController="dijit._tree.dndSource"
checkAcceptance="dndAccept" getIconClass="getIcon"></div>
</td>
<td>
<h2>Collection</h2>
<p>Drop items onto this tree, but only on categories, should fail to let you drop on other items.</p>
<div class="container" dojoType="dijit.Tree" id="myTree2" label="Collections" store="catStore" labelAttr="name" childrenAttr="children, items" dndController="dijit._tree.dndSource" onDndDrop="tree2CustomDrop" checkAcceptance="dndAccept" checkItemAcceptance="tree2CheckItemAcceptance" getIconClass="getIcon"></div>
</td>
</tr>
</table>
 
</body>
</html>
/trunk/api/js/dojo1.0/dijit/tests/test_ColorPalette.html
New file
0,0 → 1,54
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>ColorPalette Test</title>
 
 
<script type="text/javascript" src="../../dojo/dojo.js"
djConfig="isDebug: true, parseOnLoad: true"></script>
<script type="text/javascript" src="_testCommon.js"></script>
 
<script language="JavaScript" type="text/javascript">
dojo.require("dijit.ColorPalette");
dojo.require("dojo.parser"); // scan page for widgets and instantiate them
</script>
<script>
var palette;
function init(){
var date0 = new Date();
palette = new dijit.ColorPalette({palette: "7x10", id: "progPalette"}, dojo.byId("programPalette"));
console.log("creation time: " + (new Date() - date0) );
}
 
dojo.addOnLoad(init);
 
function setColor(color){
var theSpan = dojo.byId("outputSpan");
theSpan.style.color = color;
theSpan.innerHTML = color;
}
</script>
<style type="text/css">
@import "../../dojo/resources/dojo.css";
@import "css/dijitTests.css";
</style>
</head>
 
<body>
 
<h1 class="testTitle">dijit.ColorPalette test:</h1>
 
<p>Default color palette (7x10):</p>
<div dojoType="dijit.ColorPalette" onChange="setColor(this.value);"></div>
 
Test color is: <span id="outputSpan"></span>.
 
<p>Small color palette (3x4):</p>
<div dojoType="dijit.ColorPalette" palette="3x4"></div>
 
<p>Default color palette (7x10) created via createWidget:</p>
<div id="programPalette"></div>
 
</body>
</html>
/trunk/api/js/dojo1.0/dijit/tests/test_InlineEditBox.html
New file
0,0 → 1,212
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Inline Edit Box Test</title>
 
<script type="text/javascript" src="../../dojo/dojo.js"
djConfig="isDebug: true, parseOnLoad: true"></script>
<script type="text/javascript" src="_testCommon.js"></script>
 
<script type="text/javascript">
dojo.require("dojo.data.ItemFileReadStore");
dojo.require("dijit.InlineEditBox");
dojo.require("dijit.form.Textarea");
dojo.require("dijit.form.TextBox");
dojo.require("dijit.form.DateTextBox");
dojo.require("dijit.form.CurrencyTextBox");
dojo.require("dojo.currency");
dojo.require("dijit.form.ComboBox");
dojo.require("dijit.form.FilteringSelect");
dojo.require("dijit.form.NumberSpinner");
dojo.require("dijit.form.Slider");
dojo.require("dojo.parser"); // scan page for widgets and instantiate them
 
function myHandler(id,newValue){
console.debug("onChange for id = " + id + ", value: " + newValue);
};
/*
dojo.addOnLoad(function(){
dojo.subscribe("widgetFocus", function(widget){
console.log("focused on widget " + (widget?widget:"nothing"));
});
dojo.subscribe("widgetBlur", function(widget){
console.log("blurred widget " + (widget?widget:"nothing"));
});
dojo.subscribe("focusNode", function(node){ console.log("focused on node " + (node?(node.id||node.tagName):"nothing"));});
});
*/
</script>
<style type="text/css">
@import "../../dojo/resources/dojo.css";
@import "css/dijitTests.css";
 
.inlineEdit { background-color: #CCC76A; }
 
/* some style rules on nodes just to test that style gets copied to the edit widget */
p { font-family: cursive; }
.letter p { font-family: monospace; }
h3 { font-family: helvetica; font-style: italic; }
</style>
</head>
<body>
<h1 class="testTitle">Dijit InlineEditBox Test</h1>
 
<span dojoType="dojo.data.ItemFileReadStore" jsId="stateStore"
url="_data/states.json"></span>
<span dojoType="dojo.data.ItemFileReadStore" jsId="productStore">
<script type="dojo/method">
console.log("doing preamble");
this._jsonData =
{ identifier: 'name',
label: 'name',
items: [
{ name: "refrigerator" },
{ name: "freezer" },
{ name: "stove" },
{ name: "heater" },
]};
</script>
</span>
 
<h2>Form Letter with blanks</h2>
<div class="letter">
<h3 id="editable" dojoType="dijit.InlineEditBox" onChange="myHandler(this.id,arguments[0])" autoSave="true" title="company name"></h3>
<p>
Dear <span dojoType="dijit.InlineEditBox" width="200px" title="recipient name"></span>,
</p>
<p class="letter">
Thank you for your recent order.
Please remit
<span dojoType="dijit.InlineEditBox" editor="dijit.form.CurrencyTextBox" editorParams="{currency: 'USD'}" width="100px" title="dollar amount"></span>
for your purchase of
<span dojoType="dijit.InlineEditBox" editor="dijit.form.NumberSpinner" editorParams="{constraints: {places:0} }" width="70px" title="quantity"></span>
deluxe
<span dojoType="dijit.InlineEditBox" editor="dijit.form.ComboBox" title="item name"
editorParams="{searchAttr: 'name', store: productStore, autocomplete: false, hasDownArrow: false}"
width="200px"></span>
on
<span dojoType="dijit.InlineEditBox" editor="dijit.form.DateTextBox" width="200px" title="purchase date as mm/dd/yy"></span>
in
<span dojoType="dijit.InlineEditBox" editor="dijit.form.FilteringSelect"
editorParams="{searchAttr: 'name', keyAttr: 'abbreviation', store: stateStore, autocomplete: true, hasDownArrow: true}"
width="200px" title="state of purchase"></span>.
</p>
<p dojoType="dijit.InlineEditBox" autoSave="false" editor="dijit.form.Textarea" title="additional details"></p>
<p>
Sincerely,
</p>
<span style="margin-left: 2em; font-family: cursive;" dojoType="dijit.InlineEditBox" width="400px" title="sender name" ></span>
</div>
<hr style="margin-bottom: 1em;">
 
<h2>Form Letter with predefined values, and no auto-save</h2>
<div class="letter">
<h3 id="editable2" dojoType="dijit.InlineEditBox" onChange="myHandler(this.id,arguments[0])" autoSave="false" title="company name">
Bob Vance Refrigeration
</h3>
<p>
Dear <span dojoType="dijit.InlineEditBox" width="200px" autoSave="false" title="recipient name">John</span>,
</p>
<p class="letter">
Thank you for your recent order.
Please remit
<span dojoType="dijit.InlineEditBox" editor="dijit.form.CurrencyTextBox" editorParams="{currency: 'USD'}" width="100px" autoSave="false" title="dollar amount">$2,000</span>
for your purchase of
<span dojoType="dijit.InlineEditBox" editor="dijit.form.NumberSpinner" editorParams="{constraints: {places:0} }" width="70px" autoSave="false" title="quantity">3</span>
deluxe
<span dojoType="dijit.InlineEditBox" editor="dijit.form.ComboBox"
editorParams="{searchAttr: 'name', store: productStore, autocomplete: false, hasDownArrow: false}"
width="200px" autoSave="false" title="item name">refrigerators</span>
on
<span dojoType="dijit.InlineEditBox" editor="dijit.form.DateTextBox" width="200px" autoSave="false" title="purchase date as mm/dd/yy">01/01/2007</span>
in
<span dojoType="dijit.InlineEditBox" editor="dijit.form.FilteringSelect"
editorParams="{searchAttr: 'name', keyAttr: 'abbreviation', store: stateStore, autocomplete: true, hasDownArrow: false}"
width="200px" autoSave="false" title="state of purchase">
Pennsylvania
</span>.
</p>
<p dojoType="dijit.InlineEditBox" autoSave="false" editor="dijit.form.Textarea" title="additional details">
We sincerely appreciate your business and hope we can do business again.
</p>
<p>
Sincerely,
</p>
<span style="margin-left: 2em; font-family: cursive;" dojoType="dijit.InlineEditBox" width="400px" autoSave="false" title="sender name">Bob Vance</span>
</div>
<hr style="margin-bottom: 1em;">
 
 
<h2>Inline-block Text (of 400px width)</h2>
<div>
The following section uses inline block text of 400px.
When clicking the editable text it should bring up an editor which is also 400px wide.
</div>
(before plain inline) <fieldset class="dijitInline"><div style="width: 400px;">hello world</div></fieldset> (after plain inline)
<br>
(before editable inline)
<fieldset class="dijitInline"><div dojoType="dijit.InlineEditBox" onChange="myHandler(this.id,arguments[0])" width="400px" style="width: 400px;">
hello world
</div></fieldset>
(after editable inline)
<hr style="width:100%;">
 
<h2>Pararagraph</h2>
(before plain paragraph)
<p>
Aliquam vitae enim. Duis scelerisque metus auctor est venenatis
imperdiet. Fusce dignissim porta augue. Nulla vestibulum. Integer lorem
nunc, ullamcorper a, commodo ac, malesuada sed, dolor. Aenean id mi in
massa bibendum suscipit. Integer eros. Nullam suscipit mauris. In
pellentesque. Mauris ipsum est, pharetra semper, pharetra in, viverra
quis, tellus. Etiam purus. Quisque egestas, tortor ac cursus lacinia,
felis leo adipiscing nisi, et rhoncus elit dolor eget eros. Fusce ut
quam. Suspendisse eleifend leo vitae ligula. Nulla facilisi. Nulla
rutrum, erat vitae lacinia dictum, pede purus imperdiet lacus, ut
semper velit ante id metus. Praesent massa dolor, porttitor sed,
pulvinar in, consequat ut, leo. Nullam nec est. Aenean id risus blandit
tortor pharetra congue. Suspendisse pulvinar.
</p>
(before editable paragraph. the editable paragraph has Save/Cancel buttons when open.)
<p id="areaEditable" dojoType="dijit.InlineEditBox" autoSave="false" editor="dijit.form.Textarea">
Aliquam vitae enim. Duis scelerisque metus auctor est venenatis
imperdiet. Fusce dignissim porta augue. Nulla vestibulum. Integer lorem
nunc, ullamcorper a, commodo ac, malesuada sed, dolor. Aenean id mi in
massa bibendum suscipit. Integer eros. Nullam suscipit mauris. In
pellentesque. Mauris ipsum est, pharetra semper, pharetra in, viverra
quis, tellus. Etiam purus. Quisque egestas, tortor ac cursus lacinia,
felis leo adipiscing nisi, et rhoncus elit dolor eget eros. Fusce ut
quam. Suspendisse eleifend leo vitae ligula. Nulla facilisi. Nulla
rutrum, erat vitae lacinia dictum, pede purus imperdiet lacus, ut
semper velit ante id metus. Praesent massa dolor, porttitor sed,
pulvinar in, consequat ut, leo. Nullam nec est. Aenean id risus blandit
tortor pharetra congue. Suspendisse pulvinar.
</p>
These links will
<a href="#" onClick="dijit.byId('areaEditable').setDisabled(true)">disable</a> /
<a href="#" onClick="dijit.byId('areaEditable').setDisabled(false)">enable</a>
the InlineEditBox above.
<hr style="width:100%;">
 
<h2>FilteringSelect (no down arrow, and save/cancel buttons):</h2>
before
<span id="filteringSelect2" dojoType="dijit.InlineEditBox" editor="dijit.form.FilteringSelect"
editorParams="{searchAttr: 'name', keyAttr: 'abbreviation', store: stateStore, autocomplete: true, hasDownArrow: false}"
width="200px" autoSave="false">
Indiana
</span>
after
<hr style="width:100%;">
<h2>Programmatically created:</h2>
before block<div style="display:block;" id="programmatic">Click here to edit a block programmatically created inline edit region</div>after
<script type="text/javascript">
// See if we can make a widget in script
dojo.addOnLoad(function(){
var inlineWidget = new dijit.InlineEditBox({renderAsHtml: true}, 'programmatic');
});
</script>
<hr style="width:100%;">
</body>
</html>
/trunk/api/js/dojo1.0/dijit/tests/module.js
New file
0,0 → 1,21
if(!dojo._hasResource["dijit.tests.module"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.tests.module"] = true;
dojo.provide("dijit.tests.module");
 
try{
dojo.require("dijit.tests._base.manager");
dojo.require("dijit.tests._base.viewport");
dojo.require("dijit.tests._base.wai");
dojo.require("dijit.tests._Templated");
dojo.require("dijit.tests.widgetsInTemplate");
dojo.require("dijit.tests.Container");
dojo.require("dijit.tests.layout.ContentPane");
dojo.require("dijit.tests.ondijitclick");
dojo.require("dijit.tests.form.Form");
}catch(e){
doh.debug(e);
}
 
 
 
}
/trunk/api/js/dojo1.0/dijit/tests/test_Tree.html
New file
0,0 → 1,111
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Dijit Tree Test</title>
 
<style type="text/css">
@import "../../dojo/resources/dojo.css";
@import "css/dijitTests.css";
</style>
 
 
<script type="text/javascript" src="../../dojo/dojo.js"
djConfig="parseOnLoad: true, isDebug: true"></script>
<script type="text/javascript" src="_testCommon.js"></script>
 
<script language="JavaScript" type="text/javascript">
dojo.require("dojo.data.ItemFileReadStore");
dojo.require("dijit.Tree");
dojo.require("dijit.ColorPalette");
dojo.require("dijit.Menu");
dojo.require("dojo.parser"); // scan page for widgets and instantiate them
</script>
 
</head>
<body>
 
<h1 class="testTitle">Dijit Tree Test</h1>
 
<div dojoType="dojo.data.ItemFileReadStore" jsId="continentStore"
url="../tests/_data/countries.json"></div>
 
<h3>Tree with hardcoded root node (not corresponding to any item in the store)</h3>
<div dojoType="dijit.Tree" id="mytree" store="continentStore" query="{type:'continent'}"
labelAttr="name" label="Continents">
<script type="dojo/method" event="onClick" args="item">
if(item){
alert("Execute of node " + continentStore.getLabel(item)
+", population=" + continentStore.getValue(item, "population"));
}else{
alert("Execute on root node");
}
</script>
<script type="dojo/method" event="getIconClass" args="item">
return "noteIcon";
</script>
</div>
 
<button onclick="dijit.byId('mytree').destroyRecursive();">destroy</button>
 
<h2>A rootless tree (no "continents" node) with context menus</h2>
 
<ul dojoType="dijit.Menu" id="tree_menu" style="display: none;">
<li dojoType="dijit.MenuItem" onClick="alert('Hello world');">Enabled Item</li>
<li dojoType="dijit.MenuItem" disabled="true">Disabled Item</li>
<li dojoType="dijit.MenuItem" iconClass="dijitEditorIcon dijitEditorIconCut"
onClick="alert('not actually cutting anything, just a test!')">Cut</li>
<li dojoType="dijit.MenuItem" iconClass="dijitEditorIcon dijitEditorIconCopy"
onClick="alert('not actually copying anything, just a test!')">Copy</li>
<li dojoType="dijit.MenuItem" iconClass="dijitEditorIcon dijitEditorIconPaste"
onClick="alert('not actually pasting anything, just a test!')">Paste</li>
<li dojoType="dijit.PopupMenuItem">
<span>Enabled Submenu</span>
<ul dojoType="dijit.Menu" id="submenu2">
<li dojoType="dijit.MenuItem" onClick="alert('Submenu 1!')">Submenu Item One</li>
<li dojoType="dijit.MenuItem" onClick="alert('Submenu 2!')">Submenu Item Two</li>
<li dojoType="dijit.PopupMenuItem">
<span>Deeper Submenu</span>
<ul dojoType="dijit.Menu" id="submenu4">
<li dojoType="dijit.MenuItem" onClick="alert('Sub-submenu 1!')">Sub-sub-menu Item One</li>
<li dojoType="dijit.MenuItem" onClick="alert('Sub-submenu 2!')">Sub-sub-menu Item Two</li>
</ul>
</li>
</ul>
</li>
<li dojoType="dijit.PopupMenuItem" disabled="true">
<span>Disabled Submenu</span>
<ul dojoType="dijit.Menu" id="submenu3" style="display: none;">
<li dojoType="dijit.MenuItem" onClick="alert('Submenu 1!')">Submenu Item One</li>
<li dojoType="dijit.MenuItem" onClick="alert('Submenu 2!')">Submenu Item Two</li>
</ul>
</li>
</ul>
 
<div dojoType="dijit.Tree" id="tree2" store="continentStore" query="{type:'continent'}">
<script type="dojo/connect">
var menu = dijit.byId("tree_menu");
// when we right-click anywhere on the tree, make sure we open the menu
menu.bindDomNode(this.domNode);
 
dojo.connect(menu, "_openMyself", this, function(e){
// get a hold of, and log out, the tree node that was the source of this open event
var tn = this._domElement2TreeNode(e.target);
console.debug(tn);
 
// now inspect the data store item that backs the tree node:
console.debug(tn.item);
 
// contrived condition: if this tree node doesn't have any children, disable all of the menu items
menu.getChildren().forEach(function(i){ i.setDisabled(!tn.item.children); });
 
// IMPLEMENT CUSTOM MENU BEHAVIOR HERE
});
</script>
<script type="dojo/method" event="getIconClass" args="item">
return "noteIcon";
</script>
</div>
 
</body>
</html>
/trunk/api/js/dojo1.0/dijit/tests/_testCommon.js
New file
0,0 → 1,105
/*
_testCommon.js - a simple module to be included in dijit test pages to allow
for easy switching between the many many points of the test-matrix.
 
in your test browser, provides a way to switch between available themes,
and optionally enable RTL (right to left) mode, and/or dijit_a11y (high-
constrast/image off emulation) ... probably not a genuine test for a11y.
 
usage: on any dijit test_* page, press ctrl-f9 to popup links.
 
there are currently (2 themes * 4 tests) * (10 variations of supported browsers)
not including testing individual locale-strings
 
you should not be using this in a production enviroment. include
your css and set your classes manually. for test purposes only ...
*/
 
(function(){
var theme = false; var testMode;
if(window.location.href.indexOf("?") > -1){
var str = window.location.href.substr(window.location.href.indexOf("?")+1);
var ary = str.split(/&/);
for(var i=0; i<ary.length; i++){
var split = ary[i].split(/=/),
key = split[0],
value = split[1];
switch(key){
case "locale":
// locale string | null
djConfig.locale = locale = value;
break;
case "dir":
// rtl | null
document.getElementsByTagName("html")[0].dir = value;
break;
case "theme":
// tundra | soria | noir | squid | null
theme = value;
break;
case "a11y":
if(value){ testMode = "dijit_a11y"; }
}
}
}
 
// always include the default theme files:
if(!theme){ theme = djConfig.defaultTestTheme || 'tundra'; }
var themeCss = dojo.moduleUrl("dijit.themes",theme+"/"+theme+".css");
var themeCssRtl = dojo.moduleUrl("dijit.themes",theme+"/"+theme+"_rtl.css");
document.write('<link rel="stylesheet" type="text/css" href="'+themeCss+'"/>');
document.write('<link rel="stylesheet" type="text/css" href="'+themeCssRtl+'"/>');
 
if(djConfig.parseOnLoad){
djConfig.parseOnLoad = false;
djConfig._deferParsing = true;
}
 
dojo.addOnLoad(function(){
 
// set the classes
if(!dojo.hasClass(dojo.body(),theme)){ dojo.addClass(dojo.body(),theme); }
if(testMode){ dojo.addClass(dojo.body(),testMode); }
 
// test-link matrix code:
var node = document.createElement('div');
node.id = "testNodeDialog";
dojo.addClass(node,"dijitTestNodeDialog");
dojo.body().appendChild(node);
 
_populateTestDialog(node);
dojo.connect(document,"onkeypress","_testNodeShow");
 
if(djConfig._deferParsing){ dojo.parser.parse(dojo.body()); }
 
});
 
_testNodeShow = function(/* Event */evt){
var key = (evt.charCode == dojo.keys.SPACE ? dojo.keys.SPACE : evt.keyCode);
if(evt.ctrlKey && (key == dojo.keys.F9)){ // F9 is generic enough?
dojo.style(dojo.byId('testNodeDialog'),"top",(dijit.getViewport().t + 4) +"px");
dojo.toggleClass(dojo.byId('testNodeDialog'),"dijitTestNodeShowing");
}
}
 
_populateTestDialog = function(/* DomNode */node){
// pseudo-function to populate our test-martix-link pop-up
var base = window.location.pathname;
var str = "";
var themes = ["tundra",/*"noir", */ "soria" /* ,"squid" */ ];
str += "<b>Tests:</b><br><table>";
dojo.forEach(themes,function(t){
str += '<tr><td><a hr'+'ef="'+base+'?theme='+t+'">'+t+'</'+'a></td>'+
'<td><a hr'+'ef="'+base+'?theme='+t+'&dir=rtl">rtl</'+'a></td>'+
'<td><a hr'+'ef="'+base+'?theme='+t+'&a11y=true">a11y</'+'a></td>'+
'<td><a hr'+'ef="'+base+'?theme='+t+'&a11y=true&dir=rtl">a11y+rtl</'+'a></td>'+
// too many potential locales to list, use &locale=[lang] to set
'</tr>';
});
str += '<tr><td colspan="4">jump to: <a hr'+'ef="'+(dojo.moduleUrl("dijit.themes","themeTester.html"))+'">themeTester</'+'a></td></tr>';
str += '<tr><td colspan="4">or: <a hr'+'ef="'+(dojo.moduleUrl("dijit.tests"))+'">tests folder</'+'a></td></tr>';
node.innerHTML = str + "</table>";
}
})();
/trunk/api/js/dojo1.0/dijit/tests/test_Toolbar.html
New file
0,0 → 1,193
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
 
<title>Dojo Toolbar Widget Test</title>
 
 
<script type="text/javascript" src="../../dojo/dojo.js"
djConfig="parseOnLoad: true, isDebug: true"></script>
<script type="text/javascript" src="_testCommon.js"></script>
 
<script type="text/javascript">
dojo.require("dijit.form.Button");
dojo.require("dijit.ColorPalette");
dojo.require("dijit.Dialog");
dojo.require("dijit.Toolbar");
dojo.require("dijit.form.Button");
dojo.require("dijit.form.TextBox");
dojo.require("dijit.Menu");
dojo.require("dojo.parser");
</script>
 
<!-- programatic creation -->
<script>
function init(){
dojo.forEach(["toolbar2", "toolbar3", "toolbar4"], function(toolbarId){
var toolbar = new dijit.Toolbar({}, dojo.byId(toolbarId));
dojo.forEach(["Cut", "Copy", "Paste"], function(label){
var button = new dijit.form.Button({id: toolbarId+"."+label, label: label, iconClass: "dijitEditorIcon dijitEditorIcon"+label, showLabel: (toolbarId == "toolbar2" ? false : true)});
toolbar.addChild(button);
});
});
}
 
dojo.addOnLoad(init);
</script>
 
<style type="text/css">
@import "../../dojo/resources/dojo.css";
@import "css/dijitTests.css";
 
.dijitToolbar .dijitButton, .dijitToolbar .dijitDropDownButton { margin: 0px; }
.dijitToolbar .dijitToggleButtonSelected BUTTON, .dijitToolbar .dijitToggleButtonSelectedHover BUTTON { border-width: 3px; }
</style>
 
<!-- To turn off display of text use showLabel=false attribute on button
to turn off display or icon, add your own classes and/or CSS rules -->
<style>
 
.toolbarWithNoImages .dijitButtonContents .dijitInline,
.toolbarWithNoImages .dijitButtonContents .dijitInline {
display: none;
}
 
.menuBar .dijitA11yDownArrow { display: none; }
</style>
 
</head>
<body>
<h1 class="testTitle">Toolbar test</h1>
 
<h2>Toolbar from markup</h2>
 
<div id="toolbar1" dojoType="dijit.Toolbar"
><div dojoType="dijit.form.Button" id="toolbar1.cut" iconClass="dijitEditorIcon dijitEditorIconCut" showLabel="false">Cut</div
><div dojoType="dijit.form.Button" id="toolbar1.copy" iconClass="dijitEditorIcon dijitEditorIconCopy" showLabel="false">Copy</div
><div dojoType="dijit.form.Button" id="toolbar1.paste" iconClass="dijitEditorIcon dijitEditorIconPaste" showLabel="false">Paste</div
 
><span dojoType="dijit.ToolbarSeparator"></span
 
><div dojoType="dijit.form.ToggleButton" id="toolbar1.bold" iconClass="dijitEditorIcon dijitEditorIconBold" showLabel="false">Bold</div
><div dojoType="dijit.form.ToggleButton" id="toolbar1.italic" iconClass="dijitEditorIcon dijitEditorIconItalic" showLabel="false">Italic</div
><div dojoType="dijit.form.ToggleButton" id="toolbar1.underline" iconClass="dijitEditorIcon dijitEditorIconUnderline" showLabel="false">Underline</div
><div dojoType="dijit.form.ToggleButton" id="toolbar1.strikethrough" iconClass="dijitEditorIcon dijitEditorIconStrikethrough" showLabel="false">Strikethrough</div
 
><!--
<span dojoType="dijit.ToolbarSeparator">&nbsp;</span>
 
<span dojo:type="ToolbarButtonGroup" name="justify" defaultButton="justifyleft" preventDeselect="true" showLabel="false">
<div dojoType="dijit.form.ToggleButton" iconClass="dijitEditorIcon dijitEditorIconJustifyLeft" name="justify" showLabel="false">Left</div>
<div dojoType="dijit.form.ToggleButton" iconClass="dijitEditorIcon dijitEditorIconJustifyRight" name="justify" showLabel="false">Right</div>
<div dojoType="dijit.form.ToggleButton" iconClass="dijitEditorIcon dijitEditorIconJustifyCenter" name="justify" showLabel="false">Center</div>
</span>
 
--><span dojoType="dijit.ToolbarSeparator">&nbsp;</span
 
><div dojoType="dijit.form.Button" id="toolbar1.insertorderedlist" iconClass="dijitEditorIcon dijitEditorIconInsertOrderedList" showLabel="false">Ordered list</div
><div dojoType="dijit.form.Button" id="toolbar1.insertunorderedlist" iconClass="dijitEditorIcon dijitEditorIconInsertUnorderedList" showLabel="false">Unordered list</div
><div dojoType="dijit.form.Button" id="toolbar1.indent" iconClass="dijitEditorIcon dijitEditorIconIndent" showLabel="false">Indent</div
><div dojoType="dijit.form.Button" id="toolbar1.outdent" iconClass="dijitEditorIcon dijitEditorIconOutdent" showLabel="false">Outdent</div
 
><span dojoType="dijit.ToolbarSeparator"></span
><div dojoType="dijit.form.DropDownButton" id="toolbar1.dialog">
<span>Login</span>
<div dojoType="dijit.TooltipDialog" id="tooltipDlg" title="Enter Login information"
execute="alert('submitted w/args:\n' + dojo.toJson(arguments[0], true));">
<table>
<tr>
<td><label for="user">User:</label></td>
<td><input dojoType=dijit.form.TextBox type="text" name="user" ></td>
</tr>
<tr>
<td><label for="pwd">Password:</label></td>
<td><input dojoType=dijit.form.TextBox type="password" name="pwd"></td>
</tr>
<tr>
<td colspan="2" align="center">
<button dojoType=dijit.form.Button type="submit" name="submit">Login</button></td>
</tr>
</table>
</div
></div
><div dojoType="dijit.form.DropDownButton" id="toolbar1.backcolor" iconClass="dijitEditorIcon dijitEditorIconBackColor" showLabel="false">
<span>Background</span>
<div dojoType="dijit.ColorPalette" id="toolbar1.colorPalette" style="display: none" palette="3x4" onChange="console.log(this.value);"></div>
</div
><div dojoType="dijit.form.DropDownButton" id="toolbar1.forecolor" iconClass="dijitEditorIcon dijitEditorIconForeColor" showLabel="false">
<span>Foreground</span>
<div dojoType="dijit.ColorPalette" id="toolbar1.colorPalette2" style="display: none" palette="3x4" onChange="console.log(this.value);"></div>
</div
 
><span dojoType="dijit.ToolbarSeparator"></span
><div dojoType="dijit.form.ComboButton" optionsTitle='save options' onClick='console.log("clicked combo save")'>
<span>Save</span>
<div dojoType="dijit.Menu" id="saveMenu" style="display: none;">
<div dojoType="dijit.MenuItem" iconClass="dijitEditorIcon dijitEditorIconSave"
onClick="console.log('not actually saving anything, just a test!')">Save</div>
<div dojoType="dijit.MenuItem"
onClick="console.log('not actually saving anything, just a test!')">Save As</div>
</div>
</div
></div>
 
<h2>Toolbar that looks like MenuBar</h2>
<div id="menubar" dojoType="dijit.Toolbar" class="menuBar">
<div dojoType="dijit.form.DropDownButton">
<span>File</span>
<div dojoType="dijit.Menu">
<div dojoType="dijit.MenuItem">New</div>
<div dojoType="dijit.MenuItem">Open</div>
<div dojoType="dijit.MenuSeparator"></div>
<div dojoType="dijit.MenuItem" iconClass="dijitEditorIconSave">Save</div>
<div dojoType="dijit.MenuItem">Save As...</div>
</div>
</div>
<div dojoType="dijit.form.DropDownButton">
<span>Edit</span>
<div dojoType="dijit.Menu">
<div dojoType="dijit.MenuItem" iconClass="dijitEditorIcon dijitEditorIconCut"
onClick="console.log('not actually cutting anything, just a test!')">Cut</div>
<div dojoType="dijit.MenuItem" iconClass="dijitEditorIcon dijitEditorIconCopy"
onClick="console.log('not actually copying anything, just a test!')">Copy</div>
<div dojoType="dijit.MenuItem" iconClass="dijitEditorIcon dijitEditorIconPaste"
onClick="console.log('not actually pasting anything, just a test!')">Paste</div>
</div>
</div>
<div dojoType="dijit.form.DropDownButton">
<span>View</span>
<div dojoType="dijit.Menu">
<div dojoType="dijit.MenuItem">Normal</div>
<div dojoType="dijit.MenuItem">Outline</div>
<div dojoType="dijit.PopupMenuItem">
<span>Zoom</span>
<div dojoType="dijit.Menu" id="submenu2">
<div dojoType="dijit.MenuItem">50%</div>
<div dojoType="dijit.MenuItem">75%</div>
<div dojoType="dijit.MenuItem">100%</div>
<div dojoType="dijit.MenuItem">150%</div>
<div dojoType="dijit.MenuItem">200%</div>
</div>
</div>
</div>
</div>
<div dojoType="dijit.form.DropDownButton">
<span>Help</span>
<div dojoType="dijit.Menu">
<div dojoType="dijit.MenuItem">Help Topics</div>
<div dojoType="dijit.MenuItem">About Dijit</div>
</div>
</div>
</div>
 
<h2>Toolbar from script</h2>
<div id="toolbar2"></div>
 
<h2>Toolbar with text and icons</h2>
<div id="toolbar3"></div>
 
<h2>Toolbar with text only</h2>
<div id="toolbar4" class="toolbarWithNoImages"></div>
</body>
</html>
/trunk/api/js/dojo1.0/dijit/tests/images/tube.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/tests/images/tube.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/tests/images/arrowSmall.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/tests/images/arrowSmall.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/tests/images/plus.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/tests/images/plus.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/tests/images/note.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/tests/images/note.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/tests/images/flatScreen.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/tests/images/flatScreen.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/tests/images/testsBodyBg.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/tests/images/testsBodyBg.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/tests/images/copy.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/tests/images/copy.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/tests/images/cut.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/tests/images/cut.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/tests/images/paste.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/tests/images/paste.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/tests/images/tubeTall.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/tests/images/tubeTall.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/tests/_data/countries.json
New file
0,0 → 1,44
{ identifier: 'name',
label: 'name',
items: [
{ name:'Africa', type:'continent',
children:[{_reference:'Egypt'}, {_reference:'Kenya'}, {_reference:'Sudan'}] },
{ name:'Egypt', type:'country' },
{ name:'Kenya', type:'country',
children:[{_reference:'Nairobi'}, {_reference:'Mombasa'}] },
{ name:'Nairobi', type:'city' },
{ name:'Mombasa', type:'city' },
{ name:'Sudan', type:'country',
children:{_reference:'Khartoum'} },
{ name:'Khartoum', type:'city' },
{ name:'Asia', type:'continent',
children:[{_reference:'China'}, {_reference:'India'}, {_reference:'Russia'}, {_reference:'Mongolia'}] },
{ name:'China', type:'country' },
{ name:'India', type:'country' },
{ name:'Russia', type:'country' },
{ name:'Mongolia', type:'country' },
{ name:'Australia', type:'continent', population:'21 million',
children:{_reference:'Commonwealth of Australia'}},
{ name:'Commonwealth of Australia', type:'country', population:'21 million'},
{ name:'Europe', type:'continent',
children:[{_reference:'Germany'}, {_reference:'France'}, {_reference:'Spain'}, {_reference:'Italy'}] },
{ name:'Germany', type:'country' },
{ name:'France', type:'country' },
{ name:'Spain', type:'country' },
{ name:'Italy', type:'country' },
{ name:'North America', type:'continent',
children:[{_reference:'Mexico'}, {_reference:'Canada'}, {_reference:'United States of America'}] },
{ name:'Mexico', type:'country', population:'108 million', area:'1,972,550 sq km',
children:[{_reference:'Mexico City'}, {_reference:'Guadalajara'}] },
{ name:'Mexico City', type:'city', population:'19 million', timezone:'-6 UTC'},
{ name:'Guadalajara', type:'city', population:'4 million', timezone:'-6 UTC' },
{ name:'Canada', type:'country', population:'33 million', area:'9,984,670 sq km',
children:[{_reference:'Ottawa'}, {_reference:'Toronto'}] },
{ name:'Ottawa', type:'city', population:'0.9 million', timezone:'-5 UTC'},
{ name:'Toronto', type:'city', population:'2.5 million', timezone:'-5 UTC' },
{ name:'United States of America', type:'country' },
{ name:'South America', type:'continent',
children:[{_reference:'Brazil'}, {_reference:'Argentina'}] },
{ name:'Brazil', type:'country', population:'186 million' },
{ name:'Argentina', type:'country', population:'40 million' }
]}
/trunk/api/js/dojo1.0/dijit/tests/_data/treeTest.json
New file
0,0 → 1,14
{
identifier: 'id',
label: 'name',
items: [
{ id: 'node1', name:'node1', someProperty:'somePropertyA', children:[
{ id: 'node1.1',name:'node1.1', someProperty:'somePropertyA1'},
{ id: 'node1.2',name:'node1.2', someProperty:'somePropertyA2'}
]},
{ id: 'node2', name:'node2', someProperty:'somePropertyB'},
{ id: 'node3', name:'node3', someProperty:'somePropertyC'},
{ id: 'node4', name:'node4', someProperty:'somePropertyA'},
{ id: 'node5', name:'node5', someProperty:'somePropertyB'}
]
}
/trunk/api/js/dojo1.0/dijit/tests/_data/states.json
New file
0,0 → 1,64
{identifier:"abbreviation",
items: [
{name:"Alabama", label:"<img width='97px' height='127px' src='images/Alabama.jpg'/>Alabama",abbreviation:"AL"},
{name:"Alaska", label:"Alaska",abbreviation:"AK"},
{name:"American Samoa", label:"American Samoa",abbreviation:"AS"},
{name:"Arizona", label:"Arizona",abbreviation:"AZ"},
{name:"Arkansas", label:"Arkansas",abbreviation:"AR"},
{name:"Armed Forces Europe", label:"Armed Forces Europe",abbreviation:"AE"},
{name:"Armed Forces Pacific", label:"Armed Forces Pacific",abbreviation:"AP"},
{name:"Armed Forces the Americas", label:"Armed Forces the Americas",abbreviation:"AA"},
{name:"California", label:"California",abbreviation:"CA"},
{name:"Colorado", label:"Colorado",abbreviation:"CO"},
{name:"Connecticut", label:"Connecticut",abbreviation:"CT"},
{name:"Delaware", label:"Delaware",abbreviation:"DE"},
{name:"District of Columbia", label:"District of Columbia",abbreviation:"DC"},
{name:"Federated States of Micronesia", label:"Federated States of Micronesia",abbreviation:"FM"},
{name:"Florida", label:"Florida",abbreviation:"FL"},
{name:"Georgia", label:"Georgia",abbreviation:"GA"},
{name:"Guam", label:"Guam",abbreviation:"GU"},
{name:"Hawaii", label:"Hawaii",abbreviation:"HI"},
{name:"Idaho", label:"Idaho",abbreviation:"ID"},
{name:"Illinois", label:"Illinois",abbreviation:"IL"},
{name:"Indiana", label:"Indiana",abbreviation:"IN"},
{name:"Iowa", label:"Iowa",abbreviation:"IA"},
{name:"Kansas", label:"Kansas",abbreviation:"KS"},
{name:"Kentucky", label:"Kentucky",abbreviation:"KY"},
{name:"Louisiana", label:"Louisiana",abbreviation:"LA"},
{name:"Maine", label:"Maine",abbreviation:"ME"},
{name:"Marshall Islands", label:"Marshall Islands",abbreviation:"MH"},
{name:"Maryland", label:"Maryland",abbreviation:"MD"},
{name:"Massachusetts", label:"Massachusetts",abbreviation:"MA"},
{name:"Michigan", label:"Michigan",abbreviation:"MI"},
{name:"Minnesota", label:"Minnesota",abbreviation:"MN"},
{name:"Mississippi", label:"Mississippi",abbreviation:"MS"},
{name:"Missouri", label:"Missouri",abbreviation:"MO"},
{name:"Montana", label:"Montana",abbreviation:"MT"},
{name:"Nebraska", label:"Nebraska",abbreviation:"NE"},
{name:"Nevada", label:"Nevada",abbreviation:"NV"},
{name:"New Hampshire", label:"New Hampshire",abbreviation:"NH"},
{name:"New Jersey", label:"New Jersey",abbreviation:"NJ"},
{name:"New Mexico", label:"New Mexico",abbreviation:"NM"},
{name:"New York", label:"New York",abbreviation:"NY"},
{name:"North Carolina", label:"North Carolina",abbreviation:"NC"},
{name:"North Dakota", label:"North Dakota",abbreviation:"ND"},
{name:"Northern Mariana Islands", label:"Northern Mariana Islands",abbreviation:"MP"},
{name:"Ohio", label:"Ohio",abbreviation:"OH"},
{name:"Oklahoma", label:"Oklahoma",abbreviation:"OK"},
{name:"Oregon", label:"Oregon",abbreviation:"OR"},
{name:"Pennsylvania", label:"Pennsylvania",abbreviation:"PA"},
{name:"Puerto Rico", label:"Puerto Rico",abbreviation:"PR"},
{name:"Rhode Island", label:"Rhode Island",abbreviation:"RI"},
{name:"South Carolina", label:"South Carolina",abbreviation:"SC"},
{name:"South Dakota", label:"South Dakota",abbreviation:"SD"},
{name:"Tennessee", label:"Tennessee",abbreviation:"TN"},
{name:"Texas", label:"Texas",abbreviation:"TX"},
{name:"Utah", label:"Utah",abbreviation:"UT"},
{name:"Vermont", label:"Vermont",abbreviation:"VT"},
{name: "Virgin Islands, U.S.",label:"Virgin Islands, U.S.",abbreviation:"VI"},
{name:"Virginia", label:"Virginia",abbreviation:"VA"},
{name:"Washington", label:"Washington",abbreviation:"WA"},
{name:"West Virginia", label:"West Virginia",abbreviation:"WV"},
{name:"Wisconsin", label:"Wisconsin",abbreviation:"WI"},
{name:"Wyoming", label:"Wyoming",abbreviation:"WY"}
]}
/trunk/api/js/dojo1.0/dijit/tests/_data/categories.json
New file
0,0 → 1,13
{
identifier: 'id',
label: 'name',
items: [
{ id: '0', name:'Fruits', numberOfItems:1, children:[
{ id: '1',name:'Citrus', numberOfItems:1, items:[
{ id: '4', name:'Orange'}
]}
]},
{ id: '2', name:'Vegetables', numberOfItems:0},
{ id: '3', name:'Cereals', numberOfItems:0}
]
}
/trunk/api/js/dojo1.0/dijit/tests/_data/dijits.json
New file
0,0 → 1,0
{"timestamp":1193692111,"items":[{"namespace":"dijit","className":"dijit.ColorPalette","summary":"Grid showing various colors, so the user can pick a certain color","description":null,"examples":null},{"namespace":"dijit","className":"dijit.Declaration","summary":"The Declaration widget allows a user to declare new widget\nclasses directly from a snippet of markup.","description":null,"examples":null},{"namespace":"dijit","className":"dijit.DialogUnderlay","summary":"the thing that grays out the screen behind the dialog\n\nTemplate has two divs; outer div is used for fade-in\/fade-out, and also to hold background iframe.\nInner div has opacity specified in CSS file.","description":null,"examples":null},{"namespace":"dijit","className":"dijit.Dialog","summary":"Pops up a modal dialog window, blocking access to the screen\nand also graying out the screen Dialog is extended from\nContentPane so it supports all the same parameters (href, etc.)","description":null,"examples":null},{"namespace":"dijit","className":"dijit.TooltipDialog","summary":"Pops up a dialog that appears like a Tooltip","description":null,"examples":null},{"namespace":"dijit","className":"dijit.Editor","summary":"A rich-text Editing widget","description":null,"examples":null},{"namespace":"dijit","className":"dijit.InlineEditBox","summary":"Behavior for an existing node (<p>, <div>, <span>, etc.) so that\nwhen you click it, an editor shows up in place of the original\ntext. Optionally, Save and Cancel button are displayed below the edit widget.\nWhen Save is clicked, the text is pulled from the edit\nwidget and redisplayed and the edit widget is again hidden.\nBy default a plain Textarea widget is used as the editor (or for\ninline values a TextBox), but you can specify an editor such as\ndijit.Editor (for editing HTML) or a Slider (for adjusting a number).\nAn edit widget must support the following API to be used:\nString getDisplayedValue() OR String getValue()\nvoid setDisplayedValue(String) OR void setValue(String)\nvoid focus()","description":null,"examples":null},{"namespace":"dijit","className":"dijit._InlineEditor","summary":"internal widget used by InlineEditBox, displayed when in editing mode\nto display the editor and maybe save\/cancel buttons. Calling code should\nconnect to save\/cancel methods to detect when editing is finished\n\nHas mainly the same parameters as InlineEditBox, plus these values:\n\nstyle: Object\nSet of CSS attributes of display node, to replicate in editor\n\nvalue: String\nValue as an HTML string or plain text string, depending on renderAsHTML flag","description":null,"examples":null},{"namespace":"dijit","className":"dijit.Menu","summary":null,"description":null,"examples":null},{"namespace":"dijit","className":"dijit.MenuItem","summary":"A line item in a Menu2\n\nMake 3 columns\nicon, label, and expand arrow (BiDi-dependent) indicating sub-menu","description":null,"examples":null},{"namespace":"dijit","className":"dijit.PopupMenuItem","summary":null,"description":null,"examples":null},{"namespace":"dijit","className":"dijit.MenuSeparator","summary":"A line between two menu items","description":null,"examples":null},{"namespace":"dijit","className":"dijit.ProgressBar","summary":"a progress widget\n\nusage:\n<div dojoType=\"ProgressBar\"","description":null,"examples":null},{"namespace":"dijit","className":"dijit.TitlePane","summary":"A pane with a title on top, that can be opened or collapsed.","description":null,"examples":null},{"namespace":"dijit","className":"dijit.Toolbar","summary":null,"description":null,"examples":null},{"namespace":"dijit","className":"dijit.ToolbarSeparator","summary":"A line between two menu items","description":null,"examples":null},{"namespace":"dijit","className":"dijit._MasterTooltip","summary":"Internal widget that holds the actual tooltip markup,\nwhich occurs once per page.\nCalled by Tooltip widgets which are just containers to hold\nthe markup","description":null,"examples":null},{"namespace":"dijit","className":"dijit.Tooltip","summary":"Pops up a tooltip (a help message) when you hover over a node.","description":null,"examples":null},{"namespace":"dijit","className":"dijit._TreeNode","summary":"Single node within a tree","description":null,"examples":null},{"namespace":"dijit","className":"dijit.Tree","summary":"This widget displays hierarchical data from a store. A query is specified\nto get the \"top level children\" from a data store, and then those items are\nqueried for their children and so on (but lazily, as the user clicks the expand node).\n\nThus in the default mode of operation this widget is technically a forest, not a tree,\nin that there can be multiple \"top level children\". However, if you specify label,\nthen a special top level node (not corresponding to any item in the datastore) is\ncreated, to father all the top level children.","description":null,"examples":null},{"namespace":"dijit","className":"dijit._Calendar","summary":null,"description":null,"examples":null},{"namespace":"dijit","className":"dijit._Contained","summary":"Mixin for widgets that are children of a container widget","description":null,"examples":null},{"namespace":"dijit","className":"dijit._Container","summary":"Mixin for widgets that contain a list of children like SplitContainer","description":null,"examples":null},{"namespace":"dijit","className":"dijit._KeyNavContainer","summary":"A _Container with keyboard navigation of its children.\nTo use this mixin, call connectKeyNavHandlers() in\npostCreate() and call connectKeyNavChildren() in startup().","description":null,"examples":null},{"namespace":"dijit","className":"dijit._Templated","summary":"mixin for widgets that are instantiated from a template","description":null,"examples":null},{"namespace":"dijit","className":"dijit._TimePicker","summary":"A graphical time picker that TimeTextBox pops up\nIt is functionally modeled after the Java applet at http:\/\/java.arcadevillage.com\/applets\/timepica.htm\nSee ticket #599","description":null,"examples":null},{"namespace":"dijit","className":"dijit._Widget","summary":null,"description":null,"examples":null},{"namespace":"dijit","className":"dijit.WidgetSet","summary":"A set of widgets indexed by id","description":null,"examples":null},{"namespace":"dijit","className":"dijit.BackgroundIframe","summary":"For IE z-index schenanigans. id attribute is required.","description":"new dijit.BackgroundIframe(node)\nMakes a background iframe as a child of node, that fills\narea (and position) of node","examples":null},{"namespace":"dijit","className":"dijit._editor.RichText","summary":"dijit._editor.RichText is the core of the WYSIWYG editor in dojo, which\nprovides the basic editing features. It also encapsulates the differences\nof different js engines for various browsers","description":null,"examples":null},{"namespace":"dijit","className":"dijit._editor._Plugin","summary":"only allow updates every two tenths of a second","description":null,"examples":null},{"namespace":"dijit","className":"dijit._editor.plugins.AlwaysShowToolbar","summary":null,"description":null,"examples":null},{"namespace":"dijit","className":"dijit._editor.plugins.EnterKeyHandling","summary":null,"description":null,"examples":null},{"namespace":"dijit","className":"dijit._editor.plugins.FontChoice","summary":null,"description":null,"examples":null},{"namespace":"dijit","className":"dijit._editor.plugins.DualStateDropDownButton","summary":"a DropDownButton but button can be displayed in two states (checked or unchecked)","description":null,"examples":null},{"namespace":"dijit","className":"dijit._editor.plugins.UrlTextBox","summary":"the URL input box we use in our dialog\n\nregular expression for URLs, generated from dojo.regexp.url()","description":null,"examples":null},{"namespace":"dijit","className":"dijit._editor.plugins.LinkDialog","summary":null,"description":null,"examples":null},{"namespace":"dijit","className":"dijit._editor.plugins.TextColor","summary":null,"description":null,"examples":null},{"namespace":"dijit","className":"dijit.range.W3CRange","summary":null,"description":null,"examples":null},{"namespace":"dijit","className":"dijit.demos.chat.Room","summary":null,"description":null,"examples":null},{"namespace":"dijit","className":"dijit.form.Button","summary":"Basically the same thing as a normal HTML button, but with special styling.","description":null,"examples":null},{"namespace":"dijit","className":"dijit.form.DropDownButton","summary":"push the button and a menu shows up","description":null,"examples":null},{"namespace":"dijit","className":"dijit.form.ComboButton","summary":"left side is normal button, right side displays menu","description":null,"examples":null},{"namespace":"dijit","className":"dijit.form.ToggleButton","summary":"A button that can be in two states (checked or not).\nCan be base class for things like tabs or checkbox or radio buttons","description":null,"examples":null},{"namespace":"dijit","className":"dijit.form.CheckBox","summary":"Same as an HTML checkbox, but with fancy styling.","description":"Value of \"type\" attribute for <input>","examples":null},{"namespace":"dijit","className":"dijit.form.RadioButton","summary":"Same as an HTML radio, but with fancy styling.","description":"This shared object keeps track of all widgets, grouped by name","examples":null},{"namespace":"dijit","className":"dijit.form.ComboBoxMixin","summary":"Auto-completing text box, and base class for FilteringSelect widget.\n\nThe drop down box's values are populated from an class called\na data provider, which returns a list of values based on the characters\nthat the user has typed into the input box.\n\nSome of the options to the ComboBox are actually arguments to the data\nprovider.\n\nYou can assume that all the form widgets (and thus anything that mixes\nin ComboBoxMixin) will inherit from _FormWidget and thus the \"this\"\nreference will also \"be a\" _FormWidget.","description":null,"examples":null},{"namespace":"dijit","className":"dijit.form._ComboBoxMenu","summary":"these functions are called in showResultList","description":null,"examples":null},{"namespace":"dijit","className":"dijit.form.ComboBox","summary":null,"description":null,"examples":null},{"namespace":"dijit","className":"dijit.form.CurrencyTextBox","summary":null,"description":null,"examples":null},{"namespace":"dijit","className":"dijit.form.DateTextBox","summary":"A validating, serializable, range-bound date text box.","description":null,"examples":null},{"namespace":"dijit","className":"dijit.form.FilteringSelect","summary":null,"description":null,"examples":null},{"namespace":"dijit","className":"dijit.form._FormMixin","summary":null,"description":null,"examples":null},{"namespace":"dijit","className":"dijit.form.Form","summary":null,"description":null,"examples":null},{"namespace":"dijit","className":"dijit.form.InlineEditBox","summary":null,"description":null,"examples":null},{"namespace":"dijit","className":"dijit.form.NumberSpinner","summary":"Number Spinner","description":"This widget is the same as NumberTextBox but with up\/down arrows added","examples":null},{"namespace":"dijit","className":"dijit.form.NumberTextBoxMixin","summary":"A mixin for all number textboxes","description":null,"examples":null},{"namespace":"dijit","className":"dijit.form.NumberTextBox","summary":"A validating, serializable, range-bound text box.\nconstraints object: min, max, places","description":null,"examples":null},{"namespace":"dijit","className":"dijit.form.HorizontalSlider","summary":"A form widget that allows one to select a value with a horizontally draggable image","description":null,"examples":null},{"namespace":"dijit","className":"dijit.form.VerticalSlider","summary":"A form widget that allows one to select a value with a vertically draggable image","description":null,"examples":null},{"namespace":"dijit","className":"dijit.form._SliderMover","summary":null,"description":null,"examples":null},{"namespace":"dijit","className":"dijit.form.HorizontalRule","summary":null,"description":null,"examples":null},{"namespace":"dijit","className":"dijit.form.VerticalRule","summary":null,"description":null,"examples":null},{"namespace":"dijit","className":"dijit.form.HorizontalRuleLabels","summary":null,"description":null,"examples":null},{"namespace":"dijit","className":"dijit.form.VerticalRuleLabels","summary":null,"description":null,"examples":null},{"namespace":"dijit","className":"dijit.form.TextBox","summary":"A generic textbox field.\nServes as a base class to derive more specialized functionality in subclasses.","description":null,"examples":null},{"namespace":"dijit","className":"dijit.form.Textarea","summary":"event handlers, you can over-ride these in your own subclasses","description":null,"examples":null},{"namespace":"dijit","className":"dijit.form.TimeTextBox","summary":"NaN\nNaN","description":null,"examples":null},{"namespace":"dijit","className":"dijit.form.ValidationTextBox","summary":"default values for new subclass properties","description":null,"examples":null},{"namespace":"dijit","className":"dijit.form.MappedTextBox","summary":"A subclass of ValidationTextBox.\nProvides a hidden input field and a serialize method to override","description":null,"examples":null},{"namespace":"dijit","className":"dijit.form.RangeBoundTextBox","summary":"A subclass of MappedTextBox.\nTests for a value out-of-range","description":null,"examples":null},{"namespace":"dijit","className":"dijit.form._FormWidget","summary":null,"description":null,"examples":null},{"namespace":"dijit","className":"dijit.form._Spinner","summary":"Mixin for validation widgets with a spinner","description":"This class basically (conceptually) extends dijit.form.ValidationTextBox.\nIt modifies the template to have up\/down arrows, and provides related handling code.","examples":null},{"namespace":"dijit","className":"dijit.layout.AccordionContainer","summary":"Holds a set of panes where every pane's title is visible, but only one pane's content is visible at a time,\nand switching between panes is visualized by sliding the other panes up\/down.\nusage:\n<div dojoType=\"dijit.layout.AccordionContainer\">\n<div dojoType=\"dijit.layout.AccordionPane\" title=\"pane 1\">\n<div dojoType=\"dijit.layout.ContentPane\">...<\/div>\n<\/div>\n<div dojoType=\"dijit.layout.AccordionPane\" title=\"pane 2\">\n<p>This is some text<\/p>\n...\n<\/div>","description":null,"examples":null},{"namespace":"dijit","className":"dijit.layout.AccordionPane","summary":"AccordionPane is a ContentPane with a title that may contain another widget.\nNested layout widgets, such as SplitContainer, are not supported at this time.","description":null,"examples":null},{"namespace":"dijit","className":"dijit.layout.ContentPane","summary":"A widget that acts as a Container for other widgets, and includes a ajax interface","description":"A widget that can be used as a standalone widget\nor as a baseclass for other widgets\nHandles replacement of document fragment using either external uri or javascript\ngenerated markup or DOM content, instantiating widgets within that content.\nDon't confuse it with an iframe, it only needs\/wants document fragments.\nIt's useful as a child of LayoutContainer, SplitContainer, or TabContainer.\nBut note that those classes can contain any widget as a child.\nexample:\nSome quick samples:\nTo change the innerHTML use .setContent('<b>new content<\/b>')\n\nOr you can send it a NodeList, .setContent(dojo.query('div [class=selected]', userSelection))\nplease note that the nodes in NodeList will copied, not moved\n\nTo do a ajax update use .setHref('url')","examples":null},{"namespace":"dijit","className":"dijit.layout.LayoutContainer","summary":"Provides Delphi-style panel layout semantics.\n\ndetails\nA LayoutContainer is a box with a specified size (like style=\"width: 500px; height: 500px;\"),\nthat contains children widgets marked with \"layoutAlign\" of \"left\", \"right\", \"bottom\", \"top\", and \"client\".\nIt takes it's children marked as left\/top\/bottom\/right, and lays them out along the edges of the box,\nand then it takes the child marked \"client\" and puts it into the remaining space in the middle.\n\nLeft\/right positioning is similar to CSS's \"float: left\" and \"float: right\",\nand top\/bottom positioning would be similar to \"float: top\" and \"float: bottom\", if there were such\nCSS.\n\nNote that there can only be one client element, but there can be multiple left, right, top,\nor bottom elements.\n\nusage\n<style>\nhtml, body{ height: 100%; width: 100%; }\n<\/style>\n<div dojoType=\"dijit.layout.LayoutContainer\" style=\"width: 100%; height: 100%\">\n<div dojoType=\"dijit.layout.ContentPane\" layoutAlign=\"top\">header text<\/div>\n<div dojoType=\"dijit.layout.ContentPane\" layoutAlign=\"left\" style=\"width: 200px;\">table of contents<\/div>\n<div dojoType=\"dijit.layout.ContentPane\" layoutAlign=\"client\">client area<\/div>\n<\/div>\n\nLays out each child in the natural order the children occur in.\nBasically each child is laid out into the \"remaining space\", where \"remaining space\" is initially\nthe content area of this widget, but is reduced to a smaller rectangle each time a child is added.","description":null,"examples":null},{"namespace":"dijit","className":"dijit.layout.LinkPane","summary":"A ContentPane that loads data remotely","description":"LinkPane is just a ContentPane that loads data remotely (via the href attribute),\nand has markup similar to an anchor. The anchor's body (the words between <a> and <\/a>)\nbecome the title of the widget (used for TabContainer, AccordionContainer, etc.)\nexample:\n<a href=\"foo.html\">my title<\/a>\n\nI'm using a template because the user may specify the input as\n<a href=\"foo.html\">title<\/a>, in which case we need to get rid of the\n<a> because we don't want a link.","examples":null},{"namespace":"dijit","className":"dijit.layout.SplitContainer","summary":"A Container widget with sizing handles in-between each child","description":"Contains multiple children widgets, all of which are displayed side by side\n(either horizontally or vertically); there's a bar between each of the children,\nand you can adjust the relative size of each child by dragging the bars.\n\nYou must specify a size (width and height) for the SplitContainer.","examples":null},{"namespace":"dijit","className":"dijit.layout.StackContainer","summary":null,"description":null,"examples":null},{"namespace":"dijit","className":"dijit.layout.StackController","summary":"Set of buttons to select a page in a page list.\nMonitors the specified StackContainer, and whenever a page is\nadded, deleted, or selected, updates itself accordingly.","description":null,"examples":null},{"namespace":"dijit","className":"dijit.layout._StackButton","summary":"StackContainer buttons are not in the tab order by default","description":null,"examples":null},{"namespace":"dijit","className":"dijit.layout.TabContainer","summary":"A Container with Title Tabs, each one pointing at a pane in the container.","description":"A TabContainer is a container that has multiple panes, but shows only\none pane at a time. There are a set of tabs corresponding to each pane,\nwhere each tab has the title (aka title) of the pane, and optionally a close button.\n\nPublishes topics <widgetId>-addChild, <widgetId>-removeChild, and <widgetId>-selectChild\n(where <widgetId> is the id of the TabContainer itself.","examples":null},{"namespace":"dijit","className":"dijit.layout.TabController","summary":"Set of tabs (the things with titles and a close button, that you click to show a tab panel).","description":"Lets the user select the currently shown pane in a TabContainer or StackContainer.\nTabController also monitors the TabContainer, and whenever a pane is\nadded or deleted updates itself accordingly.","examples":null},{"namespace":"dijit","className":"dijit.layout._TabButton","summary":"A tab (the thing you click to select a pane).","description":"Contains the title of the pane, and optionally a close-button to destroy the pane.\nThis is an internal widget and should not be instantiated directly.","examples":null},{"namespace":"dijit","className":"dijit.layout._LayoutWidget","summary":"Mixin for widgets that contain a list of children like SplitContainer.\nWidgets which mixin this code must define layout() to lay out the children","description":null,"examples":null}],"identifier":"className","label":"className"}
/trunk/api/js/dojo1.0/dijit/tests/layout/tab4.html
New file
0,0 → 1,40
<div dojoType="dijit.layout.SplitContainer" orientation="vertical">
<div dojoType="dijit.layout.ContentPane" title="split #1">
<p>Top of split container loaded via an href.</p>
</div>
<div dojoType="dijit.layout.ContentPane" title="split #2">
<p>Bottom of split container loaded via an href.</p>
<p>
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean
semper sagittis velit. Cras in mi. Duis porta mauris ut ligula. Proin
porta rutrum lacus. Etiam consequat scelerisque quam. Nulla facilisi.
Maecenas luctus venenatis nulla. In sit amet dui non mi semper iaculis.
Sed molestie tortor at ipsum. Morbi dictum rutrum magna. Sed vitae
risus.
</p>
<p>Aliquam vitae enim. Duis scelerisque metus auctor est venenatis
imperdiet. Fusce dignissim porta augue. Nulla vestibulum. Integer lorem
nunc, ullamcorper a, commodo ac, malesuada sed, dolor. Aenean id mi in
massa bibendum suscipit. Integer eros. Nullam suscipit mauris. In
pellentesque. Mauris ipsum est, pharetra semper, pharetra in, viverra
quis, tellus. Etiam purus. Quisque egestas, tortor ac cursus lacinia,
felis leo adipiscing nisi, et rhoncus elit dolor eget eros. Fusce ut
quam. Suspendisse eleifend leo vitae ligula. Nulla facilisi. Nulla
rutrum, erat vitae lacinia dictum, pede purus imperdiet lacus, ut
semper velit ante id metus. Praesent massa dolor, porttitor sed,
pulvinar in, consequat ut, leo. Nullam nec est. Aenean id risus blandit
tortor pharetra congue. Suspendisse pulvinar.
</p>
<p>Vestibulum convallis eros ac justo. Proin dolor. Etiam aliquam. Nam
ornare elit vel augue. Suspendisse potenti. Etiam sed mauris eu neque
nonummy mollis. Vestibulum vel purus ac pede semper accumsan. Vivamus
lobortis, sem vitae nonummy lacinia, nisl est gravida magna, non cursus
est quam sed urna. Phasellus adipiscing justo in ipsum. Duis sagittis
dolor sit amet magna. Suspendisse suscipit, neque eu dictum auctor,
nisi augue tincidunt arcu, non lacinia magna purus nec magna. Praesent
pretium sollicitudin sapien. Suspendisse imperdiet. Class aptent taciti
sociosqu ad litora torquent per conubia nostra, per inceptos
hymenaeos.
</p>
</div>
</div>
/trunk/api/js/dojo1.0/dijit/tests/layout/test_SplitContainer.html
New file
0,0 → 1,77
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>SplitContainer Widget Demo</title>
 
<script type="text/javascript" src="../../../dojo/dojo.js"
djConfig="isDebug: true, parseOnLoad: true"></script>
<script type="text/javascript" src="../_testCommon.js"></script>
 
<script type="text/javascript">
dojo.require("dijit.layout.SplitContainer");
dojo.require("dijit.layout.ContentPane");
dojo.require("dojo.parser"); // scan page for widgets and instantiate them
</script>
<style type="text/css">
@import "../../../dojo/resources/dojo.css";
@import "../css/dijitTests.css";
.dojoContentPane {
padding:1em;
}
</style>
</head>
<body>
<h1 class="testTitle">Dijit Split Container Test</h1>
<p>HTML before</p>
 
<div dojoType="dijit.layout.SplitContainer"
orientation="vertical"
sizerWidth="7"
activeSizing="false"
style="border: 1px solid #bfbfbf; float: left; margin-right: 30px; width: 400px; height: 300px;"
>
<div dojoType="dijit.layout.ContentPane" sizeMin="10" sizeShare="50">
this box has three split panes
</div>
<div dojoType="dijit.layout.ContentPane" sizeMin="20" sizeShare="50"
style="background-color: yellow; border: 3px solid purple;">
in vertical mode
</div>
<div dojoType="dijit.layout.ContentPane" sizeMin="10" sizeShare="50">
without active resizing
</div>
</div>
 
<div dojoType="dijit.layout.SplitContainer"
orientation="horizontal"
sizerWidth="7"
activeSizing="true"
style="border: 1px solid #bfbfbf; float: left; width: 400px; height: 300px;">
<div dojoType="dijit.layout.ContentPane" sizeMin="20" sizeShare="20">
this box has two horizontal panes
</div>
<div dojoType="dijit.layout.ContentPane" sizeMin="50" sizeShare="50">
with active resizing, a smaller sizer, different starting sizes and minimum sizes
</div>
</div>
 
<p style="clear: both;">HTML after</p>
 
the following splitter contains two iframes, see whether the resizer works ok in this situation
<div dojoType="dijit.layout.SplitContainer"
orientation="horizontal"
sizerWidth="5"
activeSizing="false"
style="border: 2px solid black; float: left; width: 100%; height: 300px;"
>
<div dojoType="dijit.layout.ContentPane" sizeMin="20" sizeShare="20">
<iframe style="width: 100%; height: 100%"></iframe>
</div>
<div dojoType="dijit.layout.ContentPane" sizeMin="50" sizeShare="50">
<iframe style="width: 100%; height: 100%"></iframe>
</div>
</div>
 
</body>
</html>
/trunk/api/js/dojo1.0/dijit/tests/layout/test_AccordionContainer.html
New file
0,0 → 1,198
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Accordion Widget Demo</title>
<style type="text/css">
@import "../../../dojo/resources/dojo.css";
@import "../css/dijitTests.css";
</style>
 
 
<script type="text/javascript" src="../../../dojo/dojo.js"
djConfig="isDebug: true, parseOnLoad: true"></script>
<script type="text/javascript" src="../_testCommon.js"></script>
 
<!-- uncomment for profiling
<script type="text/javascript"
src="../../../dojo/_base/html.js"></script>
<script type="text/javascript"
src="../../base/Layout.js"></script>
-->
 
<script type="text/javascript">
dojo.require("dijit.layout.AccordionContainer");
dojo.require("dijit.layout.ContentPane");
// dojo.require("dijit.layout.SplitContainer");
dojo.require("dijit.form.ComboBox");
dojo.require("dijit.form.Button");
dojo.require("dojo.parser"); // scan page for widgets and instantiate them
 
var accordion, pane4;
 
function init(){
accordion = new dijit.layout.AccordionContainer({}, dojo.byId("accordionShell"));
dojo.forEach([ "pane 1", "pane 2", "pane 3" ], function(title, i){
// add a node that will be promoted to the content widget
var refNode = document.createElement("span");
refNode.innerHTML = "this is " + title;
document.body.appendChild(refNode);
var content = new dijit.layout.AccordionPane({title: title, selected: i==1}, refNode);
console.debug("adding content pane " + content.id);
accordion.addChild(content);
});
accordion.startup();
var refNode = document.createElement("span");
var title = "pane 4";
refNode.innerHTML = "this is " + title;
accordion.addChild(pane4=new dijit.layout.AccordionPane({title: title}, refNode));
}
 
dojo.addOnLoad(init);
 
function destroyChildren(){
accordion.destroyDescendants();
}
function selectPane4(){
accordion.selectChild(pane4);
}
</script>
 
</head>
<body style="padding: 50px;">
 
<h1 class="testTitle">AccordionContainer Tests</h1>
 
<h2>Accordion from markup:</h2>
<p>HTML before</p>
<p>HTML before</p>
<p>HTML before</p>
 
<div dojoType="dijit.layout.AccordionContainer" duration="200"
style="float: left; margin-right: 30px; width: 400px; height: 300px; overflow: hidden">
<div dojoType="dijit.layout.AccordionPane" title="a">
Hello World
</div>
<div dojoType="dijit.layout.AccordionPane" title="b">
<p>
Nunc consequat nisi vitae quam. Suspendisse sed nunc. Proin
suscipit porta magna. Duis accumsan nunc in velit. Nam et nibh.
Nulla facilisi. Cras venenatis urna et magna. Aenean magna mauris,
bibendum sit amet, semper quis, aliquet nec, sapien. Aliquam
aliquam odio quis erat. Etiam est nisi, condimentum non, lacinia
ac, vehicula laoreet, elit. Sed interdum augue sit amet quam
dapibus semper. Nulla facilisi. Pellentesque lobortis erat nec
quam.
</p>
<p>
Sed arcu magna, molestie at, fringilla in, sodales eu, elit.
Curabitur mattis lorem et est. Quisque et tortor. Integer bibendum
vulputate odio. Nam nec ipsum. Vestibulum mollis eros feugiat
augue. Integer fermentum odio lobortis odio. Nullam mollis nisl non
metus. Maecenas nec nunc eget pede ultrices blandit. Ut non purus
ut elit convallis eleifend. Fusce tincidunt, justo quis tempus
euismod, magna nulla viverra libero, sit amet lacinia odio diam id
risus. Ut varius viverra turpis. Morbi urna elit, imperdiet eu,
porta ac, pharetra sed, nisi. Etiam ante libero, ultrices ac,
faucibus ac, cursus sodales, nisl. Praesent nisl sem, fermentum eu,
consequat quis, varius interdum, nulla. Donec neque tortor,
sollicitudin sed, consequat nec, facilisis sit amet, orci. Aenean
ut eros sit amet ante pharetra interdum.
</p>
</div>
<div dojoType="dijit.layout.AccordionPane" title="c">
<p>The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.</p>
</div>
</div>
 
<p style="clear: both;">HTML after</p>
<p>HTML after</p>
<p>HTML after</p>
<p></p>
<p>Accordion with widgets</p>
<div dojoType="dijit.layout.AccordionContainer" duration="200"
style="float: left; margin-right: 30px; width: 400px; height: 300px; overflow: hidden">
<div dojoType="dijit.layout.AccordionPane" selected="true"
title="Pane 1" >
<select>
<option>red</option>
<option>blue</option>
<option>green</option>
</select>
<p>
Nunc consequat nisi vitae quam. Suspendisse sed nunc. Proin
suscipit porta magna. Duis accumsan nunc in velit. Nam et nibh.
Nulla facilisi. Cras venenatis urna et magna. Aenean magna mauris,
bibendum sit amet, semper quis, aliquet nec, sapien. Aliquam
aliquam odio quis erat. Etiam est nisi, condimentum non, lacinia
ac, vehicula laoreet, elit. Sed interdum augue sit amet quam
dapibus semper. Nulla facilisi. Pellentesque lobortis erat nec
quam.
</p>
<p>
Sed arcu magna, molestie at, fringilla in, sodales eu, elit.
Curabitur mattis lorem et est. Quisque et tortor. Integer bibendum
vulputate odio. Nam nec ipsum. Vestibulum mollis eros feugiat
augue. Integer fermentum odio lobortis odio. Nullam mollis nisl non
metus. Maecenas nec nunc eget pede ultrices blandit. Ut non purus
ut elit convallis eleifend. Fusce tincidunt, justo quis tempus
euismod, magna nulla viverra libero, sit amet lacinia odio diam id
risus. Ut varius viverra turpis. Morbi urna elit, imperdiet eu,
porta ac, pharetra sed, nisi. Etiam ante libero, ultrices ac,
faucibus ac, cursus sodales, nisl. Praesent nisl sem, fermentum eu,
consequat quis, varius interdum, nulla. Donec neque tortor,
sollicitudin sed, consequat nec, facilisis sit amet, orci. Aenean
ut eros sit amet ante pharetra interdum.
</p>
</div>
 
<!-- test lazy loading -->
<div dojoType="dijit.layout.AccordionPane" title="Pane 2 (lazy load)" href="tab1.html"></div>
 
<!-- Support for nested complex widgets de-supported, for now
<div dojoType="dijit.layout.AccordionLayoutPane" title="Pane 3 (split pane)">
<div dojoType="dijit.layout.SplitContainer">
<p dojoType="dijit.layout.ContentPane">
Sed arcu magna, molestie at, fringilla in, sodales eu, elit.
Curabitur mattis lorem et est. Quisque et tortor. Integer bibendum
vulputate odio. Nam nec ipsum. Vestibulum mollis eros feugiat
augue. Integer fermentum odio lobortis odio. Nullam mollis nisl non
metus. Maecenas nec nunc eget pede ultrices blandit. Ut non purus
ut elit convallis eleifend. Fusce tincidunt, justo quis tempus
euismod, magna nulla viverra libero, sit amet lacinia odio diam id
risus. Ut varius viverra turpis. Morbi urna elit, imperdiet eu,
porta ac, pharetra sed, nisi. Etiam ante libero, ultrices ac,
faucibus ac, cursus sodales, nisl. Praesent nisl sem, fermentum eu,
consequat quis, varius interdum, nulla. Donec neque tortor,
sollicitudin sed, consequat nec, facilisis sit amet, orci. Aenean
ut eros sit amet ante pharetra interdum.
</p>
<p dojoType="dijit.layout.ContentPane">
Sed arcu magna, molestie at, fringilla in, sodales eu, elit.
Curabitur mattis lorem et est. Quisque et tortor. Integer bibendum
vulputate odio. Nam nec ipsum. Vestibulum mollis eros feugiat
augue. Integer fermentum odio lobortis odio. Nullam mollis nisl non
metus. Maecenas nec nunc eget pede ultrices blandit. Ut non purus
ut elit convallis eleifend. Fusce tincidunt, justo quis tempus
euismod, magna nulla viverra libero, sit amet lacinia odio diam id
risus. Ut varius viverra turpis. Morbi urna elit, imperdiet eu,
porta ac, pharetra sed, nisi. Etiam ante libero, ultrices ac,
faucibus ac, cursus sodales, nisl. Praesent nisl sem, fermentum eu,
consequat quis, varius interdum, nulla. Donec neque tortor,
sollicitudin sed, consequat nec, facilisis sit amet, orci. Aenean
ut eros sit amet ante pharetra interdum.
</p>
</div>
</div>
-->
</div>
 
<h2>Programatically created:</h2>
<button onclick="destroyChildren();">destroy children</button>
<button onclick="selectPane4();">select pane 4</button>
<br>
 
<div id="accordionShell" style="width: 400px; height: 400px;"></div>
 
</body>
</html>
/trunk/api/js/dojo1.0/dijit/tests/layout/test_StackContainer.html
New file
0,0 → 1,60
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>StackContainer Demo</title>
<style>
@import "../../../dojo/resources/dojo.css";
@import "../css/dijitTests.css";
.dijitStackController .dijitToggleButtonChecked button {
background-color: white;
background-image: none;
}
.dijit_a11y .dijitStackController .dijitToggleButtonChecked button {
border-style: dashed !important;
}
</style>
<script type="text/javascript" src="../../../dojo/dojo.js"
djConfig="isDebug: true, parseOnLoad: true"></script>
<script type="text/javascript" src="../_testCommon.js"></script>
 
<script type="text/javascript">
dojo.require("dijit.layout.ContentPane");
dojo.require("dijit.layout.StackContainer");
dojo.require("dijit.form.Button");
dojo.require("dojo.parser"); // scan page for widgets and instantiate them
 
function selected(page){
console.debug("page selected " + page.id);
var widget=dijit.byId("myStackContainer");
dijit.byId("previous").setDisabled(page.isFirstChild);
dijit.byId("next").setDisabled(page.isLastChild);
dijit.byId("previous2").setDisabled(page.isFirstChild);
dijit.byId("next2").setDisabled(page.isLastChild);
}
dojo.subscribe("myStackContainer-selectChild", selected);
</script>
</head>
 
<body>
<h1 class="testTitle">A Tale Of Two Cities</h1>
 
<button dojoType="dijit.form.Button" id="previous"
onClick="dijit.byId('myStackContainer').back()">&lt;</button>
<span dojoType="dijit.layout.StackController" containerId="myStackContainer"></span>
<button dojoType="dijit.form.Button" id="next"
onClick="dijit.byId('myStackContainer').forward()">&gt;</button>
 
<div id="myStackContainer" dojoType="dijit.layout.StackContainer"
style="width: 90%; border: 1px solid #9b9b9b; height: 20em; margin: 0.5em 0 0.5em 0; padding: 0.5em;">
<p id="page1" dojoType="dijit.layout.ContentPane" title="page 1">IT WAS the best of times, it was the worst of times, it was the age of wisdom, it was the age of foolishness, it was the epoch of belief, it was the epoch of incredulity, it was the season of Light, it was the season of Darkness, it was the spring of hope, it was the winter of despair, we had everything before us, we had nothing before us, we were all going direct to Heaven, we were all going direct the other way -- in short, the period was so far like the present period, that some of its noisiest authorities insisted on its being received, for good or for evil, in the superlative degree of comparison only</p>
<p id="page2" dojoType="dijit.layout.ContentPane" title="page 2">There were a king with a large jaw and a queen with a plain face, on the throne of England; there were a king with a large jaw and a queen with a fair face, on the throne of <a href="http://www.france.com">France</a>. In both countries it was clearer than crystal to the lords of the State preserves of loaves and fishes, that things in general were settled for ever.</p>
<p id="page3" dojoType="dijit.layout.ContentPane" title="page 3">It was the year of Our Lord one thousand seven hundred and seventy- five. Spiritual revelations were conceded to England at that favoured period, as at this. Mrs. Southcott had recently attained her five-and- twentieth blessed birthday, of whom a prophetic private in the Life Guards had heralded the sublime appearance by announcing that arrangements were made for the swallowing up of London and Westminster. Even the Cock-lane ghost had been laid only a round dozen of years, after rapping out its messages, as the spirits of this very year last past (supernaturally deficient in originality) rapped out theirs. Mere messages in the earthly order of events had lately come to the English Crown and People, from a congress of British subjects in America:</p>
</div>
 
<button dojoType="dijit.form.Button" id="previous2" onClick="dijit.byId('myStackContainer').back()">&lt;</button>
<span dojoType="dijit.layout.StackController" containerId="myStackContainer"></span>
<button dojoType="dijit.form.Button" id="next2" onClick="dijit.byId('myStackContainer').forward()">&gt;</button>
 
</body>
</html>
/trunk/api/js/dojo1.0/dijit/tests/layout/test_LayoutCode.html
New file
0,0 → 1,383
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Layout Demo</title>
 
 
<script type="text/javascript" src="../../../dojo/dojo.js"
djConfig="isDebug: true, parseOnLoad: true"></script>
<script type="text/javascript" src="../_testCommon.js"></script>
 
<script type="text/javascript">
dojo.require("dijit.layout.LayoutContainer");
dojo.require("dijit.layout.AccordionContainer");
dojo.require("dijit.layout.ContentPane");
dojo.require("dijit.layout.SplitContainer");
dojo.require("dijit.layout.TabContainer");
 
// Used in doc0.html
dojo.require("dijit.form.ComboBox");
dojo.require("dijit.form.Button");
 
dojo.require("dojo.parser"); // scan page for widgets and instantiate them
 
// Simple layout container layout
var simpleLayout = {
widgetType: "LayoutContainer",
params: { id: "rootWidget" },
style: "border: 3px solid grey; width: 95%; height: 400px;",
children: [
{
widgetType: "ContentPane",
params: {id: "left", layoutAlign: "left"},
style: "width: 100px; background: #ffeeff;",
innerHTML: "this is the left"
},
{
widgetType: "ContentPane",
params: {id: "right", layoutAlign: "right"},
style: "width: 100px; background: #ffeeff;",
innerHTML: "this is the right"
},
{
widgetType: "ContentPane",
params: {id: "top", layoutAlign: "top"},
style: "height: 100px; background: #eeeeee;",
innerHTML: "this is the top"
},
{
widgetType: "ContentPane",
params: {id: "bottom", layoutAlign: "bottom"},
style: "height: 100px; background: #eeeeee;",
innerHTML: "this is the bottom"
},
{
widgetType: "ContentPane",
params: {id: "client", layoutAlign: "client"},
style: "height: 100px; background: #ffffee;",
innerHTML: "this is the client"
}
]
};
 
// split container layout
var splitLayout = {
widgetType: "SplitContainer",
params: {id: "rootWidget", orientation: "horizontal"},
style: "border: 3px solid grey; width: 95%; height: 400px;",
children: [
{
widgetType: "ContentPane",
params: {id: "left"},
style: "background: #ffeeff;",
innerHTML: "left pane of split container"
},
{
widgetType: "SplitContainer",
params: {
id: "nested", orientation: "vertical"},
children: [
{
widgetType: "ContentPane",
params: {id: "top"},
style: "background: #eeffee;",
innerHTML: "center-top pane of nested split container"
},
{
widgetType: "ContentPane",
params: {id: "bottom"},
style: "background: #eeffee;",
innerHTML: "center-bottom pane of nested split container"
}
]
},
{
widgetType: "ContentPane",
params: {id: "right"},
style: "background: #ffeeff;",
innerHTML: "right pane of split container"
}
]
};
 
// tab container layout
var tabLayout = {
widgetType: "TabContainer",
params: {id: "rootWidget"},
style: "width: 95%; height: 400px;",
children: [
{
widgetType: "ContentPane",
params: {id: "content", title: "Content tab", href: "doc0.html", executeScripts: true},
style: "background: #ffeeff;"
},
{
widgetType: "SplitContainer",
params: {id: "nestedSplit", title: "Split pane tab", orientation: "vertical"},
children: [
{
widgetType: "ContentPane",
params: {id: "top"},
style: "background: #eeffee;",
innerHTML: "top pane of nested split container"
},
{
widgetType: "ContentPane",
params: {id: "bottom"},
style: "background: #eeffee;",
innerHTML: "bottom pane of nested split container"
}
]
},
{
widgetType: "TabContainer",
params: {id: "nestedTab", title: "Nested tabs"},
children: [
{
widgetType: "ContentPane",
params: {id: "left", title: "Nested Tab #1"},
style: "background: #eeffee;",
innerHTML: "tab 1 of nested tabs"
},
{
widgetType: "ContentPane",
params: {
id: "right", title: "Nested Tab #2"},
style: "background: #eeffee;",
innerHTML: "tab 2 of nested tabs"
}
]
}
]
};
 
/*
// tab container layout
var tabNoLayout = {
widgetType: "TabContainer",
params: {id: "rootWidget", doLayout: false},
children: [
{
widgetType: "ContentPane",
params: {id: "doc0", title: "Doc 0", href: "doc0.html", executeScripts: true},
style: "background: #ffeeff;"
},
{
widgetType: "ContentPane",
params: {id: "doc1", title: "Doc 1", href: "doc1.html", executeScripts: true},
style: "background: #eeffee;"
},
{
widgetType: "ContentPane",
params: {id: "doc2", title: "Doc 2", href: "doc2.html", executeScripts: true},
style: "background: #ffffee;"
}
]
};
*/
 
// accordion container layout
var accordionLayout = {
widgetType: "AccordionContainer",
params: {id: "rootWidget"},
style: "border: 3px solid grey; width: 95%; height: 400px;",
children: [
{
widgetType: "AccordionPane",
params: {id: "one", title: "Pane #1"},
style: "background: #ffeeff;",
innerHTML: "first pane contents"
},
{
widgetType: "AccordionPane",
params: {id: "two", title: "Pane #2"},
style: "background: #ffeeff;",
innerHTML: "second pane contents"
},
{
widgetType: "AccordionPane",
params: {id: "three", title: "Pane #3"},
style: "background: #ffeeff;",
innerHTML: "third pane contents"
}
]
};
 
// Create a widget hierarchy from a JSON structure like
// {widgetType: "LayoutContainer", params: { ... }, children: { ... } }
function createWidgetHierarchy(widgetJson){
// setup input node
var node = document.createElement("div");
document.body.appendChild(node); // necessary for tab contianer ???
if(widgetJson.style){
node.style.cssText = widgetJson.style;
}
if(widgetJson.innerHTML){
node.innerHTML=widgetJson.innerHTML;
}
 
// create the widget
var widget = new dijit.layout[widgetJson.widgetType](widgetJson.params, node);
 
// add its children (recursively)
if(widgetJson.children){
dojo.forEach(widgetJson.children,
function(child){ widget.addChild(createWidgetHierarchy(child)); });
}
widget.startup(); //TODO: this is required now, right?
 
return widget;
}
 
// create the widgets specified in layout and add them to widget "rootWidget"
function create(layout){
 
// erase old widget hierarchy (if it exists)
var rootWidget = dijit.byId("rootWidget");
if(rootWidget){
rootWidget.destroyRecursive();
}
 
// create new widget
rootWidget = createWidgetHierarchy(layout);
 
// and display it
var wrapper = dojo.byId("wrapper");
wrapper.innerHTML=""; // just to erase the initial HTML message
wrapper.appendChild(rootWidget.domNode);
// rootWidget.onResized();
 
// make/update the menu of operations on each widget
makeOperationTable();
}
 
// write out a menu of operations on each widget
function makeOperationTable(){
var html = "<table border=1>";
dijit.registry.forEach(function(widget){
html += "<tr><td>" + widget.id + "</td><td>";
html += "<button onclick='removeFromParent(\"" + widget.id + "\");'> destroy </button> ";
if(/Container/.test(widget.declaredClass)){
html += "<button onclick='addChild(\"" + widget.id + "\");'> add a child </button> ";
}
html += "</td></tr>";
});
html += "</table>";
dojo.byId("operations").innerHTML = html;
}
 
// remove a widget from it's parent and destroy it
function removeFromParent(widget){
widget = dijit.byId(widget);
if(widget.parent){
widget.parent.removeChild(widget);
}
widget.destroy();
 
// reset the operation table so this widget is no longer shown
makeOperationTable();
}
 
// add a child to given widget
function addChild(widget){
widget = dijit.byId(widget);
 
// setup input node
var node = document.createElement("div");
node.style.cssText = "height: 70px; width: 150px; overflow: auto; background: #cccccc; border: dotted black 2px;"; // necessary if parent is LayoutContainer
// create the widget
var alignments = ["top","bottom","left","right"];
var hrefs = ["doc0.html", "doc1.html", "doc2.html"];
var child = new dijit.layout.ContentPane(
{
title: "Widget " + cnt, // necessary if parent is tab
layoutAlign: alignments[cnt%4], // necessary if parent is LayoutContainer
executeScripts: true,
href: hrefs[cnt%3]
},
node);
cnt++;
 
if(/AccordionContainer/.test(widget.declaredClass)){
var pane = new dijit.layout.AccordionPane({
title: "AccordionWidget " + cnt
});
pane.setContent(child);
child = pane;
}
// add it to the parent
widget.addChild(child);
 
// reset the operation table so the new widget is shown
makeOperationTable();
}
var cnt=1;
 
// show a widget
function show(widget){
widget = dijit.byId(widget);
widget.show();
}
 
// hide a widget
function hide(widget){
widget = dijit.byId(widget);
widget.hide();
}
</script>
<style type="text/css">
@import "../../../dojo/resources/dojo.css";
@import "css/dijitTests.css";
 
html, body{
width: 100%; /* make the body expand to fill the visible window */
height: 100%;
overflow: hidden; /* erase window level scrollbars */
padding: 0 0 0 0;
margin: 0 0 0 0;
}
.dijitSplitPane{
margin: 5px;
}
#rightPane {
margin: 0;
}
#creator, #current {
border: 3px solid blue;
padding: 10px;
margin: 10px;
}
#wrapper {
border: 3px solid green;
padding: 10px;
margin: 10px;
}
</style>
</head>
<body>
<h1>Test of layout code programmatic creation</h1>
<table width="100%">
<tr>
<td id="creator" valign="top">
<h4>Creator</h4>
<p>Pressing a button will programatically add a hierarchy of widgets</p>
<button onClick="create(simpleLayout);">Simple Layout</button>
<button onClick="create(splitLayout);">Split Layout</button>
<button onClick="create(tabLayout);">Tab Layout</button>
<!-- <button onClick="create(tabNoLayout);">Tab Non-Layout</button> -->
<button onClick="create(accordionLayout);">Accordion Layout</button>
</td>
<td id="current">
<h4>Current widgets</h4>
This pane will let you try certain operations on each of the widgets.
<div id="operations" style="height: 200px; overflow: auto;"></div>
</td>
</tr>
</table>
<hr>
<div id="wrapper">
When you press a button, this will be filled in with the generated widgets
</div>
</body>
</html>
/trunk/api/js/dojo1.0/dijit/tests/layout/test_TabContainer.html
New file
0,0 → 1,158
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>TabContainer Demo</title>
 
<script type="text/javascript" src="../../../dojo/dojo.js"
djConfig="isDebug: true, parseOnLoad: true"></script>
<script type="text/javascript" src="../_testCommon.js"></script>
 
<script type="text/javascript">
dojo.require("dijit.layout.ContentPane");
dojo.require("dijit.layout.TabContainer");
dojo.require("dijit.layout.SplitContainer");
dojo.require("dijit.Tooltip");
dojo.require("dijit.layout.LinkPane");
dojo.require("dijit.form.Button");
dojo.require("dojo.parser"); // scan page for widgets and instantiate them
 
function testClose(pane,tab){
return confirm("Please confirm that you want tab "+tab.title+" closed");
}
 
startTime = new Date();
dojo.addOnLoad(function(){
var elapsed = new Date().getTime() - startTime;
var p = document.createElement("p");
p.appendChild(document.createTextNode("Widgets loaded in " + elapsed + "ms"));
document.body.appendChild(p);
// dojo.parser.parse(dojo.body());
});
 
dojo.addOnLoad(function(){
var tc = dijit.byId("mainTabContainer");
var cp = new dijit.layout.ContentPane({ title: 'Programmatically created tab' });
cp.domNode.innerHTML = "I was created programmatically!";
tc.addChild(cp, 3);
});
</script>
 
<style type="text/css">
@import "../../../dojo/resources/dojo.css";
@import "../css/dijitTests.css";
 
body {
font-family : sans-serif;
margin:20px;
}
 
/* add padding to each contentpane inside the tab container, and scrollbar if necessary */
.dojoTabPane {
padding : 10px 10px 10px 10px;
overflow: auto;
}
</style>
</head>
<body>
 
<h1 class="testTitle">Dijit layout.TabContainer tests</h1>
 
<p>These tabs are made up of local and external content. Tab 1 and Tab 2 are loading
files tab1.html and tab2.html. Tab 3 and Another Tab are using content that is already
part of this page. Tab2 is initially selected.
</p>
 
<div id="mainTabContainer" dojoType="dijit.layout.TabContainer" style="width: 100%; height: 20em;">
 
<div id="tab1" dojoType="dijit.layout.ContentPane" href="tab1.html" title="Tab 1"></div>
 
<div id="tab2" dojoType="dijit.layout.ContentPane" href="tab2.html" refreshOnShow="true" title="Tab 2" selected="true"></div>
 
<div dojoType="dijit.layout.ContentPane" title="Tab 3">
<h1>I am tab 3</h1>
<p>And I was already part of the page! That's cool, no?</p>
<p id="foo">tooltip on this paragraph</p>
<div dojoType="dijit.Tooltip" connectId="foo">I'm a tooltip!</div>
<button dojoType="dijit.form.Button">I'm a button </button>
<br>
<button dojoType="dijit.form.Button">So am I!</button>
<p>
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean
semper sagittis velit. Cras in mi. Duis porta mauris ut ligula. Proin
porta rutrum lacus. Etiam consequat scelerisque quam. Nulla facilisi.
Maecenas luctus venenatis nulla. In sit amet dui non mi semper iaculis.
Sed molestie tortor at ipsum. Morbi dictum rutrum magna. Sed vitae
risus.
</p>
<p>Aliquam vitae enim. Duis scelerisque metus auctor est venenatis
imperdiet. Fusce dignissim porta augue. Nulla vestibulum. Integer lorem
nunc, ullamcorper a, commodo ac, malesuada sed, dolor. Aenean id mi in
massa bibendum suscipit. Integer eros. Nullam suscipit mauris. In
pellentesque. Mauris ipsum est, pharetra semper, pharetra in, viverra
quis, tellus. Etiam purus. Quisque egestas, tortor ac cursus lacinia,
felis leo adipiscing nisi, et rhoncus elit dolor eget eros. Fusce ut
quam. Suspendisse eleifend leo vitae ligula. Nulla facilisi. Nulla
rutrum, erat vitae lacinia dictum, pede purus imperdiet lacus, ut
semper velit ante id metus. Praesent massa dolor, porttitor sed,
pulvinar in, consequat ut, leo. Nullam nec est. Aenean id risus blandit
tortor pharetra congue. Suspendisse pulvinar.
</p>
</div>
 
<div dojoType="dijit.layout.TabContainer" title="Inlined Sub TabContainer">
<a dojoType="dijit.layout.LinkPane" href="tab1.html">SubTab 1</a>
<a dojoType="dijit.layout.LinkPane" href="tab2.html" selected="true">SubTab 2</a>
</div>
 
<a dojoType="dijit.layout.LinkPane" href="tab3.html">Sub TabContainer from href</a>
 
<a dojoType="dijit.layout.LinkPane" href="tab4.html">SplitContainer from href</a>
 
</div>
 
<p>
The next example is with closable tabs.
Tab 1 and Tab 3 can be closed; Tab 3 has a confirm box.
</p>
 
<div id="ttabs" dojoType="dijit.layout.TabContainer" tabPosition="top" style="width: 100%; height: 10em;">
<div id="ttab1" dojoType="dijit.layout.ContentPane" href="tab1.html" title="Tab 1" closable="true"></div>
<div id="ttab2" dojoType="dijit.layout.ContentPane" href="tab2.html" refreshOnShow="true" title="Tab 2"></div>
<div dojoType="dijit.layout.ContentPane" title="Tab 3" onClose="testClose" closable="true">
<h1>I am tab 3</h1>
<p>And I was already part of the page! That's cool, no?</p>
<p>If you try to close me there should be a confirm dialog.</p>
</div>
</div>
 
<p>Tabs with titles on the bottom:</p>
 
<div id="btabs" dojoType="dijit.layout.TabContainer" tabPosition="bottom" style="width: 100%; height: 10em;">
<div id="btab1" dojoType="dijit.layout.ContentPane" href="tab1.html" title="Tab 1" closable="true"></div>
<div id="btab2" dojoType="dijit.layout.ContentPane" href="tab2.html" refreshOnShow="true" onLoad="console.debug('Tab2 onLoad');" title="Tab 2"></div>
</div>
 
<p>Tabs with titles on the left:</p>
 
<div id="lhtabs" dojoType="dijit.layout.TabContainer" tabPosition="left-h" style="width: 100%; height: 10em;">
<div id="lhtab1" dojoType="dijit.layout.ContentPane" href="tab1.html" title="Tab 1"></div>
<div id="lhtab2" dojoType="dijit.layout.ContentPane" href="tab2.html" refreshOnShow="true" title="Tab 2" closable="true"></div>
</div>
 
<p>Tabs with titles on the right:</p>
 
<div id="lrtabs" dojoType="dijit.layout.TabContainer" tabPosition="right-h" style="width: 100%; height: 10em;">
<div id="rhtab1" dojoType="dijit.layout.ContentPane" href="tab1.html" title="Tab 1"></div>
<div id="rhtab2" dojoType="dijit.layout.ContentPane" href="tab2.html" refreshOnShow="true" title="Tab 2" closable="true"></div>
</div>
 
<h3>Typical rendering time</h3>
<table border=1>
<tr><th>IE</th><th>Firefox (mac)</th></tr>
<tr><td>1719</td><td>922</td></tr>
</table>
<h3>Rendering time</h3>
 
</body>
</html>
/trunk/api/js/dojo1.0/dijit/tests/layout/test_Layout.html
New file
0,0 → 1,113
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Layout Demo</title>
 
 
<script type="text/javascript" src="../../../dojo/dojo.js"
djConfig="parseOnLoad: true, isDebug: true"></script>
<script type="text/javascript" src="../_testCommon.js"></script>
 
<script type="text/javascript">
dojo.require("dijit.layout.LayoutContainer");
dojo.require("dijit.layout.ContentPane");
dojo.require("dijit.layout.LinkPane");
dojo.require("dijit.layout.SplitContainer");
dojo.require("dijit.layout.TabContainer");
dojo.require("dojo.parser"); // scan page for widgets and instantiate them
</script>
<style type="text/css">
@import "../../../dojo/resources/dojo.css";
@import "../css/dijitTests.css";
 
html, body{
width: 100%; /* make the body expand to fill the visible window */
height: 100%;
padding: 0 0 0 0;
margin: 0 0 0 0;
}
.dijitSplitPane{
margin: 5px;
}
#rightPane {
margin: 0;
}
</style>
<script>
dojo.addOnLoad(function(){
// use "before advice" to print log message each time resize is called on a layout widget
var origResize = dijit.layout._LayoutWidget.prototype.resize;
dijit.layout._LayoutWidget.prototype.resize = function(mb){
console.log(this + ": resize(" + (mb ? "{w:"+ mb.w + ", h:" + mb.h + "}" : "null") +")" );
origResize.apply(this, arguments);
};
 
dojo.connect(dijit.layout.ContentPane.prototype, "resize", function(mb){
console.log(this + ": resize({w:"+ mb.w + ", h:" + mb.h + "})");
});
});
</script>
</head>
<body>
<div id="outer" dojoType="dijit.layout.LayoutContainer"
style="width: 100%; height: 100%;">
<div id="topBar" dojoType="dijit.layout.ContentPane" layoutAlign="top"
style="background-color: #274383; color: white;">
top bar
</div>
<div id="bottomBar" dojoType="dijit.layout.ContentPane" layoutAlign="bottom"
style="background-color: #274383; color: white;">
bottom bar
</div>
<div id="horizontalSplit" dojoType="dijit.layout.SplitContainer"
orientation="horizontal"
sizerWidth="5"
activeSizing="0"
layoutAlign="client"
>
<div id="leftPane" dojoType="dijit.layout.ContentPane"
sizeMin="20" sizeShare="20">
Left side
</div>
 
<div id="rightPane"
dojoType="dijit.layout.SplitContainer"
orientation="vertical"
sizerWidth="5"
activeSizing="0"
sizeMin="50" sizeShare="80"
>
<div id="mainTabContainer" dojoType="dijit.layout.TabContainer" sizeMin="20" sizeShare="70">
 
<a id="tab1" dojoType="dijit.layout.LinkPane" href="tab1.html">Tab 1</a>
 
<a id="tab2" dojoType="dijit.layout.LinkPane" href="tab2.html">Tab 2</a>
</div>
<div id="bottomRight" dojoType="dijit.layout.ContentPane" sizeMin="20" sizeShare="30">
Bottom right<br>
Bottom right<br>
Bottom right<br>
Bottom right<br>
Bottom right<br>
Bottom right<br>
Bottom right<br>
Bottom right<br>
Bottom right<br>
Bottom right<br>
Bottom right<br>
Bottom right<br>
Bottom right<br>
Bottom right<br>
Bottom right<br>
Bottom right<br>
Bottom right<br>
Bottom right<br>
Bottom right<br>
Bottom right<br>
</div>
</div>
</div>
</div>
</body>
</html>
/trunk/api/js/dojo1.0/dijit/tests/layout/test_ContentPane.html
New file
0,0 → 1,93
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>ContentPane Test</title>
 
<script type="text/javascript" src="../../../dojo/dojo.js"
djConfig="isDebug: true, parseOnLoad: true"></script>
<script type="text/javascript" src="../_testCommon.js"></script>
 
<script type="text/javascript">
dojo.require("dijit.layout.ContentPane");
dojo.require("dojo.data.ItemFileReadStore");
dojo.require("dijit.form.ComboBox");
dojo.require("dijit.InlineEditBox");
dojo.require("dojo.parser"); // scan page for widgets and instantiate them
</script>
<style>
@import "../../../dojo/resources/dojo.css";
@import "../css/dijitTests.css";
 
body {
margin: 1em;
padding: 1em;
}
 
.box {
position: relative;
background-color: white;
border: 2px solid black;
padding: 8px;
margin: 4px;
}
</style>
</head>
<body>
<h1 class="testTitle">Dijit layout.ContentPane tests</h1>
<p>pre-container paragraph</p>
 
<div dojoType="dijit.layout.ContentPane" class="box">
some text (top-level container)
 
<div dojoType="dijit.layout.ContentPane" class="box">
 
text in the inner container (1)
 
<div dojoType="dijit.layout.ContentPane" class="box" href="tab2.html" hasShadow="true">
hi
</div>
 
text in the inner container (2)
 
<div dojoType="dijit.layout.ContentPane" class="box">
inner-inner 2
</div>
 
text in the inner container (3)
 
<div dojoType="dijit.layout.ContentPane" class="box">
inner-inner 3
</div>
 
text in the inner container (4)
 
</div>
 
some more text (top-level container)
</div>
 
<p>mid-container paragraph</p>
 
<div dojoType="dijit.layout.ContentPane" class="box" hasShadow="true">
2nd top-level container
</div>
 
<p>post-container paragraph</p>
 
<div id="ContentPane3" class="box" hasShadow="true">
some content pane blah blah blah
</div>
<div dojoType="dijit.layout.ContentPane" class="box" href="combotab.html" hasShadow="true" id="test">
<p style='background-color:yellow;border:1px solid red;text-align:center;'>This text should automatically be replaced by downloaded content from combotab.html</p>
</div>
<input type="button" value="Change pane in 3 seconds" onClick='setTimeout("dijit.byId(\"test\").setHref(\"tab2.html\")", 3000);'>
<script type="text/javascript">
dojo.addOnLoad(function(){
var tmp = new dijit.layout.ContentPane({}, dojo.byId("ContentPane3"));
tmp.startup();
console.debug('created ' + tmp);
});
</script>
</body>
</html>
/trunk/api/js/dojo1.0/dijit/tests/layout/ContentPane.html
New file
0,0 → 1,597
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Test ContentPane</title>
<style type="text/css">
@import "../../../dojo/resources/dojo.css";
@import "../../themes/tundra/tundra.css";
@import "../css/dijitTests.css";
 
.box {
border: 1px solid black;
padding: 8px;
}
 
.dijitTestWidget {
border: 1px dashed red;
background-color: #C0E209 ;
}
</style>
 
<script type="text/javascript" src="../../../dojo/dojo.js"
djConfig="isDebug: true"></script>
<script type="text/javascript">
dojo.require("doh.runner");
dojo.require("dijit.layout.ContentPane");
dojo.require("dijit._Container");
dojo.require("dijit._Templated");
dojo.require("dijit.layout.StackContainer");
 
// create a do nothing, only for test widget
dojo.declare("dijit.TestWidget",
[dijit._Widget, dijit._Templated], {
templateString: "<span class='dijitTestWidget'></span>"
});
 
 
dojo.addOnLoad(function(){
doh.register("pane1",
[
{
name: "no_autoparse",
runTest: function(t){
if(dijit.byId("pane1")){
throw doh._AssertFailure("Page got autoparsed when it shouldn't");
}
}
}
]
);
 
var pane2;
 
doh.registerGroup("pane2",
[
{
name: "clear_content",
setUp: function(t){
pane2 = new dijit.layout.ContentPane({}, dojo.byId("pane2"));
pane2.setContent();// pass undefined on purpose
},
runTest: function(t){
t.assertEqual(0, dijit._Container.prototype.getChildren.call(pane2).length);
t.assertEqual("", pane2.domNode.innerHTML)
}
},
{
name: "setContent_String",
setUp: function(){
pane2.setContent();
},
runTest: function(t){
var msg = "<h3>a simple html string</h3>";
pane2.setContent(msg);
t.assertEqual(msg, pane2.domNode.innerHTML.toLowerCase());
}
},
{
name: "setContent_DOMNode",
setUp: function(t){
var div = dojo.doc.createElement('div');
div.innerHTML = "setContent( [DOMNode] )";
div.setAttribute('dojoType', 'dijit.TestWidget');
pane2.setContent(div);
},
runTest: function(t){
t.assertEqual(1, dijit._Container.prototype.getChildren.call(pane2).length);
},
tearDown: function(t){
pane2.setContent(); // clear content for next test
}
},
{
name: "setContent_NodeList",
setUp: function(t){
var div = dojo.doc.createElement('div');
div.innerHTML = "<div dojotype='dijit.TestWidget'>above</div>"
+"Testing!<div><p><span><b>Deep nested</b></span></p></div>"
+"<div dojotype='dijit.TestWidget'>below</div>";
 
var list = div.childNodes;
pane2.setContent(div.childNodes);
},
runTest: function(t){
t.assertEqual(2, dijit._Container.prototype.getChildren.call(pane2).length);
 
//regular DOM check
var children = pane2.domNode.childNodes;
t.assertEqual(4, children.length);
t.assertEqual("Testing!", children[1].nodeValue);
t.assertEqual("div", children[2].nodeName.toLowerCase());
t.assertEqual("<p><span><b>deep nested</b></span></p>", children[2].innerHTML.toLowerCase());
}
},
{
name: "setContent_dojo_NodeList",
setUp: function(t){
pane2.setContent();
},
runTest: function(t){
var div = dojo.doc.createElement('div');
div.innerHTML = "<div dojotype='dijit.TestWidget'>above</div>"
+"Testing!<div><p><span><b>Deep nested</b></span></p></div>"
+"<div dojotype='dijit.TestWidget'>below</div>";
 
var list = new dojo.NodeList();
dojo.forEach(div.childNodes, function(n){
list.push(n.cloneNode(true));
});
 
pane2.setContent(list);
t.assertEqual(4, pane2.domNode.childNodes.length);
}
},
{
name: "extractContent",
runTest: function(t){
var def = pane2.extractContent;
t.assertFalse(def);
 
// test that it's actually working
pane2.extractContent = true;
pane2.setContent('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" '
+'"http://www.w3.org/TR/html4/strict.dtd">'
+'<html><head><style>body{font-weight:bold;}</style></head>'
+'<body>extractContent test</body></html>');
 
t.assertEqual("extractContent test", pane2.domNode.innerHTML);
 
// reset back to default
pane2.extractContent = def;
}
},
 
/////////////////////////////////////////////////////////////////////////
// We assume that our network connection has a maximum of 1.5 sec latency
/////////////////////////////////////////////////////////////////////////
{
name: "setHref_loading",
timeout: 1800,
setUp: function(t){
pane2.setHref('getResponse.php?messId=1');
},
runTest: function(t){
var d = new tests.Deferred();
setTimeout(d.getTestCallback(
function(){
t.assertEqual(1, dijit._Container.prototype.getChildren.call(pane2).length);
})
, 1500);
return d;
}
},
{
name: "setHref_then_cancel",
timeout: 2800,
setUp: function(t){
pane2.setContent();// clear previous
},
runTest: function(t){
var msg = "This should NEVER be seen!";
pane2.setHref('getResponse.php?delay=1000&message='+encodeURI(msg));
var d = new t.Deferred();
setTimeout(d.getTestCallback(
function(){
t.assertFalse(pane2.domNode.innerHTML == msg);
}
), 2500);
 
pane2.cancel();
 
return d;
}
},
{
// test that setHref cancels a inflight setHref
name: "setHref_cancels_previous_setHref",
timeout: 2800,
setUp: function(t){
pane2.setContent();
},
runTest: function(t){
var msgCanceled = "This should be canceled";
pane2.setHref("getResponse.php?delay=1000&message="+encodeURI(msgCanceled));
 
var msg = "This message should win over the previous";
setTimeout(function(){
pane2.setHref("getResponse.php?message="+encodeURI(msg));
}, 900);
 
var d = new t.Deferred();
setTimeout(d.getTestCallback(
function(){
t.assertEqual(msg, pane2.domNode.innerHTML);
}
), 2500);
return d;
}
},
{
name: "setContent_cancels_setHref",
timeout: 2800,
setUp: function(t){
pane2.setContent();
},
runTest: function(t){
var msgCanceled = "This message be canceled";
pane2.setHref("getResponse.php?delay=1000&message="+encodeURI(msgCanceled));
 
var msg = "This message should win over the inflight one";
setTimeout(function(){
pane2.setContent(msg);
}, 900);
 
var d = new t.Deferred();
setTimeout(d.getTestCallback(
function(){
t.assertEqual(msg, pane2.domNode.innerHTML);
}
), 2500);
return d;
}
},
{
name: "refresh",
timeout: 1900,
setUp: function(t){
pane2.setHref("getResponse.php?message="+encodeURI('initial load'));
},
runTest: function(t){
var msg = 'refreshed load'
setTimeout(function(){
pane2.href = "getResponse.php?message="+encodeURI(msg);
pane2.refresh();
}, 100);
 
var d = new t.Deferred();
setTimeout(d.getTestCallback(
function(){
t.assertEqual(msg, pane2.domNode.innerHTML);
}
), 1600);
return d;
 
}
},
{
name: "preventCache",
timeout:1800,
setUp: function(t){
pane2.setContent();
},
runTest: function(t){
var def = pane2.preventCache;
t.assertFalse(def);
 
pane2.preventCache = true;
 
pane2.setHref("getResponse.php?bounceGetStr=1&message="+encodeURI('initial'));
var d = new t.Deferred();
setTimeout(d.getTestCallback(
function(){
var getStr = dojo.byId('bouncedGetStr');
t.assertTrue(getStr.innerHTML.indexOf('preventCache=') > -1);
}
), 1500);
 
pane2.preventCache = def;
return d;
},
tearDown: function(t){
pane2.preventCache = false;
}
},
{
name: "isLoaded",
timeout: 1800,
setUp: function(t){
pane2.setContent();
},
runTest: function(t){
t.assertTrue(pane2.isLoaded);
 
pane2.setHref("getResponse.php?delay=300&message=test");
 
t.assertFalse(pane2.isLoaded);
 
var ilObj = {}; // a object to get a reference instead of copy
 
// probe after 200ms
setTimeout(function(){
ilObj.probed = pane2.isLoaded;
}, 200);
 
var d = new t.Deferred();
setTimeout(d.getTestCallback(
function(){
t.assertTrue(pane2.isLoaded);
t.assertFalse(ilObj.probed);
}
), 1500);
return d;
}
},
{
// test that we does'nt load a response if we are hidden
name: "wait_with_load_when_domNode_hidden",
timeout: 1800,
setUp: function(t){
pane2.domNode.style.display = 'none';
pane2.setContent();
},
runTest: function(t){
pane2._msg = "This text should not be loaded until after widget is shown";
pane2.setHref("getResponse.php?message="+encodeURI(pane2._msg));
var d = new t.Deferred();
setTimeout(d.getTestCallback(
function(){
t.assertFalse(pane2.domNode.innerHTML == pane2._msg);
}
), 1500);
return d;
},
tearDown: function(t){
pane2.domNode.style.display = "";
}
},
{
name: "onDownloadError",
timeout: 1800,
setUp: function(t){
pane2.setContent();
},
runTest: function(t){
var res = {};
var msg = "Error downloading modified message";
var orig = pane2.onDownloadError;
 
 
pane2.onDownloadError = function(){
return msg;
}
 
this.onError = function(e){
res.onError = true;
res.onError_Arg = !!e;
return "This message should be ignored as it gets invoked by dojo.connect";
}
 
var evtHandle = dojo.connect(pane2, 'onDownloadError', this, 'onError');
 
// test onDownloadError
pane2.setHref('nonexistant');
 
// do the test
var d = new t.Deferred();
setTimeout(function(){
try{
if(!res.onError){
d.errback(new doh._AssertFailure("onDownloadError was never invoked"));
}
if(!res.onError_Arg){
d.errback(new doh._AssertFailure("onDownloadError did'nt get any argument on invokation"));
}
if(pane2.domNode.innerHTML != msg){
d.errback(new doh._AssertFailure("custom errortext not set"));
}
d.callback(true);
}catch(e){
d.errback(e);
}finally{
// reset to default
dojo.disconnect(evtHandle);
pane2.onDownloadError = orig;
}
}, 1500);
 
return d;
}
},
{
name: "onLoad|Unload_onDownloadStart|End",
timeout: 2400,
setUp:function(t){
pane2.setContent();
},
runTest:function(t){
var obj = {
start:function(){
this.start_called = 1;
// check that custom message gets set
setTimeout(function(){
obj.start_msg = (pane2.domNode.innerHTML == msg);
}, 20);
},
end: function(){ this.end_called = 1; },
load: function(){ this.load_called = 1; },
unload: function(){ this.unload_called = 1; }
};
 
//set custom message
var origStart = pane2.onDownloadStart;
var msg = "custom downloadstart message";
pane2.onDownloadStart = function(){ return msg; };
 
var startHandler = dojo.connect(pane2, 'onDownloadStart', obj, 'start');
var endHandler = dojo.connect(pane2, 'onDownloadEnd', obj, 'end');
var loadHandler = dojo.connect(pane2, 'onLoad', obj, 'load');
var unloadHandler = dojo.connect(pane2, 'onUnload', obj, 'unload');
 
pane2.setHref('getResponse.php?delay=400');
 
var d = new t.Deferred();
setTimeout(function(){
try{
if(!obj.start_called){
d.errback(new doh._AssertFailure('onDownloadStart not called'));
}
if(!obj.start_msg){
d.errback(new doh._AssertFailure('custom download message not set'));
}
if(!obj.end_called){
d.errback(new doh._AssertFailure('onDownloadEnd not called'));
}
if(!obj.unload_called){
d.errback(new doh._AssertFailure('onUnload not called'));
}
if(!obj.load_called){
d.errback(new doh._AssertFailure('onLoad not called'));
}
d.callback(true);
}catch(e){
d.errback(e);
}finally{
dojo.disconnect(endHandler);
dojo.disconnect(startHandler);
dojo.disconnect(unloadHandler);
dojo.disconnect(loadHandler);
 
pane2.onDownloadStart = origStart;
}
}, 1900);
 
return d;
}
}
 
]
);
 
var pane3, st, tmp;
 
doh.registerGroup("child_to_StackContainer",
[
{
// TODO: this test should be moved to registerGroup setUp when #3504 is fixed
// We actually dont need to test anything here, just setUp
name: "setUp_StackContainer",
setUp:function(t){
st = dojo.byId('stackcontainer');
dojo.addClass(st, 'box');
st = new dijit.layout.StackContainer({}, st);
 
st.addChild(new dijit.TestWidget());
pane3 = new dijit.layout.ContentPane({href:'getResponse.php?delay=300&message=Loaded!'}, dojo.doc.createElement('div'));
st.addChild(pane3);
 
pane3.startup(); // starts the ContentPane
},
runTest:function(t){
t.assertTrue(st);
t.assertEqual(2, st.getChildren().length);
}
},
{
name: "preload_false_by_default",
runTest: function(t){
t.assertFalse(pane3.isLoaded);
t.assertEqual('', pane3.domNode.innerHTML);
}
},
{
name: "startLoad when selected",
timeout: 2100,
runTest: function(t){
st.selectChild(pane3);
 
var d = new t.Deferred();
setTimeout(d.getTestCallback(
function(){
t.assertTrue(pane3.isLoaded);
t.assertEqual('Loaded!', pane3.domNode.innerHTML);
}
), 1800);
 
return d;
}
},
{
name: "refreshOnShow",
timeout: 2100,
setUp: function(t){
tmp = {
onUnload: function(){ this._unload_fired = 1; },
onLoad: function(){ this._load_fired = 1; }
};
tmp.unload = dojo.connect(pane3, 'onUnload', tmp, 'onUnload');
tmp.load = dojo.connect(pane3, 'onLoad', tmp, 'onLoad');
 
pane3.refreshOnShow = true;
},
runTest: function(t){
var d = new t.Deferred();
st.back();
st.forward();
 
setTimeout(d.getTestCallback(function(){
t.assertTrue(tmp._unload_fired);
t.assertTrue(tmp._load_fired);
t.assertEqual('Loaded!', pane3.domNode.innerHTML);
}), 1800);
 
return d;
},
tearDown: function(){
dojo.disconnect(tmp.unload);
dojo.disconnect(tmp.load);
pane3.refreshOnShow = pane3.constructor.prototype.refreshOnShow;
}
},
{
name: "downloadTriggeredOnStartup",
timeout: 1800,
runTest: function(t){
var href = 'getResponse.php?message=Loaded!'
var pane4 = new dijit.layout.ContentPane({href:href}, dojo.doc.createElement('div'));
 
dojo.place(pane4.domNode, pane3.domNode, 'after');
 
pane4.startup(); // parser should call startup when djConfig.parseOnLoad=true
 
var d = new t.Deferred();
setTimeout(d.getTestCallback(function(){
t.assertEqual('Loaded!', pane4.domNode.innerHTML);
pane4.destroy();
}), 1500);
return d;
}
}
]
);
 
doh.run();
});
</script>
</head>
<body class="tundra">
<h2>dijit.layout.ContentPane test</h2>
<h3>Test designed to run on localhost (minimize impact from network latency)</h3>
 
<h4>This should NOT be parsed automatically</h4>
<div dojoType="dijit.layout.ContentPane" class="box" hasShadow="true" id="pane1">
<div dojoType='dijit.TestWidget'>If this has a different background and a red border, the page parsed when it shouldn't</div>
</div>
<br/><h3>Testing ContentPane</h3>
<div id='pane2' class='box'>
Even tough the entire page isn't scanned for widgets,
any sub widgets of a ContentPane will be created when a ContentPane is created<br/>
<span id="zero" dojoType='dijit.TestWidget'>This should have a backgroundcolor and a border</span>
<div id="one" dojoType="dijit._Widget"></div>
<div id="two" dojoType="dijit._Widget"></div>
<div id="three" dojoType="dijit._Widget"></div>
</div>
<br/><br/>
<div id='stackcontainer'></div>
</body>
</html>
/trunk/api/js/dojo1.0/dijit/tests/layout/test_LayoutContainer.html
New file
0,0 → 1,174
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>dijit.layout.LayoutContainer Test</title>
 
<style type="text/css">
@import "../../../dojo/resources/dojo.css";
@import "../../themes/tundra/tundra.css";
</style>
 
<script type="text/javascript" src="../../../dojo/dojo.js"
djConfig="isDebug: true, parseOnLoad: true"></script>
 
<script type="text/javascript">
dojo.require("dijit.layout.LayoutContainer");
dojo.require("dijit.layout.ContentPane");
dojo.require("dijit.form.FilteringSelect");
dojo.require("dojo.parser"); // scan page for widgets and instantiate them
</script>
 
</head>
<body class="tundra">
<h2>Dijit layout.LayoutContainer tests</h2>
<p>Basic layout. Tabindex=&quot;0&quot; added to each pane to test for tab order matching source code order. Tab order
should be: left, right, top, middle/main, bottom</p>
 
<div dojoType="dijit.layout.LayoutContainer"
style="border: 2px solid black; width: 90%; height: 300px; padding: 10px;"
>
<div dojoType="dijit.layout.ContentPane" layoutAlign="left" style="background-color: #acb386; width: 100px;" tabindex="0">
left
</div>
<div dojoType="dijit.layout.ContentPane" layoutAlign="right" style="background-color: #acb386;" tabindex="0">
right
</div>
<div dojoType="dijit.layout.ContentPane" layoutAlign="top" style="background-color: #b39b86; " tabindex="0">
top bar
</div>
<div dojoType="dijit.layout.ContentPane" layoutAlign="client" style="background-color: #f5ffbf; padding: 10px;" tabindex="0">
main panel with <a href="http://www.dojotoolkit.org/">a link</a>.<br />
(to check we're copying children around properly).<br />
<select dojoType="dijit.form.FilteringSelect">
<option value="1">foo</option>
<option value="2">bar</option>
<option value="3">baz</option>
</select>
Here's some text that comes AFTER the combo box.
</div>
<div dojoType="dijit.layout.ContentPane" layoutAlign="bottom" style="background-color: #b39b86;" tabindex="0">
bottom bar
</div>
</div>
 
<p>Advanced layout. Tabindex=&quot;0&quot; added to each pane to test for tab order matching source code order. Tab order
should be: left, top, bottom, inner left, inner middle, inner right. This is not an ideal tab order. See below to use nested
layout containers to achieve a tab order which matches presentation and source code order.</p>
<div dojoType="dijit.layout.LayoutContainer"
style="border: 2px solid black; width: 90%; height: 300px; padding: 10px;"
>
<div dojoType="dijit.layout.ContentPane" layoutAlign="left" style="background-color: #acb386; width: 100px; margin: 5px;" tabindex="0">
left
</div>
<div dojoType="dijit.layout.ContentPane" layoutAlign="top" style="background-color: #b39b86; margin: 5px;" tabindex="0">
top bar
</div>
<div dojoType="dijit.layout.ContentPane" layoutAlign="bottom" style="background-color: #b39b86; margin: 5px;" tabindex="0">
 
bottom bar
</div>
<div dojoType="dijit.layout.ContentPane" layoutAlign="left" style="background-color: #eeeeee; width: 100px; margin: 5px;" tabindex="0">
inner left
</div>
<div dojoType="dijit.layout.ContentPane" layoutAlign="client" style="background-color: #f5ffbf; padding: 10px; margin: 5px;" tabindex="0">
main panel with <a href="http://www.dojotoolkit.org/">a link</a>.<br />
 
(to check we're copying children around properly).<br />
<select dojoType="dijit.form.FilteringSelect">
<option value="1">foo</option>
<option value="2">bar</option>
<option value="3">baz</option>
</select>
Here's some text that comes AFTER the combo box.
</div>
<div dojoType="dijit.layout.ContentPane" layoutAlign="right" style="background-color: #eeeeee; width: 100px; margin: 5px;" tabindex="0">
inner right
</div>
</div>
 
<p>Advanced layout with nested containers. Tabindex=&quot;0&quot; added to content panes to show tab order. Order should be:
left, top, inner left, inner middle, inner right, bottom. This is the preferred tab order for this type of layout.</p>
<div dojoType="dijit.layout.LayoutContainer"
style="border: 2px solid black; width: 90%; height: 300px; padding: 10px;"
>
<div dojoType="dijit.layout.ContentPane" layoutAlign="left" style="background-color: #acb386; width: 100px; margin: 5px;" tabindex="0">
left
</div>
<div dojoType="dijit.layout.ContentPane" layoutAlign="client" style="margin: 5px;" >
<div dojoType="dijit.layout.LayoutContainer" style="height:90%;border: 2px solid black;padding: 10px;">
<div dojoType="dijit.layout.ContentPane" layoutAlign="top" style="background-color: #b39b86; margin: 5px;" tabindex="0">
top bar
</div>
<div dojoType="dijit.layout.ContentPane" layoutAlign="client" style="margin: 5px;">
<div dojoType="dijit.layout.LayoutContainer" style="height:80%;border: 2px solid black;padding: 10px;">
<div dojoType="dijit.layout.ContentPane" layoutAlign="left" style="background-color: #eeeeee; width: 100px; margin: 5px;" tabindex="0">
inner left
</div>
<div dojoType="dijit.layout.ContentPane" layoutAlign="client" style="background-color: #f5ffbf; padding: 10px; margin: 5px;" tabindex="0">
main panel with <a href="http://www.dojotoolkit.org/">a link</a>.<br />
(to check we're copying children around properly).<br />
<select dojoType="dijit.form.FilteringSelect">
<option value="1">foo</option>
<option value="2">bar</option>
<option value="3">baz</option>
</select>
Here's some text that comes AFTER the combo box.
</div>
<div dojoType="dijit.layout.ContentPane" layoutAlign="right" style="background-color: #eeeeee; width: 100px; margin: 5px;" tabindex="0">
inner right
</div>
</div>
</div>
<div dojoType="dijit.layout.ContentPane" layoutAlign="bottom" style="background-color: #b39b86; margin: 5px;" tabindex="0" >
bottom bar
</div>
</div>
</div>
</div>
 
<p>Goofy spiral layout. Match of source code order to tab order can not be achieved with this type of layout.</p>
<div dojoType="dijit.layout.LayoutContainer"
style="border: 2px solid black; width: 90%; height: 300px; padding: 10px;"
>
<div dojoType="dijit.layout.ContentPane" layoutAlign="left" style="background-color: #663333; color: white; width: 100px;">
outer left
</div>
<div dojoType="dijit.layout.ContentPane" layoutAlign="top" style="background-color: #333366; color: white; height: 50px;">
outer top
</div>
<div dojoType="dijit.layout.ContentPane" layoutAlign="right" style="background-color: #663333; color: white; width: 100px;">
outer right
</div>
<div dojoType="dijit.layout.ContentPane" layoutAlign="bottom" style="background-color: #333366; color: white; height: 50px;">
outer bottom
</div>
<div dojoType="dijit.layout.ContentPane" layoutAlign="left" style="background-color: #99CC99; width: 100px;">
inner left
</div>
<div dojoType="dijit.layout.ContentPane" layoutAlign="top" style="background-color: #999966; height: 50px;">
inner top
</div>
<div dojoType="dijit.layout.ContentPane" layoutAlign="right" style="background-color: #99CC99; width: 100px;">
inner right
</div>
<div dojoType="dijit.layout.ContentPane" layoutAlign="bottom" style="background-color: #999966; height: 50px;">
inner bottom
</div>
<div dojoType="dijit.layout.ContentPane" layoutAlign="client" style="padding: 10px;">
main panel with <a href="http://www.dojotoolkit.org/">a link</a>.<br />
(to check we're copying children around properly).<br />
<select dojoType="dijit.form.FilteringSelect">
<option value="1">foo</option>
<option value="2">bar</option>
<option value="3">baz</option>
</select>
Here's some text that comes AFTER the combo box.
</div>
</div>
 
</body>
</html>
/trunk/api/js/dojo1.0/dijit/tests/layout/getResponse.php
New file
0,0 → 1,57
<?php
// this just bounces a message as a response, and optionally emulates network latency.
 
// default delay is 0 sec, to change:
// getResponse.php?delay=[Int milliseconds]
 
// to change the message returned
// getResponse.php?mess=whatever%20string%20you%20want.
 
// to select a predefined message
// getResponse.php?messId=0
 
error_reporting(E_ALL ^ E_NOTICE);
 
$delay = 1; // 1 micro second to avoid zero division in messId 2
if(isset($_GET['delay']) && is_numeric($_GET['delay'])){
$delay = (intval($_GET['delay']) * 1000);
}
 
if(isset($_GET['messId']) && is_numeric($_GET['messId'])){
switch($_GET['messId']){
case 0:
echo "<h3>WARNING This should NEVER be seen, delayed by 2 sec!</h3>";
$delay = 2;
break;
case 1:
echo "<div dojotype='dijit.TestWidget'>Testing setHref</div>";
break;
case 2:
echo "<div dojotype='dijit.TestWidget'>Delayed setHref test</div>
<div dojotype='dijit.TestWidget'>Delayed by " . ($delay/1000000) . " sec.</div>";
break;
case 3:
echo "IT WAS the best of times, it was the worst of times, it was the age of wisdom, it was the age of foolishness, it was the epoch of belief, it was the epoch of incredulity, it was the season of Light, it was the season of Darkness, it was the spring of hope, it was the winter of despair, we had everything before us, we had nothing before us, we were all going direct to Heaven, we were all going direct the other way -- in short, the period was so far like the present period, that some of its noisiest authorities insisted on its being received, for good or for evil, in the superlative degree of comparison only";
break;
case 4:
echo "There were a king with a large jaw and a queen with a plain face, on the throne of England; there were a king with a large jaw and a queen with a fair face, on the throne of France. In both countries it was clearer than crystal to the lords of the State preserves of loaves and fishes, that things in general were settled for ever.";
break;
case 5:
echo "It was the year of Our Lord one thousand seven hundred and seventy- five. Spiritual revelations were conceded to England at that favoured period, as at this. Mrs. Southcott had recently attained her five-and- twentieth blessed birthday, of whom a prophetic private in the Life Guards had heralded the sublime appearance by announcing that arrangements were made for the swallowing up of London and Westminster. Even the Cock-lane ghost had been laid only a round dozen of years, after rapping out its messages, as the spirits of this very year last past (supernaturally deficient in originality) rapped out theirs. Mere messages in the earthly order of events had lately come to the English Crown and People, from a congress of British subjects in America:";
break;
default:
echo "unknown messId:{$_GET['messId']}";
}
}
 
if(isset($_GET['bounceGetStr']) && $_GET['bounceGetStr']){
echo "<div id='bouncedGetStr'>{$_SERVER["QUERY_STRING"]}</div>";
}
 
if(isset($_GET['message']) && $_GET['message']){
echo $_GET['message'];
}
 
usleep($delay);
 
?>
/trunk/api/js/dojo1.0/dijit/tests/layout/test_TabContainer_remote.html
New file
0,0 → 1,109
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>TabContainer Demo</title>
 
<script type="text/javascript" djConfig="isDebug: true,parseOnLoad:true"
src="../../../dojo/dojo.js"></script>
<script type="text/javascript" src="../_testCommon.js"></script>
 
<script type="text/javascript">
dojo.require("dijit.layout.ContentPane");
dojo.require("dijit.layout.TabContainer");
dojo.require("dijit.Tooltip");
dojo.require("dijit.layout.LinkPane");
dojo.require("dijit.form.Button");
dojo.require("dojo.parser"); // scan page for widgets and instantiate them
 
var tabCounter;
function testClose(pane, tab){
// remove html from title
var title = dojo.trim(tab.title.replace(/<\/?[a-z][a-z0-9]*[^>]*>/ig, ""));
return confirm("Please confirm that you want tab "+title+" closed");
}
 
function randomMessageId(){
return Math.floor(Math.random() * 3) + 3;
}
 
function createTab(){
if(!tabCounter){ tabCounter = 3; }
 
var title = '<img src="../images/plus.gif" style="background-color:#95B7D3;"/> Tab ' +(++tabCounter);
var refreshOnShow = !!(tabCounter % 2);
 
var newTab = new dijit.layout.ContentPane({
title: title + (refreshOnShow ? ' <i>refreshOnShow</i>': ''),
closable:true,
refreshOnShow: refreshOnShow,
href: 'getResponse.php?delay=1000&messId='+randomMessageId()
+"&message="+encodeURI("<h1>Programmatically created Tab "+tabCounter+"</h1>")
}, dojo.doc.createElement('div'));
 
dijit.byId('ttabs').addChild(newTab);
 
newTab.startup(); // find parent TabContainer and subscribe to selectChild event
}
 
startTime = new Date();
dojo.addOnLoad(function(){
var elapsed = new Date().getTime() - startTime;
var p = document.createElement("p");
p.appendChild(document.createTextNode("Widgets loaded in " + elapsed + "ms"));
document.body.appendChild(p);
});
</script>
 
<style type="text/css">
@import "../../../dojo/resources/dojo.css";
@import "../css/dijitTests.css";
 
body {
font-family : sans-serif;
margin:20px;
}
 
/* add padding to each contentpane inside the tab container, and scrollbar if necessary */
.dojoTabPane {
padding : 10px 10px 10px 10px;
overflow: auto;
}
</style>
</head>
<body>
 
<h1 class="testTitle">Dijit layout.TabContainer (delayed) remote tests</h1>
 
<p>These tabs are made up of external content. Loading is delayed to make it easier to see if refreshOnShow and preload = 'false' is working.<br/>
The tabs also tests to insert html in the Tab title
</p>
 
<div dojoType='dijit.form.Button' onClick='createTab()'>Create a Tab</div>
<div id="ttabs" dojoType="dijit.layout.TabContainer" tabPosition="top" style="width: 100%; height: 20em;">
<a id="ttab1" dojoType="dijit.layout.LinkPane"
href="getResponse.php?messId=3&delay=1000"
closable="true"
><img src='../images/copy.gif'/> Tab1</a>
<a id="ttab2" dojoType="dijit.layout.LinkPane"
href="getResponse.php?messId=4&delay=1000"
refreshOnShow="true" title="Tab 2 "
selected='true'
closable='true'
><i>refreshOnShow</i>
<img src='../images/cut.gif'/>
</a>
<a dojoType="dijit.layout.LinkPane"
href="getResponse.php?messId=5&delay=1000"
onClose="testClose"
closable="true"
>
<b>Tab 3</b>
<img src='../images/paste.gif'/>
</a>
</div>
 
<h3>Rendering time</h3>
 
</body>
</html>
/trunk/api/js/dojo1.0/dijit/tests/layout/doc0.html
New file
0,0 → 1,12
<h1>Document 0</h1>
This document has <a href="http://www.dojotoolkit.org/">a link</a>.<br />
(to check we're copying children around properly).<br />
Also it's got a widget, a combo box:<br>
<select dojoType="dijit.form.ComboBox">
<option value="1">foo</option>
<option value="2">bar</option>
<option value="3">baz</option>
</select>
And a button too:
<button dojoType="dijit.form.Button">hello!</button>
Here's some text that comes AFTER the button.
/trunk/api/js/dojo1.0/dijit/tests/layout/combotab.html
New file
0,0 → 1,11
<div dojoType="dojo.data.ItemFileReadStore" jsId="stateStore"
url="../_data/states.json"></div>
State:
<span id="editable" dojoType="dijit.InlineEditBox" editor="dijit.form.ComboBox"
editorParams="{value: 'California', store: stateStore, searchAttr: 'name', promptMessage='Please enter a state'}">
<script type="dojo/connect" event="onChange">
// connect to editable onChange event, Note that we dont need to disconnect
console.log('User selected:'+this.getValue());
</script>
</span>
 
/trunk/api/js/dojo1.0/dijit/tests/layout/doc1.html
New file
0,0 → 1,13
<!-- Used from test_RemotePane.html -->
 
<h1> Document 1</h1>
 
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Vivamus risus. Praesent eu lacus et enim laoreet sollicitudin. Quisque mollis mi a lectus. Cras ante. Aliquam tempus justo laoreet justo. Vestibulum egestas feugiat nisi. Nulla ultrices consequat felis. Curabitur dignissim augue vel enim. Fusce tempus tempor mauris. Praesent suscipit pede in nunc. Duis mi neque, malesuada non, volutpat et, nonummy et, ante. Aliquam neque. Nulla rhoncus, turpis eget mattis molestie, magna nulla dictum ligula, quis tempor odio justo vel pede. Donec sit amet tellus. Phasellus sapien. Nulla id massa at nunc condimentum fringilla. Fusce suscipit ipsum et lorem consequat pulvinar. Quisque lacinia sollicitudin tellus.</p>
 
<p>Nulla massa lectus, porttitor vitae, dignissim vel, iaculis eget, mi. Vestibulum sed lorem. Nullam convallis elit id leo. Aliquam est purus, rutrum at, sodales non, nonummy a, justo. Proin at diam vel nibh dictum rhoncus. Duis nisl. Etiam orci. Integer hendrerit. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In ac erat. Sed velit orci, sodales quis, commodo ut, elementum sed, nibh. Cras mattis vulputate nisl. Mauris eu nulla sed orci dignissim laoreet. Morbi commodo, est vitae pharetra ullamcorper, ante nisl ultrices velit, sit amet vulputate turpis elit id lacus. Vestibulum diam. Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</p>
 
<p>Praesent rutrum nunc quis felis. Morbi tempor. Quisque porta magna imperdiet magna. Ut gravida, ipsum eu euismod consectetuer, nisl lectus posuere diam, vel dignissim elit nisi sit amet lorem. Curabitur non nunc. Morbi metus. Nulla facilisi. Sed et ante. Etiam ac lectus. Duis tristique molestie sem. Pellentesque nec quam. Nullam pellentesque ullamcorper sem.</p>
 
<p>Duis ut massa eget arcu porttitor pharetra. Curabitur malesuada nisi id eros. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Vivamus massa. Donec quis justo ut tortor faucibus suscipit. Vivamus commodo neque eget nulla. Donec imperdiet lacus condimentum justo. In sollicitudin magna vitae libero. Curabitur scelerisque libero et eros imperdiet cursus. Maecenas adipiscing. Integer imperdiet, neque ut fringilla semper, leo nisi tincidunt enim, id accumsan leo nisi a libero. Morbi rutrum hendrerit eros. Vestibulum eget augue vel urna congue faucibus.</p>
 
<p>Morbi ante sapien, consequat non, consectetuer vitae, pharetra non, dui. Cras tempus posuere quam. Vestibulum quis neque. Duis lobortis urna in elit. Aliquam non tellus. Etiam nisi eros, posuere vel, congue id, fringilla in, risus. Duis semper rutrum risus. Nullam felis massa, lobortis sit amet, posuere tempor, mattis id, tellus. Nulla id arcu interdum risus commodo tincidunt. Vivamus pretium pulvinar pede. Vivamus eget erat. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nullam bibendum, enim eu venenatis tempor, nunc elit convallis tortor, sit amet vulputate turpis arcu eu pede. Praesent molestie, lacus sed vehicula convallis, enim pede fringilla nunc, at porttitor justo ante a diam. Nunc magna eros, interdum vel, varius eget, volutpat eu, orci. Nunc nec mauris. Nulla facilisi. Vivamus dictum elementum risus. Nam placerat arcu.</p>
/trunk/api/js/dojo1.0/dijit/tests/layout/ContentPane.js
New file
0,0 → 1,9
if(!dojo._hasResource["dijit.tests.layout.ContentPane"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.tests.layout.ContentPane"] = true;
dojo.provide("dijit.tests.layout.ContentPane");
 
if(dojo.isBrowser){
doh.registerUrl("dijit.tests.layout.ContentPane", dojo.moduleUrl("dijit", "tests/layout/ContentPane.html"), 30000);
}
 
}
/trunk/api/js/dojo1.0/dijit/tests/layout/tab1.html
New file
0,0 → 1,6
 
<h1>Tab 1</h1>
 
<p>I am tab 1. I was loaded externally.</p>
 
<div label="foo!">blah</div>
/trunk/api/js/dojo1.0/dijit/tests/layout/doc2.html
New file
0,0 → 1,13
<!-- Used from test_RemotePane.html -->
 
<h1> Document 2</h1>
 
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Vivamus risus. Praesent eu lacus et enim laoreet sollicitudin. Quisque mollis mi a lectus. Cras ante. Aliquam tempus justo laoreet justo. Vestibulum egestas feugiat nisi. Nulla ultrices consequat felis. Curabitur dignissim augue vel enim. Fusce tempus tempor mauris. Praesent suscipit pede in nunc. Duis mi neque, malesuada non, volutpat et, nonummy et, ante. Aliquam neque. Nulla rhoncus, turpis eget mattis molestie, magna nulla dictum ligula, quis tempor odio justo vel pede. Donec sit amet tellus. Phasellus sapien. Nulla id massa at nunc condimentum fringilla. Fusce suscipit ipsum et lorem consequat pulvinar. Quisque lacinia sollicitudin tellus.</p>
 
<p>Nulla massa lectus, porttitor vitae, dignissim vel, iaculis eget, mi. Vestibulum sed lorem. Nullam convallis elit id leo. Aliquam est purus, rutrum at, sodales non, nonummy a, justo. Proin at diam vel nibh dictum rhoncus. Duis nisl. Etiam orci. Integer hendrerit. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In ac erat. Sed velit orci, sodales quis, commodo ut, elementum sed, nibh. Cras mattis vulputate nisl. Mauris eu nulla sed orci dignissim laoreet. Morbi commodo, est vitae pharetra ullamcorper, ante nisl ultrices velit, sit amet vulputate turpis elit id lacus. Vestibulum diam. Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</p>
 
<p>Praesent rutrum nunc quis felis. Morbi tempor. Quisque porta magna imperdiet magna. Ut gravida, ipsum eu euismod consectetuer, nisl lectus posuere diam, vel dignissim elit nisi sit amet lorem. Curabitur non nunc. Morbi metus. Nulla facilisi. Sed et ante. Etiam ac lectus. Duis tristique molestie sem. Pellentesque nec quam. Nullam pellentesque ullamcorper sem.</p>
 
<p>Duis ut massa eget arcu porttitor pharetra. Curabitur malesuada nisi id eros. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Vivamus massa. Donec quis justo ut tortor faucibus suscipit. Vivamus commodo neque eget nulla. Donec imperdiet lacus condimentum justo. In sollicitudin magna vitae libero. Curabitur scelerisque libero et eros imperdiet cursus. Maecenas adipiscing. Integer imperdiet, neque ut fringilla semper, leo nisi tincidunt enim, id accumsan leo nisi a libero. Morbi rutrum hendrerit eros. Vestibulum eget augue vel urna congue faucibus.</p>
 
<p>Morbi ante sapien, consequat non, consectetuer vitae, pharetra non, dui. Cras tempus posuere quam. Vestibulum quis neque. Duis lobortis urna in elit. Aliquam non tellus. Etiam nisi eros, posuere vel, congue id, fringilla in, risus. Duis semper rutrum risus. Nullam felis massa, lobortis sit amet, posuere tempor, mattis id, tellus. Nulla id arcu interdum risus commodo tincidunt. Vivamus pretium pulvinar pede. Vivamus eget erat. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nullam bibendum, enim eu venenatis tempor, nunc elit convallis tortor, sit amet vulputate turpis arcu eu pede. Praesent molestie, lacus sed vehicula convallis, enim pede fringilla nunc, at porttitor justo ante a diam. Nunc magna eros, interdum vel, varius eget, volutpat eu, orci. Nunc nec mauris. Nulla facilisi. Vivamus dictum elementum risus. Nam placerat arcu.</p>
/trunk/api/js/dojo1.0/dijit/tests/layout/tab2.html
New file
0,0 → 1,3
<h1>Tab 2</h1>
 
<p>I am tab 2. I was loaded externally as well.</p>
/trunk/api/js/dojo1.0/dijit/tests/layout/tab3.html
New file
0,0 → 1,39
<div dojoType="dijit.layout.TabContainer">
<div dojoType="dijit.layout.ContentPane" title="Subtab #1">
<p>This is a nested tab container BUT loaded via an href.</p>
</div>
<div dojoType="dijit.layout.ContentPane" title="Subtab #2">
<p>
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean
semper sagittis velit. Cras in mi. Duis porta mauris ut ligula. Proin
porta rutrum lacus. Etiam consequat scelerisque quam. Nulla facilisi.
Maecenas luctus venenatis nulla. In sit amet dui non mi semper iaculis.
Sed molestie tortor at ipsum. Morbi dictum rutrum magna. Sed vitae
risus.
</p>
<p>Aliquam vitae enim. Duis scelerisque metus auctor est venenatis
imperdiet. Fusce dignissim porta augue. Nulla vestibulum. Integer lorem
nunc, ullamcorper a, commodo ac, malesuada sed, dolor. Aenean id mi in
massa bibendum suscipit. Integer eros. Nullam suscipit mauris. In
pellentesque. Mauris ipsum est, pharetra semper, pharetra in, viverra
quis, tellus. Etiam purus. Quisque egestas, tortor ac cursus lacinia,
felis leo adipiscing nisi, et rhoncus elit dolor eget eros. Fusce ut
quam. Suspendisse eleifend leo vitae ligula. Nulla facilisi. Nulla
rutrum, erat vitae lacinia dictum, pede purus imperdiet lacus, ut
semper velit ante id metus. Praesent massa dolor, porttitor sed,
pulvinar in, consequat ut, leo. Nullam nec est. Aenean id risus blandit
tortor pharetra congue. Suspendisse pulvinar.
</p>
<p>Vestibulum convallis eros ac justo. Proin dolor. Etiam aliquam. Nam
ornare elit vel augue. Suspendisse potenti. Etiam sed mauris eu neque
nonummy mollis. Vestibulum vel purus ac pede semper accumsan. Vivamus
lobortis, sem vitae nonummy lacinia, nisl est gravida magna, non cursus
est quam sed urna. Phasellus adipiscing justo in ipsum. Duis sagittis
dolor sit amet magna. Suspendisse suscipit, neque eu dictum auctor,
nisi augue tincidunt arcu, non lacinia magna purus nec magna. Praesent
pretium sollicitudin sapien. Suspendisse imperdiet. Class aptent taciti
sociosqu ad litora torquent per conubia nostra, per inceptos
hymenaeos.
</p>
</div>
</div>
/trunk/api/js/dojo1.0/dijit/tests/i18n/test_i18n.js
New file
0,0 → 1,206
var validateValues = [];
var formatWidgetCount = 0;
var validateWidgetCount = 0;
 
function getElementsById(id){
var result = [];
 
if(!id || typeof(id) != "string"){
return result;
}
 
var ae = document.getElementsByTagName(dojo.byId(id).tagName);
for(var i = 0; i < ae.length; i++){
if(ae[i].id == id){
result.push(ae[i]);
}
}
return result;
}
 
function getString(n){
return n && n.toString();
}
 
function startTest(t){
startTestFormat(t);
startTestValidate(t);
}
 
function escapeEx(s){
var result = "";
for(var i = 0; i < s.length; i++){
var c = s.charAt(i);
switch (c){
case '"':
result += '\\"';
break;
case "'":
result += "\\'";
break;
default:
result += escape(c);
break;
}
}
return result;
}
 
function getAllTestCases(){
var allTestCases = [];
for(var i = 0; i < formatWidgetCount; i++){
allTestCases.push({
name: "format-" + i,
runTest: new Function("t", "startTestFormat(" + i + ", t)")
});
}
for(var i = 0; i < validateWidgetCount; i++){
allTestCases.push({
name: "validate-" + i,
runTest: new Function("t", "startTestValidate(" + i + ", t)")
});
}
return allTestCases;
}
 
function startTestFormat(i, t){
var test_node = dojo.doc.getElementById("test_display_" + i);
var exp = dojo.doc.getElementById("test_display_expected_" + i).value;
var res_node = dojo.doc.getElementById("test_display_result_" + i);
res_node.innerHTML = test_node.value;
res_node.style.backgroundColor = (test_node.value == exp) ? "#AFA" : "#FAA";
res_node.innerHTML += " <a style='font-size:0.8em' href='javascript:alert(\"Expected: " + escapeEx(exp) + "\\n Result: " + escapeEx(test_node.value) + "\")'>Compare (Escaped)</a>";
t.is(exp, test_node.value);
}
 
function startTestValidate(i, t){
/*
* The dijit.byNode has an issue: cannot handle same id.
*/
var test_node = dojo.doc.getElementById("test_validate_" + i);
var inp_node = dojo.doc.getElementById("test_validate_input_" + i);
var exp = dojo.doc.getElementById("test_validate_expected_" + i).innerHTML;
var res_node = dojo.doc.getElementById("test_validate_result_" + i);
var val_node = dojo.doc.getElementById("test_display_value_" + i);
 
test_node.value = inp_node.value;
/*
* The dijit.byNode has an issue.
*/
var widget = null;
var node = test_node;
while ((widget = dijit.byNode(node)) == null){
node = node.parentNode;
if(!node){
break;
}
}
 
if(widget){
widget.focus();
 
var expected = validateValues[i];
var result = widget.getValue();
if(validateValues[i].processValue){
expected = validateValues[i].processValue(expected);
result = validateValues[i].processValue(result);
}
var parseCorrect = getString(expected) == getString(result);
val_node.style.backgroundColor = parseCorrect ? "#AFA" : "#FAA";
val_node.innerHTML = getString(result) + (parseCorrect ? "" : "<br>Expected: " + getString(expected));
 
res_node.innerHTML = widget.isValid && !widget.isValid() ? "Wrong" : "Correct";
res_node.style.backgroundColor = res_node.innerHTML == exp ? "#AFA" : "#FAA";
 
t.is(getString(expected), getString(result));
}
}
 
function genFormatTestCase(desc, dojoType, dojoAttrs, value, expValue, comment){
dojo.doc.write("<tr>");
dojo.doc.write("<td>" + desc + "</td>");
dojo.doc.write("<td>");
dojo.doc.write("<input id='test_display_" + formatWidgetCount + "' type='text' value='" + value + "' ");
dojo.doc.write("dojoType='" + dojoType + "' ");
for(var attr in dojoAttrs){
dojo.doc.write(attr + "=\"" + dojoAttrs[attr] + "\" ");
}
dojo.doc.write("/>");
dojo.doc.write("</td>");
dojo.doc.write("<td><input id='test_display_expected_" + formatWidgetCount + "' value='" + expValue + "'></td>");
dojo.doc.write("<td id='test_display_result_" + formatWidgetCount + "'></td>");
dojo.doc.write("<td style='white-space:normal'>" + comment + "</td>");
dojo.doc.write("</tr>");
formatWidgetCount++;
}
/*
[
{attrs: {currency: "CNY", lang: "zh-cn"}, desc: "", value:"-123456789.46", expValue: "", comment: ""},
...
]
*/
function genFormatTestCases(title, dojoType, testCases){
dojo.doc.write("<h2 class=testTitle>" + title + "</h2>");
dojo.doc.write("<table border=1>");
dojo.doc.write("<tr>");
dojo.doc.write("<td class=title><b>Test Description</b></td>");
dojo.doc.write("<td class=title><b>Test</b></td>");
dojo.doc.write("<td class=title><b>Expected</b></td>");
dojo.doc.write("<td class=title><b>Result</b></td>");
dojo.doc.write("<td class=title><b>Comment</b></td>");
dojo.doc.write("</tr>");
 
for(var i = 0; i < testCases.length; i++){
var testCase = testCases[i];
genFormatTestCase(testCase.desc, dojoType, testCase.attrs, testCase.value, testCase.expValue, testCase.comment);
}
 
dojo.doc.write("</table>");
}
 
function genValidateTestCase(desc, dojoType, dojoAttrs, input, value, comment, isWrong){
dojo.doc.write("<tr>");
dojo.doc.write("<td>" + desc + "</td>");
dojo.doc.write("<td>");
dojo.doc.write("<input id='test_validate_" + validateWidgetCount + "' type='text' ");
dojo.doc.write("dojoType='" + dojoType + "' ");
for(var attr in dojoAttrs){
dojo.doc.write(attr + "=\"" + dojoAttrs[attr] + "\" ");
}
dojo.doc.write("/>");
dojo.doc.write("</td>");
dojo.doc.write("<td><input id='test_validate_input_" + validateWidgetCount + "' value='" + input + "'></td>");
dojo.doc.write("<td id='test_display_value_" + validateWidgetCount + "'></td>");
dojo.doc.write("<td id='test_validate_expected_" + validateWidgetCount + "'>" + (isWrong ? "Wrong" : "Correct") + "</td>");
dojo.doc.write("<td id='test_validate_result_" + validateWidgetCount + "'></td>");
dojo.doc.write("<td style='white-space:normal'>" + comment + "</td>");
dojo.doc.write("</tr>");
validateValues.push(value);
validateWidgetCount++;
}
/*
[
{attrs: {currency: "CNY", lang: "zh-cn"}, desc: "", value:false, expValue: "-123456789.46", comment: ""},
...
]
*/
function genValidateTestCases(title, dojoType, testCases){
dojo.doc.write("<h2 class=testTitle>" + title + "</h2>");
dojo.doc.write("<table border=1>");
dojo.doc.write("<tr>");
dojo.doc.write("<td class=title><b>Test Description</b></td>");
dojo.doc.write("<td class=title><b>Test</b></td>");
dojo.doc.write("<td class=title><b>Input</b></td>");
dojo.doc.write("<td class=title><b>Parsed Value</b></td>");
dojo.doc.write("<td class=title><b>Expected</b></td>");
dojo.doc.write("<td class=title><b>Result</b></td>");
dojo.doc.write("<td class=title><b>Comment</b></td>");
dojo.doc.write("</tr>");
 
for(var i = 0; i < testCases.length; i++){
var testCase = testCases[i];
genValidateTestCase(testCase.desc, dojoType, testCase.attrs, testCase.expValue, testCase.value, testCase.comment, testCase.isWrong);
}
 
dojo.doc.write("</table>");
}
/trunk/api/js/dojo1.0/dijit/tests/i18n/number.html
New file
0,0 → 1,214
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Test NumberTextBox</title>
 
<script type="text/javascript" src="../../../dojo/dojo.js"
djConfig="isDebug: true, extraLocale: ['zh-cn','fr-fr','ar-eg','hi-in']"></script>
<script type="text/javascript" src="../../../dojo/currency.js"></script>
<script type="text/javascript" src="../../../dojo/number.js"></script>
<script type="text/javascript">
dojo.require("dijit.form.NumberTextBox");
dojo.require("dijit.form.CurrencyTextBox");
dojo.require("dijit.form.DateTextBox");
dojo.require("dijit.form.ValidationTextBox");
dojo.require("dojo.date.locale");
dojo.require("dojo.date.stamp");
dojo.require("dojo.parser"); // scan page for widgets and instantiate them
dojo.require("doh.runner");
</script>
<script src="test_i18n.js"></script>
<script type="text/javascript">
dojo.addOnLoad(function(){
doh.register("t", getAllTestCases());
doh.run();
});
</script>
 
<style type="text/css">
@import "../../../dojo/resources/dojo.css";
@import "../../themes/tundra/tundra.css";
@import "../css/dijitTests.css";
 
.title {
background-color:#ddd;
}
 
.hint {
background-color:#eee;
}
 
.testExample {
background-color:#fbfbfb;
padding:1em;
margin-bottom:1em;
border:1px solid #bfbfbf;
}
 
.dojoTitlePaneLabel label {
font-weight:bold;
}
 
td {white-space:nowrap}
</style>
</head>
 
<body class="tundra">
<h1 class="testTitle">Dijit TextBox Globalization Test for Number</h1>
 
<!-- <h2 class="testTitle">Press the following button to start all test after this page is loaded.</h2>
<button id="startButton" onclick="startTest()">Start Test</button>-->
<p>
Before start this test, make sure the <b>dojo/cldr/nls</b> contains the data for "zh-cn", "fr-fr", "ar-eg" and "hi-in". If not, convert these CLDR data and put them there.
</p>
 
<script>
(function() {
 
genFormatTestCases("Number Format", "dijit.form.NumberTextBox", [
 
{ attrs: {lang: "zh-cn"},
desc: "Locale: zh_CN",
value: "12345.067",
expValue: "12,345.067",
comment: ""
},
{ attrs: {lang: "zh-cn"},
desc: "Locale: zh_CN",
value: "-12345.067",
expValue: "-12,345.067",
comment: ""
},
 
{ attrs: {lang: "fr-fr"},
desc: "Locale: fr_FR",
value: "12345.067",
expValue: "12&nbsp;345,067",
comment: "Failed in IE. The currency textbox should not reject the value generated by itself. <a href='currency.html#cmt_1'>See #1 (currency.html).</a>"
},
{ attrs: {lang: "fr-fr"},
desc: "Locale: zh_CN",
value: "-12345.067",
expValue: "-12&nbsp;345,067",
comment: "Failed in IE. The currency textbox should not reject the value generated by itself. <a href='currency.html#cmt_1'>See #1 (currency.html).</a>"
},
 
{ attrs: {lang: "ar-eg"},
desc: "Locale: ar_EG",
value: "12345.067",
expValue: "12٬345٫067",
comment: ""
},
{ attrs: {lang: "ar-eg"},
desc: "Locale: ar_EG",
value: "-12345.067",
expValue: "12٬345٫067-",
comment: ""
},
 
{ attrs: {lang: "ar-eg", constraints: "{localeDigit: true}"},
desc: "Locale: ar_EG",
value: "12345.067",
expValue: "١٢\u066C٣٤٥\u066B٠٦٧",
comment: "<a href='currency.html#cmt_2'>See #2 (currency.html).</a>"
},
{ attrs: {lang: "ar-eg", constraints: "{localeDigit: true}"},
desc: "Locale: ar_EG",
value: "-12345.067",
expValue: "١٢\u066C٣٤٥\u066B٠٦٧-",
comment: "<a href='currency.html#cmt_2'>See #2 (currency.html).</a>"
},
 
{ attrs: {lang: "hi-in", constraints: "{localeDigit: true}"},
desc: "Locale: hi_IN",
value: "123456789.068",
expValue: "१२,३४,५६,७८९.०६८",
comment: "<a href='currency.html#cmt_2'>See #2 (currency.html).</a>"
},
{ attrs: {lang: "hi-in", constraints: "{localeDigit: true}"},
desc: "Locale: hi_IN",
value: "-123456789.068",
expValue: "-१२,३४,५६,७८९.०६८",
comment: "<a href='currency.html#cmt_2'>See #2 (currency.html).</a>"
}
]);
 
genValidateTestCases("Number Validate", "dijit.form.NumberTextBox", [
 
{ attrs: {lang: "zh-cn"},
desc: "Locale: zh_CN",
value: 12345.067,
expValue: "12,345.067",
comment: ""
},
{ attrs: {lang: "zh-cn"},
desc: "Locale: zh_CN",
value: -12345.067,
expValue: "-12,345.067",
comment: ""
},
 
{ attrs: {lang: "fr-fr"},
desc: "Locale: fr_FR",
value: 12345.067,
expValue: "12&nbsp;345,067",
comment: "Failed in IE. <a href='currency.html#cmt_1'>See #1 (currency.html).</a>"
},
{ attrs: {lang: "fr-fr"},
desc: "Locale: zh_CN",
value: -12345.067,
expValue: "-12&nbsp;345,067",
comment: "Failed in IE. <a href='currency.html#cmt_1'>See #1 (currency.html).</a>"
},
 
{ attrs: {lang: "ar-eg"},
desc: "Locale: ar_EG",
value: 12345.067,
expValue: "12٬345٫067",
comment: ""
},
{ attrs: {lang: "ar-eg"},
desc: "Locale: ar_EG",
value: -12345.067,
expValue: "12٬345٫067-",
comment: ""
},
 
{ attrs: {lang: "ar-eg", constraints: "{localeDigit: true}"},
desc: "Locale: ar_EG",
value: 12345.067,
expValue: "١٢\u066C٣٤٥\u066B٠٦٧",
comment: "<a href='currency.html#cmt_2'>See #2 (currency.html).</a>"
},
{ attrs: {lang: "ar-eg", constraints: "{localeDigit: true}"},
desc: "Locale: ar_EG",
value: -12345.067,
expValue: "١٢\u066C٣٤٥\u066B٠٦٧-",
comment: "<a href='currency.html#cmt_2'>See #2 (currency.html).</a>"
},
 
{ attrs: {lang: "hi-in", constraints: "{localeDigit: true}"},
desc: "Locale: hi_IN",
value: 123456789.068,
expValue: "१२,३४,५६,७८९.०६८",
comment: "<a href='currency.html#cmt_2'>See #2 (currency.html).</a>"
},
{ attrs: {lang: "hi-in", constraints: "{localeDigit: true}"},
desc: "Locale: hi_IN",
value: -123456789.068,
expValue: "-१२,३४,५६,७८९.०६८",
comment: "<a href='currency.html#cmt_2'>See #2 (currency.html).</a>"
}
]);
 
dojo.parser.parse();
 
})();
 
</script>
</body>
</html>
 
 
/trunk/api/js/dojo1.0/dijit/tests/i18n/README
New file
0,0 → 1,4
Global Verification Tests (GVT)
 
In order to run these tests, you will need full locale support in Dojo. Dojo only ships with a small subset by default.
See util/buildscripts/cldr for an ant-based build script.
/trunk/api/js/dojo1.0/dijit/tests/i18n/currency.html
New file
0,0 → 1,263
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Test CurrencyTextBox</title>
 
<script type="text/javascript" src="../../../dojo/dojo.js"
djConfig="isDebug: true, extraLocale: ['zh-cn','fr-fr','ja-jp','ar-eg']"></script>
<script type="text/javascript" src="../../../dojo/currency.js"></script>
<script type="text/javascript" src="../../../dojo/number.js"></script>
<script type="text/javascript">
dojo.require("dijit.form.NumberTextBox");
dojo.require("dijit.form.CurrencyTextBox");
dojo.require("dijit.form.DateTextBox");
dojo.require("dijit.form.ValidationTextBox");
dojo.require("dojo.date.locale");
dojo.require("dojo.date.stamp");
dojo.require("dojo.parser"); // scan page for widgets and instantiate them
dojo.require("doh.runner");
</script>
<script src="test_i18n.js"></script>
<script type="text/javascript">
dojo.addOnLoad(function(){
doh.register("t", getAllTestCases());
doh.run();
});
</script>
 
<style type="text/css">
@import "../../../dojo/resources/dojo.css";
@import "../../themes/tundra/tundra.css";
@import "../css/dijitTests.css";
 
.title {
background-color:#ddd;
}
 
.hint {
background-color:#eee;
}
 
.testExample {
background-color:#fbfbfb;
padding:1em;
margin-bottom:1em;
border:1px solid #bfbfbf;
}
 
.dojoTitlePaneLabel label {
font-weight:bold;
}
 
td {white-space:nowrap}
</style>
</head>
 
<body class="tundra">
<h1 class="testTitle">Dijit TextBox Globalization Test for Currency</h1>
 
<!-- <h2 class="testTitle">Press the following button to start all test after this page is loaded.</h2>
<button id="startButton" onclick="startTest()">Start Test</button> -->
<p>
Before start this test, make sure the <b>dojo/cldr/nls</b> contains the data for "zh-cn", "fr-fr", "ja-jp" and "ar-eg"
and currencies CNY, EGP, EUR, JPY. If not, convert these CLDR data and put them there.
</p>
 
<script>
(function() {
genFormatTestCases("Currency Format", "dijit.form.CurrencyTextBox", [
 
{ attrs: {Currency: "CNY", lang: "zh-cn"},
desc: "Locale: <b>zh_CN</b> Currency: <b>CNY</b>",
value: "123456789.46",
expValue: "&#xFFE5;123,456,789.46",
comment: ""
},
{ attrs: {Currency: "CNY", lang: "zh-cn"},
desc: "Locale: <b>zh_CN</b> Currency: <b>CNY</b>",
value: "-123456789.46",
expValue: "-&#xFFE5;123,456,789.46",
comment: ""
},
 
{ attrs: {Currency: "EUR", lang: "fr-fr"},
desc: "Locale: <b>fr_FR</b> Currency: <b>EUR</b>",
value: "123456789.46",
expValue: "123&nbsp;456&nbsp;789,46 &euro;",
comment: "Failed in IE: the currency textbox should not reject the value generated by itself. <a href='#cmt_1'>See #1.</a>"
},
{ attrs: {Currency: "EUR", lang: "fr-fr"},
desc: "Locale: <b>zh_CN</b> Currency: <b>EUR</b>",
value: "-123456789.46",
expValue: "-123&nbsp;456&nbsp;789,46 &euro;",
comment: "Failed in IE: the currency textbox should not reject the value generated by itself. <a href='#cmt_1'>See #1.</a>"
},
 
{ attrs: {Currency: "JPY", lang: "ja-jp"},
desc: "Locale: <b>ja_JP</b> Currency: <b>JPY</b>",
value: "123456789.46",
expValue: "&#xFFE5;123,456,789",
comment: ""
},
{ attrs: {Currency: "JPY", lang: "ja-jp"},
desc: "Locale: <b>ja_JP</b> Currency: <b>JPY</b>",
value: "-123456789.46",
expValue: "-&#xFFE5;123,456,789",
comment: ""
},
 
{ attrs: {Currency: "EGP", lang: "ar-eg"},
desc: "Locale: <b>ar_EG</b> Currency: <b>EGP</b>",
value: "123456789.46",
expValue: "&#x062C;.&#x0645;.\u200F 123&#x066C;456&#x066C;789&#x066B;46",
comment: "Failed in Firefox. <a href='#cmt_2'>See #2.</a>"
},
{ attrs: {Currency: "EGP", lang: "ar-eg"},
desc: "Locale: <b>ar_EG</b> Currency: <b>EGP</b>",
value: "-123456789.46",
expValue: "&#x062C;.&#x0645;.\u200F 123&#x066C;456&#x066C;789&#x066B;46-",
comment: "Failed in Firefox. <a href='#cmt_2'>See #2.</a>"
},
 
{ attrs: {Currency: "EGP", lang: "ar-eg", constraints: "{localeDigit: true}"},
desc: "Locale: <b>ar_EG</b> Currency: <b>EGP</b>",
value: "123456789.46",
expValue: "&#x062C;.&#x0645;.\u200F ١٢٣\u066C٤٥٦\u066C٧٨٩\u066B٤٦",
comment: "<a href='#cmt_3'>See #3.</a> Failed in Firefox. <a href='#cmt_2'>See #2.</a>"
},
{ attrs: {Currency: "EGP", lang: "ar-eg", constraints: "{localeDigit: true}"},
desc: "Locale: <b>ar_EG</b> Currency: <b>EGP</b>",
value: "-123456789.46",
expValue: "&#x062C;.&#x0645;.\u200F ١٢٣\u066C٤٥٦\u066C٧٨٩\u066B٤٦-",
comment: "<a href='#cmt_3'>See #3.</a> Failed in Firefox. <a href='#cmt_2'>See #2.</a>"
}
]);
 
genValidateTestCases("Currency Validate", "dijit.form.CurrencyTextBox", [
 
{ attrs: {Currency: "CNY", lang: "zh-cn"},
desc: "Locale: <b>zh_CN</b> Currency: <b>CNY</b>",
value: 123456789.46,
expValue: "&#xFFE5;123,456,789.46",
comment: ""
},
{ attrs: {Currency: "CNY", lang: "zh-cn"},
desc: "Locale: <b>zh_CN</b> Currency: <b>CNY</b>",
value: -123456789.46,
expValue: "-&#xFFE5;123,456,789.46",
comment: ""
},
 
{ attrs: {Currency: "EUR", lang: "fr-fr"},
desc: "Locale: <b>fr_FR</b> Currency: <b>EUR</b>",
value: 123456789.46,
expValue: "123&nbsp;456&nbsp;789,46 &euro;",
comment: "Failed in IE. <a href='#cmt_1'>See #1.</a>"
},
{ attrs: {Currency: "EUR", lang: "fr-fr"},
desc: "Locale: <b>zh_CN</b> Currency: <b>EUR</b>",
value: -123456789.46,
expValue: "-123&nbsp;456&nbsp;789,46 &euro;",
comment: "Failed in IE. <a href='#cmt_1'>See #1.</a>"
},
 
{ attrs: {Currency: "JPY", lang: "ja-jp"},
desc: "Locale: <b>ja_JP</b> Currency: <b>JPY</b>",
value: 123456789,
expValue: "&#xFFE5;123,456,789",
comment: ""
},
{ attrs: {Currency: "JPY", lang: "ja-jp"},
desc: "Locale: <b>ja_JP</b> Currency: <b>JPY</b>",
value: -123456789,
expValue: "-&#xFFE5;123,456,789",
comment: ""
},
 
{ attrs: {Currency: "EGP", lang: "ar-eg"},
desc: "Locale: <b>ar_EG</b> Currency: <b>EGP</b>",
value: 123456789.46,
expValue: "&#x062C;.&#x0645;.\u200F 123&#x066C;456&#x066C;789&#x066B;46",
comment: "Failed in Firefox. <a href='#cmt_2'>See #2.</a>"
},
{ attrs: {Currency: "EGP", lang: "ar-eg"},
desc: "Locale: <b>ar_EG</b> Currency: <b>EGP</b>",
value: -123456789.46,
expValue: "&#x062C;.&#x0645;.\u200F 123&#x066C;456&#x066C;789&#x066B;46-",
comment: "Failed in Firefox. <a href='#cmt_2'>See #2.</a>"
},
 
{ attrs: {Currency: "EGP", lang: "ar-eg", constraints: "{localeDigit: true}"},
desc: "Locale: <b>ar_EG</b> Currency: <b>EGP</b>",
value: 123456789.46,
expValue: "&#x062C;.&#x0645;.\u200F ١٢٣\u066C٤٥٦\u066C٧٨٩\u066B٤٦",
comment: "<a href='#cmt_3'>See #3.</a> Failed in Firefox. <a href='#cmt_2'>See #2.</a>"
},
{ attrs: {Currency: "EGP", lang: "ar-eg", constraints: "{localeDigit: true}"},
desc: "Locale: <b>ar_EG</b> Currency: <b>EGP</b>",
value: -123456789.46,
expValue: "&#x062C;.&#x0645;.\u200F ١٢٣\u066C٤٥٦\u066C٧٨٩\u066B٤٦-",
comment: "<a href='#cmt_3'>See #3.</a> Failed in Firefox. <a href='#cmt_2'>See #2.</a>"
}
]);
 
dojo.parser.parse();
 
})();
 
</script>
 
<h2 class="testTitle">Issues &amp; Comments</h2>
<h3 class="testTitle"><a name="cmt_1">Issue #1<sup style="color:blue">Fixed</sup></a></h3>
<p>
Some browsers like FireFox have a bug on the non-breaking space character (U+00A0, <b>&amp;nbsp;</b> or <b>&amp;#160;</b> or
<b>&amp;#xA0;</b> in HTML).
They always convert the NBSP character to a normal space (U+0020, <b>&amp;#x20;</b> in HTML) automatically in the following circumstances:
</p>
<ul>
<li>Copy text from the page</li>
<li>Use <b>innerHTML</b> to get the content of a certain element</li>
<li>Use <b>value</b> to get an <b>INPUT</b> element's value</li>
</ul>
<p>
You cannot read a real NBSP character from an <b>INPUT</b> element on these browsers. It causes issues when some formatting data in CLDR
contains an NBSP character. For example,
</p>
<ul>
<li>Many locales like French use an NBSP character as a group separator in numbers</li>
<li>French and Finnish use NBSP characters in their percentage and currency format patterns respectively</li>
<li>Russian uses NBSP characters in their date format pattern (see <a href="test_validateDate.html">test_validateDate.html</a>)</li>
</ul>
<p>
So Dojo may generate formatted data with NBSP characters in it but cannot read NBSP charaters from user's input in some browser.
</p>
 
<h3 class="testTitle"><a name="cmt_2">Issue #2<sup style="color:blue">Fixed: the CLDR data generator should be fixed by adding code to convert U+200F to "\u200F" in nls JS files.</sup></a></h3>
<p>
Most Bidi currency symbols contain an LTR-MARK (U+200F) character at the very beginning.
But Firefox ignores it when it is not in any escaping form. This should be a bug of Firefox.
For example, click <a href="javascript:alert('‏'.indexOf('\u200F'))"><code>alert('‏'.indexOf('\u+200F'))</code></a> (there is a U+200F in the empty-looking string):
</p>
<ul>
<li>In Firefox, shows "-1" -- no U+200F found</li>
<li>In IE &amp; Opera, shows "0" -- the U+200F is found</li>
</ul>
<p>
But if the U+200F is in some escaping form, Firefox will work as well as other browsers.
Click <a href="javascript:alert('\u200F'.indexOf('\u200F'))"><code>alert('\u200F'.indexOf('\u+200F'))</code></a> to see the same result both in Firefox and IE:
</p>
 
<h3 class="testTitle"><a name="cmt_3">Issue #3<sup style="color:blue">Fixed: added a "localeDigit" to the options</sup></a></h3>
<p>
Strictly speaking, the data conversion must support non-European number characters in some locales like Arabic and Hindi.
For example, ICU formats a number data into Indic number characters by default in the Arabic locale.
However, currently Dojo does not support this feature (Dojo uses the default number conversion of the browser).
</p>
 
</body>
</html>
/trunk/api/js/dojo1.0/dijit/tests/i18n/date.html
New file
0,0 → 1,173
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Test DateTextBox</title>
 
<script type="text/javascript" src="../../../dojo/dojo.js"
djConfig="isDebug: true, extraLocale: ['zh-cn','fr-fr','ja-jp','ar-eg','ru-ru','hi-in','en-us']"></script>
<script type="text/javascript" src="../../../dojo/currency.js"></script>
<script type="text/javascript" src="../../../dojo/number.js"></script>
<script type="text/javascript">
dojo.require("dijit.form.NumberTextBox");
dojo.require("dijit.form.CurrencyTextBox");
dojo.require("dijit.form.DateTextBox");
dojo.require("dijit.form.ValidationTextBox");
dojo.require("dojo.date.locale");
dojo.require("dojo.date.stamp");
dojo.require("dojo.parser"); // scan page for widgets and instantiate them
dojo.require("doh.runner");
</script>
<script src="test_i18n.js"></script>
<script type="text/javascript">
dojo.addOnLoad(function(){
doh.register("t", getAllTestCases());
doh.run();
});
</script>
 
<style type="text/css">
@import "../../../dojo/resources/dojo.css";
@import "../../themes/tundra/tundra.css";
@import "../css/dijitTests.css";
 
.title {
background-color:#ddd;
}
 
.hint {
background-color:#eee;
}
 
.testExample {
background-color:#fbfbfb;
padding:1em;
margin-bottom:1em;
border:1px solid #bfbfbf;
}
 
.dojoTitlePaneLabel label {
font-weight:bold;
}
 
td {white-space:nowrap}
</style>
<script>
function gen4DateFormat(testCases, language, locale, date, short, shortCmt, medium, mediumCmt, long, longCmt, full, fullCmt) {
testCases.push({
attrs: {constraints: language.indexOf("hi") == 0 ? "{formatLength:'short', localeDigit: true}" : "{formatLength:'short'}", lang: language},
desc: "Locale: <b>" + locale + "</b> Format: <b>Short</b>",
value: date,
expValue: short,
comment: shortCmt
});
testCases.push({
attrs: {constraints: language.indexOf("hi") == 0 ? "{formatLength:'medium', localeDigit: true}" : "{formatLength:'medium'}", lang: language},
desc: "Locale: <b>" + locale + "</b> Format: <b>Medium</b>",
value: date,
expValue: medium,
comment: mediumCmt
});
testCases.push({
attrs: {constraints: language.indexOf("hi") == 0 ? "{formatLength:'long', localeDigit: true}" : "{formatLength:'long'}", lang: language},
desc: "Locale: <b>" + locale + "</b> Format: <b>Long</b>",
value: date,
expValue: long,
comment: longCmt
});
testCases.push({
attrs: {constraints: language.indexOf("hi") == 0 ? "{formatLength:'full', localeDigit: true}" : "{formatLength:'full'}", lang: language},
desc: "Locale: <b>" + locale + "</b> Format: <b>Full</b>",
value: date,
expValue: full,
comment: fullCmt
});
}
</script>
</head>
 
<body class="tundra">
<h1 class="testTitle">Dijit TextBox Globalization Test for Date</h1>
 
<!-- <h2 class="testTitle">Press the following button to start all test after this page is loaded.</h2>
<button id="startButton" onclick="startTest()">Start Test</button>-->
<p>
Before start this test, make sure the <b>dojo/cldr/nls</b> contains the data for "zh-cn", "fr-fr", "ja-jp", "ru-ru", "hi-in", "en-us" and "ar-eg". If not, convert these CLDR data and put them there.
</p>
 
<script>
(function() {
var testCases;
 
testCases = new Array();
gen4DateFormat(testCases, "ru-ru", "ru_RU", "2005-07-31",
"31.07.05", "", "31.07.2005", "", "31 июля 2005&nbsp;г.", "Failed in Firefox. <a href='currency.html#cmt_1'>See #1 (currency.html).</a>", "31 июля 2005&nbsp;г.", "Failed in Firefox. <a href='currency.html#cmt_1'>See #1 (currency.html).</a>");
gen4DateFormat(testCases, "zh-cn", "zh_CN", "2005-07-31",
"05-7-31", "", "2005-7-31", "", "2005年7月31日", "", "2005年7月31日星期日", "");
gen4DateFormat(testCases, "en-us", "en_US", "2005-07-31",
"7/31/05", "", "Jul 31, 2005", "", "July 31, 2005", "", "Sunday, July 31, 2005", "");
gen4DateFormat(testCases, "fr-fr", "fr_FR", "2005-07-31",
"31/07/05", "", "31 juil. 05", "", "31 juillet 2005", "", "dimanche 31 juillet 2005", "");
gen4DateFormat(testCases, "ja-jp", "ja_JP", "2005-07-31",
"05/07/31", "", "2005/07/31", "", "2005年7月31日", "", "2005年7月31日日曜日", "");
gen4DateFormat(testCases, "ar-eg", "ar_EG", "2005-07-31",
"31/7/2005", "", "31/07/2005", "", "31 &#x064A;&#x0648;&#x0644;&#x064A;&#x0648;&#x2C; 2005", "", "&#x0627;&#x0644;&#x0623;&#x062D;&#x062F;&#x2C; 31 &#x064A;&#x0648;&#x0644;&#x064A;&#x0648;&#x2C; 2005", "");
gen4DateFormat(testCases, "hi-in", "hi_IN", "2005-07-31",
"३१-७-०५", "<a href='currency.html#cmt_3'>See #3 (currency.html).</a>", "३१-०७-२००५", "<a href='currency.html#cmt_3'>See #3 (currency.html).</a>", "३१ जुलाई २००५", "<a href='currency.html#cmt_3'>See #3 (currency.html).</a>", "रविवार ३१ जुलाई २००५", "<a href='currency.html#cmt_3'>See #3 (currency.html).</a>");
genFormatTestCases("Date Format", "dijit.form.DateTextBox", testCases);
 
testCases = new Array();
gen4DateFormat(testCases, "ru-ru", "ru_RU", new Date(2005, 6, 31),
"31.07.05", "", "31.07.2005", "", "31 июля 2005&nbsp;г.", "Failed in Firefox. <a href='currency.html#cmt_1'>See #1 (currency.html).</a>", "31 июля 2005&nbsp;г.", "Failed in Firefox. <a href='currency.html#cmt_1'>See #1 (currency.html).</a>");
gen4DateFormat(testCases, "zh-cn", "zh_CN", new Date(2005, 6, 31),
"05-7-31", "", "2005-7-31", "", "2005年7月31日", "", "2005年7月31日星期日", "");
gen4DateFormat(testCases, "en-us", "en_US", new Date(2005, 6, 31),
"7/31/05", "", "Jul 31, 2005", "", "July 31, 2005", "", "Sunday, July 31, 2005", "");
gen4DateFormat(testCases, "fr-fr", "fr_FR", new Date(2005, 6, 31),
"31/07/05", "", "31 juil. 05", "", "31 juillet 2005", "", "dimanche 31 juillet 2005", "");
gen4DateFormat(testCases, "ja-jp", "ja_JP", new Date(2005, 6, 31),
"05/07/31", "", "2005/07/31", "", "2005年7月31日", "", "2005年7月31日日曜日", "");
gen4DateFormat(testCases, "ar-eg", "ar_EG", new Date(2005, 6, 31),
"31/7/2005", "", "31/07/2005", "", "31 &#x064A;&#x0648;&#x0644;&#x064A;&#x0648;&#x2C; 2005", "", "&#x0627;&#x0644;&#x0623;&#x062D;&#x062F;&#x2C; 31 &#x064A;&#x0648;&#x0644;&#x064A;&#x0648;&#x2C; 2005", "");
gen4DateFormat(testCases, "hi-in", "hi_IN", new Date(2005, 6, 31),
"३१-७-०५", "<a href='currency.html#cmt_3'>See #3 (currency.html).</a>", "३१-०७-२००५", "<a href='currency.html#cmt_3'>See #3 (currency.html).</a>", "३१ जुलाई २००५", "<a href='currency.html#cmt_3'>See #3 (currency.html).</a>", "रविवार ३१ जुलाई २००५", "<a href='currency.html#cmt_3'>See #3 (currency.html).</a>");
genValidateTestCases("Date Validate", "dijit.form.DateTextBox", testCases);
 
dojo.parser.parse();
 
})();
 
</script>
</body>
</html>
 
<!--
testCases.push({
attrs: {constraints: language.indexOf("hi") == 0 ? "{formatLength:'short', localeDigit: true}" : "{formatLength:'short'}", lang: language},
desc: "Locale: <b>" + locale + "</b> Format: <b>Short</b>",
value: date,
expValue: short,
comment: shortCmt
});
testCases.push({
attrs: {constraints: language.indexOf("hi") == 0 ? "{formatLength:'medium', localeDigit: true}" : "{formatLength:'medium'}", lang: language},
desc: "Locale: <b>" + locale + "</b> Format: <b>Medium</b>",
value: date,
expValue: medium,
comment: mediumCmt
});
testCases.push({
attrs: {constraints: language.indexOf("hi") == 0 ? "{formatLength:'long', localeDigit: true}" : "{formatLength:'long'}", lang: language},
desc: "Locale: <b>" + locale + "</b> Format: <b>Long</b>",
value: date,
expValue: long,
comment: longCmt
});
testCases.push({
attrs: {constraints: language.indexOf("hi") == 0 ? "{formatLength:'full', localeDigit: true}" : "{formatLength:'full'}", lang: language},
desc: "Locale: <b>" + locale + "</b> Format: <b>Full</b>",
value: date,
expValue: full,
comment: fullCmt
-->
/trunk/api/js/dojo1.0/dijit/tests/i18n/module.js
New file
0,0 → 1,17
if(!dojo._hasResource["dijit.tests.i18n.module"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.tests.i18n.module"] = true;
dojo.provide("dijit.tests.i18n.module");
 
try{
if(dojo.isBrowser){
doh.registerUrl("dijit.tests.i18n.currency", dojo.moduleUrl("dijit", "tests/i18n/currency.html"));
doh.registerUrl("dijit.tests.i18n.date", dojo.moduleUrl("dijit", "tests/i18n/date.html"));
doh.registerUrl("dijit.tests.i18n.number", dojo.moduleUrl("dijit", "tests/i18n/number.html"));
doh.registerUrl("dijit.tests.i18n.textbox", dojo.moduleUrl("dijit", "tests/i18n/textbox.html"));
doh.registerUrl("dijit.tests.i18n.time", dojo.moduleUrl("dijit", "tests/i18n/time.html"));
}
}catch(e){
doh.debug(e);
}
 
}
/trunk/api/js/dojo1.0/dijit/tests/i18n/textbox.html
New file
0,0 → 1,173
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Test TextBox</title>
 
<script type="text/javascript" src="../../../dojo/dojo.js"
djConfig="isDebug: true"></script>
<script type="text/javascript" src="../../../dojo/currency.js"></script>
<script type="text/javascript" src="../../../dojo/number.js"></script>
<script type="text/javascript">
dojo.require("dijit.form.NumberTextBox");
dojo.require("dijit.form.CurrencyTextBox");
dojo.require("dijit.form.DateTextBox");
dojo.require("dijit.form.ValidationTextBox");
dojo.require("dojo.date.locale");
dojo.require("dojo.date.stamp");
dojo.require("dojo.parser"); // scan page for widgets and instantiate them
dojo.require("doh.runner");
</script>
<script src="test_i18n.js"></script>
<script type="text/javascript">
dojo.addOnLoad(function(){
doh.register("t", getAllTestCases());
doh.run();
});
</script>
 
<style type="text/css">
@import "../../../dojo/resources/dojo.css";
@import "../../themes/tundra/tundra.css";
@import "../css/dijitTests.css";
 
.title {
background-color:#ddd;
}
 
.hint {
background-color:#eee;
}
 
.testExample {
background-color:#fbfbfb;
padding:1em;
margin-bottom:1em;
border:1px solid #bfbfbf;
}
 
.dojoTitlePaneLabel label {
font-weight:bold;
}
 
td {white-space:nowrap}
</style>
</head>
 
<body class="tundra">
<h1 class="testTitle">Dijit TextBox Globalization Test</h1>
 
<!-- <h2 class="testTitle">Press the following button to start all test after this page is loaded.</h2>
<button id="startButton" onclick="startTest()">Start Test</button>-->
 
<script>
(function() {
genFormatTestCases("Natural Language Casing Mapping", "dijit.form.TextBox", [
 
{ attrs: {uppercase: "true"},
desc: "Upper casing: Basic Latin",
value: "abcdefghijklmnopqrstuvwxyz",
expValue: "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
comment: ""
},
 
{ attrs: {uppercase: "true"},
desc: "Upper casing: Latin with accents",
value: "àáâãäåæçèéêëìíîïðñòóôõö",
expValue: "ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ",
comment: ""
},
 
{ attrs: {uppercase: "true"},
desc: "Upper casing: Turkish",
value: "ıi",
expValue: "Iİ",
comment: "<a href='#cmt_1'>See #1.</a>"
},
 
{ attrs: {uppercase: "true"},
desc: "Upper casing: Russian",
value: "абвгдежз",
expValue: "АБВГДЕЖЗ",
comment: ""
},
 
{ attrs: {uppercase: "true"},
desc: "Upper casing: German",
value: "ß",
expValue: "SS",
comment: "<a href='#cmt_1'>See #1.</a>"
},
 
{ attrs: {lowercase: "true"},
desc: "Lower casing: Turkish",
value: "Iİ",
expValue: "ıi",
comment: "<a href='#cmt_1'>See #1.</a>"
},
 
{ attrs: {propercase: "true"},
desc: "Title/Proper casing: Latin",
value: "\u01F1abc",
expValue: "\u01F2abc",
comment: "<a href='#cmt_1'>See #1.</a>"
}
]);
 
genFormatTestCases("White-space Detecting", "dijit.form.TextBox", [
 
{ attrs: {trim: "true"},
desc: "Normal space & tab",
value: " abc\t\t\t",
expValue: "abc",
comment: ""
},
 
{ attrs: {trim: "true"},
desc: "NO-BREAK SPACE",
value: "\u00A0abc\u00A0",
expValue: "abc",
comment: "Failed in IE. <a href='#cmt_2'>See #2.</a>"
},
 
{ attrs: {trim: "true"},
desc: "EN QUAD",
value: "\u2000abc\u2000",
expValue: "abc",
comment: "Failed in IE. <a href='#cmt_2'>See #2.</a>"
},
 
{ attrs: {trim: "true"},
desc: "IDEOGRAPHIC SPACE",
value: "\u3000abc\u3000",
expValue: "abc",
comment: "Failed in IE. <a href='#cmt_2'>See #2.</a>"
}
 
 
]);
 
dojo.parser.parse();
 
})();
</script>
 
<h2 class="testTitle">Issues &amp; Comments </h2>
<a name="cmt_1"><h3 class="testTitle">Issue #1 <sup style="color:red">Not fixed. Avoid using this function of TextBox.</sup></h3></a>
<p>
Strictly speaking, all casing manipulation must use ICU case mapping rules (routine). However, the default JavaScript routines used by Dojo
do not support ICU case mapping rules in all browsers.
</p>
 
<a name="cmt_2"><h3 class="testTitle">Issue #2 <sup style="color:red">Not fixed. Avoid using this function of TextBox.</sup></h3></a>
<p>
Trimming must get rid of all Unicode characters with the white space property. However, the default JavaScript routines used by Dojo
do not support get character properties in some browsers like IE. Other browsers like Firefox might support trimming more white space
characters.
</p>
 
</body>
</html>
 
 
/trunk/api/js/dojo1.0/dijit/tests/i18n/time.html
New file
0,0 → 1,210
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Test TextBox for Time</title>
 
<script type="text/javascript" src="../../../dojo/dojo.js"
djConfig="isDebug: true, extraLocale: ['zh-cn','fr-fr','ja-jp','ar-eg','ru-ru','hi-in','en-us']"></script>
<script type="text/javascript" src="../../../dojo/currency.js"></script>
<script type="text/javascript" src="../../../dojo/number.js"></script>
<script type="text/javascript">
dojo.require("dijit.form.ValidationTextBox");
dojo.require("dojo.date.locale");
dojo.require("dojo.date.stamp");
dojo.require("dojo.date");
dojo.require("dojo.string");
dojo.require("dojo.parser"); // scan page for widgets and instantiate them
dojo.require("doh.runner");
</script>
<script src="test_i18n.js"></script>
<script type="text/javascript">
dojo.addOnLoad(function(){
doh.register("t", getAllTestCases());
doh.run();
});
</script>
 
<style type="text/css">
@import "../../../dojo/resources/dojo.css";
@import "../../themes/tundra/tundra.css";
@import "../css/dijitTests.css";
 
.title {
background-color:#ddd;
}
 
.hint {
background-color:#eee;
}
 
.testExample {
background-color:#fbfbfb;
padding:1em;
margin-bottom:1em;
border:1px solid #bfbfbf;
}
 
.dojoTitlePaneLabel label {
font-weight:bold;
}
 
td {white-space:nowrap}
</style>
<script>
dojo.declare(
"dijit.form.TimeTextBox",
dijit.form.ValidationTextBox,
{
regExpGen: dojo.date.locale.regexp,
format: dojo.date.locale.format,
parse: dojo.date.locale.parse,
value: new Date()
}
);
 
var tz_s = dojo.date.getTimezoneName(new Date());
if (!tz_s) {
var offset = new Date().getTimezoneOffset();
var tz = [
(offset <= 0 ? "+" : "-"),
dojo.string.pad(Math.floor(Math.abs(offset) / 60), 2),
dojo.string.pad(Math.abs(offset) % 60, 2)
];
tz.splice(0, 0, "GMT");
tz.splice(3, 0, ":");
tz_s = tz.join("");
}
 
function gen4DateFormat(testCases, language, locale, date, short, shortCmt, medium, mediumCmt, long, longCmt, full, fullCmt) {
var tz_l = language.indexOf("hi") == 0 && dojo.number.normalizeDigitChars ?
dojo.number.normalizeDigitChars(tz_s, language) : tz_s;
 
short = short.replace(/UTC/, tz_l);
medium = medium.replace(/UTC/, tz_l);
long = long.replace(/UTC/g, tz_l);
full = full.replace(/UTC/, tz_l);
 
var shortDate = null;
testCases.push({
attrs: {constraints: language.indexOf("hi") == 0 ? "{formatLength:'short', selector:'time', localeDigit:true}" : "{formatLength:'short', selector:'time'}",
lang: language},
desc: "Locale: <b>" + locale + "</b> Format: <b>Short</b>",
value: typeof(date) == "string" ? date : shortDate = new Date(date.getYear(), date.getMonth(), date.getDay() - 5, date.getHours(), date.getMinutes()),
expValue: short,
comment: shortCmt
});
testCases.push({
attrs: {constraints: language.indexOf("hi") == 0 ? "{formatLength:'medium', selector:'time', localeDigit:true}" : "{formatLength:'medium', selector:'time'}",
lang: language},
desc: "Locale: <b>" + locale + "</b> Format: <b>Medium</b>",
value: date,
expValue: medium,
comment: mediumCmt
});
testCases.push({
attrs: {constraints: language.indexOf("hi") == 0 ? "{formatLength:'long', selector:'time', localeDigit:true}" : "{formatLength:'long', selector:'time'}",
lang: language},
desc: "Locale: <b>" + locale + "</b> Format: <b>Long</b>",
value: date,
expValue: long,
comment: longCmt
});
testCases.push({
attrs: {constraints: language.indexOf("hi") == 0 ? "{formatLength:'full', selector:'time', localeDigit:true}" : "{formatLength:'full', selector:'time'}",
lang: language},
desc: "Locale: <b>" + locale + "</b> Format: <b>Full</b>",
value: typeof(date) == "string" || language.indexOf("fr") ? date : shortDate,
expValue: full,
comment: fullCmt
});
 
date.processValue = function (value) {
return value ? new Date(1970, 0, 1, value.getHours(), value.getMinutes(), value.getSeconds()) : value;
};
if (shortDate) {
shortDate.processValue = date.processValue;
}
}
</script>
</head>
 
<body class="tundra">
<h1 class="testTitle">Dijit TextBox Globalization Test for Time</h1>
 
<h2 class="testTitle">Press the following button to start all test after this page is loaded.</h2>
<button id="startButton" onclick="startTest()">Start Test</button>
<p>
Before start this test, make sure the <b>dojo/cldr/nls</b> contains the data for "zh-cn", "fr-fr", "ja-jp", "ru-ru", "hi-in", "en-us" and "ar-eg". If not, convert these CLDR data and put them there.
</p>
 
<script>
(function() {
var testCases;
 
testCases = new Array();
gen4DateFormat(testCases, "ru-ru", "ru_RU", "1970-01-01T15:25:35",
"15:25", "", "15:25:35", "", "15:25:35 UTC", "<a href='#cmt_1'>See #1.</a>", "15:25:35 UTC", "<a href='#cmt_1'>See #1.</a>");
gen4DateFormat(testCases, "zh-cn", "zh_CN", "1970-01-01T15:25:35",
"下午3:25", "", "下午03:25:35", "", "下午03时25分35秒", "", "下午03时25分35秒 UTC", "<a href='#cmt_1'>See #1.</a>");
gen4DateFormat(testCases, "en-us", "en_US", "1970-01-01T15:25:35",
"3:25 PM", "", "3:25:35 PM", "", "3:25:35 PM UTC", "<a href='#cmt_1'>See #1.</a>", "3:25:35 PM UTC", "<a href='#cmt_1'>See #1.</a>");
gen4DateFormat(testCases, "fr-fr", "fr_FR", "1970-01-01T15:25:35",
"15:25", "", "15:25:35", "", "15:25:35 UTC", "<a href='#cmt_1'>See #1.</a>", "15 h 25 UTC", "<a href='#cmt_1'>See #1.</a>");
gen4DateFormat(testCases, "ja-jp", "ja_JP", "1970-01-01T15:25:35",
"15:25", "", "15:25:35", "", "15:25:35:UTC", "<a href='#cmt_1'>See #1.</a>", "15時25分35秒UTC", "<a href='#cmt_1'>See #1.</a>");
gen4DateFormat(testCases, "ar-eg", "ar_EG", "1970-01-01T15:25:35",
"3:25 \u0645", "", "3:25:35 \u0645", "", "3:25:35 \u0645", "", "UTC 3:25:35 \u0645", "<a href='#cmt_1'>See #1.</a>");
gen4DateFormat(testCases, "hi-in", "hi_IN", "1970-01-01T15:25:35",
"३:२५ अपराह्न", "<a href='#cmt_2'>See #2.</a>", "३:२५:३५ अपराह्न", "<a href='#cmt_2'>See #2.</a>", "३:२५:३५ अपराह्न UTC", "<a href='#cmt_1'>See #1.</a> <a href='#cmt_2'>See #2.</a>", "३:२५:३५ अपराह्न UTC", "<a href='#cmt_1'>See #1.</a> <a href='#cmt_2'>See #2.</a>");
genFormatTestCases("Time Format", "dijit.form.TimeTextBox", testCases);
 
testCases = new Array();
gen4DateFormat(testCases, "ru-ru", "ru_RU", new Date(1970, 0, 1, 15, 25, 35),
"15:25", "", "15:25:35", "", "15:25:35 UTC", "<a href='#cmt_1'>See #1.</a>", "15:25:35 UTC", "<a href='#cmt_1'>See #1.</a>");
gen4DateFormat(testCases, "zh-cn", "zh_CN", new Date(1970, 0, 1, 15, 25, 35),
"下午3:25", "<a href='#cmt_3'>See #3.</a>", "下午03:25:35", "<a href='#cmt_3'>See #3.</a>", "下午03时25分35秒", "<a href='#cmt_3'>See #3.</a>", "下午03时25分35秒 UTC", "<a href='#cmt_1'>See #1.</a>");
gen4DateFormat(testCases, "en-us", "en_US", new Date(1970, 0, 1, 15, 25, 35),
"3:25 PM", "", "3:25:35 PM", "", "3:25:35 PM UTC", "<a href='#cmt_1'>See #1.</a>", "3:25:35 PM UTC", "<a href='#cmt_1'>See #1.</a>");
gen4DateFormat(testCases, "fr-fr", "fr_FR", new Date(1970, 0, 1, 15, 25, 35),
"15:25", "", "15:25:35", "", "15:25:35 UTC", "<a href='#cmt_1'>See #1.</a>", "15 h 25 UTC", "<a href='#cmt_1'>See #1.</a>");
gen4DateFormat(testCases, "ja-jp", "ja_JP", new Date(1970, 0, 1, 15, 25, 35),
"15:25", "", "15:25:35", "", "15:25:35:UTC", "<a href='#cmt_1'>See #1.</a>", "15時25分35秒UTC", "<a href='#cmt_1'>See #1.</a>");
gen4DateFormat(testCases, "ar-eg", "ar_EG", new Date(1970, 0, 1, 15, 25, 35),
"3:25 \u0645", "", "3:25:35 \u0645", "", "3:25:35 \u0645", "", "UTC 3:25:35 \u0645", "<a href='#cmt_1'>See #1.</a>");
gen4DateFormat(testCases, "hi-in", "hi_IN", new Date(1970, 0, 1, 15, 25, 35),
"३:२५ अपराह्न", "<a href='#cmt_2'>See #2.</a>", "३:२५:३५ अपराह्न", "<a href='#cmt_2'>See #2.</a>", "३:२५:३५ अपराह्न UTC", "<a href='#cmt_1'>See #1.</a> <a href='#cmt_2'>See #2.</a>", "३:२५:३५ अपराह्न UTC", "<a href='#cmt_1'>See #1.</a> <a href='#cmt_2'>See #2.</a>");
genValidateTestCases("Time Validate", "dijit.form.TimeTextBox", testCases);
 
dojo.parser.parse();
 
})();
 
</script>
 
<h2 class="testTitle">Issues &amp; Comments</h2>
<a name="cmt_1"><h3 class="testTitle">Issue #1 <sup style="color:blue">Fixed</sup></h3></a>
<p>
Currently Dojo do not support parsing for most "long" and "full" time format which have a timezone mark in it.
</p>
 
<a name="cmt_2"><h3 class="testTitle">Issue #2 <sup style="color:blue">Fixed: added a "localeDigit" to the options</sup></h3></a>
<p>
Strictly speaking, the data conversion must support non-European number characters in some locales like Arabic and Hindi.
For example, ICU formats a number data into Indic number characters by default in the Arabic locale.
However, currently Dojo does not support this feature (Dojo uses the default number conversion of the browser).
</p>
 
<a name="cmt_3"><h3 class="testTitle">Issue #3 <sup style="color:blue">Fixed</sup></h3></a>
<p>
This defect only occurs on the "zh-cn" locale. Dojo accepts "下午"(pm) in the textbox, but it automatically changes it to
"上午"(am) after the focus changed. The date value of the textbox is also changed.
</p>
<p>
The root cause of this issue is that the parser method's code assumes am/pm symbol always appears after the hour value.
But this is not true, for example, the pattern for "zh-cn" puts am/pm field before all the other fields.
</p>
</body>
</html>
 
/trunk/api/js/dojo1.0/dijit/tests/_editor/test_RichText.html
New file
0,0 → 1,59
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
 
<title>Rich Text System Test</title>
 
<style type="text/css">
@import "../../../dojo/resources/dojo.css";
@import "../css/dijitTests.css";
</style>
<script type="text/javascript" src="../../../dojo/dojo.js"
djConfig="parseOnLoad: true, isDebug: true"></script>
<script type="text/javascript" src="../_testCommon.js"></script>
 
<script type="text/javascript" src="../../_editor/selection.js"></script>
<script type="text/javascript" src="../../_editor/RichText.js"></script>
<script language="JavaScript" type="text/javascript">
dojo.require("dijit._editor.RichText");
dojo.require("dojo.parser"); // scan page for widgets and instantiate them
</script>
 
</head>
<body>
 
<h1 class="testTitle">Rich Text Test</h1>
 
<div style="border: 1px dotted black;">
<h3>thud</h3>
<textarea dojoType="dijit._editor.RichText" id="editor1"
styleSheets="../../../dojo/resources/dojo.css">
<h1>header one</h1>
<ul>
<li>Right click on the client area of the page (ctrl-click for Macintosh). Menu should open.</li>
<li>Right click on each of the form controls above. Menu should open.</li>
<li>Right click near the righthand window border. Menu should open to the left of the pointer.</li>
<li>Right click near the bottom window border. Menu should open above the pointer.</li>
</ul>
</textarea>
<button onclick="dijit.byId('editor1').addStyleSheet('test_richtext.css')">add stylesheet</button>
<button onclick="dijit.byId('editor1').removeStyleSheet('test_richtext.css')">remove stylesheet</button>
</div>
 
<div style="border: 1px dotted black;">
<h3>blah</h3>
<div dojoType="dijit._editor.RichText"
styleSheets="../../dojo/resources/dojo.css">
<ul>
<li>Right click on the client area of the page (ctrl-click for Macintosh). Menu should open.</li>
<li>Right click on each of the form controls above. Menu should open.</li>
<li>Right click near the righthand window border. Menu should open to the left of the pointer.</li>
<li>Right click near the bottom window border. Menu should open above the pointer.</li>
</ul>
</div>
<h3>..after</h3>
</div>
 
</body>
</html>
/trunk/api/js/dojo1.0/dijit/tests/_editor/test_richtext.css
New file
0,0 → 1,4
h1 {
border: 1px solid black;
background-color:red;
}
/trunk/api/js/dojo1.0/dijit/tests/Container.html
New file
0,0 → 1,63
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
 
<title>Container</title>
 
<script type="text/javascript" src="../../dojo/dojo.js" djConfig="isDebug: true, parseOnLoad: true"></script>
<script type="text/javascript">
dojo.require("doh.runner");
dojo.require("dijit._Widget");
dojo.require("dijit._Container");
 
dojo.declare("dijit.TestContainer",
[dijit._Widget, dijit._Container], { }
);
 
dojo.require("dojo.parser");
 
dojo.addOnLoad(function(){
doh.register("t",
[
{
name: "getChildren",
runTest: function(t){
var c = dijit.byId("container");
var children = c.getChildren();
t.is(3, children.length);
t.is("zero", children[0].id);
t.is("one", children[1].id);
t.is("two", children[2].id);
}
},
{
name: "_getSiblingOfChild",
runTest: function(t){
var c = dijit.byId("container");
var children = c.getChildren();
t.is("one", c._getSiblingOfChild(children[0], 1).id);
t.is("two", c._getSiblingOfChild(children[1], 1).id);
t.is(null, c._getSiblingOfChild(children[2], 1));
t.is(null, c._getSiblingOfChild(children[0], -1));
t.is("zero", c._getSiblingOfChild(children[1], -1).id);
t.is("one", c._getSiblingOfChild(children[2], -1).id);
}
}
]
);
doh.run();
});
 
</script>
</head>
<body class="tundra">
 
<div id="container" dojoType="dijit.TestContainer">
<div id="zero" dojoType="dijit._Widget"></div>
<div id="one" dojoType="dijit._Widget"></div>
<div id="two" dojoType="dijit._Widget"></div>
</div>
 
</body>
</html>
/trunk/api/js/dojo1.0/dijit/form/TextBox.js
New file
0,0 → 1,139
if(!dojo._hasResource["dijit.form.TextBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.form.TextBox"] = true;
dojo.provide("dijit.form.TextBox");
 
dojo.require("dijit.form._FormWidget");
 
dojo.declare(
"dijit.form.TextBox",
dijit.form._FormWidget,
{
// summary:
// A generic textbox field.
// Serves as a base class to derive more specialized functionality in subclasses.
 
// trim: Boolean
// Removes leading and trailing whitespace if true. Default is false.
trim: false,
 
// uppercase: Boolean
// Converts all characters to uppercase if true. Default is false.
uppercase: false,
 
// lowercase: Boolean
// Converts all characters to lowercase if true. Default is false.
lowercase: false,
 
// propercase: Boolean
// Converts the first character of each word to uppercase if true.
propercase: false,
 
// maxLength: String
// HTML INPUT tag maxLength declaration.
maxLength: "",
 
templateString:"<input class=\"dojoTextBox\" dojoAttachPoint='textbox,focusNode' name=\"${name}\"\n\tdojoAttachEvent='onmouseenter:_onMouse,onmouseleave:_onMouse,onfocus:_onMouse,onblur:_onMouse,onkeyup,onkeypress:_onKeyPress'\n\tautocomplete=\"off\" type=\"${type}\"\n\t/>\n",
baseClass: "dijitTextBox",
 
attributeMap: dojo.mixin(dojo.clone(dijit.form._FormWidget.prototype.attributeMap),
{maxLength:"focusNode"}),
 
getDisplayedValue: function(){
return this.filter(this.textbox.value);
},
 
getValue: function(){
return this.parse(this.getDisplayedValue(), this.constraints);
},
 
setValue: function(value, /*Boolean, optional*/ priorityChange, /*String, optional*/ formattedValue){
var filteredValue = this.filter(value);
if((typeof filteredValue == typeof value) && (formattedValue == null || formattedValue == undefined)){
formattedValue = this.format(filteredValue, this.constraints);
}
if(formattedValue != null && formattedValue != undefined){
this.textbox.value = formattedValue;
}
dijit.form.TextBox.superclass.setValue.call(this, filteredValue, priorityChange);
},
 
setDisplayedValue: function(/*String*/value){
this.textbox.value = value;
this.setValue(this.getValue(), true);
},
 
forWaiValuenow: function(){
return this.getDisplayedValue();
},
 
format: function(/* String */ value, /* Object */ constraints){
// summary: Replacable function to convert a value to a properly formatted string
return ((value == null || value == undefined) ? "" : (value.toString ? value.toString() : value));
},
 
parse: function(/* String */ value, /* Object */ constraints){
// summary: Replacable function to convert a formatted string to a value
return value;
},
 
postCreate: function(){
// setting the value here is needed since value="" in the template causes "undefined"
// and setting in the DOM (instead of the JS object) helps with form reset actions
this.textbox.setAttribute("value", this.getDisplayedValue());
this.inherited('postCreate', arguments);
 
if(this.srcNodeRef){
dojo.style(this.textbox, "cssText", this.style);
this.textbox.className += " " + this["class"];
}
this._layoutHack();
},
 
_layoutHack: function(){
// summary: work around table sizing bugs on FF2 by forcing redraw
if(dojo.isFF == 2 && this.domNode.tagName=="TABLE"){
var node=this.domNode;
var old = node.style.opacity;
node.style.opacity = "0.999";
setTimeout(function(){
node.style.opacity = old;
}, 0);
}
},
 
filter: function(val){
// summary: Apply various filters to textbox value
if(val == undefined || val == null){ return ""; }
else if(typeof val != "string"){ return val; }
if(this.trim){
val = dojo.trim(val);
}
if(this.uppercase){
val = val.toUpperCase();
}
if(this.lowercase){
val = val.toLowerCase();
}
if(this.propercase){
val = val.replace(/[^\s]+/g, function(word){
return word.substring(0,1).toUpperCase() + word.substring(1);
});
}
return val;
},
 
// event handlers, you can over-ride these in your own subclasses
_onBlur: function(){
this.setValue(this.getValue(), (this.isValid ? this.isValid() : true));
},
 
onkeyup: function(){
// TODO: it would be nice to massage the value (ie: automatic uppercase, etc) as the user types
// but this messes up the cursor position if you are typing into the middle of a word, and
// also trimming doesn't work correctly (it prevents spaces between words too!)
// this.setValue(this.getValue());
}
}
);
 
}
/trunk/api/js/dojo1.0/dijit/form/InlineEditBox.js
New file
0,0 → 1,317
if(!dojo._hasResource["dijit.form.InlineEditBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.form.InlineEditBox"] = true;
dojo.provide("dijit.form.InlineEditBox");
 
dojo.require("dojo.i18n");
 
dojo.require("dijit.form._FormWidget");
dojo.require("dijit._Container");
dojo.require("dijit.form.Button");
 
dojo.requireLocalization("dijit", "common", null, "ko,zh,ja,zh-tw,ru,it,hu,fr,pt,ROOT,pl,es,de,cs");
 
dojo.deprecated("dijit.form.InlineEditBox is deprecated, use dijit.InlineEditBox instead", "", "1.1");
 
dojo.declare(
"dijit.form.InlineEditBox",
[dijit.form._FormWidget, dijit._Container],
// summary
// Wrapper widget to a text edit widget.
// The text is displayed on the page using normal user-styling.
// When clicked, the text is hidden, and the edit widget is
// visible, allowing the text to be updated. Optionally,
// Save and Cancel button are displayed below the edit widget.
// When Save is clicked, the text is pulled from the edit
// widget and redisplayed and the edit widget is again hidden.
// Currently all textboxes that inherit from dijit.form.TextBox
// are supported edit widgets.
// An edit widget must support the following API to be used:
// String getDisplayedValue() OR String getValue()
// void setDisplayedValue(String) OR void setValue(String)
// void focus()
// It must also be able to initialize with style="display:none;" set.
{
templateString:"<span\n\t><fieldset dojoAttachPoint=\"editNode\" style=\"display:none;\" waiRole=\"presentation\"\n\t\t><div dojoAttachPoint=\"containerNode\" dojoAttachEvent=\"onkeypress:_onEditWidgetKeyPress\"></div\n\t\t><div dojoAttachPoint=\"buttonContainer\"\n\t\t\t><button class='saveButton' dojoAttachPoint=\"saveButton\" dojoType=\"dijit.form.Button\" dojoAttachEvent=\"onClick:save\">${buttonSave}</button\n\t\t\t><button class='cancelButton' dojoAttachPoint=\"cancelButton\" dojoType=\"dijit.form.Button\" dojoAttachEvent=\"onClick:cancel\">${buttonCancel}</button\n\t\t></div\n\t></fieldset\n\t><span tabIndex=\"0\" dojoAttachPoint=\"textNode,focusNode\" waiRole=\"button\" style=\"display:none;\"\n\t\tdojoAttachEvent=\"onkeypress:_onKeyPress,onclick:_onClick,onmouseout:_onMouseOut,onmouseover:_onMouseOver,onfocus:_onMouseOver,onblur:_onMouseOut\"\n\t></span\n></span>\n",
 
// editing: Boolean
// Is the node currently in edit mode?
editing: false,
 
// autoSave: Boolean
// Changing the value automatically saves it, don't have to push save button
autoSave: true,
 
// buttonSave: String
// Save button label
buttonSave: "",
 
// buttonCancel: String
// Cancel button label
buttonCancel: "",
 
// renderAsHtml: Boolean
// should text render as HTML(true) or plain text(false)
renderAsHtml: false,
 
widgetsInTemplate: true,
 
// _display: String
// srcNodeRef display style
_display:"",
 
startup: function(){
// look for the input widget as a child of the containerNode
if(!this._started){
 
if(this.editWidget){
this.containerNode.appendChild(this.editWidget.domNode);
}else{
this.editWidget = this.getChildren()[0];
}
// #3209: copy the style from the source
// don't copy ALL properties though, just the necessary/applicable ones
var srcStyle=dojo.getComputedStyle(this.domNode);
dojo.forEach(["fontWeight","fontFamily","fontSize","fontStyle"], function(prop){
this.editWidget.focusNode.style[prop]=srcStyle[prop];
}, this);
this._setEditValue = dojo.hitch(this.editWidget,this.editWidget.setDisplayedValue||this.editWidget.setValue);
this._getEditValue = dojo.hitch(this.editWidget,this.editWidget.getDisplayedValue||this.editWidget.getValue);
this._setEditFocus = dojo.hitch(this.editWidget,this.editWidget.focus);
this._isEditValid = dojo.hitch(this.editWidget,this.editWidget.isValid || function(){return true;});
this.editWidget.onChange = dojo.hitch(this, "_onChange");
 
if(!this.autoSave){ // take over the setValue method so we can know when the value changes
this._oldSetValue = this.editWidget.setValue;
var _this = this;
this.editWidget.setValue = dojo.hitch(this, function(value){
_this._oldSetValue.apply(_this.editWidget, arguments);
_this._onEditWidgetKeyPress(null); // check the Save button
});
}
this._showText();
 
this._started = true;
}
},
 
postMixInProperties: function(){
this._srcTag = this.srcNodeRef.tagName;
this._srcStyle=dojo.getComputedStyle(this.srcNodeRef);
// getComputedStyle is not good until after onLoad is called
var srcNodeStyle = this.srcNodeRef.style;
this._display="";
if(srcNodeStyle && srcNodeStyle.display){ this._display=srcNodeStyle.display; }
else{
switch(this.srcNodeRef.tagName.toLowerCase()){
case 'span':
case 'input':
case 'img':
case 'button':
this._display='inline';
break;
default:
this._display='block';
break;
}
}
this.inherited('postMixInProperties', arguments);
this.messages = dojo.i18n.getLocalization("dijit", "common", this.lang);
dojo.forEach(["buttonSave", "buttonCancel"], function(prop){
if(!this[prop]){ this[prop] = this.messages[prop]; }
}, this);
},
 
postCreate: function(){
// don't call setValue yet since the editing widget is not setup
if(this.autoSave){
dojo.style(this.buttonContainer, "display", "none");
}
},
 
_onKeyPress: function(e){
// summary: handle keypress when edit box is not open
if(this.disabled || e.altKey || e.ctrlKey){ return; }
if(e.charCode == dojo.keys.SPACE || e.keyCode == dojo.keys.ENTER){
dojo.stopEvent(e);
this._onClick(e);
}
},
 
_onMouseOver: function(){
if(!this.editing){
var classname = this.disabled ? "dijitDisabledClickableRegion" : "dijitClickableRegion";
dojo.addClass(this.textNode, classname);
}
},
 
_onMouseOut: function(){
if(!this.editing){
var classStr = this.disabled ? "dijitDisabledClickableRegion" : "dijitClickableRegion";
dojo.removeClass(this.textNode, classStr);
}
},
 
_onClick: function(e){
// summary
// When user clicks the text, then start editing.
// Hide the text and display the form instead.
 
if(this.editing || this.disabled){ return; }
this._onMouseOut();
this.editing = true;
 
// show the edit form and hide the read only version of the text
this._setEditValue(this._isEmpty ? '' : (this.renderAsHtml ? this.textNode.innerHTML : this.textNode.innerHTML.replace(/\s*\r?\n\s*/g,"").replace(/<br\/?>/gi, "\n").replace(/&gt;/g,">").replace(/&lt;/g,"<").replace(/&amp;/g,"&")));
this._initialText = this._getEditValue();
this._visualize();
// Before changing the focus, give the browser time to render.
setTimeout(dojo.hitch(this, function(){
this._setEditFocus();
this.saveButton.setDisabled(true);
}), 1);
},
 
_visualize: function(){
dojo.style(this.editNode, "display", this.editing ? this._display : "none");
// #3749: try to set focus now to fix missing caret
// #3997: call right after this.containerNode appears
if(this.editing){this._setEditFocus();}
dojo.style(this.textNode, "display", this.editing ? "none" : this._display);
},
 
_showText: function(){
var value = "" + this._getEditValue(); // "" is to make sure its a string
dijit.form.InlineEditBox.superclass.setValue.call(this, value);
// whitespace is really hard to click so show a ?
// TODO: show user defined message in gray
if(/^\s*$/.test(value)){ value = "?"; this._isEmpty = true; }
else { this._isEmpty = false; }
if(this.renderAsHtml){
this.textNode.innerHTML = value;
}else{
this.textNode.innerHTML = "";
if(value.split){
var _this=this;
var isFirst = true;
dojo.forEach(value.split("\n"), function(line){
if(isFirst){
isFirst = false;
}else{
_this.textNode.appendChild(document.createElement("BR")); // preserve line breaks
}
_this.textNode.appendChild(document.createTextNode(line)); // use text nodes so that imbedded tags can be edited
});
}else{
this.textNode.appendChild(document.createTextNode(value));
}
}
this._visualize();
},
 
save: function(e){
// summary: Callback when user presses "Save" button or it's simulated.
// e is passed in if click on save button or user presses Enter. It's not
// passed in when called by _onBlur.
if(typeof e == "object"){ dojo.stopEvent(e); }
if(!this.enableSave()){ return; }
this.editing = false;
this._showText();
// If save button pressed on non-autoSave widget or Enter pressed on autoSave
// widget, restore focus to the inline text.
if(e){ dijit.focus(this.focusNode); }
 
if(this._lastValue != this._lastValueReported){
this.onChange(this._lastValue); // tell the world that we have changed
}
},
 
cancel: function(e){
// summary: Callback when user presses "Cancel" button or it's simulated.
// e is passed in if click on cancel button or user presses Esc. It's not
// passed in when called by _onBlur.
if(e){ dojo.stopEvent(e); }
this.editing = false;
this._visualize();
// If cancel button pressed on non-autoSave widget or Esc pressed on autoSave
// widget, restore focus to the inline text.
if(e){ dijit.focus(this.focusNode); }
},
 
setValue: function(/*String*/ value){
// sets the text without informing the server
this._setEditValue(value);
this.editing = false;
this._showText();
},
 
_onEditWidgetKeyPress: function(e){
// summary:
// Callback when keypress in the edit box (see template).
// For autoSave widgets, if Esc/Enter, call cancel/save.
// For non-autoSave widgets, enable save button if the text value is
// different than the original value.
if(!this.editing){ return; }
if(this.autoSave){
// If Enter/Esc pressed, treat as save/cancel.
if(e.keyCode == dojo.keys.ESCAPE){
this.cancel(e);
}else if(e.keyCode == dojo.keys.ENTER){
this.save(e);
}
}else{
var _this = this;
// Delay before calling _getEditValue.
// The delay gives the browser a chance to update the textarea.
setTimeout(
function(){
_this.saveButton.setDisabled(_this._getEditValue() == _this._initialText);
}, 100);
}
},
 
_onBlur: function(){
// summary:
// Called by the focus manager in focus.js when focus moves outside of the
// InlineEditBox widget (or it's descendants).
if(this.autoSave && this.editing){
if(this._getEditValue() == this._initialText){
this.cancel();
}else{
this.save();
}
}
},
 
 
enableSave: function(){
// summary: User replacable function returning a Boolean to indicate
// if the Save button should be enabled or not - usually due to invalid conditions
return this._isEditValid();
},
 
_onChange: function(){
// summary:
// This is called when the underlying widget fires an onChange event,
// which means that the user has finished entering the value
if(!this.editing){
this._showText(); // asynchronous update made famous by ComboBox/FilteringSelect
}else if(this.autoSave){
this.save(1);
}else{
// #3752
// if the keypress does not bubble up to the div, (iframe in TextArea blocks it for example)
// make sure the save button gets enabled
this.saveButton.setDisabled((this._getEditValue() == this._initialText) || !this.enableSave());
}
},
 
setDisabled: function(/*Boolean*/ disabled){
this.saveButton.setDisabled(disabled);
this.cancelButton.setDisabled(disabled);
this.textNode.disabled = disabled;
this.editWidget.setDisabled(disabled);
this.inherited('setDisabled', arguments);
}
});
 
}
/trunk/api/js/dojo1.0/dijit/form/Form.js
New file
0,0 → 1,283
if(!dojo._hasResource["dijit.form.Form"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.form.Form"] = true;
dojo.provide("dijit.form.Form");
 
dojo.require("dijit._Widget");
dojo.require("dijit._Templated");
 
dojo.declare("dijit.form._FormMixin", null,
{
/*
summary:
Widget corresponding to <form> tag, for validation and serialization
 
usage:
<form dojoType="dijit.form.Form" id="myForm">
Name: <input type="text" name="name" />
</form>
myObj={name: "John Doe"};
dijit.byId('myForm').setValues(myObj);
 
myObj=dijit.byId('myForm').getValues();
TODO:
* Repeater
* better handling for arrays. Often form elements have names with [] like
* people[3].sex (for a list of people [{name: Bill, sex: M}, ...])
 
*/
 
// HTML <FORM> attributes
 
action: "",
method: "",
enctype: "",
name: "",
"accept-charset": "",
accept: "",
target: "",
 
attributeMap: dojo.mixin(dojo.clone(dijit._Widget.prototype.attributeMap),
{action: "", method: "", enctype: "", "accept-charset": "", accept: "", target: ""}),
 
// execute: Function
// User defined function to do stuff when the user hits the submit button
execute: function(/*Object*/ formContents){},
 
// onCancel: Function
// Callback when user has canceled dialog, to notify container
// (user shouldn't override)
onCancel: function(){},
 
// onExecute: Function
// Callback when user is about to execute dialog, to notify container
// (user shouldn't override)
onExecute: function(){},
 
templateString: "<form dojoAttachPoint='containerNode' dojoAttachEvent='onsubmit:_onSubmit' name='${name}' enctype='multipart/form-data'></form>",
 
_onSubmit: function(/*event*/e) {
// summary: callback when user hits submit button
dojo.stopEvent(e);
this.onExecute(); // notify container that we are about to execute
this.execute(this.getValues());
},
 
submit: function() {
// summary: programatically submit form
this.containerNode.submit();
},
 
setValues: function(/*object*/obj) {
// summary: fill in form values from a JSON structure
 
// generate map from name --> [list of widgets with that name]
var map = {};
dojo.forEach(this.getDescendants(), function(widget){
if(!widget.name){ return; }
var entry = map[widget.name] || (map[widget.name] = [] );
entry.push(widget);
});
 
// call setValue() or setChecked() for each widget, according to obj
for(var name in map){
var widgets = map[name], // array of widgets w/this name
values = dojo.getObject(name, false, obj); // list of values for those widgets
if(!dojo.isArray(values)){
values = [ values ];
}
if(widgets[0].setChecked){
// for checkbox/radio, values is a list of which widgets should be checked
dojo.forEach(widgets, function(w, i){
w.setChecked(dojo.indexOf(values, w.value) != -1);
});
}else{
// otherwise, values is a list of values to be assigned sequentially to each widget
dojo.forEach(widgets, function(w, i){
w.setValue(values[i]);
});
}
}
 
/***
* TODO: code for plain input boxes (this shouldn't run for inputs that are part of widgets
 
dojo.forEach(this.containerNode.elements, function(element){
if (element.name == ''){return}; // like "continue"
var namePath = element.name.split(".");
var myObj=obj;
var name=namePath[namePath.length-1];
for(var j=1,len2=namePath.length;j<len2;++j) {
var p=namePath[j - 1];
// repeater support block
var nameA=p.split("[");
if (nameA.length > 1) {
if(typeof(myObj[nameA[0]]) == "undefined") {
myObj[nameA[0]]=[ ];
} // if
 
nameIndex=parseInt(nameA[1]);
if(typeof(myObj[nameA[0]][nameIndex]) == "undefined") {
myObj[nameA[0]][nameIndex]={};
}
myObj=myObj[nameA[0]][nameIndex];
continue;
} // repeater support ends
 
if(typeof(myObj[p]) == "undefined") {
myObj=undefined;
break;
};
myObj=myObj[p];
}
 
if (typeof(myObj) == "undefined") {
return; // like "continue"
}
if (typeof(myObj[name]) == "undefined" && this.ignoreNullValues) {
return; // like "continue"
}
 
// TODO: widget values (just call setValue() on the widget)
 
switch(element.type) {
case "checkbox":
element.checked = (name in myObj) &&
dojo.some(myObj[name], function(val){ return val==element.value; });
break;
case "radio":
element.checked = (name in myObj) && myObj[name]==element.value;
break;
case "select-multiple":
element.selectedIndex=-1;
dojo.forEach(element.options, function(option){
option.selected = dojo.some(myObj[name], function(val){ return option.value == val; });
});
break;
case "select-one":
element.selectedIndex="0";
dojo.forEach(element.options, function(option){
option.selected = option.value == myObj[name];
});
break;
case "hidden":
case "text":
case "textarea":
case "password":
element.value = myObj[name] || "";
break;
}
});
*/
},
 
getValues: function() {
// summary: generate JSON structure from form values
 
// get widget values
var obj = {};
dojo.forEach(this.getDescendants(), function(widget){
var value = widget.getValue ? widget.getValue() : widget.value;
var name = widget.name;
if(!name){ return; }
 
// Store widget's value(s) as a scalar, except for checkboxes which are automatically arrays
if(widget.setChecked){
if(/Radio/.test(widget.declaredClass)){
// radio button
if(widget.checked){
dojo.setObject(name, value, obj);
}
}else{
// checkbox/toggle button
var ary=dojo.getObject(name, false, obj);
if(!ary){
ary=[];
dojo.setObject(name, ary, obj);
}
if(widget.checked){
ary.push(value);
}
}
}else{
// plain input
dojo.setObject(name, value, obj);
}
});
 
/***
* code for plain input boxes (see also dojo.formToObject, can we use that instead of this code?
* but it doesn't understand [] notation, presumably)
var obj = { };
dojo.forEach(this.containerNode.elements, function(elm){
if (!elm.name) {
return; // like "continue"
}
var namePath = elm.name.split(".");
var myObj=obj;
var name=namePath[namePath.length-1];
for(var j=1,len2=namePath.length;j<len2;++j) {
var nameIndex = null;
var p=namePath[j - 1];
var nameA=p.split("[");
if (nameA.length > 1) {
if(typeof(myObj[nameA[0]]) == "undefined") {
myObj[nameA[0]]=[ ];
} // if
nameIndex=parseInt(nameA[1]);
if(typeof(myObj[nameA[0]][nameIndex]) == "undefined") {
myObj[nameA[0]][nameIndex]={};
}
} else if(typeof(myObj[nameA[0]]) == "undefined") {
myObj[nameA[0]]={}
} // if
 
if (nameA.length == 1) {
myObj=myObj[nameA[0]];
} else {
myObj=myObj[nameA[0]][nameIndex];
} // if
} // for
 
if ((elm.type != "select-multiple" && elm.type != "checkbox" && elm.type != "radio") || (elm.type=="radio" && elm.checked)) {
if(name == name.split("[")[0]) {
myObj[name]=elm.value;
} else {
// can not set value when there is no name
}
} else if (elm.type == "checkbox" && elm.checked) {
if(typeof(myObj[name]) == 'undefined') {
myObj[name]=[ ];
}
myObj[name].push(elm.value);
} else if (elm.type == "select-multiple") {
if(typeof(myObj[name]) == 'undefined') {
myObj[name]=[ ];
}
for (var jdx=0,len3=elm.options.length; jdx<len3; ++jdx) {
if (elm.options[jdx].selected) {
myObj[name].push(elm.options[jdx].value);
}
}
} // if
name=undefined;
}); // forEach
***/
return obj;
},
 
isValid: function() {
// TODO: ComboBox might need time to process a recently input value. This should be async?
// make sure that every widget that has a validator function returns true
return dojo.every(this.getDescendants(), function(widget){
return !widget.isValid || widget.isValid();
});
}
});
 
dojo.declare(
"dijit.form.Form",
[dijit._Widget, dijit._Templated, dijit.form._FormMixin],
null
);
 
}
/trunk/api/js/dojo1.0/dijit/form/NumberTextBox.js
New file
0,0 → 1,42
if(!dojo._hasResource["dijit.form.NumberTextBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.form.NumberTextBox"] = true;
dojo.provide("dijit.form.NumberTextBox");
 
dojo.require("dijit.form.ValidationTextBox");
dojo.require("dojo.number");
 
dojo.declare(
"dijit.form.NumberTextBoxMixin",
null,
{
// summary:
// A mixin for all number textboxes
regExpGen: dojo.number.regexp,
 
format: function(/*Number*/ value, /*Object*/ constraints){
if(isNaN(value)){ return ""; }
return dojo.number.format(value, constraints);
},
 
parse: dojo.number.parse,
 
filter: function(/*Number*/ value){
if(typeof value == "string"){ return this.inherited('filter', arguments); }
return (isNaN(value) ? '' : value);
},
 
value: NaN
}
);
 
dojo.declare(
"dijit.form.NumberTextBox",
[dijit.form.RangeBoundTextBox,dijit.form.NumberTextBoxMixin],
{
// summary:
// A validating, serializable, range-bound text box.
// constraints object: min, max, places
}
);
 
}
/trunk/api/js/dojo1.0/dijit/form/_FormWidget.js
New file
0,0 → 1,269
if(!dojo._hasResource["dijit.form._FormWidget"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.form._FormWidget"] = true;
dojo.provide("dijit.form._FormWidget");
 
dojo.require("dijit._Widget");
dojo.require("dijit._Templated");
 
dojo.declare("dijit.form._FormWidget", [dijit._Widget, dijit._Templated],
{
/*
Summary:
FormElement widgets correspond to native HTML elements such as <input> or <button> or <select>.
Each FormElement represents a single input value, and has a (possibly hidden) <input> element,
to which it serializes its input value, so that form submission (either normal submission or via FormBind?)
works as expected.
 
All these widgets should have these attributes just like native HTML input elements.
You can set them during widget construction, but after that they are read only.
 
They also share some common methods.
*/
 
// baseClass: String
// Root CSS class of the widget (ex: dijitTextBox), used to add CSS classes of widget
// (ex: "dijitTextBox dijitTextBoxInvalid dijitTextBoxFocused dijitTextBoxInvalidFocused")
// See _setStateClass().
baseClass: "",
 
// value: String
// Corresponds to the native HTML <input> element's attribute.
value: "",
 
// name: String
// Name used when submitting form; same as "name" attribute or plain HTML elements
name: "",
 
// id: String
// Corresponds to the native HTML <input> element's attribute.
// Also becomes the id for the widget.
id: "",
 
// alt: String
// Corresponds to the native HTML <input> element's attribute.
alt: "",
 
// type: String
// Corresponds to the native HTML <input> element's attribute.
type: "text",
 
// tabIndex: Integer
// Order fields are traversed when user hits the tab key
tabIndex: "0",
 
// disabled: Boolean
// Should this widget respond to user input?
// In markup, this is specified as "disabled='disabled'", or just "disabled".
disabled: false,
 
// intermediateChanges: Boolean
// Fires onChange for each value change or only on demand
intermediateChanges: false,
 
// These mixins assume that the focus node is an INPUT, as many but not all _FormWidgets are.
// Don't attempt to mixin the 'type', 'name' attributes here programatically -- they must be declared
// directly in the template as read by the parser in order to function. IE is known to specifically
// require the 'name' attribute at element creation time.
attributeMap: dojo.mixin(dojo.clone(dijit._Widget.prototype.attributeMap),
{id:"focusNode", tabIndex:"focusNode", alt:"focusNode"}),
 
setDisabled: function(/*Boolean*/ disabled){
// summary:
// Set disabled state of widget.
 
this.domNode.disabled = this.disabled = disabled;
if(this.focusNode){
this.focusNode.disabled = disabled;
}
if(disabled){
//reset those, because after the domNode is disabled, we can no longer receive
//mouse related events, see #4200
this._hovering = false;
this._active = false;
}
dijit.setWaiState(this.focusNode || this.domNode, "disabled", disabled);
this._setStateClass();
},
 
 
_onMouse : function(/*Event*/ event){
// summary:
// Sets _hovering, _active, and stateModifier properties depending on mouse state,
// then calls setStateClass() to set appropriate CSS classes for this.domNode.
//
// To get a different CSS class for hover, send onmouseover and onmouseout events to this method.
// To get a different CSS class while mouse button is depressed, send onmousedown to this method.
 
var mouseNode = event.target;
if(mouseNode && mouseNode.getAttribute){
this.stateModifier = mouseNode.getAttribute("stateModifier") || "";
}
 
if(!this.disabled){
switch(event.type){
case "mouseenter" :
case "mouseover" :
this._hovering = true;
break;
 
case "mouseout" :
case "mouseleave" :
this._hovering = false;
break;
 
case "mousedown" :
this._active = true;
// set a global event to handle mouseup, so it fires properly
// even if the cursor leaves the button
var self = this;
// #2685: use this.connect and disconnect so destroy works properly
var mouseUpConnector = this.connect(dojo.body(), "onmouseup", function(){
self._active = false;
self._setStateClass();
self.disconnect(mouseUpConnector);
});
break;
}
this._setStateClass();
}
},
 
isFocusable: function(){
return !this.disabled && (dojo.style(this.domNode, "display") != "none");
},
 
focus: function(){
dijit.focus(this.focusNode);
},
 
_setStateClass: function(){
// summary
// Update the visual state of the widget by setting the css classes on this.domNode
// (or this.stateNode if defined) by combining this.baseClass with
// various suffixes that represent the current widget state(s).
//
// In the case where a widget has multiple
// states, it sets the class based on all possible
// combinations. For example, an invalid form widget that is being hovered
// will be "dijitInput dijitInputInvalid dijitInputHover dijitInputInvalidHover".
//
// For complex widgets with multiple regions, there can be various hover/active states,
// such as "Hover" or "CloseButtonHover" (for tab buttons).
// This is controlled by a stateModifier="CloseButton" attribute on the close button node.
//
// The widget may have one or more of the following states, determined
// by this.state, this.checked, this.valid, and this.selected:
// Error - ValidationTextBox sets this.state to "Error" if the current input value is invalid
// Checked - ex: a checkmark or a ToggleButton in a checked state, will have this.checked==true
// Selected - ex: currently selected tab will have this.selected==true
//
// In addition, it may have at most one of the following states,
// based on this.disabled and flags set in _onMouse (this._active, this._hovering, this._focused):
// Disabled - if the widget is disabled
// Active - if the mouse (or space/enter key?) is being pressed down
// Focused - if the widget has focus
// Hover - if the mouse is over the widget
//
// (even if multiple af the above conditions are true we only pick the first matching one)
 
 
// Get original (non state related, non baseClass related) class specified in template
if(!("staticClass" in this)){
this.staticClass = (this.stateNode||this.domNode).className;
}
 
// Compute new set of classes
var classes = [ this.baseClass ];
 
function multiply(modifier){
classes=classes.concat(dojo.map(classes, function(c){ return c+modifier; }));
}
 
if(this.checked){
multiply("Checked");
}
if(this.state){
multiply(this.state);
}
if(this.selected){
multiply("Selected");
}
 
// Only one of these four can be applied.
// Active trumps Focused, Focused trumps Hover, and Disabled trumps all.
if(this.disabled){
multiply("Disabled");
}else if(this._active){
multiply(this.stateModifier+"Active");
}else{
if(this._focused){
multiply("Focused");
}
if((this.stateModifier || !this._focused) && this._hovering){
multiply(this.stateModifier+"Hover");
}
}
(this.stateNode || this.domNode).className = this.staticClass + " " + classes.join(" ");
},
 
onChange: function(newValue){
// summary: callback when value is changed
},
 
postCreate: function(){
this.setValue(this.value, null); // null reserved for initial value
this.setDisabled(this.disabled);
this._setStateClass();
},
 
setValue: function(/*anything*/ newValue, /*Boolean, optional*/ priorityChange){
// summary: set the value of the widget.
this._lastValue = newValue;
dijit.setWaiState(this.focusNode || this.domNode, "valuenow", this.forWaiValuenow());
if(priorityChange === undefined){ priorityChange = true; } // setValue with value only should fire onChange
if(this._lastValueReported == undefined && priorityChange === null){ // don't report the initial value
this._lastValueReported = newValue;
}
if((this.intermediateChanges || priorityChange) &&
((newValue && newValue.toString)?newValue.toString():newValue) !== ((this._lastValueReported && this._lastValueReported.toString)?this._lastValueReported.toString():this._lastValueReported)){
this._lastValueReported = newValue;
this.onChange(newValue);
}
},
 
getValue: function(){
// summary: get the value of the widget.
return this._lastValue;
},
 
undo: function(){
// summary: restore the value to the last value passed to onChange
this.setValue(this._lastValueReported, false);
},
 
_onKeyPress: function(e){
if(e.keyCode == dojo.keys.ESCAPE && !e.shiftKey && !e.ctrlKey && !e.altKey){
var v = this.getValue();
var lv = this._lastValueReported;
// Equality comparison of objects such as dates are done by reference so
// two distinct objects are != even if they have the same data. So use
// toStrings in case the values are objects.
if((typeof lv != "undefined") && ((v!==null && v.toString)?v.toString():null) !== lv.toString()){
this.undo();
dojo.stopEvent(e);
return false;
}
}
return true;
},
 
forWaiValuenow: function(){
// summary: returns a value, reflecting the current state of the widget,
// to be used for the ARIA valuenow.
// This method may be overridden by subclasses that want
// to use something other than this.getValue() for valuenow
return this.getValue();
}
});
 
}
/trunk/api/js/dojo1.0/dijit/form/ComboBox.js
New file
0,0 → 1,828
if(!dojo._hasResource["dijit.form.ComboBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.form.ComboBox"] = true;
dojo.provide("dijit.form.ComboBox");
 
dojo.require("dojo.data.ItemFileReadStore");
dojo.require("dijit.form.ValidationTextBox");
dojo.requireLocalization("dijit.form", "ComboBox", null, "ko,zh,ja,zh-tw,ru,it,hu,ROOT,fr,pt,pl,es,de,cs");
 
dojo.declare(
"dijit.form.ComboBoxMixin",
null,
{
// summary:
// Auto-completing text box, and base class for FilteringSelect widget.
//
// The drop down box's values are populated from an class called
// a data provider, which returns a list of values based on the characters
// that the user has typed into the input box.
//
// Some of the options to the ComboBox are actually arguments to the data
// provider.
//
// You can assume that all the form widgets (and thus anything that mixes
// in ComboBoxMixin) will inherit from _FormWidget and thus the "this"
// reference will also "be a" _FormWidget.
 
// item: Object
// This is the item returned by the dojo.data.store implementation that
// provides the data for this cobobox, it's the currently selected item.
item: null,
 
// pageSize: Integer
// Argument to data provider.
// Specifies number of search results per page (before hitting "next" button)
pageSize: Infinity,
 
// store: Object
// Reference to data provider object used by this ComboBox
store: null,
 
// query: Object
// A query that can be passed to 'store' to initially filter the items,
// before doing further filtering based on searchAttr and the key.
query: {},
 
// autoComplete: Boolean
// If you type in a partial string, and then tab out of the <input> box,
// automatically copy the first entry displayed in the drop down list to
// the <input> field
autoComplete: true,
 
// searchDelay: Integer
// Delay in milliseconds between when user types something and we start
// searching based on that value
searchDelay: 100,
 
// searchAttr: String
// Searches pattern match against this field
searchAttr: "name",
 
// ignoreCase: Boolean
// Set true if the ComboBox should ignore case when matching possible items
ignoreCase: true,
 
// hasDownArrow: Boolean
// Set this textbox to have a down arrow button.
// Defaults to true.
hasDownArrow:true,
 
// _hasFocus: Boolean
// Represents focus state of the textbox
// TODO: get rid of this; it's unnecessary (but currently referenced in FilteringSelect)
_hasFocus:false,
 
templateString:"<table class=\"dijit dijitReset dijitInlineTable dijitLeft\" cellspacing=\"0\" cellpadding=\"0\"\n\tid=\"widget_${id}\" name=\"${name}\" dojoAttachEvent=\"onmouseenter:_onMouse,onmouseleave:_onMouse\" waiRole=\"presentation\"\n\t><tr class=\"dijitReset\"\n\t\t><td class='dijitReset dijitStretch dijitInputField' width=\"100%\"\n\t\t\t><input type=\"text\" autocomplete=\"off\" name=\"${name}\"\n\t\t\tdojoAttachEvent=\"onkeypress, onkeyup, onfocus, compositionend\"\n\t\t\tdojoAttachPoint=\"textbox,focusNode\" waiRole=\"combobox\"\n\t\t/></td\n\t\t><td class=\"dijitReset dijitValidationIconField\" width=\"0%\"\n\t\t\t><div dojoAttachPoint='iconNode' class='dijitValidationIcon'></div\n\t\t\t><div class='dijitValidationIconText'>&Chi;</div\n\t\t></td\n\t\t><td class='dijitReset dijitRight dijitButtonNode dijitDownArrowButton' width=\"0%\"\n\t\t\tdojoAttachPoint=\"downArrowNode\"\n\t\t\tdojoAttachEvent=\"onmousedown:_onArrowMouseDown,onmouseup:_onMouse,onmouseenter:_onMouse,onmouseleave:_onMouse\"\n\t\t\t><div class=\"dijitDownArrowButtonInner\" waiRole=\"presentation\"\n\t\t\t\t><div class=\"dijitDownArrowButtonChar\">&#9660;</div\n\t\t\t></div\n\t\t></td\t\n\t></tr\n></table>\n",
 
baseClass:"dijitComboBox",
 
_lastDisplayedValue: "",
 
getValue:function(){
// don't get the textbox value but rather the previously set hidden value
return dijit.form.TextBox.superclass.getValue.apply(this, arguments);
},
 
setDisplayedValue:function(/*String*/ value){
this._lastDisplayedValue = value;
this.setValue(value, true);
},
 
_getCaretPos: function(/*DomNode*/ element){
// khtml 3.5.2 has selection* methods as does webkit nightlies from 2005-06-22
if(typeof(element.selectionStart)=="number"){
// FIXME: this is totally borked on Moz < 1.3. Any recourse?
return element.selectionStart;
}else if(dojo.isIE){
// in the case of a mouse click in a popup being handled,
// then the document.selection is not the textarea, but the popup
// var r = document.selection.createRange();
// hack to get IE 6 to play nice. What a POS browser.
var tr = document.selection.createRange().duplicate();
var ntr = element.createTextRange();
tr.move("character",0);
ntr.move("character",0);
try{
// If control doesnt have focus, you get an exception.
// Seems to happen on reverse-tab, but can also happen on tab (seems to be a race condition - only happens sometimes).
// There appears to be no workaround for this - googled for quite a while.
ntr.setEndPoint("EndToEnd", tr);
return String(ntr.text).replace(/\r/g,"").length;
}catch(e){
return 0; // If focus has shifted, 0 is fine for caret pos.
}
}
},
 
_setCaretPos: function(/*DomNode*/ element, /*Number*/ location){
location = parseInt(location);
this._setSelectedRange(element, location, location);
},
 
_setSelectedRange: function(/*DomNode*/ element, /*Number*/ start, /*Number*/ end){
if(!end){
end = element.value.length;
} // NOTE: Strange - should be able to put caret at start of text?
// Mozilla
// parts borrowed from http://www.faqts.com/knowledge_base/view.phtml/aid/13562/fid/130
if(element.setSelectionRange){
dijit.focus(element);
element.setSelectionRange(start, end);
}else if(element.createTextRange){ // IE
var range = element.createTextRange();
with(range){
collapse(true);
moveEnd('character', end);
moveStart('character', start);
select();
}
}else{ //otherwise try the event-creation hack (our own invention)
// do we need these?
element.value = element.value;
element.blur();
dijit.focus(element);
// figure out how far back to go
var dist = parseInt(element.value.length)-end;
var tchar = String.fromCharCode(37);
var tcc = tchar.charCodeAt(0);
for(var x = 0; x < dist; x++){
var te = document.createEvent("KeyEvents");
te.initKeyEvent("keypress", true, true, null, false, false, false, false, tcc, tcc);
element.dispatchEvent(te);
}
}
},
 
onkeypress: function(/*Event*/ evt){
// summary: handles keyboard events
 
//except for pasting case - ctrl + v(118)
if(evt.altKey || (evt.ctrlKey && evt.charCode != 118)){
return;
}
var doSearch = false;
this.item = null; // #4872
if(this._isShowingNow){this._popupWidget.handleKey(evt);}
switch(evt.keyCode){
case dojo.keys.PAGE_DOWN:
case dojo.keys.DOWN_ARROW:
if(!this._isShowingNow||this._prev_key_esc){
this._arrowPressed();
doSearch=true;
}else{
this._announceOption(this._popupWidget.getHighlightedOption());
}
dojo.stopEvent(evt);
this._prev_key_backspace = false;
this._prev_key_esc = false;
break;
 
case dojo.keys.PAGE_UP:
case dojo.keys.UP_ARROW:
if(this._isShowingNow){
this._announceOption(this._popupWidget.getHighlightedOption());
}
dojo.stopEvent(evt);
this._prev_key_backspace = false;
this._prev_key_esc = false;
break;
 
case dojo.keys.ENTER:
// prevent submitting form if user presses enter
// also prevent accepting the value if either Next or Previous are selected
var highlighted;
if(this._isShowingNow&&(highlighted=this._popupWidget.getHighlightedOption())){
// only stop event on prev/next
if(highlighted==this._popupWidget.nextButton){
this._nextSearch(1);
dojo.stopEvent(evt);
break;
}
else if(highlighted==this._popupWidget.previousButton){
this._nextSearch(-1);
dojo.stopEvent(evt);
break;
}
}else{
this.setDisplayedValue(this.getDisplayedValue());
}
// default case:
// prevent submit, but allow event to bubble
evt.preventDefault();
// fall through
 
case dojo.keys.TAB:
var newvalue=this.getDisplayedValue();
// #4617: if the user had More Choices selected fall into the _onBlur handler
if(this._popupWidget &&
(newvalue == this._popupWidget._messages["previousMessage"] ||
newvalue == this._popupWidget._messages["nextMessage"])){
break;
}
if(this._isShowingNow){
this._prev_key_backspace = false;
this._prev_key_esc = false;
if(this._popupWidget.getHighlightedOption()){
this._popupWidget.setValue({target:this._popupWidget.getHighlightedOption()}, true);
}
this._hideResultList();
}
break;
 
case dojo.keys.SPACE:
this._prev_key_backspace = false;
this._prev_key_esc = false;
if(this._isShowingNow && this._popupWidget.getHighlightedOption()){
dojo.stopEvent(evt);
this._selectOption();
this._hideResultList();
}else{
doSearch = true;
}
break;
 
case dojo.keys.ESCAPE:
this._prev_key_backspace = false;
this._prev_key_esc = true;
this._hideResultList();
if(this._lastDisplayedValue != this.getDisplayedValue()){
this.setDisplayedValue(this._lastDisplayedValue);
dojo.stopEvent(evt);
}else{
this.setValue(this.getValue(), false);
}
break;
 
case dojo.keys.DELETE:
case dojo.keys.BACKSPACE:
this._prev_key_esc = false;
this._prev_key_backspace = true;
doSearch = true;
break;
 
case dojo.keys.RIGHT_ARROW: // fall through
 
case dojo.keys.LEFT_ARROW: // fall through
this._prev_key_backspace = false;
this._prev_key_esc = false;
break;
 
default:// non char keys (F1-F12 etc..) shouldn't open list
this._prev_key_backspace = false;
this._prev_key_esc = false;
if(dojo.isIE || evt.charCode != 0){
doSearch=true;
}
}
if(this.searchTimer){
clearTimeout(this.searchTimer);
}
if(doSearch){
// need to wait a tad before start search so that the event bubbles through DOM and we have value visible
this.searchTimer = setTimeout(dojo.hitch(this, this._startSearchFromInput), this.searchDelay);
}
},
 
_autoCompleteText: function(/*String*/ text){
// summary:
// Fill in the textbox with the first item from the drop down list, and
// highlight the characters that were auto-completed. For example, if user
// typed "CA" and the drop down list appeared, the textbox would be changed to
// "California" and "ifornia" would be highlighted.
 
// IE7: clear selection so next highlight works all the time
this._setSelectedRange(this.focusNode, this.focusNode.value.length, this.focusNode.value.length);
// does text autoComplete the value in the textbox?
// #3744: escape regexp so the user's input isn't treated as a regular expression.
// Example: If the user typed "(" then the regexp would throw "unterminated parenthetical."
// Also see #2558 for the autocompletion bug this regular expression fixes.
if(new RegExp("^"+escape(this.focusNode.value), this.ignoreCase ? "i" : "").test(escape(text))){
var cpos = this._getCaretPos(this.focusNode);
// only try to extend if we added the last character at the end of the input
if((cpos+1) > this.focusNode.value.length){
// only add to input node as we would overwrite Capitalisation of chars
// actually, that is ok
this.focusNode.value = text;//.substr(cpos);
// visually highlight the autocompleted characters
this._setSelectedRange(this.focusNode, cpos, this.focusNode.value.length);
dijit.setWaiState(this.focusNode, "valuenow", text);
}
}else{
// text does not autoComplete; replace the whole value and highlight
this.focusNode.value = text;
this._setSelectedRange(this.focusNode, 0, this.focusNode.value.length);
dijit.setWaiState(this.focusNode, "valuenow", text);
}
},
 
_openResultList: function(/*Object*/ results, /*Object*/ dataObject){
if(this.disabled || dataObject.query[this.searchAttr] != this._lastQuery){
return;
}
this._popupWidget.clearResultList();
if(!results.length){
this._hideResultList();
return;
}
 
// Fill in the textbox with the first item from the drop down list, and
// highlight the characters that were auto-completed. For example, if user
// typed "CA" and the drop down list appeared, the textbox would be changed to
// "California" and "ifornia" would be highlighted.
 
var zerothvalue=new String(this.store.getValue(results[0], this.searchAttr));
if(zerothvalue && this.autoComplete && !this._prev_key_backspace &&
// when the user clicks the arrow button to show the full list,
// startSearch looks for "*".
// it does not make sense to autocomplete
// if they are just previewing the options available.
(dataObject.query[this.searchAttr] != "*")){
this._autoCompleteText(zerothvalue);
// announce the autocompleted value
dijit.setWaiState(this.focusNode || this.domNode, "valuenow", zerothvalue);
}
this._popupWidget.createOptions(results, dataObject, dojo.hitch(this, this._getMenuLabelFromItem));
 
// show our list (only if we have content, else nothing)
this._showResultList();
 
// #4091: tell the screen reader that the paging callback finished by shouting the next choice
if(dataObject.direction){
if(dataObject.direction==1){
this._popupWidget.highlightFirstOption();
}else if(dataObject.direction==-1){
this._popupWidget.highlightLastOption();
}
this._announceOption(this._popupWidget.getHighlightedOption());
}
},
 
_showResultList: function(){
this._hideResultList();
var items = this._popupWidget.getItems(),
visibleCount = Math.min(items.length,this.maxListLength);
this._arrowPressed();
// hide the tooltip
this._displayMessage("");
// Position the list and if it's too big to fit on the screen then
// size it to the maximum possible height
// Our dear friend IE doesnt take max-height so we need to calculate that on our own every time
// TODO: want to redo this, see http://trac.dojotoolkit.org/ticket/3272, http://trac.dojotoolkit.org/ticket/4108
with(this._popupWidget.domNode.style){
// natural size of the list has changed, so erase old width/height settings,
// which were hardcoded in a previous call to this function (via dojo.marginBox() call)
width="";
height="";
}
var best=this.open();
// #3212: only set auto scroll bars if necessary
// prevents issues with scroll bars appearing when they shouldn't when node is made wider (fractional pixels cause this)
var popupbox=dojo.marginBox(this._popupWidget.domNode);
this._popupWidget.domNode.style.overflow=((best.h==popupbox.h)&&(best.w==popupbox.w))?"hidden":"auto";
// #4134: borrow TextArea scrollbar test so content isn't covered by scrollbar and horizontal scrollbar doesn't appear
var newwidth=best.w;
if(best.h<this._popupWidget.domNode.scrollHeight){newwidth+=16;}
dojo.marginBox(this._popupWidget.domNode, {h:best.h,w:Math.max(newwidth,this.domNode.offsetWidth)});
},
 
_hideResultList: function(){
if(this._isShowingNow){
dijit.popup.close(this._popupWidget);
this._arrowIdle();
this._isShowingNow=false;
}
},
 
_onBlur: function(){
// summary: called magically when focus has shifted away from this widget and it's dropdown
this._hasFocus=false;
this._hasBeenBlurred = true;
this._hideResultList();
this._arrowIdle();
// if the user clicks away from the textbox OR tabs away, set the value to the textbox value
// #4617: if value is now more choices or previous choices, revert the value
var newvalue=this.getDisplayedValue();
if(this._popupWidget&&(newvalue==this._popupWidget._messages["previousMessage"]||newvalue==this._popupWidget._messages["nextMessage"])){
this.setValue(this._lastValueReported, true);
}else{
this.setDisplayedValue(newvalue);
}
},
 
onfocus:function(/*Event*/ evt){
this._hasFocus=true;
// update styling to reflect that we are focused
this._onMouse(evt);
},
 
_announceOption: function(/*Node*/ node){
// summary:
// a11y code that puts the highlighted option in the textbox
// This way screen readers will know what is happening in the menu
 
if(node==null){return;}
// pull the text value from the item attached to the DOM node
var newValue;
if(node==this._popupWidget.nextButton||node==this._popupWidget.previousButton){
newValue=node.innerHTML;
}else{
newValue=this.store.getValue(node.item, this.searchAttr);
}
// get the text that the user manually entered (cut off autocompleted text)
this.focusNode.value=this.focusNode.value.substring(0, this._getCaretPos(this.focusNode));
// autocomplete the rest of the option to announce change
this._autoCompleteText(newValue);
},
 
_selectOption: function(/*Event*/ evt){
var tgt = null;
if(!evt){
evt ={ target: this._popupWidget.getHighlightedOption()};
}
// what if nothing is highlighted yet?
if(!evt.target){
// handle autocompletion where the the user has hit ENTER or TAB
this.setDisplayedValue(this.getDisplayedValue());
return;
// otherwise the user has accepted the autocompleted value
}else{
tgt = evt.target;
}
if(!evt.noHide){
this._hideResultList();
this._setCaretPos(this.focusNode, this.store.getValue(tgt.item, this.searchAttr).length);
}
this._doSelect(tgt);
},
 
_doSelect: function(tgt){
this.item = tgt.item;
this.setValue(this.store.getValue(tgt.item, this.searchAttr), true);
},
 
_onArrowMouseDown: function(evt){
// summary: callback when arrow is clicked
if(this.disabled){
return;
}
dojo.stopEvent(evt);
this.focus();
if(this._isShowingNow){
this._hideResultList();
}else{
// forces full population of results, if they click
// on the arrow it means they want to see more options
this._startSearch("");
}
},
 
_startSearchFromInput: function(){
this._startSearch(this.focusNode.value);
},
 
_startSearch: function(/*String*/ key){
if(!this._popupWidget){
this._popupWidget = new dijit.form._ComboBoxMenu({
onChange: dojo.hitch(this, this._selectOption)
});
}
// create a new query to prevent accidentally querying for a hidden value from FilteringSelect's keyField
var query=this.query;
this._lastQuery=query[this.searchAttr]=key+"*";
var dataObject=this.store.fetch({queryOptions:{ignoreCase:this.ignoreCase, deep:true}, query: query, onComplete:dojo.hitch(this, "_openResultList"), start:0, count:this.pageSize});
function nextSearch(dataObject, direction){
dataObject.start+=dataObject.count*direction;
// #4091: tell callback the direction of the paging so the screen reader knows which menu option to shout
dataObject.direction=direction;
dataObject.store.fetch(dataObject);
}
this._nextSearch=this._popupWidget.onPage=dojo.hitch(this, nextSearch, dataObject);
},
 
_getValueField:function(){
return this.searchAttr;
},
 
/////////////// Event handlers /////////////////////
 
_arrowPressed: function(){
if(!this.disabled&&this.hasDownArrow){
dojo.addClass(this.downArrowNode, "dijitArrowButtonActive");
}
},
 
_arrowIdle: function(){
if(!this.disabled&&this.hasDownArrow){
dojo.removeClass(this.downArrowNode, "dojoArrowButtonPushed");
}
},
 
compositionend: function(/*Event*/ evt){
// summary: When inputting characters using an input method, such as Asian
// languages, it will generate this event instead of onKeyDown event
// Note: this event is only triggered in FF (not in IE)
this.onkeypress({charCode:-1});
},
 
//////////// INITIALIZATION METHODS ///////////////////////////////////////
constructor: function(){
this.query={};
},
 
postMixInProperties: function(){
if(!this.hasDownArrow){
this.baseClass = "dijitTextBox";
}
if(!this.store){
// if user didn't specify store, then assume there are option tags
var items = this.srcNodeRef ? dojo.query("> option", this.srcNodeRef).map(function(node){
node.style.display="none";
return { value: node.getAttribute("value"), name: String(node.innerHTML) };
}) : {};
this.store = new dojo.data.ItemFileReadStore({data: {identifier:this._getValueField(), items:items}});
 
// if there is no value set and there is an option list,
// set the value to the first value to be consistent with native Select
if(items && items.length && !this.value){
// For <select>, IE does not let you set the value attribute of the srcNodeRef (and thus dojo.mixin does not copy it).
// IE does understand selectedIndex though, which is automatically set by the selected attribute of an option tag
this.value = items[this.srcNodeRef.selectedIndex != -1 ? this.srcNodeRef.selectedIndex : 0]
[this._getValueField()];
}
}
},
 
uninitialize:function(){
if(this._popupWidget){
this._hideResultList();
this._popupWidget.destroy()
};
},
 
_getMenuLabelFromItem:function(/*Item*/ item){
return {html:false, label:this.store.getValue(item, this.searchAttr)};
},
 
open:function(){
this._isShowingNow=true;
return dijit.popup.open({
popup: this._popupWidget,
around: this.domNode,
parent: this
});
}
}
);
 
dojo.declare(
"dijit.form._ComboBoxMenu",
[dijit._Widget, dijit._Templated],
 
{
// summary:
// Focus-less div based menu for internal use in ComboBox
 
templateString:"<div class='dijitMenu' dojoAttachEvent='onmousedown,onmouseup,onmouseover,onmouseout' tabIndex='-1' style='overflow:\"auto\";'>"
+"<div class='dijitMenuItem dijitMenuPreviousButton' dojoAttachPoint='previousButton'></div>"
+"<div class='dijitMenuItem dijitMenuNextButton' dojoAttachPoint='nextButton'></div>"
+"</div>",
_messages:null,
 
postMixInProperties:function(){
this._messages = dojo.i18n.getLocalization("dijit.form", "ComboBox", this.lang);
this.inherited("postMixInProperties", arguments);
},
 
setValue:function(/*Object*/ value){
this.value=value;
this.onChange(value);
},
 
onChange:function(/*Object*/ value){},
onPage:function(/*Number*/ direction){},
 
postCreate:function(){
// fill in template with i18n messages
this.previousButton.innerHTML=this._messages["previousMessage"];
this.nextButton.innerHTML=this._messages["nextMessage"];
this.inherited("postCreate", arguments);
},
 
onClose:function(){
this._blurOptionNode();
},
 
_createOption:function(/*Object*/ item, labelFunc){
// summary: creates an option to appear on the popup menu
// subclassed by FilteringSelect
 
var labelObject=labelFunc(item);
var menuitem = document.createElement("div");
if(labelObject.html){menuitem.innerHTML=labelObject.label;}
else{menuitem.appendChild(document.createTextNode(labelObject.label));}
// #3250: in blank options, assign a normal height
if(menuitem.innerHTML==""){
menuitem.innerHTML="&nbsp;"
}
menuitem.item=item;
return menuitem;
},
 
createOptions:function(results, dataObject, labelFunc){
//this._dataObject=dataObject;
//this._dataObject.onComplete=dojo.hitch(comboBox, comboBox._openResultList);
// display "Previous . . ." button
this.previousButton.style.display=dataObject.start==0?"none":"";
// create options using _createOption function defined by parent ComboBox (or FilteringSelect) class
// #2309: iterate over cache nondestructively
var _this=this;
dojo.forEach(results, function(item){
var menuitem=_this._createOption(item, labelFunc);
menuitem.className = "dijitMenuItem";
_this.domNode.insertBefore(menuitem, _this.nextButton);
});
// display "Next . . ." button
this.nextButton.style.display=dataObject.count==results.length?"":"none";
},
 
clearResultList:function(){
// keep the previous and next buttons of course
while(this.domNode.childNodes.length>2){
this.domNode.removeChild(this.domNode.childNodes[this.domNode.childNodes.length-2]);
}
},
 
// these functions are called in showResultList
getItems:function(){
return this.domNode.childNodes;
},
 
getListLength:function(){
return this.domNode.childNodes.length-2;
},
 
onmousedown:function(/*Event*/ evt){
dojo.stopEvent(evt);
},
 
onmouseup:function(/*Event*/ evt){
if(evt.target === this.domNode){
return;
}else if(evt.target==this.previousButton){
this.onPage(-1);
}else if(evt.target==this.nextButton){
this.onPage(1);
}else{
var tgt=evt.target;
// while the clicked node is inside the div
while(!tgt.item){
// recurse to the top
tgt=tgt.parentNode;
}
this.setValue({target:tgt}, true);
}
},
 
onmouseover:function(/*Event*/ evt){
if(evt.target === this.domNode){ return; }
var tgt=evt.target;
if(!(tgt==this.previousButton||tgt==this.nextButton)){
// while the clicked node is inside the div
while(!tgt.item){
// recurse to the top
tgt=tgt.parentNode;
}
}
this._focusOptionNode(tgt);
},
 
onmouseout:function(/*Event*/ evt){
if(evt.target === this.domNode){ return; }
this._blurOptionNode();
},
 
_focusOptionNode:function(/*DomNode*/ node){
// summary:
// does the actual highlight
if(this._highlighted_option != node){
this._blurOptionNode();
this._highlighted_option = node;
dojo.addClass(this._highlighted_option, "dijitMenuItemHover");
}
},
 
_blurOptionNode:function(){
// summary:
// removes highlight on highlighted option
if(this._highlighted_option){
dojo.removeClass(this._highlighted_option, "dijitMenuItemHover");
this._highlighted_option = null;
}
},
 
_highlightNextOption:function(){
// because each press of a button clears the menu,
// the highlighted option sometimes becomes detached from the menu!
// test to see if the option has a parent to see if this is the case.
if(!this.getHighlightedOption()){
this._focusOptionNode(this.domNode.firstChild.style.display=="none"?this.domNode.firstChild.nextSibling:this.domNode.firstChild);
}else if(this._highlighted_option.nextSibling&&this._highlighted_option.nextSibling.style.display!="none"){
this._focusOptionNode(this._highlighted_option.nextSibling);
}
// scrollIntoView is called outside of _focusOptionNode because in IE putting it inside causes the menu to scroll up on mouseover
dijit.scrollIntoView(this._highlighted_option);
},
 
highlightFirstOption:function(){
// highlight the non-Previous choices option
this._focusOptionNode(this.domNode.firstChild.nextSibling);
dijit.scrollIntoView(this._highlighted_option);
},
 
highlightLastOption:function(){
// highlight the noon-More choices option
this._focusOptionNode(this.domNode.lastChild.previousSibling);
dijit.scrollIntoView(this._highlighted_option);
},
 
_highlightPrevOption:function(){
// if nothing selected, highlight last option
// makes sense if you select Previous and try to keep scrolling up the list
if(!this.getHighlightedOption()){
this._focusOptionNode(this.domNode.lastChild.style.display=="none"?this.domNode.lastChild.previousSibling:this.domNode.lastChild);
}else if(this._highlighted_option.previousSibling&&this._highlighted_option.previousSibling.style.display!="none"){
this._focusOptionNode(this._highlighted_option.previousSibling);
}
dijit.scrollIntoView(this._highlighted_option);
},
 
_page:function(/*Boolean*/ up){
var scrollamount=0;
var oldscroll=this.domNode.scrollTop;
var height=parseInt(dojo.getComputedStyle(this.domNode).height);
// if no item is highlighted, highlight the first option
if(!this.getHighlightedOption()){this._highlightNextOption();}
while(scrollamount<height){
if(up){
// stop at option 1
if(!this.getHighlightedOption().previousSibling||this._highlighted_option.previousSibling.style.display=="none"){break;}
this._highlightPrevOption();
}else{
// stop at last option
if(!this.getHighlightedOption().nextSibling||this._highlighted_option.nextSibling.style.display=="none"){break;}
this._highlightNextOption();
}
// going backwards
var newscroll=this.domNode.scrollTop;
scrollamount+=(newscroll-oldscroll)*(up ? -1:1);
oldscroll=newscroll;
}
},
 
pageUp:function(){
this._page(true);
},
 
pageDown:function(){
this._page(false);
},
 
getHighlightedOption:function(){
// summary:
// Returns the highlighted option.
return this._highlighted_option&&this._highlighted_option.parentNode ? this._highlighted_option : null;
},
 
handleKey:function(evt){
switch(evt.keyCode){
case dojo.keys.DOWN_ARROW:
this._highlightNextOption();
break;
case dojo.keys.PAGE_DOWN:
this.pageDown();
break;
case dojo.keys.UP_ARROW:
this._highlightPrevOption();
break;
case dojo.keys.PAGE_UP:
this.pageUp();
break;
}
}
}
);
 
dojo.declare(
"dijit.form.ComboBox",
[dijit.form.ValidationTextBox, dijit.form.ComboBoxMixin],
{
postMixInProperties: function(){
dijit.form.ComboBoxMixin.prototype.postMixInProperties.apply(this, arguments);
dijit.form.ValidationTextBox.prototype.postMixInProperties.apply(this, arguments);
}
}
);
 
}
/trunk/api/js/dojo1.0/dijit/form/CurrencyTextBox.js
New file
0,0 → 1,35
if(!dojo._hasResource["dijit.form.CurrencyTextBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.form.CurrencyTextBox"] = true;
dojo.provide("dijit.form.CurrencyTextBox");
 
//FIXME: dojo.experimental throws an unreadable exception?
//dojo.experimental("dijit.form.CurrencyTextBox");
 
dojo.require("dojo.currency");
dojo.require("dijit.form.NumberTextBox");
 
dojo.declare(
"dijit.form.CurrencyTextBox",
dijit.form.NumberTextBox,
{
// code: String
// the ISO4217 currency code, a three letter sequence like "USD"
// See http://en.wikipedia.org/wiki/ISO_4217
currency: "",
 
regExpGen: dojo.currency.regexp,
format: dojo.currency.format,
parse: dojo.currency.parse,
 
postMixInProperties: function(){
if(this.constraints === dijit.form.ValidationTextBox.prototype.constraints){
// declare a constraints property on 'this' so we don't overwrite the shared default object in 'prototype'
this.constraints = {};
}
this.constraints.currency = this.currency;
dijit.form.CurrencyTextBox.superclass.postMixInProperties.apply(this, arguments);
}
}
);
 
}
/trunk/api/js/dojo1.0/dijit/form/ValidationTextBox.js
New file
0,0 → 1,268
if(!dojo._hasResource["dijit.form.ValidationTextBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.form.ValidationTextBox"] = true;
dojo.provide("dijit.form.ValidationTextBox");
 
dojo.require("dojo.i18n");
 
dojo.require("dijit.form.TextBox");
dojo.require("dijit.Tooltip");
 
dojo.requireLocalization("dijit.form", "validate", null, "ko,zh-cn,zh,ja,zh-tw,ru,it,hu,ROOT,fr,pt,pl,es,de,cs");
 
dojo.declare(
"dijit.form.ValidationTextBox",
dijit.form.TextBox,
{
// summary:
// A subclass of TextBox.
// Over-ride isValid in subclasses to perform specific kinds of validation.
 
templateString:"<table style=\"display: -moz-inline-stack;\" class=\"dijit dijitReset dijitInlineTable\" cellspacing=\"0\" cellpadding=\"0\"\n\tid=\"widget_${id}\" name=\"${name}\"\n\tdojoAttachEvent=\"onmouseenter:_onMouse,onmouseleave:_onMouse\" waiRole=\"presentation\"\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset dijitInputField\" width=\"100%\"\n\t\t\t><input dojoAttachPoint='textbox,focusNode' dojoAttachEvent='onfocus,onblur:_onMouse,onkeyup,onkeypress:_onKeyPress' autocomplete=\"off\"\n\t\t\ttype='${type}' name='${name}'\n\t\t/></td\n\t\t><td class=\"dijitReset dijitValidationIconField\" width=\"0%\"\n\t\t\t><div dojoAttachPoint='iconNode' class='dijitValidationIcon'></div><div class='dijitValidationIconText'>&Chi;</div\n\t\t></td\n\t></tr\n></table>\n",
baseClass: "dijitTextBox",
 
// default values for new subclass properties
// required: Boolean
// Can be true or false, default is false.
required: false,
// promptMessage: String
// Hint string
promptMessage: "",
// invalidMessage: String
// The message to display if value is invalid.
invalidMessage: "$_unset_$", // read from the message file if not overridden
// constraints: Object
// user-defined object needed to pass parameters to the validator functions
constraints: {},
// regExp: String
// regular expression string used to validate the input
// Do not specify both regExp and regExpGen
regExp: ".*",
// regExpGen: Function
// user replaceable function used to generate regExp when dependent on constraints
// Do not specify both regExp and regExpGen
regExpGen: function(constraints){ return this.regExp; },
// state: String
// Shows current state (ie, validation result) of input (Normal, Warning, or Error)
state: "",
 
setValue: function(){
this.inherited('setValue', arguments);
this.validate(false);
},
 
validator: function(value,constraints){
// summary: user replaceable function used to validate the text input against the regular expression.
return (new RegExp("^(" + this.regExpGen(constraints) + ")"+(this.required?"":"?")+"$")).test(value) &&
(!this.required || !this._isEmpty(value)) &&
(this._isEmpty(value) || this.parse(value, constraints) !== null);
},
 
isValid: function(/* Boolean*/ isFocused){
// summary: Need to over-ride with your own validation code in subclasses
return this.validator(this.textbox.value, this.constraints);
},
 
_isEmpty: function(value){
// summary: Checks for whitespace
return /^\s*$/.test(value); // Boolean
},
 
getErrorMessage: function(/* Boolean*/ isFocused){
// summary: return an error message to show if appropriate
return this.invalidMessage;
},
 
getPromptMessage: function(/* Boolean*/ isFocused){
// summary: return a hint to show if appropriate
return this.promptMessage;
},
 
validate: function(/* Boolean*/ isFocused){
// summary:
// Called by oninit, onblur, and onkeypress.
// description:
// Show missing or invalid messages if appropriate, and highlight textbox field.
var message = "";
var isValid = this.isValid(isFocused);
var isEmpty = this._isEmpty(this.textbox.value);
this.state = (isValid || (!this._hasBeenBlurred && isEmpty)) ? "" : "Error";
this._setStateClass();
dijit.setWaiState(this.focusNode, "invalid", (isValid? "false" : "true"));
if(isFocused){
if(isEmpty){
message = this.getPromptMessage(true);
}
if(!message && !isValid){
message = this.getErrorMessage(true);
}
}
this._displayMessage(message);
},
 
// currently displayed message
_message: "",
 
_displayMessage: function(/*String*/ message){
if(this._message == message){ return; }
this._message = message;
this.displayMessage(message);
},
 
displayMessage: function(/*String*/ message){
// summary:
// User overridable method to display validation errors/hints.
// By default uses a tooltip.
if(message){
dijit.showTooltip(message, this.domNode);
}else{
dijit.hideTooltip(this.domNode);
}
},
 
_hasBeenBlurred: false,
 
_onBlur: function(evt){
this._hasBeenBlurred = true;
this.validate(false);
this.inherited('_onBlur', arguments);
},
 
onfocus: function(evt){
// TODO: change to _onFocus?
this.validate(true);
this._onMouse(evt); // update CSS classes
},
 
onkeyup: function(evt){
this.onfocus(evt);
},
 
//////////// INITIALIZATION METHODS ///////////////////////////////////////
constructor: function(){
this.constraints = {};
},
 
postMixInProperties: function(){
this.inherited('postMixInProperties', arguments);
this.constraints.locale=this.lang;
this.messages = dojo.i18n.getLocalization("dijit.form", "validate", this.lang);
if(this.invalidMessage == "$_unset_$"){ this.invalidMessage = this.messages.invalidMessage; }
var p = this.regExpGen(this.constraints);
this.regExp = p;
// make value a string for all types so that form reset works well
}
}
);
 
dojo.declare(
"dijit.form.MappedTextBox",
dijit.form.ValidationTextBox,
{
// summary:
// A subclass of ValidationTextBox.
// Provides a hidden input field and a serialize method to override
 
serialize: function(val, /*Object?*/options){
// summary: user replaceable function used to convert the getValue() result to a String
return (val.toString ? val.toString() : "");
},
 
toString: function(){
// summary: display the widget as a printable string using the widget's value
var val = this.filter(this.getValue());
return (val!=null) ? ((typeof val == "string") ? val : this.serialize(val, this.constraints)) : "";
},
 
validate: function(){
this.valueNode.value = this.toString();
this.inherited('validate', arguments);
},
 
postCreate: function(){
var textbox = this.textbox;
var valueNode = (this.valueNode = document.createElement("input"));
valueNode.setAttribute("type", textbox.type);
valueNode.setAttribute("value", this.toString());
dojo.style(valueNode, "display", "none");
valueNode.name = this.textbox.name;
this.textbox.name = "_" + this.textbox.name + "_displayed_";
this.textbox.removeAttribute("name");
dojo.place(valueNode, textbox, "after");
 
this.inherited('postCreate', arguments);
}
}
);
 
dojo.declare(
"dijit.form.RangeBoundTextBox",
dijit.form.MappedTextBox,
{
// summary:
// A subclass of MappedTextBox.
// Tests for a value out-of-range
/*===== contraints object:
// min: Number
// Minimum signed value. Default is -Infinity
min: undefined,
// max: Number
// Maximum signed value. Default is +Infinity
max: undefined,
=====*/
 
// rangeMessage: String
// The message to display if value is out-of-range
rangeMessage: "",
 
compare: function(val1, val2){
// summary: compare 2 values
return val1 - val2;
},
 
rangeCheck: function(/* Number */ primitive, /* Object */ constraints){
// summary: user replaceable function used to validate the range of the numeric input value
var isMin = (typeof constraints.min != "undefined");
var isMax = (typeof constraints.max != "undefined");
if(isMin || isMax){
return (!isMin || this.compare(primitive,constraints.min) >= 0) &&
(!isMax || this.compare(primitive,constraints.max) <= 0);
}else{ return true; }
},
 
isInRange: function(/* Boolean*/ isFocused){
// summary: Need to over-ride with your own validation code in subclasses
return this.rangeCheck(this.getValue(), this.constraints);
},
 
isValid: function(/* Boolean*/ isFocused){
return this.inherited('isValid', arguments) &&
((this._isEmpty(this.textbox.value) && !this.required) || this.isInRange(isFocused));
},
 
getErrorMessage: function(/* Boolean*/ isFocused){
if(dijit.form.RangeBoundTextBox.superclass.isValid.call(this, false) && !this.isInRange(isFocused)){ return this.rangeMessage; }
else{ return this.inherited('getErrorMessage', arguments); }
},
 
postMixInProperties: function(){
this.inherited('postMixInProperties', arguments);
if(!this.rangeMessage){
this.messages = dojo.i18n.getLocalization("dijit.form", "validate", this.lang);
this.rangeMessage = this.messages.rangeMessage;
}
},
 
postCreate: function(){
this.inherited('postCreate', arguments);
if(typeof this.constraints.min != "undefined"){
dijit.setWaiState(this.focusNode, "valuemin", this.constraints.min);
}
if(typeof this.constraints.max != "undefined"){
dijit.setWaiState(this.focusNode, "valuemax", this.constraints.max);
}
}
}
);
 
}
/trunk/api/js/dojo1.0/dijit/form/Button.js
New file
0,0 → 1,380
if(!dojo._hasResource["dijit.form.Button"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.form.Button"] = true;
dojo.provide("dijit.form.Button");
 
dojo.require("dijit.form._FormWidget");
dojo.require("dijit._Container");
 
dojo.declare("dijit.form.Button", dijit.form._FormWidget, {
/*
* usage
* <button dojoType="button" onClick="...">Hello world</button>
*
* var button1 = new dijit.form.Button({label: "hello world", onClick: foo});
* dojo.body().appendChild(button1.domNode);
*/
// summary
// Basically the same thing as a normal HTML button, but with special styling.
 
// label: String
// text to display in button
label: "",
 
// showLabel: Boolean
// whether or not to display the text label in button
showLabel: true,
 
// iconClass: String
// class to apply to div in button to make it display an icon
iconClass: "",
 
type: "button",
baseClass: "dijitButton",
templateString:"<div class=\"dijit dijitLeft dijitInline dijitButton\"\n\tdojoAttachEvent=\"onclick:_onButtonClick,onmouseenter:_onMouse,onmouseleave:_onMouse,onmousedown:_onMouse\"\n\t><div class='dijitRight'\n\t\t><button class=\"dijitStretch dijitButtonNode dijitButtonContents\" dojoAttachPoint=\"focusNode,titleNode\"\n\t\t\ttype=\"${type}\" waiRole=\"button\" waiState=\"labelledby-${id}_label\"\n\t\t\t><span class=\"dijitInline ${iconClass}\" dojoAttachPoint=\"iconNode\" \n \t\t\t\t><span class=\"dijitToggleButtonIconChar\">&#10003</span \n\t\t\t></span\n\t\t\t><span class=\"dijitButtonText\" id=\"${id}_label\" dojoAttachPoint=\"containerNode\">${label}</span\n\t\t></button\n\t></div\n></div>\n",
 
// TODO: set button's title to this.containerNode.innerText
 
_onClick: function(/*Event*/ e){
// summary: internal function to handle click actions
if(this.disabled){ return false; }
this._clicked(); // widget click actions
return this.onClick(e); // user click actions
},
 
_onButtonClick: function(/*Event*/ e){
// summary: callback when the user mouse clicks the button portion
dojo.stopEvent(e);
var okToSubmit = this._onClick(e) !== false; // returning nothing is same as true
 
// for some reason type=submit buttons don't automatically submit the form; do it manually
if(this.type=="submit" && okToSubmit){
for(var node=this.domNode; node; node=node.parentNode){
var widget=dijit.byNode(node);
if(widget && widget._onSubmit){
widget._onSubmit(e);
break;
}
if(node.tagName.toLowerCase() == "form"){
if(!node.onsubmit || node.onsubmit()){ node.submit(); }
break;
}
}
}
},
 
postCreate: function(){
// summary:
// get label and set as title on button icon if necessary
if (this.showLabel == false){
var labelText = "";
this.label = this.containerNode.innerHTML;
labelText = dojo.trim(this.containerNode.innerText || this.containerNode.textContent);
// set title attrib on iconNode
this.titleNode.title=labelText;
dojo.addClass(this.containerNode,"dijitDisplayNone");
}
this.inherited(arguments);
},
 
onClick: function(/*Event*/ e){
// summary: user callback for when button is clicked
// if type="submit", return value != false to perform submit
return true;
},
 
_clicked: function(/*Event*/ e){
// summary: internal replaceable function for when the button is clicked
},
 
setLabel: function(/*String*/ content){
// summary: reset the label (text) of the button; takes an HTML string
this.containerNode.innerHTML = this.label = content;
if(dojo.isMozilla){ // Firefox has re-render issues with tables
var oldDisplay = dojo.getComputedStyle(this.domNode).display;
this.domNode.style.display="none";
var _this = this;
setTimeout(function(){_this.domNode.style.display=oldDisplay;},1);
}
if (this.showLabel == false){
this.titleNode.title=dojo.trim(this.containerNode.innerText || this.containerNode.textContent);
}
}
});
 
/*
* usage
* <button dojoType="DropDownButton" label="Hello world"><div dojotype=dijit.Menu>...</div></button>
*
* var button1 = new dijit.form.DropDownButton({ label: "hi", dropDown: new dijit.Menu(...) });
* dojo.body().appendChild(button1);
*/
dojo.declare("dijit.form.DropDownButton", [dijit.form.Button, dijit._Container], {
// summary
// push the button and a menu shows up
 
baseClass : "dijitDropDownButton",
 
templateString:"<div class=\"dijit dijitLeft dijitInline\"\n\tdojoAttachEvent=\"onmouseenter:_onMouse,onmouseleave:_onMouse,onmousedown:_onMouse,onclick:_onDropDownClick,onkeydown:_onDropDownKeydown,onblur:_onDropDownBlur,onkeypress:_onKey\"\n\t><div class='dijitRight'>\n\t<button class=\"dijitStretch dijitButtonNode dijitButtonContents\" type=\"${type}\"\n\t\tdojoAttachPoint=\"focusNode,titleNode\" waiRole=\"button\" waiState=\"haspopup-true,labelledby-${id}_label\"\n\t\t><div class=\"dijitInline ${iconClass}\" dojoAttachPoint=\"iconNode\"></div\n\t\t><span class=\"dijitButtonText\" \tdojoAttachPoint=\"containerNode,popupStateNode\"\n\t\tid=\"${id}_label\">${label}</span\n\t\t><span class='dijitA11yDownArrow'>&#9660;</span>\n\t</button>\n</div></div>\n",
 
_fillContent: function(){
// my inner HTML contains both the button contents and a drop down widget, like
// <DropDownButton> <span>push me</span> <Menu> ... </Menu> </DropDownButton>
// The first node is assumed to be the button content. The widget is the popup.
if(this.srcNodeRef){ // programatically created buttons might not define srcNodeRef
//FIXME: figure out how to filter out the widget and use all remaining nodes as button
// content, not just nodes[0]
var nodes = dojo.query("*", this.srcNodeRef);
dijit.form.DropDownButton.superclass._fillContent.call(this, nodes[0]);
 
// save pointer to srcNode so we can grab the drop down widget after it's instantiated
this.dropDownContainer = this.srcNodeRef;
}
},
 
startup: function(){
// the child widget from srcNodeRef is the dropdown widget. Insert it in the page DOM,
// make it invisible, and store a reference to pass to the popup code.
if(!this.dropDown){
var dropDownNode = dojo.query("[widgetId]", this.dropDownContainer)[0];
this.dropDown = dijit.byNode(dropDownNode);
delete this.dropDownContainer;
}
dojo.body().appendChild(this.dropDown.domNode);
this.dropDown.domNode.style.display="none";
},
 
_onArrowClick: function(/*Event*/ e){
// summary: callback when the user mouse clicks on menu popup node
if(this.disabled){ return; }
this._toggleDropDown();
},
 
_onDropDownClick: function(/*Event*/ e){
// on Firefox 2 on the Mac it is possible to fire onclick
// by pressing enter down on a second element and transferring
// focus to the DropDownButton;
// we want to prevent opening our menu in this situation
// and only do so if we have seen a keydown on this button;
// e.detail != 0 means that we were fired by mouse
var isMacFFlessThan3 = dojo.isFF && dojo.isFF < 3
&& navigator.appVersion.indexOf("Macintosh") != -1;
if(!isMacFFlessThan3 || e.detail != 0 || this._seenKeydown){
this._onArrowClick(e);
}
this._seenKeydown = false;
},
 
_onDropDownKeydown: function(/*Event*/ e){
this._seenKeydown = true;
},
 
_onDropDownBlur: function(/*Event*/ e){
this._seenKeydown = false;
},
 
_onKey: function(/*Event*/ e){
// summary: callback when the user presses a key on menu popup node
if(this.disabled){ return; }
if(e.keyCode == dojo.keys.DOWN_ARROW){
if(!this.dropDown || this.dropDown.domNode.style.display=="none"){
dojo.stopEvent(e);
return this._toggleDropDown();
}
}
},
 
_onBlur: function(){
// summary: called magically when focus has shifted away from this widget and it's dropdown
this._closeDropDown();
// don't focus on button. the user has explicitly focused on something else.
},
 
_toggleDropDown: function(){
// summary: toggle the drop-down widget; if it is up, close it, if not, open it
if(this.disabled){ return; }
dijit.focus(this.popupStateNode);
var dropDown = this.dropDown;
if(!dropDown){ return false; }
if(!dropDown.isShowingNow){
// If there's an href, then load that first, so we don't get a flicker
if(dropDown.href && !dropDown.isLoaded){
var self = this;
var handler = dojo.connect(dropDown, "onLoad", function(){
dojo.disconnect(handler);
self._openDropDown();
});
dropDown._loadCheck(true);
return;
}else{
this._openDropDown();
}
}else{
this._closeDropDown();
}
},
 
_openDropDown: function(){
var dropDown = this.dropDown;
var oldWidth=dropDown.domNode.style.width;
var self = this;
 
dijit.popup.open({
parent: this,
popup: dropDown,
around: this.domNode,
orient: this.isLeftToRight() ? {'BL':'TL', 'BR':'TR', 'TL':'BL', 'TR':'BR'}
: {'BR':'TR', 'BL':'TL', 'TR':'BR', 'TL':'BL'},
onExecute: function(){
self._closeDropDown(true);
},
onCancel: function(){
self._closeDropDown(true);
},
onClose: function(){
dropDown.domNode.style.width = oldWidth;
self.popupStateNode.removeAttribute("popupActive");
this._opened = false;
}
});
if(this.domNode.offsetWidth > dropDown.domNode.offsetWidth){
var adjustNode = null;
if(!this.isLeftToRight()){
adjustNode = dropDown.domNode.parentNode;
var oldRight = adjustNode.offsetLeft + adjustNode.offsetWidth;
}
// make menu at least as wide as the button
dojo.marginBox(dropDown.domNode, {w: this.domNode.offsetWidth});
if(adjustNode){
adjustNode.style.left = oldRight - this.domNode.offsetWidth + "px";
}
}
this.popupStateNode.setAttribute("popupActive", "true");
this._opened=true;
if(dropDown.focus){
dropDown.focus();
}
// TODO: set this.checked and call setStateClass(), to affect button look while drop down is shown
},
_closeDropDown: function(/*Boolean*/ focus){
if(this._opened){
dijit.popup.close(this.dropDown);
if(focus){ this.focus(); }
this._opened = false;
}
}
});
 
/*
* usage
* <button dojoType="ComboButton" onClick="..."><span>Hello world</span><div dojoType=dijit.Menu>...</div></button>
*
* var button1 = new dijit.form.ComboButton({label: "hello world", onClick: foo, dropDown: "myMenu"});
* dojo.body().appendChild(button1.domNode);
*/
dojo.declare("dijit.form.ComboButton", dijit.form.DropDownButton, {
// summary
// left side is normal button, right side displays menu
templateString:"<table class='dijit dijitReset dijitInline dijitLeft'\n\tcellspacing='0' cellpadding='0'\n\tdojoAttachEvent=\"onmouseenter:_onMouse,onmouseleave:_onMouse,onmousedown:_onMouse\">\n\t<tr>\n\t\t<td\tclass=\"dijitStretch dijitButtonContents dijitButtonNode\"\n\t\t\ttabIndex=\"${tabIndex}\"\n\t\t\tdojoAttachEvent=\"ondijitclick:_onButtonClick\" dojoAttachPoint=\"titleNode\"\n\t\t\twaiRole=\"button\" waiState=\"labelledby-${id}_label\">\n\t\t\t<div class=\"dijitInline ${iconClass}\" dojoAttachPoint=\"iconNode\"></div>\n\t\t\t<span class=\"dijitButtonText\" id=\"${id}_label\" dojoAttachPoint=\"containerNode\">${label}</span>\n\t\t</td>\n\t\t<td class='dijitReset dijitRight dijitButtonNode dijitDownArrowButton'\n\t\t\tdojoAttachPoint=\"popupStateNode,focusNode\"\n\t\t\tdojoAttachEvent=\"ondijitclick:_onArrowClick, onkeypress:_onKey\"\n\t\t\tstateModifier=\"DownArrow\"\n\t\t\ttitle=\"${optionsTitle}\" name=\"${name}\"\n\t\t\twaiRole=\"button\" waiState=\"haspopup-true\"\n\t\t><div waiRole=\"presentation\">&#9660;</div>\n\t</td></tr>\n</table>\n",
 
attributeMap: dojo.mixin(dojo.clone(dijit.form._FormWidget.prototype.attributeMap),
{id:"", name:""}),
 
// optionsTitle: String
// text that describes the options menu (accessibility)
optionsTitle: "",
 
baseClass: "dijitComboButton",
 
_focusedNode: null,
 
postCreate: function(){
this.inherited(arguments);
this._focalNodes = [this.titleNode, this.popupStateNode];
dojo.forEach(this._focalNodes, dojo.hitch(this, function(node){
if(dojo.isIE){
this.connect(node, "onactivate", this._onNodeFocus);
}else{
this.connect(node, "onfocus", this._onNodeFocus);
}
}));
},
 
focusFocalNode: function(node){
// summary: Focus the focal node node.
this._focusedNode = node;
dijit.focus(node);
},
 
hasNextFocalNode: function(){
// summary: Returns true if this widget has no node currently
// focused or if there is a node following the focused one.
// False is returned if the last node has focus.
return this._focusedNode !== this.getFocalNodes()[1];
},
 
focusNext: function(){
// summary: Focus the focal node following the current node with focus
// or the first one if no node currently has focus.
this._focusedNode = this.getFocalNodes()[this._focusedNode ? 1 : 0];
dijit.focus(this._focusedNode);
},
 
hasPrevFocalNode: function(){
// summary: Returns true if this widget has no node currently
// focused or if there is a node before the focused one.
// False is returned if the first node has focus.
return this._focusedNode !== this.getFocalNodes()[0];
},
 
focusPrev: function(){
// summary: Focus the focal node before the current node with focus
// or the last one if no node currently has focus.
this._focusedNode = this.getFocalNodes()[this._focusedNode ? 0 : 1];
dijit.focus(this._focusedNode);
},
 
getFocalNodes: function(){
// summary: Returns an array of focal nodes for this widget.
return this._focalNodes;
},
 
_onNodeFocus: function(evt){
this._focusedNode = evt.currentTarget;
},
 
_onBlur: function(evt){
this.inherited(arguments);
this._focusedNode = null;
}
});
 
dojo.declare("dijit.form.ToggleButton", dijit.form.Button, {
// summary
// A button that can be in two states (checked or not).
// Can be base class for things like tabs or checkbox or radio buttons
 
baseClass: "dijitToggleButton",
 
// checked: Boolean
// Corresponds to the native HTML <input> element's attribute.
// In markup, specified as "checked='checked'" or just "checked".
// True if the button is depressed, or the checkbox is checked,
// or the radio button is selected, etc.
checked: false,
 
_clicked: function(/*Event*/ evt){
this.setChecked(!this.checked);
},
 
setChecked: function(/*Boolean*/ checked){
// summary
// Programatically deselect the button
this.checked = checked;
dijit.setWaiState(this.focusNode || this.domNode, "pressed", this.checked);
this._setStateClass();
this.onChange(checked);
}
});
 
}
/trunk/api/js/dojo1.0/dijit/form/TimeTextBox.js
New file
0,0 → 1,125
if(!dojo._hasResource["dijit.form.TimeTextBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.form.TimeTextBox"] = true;
dojo.provide("dijit.form.TimeTextBox");
 
dojo.require("dojo.date");
dojo.require("dojo.date.locale");
dojo.require("dojo.date.stamp");
dojo.require("dijit._TimePicker");
dojo.require("dijit.form.ValidationTextBox");
 
dojo.declare(
"dijit.form.TimeTextBox",
dijit.form.RangeBoundTextBox,
{
// summary:
// A validating, serializable, range-bound date text box.
 
// constraints object: min, max
regExpGen: dojo.date.locale.regexp,
compare: dojo.date.compare,
format: function(/*Date*/ value, /*Object*/ constraints){
if(!value || value.toString() == this._invalid){ return null; }
return dojo.date.locale.format(value, constraints);
},
parse: dojo.date.locale.parse,
serialize: dojo.date.stamp.toISOString,
 
value: new Date(""), // NaN
_invalid: (new Date("")).toString(), // NaN
 
_popupClass: "dijit._TimePicker",
 
postMixInProperties: function(){
//dijit.form.RangeBoundTextBox.prototype.postMixInProperties.apply(this, arguments);
this.inherited("postMixInProperties",arguments);
var constraints = this.constraints;
constraints.selector = 'time';
if(typeof constraints.min == "string"){ constraints.min = dojo.date.stamp.fromISOString(constraints.min); }
if(typeof constraints.max == "string"){ constraints.max = dojo.date.stamp.fromISOString(constraints.max); }
},
 
_onFocus: function(/*Event*/ evt){
// summary: open the TimePicker popup
this._open();
},
 
setValue: function(/*Date*/ value, /*Boolean, optional*/ priorityChange){
// summary:
// Sets the date on this textbox
this.inherited('setValue', arguments);
if(this._picker){
// #3948: fix blank date on popup only
if(!value || value.toString() == this._invalid){value=new Date();}
this._picker.setValue(value);
}
},
 
_open: function(){
// summary:
// opens the TimePicker, and sets the onValueSelected value
 
if(this.disabled){return;}
 
var self = this;
 
if(!this._picker){
var popupProto=dojo.getObject(this._popupClass, false);
this._picker = new popupProto({
onValueSelected: function(value){
 
self.focus(); // focus the textbox before the popup closes to avoid reopening the popup
setTimeout(dojo.hitch(self, "_close"), 1); // allow focus time to take
 
// this will cause InlineEditBox and other handlers to do stuff so make sure it's last
dijit.form.TimeTextBox.superclass.setValue.call(self, value, true);
},
lang: this.lang,
constraints:this.constraints,
isDisabledDate: function(/*Date*/ date){
// summary:
// disables dates outside of the min/max of the TimeTextBox
return self.constraints && (dojo.date.compare(self.constraints.min,date) > 0 || dojo.date.compare(self.constraints.max,date) < 0);
}
});
this._picker.setValue(this.getValue() || new Date());
}
if(!this._opened){
dijit.popup.open({
parent: this,
popup: this._picker,
around: this.domNode,
onCancel: dojo.hitch(this, this._close),
onClose: function(){ self._opened=false; }
});
this._opened=true;
}
dojo.marginBox(this._picker.domNode,{ w:this.domNode.offsetWidth });
},
 
_close: function(){
if(this._opened){
dijit.popup.close(this._picker);
this._opened=false;
}
},
 
_onBlur: function(){
// summary: called magically when focus has shifted away from this widget and it's dropdown
this._close();
this.inherited('_onBlur', arguments);
// don't focus on <input>. the user has explicitly focused on something else.
},
 
getDisplayedValue:function(){
return this.textbox.value;
},
 
setDisplayedValue:function(/*String*/ value){
this.textbox.value=value;
}
}
);
 
}
/trunk/api/js/dojo1.0/dijit/form/_Spinner.js
New file
0,0 → 1,104
if(!dojo._hasResource["dijit.form._Spinner"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.form._Spinner"] = true;
dojo.provide("dijit.form._Spinner");
 
dojo.require("dijit.form.ValidationTextBox");
 
dojo.declare(
"dijit.form._Spinner",
dijit.form.RangeBoundTextBox,
{
 
// summary: Mixin for validation widgets with a spinner
// description: This class basically (conceptually) extends dijit.form.ValidationTextBox.
// It modifies the template to have up/down arrows, and provides related handling code.
 
// defaultTimeout: Number
// number of milliseconds before a held key or button becomes typematic
defaultTimeout: 500,
 
// timeoutChangeRate: Number
// fraction of time used to change the typematic timer between events
// 1.0 means that each typematic event fires at defaultTimeout intervals
// < 1.0 means that each typematic event fires at an increasing faster rate
timeoutChangeRate: 0.90,
 
// smallDelta: Number
// adjust the value by this much when spinning using the arrow keys/buttons
smallDelta: 1,
// largeDelta: Number
// adjust the value by this much when spinning using the PgUp/Dn keys
largeDelta: 10,
 
templateString:"<table class=\"dijit dijitReset dijitInlineTable dijitLeft\" cellspacing=\"0\" cellpadding=\"0\"\n\tid=\"widget_${id}\" name=\"${name}\"\n\tdojoAttachEvent=\"onmouseenter:_onMouse,onmouseleave:_onMouse,onkeypress:_onKeyPress\"\n\twaiRole=\"presentation\"\n\t><tr class=\"dijitReset\"\n\t\t><td rowspan=\"2\" class=\"dijitReset dijitStretch dijitInputField\" width=\"100%\"\n\t\t\t><input dojoAttachPoint=\"textbox,focusNode\" type=\"${type}\" dojoAttachEvent=\"onfocus,onkeyup\"\n\t\t\t\twaiRole=\"spinbutton\" autocomplete=\"off\" name=\"${name}\"\n\t\t></td\n\t\t><td rowspan=\"2\" class=\"dijitReset dijitValidationIconField\" width=\"0%\" \n\t\t\t><div dojoAttachPoint='iconNode' class='dijitValidationIcon'></div\n\t\t></td\n\t\t><td class=\"dijitReset dijitRight dijitButtonNode dijitUpArrowButton\" width=\"0%\"\n\t\t\t\tdojoAttachPoint=\"upArrowNode\"\n\t\t\t\tdojoAttachEvent=\"onmousedown:_handleUpArrowEvent,onmouseup:_handleUpArrowEvent,onmouseover:_handleUpArrowEvent,onmouseout:_handleUpArrowEvent\"\n\t\t\t\tstateModifier=\"UpArrow\"\n\t\t\t><div class=\"dijitA11yUpArrow\">&#9650;</div\n\t\t></td\n\t></tr\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset dijitRight dijitButtonNode dijitDownArrowButton\" width=\"0%\"\n\t\t\t\tdojoAttachPoint=\"downArrowNode\"\n\t\t\t\tdojoAttachEvent=\"onmousedown:_handleDownArrowEvent,onmouseup:_handleDownArrowEvent,onmouseover:_handleDownArrowEvent,onmouseout:_handleDownArrowEvent\"\n\t\t\t\tstateModifier=\"DownArrow\"\n\t\t\t><div class=\"dijitA11yDownArrow\">&#9660;</div\n\t\t></td\n\t></tr\n></table>\n\n",
baseClass: "dijitSpinner",
 
adjust: function(/* Object */ val, /*Number*/ delta){
// summary: user replaceable function used to adjust a primitive value(Number/Date/...) by the delta amount specified
// the val is adjusted in a way that makes sense to the object type
return val;
},
 
_handleUpArrowEvent : function(/*Event*/ e){
this._onMouse(e, this.upArrowNode);
},
 
_handleDownArrowEvent : function(/*Event*/ e){
this._onMouse(e, this.downArrowNode);
},
 
 
_arrowPressed: function(/*Node*/ nodePressed, /*Number*/ direction){
if(this.disabled){ return; }
dojo.addClass(nodePressed, "dijitSpinnerButtonActive");
this.setValue(this.adjust(this.getValue(), direction*this.smallDelta), false);
},
 
_arrowReleased: function(/*Node*/ node){
if(this.disabled){ return; }
this._wheelTimer = null;
dijit.focus(this.textbox);
dojo.removeClass(node, "dijitSpinnerButtonActive");
},
 
_typematicCallback: function(/*Number*/ count, /*DOMNode*/ node, /*Event*/ evt){
if(node == this.textbox){ node = (evt.keyCode == dojo.keys.UP_ARROW) ? this.upArrowNode : this.downArrowNode; }
if(count == -1){ this._arrowReleased(node); }
else{ this._arrowPressed(node, (node == this.upArrowNode) ? 1 : -1); }
},
 
_wheelTimer: null,
_mouseWheeled: function(/*Event*/ evt){
dojo.stopEvent(evt);
var scrollAmount = 0;
if(typeof evt.wheelDelta == 'number'){ // IE
scrollAmount = evt.wheelDelta;
}else if(typeof evt.detail == 'number'){ // Mozilla+Firefox
scrollAmount = -evt.detail;
}
if(scrollAmount > 0){
var node = this.upArrowNode;
var dir = +1;
}else if(scrollAmount < 0){
var node = this.downArrowNode;
var dir = -1;
}else{ return; }
this._arrowPressed(node, dir);
if(this._wheelTimer != null){
clearTimeout(this._wheelTimer);
}
var _this = this;
this._wheelTimer = setTimeout(function(){_this._arrowReleased(node);}, 50);
},
 
postCreate: function(){
this.inherited('postCreate', arguments);
 
// extra listeners
this.connect(this.textbox, dojo.isIE ? "onmousewheel" : 'DOMMouseScroll', "_mouseWheeled");
dijit.typematic.addListener(this.upArrowNode, this.textbox, {keyCode:dojo.keys.UP_ARROW,ctrlKey:false,altKey:false,shiftKey:false}, this, "_typematicCallback", this.timeoutChangeRate, this.defaultTimeout);
dijit.typematic.addListener(this.downArrowNode, this.textbox, {keyCode:dojo.keys.DOWN_ARROW,ctrlKey:false,altKey:false,shiftKey:false}, this, "_typematicCallback", this.timeoutChangeRate, this.defaultTimeout);
}
});
 
}
/trunk/api/js/dojo1.0/dijit/form/Textarea.js
New file
0,0 → 1,238
if(!dojo._hasResource["dijit.form.Textarea"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.form.Textarea"] = true;
dojo.provide("dijit.form.Textarea");
 
dojo.require("dijit.form._FormWidget");
dojo.require("dojo.i18n");
dojo.requireLocalization("dijit", "Textarea", null, "ROOT");
 
dojo.declare(
"dijit.form.Textarea",
dijit.form._FormWidget,
{
// summary
// A textarea that resizes vertically to contain the data.
// Takes nearly all the parameters (name, value, etc.) that a vanilla textarea takes.
// Cols is not supported and the width should be specified with style width.
// Rows is not supported since this widget adjusts the height.
// usage:
// <textarea dojoType="dijit.form.TextArea">...</textarea>
 
attributeMap: dojo.mixin(dojo.clone(dijit.form._FormWidget.prototype.attributeMap),
{style:"styleNode", 'class':"styleNode"}),
 
templateString: (dojo.isIE || dojo.isSafari || dojo.isMozilla) ?
((dojo.isIE || dojo.isSafari) ? '<fieldset id="${id}" class="dijitInline dijitInputField dijitTextArea" dojoAttachPoint="styleNode" waiRole="presentation"><div dojoAttachPoint="editNode,focusNode,eventNode" dojoAttachEvent="onpaste:_changing,oncut:_changing" waiRole="textarea" style="text-decoration:none;_padding-bottom:16px;display:block;overflow:auto;" contentEditable="true"></div>'
: '<span id="${id}" class="dijitReset">'+
'<iframe src="javascript:<html><head><title>${_iframeEditTitle}</title></head><body><script>var _postCreate=window.frameElement?window.frameElement.postCreate:null;if(_postCreate)_postCreate();</script></body></html>"'+
' dojoAttachPoint="iframe,styleNode" dojoAttachEvent="onblur:_onIframeBlur" class="dijitInline dijitInputField dijitTextArea"></iframe>')
+ '<textarea name="${name}" value="${value}" dojoAttachPoint="formValueNode" style="display:none;"></textarea>'
+ ((dojo.isIE || dojo.isSafari) ? '</fieldset>':'</span>')
: '<textarea id="${id}" name="${name}" value="${value}" dojoAttachPoint="formValueNode,editNode,focusNode,styleNode" class="dijitInputField dijitTextArea"></textarea>',
 
focus: function(){
// summary: Received focus, needed for the InlineEditBox widget
if(!this.disabled){
this._changing(); // set initial height
}
if(dojo.isMozilla){
dijit.focus(this.iframe);
}else{
dijit.focus(this.focusNode);
}
},
 
setValue: function(/*String*/ value, /*Boolean, optional*/ priorityChange){
var editNode = this.editNode;
if(typeof value == "string"){
editNode.innerHTML = ""; // wipe out old nodes
if(value.split){
var _this=this;
var isFirst = true;
dojo.forEach(value.split("\n"), function(line){
if(isFirst){ isFirst = false; }
else {
editNode.appendChild(document.createElement("BR")); // preserve line breaks
}
editNode.appendChild(document.createTextNode(line)); // use text nodes so that imbedded tags can be edited
});
}else{
editNode.appendChild(document.createTextNode(value));
}
}else{
// blah<BR>blah --> blah\nblah
// <P>blah</P><P>blah</P> --> blah\nblah
// <DIV>blah</DIV><DIV>blah</DIV> --> blah\nblah
// &amp;&lt;&gt; -->&< >
value = editNode.innerHTML;
if(this.iframe){ // strip sizeNode
value = value.replace(/<div><\/div>\r?\n?$/i,"");
}
value = value.replace(/\s*\r?\n|^\s+|\s+$|&nbsp;/g,"").replace(/>\s+</g,"><").replace(/<\/(p|div)>$|^<(p|div)[^>]*>/gi,"").replace(/([^>])<div>/g,"$1\n").replace(/<\/p>\s*<p[^>]*>|<br[^>]*>/gi,"\n").replace(/<[^>]*>/g,"").replace(/&amp;/gi,"\&").replace(/&lt;/gi,"<").replace(/&gt;/gi,">");
}
this.value = this.formValueNode.value = value;
if(this.iframe){
var sizeNode = document.createElement('div');
editNode.appendChild(sizeNode);
var newHeight = sizeNode.offsetTop;
if(editNode.scrollWidth > editNode.clientWidth){ newHeight+=16; } // scrollbar space needed?
if(this.lastHeight != newHeight){ // cache size so that we don't get a resize event because of a resize event
if(newHeight == 0){ newHeight = 16; } // height = 0 causes the browser to not set scrollHeight
dojo.contentBox(this.iframe, {h: newHeight});
this.lastHeight = newHeight;
}
editNode.removeChild(sizeNode);
}
dijit.form.Textarea.superclass.setValue.call(this, this.getValue(), priorityChange);
},
 
getValue: function(){
return this.formValueNode.value.replace(/\r/g,"");
},
 
postMixInProperties: function(){
dijit.form.Textarea.superclass.postMixInProperties.apply(this,arguments);
// don't let the source text be converted to a DOM structure since we just want raw text
if(this.srcNodeRef && this.srcNodeRef.innerHTML != ""){
this.value = this.srcNodeRef.innerHTML;
this.srcNodeRef.innerHTML = "";
}
if((!this.value || this.value == "") && this.srcNodeRef && this.srcNodeRef.value){
this.value = this.srcNodeRef.value;
}
if(!this.value){ this.value = ""; }
this.value = this.value.replace(/\r\n/g,"\n").replace(/&gt;/g,">").replace(/&lt;/g,"<").replace(/&amp;/g,"&");
if(dojo.isMozilla){
// In the case of Firefox an iframe is used and when the text gets focus,
// focus is fired from the document object. There isn't a way to put a
// waiRole on the document object and as a result screen readers don't
// announce the role. As a result screen reader users are lost.
//
// An additional problem is that the browser gives the document object a
// very cryptic accessible name, e.g.
// wysiwyg://13/http://archive.dojotoolkit.org/nightly/dojotoolkit/dijit/tests/form/test_InlineEditBox.html
// When focus is fired from the document object, the screen reader speaks
// the accessible name. The cyptic accessile name is confusing.
//
// A workaround for both of these problems is to give the iframe's
// document a title, the name of which is similar to a role name, i.e.
// "edit area". This will be used as the accessible name which will replace
// the cryptic name and will also convey the role information to the user.
// Because it is read directly to the user, the string must be localized.
// In addition, since a <label> element can not be associated with an iframe, if
// this control has a label, insert the text into the title as well.
var _nlsResources = dojo.i18n.getLocalization("dijit", "Textarea");
this._iframeEditTitle = _nlsResources.iframeEditTitle;
this._iframeFocusTitle = _nlsResources.iframeFocusTitle;
var label=dojo.query('label[for="'+this.id+'"]');
if(label.length){
this._iframeEditTitle = label[0].innerHTML + " " + this._iframeEditTitle;
}
var body = this.focusNode = this.editNode = document.createElement('BODY');
body.style.margin="0px";
body.style.padding="0px";
body.style.border="0px";
}
},
 
postCreate: function(){
if(dojo.isIE || dojo.isSafari){
this.domNode.style.overflowY = 'hidden';
}else if(dojo.isMozilla){
var w = this.iframe.contentWindow;
try { // #4715: peeking at the title can throw a security exception during iframe setup
var title = this.iframe.contentDocument.title;
} catch(e) { var title = ''; }
if(!w || !title){
this.iframe.postCreate = dojo.hitch(this, this.postCreate);
return;
}
var d = w.document;
d.getElementsByTagName('HTML')[0].replaceChild(this.editNode, d.getElementsByTagName('BODY')[0]);
if(!this.isLeftToRight()){
d.getElementsByTagName('HTML')[0].dir = "rtl";
}
this.iframe.style.overflowY = 'hidden';
this.eventNode = d;
// this.connect won't destroy this handler cleanly since its on the iframe's window object
// resize is a method of window, not document
w.addEventListener("resize", dojo.hitch(this, this._changed), false); // resize is only on the window object
}else{
this.focusNode = this.domNode;
}
if(this.eventNode){
this.connect(this.eventNode, "keypress", this._onKeyPress);
this.connect(this.eventNode, "mousemove", this._changed);
this.connect(this.eventNode, "focus", this._focused);
this.connect(this.eventNode, "blur", this._blurred);
}
if(this.editNode){
this.connect(this.editNode, "change", this._changed); // needed for mouse paste events per #3479
}
this.inherited('postCreate', arguments);
},
 
// event handlers, you can over-ride these in your own subclasses
_focused: function(e){
dojo.addClass(this.iframe||this.domNode, "dijitInputFieldFocused");
this._changed(e);
},
 
_blurred: function(e){
dojo.removeClass(this.iframe||this.domNode, "dijitInputFieldFocused");
this._changed(e, true);
},
 
_onIframeBlur: function(){
// Reset the title back to "edit area".
this.iframe.contentDocument.title = this._iframeEditTitle;
},
 
_onKeyPress: function(e){
if(e.keyCode == dojo.keys.TAB && !e.shiftKey && !e.ctrlKey && !e.altKey && this.iframe){
// Pressing the tab key in the iframe (with designMode on) will cause the
// entry of a tab character so we have to trap that here. Since we don't
// know the next focusable object we put focus on the iframe and then the
// user has to press tab again (which then does the expected thing).
// A problem with that is that the screen reader user hears "edit area"
// announced twice which causes confusion. By setting the
// contentDocument's title to "edit area frame" the confusion should be
// eliminated.
this.iframe.contentDocument.title = this._iframeFocusTitle;
// Place focus on the iframe. A subsequent tab or shift tab will put focus
// on the correct control.
// Note: Can't use this.focus() because that results in a call to
// dijit.focus and if that receives an iframe target it will set focus
// on the iframe's contentWindow.
this.iframe.focus(); // this.focus(); won't work
dojo.stopEvent(e);
}else if(e.keyCode == dojo.keys.ENTER){
e.stopPropagation();
}else if(this.inherited("_onKeyPress", arguments) && this.iframe){
// #3752:
// The key press will not make it past the iframe.
// If a widget is listening outside of the iframe, (like InlineEditBox)
// it will not hear anything.
// Create an equivalent event so everyone else knows what is going on.
var te = document.createEvent("KeyEvents");
te.initKeyEvent("keypress", true, true, null, e.ctrlKey, e.altKey, e.shiftKey, e.metaKey, e.keyCode, e.charCode);
this.iframe.dispatchEvent(te);
}
this._changing();
},
 
_changing: function(e){
// summary: event handler for when a change is imminent
setTimeout(dojo.hitch(this, "_changed", e, false), 1);
},
 
_changed: function(e, priorityChange){
// summary: event handler for when a change has already happened
if(this.iframe && this.iframe.contentDocument.designMode != "on"){
this.iframe.contentDocument.designMode="on"; // in case this failed on init due to being hidden
}
this.setValue(null, priorityChange);
}
});
 
}
/trunk/api/js/dojo1.0/dijit/form/nls/validate.js
New file
0,0 → 1,0
({"rangeMessage": "* This value is out of range.", "invalidMessage": "* The value entered is not valid.", "missingMessage": "* This value is required."})
/trunk/api/js/dojo1.0/dijit/form/nls/cs/ComboBox.js
New file
0,0 → 1,0
({"previousMessage": "Předchozí volby", "nextMessage": "Další volby"})
/trunk/api/js/dojo1.0/dijit/form/nls/cs/validate.js
New file
0,0 → 1,0
({"rangeMessage": "* Tato hodnota je mimo rozsah.", "invalidMessage": "* Zadaná hodnota není platná.", "missingMessage": "* Tato hodnota je vyžadována."})
/trunk/api/js/dojo1.0/dijit/form/nls/cs/Textarea.js
New file
0,0 → 1,0
({"iframeTitle1": "oblast úprav", "iframeTitle2": "rámec oblasti úprav"})
/trunk/api/js/dojo1.0/dijit/form/nls/es/ComboBox.js
New file
0,0 → 1,0
({"previousMessage": "Opciones anteriores", "nextMessage": "Más opciones"})
/trunk/api/js/dojo1.0/dijit/form/nls/es/validate.js
New file
0,0 → 1,0
({"rangeMessage": "* Este valor está fuera del intervalo.", "invalidMessage": "* El valor especificado no es válido.", "missingMessage": "* Este valor es necesario."})
/trunk/api/js/dojo1.0/dijit/form/nls/es/Textarea.js
New file
0,0 → 1,0
({"iframeTitle1": "área de edición", "iframeTitle2": "marco del área de edición"})
/trunk/api/js/dojo1.0/dijit/form/nls/fr/ComboBox.js
New file
0,0 → 1,0
({"previousMessage": "Choix précédents", "nextMessage": "Plus de choix"})
/trunk/api/js/dojo1.0/dijit/form/nls/fr/validate.js
New file
0,0 → 1,0
({"rangeMessage": "* Cette valeur n'est pas comprise dans la plage autorisée. ", "invalidMessage": "* La valeur indiquée n'est pas correcte. ", "missingMessage": "* Cette valeur est requise. "})
/trunk/api/js/dojo1.0/dijit/form/nls/fr/Textarea.js
New file
0,0 → 1,0
({"iframeTitle1": "zone d'édition", "iframeTitle2": "cadre de la zone d'édition"})
/trunk/api/js/dojo1.0/dijit/form/nls/zh-tw/Textarea.js
New file
0,0 → 1,0
({"iframeTitle1": "編輯區", "iframeTitle2": "編輯區框"})
/trunk/api/js/dojo1.0/dijit/form/nls/zh-tw/ComboBox.js
New file
0,0 → 1,0
({"previousMessage": "前一個選擇項", "nextMessage": "其他選擇項"})
/trunk/api/js/dojo1.0/dijit/form/nls/zh-tw/validate.js
New file
0,0 → 1,0
({"rangeMessage": "* 此值超出範圍。", "invalidMessage": "* 輸入的值無效。", "missingMessage": "* 必須提供此值。"})
/trunk/api/js/dojo1.0/dijit/form/nls/ko/Textarea.js
New file
0,0 → 1,0
({"iframeTitle1": "편집 영역", "iframeTitle2": "편집 영역 프레임"})
/trunk/api/js/dojo1.0/dijit/form/nls/ko/ComboBox.js
New file
0,0 → 1,0
({"previousMessage": "이전 선택사항", "nextMessage": "기타 선택사항"})
/trunk/api/js/dojo1.0/dijit/form/nls/ko/validate.js
New file
0,0 → 1,0
({"rangeMessage": "* 이 값은 범위를 벗어납니다. ", "invalidMessage": "* 입력한 값이 유효하지 않습니다. ", "missingMessage": "* 이 값은 필수입니다. "})
/trunk/api/js/dojo1.0/dijit/form/nls/pl/ComboBox.js
New file
0,0 → 1,0
({"previousMessage": "Poprzednie wybory", "nextMessage": "Więcej wyborów"})
/trunk/api/js/dojo1.0/dijit/form/nls/pl/validate.js
New file
0,0 → 1,0
({"rangeMessage": "* Ta wartość jest spoza zakresu.", "invalidMessage": "* Wprowadzona wartość nie jest poprawna.", "missingMessage": "* Ta wartość jest wymagana."})
/trunk/api/js/dojo1.0/dijit/form/nls/pl/Textarea.js
New file
0,0 → 1,0
({"iframeTitle1": "edycja obszaru", "iframeTitle2": "edycja ramki obszaru"})
/trunk/api/js/dojo1.0/dijit/form/nls/hu/ComboBox.js
New file
0,0 → 1,0
({"previousMessage": "Előző menüpontok", "nextMessage": "További menüpontok"})
/trunk/api/js/dojo1.0/dijit/form/nls/hu/validate.js
New file
0,0 → 1,0
({"rangeMessage": "* Az érték kívül van a megengedett tartományon. ", "invalidMessage": "* A megadott érték érvénytelen. ", "missingMessage": "* Meg kell adni egy értéket. "})
/trunk/api/js/dojo1.0/dijit/form/nls/hu/Textarea.js
New file
0,0 → 1,0
({"iframeTitle1": "szerkesztési terület", "iframeTitle2": "szerkesztési terület keret"})
/trunk/api/js/dojo1.0/dijit/form/nls/it/ComboBox.js
New file
0,0 → 1,0
({"previousMessage": "Scelte precedenti", "nextMessage": "Altre scelte"})
/trunk/api/js/dojo1.0/dijit/form/nls/it/validate.js
New file
0,0 → 1,0
({"rangeMessage": "* Questo valore non è compreso nell'intervallo.", "invalidMessage": "* Il valore immesso non è valido.", "missingMessage": "* Questo valore è obbligatorio."})
/trunk/api/js/dojo1.0/dijit/form/nls/it/Textarea.js
New file
0,0 → 1,0
({"iframeTitle1": "modifica area", "iframeTitle2": "modifica frame area"})
/trunk/api/js/dojo1.0/dijit/form/nls/zh-cn/validate.js
New file
0,0 → 1,0
({"rangeMessage": "* 输入数据超出值域。", "invalidMessage": "* 非法的输入值。", "missingMessage": "* 此值是必须的。"})
/trunk/api/js/dojo1.0/dijit/form/nls/zh/ComboBox.js
New file
0,0 → 1,0
({"previousMessage": "先前选项", "nextMessage": "更多选项"})
/trunk/api/js/dojo1.0/dijit/form/nls/zh/validate.js
New file
0,0 → 1,0
({"rangeMessage": "* 此值超出范围。", "invalidMessage": "* 输入的值无效。", "missingMessage": "* 此值是必需值。"})
/trunk/api/js/dojo1.0/dijit/form/nls/zh/Textarea.js
New file
0,0 → 1,0
({"iframeTitle1": "编辑区", "iframeTitle2": "编辑区框架"})
/trunk/api/js/dojo1.0/dijit/form/nls/ComboBox.js
New file
0,0 → 1,0
({"previousMessage": "Previous choices", "nextMessage": "More choices"})
/trunk/api/js/dojo1.0/dijit/form/nls/pt/ComboBox.js
New file
0,0 → 1,0
({"previousMessage": "Opções anteriores", "nextMessage": "Mais opções"})
/trunk/api/js/dojo1.0/dijit/form/nls/pt/validate.js
New file
0,0 → 1,0
({"rangeMessage": "* Esse valor está fora do intervalo.", "invalidMessage": "* O valor digitado não é válido.", "missingMessage": "* Esse valor é necessário."})
/trunk/api/js/dojo1.0/dijit/form/nls/pt/Textarea.js
New file
0,0 → 1,0
({"iframeTitle1": "área de edição", "iframeTitle2": "quadro da área de edição"})
/trunk/api/js/dojo1.0/dijit/form/nls/ru/Textarea.js
New file
0,0 → 1,0
({"iframeTitle1": "область редактирования", "iframeTitle2": "фрейм области редактирования"})
/trunk/api/js/dojo1.0/dijit/form/nls/ru/ComboBox.js
New file
0,0 → 1,0
({"previousMessage": "Предыдущие варианты", "nextMessage": "Следующие варианты"})
/trunk/api/js/dojo1.0/dijit/form/nls/ru/validate.js
New file
0,0 → 1,0
({"rangeMessage": "* Это значение вне диапазона.", "invalidMessage": "* Указано недопустимое значение.", "missingMessage": "* Это обязательное значение."})
/trunk/api/js/dojo1.0/dijit/form/nls/Textarea.js
New file
0,0 → 1,0
({"iframeTitle1": "edit area", "iframeTitle2": "edit area frame"})
/trunk/api/js/dojo1.0/dijit/form/nls/de/ComboBox.js
New file
0,0 → 1,0
({"previousMessage": "Vorherige Auswahl", "nextMessage": "Weitere Auswahlmöglichkeiten"})
/trunk/api/js/dojo1.0/dijit/form/nls/de/validate.js
New file
0,0 → 1,0
({"rangeMessage": "* Dieser Wert ist außerhalb des gültigen Bereichs. ", "invalidMessage": "* Der eingegebene Wert ist ungültig. ", "missingMessage": "* Dieser Wert ist erforderlich."})
/trunk/api/js/dojo1.0/dijit/form/nls/de/Textarea.js
New file
0,0 → 1,0
({"iframeTitle1": "Editierbereich", "iframeTitle2": "Rahmen für Editierbereich"})
/trunk/api/js/dojo1.0/dijit/form/nls/ja/Textarea.js
New file
0,0 → 1,0
({"iframeTitle1": "編集域", "iframeTitle2": "編集域フレーム"})
/trunk/api/js/dojo1.0/dijit/form/nls/ja/ComboBox.js
New file
0,0 → 1,0
({"previousMessage": "以前の選択項目", "nextMessage": "追加の選択項目"})
/trunk/api/js/dojo1.0/dijit/form/nls/ja/validate.js
New file
0,0 → 1,0
({"rangeMessage": "* この値は範囲外です。", "invalidMessage": "* 入力した値は無効です。", "missingMessage": "* この値は必須です。"})
/trunk/api/js/dojo1.0/dijit/form/Slider.js
New file
0,0 → 1,401
if(!dojo._hasResource["dijit.form.Slider"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.form.Slider"] = true;
dojo.provide("dijit.form.Slider");
 
dojo.require("dijit.form._FormWidget");
dojo.require("dijit._Container");
dojo.require("dojo.dnd.move");
dojo.require("dijit.form.Button");
dojo.require("dojo.number");
 
dojo.declare(
"dijit.form.HorizontalSlider",
[dijit.form._FormWidget, dijit._Container],
{
// summary
// A form widget that allows one to select a value with a horizontally draggable image
 
templateString:"<table class=\"dijit dijitReset dijitSlider\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\" rules=\"none\"\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset\" colspan=\"2\"></td\n\t\t><td dojoAttachPoint=\"containerNode,topDecoration\" class=\"dijitReset\" style=\"text-align:center;width:100%;\"></td\n\t\t><td class=\"dijitReset\" colspan=\"2\"></td\n\t></tr\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset dijitSliderButtonContainer dijitHorizontalSliderButtonContainer\"\n\t\t\t><div class=\"dijitHorizontalSliderDecrementIcon\" tabIndex=\"-1\" style=\"display:none\" dojoAttachPoint=\"decrementButton\" dojoAttachEvent=\"onclick: decrement\"><span class=\"dijitSliderButtonInner\">-</span></div\n\t\t></td\n\t\t><td class=\"dijitReset\"\n\t\t\t><div class=\"dijitSliderBar dijitSliderBumper dijitHorizontalSliderBumper dijitSliderLeftBumper dijitHorizontalSliderLeftBumper\"></div\n\t\t></td\n\t\t><td class=\"dijitReset\"\n\t\t\t><input dojoAttachPoint=\"valueNode\" type=\"hidden\" name=\"${name}\"\n\t\t\t/><div style=\"position:relative;\" dojoAttachPoint=\"sliderBarContainer\"\n\t\t\t\t><div dojoAttachPoint=\"progressBar\" class=\"dijitSliderBar dijitHorizontalSliderBar dijitSliderProgressBar dijitHorizontalSliderProgressBar\" dojoAttachEvent=\"onclick:_onBarClick\"\n\t\t\t\t\t><div dojoAttachPoint=\"sliderHandle,focusNode\" class=\"dijitSliderMoveable dijitHorizontalSliderMoveable\" dojoAttachEvent=\"onkeypress:_onKeyPress,onclick:_onHandleClick\" waiRole=\"slider\" valuemin=\"${minimum}\" valuemax=\"${maximum}\"\n\t\t\t\t\t\t><div class=\"dijitSliderImageHandle dijitHorizontalSliderImageHandle\"></div\n\t\t\t\t\t></div\n\t\t\t\t></div\n\t\t\t\t><div dojoAttachPoint=\"remainingBar\" class=\"dijitSliderBar dijitHorizontalSliderBar dijitSliderRemainingBar dijitHorizontalSliderRemainingBar\" dojoAttachEvent=\"onclick:_onBarClick\"></div\n\t\t\t></div\n\t\t></td\n\t\t><td class=\"dijitReset\"\n\t\t\t><div class=\"dijitSliderBar dijitSliderBumper dijitHorizontalSliderBumper dijitSliderRightBumper dijitHorizontalSliderRightBumper\"></div\n\t\t></td\n\t\t><td class=\"dijitReset dijitSliderButtonContainer dijitHorizontalSliderButtonContainer\" style=\"right:0px;\"\n\t\t\t><div class=\"dijitHorizontalSliderIncrementIcon\" tabIndex=\"-1\" style=\"display:none\" dojoAttachPoint=\"incrementButton\" dojoAttachEvent=\"onclick: increment\"><span class=\"dijitSliderButtonInner\">+</span></div\n\t\t></td\n\t></tr\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset\" colspan=\"2\"></td\n\t\t><td dojoAttachPoint=\"containerNode,bottomDecoration\" class=\"dijitReset\" style=\"text-align:center;\"></td\n\t\t><td class=\"dijitReset\" colspan=\"2\"></td\n\t></tr\n></table>\n",
value: 0,
 
// showButtons: boolean
// Show increment/decrement buttons at the ends of the slider?
showButtons: true,
 
// minimum:: integer
// The minimum value allowed.
minimum: 0,
 
// maximum: integer
// The maximum allowed value.
maximum: 100,
 
// discreteValues: integer
// The maximum allowed values dispersed evenly between minimum and maximum (inclusive).
discreteValues: Infinity,
 
// pageIncrement: integer
// The amount of change with shift+arrow
pageIncrement: 2,
 
// clickSelect: boolean
// If clicking the progress bar changes the value or not
clickSelect: true,
 
widgetsInTemplate: true,
 
attributeMap: dojo.mixin(dojo.clone(dijit.form._FormWidget.prototype.attributeMap),
{id:"", name:"valueNode"}),
 
baseClass: "dijitSlider",
 
_mousePixelCoord: "pageX",
_pixelCount: "w",
_startingPixelCoord: "x",
_startingPixelCount: "l",
_handleOffsetCoord: "left",
_progressPixelSize: "width",
_upsideDown: false,
 
_onKeyPress: function(/*Event*/ e){
if(this.disabled || e.altKey || e.ctrlKey){ return; }
switch(e.keyCode){
case dojo.keys.HOME:
this.setValue(this.minimum, false);
break;
case dojo.keys.END:
this.setValue(this.maximum, false);
break;
case dojo.keys.UP_ARROW:
case (this._isReversed() ? dojo.keys.LEFT_ARROW : dojo.keys.RIGHT_ARROW):
case dojo.keys.PAGE_UP:
this.increment(e);
break;
case dojo.keys.DOWN_ARROW:
case (this._isReversed() ? dojo.keys.RIGHT_ARROW : dojo.keys.LEFT_ARROW):
case dojo.keys.PAGE_DOWN:
this.decrement(e);
break;
default:
this.inherited("_onKeyPress", arguments);
return;
}
dojo.stopEvent(e);
},
 
_onHandleClick: function(e){
if(this.disabled){ return; }
if(!dojo.isIE){
// make sure you get focus when dragging the handle
// (but don't do on IE because it causes a flicker on mouse up (due to blur then focus)
dijit.focus(this.sliderHandle);
}
dojo.stopEvent(e);
},
_isReversed: function() {
return !(this._upsideDown || this.isLeftToRight());
},
 
_onBarClick: function(e){
if(this.disabled || !this.clickSelect){ return; }
dijit.focus(this.sliderHandle);
dojo.stopEvent(e);
var abspos = dojo.coords(this.sliderBarContainer, true);
var pixelValue = e[this._mousePixelCoord] - abspos[this._startingPixelCoord];
this._setPixelValue(this._isReversed() || this._upsideDown ? (abspos[this._pixelCount] - pixelValue) : pixelValue, abspos[this._pixelCount], true);
},
 
_setPixelValue: function(/*Number*/ pixelValue, /*Number*/ maxPixels, /*Boolean, optional*/ priorityChange){
if(this.disabled){ return; }
pixelValue = pixelValue < 0 ? 0 : maxPixels < pixelValue ? maxPixels : pixelValue;
var count = this.discreteValues;
if(count <= 1 || count == Infinity){ count = maxPixels; }
count--;
var pixelsPerValue = maxPixels / count;
var wholeIncrements = Math.round(pixelValue / pixelsPerValue);
this.setValue((this.maximum-this.minimum)*wholeIncrements/count + this.minimum, priorityChange);
},
 
setValue: function(/*Number*/ value, /*Boolean, optional*/ priorityChange){
this.valueNode.value = this.value = value;
this.inherited('setValue', arguments);
var percent = (value - this.minimum) / (this.maximum - this.minimum);
this.progressBar.style[this._progressPixelSize] = (percent*100) + "%";
this.remainingBar.style[this._progressPixelSize] = ((1-percent)*100) + "%";
},
 
_bumpValue: function(signedChange){
if(this.disabled){ return; }
var s = dojo.getComputedStyle(this.sliderBarContainer);
var c = dojo._getContentBox(this.sliderBarContainer, s);
var count = this.discreteValues;
if(count <= 1 || count == Infinity){ count = c[this._pixelCount]; }
count--;
var value = (this.value - this.minimum) * count / (this.maximum - this.minimum) + signedChange;
if(value < 0){ value = 0; }
if(value > count){ value = count; }
value = value * (this.maximum - this.minimum) / count + this.minimum;
this.setValue(value, true);
},
 
decrement: function(e){
// summary
// decrement slider by 1 unit
this._bumpValue(e.keyCode == dojo.keys.PAGE_DOWN?-this.pageIncrement:-1);
},
 
increment: function(e){
// summary
// increment slider by 1 unit
this._bumpValue(e.keyCode == dojo.keys.PAGE_UP?this.pageIncrement:1);
},
 
_mouseWheeled: function(/*Event*/ evt){
dojo.stopEvent(evt);
var scrollAmount = 0;
if(typeof evt.wheelDelta == 'number'){ // IE
scrollAmount = evt.wheelDelta;
}else if(typeof evt.detail == 'number'){ // Mozilla+Firefox
scrollAmount = -evt.detail;
}
if(scrollAmount > 0){
this.increment(evt);
}else if(scrollAmount < 0){
this.decrement(evt);
}
},
 
startup: function(){
dojo.forEach(this.getChildren(), function(child){
if(this[child.container] != this.containerNode){
this[child.container].appendChild(child.domNode);
}
}, this);
},
 
_onBlur: function(){
dijit.form.HorizontalSlider.superclass.setValue.call(this, this.value, true);
},
 
postCreate: function(){
if(this.showButtons){
this.incrementButton.style.display="";
this.decrementButton.style.display="";
}
this.connect(this.domNode, dojo.isIE ? "onmousewheel" : 'DOMMouseScroll', "_mouseWheeled");
 
// define a custom constructor for a SliderMover that points back to me
var _self = this;
var mover = function(){
dijit.form._SliderMover.apply(this, arguments);
this.widget = _self;
};
dojo.extend(mover, dijit.form._SliderMover.prototype);
 
this._movable = new dojo.dnd.Moveable(this.sliderHandle, {mover: mover});
this.inherited('postCreate', arguments);
},
 
destroy: function(){
this._movable.destroy();
this.inherited('destroy', arguments);
}
});
 
dojo.declare(
"dijit.form.VerticalSlider",
dijit.form.HorizontalSlider,
{
// summary
// A form widget that allows one to select a value with a vertically draggable image
 
templateString:"<table class=\"dijitReset dijitSlider\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\" rules=\"none\"\n><tbody class=\"dijitReset\"\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset\"></td\n\t\t><td class=\"dijitReset dijitSliderButtonContainer dijitVerticalSliderButtonContainer\"\n\t\t\t><div class=\"dijitVerticalSliderIncrementIcon\" tabIndex=\"-1\" style=\"display:none\" dojoAttachPoint=\"incrementButton\" dojoAttachEvent=\"onclick: increment\"><span class=\"dijitSliderButtonInner\">+</span></div\n\t\t></td\n\t\t><td class=\"dijitReset\"></td\n\t></tr\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset\"></td\n\t\t><td class=\"dijitReset\"\n\t\t\t><center><div class=\"dijitSliderBar dijitSliderBumper dijitVerticalSliderBumper dijitSliderTopBumper dijitVerticalSliderTopBumper\"></div></center\n\t\t></td\n\t\t><td class=\"dijitReset\"></td\n\t></tr\n\t><tr class=\"dijitReset\"\n\t\t><td dojoAttachPoint=\"leftDecoration\" class=\"dijitReset\" style=\"text-align:center;height:100%;\"></td\n\t\t><td class=\"dijitReset\" style=\"height:100%;\"\n\t\t\t><input dojoAttachPoint=\"valueNode\" type=\"hidden\" name=\"${name}\"\n\t\t\t/><center style=\"position:relative;height:100%;\" dojoAttachPoint=\"sliderBarContainer\"\n\t\t\t\t><div dojoAttachPoint=\"remainingBar\" class=\"dijitSliderBar dijitVerticalSliderBar dijitSliderRemainingBar dijitVerticalSliderRemainingBar\" dojoAttachEvent=\"onclick:_onBarClick\"></div\n\t\t\t\t><div dojoAttachPoint=\"progressBar\" class=\"dijitSliderBar dijitVerticalSliderBar dijitSliderProgressBar dijitVerticalSliderProgressBar\" dojoAttachEvent=\"onclick:_onBarClick\"\n\t\t\t\t\t><div dojoAttachPoint=\"sliderHandle,focusNode\" class=\"dijitSliderMoveable\" dojoAttachEvent=\"onkeypress:_onKeyPress,onclick:_onHandleClick\" style=\"vertical-align:top;\" waiRole=\"slider\" valuemin=\"${minimum}\" valuemax=\"${maximum}\"\n\t\t\t\t\t\t><div class=\"dijitSliderImageHandle dijitVerticalSliderImageHandle\"></div\n\t\t\t\t\t></div\n\t\t\t\t></div\n\t\t\t></center\n\t\t></td\n\t\t><td dojoAttachPoint=\"containerNode,rightDecoration\" class=\"dijitReset\" style=\"text-align:center;height:100%;\"></td\n\t></tr\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset\"></td\n\t\t><td class=\"dijitReset\"\n\t\t\t><center><div class=\"dijitSliderBar dijitSliderBumper dijitVerticalSliderBumper dijitSliderBottomBumper dijitVerticalSliderBottomBumper\"></div></center\n\t\t></td\n\t\t><td class=\"dijitReset\"></td\n\t></tr\n\t><tr class=\"dijitReset\"\n\t\t><td class=\"dijitReset\"></td\n\t\t><td class=\"dijitReset dijitSliderButtonContainer dijitVerticalSliderButtonContainer\"\n\t\t\t><div class=\"dijitVerticalSliderDecrementIcon\" tabIndex=\"-1\" style=\"display:none\" dojoAttachPoint=\"decrementButton\" dojoAttachEvent=\"onclick: decrement\"><span class=\"dijitSliderButtonInner\">-</span></div\n\t\t></td\n\t\t><td class=\"dijitReset\"></td\n\t></tr\n></tbody></table>\n",
_mousePixelCoord: "pageY",
_pixelCount: "h",
_startingPixelCoord: "y",
_startingPixelCount: "t",
_handleOffsetCoord: "top",
_progressPixelSize: "height",
_upsideDown: true
});
 
dojo.declare("dijit.form._SliderMover",
dojo.dnd.Mover,
{
onMouseMove: function(e){
var widget = this.widget;
var c = this.constraintBox;
if(!c){
var container = widget.sliderBarContainer;
var s = dojo.getComputedStyle(container);
var c = dojo._getContentBox(container, s);
c[widget._startingPixelCount] = 0;
this.constraintBox = c;
}
var m = this.marginBox;
var pixelValue = widget._isReversed() ?
e[widget._mousePixelCoord] - dojo._abs(widget.sliderBarContainer).x :
m[widget._startingPixelCount] + e[widget._mousePixelCoord];
dojo.hitch(widget, "_setPixelValue")(widget._isReversed() || widget._upsideDown? (c[widget._pixelCount]-pixelValue) : pixelValue, c[widget._pixelCount]);
},
destroy: function(e){
var widget = this.widget;
widget.setValue(widget.value, true);
dojo.dnd.Mover.prototype.destroy.call(this);
}
});
 
 
dojo.declare("dijit.form.HorizontalRule", [dijit._Widget, dijit._Templated],
{
// Summary:
// Create hash marks for the Horizontal slider
templateString: '<div class="RuleContainer HorizontalRuleContainer"></div>',
 
// count: Integer
// Number of hash marks to generate
count: 3,
 
// container: Node
// If this is a child widget, connect it to this parent node
container: "containerNode",
 
// ruleStyle: String
// CSS style to apply to individual hash marks
ruleStyle: "",
 
_positionPrefix: '<div class="RuleMark HorizontalRuleMark" style="left:',
_positionSuffix: '%;',
_suffix: '"></div>',
 
_genHTML: function(pos, ndx){
return this._positionPrefix + pos + this._positionSuffix + this.ruleStyle + this._suffix;
},
_isHorizontal: true,
 
postCreate: function(){
if(this.count==1){
var innerHTML = this._genHTML(50, 0);
}else{
var interval = 100 / (this.count-1);
if(!this._isHorizontal || this.isLeftToRight()){
var innerHTML = this._genHTML(0, 0);
for(var i=1; i < this.count-1; i++){
innerHTML += this._genHTML(interval*i, i);
}
innerHTML += this._genHTML(100, this.count-1);
}else{
var innerHTML = this._genHTML(100, 0);
for(var i=1; i < this.count-1; i++){
innerHTML += this._genHTML(100-interval*i, i);
}
innerHTML += this._genHTML(0, this.count-1);
}
}
this.domNode.innerHTML = innerHTML;
}
});
 
dojo.declare("dijit.form.VerticalRule", dijit.form.HorizontalRule,
{
// Summary:
// Create hash marks for the Vertical slider
templateString: '<div class="RuleContainer VerticalRuleContainer"></div>',
_positionPrefix: '<div class="RuleMark VerticalRuleMark" style="top:',
_isHorizontal: false
});
 
dojo.declare("dijit.form.HorizontalRuleLabels", dijit.form.HorizontalRule,
{
// Summary:
// Create labels for the Horizontal slider
templateString: '<div class="RuleContainer HorizontalRuleContainer"></div>',
 
// labelStyle: String
// CSS style to apply to individual text labels
labelStyle: "",
 
// labels: Array
// Array of text labels to render - evenly spaced from left-to-right or bottom-to-top
labels: [],
 
// numericMargin: Integer
// Number of generated numeric labels that should be rendered as '' on the ends when labels[] are not specified
numericMargin: 0,
 
// numericMinimum: Integer
// Leftmost label value for generated numeric labels when labels[] are not specified
minimum: 0,
 
// numericMaximum: Integer
// Rightmost label value for generated numeric labels when labels[] are not specified
maximum: 1,
 
// constraints: object
// pattern, places, lang, et al (see dojo.number) for generated numeric labels when labels[] are not specified
constraints: {pattern:"#%"},
 
_positionPrefix: '<div class="RuleLabelContainer HorizontalRuleLabelContainer" style="left:',
_labelPrefix: '"><span class="RuleLabel HorizontalRuleLabel">',
_suffix: '</span></div>',
 
_calcPosition: function(pos){
return pos;
},
 
_genHTML: function(pos, ndx){
return this._positionPrefix + this._calcPosition(pos) + this._positionSuffix + this.labelStyle + this._labelPrefix + this.labels[ndx] + this._suffix;
},
 
getLabels: function(){
// summary: user replaceable function to return the labels array
 
// if the labels array was not specified directly, then see if <li> children were
var labels = this.labels;
if(!labels.length){
// for markup creation, labels are specified as child elements
labels = dojo.query("> li", this.srcNodeRef).map(function(node){
return String(node.innerHTML);
});
}
this.srcNodeRef.innerHTML = '';
// if the labels were not specified directly and not as <li> children, then calculate numeric labels
if(!labels.length && this.count > 1){
var start = this.minimum;
var inc = (this.maximum - start) / (this.count-1);
for (var i=0; i < this.count; i++){
labels.push((i<this.numericMargin||i>=(this.count-this.numericMargin))? '' : dojo.number.format(start, this.constraints));
start += inc;
}
}
return labels;
},
 
postMixInProperties: function(){
this.inherited('postMixInProperties', arguments);
this.labels = this.getLabels();
this.count = this.labels.length;
}
});
 
dojo.declare("dijit.form.VerticalRuleLabels", dijit.form.HorizontalRuleLabels,
{
// Summary:
// Create labels for the Vertical slider
templateString: '<div class="RuleContainer VerticalRuleContainer"></div>',
 
_positionPrefix: '<div class="RuleLabelContainer VerticalRuleLabelContainer" style="top:',
_labelPrefix: '"><span class="RuleLabel VerticalRuleLabel">',
 
_calcPosition: function(pos){
return 100-pos;
},
_isHorizontal: false
});
 
}
/trunk/api/js/dojo1.0/dijit/form/templates/Spinner.html
New file
0,0 → 1,29
<table class="dijit dijitReset dijitInlineTable dijitLeft" cellspacing="0" cellpadding="0"
id="widget_${id}" name="${name}"
dojoAttachEvent="onmouseenter:_onMouse,onmouseleave:_onMouse,onkeypress:_onKeyPress"
waiRole="presentation"
><tr class="dijitReset"
><td rowspan="2" class="dijitReset dijitStretch dijitInputField" width="100%"
><input dojoAttachPoint="textbox,focusNode" type="${type}" dojoAttachEvent="onfocus,onkeyup"
waiRole="spinbutton" autocomplete="off" name="${name}"
></td
><td rowspan="2" class="dijitReset dijitValidationIconField" width="0%"
><div dojoAttachPoint='iconNode' class='dijitValidationIcon'></div
></td
><td class="dijitReset dijitRight dijitButtonNode dijitUpArrowButton" width="0%"
dojoAttachPoint="upArrowNode"
dojoAttachEvent="onmousedown:_handleUpArrowEvent,onmouseup:_handleUpArrowEvent,onmouseover:_handleUpArrowEvent,onmouseout:_handleUpArrowEvent"
stateModifier="UpArrow"
><div class="dijitA11yUpArrow">&#9650;</div
></td
></tr
><tr class="dijitReset"
><td class="dijitReset dijitRight dijitButtonNode dijitDownArrowButton" width="0%"
dojoAttachPoint="downArrowNode"
dojoAttachEvent="onmousedown:_handleDownArrowEvent,onmouseup:_handleDownArrowEvent,onmouseover:_handleDownArrowEvent,onmouseout:_handleDownArrowEvent"
stateModifier="DownArrow"
><div class="dijitA11yDownArrow">&#9660;</div
></td
></tr
></table>
 
/trunk/api/js/dojo1.0/dijit/form/templates/CheckBox.html
New file
0,0 → 1,7
<fieldset class="dijitReset dijitInline" waiRole="presentation"
><input
type="${type}" name="${name}"
class="dijitReset dijitCheckBoxInput"
dojoAttachPoint="inputNode,focusNode"
dojoAttachEvent="onmouseover:_onMouse,onmouseout:_onMouse,onclick:_onClick"
/></fieldset>
/trunk/api/js/dojo1.0/dijit/form/templates/ComboBox.html
New file
0,0 → 1,21
<table class="dijit dijitReset dijitInlineTable dijitLeft" cellspacing="0" cellpadding="0"
id="widget_${id}" name="${name}" dojoAttachEvent="onmouseenter:_onMouse,onmouseleave:_onMouse" waiRole="presentation"
><tr class="dijitReset"
><td class='dijitReset dijitStretch dijitInputField' width="100%"
><input type="text" autocomplete="off" name="${name}"
dojoAttachEvent="onkeypress, onkeyup, onfocus, compositionend"
dojoAttachPoint="textbox,focusNode" waiRole="combobox"
/></td
><td class="dijitReset dijitValidationIconField" width="0%"
><div dojoAttachPoint='iconNode' class='dijitValidationIcon'></div
><div class='dijitValidationIconText'>&Chi;</div
></td
><td class='dijitReset dijitRight dijitButtonNode dijitDownArrowButton' width="0%"
dojoAttachPoint="downArrowNode"
dojoAttachEvent="onmousedown:_onArrowMouseDown,onmouseup:_onMouse,onmouseenter:_onMouse,onmouseleave:_onMouse"
><div class="dijitDownArrowButtonInner" waiRole="presentation"
><div class="dijitDownArrowButtonChar">&#9660;</div
></div
></td
></tr
></table>
/trunk/api/js/dojo1.0/dijit/form/templates/DropDownButton.html
New file
0,0 → 1,11
<div class="dijit dijitLeft dijitInline"
dojoAttachEvent="onmouseenter:_onMouse,onmouseleave:_onMouse,onmousedown:_onMouse,onclick:_onDropDownClick,onkeydown:_onDropDownKeydown,onblur:_onDropDownBlur,onkeypress:_onKey"
><div class='dijitRight'>
<button class="dijitStretch dijitButtonNode dijitButtonContents" type="${type}"
dojoAttachPoint="focusNode,titleNode" waiRole="button" waiState="haspopup-true,labelledby-${id}_label"
><div class="dijitInline ${iconClass}" dojoAttachPoint="iconNode"></div
><span class="dijitButtonText" dojoAttachPoint="containerNode,popupStateNode"
id="${id}_label">${label}</span
><span class='dijitA11yDownArrow'>&#9660;</span>
</button>
</div></div>
/trunk/api/js/dojo1.0/dijit/form/templates/ValidationTextBox.html
New file
0,0 → 1,13
<table style="display: -moz-inline-stack;" class="dijit dijitReset dijitInlineTable" cellspacing="0" cellpadding="0"
id="widget_${id}" name="${name}"
dojoAttachEvent="onmouseenter:_onMouse,onmouseleave:_onMouse" waiRole="presentation"
><tr class="dijitReset"
><td class="dijitReset dijitInputField" width="100%"
><input dojoAttachPoint='textbox,focusNode' dojoAttachEvent='onfocus,onblur:_onMouse,onkeyup,onkeypress:_onKeyPress' autocomplete="off"
type='${type}' name='${name}'
/></td
><td class="dijitReset dijitValidationIconField" width="0%"
><div dojoAttachPoint='iconNode' class='dijitValidationIcon'></div><div class='dijitValidationIconText'>&Chi;</div
></td
></tr
></table>
/trunk/api/js/dojo1.0/dijit/form/templates/blank.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/form/templates/blank.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/form/templates/Button.html
New file
0,0 → 1,12
<div class="dijit dijitLeft dijitInline dijitButton"
dojoAttachEvent="onclick:_onButtonClick,onmouseenter:_onMouse,onmouseleave:_onMouse,onmousedown:_onMouse"
><div class='dijitRight'
><button class="dijitStretch dijitButtonNode dijitButtonContents" dojoAttachPoint="focusNode,titleNode"
type="${type}" waiRole="button" waiState="labelledby-${id}_label"
><span class="dijitInline ${iconClass}" dojoAttachPoint="iconNode"
><span class="dijitToggleButtonIconChar">&#10003</span
></span
><span class="dijitButtonText" id="${id}_label" dojoAttachPoint="containerNode">${label}</span
></button
></div
></div>
/trunk/api/js/dojo1.0/dijit/form/templates/ComboButton.html
New file
0,0 → 1,20
<table class='dijit dijitReset dijitInline dijitLeft'
cellspacing='0' cellpadding='0'
dojoAttachEvent="onmouseenter:_onMouse,onmouseleave:_onMouse,onmousedown:_onMouse">
<tr>
<td class="dijitStretch dijitButtonContents dijitButtonNode"
tabIndex="${tabIndex}"
dojoAttachEvent="ondijitclick:_onButtonClick" dojoAttachPoint="titleNode"
waiRole="button" waiState="labelledby-${id}_label">
<div class="dijitInline ${iconClass}" dojoAttachPoint="iconNode"></div>
<span class="dijitButtonText" id="${id}_label" dojoAttachPoint="containerNode">${label}</span>
</td>
<td class='dijitReset dijitRight dijitButtonNode dijitDownArrowButton'
dojoAttachPoint="popupStateNode,focusNode"
dojoAttachEvent="ondijitclick:_onArrowClick, onkeypress:_onKey"
stateModifier="DownArrow"
title="${optionsTitle}" name="${name}"
waiRole="button" waiState="haspopup-true"
><div waiRole="presentation">&#9660;</div>
</td></tr>
</table>
/trunk/api/js/dojo1.0/dijit/form/templates/HorizontalSlider.html
New file
0,0 → 1,37
<table class="dijit dijitReset dijitSlider" cellspacing="0" cellpadding="0" border="0" rules="none"
><tr class="dijitReset"
><td class="dijitReset" colspan="2"></td
><td dojoAttachPoint="containerNode,topDecoration" class="dijitReset" style="text-align:center;width:100%;"></td
><td class="dijitReset" colspan="2"></td
></tr
><tr class="dijitReset"
><td class="dijitReset dijitSliderButtonContainer dijitHorizontalSliderButtonContainer"
><div class="dijitHorizontalSliderDecrementIcon" tabIndex="-1" style="display:none" dojoAttachPoint="decrementButton" dojoAttachEvent="onclick: decrement"><span class="dijitSliderButtonInner">-</span></div
></td
><td class="dijitReset"
><div class="dijitSliderBar dijitSliderBumper dijitHorizontalSliderBumper dijitSliderLeftBumper dijitHorizontalSliderLeftBumper"></div
></td
><td class="dijitReset"
><input dojoAttachPoint="valueNode" type="hidden" name="${name}"
/><div style="position:relative;" dojoAttachPoint="sliderBarContainer"
><div dojoAttachPoint="progressBar" class="dijitSliderBar dijitHorizontalSliderBar dijitSliderProgressBar dijitHorizontalSliderProgressBar" dojoAttachEvent="onclick:_onBarClick"
><div dojoAttachPoint="sliderHandle,focusNode" class="dijitSliderMoveable dijitHorizontalSliderMoveable" dojoAttachEvent="onkeypress:_onKeyPress,onclick:_onHandleClick" waiRole="slider" valuemin="${minimum}" valuemax="${maximum}"
><div class="dijitSliderImageHandle dijitHorizontalSliderImageHandle"></div
></div
></div
><div dojoAttachPoint="remainingBar" class="dijitSliderBar dijitHorizontalSliderBar dijitSliderRemainingBar dijitHorizontalSliderRemainingBar" dojoAttachEvent="onclick:_onBarClick"></div
></div
></td
><td class="dijitReset"
><div class="dijitSliderBar dijitSliderBumper dijitHorizontalSliderBumper dijitSliderRightBumper dijitHorizontalSliderRightBumper"></div
></td
><td class="dijitReset dijitSliderButtonContainer dijitHorizontalSliderButtonContainer" style="right:0px;"
><div class="dijitHorizontalSliderIncrementIcon" tabIndex="-1" style="display:none" dojoAttachPoint="incrementButton" dojoAttachEvent="onclick: increment"><span class="dijitSliderButtonInner">+</span></div
></td
></tr
><tr class="dijitReset"
><td class="dijitReset" colspan="2"></td
><td dojoAttachPoint="containerNode,bottomDecoration" class="dijitReset" style="text-align:center;"></td
><td class="dijitReset" colspan="2"></td
></tr
></table>
/trunk/api/js/dojo1.0/dijit/form/templates/TimePicker.html
New file
0,0 → 1,5
<div id="widget_${id}" class="dijitMenu"
><div dojoAttachPoint="upArrow" class="dijitButtonNode"><span class="dijitTimePickerA11yText">&#9650;</span></div
><div dojoAttachPoint="timeMenu,focusNode" dojoAttachEvent="onclick:_onOptionSelected,onmouseover,onmouseout"></div
><div dojoAttachPoint="downArrow" class="dijitButtonNode"><span class="dijitTimePickerA11yText">&#9660;</span></div
></div>
/trunk/api/js/dojo1.0/dijit/form/templates/VerticalSlider.html
New file
0,0 → 1,46
<table class="dijitReset dijitSlider" cellspacing="0" cellpadding="0" border="0" rules="none"
><tbody class="dijitReset"
><tr class="dijitReset"
><td class="dijitReset"></td
><td class="dijitReset dijitSliderButtonContainer dijitVerticalSliderButtonContainer"
><div class="dijitVerticalSliderIncrementIcon" tabIndex="-1" style="display:none" dojoAttachPoint="incrementButton" dojoAttachEvent="onclick: increment"><span class="dijitSliderButtonInner">+</span></div
></td
><td class="dijitReset"></td
></tr
><tr class="dijitReset"
><td class="dijitReset"></td
><td class="dijitReset"
><center><div class="dijitSliderBar dijitSliderBumper dijitVerticalSliderBumper dijitSliderTopBumper dijitVerticalSliderTopBumper"></div></center
></td
><td class="dijitReset"></td
></tr
><tr class="dijitReset"
><td dojoAttachPoint="leftDecoration" class="dijitReset" style="text-align:center;height:100%;"></td
><td class="dijitReset" style="height:100%;"
><input dojoAttachPoint="valueNode" type="hidden" name="${name}"
/><center style="position:relative;height:100%;" dojoAttachPoint="sliderBarContainer"
><div dojoAttachPoint="remainingBar" class="dijitSliderBar dijitVerticalSliderBar dijitSliderRemainingBar dijitVerticalSliderRemainingBar" dojoAttachEvent="onclick:_onBarClick"></div
><div dojoAttachPoint="progressBar" class="dijitSliderBar dijitVerticalSliderBar dijitSliderProgressBar dijitVerticalSliderProgressBar" dojoAttachEvent="onclick:_onBarClick"
><div dojoAttachPoint="sliderHandle,focusNode" class="dijitSliderMoveable" dojoAttachEvent="onkeypress:_onKeyPress,onclick:_onHandleClick" style="vertical-align:top;" waiRole="slider" valuemin="${minimum}" valuemax="${maximum}"
><div class="dijitSliderImageHandle dijitVerticalSliderImageHandle"></div
></div
></div
></center
></td
><td dojoAttachPoint="containerNode,rightDecoration" class="dijitReset" style="text-align:center;height:100%;"></td
></tr
><tr class="dijitReset"
><td class="dijitReset"></td
><td class="dijitReset"
><center><div class="dijitSliderBar dijitSliderBumper dijitVerticalSliderBumper dijitSliderBottomBumper dijitVerticalSliderBottomBumper"></div></center
></td
><td class="dijitReset"></td
></tr
><tr class="dijitReset"
><td class="dijitReset"></td
><td class="dijitReset dijitSliderButtonContainer dijitVerticalSliderButtonContainer"
><div class="dijitVerticalSliderDecrementIcon" tabIndex="-1" style="display:none" dojoAttachPoint="decrementButton" dojoAttachEvent="onclick: decrement"><span class="dijitSliderButtonInner">-</span></div
></td
><td class="dijitReset"></td
></tr
></tbody></table>
/trunk/api/js/dojo1.0/dijit/form/templates/InlineEditBox.html
New file
0,0 → 1,12
<span
><fieldset dojoAttachPoint="editNode" style="display:none;" waiRole="presentation"
><div dojoAttachPoint="containerNode" dojoAttachEvent="onkeypress:_onEditWidgetKeyPress"></div
><div dojoAttachPoint="buttonContainer"
><button class='saveButton' dojoAttachPoint="saveButton" dojoType="dijit.form.Button" dojoAttachEvent="onClick:save">${buttonSave}</button
><button class='cancelButton' dojoAttachPoint="cancelButton" dojoType="dijit.form.Button" dojoAttachEvent="onClick:cancel">${buttonCancel}</button
></div
></fieldset
><span tabIndex="0" dojoAttachPoint="textNode,focusNode" waiRole="button" style="display:none;"
dojoAttachEvent="onkeypress:_onKeyPress,onclick:_onClick,onmouseout:_onMouseOut,onmouseover:_onMouseOver,onfocus:_onMouseOver,onblur:_onMouseOut"
></span
></span>
/trunk/api/js/dojo1.0/dijit/form/templates/TextBox.html
New file
0,0 → 1,4
<input class="dojoTextBox" dojoAttachPoint='textbox,focusNode' name="${name}"
dojoAttachEvent='onmouseenter:_onMouse,onmouseleave:_onMouse,onfocus:_onMouse,onblur:_onMouse,onkeyup,onkeypress:_onKeyPress'
autocomplete="off" type="${type}"
/>
/trunk/api/js/dojo1.0/dijit/form/FilteringSelect.js
New file
0,0 → 1,175
if(!dojo._hasResource["dijit.form.FilteringSelect"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.form.FilteringSelect"] = true;
dojo.provide("dijit.form.FilteringSelect");
 
dojo.require("dijit.form.ComboBox");
 
dojo.declare(
"dijit.form.FilteringSelect",
[dijit.form.MappedTextBox, dijit.form.ComboBoxMixin],
{
/*
* summary
* Enhanced version of HTML's <select> tag.
*
* Similar features:
* - There is a drop down list of possible values.
* - You can only enter a value from the drop down list. (You can't enter an arbitrary value.)
* - The value submitted with the form is the hidden value (ex: CA),
* not the displayed value a.k.a. label (ex: California)
*
* Enhancements over plain HTML version:
* - If you type in some text then it will filter down the list of possible values in the drop down list.
* - List can be specified either as a static list or via a javascript function (that can get the list from a server)
*/
 
// searchAttr: String
// Searches pattern match against this field
 
// labelAttr: String
// Optional. The text that actually appears in the drop down.
// If not specified, the searchAttr text is used instead.
labelAttr: "",
 
// labelType: String
// "html" or "text"
labelType: "text",
 
_isvalid:true,
 
isValid:function(){
return this._isvalid;
},
 
_callbackSetLabel: function(/*Array*/ result, /*Object*/ dataObject, /*Boolean, optional*/ priorityChange){
// summary
// Callback function that dynamically sets the label of the ComboBox
 
// setValue does a synchronous lookup,
// so it calls _callbackSetLabel directly,
// and so does not pass dataObject
// dataObject==null means do not test the lastQuery, just continue
if(dataObject&&dataObject.query[this.searchAttr]!=this._lastQuery){return;}
if(!result.length){
//#3268: do nothing on bad input
//this._setValue("", "");
//#3285: change CSS to indicate error
if(!this._hasFocus){ this.valueNode.value=""; }
dijit.form.TextBox.superclass.setValue.call(this, undefined, !this._hasFocus);
this._isvalid=false;
this.validate(this._hasFocus);
}else{
this._setValueFromItem(result[0], priorityChange);
}
},
 
_openResultList: function(/*Object*/ results, /*Object*/ dataObject){
// #3285: tap into search callback to see if user's query resembles a match
if(dataObject.query[this.searchAttr]!=this._lastQuery){return;}
this._isvalid=results.length!=0;
this.validate(true);
dijit.form.ComboBoxMixin.prototype._openResultList.apply(this, arguments);
},
 
getValue:function(){
// don't get the textbox value but rather the previously set hidden value
return this.valueNode.value;
},
 
_getValueField:function(){
// used for option tag selects
return "value";
},
 
_setValue:function(/*String*/ value, /*String*/ displayedValue, /*Boolean, optional*/ priorityChange){
this.valueNode.value = value;
dijit.form.FilteringSelect.superclass.setValue.call(this, value, priorityChange, displayedValue);
this._lastDisplayedValue = displayedValue;
},
 
setValue: function(/*String*/ value, /*Boolean, optional*/ priorityChange){
// summary
// Sets the value of the select.
// Also sets the label to the corresponding value by reverse lookup.
 
//#3347: fetchItemByIdentity if no keyAttr specified
var self=this;
var handleFetchByIdentity = function(item, priorityChange){
if(item){
if(self.store.isItemLoaded(item)){
self._callbackSetLabel([item], undefined, priorityChange);
}else{
self.store.loadItem({item:item, onItem: function(result, dataObject){self._callbackSetLabel(result, dataObject, priorityChange)}});
}
}else{
self._isvalid=false;
// prevent errors from Tooltip not being created yet
self.validate(false);
}
}
this.store.fetchItemByIdentity({identity: value, onItem: function(item){handleFetchByIdentity(item, priorityChange)}});
},
 
_setValueFromItem: function(/*item*/ item, /*Boolean, optional*/ priorityChange){
// summary
// Set the displayed valued in the input box, based on a selected item.
// Users shouldn't call this function; they should be calling setDisplayedValue() instead
this._isvalid=true;
this._setValue(this.store.getIdentity(item), this.labelFunc(item, this.store), priorityChange);
},
 
labelFunc: function(/*item*/ item, /*dojo.data.store*/ store){
// summary: Event handler called when the label changes
// returns the label that the ComboBox should display
return store.getValue(item, this.searchAttr);
},
 
onkeyup: function(/*Event*/ evt){
// summary: internal function
// FilteringSelect needs to wait for the complete label before committing to a reverse lookup
//this.setDisplayedValue(this.textbox.value);
},
 
_doSelect: function(/*Event*/ tgt){
// summary:
// ComboBox's menu callback function
// FilteringSelect overrides this to set both the visible and hidden value from the information stored in the menu
this.item = tgt.item;
this._setValueFromItem(tgt.item, true);
},
 
setDisplayedValue:function(/*String*/ label){
// summary:
// Set textbox to display label
// Also performs reverse lookup to set the hidden value
// Used in InlineEditBox
 
if(this.store){
var query={};
this._lastQuery=query[this.searchAttr]=label;
// if the label is not valid, the callback will never set it,
// so the last valid value will get the warning textbox
// set the textbox value now so that the impending warning will make sense to the user
this.textbox.value=label;
this._lastDisplayedValue=label;
this.store.fetch({query:query, queryOptions:{ignoreCase:this.ignoreCase, deep:true}, onComplete: dojo.hitch(this, this._callbackSetLabel)});
}
},
 
_getMenuLabelFromItem:function(/*Item*/ item){
// internal function to help ComboBoxMenu figure out what to display
if(this.labelAttr){return {html:this.labelType=="html", label:this.store.getValue(item, this.labelAttr)};}
else{
// because this function is called by ComboBoxMenu, this.inherited tries to find the superclass of ComboBoxMenu
return dijit.form.ComboBoxMixin.prototype._getMenuLabelFromItem.apply(this, arguments);
}
},
 
postMixInProperties: function(){
dijit.form.ComboBoxMixin.prototype.postMixInProperties.apply(this, arguments);
dijit.form.MappedTextBox.prototype.postMixInProperties.apply(this, arguments);
}
}
);
 
}
/trunk/api/js/dojo1.0/dijit/form/CheckBox.js
New file
0,0 → 1,119
if(!dojo._hasResource["dijit.form.CheckBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.form.CheckBox"] = true;
dojo.provide("dijit.form.CheckBox");
 
dojo.require("dijit.form.Button");
 
dojo.declare(
"dijit.form.CheckBox",
dijit.form.ToggleButton,
{
// summary:
// Same as an HTML checkbox, but with fancy styling.
//
// description:
// User interacts with real html inputs.
// On onclick (which occurs by mouse click, space-bar, or
// using the arrow keys to switch the selected radio button),
// we update the state of the checkbox/radio.
//
// There are two modes:
// 1. High contrast mode
// 2. Normal mode
// In case 1, the regular html inputs are shown and used by the user.
// In case 2, the regular html inputs are invisible but still used by
// the user. They are turned quasi-invisible and overlay the background-image.
 
templateString:"<fieldset class=\"dijitReset dijitInline\" waiRole=\"presentation\"\n\t><input\n\t \ttype=\"${type}\" name=\"${name}\"\n\t\tclass=\"dijitReset dijitCheckBoxInput\"\n\t\tdojoAttachPoint=\"inputNode,focusNode\"\n\t \tdojoAttachEvent=\"onmouseover:_onMouse,onmouseout:_onMouse,onclick:_onClick\"\n/></fieldset>\n",
 
baseClass: "dijitCheckBox",
 
// Value of "type" attribute for <input>
type: "checkbox",
 
// value: Value
// equivalent to value field on normal checkbox (if checked, the value is passed as
// the value when form is submitted)
value: "on",
 
postCreate: function(){
dojo.setSelectable(this.inputNode, false);
this.setChecked(this.checked);
this.inherited(arguments);
},
 
setChecked: function(/*Boolean*/ checked){
if(dojo.isIE){
if(checked){ this.inputNode.setAttribute('checked', 'checked'); }
else{ this.inputNode.removeAttribute('checked'); }
}else{ this.inputNode.checked = checked; }
this.inherited(arguments);
},
 
setValue: function(/*String*/ value){
if(value == null){ value = ""; }
this.inputNode.value = value;
dijit.form.CheckBox.superclass.setValue.call(this,value);
}
}
);
 
dojo.declare(
"dijit.form.RadioButton",
dijit.form.CheckBox,
{
// summary:
// Same as an HTML radio, but with fancy styling.
//
// description:
// Implementation details
//
// Specialization:
// We keep track of dijit radio groups so that we can update the state
// of all the siblings (the "context") in a group based on input
// events. We don't rely on browser radio grouping.
 
type: "radio",
baseClass: "dijitRadio",
 
// This shared object keeps track of all widgets, grouped by name
_groups: {},
 
postCreate: function(){
// add this widget to _groups
(this._groups[this.name] = this._groups[this.name] || []).push(this);
 
this.inherited(arguments);
},
 
uninitialize: function(){
// remove this widget from _groups
dojo.forEach(this._groups[this.name], function(widget, i, arr){
if(widget === this){
arr.splice(i, 1);
return;
}
}, this);
},
 
setChecked: function(/*Boolean*/ checked){
// If I am being checked then have to deselect currently checked radio button
if(checked){
dojo.forEach(this._groups[this.name], function(widget){
if(widget != this && widget.checked){
widget.setChecked(false);
}
}, this);
}
this.inherited(arguments);
},
 
_clicked: function(/*Event*/ e){
if(!this.checked){
this.setChecked(true);
}
}
}
);
 
}
/trunk/api/js/dojo1.0/dijit/form/NumberSpinner.js
New file
0,0 → 1,31
if(!dojo._hasResource["dijit.form.NumberSpinner"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.form.NumberSpinner"] = true;
dojo.provide("dijit.form.NumberSpinner");
 
dojo.require("dijit.form._Spinner");
dojo.require("dijit.form.NumberTextBox");
 
dojo.declare(
"dijit.form.NumberSpinner",
[dijit.form._Spinner, dijit.form.NumberTextBoxMixin],
{
// summary: Number Spinner
// description: This widget is the same as NumberTextBox but with up/down arrows added
 
required: true,
 
adjust: function(/* Object */ val, /*Number*/ delta){
// summary: change Number val by the given amount
var newval = val+delta;
if(isNaN(val) || isNaN(newval)){ return val; }
if((typeof this.constraints.max == "number") && (newval > this.constraints.max)){
newval = this.constraints.max;
}
if((typeof this.constraints.min == "number") && (newval < this.constraints.min)){
newval = this.constraints.min;
}
return newval;
}
});
 
}
/trunk/api/js/dojo1.0/dijit/form/DateTextBox.js
New file
0,0 → 1,24
if(!dojo._hasResource["dijit.form.DateTextBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.form.DateTextBox"] = true;
dojo.provide("dijit.form.DateTextBox");
 
dojo.require("dijit._Calendar");
dojo.require("dijit.form.TimeTextBox");
 
dojo.declare(
"dijit.form.DateTextBox",
dijit.form.TimeTextBox,
{
// summary:
// A validating, serializable, range-bound date text box.
 
_popupClass: "dijit._Calendar",
 
postMixInProperties: function(){
this.inherited('postMixInProperties', arguments);
this.constraints.selector = 'date';
}
}
);
 
}
/trunk/api/js/dojo1.0/dijit/ProgressBar.js
New file
0,0 → 1,93
if(!dojo._hasResource["dijit.ProgressBar"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.ProgressBar"] = true;
dojo.provide("dijit.ProgressBar");
 
dojo.require("dojo.fx");
dojo.require("dojo.number");
 
dojo.require("dijit._Widget");
dojo.require("dijit._Templated");
 
dojo.declare("dijit.ProgressBar", [dijit._Widget, dijit._Templated], {
// summary:
// a progress widget
//
// usage:
// <div dojoType="ProgressBar"
// places="0"
// progress="..." maximum="..."></div>
 
// progress: String (Percentage or Number)
// initial progress value.
// with "%": percentage value, 0% <= progress <= 100%
// or without "%": absolute value, 0 <= progress <= maximum
progress: "0",
 
// maximum: Float
// max sample number
maximum: 100,
 
// places: Number
// number of places to show in values; 0 by default
places: 0,
 
// indeterminate: Boolean
// false: show progress
// true: show that a process is underway but that the progress is unknown
indeterminate: false,
 
templateString:"<div class=\"dijitProgressBar dijitProgressBarEmpty\"\n\t><div waiRole=\"progressbar\" tabindex=\"0\" dojoAttachPoint=\"internalProgress\" class=\"dijitProgressBarFull\"\n\t\t><div class=\"dijitProgressBarTile\"></div\n\t\t><span style=\"visibility:hidden\">&nbsp;</span\n\t></div\n\t><div dojoAttachPoint=\"label\" class=\"dijitProgressBarLabel\" id=\"${id}_label\">&nbsp;</div\n\t><img dojoAttachPoint=\"inteterminateHighContrastImage\" class=\"dijitProgressBarIndeterminateHighContrastImage\"\n\t></img\n></div>\n",
 
_indeterminateHighContrastImagePath:
dojo.moduleUrl("dijit", "themes/a11y/indeterminate_progress.gif"),
 
// public functions
postCreate: function(){
this.inherited("postCreate",arguments);
this.inteterminateHighContrastImage.setAttribute("src",
this._indeterminateHighContrastImagePath);
this.update();
},
 
update: function(/*Object?*/attributes){
// summary: update progress information
//
// attributes: may provide progress and/or maximum properties on this parameter,
// see attribute specs for details.
dojo.mixin(this, attributes||{});
var percent = 1, classFunc;
if(this.indeterminate){
classFunc = "addClass";
dijit.removeWaiState(this.internalProgress, "valuenow");
dijit.removeWaiState(this.internalProgress, "valuemin");
dijit.removeWaiState(this.internalProgress, "valuemax");
}else{
classFunc = "removeClass";
if(String(this.progress).indexOf("%") != -1){
percent = Math.min(parseFloat(this.progress)/100, 1);
this.progress = percent * this.maximum;
}else{
this.progress = Math.min(this.progress, this.maximum);
percent = this.progress / this.maximum;
}
var text = this.report(percent);
this.label.firstChild.nodeValue = text;
dijit.setWaiState(this.internalProgress, "describedby", this.label.id);
dijit.setWaiState(this.internalProgress, "valuenow", this.progress);
dijit.setWaiState(this.internalProgress, "valuemin", 0);
dijit.setWaiState(this.internalProgress, "valuemax", this.maximum);
}
dojo[classFunc](this.domNode, "dijitProgressBarIndeterminate");
this.internalProgress.style.width = (percent * 100) + "%";
this.onChange();
},
 
report: function(/*float*/percent){
// Generates message to show; may be overridden by user
return dojo.number.format(percent, {type: "percent", places: this.places, locale: this.lang});
},
 
onChange: function(){}
});
 
}
/trunk/api/js/dojo1.0/dijit/_TimePicker.js
New file
0,0 → 1,221
if(!dojo._hasResource["dijit._TimePicker"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit._TimePicker"] = true;
dojo.provide("dijit._TimePicker");
 
dojo.require("dijit.form._FormWidget");
dojo.require("dojo.date.locale");
 
dojo.declare("dijit._TimePicker",
[dijit._Widget, dijit._Templated],
{
// summary:
// A graphical time picker that TimeTextBox pops up
// It is functionally modeled after the Java applet at http://java.arcadevillage.com/applets/timepica.htm
// See ticket #599
 
templateString:"<div id=\"widget_${id}\" class=\"dijitMenu\"\n ><div dojoAttachPoint=\"upArrow\" class=\"dijitButtonNode\"><span class=\"dijitTimePickerA11yText\">&#9650;</span></div\n ><div dojoAttachPoint=\"timeMenu,focusNode\" dojoAttachEvent=\"onclick:_onOptionSelected,onmouseover,onmouseout\"></div\n ><div dojoAttachPoint=\"downArrow\" class=\"dijitButtonNode\"><span class=\"dijitTimePickerA11yText\">&#9660;</span></div\n></div>\n",
baseClass: "dijitTimePicker",
 
// clickableIncrement: String
// ISO-8601 string representing the amount by which
// every clickable element in the time picker increases
// Set in non-Zulu time, without a time zone
// Example: "T00:15:00" creates 15 minute increments
// Must divide visibleIncrement evenly
clickableIncrement: "T00:15:00",
 
// visibleIncrement: String
// ISO-8601 string representing the amount by which
// every element with a visible time in the time picker increases
// Set in non Zulu time, without a time zone
// Example: "T01:00:00" creates text in every 1 hour increment
visibleIncrement: "T01:00:00",
 
// visibleRange: String
// ISO-8601 string representing the range of this TimePicker
// The TimePicker will only display times in this range
// Example: "T05:00:00" displays 5 hours of options
visibleRange: "T05:00:00",
 
// value: String
// Date to display.
// Defaults to current time and date.
// Can be a Date object or an ISO-8601 string
// If you specify the GMT time zone ("-01:00"),
// the time will be converted to the local time in the local time zone.
// Otherwise, the time is considered to be in the local time zone.
// If you specify the date and isDate is true, the date is used.
// Example: if your local time zone is GMT -05:00,
// "T10:00:00" becomes "T10:00:00-05:00" (considered to be local time),
// "T10:00:00-01:00" becomes "T06:00:00-05:00" (4 hour difference),
// "T10:00:00Z" becomes "T05:00:00-05:00" (5 hour difference between Zulu and local time)
// "yyyy-mm-ddThh:mm:ss" is the format to set the date and time
// Example: "2007-06-01T09:00:00"
value: new Date(),
 
_visibleIncrement:2,
_clickableIncrement:1,
_totalIncrements:10,
constraints:{},
 
serialize: dojo.date.stamp.toISOString,
 
setValue:function(/*Date*/ date, /*Boolean*/ priority){
// summary:
// Set the value of the TimePicker
// Redraws the TimePicker around the new date
 
//dijit._TimePicker.superclass.setValue.apply(this, arguments);
this.value=date;
this._showText();
},
 
isDisabledDate: function(/*Date*/dateObject, /*String?*/locale){
// summary:
// May be overridden to disable certain dates in the TimePicker e.g. isDisabledDate=dojo.date.locale.isWeekend
return false; // Boolean
},
 
_showText:function(){
this.timeMenu.innerHTML="";
var fromIso = dojo.date.stamp.fromISOString;
this._clickableIncrementDate=fromIso(this.clickableIncrement);
this._visibleIncrementDate=fromIso(this.visibleIncrement);
this._visibleRangeDate=fromIso(this.visibleRange);
// get the value of the increments and the range in seconds (since 00:00:00) to find out how many divs to create
var sinceMidnight = function(/*Date*/ date){
return date.getHours()*60*60+date.getMinutes()*60+date.getSeconds();
};
 
var clickableIncrementSeconds = sinceMidnight(this._clickableIncrementDate);
var visibleIncrementSeconds = sinceMidnight(this._visibleIncrementDate);
var visibleRangeSeconds = sinceMidnight(this._visibleRangeDate);
 
// round reference date to previous visible increment
var time = this.value.getTime();
this._refDate = new Date(time - time % (visibleIncrementSeconds*1000));
 
// assume clickable increment is the smallest unit
this._clickableIncrement=1;
// divide the visible range by the clickable increment to get the number of divs to create
// example: 10:00:00/00:15:00 -> display 40 divs
this._totalIncrements=visibleRangeSeconds/clickableIncrementSeconds;
// divide the visible increments by the clickable increments to get how often to display the time inline
// example: 01:00:00/00:15:00 -> display the time every 4 divs
this._visibleIncrement=visibleIncrementSeconds/clickableIncrementSeconds;
for(var i=-this._totalIncrements/2; i<=this._totalIncrements/2; i+=this._clickableIncrement){
var div=this._createOption(i);
this.timeMenu.appendChild(div);
}
// TODO:
// I commented this out because it
// causes problems for a TimeTextBox in a Dialog, or as the editor of an InlineEditBox,
// because the timeMenu node isn't visible yet. -- Bill (Bug #????)
// dijit.focus(this.timeMenu);
},
 
postCreate:function(){
// instantiate constraints
if(this.constraints===dijit._TimePicker.prototype.constraints){
this.constraints={};
}
// dojo.date.locale needs the lang in the constraints as locale
if(!this.constraints.locale){
this.constraints.locale=this.lang;
}
 
// assign typematic mouse listeners to the arrow buttons
this.connect(this.timeMenu, dojo.isIE ? "onmousewheel" : 'DOMMouseScroll', "_mouseWheeled");
dijit.typematic.addMouseListener(this.upArrow,this,this._onArrowUp, 0.8, 500);
dijit.typematic.addMouseListener(this.downArrow,this,this._onArrowDown, 0.8, 500);
//dijit.typematic.addListener(this.upArrow,this.timeMenu, {keyCode:dojo.keys.UP_ARROW,ctrlKey:false,altKey:false,shiftKey:false}, this, "_onArrowUp", 0.8, 500);
//dijit.typematic.addListener(this.downArrow, this.timeMenu, {keyCode:dojo.keys.DOWN_ARROW,ctrlKey:false,altKey:false,shiftKey:false}, this, "_onArrowDown", 0.8,500);
 
this.inherited("postCreate", arguments);
this.setValue(this.value);
},
 
_createOption:function(/*Number*/ index){
// summary: creates a clickable time option
var div=document.createElement("div");
var date = (div.date = new Date(this._refDate));
div.index=index;
var incrementDate = this._clickableIncrementDate;
date.setHours(date.getHours()+incrementDate.getHours()*index,
date.getMinutes()+incrementDate.getMinutes()*index,
date.getSeconds()+incrementDate.getSeconds()*index);
 
var innerDiv = document.createElement('div');
dojo.addClass(div,this.baseClass+"Item");
dojo.addClass(innerDiv,this.baseClass+"ItemInner");
innerDiv.innerHTML=dojo.date.locale.format(date, this.constraints);
div.appendChild(innerDiv);
 
if(index%this._visibleIncrement<1 && index%this._visibleIncrement>-1){
dojo.addClass(div, this.baseClass+"Marker");
}else if(index%this._clickableIncrement==0){
dojo.addClass(div, this.baseClass+"Tick");
}
if(this.isDisabledDate(date)){
// set disabled
dojo.addClass(div, this.baseClass+"ItemDisabled");
}
if(dojo.date.compare(this.value, date, this.constraints.selector)==0){
div.selected=true;
dojo.addClass(div, this.baseClass+"ItemSelected");
}
return div;
},
 
_onOptionSelected:function(/*Object*/ tgt){
var tdate = tgt.target.date || tgt.target.parentNode.date;
if(!tdate||this.isDisabledDate(tdate)){return;}
this.setValue(tdate);
this.onValueSelected(tdate);
},
 
onValueSelected:function(value){
},
 
onmouseover:function(/*Event*/ e){
var tgr = (e.target.parentNode === this.timeMenu) ? e.target : e.target.parentNode;
this._highlighted_option=tgr;
dojo.addClass(tgr, this.baseClass+"ItemHover");
},
 
onmouseout:function(/*Event*/ e){
var tgr = (e.target.parentNode === this.timeMenu) ? e.target : e.target.parentNode;
if(this._highlighted_option===tgr){
dojo.removeClass(tgr, this.baseClass+"ItemHover");
}
},
 
_mouseWheeled:function(/*Event*/e){
// summary: handle the mouse wheel listener
dojo.stopEvent(e);
// we're not _measuring_ the scroll amount, just direction
var scrollAmount = (dojo.isIE ? e.wheelDelta : -e.detail);
this[(scrollAmount>0 ? "_onArrowUp" : "_onArrowDown")](); // yes, we're making a new dom node every time you mousewheel, or click
},
 
_onArrowUp:function(){
// summary: remove the bottom time and add one to the top
var index=this.timeMenu.childNodes[0].index-1;
var div=this._createOption(index);
this.timeMenu.removeChild(this.timeMenu.childNodes[this.timeMenu.childNodes.length-1]);
this.timeMenu.insertBefore(div, this.timeMenu.childNodes[0]);
},
 
_onArrowDown:function(){
// summary: remove the top time and add one to the bottom
var index=this.timeMenu.childNodes[this.timeMenu.childNodes.length-1].index+1;
var div=this._createOption(index);
this.timeMenu.removeChild(this.timeMenu.childNodes[0]);
this.timeMenu.appendChild(div);
}
}
);
 
}
/trunk/api/js/dojo1.0/dijit/demos/form.html
New file
0,0 → 1,239
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Dojo Form Widgets Test</title>
 
<script type="text/javascript" src="../../dojo/dojo.js"
djConfig="isDebug: false, parseOnLoad: true"></script>
<script type="text/javascript">
dojo.require("dijit.form.Form");
dojo.require("dijit.form.ValidationTextBox");
dojo.require("dijit.form.ComboBox");
dojo.require("dijit.form.FilteringSelect");
dojo.require("dijit.form.CheckBox");
dojo.require("dijit.form.DateTextBox");
dojo.require("dijit.form.CurrencyTextBox");
dojo.require("dijit.form.NumberSpinner");
dojo.require("dijit.form.Slider");
dojo.require("dijit.form.Textarea");
dojo.require("dijit.Editor");
dojo.require("dijit.form.Button");
dojo.require("dojo.data.ItemFileReadStore");
dojo.require("dojo.parser"); // scan page for widgets and instantiate them
 
// make dojo.toJson() print dates correctly (this feels a bit dirty)
Date.prototype.json = function(){ return dojo.date.stamp.toISOString(this, {selector: 'date'});};
</script>
<style type="text/css">
@import "../../dojo/resources/dojo.css";
@import "../themes/tundra/tundra.css";
@import "../themes/tundra/tundra_rtl.css";
@import "../tests/css/dijitTests.css";
 
.formQuestion {
background-color:#d0e3f5;
padding:0.3em;
font-weight:900;
font-family:Verdana, Arial, sans-serif;
font-size:0.8em;
color:#5a5a5a;
}
.formAnswer {
background-color:#f5eede;
padding:0.3em;
margin-bottom:1em;
width: 100%;
}
.pageSubContentTitle {
color:#8e8e8e;
font-size:1em;
font-family:Verdana, Arial, sans-serif;
margin-bottom:0.75em;
}
.small INPUT {
width: 2.5em;
}
.medium INPUT {
width: 10em;
}
.long INPUT {
width: 20em;
}
.firstLabel {
display: inline-block;
display: -moz-inline-box;
width: 10em;
min-width: 10em;
}
.secondLabel {
width: auto;
margin-left: 5em;
margin-right: 1em;
}
fieldset label {
margin-right: 1em;
}
.noticeMessage {
display: block;
float: right;
font-weight: normal;
font-family:Arial, Verdana, sans-serif;
color:#663;
font-size:0.9em;
}
</style>
</head>
<body class="tundra">
<div dojoType="dojo.data.ItemFileReadStore" jsId="stateStore"
url="../tests/_data/states.json"></div>
 
<h2 class="pageSubContentTitle">Job Application Form</h2>
<p>This is just a little demo of dijit's form widgets</p>
<form dojoType="dijit.form.Form" id="myForm" action="showPost.php"
execute="alert('Execute form w/values:\n'+dojo.toJson(arguments[0],true));">
<div class="formQuestion">
<span class="noticeMessage">
As you type in the text below, notice how your input is auto
corrected and also the auto completion on the state field.
</span>
<span>Name And Address</span>
</div>
<div class="formAnswer">
<label class="firstLabel" for="name">Name *</label>
<input type="text" id="name" name="name" class="medium"
dojoType="dijit.form.ValidationTextBox"
required="true"
ucfirst="true" invalidMessage=""/>
<br>
 
<label class="firstLabel" for="address">Address *</label>
<input type="text" id="address" name="address" class="long"
dojoType="dijit.form.ValidationTextBox"
required="true"
trim="true"
ucfirst="true" />
<br>
 
<label class="firstLabel" for="city">City *</label>
<select dojoType="dijit.form.ComboBox"
value=""
autocomplete="true"
hasDownArrow="false"
>
<option></option>
<option>Chicago</option>
<option>Los Angeles</option>
<option>New York</option>
<option>San Francisco</option>
<option>Seattle</option>
</select>
 
<label class="secondLabel" for="state">State</label>
<input dojoType="dijit.form.FilteringSelect"
store="stateStore" class="short" id="state" name="state" />
 
<label class="secondLabel" for="zip">Zip *</label>
<input type="text" id="zip" name="zip" class="medium"
dojoType="dijit.form.ValidationTextBox"
trim="true"
required="true"
regExp="[0-9][0-9][0-9][0-9][0-9]"
invalidMessage="5 digit zipcode (ex: 23245)"/>
<br>
 
<label class="firstLabel" for="dob">DOB *</label>
<input id="dob" name="dateOfBirth" dojoType="dijit.form.DateTextBox" required=true/>
</div>
 
<div class="formQuestion">
<span class="noticeMessage">Custom checkboxes and radio buttons...</span>
<span>Desired position</span>
</div>
<div class="formAnswer">
<label class="firstLabel" for="position">Position</label>
<fieldset id="position" class="dijitInline">
<input type="checkBox" name="position" id="it" value="it" dojoType="dijit.form.CheckBox" /> <label for="it">IT</label>
<input type="checkBox" name="position" id="marketing" value="marketing" dojoType="dijit.form.CheckBox" /> <label for="marketing">Marketing</label>
<input type="checkBox" name="position" id="business" value="business" dojoType="dijit.form.CheckBox" /> <label for="business" style="margin-right: 7em;">Business</label>
</fieldset>
 
<label class="secondLabel" for="hours">Hours</label>
<fieldset id="hours" class="dijitInline">
<input type="radio" name="hours" id="full" value="full" dojoType="dijit.form.RadioButton" /> <label for="full">Full time</label>
<input type="radio" name="hours" id="part" value="part" dojoType="dijit.form.RadioButton" /> <label for="part">Part time</label>
</fieldset>
</div>
 
<div class="formQuestion">
<span class="noticeMessage">slider and spinner ...</span>
<span>Education and Experience</span>
</div>
<div class="formAnswer">
<table class="dijitReset">
<tr>
<td>
<label class="firstLabel" for="school">Education level</label>
</td>
<td style="padding-left: 2em;">
<span dojoType="dijit.form.HorizontalSlider" id="school" name="school"
minimum="1"
value="2"
maximum="4"
discreteValues="4"
showButtons="false"
style="width:200px; height: 40px;"
>
<span dojoType="dijit.form.HorizontalRule" container="bottomDecoration" count=4 style="height:5px;"></span>
<ol dojoType="dijit.form.HorizontalRuleLabels" container="bottomDecoration"style="height:1em;font-size:75%;color:gray;">
<li>high school</li>
<li>college</li>
<li>masters</li>
<li>PhD</li>
</ol>
</span>
</td>
<td>
<label class="secondLabel" for="experience">Work experience (years, 0-40)</label>
</td>
<td>
<input dojoType="dijit.form.NumberSpinner"
id="experience" name="experience"
value="1"
constraints="{min: 0, max:40, places:0}"
size=3>
</td>
</tr>
</table>
</div>
 
<div class="formQuestion">
<span class="noticeMessage">Rich text editor that expands as you type in text</span>
<label for="description">Self description</label>
</div>
<div class="formAnswer">
<textarea dojoType="dijit.Editor" minHeight="5em" id="description" name="description">
Write a brief summary of &lt;i&gt;your&lt;/i&gt; job skills... using &lt;b&gt;rich&lt;/b&gt; text.
</textarea>
</div>
<div class="formQuestion">
<span class="noticeMessage">Text area that expands as you type in text</span>
<label for="references">References</label>
</div>
<div class="formAnswer">
<textarea dojoType="dijit.form.Textarea" id="references" name="references">
Write your references here (plain text)
</textarea>
</div>
 
<center>
<button dojoType="dijit.form.Button" iconClass="dijitEditorIcon dijitEditorIconSave" type=submit>
OK
</button>
</center>
</form>
</body>
</html>
 
/trunk/api/js/dojo1.0/dijit/demos/nihao/nls/zh/helloworld.js
New file
0,0 → 1,0
({"localeSelect": "区域:", "contentStr": "你好Dojo全球化! 今天是${0}。", "dateSelect": "选择一个日期:", "dateStr": "距离现在还有${0}秒。"})
/trunk/api/js/dojo1.0/dijit/demos/nihao/nls/en/helloworld.js
New file
0,0 → 1,0
({"localeSelect": "Locale:", "contentStr": "Hello Dojo Globalization! Today is ${0}.", "dateSelect": "Select a date:", "dateStr": "${0} seconds to go from now."})
/trunk/api/js/dojo1.0/dijit/demos/nihao/nls/helloworld.js
New file
0,0 → 1,0
({"localeSelect": "Locale:", "contentStr": "Hello Dojo Globalization! Today is ${0}.", "dateSelect": "Select a date:", "dateStr": "${0} seconds to go from now."})
/trunk/api/js/dojo1.0/dijit/demos/nihao/nls/fr/helloworld.js
New file
0,0 → 1,0
({"localeSelect": "Lieu :", "contentStr": "Bonjour globalisation de Dojo! Aujourd'hui est ${0}.", "dateSelect": "Choisir une date :", "dateStr": "${0} secondes à aller dès maintenant."})
/trunk/api/js/dojo1.0/dijit/demos/chat/operator.html
New file
0,0 → 1,83
<html>
<head>
<title>Cometd chat / Operator Page</title>
<script type="text/javascript" src="../../../dojo/dojo.js" djConfig="isDebug:true, parseOnLoad:false"></script>
<script type="text/javascript" src="room.js"></script>
<script type="text/javascript">
dojo.require("dijit.layout.TabContainer");
dojo.require("dijit.layout.ContentPane");
dojo.require("dojo.parser");
var control = {
_chats: {},
_getAlert: function(e){
console.log(e);
if (!this._chats[(e.data.user)] && (operator != e.data.user)){
dojox.cometd.subscribe("/chat/demo/"+e.data.joined,this,"_privateChat");
var tabNode = document.createElement('div');
tabNode.id = "chatWith" + e.data.user;
var chatNode = document.createElement('div');
chatNode.id = e.data.user + "Widget";
tabNode.appendChild(chatNode);
var newTab = new dijit.layout.ContentPane({
title: e.data.user,
closable: true
},tabNode);
dijit.byId('tabView').addChild(newTab);
var chat = new dijit.demos.chat.Room({
roomId: e.data.joined,
registeredAs: operator
},chatNode);
chat.startup();
this._chats[(e.data.user)]=true;
}
},
 
_privateChat: function(e){
var thisChat = dijit.byId(e.data.user+"Widget") || false;
if (thisChat) { /* thisChat._chat(e); */}
}
};
 
dojo.addOnLoad(function(){
dojo.parser.parse(dojo.body());
dojox.cometd.init("http://comet.sitepen.com:9000/cometd");
dojox.cometd.subscribe("/chat/demo",control,"_getAlert");
 
});
 
var operator;
function registerOperator(){
operator = dojo.byId('opName').value;
dojo.byId('login').style.display = "none";
dojo.byId('status').innerHTML = "You are: <b>"+operator+"</b>";
}
 
</script>
<style type="text/css">
@import "chat.css";
@import "../../tests/css/dijitTests.css";
@import "../../themes/tundra/tundra.css";
#status { position:absolute; top:5px; right:25px; }
</style>
</head>
<body class="tundra">
 
<h1 class="testTitle">Tech Support Operator Page:</h1>
 
<div id="tabView" dojoType="dijit.layout.TabContainer" style="width:100%; height:75%; ">
 
<div dojoType="dijit.layout.ContentPane" title="Home" style="padding:8px;" >
<h3>Welcome Operator</h3>
<p>It is your job to respond to incoming Support Requests. Sit here, and watch the screen.</p>
<p id="login">Please Login as an operator:
<br><br>
Name: <input type="text" name="username" id="opName" value="" /> <input type="submit" value="login" onclick="registerOperator()"/>
</p>
</div><!-- home tab -->
 
</div><!-- tabContainer -->
<div id="status"></div>
</body>
</html>
/trunk/api/js/dojo1.0/dijit/demos/chat/client.html
New file
0,0 → 1,65
<html>
<head>
<title>Sample built in tech-support demonstration | The Dojo Toolkit </title>
<script type="text/javascript" src="../../../dojo/dojo.js" djConfig="isDebug:true, parseOnLoad:false"></script>
<script type="text/javascript" src="room.js"></script>
<script type="text/javascript">
dojo.require("dijit.TitlePane");
dojo.require("dojo.parser");
dojo.require("dijit.form.Button");
 
// this puts our help box in the top/right corner on scroll and show
function _positionIt(evt){
if (helpNode.domNode.style.display == "block"){
dojo.style(helpNode.domNode,"top",(dijit.getViewport().t + 4) + "px");
}
}
 
var helpNode;
dojo.addOnLoad(function(){
dojo.parser.parse(dojo.body());
helpNode = dijit.byId('helpPane');
dojo.connect(window,"onscroll","_positionIt");
// this is not a public cometd server :)
dojox.cometd.init("http://comet.sitepen.com:9000/cometd");
});
 
</script>
<style type="text/css">
@import "chat.css";
@import "../../themes/tundra/tundra.css";
@import "../../tests/css/dijitTests.css";
</style>
</head>
<body class="tundra">
 
<h1 class="testTitle">I am a <i>Sample</i> page</h1>
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Nam facilisis enim. Pellentesque in elit et lacus euismod dignissim. Aliquam dolor pede, convallis eget, dictum a, blandit ac, urna. Pellentesque sed nunc ut justo volutpat egestas. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. In erat. Suspendisse potenti. Fusce faucibus nibh sed nisi. Phasellus faucibus, dui a cursus dapibus, mauris nulla euismod velit, a lobortis turpis arcu vel dui. Pellentesque fermentum ultrices pede. Donec auctor lectus eu arcu. Curabitur non orci eget est porta gravida. Aliquam pretium orci id nisi. Duis faucibus, mi non adipiscing venenatis, erat urna aliquet elit, eu fringilla lacus tellus quis erat. Nam tempus ornare lorem. Nullam feugiat.</p>
 
<h3>Need help?</h3>
<button dojoType="dijit.form.Button">
Show / Hide Tech Support Chat
<script type="dojo/method" event="onClick">
// simple dojo/method example. this is like doing button onClick="javascript:" but more robust
var anim = dojo[(helpNode.open ? "fadeOut" : "fadeIn")]({ node: helpNode.domNode, duration: 400 });
dojo.connect(anim,(helpNode.open ? "onEnd" : "beforeBegin"),function(){
dojo.style(helpNode.domNode,"display",(helpNode.open ? "none" : "block"));
helpNode.toggle();
_positionIt();
});
anim.play();
</script>
</button>
 
 
<p>Sed congue. Aenean blandit sollicitudin mi. Maecenas pellentesque. Vivamus ac urna. Nunc consequat nisi vitae quam. Suspendisse sed nunc. Proin suscipit porta magna. Duis accumsan nunc in velit. Nam et nibh. Nulla facilisi. Cras venenatis urna et magna. Aenean magna mauris, bibendum sit amet, semper quis, aliquet nec, sapien. Aliquam aliquam odio quis erat. Etiam est nisi, condimentum non, lacinia ac, vehicula laoreet, elit. Sed interdum augue sit amet quam dapibus semper. Nulla facilisi. Pellentesque lobortis erat nec quam.</p>
<p>Sed arcu magna, molestie at, fringilla in, sodales eu, elit. Curabitur mattis lorem et est. Quisque et tortor. Integer bibendum vulputate odio. Nam nec ipsum. Vestibulum mollis eros feugiat augue. Integer fermentum odio lobortis odio. Nullam mollis nisl non metus. Maecenas nec nunc eget pede ultrices blandit. Ut non purus ut elit convallis eleifend. Fusce tincidunt, justo quis tempus euismod, magna nulla viverra libero, sit amet lacinia odio diam id risus. Ut varius viverra turpis. Morbi urna elit, imperdiet eu, porta ac, pharetra sed, nisi. Etiam ante libero, ultrices ac, faucibus ac, cursus sodales, nisl. Praesent nisl sem, fermentum eu, consequat quis, varius interdum, nulla. Donec neque tortor, sollicitudin sed, consequat nec, facilisis sit amet, orci. Aenean ut eros sit amet ante pharetra interdum.</p>
<p>Fusce rutrum pede eget quam. Praesent purus. Aenean at elit in sem volutpat facilisis. Nunc est augue, commodo at, pretium a, fermentum at, quam. Nam sit amet enim. Suspendisse potenti. Cras hendrerit rhoncus justo. Integer libero. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aliquam erat volutpat. Sed adipiscing mi vel ipsum.</p>
 
<div title="Chat with Technical Support:" id="helpPane" dojoType="dijit.TitlePane"
style="width:275px; height:400px; position:absolute; top:4px; right:4px; margin:0; padding:0; display:none;" open="false" >
<div dojoType="dijit.demos.chat.Room" id="chatroom" isPrivate="true"></div>
</div>
 
</body>
</html>
/trunk/api/js/dojo1.0/dijit/demos/chat/chat.css
New file
0,0 → 1,46
.chatroom
{
position:relative;
height:240px;
background-color: #e0e0e0;
border: 0px solid black;
}
 
.chat
{
height: 200px;
overflow: auto;
background-color: #fff;
padding: 4px;
border: 0px solid black;
}
.dijitTabContainer .chat {
height:auto;
}
 
.input {
position:absolute;
bottom:0px;
display:block;
padding: 4px;
border: 0px solid black;
border-top: 1px solid black;
}
 
.phrase
{
width:200px;
background-color:#ededed;
}
 
.username
{
width:145px;
background-color: #ededed;
}
 
.hidden { display: none; }
.from { font-weight: bold; }
.alert { font-style: italic; }
.dijitTitlePaneContentInner { padding:0px !important; }
 
/trunk/api/js/dojo1.0/dijit/demos/chat/community.html
New file
0,0 → 1,112
<html>
<head>
<title>Cometd chat / Operator Page</title>
<script type="text/javascript" src="../../../dojo/dojo.js" djConfig="isDebug:true, parseOnLoad:false"></script>
<script type="text/javascript" src="../../../dijit/tests/_testCommon.js"></script>
<script type="text/javascript" src="room.js"></script>
<script type="text/javascript">
dojo.require("dijit.Dialog");
dojo.require("dijit.layout.SplitContainer");
dojo.require("dijit.layout.LayoutContainer");
dojo.require("dijit.layout.TabContainer");
dojo.require("dijit.layout.ContentPane");
dojo.require("dijit.form.Button");
 
// custom widget created for this demo:
dojo.require("dojox.widget.SortList");
dojo.require("dojo.parser");
 
// not for production use?
//dojox.cometd.init("http://comet.sitepen.com:9000/cometd");
 
var control = {
_chats: [],
_getAlert: function(e){
console.log(e);
if (!this._chats[(e.data.user)] && (operator != e.data.user)){
dojox.cometd.subscribe("/chat/demo/"+e.data.joined,this,"_privateChat");
var tabNode = document.createElement('div');
tabNode.id = "chatWith" + e.data.user;
var chatNode = document.createElement('div');
chatNode.id = e.data.user + "Widget";
tabNode.appendChild(chatNode);
var newTab = new dijit.layout.ContentPane({
title: e.data.user,
closable: true
},tabNode);
dijit.byId('tabView').addChild(newTab);
var chat = new dijit.demos.chat.Room({
roomId: e.data.joined,
registeredAs: operator
},chatNode);
chat.startup();
this._chats[(e.data.user)]=true;
}
},
 
_privateChat: function(e){
var thisChat = dijit.byId(e.data.user+"Widget") || false;
if (thisChat) { thisChat._chat(e); }
}
};
 
function registerOperator(){
dijit.byId('loginDialog').hide();
 
}
 
dojo.addOnLoad(function(){
dojo.parser.parse(dojo.body());
// dojox.cometd.subscribe("/chat/demo/poundDojo",control,"_getAlert");
var widget = dijit.byId('userList');
for (var i = 0; i<50; i++){
var node = document.createElement('li');
node.innerHTML = i+": list item sample";
widget.containerNode.appendChild(node);
}
widget.onSort();
});
</script>
<style type="text/css">
@import "chat.css";
@import "../../tests/css/dijitTests.css";
@import "../../themes/tundra/tundra.css";
@import "../../../dojox/widget/SortList/SortList.css";
 
html, body { margin:0; padding:0; height:100%; width:100%; overflow:hidden; }
 
#status { position:absolute; top:5px; right:25px; }
#mainPane { background:#fff; }
</style>
</head>
<body>
<div dojoType="dijit.layout.LayoutContainer" style="width:100%; height:100%;">
<div dojoType="dijit.layout.SplitContainer" orientation="vertical" style="height:100%" layoutAlign="client" sizerWidth="7">
<div dojoType="dijit.layout.SplitContainer" orientation="horizontal" sizerWidth="7" activeSizing="true" layoutAlign="top" sizeShare="80">
<div id="mainPane" dojoType="dijit.layout.ContentPane" title="Home" style="padding:8px;" sizeShare="80" layoutAlign="left" style="background:#fff;">
<h3>Dojo community chat demo</h3>
<h2>NON-WORKING PROTOTYPE</h2>
 
<button dojoType="dijit.form.Button">Login
<script type="dojo/method" event="onClick">
console.log('foo?');
dijit.byId('loginDialog').show();
</script>
</button>
 
</div>
<div title="Users in #dojo" id="userList" dojoType="dojox.widget.SortList" sizeShare="20" sizeMin="15" layoutAlign="right"></div>
</div>
<div dojoType="dijit.layout.ContentPane" sizeShare="20" layoutAlign="bottom">
bottom. (input area)
</div>
</div>
</div>
<div dojoType="dijit.Dialog" id="loginDialog" title="Select Username:">
Name: <input type="text" name="username" id="opName" value="" />
<input type="submit" value="login" onclick="registerOperator()"/>
</div>
</body>
</html>
/trunk/api/js/dojo1.0/dijit/demos/chat/room.js
New file
0,0 → 1,127
if(!dojo._hasResource["dijit.demos.chat.room"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.demos.chat.room"] = true;
dojo.provide("dijit.demos.chat.room");
 
dojo.require("dojox.cometd");
dojo.require("dijit._Widget");
dojo.require("dijit._Templated");
 
dojo.declare("dijit.demos.chat.Room",
[dijit._Widget,dijit._Templated],
{
 
_last: "",
_username: null,
roomId: "public",
isPrivate: false,
prompt: "Name:",
 
templateString: '<div id="${id}" class="chatroom">'
+'<div dojoAttachPoint="chatNode" class="chat"></div>'
+'<div dojoAttachPoint="input" class="input">'
+'<div dojoAttachPoint="joining">'
+'<span>${prompt}</span><input class="username" dojoAttachPoint="username" type="text" dojoAttachEvent="onkeyup: _join"> <input dojoAttachPoint="joinB" class="button" type="submit" name="join" value="Contact" dojoAttachEvent="onclick: _join"/>'
+'</div>'
+'<div dojoAttachPoint="joined" class="hidden">'
+'<input type="text" class="phrase" dojoAttachPoint="phrase" dojoAttachEvent="onkeyup: _cleanInput" />'
+'<input type="submit" class="button" value="Send" dojoAttachPoint="sendB" dojoAttachEvent="onclick: _sendPhrase"/>'
+'</div>'
+'</div>'
+'</div>',
 
join: function(name){
if(name == null || name.length==0){
alert('Please enter a username!');
}else{
if(this.isPrivate){ this.roomId = name; }
this._username=name;
this.joining.className='hidden';
this.joined.className='';
this.phrase.focus();
console.log(this.roomId);
dojox.cometd.subscribe("/chat/demo/" + this.roomId, this, "_chat");
dojox.cometd.publish("/chat/demo/" + this.roomId, { user: this._username, join: true, chat : this._username+" has joined the room."});
dojox.cometd.publish("/chat/demo", { user: this._username, joined: this.roomId });
}
},
 
_join: function(/* Event */e){
var key = (e.charCode == dojo.keys.SPACE ? dojo.keys.SPACE : e.keyCode);
if (key == dojo.keys.ENTER || e.type=="click"){
this.join(this.username.value);
}
},
 
leave: function(){
dojox.cometd.unsubscribe("/chat/demo/" + this.roomId, this, "_chat");
dojox.cometd.publish("/chat/demo/" + this.roomId, { user: this._username, leave: true, chat : this._username+" has left the chat."});
 
// switch the input form back to login mode
this.joining.className='';
this.joined.className='hidden';
this.username.focus();
this._username=null;
},
chat: function(text){
// summary: publish a text message to the room
if(text != null && text.length>0){
// lame attempt to prevent markup
text=text.replace(/</g,'&lt;');
text=text.replace(/>/g,'&gt;');
dojox.cometd.publish("/chat/demo/" + this.roomId, { user: this._username, chat: text});
}
},
 
_chat: function(message){
// summary: process an incoming message
if (!message.data){
console.warn("bad message format "+message);
return;
}
var from=message.data.user;
var special=message.data.join || message.data.leave;
var text=message.data.chat;
if(text!=null){
if(!special && from == this._last ){ from="...";
}else{
this._last=from;
from+=":";
}
 
if(special){
this.chatNode.innerHTML += "<span class=\"alert\"><span class=\"from\">"+from+"&nbsp;</span><span class=\"text\">"+text+"</span></span><br/>";
this._last="";
}else{
this.chatNode.innerHTML += "<span class=\"from\">"+from+"&nbsp;</span><span class=\"text\">"+text+"</span><br/>";
this.chatNode.scrollTop = this.chatNode.scrollHeight - this.chatNode.clientHeight;
}
}
},
 
startup: function(){
this.joining.className='';
this.joined.className='hidden';
//this.username.focus();
this.username.setAttribute("autocomplete","OFF");
if (this.registeredAs) { this.join(this.registeredAs); }
this.inherited("startup",arguments);
},
 
_cleanInput: function(/* Event */e){
var key = (e.charCode == dojo.keys.SPACE ? dojo.keys.SPACE : e.keyCode);
if(key == dojo.keys.ENTER || key == 13){
this.chat(this.phrase.value);
this.phrase.value='';
}
},
 
_sendPhrase: function(/* Event */e){
if (this.phrase.value){
this.chat(this.phrase.value);
this.phrase.value='';
}
}
});
 
}
/trunk/api/js/dojo1.0/dijit/demos/i18n/sprite.html
New file
0,0 → 1,2319
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript" src="../../../dojo/dojo.js"
djConfig="isDebug: true, parseOnLoad: true"></script>
<script>
dojo.require("dijit.layout.ContentPane");
</script>
<style>
img { padding: 0; border: 0; margin: 0; }
</style>
<script>
 
function t(node){ return node.innerText || node.textContent; };
 
var languages, langCountryMap, continents, countries;
 
function generate(){
// Generate country items
countries = dojo.query("tr", "source").
filter(function(row){ return dojo.query("img", row).length; } ).
map(function(row){
var iso = t(dojo.query("td", row)[3]),
a = dojo.query("td:nth-child(1) a:nth-child(2)", row)[0],
name = t(a);
var country = {
type: "country",
iso: iso,
name: name,
href: "http://en.wikipedia.org/wiki" + a.href.replace(/.*\/wiki/, "")
};
return country;
});
 
// make sprite
var sprite = dojo.byId("sprite");
dojo.query("img", "source").forEach(function(img, idx, ary){
img = img.cloneNode(true);
sprite.appendChild(img);
if(idx%20==19){
sprite.appendChild(document.createElement("br"));
}
});
 
// generate css rules
var css = dojo.byId("css");
var val = "";
dojo.query("img", "sprite").forEach(function(img, idx, ary){
var style=dojo.coords(img);
val += [
".country" + countries[idx].iso + "Icon {",
" background-position: " + -1*style.l + "px " + -1*style.t + "px;",
" width: " + img.width + "px;",
" height: " + img.height + "px;",
"}"].join("\n") + "\n";
});
css.value = ".countryIcon {\n\tbackground-image: url('flags.png');\n}\n\n" + val;
}
</script>
</head>
<body>
<h1>Flag Sprite/CSS Generator</h1>
<button onclick="generate();">generate</button>
 
<h1>Sprite</h1>
<div style="border: 1px solid black; padding: 10px;">
<div style="position:relative" id="sprite"></div>
</div>
 
<h1>CSS</h1>
<textarea id="css" cols=100 rows=20>push generate to fill in</textarea>
 
 
<h1>Country names, flags, and ISO code</h1>
<p>data taken from <a href="http://en.wikipedia.org/wiki/ISO_3166-1">wikipedia ISO 3166-1 site</a></p>
<table id="source" style="height: 300px; overflow: auto;">
<tbody>
 
<tr>
<th width="300">Official country names used by the ISO 3166/MA</th>
<th><a href="/wiki/ISO_3166-1_numeric" title="ISO 3166-1 numeric">Numeric</a></th>
<th><a href="/wiki/ISO_3166-1_alpha-3" title="ISO 3166-1 alpha-3">Alpha-3</a></th>
<th><a href="/wiki/ISO_3166-1_alpha-2" title="ISO 3166-1 alpha-2">Alpha-2</a></th>
<th>Local ISO codes</th>
</tr>
 
<tr>
<td><a href="/wiki/Image:Flag_of_Afghanistan.svg" class="image" title="Flag of Afghanistan"><img alt="Flag of Afghanistan" longdesc="/wiki/Image:Flag_of_Afghanistan.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Flag_of_Afghanistan.svg/22px-Flag_of_Afghanistan.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Afghanistan" title="Afghanistan">Afghanistan</a></td>
<td>004</td>
 
<td>AFG</td>
<td id="AF">AF</td>
<td><a href="/wiki/ISO_3166-2:AF" title="ISO 3166-2:AF">ISO 3166-2:AF</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Aaland.svg" class="image" title="Flag of Åland"><img alt="Flag of Åland" longdesc="/wiki/Image:Flag_of_Aaland.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/4/40/Flag_of_Aaland.svg/22px-Flag_of_Aaland.svg.png" height="14" width="22"></a>&nbsp;<a href="/wiki/%C3%85land" title="Åland">Åland Islands</a></td>
<td>248</td>
<td>ALA</td>
<td id="AX">AX</td>
<td><a href="/w/index.php?title=ISO_3166-2:AX&amp;action=edit" class="new" title="ISO 3166-2:AX">ISO 3166-2:AX</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Albania.svg" class="image" title="Flag of Albania"><img alt="Flag of Albania" longdesc="/wiki/Image:Flag_of_Albania.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/3/36/Flag_of_Albania.svg/22px-Flag_of_Albania.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Albania" title="Albania">Albania</a></td>
<td>008</td>
<td>ALB</td>
<td id="AL">AL</td>
<td><a href="/wiki/ISO_3166-2:AL" title="ISO 3166-2:AL">ISO 3166-2:AL</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Algeria.svg" class="image" title="Flag of Algeria"><img alt="Flag of Algeria" longdesc="/wiki/Image:Flag_of_Algeria.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/7/77/Flag_of_Algeria.svg/22px-Flag_of_Algeria.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Algeria" title="Algeria">Algeria</a></td>
<td>012</td>
 
<td>DZA</td>
<td id="DZ">DZ</td>
<td><a href="/wiki/ISO_3166-2:DZ" title="ISO 3166-2:DZ">ISO 3166-2:DZ</a></td>
</tr>
 
<tr>
<td><a href="/wiki/Image:Flag_of_American_Samoa.svg" class="image" title="Flag of American Samoa"><img alt="Flag of American Samoa" longdesc="/wiki/Image:Flag_of_American_Samoa.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/8/87/Flag_of_American_Samoa.svg/22px-Flag_of_American_Samoa.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/American_Samoa" title="American Samoa">American Samoa</a></td>
<td>016</td>
<td>ASM</td>
<td id="AS">AS</td>
<td><a href="/w/index.php?title=ISO_3166-2:AS&amp;action=edit" class="new" title="ISO 3166-2:AS">ISO 3166-2:AS</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Andorra.svg" class="image" title="Flag of Andorra"><img alt="Flag of Andorra" longdesc="/wiki/Image:Flag_of_Andorra.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/1/19/Flag_of_Andorra.svg/22px-Flag_of_Andorra.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Andorra" title="Andorra">Andorra</a></td>
<td>020</td>
<td>AND</td>
<td id="AD">AD</td>
<td><a href="/wiki/ISO_3166-2:AD" title="ISO 3166-2:AD">ISO 3166-2:AD</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Angola.svg" class="image" title="Flag of Angola"><img alt="Flag of Angola" longdesc="/wiki/Image:Flag_of_Angola.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/9/9d/Flag_of_Angola.svg/22px-Flag_of_Angola.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Angola" title="Angola">Angola</a></td>
<td>024</td>
 
<td>AGO</td>
<td id="AO">AO</td>
<td><a href="/wiki/ISO_3166-2:AO" title="ISO 3166-2:AO">ISO 3166-2:AO</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Anguilla.svg" class="image" title="Flag of Anguilla"><img alt="Flag of Anguilla" longdesc="/wiki/Image:Flag_of_Anguilla.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/b/b4/Flag_of_Anguilla.svg/22px-Flag_of_Anguilla.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/Anguilla" title="Anguilla">Anguilla</a></td>
<td>660</td>
<td>AIA</td>
<td id="AI">AI</td>
<td><a href="/w/index.php?title=ISO_3166-2:AI&amp;action=edit" class="new" title="ISO 3166-2:AI">ISO 3166-2:AI</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Antarctica.svg" class="image" title="Flag of Antarctica"><img alt="Flag of Antarctica" longdesc="/wiki/Image:Flag_of_Antarctica.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/f/fa/Flag_of_Antarctica.svg/22px-Flag_of_Antarctica.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Antarctica" title="Antarctica">Antarctica</a></td>
<td>010</td>
<td>ATA</td>
<td id="AQ">AQ</td>
<td><a href="/w/index.php?title=ISO_3166-2:AQ&amp;action=edit" class="new" title="ISO 3166-2:AQ">ISO 3166-2:AQ</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Antigua_and_Barbuda.svg" class="image" title="Flag of Antigua and Barbuda"><img alt="Flag of Antigua and Barbuda" longdesc="/wiki/Image:Flag_of_Antigua_and_Barbuda.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/8/89/Flag_of_Antigua_and_Barbuda.svg/22px-Flag_of_Antigua_and_Barbuda.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Antigua_and_Barbuda" title="Antigua and Barbuda">Antigua and Barbuda</a></td>
<td>028</td>
 
<td>ATG</td>
<td id="AG">AG</td>
<td><a href="/wiki/ISO_3166-2:AG" title="ISO 3166-2:AG">ISO 3166-2:AG</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Argentina.svg" class="image" title="Flag of Argentina"><img alt="Flag of Argentina" longdesc="/wiki/Image:Flag_of_Argentina.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/1/1a/Flag_of_Argentina.svg/22px-Flag_of_Argentina.svg.png" height="14" width="22"></a>&nbsp;<a href="/wiki/Argentina" title="Argentina">Argentina</a></td>
<td>032</td>
<td>ARG</td>
<td id="AR">AR</td>
<td><a href="/wiki/ISO_3166-2:AR" title="ISO 3166-2:AR">ISO 3166-2:AR</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Armenia.svg" class="image" title="Flag of Armenia"><img alt="Flag of Armenia" longdesc="/wiki/Image:Flag_of_Armenia.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/2/2f/Flag_of_Armenia.svg/22px-Flag_of_Armenia.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/Armenia" title="Armenia">Armenia</a></td>
<td>051</td>
<td>ARM</td>
<td id="AM">AM</td>
<td><a href="/w/index.php?title=ISO_3166-2:AM&amp;action=edit" class="new" title="ISO 3166-2:AM">ISO 3166-2:AM</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Aruba.svg" class="image" title="Flag of Aruba"><img alt="Flag of Aruba" longdesc="/wiki/Image:Flag_of_Aruba.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/f/f6/Flag_of_Aruba.svg/22px-Flag_of_Aruba.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Aruba" title="Aruba">Aruba</a></td>
<td>533</td>
 
<td>ABW</td>
<td id="AW">AW</td>
<td><a href="/w/index.php?title=ISO_3166-2:AW&amp;action=edit" class="new" title="ISO 3166-2:AW">ISO 3166-2:AW</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Australia.svg" class="image" title="Flag of Australia"><img alt="Flag of Australia" longdesc="/wiki/Image:Flag_of_Australia.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/b/b9/Flag_of_Australia.svg/22px-Flag_of_Australia.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/Australia" title="Australia">Australia</a></td>
<td>036</td>
<td>AUS</td>
<td id="AU">AU</td>
<td><a href="/wiki/ISO_3166-2:AU" title="ISO 3166-2:AU">ISO 3166-2:AU</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Austria.svg" class="image" title="Flag of Austria"><img alt="Flag of Austria" longdesc="/wiki/Image:Flag_of_Austria.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/4/41/Flag_of_Austria.svg/22px-Flag_of_Austria.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Austria" title="Austria">Austria</a></td>
<td>040</td>
<td>AUT</td>
<td id="AT">AT</td>
<td><a href="/wiki/ISO_3166-2:AT" title="ISO 3166-2:AT">ISO 3166-2:AT</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Azerbaijan.svg" class="image" title="Flag of Azerbaijan"><img alt="Flag of Azerbaijan" longdesc="/wiki/Image:Flag_of_Azerbaijan.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Flag_of_Azerbaijan.svg/22px-Flag_of_Azerbaijan.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/Azerbaijan" title="Azerbaijan">Azerbaijan</a></td>
<td>031</td>
 
<td>AZE</td>
<td id="AZ">AZ</td>
<td><a href="/wiki/ISO_3166-2:AZ" title="ISO 3166-2:AZ">ISO 3166-2:AZ</a></td>
</tr>
<tr bgcolor="lightgray">
<td colspan="5"></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_the_Bahamas.svg" class="image" title="Flag of the Bahamas"><img alt="Flag of the Bahamas" longdesc="/wiki/Image:Flag_of_the_Bahamas.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/9/93/Flag_of_the_Bahamas.svg/22px-Flag_of_the_Bahamas.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/The_Bahamas" title="The Bahamas">Bahamas</a></td>
<td>044</td>
<td>BHS</td>
 
<td id="BS">BS</td>
<td><a href="/w/index.php?title=ISO_3166-2:BS&amp;action=edit" class="new" title="ISO 3166-2:BS">ISO 3166-2:BS</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Bahrain.svg" class="image" title="Flag of Bahrain"><img alt="Flag of Bahrain" longdesc="/wiki/Image:Flag_of_Bahrain.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/2/2c/Flag_of_Bahrain.svg/22px-Flag_of_Bahrain.svg.png" height="13" width="22"></a>&nbsp;<a href="/wiki/Bahrain" title="Bahrain">Bahrain</a></td>
<td>048</td>
<td>BHR</td>
<td id="BH">BH</td>
<td><a href="/wiki/ISO_3166-2:BH" title="ISO 3166-2:BH">ISO 3166-2:BH</a></td>
</tr>
 
<tr>
<td><a href="/wiki/Image:Flag_of_Bangladesh.svg" class="image" title="Flag of Bangladesh"><img alt="Flag of Bangladesh" longdesc="/wiki/Image:Flag_of_Bangladesh.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/f/f9/Flag_of_Bangladesh.svg/22px-Flag_of_Bangladesh.svg.png" height="13" width="22"></a>&nbsp;<a href="/wiki/Bangladesh" title="Bangladesh">Bangladesh</a></td>
<td>050</td>
<td>BGD</td>
<td id="BD">BD</td>
<td><a href="/wiki/ISO_3166-2:BD" title="ISO 3166-2:BD">ISO 3166-2:BD</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Barbados.svg" class="image" title="Flag of Barbados"><img alt="Flag of Barbados" longdesc="/wiki/Image:Flag_of_Barbados.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/e/ef/Flag_of_Barbados.svg/22px-Flag_of_Barbados.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Barbados" title="Barbados">Barbados</a></td>
<td>052</td>
 
<td>BRB</td>
<td id="BB">BB</td>
<td><a href="/wiki/ISO_3166-2:BB" title="ISO 3166-2:BB">ISO 3166-2:BB</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Belarus.svg" class="image" title="Flag of Belarus"><img alt="Flag of Belarus" longdesc="/wiki/Image:Flag_of_Belarus.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/8/85/Flag_of_Belarus.svg/22px-Flag_of_Belarus.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/Belarus" title="Belarus">Belarus</a></td>
<td>112</td>
<td>BLR</td>
<td id="BY">BY</td>
<td><a href="/wiki/ISO_3166-2:BY" title="ISO 3166-2:BY">ISO 3166-2:BY</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Belgium_%28civil%29.svg" class="image" title="Flag of Belgium"><img alt="Flag of Belgium" longdesc="/wiki/Image:Flag_of_Belgium_%28civil%29.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/9/92/Flag_of_Belgium_%28civil%29.svg/22px-Flag_of_Belgium_%28civil%29.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Belgium" title="Belgium">Belgium</a></td>
<td>056</td>
<td>BEL</td>
<td id="BE">BE</td>
<td><a href="/wiki/ISO_3166-2:BE" title="ISO 3166-2:BE">ISO 3166-2:BE</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Belize.svg" class="image" title="Flag of Belize"><img alt="Flag of Belize" longdesc="/wiki/Image:Flag_of_Belize.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/e/e7/Flag_of_Belize.svg/22px-Flag_of_Belize.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Belize" title="Belize">Belize</a></td>
<td>084</td>
 
<td>BLZ</td>
<td id="BZ">BZ</td>
<td><a href="/w/index.php?title=ISO_3166-2:BZ&amp;action=edit" class="new" title="ISO 3166-2:BZ">ISO 3166-2:BZ</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Benin.svg" class="image" title="Flag of Benin"><img alt="Flag of Benin" longdesc="/wiki/Image:Flag_of_Benin.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/0/0a/Flag_of_Benin.svg/22px-Flag_of_Benin.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Benin" title="Benin">Benin</a></td>
<td>204</td>
<td>BEN</td>
<td id="BJ">BJ</td>
<td><a href="/wiki/ISO_3166-2:BJ" title="ISO 3166-2:BJ">ISO 3166-2:BJ</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Bermuda.svg" class="image" title="Flag of Bermuda"><img alt="Flag of Bermuda" longdesc="/wiki/Image:Flag_of_Bermuda.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/b/bf/Flag_of_Bermuda.svg/22px-Flag_of_Bermuda.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/Bermuda" title="Bermuda">Bermuda</a></td>
<td>060</td>
<td>BMU</td>
<td id="BM">BM</td>
<td><a href="/w/index.php?title=ISO_3166-2:BM&amp;action=edit" class="new" title="ISO 3166-2:BM">ISO 3166-2:BM</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Bhutan.svg" class="image" title="Flag of Bhutan"><img alt="Flag of Bhutan" longdesc="/wiki/Image:Flag_of_Bhutan.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/9/91/Flag_of_Bhutan.svg/22px-Flag_of_Bhutan.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Bhutan" title="Bhutan">Bhutan</a></td>
<td>064</td>
 
<td>BTN</td>
<td id="BT">BT</td>
<td><a href="/w/index.php?title=ISO_3166-2:BT&amp;action=edit" class="new" title="ISO 3166-2:BT">ISO 3166-2:BT</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Bolivia.svg" class="image" title="Flag of Bolivia"><img alt="Flag of Bolivia" longdesc="/wiki/Image:Flag_of_Bolivia.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/4/48/Flag_of_Bolivia.svg/22px-Flag_of_Bolivia.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Bolivia" title="Bolivia">Bolivia</a></td>
<td>068</td>
<td>BOL</td>
<td id="BO">BO</td>
<td><a href="/wiki/ISO_3166-2:BO" title="ISO 3166-2:BO">ISO 3166-2:BO</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Bosnia_and_Herzegovina.svg" class="image" title="Flag of Bosnia and Herzegovina"><img alt="Flag of Bosnia and Herzegovina" longdesc="/wiki/Image:Flag_of_Bosnia_and_Herzegovina.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/b/bf/Flag_of_Bosnia_and_Herzegovina.svg/22px-Flag_of_Bosnia_and_Herzegovina.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/Bosnia_and_Herzegovina" title="Bosnia and Herzegovina">Bosnia and Herzegovina</a></td>
<td>070</td>
<td>BIH</td>
<td id="BA">BA</td>
<td><a href="/w/index.php?title=ISO_3166-2:BA&amp;action=edit" class="new" title="ISO 3166-2:BA">ISO 3166-2:BA</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Botswana.svg" class="image" title="Flag of Botswana"><img alt="Flag of Botswana" longdesc="/wiki/Image:Flag_of_Botswana.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/f/fa/Flag_of_Botswana.svg/22px-Flag_of_Botswana.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Botswana" title="Botswana">Botswana</a></td>
<td>072</td>
 
<td>BWA</td>
<td id="BW">BW</td>
<td><a href="/wiki/ISO_3166-2:BW" title="ISO 3166-2:BW">ISO 3166-2:BW</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Norway.svg" class="image" title="Flag of Bouvet Island"><img alt="Flag of Bouvet Island" longdesc="/wiki/Image:Flag_of_Norway.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/d/d9/Flag_of_Norway.svg/22px-Flag_of_Norway.svg.png" height="16" width="22"></a>&nbsp;<a href="/wiki/Bouvet_Island" title="Bouvet Island">Bouvet Island</a></td>
<td>074</td>
<td>BVT</td>
<td id="BV">BV</td>
<td><a href="/w/index.php?title=ISO_3166-2:BV&amp;action=edit" class="new" title="ISO 3166-2:BV">ISO 3166-2:BV</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Brazil.svg" class="image" title="Flag of Brazil"><img alt="Flag of Brazil" longdesc="/wiki/Image:Flag_of_Brazil.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/0/05/Flag_of_Brazil.svg/22px-Flag_of_Brazil.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Brazil" title="Brazil">Brazil</a></td>
<td>076</td>
<td>BRA</td>
<td id="BR">BR</td>
<td><a href="/wiki/ISO_3166-2:BR" title="ISO 3166-2:BR">ISO 3166-2:BR</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_the_British_Indian_Ocean_Territory.svg" class="image" title="Flag of British Indian Ocean Territory"><img alt="Flag of British Indian Ocean Territory" longdesc="/wiki/Image:Flag_of_the_British_Indian_Ocean_Territory.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/6/6e/Flag_of_the_British_Indian_Ocean_Territory.svg/22px-Flag_of_the_British_Indian_Ocean_Territory.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/British_Indian_Ocean_Territory" title="British Indian Ocean Territory">British Indian Ocean Territory</a></td>
<td>086</td>
 
<td>IOT</td>
<td id="IO">IO</td>
<td><a href="/w/index.php?title=ISO_3166-2:IO&amp;action=edit" class="new" title="ISO 3166-2:IO">ISO 3166-2:IO</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Brunei.svg" class="image" title="Flag of Brunei"><img alt="Flag of Brunei" longdesc="/wiki/Image:Flag_of_Brunei.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/9/9c/Flag_of_Brunei.svg/22px-Flag_of_Brunei.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/Brunei" title="Brunei">Brunei Darussalam</a></td>
<td>096</td>
<td>BRN</td>
<td id="BN">BN</td>
<td><a href="/w/index.php?title=ISO_3166-2:BN&amp;action=edit" class="new" title="ISO 3166-2:BN">ISO 3166-2:BN</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Bulgaria.svg" class="image" title="Flag of Bulgaria"><img alt="Flag of Bulgaria" longdesc="/wiki/Image:Flag_of_Bulgaria.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Flag_of_Bulgaria.svg/22px-Flag_of_Bulgaria.svg.png" height="13" width="22"></a>&nbsp;<a href="/wiki/Bulgaria" title="Bulgaria">Bulgaria</a></td>
<td>100</td>
<td>BGR</td>
<td id="BG">BG</td>
<td><a href="/wiki/ISO_3166-2:BG" title="ISO 3166-2:BG">ISO 3166-2:BG</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Burkina_Faso.svg" class="image" title="Flag of Burkina Faso"><img alt="Flag of Burkina Faso" longdesc="/wiki/Image:Flag_of_Burkina_Faso.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/3/31/Flag_of_Burkina_Faso.svg/22px-Flag_of_Burkina_Faso.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Burkina_Faso" title="Burkina Faso">Burkina Faso</a></td>
<td>854</td>
 
<td>BFA</td>
<td id="BF">BF</td>
<td><a href="/w/index.php?title=ISO_3166-2:BF&amp;action=edit" class="new" title="ISO 3166-2:BF">ISO 3166-2:BF</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Burundi.svg" class="image" title="Flag of Burundi"><img alt="Flag of Burundi" longdesc="/wiki/Image:Flag_of_Burundi.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/5/50/Flag_of_Burundi.svg/22px-Flag_of_Burundi.svg.png" height="13" width="22"></a>&nbsp;<a href="/wiki/Burundi" title="Burundi">Burundi</a></td>
<td>108</td>
<td>BDI</td>
<td id="BI">BI</td>
<td><a href="/wiki/ISO_3166-2:BI" title="ISO 3166-2:BI">ISO 3166-2:BI</a></td>
 
</tr>
<tr bgcolor="lightgray">
<td colspan="5"></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Cambodia.svg" class="image" title="Flag of Cambodia"><img alt="Flag of Cambodia" longdesc="/wiki/Image:Flag_of_Cambodia.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/8/83/Flag_of_Cambodia.svg/22px-Flag_of_Cambodia.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Cambodia" title="Cambodia">Cambodia</a></td>
<td>116</td>
<td>KHM</td>
<td id="KH">KH</td>
<td><a href="/wiki/ISO_3166-2:KH" title="ISO 3166-2:KH">ISO 3166-2:KH</a></td>
</tr>
<tr>
 
<td><a href="/wiki/Image:Flag_of_Cameroon.svg" class="image" title="Flag of Cameroon"><img alt="Flag of Cameroon" longdesc="/wiki/Image:Flag_of_Cameroon.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/4/4f/Flag_of_Cameroon.svg/22px-Flag_of_Cameroon.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Cameroon" title="Cameroon">Cameroon</a></td>
<td>120</td>
<td>CMR</td>
<td id="CM">CM</td>
<td><a href="/w/index.php?title=ISO_3166-2:CM&amp;action=edit" class="new" title="ISO 3166-2:CM">ISO 3166-2:CM</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Canada.svg" class="image" title="Flag of Canada"><img alt="Flag of Canada" longdesc="/wiki/Image:Flag_of_Canada.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/c/cf/Flag_of_Canada.svg/22px-Flag_of_Canada.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/Canada" title="Canada">Canada</a></td>
<td>124</td>
<td>CAN</td>
 
<td id="CA">CA</td>
<td><a href="/wiki/ISO_3166-2:CA" title="ISO 3166-2:CA">ISO 3166-2:CA</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Cape_Verde.svg" class="image" title="Flag of Cape Verde"><img alt="Flag of Cape Verde" longdesc="/wiki/Image:Flag_of_Cape_Verde.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/3/38/Flag_of_Cape_Verde.svg/22px-Flag_of_Cape_Verde.svg.png" height="13" width="22"></a>&nbsp;<a href="/wiki/Cape_Verde" title="Cape Verde">Cape Verde</a></td>
<td>132</td>
<td>CPV</td>
<td id="CV">CV</td>
<td><a href="/wiki/ISO_3166-2:CV" title="ISO 3166-2:CV">ISO 3166-2:CV</a></td>
</tr>
 
<tr>
<td><a href="/wiki/Image:Flag_of_the_Cayman_Islands.svg" class="image" title="Flag of Cayman Islands"><img alt="Flag of Cayman Islands" longdesc="/wiki/Image:Flag_of_the_Cayman_Islands.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/0/0f/Flag_of_the_Cayman_Islands.svg/22px-Flag_of_the_Cayman_Islands.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/Cayman_Islands" title="Cayman Islands">Cayman Islands</a></td>
<td>136</td>
<td>CYM</td>
<td id="KY">KY</td>
<td><a href="/w/index.php?title=ISO_3166-2:KY&amp;action=edit" class="new" title="ISO 3166-2:KY">ISO 3166-2:KY</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_the_Central_African_Republic.svg" class="image" title="Flag of the Central African Republic"><img alt="Flag of the Central African Republic" longdesc="/wiki/Image:Flag_of_the_Central_African_Republic.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/6/6f/Flag_of_the_Central_African_Republic.svg/22px-Flag_of_the_Central_African_Republic.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Central_African_Republic" title="Central African Republic">Central African Republic</a></td>
<td>140</td>
 
<td>CAF</td>
<td id="CF">CF</td>
<td><a href="/w/index.php?title=ISO_3166-2:CF&amp;action=edit" class="new" title="ISO 3166-2:CF">ISO 3166-2:CF</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Chad.svg" class="image" title="Flag of Chad"><img alt="Flag of Chad" longdesc="/wiki/Image:Flag_of_Chad.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/4/4b/Flag_of_Chad.svg/22px-Flag_of_Chad.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Chad" title="Chad">Chad</a></td>
<td>148</td>
<td>TCD</td>
<td id="TD">TD</td>
<td><a href="/wiki/ISO_3166-2:TD" title="ISO 3166-2:TD">ISO 3166-2:TD</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Chile.svg" class="image" title="Flag of Chile"><img alt="Flag of Chile" longdesc="/wiki/Image:Flag_of_Chile.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/7/78/Flag_of_Chile.svg/22px-Flag_of_Chile.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Chile" title="Chile">Chile</a></td>
<td>152</td>
<td>CHL</td>
<td id="CL">CL</td>
<td><a href="/wiki/ISO_3166-2:CL" title="ISO 3166-2:CL">ISO 3166-2:CL</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_the_People%27s_Republic_of_China.svg" class="image" title="Flag of the People's Republic of China"><img alt="Flag of the People's Republic of China" longdesc="/wiki/Image:Flag_of_the_People%27s_Republic_of_China.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/f/fa/Flag_of_the_People%27s_Republic_of_China.svg/22px-Flag_of_the_People%27s_Republic_of_China.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/People%27s_Republic_of_China" title="People's Republic of China">China</a></td>
<td>156</td>
 
<td>CHN</td>
<td id="CN">CN</td>
<td><a href="/wiki/ISO_3166-2:CN" title="ISO 3166-2:CN">ISO 3166-2:CN</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Christmas_Island.svg" class="image" title="Flag of Christmas Island"><img alt="Flag of Christmas Island" longdesc="/wiki/Image:Flag_of_Christmas_Island.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/6/67/Flag_of_Christmas_Island.svg/22px-Flag_of_Christmas_Island.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/Christmas_Island" title="Christmas Island">Christmas Island</a></td>
<td>162</td>
<td>CXR</td>
<td id="CX">CX</td>
<td><a href="/w/index.php?title=ISO_3166-2:CX&amp;action=edit" class="new" title="ISO 3166-2:CX">ISO 3166-2:CX</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Australia.svg" class="image" title="Flag of the Cocos (Keeling) Islands"><img alt="Flag of the Cocos (Keeling) Islands" longdesc="/wiki/Image:Flag_of_Australia.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/b/b9/Flag_of_Australia.svg/22px-Flag_of_Australia.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/Cocos_%28Keeling%29_Islands" title="Cocos (Keeling) Islands">Cocos (Keeling) Islands</a></td>
<td>166</td>
<td>CCK</td>
<td id="CC">CC</td>
<td><a href="/w/index.php?title=ISO_3166-2:CC&amp;action=edit" class="new" title="ISO 3166-2:CC">ISO 3166-2:CC</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Colombia.svg" class="image" title="Flag of Colombia"><img alt="Flag of Colombia" longdesc="/wiki/Image:Flag_of_Colombia.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/2/21/Flag_of_Colombia.svg/22px-Flag_of_Colombia.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Colombia" title="Colombia">Colombia</a></td>
<td>170</td>
 
<td>COL</td>
<td id="CO">CO</td>
<td><a href="/wiki/ISO_3166-2:CO" title="ISO 3166-2:CO">ISO 3166-2:CO</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_the_Comoros.svg" class="image" title="Flag of the Comoros"><img alt="Flag of the Comoros" longdesc="/wiki/Image:Flag_of_the_Comoros.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/9/94/Flag_of_the_Comoros.svg/22px-Flag_of_the_Comoros.svg.png" height="13" width="22"></a>&nbsp;<a href="/wiki/Comoros" title="Comoros">Comoros</a></td>
<td>174</td>
<td>COM</td>
<td id="KM">KM</td>
<td><a href="/w/index.php?title=ISO_3166-2:KM&amp;action=edit" class="new" title="ISO 3166-2:KM">ISO 3166-2:KM</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_the_Republic_of_the_Congo.svg" class="image" title="Flag of the Republic of the Congo"><img alt="Flag of the Republic of the Congo" longdesc="/wiki/Image:Flag_of_the_Republic_of_the_Congo.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/9/92/Flag_of_the_Republic_of_the_Congo.svg/22px-Flag_of_the_Republic_of_the_Congo.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Republic_of_the_Congo" title="Republic of the Congo">Congo</a></td>
<td>178</td>
<td>COG</td>
<td id="CG">CG</td>
<td><a href="/w/index.php?title=ISO_3166-2:CG&amp;action=edit" class="new" title="ISO 3166-2:CG">ISO 3166-2:CG</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_the_Democratic_Republic_of_the_Congo.svg" class="image" title="Flag of the Democratic Republic of the Congo"><img alt="Flag of the Democratic Republic of the Congo" longdesc="/wiki/Image:Flag_of_the_Democratic_Republic_of_the_Congo.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/6/6f/Flag_of_the_Democratic_Republic_of_the_Congo.svg/22px-Flag_of_the_Democratic_Republic_of_the_Congo.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Democratic_Republic_of_the_Congo" title="Democratic Republic of the Congo">Congo, Democratic Republic of the</a></td>
<td>180</td>
 
<td>COD</td>
<td id="CD">CD</td>
<td><a href="/wiki/ISO_3166-2:CD" title="ISO 3166-2:CD">ISO 3166-2:CD</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_the_Cook_Islands.svg" class="image" title="Flag of the Cook Islands"><img alt="Flag of the Cook Islands" longdesc="/wiki/Image:Flag_of_the_Cook_Islands.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/3/35/Flag_of_the_Cook_Islands.svg/22px-Flag_of_the_Cook_Islands.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/Cook_Islands" title="Cook Islands">Cook Islands</a></td>
<td>184</td>
<td>COK</td>
<td id="CK">CK</td>
<td><a href="/w/index.php?title=ISO_3166-2:CK&amp;action=edit" class="new" title="ISO 3166-2:CK">ISO 3166-2:CK</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Costa_Rica.svg" class="image" title="Flag of Costa Rica"><img alt="Flag of Costa Rica" longdesc="/wiki/Image:Flag_of_Costa_Rica.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/f/f2/Flag_of_Costa_Rica.svg/22px-Flag_of_Costa_Rica.svg.png" height="13" width="22"></a>&nbsp;<a href="/wiki/Costa_Rica" title="Costa Rica">Costa Rica</a></td>
<td>188</td>
<td>CRI</td>
<td id="CR">CR</td>
<td><a href="/w/index.php?title=ISO_3166-2:CR&amp;action=edit" class="new" title="ISO 3166-2:CR">ISO 3166-2:CR</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Cote_d%27Ivoire.svg" class="image" title="Flag of Côte d'Ivoire"><img alt="Flag of Côte d'Ivoire" longdesc="/wiki/Image:Flag_of_Cote_d%27Ivoire.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/8/86/Flag_of_Cote_d%27Ivoire.svg/22px-Flag_of_Cote_d%27Ivoire.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/C%C3%B4te_d%27Ivoire" title="Côte d'Ivoire">Côte d'Ivoire</a></td>
<td>384</td>
 
<td>CIV</td>
<td id="CI">CI</td>
<td><a href="/wiki/ISO_3166-2:CI" title="ISO 3166-2:CI">ISO 3166-2:CI</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Croatia.svg" class="image" title="Flag of Croatia"><img alt="Flag of Croatia" longdesc="/wiki/Image:Flag_of_Croatia.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/1/1b/Flag_of_Croatia.svg/22px-Flag_of_Croatia.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/Croatia" title="Croatia">Croatia</a></td>
<td>191</td>
<td>HRV</td>
<td id="HR">HR</td>
<td><a href="/wiki/ISO_3166-2:HR" title="ISO 3166-2:HR">ISO 3166-2:HR</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Cuba.svg" class="image" title="Flag of Cuba"><img alt="Flag of Cuba" longdesc="/wiki/Image:Flag_of_Cuba.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/b/bd/Flag_of_Cuba.svg/22px-Flag_of_Cuba.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/Cuba" title="Cuba">Cuba</a></td>
<td>192</td>
<td>CUB</td>
<td id="CU">CU</td>
<td><a href="/wiki/ISO_3166-2:CU" title="ISO 3166-2:CU">ISO 3166-2:CU</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Cyprus.svg" class="image" title="Flag of Cyprus"><img alt="Flag of Cyprus" longdesc="/wiki/Image:Flag_of_Cyprus.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/d/d4/Flag_of_Cyprus.svg/22px-Flag_of_Cyprus.svg.png" height="13" width="22"></a>&nbsp;<a href="/wiki/Cyprus" title="Cyprus">Cyprus</a></td>
<td>196</td>
 
<td>CYP</td>
<td id="CY">CY</td>
<td><a href="/wiki/ISO_3166-2:CY" title="ISO 3166-2:CY">ISO 3166-2:CY</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_the_Czech_Republic.svg" class="image" title="Flag of the Czech Republic"><img alt="Flag of the Czech Republic" longdesc="/wiki/Image:Flag_of_the_Czech_Republic.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Flag_of_the_Czech_Republic.svg/22px-Flag_of_the_Czech_Republic.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Czech_Republic" title="Czech Republic">Czech Republic</a></td>
<td>203</td>
<td>CZE</td>
<td id="CZ">CZ</td>
<td><a href="/wiki/ISO_3166-2:CZ" title="ISO 3166-2:CZ">ISO 3166-2:CZ</a></td>
 
</tr>
<tr bgcolor="lightgray">
<td colspan="5"></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Denmark.svg" class="image" title="Flag of Denmark"><img alt="Flag of Denmark" longdesc="/wiki/Image:Flag_of_Denmark.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/9/9c/Flag_of_Denmark.svg/22px-Flag_of_Denmark.svg.png" height="17" width="22"></a>&nbsp;<a href="/wiki/Denmark" title="Denmark">Denmark</a></td>
<td>208</td>
<td>DNK</td>
<td id="DK">DK</td>
<td><a href="/wiki/ISO_3166-2:DK" title="ISO 3166-2:DK">ISO 3166-2:DK</a></td>
</tr>
<tr>
 
<td><a href="/wiki/Image:Flag_of_Djibouti.svg" class="image" title="Flag of Djibouti"><img alt="Flag of Djibouti" longdesc="/wiki/Image:Flag_of_Djibouti.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/3/34/Flag_of_Djibouti.svg/22px-Flag_of_Djibouti.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Djibouti" title="Djibouti">Djibouti</a></td>
<td>262</td>
<td>DJI</td>
<td id="DJ">DJ</td>
<td><a href="/wiki/ISO_3166-2:DJ" title="ISO 3166-2:DJ">ISO 3166-2:DJ</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Dominica.svg" class="image" title="Flag of Dominica"><img alt="Flag of Dominica" longdesc="/wiki/Image:Flag_of_Dominica.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/c/c4/Flag_of_Dominica.svg/22px-Flag_of_Dominica.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/Dominica" title="Dominica">Dominica</a></td>
<td>212</td>
<td>DMA</td>
 
<td id="DM">DM</td>
<td><a href="/wiki/ISO_3166-2:DM" title="ISO 3166-2:DM">ISO 3166-2:DM</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_the_Dominican_Republic.svg" class="image" title="Flag of the Dominican Republic"><img alt="Flag of the Dominican Republic" longdesc="/wiki/Image:Flag_of_the_Dominican_Republic.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Flag_of_the_Dominican_Republic.svg/22px-Flag_of_the_Dominican_Republic.svg.png" height="14" width="22"></a>&nbsp;<a href="/wiki/Dominican_Republic" title="Dominican Republic">Dominican Republic</a></td>
<td>214</td>
<td>DOM</td>
<td id="DO">DO</td>
<td><a href="/wiki/ISO_3166-2:DO" title="ISO 3166-2:DO">ISO 3166-2:DO</a></td>
</tr>
 
<tr bgcolor="lightgray">
<td colspan="5"></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Ecuador.svg" class="image" title="Flag of Ecuador"><img alt="Flag of Ecuador" longdesc="/wiki/Image:Flag_of_Ecuador.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/e/e8/Flag_of_Ecuador.svg/22px-Flag_of_Ecuador.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/Ecuador" title="Ecuador">Ecuador</a></td>
<td>218</td>
<td>ECU</td>
<td id="EC">EC</td>
<td><a href="/wiki/ISO_3166-2:EC" title="ISO 3166-2:EC">ISO 3166-2:EC</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Egypt.svg" class="image" title="Flag of Egypt"><img alt="Flag of Egypt" longdesc="/wiki/Image:Flag_of_Egypt.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/f/fe/Flag_of_Egypt.svg/22px-Flag_of_Egypt.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Egypt" title="Egypt">Egypt</a></td>
 
<td>818</td>
<td>EGY</td>
<td id="EG">EG</td>
<td><a href="/w/index.php?title=ISO_3166-2:EG&amp;action=edit" class="new" title="ISO 3166-2:EG">ISO 3166-2:EG</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_El_Salvador.svg" class="image" title="Flag of El Salvador"><img alt="Flag of El Salvador" longdesc="/wiki/Image:Flag_of_El_Salvador.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/3/34/Flag_of_El_Salvador.svg/22px-Flag_of_El_Salvador.svg.png" height="12" width="22"></a>&nbsp;<a href="/wiki/El_Salvador" title="El Salvador">El Salvador</a></td>
<td>222</td>
<td>SLV</td>
<td id="SV">SV</td>
 
<td><a href="/wiki/ISO_3166-2:SV" title="ISO 3166-2:SV">ISO 3166-2:SV</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Equatorial_Guinea.svg" class="image" title="Flag of Equatorial Guinea"><img alt="Flag of Equatorial Guinea" longdesc="/wiki/Image:Flag_of_Equatorial_Guinea.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/3/31/Flag_of_Equatorial_Guinea.svg/22px-Flag_of_Equatorial_Guinea.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Equatorial_Guinea" title="Equatorial Guinea">Equatorial Guinea</a></td>
<td>226</td>
<td>GNQ</td>
<td id="GQ">GQ</td>
<td><a href="/wiki/ISO_3166-2:GQ" title="ISO 3166-2:GQ">ISO 3166-2:GQ</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Eritrea.svg" class="image" title="Flag of Eritrea"><img alt="Flag of Eritrea" longdesc="/wiki/Image:Flag_of_Eritrea.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/2/29/Flag_of_Eritrea.svg/22px-Flag_of_Eritrea.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/Eritrea" title="Eritrea">Eritrea</a></td>
 
<td>232</td>
<td>ERI</td>
<td id="ER">ER</td>
<td><a href="/wiki/ISO_3166-2:ER" title="ISO 3166-2:ER">ISO 3166-2:ER</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Estonia.svg" class="image" title="Flag of Estonia"><img alt="Flag of Estonia" longdesc="/wiki/Image:Flag_of_Estonia.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/8/8f/Flag_of_Estonia.svg/22px-Flag_of_Estonia.svg.png" height="14" width="22"></a>&nbsp;<a href="/wiki/Estonia" title="Estonia">Estonia</a></td>
<td>233</td>
<td>EST</td>
<td id="EE">EE</td>
 
<td><a href="/wiki/ISO_3166-2:EE" title="ISO 3166-2:EE">ISO 3166-2:EE</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Ethiopia.svg" class="image" title="Flag of Ethiopia"><img alt="Flag of Ethiopia" longdesc="/wiki/Image:Flag_of_Ethiopia.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/7/71/Flag_of_Ethiopia.svg/22px-Flag_of_Ethiopia.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/Ethiopia" title="Ethiopia">Ethiopia</a></td>
<td>231</td>
<td>ETH</td>
<td id="ET">ET</td>
<td><a href="/wiki/ISO_3166-2:ET" title="ISO 3166-2:ET">ISO 3166-2:ET</a></td>
</tr>
<tr bgcolor="lightgray">
<td colspan="5"></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_the_Falkland_Islands.svg" class="image" title="Flag of the Falkland Islands"><img alt="Flag of the Falkland Islands" longdesc="/wiki/Image:Flag_of_the_Falkland_Islands.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/8/83/Flag_of_the_Falkland_Islands.svg/22px-Flag_of_the_Falkland_Islands.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/Falkland_Islands" title="Falkland Islands">Falkland Islands (Malvinas)</a></td>
<td>238</td>
<td>FLK</td>
<td id="FK">FK</td>
<td><a href="/w/index.php?title=ISO_3166-2:FK&amp;action=edit" class="new" title="ISO 3166-2:FK">ISO 3166-2:FK</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_the_Faroe_Islands.svg" class="image" title="Flag of the Faroe Islands"><img alt="Flag of the Faroe Islands" longdesc="/wiki/Image:Flag_of_the_Faroe_Islands.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/3/3c/Flag_of_the_Faroe_Islands.svg/22px-Flag_of_the_Faroe_Islands.svg.png" height="16" width="22"></a>&nbsp;<a href="/wiki/Faroe_Islands" title="Faroe Islands">Faroe Islands</a></td>
<td>234</td>
 
<td>FRO</td>
<td id="FO">FO</td>
<td><a href="/w/index.php?title=ISO_3166-2:FO&amp;action=edit" class="new" title="ISO 3166-2:FO">ISO 3166-2:FO</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Fiji.svg" class="image" title="Flag of Fiji"><img alt="Flag of Fiji" longdesc="/wiki/Image:Flag_of_Fiji.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/b/ba/Flag_of_Fiji.svg/22px-Flag_of_Fiji.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/Fiji" title="Fiji">Fiji</a></td>
<td>242</td>
<td>FJI</td>
<td id="FJ">FJ</td>
<td><a href="/w/index.php?title=ISO_3166-2:FJ&amp;action=edit" class="new" title="ISO 3166-2:FJ">ISO 3166-2:FJ</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Finland.svg" class="image" title="Flag of Finland"><img alt="Flag of Finland" longdesc="/wiki/Image:Flag_of_Finland.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/b/bc/Flag_of_Finland.svg/22px-Flag_of_Finland.svg.png" height="13" width="22"></a>&nbsp;<a href="/wiki/Finland" title="Finland">Finland</a></td>
<td>246</td>
<td>FIN</td>
<td id="FI">FI</td>
<td><a href="/wiki/ISO_3166-2:FI" title="ISO 3166-2:FI">ISO 3166-2:FI</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_France.svg" class="image" title="Flag of France"><img alt="Flag of France" longdesc="/wiki/Image:Flag_of_France.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Flag_of_France.svg/22px-Flag_of_France.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/France" title="France">France</a></td>
<td>250</td>
 
<td>FRA</td>
<td id="FR">FR</td>
<td><a href="/wiki/ISO_3166-2:FR" title="ISO 3166-2:FR">ISO 3166-2:FR</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_France.svg" class="image" title="Flag of French Guiana"><img alt="Flag of French Guiana" longdesc="/wiki/Image:Flag_of_France.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Flag_of_France.svg/22px-Flag_of_France.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/French_Guiana" title="French Guiana">French Guiana</a></td>
<td>254</td>
<td>GUF</td>
<td id="GF">GF</td>
<td><a href="/w/index.php?title=ISO_3166-2:GF&amp;action=edit" class="new" title="ISO 3166-2:GF">ISO 3166-2:GF</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_French_Polynesia.svg" class="image" title="Flag of French Polynesia"><img alt="Flag of French Polynesia" longdesc="/wiki/Image:Flag_of_French_Polynesia.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/d/db/Flag_of_French_Polynesia.svg/22px-Flag_of_French_Polynesia.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/French_Polynesia" title="French Polynesia">French Polynesia</a></td>
<td>258</td>
<td>PYF</td>
<td id="PF">PF</td>
<td><a href="/w/index.php?title=ISO_3166-2:PF&amp;action=edit" class="new" title="ISO 3166-2:PF">ISO 3166-2:PF</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_France.svg" class="image" title="Flag of the French Southern and Antarctic Lands"><img alt="Flag of the French Southern and Antarctic Lands" longdesc="/wiki/Image:Flag_of_France.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Flag_of_France.svg/22px-Flag_of_France.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/French_Southern_and_Antarctic_Lands" title="French Southern and Antarctic Lands">French Southern Territories</a></td>
<td>260</td>
 
<td>ATF</td>
<td id="TF">TF</td>
<td><a href="/w/index.php?title=ISO_3166-2:TF&amp;action=edit" class="new" title="ISO 3166-2:TF">ISO 3166-2:TF</a></td>
</tr>
<tr bgcolor="lightgray">
<td colspan="5"></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Gabon.svg" class="image" title="Flag of Gabon"><img alt="Flag of Gabon" longdesc="/wiki/Image:Flag_of_Gabon.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/0/04/Flag_of_Gabon.svg/22px-Flag_of_Gabon.svg.png" height="17" width="22"></a>&nbsp;<a href="/wiki/Gabon" title="Gabon">Gabon</a></td>
<td>266</td>
<td>GAB</td>
 
<td id="GA">GA</td>
<td><a href="/w/index.php?title=ISO_3166-2:GA&amp;action=edit" class="new" title="ISO 3166-2:GA">ISO 3166-2:GA</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_The_Gambia.svg" class="image" title="Flag of The Gambia"><img alt="Flag of The Gambia" longdesc="/wiki/Image:Flag_of_The_Gambia.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/7/77/Flag_of_The_Gambia.svg/22px-Flag_of_The_Gambia.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/The_Gambia" title="The Gambia">Gambia</a></td>
<td>270</td>
<td>GMB</td>
<td id="GM">GM</td>
<td><a href="/w/index.php?title=ISO_3166-2:GM&amp;action=edit" class="new" title="ISO 3166-2:GM">ISO 3166-2:GM</a></td>
</tr>
 
<tr>
<td><a href="/wiki/Image:Flag_of_Georgia.svg" class="image" title="Flag of Georgia (country)"><img alt="Flag of Georgia (country)" longdesc="/wiki/Image:Flag_of_Georgia.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/0/0f/Flag_of_Georgia.svg/22px-Flag_of_Georgia.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Georgia_%28country%29" title="Georgia (country)">Georgia</a></td>
<td>268</td>
<td>GEO</td>
<td id="GE">GE</td>
<td><a href="/wiki/ISO_3166-2:GE" title="ISO 3166-2:GE">ISO 3166-2:GE</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Germany.svg" class="image" title="Flag of Germany"><img alt="Flag of Germany" longdesc="/wiki/Image:Flag_of_Germany.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/b/ba/Flag_of_Germany.svg/22px-Flag_of_Germany.svg.png" height="13" width="22"></a>&nbsp;<a href="/wiki/Germany" title="Germany">Germany</a></td>
<td>276</td>
 
<td>DEU</td>
<td id="DE">DE</td>
<td><a href="/wiki/ISO_3166-2:DE" title="ISO 3166-2:DE">ISO 3166-2:DE</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Ghana.svg" class="image" title="Flag of Ghana"><img alt="Flag of Ghana" longdesc="/wiki/Image:Flag_of_Ghana.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/1/19/Flag_of_Ghana.svg/22px-Flag_of_Ghana.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Ghana" title="Ghana">Ghana</a></td>
<td>288</td>
<td>GHA</td>
<td id="GH">GH</td>
<td><a href="/wiki/ISO_3166-2:GH" title="ISO 3166-2:GH">ISO 3166-2:GH</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Gibraltar.svg" class="image" title="Flag of Gibraltar"><img alt="Flag of Gibraltar" longdesc="/wiki/Image:Flag_of_Gibraltar.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/0/02/Flag_of_Gibraltar.svg/22px-Flag_of_Gibraltar.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/Gibraltar" title="Gibraltar">Gibraltar</a></td>
<td>292</td>
<td>GIB</td>
<td id="GI">GI</td>
<td><a href="/w/index.php?title=ISO_3166-2:GI&amp;action=edit" class="new" title="ISO 3166-2:GI">ISO 3166-2:GI</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Greece.svg" class="image" title="Flag of Greece"><img alt="Flag of Greece" longdesc="/wiki/Image:Flag_of_Greece.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/5/5c/Flag_of_Greece.svg/22px-Flag_of_Greece.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Greece" title="Greece">Greece</a></td>
<td>300</td>
 
<td>GRC</td>
<td id="GR">GR</td>
<td><a href="/wiki/ISO_3166-2:GR" title="ISO 3166-2:GR">ISO 3166-2:GR</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Greenland.svg" class="image" title="Flag of Greenland"><img alt="Flag of Greenland" longdesc="/wiki/Image:Flag_of_Greenland.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/0/09/Flag_of_Greenland.svg/22px-Flag_of_Greenland.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Greenland" title="Greenland">Greenland</a></td>
<td>304</td>
<td>GRL</td>
<td id="GL">GL</td>
<td><a href="/w/index.php?title=ISO_3166-2:GL&amp;action=edit" class="new" title="ISO 3166-2:GL">ISO 3166-2:GL</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Grenada.svg" class="image" title="Flag of Grenada"><img alt="Flag of Grenada" longdesc="/wiki/Image:Flag_of_Grenada.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/b/bc/Flag_of_Grenada.svg/22px-Flag_of_Grenada.svg.png" height="13" width="22"></a>&nbsp;<a href="/wiki/Grenada" title="Grenada">Grenada</a></td>
<td>308</td>
<td>GRD</td>
<td id="GD">GD</td>
<td><a href="/wiki/ISO_3166-2:GD" title="ISO 3166-2:GD">ISO 3166-2:GD</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_France.svg" class="image" title="Flag of Guadeloupe"><img alt="Flag of Guadeloupe" longdesc="/wiki/Image:Flag_of_France.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Flag_of_France.svg/22px-Flag_of_France.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Guadeloupe" title="Guadeloupe">Guadeloupe</a><span class="reference plainlinksneverexpand" id="ref_COM"><sup><a href="http://en.wikipedia.org/wiki/ISO_3166-1#endnote_COM" class="external autonumber" title="http://en.wikipedia.org/wiki/ISO_3166-1#endnote_COM" rel="nofollow">[2]</a></sup></span></td>
 
<td>312</td>
<td>GLP</td>
<td id="GP">GP</td>
<td><a href="/w/index.php?title=ISO_3166-2:GP&amp;action=edit" class="new" title="ISO 3166-2:GP">ISO 3166-2:GP</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Guam.svg" class="image" title="Flag of Guam"><img alt="Flag of Guam" longdesc="/wiki/Image:Flag_of_Guam.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/0/07/Flag_of_Guam.svg/22px-Flag_of_Guam.svg.png" height="13" width="22"></a>&nbsp;<a href="/wiki/Guam" title="Guam">Guam</a></td>
<td>316</td>
<td>GUM</td>
<td id="GU">GU</td>
 
<td><a href="/w/index.php?title=ISO_3166-2:GU&amp;action=edit" class="new" title="ISO 3166-2:GU">ISO 3166-2:GU</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Guatemala.svg" class="image" title="Flag of Guatemala"><img alt="Flag of Guatemala" longdesc="/wiki/Image:Flag_of_Guatemala.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/e/ec/Flag_of_Guatemala.svg/22px-Flag_of_Guatemala.svg.png" height="14" width="22"></a>&nbsp;<a href="/wiki/Guatemala" title="Guatemala">Guatemala</a></td>
<td>320</td>
<td>GTM</td>
<td id="GT">GT</td>
<td><a href="/wiki/ISO_3166-2:GT" title="ISO 3166-2:GT">ISO 3166-2:GT</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Guernsey.svg" class="image" title="Flag of Guernsey"><img alt="Flag of Guernsey" longdesc="/wiki/Image:Flag_of_Guernsey.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/f/fa/Flag_of_Guernsey.svg/22px-Flag_of_Guernsey.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Guernsey" title="Guernsey">Guernsey</a></td>
 
<td>831</td>
<td>GGY</td>
<td id="GG">GG</td>
<td><a href="/wiki/ISO_3166-2:GG" title="ISO 3166-2:GG">ISO 3166-2:GG</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Guinea.svg" class="image" title="Flag of Guinea"><img alt="Flag of Guinea" longdesc="/wiki/Image:Flag_of_Guinea.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/e/ed/Flag_of_Guinea.svg/22px-Flag_of_Guinea.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Guinea" title="Guinea">Guinea</a></td>
<td>324</td>
<td>GIN</td>
<td id="GN">GN</td>
 
<td><a href="/wiki/ISO_3166-2:GN" title="ISO 3166-2:GN">ISO 3166-2:GN</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Guinea-Bissau.svg" class="image" title="Flag of Guinea-Bissau"><img alt="Flag of Guinea-Bissau" longdesc="/wiki/Image:Flag_of_Guinea-Bissau.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/0/01/Flag_of_Guinea-Bissau.svg/22px-Flag_of_Guinea-Bissau.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/Guinea-Bissau" title="Guinea-Bissau">Guinea-Bissau</a></td>
<td>624</td>
<td>GNB</td>
<td id="GW">GW</td>
<td><a href="/w/index.php?title=ISO_3166-2:GW&amp;action=edit" class="new" title="ISO 3166-2:GW">ISO 3166-2:GW</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Guyana.svg" class="image" title="Flag of Guyana"><img alt="Flag of Guyana" longdesc="/wiki/Image:Flag_of_Guyana.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/9/99/Flag_of_Guyana.svg/22px-Flag_of_Guyana.svg.png" height="13" width="22"></a>&nbsp;<a href="/wiki/Guyana" title="Guyana">Guyana</a></td>
 
<td>328</td>
<td>GUY</td>
<td id="GY">GY</td>
<td><a href="/w/index.php?title=ISO_3166-2:GY&amp;action=edit" class="new" title="ISO 3166-2:GY">ISO 3166-2:GY</a></td>
</tr>
<tr bgcolor="lightgray">
<td colspan="5"></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Haiti.svg" class="image" title="Flag of Haiti"><img alt="Flag of Haiti" longdesc="/wiki/Image:Flag_of_Haiti.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/5/56/Flag_of_Haiti.svg/22px-Flag_of_Haiti.svg.png" height="13" width="22"></a>&nbsp;<a href="/wiki/Haiti" title="Haiti">Haiti</a></td>
<td>332</td>
 
<td>HTI</td>
<td id="HT">HT</td>
<td><a href="/w/index.php?title=ISO_3166-2:HT&amp;action=edit" class="new" title="ISO 3166-2:HT">ISO 3166-2:HT</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Australia.svg" class="image" title="Flag of Heard Island and McDonald Islands"><img alt="Flag of Heard Island and McDonald Islands" longdesc="/wiki/Image:Flag_of_Australia.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/b/b9/Flag_of_Australia.svg/22px-Flag_of_Australia.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/Heard_Island_and_McDonald_Islands" title="Heard Island and McDonald Islands">Heard Island and McDonald Islands</a></td>
<td>334</td>
<td>HMD</td>
<td id="HM">HM</td>
<td><a href="/w/index.php?title=ISO_3166-2:HM&amp;action=edit" class="new" title="ISO 3166-2:HM">ISO 3166-2:HM</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_the_Vatican_City.svg" class="image" title="Flag of the Vatican City"><img alt="Flag of the Vatican City" longdesc="/wiki/Image:Flag_of_the_Vatican_City.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/0/00/Flag_of_the_Vatican_City.svg/20px-Flag_of_the_Vatican_City.svg.png" height="20" width="20"></a>&nbsp;<a href="/wiki/Vatican_City" title="Vatican City">Holy See (Vatican City State)</a></td>
<td>336</td>
<td>VAT</td>
<td id="VA">VA</td>
<td><a href="/w/index.php?title=ISO_3166-2:VA&amp;action=edit" class="new" title="ISO 3166-2:VA">ISO 3166-2:VA</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Honduras.svg" class="image" title="Flag of Honduras"><img alt="Flag of Honduras" longdesc="/wiki/Image:Flag_of_Honduras.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/8/82/Flag_of_Honduras.svg/22px-Flag_of_Honduras.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/Honduras" title="Honduras">Honduras</a></td>
<td>340</td>
 
<td>HND</td>
<td id="HN">HN</td>
<td><a href="/wiki/ISO_3166-2:HN" title="ISO 3166-2:HN">ISO 3166-2:HN</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Hong_Kong.svg" class="image" title="Flag of Hong Kong"><img alt="Flag of Hong Kong" longdesc="/wiki/Image:Flag_of_Hong_Kong.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/5/5b/Flag_of_Hong_Kong.svg/22px-Flag_of_Hong_Kong.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Hong_Kong" title="Hong Kong">Hong Kong</a></td>
<td>344</td>
<td>HKG</td>
<td id="HK">HK</td>
<td><a href="/wiki/ISO_3166-2:HK" title="ISO 3166-2:HK">ISO 3166-2:HK</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Hungary.svg" class="image" title="Flag of Hungary"><img alt="Flag of Hungary" longdesc="/wiki/Image:Flag_of_Hungary.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/c/c1/Flag_of_Hungary.svg/22px-Flag_of_Hungary.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/Hungary" title="Hungary">Hungary</a></td>
<td>348</td>
<td>HUN</td>
<td id="HU">HU</td>
<td><a href="/wiki/ISO_3166-2:HU" title="ISO 3166-2:HU">ISO 3166-2:HU</a></td>
</tr>
<tr bgcolor="lightgray">
<td colspan="5"></td>
</tr>
<tr>
 
<td><a href="/wiki/Image:Flag_of_Iceland.svg" class="image" title="Flag of Iceland"><img alt="Flag of Iceland" longdesc="/wiki/Image:Flag_of_Iceland.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/c/ce/Flag_of_Iceland.svg/22px-Flag_of_Iceland.svg.png" height="16" width="22"></a>&nbsp;<a href="/wiki/Iceland" title="Iceland">Iceland</a></td>
<td>352</td>
<td>ISL</td>
<td id="IS">IS</td>
<td><a href="/wiki/ISO_3166-2:IS" title="ISO 3166-2:IS">ISO 3166-2:IS</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_India.svg" class="image" title="Flag of India"><img alt="Flag of India" longdesc="/wiki/Image:Flag_of_India.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/4/41/Flag_of_India.svg/22px-Flag_of_India.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/India" title="India">India</a></td>
<td>356</td>
<td>IND</td>
 
<td id="IN">IN</td>
<td><a href="/wiki/ISO_3166-2:IN" title="ISO 3166-2:IN">ISO 3166-2:IN</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Indonesia.svg" class="image" title="Flag of Indonesia"><img alt="Flag of Indonesia" longdesc="/wiki/Image:Flag_of_Indonesia.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Flag_of_Indonesia.svg/22px-Flag_of_Indonesia.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Indonesia" title="Indonesia">Indonesia</a></td>
<td>360</td>
<td>IDN</td>
<td id="ID">ID</td>
<td><a href="/wiki/ISO_3166-2:ID" title="ISO 3166-2:ID">ISO 3166-2:ID</a></td>
</tr>
 
<tr>
<td><a href="/wiki/Image:Flag_of_Iran.svg" class="image" title="Flag of Iran"><img alt="Flag of Iran" longdesc="/wiki/Image:Flag_of_Iran.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/c/ca/Flag_of_Iran.svg/22px-Flag_of_Iran.svg.png" height="13" width="22"></a>&nbsp;<a href="/wiki/Iran" title="Iran">Iran, Islamic Republic of</a></td>
<td>364</td>
<td>IRN</td>
<td id="IR">IR</td>
<td><a href="/wiki/ISO_3166-2:IR" title="ISO 3166-2:IR">ISO 3166-2:IR</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Iraq.svg" class="image" title="Flag of Iraq"><img alt="Flag of Iraq" longdesc="/wiki/Image:Flag_of_Iraq.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/f/f6/Flag_of_Iraq.svg/22px-Flag_of_Iraq.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Iraq" title="Iraq">Iraq</a></td>
<td>368</td>
 
<td>IRQ</td>
<td id="IQ">IQ</td>
<td><a href="/w/index.php?title=ISO_3166-2:IQ&amp;action=edit" class="new" title="ISO 3166-2:IQ">ISO 3166-2:IQ</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Ireland.svg" class="image" title="Flag of Ireland"><img alt="Flag of Ireland" longdesc="/wiki/Image:Flag_of_Ireland.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/4/45/Flag_of_Ireland.svg/22px-Flag_of_Ireland.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/Republic_of_Ireland" title="Republic of Ireland">Ireland</a></td>
<td>372</td>
<td>IRL</td>
<td id="IE">IE</td>
<td><a href="/wiki/ISO_3166-2:IE" title="ISO 3166-2:IE">ISO 3166-2:IE</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_the_Isle_of_Man.svg" class="image" title="Flag of the Isle of Man"><img alt="Flag of the Isle of Man" longdesc="/wiki/Image:Flag_of_the_Isle_of_Man.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/b/bc/Flag_of_the_Isle_of_Man.svg/22px-Flag_of_the_Isle_of_Man.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/Isle_of_Man" title="Isle of Man">Isle of Man</a></td>
<td>833</td>
<td>IMN</td>
<td id="IM">IM</td>
<td><a href="/wiki/ISO_3166-2:IM" title="ISO 3166-2:IM">ISO 3166-2:IM</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Israel.svg" class="image" title="Flag of Israel"><img alt="Flag of Israel" longdesc="/wiki/Image:Flag_of_Israel.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/d/d4/Flag_of_Israel.svg/22px-Flag_of_Israel.svg.png" height="16" width="22"></a>&nbsp;<a href="/wiki/Israel" title="Israel">Israel</a></td>
<td>376</td>
 
<td>ISR</td>
<td id="IL">IL</td>
<td><a href="/wiki/ISO_3166-2:IL" title="ISO 3166-2:IL">ISO 3166-2:IL</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Italy.svg" class="image" title="Flag of Italy"><img alt="Flag of Italy" longdesc="/wiki/Image:Flag_of_Italy.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/0/03/Flag_of_Italy.svg/22px-Flag_of_Italy.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Italy" title="Italy">Italy</a></td>
<td>380</td>
<td>ITA</td>
<td id="IT">IT</td>
<td><a href="/wiki/ISO_3166-2:IT" title="ISO 3166-2:IT">ISO 3166-2:IT</a></td>
 
</tr>
<tr bgcolor="lightgray">
<td colspan="5"></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Jamaica.svg" class="image" title="Flag of Jamaica"><img alt="Flag of Jamaica" longdesc="/wiki/Image:Flag_of_Jamaica.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/0/0a/Flag_of_Jamaica.svg/22px-Flag_of_Jamaica.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/Jamaica" title="Jamaica">Jamaica</a></td>
<td>388</td>
<td>JAM</td>
<td id="JM">JM</td>
<td><a href="/wiki/ISO_3166-2:JM" title="ISO 3166-2:JM">ISO 3166-2:JM</a></td>
</tr>
<tr>
 
<td><a href="/wiki/Image:Flag_of_Japan.svg" class="image" title="Flag of Japan"><img alt="Flag of Japan" longdesc="/wiki/Image:Flag_of_Japan.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/9/9e/Flag_of_Japan.svg/22px-Flag_of_Japan.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Japan" title="Japan">Japan</a></td>
<td>392</td>
<td>JPN</td>
<td id="JP">JP</td>
<td><a href="/wiki/ISO_3166-2:JP" title="ISO 3166-2:JP">ISO 3166-2:JP</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Jersey.svg" class="image" title="Flag of Jersey"><img alt="Flag of Jersey" longdesc="/wiki/Image:Flag_of_Jersey.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/1/1c/Flag_of_Jersey.svg/22px-Flag_of_Jersey.svg.png" height="13" width="22"></a>&nbsp;<a href="/wiki/Jersey" title="Jersey">Jersey</a></td>
<td>832</td>
<td>JEY</td>
 
<td id="JE">JE</td>
<td><a href="/wiki/ISO_3166-2:JE" title="ISO 3166-2:JE">ISO 3166-2:JE</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Jordan.svg" class="image" title="Flag of Jordan"><img alt="Flag of Jordan" longdesc="/wiki/Image:Flag_of_Jordan.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/c/c0/Flag_of_Jordan.svg/22px-Flag_of_Jordan.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/Jordan" title="Jordan">Jordan</a></td>
<td>400</td>
<td>JOR</td>
<td id="JO">JO</td>
<td><a href="/w/index.php?title=ISO_3166-2:JO&amp;action=edit" class="new" title="ISO 3166-2:JO">ISO 3166-2:JO</a></td>
</tr>
 
<tr bgcolor="lightgray">
<td colspan="5"></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Kazakhstan.svg" class="image" title="Flag of Kazakhstan"><img alt="Flag of Kazakhstan" longdesc="/wiki/Image:Flag_of_Kazakhstan.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/d/d3/Flag_of_Kazakhstan.svg/22px-Flag_of_Kazakhstan.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/Kazakhstan" title="Kazakhstan">Kazakhstan</a></td>
<td>398</td>
<td>KAZ</td>
<td id="KZ">KZ</td>
<td><a href="/wiki/ISO_3166-2:KZ" title="ISO 3166-2:KZ">ISO 3166-2:KZ</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Kenya.svg" class="image" title="Flag of Kenya"><img alt="Flag of Kenya" longdesc="/wiki/Image:Flag_of_Kenya.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/4/49/Flag_of_Kenya.svg/22px-Flag_of_Kenya.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Kenya" title="Kenya">Kenya</a></td>
 
<td>404</td>
<td>KEN</td>
<td id="KE">KE</td>
<td><a href="/w/index.php?title=ISO_3166-2:KE&amp;action=edit" class="new" title="ISO 3166-2:KE">ISO 3166-2:KE</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Kiribati.svg" class="image" title="Flag of Kiribati"><img alt="Flag of Kiribati" longdesc="/wiki/Image:Flag_of_Kiribati.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/d/d3/Flag_of_Kiribati.svg/22px-Flag_of_Kiribati.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/Kiribati" title="Kiribati">Kiribati</a></td>
<td>296</td>
<td>KIR</td>
<td id="KI">KI</td>
 
<td><a href="/wiki/ISO_3166-2:KI" title="ISO 3166-2:KI">ISO 3166-2:KI</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_North_Korea.svg" class="image" title="Flag of North Korea"><img alt="Flag of North Korea" longdesc="/wiki/Image:Flag_of_North_Korea.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/5/51/Flag_of_North_Korea.svg/22px-Flag_of_North_Korea.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/North_Korea" title="North Korea">Korea, Democratic People's Republic of</a></td>
<td>408</td>
<td>PRK</td>
<td id="KP">KP</td>
<td><a href="/wiki/ISO_3166-2:KP" title="ISO 3166-2:KP">ISO 3166-2:KP</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_South_Korea.svg" class="image" title="Flag of South Korea"><img alt="Flag of South Korea" longdesc="/wiki/Image:Flag_of_South_Korea.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/0/09/Flag_of_South_Korea.svg/22px-Flag_of_South_Korea.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/South_Korea" title="South Korea">Korea, Republic of</a></td>
 
<td>410</td>
<td>KOR</td>
<td id="KR">KR</td>
<td><a href="/wiki/ISO_3166-2:KR" title="ISO 3166-2:KR">ISO 3166-2:KR</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Kuwait.svg" class="image" title="Flag of Kuwait"><img alt="Flag of Kuwait" longdesc="/wiki/Image:Flag_of_Kuwait.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/a/aa/Flag_of_Kuwait.svg/22px-Flag_of_Kuwait.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/Kuwait" title="Kuwait">Kuwait</a></td>
<td>414</td>
<td>KWT</td>
<td id="KW">KW</td>
 
<td><a href="/wiki/ISO_3166-2:KW" title="ISO 3166-2:KW">ISO 3166-2:KW</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Kyrgyzstan.svg" class="image" title="Flag of Kyrgyzstan"><img alt="Flag of Kyrgyzstan" longdesc="/wiki/Image:Flag_of_Kyrgyzstan.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/c/c7/Flag_of_Kyrgyzstan.svg/22px-Flag_of_Kyrgyzstan.svg.png" height="13" width="22"></a>&nbsp;<a href="/wiki/Kyrgyzstan" title="Kyrgyzstan">Kyrgyzstan</a></td>
<td>417</td>
<td>KGZ</td>
<td id="KG">KG</td>
<td><a href="/wiki/ISO_3166-2:KG" title="ISO 3166-2:KG">ISO 3166-2:KG</a></td>
</tr>
<tr bgcolor="lightgray">
<td colspan="5"></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Laos.svg" class="image" title="Flag of Laos"><img alt="Flag of Laos" longdesc="/wiki/Image:Flag_of_Laos.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/5/56/Flag_of_Laos.svg/22px-Flag_of_Laos.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Laos" title="Laos">Lao People's Democratic Republic</a></td>
<td>418</td>
<td>LAO</td>
<td id="LA">LA</td>
<td><a href="/wiki/ISO_3166-2:LA" title="ISO 3166-2:LA">ISO 3166-2:LA</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Latvia.svg" class="image" title="Flag of Latvia"><img alt="Flag of Latvia" longdesc="/wiki/Image:Flag_of_Latvia.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/8/84/Flag_of_Latvia.svg/22px-Flag_of_Latvia.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/Latvia" title="Latvia">Latvia</a></td>
<td>428</td>
 
<td>LVA</td>
<td id="LV">LV</td>
<td><a href="/w/index.php?title=ISO_3166-2:LV&amp;action=edit" class="new" title="ISO 3166-2:LV">ISO 3166-2:LV</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Lebanon.svg" class="image" title="Flag of Lebanon"><img alt="Flag of Lebanon" longdesc="/wiki/Image:Flag_of_Lebanon.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/5/59/Flag_of_Lebanon.svg/22px-Flag_of_Lebanon.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Lebanon" title="Lebanon">Lebanon</a></td>
<td>422</td>
<td>LBN</td>
<td id="LB">LB</td>
<td><a href="/wiki/ISO_3166-2:LB" title="ISO 3166-2:LB">ISO 3166-2:LB</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Lesotho.svg" class="image" title="Flag of Lesotho"><img alt="Flag of Lesotho" longdesc="/wiki/Image:Flag_of_Lesotho.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/4/4a/Flag_of_Lesotho.svg/22px-Flag_of_Lesotho.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Lesotho" title="Lesotho">Lesotho</a></td>
<td>426</td>
<td>LSO</td>
<td id="LS">LS</td>
<td><a href="/w/index.php?title=ISO_3166-2:LS&amp;action=edit" class="new" title="ISO 3166-2:LS">ISO 3166-2:LS</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Liberia.svg" class="image" title="Flag of Liberia"><img alt="Flag of Liberia" longdesc="/wiki/Image:Flag_of_Liberia.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/b/b8/Flag_of_Liberia.svg/22px-Flag_of_Liberia.svg.png" height="12" width="22"></a>&nbsp;<a href="/wiki/Liberia" title="Liberia">Liberia</a></td>
<td>430</td>
 
<td>LBR</td>
<td id="LR">LR</td>
<td><a href="/wiki/ISO_3166-2:LR" title="ISO 3166-2:LR">ISO 3166-2:LR</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Libya.svg" class="image" title="Flag of Libya"><img alt="Flag of Libya" longdesc="/wiki/Image:Flag_of_Libya.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/0/05/Flag_of_Libya.svg/22px-Flag_of_Libya.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/Libya" title="Libya">Libyan Arab Jamahiriya</a></td>
<td>434</td>
<td>LBY</td>
<td id="LY">LY</td>
<td><a href="/wiki/ISO_3166-2:LY" title="ISO 3166-2:LY">ISO 3166-2:LY</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Liechtenstein.svg" class="image" title="Flag of Liechtenstein"><img alt="Flag of Liechtenstein" longdesc="/wiki/Image:Flag_of_Liechtenstein.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/4/47/Flag_of_Liechtenstein.svg/22px-Flag_of_Liechtenstein.svg.png" height="13" width="22"></a>&nbsp;<a href="/wiki/Liechtenstein" title="Liechtenstein">Liechtenstein</a></td>
<td>438</td>
<td>LIE</td>
<td id="LI">LI</td>
<td><a href="/wiki/ISO_3166-2:LI" title="ISO 3166-2:LI">ISO 3166-2:LI</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Lithuania.svg" class="image" title="Flag of Lithuania"><img alt="Flag of Lithuania" longdesc="/wiki/Image:Flag_of_Lithuania.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/1/11/Flag_of_Lithuania.svg/22px-Flag_of_Lithuania.svg.png" height="13" width="22"></a>&nbsp;<a href="/wiki/Lithuania" title="Lithuania">Lithuania</a></td>
<td>440</td>
 
<td>LTU</td>
<td id="LT">LT</td>
<td><a href="/w/index.php?title=ISO_3166-2:LT&amp;action=edit" class="new" title="ISO 3166-2:LT">ISO 3166-2:LT</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Luxembourg.svg" class="image" title="Flag of Luxembourg"><img alt="Flag of Luxembourg" longdesc="/wiki/Image:Flag_of_Luxembourg.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/d/da/Flag_of_Luxembourg.svg/22px-Flag_of_Luxembourg.svg.png" height="13" width="22"></a>&nbsp;<a href="/wiki/Luxembourg" title="Luxembourg">Luxembourg</a></td>
<td>442</td>
<td>LUX</td>
<td id="LU">LU</td>
<td><a href="/wiki/ISO_3166-2:LU" title="ISO 3166-2:LU">ISO 3166-2:LU</a></td>
 
</tr>
<tr bgcolor="lightgray">
<td colspan="5"></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Macau.svg" class="image" title="Flag of Macau"><img alt="Flag of Macau" longdesc="/wiki/Image:Flag_of_Macau.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/6/63/Flag_of_Macau.svg/22px-Flag_of_Macau.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Macau" title="Macau">Macao</a></td>
<td>446</td>
<td>MAC</td>
<td id="MO">MO</td>
<td><a href="/wiki/ISO_3166-2:MO" title="ISO 3166-2:MO">ISO 3166-2:MO</a></td>
</tr>
<tr>
 
<td><a href="/wiki/Image:Flag_of_Macedonia.svg" class="image" title="Flag of the Republic of Macedonia"><img alt="Flag of the Republic of Macedonia" longdesc="/wiki/Image:Flag_of_Macedonia.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/f/f8/Flag_of_Macedonia.svg/22px-Flag_of_Macedonia.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/Republic_of_Macedonia" title="Republic of Macedonia">Macedonia, the former Yugoslav Republic of</a></td>
<td>807</td>
<td>MKD</td>
<td id="MK">MK</td>
<td><a href="/wiki/ISO_3166-2:MK" title="ISO 3166-2:MK">ISO 3166-2:MK</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Madagascar.svg" class="image" title="Flag of Madagascar"><img alt="Flag of Madagascar" longdesc="/wiki/Image:Flag_of_Madagascar.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/b/bc/Flag_of_Madagascar.svg/22px-Flag_of_Madagascar.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Madagascar" title="Madagascar">Madagascar</a></td>
<td>450</td>
<td>MDG</td>
 
<td id="MG">MG</td>
<td><a href="/w/index.php?title=ISO_3166-2:MG&amp;action=edit" class="new" title="ISO 3166-2:MG">ISO 3166-2:MG</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Malawi.svg" class="image" title="Flag of Malawi"><img alt="Flag of Malawi" longdesc="/wiki/Image:Flag_of_Malawi.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/d/d1/Flag_of_Malawi.svg/22px-Flag_of_Malawi.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Malawi" title="Malawi">Malawi</a></td>
<td>454</td>
<td>MWI</td>
<td id="MW">MW</td>
<td><a href="/wiki/ISO_3166-2:MW" title="ISO 3166-2:MW">ISO 3166-2:MW</a></td>
</tr>
 
<tr>
<td><a href="/wiki/Image:Flag_of_Malaysia.svg" class="image" title="Flag of Malaysia"><img alt="Flag of Malaysia" longdesc="/wiki/Image:Flag_of_Malaysia.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/6/66/Flag_of_Malaysia.svg/22px-Flag_of_Malaysia.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/Malaysia" title="Malaysia">Malaysia</a></td>
<td>458</td>
<td>MYS</td>
<td id="MY">MY</td>
<td><a href="/wiki/ISO_3166-2:MY" title="ISO 3166-2:MY">ISO 3166-2:MY</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Maldives.svg" class="image" title="Flag of the Maldives"><img alt="Flag of the Maldives" longdesc="/wiki/Image:Flag_of_Maldives.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/0/0f/Flag_of_Maldives.svg/22px-Flag_of_Maldives.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Maldives" title="Maldives">Maldives</a></td>
<td>462</td>
 
<td>MDV</td>
<td id="MV">MV</td>
<td><a href="/wiki/ISO_3166-2:MV" title="ISO 3166-2:MV">ISO 3166-2:MV</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Mali.svg" class="image" title="Flag of Mali"><img alt="Flag of Mali" longdesc="/wiki/Image:Flag_of_Mali.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/9/92/Flag_of_Mali.svg/22px-Flag_of_Mali.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Mali" title="Mali">Mali</a></td>
<td>466</td>
<td>MLI</td>
<td id="ML">ML</td>
<td><a href="/w/index.php?title=ISO_3166-2:ML&amp;action=edit" class="new" title="ISO 3166-2:ML">ISO 3166-2:ML</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Malta.svg" class="image" title="Flag of Malta"><img alt="Flag of Malta" longdesc="/wiki/Image:Flag_of_Malta.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/7/73/Flag_of_Malta.svg/22px-Flag_of_Malta.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Malta" title="Malta">Malta</a></td>
<td>470</td>
<td>MLT</td>
<td id="MT">MT</td>
<td><a href="/w/index.php?title=ISO_3166-2:MT&amp;action=edit" class="new" title="ISO 3166-2:MT">ISO 3166-2:MT</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_the_Marshall_Islands.svg" class="image" title="Flag of the Marshall Islands"><img alt="Flag of the Marshall Islands" longdesc="/wiki/Image:Flag_of_the_Marshall_Islands.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/2/2e/Flag_of_the_Marshall_Islands.svg/22px-Flag_of_the_Marshall_Islands.svg.png" height="12" width="22"></a>&nbsp;<a href="/wiki/Marshall_Islands" title="Marshall Islands">Marshall Islands</a></td>
<td>584</td>
 
<td>MHL</td>
<td id="MH">MH</td>
<td><a href="/w/index.php?title=ISO_3166-2:MH&amp;action=edit" class="new" title="ISO 3166-2:MH">ISO 3166-2:MH</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_France.svg" class="image" title="Flag of Martinique"><img alt="Flag of Martinique" longdesc="/wiki/Image:Flag_of_France.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Flag_of_France.svg/22px-Flag_of_France.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Martinique" title="Martinique">Martinique</a></td>
<td>474</td>
<td>MTQ</td>
<td id="MQ">MQ</td>
<td><a href="/w/index.php?title=ISO_3166-2:MQ&amp;action=edit" class="new" title="ISO 3166-2:MQ">ISO 3166-2:MQ</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Mauritania.svg" class="image" title="Flag of Mauritania"><img alt="Flag of Mauritania" longdesc="/wiki/Image:Flag_of_Mauritania.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/4/43/Flag_of_Mauritania.svg/22px-Flag_of_Mauritania.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Mauritania" title="Mauritania">Mauritania</a></td>
<td>478</td>
<td>MRT</td>
<td id="MR">MR</td>
<td><a href="/w/index.php?title=ISO_3166-2:MR&amp;action=edit" class="new" title="ISO 3166-2:MR">ISO 3166-2:MR</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Mauritius.svg" class="image" title="Flag of Mauritius"><img alt="Flag of Mauritius" longdesc="/wiki/Image:Flag_of_Mauritius.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/7/77/Flag_of_Mauritius.svg/22px-Flag_of_Mauritius.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Mauritius" title="Mauritius">Mauritius</a></td>
<td>480</td>
 
<td>MUS</td>
<td id="MU">MU</td>
<td><a href="/wiki/ISO_3166-2:MU" title="ISO 3166-2:MU">ISO 3166-2:MU</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_France.svg" class="image" title="Flag of Mayotte"><img alt="Flag of Mayotte" longdesc="/wiki/Image:Flag_of_France.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Flag_of_France.svg/22px-Flag_of_France.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Mayotte" title="Mayotte">Mayotte</a></td>
<td>175</td>
<td>MYT</td>
<td id="YT">YT</td>
<td><a href="/w/index.php?title=ISO_3166-2:YT&amp;action=edit" class="new" title="ISO 3166-2:YT">ISO 3166-2:YT</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Mexico.svg" class="image" title="Flag of Mexico"><img alt="Flag of Mexico" longdesc="/wiki/Image:Flag_of_Mexico.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/f/fc/Flag_of_Mexico.svg/22px-Flag_of_Mexico.svg.png" height="13" width="22"></a>&nbsp;<a href="/wiki/Mexico" title="Mexico">Mexico</a></td>
<td>484</td>
<td>MEX</td>
<td id="MX">MX</td>
<td><a href="/wiki/ISO_3166-2:MX" title="ISO 3166-2:MX">ISO 3166-2:MX</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Micronesia.svg" class="image" title="Flag of the Federated States of Micronesia"><img alt="Flag of the Federated States of Micronesia" longdesc="/wiki/Image:Flag_of_Micronesia.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/e/ed/Flag_of_Micronesia.svg/22px-Flag_of_Micronesia.svg.png" height="12" width="22"></a>&nbsp;<a href="/wiki/Federated_States_of_Micronesia" title="Federated States of Micronesia">Micronesia, Federated States of</a></td>
<td>583</td>
 
<td>FSM</td>
<td id="FM">FM</td>
<td><a href="/w/index.php?title=ISO_3166-2:FM&amp;action=edit" class="new" title="ISO 3166-2:FM">ISO 3166-2:FM</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Moldova.svg" class="image" title="Flag of Moldova"><img alt="Flag of Moldova" longdesc="/wiki/Image:Flag_of_Moldova.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/2/27/Flag_of_Moldova.svg/22px-Flag_of_Moldova.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/Moldova" title="Moldova">Moldova, Republic of</a></td>
<td>498</td>
<td>MDA</td>
<td id="MD">MD</td>
<td><a href="/wiki/ISO_3166-2:MD" title="ISO 3166-2:MD">ISO 3166-2:MD</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Monaco.svg" class="image" title="Flag of Monaco"><img alt="Flag of Monaco" longdesc="/wiki/Image:Flag_of_Monaco.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/e/ea/Flag_of_Monaco.svg/22px-Flag_of_Monaco.svg.png" height="18" width="22"></a>&nbsp;<a href="/wiki/Monaco" title="Monaco">Monaco</a></td>
<td>492</td>
<td>MCO</td>
<td id="MC">MC</td>
<td><a href="/w/index.php?title=ISO_3166-2:MC&amp;action=edit" class="new" title="ISO 3166-2:MC">ISO 3166-2:MC</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Mongolia.svg" class="image" title="Flag of Mongolia"><img alt="Flag of Mongolia" longdesc="/wiki/Image:Flag_of_Mongolia.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/4/4c/Flag_of_Mongolia.svg/22px-Flag_of_Mongolia.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/Mongolia" title="Mongolia">Mongolia</a></td>
<td>496</td>
 
<td>MNG</td>
<td id="MN">MN</td>
<td><a href="/wiki/ISO_3166-2:MN" title="ISO 3166-2:MN">ISO 3166-2:MN</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Montenegro.svg" class="image" title="Flag of Montenegro"><img alt="Flag of Montenegro" longdesc="/wiki/Image:Flag_of_Montenegro.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/6/64/Flag_of_Montenegro.svg/22px-Flag_of_Montenegro.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/Montenegro" title="Montenegro">Montenegro</a></td>
<td>499</td>
<td>MNE</td>
<td id="ME">ME</td>
<td><a href="/wiki/ISO_3166-2:ME" title="ISO 3166-2:ME">ISO 3166-2:ME</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Montserrat.svg" class="image" title="Flag of Montserrat"><img alt="Flag of Montserrat" longdesc="/wiki/Image:Flag_of_Montserrat.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/d/d0/Flag_of_Montserrat.svg/22px-Flag_of_Montserrat.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/Montserrat" title="Montserrat">Montserrat</a></td>
<td>500</td>
<td>MSR</td>
<td id="MS">MS</td>
<td><a href="/w/index.php?title=ISO_3166-2:MS&amp;action=edit" class="new" title="ISO 3166-2:MS">ISO 3166-2:MS</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Morocco.svg" class="image" title="Flag of Morocco"><img alt="Flag of Morocco" longdesc="/wiki/Image:Flag_of_Morocco.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/2/2c/Flag_of_Morocco.svg/22px-Flag_of_Morocco.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Morocco" title="Morocco">Morocco</a></td>
<td>504</td>
 
<td>MAR</td>
<td id="MA">MA</td>
<td><a href="/wiki/ISO_3166-2:MA" title="ISO 3166-2:MA">ISO 3166-2:MA</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Mozambique.svg" class="image" title="Flag of Mozambique"><img alt="Flag of Mozambique" longdesc="/wiki/Image:Flag_of_Mozambique.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/d/d0/Flag_of_Mozambique.svg/22px-Flag_of_Mozambique.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Mozambique" title="Mozambique">Mozambique</a></td>
<td>508</td>
<td>MOZ</td>
<td id="MZ">MZ</td>
<td><a href="/w/index.php?title=ISO_3166-2:MZ&amp;action=edit" class="new" title="ISO 3166-2:MZ">ISO 3166-2:MZ</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Myanmar.svg" class="image" title="Flag of Myanmar"><img alt="Flag of Myanmar" longdesc="/wiki/Image:Flag_of_Myanmar.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/8/8c/Flag_of_Myanmar.svg/22px-Flag_of_Myanmar.svg.png" height="12" width="22"></a>&nbsp;<a href="/wiki/Myanmar" title="Myanmar">Myanmar</a></td>
<td>104</td>
<td>MMR</td>
<td id="MM">MM</td>
<td><a href="/w/index.php?title=ISO_3166-2:MM&amp;action=edit" class="new" title="ISO 3166-2:MM">ISO 3166-2:MM</a></td>
</tr>
<tr bgcolor="lightgray">
<td colspan="5"></td>
</tr>
<tr>
 
<td><a href="/wiki/Image:Flag_of_Namibia.svg" class="image" title="Flag of Namibia"><img alt="Flag of Namibia" longdesc="/wiki/Image:Flag_of_Namibia.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/0/00/Flag_of_Namibia.svg/22px-Flag_of_Namibia.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Namibia" title="Namibia">Namibia</a></td>
<td>516</td>
<td>NAM</td>
<td id="NA">NA</td>
<td><a href="/w/index.php?title=ISO_3166-2:NA&amp;action=edit" class="new" title="ISO 3166-2:NA">ISO 3166-2:NA</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Nauru.svg" class="image" title="Flag of Nauru"><img alt="Flag of Nauru" longdesc="/wiki/Image:Flag_of_Nauru.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/3/30/Flag_of_Nauru.svg/22px-Flag_of_Nauru.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/Nauru" title="Nauru">Nauru</a></td>
<td>520</td>
<td>NRU</td>
 
<td id="NR">NR</td>
<td><a href="/wiki/ISO_3166-2:NR" title="ISO 3166-2:NR">ISO 3166-2:NR</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Nepal.svg" class="image" title="Flag of Nepal"><img alt="Flag of Nepal" longdesc="/wiki/Image:Flag_of_Nepal.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/9/9b/Flag_of_Nepal.svg/16px-Flag_of_Nepal.svg.png" height="20" width="16"></a>&nbsp;<a href="/wiki/Nepal" title="Nepal">Nepal</a></td>
<td>524</td>
<td>NPL</td>
<td id="NP">NP</td>
<td><a href="/w/index.php?title=ISO_3166-2:NP&amp;action=edit" class="new" title="ISO 3166-2:NP">ISO 3166-2:NP</a></td>
</tr>
 
<tr>
<td><a href="/wiki/Image:Flag_of_the_Netherlands.svg" class="image" title="Flag of the Netherlands"><img alt="Flag of the Netherlands" longdesc="/wiki/Image:Flag_of_the_Netherlands.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/2/20/Flag_of_the_Netherlands.svg/22px-Flag_of_the_Netherlands.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Netherlands" title="Netherlands">Netherlands</a></td>
<td>528</td>
<td>NLD</td>
<td id="NL">NL</td>
<td><a href="/wiki/ISO_3166-2:NL" title="ISO 3166-2:NL">ISO 3166-2:NL</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_the_Netherlands_Antilles.svg" class="image" title="Flag of the Netherlands Antilles"><img alt="Flag of the Netherlands Antilles" longdesc="/wiki/Image:Flag_of_the_Netherlands_Antilles.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/d/d5/Flag_of_the_Netherlands_Antilles.svg/22px-Flag_of_the_Netherlands_Antilles.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Netherlands_Antilles" title="Netherlands Antilles">Netherlands Antilles</a></td>
<td>530</td>
 
<td>ANT</td>
<td id="AN">AN</td>
<td><a href="/w/index.php?title=ISO_3166-2:AN&amp;action=edit" class="new" title="ISO 3166-2:AN">ISO 3166-2:AN</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_France.svg" class="image" title="Flag of New Caledonia"><img alt="Flag of New Caledonia" longdesc="/wiki/Image:Flag_of_France.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Flag_of_France.svg/22px-Flag_of_France.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/New_Caledonia" title="New Caledonia">New Caledonia</a></td>
<td>540</td>
<td>NCL</td>
<td id="NC">NC</td>
<td><a href="/w/index.php?title=ISO_3166-2:NC&amp;action=edit" class="new" title="ISO 3166-2:NC">ISO 3166-2:NC</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_New_Zealand.svg" class="image" title="Flag of New Zealand"><img alt="Flag of New Zealand" longdesc="/wiki/Image:Flag_of_New_Zealand.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/3/3e/Flag_of_New_Zealand.svg/22px-Flag_of_New_Zealand.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/New_Zealand" title="New Zealand">New Zealand</a></td>
<td>554</td>
<td>NZL</td>
<td id="NZ">NZ</td>
<td><a href="/wiki/ISO_3166-2:NZ" title="ISO 3166-2:NZ">ISO 3166-2:NZ</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Nicaragua.svg" class="image" title="Flag of Nicaragua"><img alt="Flag of Nicaragua" longdesc="/wiki/Image:Flag_of_Nicaragua.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/1/19/Flag_of_Nicaragua.svg/22px-Flag_of_Nicaragua.svg.png" height="13" width="22"></a>&nbsp;<a href="/wiki/Nicaragua" title="Nicaragua">Nicaragua</a></td>
<td>558</td>
 
<td>NIC</td>
<td id="NI">NI</td>
<td><a href="/wiki/ISO_3166-2:NI" title="ISO 3166-2:NI">ISO 3166-2:NI</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Niger.svg" class="image" title="Flag of Niger"><img alt="Flag of Niger" longdesc="/wiki/Image:Flag_of_Niger.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/f/f4/Flag_of_Niger.svg/22px-Flag_of_Niger.svg.png" height="19" width="22"></a>&nbsp;<a href="/wiki/Niger" title="Niger">Niger</a></td>
<td>562</td>
<td>NER</td>
<td id="NE">NE</td>
<td><a href="/w/index.php?title=ISO_3166-2:NE&amp;action=edit" class="new" title="ISO 3166-2:NE">ISO 3166-2:NE</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Nigeria.svg" class="image" title="Flag of Nigeria"><img alt="Flag of Nigeria" longdesc="/wiki/Image:Flag_of_Nigeria.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/7/79/Flag_of_Nigeria.svg/22px-Flag_of_Nigeria.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/Nigeria" title="Nigeria">Nigeria</a></td>
<td>566</td>
<td>NGA</td>
<td id="NG">NG</td>
<td><a href="/wiki/ISO_3166-2:NG" title="ISO 3166-2:NG">ISO 3166-2:NG</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Niue.svg" class="image" title="Flag of Niue"><img alt="Flag of Niue" longdesc="/wiki/Image:Flag_of_Niue.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/0/01/Flag_of_Niue.svg/22px-Flag_of_Niue.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/Niue" title="Niue">Niue</a></td>
<td>570</td>
 
<td>NIU</td>
<td id="NU">NU</td>
<td><a href="/w/index.php?title=ISO_3166-2:NU&amp;action=edit" class="new" title="ISO 3166-2:NU">ISO 3166-2:NU</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Norfolk_Island.svg" class="image" title="Flag of Norfolk Island"><img alt="Flag of Norfolk Island" longdesc="/wiki/Image:Flag_of_Norfolk_Island.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/4/48/Flag_of_Norfolk_Island.svg/22px-Flag_of_Norfolk_Island.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/Norfolk_Island" title="Norfolk Island">Norfolk Island</a></td>
<td>574</td>
<td>NFK</td>
<td id="NF">NF</td>
<td><a href="/w/index.php?title=ISO_3166-2:NF&amp;action=edit" class="new" title="ISO 3166-2:NF">ISO 3166-2:NF</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_the_Northern_Mariana_Islands.svg" class="image" title="Flag of the Northern Mariana Islands"><img alt="Flag of the Northern Mariana Islands" longdesc="/wiki/Image:Flag_of_the_Northern_Mariana_Islands.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/e/e0/Flag_of_the_Northern_Mariana_Islands.svg/22px-Flag_of_the_Northern_Mariana_Islands.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/Northern_Mariana_Islands" title="Northern Mariana Islands">Northern Mariana Islands</a></td>
<td>580</td>
<td>MNP</td>
<td id="MP">MP</td>
<td><a href="/w/index.php?title=ISO_3166-2:MP&amp;action=edit" class="new" title="ISO 3166-2:MP">ISO 3166-2:MP</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Norway.svg" class="image" title="Flag of Norway"><img alt="Flag of Norway" longdesc="/wiki/Image:Flag_of_Norway.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/d/d9/Flag_of_Norway.svg/22px-Flag_of_Norway.svg.png" height="16" width="22"></a>&nbsp;<a href="/wiki/Norway" title="Norway">Norway</a></td>
<td>578</td>
 
<td>NOR</td>
<td id="NO">NO</td>
<td><a href="/wiki/ISO_3166-2:NO" title="ISO 3166-2:NO">ISO 3166-2:NO</a></td>
</tr>
<tr bgcolor="lightgray">
<td colspan="5"></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Oman.svg" class="image" title="Flag of Oman"><img alt="Flag of Oman" longdesc="/wiki/Image:Flag_of_Oman.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Flag_of_Oman.svg/22px-Flag_of_Oman.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/Oman" title="Oman">Oman</a></td>
<td>512</td>
<td>OMN</td>
 
<td id="OM">OM</td>
<td><a href="/w/index.php?title=ISO_3166-2:OM&amp;action=edit" class="new" title="ISO 3166-2:OM">ISO 3166-2:OM</a></td>
</tr>
<tr bgcolor="lightgray">
<td colspan="5"></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Pakistan.svg" class="image" title="Flag of Pakistan"><img alt="Flag of Pakistan" longdesc="/wiki/Image:Flag_of_Pakistan.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Flag_of_Pakistan.svg/22px-Flag_of_Pakistan.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Pakistan" title="Pakistan">Pakistan</a></td>
<td>586</td>
<td>PAK</td>
<td id="PK">PK</td>
 
<td><a href="/w/index.php?title=ISO_3166-2:PK&amp;action=edit" class="new" title="ISO 3166-2:PK">ISO 3166-2:PK</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Palau.svg" class="image" title="Flag of Palau"><img alt="Flag of Palau" longdesc="/wiki/Image:Flag_of_Palau.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/4/48/Flag_of_Palau.svg/22px-Flag_of_Palau.svg.png" height="14" width="22"></a>&nbsp;<a href="/wiki/Palau" title="Palau">Palau</a></td>
<td>585</td>
<td>PLW</td>
<td id="PW">PW</td>
<td><a href="/wiki/ISO_3166-2:PW" title="ISO 3166-2:PW">ISO 3166-2:PW</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Palestine.svg" class="image" title="Palestinian flag"><img alt="Palestinian flag" longdesc="/wiki/Image:Flag_of_Palestine.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/0/00/Flag_of_Palestine.svg/22px-Flag_of_Palestine.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/Palestinian_territories" title="Palestinian territories">Palestinian Territory, Occupied</a></td>
 
<td>275</td>
<td>PSE</td>
<td id="PS">PS</td>
<td><a href="/w/index.php?title=ISO_3166-2:PS&amp;action=edit" class="new" title="ISO 3166-2:PS">ISO 3166-2:PS</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Panama.svg" class="image" title="Flag of Panama"><img alt="Flag of Panama" longdesc="/wiki/Image:Flag_of_Panama.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/a/ab/Flag_of_Panama.svg/22px-Flag_of_Panama.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Panama" title="Panama">Panama</a></td>
<td>591</td>
<td>PAN</td>
<td id="PA">PA</td>
 
<td><a href="/w/index.php?title=ISO_3166-2:PA&amp;action=edit" class="new" title="ISO 3166-2:PA">ISO 3166-2:PA</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Papua_New_Guinea.svg" class="image" title="Flag of Papua New Guinea"><img alt="Flag of Papua New Guinea" longdesc="/wiki/Image:Flag_of_Papua_New_Guinea.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/e/e3/Flag_of_Papua_New_Guinea.svg/22px-Flag_of_Papua_New_Guinea.svg.png" height="17" width="22"></a>&nbsp;<a href="/wiki/Papua_New_Guinea" title="Papua New Guinea">Papua New Guinea</a></td>
<td>598</td>
<td>PNG</td>
<td id="PG">PG</td>
<td><a href="/w/index.php?title=ISO_3166-2:PG&amp;action=edit" class="new" title="ISO 3166-2:PG">ISO 3166-2:PG</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Paraguay.svg" class="image" title="Flag of Paraguay"><img alt="Flag of Paraguay" longdesc="/wiki/Image:Flag_of_Paraguay.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/2/27/Flag_of_Paraguay.svg/22px-Flag_of_Paraguay.svg.png" height="13" width="22"></a>&nbsp;<a href="/wiki/Paraguay" title="Paraguay">Paraguay</a></td>
 
<td>600</td>
<td>PRY</td>
<td id="PY">PY</td>
<td><a href="/w/index.php?title=ISO_3166-2:PY&amp;action=edit" class="new" title="ISO 3166-2:PY">ISO 3166-2:PY</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Peru.svg" class="image" title="Flag of Peru"><img alt="Flag of Peru" longdesc="/wiki/Image:Flag_of_Peru.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/c/cf/Flag_of_Peru.svg/22px-Flag_of_Peru.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Peru" title="Peru">Peru</a></td>
<td>604</td>
<td>PER</td>
<td id="PE">PE</td>
 
<td><a href="/wiki/ISO_3166-2:PE" title="ISO 3166-2:PE">ISO 3166-2:PE</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_the_Philippines.svg" class="image" title="Flag of the Philippines"><img alt="Flag of the Philippines" longdesc="/wiki/Image:Flag_of_the_Philippines.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/9/99/Flag_of_the_Philippines.svg/22px-Flag_of_the_Philippines.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/Philippines" title="Philippines">Philippines</a></td>
<td>608</td>
<td>PHL</td>
<td id="PH">PH</td>
<td><a href="/wiki/ISO_3166-2:PH" title="ISO 3166-2:PH">ISO 3166-2:PH</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_the_Pitcairn_Islands.svg" class="image" title="Flag of the Pitcairn Islands"><img alt="Flag of the Pitcairn Islands" longdesc="/wiki/Image:Flag_of_the_Pitcairn_Islands.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/8/88/Flag_of_the_Pitcairn_Islands.svg/22px-Flag_of_the_Pitcairn_Islands.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/Pitcairn_Islands" title="Pitcairn Islands">Pitcairn</a></td>
 
<td>612</td>
<td>PCN</td>
<td id="PN">PN</td>
<td><a href="/w/index.php?title=ISO_3166-2:PN&amp;action=edit" class="new" title="ISO 3166-2:PN">ISO 3166-2:PN</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Poland.svg" class="image" title="Flag of Poland"><img alt="Flag of Poland" longdesc="/wiki/Image:Flag_of_Poland.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/1/12/Flag_of_Poland.svg/22px-Flag_of_Poland.svg.png" height="14" width="22"></a>&nbsp;<a href="/wiki/Poland" title="Poland">Poland</a></td>
<td>616</td>
<td>POL</td>
<td id="PL">PL</td>
 
<td><a href="/wiki/ISO_3166-2:PL" title="ISO 3166-2:PL">ISO 3166-2:PL</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Portugal.svg" class="image" title="Flag of Portugal"><img alt="Flag of Portugal" longdesc="/wiki/Image:Flag_of_Portugal.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/5/5c/Flag_of_Portugal.svg/22px-Flag_of_Portugal.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Portugal" title="Portugal">Portugal</a></td>
<td>620</td>
<td>PRT</td>
<td id="PT">PT</td>
<td><a href="/wiki/ISO_3166-2:PT" title="ISO 3166-2:PT">ISO 3166-2:PT</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Puerto_Rico.svg" class="image" title="Flag of Puerto Rico"><img alt="Flag of Puerto Rico" longdesc="/wiki/Image:Flag_of_Puerto_Rico.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/2/28/Flag_of_Puerto_Rico.svg/22px-Flag_of_Puerto_Rico.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Puerto_Rico" title="Puerto Rico">Puerto Rico</a></td>
 
<td>630</td>
<td>PRI</td>
<td id="PR">PR</td>
<td><a href="/w/index.php?title=ISO_3166-2:PR&amp;action=edit" class="new" title="ISO 3166-2:PR">ISO 3166-2:PR</a></td>
</tr>
<tr bgcolor="lightgray">
<td colspan="5"></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Qatar.svg" class="image" title="Flag of Qatar"><img alt="Flag of Qatar" longdesc="/wiki/Image:Flag_of_Qatar.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/6/65/Flag_of_Qatar.svg/22px-Flag_of_Qatar.svg.png" height="9" width="22"></a>&nbsp;<a href="/wiki/Qatar" title="Qatar">Qatar</a></td>
<td>634</td>
 
<td>QAT</td>
<td id="QA">QA</td>
<td><a href="/w/index.php?title=ISO_3166-2:QA&amp;action=edit" class="new" title="ISO 3166-2:QA">ISO 3166-2:QA</a></td>
</tr>
<tr bgcolor="lightgray">
<td colspan="5"></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_France.svg" class="image" title="Flag of Réunion"><img alt="Flag of Réunion" longdesc="/wiki/Image:Flag_of_France.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Flag_of_France.svg/22px-Flag_of_France.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/R%C3%A9union" title="Réunion">Réunion</a></td>
<td>638</td>
<td>REU</td>
 
<td id="RE">RE</td>
<td><a href="/w/index.php?title=ISO_3166-2:RE&amp;action=edit" class="new" title="ISO 3166-2:RE">ISO 3166-2:RE</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Romania.svg" class="image" title="Flag of Romania"><img alt="Flag of Romania" longdesc="/wiki/Image:Flag_of_Romania.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/7/73/Flag_of_Romania.svg/22px-Flag_of_Romania.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Romania" title="Romania">Romania</a></td>
<td>642</td>
<td>ROU</td>
<td id="RO">RO</td>
<td><a href="/wiki/ISO_3166-2:RO" title="ISO 3166-2:RO">ISO 3166-2:RO</a></td>
</tr>
 
<tr>
<td><a href="/wiki/Image:Flag_of_Russia.svg" class="image" title="Flag of Russia"><img alt="Flag of Russia" longdesc="/wiki/Image:Flag_of_Russia.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/f/f3/Flag_of_Russia.svg/22px-Flag_of_Russia.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Russia" title="Russia">Russian Federation</a></td>
<td>643</td>
<td>RUS</td>
<td id="RU">RU</td>
<td><a href="/wiki/ISO_3166-2:RU" title="ISO 3166-2:RU">ISO 3166-2:RU</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Rwanda.svg" class="image" title="Flag of Rwanda"><img alt="Flag of Rwanda" longdesc="/wiki/Image:Flag_of_Rwanda.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/1/17/Flag_of_Rwanda.svg/22px-Flag_of_Rwanda.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Rwanda" title="Rwanda">Rwanda</a></td>
<td>646</td>
 
<td>RWA</td>
<td id="RW">RW</td>
<td><a href="/wiki/ISO_3166-2:RW" title="ISO 3166-2:RW">ISO 3166-2:RW</a></td>
</tr>
<tr bgcolor="lightgray">
<td colspan="5"></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Saint_Helena.svg" class="image" title="Flag of Saint Helena"><img alt="Flag of Saint Helena" longdesc="/wiki/Image:Flag_of_Saint_Helena.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/0/00/Flag_of_Saint_Helena.svg/22px-Flag_of_Saint_Helena.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/Saint_Helena" title="Saint Helena">Saint Helena</a></td>
<td>654</td>
<td>SHN</td>
 
<td id="SH">SH</td>
<td><a href="/w/index.php?title=ISO_3166-2:SH&amp;action=edit" class="new" title="ISO 3166-2:SH">ISO 3166-2:SH</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Saint_Kitts_and_Nevis.svg" class="image" title="Flag of Saint Kitts and Nevis"><img alt="Flag of Saint Kitts and Nevis" longdesc="/wiki/Image:Flag_of_Saint_Kitts_and_Nevis.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/f/fe/Flag_of_Saint_Kitts_and_Nevis.svg/22px-Flag_of_Saint_Kitts_and_Nevis.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Saint_Kitts_and_Nevis" title="Saint Kitts and Nevis">Saint Kitts and Nevis</a></td>
<td>659</td>
<td>KNA</td>
<td id="KN">KN</td>
<td><a href="/wiki/ISO_3166-2:KN" title="ISO 3166-2:KN">ISO 3166-2:KN</a></td>
</tr>
 
<tr>
<td><a href="/wiki/Image:Flag_of_Saint_Lucia.svg" class="image" title="Flag of Saint Lucia"><img alt="Flag of Saint Lucia" longdesc="/wiki/Image:Flag_of_Saint_Lucia.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Flag_of_Saint_Lucia.svg/22px-Flag_of_Saint_Lucia.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/Saint_Lucia" title="Saint Lucia">Saint Lucia</a></td>
<td>662</td>
<td>LCA</td>
<td id="LC">LC</td>
<td><a href="/w/index.php?title=ISO_3166-2:LC&amp;action=edit" class="new" title="ISO 3166-2:LC">ISO 3166-2:LC</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_France.svg" class="image" title="Flag of Saint Pierre and Miquelon"><img alt="Flag of Saint Pierre and Miquelon" longdesc="/wiki/Image:Flag_of_France.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Flag_of_France.svg/22px-Flag_of_France.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Saint_Pierre_and_Miquelon" title="Saint Pierre and Miquelon">Saint Pierre and Miquelon</a></td>
<td>666</td>
 
<td>SPM</td>
<td id="PM">PM</td>
<td><a href="/w/index.php?title=ISO_3166-2:PM&amp;action=edit" class="new" title="ISO 3166-2:PM">ISO 3166-2:PM</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Saint_Vincent_and_the_Grenadines.svg" class="image" title="Flag of Saint Vincent and the Grenadines"><img alt="Flag of Saint Vincent and the Grenadines" longdesc="/wiki/Image:Flag_of_Saint_Vincent_and_the_Grenadines.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/6/6d/Flag_of_Saint_Vincent_and_the_Grenadines.svg/22px-Flag_of_Saint_Vincent_and_the_Grenadines.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Saint_Vincent_and_the_Grenadines" title="Saint Vincent and the Grenadines">Saint Vincent and the Grenadines</a></td>
<td>670</td>
<td>VCT</td>
<td id="VC">VC</td>
<td><a href="/wiki/ISO_3166-2:VC" title="ISO 3166-2:VC">ISO 3166-2:VC</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Samoa.svg" class="image" title="Flag of Samoa"><img alt="Flag of Samoa" longdesc="/wiki/Image:Flag_of_Samoa.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/3/31/Flag_of_Samoa.svg/22px-Flag_of_Samoa.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/Samoa" title="Samoa">Samoa</a></td>
<td>882</td>
<td>WSM</td>
<td id="WS">WS</td>
<td><a href="/w/index.php?title=ISO_3166-2:WS&amp;action=edit" class="new" title="ISO 3166-2:WS">ISO 3166-2:WS</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_San_Marino.svg" class="image" title="Flag of San Marino"><img alt="Flag of San Marino" longdesc="/wiki/Image:Flag_of_San_Marino.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/b/b1/Flag_of_San_Marino.svg/22px-Flag_of_San_Marino.svg.png" height="17" width="22"></a>&nbsp;<a href="/wiki/San_Marino" title="San Marino">San Marino</a></td>
<td>674</td>
 
<td>SMR</td>
<td id="SM">SM</td>
<td><a href="/wiki/ISO_3166-2:SM" title="ISO 3166-2:SM">ISO 3166-2:SM</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Sao_Tome_and_Principe.svg" class="image" title="Flag of São Tomé and Príncipe"><img alt="Flag of São Tomé and Príncipe" longdesc="/wiki/Image:Flag_of_Sao_Tome_and_Principe.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/4/4f/Flag_of_Sao_Tome_and_Principe.svg/22px-Flag_of_Sao_Tome_and_Principe.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/S%C3%A3o_Tom%C3%A9_and_Pr%C3%ADncipe" title="São Tomé and Príncipe">Sao Tome and Principe</a></td>
<td>678</td>
<td>STP</td>
<td id="ST">ST</td>
<td><a href="/wiki/ISO_3166-2:ST" title="ISO 3166-2:ST">ISO 3166-2:ST</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Saudi_Arabia.svg" class="image" title="Flag of Saudi Arabia"><img alt="Flag of Saudi Arabia" longdesc="/wiki/Image:Flag_of_Saudi_Arabia.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/0/0d/Flag_of_Saudi_Arabia.svg/22px-Flag_of_Saudi_Arabia.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Saudi_Arabia" title="Saudi Arabia">Saudi Arabia</a></td>
<td>682</td>
<td>SAU</td>
<td id="SA">SA</td>
<td><a href="/w/index.php?title=ISO_3166-2:SA&amp;action=edit" class="new" title="ISO 3166-2:SA">ISO 3166-2:SA</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Senegal.svg" class="image" title="Flag of Senegal"><img alt="Flag of Senegal" longdesc="/wiki/Image:Flag_of_Senegal.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/f/fd/Flag_of_Senegal.svg/22px-Flag_of_Senegal.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Senegal" title="Senegal">Senegal</a></td>
<td>686</td>
 
<td>SEN</td>
<td id="SN">SN</td>
<td><a href="/wiki/ISO_3166-2:SN" title="ISO 3166-2:SN">ISO 3166-2:SN</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Serbia.svg" class="image" title="Flag of Serbia"><img alt="Flag of Serbia" longdesc="/wiki/Image:Flag_of_Serbia.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/f/ff/Flag_of_Serbia.svg/22px-Flag_of_Serbia.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Serbia" title="Serbia">Serbia</a></td>
<td>688</td>
<td>SRB</td>
<td id="RS">RS</td>
<td><a href="/wiki/ISO_3166-2:RS" title="ISO 3166-2:RS">ISO 3166-2:RS</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_the_Seychelles.svg" class="image" title="Flag of the Seychelles"><img alt="Flag of the Seychelles" longdesc="/wiki/Image:Flag_of_the_Seychelles.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/9/92/Flag_of_the_Seychelles.svg/22px-Flag_of_the_Seychelles.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/Seychelles" title="Seychelles">Seychelles</a></td>
<td>690</td>
<td>SYC</td>
<td id="SC">SC</td>
<td><a href="/wiki/ISO_3166-2:SC" title="ISO 3166-2:SC">ISO 3166-2:SC</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Sierra_Leone.svg" class="image" title="Flag of Sierra Leone"><img alt="Flag of Sierra Leone" longdesc="/wiki/Image:Flag_of_Sierra_Leone.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/1/17/Flag_of_Sierra_Leone.svg/22px-Flag_of_Sierra_Leone.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Sierra_Leone" title="Sierra Leone">Sierra Leone</a></td>
<td>694</td>
 
<td>SLE</td>
<td id="SL">SL</td>
<td><a href="/w/index.php?title=ISO_3166-2:SL&amp;action=edit" class="new" title="ISO 3166-2:SL">ISO 3166-2:SL</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Singapore.svg" class="image" title="Flag of Singapore"><img alt="Flag of Singapore" longdesc="/wiki/Image:Flag_of_Singapore.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/4/48/Flag_of_Singapore.svg/22px-Flag_of_Singapore.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Singapore" title="Singapore">Singapore</a></td>
<td>702</td>
<td>SGP</td>
<td id="SG">SG</td>
<td><a href="/w/index.php?title=ISO_3166-2:SG&amp;action=edit" class="new" title="ISO 3166-2:SG">ISO 3166-2:SG</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Slovakia.svg" class="image" title="Flag of Slovakia"><img alt="Flag of Slovakia" longdesc="/wiki/Image:Flag_of_Slovakia.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/e/e6/Flag_of_Slovakia.svg/22px-Flag_of_Slovakia.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Slovakia" title="Slovakia">Slovakia</a></td>
<td>703</td>
<td>SVK</td>
<td id="SK">SK</td>
<td><a href="/wiki/ISO_3166-2:SK" title="ISO 3166-2:SK">ISO 3166-2:SK</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Slovenia.svg" class="image" title="Flag of Slovenia"><img alt="Flag of Slovenia" longdesc="/wiki/Image:Flag_of_Slovenia.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/f/f0/Flag_of_Slovenia.svg/22px-Flag_of_Slovenia.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/Slovenia" title="Slovenia">Slovenia</a></td>
<td>705</td>
 
<td>SVN</td>
<td id="SI">SI</td>
<td><a href="/wiki/ISO_3166-2:SI" title="ISO 3166-2:SI">ISO 3166-2:SI</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_the_Solomon_Islands.svg" class="image" title="Flag of the Solomon Islands"><img alt="Flag of the Solomon Islands" longdesc="/wiki/Image:Flag_of_the_Solomon_Islands.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/7/74/Flag_of_the_Solomon_Islands.svg/22px-Flag_of_the_Solomon_Islands.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/Solomon_Islands" title="Solomon Islands">Solomon Islands</a></td>
<td>090</td>
<td>SLB</td>
<td id="SB">SB</td>
<td><a href="/wiki/ISO_3166-2:SB" title="ISO 3166-2:SB">ISO 3166-2:SB</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Somalia.svg" class="image" title="Flag of Somalia"><img alt="Flag of Somalia" longdesc="/wiki/Image:Flag_of_Somalia.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/a/a0/Flag_of_Somalia.svg/22px-Flag_of_Somalia.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Somalia" title="Somalia">Somalia</a></td>
<td>706</td>
<td>SOM</td>
<td id="SO">SO</td>
<td><a href="/wiki/ISO_3166-2:SO" title="ISO 3166-2:SO">ISO 3166-2:SO</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_South_Africa.svg" class="image" title="Flag of South Africa"><img alt="Flag of South Africa" longdesc="/wiki/Image:Flag_of_South_Africa.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/a/af/Flag_of_South_Africa.svg/22px-Flag_of_South_Africa.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/South_Africa" title="South Africa">South Africa</a></td>
<td>710</td>
 
<td>ZAF</td>
<td id="ZA">ZA</td>
<td><a href="/wiki/ISO_3166-2:ZA" title="ISO 3166-2:ZA">ISO 3166-2:ZA</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_South_Georgia_and_the_South_Sandwich_Islands.svg" class="image" title="Flag of South Georgia and the South Sandwich Islands"><img alt="Flag of South Georgia and the South Sandwich Islands" longdesc="/wiki/Image:Flag_of_South_Georgia_and_the_South_Sandwich_Islands.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/e/ed/Flag_of_South_Georgia_and_the_South_Sandwich_Islands.svg/22px-Flag_of_South_Georgia_and_the_South_Sandwich_Islands.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/South_Georgia_and_the_South_Sandwich_Islands" title="South Georgia and the South Sandwich Islands">South Georgia and the South Sandwich Islands</a></td>
<td>239</td>
<td>SGS</td>
<td id="GS">GS</td>
<td><a href="/w/index.php?title=ISO_3166-2:GS&amp;action=edit" class="new" title="ISO 3166-2:GS">ISO 3166-2:GS</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Spain.svg" class="image" title="Flag of Spain"><img alt="Flag of Spain" longdesc="/wiki/Image:Flag_of_Spain.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Flag_of_Spain.svg/22px-Flag_of_Spain.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Spain" title="Spain">Spain</a></td>
<td>724</td>
<td>ESP</td>
<td id="ES">ES</td>
<td><a href="/wiki/ISO_3166-2:ES" title="ISO 3166-2:ES">ISO 3166-2:ES</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Sri_Lanka.svg" class="image" title="Flag of Sri Lanka"><img alt="Flag of Sri Lanka" longdesc="/wiki/Image:Flag_of_Sri_Lanka.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/1/11/Flag_of_Sri_Lanka.svg/22px-Flag_of_Sri_Lanka.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/Sri_Lanka" title="Sri Lanka">Sri Lanka</a></td>
<td>144</td>
 
<td>LKA</td>
<td id="LK">LK</td>
<td><a href="/w/index.php?title=ISO_3166-2:LK&amp;action=edit" class="new" title="ISO 3166-2:LK">ISO 3166-2:LK</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Sudan.svg" class="image" title="Flag of Sudan"><img alt="Flag of Sudan" longdesc="/wiki/Image:Flag_of_Sudan.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/0/01/Flag_of_Sudan.svg/22px-Flag_of_Sudan.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/Sudan" title="Sudan">Sudan</a></td>
<td>736</td>
<td>SDN</td>
<td id="SD">SD</td>
<td><a href="/w/index.php?title=ISO_3166-2:SD&amp;action=edit" class="new" title="ISO 3166-2:SD">ISO 3166-2:SD</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Suriname.svg" class="image" title="Flag of Suriname"><img alt="Flag of Suriname" longdesc="/wiki/Image:Flag_of_Suriname.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/6/60/Flag_of_Suriname.svg/22px-Flag_of_Suriname.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Suriname" title="Suriname">Suriname</a></td>
<td>740</td>
<td>SUR</td>
<td id="SR">SR</td>
<td><a href="/wiki/ISO_3166-2:SR" title="ISO 3166-2:SR">ISO 3166-2:SR</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Norway.svg" class="image" title="Flag of Svalbard and Jan Mayen"><img alt="Flag of Svalbard and Jan Mayen" longdesc="/wiki/Image:Flag_of_Norway.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/d/d9/Flag_of_Norway.svg/22px-Flag_of_Norway.svg.png" height="16" width="22"></a>&nbsp;<a href="/wiki/Svalbard_and_Jan_Mayen" title="Svalbard and Jan Mayen">Svalbard and Jan Mayen</a></td>
<td>744</td>
 
<td>SJM</td>
<td id="SJ">SJ</td>
<td><a href="/w/index.php?title=ISO_3166-2:SJ&amp;action=edit" class="new" title="ISO 3166-2:SJ">ISO 3166-2:SJ</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Swaziland.svg" class="image" title="Flag of Swaziland"><img alt="Flag of Swaziland" longdesc="/wiki/Image:Flag_of_Swaziland.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/1/1e/Flag_of_Swaziland.svg/22px-Flag_of_Swaziland.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Swaziland" title="Swaziland">Swaziland</a></td>
<td>748</td>
<td>SWZ</td>
<td id="SZ">SZ</td>
<td><a href="/w/index.php?title=ISO_3166-2:SZ&amp;action=edit" class="new" title="ISO 3166-2:SZ">ISO 3166-2:SZ</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Sweden.svg" class="image" title="Flag of Sweden"><img alt="Flag of Sweden" longdesc="/wiki/Image:Flag_of_Sweden.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/4/4c/Flag_of_Sweden.svg/22px-Flag_of_Sweden.svg.png" height="14" width="22"></a>&nbsp;<a href="/wiki/Sweden" title="Sweden">Sweden</a></td>
<td>752</td>
<td>SWE</td>
<td id="SE">SE</td>
<td><a href="/wiki/ISO_3166-2:SE" title="ISO 3166-2:SE">ISO 3166-2:SE</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Switzerland.svg" class="image" title="Flag of Switzerland"><img alt="Flag of Switzerland" longdesc="/wiki/Image:Flag_of_Switzerland.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/f/f3/Flag_of_Switzerland.svg/20px-Flag_of_Switzerland.svg.png" height="20" width="20"></a>&nbsp;<a href="/wiki/Switzerland" title="Switzerland">Switzerland</a></td>
<td>756</td>
 
<td>CHE</td>
<td id="CH">CH</td>
<td><a href="/wiki/ISO_3166-2:CH" title="ISO 3166-2:CH">ISO 3166-2:CH</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Syria.svg" class="image" title="Flag of Syria"><img alt="Flag of Syria" longdesc="/wiki/Image:Flag_of_Syria.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/5/53/Flag_of_Syria.svg/22px-Flag_of_Syria.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Syria" title="Syria">Syrian Arab Republic</a></td>
<td>760</td>
<td>SYR</td>
<td id="SY">SY</td>
<td><a href="/w/index.php?title=ISO_3166-2:SY&amp;action=edit" class="new" title="ISO 3166-2:SY">ISO 3166-2:SY</a></td>
 
</tr>
<tr bgcolor="lightgray">
<td colspan="5"></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_the_Republic_of_China.svg" class="image" title="Flag of the Republic of China"><img alt="Flag of the Republic of China" longdesc="/wiki/Image:Flag_of_the_Republic_of_China.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/7/72/Flag_of_the_Republic_of_China.svg/22px-Flag_of_the_Republic_of_China.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Republic_of_China" title="Republic of China">Taiwan, Province of China</a></td>
<td>158</td>
<td>TWN</td>
<td id="TW">TW</td>
<td><a href="/wiki/ISO_3166-2:TW" title="ISO 3166-2:TW">ISO 3166-2:TW</a></td>
</tr>
<tr>
 
<td><a href="/wiki/Image:Flag_of_Tajikistan.svg" class="image" title="Flag of Tajikistan"><img alt="Flag of Tajikistan" longdesc="/wiki/Image:Flag_of_Tajikistan.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/d/d0/Flag_of_Tajikistan.svg/22px-Flag_of_Tajikistan.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/Tajikistan" title="Tajikistan">Tajikistan</a></td>
<td>762</td>
<td>TJK</td>
<td id="TJ">TJ</td>
<td><a href="/wiki/ISO_3166-2:TJ" title="ISO 3166-2:TJ">ISO 3166-2:TJ</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Tanzania.svg" class="image" title="Flag of Tanzania"><img alt="Flag of Tanzania" longdesc="/wiki/Image:Flag_of_Tanzania.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/3/38/Flag_of_Tanzania.svg/22px-Flag_of_Tanzania.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Tanzania" title="Tanzania">Tanzania, United Republic of</a></td>
<td>834</td>
<td>TZA</td>
 
<td id="TZ">TZ</td>
<td><a href="/wiki/ISO_3166-2:TZ" title="ISO 3166-2:TZ">ISO 3166-2:TZ</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Thailand.svg" class="image" title="Flag of Thailand"><img alt="Flag of Thailand" longdesc="/wiki/Image:Flag_of_Thailand.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/a/a9/Flag_of_Thailand.svg/22px-Flag_of_Thailand.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Thailand" title="Thailand">Thailand</a></td>
<td>764</td>
<td>THA</td>
<td id="TH">TH</td>
<td><a href="/wiki/ISO_3166-2:TH" title="ISO 3166-2:TH">ISO 3166-2:TH</a></td>
</tr>
 
<tr>
<td><a href="/wiki/Image:Flag_of_East_Timor.svg" class="image" title="Flag of East Timor"><img alt="Flag of East Timor" longdesc="/wiki/Image:Flag_of_East_Timor.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/2/26/Flag_of_East_Timor.svg/22px-Flag_of_East_Timor.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/East_Timor" title="East Timor">Timor-Leste</a></td>
<td>626</td>
<td>TLS</td>
<td id="TL">TL</td>
<td><a href="/wiki/ISO_3166-2:TL" title="ISO 3166-2:TL">ISO 3166-2:TL</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Togo.svg" class="image" title="Flag of Togo"><img alt="Flag of Togo" longdesc="/wiki/Image:Flag_of_Togo.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/6/68/Flag_of_Togo.svg/22px-Flag_of_Togo.svg.png" height="14" width="22"></a>&nbsp;<a href="/wiki/Togo" title="Togo">Togo</a></td>
<td>768</td>
 
<td>TGO</td>
<td id="TG">TG</td>
<td><a href="/w/index.php?title=ISO_3166-2:TG&amp;action=edit" class="new" title="ISO 3166-2:TG">ISO 3166-2:TG</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_New_Zealand.svg" class="image" title="Flag of Tokelau"><img alt="Flag of Tokelau" longdesc="/wiki/Image:Flag_of_New_Zealand.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/3/3e/Flag_of_New_Zealand.svg/22px-Flag_of_New_Zealand.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/Tokelau" title="Tokelau">Tokelau</a></td>
<td>772</td>
<td>TKL</td>
<td id="TK">TK</td>
<td><a href="/w/index.php?title=ISO_3166-2:TK&amp;action=edit" class="new" title="ISO 3166-2:TK">ISO 3166-2:TK</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Tonga.svg" class="image" title="Flag of Tonga"><img alt="Flag of Tonga" longdesc="/wiki/Image:Flag_of_Tonga.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Flag_of_Tonga.svg/22px-Flag_of_Tonga.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/Tonga" title="Tonga">Tonga</a></td>
<td>776</td>
<td>TON</td>
<td id="TO">TO</td>
<td><a href="/wiki/ISO_3166-2:TO" title="ISO 3166-2:TO">ISO 3166-2:TO</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Trinidad_and_Tobago.svg" class="image" title="Flag of Trinidad and Tobago"><img alt="Flag of Trinidad and Tobago" longdesc="/wiki/Image:Flag_of_Trinidad_and_Tobago.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/6/64/Flag_of_Trinidad_and_Tobago.svg/22px-Flag_of_Trinidad_and_Tobago.svg.png" height="13" width="22"></a>&nbsp;<a href="/wiki/Trinidad_and_Tobago" title="Trinidad and Tobago">Trinidad and Tobago</a></td>
<td>780</td>
 
<td>TTO</td>
<td id="TT">TT</td>
<td><a href="/wiki/ISO_3166-2:TT" title="ISO 3166-2:TT">ISO 3166-2:TT</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Tunisia.svg" class="image" title="Flag of Tunisia"><img alt="Flag of Tunisia" longdesc="/wiki/Image:Flag_of_Tunisia.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/c/ce/Flag_of_Tunisia.svg/22px-Flag_of_Tunisia.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Tunisia" title="Tunisia">Tunisia</a></td>
<td>788</td>
<td>TUN</td>
<td id="TN">TN</td>
<td><a href="/wiki/ISO_3166-2:TN" title="ISO 3166-2:TN">ISO 3166-2:TN</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Turkey.svg" class="image" title="Flag of Turkey"><img alt="Flag of Turkey" longdesc="/wiki/Image:Flag_of_Turkey.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/b/b4/Flag_of_Turkey.svg/22px-Flag_of_Turkey.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Turkey" title="Turkey">Turkey</a></td>
<td>792</td>
<td>TUR</td>
<td id="TR">TR</td>
<td><a href="/wiki/ISO_3166-2:TR" title="ISO 3166-2:TR">ISO 3166-2:TR</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Turkmenistan.svg" class="image" title="Flag of Turkmenistan"><img alt="Flag of Turkmenistan" longdesc="/wiki/Image:Flag_of_Turkmenistan.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/1/1b/Flag_of_Turkmenistan.svg/22px-Flag_of_Turkmenistan.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Turkmenistan" title="Turkmenistan">Turkmenistan</a></td>
<td>795</td>
 
<td>TKM</td>
<td id="TM">TM</td>
<td><a href="/wiki/ISO_3166-2:TM" title="ISO 3166-2:TM">ISO 3166-2:TM</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_the_Turks_and_Caicos_Islands.svg" class="image" title="Flag of the Turks and Caicos Islands"><img alt="Flag of the Turks and Caicos Islands" longdesc="/wiki/Image:Flag_of_the_Turks_and_Caicos_Islands.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/a/a0/Flag_of_the_Turks_and_Caicos_Islands.svg/22px-Flag_of_the_Turks_and_Caicos_Islands.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/Turks_and_Caicos_Islands" title="Turks and Caicos Islands">Turks and Caicos Islands</a></td>
<td>796</td>
<td>TCA</td>
<td id="TC">TC</td>
<td><a href="/w/index.php?title=ISO_3166-2:TC&amp;action=edit" class="new" title="ISO 3166-2:TC">ISO 3166-2:TC</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Tuvalu.svg" class="image" title="Flag of Tuvalu"><img alt="Flag of Tuvalu" longdesc="/wiki/Image:Flag_of_Tuvalu.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/3/38/Flag_of_Tuvalu.svg/22px-Flag_of_Tuvalu.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/Tuvalu" title="Tuvalu">Tuvalu</a></td>
<td>798</td>
<td>TUV</td>
<td id="TV">TV</td>
<td><a href="/wiki/ISO_3166-2:TV" title="ISO 3166-2:TV">ISO 3166-2:TV</a></td>
</tr>
<tr bgcolor="lightgray">
<td colspan="5"></td>
</tr>
<tr>
 
<td><a href="/wiki/Image:Flag_of_Uganda.svg" class="image" title="Flag of Uganda"><img alt="Flag of Uganda" longdesc="/wiki/Image:Flag_of_Uganda.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/4/4e/Flag_of_Uganda.svg/22px-Flag_of_Uganda.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Uganda" title="Uganda">Uganda</a></td>
<td>800</td>
<td>UGA</td>
<td id="UG">UG</td>
<td><a href="/wiki/ISO_3166-2:UG" title="ISO 3166-2:UG">ISO 3166-2:UG</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Ukraine.svg" class="image" title="Flag of Ukraine"><img alt="Flag of Ukraine" longdesc="/wiki/Image:Flag_of_Ukraine.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/4/49/Flag_of_Ukraine.svg/22px-Flag_of_Ukraine.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Ukraine" title="Ukraine">Ukraine</a></td>
<td>804</td>
<td>UKR</td>
 
<td id="UA">UA</td>
<td><a href="/wiki/ISO_3166-2:UA" title="ISO 3166-2:UA">ISO 3166-2:UA</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_the_United_Arab_Emirates.svg" class="image" title="Flag of the United Arab Emirates"><img alt="Flag of the United Arab Emirates" longdesc="/wiki/Image:Flag_of_the_United_Arab_Emirates.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Flag_of_the_United_Arab_Emirates.svg/22px-Flag_of_the_United_Arab_Emirates.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/United_Arab_Emirates" title="United Arab Emirates">United Arab Emirates</a></td>
<td>784</td>
<td>ARE</td>
<td id="AE">AE</td>
<td><a href="/wiki/ISO_3166-2:AE" title="ISO 3166-2:AE">ISO 3166-2:AE</a></td>
</tr>
 
<tr>
<td><a href="/wiki/Image:Flag_of_the_United_Kingdom.svg" class="image" title="Flag of the United Kingdom"><img alt="Flag of the United Kingdom" longdesc="/wiki/Image:Flag_of_the_United_Kingdom.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/a/ae/Flag_of_the_United_Kingdom.svg/22px-Flag_of_the_United_Kingdom.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/United_Kingdom" title="United Kingdom">United Kingdom</a></td>
<td>826</td>
<td>GBR</td>
<td id="GB">GB</td>
<td><a href="/wiki/ISO_3166-2:GB" title="ISO 3166-2:GB">ISO 3166-2:GB</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_the_United_States.svg" class="image" title="Flag of the United States"><img alt="Flag of the United States" longdesc="/wiki/Image:Flag_of_the_United_States.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/a/a4/Flag_of_the_United_States.svg/22px-Flag_of_the_United_States.svg.png" height="12" width="22"></a>&nbsp;<a href="/wiki/United_States" title="United States">United States</a></td>
<td>840</td>
 
<td>USA</td>
<td id="US">US</td>
<td><a href="/wiki/ISO_3166-2:US" title="ISO 3166-2:US">ISO 3166-2:US</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_the_United_States.svg" class="image" title="Flag of United States Minor Outlying Islands"><img alt="Flag of United States Minor Outlying Islands" longdesc="/wiki/Image:Flag_of_the_United_States.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/a/a4/Flag_of_the_United_States.svg/22px-Flag_of_the_United_States.svg.png" height="12" width="22"></a>&nbsp;<a href="/wiki/United_States_Minor_Outlying_Islands" title="United States Minor Outlying Islands">United States Minor Outlying Islands</a></td>
<td>581</td>
<td>UMI</td>
<td id="UM">UM</td>
<td><a href="/w/index.php?title=ISO_3166-2:UM&amp;action=edit" class="new" title="ISO 3166-2:UM">ISO 3166-2:UM</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Uruguay.svg" class="image" title="Flag of Uruguay"><img alt="Flag of Uruguay" longdesc="/wiki/Image:Flag_of_Uruguay.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/f/fe/Flag_of_Uruguay.svg/22px-Flag_of_Uruguay.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Uruguay" title="Uruguay">Uruguay</a></td>
<td>858</td>
<td>URY</td>
<td id="UY">UY</td>
<td><a href="/w/index.php?title=ISO_3166-2:UY&amp;action=edit" class="new" title="ISO 3166-2:UY">ISO 3166-2:UY</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Uzbekistan.svg" class="image" title="Flag of Uzbekistan"><img alt="Flag of Uzbekistan" longdesc="/wiki/Image:Flag_of_Uzbekistan.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/8/84/Flag_of_Uzbekistan.svg/22px-Flag_of_Uzbekistan.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/Uzbekistan" title="Uzbekistan">Uzbekistan</a></td>
<td>860</td>
 
<td>UZB</td>
<td id="UZ">UZ</td>
<td><a href="/wiki/ISO_3166-2:UZ" title="ISO 3166-2:UZ">ISO 3166-2:UZ</a></td>
</tr>
<tr bgcolor="lightgray">
<td colspan="5"></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Vanuatu.svg" class="image" title="Flag of Vanuatu"><img alt="Flag of Vanuatu" longdesc="/wiki/Image:Flag_of_Vanuatu.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/b/bc/Flag_of_Vanuatu.svg/22px-Flag_of_Vanuatu.svg.png" height="13" width="22"></a>&nbsp;<a href="/wiki/Vanuatu" title="Vanuatu">Vanuatu</a></td>
<td>548</td>
<td>VUT</td>
 
<td id="VU">VU</td>
<td><a href="/w/index.php?title=ISO_3166-2:VU&amp;action=edit" class="new" title="ISO 3166-2:VU">ISO 3166-2:VU</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Venezuela.svg" class="image" title="Flag of Venezuela"><img alt="Flag of Venezuela" longdesc="/wiki/Image:Flag_of_Venezuela.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/0/06/Flag_of_Venezuela.svg/22px-Flag_of_Venezuela.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Venezuela" title="Venezuela">Venezuela</a></td>
<td>862</td>
<td>VEN</td>
<td id="VE">VE</td>
<td><a href="/wiki/ISO_3166-2:VE" title="ISO 3166-2:VE">ISO 3166-2:VE</a></td>
</tr>
 
<tr>
<td><a href="/wiki/Image:Flag_of_Vietnam.svg" class="image" title="Flag of Vietnam"><img alt="Flag of Vietnam" longdesc="/wiki/Image:Flag_of_Vietnam.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/2/21/Flag_of_Vietnam.svg/22px-Flag_of_Vietnam.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Vietnam" title="Vietnam">Viet Nam</a></td>
<td>704</td>
<td>VNM</td>
<td id="VN">VN</td>
<td><a href="/wiki/ISO_3166-2:VN" title="ISO 3166-2:VN">ISO 3166-2:VN</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_the_British_Virgin_Islands.svg" class="image" title="Flag of the British Virgin Islands"><img alt="Flag of the British Virgin Islands" longdesc="/wiki/Image:Flag_of_the_British_Virgin_Islands.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/4/42/Flag_of_the_British_Virgin_Islands.svg/22px-Flag_of_the_British_Virgin_Islands.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/British_Virgin_Islands" title="British Virgin Islands">Virgin Islands, British</a></td>
<td>092</td>
 
<td>VGB</td>
<td id="VG">VG</td>
<td><a href="/w/index.php?title=ISO_3166-2:VG&amp;action=edit" class="new" title="ISO 3166-2:VG">ISO 3166-2:VG</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_the_United_States_Virgin_Islands.svg" class="image" title="Flag of the United States Virgin Islands"><img alt="Flag of the United States Virgin Islands" longdesc="/wiki/Image:Flag_of_the_United_States_Virgin_Islands.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/f/f8/Flag_of_the_United_States_Virgin_Islands.svg/22px-Flag_of_the_United_States_Virgin_Islands.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/United_States_Virgin_Islands" title="United States Virgin Islands">Virgin Islands, U.S.</a></td>
<td>850</td>
<td>VIR</td>
<td id="VI">VI</td>
<td><a href="/w/index.php?title=ISO_3166-2:VI&amp;action=edit" class="new" title="ISO 3166-2:VI">ISO 3166-2:VI</a></td>
 
</tr>
<tr bgcolor="lightgray">
<td colspan="5"></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_France.svg" class="image" title="Flag of Wallis and Futuna"><img alt="Flag of Wallis and Futuna" longdesc="/wiki/Image:Flag_of_France.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Flag_of_France.svg/22px-Flag_of_France.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Wallis_and_Futuna" title="Wallis and Futuna">Wallis and Futuna</a></td>
<td>876</td>
<td>WLF</td>
<td id="WF">WF</td>
<td><a href="/w/index.php?title=ISO_3166-2:WF&amp;action=edit" class="new" title="ISO 3166-2:WF">ISO 3166-2:WF</a></td>
</tr>
<tr>
 
<td><a href="/wiki/Image:Flag_of_Western_Sahara.svg" class="image" title="Flag of Western Sahara"><img alt="Flag of Western Sahara" longdesc="/wiki/Image:Flag_of_Western_Sahara.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/c/c8/Flag_of_Western_Sahara.svg/22px-Flag_of_Western_Sahara.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/Western_Sahara" title="Western Sahara">Western Sahara</a></td>
<td>732</td>
<td>ESH</td>
<td id="EH">EH</td>
<td><a href="/w/index.php?title=ISO_3166-2:EH&amp;action=edit" class="new" title="ISO 3166-2:EH">ISO 3166-2:EH</a></td>
</tr>
<tr bgcolor="lightgray">
<td colspan="5"></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Yemen.svg" class="image" title="Flag of Yemen"><img alt="Flag of Yemen" longdesc="/wiki/Image:Flag_of_Yemen.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/8/89/Flag_of_Yemen.svg/22px-Flag_of_Yemen.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Yemen" title="Yemen">Yemen</a></td>
 
<td>887</td>
<td>YEM</td>
<td id="YE">YE</td>
<td><a href="/wiki/ISO_3166-2:YE" title="ISO 3166-2:YE">ISO 3166-2:YE</a></td>
</tr>
<tr bgcolor="lightgray">
<td colspan="5"></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Zambia.svg" class="image" title="Flag of Zambia"><img alt="Flag of Zambia" longdesc="/wiki/Image:Flag_of_Zambia.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/0/06/Flag_of_Zambia.svg/22px-Flag_of_Zambia.svg.png" height="15" width="22"></a>&nbsp;<a href="/wiki/Zambia" title="Zambia">Zambia</a></td>
<td>894</td>
 
<td>ZMB</td>
<td id="ZM">ZM</td>
<td><a href="/w/index.php?title=ISO_3166-2:ZM&amp;action=edit" class="new" title="ISO 3166-2:ZM">ISO 3166-2:ZM</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Zimbabwe.svg" class="image" title="Flag of Zimbabwe"><img alt="Flag of Zimbabwe" longdesc="/wiki/Image:Flag_of_Zimbabwe.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/6/6a/Flag_of_Zimbabwe.svg/22px-Flag_of_Zimbabwe.svg.png" height="11" width="22"></a>&nbsp;<a href="/wiki/Zimbabwe" title="Zimbabwe">Zimbabwe</a></td>
<td>716</td>
<td>ZWE</td>
<td id="ZW">ZW</td>
 
<td><a href="/w/index.php?title=ISO_3166-2:ZW&amp;action=edit" class="new" title="ISO 3166-2:ZW">ISO 3166-2:ZW</a></td>
</tr>
 
</tbody>
</table>
 
<h1>Country Continent Mapping</h1>
<p>abstracted from <a href="http://en.wikipedia.org/wiki/List_of_countries_by_continent">wikipedia continent country page</a></p>
<table id="continents">
<!-- Africa -->
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Algeria.svg" class="image" title="Flag of Algeria"><img alt="Flag of Algeria" longdesc="/wiki/Image:Flag_of_Algeria.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/7/77/Flag_of_Algeria.svg/50px-Flag_of_Algeria.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Algeria" title="Algeria">Algeria</a></b> – <a href="/wiki/Algiers" title="Algiers">Algiers</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Angola.svg" class="image" title="Flag of Angola"><img alt="Flag of Angola" longdesc="/wiki/Image:Flag_of_Angola.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/9/9d/Flag_of_Angola.svg/50px-Flag_of_Angola.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Angola" title="Angola">Angola</a></b> – <a href="/wiki/Luanda" title="Luanda">Luanda</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Benin.svg" class="image" title="Flag of Benin"><img alt="Flag of Benin" longdesc="/wiki/Image:Flag_of_Benin.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/0/0a/Flag_of_Benin.svg/50px-Flag_of_Benin.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Benin" title="Benin">Benin</a></b> – <a href="/wiki/Porto-Novo" title="Porto-Novo">Porto-Novo</a> (seat of government at <a href="/wiki/Cotonou" title="Cotonou">Cotonou</a>)</td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Botswana.svg" class="image" title="Flag of Botswana"><img alt="Flag of Botswana" longdesc="/wiki/Image:Flag_of_Botswana.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/f/fa/Flag_of_Botswana.svg/50px-Flag_of_Botswana.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Botswana" title="Botswana">Botswana</a></b> – <a href="/wiki/Gaborone" title="Gaborone">Gaborone</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Burkina_Faso.svg" class="image" title="Flag of Burkina Faso"><img alt="Flag of Burkina Faso" longdesc="/wiki/Image:Flag_of_Burkina_Faso.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/3/31/Flag_of_Burkina_Faso.svg/50px-Flag_of_Burkina_Faso.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Burkina_Faso" title="Burkina Faso">Burkina Faso</a></b> – <a href="/wiki/Ouagadougou" title="Ouagadougou">Ouagadougou</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Burundi.svg" class="image" title="Flag of Burundi"><img alt="Flag of Burundi" longdesc="/wiki/Image:Flag_of_Burundi.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/5/50/Flag_of_Burundi.svg/50px-Flag_of_Burundi.svg.png" height="30" width="50"></a>&nbsp;<a href="/wiki/Burundi" title="Burundi">Burundi</a></b> – <a href="/wiki/Bujumbura" title="Bujumbura">Bujumbura</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Cameroon.svg" class="image" title="Flag of Cameroon"><img alt="Flag of Cameroon" longdesc="/wiki/Image:Flag_of_Cameroon.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/4/4f/Flag_of_Cameroon.svg/50px-Flag_of_Cameroon.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Cameroon" title="Cameroon">Cameroon</a></b> – <a href="/wiki/Yaound%C3%A9" title="Yaoundé">Yaoundé</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Cape_Verde.svg" class="image" title="Flag of Cape Verde"><img alt="Flag of Cape Verde" longdesc="/wiki/Image:Flag_of_Cape_Verde.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/3/38/Flag_of_Cape_Verde.svg/50px-Flag_of_Cape_Verde.svg.png" height="29" width="50"></a>&nbsp;<a href="/wiki/Cape_Verde" title="Cape Verde">Cape Verde</a></b> – <a href="/wiki/Praia" title="Praia">Praia</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_the_Central_African_Republic.svg" class="image" title="Flag of the Central African Republic"><img alt="Flag of the Central African Republic" longdesc="/wiki/Image:Flag_of_the_Central_African_Republic.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/6/6f/Flag_of_the_Central_African_Republic.svg/50px-Flag_of_the_Central_African_Republic.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Central_African_Republic" title="Central African Republic">Central African Republic</a></b> – <a href="/wiki/Bangui" title="Bangui">Bangui</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Chad.svg" class="image" title="Flag of Chad"><img alt="Flag of Chad" longdesc="/wiki/Image:Flag_of_Chad.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/4/4b/Flag_of_Chad.svg/50px-Flag_of_Chad.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Chad" title="Chad">Chad</a></b> – <a href="/wiki/N%27Djamena" title="N'Djamena">N'Djamena</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_the_Comoros.svg" class="image" title="Flag of the Comoros"><img alt="Flag of the Comoros" longdesc="/wiki/Image:Flag_of_the_Comoros.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/9/94/Flag_of_the_Comoros.svg/50px-Flag_of_the_Comoros.svg.png" height="30" width="50"></a>&nbsp;<a href="/wiki/Comoros" title="Comoros">Comoros</a></b> – <a href="/wiki/Moroni%2C_Comoros" title="Moroni, Comoros">Moroni</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_the_Democratic_Republic_of_the_Congo.svg" class="image" title="Flag of the Democratic Republic of the Congo"><img alt="Flag of the Democratic Republic of the Congo" longdesc="/wiki/Image:Flag_of_the_Democratic_Republic_of_the_Congo.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/6/6f/Flag_of_the_Democratic_Republic_of_the_Congo.svg/50px-Flag_of_the_Democratic_Republic_of_the_Congo.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Democratic_Republic_of_the_Congo" title="Democratic Republic of the Congo">Congo, Democratic Republic of</a></b> (also known as <b>Congo-Kinshasa</b>, formerly known as <b>Zaire</b>) – <a href="/wiki/Kinshasa" title="Kinshasa">Kinshasa</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_the_Republic_of_the_Congo.svg" class="image" title="Flag of the Republic of the Congo"><img alt="Flag of the Republic of the Congo" longdesc="/wiki/Image:Flag_of_the_Republic_of_the_Congo.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/9/92/Flag_of_the_Republic_of_the_Congo.svg/50px-Flag_of_the_Republic_of_the_Congo.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Republic_of_the_Congo" title="Republic of the Congo">Congo, Republic of</a></b> (also known as <b>Congo-Brazzaville</b>) – <a href="/wiki/Brazzaville" title="Brazzaville">Brazzaville</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Cote_d%27Ivoire.svg" class="image" title="Flag of Côte d'Ivoire"><img alt="Flag of Côte d'Ivoire" longdesc="/wiki/Image:Flag_of_Cote_d%27Ivoire.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/8/86/Flag_of_Cote_d%27Ivoire.svg/50px-Flag_of_Cote_d%27Ivoire.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/C%C3%B4te_d%27Ivoire" title="Côte d'Ivoire">Côte d'Ivoire</a></b> (commonly known as <b>Ivory Coast</b>) – <a href="/wiki/Yamoussoukro" title="Yamoussoukro">Yamoussoukro</a> (seat of government at <a href="/wiki/Abidjan" title="Abidjan">Abidjan</a>)</td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Djibouti.svg" class="image" title="Flag of Djibouti"><img alt="Flag of Djibouti" longdesc="/wiki/Image:Flag_of_Djibouti.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/3/34/Flag_of_Djibouti.svg/50px-Flag_of_Djibouti.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Djibouti" title="Djibouti">Djibouti</a></b> – <a href="/wiki/Djibouti%2C_Djibouti" title="Djibouti, Djibouti">Djibouti</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Egypt.svg" class="image" title="Flag of Egypt"><img alt="Flag of Egypt" longdesc="/wiki/Image:Flag_of_Egypt.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/f/fe/Flag_of_Egypt.svg/50px-Flag_of_Egypt.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Egypt" title="Egypt">Egypt</a></b> – <a href="/wiki/Cairo" title="Cairo">Cairo</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Equatorial_Guinea.svg" class="image" title="Flag of Equatorial Guinea"><img alt="Flag of Equatorial Guinea" longdesc="/wiki/Image:Flag_of_Equatorial_Guinea.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/3/31/Flag_of_Equatorial_Guinea.svg/50px-Flag_of_Equatorial_Guinea.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Equatorial_Guinea" title="Equatorial Guinea">Equatorial Guinea</a></b> – <a href="/wiki/Malabo" title="Malabo">Malabo</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Eritrea.svg" class="image" title="Flag of Eritrea"><img alt="Flag of Eritrea" longdesc="/wiki/Image:Flag_of_Eritrea.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/2/29/Flag_of_Eritrea.svg/50px-Flag_of_Eritrea.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/Eritrea" title="Eritrea">Eritrea</a></b> – <a href="/wiki/Asmara" title="Asmara">Asmara</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Ethiopia.svg" class="image" title="Flag of Ethiopia"><img alt="Flag of Ethiopia" longdesc="/wiki/Image:Flag_of_Ethiopia.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/7/71/Flag_of_Ethiopia.svg/50px-Flag_of_Ethiopia.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/Ethiopia" title="Ethiopia">Ethiopia</a></b> – <a href="/wiki/Addis_Ababa" title="Addis Ababa">Addis Ababa</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Gabon.svg" class="image" title="Flag of Gabon"><img alt="Flag of Gabon" longdesc="/wiki/Image:Flag_of_Gabon.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/0/04/Flag_of_Gabon.svg/50px-Flag_of_Gabon.svg.png" height="38" width="50"></a>&nbsp;<a href="/wiki/Gabon" title="Gabon">Gabon</a></b> – <a href="/wiki/Libreville" title="Libreville">Libreville</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_The_Gambia.svg" class="image" title="Flag of The Gambia"><img alt="Flag of The Gambia" longdesc="/wiki/Image:Flag_of_The_Gambia.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/7/77/Flag_of_The_Gambia.svg/50px-Flag_of_The_Gambia.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/The_Gambia" title="The Gambia">Gambia</a></b> – <a href="/wiki/Banjul" title="Banjul">Banjul</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Ghana.svg" class="image" title="Flag of Ghana"><img alt="Flag of Ghana" longdesc="/wiki/Image:Flag_of_Ghana.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/1/19/Flag_of_Ghana.svg/50px-Flag_of_Ghana.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Ghana" title="Ghana">Ghana</a></b> – <a href="/wiki/Accra" title="Accra">Accra</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Guinea.svg" class="image" title="Flag of Guinea"><img alt="Flag of Guinea" longdesc="/wiki/Image:Flag_of_Guinea.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/e/ed/Flag_of_Guinea.svg/50px-Flag_of_Guinea.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Guinea" title="Guinea">Guinea</a></b> – <a href="/wiki/Conakry" title="Conakry">Conakry</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Guinea-Bissau.svg" class="image" title="Flag of Guinea-Bissau"><img alt="Flag of Guinea-Bissau" longdesc="/wiki/Image:Flag_of_Guinea-Bissau.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/0/01/Flag_of_Guinea-Bissau.svg/50px-Flag_of_Guinea-Bissau.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/Guinea-Bissau" title="Guinea-Bissau">Guinea-Bissau</a></b> – <a href="/wiki/Bissau" title="Bissau">Bissau</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Kenya.svg" class="image" title="Flag of Kenya"><img alt="Flag of Kenya" longdesc="/wiki/Image:Flag_of_Kenya.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/4/49/Flag_of_Kenya.svg/50px-Flag_of_Kenya.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Kenya" title="Kenya">Kenya</a></b> – <a href="/wiki/Nairobi" title="Nairobi">Nairobi</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Lesotho.svg" class="image" title="Flag of Lesotho"><img alt="Flag of Lesotho" longdesc="/wiki/Image:Flag_of_Lesotho.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/4/4a/Flag_of_Lesotho.svg/50px-Flag_of_Lesotho.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Lesotho" title="Lesotho">Lesotho</a></b> – <a href="/wiki/Maseru" title="Maseru">Maseru</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Liberia.svg" class="image" title="Flag of Liberia"><img alt="Flag of Liberia" longdesc="/wiki/Image:Flag_of_Liberia.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/b/b8/Flag_of_Liberia.svg/50px-Flag_of_Liberia.svg.png" height="26" width="50"></a>&nbsp;<a href="/wiki/Liberia" title="Liberia">Liberia</a></b> – <a href="/wiki/Monrovia" title="Monrovia">Monrovia</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Libya.svg" class="image" title="Flag of Libya"><img alt="Flag of Libya" longdesc="/wiki/Image:Flag_of_Libya.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/0/05/Flag_of_Libya.svg/50px-Flag_of_Libya.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/Libya" title="Libya">Libya</a></b> – <a href="/wiki/Tripoli" title="Tripoli">Tripoli</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Madagascar.svg" class="image" title="Flag of Madagascar"><img alt="Flag of Madagascar" longdesc="/wiki/Image:Flag_of_Madagascar.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/b/bc/Flag_of_Madagascar.svg/50px-Flag_of_Madagascar.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Madagascar" title="Madagascar">Madagascar</a></b> – <a href="/wiki/Antananarivo" title="Antananarivo">Antananarivo</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Malawi.svg" class="image" title="Flag of Malawi"><img alt="Flag of Malawi" longdesc="/wiki/Image:Flag_of_Malawi.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/d/d1/Flag_of_Malawi.svg/50px-Flag_of_Malawi.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Malawi" title="Malawi">Malawi</a></b> – <a href="/wiki/Lilongwe" title="Lilongwe">Lilongwe</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Mali.svg" class="image" title="Flag of Mali"><img alt="Flag of Mali" longdesc="/wiki/Image:Flag_of_Mali.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/9/92/Flag_of_Mali.svg/50px-Flag_of_Mali.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Mali" title="Mali">Mali</a></b> – <a href="/wiki/Bamako" title="Bamako">Bamako</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Mauritania.svg" class="image" title="Flag of Mauritania"><img alt="Flag of Mauritania" longdesc="/wiki/Image:Flag_of_Mauritania.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/4/43/Flag_of_Mauritania.svg/50px-Flag_of_Mauritania.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Mauritania" title="Mauritania">Mauritania</a></b> – <a href="/wiki/Nouakchott" title="Nouakchott">Nouakchott</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Mauritius.svg" class="image" title="Flag of Mauritius"><img alt="Flag of Mauritius" longdesc="/wiki/Image:Flag_of_Mauritius.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/7/77/Flag_of_Mauritius.svg/50px-Flag_of_Mauritius.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Mauritius" title="Mauritius">Mauritius</a></b> – <a href="/wiki/Port_Louis" title="Port Louis">Port Louis</a></td></tr>
<tr><td>Africa</td><td><i><a href="/wiki/Image:Flag_of_France.svg" class="image" title="Flag of Mayotte"><img alt="Flag of Mayotte" longdesc="/wiki/Image:Flag_of_France.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Flag_of_France.svg/50px-Flag_of_France.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Mayotte" title="Mayotte">Mayotte</a></i> (<a href="/wiki/French_overseas_territory" title="French overseas territory">overseas territory of France</a>) – <a href="/wiki/Mamoudzou" title="Mamoudzou">Mamoudzou</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Morocco.svg" class="image" title="Flag of Morocco"><img alt="Flag of Morocco" longdesc="/wiki/Image:Flag_of_Morocco.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/2/2c/Flag_of_Morocco.svg/50px-Flag_of_Morocco.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Morocco" title="Morocco">Morocco</a></b> – <a href="/wiki/Rabat" title="Rabat">Rabat</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Mozambique.svg" class="image" title="Flag of Mozambique"><img alt="Flag of Mozambique" longdesc="/wiki/Image:Flag_of_Mozambique.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/d/d0/Flag_of_Mozambique.svg/50px-Flag_of_Mozambique.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Mozambique" title="Mozambique">Mozambique</a></b> – <a href="/wiki/Maputo" title="Maputo">Maputo</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Namibia.svg" class="image" title="Flag of Namibia"><img alt="Flag of Namibia" longdesc="/wiki/Image:Flag_of_Namibia.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/0/00/Flag_of_Namibia.svg/50px-Flag_of_Namibia.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Namibia" title="Namibia">Namibia</a></b> – <a href="/wiki/Windhoek" title="Windhoek">Windhoek</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Niger.svg" class="image" title="Flag of Niger"><img alt="Flag of Niger" longdesc="/wiki/Image:Flag_of_Niger.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/f/f4/Flag_of_Niger.svg/50px-Flag_of_Niger.svg.png" height="43" width="50"></a>&nbsp;<a href="/wiki/Niger" title="Niger">Niger</a></b> – <a href="/wiki/Niamey" title="Niamey">Niamey</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Nigeria.svg" class="image" title="Flag of Nigeria"><img alt="Flag of Nigeria" longdesc="/wiki/Image:Flag_of_Nigeria.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/7/79/Flag_of_Nigeria.svg/50px-Flag_of_Nigeria.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/Nigeria" title="Nigeria">Nigeria</a></b> – <a href="/wiki/Abuja" title="Abuja">Abuja</a></td></tr>
<tr><td>Africa</td><td><i><a href="/wiki/Image:Flag_of_France.svg" class="image" title="Flag of Réunion"><img alt="Flag of Réunion" longdesc="/wiki/Image:Flag_of_France.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Flag_of_France.svg/50px-Flag_of_France.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/R%C3%A9union" title="Réunion">Réunion</a></i> (<a href="/wiki/French_overseas_territory" title="French overseas territory">overseas department of France</a>) – <a href="/wiki/Saint-Denis%2C_R%C3%A9union" title="Saint-Denis, Réunion">Saint-Denis</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Rwanda.svg" class="image" title="Flag of Rwanda"><img alt="Flag of Rwanda" longdesc="/wiki/Image:Flag_of_Rwanda.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/1/17/Flag_of_Rwanda.svg/50px-Flag_of_Rwanda.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Rwanda" title="Rwanda">Rwanda</a></b> – <a href="/wiki/Kigali" title="Kigali">Kigali</a></td></tr>
<tr><td>Africa</td><td><i><a href="/wiki/Image:Flag_of_Saint_Helena.svg" class="image" title="Flag of Saint Helena"><img alt="Flag of Saint Helena" longdesc="/wiki/Image:Flag_of_Saint_Helena.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/0/00/Flag_of_Saint_Helena.svg/50px-Flag_of_Saint_Helena.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/Saint_Helena" title="Saint Helena">Saint Helena</a></i> (<a href="/wiki/British_overseas_territory" title="British overseas territory">overseas territory of the United Kingdom</a>) – <a href="/wiki/Jamestown%2C_Saint_Helena" title="Jamestown, Saint Helena">Jamestown</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Sao_Tome_and_Principe.svg" class="image" title="Flag of São Tomé and Príncipe"><img alt="Flag of São Tomé and Príncipe" longdesc="/wiki/Image:Flag_of_Sao_Tome_and_Principe.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/4/4f/Flag_of_Sao_Tome_and_Principe.svg/50px-Flag_of_Sao_Tome_and_Principe.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/S%C3%A3o_Tom%C3%A9_and_Pr%C3%ADncipe" title="São Tomé and Príncipe">Sao Tome and Principe</a></b> – <a href="/wiki/S%C3%A3o_Tom%C3%A9" title="São Tomé">São Tomé</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Senegal.svg" class="image" title="Flag of Senegal"><img alt="Flag of Senegal" longdesc="/wiki/Image:Flag_of_Senegal.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/f/fd/Flag_of_Senegal.svg/50px-Flag_of_Senegal.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Senegal" title="Senegal">Senegal</a></b> – <a href="/wiki/Dakar" title="Dakar">Dakar</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_the_Seychelles.svg" class="image" title="Flag of the Seychelles"><img alt="Flag of the Seychelles" longdesc="/wiki/Image:Flag_of_the_Seychelles.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/9/92/Flag_of_the_Seychelles.svg/50px-Flag_of_the_Seychelles.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/Seychelles" title="Seychelles">Seychelles</a></b> – <a href="/wiki/Victoria%2C_Seychelles" title="Victoria, Seychelles">Victoria</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Sierra_Leone.svg" class="image" title="Flag of Sierra Leone"><img alt="Flag of Sierra Leone" longdesc="/wiki/Image:Flag_of_Sierra_Leone.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/1/17/Flag_of_Sierra_Leone.svg/50px-Flag_of_Sierra_Leone.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Sierra_Leone" title="Sierra Leone">Sierra Leone</a></b> – <a href="/wiki/Freetown" title="Freetown">Freetown</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Somalia.svg" class="image" title="Flag of Somalia"><img alt="Flag of Somalia" longdesc="/wiki/Image:Flag_of_Somalia.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/a/a0/Flag_of_Somalia.svg/50px-Flag_of_Somalia.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Somalia" title="Somalia">Somalia</a></b> – <a href="/wiki/Mogadishu" title="Mogadishu">Mogadishu</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_South_Africa.svg" class="image" title="Flag of South Africa"><img alt="Flag of South Africa" longdesc="/wiki/Image:Flag_of_South_Africa.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/a/af/Flag_of_South_Africa.svg/50px-Flag_of_South_Africa.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/South_Africa" title="South Africa">South Africa</a></b> – <a href="/wiki/Pretoria" title="Pretoria">Pretoria</a> (administrative), <a href="/wiki/Cape_Town" title="Cape Town">Cape Town</a> (legislative), <a href="/wiki/Bloemfontein" title="Bloemfontein">Bloemfontein</a> (judicial)</td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Sudan.svg" class="image" title="Flag of Sudan"><img alt="Flag of Sudan" longdesc="/wiki/Image:Flag_of_Sudan.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/0/01/Flag_of_Sudan.svg/50px-Flag_of_Sudan.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/Sudan" title="Sudan">Sudan</a></b> – <a href="/wiki/Khartoum" title="Khartoum">Khartoum</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Swaziland.svg" class="image" title="Flag of Swaziland"><img alt="Flag of Swaziland" longdesc="/wiki/Image:Flag_of_Swaziland.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/1/1e/Flag_of_Swaziland.svg/50px-Flag_of_Swaziland.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Swaziland" title="Swaziland">Swaziland</a></b> – <a href="/wiki/Mbabane" title="Mbabane">Mbabane</a> (administrative), <a href="/wiki/Lobamba" title="Lobamba">Lobamba</a> (royal and legislative)</td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Tanzania.svg" class="image" title="Flag of Tanzania"><img alt="Flag of Tanzania" longdesc="/wiki/Image:Flag_of_Tanzania.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/3/38/Flag_of_Tanzania.svg/50px-Flag_of_Tanzania.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Tanzania" title="Tanzania">Tanzania</a></b> – <a href="/wiki/Dodoma" title="Dodoma">Dodoma</a> (seat of government at <a href="/wiki/Dar_es_Salaam" title="Dar es Salaam">Dar es Salaam</a>)</td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Togo.svg" class="image" title="Flag of Togo"><img alt="Flag of Togo" longdesc="/wiki/Image:Flag_of_Togo.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/6/68/Flag_of_Togo.svg/50px-Flag_of_Togo.svg.png" height="31" width="50"></a>&nbsp;<a href="/wiki/Togo" title="Togo">Togo</a></b> – <a href="/wiki/Lom%C3%A9" title="Lomé">Lomé</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Tunisia.svg" class="image" title="Flag of Tunisia"><img alt="Flag of Tunisia" longdesc="/wiki/Image:Flag_of_Tunisia.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/c/ce/Flag_of_Tunisia.svg/50px-Flag_of_Tunisia.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Tunisia" title="Tunisia">Tunisia</a></b> – <a href="/wiki/Tunis" title="Tunis">Tunis</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Uganda.svg" class="image" title="Flag of Uganda"><img alt="Flag of Uganda" longdesc="/wiki/Image:Flag_of_Uganda.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/4/4e/Flag_of_Uganda.svg/50px-Flag_of_Uganda.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Uganda" title="Uganda">Uganda</a></b> – <a href="/wiki/Kampala" title="Kampala">Kampala</a></td></tr>
<tr><td>Africa</td><td><i><b><a href="/wiki/Image:Flag_of_Western_Sahara.svg" class="image" title="Flag of Western Sahara"><img alt="Flag of Western Sahara" longdesc="/wiki/Image:Flag_of_Western_Sahara.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/c/c8/Flag_of_Western_Sahara.svg/50px-Flag_of_Western_Sahara.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/Western_Sahara" title="Western Sahara">Western Sahara</a></b></i> – <a href="/wiki/El_Aai%C3%BAn" title="El Aaiún">El Aaiún</a> (unofficial)</td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Zambia.svg" class="image" title="Flag of Zambia"><img alt="Flag of Zambia" longdesc="/wiki/Image:Flag_of_Zambia.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/0/06/Flag_of_Zambia.svg/50px-Flag_of_Zambia.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Zambia" title="Zambia">Zambia</a></b> – <a href="/wiki/Lusaka" title="Lusaka">Lusaka</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Zimbabwe.svg" class="image" title="Flag of Zimbabwe"><img alt="Flag of Zimbabwe" longdesc="/wiki/Image:Flag_of_Zimbabwe.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/6/6a/Flag_of_Zimbabwe.svg/50px-Flag_of_Zimbabwe.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/Zimbabwe" title="Zimbabwe">Zimbabwe</a></b> – <a href="/wiki/Harare" title="Harare">Harare</a></td></tr>
 
<!-- Eurasia: Asia -->
 
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Afghanistan.svg" class="image" title="Flag of Afghanistan"><img alt="Flag of Afghanistan" longdesc="/wiki/Image:Flag_of_Afghanistan.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Flag_of_Afghanistan.svg/50px-Flag_of_Afghanistan.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Afghanistan" title="Afghanistan">Afghanistan</a></b> – <a href="/wiki/Kabul" title="Kabul">Kabul</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Armenia.svg" class="image" title="Flag of Armenia"><img alt="Flag of Armenia" longdesc="/wiki/Image:Flag_of_Armenia.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/2/2f/Flag_of_Armenia.svg/50px-Flag_of_Armenia.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/Armenia" title="Armenia">Armenia</a></b><sup id="_ref-europe_0" class="reference"><a href="#_note-europe" title="">[2]</a></sup> – <a href="/wiki/Yerevan" title="Yerevan">Yerevan</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Azerbaijan.svg" class="image" title="Flag of Azerbaijan"><img alt="Flag of Azerbaijan" longdesc="/wiki/Image:Flag_of_Azerbaijan.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Flag_of_Azerbaijan.svg/50px-Flag_of_Azerbaijan.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/Azerbaijan" title="Azerbaijan">Azerbaijan</a></b><sup id="_ref-europe_1" class="reference"><a href="#_note-europe" title="">[2]</a></sup> – <a href="/wiki/Baku" title="Baku">Baku</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Bahrain.svg" class="image" title="Flag of Bahrain"><img alt="Flag of Bahrain" longdesc="/wiki/Image:Flag_of_Bahrain.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/2/2c/Flag_of_Bahrain.svg/50px-Flag_of_Bahrain.svg.png" height="30" width="50"></a>&nbsp;<a href="/wiki/Bahrain" title="Bahrain">Bahrain</a></b> – <a href="/wiki/Manama" title="Manama">Manama</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Bangladesh.svg" class="image" title="Flag of Bangladesh"><img alt="Flag of Bangladesh" longdesc="/wiki/Image:Flag_of_Bangladesh.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/f/f9/Flag_of_Bangladesh.svg/50px-Flag_of_Bangladesh.svg.png" height="30" width="50"></a>&nbsp;<a href="/wiki/Bangladesh" title="Bangladesh">Bangladesh</a></b> – <a href="/wiki/Dhaka" title="Dhaka">Dhaka</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Bhutan.svg" class="image" title="Flag of Bhutan"><img alt="Flag of Bhutan" longdesc="/wiki/Image:Flag_of_Bhutan.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/9/91/Flag_of_Bhutan.svg/50px-Flag_of_Bhutan.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Bhutan" title="Bhutan">Bhutan</a></b> – <a href="/wiki/Thimphu" title="Thimphu">Thimphu</a></td></tr>
<tr><td>Asia</td><td><i><a href="/wiki/Image:Flag_of_the_British_Indian_Ocean_Territory.svg" class="image" title="Flag of British Indian Ocean Territory"><img alt="Flag of British Indian Ocean Territory" longdesc="/wiki/Image:Flag_of_the_British_Indian_Ocean_Territory.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/6/6e/Flag_of_the_British_Indian_Ocean_Territory.svg/50px-Flag_of_the_British_Indian_Ocean_Territory.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/British_Indian_Ocean_Territory" title="British Indian Ocean Territory">British Indian Ocean Territory</a></i><sup id="_ref-1" class="reference"><a href="#_note-1" title="">[3]</a></sup> (<a href="/wiki/British_overseas_territory" title="British overseas territory">overseas territory of the United Kingdom</a>)</td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Brunei.svg" class="image" title="Flag of Brunei"><img alt="Flag of Brunei" longdesc="/wiki/Image:Flag_of_Brunei.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/9/9c/Flag_of_Brunei.svg/50px-Flag_of_Brunei.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/Brunei" title="Brunei">Brunei</a></b> – <a href="/wiki/Bandar_Seri_Begawan" title="Bandar Seri Begawan">Bandar Seri Begawan</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Cambodia.svg" class="image" title="Flag of Cambodia"><img alt="Flag of Cambodia" longdesc="/wiki/Image:Flag_of_Cambodia.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/8/83/Flag_of_Cambodia.svg/50px-Flag_of_Cambodia.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Cambodia" title="Cambodia">Cambodia</a></b> – <a href="/wiki/Phnom_Penh" title="Phnom Penh">Phnom Penh</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_the_People%27s_Republic_of_China.svg" class="image" title="Flag of the People's Republic of China"><img alt="Flag of the People's Republic of China" longdesc="/wiki/Image:Flag_of_the_People%27s_Republic_of_China.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/f/fa/Flag_of_the_People%27s_Republic_of_China.svg/50px-Flag_of_the_People%27s_Republic_of_China.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/People%27s_Republic_of_China" title="People's Republic of China">China, People's Republic of</a></b> – <a href="/wiki/Beijing" title="Beijing">Beijing</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_the_Republic_of_China.svg" class="image" title="Flag of the Republic of China"><img alt="Flag of the Republic of China" longdesc="/wiki/Image:Flag_of_the_Republic_of_China.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/7/72/Flag_of_the_Republic_of_China.svg/50px-Flag_of_the_Republic_of_China.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Republic_of_China" title="Republic of China">China, Republic of</a></b> (commonly known as <b>Taiwan</b>) – <a href="/wiki/Taipei" title="Taipei">Taipei</a></td></tr>
<tr><td>Asia</td><td><i><a href="/wiki/Image:Flag_of_Christmas_Island.svg" class="image" title="Flag of Christmas Island"><img alt="Flag of Christmas Island" longdesc="/wiki/Image:Flag_of_Christmas_Island.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/6/67/Flag_of_Christmas_Island.svg/50px-Flag_of_Christmas_Island.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/Christmas_Island" title="Christmas Island">Christmas Island</a></i><sup id="_ref-australia_0" class="reference"><a href="#_note-australia" title="">[4]</a></sup> (overseas territory of Australia)</td></tr>
<tr><td>Asia</td><td><i><a href="/wiki/Image:Flag_of_Australia.svg" class="image" title="Flag of the Cocos (Keeling) Islands"><img alt="Flag of the Cocos (Keeling) Islands" longdesc="/wiki/Image:Flag_of_Australia.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/b/b9/Flag_of_Australia.svg/50px-Flag_of_Australia.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/Cocos_%28Keeling%29_Islands" title="Cocos (Keeling) Islands">Cocos (Keeling) Islands</a></i><sup id="_ref-australia_1" class="reference"><a href="#_note-australia" title="">[4]</a></sup> (overseas territory of Australia)</td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Cyprus.svg" class="image" title="Flag of Cyprus"><img alt="Flag of Cyprus" longdesc="/wiki/Image:Flag_of_Cyprus.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/d/d4/Flag_of_Cyprus.svg/50px-Flag_of_Cyprus.svg.png" height="30" width="50"></a>&nbsp;<a href="/wiki/Cyprus" title="Cyprus">Cyprus</a></b><sup id="_ref-europe_2" class="reference"><a href="#_note-europe" title="">[2]</a></sup> – <a href="/wiki/Nicosia" title="Nicosia">Nicosia</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Georgia.svg" class="image" title="Flag of Georgia (country)"><img alt="Flag of Georgia (country)" longdesc="/wiki/Image:Flag_of_Georgia.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/0/0f/Flag_of_Georgia.svg/50px-Flag_of_Georgia.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Georgia_%28country%29" title="Georgia (country)">Georgia</a></b><sup id="_ref-europe_3" class="reference"><a href="#_note-europe" title="">[2]</a></sup> – <a href="/wiki/Tbilisi" title="Tbilisi">Tbilisi</a></td></tr>
<tr><td>Asia</td><td><i><a href="/wiki/Image:Flag_of_Hong_Kong.svg" class="image" title="Flag of Hong Kong"><img alt="Flag of Hong Kong" longdesc="/wiki/Image:Flag_of_Hong_Kong.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/5/5b/Flag_of_Hong_Kong.svg/50px-Flag_of_Hong_Kong.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Hong_Kong" title="Hong Kong">Hong Kong</a></i> (<a href="/wiki/Special_administrative_region_%28People%27s_Republic_of_China%29" title="Special administrative region (People's Republic of China)">special administrative region of the People's Republic of China</a>)</td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_India.svg" class="image" title="Flag of India"><img alt="Flag of India" longdesc="/wiki/Image:Flag_of_India.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/4/41/Flag_of_India.svg/50px-Flag_of_India.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/India" title="India">India</a></b> – <a href="/wiki/New_Delhi" title="New Delhi">New Delhi</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Indonesia.svg" class="image" title="Flag of Indonesia"><img alt="Flag of Indonesia" longdesc="/wiki/Image:Flag_of_Indonesia.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Flag_of_Indonesia.svg/50px-Flag_of_Indonesia.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Indonesia" title="Indonesia">Indonesia</a></b> – <a href="/wiki/Jakarta" title="Jakarta">Jakarta</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Iran.svg" class="image" title="Flag of Iran"><img alt="Flag of Iran" longdesc="/wiki/Image:Flag_of_Iran.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/c/ca/Flag_of_Iran.svg/50px-Flag_of_Iran.svg.png" height="29" width="50"></a>&nbsp;<a href="/wiki/Iran" title="Iran">Iran</a></b> – <a href="/wiki/Tehran" title="Tehran">Tehran</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Iraq.svg" class="image" title="Flag of Iraq"><img alt="Flag of Iraq" longdesc="/wiki/Image:Flag_of_Iraq.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/f/f6/Flag_of_Iraq.svg/50px-Flag_of_Iraq.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Iraq" title="Iraq">Iraq</a></b> – <a href="/wiki/Baghdad" title="Baghdad">Baghdad</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Israel.svg" class="image" title="Flag of Israel"><img alt="Flag of Israel" longdesc="/wiki/Image:Flag_of_Israel.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/d/d4/Flag_of_Israel.svg/50px-Flag_of_Israel.svg.png" height="36" width="50"></a>&nbsp;<a href="/wiki/Israel" title="Israel">Israel</a></b> – <a href="/wiki/Jerusalem" title="Jerusalem">Jerusalem</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Japan.svg" class="image" title="Flag of Japan"><img alt="Flag of Japan" longdesc="/wiki/Image:Flag_of_Japan.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/9/9e/Flag_of_Japan.svg/50px-Flag_of_Japan.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Japan" title="Japan">Japan</a></b> – <a href="/wiki/Tokyo" title="Tokyo">Tokyo</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Jordan.svg" class="image" title="Flag of Jordan"><img alt="Flag of Jordan" longdesc="/wiki/Image:Flag_of_Jordan.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/c/c0/Flag_of_Jordan.svg/50px-Flag_of_Jordan.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/Jordan" title="Jordan">Jordan</a></b> – <a href="/wiki/Amman" title="Amman">Amman</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Kazakhstan.svg" class="image" title="Flag of Kazakhstan"><img alt="Flag of Kazakhstan" longdesc="/wiki/Image:Flag_of_Kazakhstan.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/d/d3/Flag_of_Kazakhstan.svg/50px-Flag_of_Kazakhstan.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/Kazakhstan" title="Kazakhstan">Kazakhstan</a></b> – <a href="/wiki/Astana" title="Astana">Astana</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_North_Korea.svg" class="image" title="Flag of North Korea"><img alt="Flag of North Korea" longdesc="/wiki/Image:Flag_of_North_Korea.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/5/51/Flag_of_North_Korea.svg/50px-Flag_of_North_Korea.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/North_Korea" title="North Korea">Korea, Democratic People's Republic of</a></b> (commonly known as <b>North Korea</b>) – <a href="/wiki/Pyongyang" title="Pyongyang">Pyongyang</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_South_Korea.svg" class="image" title="Flag of South Korea"><img alt="Flag of South Korea" longdesc="/wiki/Image:Flag_of_South_Korea.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/0/09/Flag_of_South_Korea.svg/50px-Flag_of_South_Korea.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/South_Korea" title="South Korea">Korea, Republic of</a></b> (commonly known as <b>South Korea</b>) – <a href="/wiki/Seoul" title="Seoul">Seoul</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Kuwait.svg" class="image" title="Flag of Kuwait"><img alt="Flag of Kuwait" longdesc="/wiki/Image:Flag_of_Kuwait.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/a/aa/Flag_of_Kuwait.svg/50px-Flag_of_Kuwait.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/Kuwait" title="Kuwait">Kuwait</a></b> – <a href="/wiki/Kuwait_City" title="Kuwait City">Kuwait City</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Kyrgyzstan.svg" class="image" title="Flag of Kyrgyzstan"><img alt="Flag of Kyrgyzstan" longdesc="/wiki/Image:Flag_of_Kyrgyzstan.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/c/c7/Flag_of_Kyrgyzstan.svg/50px-Flag_of_Kyrgyzstan.svg.png" height="30" width="50"></a>&nbsp;<a href="/wiki/Kyrgyzstan" title="Kyrgyzstan">Kyrgyzstan</a></b> – <a href="/wiki/Bishkek" title="Bishkek">Bishkek</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Laos.svg" class="image" title="Flag of Laos"><img alt="Flag of Laos" longdesc="/wiki/Image:Flag_of_Laos.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/5/56/Flag_of_Laos.svg/50px-Flag_of_Laos.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Laos" title="Laos">Laos</a></b> – <a href="/wiki/Vientiane" title="Vientiane">Vientiane</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Lebanon.svg" class="image" title="Flag of Lebanon"><img alt="Flag of Lebanon" longdesc="/wiki/Image:Flag_of_Lebanon.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/5/59/Flag_of_Lebanon.svg/50px-Flag_of_Lebanon.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Lebanon" title="Lebanon">Lebanon</a></b> – <a href="/wiki/Beirut" title="Beirut">Beirut</a></td></tr>
<tr><td>Asia</td><td><i><a href="/wiki/Image:Flag_of_Macau.svg" class="image" title="Flag of Macau"><img alt="Flag of Macau" longdesc="/wiki/Image:Flag_of_Macau.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/6/63/Flag_of_Macau.svg/50px-Flag_of_Macau.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Macau" title="Macau">Macau</a></i> (<a href="/wiki/Special_administrative_region_%28People%27s_Republic_of_China%29" title="Special administrative region (People's Republic of China)">special administrative region of the People's Republic of China</a>)</td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Malaysia.svg" class="image" title="Flag of Malaysia"><img alt="Flag of Malaysia" longdesc="/wiki/Image:Flag_of_Malaysia.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/6/66/Flag_of_Malaysia.svg/50px-Flag_of_Malaysia.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/Malaysia" title="Malaysia">Malaysia</a></b> – <a href="/wiki/Kuala_Lumpur" title="Kuala Lumpur">Kuala Lumpur</a> (seat of government at <a href="/wiki/Putrajaya" title="Putrajaya">Putrajaya</a>)</td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Maldives.svg" class="image" title="Flag of the Maldives"><img alt="Flag of the Maldives" longdesc="/wiki/Image:Flag_of_Maldives.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/0/0f/Flag_of_Maldives.svg/50px-Flag_of_Maldives.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Maldives" title="Maldives">Maldives</a></b> – <a href="/wiki/Mal%C3%A9" title="Malé">Malé</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Mongolia.svg" class="image" title="Flag of Mongolia"><img alt="Flag of Mongolia" longdesc="/wiki/Image:Flag_of_Mongolia.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/4/4c/Flag_of_Mongolia.svg/50px-Flag_of_Mongolia.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/Mongolia" title="Mongolia">Mongolia</a></b> – <a href="/wiki/Ulaanbaatar" title="Ulaanbaatar">Ulaanbaatar</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Myanmar.svg" class="image" title="Flag of Myanmar"><img alt="Flag of Myanmar" longdesc="/wiki/Image:Flag_of_Myanmar.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/8/8c/Flag_of_Myanmar.svg/50px-Flag_of_Myanmar.svg.png" height="28" width="50"></a>&nbsp;<a href="/wiki/Myanmar" title="Myanmar">Myanmar</a></b> (formerly known as <b>Burma</b>) – <a href="/wiki/Naypyidaw" title="Naypyidaw">Naypyidaw</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Nepal.svg" class="image" title="Flag of Nepal"><img alt="Flag of Nepal" longdesc="/wiki/Image:Flag_of_Nepal.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/9/9b/Flag_of_Nepal.svg/50px-Flag_of_Nepal.svg.png" height="61" width="50"></a>&nbsp;<a href="/wiki/Nepal" title="Nepal">Nepal</a></b> – <a href="/wiki/Kathmandu" title="Kathmandu">Kathmandu</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Oman.svg" class="image" title="Flag of Oman"><img alt="Flag of Oman" longdesc="/wiki/Image:Flag_of_Oman.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Flag_of_Oman.svg/50px-Flag_of_Oman.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/Oman" title="Oman">Oman</a></b> – <a href="/wiki/Muscat%2C_Oman" title="Muscat, Oman">Muscat</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Pakistan.svg" class="image" title="Flag of Pakistan"><img alt="Flag of Pakistan" longdesc="/wiki/Image:Flag_of_Pakistan.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Flag_of_Pakistan.svg/50px-Flag_of_Pakistan.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Pakistan" title="Pakistan">Pakistan</a></b> – <a href="/wiki/Islamabad" title="Islamabad">Islamabad</a></td></tr>
<tr><td>Asia</td><td><i><b><a href="/wiki/Image:Flag_of_Palestine.svg" class="image" title="Palestinian flag"><img alt="Palestinian flag" longdesc="/wiki/Image:Flag_of_Palestine.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/0/00/Flag_of_Palestine.svg/50px-Flag_of_Palestine.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/Palestinian_territories" title="Palestinian territories">Palestinian territories</a></b></i> (collectively the territories of the <a href="/wiki/West_Bank" title="West Bank">West Bank</a> and the <a href="/wiki/Gaza_Strip" title="Gaza Strip">Gaza Strip</a>)</td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_the_Philippines.svg" class="image" title="Flag of the Philippines"><img alt="Flag of the Philippines" longdesc="/wiki/Image:Flag_of_the_Philippines.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/9/99/Flag_of_the_Philippines.svg/50px-Flag_of_the_Philippines.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/Philippines" title="Philippines">Philippines</a></b> – <a href="/wiki/Manila" title="Manila">Manila</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Qatar.svg" class="image" title="Flag of Qatar"><img alt="Flag of Qatar" longdesc="/wiki/Image:Flag_of_Qatar.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/6/65/Flag_of_Qatar.svg/50px-Flag_of_Qatar.svg.png" height="20" width="50"></a>&nbsp;<a href="/wiki/Qatar" title="Qatar">Qatar</a></b> – <a href="/wiki/Doha" title="Doha">Doha</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Saudi_Arabia.svg" class="image" title="Flag of Saudi Arabia"><img alt="Flag of Saudi Arabia" longdesc="/wiki/Image:Flag_of_Saudi_Arabia.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/0/0d/Flag_of_Saudi_Arabia.svg/50px-Flag_of_Saudi_Arabia.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Saudi_Arabia" title="Saudi Arabia">Saudi Arabia</a></b> – <a href="/wiki/Riyadh" title="Riyadh">Riyadh</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Singapore.svg" class="image" title="Flag of Singapore"><img alt="Flag of Singapore" longdesc="/wiki/Image:Flag_of_Singapore.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/4/48/Flag_of_Singapore.svg/50px-Flag_of_Singapore.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Singapore" title="Singapore">Singapore</a></b> – Singapore<sup id="_ref-city-state_0" class="reference"><a href="#_note-city-state" title="">[5]</a></sup></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Sri_Lanka.svg" class="image" title="Flag of Sri Lanka"><img alt="Flag of Sri Lanka" longdesc="/wiki/Image:Flag_of_Sri_Lanka.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/1/11/Flag_of_Sri_Lanka.svg/50px-Flag_of_Sri_Lanka.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/Sri_Lanka" title="Sri Lanka">Sri Lanka</a></b> – <a href="/wiki/Sri_Jayawardenepura" title="Sri Jayawardenepura">Sri Jayawardenepura</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Syria.svg" class="image" title="Flag of Syria"><img alt="Flag of Syria" longdesc="/wiki/Image:Flag_of_Syria.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/5/53/Flag_of_Syria.svg/50px-Flag_of_Syria.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Syria" title="Syria">Syria</a></b> – <a href="/wiki/Damascus" title="Damascus">Damascus</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Tajikistan.svg" class="image" title="Flag of Tajikistan"><img alt="Flag of Tajikistan" longdesc="/wiki/Image:Flag_of_Tajikistan.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/d/d0/Flag_of_Tajikistan.svg/50px-Flag_of_Tajikistan.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/Tajikistan" title="Tajikistan">Tajikistan</a></b> – <a href="/wiki/Dushanbe" title="Dushanbe">Dushanbe</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Thailand.svg" class="image" title="Flag of Thailand"><img alt="Flag of Thailand" longdesc="/wiki/Image:Flag_of_Thailand.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/a/a9/Flag_of_Thailand.svg/50px-Flag_of_Thailand.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Thailand" title="Thailand">Thailand</a></b> – <a href="/wiki/Bangkok" title="Bangkok">Bangkok</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_East_Timor.svg" class="image" title="Flag of East Timor"><img alt="Flag of East Timor" longdesc="/wiki/Image:Flag_of_East_Timor.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/2/26/Flag_of_East_Timor.svg/50px-Flag_of_East_Timor.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/East_Timor" title="East Timor">Timor-Leste</a></b> (commonly known as <b>East Timor</b>) – <a href="/wiki/Dili" title="Dili">Dili</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Turkey.svg" class="image" title="Flag of Turkey"><img alt="Flag of Turkey" longdesc="/wiki/Image:Flag_of_Turkey.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/b/b4/Flag_of_Turkey.svg/50px-Flag_of_Turkey.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Turkey" title="Turkey">Turkey</a></b><sup id="_ref-europe_4" class="reference"><a href="#_note-europe" title="">[2]</a></sup> – <a href="/wiki/Ankara" title="Ankara">Ankara</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Turkmenistan.svg" class="image" title="Flag of Turkmenistan"><img alt="Flag of Turkmenistan" longdesc="/wiki/Image:Flag_of_Turkmenistan.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/1/1b/Flag_of_Turkmenistan.svg/50px-Flag_of_Turkmenistan.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Turkmenistan" title="Turkmenistan">Turkmenistan</a></b> – <a href="/wiki/Ashgabat" title="Ashgabat">Ashgabat</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_the_United_Arab_Emirates.svg" class="image" title="Flag of the United Arab Emirates"><img alt="Flag of the United Arab Emirates" longdesc="/wiki/Image:Flag_of_the_United_Arab_Emirates.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Flag_of_the_United_Arab_Emirates.svg/50px-Flag_of_the_United_Arab_Emirates.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/United_Arab_Emirates" title="United Arab Emirates">United Arab Emirates</a></b> – <a href="/wiki/Abu_Dhabi" title="Abu Dhabi">Abu Dhabi</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Uzbekistan.svg" class="image" title="Flag of Uzbekistan"><img alt="Flag of Uzbekistan" longdesc="/wiki/Image:Flag_of_Uzbekistan.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/8/84/Flag_of_Uzbekistan.svg/50px-Flag_of_Uzbekistan.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/Uzbekistan" title="Uzbekistan">Uzbekistan</a></b> – <a href="/wiki/Tashkent" title="Tashkent">Tashkent</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Vietnam.svg" class="image" title="Flag of Vietnam"><img alt="Flag of Vietnam" longdesc="/wiki/Image:Flag_of_Vietnam.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/2/21/Flag_of_Vietnam.svg/50px-Flag_of_Vietnam.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Vietnam" title="Vietnam">Vietnam</a></b> – <a href="/wiki/Hanoi" title="Hanoi">Hanoi</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Yemen.svg" class="image" title="Flag of Yemen"><img alt="Flag of Yemen" longdesc="/wiki/Image:Flag_of_Yemen.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/8/89/Flag_of_Yemen.svg/50px-Flag_of_Yemen.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Yemen" title="Yemen">Yemen</a></b> – <a href="/wiki/Sana%27a" title="Sana'a">Sana'a</a></td></tr>
 
<!-- Eurasia: Europe -->
 
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Albania.svg" class="image" title="Flag of Albania"><img alt="Flag of Albania" longdesc="/wiki/Image:Flag_of_Albania.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/3/36/Flag_of_Albania.svg/50px-Flag_of_Albania.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Albania" title="Albania">Albania</a></b> – <a href="/wiki/Tirana" title="Tirana">Tirana</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Andorra.svg" class="image" title="Flag of Andorra"><img alt="Flag of Andorra" longdesc="/wiki/Image:Flag_of_Andorra.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/1/19/Flag_of_Andorra.svg/50px-Flag_of_Andorra.svg.png" height="35" width="50"></a>&nbsp;<a href="/wiki/Andorra" title="Andorra">Andorra</a></b> – <a href="/wiki/Andorra_la_Vella" title="Andorra la Vella">Andorra la Vella</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Austria.svg" class="image" title="Flag of Austria"><img alt="Flag of Austria" longdesc="/wiki/Image:Flag_of_Austria.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/4/41/Flag_of_Austria.svg/50px-Flag_of_Austria.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Austria" title="Austria">Austria</a></b> – <a href="/wiki/Vienna" title="Vienna">Vienna</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Belarus.svg" class="image" title="Flag of Belarus"><img alt="Flag of Belarus" longdesc="/wiki/Image:Flag_of_Belarus.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/8/85/Flag_of_Belarus.svg/50px-Flag_of_Belarus.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/Belarus" title="Belarus">Belarus</a></b> – <a href="/wiki/Minsk" title="Minsk">Minsk</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Belgium_%28civil%29.svg" class="image" title="Flag of Belgium"><img alt="Flag of Belgium" longdesc="/wiki/Image:Flag_of_Belgium_%28civil%29.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/9/92/Flag_of_Belgium_%28civil%29.svg/50px-Flag_of_Belgium_%28civil%29.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Belgium" title="Belgium">Belgium</a></b> – <a href="/wiki/Brussels" title="Brussels">Brussels</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Bosnia_and_Herzegovina.svg" class="image" title="Flag of Bosnia and Herzegovina"><img alt="Flag of Bosnia and Herzegovina" longdesc="/wiki/Image:Flag_of_Bosnia_and_Herzegovina.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/b/bf/Flag_of_Bosnia_and_Herzegovina.svg/50px-Flag_of_Bosnia_and_Herzegovina.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/Bosnia_and_Herzegovina" title="Bosnia and Herzegovina">Bosnia and Herzegovina</a></b> – <a href="/wiki/Sarajevo" title="Sarajevo">Sarajevo</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Bulgaria.svg" class="image" title="Flag of Bulgaria"><img alt="Flag of Bulgaria" longdesc="/wiki/Image:Flag_of_Bulgaria.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Flag_of_Bulgaria.svg/50px-Flag_of_Bulgaria.svg.png" height="30" width="50"></a>&nbsp;<a href="/wiki/Bulgaria" title="Bulgaria">Bulgaria</a></b> – <a href="/wiki/Sofia" title="Sofia">Sofia</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Croatia.svg" class="image" title="Flag of Croatia"><img alt="Flag of Croatia" longdesc="/wiki/Image:Flag_of_Croatia.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/1/1b/Flag_of_Croatia.svg/50px-Flag_of_Croatia.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/Croatia" title="Croatia">Croatia</a></b> – <a href="/wiki/Zagreb" title="Zagreb">Zagreb</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_the_Czech_Republic.svg" class="image" title="Flag of the Czech Republic"><img alt="Flag of the Czech Republic" longdesc="/wiki/Image:Flag_of_the_Czech_Republic.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/c/cb/Flag_of_the_Czech_Republic.svg/50px-Flag_of_the_Czech_Republic.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Czech_Republic" title="Czech Republic">Czech Republic</a></b> – <a href="/wiki/Prague" title="Prague">Prague</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Denmark.svg" class="image" title="Flag of Denmark"><img alt="Flag of Denmark" longdesc="/wiki/Image:Flag_of_Denmark.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/9/9c/Flag_of_Denmark.svg/50px-Flag_of_Denmark.svg.png" height="38" width="50"></a>&nbsp;<a href="/wiki/Denmark" title="Denmark">Denmark</a></b> – <a href="/wiki/Copenhagen" title="Copenhagen">Copenhagen</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Estonia.svg" class="image" title="Flag of Estonia"><img alt="Flag of Estonia" longdesc="/wiki/Image:Flag_of_Estonia.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/8/8f/Flag_of_Estonia.svg/50px-Flag_of_Estonia.svg.png" height="32" width="50"></a>&nbsp;<a href="/wiki/Estonia" title="Estonia">Estonia</a></b> – <a href="/wiki/Tallinn" title="Tallinn">Tallinn</a></td></tr>
<tr><td>Europe</td><td><i><a href="/wiki/Image:Flag_of_the_Faroe_Islands.svg" class="image" title="Flag of the Faroe Islands"><img alt="Flag of the Faroe Islands" longdesc="/wiki/Image:Flag_of_the_Faroe_Islands.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/3/3c/Flag_of_the_Faroe_Islands.svg/50px-Flag_of_the_Faroe_Islands.svg.png" height="36" width="50"></a>&nbsp;<a href="/wiki/Faroe_Islands" title="Faroe Islands">Faroe Islands</a></i> (overseas territory of Denmark) – <a href="/wiki/T%C3%B3rshavn" title="Tórshavn">Tórshavn</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Finland.svg" class="image" title="Flag of Finland"><img alt="Flag of Finland" longdesc="/wiki/Image:Flag_of_Finland.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/b/bc/Flag_of_Finland.svg/50px-Flag_of_Finland.svg.png" height="31" width="50"></a>&nbsp;<a href="/wiki/Finland" title="Finland">Finland</a></b> – <a href="/wiki/Helsinki" title="Helsinki">Helsinki</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_France.svg" class="image" title="Flag of France"><img alt="Flag of France" longdesc="/wiki/Image:Flag_of_France.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Flag_of_France.svg/50px-Flag_of_France.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/France" title="France">France</a></b> – <a href="/wiki/Paris" title="Paris">Paris</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Germany.svg" class="image" title="Flag of Germany"><img alt="Flag of Germany" longdesc="/wiki/Image:Flag_of_Germany.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/b/ba/Flag_of_Germany.svg/50px-Flag_of_Germany.svg.png" height="30" width="50"></a>&nbsp;<a href="/wiki/Germany" title="Germany">Germany</a></b> – <a href="/wiki/Berlin" title="Berlin">Berlin</a></td></tr>
<tr><td>Europe</td><td><i><a href="/wiki/Image:Flag_of_Gibraltar.svg" class="image" title="Flag of Gibraltar"><img alt="Flag of Gibraltar" longdesc="/wiki/Image:Flag_of_Gibraltar.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/0/02/Flag_of_Gibraltar.svg/50px-Flag_of_Gibraltar.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/Gibraltar" title="Gibraltar">Gibraltar</a></i> (<a href="/wiki/British_overseas_territory" title="British overseas territory">overseas territory of the United Kingdom</a>) – Gibraltar<sup id="_ref-city-state_1" class="reference"><a href="#_note-city-state" title="">[5]</a></sup></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Greece.svg" class="image" title="Flag of Greece"><img alt="Flag of Greece" longdesc="/wiki/Image:Flag_of_Greece.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/5/5c/Flag_of_Greece.svg/50px-Flag_of_Greece.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Greece" title="Greece">Greece</a></b> – <a href="/wiki/Athens" title="Athens">Athens</a></td></tr>
<tr><td>Europe</td><td><i><a href="/wiki/Image:Flag_of_Guernsey.svg" class="image" title="Flag of Guernsey"><img alt="Flag of Guernsey" longdesc="/wiki/Image:Flag_of_Guernsey.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/f/fa/Flag_of_Guernsey.svg/50px-Flag_of_Guernsey.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Guernsey" title="Guernsey">Guernsey</a></i> (<a href="/wiki/Crown_dependency" title="Crown dependency">British crown dependency</a>) – <a href="/wiki/Saint_Peter_Port" title="Saint Peter Port">Saint Peter Port</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Hungary.svg" class="image" title="Flag of Hungary"><img alt="Flag of Hungary" longdesc="/wiki/Image:Flag_of_Hungary.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/c/c1/Flag_of_Hungary.svg/50px-Flag_of_Hungary.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/Hungary" title="Hungary">Hungary</a></b> – <a href="/wiki/Budapest" title="Budapest">Budapest</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Iceland.svg" class="image" title="Flag of Iceland"><img alt="Flag of Iceland" longdesc="/wiki/Image:Flag_of_Iceland.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/c/ce/Flag_of_Iceland.svg/50px-Flag_of_Iceland.svg.png" height="36" width="50"></a>&nbsp;<a href="/wiki/Iceland" title="Iceland">Iceland</a></b> – <a href="/wiki/Reykjav%C3%ADk" title="Reykjavík">Reykjavík</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Ireland.svg" class="image" title="Flag of Ireland"><img alt="Flag of Ireland" longdesc="/wiki/Image:Flag_of_Ireland.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/4/45/Flag_of_Ireland.svg/50px-Flag_of_Ireland.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/Republic_of_Ireland" title="Republic of Ireland">Ireland</a></b> – <a href="/wiki/Dublin" title="Dublin">Dublin</a></td></tr>
<tr><td>Europe</td><td><i><a href="/wiki/Image:Flag_of_the_Isle_of_Man.svg" class="image" title="Flag of the Isle of Man"><img alt="Flag of the Isle of Man" longdesc="/wiki/Image:Flag_of_the_Isle_of_Man.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/b/bc/Flag_of_the_Isle_of_Man.svg/50px-Flag_of_the_Isle_of_Man.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/Isle_of_Man" title="Isle of Man">Isle of Man</a></i> (<a href="/wiki/Crown_dependency" title="Crown dependency">British crown dependency</a>) – <a href="/wiki/Douglas%2C_Isle_of_Man" title="Douglas, Isle of Man">Douglas</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Italy.svg" class="image" title="Flag of Italy"><img alt="Flag of Italy" longdesc="/wiki/Image:Flag_of_Italy.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/0/03/Flag_of_Italy.svg/50px-Flag_of_Italy.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Italy" title="Italy">Italy</a></b> – <a href="/wiki/Rome" title="Rome">Rome</a></td></tr>
<tr><td>Europe</td><td><i><a href="/wiki/Image:Flag_of_Jersey.svg" class="image" title="Flag of Jersey"><img alt="Flag of Jersey" longdesc="/wiki/Image:Flag_of_Jersey.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/1/1c/Flag_of_Jersey.svg/50px-Flag_of_Jersey.svg.png" height="30" width="50"></a>&nbsp;<a href="/wiki/Jersey" title="Jersey">Jersey</a></i> (<a href="/wiki/Crown_dependency" title="Crown dependency">British crown dependency</a>) – <a href="/wiki/Saint_Helier" title="Saint Helier">Saint Helier</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Latvia.svg" class="image" title="Flag of Latvia"><img alt="Flag of Latvia" longdesc="/wiki/Image:Flag_of_Latvia.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/8/84/Flag_of_Latvia.svg/50px-Flag_of_Latvia.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/Latvia" title="Latvia">Latvia</a></b> – <a href="/wiki/Riga" title="Riga">Riga</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Liechtenstein.svg" class="image" title="Flag of Liechtenstein"><img alt="Flag of Liechtenstein" longdesc="/wiki/Image:Flag_of_Liechtenstein.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/4/47/Flag_of_Liechtenstein.svg/50px-Flag_of_Liechtenstein.svg.png" height="30" width="50"></a>&nbsp;<a href="/wiki/Liechtenstein" title="Liechtenstein">Liechtenstein</a></b> – <a href="/wiki/Vaduz" title="Vaduz">Vaduz</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Lithuania.svg" class="image" title="Flag of Lithuania"><img alt="Flag of Lithuania" longdesc="/wiki/Image:Flag_of_Lithuania.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/1/11/Flag_of_Lithuania.svg/50px-Flag_of_Lithuania.svg.png" height="30" width="50"></a>&nbsp;<a href="/wiki/Lithuania" title="Lithuania">Lithuania</a></b> – <a href="/wiki/Vilnius" title="Vilnius">Vilnius</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Luxembourg.svg" class="image" title="Flag of Luxembourg"><img alt="Flag of Luxembourg" longdesc="/wiki/Image:Flag_of_Luxembourg.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/d/da/Flag_of_Luxembourg.svg/50px-Flag_of_Luxembourg.svg.png" height="30" width="50"></a>&nbsp;<a href="/wiki/Luxembourg" title="Luxembourg">Luxembourg</a></b> – <a href="/wiki/Luxembourg%2C_Luxembourg" title="Luxembourg, Luxembourg">Luxembourg</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Macedonia.svg" class="image" title="Flag of the Republic of Macedonia"><img alt="Flag of the Republic of Macedonia" longdesc="/wiki/Image:Flag_of_Macedonia.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/f/f8/Flag_of_Macedonia.svg/50px-Flag_of_Macedonia.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/Republic_of_Macedonia" title="Republic of Macedonia">Macedonia</a></b> – <a href="/wiki/Skopje" title="Skopje">Skopje</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Malta.svg" class="image" title="Flag of Malta"><img alt="Flag of Malta" longdesc="/wiki/Image:Flag_of_Malta.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/7/73/Flag_of_Malta.svg/50px-Flag_of_Malta.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Malta" title="Malta">Malta</a></b> – <a href="/wiki/Valletta" title="Valletta">Valletta</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Moldova.svg" class="image" title="Flag of Moldova"><img alt="Flag of Moldova" longdesc="/wiki/Image:Flag_of_Moldova.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/2/27/Flag_of_Moldova.svg/50px-Flag_of_Moldova.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/Moldova" title="Moldova">Moldova</a></b> – <a href="/wiki/Chi%C5%9Fin%C4%83u" title="Chişinău">Chişinău</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Monaco.svg" class="image" title="Flag of Monaco"><img alt="Flag of Monaco" longdesc="/wiki/Image:Flag_of_Monaco.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/e/ea/Flag_of_Monaco.svg/50px-Flag_of_Monaco.svg.png" height="40" width="50"></a>&nbsp;<a href="/wiki/Monaco" title="Monaco">Monaco</a></b> – Monaco<sup id="_ref-city-state_2" class="reference"><a href="#_note-city-state" title="">[5]</a></sup></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Montenegro.svg" class="image" title="Flag of Montenegro"><img alt="Flag of Montenegro" longdesc="/wiki/Image:Flag_of_Montenegro.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/6/64/Flag_of_Montenegro.svg/50px-Flag_of_Montenegro.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/Montenegro" title="Montenegro">Montenegro</a></b> – <a href="/wiki/Podgorica" title="Podgorica">Podgorica</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_the_Netherlands.svg" class="image" title="Flag of the Netherlands"><img alt="Flag of the Netherlands" longdesc="/wiki/Image:Flag_of_the_Netherlands.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/2/20/Flag_of_the_Netherlands.svg/50px-Flag_of_the_Netherlands.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Netherlands" title="Netherlands">Netherlands</a></b> – <a href="/wiki/Amsterdam" title="Amsterdam">Amsterdam</a> (seat of government at <a href="/wiki/The_Hague" title="The Hague">The Hague</a>)</td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Norway.svg" class="image" title="Flag of Norway"><img alt="Flag of Norway" longdesc="/wiki/Image:Flag_of_Norway.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/d/d9/Flag_of_Norway.svg/50px-Flag_of_Norway.svg.png" height="36" width="50"></a>&nbsp;<a href="/wiki/Norway" title="Norway">Norway</a></b> – <a href="/wiki/Oslo" title="Oslo">Oslo</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Poland.svg" class="image" title="Flag of Poland"><img alt="Flag of Poland" longdesc="/wiki/Image:Flag_of_Poland.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/1/12/Flag_of_Poland.svg/50px-Flag_of_Poland.svg.png" height="31" width="50"></a>&nbsp;<a href="/wiki/Poland" title="Poland">Poland</a></b> – <a href="/wiki/Warsaw" title="Warsaw">Warsaw</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Portugal.svg" class="image" title="Flag of Portugal"><img alt="Flag of Portugal" longdesc="/wiki/Image:Flag_of_Portugal.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/5/5c/Flag_of_Portugal.svg/50px-Flag_of_Portugal.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Portugal" title="Portugal">Portugal</a></b> – <a href="/wiki/Lisbon" title="Lisbon">Lisbon</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Romania.svg" class="image" title="Flag of Romania"><img alt="Flag of Romania" longdesc="/wiki/Image:Flag_of_Romania.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/7/73/Flag_of_Romania.svg/50px-Flag_of_Romania.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Romania" title="Romania">Romania</a></b> – <a href="/wiki/Bucharest" title="Bucharest">Bucharest</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Russia.svg" class="image" title="Flag of Russia"><img alt="Flag of Russia" longdesc="/wiki/Image:Flag_of_Russia.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/f/f3/Flag_of_Russia.svg/50px-Flag_of_Russia.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Russia" title="Russia">Russia</a></b><sup id="_ref-2" class="reference"><a href="#_note-2" title="">[6]</a></sup> – <a href="/wiki/Moscow" title="Moscow">Moscow</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_San_Marino.svg" class="image" title="Flag of San Marino"><img alt="Flag of San Marino" longdesc="/wiki/Image:Flag_of_San_Marino.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/b/b1/Flag_of_San_Marino.svg/50px-Flag_of_San_Marino.svg.png" height="38" width="50"></a>&nbsp;<a href="/wiki/San_Marino" title="San Marino">San Marino</a></b> – <a href="/wiki/San_Marino%2C_San_Marino" title="San Marino, San Marino">San Marino</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Serbia.svg" class="image" title="Flag of Serbia"><img alt="Flag of Serbia" longdesc="/wiki/Image:Flag_of_Serbia.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/f/ff/Flag_of_Serbia.svg/50px-Flag_of_Serbia.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Serbia" title="Serbia">Serbia</a></b> – <a href="/wiki/Belgrade" title="Belgrade">Belgrade</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Slovakia.svg" class="image" title="Flag of Slovakia"><img alt="Flag of Slovakia" longdesc="/wiki/Image:Flag_of_Slovakia.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/e/e6/Flag_of_Slovakia.svg/50px-Flag_of_Slovakia.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Slovakia" title="Slovakia">Slovakia</a></b> – <a href="/wiki/Bratislava" title="Bratislava">Bratislava</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Slovenia.svg" class="image" title="Flag of Slovenia"><img alt="Flag of Slovenia" longdesc="/wiki/Image:Flag_of_Slovenia.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/f/f0/Flag_of_Slovenia.svg/50px-Flag_of_Slovenia.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/Slovenia" title="Slovenia">Slovenia</a></b> – <a href="/wiki/Ljubljana" title="Ljubljana">Ljubljana</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Spain.svg" class="image" title="Flag of Spain"><img alt="Flag of Spain" longdesc="/wiki/Image:Flag_of_Spain.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Flag_of_Spain.svg/50px-Flag_of_Spain.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Spain" title="Spain">Spain</a></b> – <a href="/wiki/Madrid" title="Madrid">Madrid</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Sweden.svg" class="image" title="Flag of Sweden"><img alt="Flag of Sweden" longdesc="/wiki/Image:Flag_of_Sweden.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/4/4c/Flag_of_Sweden.svg/50px-Flag_of_Sweden.svg.png" height="31" width="50"></a>&nbsp;<a href="/wiki/Sweden" title="Sweden">Sweden</a></b> – <a href="/wiki/Stockholm" title="Stockholm">Stockholm</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Switzerland.svg" class="image" title="Flag of Switzerland"><img alt="Flag of Switzerland" longdesc="/wiki/Image:Flag_of_Switzerland.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/f/f3/Flag_of_Switzerland.svg/50px-Flag_of_Switzerland.svg.png" height="50" width="50"></a>&nbsp;<a href="/wiki/Switzerland" title="Switzerland">Switzerland</a></b> – <a href="/wiki/Berne" title="Berne">Berne</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Ukraine.svg" class="image" title="Flag of Ukraine"><img alt="Flag of Ukraine" longdesc="/wiki/Image:Flag_of_Ukraine.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/4/49/Flag_of_Ukraine.svg/50px-Flag_of_Ukraine.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Ukraine" title="Ukraine">Ukraine</a></b> – <a href="/wiki/Kiev" title="Kiev">Kiev</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_the_United_Kingdom.svg" class="image" title="Flag of the United Kingdom"><img alt="Flag of the United Kingdom" longdesc="/wiki/Image:Flag_of_the_United_Kingdom.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/a/ae/Flag_of_the_United_Kingdom.svg/50px-Flag_of_the_United_Kingdom.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/United_Kingdom" title="United Kingdom">United Kingdom</a></b> – <a href="/wiki/London" title="London">London</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_the_Vatican_City.svg" class="image" title="Flag of the Vatican City"><img alt="Flag of the Vatican City" longdesc="/wiki/Image:Flag_of_the_Vatican_City.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/0/00/Flag_of_the_Vatican_City.svg/50px-Flag_of_the_Vatican_City.svg.png" height="50" width="50"></a>&nbsp;<a href="/wiki/Vatican_City" title="Vatican City">Vatican City</a></b> – Vatican City<sup id="_ref-city-state_3" class="reference"><a href="#_note-city-state" title="">[5]</a></sup></td></tr>
 
<!-- Americas: North_America -->
 
<tr><td>North America</td><td><i><a href="/wiki/Image:Flag_of_Anguilla.svg" class="image" title="Flag of Anguilla"><img alt="Flag of Anguilla" longdesc="/wiki/Image:Flag_of_Anguilla.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/b/b4/Flag_of_Anguilla.svg/50px-Flag_of_Anguilla.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/Anguilla" title="Anguilla">Anguilla</a></i> (<a href="/wiki/British_overseas_territory" title="British overseas territory">overseas territory of the United Kingdom</a>) – <a href="/wiki/The_Valley%2C_Anguilla" title="The Valley, Anguilla">The Valley</a></td></tr>
<tr><td>North America</td><td><b><a href="/wiki/Image:Flag_of_Antigua_and_Barbuda.svg" class="image" title="Flag of Antigua and Barbuda"><img alt="Flag of Antigua and Barbuda" longdesc="/wiki/Image:Flag_of_Antigua_and_Barbuda.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/8/89/Flag_of_Antigua_and_Barbuda.svg/50px-Flag_of_Antigua_and_Barbuda.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Antigua_and_Barbuda" title="Antigua and Barbuda">Antigua and Barbuda</a></b> – <a href="/wiki/Saint_John%27s%2C_Antigua_and_Barbuda" title="Saint John's, Antigua and Barbuda">Saint John's</a></td></tr>
<tr><td>North America</td><td><i><a href="/wiki/Image:Flag_of_Aruba.svg" class="image" title="Flag of Aruba"><img alt="Flag of Aruba" longdesc="/wiki/Image:Flag_of_Aruba.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/f/f6/Flag_of_Aruba.svg/50px-Flag_of_Aruba.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Aruba" title="Aruba">Aruba</a></i> (overseas country in the <a href="/wiki/Kingdom_of_the_Netherlands" title="Kingdom of the Netherlands">Kingdom of the Netherlands</a>) – <a href="/wiki/Oranjestad%2C_Aruba" title="Oranjestad, Aruba">Oranjestad</a></td></tr>
<tr><td>North America</td><td><b><a href="/wiki/Image:Flag_of_the_Bahamas.svg" class="image" title="Flag of the Bahamas"><img alt="Flag of the Bahamas" longdesc="/wiki/Image:Flag_of_the_Bahamas.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/9/93/Flag_of_the_Bahamas.svg/50px-Flag_of_the_Bahamas.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/The_Bahamas" title="The Bahamas">Bahamas</a></b> – <a href="/wiki/Nassau%2C_Bahamas" title="Nassau, Bahamas">Nassau</a></td></tr>
<tr><td>North America</td><td><b><a href="/wiki/Image:Flag_of_Barbados.svg" class="image" title="Flag of Barbados"><img alt="Flag of Barbados" longdesc="/wiki/Image:Flag_of_Barbados.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/e/ef/Flag_of_Barbados.svg/50px-Flag_of_Barbados.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Barbados" title="Barbados">Barbados</a></b> – <a href="/wiki/Bridgetown" title="Bridgetown">Bridgetown</a></td></tr>
<tr><td>North America</td><td><b><a href="/wiki/Image:Flag_of_Belize.svg" class="image" title="Flag of Belize"><img alt="Flag of Belize" longdesc="/wiki/Image:Flag_of_Belize.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/e/e7/Flag_of_Belize.svg/50px-Flag_of_Belize.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Belize" title="Belize">Belize</a></b> – <a href="/wiki/Belmopan" title="Belmopan">Belmopan</a></td></tr>
<tr><td>North America</td><td><i><a href="/wiki/Image:Flag_of_Bermuda.svg" class="image" title="Flag of Bermuda"><img alt="Flag of Bermuda" longdesc="/wiki/Image:Flag_of_Bermuda.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/b/bf/Flag_of_Bermuda.svg/50px-Flag_of_Bermuda.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/Bermuda" title="Bermuda">Bermuda</a></i> (<a href="/wiki/British_overseas_territory" title="British overseas territory">overseas territory of the United Kingdom</a>) – <a href="/wiki/Hamilton%2C_Bermuda" title="Hamilton, Bermuda">Hamilton</a></td></tr>
<tr><td>North America</td><td><i><a href="/wiki/Image:Flag_of_the_British_Virgin_Islands.svg" class="image" title="Flag of the British Virgin Islands"><img alt="Flag of the British Virgin Islands" longdesc="/wiki/Image:Flag_of_the_British_Virgin_Islands.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/4/42/Flag_of_the_British_Virgin_Islands.svg/50px-Flag_of_the_British_Virgin_Islands.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/British_Virgin_Islands" title="British Virgin Islands">British Virgin Islands</a></i> (<a href="/wiki/British_overseas_territory" title="British overseas territory">overseas territory of the United Kingdom</a>) – <a href="/wiki/Road_Town" title="Road Town">Road Town</a></td></tr>
<tr><td>North America</td><td><b><a href="/wiki/Image:Flag_of_Canada.svg" class="image" title="Flag of Canada"><img alt="Flag of Canada" longdesc="/wiki/Image:Flag_of_Canada.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/c/cf/Flag_of_Canada.svg/50px-Flag_of_Canada.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/Canada" title="Canada">Canada</a></b> – <a href="/wiki/Ottawa" title="Ottawa">Ottawa</a></td></tr>
<tr><td>North America</td><td><i><a href="/wiki/Image:Flag_of_the_Cayman_Islands.svg" class="image" title="Flag of Cayman Islands"><img alt="Flag of Cayman Islands" longdesc="/wiki/Image:Flag_of_the_Cayman_Islands.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/0/0f/Flag_of_the_Cayman_Islands.svg/50px-Flag_of_the_Cayman_Islands.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/Cayman_Islands" title="Cayman Islands">Cayman Islands</a></i> (<a href="/wiki/British_overseas_territory" title="British overseas territory">overseas territory of the United Kingdom</a>) – <a href="/wiki/George_Town%2C_Cayman_Islands" title="George Town, Cayman Islands">George Town</a></td></tr>
<tr><td>North America</td><td><i><a href="/wiki/Image:Flag_of_France.svg" class="image" title="Flag of France"><img alt="Flag of France" longdesc="/wiki/Image:Flag_of_France.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Flag_of_France.svg/50px-Flag_of_France.svg.png" height="33" width="50"></a> <a href="/wiki/Clipperton_Island" title="Clipperton Island">Clipperton Island</a></i> (<a href="/wiki/French_overseas_territory" title="French overseas territory">overseas territory of France</a>)</td></tr>
<tr><td>North America</td><td><b><a href="/wiki/Image:Flag_of_Costa_Rica.svg" class="image" title="Flag of Costa Rica"><img alt="Flag of Costa Rica" longdesc="/wiki/Image:Flag_of_Costa_Rica.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/f/f2/Flag_of_Costa_Rica.svg/50px-Flag_of_Costa_Rica.svg.png" height="30" width="50"></a>&nbsp;<a href="/wiki/Costa_Rica" title="Costa Rica">Costa Rica</a></b> – <a href="/wiki/San_Jos%C3%A9%2C_Costa_Rica" title="San José, Costa Rica">San José</a></td></tr>
<tr><td>North America</td><td><b><a href="/wiki/Image:Flag_of_Cuba.svg" class="image" title="Flag of Cuba"><img alt="Flag of Cuba" longdesc="/wiki/Image:Flag_of_Cuba.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/b/bd/Flag_of_Cuba.svg/50px-Flag_of_Cuba.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/Cuba" title="Cuba">Cuba</a></b> – <a href="/wiki/Havana" title="Havana">Havana</a></td></tr>
<tr><td>North America</td><td><b><a href="/wiki/Image:Flag_of_Dominica.svg" class="image" title="Flag of Dominica"><img alt="Flag of Dominica" longdesc="/wiki/Image:Flag_of_Dominica.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/c/c4/Flag_of_Dominica.svg/50px-Flag_of_Dominica.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/Dominica" title="Dominica">Dominica</a></b> – <a href="/wiki/Roseau" title="Roseau">Roseau</a></td></tr>
<tr><td>North America</td><td><b><a href="/wiki/Image:Flag_of_the_Dominican_Republic.svg" class="image" title="Flag of the Dominican Republic"><img alt="Flag of the Dominican Republic" longdesc="/wiki/Image:Flag_of_the_Dominican_Republic.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Flag_of_the_Dominican_Republic.svg/50px-Flag_of_the_Dominican_Republic.svg.png" height="31" width="50"></a>&nbsp;<a href="/wiki/Dominican_Republic" title="Dominican Republic">Dominican Republic</a></b> – <a href="/wiki/Santo_Domingo" title="Santo Domingo">Santo Domingo</a></td></tr>
<tr><td>North America</td><td><b><a href="/wiki/Image:Flag_of_El_Salvador.svg" class="image" title="Flag of El Salvador"><img alt="Flag of El Salvador" longdesc="/wiki/Image:Flag_of_El_Salvador.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/3/34/Flag_of_El_Salvador.svg/50px-Flag_of_El_Salvador.svg.png" height="28" width="50"></a>&nbsp;<a href="/wiki/El_Salvador" title="El Salvador">El Salvador</a></b> – <a href="/wiki/San_Salvador" title="San Salvador">San Salvador</a></td></tr>
<tr><td>North America</td><td><i><a href="/wiki/Image:Flag_of_Greenland.svg" class="image" title="Flag of Greenland"><img alt="Flag of Greenland" longdesc="/wiki/Image:Flag_of_Greenland.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/0/09/Flag_of_Greenland.svg/50px-Flag_of_Greenland.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Greenland" title="Greenland">Greenland</a></i> (overseas territory of Denmark) – <a href="/wiki/Nuuk" title="Nuuk">Nuuk</a></td></tr>
<tr><td>North America</td><td><b><a href="/wiki/Image:Flag_of_Grenada.svg" class="image" title="Flag of Grenada"><img alt="Flag of Grenada" longdesc="/wiki/Image:Flag_of_Grenada.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/b/bc/Flag_of_Grenada.svg/50px-Flag_of_Grenada.svg.png" height="30" width="50"></a>&nbsp;<a href="/wiki/Grenada" title="Grenada">Grenada</a></b> – <a href="/wiki/Saint_George%27s%2C_Grenada" title="Saint George's, Grenada">Saint George's</a></td></tr>
<tr><td>North America</td><td><i><a href="/wiki/Image:Flag_of_France.svg" class="image" title="Flag of Guadeloupe"><img alt="Flag of Guadeloupe" longdesc="/wiki/Image:Flag_of_France.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Flag_of_France.svg/50px-Flag_of_France.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Guadeloupe" title="Guadeloupe">Guadeloupe</a></i> (<a href="/wiki/French_overseas_territory" title="French overseas territory">overseas department of France</a>) – <a href="/wiki/Basse-Terre" title="Basse-Terre">Basse-Terre</a></td></tr>
<tr><td>North America</td><td><b><a href="/wiki/Image:Flag_of_Guatemala.svg" class="image" title="Flag of Guatemala"><img alt="Flag of Guatemala" longdesc="/wiki/Image:Flag_of_Guatemala.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/e/ec/Flag_of_Guatemala.svg/50px-Flag_of_Guatemala.svg.png" height="31" width="50"></a>&nbsp;<a href="/wiki/Guatemala" title="Guatemala">Guatemala</a></b> – <a href="/wiki/Guatemala_City" title="Guatemala City">Guatemala City</a></td></tr>
<tr><td>North America</td><td><b><a href="/wiki/Image:Flag_of_Haiti.svg" class="image" title="Flag of Haiti"><img alt="Flag of Haiti" longdesc="/wiki/Image:Flag_of_Haiti.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/5/56/Flag_of_Haiti.svg/50px-Flag_of_Haiti.svg.png" height="30" width="50"></a>&nbsp;<a href="/wiki/Haiti" title="Haiti">Haiti</a></b> – <a href="/wiki/Port-au-Prince" title="Port-au-Prince">Port-au-Prince</a></td></tr>
<tr><td>North America</td><td><b><a href="/wiki/Image:Flag_of_Honduras.svg" class="image" title="Flag of Honduras"><img alt="Flag of Honduras" longdesc="/wiki/Image:Flag_of_Honduras.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/8/82/Flag_of_Honduras.svg/50px-Flag_of_Honduras.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/Honduras" title="Honduras">Honduras</a></b> – <a href="/wiki/Tegucigalpa" title="Tegucigalpa">Tegucigalpa</a></td></tr>
<tr><td>North America</td><td><b><a href="/wiki/Image:Flag_of_Jamaica.svg" class="image" title="Flag of Jamaica"><img alt="Flag of Jamaica" longdesc="/wiki/Image:Flag_of_Jamaica.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/0/0a/Flag_of_Jamaica.svg/50px-Flag_of_Jamaica.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/Jamaica" title="Jamaica">Jamaica</a></b> – <a href="/wiki/Kingston%2C_Jamaica" title="Kingston, Jamaica">Kingston</a></td></tr>
<tr><td>North America</td><td><i><a href="/wiki/Image:Flag_of_France.svg" class="image" title="Flag of Martinique"><img alt="Flag of Martinique" longdesc="/wiki/Image:Flag_of_France.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Flag_of_France.svg/50px-Flag_of_France.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Martinique" title="Martinique">Martinique</a></i> (<a href="/wiki/French_overseas_territory" title="French overseas territory">overseas department of France</a>) – <a href="/wiki/Fort-de-France" title="Fort-de-France">Fort-de-France</a></td></tr>
<tr><td>North America</td><td><b><a href="/wiki/Image:Flag_of_Mexico.svg" class="image" title="Flag of Mexico"><img alt="Flag of Mexico" longdesc="/wiki/Image:Flag_of_Mexico.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/f/fc/Flag_of_Mexico.svg/50px-Flag_of_Mexico.svg.png" height="29" width="50"></a>&nbsp;<a href="/wiki/Mexico" title="Mexico">Mexico</a></b> – <a href="/wiki/Mexico_City" title="Mexico City">Mexico City</a></td></tr>
<tr><td>North America</td><td><i><a href="/wiki/Image:Flag_of_Montserrat.svg" class="image" title="Flag of Montserrat"><img alt="Flag of Montserrat" longdesc="/wiki/Image:Flag_of_Montserrat.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/d/d0/Flag_of_Montserrat.svg/50px-Flag_of_Montserrat.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/Montserrat" title="Montserrat">Montserrat</a></i> (<a href="/wiki/British_overseas_territory" title="British overseas territory">overseas territory of the United Kingdom</a>) – <a href="/wiki/Plymouth%2C_Montserrat" title="Plymouth, Montserrat">Plymouth</a> (seat of government at <a href="/wiki/Brades" title="Brades">Brades</a>)</td></tr>
<tr><td>North America</td><td><i><a href="/wiki/Image:Flag_of_the_United_States.svg" class="image" title="Flag of Navassa Island"><img alt="Flag of Navassa Island" longdesc="/wiki/Image:Flag_of_the_United_States.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/a/a4/Flag_of_the_United_States.svg/50px-Flag_of_the_United_States.svg.png" height="26" width="50"></a>&nbsp;<a href="/wiki/Navassa_Island" title="Navassa Island">Navassa Island</a></i> (<a href="/wiki/Insular_area" title="Insular area">overseas territory of the United States</a>)</td></tr>
<tr><td>North America</td><td><i><a href="/wiki/Image:Flag_of_the_Netherlands_Antilles.svg" class="image" title="Flag of the Netherlands Antilles"><img alt="Flag of the Netherlands Antilles" longdesc="/wiki/Image:Flag_of_the_Netherlands_Antilles.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/d/d5/Flag_of_the_Netherlands_Antilles.svg/50px-Flag_of_the_Netherlands_Antilles.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Netherlands_Antilles" title="Netherlands Antilles">Netherlands Antilles</a></i> (overseas country in the <a href="/wiki/Kingdom_of_the_Netherlands" title="Kingdom of the Netherlands">Kingdom of the Netherlands</a>) – <a href="/wiki/Willemstad%2C_Netherlands_Antilles" title="Willemstad, Netherlands Antilles">Willemstad</a></td></tr>
<tr><td>North America</td><td><b><a href="/wiki/Image:Flag_of_Nicaragua.svg" class="image" title="Flag of Nicaragua"><img alt="Flag of Nicaragua" longdesc="/wiki/Image:Flag_of_Nicaragua.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/1/19/Flag_of_Nicaragua.svg/50px-Flag_of_Nicaragua.svg.png" height="30" width="50"></a>&nbsp;<a href="/wiki/Nicaragua" title="Nicaragua">Nicaragua</a></b> – <a href="/wiki/Managua" title="Managua">Managua</a></td></tr>
<tr><td>North America</td><td><b><a href="/wiki/Image:Flag_of_Panama.svg" class="image" title="Flag of Panama"><img alt="Flag of Panama" longdesc="/wiki/Image:Flag_of_Panama.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/a/ab/Flag_of_Panama.svg/50px-Flag_of_Panama.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Panama" title="Panama">Panama</a></b> – <a href="/wiki/Panama_City" title="Panama City">Panama City</a></td></tr>
<tr><td>North America</td><td><i><a href="/wiki/Image:Flag_of_Puerto_Rico.svg" class="image" title="Flag of Puerto Rico"><img alt="Flag of Puerto Rico" longdesc="/wiki/Image:Flag_of_Puerto_Rico.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/2/28/Flag_of_Puerto_Rico.svg/50px-Flag_of_Puerto_Rico.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Puerto_Rico" title="Puerto Rico">Puerto Rico</a></i> (<a href="/wiki/Insular_area" title="Insular area">overseas territory of the United States</a>) – <a href="/wiki/San_Juan%2C_Puerto_Rico" title="San Juan, Puerto Rico">San Juan</a></td></tr>
<tr><td>North America</td><td><i><a href="/wiki/Image:Flag_of_France.svg" class="image" title="Flag of Saint Barthelemy"><img alt="Flag of Saint Barthelemy" longdesc="/wiki/Image:Flag_of_France.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Flag_of_France.svg/50px-Flag_of_France.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Saint_Barthelemy" title="Saint Barthelemy">Saint Barthelemy</a></i> (<a href="/wiki/French_overseas_territory" title="French overseas territory">overseas territory of France</a>) – <a href="/wiki/Gustavia%2C_Saint_Barthelemy" title="Gustavia, Saint Barthelemy">Gustavia</a></td></tr>
<tr><td>North America</td><td><b><a href="/wiki/Image:Flag_of_Saint_Kitts_and_Nevis.svg" class="image" title="Flag of Saint Kitts and Nevis"><img alt="Flag of Saint Kitts and Nevis" longdesc="/wiki/Image:Flag_of_Saint_Kitts_and_Nevis.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/f/fe/Flag_of_Saint_Kitts_and_Nevis.svg/50px-Flag_of_Saint_Kitts_and_Nevis.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Saint_Kitts_and_Nevis" title="Saint Kitts and Nevis">Saint Kitts and Nevis</a></b> – <a href="/wiki/Basseterre" title="Basseterre">Basseterre</a></td></tr>
<tr><td>North America</td><td><b><a href="/wiki/Image:Flag_of_Saint_Lucia.svg" class="image" title="Flag of Saint Lucia"><img alt="Flag of Saint Lucia" longdesc="/wiki/Image:Flag_of_Saint_Lucia.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Flag_of_Saint_Lucia.svg/50px-Flag_of_Saint_Lucia.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/Saint_Lucia" title="Saint Lucia">Saint Lucia</a></b> – <a href="/wiki/Castries" title="Castries">Castries</a></td></tr>
<tr><td>North America</td><td><i><a href="/wiki/Image:Flag_of_France.svg" class="image" title="Flag of Saint Martin (France)"><img alt="Flag of Saint Martin (France)" longdesc="/wiki/Image:Flag_of_France.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Flag_of_France.svg/50px-Flag_of_France.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Saint_Martin_%28France%29" title="Saint Martin (France)">Saint Martin</a></i> (<a href="/wiki/French_overseas_territory" title="French overseas territory">overseas territory of France</a>) – <a href="/wiki/Marigot%2C_Saint_Martin" title="Marigot, Saint Martin">Marigot</a></td></tr>
<tr><td>North America</td><td><i><a href="/wiki/Image:Flag_of_France.svg" class="image" title="Flag of Saint Pierre and Miquelon"><img alt="Flag of Saint Pierre and Miquelon" longdesc="/wiki/Image:Flag_of_France.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Flag_of_France.svg/50px-Flag_of_France.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Saint_Pierre_and_Miquelon" title="Saint Pierre and Miquelon">Saint Pierre and Miquelon</a></i> (<a href="/wiki/French_overseas_territory" title="French overseas territory">overseas territory of France</a>) – <a href="/wiki/Saint-Pierre%2C_Saint_Pierre_and_Miquelon" title="Saint-Pierre, Saint Pierre and Miquelon">Saint-Pierre</a></td></tr>
<tr><td>North America</td><td><b><a href="/wiki/Image:Flag_of_Saint_Vincent_and_the_Grenadines.svg" class="image" title="Flag of Saint Vincent and the Grenadines"><img alt="Flag of Saint Vincent and the Grenadines" longdesc="/wiki/Image:Flag_of_Saint_Vincent_and_the_Grenadines.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/6/6d/Flag_of_Saint_Vincent_and_the_Grenadines.svg/50px-Flag_of_Saint_Vincent_and_the_Grenadines.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Saint_Vincent_and_the_Grenadines" title="Saint Vincent and the Grenadines">Saint Vincent and the Grenadines</a></b> – <a href="/wiki/Kingstown" title="Kingstown">Kingstown</a></td></tr>
<tr><td>North America</td><td><b><a href="/wiki/Image:Flag_of_Trinidad_and_Tobago.svg" class="image" title="Flag of Trinidad and Tobago"><img alt="Flag of Trinidad and Tobago" longdesc="/wiki/Image:Flag_of_Trinidad_and_Tobago.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/6/64/Flag_of_Trinidad_and_Tobago.svg/50px-Flag_of_Trinidad_and_Tobago.svg.png" height="30" width="50"></a>&nbsp;<a href="/wiki/Trinidad_and_Tobago" title="Trinidad and Tobago">Trinidad and Tobago</a></b> – <a href="/wiki/Port_of_Spain" title="Port of Spain">Port of Spain</a></td></tr>
<tr><td>North America</td><td><i><a href="/wiki/Image:Flag_of_the_Turks_and_Caicos_Islands.svg" class="image" title="Flag of the Turks and Caicos Islands"><img alt="Flag of the Turks and Caicos Islands" longdesc="/wiki/Image:Flag_of_the_Turks_and_Caicos_Islands.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/a/a0/Flag_of_the_Turks_and_Caicos_Islands.svg/50px-Flag_of_the_Turks_and_Caicos_Islands.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/Turks_and_Caicos_Islands" title="Turks and Caicos Islands">Turks and Caicos Islands</a></i> (<a href="/wiki/British_overseas_territory" title="British overseas territory">overseas territory of the United Kingdom</a>) – <a href="/wiki/Cockburn_Town" title="Cockburn Town">Cockburn Town</a></td></tr>
<tr><td>North America</td><td><b><a href="/wiki/Image:Flag_of_the_United_States.svg" class="image" title="Flag of the United States"><img alt="Flag of the United States" longdesc="/wiki/Image:Flag_of_the_United_States.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/a/a4/Flag_of_the_United_States.svg/50px-Flag_of_the_United_States.svg.png" height="26" width="50"></a>&nbsp;<a href="/wiki/United_States" title="United States">United States</a></b> – <a href="/wiki/Washington%2C_D.C." title="Washington, D.C.">Washington, D.C.</a></td></tr>
<tr><td>North America</td><td><i><a href="/wiki/Image:Flag_of_the_United_States_Virgin_Islands.svg" class="image" title="Flag of the United States Virgin Islands"><img alt="Flag of the United States Virgin Islands" longdesc="/wiki/Image:Flag_of_the_United_States_Virgin_Islands.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/f/f8/Flag_of_the_United_States_Virgin_Islands.svg/50px-Flag_of_the_United_States_Virgin_Islands.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/United_States_Virgin_Islands" title="United States Virgin Islands">United States Virgin Islands</a></i> (<a href="/wiki/Insular_area" title="Insular area">overseas territory of the United States</a>) – <a href="/wiki/Charlotte_Amalie%2C_United_States_Virgin_Islands" title="Charlotte Amalie, United States Virgin Islands">Charlotte Amalie</a></td></tr>
 
<!-- Americas: South America -->
 
<tr><td>South America</td><td><b><a href="/wiki/Image:Flag_of_Argentina.svg" class="image" title="Flag of Argentina"><img alt="Flag of Argentina" longdesc="/wiki/Image:Flag_of_Argentina.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/1/1a/Flag_of_Argentina.svg/50px-Flag_of_Argentina.svg.png" height="32" width="50"></a>&nbsp;<a href="/wiki/Argentina" title="Argentina">Argentina</a></b> – <a href="/wiki/Buenos_Aires" title="Buenos Aires">Buenos Aires</a></td></tr>
<tr><td>South America</td><td><b><a href="/wiki/Image:Flag_of_Bolivia.svg" class="image" title="Flag of Bolivia"><img alt="Flag of Bolivia" longdesc="/wiki/Image:Flag_of_Bolivia.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/4/48/Flag_of_Bolivia.svg/50px-Flag_of_Bolivia.svg.png" height="34" width="50"></a>&nbsp;<a href="/wiki/Bolivia" title="Bolivia">Bolivia</a></b> – <a href="/wiki/Sucre" title="Sucre">Sucre</a> (seat of government at <a href="/wiki/La_Paz" title="La Paz">La Paz</a>)</td></tr>
<tr><td>South America</td><td><b><a href="/wiki/Image:Flag_of_Brazil.svg" class="image" title="Flag of Brazil"><img alt="Flag of Brazil" longdesc="/wiki/Image:Flag_of_Brazil.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/0/05/Flag_of_Brazil.svg/50px-Flag_of_Brazil.svg.png" height="35" width="50"></a>&nbsp;<a href="/wiki/Brazil" title="Brazil">Brazil</a></b> – <a href="/wiki/Bras%C3%ADlia" title="Brasília">Brasília</a></td></tr>
<tr><td>South America</td><td><b><a href="/wiki/Image:Flag_of_Chile.svg" class="image" title="Flag of Chile"><img alt="Flag of Chile" longdesc="/wiki/Image:Flag_of_Chile.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/7/78/Flag_of_Chile.svg/50px-Flag_of_Chile.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Chile" title="Chile">Chile</a></b> – <a href="/wiki/Santiago%2C_Chile" title="Santiago, Chile">Santiago</a></td></tr>
<tr><td>South America</td><td><b><a href="/wiki/Image:Flag_of_Colombia.svg" class="image" title="Flag of Colombia"><img alt="Flag of Colombia" longdesc="/wiki/Image:Flag_of_Colombia.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/2/21/Flag_of_Colombia.svg/50px-Flag_of_Colombia.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Colombia" title="Colombia">Colombia</a></b> – <a href="/wiki/Bogot%C3%A1" title="Bogotá">Bogotá</a></td></tr>
<tr><td>South America</td><td><b><a href="/wiki/Image:Flag_of_Ecuador.svg" class="image" title="Flag of Ecuador"><img alt="Flag of Ecuador" longdesc="/wiki/Image:Flag_of_Ecuador.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/e/e8/Flag_of_Ecuador.svg/50px-Flag_of_Ecuador.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/Ecuador" title="Ecuador">Ecuador</a></b> – <a href="/wiki/Quito" title="Quito">Quito</a></td></tr>
<tr><td>South America</td><td><i><a href="/wiki/Image:Flag_of_the_Falkland_Islands.svg" class="image" title="Flag of the Falkland Islands"><img alt="Flag of the Falkland Islands" longdesc="/wiki/Image:Flag_of_the_Falkland_Islands.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/8/83/Flag_of_the_Falkland_Islands.svg/50px-Flag_of_the_Falkland_Islands.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/Falkland_Islands" title="Falkland Islands">Falkland Islands</a></i> (<a href="/wiki/British_overseas_territory" title="British overseas territory">overseas territory of the United Kingdom</a>) – <a href="/wiki/Stanley%2C_Falkland_Islands" title="Stanley, Falkland Islands">Stanley</a></td></tr>
<tr><td>South America</td><td><i><a href="/wiki/Image:Flag_of_France.svg" class="image" title="Flag of French Guiana"><img alt="Flag of French Guiana" longdesc="/wiki/Image:Flag_of_France.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Flag_of_France.svg/50px-Flag_of_France.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/French_Guiana" title="French Guiana">French Guiana</a></i> (<a href="/wiki/French_overseas_territory" title="French overseas territory">overseas department of France</a>) – <a href="/wiki/Cayenne" title="Cayenne">Cayenne</a></td></tr>
<tr><td>South America</td><td><b><a href="/wiki/Image:Flag_of_Guyana.svg" class="image" title="Flag of Guyana"><img alt="Flag of Guyana" longdesc="/wiki/Image:Flag_of_Guyana.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/9/99/Flag_of_Guyana.svg/50px-Flag_of_Guyana.svg.png" height="30" width="50"></a>&nbsp;<a href="/wiki/Guyana" title="Guyana">Guyana</a></b> – <a href="/wiki/Georgetown%2C_Guyana" title="Georgetown, Guyana">Georgetown</a></td></tr>
<tr><td>South America</td><td><b><a href="/wiki/Image:Flag_of_Paraguay.svg" class="image" title="Flag of Paraguay"><img alt="Flag of Paraguay" longdesc="/wiki/Image:Flag_of_Paraguay.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/2/27/Flag_of_Paraguay.svg/50px-Flag_of_Paraguay.svg.png" height="30" width="50"></a>&nbsp;<a href="/wiki/Paraguay" title="Paraguay">Paraguay</a></b> – <a href="/wiki/Asunci%C3%B3n" title="Asunción">Asunción</a></td></tr>
<tr><td>South America</td><td><b><a href="/wiki/Image:Flag_of_Peru.svg" class="image" title="Flag of Peru"><img alt="Flag of Peru" longdesc="/wiki/Image:Flag_of_Peru.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/c/cf/Flag_of_Peru.svg/50px-Flag_of_Peru.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Peru" title="Peru">Peru</a></b> – <a href="/wiki/Lima" title="Lima">Lima</a></td></tr>
<tr><td>South America</td><td><b><a href="/wiki/Image:Flag_of_Suriname.svg" class="image" title="Flag of Suriname"><img alt="Flag of Suriname" longdesc="/wiki/Image:Flag_of_Suriname.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/6/60/Flag_of_Suriname.svg/50px-Flag_of_Suriname.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Suriname" title="Suriname">Suriname</a></b> – <a href="/wiki/Paramaribo" title="Paramaribo">Paramaribo</a></td></tr>
<tr><td>South America</td><td><b><a href="/wiki/Image:Flag_of_Uruguay.svg" class="image" title="Flag of Uruguay"><img alt="Flag of Uruguay" longdesc="/wiki/Image:Flag_of_Uruguay.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/f/fe/Flag_of_Uruguay.svg/50px-Flag_of_Uruguay.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Uruguay" title="Uruguay">Uruguay</a></b> – <a href="/wiki/Montevideo" title="Montevideo">Montevideo</a></td></tr>
<tr><td>South America</td><td><b><a href="/wiki/Image:Flag_of_Venezuela.svg" class="image" title="Flag of Venezuela"><img alt="Flag of Venezuela" longdesc="/wiki/Image:Flag_of_Venezuela.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/0/06/Flag_of_Venezuela.svg/50px-Flag_of_Venezuela.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Venezuela" title="Venezuela">Venezuela</a></b> – <a href="/wiki/Caracas" title="Caracas">Caracas</a></td></tr>
 
<!-- Americas: Oceania -->
 
<tr><td>Oceania</td><td><i><a href="/wiki/Image:Flag_of_American_Samoa.svg" class="image" title="Flag of American Samoa"><img alt="Flag of American Samoa" longdesc="/wiki/Image:Flag_of_American_Samoa.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/8/87/Flag_of_American_Samoa.svg/50px-Flag_of_American_Samoa.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/American_Samoa" title="American Samoa">American Samoa</a></i> (<a href="/wiki/Insular_area" title="Insular area">overseas territory of the United States</a>) – <a href="/wiki/Pago_Pago" title="Pago Pago">Pago Pago</a> (seat of government at <a href="/wiki/Fagatogo" title="Fagatogo">Fagatogo</a>)</td></tr>
<tr><td>Oceania</td><td><b><a href="/wiki/Image:Flag_of_Australia.svg" class="image" title="Flag of Australia"><img alt="Flag of Australia" longdesc="/wiki/Image:Flag_of_Australia.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/b/b9/Flag_of_Australia.svg/50px-Flag_of_Australia.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/Australia" title="Australia">Australia</a></b> – <a href="/wiki/Canberra" title="Canberra">Canberra</a></td></tr>
<tr><td>Oceania</td><td><i><a href="/wiki/Image:Flag_of_the_United_States.svg" class="image" title="Flag of the United States"><img alt="Flag of the United States" longdesc="/wiki/Image:Flag_of_the_United_States.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/a/a4/Flag_of_the_United_States.svg/50px-Flag_of_the_United_States.svg.png" height="26" width="50"></a> <a href="/wiki/Baker_Island" title="Baker Island">Baker Island</a></i> (<a href="/wiki/Insular_area" title="Insular area">overseas territory of the United States</a>)</td></tr>
<tr><td>Oceania</td><td><i><a href="/wiki/Image:Flag_of_the_Cook_Islands.svg" class="image" title="Flag of the Cook Islands"><img alt="Flag of the Cook Islands" longdesc="/wiki/Image:Flag_of_the_Cook_Islands.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/3/35/Flag_of_the_Cook_Islands.svg/50px-Flag_of_the_Cook_Islands.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/Cook_Islands" title="Cook Islands">Cook Islands</a></i> (<a href="/wiki/Associated_state" title="Associated state">territory in free association</a> with New Zealand) – <a href="/wiki/Avarua" title="Avarua">Avarua</a></td></tr>
<tr><td>Oceania</td><td><b><a href="/wiki/Image:Flag_of_Fiji.svg" class="image" title="Flag of Fiji"><img alt="Flag of Fiji" longdesc="/wiki/Image:Flag_of_Fiji.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/b/ba/Flag_of_Fiji.svg/50px-Flag_of_Fiji.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/Fiji" title="Fiji">Fiji</a></b> – <a href="/wiki/Suva" title="Suva">Suva</a></td></tr>
<tr><td>Oceania</td><td><i><a href="/wiki/Image:Flag_of_French_Polynesia.svg" class="image" title="Flag of French Polynesia"><img alt="Flag of French Polynesia" longdesc="/wiki/Image:Flag_of_French_Polynesia.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/d/db/Flag_of_French_Polynesia.svg/50px-Flag_of_French_Polynesia.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/French_Polynesia" title="French Polynesia">French Polynesia</a></i> (<a href="/wiki/French_overseas_territory" title="French overseas territory">overseas territory of France</a>) – <a href="/wiki/Papeete" title="Papeete">Papeete</a></td></tr>
<tr><td>Oceania</td><td><i><a href="/wiki/Image:Flag_of_Guam.svg" class="image" title="Flag of Guam"><img alt="Flag of Guam" longdesc="/wiki/Image:Flag_of_Guam.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/0/07/Flag_of_Guam.svg/50px-Flag_of_Guam.svg.png" height="30" width="50"></a>&nbsp;<a href="/wiki/Guam" title="Guam">Guam</a></i> (<a href="/wiki/Insular_area" title="Insular area">overseas territory of the United States</a>) – <a href="/wiki/Hag%C3%A5t%C3%B1a" title="Hagåtña">Hagåtña</a></td></tr>
<tr><td>Oceania</td><td><i><a href="/wiki/Image:Flag_of_the_United_States.svg" class="image" title="Flag of the United States"><img alt="Flag of the United States" longdesc="/wiki/Image:Flag_of_the_United_States.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/a/a4/Flag_of_the_United_States.svg/50px-Flag_of_the_United_States.svg.png" height="26" width="50"></a> <a href="/wiki/Howland_Island" title="Howland Island">Howland Island</a></i> (<a href="/wiki/Insular_area" title="Insular area">overseas territory of the United States</a>)</td></tr>
<tr><td>Oceania</td><td><i><a href="/wiki/Image:Flag_of_the_United_States.svg" class="image" title="Flag of the United States"><img alt="Flag of the United States" longdesc="/wiki/Image:Flag_of_the_United_States.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/a/a4/Flag_of_the_United_States.svg/50px-Flag_of_the_United_States.svg.png" height="26" width="50"></a> <a href="/wiki/Jarvis_Island" title="Jarvis Island">Jarvis Island</a></i> (<a href="/wiki/Insular_area" title="Insular area">overseas territory of the United States</a>)</td></tr>
<tr><td>Oceania</td><td><i><a href="/wiki/Image:Flag_of_the_United_States.svg" class="image" title="Flag of the United States"><img alt="Flag of the United States" longdesc="/wiki/Image:Flag_of_the_United_States.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/a/a4/Flag_of_the_United_States.svg/50px-Flag_of_the_United_States.svg.png" height="26" width="50"></a> <a href="/wiki/Johnston_Atoll" title="Johnston Atoll">Johnston Atoll</a></i> (<a href="/wiki/Insular_area" title="Insular area">overseas territory of the United States</a>)</td></tr>
<tr><td>Oceania</td><td><i><a href="/wiki/Image:Flag_of_the_United_States.svg" class="image" title="Flag of the United States"><img alt="Flag of the United States" longdesc="/wiki/Image:Flag_of_the_United_States.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/a/a4/Flag_of_the_United_States.svg/50px-Flag_of_the_United_States.svg.png" height="26" width="50"></a> <a href="/wiki/Kingman_Reef" title="Kingman Reef">Kingman Reef</a></i> (<a href="/wiki/Insular_area" title="Insular area">overseas territory of the United States</a>)</td></tr>
<tr><td>Oceania</td><td><b><a href="/wiki/Image:Flag_of_Kiribati.svg" class="image" title="Flag of Kiribati"><img alt="Flag of Kiribati" longdesc="/wiki/Image:Flag_of_Kiribati.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/d/d3/Flag_of_Kiribati.svg/50px-Flag_of_Kiribati.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/Kiribati" title="Kiribati">Kiribati</a></b> – <a href="/wiki/South_Tarawa" title="South Tarawa">South Tarawa</a></td></tr>
<tr><td>Oceania</td><td><b><a href="/wiki/Image:Flag_of_the_Marshall_Islands.svg" class="image" title="Flag of the Marshall Islands"><img alt="Flag of the Marshall Islands" longdesc="/wiki/Image:Flag_of_the_Marshall_Islands.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/2/2e/Flag_of_the_Marshall_Islands.svg/50px-Flag_of_the_Marshall_Islands.svg.png" height="26" width="50"></a>&nbsp;<a href="/wiki/Marshall_Islands" title="Marshall Islands">Marshall Islands</a></b> – <a href="/wiki/Majuro" title="Majuro">Majuro</a></td></tr>
<tr><td>Oceania</td><td><b><a href="/wiki/Image:Flag_of_Micronesia.svg" class="image" title="Flag of the Federated States of Micronesia"><img alt="Flag of the Federated States of Micronesia" longdesc="/wiki/Image:Flag_of_Micronesia.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/e/ed/Flag_of_Micronesia.svg/50px-Flag_of_Micronesia.svg.png" height="26" width="50"></a>&nbsp;<a href="/wiki/Federated_States_of_Micronesia" title="Federated States of Micronesia">Micronesia</a></b> – <a href="/wiki/Palikir" title="Palikir">Palikir</a></td></tr>
<tr><td>Oceania</td><td><i><a href="/wiki/Image:Flag_of_the_United_States.svg" class="image" title="Flag of the United States"><img alt="Flag of the United States" longdesc="/wiki/Image:Flag_of_the_United_States.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/a/a4/Flag_of_the_United_States.svg/50px-Flag_of_the_United_States.svg.png" height="26" width="50"></a> <a href="/wiki/Midway_Atoll" title="Midway Atoll">Midway Atoll</a></i> (<a href="/wiki/Insular_area" title="Insular area">overseas territory of the United States</a>)</td></tr>
<tr><td>Oceania</td><td><b><a href="/wiki/Image:Flag_of_Nauru.svg" class="image" title="Flag of Nauru"><img alt="Flag of Nauru" longdesc="/wiki/Image:Flag_of_Nauru.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/3/30/Flag_of_Nauru.svg/50px-Flag_of_Nauru.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/Nauru" title="Nauru">Nauru</a></b> – no official capital (seat of government at <a href="/wiki/Yaren" title="Yaren">Yaren</a>)</td></tr>
<tr><td>Oceania</td><td><i><a href="/wiki/Image:Flag_of_France.svg" class="image" title="Flag of New Caledonia"><img alt="Flag of New Caledonia" longdesc="/wiki/Image:Flag_of_France.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Flag_of_France.svg/50px-Flag_of_France.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/New_Caledonia" title="New Caledonia">New Caledonia</a></i> (<a href="/wiki/French_overseas_territory" title="French overseas territory">overseas territory of France</a>) – <a href="/wiki/Noum%C3%A9a" title="Nouméa">Nouméa</a></td></tr>
<tr><td>Oceania</td><td><b><a href="/wiki/Image:Flag_of_New_Zealand.svg" class="image" title="Flag of New Zealand"><img alt="Flag of New Zealand" longdesc="/wiki/Image:Flag_of_New_Zealand.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/3/3e/Flag_of_New_Zealand.svg/50px-Flag_of_New_Zealand.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/New_Zealand" title="New Zealand">New Zealand</a></b> – <a href="/wiki/Wellington" title="Wellington">Wellington</a></td></tr>
<tr><td>Oceania</td><td><i><a href="/wiki/Image:Flag_of_Niue.svg" class="image" title="Flag of Niue"><img alt="Flag of Niue" longdesc="/wiki/Image:Flag_of_Niue.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/0/01/Flag_of_Niue.svg/50px-Flag_of_Niue.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/Niue" title="Niue">Niue</a></i> (<a href="/wiki/Associated_state" title="Associated state">territory in free association</a> with New Zealand) – <a href="/wiki/Alofi" title="Alofi">Alofi</a></td></tr>
<tr><td>Oceania</td><td><i><a href="/wiki/Image:Flag_of_Norfolk_Island.svg" class="image" title="Flag of Norfolk Island"><img alt="Flag of Norfolk Island" longdesc="/wiki/Image:Flag_of_Norfolk_Island.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/4/48/Flag_of_Norfolk_Island.svg/50px-Flag_of_Norfolk_Island.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/Norfolk_Island" title="Norfolk Island">Norfolk Island</a></i> (overseas territory of Australia) – <a href="/wiki/Kingston%2C_Norfolk_Island" title="Kingston, Norfolk Island">Kingston</a></td></tr>
<tr><td>Oceania</td><td><i><a href="/wiki/Image:Flag_of_the_Northern_Mariana_Islands.svg" class="image" title="Flag of the Northern Mariana Islands"><img alt="Flag of the Northern Mariana Islands" longdesc="/wiki/Image:Flag_of_the_Northern_Mariana_Islands.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/e/e0/Flag_of_the_Northern_Mariana_Islands.svg/50px-Flag_of_the_Northern_Mariana_Islands.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/Northern_Mariana_Islands" title="Northern Mariana Islands">Northern Mariana Islands</a></i> (<a href="/wiki/Insular_area" title="Insular area">overseas territory of the United States</a>) – <a href="/wiki/Saipan" title="Saipan">Saipan</a></td></tr>
<tr><td>Oceania</td><td><b><a href="/wiki/Image:Flag_of_Palau.svg" class="image" title="Flag of Palau"><img alt="Flag of Palau" longdesc="/wiki/Image:Flag_of_Palau.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/4/48/Flag_of_Palau.svg/50px-Flag_of_Palau.svg.png" height="31" width="50"></a>&nbsp;<a href="/wiki/Palau" title="Palau">Palau</a></b> – <a href="/wiki/Melekeok" title="Melekeok">Melekeok</a></td></tr>
<tr><td>Oceania</td><td><i><a href="/wiki/Image:Flag_of_the_United_States.svg" class="image" title="Flag of the United States"><img alt="Flag of the United States" longdesc="/wiki/Image:Flag_of_the_United_States.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/a/a4/Flag_of_the_United_States.svg/50px-Flag_of_the_United_States.svg.png" height="26" width="50"></a> <a href="/wiki/Palmyra_Atoll" title="Palmyra Atoll">Palmyra Atoll</a></i> (<a href="/wiki/Insular_area" title="Insular area">overseas territory of the United States</a>)</td></tr>
<tr><td>Oceania</td><td><b><a href="/wiki/Image:Flag_of_Papua_New_Guinea.svg" class="image" title="Flag of Papua New Guinea"><img alt="Flag of Papua New Guinea" longdesc="/wiki/Image:Flag_of_Papua_New_Guinea.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/e/e3/Flag_of_Papua_New_Guinea.svg/50px-Flag_of_Papua_New_Guinea.svg.png" height="38" width="50"></a>&nbsp;<a href="/wiki/Papua_New_Guinea" title="Papua New Guinea">Papua New Guinea</a></b> – <a href="/wiki/Port_Moresby" title="Port Moresby">Port Moresby</a></td></tr>
<tr><td>Oceania</td><td><i><a href="/wiki/Image:Flag_of_the_Pitcairn_Islands.svg" class="image" title="Flag of the Pitcairn Islands"><img alt="Flag of the Pitcairn Islands" longdesc="/wiki/Image:Flag_of_the_Pitcairn_Islands.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/8/88/Flag_of_the_Pitcairn_Islands.svg/50px-Flag_of_the_Pitcairn_Islands.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/Pitcairn_Islands" title="Pitcairn Islands">Pitcairn Islands</a></i> (<a href="/wiki/British_overseas_territory" title="British overseas territory">overseas territory of the United Kingdom</a>) – <a href="/wiki/Adamstown%2C_Pitcairn_Island" title="Adamstown, Pitcairn Island">Adamstown</a></td></tr>
<tr><td>Oceania</td><td><b><a href="/wiki/Image:Flag_of_Samoa.svg" class="image" title="Flag of Samoa"><img alt="Flag of Samoa" longdesc="/wiki/Image:Flag_of_Samoa.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/3/31/Flag_of_Samoa.svg/50px-Flag_of_Samoa.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/Samoa" title="Samoa">Samoa</a></b> – <a href="/wiki/Apia" title="Apia">Apia</a></td></tr>
<tr><td>Oceania</td><td><b><a href="/wiki/Image:Flag_of_the_Solomon_Islands.svg" class="image" title="Flag of the Solomon Islands"><img alt="Flag of the Solomon Islands" longdesc="/wiki/Image:Flag_of_the_Solomon_Islands.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/7/74/Flag_of_the_Solomon_Islands.svg/50px-Flag_of_the_Solomon_Islands.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/Solomon_Islands" title="Solomon Islands">Solomon Islands</a></b> – <a href="/wiki/Honiara" title="Honiara">Honiara</a></td></tr>
<tr><td>Oceania</td><td><i><a href="/wiki/Image:Flag_of_New_Zealand.svg" class="image" title="Flag of Tokelau"><img alt="Flag of Tokelau" longdesc="/wiki/Image:Flag_of_New_Zealand.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/3/3e/Flag_of_New_Zealand.svg/50px-Flag_of_New_Zealand.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/Tokelau" title="Tokelau">Tokelau</a></i> (overseas territory of New Zealand) – no official capital (each atoll has its own administrative centre)</td></tr>
<tr><td>Oceania</td><td><b><a href="/wiki/Image:Flag_of_Tonga.svg" class="image" title="Flag of Tonga"><img alt="Flag of Tonga" longdesc="/wiki/Image:Flag_of_Tonga.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Flag_of_Tonga.svg/50px-Flag_of_Tonga.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/Tonga" title="Tonga">Tonga</a></b> – <a href="/wiki/Nuku%27alofa" title="Nuku'alofa">Nuku'alofa</a></td></tr>
<tr><td>Oceania</td><td><b><a href="/wiki/Image:Flag_of_Tuvalu.svg" class="image" title="Flag of Tuvalu"><img alt="Flag of Tuvalu" longdesc="/wiki/Image:Flag_of_Tuvalu.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/3/38/Flag_of_Tuvalu.svg/50px-Flag_of_Tuvalu.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/Tuvalu" title="Tuvalu">Tuvalu</a></b> – <a href="/wiki/Funafuti" title="Funafuti">Funafuti</a></td></tr>
<tr><td>Oceania</td><td><b><a href="/wiki/Image:Flag_of_Vanuatu.svg" class="image" title="Flag of Vanuatu"><img alt="Flag of Vanuatu" longdesc="/wiki/Image:Flag_of_Vanuatu.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/b/bc/Flag_of_Vanuatu.svg/50px-Flag_of_Vanuatu.svg.png" height="30" width="50"></a>&nbsp;<a href="/wiki/Vanuatu" title="Vanuatu">Vanuatu</a></b> – <a href="/wiki/Port_Vila" title="Port Vila">Port Vila</a></td></tr>
<tr><td>Oceania</td><td><i><a href="/wiki/Image:Flag_of_the_United_States.svg" class="image" title="Flag of the United States"><img alt="Flag of the United States" longdesc="/wiki/Image:Flag_of_the_United_States.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/a/a4/Flag_of_the_United_States.svg/50px-Flag_of_the_United_States.svg.png" height="26" width="50"></a> <a href="/wiki/Wake_Island" title="Wake Island">Wake Island</a></i> (<a href="/wiki/Insular_area" title="Insular area">overseas territory of the United States</a>)</td></tr>
<tr><td>Oceania</td><td><i><a href="/wiki/Image:Flag_of_France.svg" class="image" title="Flag of Wallis and Futuna"><img alt="Flag of Wallis and Futuna" longdesc="/wiki/Image:Flag_of_France.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Flag_of_France.svg/50px-Flag_of_France.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/Wallis_and_Futuna" title="Wallis and Futuna">Wallis and Futuna</a></i> (<a href="/wiki/French_overseas_territory" title="French overseas territory">overseas territory of France</a>) – <a href="/wiki/Mata-Utu" title="Mata-Utu">Mata-Utu</a></td></tr>
 
<tr><td>Antarctica</td><td><i><a href="/wiki/Image:Flag_of_Norway.svg" class="image" title="Flag of Bouvet Island"><img alt="Flag of Bouvet Island" longdesc="/wiki/Image:Flag_of_Norway.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/d/d9/Flag_of_Norway.svg/50px-Flag_of_Norway.svg.png" height="36" width="50"></a>&nbsp;<a href="/wiki/Bouvet_Island" title="Bouvet Island">Bouvet Island</a></i> (overseas territory of Norway)</td></tr>
<tr><td>Antarctica</td><td><i><a href="/wiki/Image:Flag_of_France.svg" class="image" title="Flag of the French Southern and Antarctic Lands"><img alt="Flag of the French Southern and Antarctic Lands" longdesc="/wiki/Image:Flag_of_France.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/c/c3/Flag_of_France.svg/50px-Flag_of_France.svg.png" height="33" width="50"></a>&nbsp;<a href="/wiki/French_Southern_and_Antarctic_Lands" title="French Southern and Antarctic Lands">French Southern Territories</a></i> (<a href="/wiki/French_overseas_territory" title="French overseas territory">overseas territory of France</a>)</td></tr>
<tr><td>Antarctica</td><td><i><a href="/wiki/Image:Flag_of_Australia.svg" class="image" title="Flag of Heard Island and McDonald Islands"><img alt="Flag of Heard Island and McDonald Islands" longdesc="/wiki/Image:Flag_of_Australia.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/b/b9/Flag_of_Australia.svg/50px-Flag_of_Australia.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/Heard_Island_and_McDonald_Islands" title="Heard Island and McDonald Islands">Heard Island and McDonald Islands</a></i> (overseas territory of Australia)</td></tr>
<tr><td>Antarctica</td><td><i><a href="/wiki/Image:Flag_of_South_Georgia_and_the_South_Sandwich_Islands.svg" class="image" title="Flag of South Georgia and the South Sandwich Islands"><img alt="Flag of South Georgia and the South Sandwich Islands" longdesc="/wiki/Image:Flag_of_South_Georgia_and_the_South_Sandwich_Islands.svg" class="thumbborder" src="http://upload.wikimedia.org/wikipedia/commons/thumb/e/ed/Flag_of_South_Georgia_and_the_South_Sandwich_Islands.svg/50px-Flag_of_South_Georgia_and_the_South_Sandwich_Islands.svg.png" height="25" width="50"></a>&nbsp;<a href="/wiki/South_Georgia_and_the_South_Sandwich_Islands" title="South Georgia and the South Sandwich Islands">South Georgia and the South Sandwich Islands</a></i><sup id="_ref-3" class="reference"><a href="#_note-3" title="">[7]</a></sup> (<a href="/wiki/British_overseas_territory" title="British overseas territory">overseas territory of the United Kingdom</a>)</td></tr>
</table>
 
</body>
</html>
/trunk/api/js/dojo1.0/dijit/demos/i18n/langCountryMap.json
New file
0,0 → 1,215
[
{ type: "languageCountryMap", language: "aa", country: "DJ"},
{ type: "languageCountryMap", language: "aa", country: "ER"},
{ type: "languageCountryMap", language: "aa", country: "ET"},
{ type: "languageCountryMap", language: "af", country: "NA"},
{ type: "languageCountryMap", language: "af", country: "ZA"},
{ type: "languageCountryMap", language: "ak", country: "GH"},
{ type: "languageCountryMap", language: "am", country: "ET"},
{ type: "languageCountryMap", language: "ar", country: "AE"},
{ type: "languageCountryMap", language: "ar", country: "BH"},
{ type: "languageCountryMap", language: "ar", country: "DZ"},
{ type: "languageCountryMap", language: "ar", country: "EG"},
{ type: "languageCountryMap", language: "ar", country: "IQ"},
{ type: "languageCountryMap", language: "ar", country: "JO"},
{ type: "languageCountryMap", language: "ar", country: "KW"},
{ type: "languageCountryMap", language: "ar", country: "LB"},
{ type: "languageCountryMap", language: "ar", country: "LY"},
{ type: "languageCountryMap", language: "ar", country: "MA"},
{ type: "languageCountryMap", language: "ar", country: "OM"},
{ type: "languageCountryMap", language: "ar", country: "QA"},
{ type: "languageCountryMap", language: "ar", country: "SA"},
{ type: "languageCountryMap", language: "ar", country: "SD"},
{ type: "languageCountryMap", language: "ar", country: "SY"},
{ type: "languageCountryMap", language: "ar", country: "TN"},
{ type: "languageCountryMap", language: "ar", country: "YE"},
{ type: "languageCountryMap", language: "as", country: "IN"},
{ type: "languageCountryMap", language: "az", country: "AZ"},
{ type: "languageCountryMap", language: "be", country: "BY"},
{ type: "languageCountryMap", language: "bg", country: "BG"},
{ type: "languageCountryMap", language: "bn", country: "BD"},
{ type: "languageCountryMap", language: "bn", country: "IN"},
{ type: "languageCountryMap", language: "bs", country: "BA"},
{ type: "languageCountryMap", language: "ca", country: "ES"},
{ type: "languageCountryMap", language: "cs", country: "CZ"},
{ type: "languageCountryMap", language: "cy", country: "GB"},
{ type: "languageCountryMap", language: "da", country: "DK"},
{ type: "languageCountryMap", language: "de", country: "AT"},
{ type: "languageCountryMap", language: "de", country: "BE"},
{ type: "languageCountryMap", language: "de", country: "CH"},
{ type: "languageCountryMap", language: "de", country: "DE"},
{ type: "languageCountryMap", language: "de", country: "LI"},
{ type: "languageCountryMap", language: "de", country: "LU"},
{ type: "languageCountryMap", language: "dv", country: "MV"},
{ type: "languageCountryMap", language: "dz", country: "BT"},
{ type: "languageCountryMap", language: "ee", country: "GH"},
{ type: "languageCountryMap", language: "ee", country: "TG"},
{ type: "languageCountryMap", language: "el", country: "CY"},
{ type: "languageCountryMap", language: "el", country: "GR"},
{ type: "languageCountryMap", language: "en", country: "AS"},
{ type: "languageCountryMap", language: "en", country: "AU"},
{ type: "languageCountryMap", language: "en", country: "BE"},
{ type: "languageCountryMap", language: "en", country: "BW"},
{ type: "languageCountryMap", language: "en", country: "BZ"},
{ type: "languageCountryMap", language: "en", country: "CA"},
{ type: "languageCountryMap", language: "en", country: "GB"},
{ type: "languageCountryMap", language: "en", country: "GU"},
{ type: "languageCountryMap", language: "en", country: "HK"},
{ type: "languageCountryMap", language: "en", country: "IE"},
{ type: "languageCountryMap", language: "en", country: "IN"},
{ type: "languageCountryMap", language: "en", country: "JM"},
{ type: "languageCountryMap", language: "en", country: "MH"},
{ type: "languageCountryMap", language: "en", country: "MP"},
{ type: "languageCountryMap", language: "en", country: "MT"},
{ type: "languageCountryMap", language: "en", country: "NA"},
{ type: "languageCountryMap", language: "en", country: "NZ"},
{ type: "languageCountryMap", language: "en", country: "PH"},
{ type: "languageCountryMap", language: "en", country: "PK"},
{ type: "languageCountryMap", language: "en", country: "SG"},
{ type: "languageCountryMap", language: "en", country: "TT"},
{ type: "languageCountryMap", language: "en", country: "UM"},
{ type: "languageCountryMap", language: "en", country: "US"},
{ type: "languageCountryMap", language: "en", country: "VI"},
{ type: "languageCountryMap", language: "en", country: "ZA"},
{ type: "languageCountryMap", language: "en", country: "ZW"},
{ type: "languageCountryMap", language: "es", country: "AR"},
{ type: "languageCountryMap", language: "es", country: "BO"},
{ type: "languageCountryMap", language: "es", country: "CL"},
{ type: "languageCountryMap", language: "es", country: "CO"},
{ type: "languageCountryMap", language: "es", country: "CR"},
{ type: "languageCountryMap", language: "es", country: "DO"},
{ type: "languageCountryMap", language: "es", country: "EC"},
{ type: "languageCountryMap", language: "es", country: "ES"},
{ type: "languageCountryMap", language: "es", country: "GT"},
{ type: "languageCountryMap", language: "es", country: "HN"},
{ type: "languageCountryMap", language: "es", country: "MX"},
{ type: "languageCountryMap", language: "es", country: "NI"},
{ type: "languageCountryMap", language: "es", country: "PA"},
{ type: "languageCountryMap", language: "es", country: "PE"},
{ type: "languageCountryMap", language: "es", country: "PR"},
{ type: "languageCountryMap", language: "es", country: "PY"},
{ type: "languageCountryMap", language: "es", country: "SV"},
{ type: "languageCountryMap", language: "es", country: "US"},
{ type: "languageCountryMap", language: "es", country: "UY"},
{ type: "languageCountryMap", language: "es", country: "VE"},
{ type: "languageCountryMap", language: "et", country: "EE"},
{ type: "languageCountryMap", language: "eu", country: "ES"},
{ type: "languageCountryMap", language: "fa", country: "AF"},
{ type: "languageCountryMap", language: "fa", country: "IR"},
{ type: "languageCountryMap", language: "fi", country: "FI"},
{ type: "languageCountryMap", language: "fo", country: "FO"},
{ type: "languageCountryMap", language: "fr", country: "BE"},
{ type: "languageCountryMap", language: "fr", country: "CA"},
{ type: "languageCountryMap", language: "fr", country: "CH"},
{ type: "languageCountryMap", language: "fr", country: "FR"},
{ type: "languageCountryMap", language: "fr", country: "LU"},
{ type: "languageCountryMap", language: "fr", country: "MC"},
{ type: "languageCountryMap", language: "ga", country: "IE"},
{ type: "languageCountryMap", language: "gl", country: "ES"},
{ type: "languageCountryMap", language: "gu", country: "IN"},
{ type: "languageCountryMap", language: "gv", country: "GB"},
{ type: "languageCountryMap", language: "ha", country: "GH"},
{ type: "languageCountryMap", language: "ha", country: "NE"},
{ type: "languageCountryMap", language: "ha", country: "NG"},
{ type: "languageCountryMap", language: "he", country: "IL"},
{ type: "languageCountryMap", language: "hi", country: "IN"},
{ type: "languageCountryMap", language: "hr", country: "HR"},
{ type: "languageCountryMap", language: "hu", country: "HU"},
{ type: "languageCountryMap", language: "hy", country: "AM"},
{ type: "languageCountryMap", language: "id", country: "ID"},
{ type: "languageCountryMap", language: "ig", country: "NG"},
{ type: "languageCountryMap", language: "is", country: "IS"},
{ type: "languageCountryMap", language: "it", country: "CH"},
{ type: "languageCountryMap", language: "it", country: "IT"},
{ type: "languageCountryMap", language: "ja", country: "JP"},
{ type: "languageCountryMap", language: "ka", country: "GE"},
{ type: "languageCountryMap", language: "kk", country: "KZ"},
{ type: "languageCountryMap", language: "kl", country: "GL"},
{ type: "languageCountryMap", language: "km", country: "KH"},
{ type: "languageCountryMap", language: "kn", country: "IN"},
{ type: "languageCountryMap", language: "ko", country: "KR"},
{ type: "languageCountryMap", language: "ku", country: "IQ"},
{ type: "languageCountryMap", language: "ku", country: "IR"},
{ type: "languageCountryMap", language: "ku", country: "SY"},
{ type: "languageCountryMap", language: "ku", country: "TR"},
{ type: "languageCountryMap", language: "kw", country: "GB"},
{ type: "languageCountryMap", language: "ky", country: "KG"},
{ type: "languageCountryMap", language: "ln", country: "CD"},
{ type: "languageCountryMap", language: "ln", country: "CG"},
{ type: "languageCountryMap", language: "lo", country: "LA"},
{ type: "languageCountryMap", language: "lt", country: "LT"},
{ type: "languageCountryMap", language: "lv", country: "LV"},
{ type: "languageCountryMap", language: "mk", country: "MK"},
{ type: "languageCountryMap", language: "ml", country: "IN"},
{ type: "languageCountryMap", language: "mn", country: "MN"},
{ type: "languageCountryMap", language: "mr", country: "IN"},
{ type: "languageCountryMap", language: "ms", country: "BN"},
{ type: "languageCountryMap", language: "ms", country: "MY"},
{ type: "languageCountryMap", language: "mt", country: "MT"},
{ type: "languageCountryMap", language: "nb", country: "NO"},
{ type: "languageCountryMap", language: "ne", country: "NP"},
{ type: "languageCountryMap", language: "nl", country: "BE"},
{ type: "languageCountryMap", language: "nl", country: "NL"},
{ type: "languageCountryMap", language: "nn", country: "NO"},
{ type: "languageCountryMap", language: "nr", country: "ZA"},
{ type: "languageCountryMap", language: "ny", country: "MW"},
{ type: "languageCountryMap", language: "om", country: "ET"},
{ type: "languageCountryMap", language: "om", country: "KE"},
{ type: "languageCountryMap", language: "or", country: "IN"},
{ type: "languageCountryMap", language: "pa", country: "IN"},
{ type: "languageCountryMap", language: "pa", country: "PK"},
{ type: "languageCountryMap", language: "pl", country: "PL"},
{ type: "languageCountryMap", language: "ps", country: "AF"},
{ type: "languageCountryMap", language: "pt", country: "BR"},
{ type: "languageCountryMap", language: "pt", country: "PT"},
{ type: "languageCountryMap", language: "ro", country: "RO"},
{ type: "languageCountryMap", language: "ru", country: "RU"},
{ type: "languageCountryMap", language: "ru", country: "UA"},
{ type: "languageCountryMap", language: "rw", country: "RW"},
{ type: "languageCountryMap", language: "sa", country: "IN"},
{ type: "languageCountryMap", language: "se", country: "NO"},
{ type: "languageCountryMap", language: "sh", country: "BA"},
{ type: "languageCountryMap", language: "sh", country: "CS"},
{ type: "languageCountryMap", language: "sh", country: "YU"},
{ type: "languageCountryMap", language: "sk", country: "SK"},
{ type: "languageCountryMap", language: "sl", country: "SI"},
{ type: "languageCountryMap", language: "so", country: "DJ"},
{ type: "languageCountryMap", language: "so", country: "ET"},
{ type: "languageCountryMap", language: "so", country: "KE"},
{ type: "languageCountryMap", language: "so", country: "SO"},
{ type: "languageCountryMap", language: "sq", country: "AL"},
{ type: "languageCountryMap", language: "sr", country: "BA"},
{ type: "languageCountryMap", language: "sr", country: "CS"},
{ type: "languageCountryMap", language: "sr", country: "YU"},
{ type: "languageCountryMap", language: "ss", country: "ZA"},
{ type: "languageCountryMap", language: "st", country: "ZA"},
{ type: "languageCountryMap", language: "sv", country: "FI"},
{ type: "languageCountryMap", language: "sv", country: "SE"},
{ type: "languageCountryMap", language: "sw", country: "KE"},
{ type: "languageCountryMap", language: "sw", country: "TZ"},
{ type: "languageCountryMap", language: "ta", country: "IN"},
{ type: "languageCountryMap", language: "te", country: "IN"},
{ type: "languageCountryMap", language: "tg", country: "TJ"},
{ type: "languageCountryMap", language: "th", country: "TH"},
{ type: "languageCountryMap", language: "ti", country: "ER"},
{ type: "languageCountryMap", language: "ti", country: "ET"},
{ type: "languageCountryMap", language: "tn", country: "ZA"},
{ type: "languageCountryMap", language: "tr", country: "TR"},
{ type: "languageCountryMap", language: "ts", country: "ZA"},
{ type: "languageCountryMap", language: "tt", country: "RU"},
{ type: "languageCountryMap", language: "uk", country: "UA"},
{ type: "languageCountryMap", language: "ur", country: "IN"},
{ type: "languageCountryMap", language: "ur", country: "PK"},
{ type: "languageCountryMap", language: "uz", country: "AF"},
{ type: "languageCountryMap", language: "uz", country: "UZ"},
{ type: "languageCountryMap", language: "ve", country: "ZA"},
{ type: "languageCountryMap", language: "vi", country: "VN"},
{ type: "languageCountryMap", language: "xh", country: "ZA"},
{ type: "languageCountryMap", language: "yo", country: "NG"},
{ type: "languageCountryMap", language: "zh", country: "CN"},
{ type: "languageCountryMap", language: "zh", country: "HK"},
{ type: "languageCountryMap", language: "zh", country: "MO"},
{ type: "languageCountryMap", language: "zh", country: "SG"},
{ type: "languageCountryMap", language: "zh", country: "TW"},
{ type: "languageCountryMap", language: "zu", country: "ZA"}
]
/trunk/api/js/dojo1.0/dijit/demos/i18n/continents.json
New file
0,0 → 1,9
[
{ type: "continent", name: "Africa", iso: "Africa" },
{ type: "continent", name: "Asia", iso: "Asia" },
{ type: "continent", name: "Europe", iso: "Europe" },
{ type: "continent", name: "North America", iso: "North America" },
{ type: "continent", name: "South America", iso: "South America" },
{ type: "continent", name: "Oceania", iso: "Oceania" },
{ type: "continent", name: "Antarctica", iso: "Antarctica" }
]
/trunk/api/js/dojo1.0/dijit/demos/i18n/generate.html
New file
0,0 → 1,2353
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript" src="../../../dojo/dojo.js"
djConfig="isDebug: true, parseOnLoad: true"></script>
<script>
dojo.require("dijit.layout.ContentPane");
</script>
<script>
 
function t(node){ return node.innerText || node.textContent; };
 
var languages, langCountryMap, continents, countries;
 
// Call this first, to load JSON data from files (have to wait for load to finish)
function load(){
// Load list of continents
var d = dojo.xhrGet({url: "continents.json", handleAs: "json-comment-optional"});
d.addCallback(function(data){
continents = data;
});
 
// Load mapping between countries and languages
var d = dojo.xhrGet({url: "langCountryMap.json", handleAs: "json-comment-optional"});
d.addCallback(function(data){
langCountryMap = data;
dojo.forEach(langCountryMap, function(entry){
entry.iso = entry.language + "_" + entry.country;
});
});
 
// Load list of languages
var d2 = dojo.xhrGet({url: "languages.json", handleAs: "json-comment-optional"});
d2.addCallback(function(data){
data = dojo.filter(data, function(item){
return item.name && item.countries.length;
});
 
// each data item X now contains a list every language, as written in
// language X, but actually need to invert that for this demo
languages = dojo.map(data, function(l){
var item = {type: "language", iso: l.iso, name: l.name, countries: l.countries};
dojo.forEach(data, function(fl){
if(fl[l.iso]){
if(item.iso=="en") console.log("in " + fl.name + " the language " + l.name + "/" + l.iso + " is spelled as " + fl[l.iso]);
item[fl.iso]=fl[l.iso];
}
});
if(item.iso == "en") console.log(item);
return item;
});
});
}
 
function generate(){
// mapping from country to continent
var country2continent = {};
dojo.query("tr", "continents").forEach(function(row){
var continent = t(dojo.query("td", row)[0]);
var country = t(dojo.query("a", row)[1]);
country2continent[country] = continent;
});
 
// Generate country items
countries = dojo.query("tr", "source").
filter(function(row){ return dojo.query("a", row).length && dojo.query("td", row).length; } ).
map(function(row){
var iso = dojo.query("td", row)[3];
iso = t(iso);
var a = dojo.query("td:nth-child(1) a:nth-child(2)", row)[0];
var name = t(a);
var country = {
type: "country",
iso: iso,
name: name,
href: "http://en.wikipedia.org/wiki" + a.href.replace(/.*\/wiki/, "")
};
if(country2continent[name]){
country.continent = country2continent[name];
}
country.languages = dojo.filter(langCountryMap, function(x){
return x.country==iso;
}).map(function(x){
return {_reference: x.language};
});
return country;
});
 
// generate json for data
var out = dojo.byId("json");
console.debug(countries);
var json = [].concat(languages, langCountryMap, continents, dojo.map(countries, function(x){return x;}));
out.value = dojo.toJson(json, true);
}
</script>
</head>
<body>
<h1> Country / Language JSON Database Generator </h1>
<p>push step #1 then wait, then step #2</p>
<button onclick="load();">Step #1</button>
<button onclick="generate();">Step #2</button>
 
<h1>JSON</h1>
<textarea id="json" cols=100 rows=20></textarea>
 
 
<h1>Country names, flags, and ISO code</h1>
<p>data taken from <a href="http://en.wikipedia.org/wiki/ISO_3166-1">wikipedia ISO 3166-1 site</a></p>
<table id="source" style="height: 300px; overflow: auto;">
<tbody>
 
<tr>
<th width="300">Official country names used by the ISO 3166/MA</th>
<th><a href="/wiki/ISO_3166-1_numeric" title="ISO 3166-1 numeric">Numeric</a></th>
<th><a href="/wiki/ISO_3166-1_alpha-3" title="ISO 3166-1 alpha-3">Alpha-3</a></th>
<th><a href="/wiki/ISO_3166-1_alpha-2" title="ISO 3166-1 alpha-2">Alpha-2</a></th>
<th>Local ISO codes</th>
</tr>
 
<tr>
<td><a href="/wiki/Image:Flag_of_Afghanistan.svg" class="image" title="Flag of Afghanistan"></a>&nbsp;<a href="/wiki/Afghanistan" title="Afghanistan">Afghanistan</a></td>
<td>004</td>
 
<td>AFG</td>
<td id="AF">AF</td>
<td><a href="/wiki/ISO_3166-2:AF" title="ISO 3166-2:AF">ISO 3166-2:AF</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Aaland.svg" class="image" title="Flag of Åland"></a>&nbsp;<a href="/wiki/%C3%85land" title="Åland">Åland Islands</a></td>
<td>248</td>
<td>ALA</td>
<td id="AX">AX</td>
<td><a href="/w/index.php?title=ISO_3166-2:AX&amp;action=edit" class="new" title="ISO 3166-2:AX">ISO 3166-2:AX</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Albania.svg" class="image" title="Flag of Albania"></a>&nbsp;<a href="/wiki/Albania" title="Albania">Albania</a></td>
<td>008</td>
<td>ALB</td>
<td id="AL">AL</td>
<td><a href="/wiki/ISO_3166-2:AL" title="ISO 3166-2:AL">ISO 3166-2:AL</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Algeria.svg" class="image" title="Flag of Algeria"></a>&nbsp;<a href="/wiki/Algeria" title="Algeria">Algeria</a></td>
<td>012</td>
 
<td>DZA</td>
<td id="DZ">DZ</td>
<td><a href="/wiki/ISO_3166-2:DZ" title="ISO 3166-2:DZ">ISO 3166-2:DZ</a></td>
</tr>
 
<tr>
<td><a href="/wiki/Image:Flag_of_American_Samoa.svg" class="image" title="Flag of American Samoa"></a>&nbsp;<a href="/wiki/American_Samoa" title="American Samoa">American Samoa</a></td>
<td>016</td>
<td>ASM</td>
<td id="AS">AS</td>
<td><a href="/w/index.php?title=ISO_3166-2:AS&amp;action=edit" class="new" title="ISO 3166-2:AS">ISO 3166-2:AS</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Andorra.svg" class="image" title="Flag of Andorra"></a>&nbsp;<a href="/wiki/Andorra" title="Andorra">Andorra</a></td>
<td>020</td>
<td>AND</td>
<td id="AD">AD</td>
<td><a href="/wiki/ISO_3166-2:AD" title="ISO 3166-2:AD">ISO 3166-2:AD</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Angola.svg" class="image" title="Flag of Angola"></a>&nbsp;<a href="/wiki/Angola" title="Angola">Angola</a></td>
<td>024</td>
 
<td>AGO</td>
<td id="AO">AO</td>
<td><a href="/wiki/ISO_3166-2:AO" title="ISO 3166-2:AO">ISO 3166-2:AO</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Anguilla.svg" class="image" title="Flag of Anguilla"></a>&nbsp;<a href="/wiki/Anguilla" title="Anguilla">Anguilla</a></td>
<td>660</td>
<td>AIA</td>
<td id="AI">AI</td>
<td><a href="/w/index.php?title=ISO_3166-2:AI&amp;action=edit" class="new" title="ISO 3166-2:AI">ISO 3166-2:AI</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Antarctica.svg" class="image" title="Flag of Antarctica"></a>&nbsp;<a href="/wiki/Antarctica" title="Antarctica">Antarctica</a></td>
<td>010</td>
<td>ATA</td>
<td id="AQ">AQ</td>
<td><a href="/w/index.php?title=ISO_3166-2:AQ&amp;action=edit" class="new" title="ISO 3166-2:AQ">ISO 3166-2:AQ</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Antigua_and_Barbuda.svg" class="image" title="Flag of Antigua and Barbuda"></a>&nbsp;<a href="/wiki/Antigua_and_Barbuda" title="Antigua and Barbuda">Antigua and Barbuda</a></td>
<td>028</td>
 
<td>ATG</td>
<td id="AG">AG</td>
<td><a href="/wiki/ISO_3166-2:AG" title="ISO 3166-2:AG">ISO 3166-2:AG</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Argentina.svg" class="image" title="Flag of Argentina"></a>&nbsp;<a href="/wiki/Argentina" title="Argentina">Argentina</a></td>
<td>032</td>
<td>ARG</td>
<td id="AR">AR</td>
<td><a href="/wiki/ISO_3166-2:AR" title="ISO 3166-2:AR">ISO 3166-2:AR</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Armenia.svg" class="image" title="Flag of Armenia"></a>&nbsp;<a href="/wiki/Armenia" title="Armenia">Armenia</a></td>
<td>051</td>
<td>ARM</td>
<td id="AM">AM</td>
<td><a href="/w/index.php?title=ISO_3166-2:AM&amp;action=edit" class="new" title="ISO 3166-2:AM">ISO 3166-2:AM</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Aruba.svg" class="image" title="Flag of Aruba"></a>&nbsp;<a href="/wiki/Aruba" title="Aruba">Aruba</a></td>
<td>533</td>
 
<td>ABW</td>
<td id="AW">AW</td>
<td><a href="/w/index.php?title=ISO_3166-2:AW&amp;action=edit" class="new" title="ISO 3166-2:AW">ISO 3166-2:AW</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Australia.svg" class="image" title="Flag of Australia"></a>&nbsp;<a href="/wiki/Australia" title="Australia">Australia</a></td>
<td>036</td>
<td>AUS</td>
<td id="AU">AU</td>
<td><a href="/wiki/ISO_3166-2:AU" title="ISO 3166-2:AU">ISO 3166-2:AU</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Austria.svg" class="image" title="Flag of Austria"></a>&nbsp;<a href="/wiki/Austria" title="Austria">Austria</a></td>
<td>040</td>
<td>AUT</td>
<td id="AT">AT</td>
<td><a href="/wiki/ISO_3166-2:AT" title="ISO 3166-2:AT">ISO 3166-2:AT</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Azerbaijan.svg" class="image" title="Flag of Azerbaijan"></a>&nbsp;<a href="/wiki/Azerbaijan" title="Azerbaijan">Azerbaijan</a></td>
<td>031</td>
 
<td>AZE</td>
<td id="AZ">AZ</td>
<td><a href="/wiki/ISO_3166-2:AZ" title="ISO 3166-2:AZ">ISO 3166-2:AZ</a></td>
</tr>
<tr bgcolor="lightgray">
<td colspan="5"></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_the_Bahamas.svg" class="image" title="Flag of the Bahamas"></a>&nbsp;<a href="/wiki/The_Bahamas" title="The Bahamas">Bahamas</a></td>
<td>044</td>
<td>BHS</td>
 
<td id="BS">BS</td>
<td><a href="/w/index.php?title=ISO_3166-2:BS&amp;action=edit" class="new" title="ISO 3166-2:BS">ISO 3166-2:BS</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Bahrain.svg" class="image" title="Flag of Bahrain"></a>&nbsp;<a href="/wiki/Bahrain" title="Bahrain">Bahrain</a></td>
<td>048</td>
<td>BHR</td>
<td id="BH">BH</td>
<td><a href="/wiki/ISO_3166-2:BH" title="ISO 3166-2:BH">ISO 3166-2:BH</a></td>
</tr>
 
<tr>
<td><a href="/wiki/Image:Flag_of_Bangladesh.svg" class="image" title="Flag of Bangladesh"></a>&nbsp;<a href="/wiki/Bangladesh" title="Bangladesh">Bangladesh</a></td>
<td>050</td>
<td>BGD</td>
<td id="BD">BD</td>
<td><a href="/wiki/ISO_3166-2:BD" title="ISO 3166-2:BD">ISO 3166-2:BD</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Barbados.svg" class="image" title="Flag of Barbados"></a>&nbsp;<a href="/wiki/Barbados" title="Barbados">Barbados</a></td>
<td>052</td>
 
<td>BRB</td>
<td id="BB">BB</td>
<td><a href="/wiki/ISO_3166-2:BB" title="ISO 3166-2:BB">ISO 3166-2:BB</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Belarus.svg" class="image" title="Flag of Belarus"></a>&nbsp;<a href="/wiki/Belarus" title="Belarus">Belarus</a></td>
<td>112</td>
<td>BLR</td>
<td id="BY">BY</td>
<td><a href="/wiki/ISO_3166-2:BY" title="ISO 3166-2:BY">ISO 3166-2:BY</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Belgium_%28civil%29.svg" class="image" title="Flag of Belgium"></a>&nbsp;<a href="/wiki/Belgium" title="Belgium">Belgium</a></td>
<td>056</td>
<td>BEL</td>
<td id="BE">BE</td>
<td><a href="/wiki/ISO_3166-2:BE" title="ISO 3166-2:BE">ISO 3166-2:BE</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Belize.svg" class="image" title="Flag of Belize"></a>&nbsp;<a href="/wiki/Belize" title="Belize">Belize</a></td>
<td>084</td>
 
<td>BLZ</td>
<td id="BZ">BZ</td>
<td><a href="/w/index.php?title=ISO_3166-2:BZ&amp;action=edit" class="new" title="ISO 3166-2:BZ">ISO 3166-2:BZ</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Benin.svg" class="image" title="Flag of Benin"></a>&nbsp;<a href="/wiki/Benin" title="Benin">Benin</a></td>
<td>204</td>
<td>BEN</td>
<td id="BJ">BJ</td>
<td><a href="/wiki/ISO_3166-2:BJ" title="ISO 3166-2:BJ">ISO 3166-2:BJ</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Bermuda.svg" class="image" title="Flag of Bermuda"></a>&nbsp;<a href="/wiki/Bermuda" title="Bermuda">Bermuda</a></td>
<td>060</td>
<td>BMU</td>
<td id="BM">BM</td>
<td><a href="/w/index.php?title=ISO_3166-2:BM&amp;action=edit" class="new" title="ISO 3166-2:BM">ISO 3166-2:BM</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Bhutan.svg" class="image" title="Flag of Bhutan"></a>&nbsp;<a href="/wiki/Bhutan" title="Bhutan">Bhutan</a></td>
<td>064</td>
 
<td>BTN</td>
<td id="BT">BT</td>
<td><a href="/w/index.php?title=ISO_3166-2:BT&amp;action=edit" class="new" title="ISO 3166-2:BT">ISO 3166-2:BT</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Bolivia.svg" class="image" title="Flag of Bolivia"></a>&nbsp;<a href="/wiki/Bolivia" title="Bolivia">Bolivia</a></td>
<td>068</td>
<td>BOL</td>
<td id="BO">BO</td>
<td><a href="/wiki/ISO_3166-2:BO" title="ISO 3166-2:BO">ISO 3166-2:BO</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Bosnia_and_Herzegovina.svg" class="image" title="Flag of Bosnia and Herzegovina"></a>&nbsp;<a href="/wiki/Bosnia_and_Herzegovina" title="Bosnia and Herzegovina">Bosnia and Herzegovina</a></td>
<td>070</td>
<td>BIH</td>
<td id="BA">BA</td>
<td><a href="/w/index.php?title=ISO_3166-2:BA&amp;action=edit" class="new" title="ISO 3166-2:BA">ISO 3166-2:BA</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Botswana.svg" class="image" title="Flag of Botswana"></a>&nbsp;<a href="/wiki/Botswana" title="Botswana">Botswana</a></td>
<td>072</td>
 
<td>BWA</td>
<td id="BW">BW</td>
<td><a href="/wiki/ISO_3166-2:BW" title="ISO 3166-2:BW">ISO 3166-2:BW</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Norway.svg" class="image" title="Flag of Bouvet Island"></a>&nbsp;<a href="/wiki/Bouvet_Island" title="Bouvet Island">Bouvet Island</a></td>
<td>074</td>
<td>BVT</td>
<td id="BV">BV</td>
<td><a href="/w/index.php?title=ISO_3166-2:BV&amp;action=edit" class="new" title="ISO 3166-2:BV">ISO 3166-2:BV</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Brazil.svg" class="image" title="Flag of Brazil"></a>&nbsp;<a href="/wiki/Brazil" title="Brazil">Brazil</a></td>
<td>076</td>
<td>BRA</td>
<td id="BR">BR</td>
<td><a href="/wiki/ISO_3166-2:BR" title="ISO 3166-2:BR">ISO 3166-2:BR</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_the_British_Indian_Ocean_Territory.svg" class="image" title="Flag of British Indian Ocean Territory"></a>&nbsp;<a href="/wiki/British_Indian_Ocean_Territory" title="British Indian Ocean Territory">British Indian Ocean Territory</a></td>
<td>086</td>
 
<td>IOT</td>
<td id="IO">IO</td>
<td><a href="/w/index.php?title=ISO_3166-2:IO&amp;action=edit" class="new" title="ISO 3166-2:IO">ISO 3166-2:IO</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Brunei.svg" class="image" title="Flag of Brunei"></a>&nbsp;<a href="/wiki/Brunei" title="Brunei">Brunei Darussalam</a></td>
<td>096</td>
<td>BRN</td>
<td id="BN">BN</td>
<td><a href="/w/index.php?title=ISO_3166-2:BN&amp;action=edit" class="new" title="ISO 3166-2:BN">ISO 3166-2:BN</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Bulgaria.svg" class="image" title="Flag of Bulgaria"></a>&nbsp;<a href="/wiki/Bulgaria" title="Bulgaria">Bulgaria</a></td>
<td>100</td>
<td>BGR</td>
<td id="BG">BG</td>
<td><a href="/wiki/ISO_3166-2:BG" title="ISO 3166-2:BG">ISO 3166-2:BG</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Burkina_Faso.svg" class="image" title="Flag of Burkina Faso"></a>&nbsp;<a href="/wiki/Burkina_Faso" title="Burkina Faso">Burkina Faso</a></td>
<td>854</td>
 
<td>BFA</td>
<td id="BF">BF</td>
<td><a href="/w/index.php?title=ISO_3166-2:BF&amp;action=edit" class="new" title="ISO 3166-2:BF">ISO 3166-2:BF</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Burundi.svg" class="image" title="Flag of Burundi"></a>&nbsp;<a href="/wiki/Burundi" title="Burundi">Burundi</a></td>
<td>108</td>
<td>BDI</td>
<td id="BI">BI</td>
<td><a href="/wiki/ISO_3166-2:BI" title="ISO 3166-2:BI">ISO 3166-2:BI</a></td>
 
</tr>
<tr bgcolor="lightgray">
<td colspan="5"></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Cambodia.svg" class="image" title="Flag of Cambodia"></a>&nbsp;<a href="/wiki/Cambodia" title="Cambodia">Cambodia</a></td>
<td>116</td>
<td>KHM</td>
<td id="KH">KH</td>
<td><a href="/wiki/ISO_3166-2:KH" title="ISO 3166-2:KH">ISO 3166-2:KH</a></td>
</tr>
<tr>
 
<td><a href="/wiki/Image:Flag_of_Cameroon.svg" class="image" title="Flag of Cameroon"></a>&nbsp;<a href="/wiki/Cameroon" title="Cameroon">Cameroon</a></td>
<td>120</td>
<td>CMR</td>
<td id="CM">CM</td>
<td><a href="/w/index.php?title=ISO_3166-2:CM&amp;action=edit" class="new" title="ISO 3166-2:CM">ISO 3166-2:CM</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Canada.svg" class="image" title="Flag of Canada"></a>&nbsp;<a href="/wiki/Canada" title="Canada">Canada</a></td>
<td>124</td>
<td>CAN</td>
 
<td id="CA">CA</td>
<td><a href="/wiki/ISO_3166-2:CA" title="ISO 3166-2:CA">ISO 3166-2:CA</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Cape_Verde.svg" class="image" title="Flag of Cape Verde"></a>&nbsp;<a href="/wiki/Cape_Verde" title="Cape Verde">Cape Verde</a></td>
<td>132</td>
<td>CPV</td>
<td id="CV">CV</td>
<td><a href="/wiki/ISO_3166-2:CV" title="ISO 3166-2:CV">ISO 3166-2:CV</a></td>
</tr>
 
<tr>
<td><a href="/wiki/Image:Flag_of_the_Cayman_Islands.svg" class="image" title="Flag of Cayman Islands"></a>&nbsp;<a href="/wiki/Cayman_Islands" title="Cayman Islands">Cayman Islands</a></td>
<td>136</td>
<td>CYM</td>
<td id="KY">KY</td>
<td><a href="/w/index.php?title=ISO_3166-2:KY&amp;action=edit" class="new" title="ISO 3166-2:KY">ISO 3166-2:KY</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_the_Central_African_Republic.svg" class="image" title="Flag of the Central African Republic"></a>&nbsp;<a href="/wiki/Central_African_Republic" title="Central African Republic">Central African Republic</a></td>
<td>140</td>
 
<td>CAF</td>
<td id="CF">CF</td>
<td><a href="/w/index.php?title=ISO_3166-2:CF&amp;action=edit" class="new" title="ISO 3166-2:CF">ISO 3166-2:CF</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Chad.svg" class="image" title="Flag of Chad"></a>&nbsp;<a href="/wiki/Chad" title="Chad">Chad</a></td>
<td>148</td>
<td>TCD</td>
<td id="TD">TD</td>
<td><a href="/wiki/ISO_3166-2:TD" title="ISO 3166-2:TD">ISO 3166-2:TD</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Chile.svg" class="image" title="Flag of Chile"></a>&nbsp;<a href="/wiki/Chile" title="Chile">Chile</a></td>
<td>152</td>
<td>CHL</td>
<td id="CL">CL</td>
<td><a href="/wiki/ISO_3166-2:CL" title="ISO 3166-2:CL">ISO 3166-2:CL</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_the_People%27s_Republic_of_China.svg" class="image" title="Flag of the People's Republic of China"></a>&nbsp;<a href="/wiki/People%27s_Republic_of_China" title="People's Republic of China">China</a></td>
<td>156</td>
 
<td>CHN</td>
<td id="CN">CN</td>
<td><a href="/wiki/ISO_3166-2:CN" title="ISO 3166-2:CN">ISO 3166-2:CN</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Christmas_Island.svg" class="image" title="Flag of Christmas Island"></a>&nbsp;<a href="/wiki/Christmas_Island" title="Christmas Island">Christmas Island</a></td>
<td>162</td>
<td>CXR</td>
<td id="CX">CX</td>
<td><a href="/w/index.php?title=ISO_3166-2:CX&amp;action=edit" class="new" title="ISO 3166-2:CX">ISO 3166-2:CX</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Australia.svg" class="image" title="Flag of the Cocos (Keeling) Islands"></a>&nbsp;<a href="/wiki/Cocos_%28Keeling%29_Islands" title="Cocos (Keeling) Islands">Cocos (Keeling) Islands</a></td>
<td>166</td>
<td>CCK</td>
<td id="CC">CC</td>
<td><a href="/w/index.php?title=ISO_3166-2:CC&amp;action=edit" class="new" title="ISO 3166-2:CC">ISO 3166-2:CC</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Colombia.svg" class="image" title="Flag of Colombia"></a>&nbsp;<a href="/wiki/Colombia" title="Colombia">Colombia</a></td>
<td>170</td>
 
<td>COL</td>
<td id="CO">CO</td>
<td><a href="/wiki/ISO_3166-2:CO" title="ISO 3166-2:CO">ISO 3166-2:CO</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_the_Comoros.svg" class="image" title="Flag of the Comoros"></a>&nbsp;<a href="/wiki/Comoros" title="Comoros">Comoros</a></td>
<td>174</td>
<td>COM</td>
<td id="KM">KM</td>
<td><a href="/w/index.php?title=ISO_3166-2:KM&amp;action=edit" class="new" title="ISO 3166-2:KM">ISO 3166-2:KM</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_the_Republic_of_the_Congo.svg" class="image" title="Flag of the Republic of the Congo"></a>&nbsp;<a href="/wiki/Republic_of_the_Congo" title="Republic of the Congo">Congo</a></td>
<td>178</td>
<td>COG</td>
<td id="CG">CG</td>
<td><a href="/w/index.php?title=ISO_3166-2:CG&amp;action=edit" class="new" title="ISO 3166-2:CG">ISO 3166-2:CG</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_the_Democratic_Republic_of_the_Congo.svg" class="image" title="Flag of the Democratic Republic of the Congo"></a>&nbsp;<a href="/wiki/Democratic_Republic_of_the_Congo" title="Democratic Republic of the Congo">Congo, Democratic Republic of the</a></td>
<td>180</td>
 
<td>COD</td>
<td id="CD">CD</td>
<td><a href="/wiki/ISO_3166-2:CD" title="ISO 3166-2:CD">ISO 3166-2:CD</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_the_Cook_Islands.svg" class="image" title="Flag of the Cook Islands"></a>&nbsp;<a href="/wiki/Cook_Islands" title="Cook Islands">Cook Islands</a></td>
<td>184</td>
<td>COK</td>
<td id="CK">CK</td>
<td><a href="/w/index.php?title=ISO_3166-2:CK&amp;action=edit" class="new" title="ISO 3166-2:CK">ISO 3166-2:CK</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Costa_Rica.svg" class="image" title="Flag of Costa Rica"></a>&nbsp;<a href="/wiki/Costa_Rica" title="Costa Rica">Costa Rica</a></td>
<td>188</td>
<td>CRI</td>
<td id="CR">CR</td>
<td><a href="/w/index.php?title=ISO_3166-2:CR&amp;action=edit" class="new" title="ISO 3166-2:CR">ISO 3166-2:CR</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Cote_d%27Ivoire.svg" class="image" title="Flag of Côte d'Ivoire"></a>&nbsp;<a href="/wiki/C%C3%B4te_d%27Ivoire" title="Côte d'Ivoire">Côte d'Ivoire</a></td>
<td>384</td>
 
<td>CIV</td>
<td id="CI">CI</td>
<td><a href="/wiki/ISO_3166-2:CI" title="ISO 3166-2:CI">ISO 3166-2:CI</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Croatia.svg" class="image" title="Flag of Croatia"></a>&nbsp;<a href="/wiki/Croatia" title="Croatia">Croatia</a></td>
<td>191</td>
<td>HRV</td>
<td id="HR">HR</td>
<td><a href="/wiki/ISO_3166-2:HR" title="ISO 3166-2:HR">ISO 3166-2:HR</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Cuba.svg" class="image" title="Flag of Cuba"></a>&nbsp;<a href="/wiki/Cuba" title="Cuba">Cuba</a></td>
<td>192</td>
<td>CUB</td>
<td id="CU">CU</td>
<td><a href="/wiki/ISO_3166-2:CU" title="ISO 3166-2:CU">ISO 3166-2:CU</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Cyprus.svg" class="image" title="Flag of Cyprus"></a>&nbsp;<a href="/wiki/Cyprus" title="Cyprus">Cyprus</a></td>
<td>196</td>
 
<td>CYP</td>
<td id="CY">CY</td>
<td><a href="/wiki/ISO_3166-2:CY" title="ISO 3166-2:CY">ISO 3166-2:CY</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_the_Czech_Republic.svg" class="image" title="Flag of the Czech Republic"></a>&nbsp;<a href="/wiki/Czech_Republic" title="Czech Republic">Czech Republic</a></td>
<td>203</td>
<td>CZE</td>
<td id="CZ">CZ</td>
<td><a href="/wiki/ISO_3166-2:CZ" title="ISO 3166-2:CZ">ISO 3166-2:CZ</a></td>
 
</tr>
<tr bgcolor="lightgray">
<td colspan="5"></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Denmark.svg" class="image" title="Flag of Denmark"></a>&nbsp;<a href="/wiki/Denmark" title="Denmark">Denmark</a></td>
<td>208</td>
<td>DNK</td>
<td id="DK">DK</td>
<td><a href="/wiki/ISO_3166-2:DK" title="ISO 3166-2:DK">ISO 3166-2:DK</a></td>
</tr>
<tr>
 
<td><a href="/wiki/Image:Flag_of_Djibouti.svg" class="image" title="Flag of Djibouti"></a>&nbsp;<a href="/wiki/Djibouti" title="Djibouti">Djibouti</a></td>
<td>262</td>
<td>DJI</td>
<td id="DJ">DJ</td>
<td><a href="/wiki/ISO_3166-2:DJ" title="ISO 3166-2:DJ">ISO 3166-2:DJ</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Dominica.svg" class="image" title="Flag of Dominica"></a>&nbsp;<a href="/wiki/Dominica" title="Dominica">Dominica</a></td>
<td>212</td>
<td>DMA</td>
 
<td id="DM">DM</td>
<td><a href="/wiki/ISO_3166-2:DM" title="ISO 3166-2:DM">ISO 3166-2:DM</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_the_Dominican_Republic.svg" class="image" title="Flag of the Dominican Republic"></a>&nbsp;<a href="/wiki/Dominican_Republic" title="Dominican Republic">Dominican Republic</a></td>
<td>214</td>
<td>DOM</td>
<td id="DO">DO</td>
<td><a href="/wiki/ISO_3166-2:DO" title="ISO 3166-2:DO">ISO 3166-2:DO</a></td>
</tr>
 
<tr bgcolor="lightgray">
<td colspan="5"></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Ecuador.svg" class="image" title="Flag of Ecuador"></a>&nbsp;<a href="/wiki/Ecuador" title="Ecuador">Ecuador</a></td>
<td>218</td>
<td>ECU</td>
<td id="EC">EC</td>
<td><a href="/wiki/ISO_3166-2:EC" title="ISO 3166-2:EC">ISO 3166-2:EC</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Egypt.svg" class="image" title="Flag of Egypt"></a>&nbsp;<a href="/wiki/Egypt" title="Egypt">Egypt</a></td>
 
<td>818</td>
<td>EGY</td>
<td id="EG">EG</td>
<td><a href="/w/index.php?title=ISO_3166-2:EG&amp;action=edit" class="new" title="ISO 3166-2:EG">ISO 3166-2:EG</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_El_Salvador.svg" class="image" title="Flag of El Salvador"></a>&nbsp;<a href="/wiki/El_Salvador" title="El Salvador">El Salvador</a></td>
<td>222</td>
<td>SLV</td>
<td id="SV">SV</td>
 
<td><a href="/wiki/ISO_3166-2:SV" title="ISO 3166-2:SV">ISO 3166-2:SV</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Equatorial_Guinea.svg" class="image" title="Flag of Equatorial Guinea"></a>&nbsp;<a href="/wiki/Equatorial_Guinea" title="Equatorial Guinea">Equatorial Guinea</a></td>
<td>226</td>
<td>GNQ</td>
<td id="GQ">GQ</td>
<td><a href="/wiki/ISO_3166-2:GQ" title="ISO 3166-2:GQ">ISO 3166-2:GQ</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Eritrea.svg" class="image" title="Flag of Eritrea"></a>&nbsp;<a href="/wiki/Eritrea" title="Eritrea">Eritrea</a></td>
 
<td>232</td>
<td>ERI</td>
<td id="ER">ER</td>
<td><a href="/wiki/ISO_3166-2:ER" title="ISO 3166-2:ER">ISO 3166-2:ER</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Estonia.svg" class="image" title="Flag of Estonia"></a>&nbsp;<a href="/wiki/Estonia" title="Estonia">Estonia</a></td>
<td>233</td>
<td>EST</td>
<td id="EE">EE</td>
 
<td><a href="/wiki/ISO_3166-2:EE" title="ISO 3166-2:EE">ISO 3166-2:EE</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Ethiopia.svg" class="image" title="Flag of Ethiopia"></a>&nbsp;<a href="/wiki/Ethiopia" title="Ethiopia">Ethiopia</a></td>
<td>231</td>
<td>ETH</td>
<td id="ET">ET</td>
<td><a href="/wiki/ISO_3166-2:ET" title="ISO 3166-2:ET">ISO 3166-2:ET</a></td>
</tr>
<tr bgcolor="lightgray">
<td colspan="5"></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_the_Falkland_Islands.svg" class="image" title="Flag of the Falkland Islands"></a>&nbsp;<a href="/wiki/Falkland_Islands" title="Falkland Islands">Falkland Islands (Malvinas)</a></td>
<td>238</td>
<td>FLK</td>
<td id="FK">FK</td>
<td><a href="/w/index.php?title=ISO_3166-2:FK&amp;action=edit" class="new" title="ISO 3166-2:FK">ISO 3166-2:FK</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_the_Faroe_Islands.svg" class="image" title="Flag of the Faroe Islands"></a>&nbsp;<a href="/wiki/Faroe_Islands" title="Faroe Islands">Faroe Islands</a></td>
<td>234</td>
 
<td>FRO</td>
<td id="FO">FO</td>
<td><a href="/w/index.php?title=ISO_3166-2:FO&amp;action=edit" class="new" title="ISO 3166-2:FO">ISO 3166-2:FO</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Fiji.svg" class="image" title="Flag of Fiji"></a>&nbsp;<a href="/wiki/Fiji" title="Fiji">Fiji</a></td>
<td>242</td>
<td>FJI</td>
<td id="FJ">FJ</td>
<td><a href="/w/index.php?title=ISO_3166-2:FJ&amp;action=edit" class="new" title="ISO 3166-2:FJ">ISO 3166-2:FJ</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Finland.svg" class="image" title="Flag of Finland"></a>&nbsp;<a href="/wiki/Finland" title="Finland">Finland</a></td>
<td>246</td>
<td>FIN</td>
<td id="FI">FI</td>
<td><a href="/wiki/ISO_3166-2:FI" title="ISO 3166-2:FI">ISO 3166-2:FI</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_France.svg" class="image" title="Flag of France"></a>&nbsp;<a href="/wiki/France" title="France">France</a></td>
<td>250</td>
 
<td>FRA</td>
<td id="FR">FR</td>
<td><a href="/wiki/ISO_3166-2:FR" title="ISO 3166-2:FR">ISO 3166-2:FR</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_France.svg" class="image" title="Flag of French Guiana"></a>&nbsp;<a href="/wiki/French_Guiana" title="French Guiana">French Guiana</a></td>
<td>254</td>
<td>GUF</td>
<td id="GF">GF</td>
<td><a href="/w/index.php?title=ISO_3166-2:GF&amp;action=edit" class="new" title="ISO 3166-2:GF">ISO 3166-2:GF</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_French_Polynesia.svg" class="image" title="Flag of French Polynesia"></a>&nbsp;<a href="/wiki/French_Polynesia" title="French Polynesia">French Polynesia</a></td>
<td>258</td>
<td>PYF</td>
<td id="PF">PF</td>
<td><a href="/w/index.php?title=ISO_3166-2:PF&amp;action=edit" class="new" title="ISO 3166-2:PF">ISO 3166-2:PF</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_France.svg" class="image" title="Flag of the French Southern and Antarctic Lands"></a>&nbsp;<a href="/wiki/French_Southern_and_Antarctic_Lands" title="French Southern and Antarctic Lands">French Southern Territories</a></td>
<td>260</td>
 
<td>ATF</td>
<td id="TF">TF</td>
<td><a href="/w/index.php?title=ISO_3166-2:TF&amp;action=edit" class="new" title="ISO 3166-2:TF">ISO 3166-2:TF</a></td>
</tr>
<tr bgcolor="lightgray">
<td colspan="5"></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Gabon.svg" class="image" title="Flag of Gabon"></a>&nbsp;<a href="/wiki/Gabon" title="Gabon">Gabon</a></td>
<td>266</td>
<td>GAB</td>
 
<td id="GA">GA</td>
<td><a href="/w/index.php?title=ISO_3166-2:GA&amp;action=edit" class="new" title="ISO 3166-2:GA">ISO 3166-2:GA</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_The_Gambia.svg" class="image" title="Flag of The Gambia"></a>&nbsp;<a href="/wiki/The_Gambia" title="The Gambia">Gambia</a></td>
<td>270</td>
<td>GMB</td>
<td id="GM">GM</td>
<td><a href="/w/index.php?title=ISO_3166-2:GM&amp;action=edit" class="new" title="ISO 3166-2:GM">ISO 3166-2:GM</a></td>
</tr>
 
<tr>
<td><a href="/wiki/Image:Flag_of_Georgia.svg" class="image" title="Flag of Georgia (country)"></a>&nbsp;<a href="/wiki/Georgia_%28country%29" title="Georgia (country)">Georgia</a></td>
<td>268</td>
<td>GEO</td>
<td id="GE">GE</td>
<td><a href="/wiki/ISO_3166-2:GE" title="ISO 3166-2:GE">ISO 3166-2:GE</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Germany.svg" class="image" title="Flag of Germany"></a>&nbsp;<a href="/wiki/Germany" title="Germany">Germany</a></td>
<td>276</td>
 
<td>DEU</td>
<td id="DE">DE</td>
<td><a href="/wiki/ISO_3166-2:DE" title="ISO 3166-2:DE">ISO 3166-2:DE</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Ghana.svg" class="image" title="Flag of Ghana"></a>&nbsp;<a href="/wiki/Ghana" title="Ghana">Ghana</a></td>
<td>288</td>
<td>GHA</td>
<td id="GH">GH</td>
<td><a href="/wiki/ISO_3166-2:GH" title="ISO 3166-2:GH">ISO 3166-2:GH</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Gibraltar.svg" class="image" title="Flag of Gibraltar"></a>&nbsp;<a href="/wiki/Gibraltar" title="Gibraltar">Gibraltar</a></td>
<td>292</td>
<td>GIB</td>
<td id="GI">GI</td>
<td><a href="/w/index.php?title=ISO_3166-2:GI&amp;action=edit" class="new" title="ISO 3166-2:GI">ISO 3166-2:GI</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Greece.svg" class="image" title="Flag of Greece"></a>&nbsp;<a href="/wiki/Greece" title="Greece">Greece</a></td>
<td>300</td>
 
<td>GRC</td>
<td id="GR">GR</td>
<td><a href="/wiki/ISO_3166-2:GR" title="ISO 3166-2:GR">ISO 3166-2:GR</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Greenland.svg" class="image" title="Flag of Greenland"></a>&nbsp;<a href="/wiki/Greenland" title="Greenland">Greenland</a></td>
<td>304</td>
<td>GRL</td>
<td id="GL">GL</td>
<td><a href="/w/index.php?title=ISO_3166-2:GL&amp;action=edit" class="new" title="ISO 3166-2:GL">ISO 3166-2:GL</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Grenada.svg" class="image" title="Flag of Grenada"></a>&nbsp;<a href="/wiki/Grenada" title="Grenada">Grenada</a></td>
<td>308</td>
<td>GRD</td>
<td id="GD">GD</td>
<td><a href="/wiki/ISO_3166-2:GD" title="ISO 3166-2:GD">ISO 3166-2:GD</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_France.svg" class="image" title="Flag of Guadeloupe"></a>&nbsp;<a href="/wiki/Guadeloupe" title="Guadeloupe">Guadeloupe</a><span class="reference plainlinksneverexpand" id="ref_COM"><sup><a href="http://en.wikipedia.org/wiki/ISO_3166-1#endnote_COM" class="external autonumber" title="http://en.wikipedia.org/wiki/ISO_3166-1#endnote_COM" rel="nofollow">[2]</a></sup></span></td>
 
<td>312</td>
<td>GLP</td>
<td id="GP">GP</td>
<td><a href="/w/index.php?title=ISO_3166-2:GP&amp;action=edit" class="new" title="ISO 3166-2:GP">ISO 3166-2:GP</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Guam.svg" class="image" title="Flag of Guam"></a>&nbsp;<a href="/wiki/Guam" title="Guam">Guam</a></td>
<td>316</td>
<td>GUM</td>
<td id="GU">GU</td>
 
<td><a href="/w/index.php?title=ISO_3166-2:GU&amp;action=edit" class="new" title="ISO 3166-2:GU">ISO 3166-2:GU</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Guatemala.svg" class="image" title="Flag of Guatemala"></a>&nbsp;<a href="/wiki/Guatemala" title="Guatemala">Guatemala</a></td>
<td>320</td>
<td>GTM</td>
<td id="GT">GT</td>
<td><a href="/wiki/ISO_3166-2:GT" title="ISO 3166-2:GT">ISO 3166-2:GT</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Guernsey.svg" class="image" title="Flag of Guernsey"></a>&nbsp;<a href="/wiki/Guernsey" title="Guernsey">Guernsey</a></td>
 
<td>831</td>
<td>GGY</td>
<td id="GG">GG</td>
<td><a href="/wiki/ISO_3166-2:GG" title="ISO 3166-2:GG">ISO 3166-2:GG</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Guinea.svg" class="image" title="Flag of Guinea"></a>&nbsp;<a href="/wiki/Guinea" title="Guinea">Guinea</a></td>
<td>324</td>
<td>GIN</td>
<td id="GN">GN</td>
 
<td><a href="/wiki/ISO_3166-2:GN" title="ISO 3166-2:GN">ISO 3166-2:GN</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Guinea-Bissau.svg" class="image" title="Flag of Guinea-Bissau"></a>&nbsp;<a href="/wiki/Guinea-Bissau" title="Guinea-Bissau">Guinea-Bissau</a></td>
<td>624</td>
<td>GNB</td>
<td id="GW">GW</td>
<td><a href="/w/index.php?title=ISO_3166-2:GW&amp;action=edit" class="new" title="ISO 3166-2:GW">ISO 3166-2:GW</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Guyana.svg" class="image" title="Flag of Guyana"></a>&nbsp;<a href="/wiki/Guyana" title="Guyana">Guyana</a></td>
 
<td>328</td>
<td>GUY</td>
<td id="GY">GY</td>
<td><a href="/w/index.php?title=ISO_3166-2:GY&amp;action=edit" class="new" title="ISO 3166-2:GY">ISO 3166-2:GY</a></td>
</tr>
<tr bgcolor="lightgray">
<td colspan="5"></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Haiti.svg" class="image" title="Flag of Haiti"></a>&nbsp;<a href="/wiki/Haiti" title="Haiti">Haiti</a></td>
<td>332</td>
 
<td>HTI</td>
<td id="HT">HT</td>
<td><a href="/w/index.php?title=ISO_3166-2:HT&amp;action=edit" class="new" title="ISO 3166-2:HT">ISO 3166-2:HT</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Australia.svg" class="image" title="Flag of Heard Island and McDonald Islands"></a>&nbsp;<a href="/wiki/Heard_Island_and_McDonald_Islands" title="Heard Island and McDonald Islands">Heard Island and McDonald Islands</a></td>
<td>334</td>
<td>HMD</td>
<td id="HM">HM</td>
<td><a href="/w/index.php?title=ISO_3166-2:HM&amp;action=edit" class="new" title="ISO 3166-2:HM">ISO 3166-2:HM</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_the_Vatican_City.svg" class="image" title="Flag of the Vatican City"></a>&nbsp;<a href="/wiki/Vatican_City" title="Vatican City">Holy See (Vatican City State)</a></td>
<td>336</td>
<td>VAT</td>
<td id="VA">VA</td>
<td><a href="/w/index.php?title=ISO_3166-2:VA&amp;action=edit" class="new" title="ISO 3166-2:VA">ISO 3166-2:VA</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Honduras.svg" class="image" title="Flag of Honduras"></a>&nbsp;<a href="/wiki/Honduras" title="Honduras">Honduras</a></td>
<td>340</td>
 
<td>HND</td>
<td id="HN">HN</td>
<td><a href="/wiki/ISO_3166-2:HN" title="ISO 3166-2:HN">ISO 3166-2:HN</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Hong_Kong.svg" class="image" title="Flag of Hong Kong"></a>&nbsp;<a href="/wiki/Hong_Kong" title="Hong Kong">Hong Kong</a></td>
<td>344</td>
<td>HKG</td>
<td id="HK">HK</td>
<td><a href="/wiki/ISO_3166-2:HK" title="ISO 3166-2:HK">ISO 3166-2:HK</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Hungary.svg" class="image" title="Flag of Hungary"></a>&nbsp;<a href="/wiki/Hungary" title="Hungary">Hungary</a></td>
<td>348</td>
<td>HUN</td>
<td id="HU">HU</td>
<td><a href="/wiki/ISO_3166-2:HU" title="ISO 3166-2:HU">ISO 3166-2:HU</a></td>
</tr>
<tr bgcolor="lightgray">
<td colspan="5"></td>
</tr>
<tr>
 
<td><a href="/wiki/Image:Flag_of_Iceland.svg" class="image" title="Flag of Iceland"></a>&nbsp;<a href="/wiki/Iceland" title="Iceland">Iceland</a></td>
<td>352</td>
<td>ISL</td>
<td id="IS">IS</td>
<td><a href="/wiki/ISO_3166-2:IS" title="ISO 3166-2:IS">ISO 3166-2:IS</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_India.svg" class="image" title="Flag of India"></a>&nbsp;<a href="/wiki/India" title="India">India</a></td>
<td>356</td>
<td>IND</td>
 
<td id="IN">IN</td>
<td><a href="/wiki/ISO_3166-2:IN" title="ISO 3166-2:IN">ISO 3166-2:IN</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Indonesia.svg" class="image" title="Flag of Indonesia"></a>&nbsp;<a href="/wiki/Indonesia" title="Indonesia">Indonesia</a></td>
<td>360</td>
<td>IDN</td>
<td id="ID">ID</td>
<td><a href="/wiki/ISO_3166-2:ID" title="ISO 3166-2:ID">ISO 3166-2:ID</a></td>
</tr>
 
<tr>
<td><a href="/wiki/Image:Flag_of_Iran.svg" class="image" title="Flag of Iran"></a>&nbsp;<a href="/wiki/Iran" title="Iran">Iran, Islamic Republic of</a></td>
<td>364</td>
<td>IRN</td>
<td id="IR">IR</td>
<td><a href="/wiki/ISO_3166-2:IR" title="ISO 3166-2:IR">ISO 3166-2:IR</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Iraq.svg" class="image" title="Flag of Iraq"></a>&nbsp;<a href="/wiki/Iraq" title="Iraq">Iraq</a></td>
<td>368</td>
 
<td>IRQ</td>
<td id="IQ">IQ</td>
<td><a href="/w/index.php?title=ISO_3166-2:IQ&amp;action=edit" class="new" title="ISO 3166-2:IQ">ISO 3166-2:IQ</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Ireland.svg" class="image" title="Flag of Ireland"></a>&nbsp;<a href="/wiki/Republic_of_Ireland" title="Republic of Ireland">Ireland</a></td>
<td>372</td>
<td>IRL</td>
<td id="IE">IE</td>
<td><a href="/wiki/ISO_3166-2:IE" title="ISO 3166-2:IE">ISO 3166-2:IE</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_the_Isle_of_Man.svg" class="image" title="Flag of the Isle of Man"></a>&nbsp;<a href="/wiki/Isle_of_Man" title="Isle of Man">Isle of Man</a></td>
<td>833</td>
<td>IMN</td>
<td id="IM">IM</td>
<td><a href="/wiki/ISO_3166-2:IM" title="ISO 3166-2:IM">ISO 3166-2:IM</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Israel.svg" class="image" title="Flag of Israel"></a>&nbsp;<a href="/wiki/Israel" title="Israel">Israel</a></td>
<td>376</td>
 
<td>ISR</td>
<td id="IL">IL</td>
<td><a href="/wiki/ISO_3166-2:IL" title="ISO 3166-2:IL">ISO 3166-2:IL</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Italy.svg" class="image" title="Flag of Italy"></a>&nbsp;<a href="/wiki/Italy" title="Italy">Italy</a></td>
<td>380</td>
<td>ITA</td>
<td id="IT">IT</td>
<td><a href="/wiki/ISO_3166-2:IT" title="ISO 3166-2:IT">ISO 3166-2:IT</a></td>
 
</tr>
<tr bgcolor="lightgray">
<td colspan="5"></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Jamaica.svg" class="image" title="Flag of Jamaica"></a>&nbsp;<a href="/wiki/Jamaica" title="Jamaica">Jamaica</a></td>
<td>388</td>
<td>JAM</td>
<td id="JM">JM</td>
<td><a href="/wiki/ISO_3166-2:JM" title="ISO 3166-2:JM">ISO 3166-2:JM</a></td>
</tr>
<tr>
 
<td><a href="/wiki/Image:Flag_of_Japan.svg" class="image" title="Flag of Japan"></a>&nbsp;<a href="/wiki/Japan" title="Japan">Japan</a></td>
<td>392</td>
<td>JPN</td>
<td id="JP">JP</td>
<td><a href="/wiki/ISO_3166-2:JP" title="ISO 3166-2:JP">ISO 3166-2:JP</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Jersey.svg" class="image" title="Flag of Jersey"></a>&nbsp;<a href="/wiki/Jersey" title="Jersey">Jersey</a></td>
<td>832</td>
<td>JEY</td>
 
<td id="JE">JE</td>
<td><a href="/wiki/ISO_3166-2:JE" title="ISO 3166-2:JE">ISO 3166-2:JE</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Jordan.svg" class="image" title="Flag of Jordan"></a>&nbsp;<a href="/wiki/Jordan" title="Jordan">Jordan</a></td>
<td>400</td>
<td>JOR</td>
<td id="JO">JO</td>
<td><a href="/w/index.php?title=ISO_3166-2:JO&amp;action=edit" class="new" title="ISO 3166-2:JO">ISO 3166-2:JO</a></td>
</tr>
 
<tr bgcolor="lightgray">
<td colspan="5"></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Kazakhstan.svg" class="image" title="Flag of Kazakhstan"></a>&nbsp;<a href="/wiki/Kazakhstan" title="Kazakhstan">Kazakhstan</a></td>
<td>398</td>
<td>KAZ</td>
<td id="KZ">KZ</td>
<td><a href="/wiki/ISO_3166-2:KZ" title="ISO 3166-2:KZ">ISO 3166-2:KZ</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Kenya.svg" class="image" title="Flag of Kenya"></a>&nbsp;<a href="/wiki/Kenya" title="Kenya">Kenya</a></td>
 
<td>404</td>
<td>KEN</td>
<td id="KE">KE</td>
<td><a href="/w/index.php?title=ISO_3166-2:KE&amp;action=edit" class="new" title="ISO 3166-2:KE">ISO 3166-2:KE</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Kiribati.svg" class="image" title="Flag of Kiribati"></a>&nbsp;<a href="/wiki/Kiribati" title="Kiribati">Kiribati</a></td>
<td>296</td>
<td>KIR</td>
<td id="KI">KI</td>
 
<td><a href="/wiki/ISO_3166-2:KI" title="ISO 3166-2:KI">ISO 3166-2:KI</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_North_Korea.svg" class="image" title="Flag of North Korea"></a>&nbsp;<a href="/wiki/North_Korea" title="North Korea">Korea, Democratic People's Republic of</a></td>
<td>408</td>
<td>PRK</td>
<td id="KP">KP</td>
<td><a href="/wiki/ISO_3166-2:KP" title="ISO 3166-2:KP">ISO 3166-2:KP</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_South_Korea.svg" class="image" title="Flag of South Korea"></a>&nbsp;<a href="/wiki/South_Korea" title="South Korea">Korea, Republic of</a></td>
 
<td>410</td>
<td>KOR</td>
<td id="KR">KR</td>
<td><a href="/wiki/ISO_3166-2:KR" title="ISO 3166-2:KR">ISO 3166-2:KR</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Kuwait.svg" class="image" title="Flag of Kuwait"></a>&nbsp;<a href="/wiki/Kuwait" title="Kuwait">Kuwait</a></td>
<td>414</td>
<td>KWT</td>
<td id="KW">KW</td>
 
<td><a href="/wiki/ISO_3166-2:KW" title="ISO 3166-2:KW">ISO 3166-2:KW</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Kyrgyzstan.svg" class="image" title="Flag of Kyrgyzstan"></a>&nbsp;<a href="/wiki/Kyrgyzstan" title="Kyrgyzstan">Kyrgyzstan</a></td>
<td>417</td>
<td>KGZ</td>
<td id="KG">KG</td>
<td><a href="/wiki/ISO_3166-2:KG" title="ISO 3166-2:KG">ISO 3166-2:KG</a></td>
</tr>
<tr bgcolor="lightgray">
<td colspan="5"></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Laos.svg" class="image" title="Flag of Laos"></a>&nbsp;<a href="/wiki/Laos" title="Laos">Lao People's Democratic Republic</a></td>
<td>418</td>
<td>LAO</td>
<td id="LA">LA</td>
<td><a href="/wiki/ISO_3166-2:LA" title="ISO 3166-2:LA">ISO 3166-2:LA</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Latvia.svg" class="image" title="Flag of Latvia"></a>&nbsp;<a href="/wiki/Latvia" title="Latvia">Latvia</a></td>
<td>428</td>
 
<td>LVA</td>
<td id="LV">LV</td>
<td><a href="/w/index.php?title=ISO_3166-2:LV&amp;action=edit" class="new" title="ISO 3166-2:LV">ISO 3166-2:LV</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Lebanon.svg" class="image" title="Flag of Lebanon"></a>&nbsp;<a href="/wiki/Lebanon" title="Lebanon">Lebanon</a></td>
<td>422</td>
<td>LBN</td>
<td id="LB">LB</td>
<td><a href="/wiki/ISO_3166-2:LB" title="ISO 3166-2:LB">ISO 3166-2:LB</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Lesotho.svg" class="image" title="Flag of Lesotho"></a>&nbsp;<a href="/wiki/Lesotho" title="Lesotho">Lesotho</a></td>
<td>426</td>
<td>LSO</td>
<td id="LS">LS</td>
<td><a href="/w/index.php?title=ISO_3166-2:LS&amp;action=edit" class="new" title="ISO 3166-2:LS">ISO 3166-2:LS</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Liberia.svg" class="image" title="Flag of Liberia"></a>&nbsp;<a href="/wiki/Liberia" title="Liberia">Liberia</a></td>
<td>430</td>
 
<td>LBR</td>
<td id="LR">LR</td>
<td><a href="/wiki/ISO_3166-2:LR" title="ISO 3166-2:LR">ISO 3166-2:LR</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Libya.svg" class="image" title="Flag of Libya"></a>&nbsp;<a href="/wiki/Libya" title="Libya">Libyan Arab Jamahiriya</a></td>
<td>434</td>
<td>LBY</td>
<td id="LY">LY</td>
<td><a href="/wiki/ISO_3166-2:LY" title="ISO 3166-2:LY">ISO 3166-2:LY</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Liechtenstein.svg" class="image" title="Flag of Liechtenstein"></a>&nbsp;<a href="/wiki/Liechtenstein" title="Liechtenstein">Liechtenstein</a></td>
<td>438</td>
<td>LIE</td>
<td id="LI">LI</td>
<td><a href="/wiki/ISO_3166-2:LI" title="ISO 3166-2:LI">ISO 3166-2:LI</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Lithuania.svg" class="image" title="Flag of Lithuania"></a>&nbsp;<a href="/wiki/Lithuania" title="Lithuania">Lithuania</a></td>
<td>440</td>
 
<td>LTU</td>
<td id="LT">LT</td>
<td><a href="/w/index.php?title=ISO_3166-2:LT&amp;action=edit" class="new" title="ISO 3166-2:LT">ISO 3166-2:LT</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Luxembourg.svg" class="image" title="Flag of Luxembourg"></a>&nbsp;<a href="/wiki/Luxembourg" title="Luxembourg">Luxembourg</a></td>
<td>442</td>
<td>LUX</td>
<td id="LU">LU</td>
<td><a href="/wiki/ISO_3166-2:LU" title="ISO 3166-2:LU">ISO 3166-2:LU</a></td>
 
</tr>
<tr bgcolor="lightgray">
<td colspan="5"></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Macau.svg" class="image" title="Flag of Macau"></a>&nbsp;<a href="/wiki/Macau" title="Macau">Macao</a></td>
<td>446</td>
<td>MAC</td>
<td id="MO">MO</td>
<td><a href="/wiki/ISO_3166-2:MO" title="ISO 3166-2:MO">ISO 3166-2:MO</a></td>
</tr>
<tr>
 
<td><a href="/wiki/Image:Flag_of_Macedonia.svg" class="image" title="Flag of the Republic of Macedonia"></a>&nbsp;<a href="/wiki/Republic_of_Macedonia" title="Republic of Macedonia">Macedonia, the former Yugoslav Republic of</a></td>
<td>807</td>
<td>MKD</td>
<td id="MK">MK</td>
<td><a href="/wiki/ISO_3166-2:MK" title="ISO 3166-2:MK">ISO 3166-2:MK</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Madagascar.svg" class="image" title="Flag of Madagascar"></a>&nbsp;<a href="/wiki/Madagascar" title="Madagascar">Madagascar</a></td>
<td>450</td>
<td>MDG</td>
 
<td id="MG">MG</td>
<td><a href="/w/index.php?title=ISO_3166-2:MG&amp;action=edit" class="new" title="ISO 3166-2:MG">ISO 3166-2:MG</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Malawi.svg" class="image" title="Flag of Malawi"></a>&nbsp;<a href="/wiki/Malawi" title="Malawi">Malawi</a></td>
<td>454</td>
<td>MWI</td>
<td id="MW">MW</td>
<td><a href="/wiki/ISO_3166-2:MW" title="ISO 3166-2:MW">ISO 3166-2:MW</a></td>
</tr>
 
<tr>
<td><a href="/wiki/Image:Flag_of_Malaysia.svg" class="image" title="Flag of Malaysia"></a>&nbsp;<a href="/wiki/Malaysia" title="Malaysia">Malaysia</a></td>
<td>458</td>
<td>MYS</td>
<td id="MY">MY</td>
<td><a href="/wiki/ISO_3166-2:MY" title="ISO 3166-2:MY">ISO 3166-2:MY</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Maldives.svg" class="image" title="Flag of the Maldives"></a>&nbsp;<a href="/wiki/Maldives" title="Maldives">Maldives</a></td>
<td>462</td>
 
<td>MDV</td>
<td id="MV">MV</td>
<td><a href="/wiki/ISO_3166-2:MV" title="ISO 3166-2:MV">ISO 3166-2:MV</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Mali.svg" class="image" title="Flag of Mali"></a>&nbsp;<a href="/wiki/Mali" title="Mali">Mali</a></td>
<td>466</td>
<td>MLI</td>
<td id="ML">ML</td>
<td><a href="/w/index.php?title=ISO_3166-2:ML&amp;action=edit" class="new" title="ISO 3166-2:ML">ISO 3166-2:ML</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Malta.svg" class="image" title="Flag of Malta"></a>&nbsp;<a href="/wiki/Malta" title="Malta">Malta</a></td>
<td>470</td>
<td>MLT</td>
<td id="MT">MT</td>
<td><a href="/w/index.php?title=ISO_3166-2:MT&amp;action=edit" class="new" title="ISO 3166-2:MT">ISO 3166-2:MT</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_the_Marshall_Islands.svg" class="image" title="Flag of the Marshall Islands"></a>&nbsp;<a href="/wiki/Marshall_Islands" title="Marshall Islands">Marshall Islands</a></td>
<td>584</td>
 
<td>MHL</td>
<td id="MH">MH</td>
<td><a href="/w/index.php?title=ISO_3166-2:MH&amp;action=edit" class="new" title="ISO 3166-2:MH">ISO 3166-2:MH</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_France.svg" class="image" title="Flag of Martinique"></a>&nbsp;<a href="/wiki/Martinique" title="Martinique">Martinique</a></td>
<td>474</td>
<td>MTQ</td>
<td id="MQ">MQ</td>
<td><a href="/w/index.php?title=ISO_3166-2:MQ&amp;action=edit" class="new" title="ISO 3166-2:MQ">ISO 3166-2:MQ</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Mauritania.svg" class="image" title="Flag of Mauritania"></a>&nbsp;<a href="/wiki/Mauritania" title="Mauritania">Mauritania</a></td>
<td>478</td>
<td>MRT</td>
<td id="MR">MR</td>
<td><a href="/w/index.php?title=ISO_3166-2:MR&amp;action=edit" class="new" title="ISO 3166-2:MR">ISO 3166-2:MR</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Mauritius.svg" class="image" title="Flag of Mauritius"></a>&nbsp;<a href="/wiki/Mauritius" title="Mauritius">Mauritius</a></td>
<td>480</td>
 
<td>MUS</td>
<td id="MU">MU</td>
<td><a href="/wiki/ISO_3166-2:MU" title="ISO 3166-2:MU">ISO 3166-2:MU</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_France.svg" class="image" title="Flag of Mayotte"></a>&nbsp;<a href="/wiki/Mayotte" title="Mayotte">Mayotte</a></td>
<td>175</td>
<td>MYT</td>
<td id="YT">YT</td>
<td><a href="/w/index.php?title=ISO_3166-2:YT&amp;action=edit" class="new" title="ISO 3166-2:YT">ISO 3166-2:YT</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Mexico.svg" class="image" title="Flag of Mexico"></a>&nbsp;<a href="/wiki/Mexico" title="Mexico">Mexico</a></td>
<td>484</td>
<td>MEX</td>
<td id="MX">MX</td>
<td><a href="/wiki/ISO_3166-2:MX" title="ISO 3166-2:MX">ISO 3166-2:MX</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Micronesia.svg" class="image" title="Flag of the Federated States of Micronesia"></a>&nbsp;<a href="/wiki/Federated_States_of_Micronesia" title="Federated States of Micronesia">Micronesia, Federated States of</a></td>
<td>583</td>
 
<td>FSM</td>
<td id="FM">FM</td>
<td><a href="/w/index.php?title=ISO_3166-2:FM&amp;action=edit" class="new" title="ISO 3166-2:FM">ISO 3166-2:FM</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Moldova.svg" class="image" title="Flag of Moldova"></a>&nbsp;<a href="/wiki/Moldova" title="Moldova">Moldova, Republic of</a></td>
<td>498</td>
<td>MDA</td>
<td id="MD">MD</td>
<td><a href="/wiki/ISO_3166-2:MD" title="ISO 3166-2:MD">ISO 3166-2:MD</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Monaco.svg" class="image" title="Flag of Monaco"></a>&nbsp;<a href="/wiki/Monaco" title="Monaco">Monaco</a></td>
<td>492</td>
<td>MCO</td>
<td id="MC">MC</td>
<td><a href="/w/index.php?title=ISO_3166-2:MC&amp;action=edit" class="new" title="ISO 3166-2:MC">ISO 3166-2:MC</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Mongolia.svg" class="image" title="Flag of Mongolia"></a>&nbsp;<a href="/wiki/Mongolia" title="Mongolia">Mongolia</a></td>
<td>496</td>
 
<td>MNG</td>
<td id="MN">MN</td>
<td><a href="/wiki/ISO_3166-2:MN" title="ISO 3166-2:MN">ISO 3166-2:MN</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Montenegro.svg" class="image" title="Flag of Montenegro"></a>&nbsp;<a href="/wiki/Montenegro" title="Montenegro">Montenegro</a></td>
<td>499</td>
<td>MNE</td>
<td id="ME">ME</td>
<td><a href="/wiki/ISO_3166-2:ME" title="ISO 3166-2:ME">ISO 3166-2:ME</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Montserrat.svg" class="image" title="Flag of Montserrat"></a>&nbsp;<a href="/wiki/Montserrat" title="Montserrat">Montserrat</a></td>
<td>500</td>
<td>MSR</td>
<td id="MS">MS</td>
<td><a href="/w/index.php?title=ISO_3166-2:MS&amp;action=edit" class="new" title="ISO 3166-2:MS">ISO 3166-2:MS</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Morocco.svg" class="image" title="Flag of Morocco"></a>&nbsp;<a href="/wiki/Morocco" title="Morocco">Morocco</a></td>
<td>504</td>
 
<td>MAR</td>
<td id="MA">MA</td>
<td><a href="/wiki/ISO_3166-2:MA" title="ISO 3166-2:MA">ISO 3166-2:MA</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Mozambique.svg" class="image" title="Flag of Mozambique"></a>&nbsp;<a href="/wiki/Mozambique" title="Mozambique">Mozambique</a></td>
<td>508</td>
<td>MOZ</td>
<td id="MZ">MZ</td>
<td><a href="/w/index.php?title=ISO_3166-2:MZ&amp;action=edit" class="new" title="ISO 3166-2:MZ">ISO 3166-2:MZ</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Myanmar.svg" class="image" title="Flag of Myanmar"></a>&nbsp;<a href="/wiki/Myanmar" title="Myanmar">Myanmar</a></td>
<td>104</td>
<td>MMR</td>
<td id="MM">MM</td>
<td><a href="/w/index.php?title=ISO_3166-2:MM&amp;action=edit" class="new" title="ISO 3166-2:MM">ISO 3166-2:MM</a></td>
</tr>
<tr bgcolor="lightgray">
<td colspan="5"></td>
</tr>
<tr>
 
<td><a href="/wiki/Image:Flag_of_Namibia.svg" class="image" title="Flag of Namibia"></a>&nbsp;<a href="/wiki/Namibia" title="Namibia">Namibia</a></td>
<td>516</td>
<td>NAM</td>
<td id="NA">NA</td>
<td><a href="/w/index.php?title=ISO_3166-2:NA&amp;action=edit" class="new" title="ISO 3166-2:NA">ISO 3166-2:NA</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Nauru.svg" class="image" title="Flag of Nauru"></a>&nbsp;<a href="/wiki/Nauru" title="Nauru">Nauru</a></td>
<td>520</td>
<td>NRU</td>
 
<td id="NR">NR</td>
<td><a href="/wiki/ISO_3166-2:NR" title="ISO 3166-2:NR">ISO 3166-2:NR</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Nepal.svg" class="image" title="Flag of Nepal"></a>&nbsp;<a href="/wiki/Nepal" title="Nepal">Nepal</a></td>
<td>524</td>
<td>NPL</td>
<td id="NP">NP</td>
<td><a href="/w/index.php?title=ISO_3166-2:NP&amp;action=edit" class="new" title="ISO 3166-2:NP">ISO 3166-2:NP</a></td>
</tr>
 
<tr>
<td><a href="/wiki/Image:Flag_of_the_Netherlands.svg" class="image" title="Flag of the Netherlands"></a>&nbsp;<a href="/wiki/Netherlands" title="Netherlands">Netherlands</a></td>
<td>528</td>
<td>NLD</td>
<td id="NL">NL</td>
<td><a href="/wiki/ISO_3166-2:NL" title="ISO 3166-2:NL">ISO 3166-2:NL</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_the_Netherlands_Antilles.svg" class="image" title="Flag of the Netherlands Antilles"></a>&nbsp;<a href="/wiki/Netherlands_Antilles" title="Netherlands Antilles">Netherlands Antilles</a></td>
<td>530</td>
 
<td>ANT</td>
<td id="AN">AN</td>
<td><a href="/w/index.php?title=ISO_3166-2:AN&amp;action=edit" class="new" title="ISO 3166-2:AN">ISO 3166-2:AN</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_France.svg" class="image" title="Flag of New Caledonia"></a>&nbsp;<a href="/wiki/New_Caledonia" title="New Caledonia">New Caledonia</a></td>
<td>540</td>
<td>NCL</td>
<td id="NC">NC</td>
<td><a href="/w/index.php?title=ISO_3166-2:NC&amp;action=edit" class="new" title="ISO 3166-2:NC">ISO 3166-2:NC</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_New_Zealand.svg" class="image" title="Flag of New Zealand"></a>&nbsp;<a href="/wiki/New_Zealand" title="New Zealand">New Zealand</a></td>
<td>554</td>
<td>NZL</td>
<td id="NZ">NZ</td>
<td><a href="/wiki/ISO_3166-2:NZ" title="ISO 3166-2:NZ">ISO 3166-2:NZ</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Nicaragua.svg" class="image" title="Flag of Nicaragua"></a>&nbsp;<a href="/wiki/Nicaragua" title="Nicaragua">Nicaragua</a></td>
<td>558</td>
 
<td>NIC</td>
<td id="NI">NI</td>
<td><a href="/wiki/ISO_3166-2:NI" title="ISO 3166-2:NI">ISO 3166-2:NI</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Niger.svg" class="image" title="Flag of Niger"></a>&nbsp;<a href="/wiki/Niger" title="Niger">Niger</a></td>
<td>562</td>
<td>NER</td>
<td id="NE">NE</td>
<td><a href="/w/index.php?title=ISO_3166-2:NE&amp;action=edit" class="new" title="ISO 3166-2:NE">ISO 3166-2:NE</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Nigeria.svg" class="image" title="Flag of Nigeria"></a>&nbsp;<a href="/wiki/Nigeria" title="Nigeria">Nigeria</a></td>
<td>566</td>
<td>NGA</td>
<td id="NG">NG</td>
<td><a href="/wiki/ISO_3166-2:NG" title="ISO 3166-2:NG">ISO 3166-2:NG</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Niue.svg" class="image" title="Flag of Niue"></a>&nbsp;<a href="/wiki/Niue" title="Niue">Niue</a></td>
<td>570</td>
 
<td>NIU</td>
<td id="NU">NU</td>
<td><a href="/w/index.php?title=ISO_3166-2:NU&amp;action=edit" class="new" title="ISO 3166-2:NU">ISO 3166-2:NU</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Norfolk_Island.svg" class="image" title="Flag of Norfolk Island"></a>&nbsp;<a href="/wiki/Norfolk_Island" title="Norfolk Island">Norfolk Island</a></td>
<td>574</td>
<td>NFK</td>
<td id="NF">NF</td>
<td><a href="/w/index.php?title=ISO_3166-2:NF&amp;action=edit" class="new" title="ISO 3166-2:NF">ISO 3166-2:NF</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_the_Northern_Mariana_Islands.svg" class="image" title="Flag of the Northern Mariana Islands"></a>&nbsp;<a href="/wiki/Northern_Mariana_Islands" title="Northern Mariana Islands">Northern Mariana Islands</a></td>
<td>580</td>
<td>MNP</td>
<td id="MP">MP</td>
<td><a href="/w/index.php?title=ISO_3166-2:MP&amp;action=edit" class="new" title="ISO 3166-2:MP">ISO 3166-2:MP</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Norway.svg" class="image" title="Flag of Norway"></a>&nbsp;<a href="/wiki/Norway" title="Norway">Norway</a></td>
<td>578</td>
 
<td>NOR</td>
<td id="NO">NO</td>
<td><a href="/wiki/ISO_3166-2:NO" title="ISO 3166-2:NO">ISO 3166-2:NO</a></td>
</tr>
<tr bgcolor="lightgray">
<td colspan="5"></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Oman.svg" class="image" title="Flag of Oman"></a>&nbsp;<a href="/wiki/Oman" title="Oman">Oman</a></td>
<td>512</td>
<td>OMN</td>
 
<td id="OM">OM</td>
<td><a href="/w/index.php?title=ISO_3166-2:OM&amp;action=edit" class="new" title="ISO 3166-2:OM">ISO 3166-2:OM</a></td>
</tr>
<tr bgcolor="lightgray">
<td colspan="5"></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Pakistan.svg" class="image" title="Flag of Pakistan"></a>&nbsp;<a href="/wiki/Pakistan" title="Pakistan">Pakistan</a></td>
<td>586</td>
<td>PAK</td>
<td id="PK">PK</td>
 
<td><a href="/w/index.php?title=ISO_3166-2:PK&amp;action=edit" class="new" title="ISO 3166-2:PK">ISO 3166-2:PK</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Palau.svg" class="image" title="Flag of Palau"></a>&nbsp;<a href="/wiki/Palau" title="Palau">Palau</a></td>
<td>585</td>
<td>PLW</td>
<td id="PW">PW</td>
<td><a href="/wiki/ISO_3166-2:PW" title="ISO 3166-2:PW">ISO 3166-2:PW</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Palestine.svg" class="image" title="Palestinian flag"></a>&nbsp;<a href="/wiki/Palestinian_territories" title="Palestinian territories">Palestinian Territory, Occupied</a></td>
 
<td>275</td>
<td>PSE</td>
<td id="PS">PS</td>
<td><a href="/w/index.php?title=ISO_3166-2:PS&amp;action=edit" class="new" title="ISO 3166-2:PS">ISO 3166-2:PS</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Panama.svg" class="image" title="Flag of Panama"></a>&nbsp;<a href="/wiki/Panama" title="Panama">Panama</a></td>
<td>591</td>
<td>PAN</td>
<td id="PA">PA</td>
 
<td><a href="/w/index.php?title=ISO_3166-2:PA&amp;action=edit" class="new" title="ISO 3166-2:PA">ISO 3166-2:PA</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Papua_New_Guinea.svg" class="image" title="Flag of Papua New Guinea"></a>&nbsp;<a href="/wiki/Papua_New_Guinea" title="Papua New Guinea">Papua New Guinea</a></td>
<td>598</td>
<td>PNG</td>
<td id="PG">PG</td>
<td><a href="/w/index.php?title=ISO_3166-2:PG&amp;action=edit" class="new" title="ISO 3166-2:PG">ISO 3166-2:PG</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Paraguay.svg" class="image" title="Flag of Paraguay"></a>&nbsp;<a href="/wiki/Paraguay" title="Paraguay">Paraguay</a></td>
 
<td>600</td>
<td>PRY</td>
<td id="PY">PY</td>
<td><a href="/w/index.php?title=ISO_3166-2:PY&amp;action=edit" class="new" title="ISO 3166-2:PY">ISO 3166-2:PY</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Peru.svg" class="image" title="Flag of Peru"></a>&nbsp;<a href="/wiki/Peru" title="Peru">Peru</a></td>
<td>604</td>
<td>PER</td>
<td id="PE">PE</td>
 
<td><a href="/wiki/ISO_3166-2:PE" title="ISO 3166-2:PE">ISO 3166-2:PE</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_the_Philippines.svg" class="image" title="Flag of the Philippines"></a>&nbsp;<a href="/wiki/Philippines" title="Philippines">Philippines</a></td>
<td>608</td>
<td>PHL</td>
<td id="PH">PH</td>
<td><a href="/wiki/ISO_3166-2:PH" title="ISO 3166-2:PH">ISO 3166-2:PH</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_the_Pitcairn_Islands.svg" class="image" title="Flag of the Pitcairn Islands"></a>&nbsp;<a href="/wiki/Pitcairn_Islands" title="Pitcairn Islands">Pitcairn</a></td>
 
<td>612</td>
<td>PCN</td>
<td id="PN">PN</td>
<td><a href="/w/index.php?title=ISO_3166-2:PN&amp;action=edit" class="new" title="ISO 3166-2:PN">ISO 3166-2:PN</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Poland.svg" class="image" title="Flag of Poland"></a>&nbsp;<a href="/wiki/Poland" title="Poland">Poland</a></td>
<td>616</td>
<td>POL</td>
<td id="PL">PL</td>
 
<td><a href="/wiki/ISO_3166-2:PL" title="ISO 3166-2:PL">ISO 3166-2:PL</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Portugal.svg" class="image" title="Flag of Portugal"></a>&nbsp;<a href="/wiki/Portugal" title="Portugal">Portugal</a></td>
<td>620</td>
<td>PRT</td>
<td id="PT">PT</td>
<td><a href="/wiki/ISO_3166-2:PT" title="ISO 3166-2:PT">ISO 3166-2:PT</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Puerto_Rico.svg" class="image" title="Flag of Puerto Rico"></a>&nbsp;<a href="/wiki/Puerto_Rico" title="Puerto Rico">Puerto Rico</a></td>
 
<td>630</td>
<td>PRI</td>
<td id="PR">PR</td>
<td><a href="/w/index.php?title=ISO_3166-2:PR&amp;action=edit" class="new" title="ISO 3166-2:PR">ISO 3166-2:PR</a></td>
</tr>
<tr bgcolor="lightgray">
<td colspan="5"></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Qatar.svg" class="image" title="Flag of Qatar"></a>&nbsp;<a href="/wiki/Qatar" title="Qatar">Qatar</a></td>
<td>634</td>
 
<td>QAT</td>
<td id="QA">QA</td>
<td><a href="/w/index.php?title=ISO_3166-2:QA&amp;action=edit" class="new" title="ISO 3166-2:QA">ISO 3166-2:QA</a></td>
</tr>
<tr bgcolor="lightgray">
<td colspan="5"></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_France.svg" class="image" title="Flag of Réunion"></a>&nbsp;<a href="/wiki/R%C3%A9union" title="Réunion">Réunion</a></td>
<td>638</td>
<td>REU</td>
 
<td id="RE">RE</td>
<td><a href="/w/index.php?title=ISO_3166-2:RE&amp;action=edit" class="new" title="ISO 3166-2:RE">ISO 3166-2:RE</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Romania.svg" class="image" title="Flag of Romania"></a>&nbsp;<a href="/wiki/Romania" title="Romania">Romania</a></td>
<td>642</td>
<td>ROU</td>
<td id="RO">RO</td>
<td><a href="/wiki/ISO_3166-2:RO" title="ISO 3166-2:RO">ISO 3166-2:RO</a></td>
</tr>
 
<tr>
<td><a href="/wiki/Image:Flag_of_Russia.svg" class="image" title="Flag of Russia"></a>&nbsp;<a href="/wiki/Russia" title="Russia">Russian Federation</a></td>
<td>643</td>
<td>RUS</td>
<td id="RU">RU</td>
<td><a href="/wiki/ISO_3166-2:RU" title="ISO 3166-2:RU">ISO 3166-2:RU</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Rwanda.svg" class="image" title="Flag of Rwanda"></a>&nbsp;<a href="/wiki/Rwanda" title="Rwanda">Rwanda</a></td>
<td>646</td>
 
<td>RWA</td>
<td id="RW">RW</td>
<td><a href="/wiki/ISO_3166-2:RW" title="ISO 3166-2:RW">ISO 3166-2:RW</a></td>
</tr>
<tr bgcolor="lightgray">
<td colspan="5"></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Saint_Helena.svg" class="image" title="Flag of Saint Helena"></a>&nbsp;<a href="/wiki/Saint_Helena" title="Saint Helena">Saint Helena</a></td>
<td>654</td>
<td>SHN</td>
 
<td id="SH">SH</td>
<td><a href="/w/index.php?title=ISO_3166-2:SH&amp;action=edit" class="new" title="ISO 3166-2:SH">ISO 3166-2:SH</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Saint_Kitts_and_Nevis.svg" class="image" title="Flag of Saint Kitts and Nevis"></a>&nbsp;<a href="/wiki/Saint_Kitts_and_Nevis" title="Saint Kitts and Nevis">Saint Kitts and Nevis</a></td>
<td>659</td>
<td>KNA</td>
<td id="KN">KN</td>
<td><a href="/wiki/ISO_3166-2:KN" title="ISO 3166-2:KN">ISO 3166-2:KN</a></td>
</tr>
 
<tr>
<td><a href="/wiki/Image:Flag_of_Saint_Lucia.svg" class="image" title="Flag of Saint Lucia"></a>&nbsp;<a href="/wiki/Saint_Lucia" title="Saint Lucia">Saint Lucia</a></td>
<td>662</td>
<td>LCA</td>
<td id="LC">LC</td>
<td><a href="/w/index.php?title=ISO_3166-2:LC&amp;action=edit" class="new" title="ISO 3166-2:LC">ISO 3166-2:LC</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_France.svg" class="image" title="Flag of Saint Pierre and Miquelon"></a>&nbsp;<a href="/wiki/Saint_Pierre_and_Miquelon" title="Saint Pierre and Miquelon">Saint Pierre and Miquelon</a></td>
<td>666</td>
 
<td>SPM</td>
<td id="PM">PM</td>
<td><a href="/w/index.php?title=ISO_3166-2:PM&amp;action=edit" class="new" title="ISO 3166-2:PM">ISO 3166-2:PM</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Saint_Vincent_and_the_Grenadines.svg" class="image" title="Flag of Saint Vincent and the Grenadines"></a>&nbsp;<a href="/wiki/Saint_Vincent_and_the_Grenadines" title="Saint Vincent and the Grenadines">Saint Vincent and the Grenadines</a></td>
<td>670</td>
<td>VCT</td>
<td id="VC">VC</td>
<td><a href="/wiki/ISO_3166-2:VC" title="ISO 3166-2:VC">ISO 3166-2:VC</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Samoa.svg" class="image" title="Flag of Samoa"></a>&nbsp;<a href="/wiki/Samoa" title="Samoa">Samoa</a></td>
<td>882</td>
<td>WSM</td>
<td id="WS">WS</td>
<td><a href="/w/index.php?title=ISO_3166-2:WS&amp;action=edit" class="new" title="ISO 3166-2:WS">ISO 3166-2:WS</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_San_Marino.svg" class="image" title="Flag of San Marino"></a>&nbsp;<a href="/wiki/San_Marino" title="San Marino">San Marino</a></td>
<td>674</td>
 
<td>SMR</td>
<td id="SM">SM</td>
<td><a href="/wiki/ISO_3166-2:SM" title="ISO 3166-2:SM">ISO 3166-2:SM</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Sao_Tome_and_Principe.svg" class="image" title="Flag of São Tomé and Príncipe"></a>&nbsp;<a href="/wiki/S%C3%A3o_Tom%C3%A9_and_Pr%C3%ADncipe" title="São Tomé and Príncipe">Sao Tome and Principe</a></td>
<td>678</td>
<td>STP</td>
<td id="ST">ST</td>
<td><a href="/wiki/ISO_3166-2:ST" title="ISO 3166-2:ST">ISO 3166-2:ST</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Saudi_Arabia.svg" class="image" title="Flag of Saudi Arabia"></a>&nbsp;<a href="/wiki/Saudi_Arabia" title="Saudi Arabia">Saudi Arabia</a></td>
<td>682</td>
<td>SAU</td>
<td id="SA">SA</td>
<td><a href="/w/index.php?title=ISO_3166-2:SA&amp;action=edit" class="new" title="ISO 3166-2:SA">ISO 3166-2:SA</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Senegal.svg" class="image" title="Flag of Senegal"></a>&nbsp;<a href="/wiki/Senegal" title="Senegal">Senegal</a></td>
<td>686</td>
 
<td>SEN</td>
<td id="SN">SN</td>
<td><a href="/wiki/ISO_3166-2:SN" title="ISO 3166-2:SN">ISO 3166-2:SN</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Serbia.svg" class="image" title="Flag of Serbia"></a>&nbsp;<a href="/wiki/Serbia" title="Serbia">Serbia</a></td>
<td>688</td>
<td>SRB</td>
<td id="RS">RS</td>
<td><a href="/wiki/ISO_3166-2:RS" title="ISO 3166-2:RS">ISO 3166-2:RS</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_the_Seychelles.svg" class="image" title="Flag of the Seychelles"></a>&nbsp;<a href="/wiki/Seychelles" title="Seychelles">Seychelles</a></td>
<td>690</td>
<td>SYC</td>
<td id="SC">SC</td>
<td><a href="/wiki/ISO_3166-2:SC" title="ISO 3166-2:SC">ISO 3166-2:SC</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Sierra_Leone.svg" class="image" title="Flag of Sierra Leone"></a>&nbsp;<a href="/wiki/Sierra_Leone" title="Sierra Leone">Sierra Leone</a></td>
<td>694</td>
 
<td>SLE</td>
<td id="SL">SL</td>
<td><a href="/w/index.php?title=ISO_3166-2:SL&amp;action=edit" class="new" title="ISO 3166-2:SL">ISO 3166-2:SL</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Singapore.svg" class="image" title="Flag of Singapore"></a>&nbsp;<a href="/wiki/Singapore" title="Singapore">Singapore</a></td>
<td>702</td>
<td>SGP</td>
<td id="SG">SG</td>
<td><a href="/w/index.php?title=ISO_3166-2:SG&amp;action=edit" class="new" title="ISO 3166-2:SG">ISO 3166-2:SG</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Slovakia.svg" class="image" title="Flag of Slovakia"></a>&nbsp;<a href="/wiki/Slovakia" title="Slovakia">Slovakia</a></td>
<td>703</td>
<td>SVK</td>
<td id="SK">SK</td>
<td><a href="/wiki/ISO_3166-2:SK" title="ISO 3166-2:SK">ISO 3166-2:SK</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Slovenia.svg" class="image" title="Flag of Slovenia"></a>&nbsp;<a href="/wiki/Slovenia" title="Slovenia">Slovenia</a></td>
<td>705</td>
 
<td>SVN</td>
<td id="SI">SI</td>
<td><a href="/wiki/ISO_3166-2:SI" title="ISO 3166-2:SI">ISO 3166-2:SI</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_the_Solomon_Islands.svg" class="image" title="Flag of the Solomon Islands"></a>&nbsp;<a href="/wiki/Solomon_Islands" title="Solomon Islands">Solomon Islands</a></td>
<td>090</td>
<td>SLB</td>
<td id="SB">SB</td>
<td><a href="/wiki/ISO_3166-2:SB" title="ISO 3166-2:SB">ISO 3166-2:SB</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Somalia.svg" class="image" title="Flag of Somalia"></a>&nbsp;<a href="/wiki/Somalia" title="Somalia">Somalia</a></td>
<td>706</td>
<td>SOM</td>
<td id="SO">SO</td>
<td><a href="/wiki/ISO_3166-2:SO" title="ISO 3166-2:SO">ISO 3166-2:SO</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_South_Africa.svg" class="image" title="Flag of South Africa"></a>&nbsp;<a href="/wiki/South_Africa" title="South Africa">South Africa</a></td>
<td>710</td>
 
<td>ZAF</td>
<td id="ZA">ZA</td>
<td><a href="/wiki/ISO_3166-2:ZA" title="ISO 3166-2:ZA">ISO 3166-2:ZA</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_South_Georgia_and_the_South_Sandwich_Islands.svg" class="image" title="Flag of South Georgia and the South Sandwich Islands"></a>&nbsp;<a href="/wiki/South_Georgia_and_the_South_Sandwich_Islands" title="South Georgia and the South Sandwich Islands">South Georgia and the South Sandwich Islands</a></td>
<td>239</td>
<td>SGS</td>
<td id="GS">GS</td>
<td><a href="/w/index.php?title=ISO_3166-2:GS&amp;action=edit" class="new" title="ISO 3166-2:GS">ISO 3166-2:GS</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Spain.svg" class="image" title="Flag of Spain"></a>&nbsp;<a href="/wiki/Spain" title="Spain">Spain</a></td>
<td>724</td>
<td>ESP</td>
<td id="ES">ES</td>
<td><a href="/wiki/ISO_3166-2:ES" title="ISO 3166-2:ES">ISO 3166-2:ES</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Sri_Lanka.svg" class="image" title="Flag of Sri Lanka"></a>&nbsp;<a href="/wiki/Sri_Lanka" title="Sri Lanka">Sri Lanka</a></td>
<td>144</td>
 
<td>LKA</td>
<td id="LK">LK</td>
<td><a href="/w/index.php?title=ISO_3166-2:LK&amp;action=edit" class="new" title="ISO 3166-2:LK">ISO 3166-2:LK</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Sudan.svg" class="image" title="Flag of Sudan"></a>&nbsp;<a href="/wiki/Sudan" title="Sudan">Sudan</a></td>
<td>736</td>
<td>SDN</td>
<td id="SD">SD</td>
<td><a href="/w/index.php?title=ISO_3166-2:SD&amp;action=edit" class="new" title="ISO 3166-2:SD">ISO 3166-2:SD</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Suriname.svg" class="image" title="Flag of Suriname"></a>&nbsp;<a href="/wiki/Suriname" title="Suriname">Suriname</a></td>
<td>740</td>
<td>SUR</td>
<td id="SR">SR</td>
<td><a href="/wiki/ISO_3166-2:SR" title="ISO 3166-2:SR">ISO 3166-2:SR</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Norway.svg" class="image" title="Flag of Svalbard and Jan Mayen"></a>&nbsp;<a href="/wiki/Svalbard_and_Jan_Mayen" title="Svalbard and Jan Mayen">Svalbard and Jan Mayen</a></td>
<td>744</td>
 
<td>SJM</td>
<td id="SJ">SJ</td>
<td><a href="/w/index.php?title=ISO_3166-2:SJ&amp;action=edit" class="new" title="ISO 3166-2:SJ">ISO 3166-2:SJ</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Swaziland.svg" class="image" title="Flag of Swaziland"></a>&nbsp;<a href="/wiki/Swaziland" title="Swaziland">Swaziland</a></td>
<td>748</td>
<td>SWZ</td>
<td id="SZ">SZ</td>
<td><a href="/w/index.php?title=ISO_3166-2:SZ&amp;action=edit" class="new" title="ISO 3166-2:SZ">ISO 3166-2:SZ</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Sweden.svg" class="image" title="Flag of Sweden"></a>&nbsp;<a href="/wiki/Sweden" title="Sweden">Sweden</a></td>
<td>752</td>
<td>SWE</td>
<td id="SE">SE</td>
<td><a href="/wiki/ISO_3166-2:SE" title="ISO 3166-2:SE">ISO 3166-2:SE</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Switzerland.svg" class="image" title="Flag of Switzerland"></a>&nbsp;<a href="/wiki/Switzerland" title="Switzerland">Switzerland</a></td>
<td>756</td>
 
<td>CHE</td>
<td id="CH">CH</td>
<td><a href="/wiki/ISO_3166-2:CH" title="ISO 3166-2:CH">ISO 3166-2:CH</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Syria.svg" class="image" title="Flag of Syria"></a>&nbsp;<a href="/wiki/Syria" title="Syria">Syrian Arab Republic</a></td>
<td>760</td>
<td>SYR</td>
<td id="SY">SY</td>
<td><a href="/w/index.php?title=ISO_3166-2:SY&amp;action=edit" class="new" title="ISO 3166-2:SY">ISO 3166-2:SY</a></td>
 
</tr>
<tr bgcolor="lightgray">
<td colspan="5"></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_the_Republic_of_China.svg" class="image" title="Flag of the Republic of China"></a>&nbsp;<a href="/wiki/Republic_of_China" title="Republic of China">Taiwan, Province of China</a></td>
<td>158</td>
<td>TWN</td>
<td id="TW">TW</td>
<td><a href="/wiki/ISO_3166-2:TW" title="ISO 3166-2:TW">ISO 3166-2:TW</a></td>
</tr>
<tr>
 
<td><a href="/wiki/Image:Flag_of_Tajikistan.svg" class="image" title="Flag of Tajikistan"></a>&nbsp;<a href="/wiki/Tajikistan" title="Tajikistan">Tajikistan</a></td>
<td>762</td>
<td>TJK</td>
<td id="TJ">TJ</td>
<td><a href="/wiki/ISO_3166-2:TJ" title="ISO 3166-2:TJ">ISO 3166-2:TJ</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Tanzania.svg" class="image" title="Flag of Tanzania"></a>&nbsp;<a href="/wiki/Tanzania" title="Tanzania">Tanzania, United Republic of</a></td>
<td>834</td>
<td>TZA</td>
 
<td id="TZ">TZ</td>
<td><a href="/wiki/ISO_3166-2:TZ" title="ISO 3166-2:TZ">ISO 3166-2:TZ</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Thailand.svg" class="image" title="Flag of Thailand"></a>&nbsp;<a href="/wiki/Thailand" title="Thailand">Thailand</a></td>
<td>764</td>
<td>THA</td>
<td id="TH">TH</td>
<td><a href="/wiki/ISO_3166-2:TH" title="ISO 3166-2:TH">ISO 3166-2:TH</a></td>
</tr>
 
<tr>
<td><a href="/wiki/Image:Flag_of_East_Timor.svg" class="image" title="Flag of East Timor"></a>&nbsp;<a href="/wiki/East_Timor" title="East Timor">Timor-Leste</a></td>
<td>626</td>
<td>TLS</td>
<td id="TL">TL</td>
<td><a href="/wiki/ISO_3166-2:TL" title="ISO 3166-2:TL">ISO 3166-2:TL</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Togo.svg" class="image" title="Flag of Togo"></a>&nbsp;<a href="/wiki/Togo" title="Togo">Togo</a></td>
<td>768</td>
 
<td>TGO</td>
<td id="TG">TG</td>
<td><a href="/w/index.php?title=ISO_3166-2:TG&amp;action=edit" class="new" title="ISO 3166-2:TG">ISO 3166-2:TG</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_New_Zealand.svg" class="image" title="Flag of Tokelau"></a>&nbsp;<a href="/wiki/Tokelau" title="Tokelau">Tokelau</a></td>
<td>772</td>
<td>TKL</td>
<td id="TK">TK</td>
<td><a href="/w/index.php?title=ISO_3166-2:TK&amp;action=edit" class="new" title="ISO 3166-2:TK">ISO 3166-2:TK</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Tonga.svg" class="image" title="Flag of Tonga"></a>&nbsp;<a href="/wiki/Tonga" title="Tonga">Tonga</a></td>
<td>776</td>
<td>TON</td>
<td id="TO">TO</td>
<td><a href="/wiki/ISO_3166-2:TO" title="ISO 3166-2:TO">ISO 3166-2:TO</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Trinidad_and_Tobago.svg" class="image" title="Flag of Trinidad and Tobago"></a>&nbsp;<a href="/wiki/Trinidad_and_Tobago" title="Trinidad and Tobago">Trinidad and Tobago</a></td>
<td>780</td>
 
<td>TTO</td>
<td id="TT">TT</td>
<td><a href="/wiki/ISO_3166-2:TT" title="ISO 3166-2:TT">ISO 3166-2:TT</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Tunisia.svg" class="image" title="Flag of Tunisia"></a>&nbsp;<a href="/wiki/Tunisia" title="Tunisia">Tunisia</a></td>
<td>788</td>
<td>TUN</td>
<td id="TN">TN</td>
<td><a href="/wiki/ISO_3166-2:TN" title="ISO 3166-2:TN">ISO 3166-2:TN</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Turkey.svg" class="image" title="Flag of Turkey"></a>&nbsp;<a href="/wiki/Turkey" title="Turkey">Turkey</a></td>
<td>792</td>
<td>TUR</td>
<td id="TR">TR</td>
<td><a href="/wiki/ISO_3166-2:TR" title="ISO 3166-2:TR">ISO 3166-2:TR</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Turkmenistan.svg" class="image" title="Flag of Turkmenistan"></a>&nbsp;<a href="/wiki/Turkmenistan" title="Turkmenistan">Turkmenistan</a></td>
<td>795</td>
 
<td>TKM</td>
<td id="TM">TM</td>
<td><a href="/wiki/ISO_3166-2:TM" title="ISO 3166-2:TM">ISO 3166-2:TM</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_the_Turks_and_Caicos_Islands.svg" class="image" title="Flag of the Turks and Caicos Islands"></a>&nbsp;<a href="/wiki/Turks_and_Caicos_Islands" title="Turks and Caicos Islands">Turks and Caicos Islands</a></td>
<td>796</td>
<td>TCA</td>
<td id="TC">TC</td>
<td><a href="/w/index.php?title=ISO_3166-2:TC&amp;action=edit" class="new" title="ISO 3166-2:TC">ISO 3166-2:TC</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Tuvalu.svg" class="image" title="Flag of Tuvalu"></a>&nbsp;<a href="/wiki/Tuvalu" title="Tuvalu">Tuvalu</a></td>
<td>798</td>
<td>TUV</td>
<td id="TV">TV</td>
<td><a href="/wiki/ISO_3166-2:TV" title="ISO 3166-2:TV">ISO 3166-2:TV</a></td>
</tr>
<tr bgcolor="lightgray">
<td colspan="5"></td>
</tr>
<tr>
 
<td><a href="/wiki/Image:Flag_of_Uganda.svg" class="image" title="Flag of Uganda"></a>&nbsp;<a href="/wiki/Uganda" title="Uganda">Uganda</a></td>
<td>800</td>
<td>UGA</td>
<td id="UG">UG</td>
<td><a href="/wiki/ISO_3166-2:UG" title="ISO 3166-2:UG">ISO 3166-2:UG</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Ukraine.svg" class="image" title="Flag of Ukraine"></a>&nbsp;<a href="/wiki/Ukraine" title="Ukraine">Ukraine</a></td>
<td>804</td>
<td>UKR</td>
 
<td id="UA">UA</td>
<td><a href="/wiki/ISO_3166-2:UA" title="ISO 3166-2:UA">ISO 3166-2:UA</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_the_United_Arab_Emirates.svg" class="image" title="Flag of the United Arab Emirates"></a>&nbsp;<a href="/wiki/United_Arab_Emirates" title="United Arab Emirates">United Arab Emirates</a></td>
<td>784</td>
<td>ARE</td>
<td id="AE">AE</td>
<td><a href="/wiki/ISO_3166-2:AE" title="ISO 3166-2:AE">ISO 3166-2:AE</a></td>
</tr>
 
<tr>
<td><a href="/wiki/Image:Flag_of_the_United_Kingdom.svg" class="image" title="Flag of the United Kingdom"></a>&nbsp;<a href="/wiki/United_Kingdom" title="United Kingdom">United Kingdom</a></td>
<td>826</td>
<td>GBR</td>
<td id="GB">GB</td>
<td><a href="/wiki/ISO_3166-2:GB" title="ISO 3166-2:GB">ISO 3166-2:GB</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_the_United_States.svg" class="image" title="Flag of the United States"></a>&nbsp;<a href="/wiki/United_States" title="United States">United States</a></td>
<td>840</td>
 
<td>USA</td>
<td id="US">US</td>
<td><a href="/wiki/ISO_3166-2:US" title="ISO 3166-2:US">ISO 3166-2:US</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_the_United_States.svg" class="image" title="Flag of United States Minor Outlying Islands"></a>&nbsp;<a href="/wiki/United_States_Minor_Outlying_Islands" title="United States Minor Outlying Islands">United States Minor Outlying Islands</a></td>
<td>581</td>
<td>UMI</td>
<td id="UM">UM</td>
<td><a href="/w/index.php?title=ISO_3166-2:UM&amp;action=edit" class="new" title="ISO 3166-2:UM">ISO 3166-2:UM</a></td>
 
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Uruguay.svg" class="image" title="Flag of Uruguay"></a>&nbsp;<a href="/wiki/Uruguay" title="Uruguay">Uruguay</a></td>
<td>858</td>
<td>URY</td>
<td id="UY">UY</td>
<td><a href="/w/index.php?title=ISO_3166-2:UY&amp;action=edit" class="new" title="ISO 3166-2:UY">ISO 3166-2:UY</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Uzbekistan.svg" class="image" title="Flag of Uzbekistan"></a>&nbsp;<a href="/wiki/Uzbekistan" title="Uzbekistan">Uzbekistan</a></td>
<td>860</td>
 
<td>UZB</td>
<td id="UZ">UZ</td>
<td><a href="/wiki/ISO_3166-2:UZ" title="ISO 3166-2:UZ">ISO 3166-2:UZ</a></td>
</tr>
<tr bgcolor="lightgray">
<td colspan="5"></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Vanuatu.svg" class="image" title="Flag of Vanuatu"></a>&nbsp;<a href="/wiki/Vanuatu" title="Vanuatu">Vanuatu</a></td>
<td>548</td>
<td>VUT</td>
 
<td id="VU">VU</td>
<td><a href="/w/index.php?title=ISO_3166-2:VU&amp;action=edit" class="new" title="ISO 3166-2:VU">ISO 3166-2:VU</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Venezuela.svg" class="image" title="Flag of Venezuela"></a>&nbsp;<a href="/wiki/Venezuela" title="Venezuela">Venezuela</a></td>
<td>862</td>
<td>VEN</td>
<td id="VE">VE</td>
<td><a href="/wiki/ISO_3166-2:VE" title="ISO 3166-2:VE">ISO 3166-2:VE</a></td>
</tr>
 
<tr>
<td><a href="/wiki/Image:Flag_of_Vietnam.svg" class="image" title="Flag of Vietnam"></a>&nbsp;<a href="/wiki/Vietnam" title="Vietnam">Viet Nam</a></td>
<td>704</td>
<td>VNM</td>
<td id="VN">VN</td>
<td><a href="/wiki/ISO_3166-2:VN" title="ISO 3166-2:VN">ISO 3166-2:VN</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_the_British_Virgin_Islands.svg" class="image" title="Flag of the British Virgin Islands"></a>&nbsp;<a href="/wiki/British_Virgin_Islands" title="British Virgin Islands">Virgin Islands, British</a></td>
<td>092</td>
 
<td>VGB</td>
<td id="VG">VG</td>
<td><a href="/w/index.php?title=ISO_3166-2:VG&amp;action=edit" class="new" title="ISO 3166-2:VG">ISO 3166-2:VG</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_the_United_States_Virgin_Islands.svg" class="image" title="Flag of the United States Virgin Islands"></a>&nbsp;<a href="/wiki/United_States_Virgin_Islands" title="United States Virgin Islands">Virgin Islands, U.S.</a></td>
<td>850</td>
<td>VIR</td>
<td id="VI">VI</td>
<td><a href="/w/index.php?title=ISO_3166-2:VI&amp;action=edit" class="new" title="ISO 3166-2:VI">ISO 3166-2:VI</a></td>
 
</tr>
<tr bgcolor="lightgray">
<td colspan="5"></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_France.svg" class="image" title="Flag of Wallis and Futuna"></a>&nbsp;<a href="/wiki/Wallis_and_Futuna" title="Wallis and Futuna">Wallis and Futuna</a></td>
<td>876</td>
<td>WLF</td>
<td id="WF">WF</td>
<td><a href="/w/index.php?title=ISO_3166-2:WF&amp;action=edit" class="new" title="ISO 3166-2:WF">ISO 3166-2:WF</a></td>
</tr>
<tr>
 
<td><a href="/wiki/Image:Flag_of_Western_Sahara.svg" class="image" title="Flag of Western Sahara"></a>&nbsp;<a href="/wiki/Western_Sahara" title="Western Sahara">Western Sahara</a></td>
<td>732</td>
<td>ESH</td>
<td id="EH">EH</td>
<td><a href="/w/index.php?title=ISO_3166-2:EH&amp;action=edit" class="new" title="ISO 3166-2:EH">ISO 3166-2:EH</a></td>
</tr>
<tr bgcolor="lightgray">
<td colspan="5"></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Yemen.svg" class="image" title="Flag of Yemen"></a>&nbsp;<a href="/wiki/Yemen" title="Yemen">Yemen</a></td>
 
<td>887</td>
<td>YEM</td>
<td id="YE">YE</td>
<td><a href="/wiki/ISO_3166-2:YE" title="ISO 3166-2:YE">ISO 3166-2:YE</a></td>
</tr>
<tr bgcolor="lightgray">
<td colspan="5"></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Zambia.svg" class="image" title="Flag of Zambia"></a>&nbsp;<a href="/wiki/Zambia" title="Zambia">Zambia</a></td>
<td>894</td>
 
<td>ZMB</td>
<td id="ZM">ZM</td>
<td><a href="/w/index.php?title=ISO_3166-2:ZM&amp;action=edit" class="new" title="ISO 3166-2:ZM">ISO 3166-2:ZM</a></td>
</tr>
<tr>
<td><a href="/wiki/Image:Flag_of_Zimbabwe.svg" class="image" title="Flag of Zimbabwe"></a>&nbsp;<a href="/wiki/Zimbabwe" title="Zimbabwe">Zimbabwe</a></td>
<td>716</td>
<td>ZWE</td>
<td id="ZW">ZW</td>
 
<td><a href="/w/index.php?title=ISO_3166-2:ZW&amp;action=edit" class="new" title="ISO 3166-2:ZW">ISO 3166-2:ZW</a></td>
</tr>
 
</tbody>
</table>
 
 
<h1>Country Continent Mapping</h1>
<p>abstracted from <a href="http://en.wikipedia.org/wiki/List_of_countries_by_continent">wikipedia continent country page</a></p>
<table id="continents">
<!-- Africa -->
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Algeria.svg" class="image" title="Flag of Algeria"></a>&nbsp;<a href="/wiki/Algeria" title="Algeria">Algeria</a></b> – <a href="/wiki/Algiers" title="Algiers">Algiers</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Angola.svg" class="image" title="Flag of Angola"></a>&nbsp;<a href="/wiki/Angola" title="Angola">Angola</a></b> – <a href="/wiki/Luanda" title="Luanda">Luanda</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Benin.svg" class="image" title="Flag of Benin"></a>&nbsp;<a href="/wiki/Benin" title="Benin">Benin</a></b> – <a href="/wiki/Porto-Novo" title="Porto-Novo">Porto-Novo</a> (seat of government at <a href="/wiki/Cotonou" title="Cotonou">Cotonou</a>)</td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Botswana.svg" class="image" title="Flag of Botswana"></a>&nbsp;<a href="/wiki/Botswana" title="Botswana">Botswana</a></b> – <a href="/wiki/Gaborone" title="Gaborone">Gaborone</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Burkina_Faso.svg" class="image" title="Flag of Burkina Faso"></a>&nbsp;<a href="/wiki/Burkina_Faso" title="Burkina Faso">Burkina Faso</a></b> – <a href="/wiki/Ouagadougou" title="Ouagadougou">Ouagadougou</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Burundi.svg" class="image" title="Flag of Burundi"></a>&nbsp;<a href="/wiki/Burundi" title="Burundi">Burundi</a></b> – <a href="/wiki/Bujumbura" title="Bujumbura">Bujumbura</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Cameroon.svg" class="image" title="Flag of Cameroon"></a>&nbsp;<a href="/wiki/Cameroon" title="Cameroon">Cameroon</a></b> – <a href="/wiki/Yaound%C3%A9" title="Yaoundé">Yaoundé</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Cape_Verde.svg" class="image" title="Flag of Cape Verde"></a>&nbsp;<a href="/wiki/Cape_Verde" title="Cape Verde">Cape Verde</a></b> – <a href="/wiki/Praia" title="Praia">Praia</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_the_Central_African_Republic.svg" class="image" title="Flag of the Central African Republic"></a>&nbsp;<a href="/wiki/Central_African_Republic" title="Central African Republic">Central African Republic</a></b> – <a href="/wiki/Bangui" title="Bangui">Bangui</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Chad.svg" class="image" title="Flag of Chad"></a>&nbsp;<a href="/wiki/Chad" title="Chad">Chad</a></b> – <a href="/wiki/N%27Djamena" title="N'Djamena">N'Djamena</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_the_Comoros.svg" class="image" title="Flag of the Comoros"></a>&nbsp;<a href="/wiki/Comoros" title="Comoros">Comoros</a></b> – <a href="/wiki/Moroni%2C_Comoros" title="Moroni, Comoros">Moroni</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_the_Democratic_Republic_of_the_Congo.svg" class="image" title="Flag of the Democratic Republic of the Congo"></a>&nbsp;<a href="/wiki/Democratic_Republic_of_the_Congo" title="Democratic Republic of the Congo">Congo, Democratic Republic of</a></b> (also known as <b>Congo-Kinshasa</b>, formerly known as <b>Zaire</b>) – <a href="/wiki/Kinshasa" title="Kinshasa">Kinshasa</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_the_Republic_of_the_Congo.svg" class="image" title="Flag of the Republic of the Congo"></a>&nbsp;<a href="/wiki/Republic_of_the_Congo" title="Republic of the Congo">Congo, Republic of</a></b> (also known as <b>Congo-Brazzaville</b>) – <a href="/wiki/Brazzaville" title="Brazzaville">Brazzaville</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Cote_d%27Ivoire.svg" class="image" title="Flag of Côte d'Ivoire"></a>&nbsp;<a href="/wiki/C%C3%B4te_d%27Ivoire" title="Côte d'Ivoire">Côte d'Ivoire</a></b> (commonly known as <b>Ivory Coast</b>) – <a href="/wiki/Yamoussoukro" title="Yamoussoukro">Yamoussoukro</a> (seat of government at <a href="/wiki/Abidjan" title="Abidjan">Abidjan</a>)</td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Djibouti.svg" class="image" title="Flag of Djibouti"></a>&nbsp;<a href="/wiki/Djibouti" title="Djibouti">Djibouti</a></b> – <a href="/wiki/Djibouti%2C_Djibouti" title="Djibouti, Djibouti">Djibouti</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Egypt.svg" class="image" title="Flag of Egypt"></a>&nbsp;<a href="/wiki/Egypt" title="Egypt">Egypt</a></b> – <a href="/wiki/Cairo" title="Cairo">Cairo</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Equatorial_Guinea.svg" class="image" title="Flag of Equatorial Guinea"></a>&nbsp;<a href="/wiki/Equatorial_Guinea" title="Equatorial Guinea">Equatorial Guinea</a></b> – <a href="/wiki/Malabo" title="Malabo">Malabo</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Eritrea.svg" class="image" title="Flag of Eritrea"></a>&nbsp;<a href="/wiki/Eritrea" title="Eritrea">Eritrea</a></b> – <a href="/wiki/Asmara" title="Asmara">Asmara</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Ethiopia.svg" class="image" title="Flag of Ethiopia"></a>&nbsp;<a href="/wiki/Ethiopia" title="Ethiopia">Ethiopia</a></b> – <a href="/wiki/Addis_Ababa" title="Addis Ababa">Addis Ababa</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Gabon.svg" class="image" title="Flag of Gabon"></a>&nbsp;<a href="/wiki/Gabon" title="Gabon">Gabon</a></b> – <a href="/wiki/Libreville" title="Libreville">Libreville</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_The_Gambia.svg" class="image" title="Flag of The Gambia"></a>&nbsp;<a href="/wiki/The_Gambia" title="The Gambia">Gambia</a></b> – <a href="/wiki/Banjul" title="Banjul">Banjul</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Ghana.svg" class="image" title="Flag of Ghana"></a>&nbsp;<a href="/wiki/Ghana" title="Ghana">Ghana</a></b> – <a href="/wiki/Accra" title="Accra">Accra</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Guinea.svg" class="image" title="Flag of Guinea"></a>&nbsp;<a href="/wiki/Guinea" title="Guinea">Guinea</a></b> – <a href="/wiki/Conakry" title="Conakry">Conakry</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Guinea-Bissau.svg" class="image" title="Flag of Guinea-Bissau"></a>&nbsp;<a href="/wiki/Guinea-Bissau" title="Guinea-Bissau">Guinea-Bissau</a></b> – <a href="/wiki/Bissau" title="Bissau">Bissau</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Kenya.svg" class="image" title="Flag of Kenya"></a>&nbsp;<a href="/wiki/Kenya" title="Kenya">Kenya</a></b> – <a href="/wiki/Nairobi" title="Nairobi">Nairobi</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Lesotho.svg" class="image" title="Flag of Lesotho"></a>&nbsp;<a href="/wiki/Lesotho" title="Lesotho">Lesotho</a></b> – <a href="/wiki/Maseru" title="Maseru">Maseru</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Liberia.svg" class="image" title="Flag of Liberia"></a>&nbsp;<a href="/wiki/Liberia" title="Liberia">Liberia</a></b> – <a href="/wiki/Monrovia" title="Monrovia">Monrovia</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Libya.svg" class="image" title="Flag of Libya"></a>&nbsp;<a href="/wiki/Libya" title="Libya">Libya</a></b> – <a href="/wiki/Tripoli" title="Tripoli">Tripoli</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Madagascar.svg" class="image" title="Flag of Madagascar"></a>&nbsp;<a href="/wiki/Madagascar" title="Madagascar">Madagascar</a></b> – <a href="/wiki/Antananarivo" title="Antananarivo">Antananarivo</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Malawi.svg" class="image" title="Flag of Malawi"></a>&nbsp;<a href="/wiki/Malawi" title="Malawi">Malawi</a></b> – <a href="/wiki/Lilongwe" title="Lilongwe">Lilongwe</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Mali.svg" class="image" title="Flag of Mali"></a>&nbsp;<a href="/wiki/Mali" title="Mali">Mali</a></b> – <a href="/wiki/Bamako" title="Bamako">Bamako</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Mauritania.svg" class="image" title="Flag of Mauritania"></a>&nbsp;<a href="/wiki/Mauritania" title="Mauritania">Mauritania</a></b> – <a href="/wiki/Nouakchott" title="Nouakchott">Nouakchott</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Mauritius.svg" class="image" title="Flag of Mauritius"></a>&nbsp;<a href="/wiki/Mauritius" title="Mauritius">Mauritius</a></b> – <a href="/wiki/Port_Louis" title="Port Louis">Port Louis</a></td></tr>
<tr><td>Africa</td><td><i><a href="/wiki/Image:Flag_of_France.svg" class="image" title="Flag of Mayotte"></a>&nbsp;<a href="/wiki/Mayotte" title="Mayotte">Mayotte</a></i> (<a href="/wiki/French_overseas_territory" title="French overseas territory">overseas territory of France</a>) – <a href="/wiki/Mamoudzou" title="Mamoudzou">Mamoudzou</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Morocco.svg" class="image" title="Flag of Morocco"></a>&nbsp;<a href="/wiki/Morocco" title="Morocco">Morocco</a></b> – <a href="/wiki/Rabat" title="Rabat">Rabat</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Mozambique.svg" class="image" title="Flag of Mozambique"></a>&nbsp;<a href="/wiki/Mozambique" title="Mozambique">Mozambique</a></b> – <a href="/wiki/Maputo" title="Maputo">Maputo</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Namibia.svg" class="image" title="Flag of Namibia"></a>&nbsp;<a href="/wiki/Namibia" title="Namibia">Namibia</a></b> – <a href="/wiki/Windhoek" title="Windhoek">Windhoek</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Niger.svg" class="image" title="Flag of Niger"></a>&nbsp;<a href="/wiki/Niger" title="Niger">Niger</a></b> – <a href="/wiki/Niamey" title="Niamey">Niamey</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Nigeria.svg" class="image" title="Flag of Nigeria"></a>&nbsp;<a href="/wiki/Nigeria" title="Nigeria">Nigeria</a></b> – <a href="/wiki/Abuja" title="Abuja">Abuja</a></td></tr>
<tr><td>Africa</td><td><i><a href="/wiki/Image:Flag_of_France.svg" class="image" title="Flag of Réunion"></a>&nbsp;<a href="/wiki/R%C3%A9union" title="Réunion">Réunion</a></i> (<a href="/wiki/French_overseas_territory" title="French overseas territory">overseas department of France</a>) – <a href="/wiki/Saint-Denis%2C_R%C3%A9union" title="Saint-Denis, Réunion">Saint-Denis</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Rwanda.svg" class="image" title="Flag of Rwanda"></a>&nbsp;<a href="/wiki/Rwanda" title="Rwanda">Rwanda</a></b> – <a href="/wiki/Kigali" title="Kigali">Kigali</a></td></tr>
<tr><td>Africa</td><td><i><a href="/wiki/Image:Flag_of_Saint_Helena.svg" class="image" title="Flag of Saint Helena"></a>&nbsp;<a href="/wiki/Saint_Helena" title="Saint Helena">Saint Helena</a></i> (<a href="/wiki/British_overseas_territory" title="British overseas territory">overseas territory of the United Kingdom</a>) – <a href="/wiki/Jamestown%2C_Saint_Helena" title="Jamestown, Saint Helena">Jamestown</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Sao_Tome_and_Principe.svg" class="image" title="Flag of São Tomé and Príncipe"></a>&nbsp;<a href="/wiki/S%C3%A3o_Tom%C3%A9_and_Pr%C3%ADncipe" title="São Tomé and Príncipe">Sao Tome and Principe</a></b> – <a href="/wiki/S%C3%A3o_Tom%C3%A9" title="São Tomé">São Tomé</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Senegal.svg" class="image" title="Flag of Senegal"></a>&nbsp;<a href="/wiki/Senegal" title="Senegal">Senegal</a></b> – <a href="/wiki/Dakar" title="Dakar">Dakar</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_the_Seychelles.svg" class="image" title="Flag of the Seychelles"></a>&nbsp;<a href="/wiki/Seychelles" title="Seychelles">Seychelles</a></b> – <a href="/wiki/Victoria%2C_Seychelles" title="Victoria, Seychelles">Victoria</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Sierra_Leone.svg" class="image" title="Flag of Sierra Leone"></a>&nbsp;<a href="/wiki/Sierra_Leone" title="Sierra Leone">Sierra Leone</a></b> – <a href="/wiki/Freetown" title="Freetown">Freetown</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Somalia.svg" class="image" title="Flag of Somalia"></a>&nbsp;<a href="/wiki/Somalia" title="Somalia">Somalia</a></b> – <a href="/wiki/Mogadishu" title="Mogadishu">Mogadishu</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_South_Africa.svg" class="image" title="Flag of South Africa"></a>&nbsp;<a href="/wiki/South_Africa" title="South Africa">South Africa</a></b> – <a href="/wiki/Pretoria" title="Pretoria">Pretoria</a> (administrative), <a href="/wiki/Cape_Town" title="Cape Town">Cape Town</a> (legislative), <a href="/wiki/Bloemfontein" title="Bloemfontein">Bloemfontein</a> (judicial)</td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Sudan.svg" class="image" title="Flag of Sudan"></a>&nbsp;<a href="/wiki/Sudan" title="Sudan">Sudan</a></b> – <a href="/wiki/Khartoum" title="Khartoum">Khartoum</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Swaziland.svg" class="image" title="Flag of Swaziland"></a>&nbsp;<a href="/wiki/Swaziland" title="Swaziland">Swaziland</a></b> – <a href="/wiki/Mbabane" title="Mbabane">Mbabane</a> (administrative), <a href="/wiki/Lobamba" title="Lobamba">Lobamba</a> (royal and legislative)</td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Tanzania.svg" class="image" title="Flag of Tanzania"></a>&nbsp;<a href="/wiki/Tanzania" title="Tanzania">Tanzania</a></b> – <a href="/wiki/Dodoma" title="Dodoma">Dodoma</a> (seat of government at <a href="/wiki/Dar_es_Salaam" title="Dar es Salaam">Dar es Salaam</a>)</td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Togo.svg" class="image" title="Flag of Togo"></a>&nbsp;<a href="/wiki/Togo" title="Togo">Togo</a></b> – <a href="/wiki/Lom%C3%A9" title="Lomé">Lomé</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Tunisia.svg" class="image" title="Flag of Tunisia"></a>&nbsp;<a href="/wiki/Tunisia" title="Tunisia">Tunisia</a></b> – <a href="/wiki/Tunis" title="Tunis">Tunis</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Uganda.svg" class="image" title="Flag of Uganda"></a>&nbsp;<a href="/wiki/Uganda" title="Uganda">Uganda</a></b> – <a href="/wiki/Kampala" title="Kampala">Kampala</a></td></tr>
<tr><td>Africa</td><td><i><b><a href="/wiki/Image:Flag_of_Western_Sahara.svg" class="image" title="Flag of Western Sahara"></a>&nbsp;<a href="/wiki/Western_Sahara" title="Western Sahara">Western Sahara</a></b></i> – <a href="/wiki/El_Aai%C3%BAn" title="El Aaiún">El Aaiún</a> (unofficial)</td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Zambia.svg" class="image" title="Flag of Zambia"></a>&nbsp;<a href="/wiki/Zambia" title="Zambia">Zambia</a></b> – <a href="/wiki/Lusaka" title="Lusaka">Lusaka</a></td></tr>
<tr><td>Africa</td><td><b><a href="/wiki/Image:Flag_of_Zimbabwe.svg" class="image" title="Flag of Zimbabwe"></a>&nbsp;<a href="/wiki/Zimbabwe" title="Zimbabwe">Zimbabwe</a></b> – <a href="/wiki/Harare" title="Harare">Harare</a></td></tr>
 
<!-- Eurasia: Asia -->
 
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Afghanistan.svg" class="image" title="Flag of Afghanistan"></a>&nbsp;<a href="/wiki/Afghanistan" title="Afghanistan">Afghanistan</a></b> – <a href="/wiki/Kabul" title="Kabul">Kabul</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Armenia.svg" class="image" title="Flag of Armenia"></a>&nbsp;<a href="/wiki/Armenia" title="Armenia">Armenia</a></b><sup id="_ref-europe_0" class="reference"><a href="#_note-europe" title="">[2]</a></sup> – <a href="/wiki/Yerevan" title="Yerevan">Yerevan</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Azerbaijan.svg" class="image" title="Flag of Azerbaijan"></a>&nbsp;<a href="/wiki/Azerbaijan" title="Azerbaijan">Azerbaijan</a></b><sup id="_ref-europe_1" class="reference"><a href="#_note-europe" title="">[2]</a></sup> – <a href="/wiki/Baku" title="Baku">Baku</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Bahrain.svg" class="image" title="Flag of Bahrain"></a>&nbsp;<a href="/wiki/Bahrain" title="Bahrain">Bahrain</a></b> – <a href="/wiki/Manama" title="Manama">Manama</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Bangladesh.svg" class="image" title="Flag of Bangladesh"></a>&nbsp;<a href="/wiki/Bangladesh" title="Bangladesh">Bangladesh</a></b> – <a href="/wiki/Dhaka" title="Dhaka">Dhaka</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Bhutan.svg" class="image" title="Flag of Bhutan"></a>&nbsp;<a href="/wiki/Bhutan" title="Bhutan">Bhutan</a></b> – <a href="/wiki/Thimphu" title="Thimphu">Thimphu</a></td></tr>
<tr><td>Asia</td><td><i><a href="/wiki/Image:Flag_of_the_British_Indian_Ocean_Territory.svg" class="image" title="Flag of British Indian Ocean Territory"></a>&nbsp;<a href="/wiki/British_Indian_Ocean_Territory" title="British Indian Ocean Territory">British Indian Ocean Territory</a></i><sup id="_ref-1" class="reference"><a href="#_note-1" title="">[3]</a></sup> (<a href="/wiki/British_overseas_territory" title="British overseas territory">overseas territory of the United Kingdom</a>)</td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Brunei.svg" class="image" title="Flag of Brunei"></a>&nbsp;<a href="/wiki/Brunei" title="Brunei">Brunei</a></b> – <a href="/wiki/Bandar_Seri_Begawan" title="Bandar Seri Begawan">Bandar Seri Begawan</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Cambodia.svg" class="image" title="Flag of Cambodia"></a>&nbsp;<a href="/wiki/Cambodia" title="Cambodia">Cambodia</a></b> – <a href="/wiki/Phnom_Penh" title="Phnom Penh">Phnom Penh</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_the_People%27s_Republic_of_China.svg" class="image" title="Flag of the People's Republic of China"></a>&nbsp;<a href="/wiki/People%27s_Republic_of_China" title="People's Republic of China">China, People's Republic of</a></b> – <a href="/wiki/Beijing" title="Beijing">Beijing</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_the_Republic_of_China.svg" class="image" title="Flag of the Republic of China"></a>&nbsp;<a href="/wiki/Republic_of_China" title="Republic of China">China, Republic of</a></b> (commonly known as <b>Taiwan</b>) – <a href="/wiki/Taipei" title="Taipei">Taipei</a></td></tr>
<tr><td>Asia</td><td><i><a href="/wiki/Image:Flag_of_Christmas_Island.svg" class="image" title="Flag of Christmas Island"></a>&nbsp;<a href="/wiki/Christmas_Island" title="Christmas Island">Christmas Island</a></i><sup id="_ref-australia_0" class="reference"><a href="#_note-australia" title="">[4]</a></sup> (overseas territory of Australia)</td></tr>
<tr><td>Asia</td><td><i><a href="/wiki/Image:Flag_of_Australia.svg" class="image" title="Flag of the Cocos (Keeling) Islands"></a>&nbsp;<a href="/wiki/Cocos_%28Keeling%29_Islands" title="Cocos (Keeling) Islands">Cocos (Keeling) Islands</a></i><sup id="_ref-australia_1" class="reference"><a href="#_note-australia" title="">[4]</a></sup> (overseas territory of Australia)</td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Cyprus.svg" class="image" title="Flag of Cyprus"></a>&nbsp;<a href="/wiki/Cyprus" title="Cyprus">Cyprus</a></b><sup id="_ref-europe_2" class="reference"><a href="#_note-europe" title="">[2]</a></sup> – <a href="/wiki/Nicosia" title="Nicosia">Nicosia</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Georgia.svg" class="image" title="Flag of Georgia (country)"></a>&nbsp;<a href="/wiki/Georgia_%28country%29" title="Georgia (country)">Georgia</a></b><sup id="_ref-europe_3" class="reference"><a href="#_note-europe" title="">[2]</a></sup> – <a href="/wiki/Tbilisi" title="Tbilisi">Tbilisi</a></td></tr>
<tr><td>Asia</td><td><i><a href="/wiki/Image:Flag_of_Hong_Kong.svg" class="image" title="Flag of Hong Kong"></a>&nbsp;<a href="/wiki/Hong_Kong" title="Hong Kong">Hong Kong</a></i> (<a href="/wiki/Special_administrative_region_%28People%27s_Republic_of_China%29" title="Special administrative region (People's Republic of China)">special administrative region of the People's Republic of China</a>)</td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_India.svg" class="image" title="Flag of India"></a>&nbsp;<a href="/wiki/India" title="India">India</a></b> – <a href="/wiki/New_Delhi" title="New Delhi">New Delhi</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Indonesia.svg" class="image" title="Flag of Indonesia"></a>&nbsp;<a href="/wiki/Indonesia" title="Indonesia">Indonesia</a></b> – <a href="/wiki/Jakarta" title="Jakarta">Jakarta</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Iran.svg" class="image" title="Flag of Iran"></a>&nbsp;<a href="/wiki/Iran" title="Iran">Iran</a></b> – <a href="/wiki/Tehran" title="Tehran">Tehran</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Iraq.svg" class="image" title="Flag of Iraq"></a>&nbsp;<a href="/wiki/Iraq" title="Iraq">Iraq</a></b> – <a href="/wiki/Baghdad" title="Baghdad">Baghdad</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Israel.svg" class="image" title="Flag of Israel"></a>&nbsp;<a href="/wiki/Israel" title="Israel">Israel</a></b> – <a href="/wiki/Jerusalem" title="Jerusalem">Jerusalem</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Japan.svg" class="image" title="Flag of Japan"></a>&nbsp;<a href="/wiki/Japan" title="Japan">Japan</a></b> – <a href="/wiki/Tokyo" title="Tokyo">Tokyo</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Jordan.svg" class="image" title="Flag of Jordan"></a>&nbsp;<a href="/wiki/Jordan" title="Jordan">Jordan</a></b> – <a href="/wiki/Amman" title="Amman">Amman</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Kazakhstan.svg" class="image" title="Flag of Kazakhstan"></a>&nbsp;<a href="/wiki/Kazakhstan" title="Kazakhstan">Kazakhstan</a></b> – <a href="/wiki/Astana" title="Astana">Astana</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_North_Korea.svg" class="image" title="Flag of North Korea"></a>&nbsp;<a href="/wiki/North_Korea" title="North Korea">Korea, Democratic People's Republic of</a></b> (commonly known as <b>North Korea</b>) – <a href="/wiki/Pyongyang" title="Pyongyang">Pyongyang</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_South_Korea.svg" class="image" title="Flag of South Korea"></a>&nbsp;<a href="/wiki/South_Korea" title="South Korea">Korea, Republic of</a></b> (commonly known as <b>South Korea</b>) – <a href="/wiki/Seoul" title="Seoul">Seoul</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Kuwait.svg" class="image" title="Flag of Kuwait"></a>&nbsp;<a href="/wiki/Kuwait" title="Kuwait">Kuwait</a></b> – <a href="/wiki/Kuwait_City" title="Kuwait City">Kuwait City</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Kyrgyzstan.svg" class="image" title="Flag of Kyrgyzstan"></a>&nbsp;<a href="/wiki/Kyrgyzstan" title="Kyrgyzstan">Kyrgyzstan</a></b> – <a href="/wiki/Bishkek" title="Bishkek">Bishkek</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Laos.svg" class="image" title="Flag of Laos"></a>&nbsp;<a href="/wiki/Laos" title="Laos">Laos</a></b> – <a href="/wiki/Vientiane" title="Vientiane">Vientiane</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Lebanon.svg" class="image" title="Flag of Lebanon"></a>&nbsp;<a href="/wiki/Lebanon" title="Lebanon">Lebanon</a></b> – <a href="/wiki/Beirut" title="Beirut">Beirut</a></td></tr>
<tr><td>Asia</td><td><i><a href="/wiki/Image:Flag_of_Macau.svg" class="image" title="Flag of Macau"></a>&nbsp;<a href="/wiki/Macau" title="Macau">Macau</a></i> (<a href="/wiki/Special_administrative_region_%28People%27s_Republic_of_China%29" title="Special administrative region (People's Republic of China)">special administrative region of the People's Republic of China</a>)</td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Malaysia.svg" class="image" title="Flag of Malaysia"></a>&nbsp;<a href="/wiki/Malaysia" title="Malaysia">Malaysia</a></b> – <a href="/wiki/Kuala_Lumpur" title="Kuala Lumpur">Kuala Lumpur</a> (seat of government at <a href="/wiki/Putrajaya" title="Putrajaya">Putrajaya</a>)</td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Maldives.svg" class="image" title="Flag of the Maldives"></a>&nbsp;<a href="/wiki/Maldives" title="Maldives">Maldives</a></b> – <a href="/wiki/Mal%C3%A9" title="Malé">Malé</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Mongolia.svg" class="image" title="Flag of Mongolia"></a>&nbsp;<a href="/wiki/Mongolia" title="Mongolia">Mongolia</a></b> – <a href="/wiki/Ulaanbaatar" title="Ulaanbaatar">Ulaanbaatar</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Myanmar.svg" class="image" title="Flag of Myanmar"></a>&nbsp;<a href="/wiki/Myanmar" title="Myanmar">Myanmar</a></b> (formerly known as <b>Burma</b>) – <a href="/wiki/Naypyidaw" title="Naypyidaw">Naypyidaw</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Nepal.svg" class="image" title="Flag of Nepal"></a>&nbsp;<a href="/wiki/Nepal" title="Nepal">Nepal</a></b> – <a href="/wiki/Kathmandu" title="Kathmandu">Kathmandu</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Oman.svg" class="image" title="Flag of Oman"></a>&nbsp;<a href="/wiki/Oman" title="Oman">Oman</a></b> – <a href="/wiki/Muscat%2C_Oman" title="Muscat, Oman">Muscat</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Pakistan.svg" class="image" title="Flag of Pakistan"></a>&nbsp;<a href="/wiki/Pakistan" title="Pakistan">Pakistan</a></b> – <a href="/wiki/Islamabad" title="Islamabad">Islamabad</a></td></tr>
<tr><td>Asia</td><td><i><b><a href="/wiki/Image:Flag_of_Palestine.svg" class="image" title="Palestinian flag"></a>&nbsp;<a href="/wiki/Palestinian_territories" title="Palestinian territories">Palestinian territories</a></b></i> (collectively the territories of the <a href="/wiki/West_Bank" title="West Bank">West Bank</a> and the <a href="/wiki/Gaza_Strip" title="Gaza Strip">Gaza Strip</a>)</td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_the_Philippines.svg" class="image" title="Flag of the Philippines"></a>&nbsp;<a href="/wiki/Philippines" title="Philippines">Philippines</a></b> – <a href="/wiki/Manila" title="Manila">Manila</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Qatar.svg" class="image" title="Flag of Qatar"></a>&nbsp;<a href="/wiki/Qatar" title="Qatar">Qatar</a></b> – <a href="/wiki/Doha" title="Doha">Doha</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Saudi_Arabia.svg" class="image" title="Flag of Saudi Arabia"></a>&nbsp;<a href="/wiki/Saudi_Arabia" title="Saudi Arabia">Saudi Arabia</a></b> – <a href="/wiki/Riyadh" title="Riyadh">Riyadh</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Singapore.svg" class="image" title="Flag of Singapore"></a>&nbsp;<a href="/wiki/Singapore" title="Singapore">Singapore</a></b> – Singapore<sup id="_ref-city-state_0" class="reference"><a href="#_note-city-state" title="">[5]</a></sup></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Sri_Lanka.svg" class="image" title="Flag of Sri Lanka"></a>&nbsp;<a href="/wiki/Sri_Lanka" title="Sri Lanka">Sri Lanka</a></b> – <a href="/wiki/Sri_Jayawardenepura" title="Sri Jayawardenepura">Sri Jayawardenepura</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Syria.svg" class="image" title="Flag of Syria"></a>&nbsp;<a href="/wiki/Syria" title="Syria">Syria</a></b> – <a href="/wiki/Damascus" title="Damascus">Damascus</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Tajikistan.svg" class="image" title="Flag of Tajikistan"></a>&nbsp;<a href="/wiki/Tajikistan" title="Tajikistan">Tajikistan</a></b> – <a href="/wiki/Dushanbe" title="Dushanbe">Dushanbe</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Thailand.svg" class="image" title="Flag of Thailand"></a>&nbsp;<a href="/wiki/Thailand" title="Thailand">Thailand</a></b> – <a href="/wiki/Bangkok" title="Bangkok">Bangkok</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_East_Timor.svg" class="image" title="Flag of East Timor"></a>&nbsp;<a href="/wiki/East_Timor" title="East Timor">Timor-Leste</a></b> (commonly known as <b>East Timor</b>) – <a href="/wiki/Dili" title="Dili">Dili</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Turkey.svg" class="image" title="Flag of Turkey"></a>&nbsp;<a href="/wiki/Turkey" title="Turkey">Turkey</a></b><sup id="_ref-europe_4" class="reference"><a href="#_note-europe" title="">[2]</a></sup> – <a href="/wiki/Ankara" title="Ankara">Ankara</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Turkmenistan.svg" class="image" title="Flag of Turkmenistan"></a>&nbsp;<a href="/wiki/Turkmenistan" title="Turkmenistan">Turkmenistan</a></b> – <a href="/wiki/Ashgabat" title="Ashgabat">Ashgabat</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_the_United_Arab_Emirates.svg" class="image" title="Flag of the United Arab Emirates"></a>&nbsp;<a href="/wiki/United_Arab_Emirates" title="United Arab Emirates">United Arab Emirates</a></b> – <a href="/wiki/Abu_Dhabi" title="Abu Dhabi">Abu Dhabi</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Uzbekistan.svg" class="image" title="Flag of Uzbekistan"></a>&nbsp;<a href="/wiki/Uzbekistan" title="Uzbekistan">Uzbekistan</a></b> – <a href="/wiki/Tashkent" title="Tashkent">Tashkent</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Vietnam.svg" class="image" title="Flag of Vietnam"></a>&nbsp;<a href="/wiki/Vietnam" title="Vietnam">Vietnam</a></b> – <a href="/wiki/Hanoi" title="Hanoi">Hanoi</a></td></tr>
<tr><td>Asia</td><td><b><a href="/wiki/Image:Flag_of_Yemen.svg" class="image" title="Flag of Yemen"></a>&nbsp;<a href="/wiki/Yemen" title="Yemen">Yemen</a></b> – <a href="/wiki/Sana%27a" title="Sana'a">Sana'a</a></td></tr>
 
<!-- Eurasia: Europe -->
 
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Albania.svg" class="image" title="Flag of Albania"></a>&nbsp;<a href="/wiki/Albania" title="Albania">Albania</a></b> – <a href="/wiki/Tirana" title="Tirana">Tirana</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Andorra.svg" class="image" title="Flag of Andorra"></a>&nbsp;<a href="/wiki/Andorra" title="Andorra">Andorra</a></b> – <a href="/wiki/Andorra_la_Vella" title="Andorra la Vella">Andorra la Vella</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Austria.svg" class="image" title="Flag of Austria"></a>&nbsp;<a href="/wiki/Austria" title="Austria">Austria</a></b> – <a href="/wiki/Vienna" title="Vienna">Vienna</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Belarus.svg" class="image" title="Flag of Belarus"></a>&nbsp;<a href="/wiki/Belarus" title="Belarus">Belarus</a></b> – <a href="/wiki/Minsk" title="Minsk">Minsk</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Belgium_%28civil%29.svg" class="image" title="Flag of Belgium"></a>&nbsp;<a href="/wiki/Belgium" title="Belgium">Belgium</a></b> – <a href="/wiki/Brussels" title="Brussels">Brussels</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Bosnia_and_Herzegovina.svg" class="image" title="Flag of Bosnia and Herzegovina"></a>&nbsp;<a href="/wiki/Bosnia_and_Herzegovina" title="Bosnia and Herzegovina">Bosnia and Herzegovina</a></b> – <a href="/wiki/Sarajevo" title="Sarajevo">Sarajevo</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Bulgaria.svg" class="image" title="Flag of Bulgaria"></a>&nbsp;<a href="/wiki/Bulgaria" title="Bulgaria">Bulgaria</a></b> – <a href="/wiki/Sofia" title="Sofia">Sofia</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Croatia.svg" class="image" title="Flag of Croatia"></a>&nbsp;<a href="/wiki/Croatia" title="Croatia">Croatia</a></b> – <a href="/wiki/Zagreb" title="Zagreb">Zagreb</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_the_Czech_Republic.svg" class="image" title="Flag of the Czech Republic"></a>&nbsp;<a href="/wiki/Czech_Republic" title="Czech Republic">Czech Republic</a></b> – <a href="/wiki/Prague" title="Prague">Prague</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Denmark.svg" class="image" title="Flag of Denmark"></a>&nbsp;<a href="/wiki/Denmark" title="Denmark">Denmark</a></b> – <a href="/wiki/Copenhagen" title="Copenhagen">Copenhagen</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Estonia.svg" class="image" title="Flag of Estonia"></a>&nbsp;<a href="/wiki/Estonia" title="Estonia">Estonia</a></b> – <a href="/wiki/Tallinn" title="Tallinn">Tallinn</a></td></tr>
<tr><td>Europe</td><td><i><a href="/wiki/Image:Flag_of_the_Faroe_Islands.svg" class="image" title="Flag of the Faroe Islands"></a>&nbsp;<a href="/wiki/Faroe_Islands" title="Faroe Islands">Faroe Islands</a></i> (overseas territory of Denmark) – <a href="/wiki/T%C3%B3rshavn" title="Tórshavn">Tórshavn</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Finland.svg" class="image" title="Flag of Finland"></a>&nbsp;<a href="/wiki/Finland" title="Finland">Finland</a></b> – <a href="/wiki/Helsinki" title="Helsinki">Helsinki</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_France.svg" class="image" title="Flag of France"></a>&nbsp;<a href="/wiki/France" title="France">France</a></b> – <a href="/wiki/Paris" title="Paris">Paris</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Germany.svg" class="image" title="Flag of Germany"></a>&nbsp;<a href="/wiki/Germany" title="Germany">Germany</a></b> – <a href="/wiki/Berlin" title="Berlin">Berlin</a></td></tr>
<tr><td>Europe</td><td><i><a href="/wiki/Image:Flag_of_Gibraltar.svg" class="image" title="Flag of Gibraltar"></a>&nbsp;<a href="/wiki/Gibraltar" title="Gibraltar">Gibraltar</a></i> (<a href="/wiki/British_overseas_territory" title="British overseas territory">overseas territory of the United Kingdom</a>) – Gibraltar<sup id="_ref-city-state_1" class="reference"><a href="#_note-city-state" title="">[5]</a></sup></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Greece.svg" class="image" title="Flag of Greece"></a>&nbsp;<a href="/wiki/Greece" title="Greece">Greece</a></b> – <a href="/wiki/Athens" title="Athens">Athens</a></td></tr>
<tr><td>Europe</td><td><i><a href="/wiki/Image:Flag_of_Guernsey.svg" class="image" title="Flag of Guernsey"></a>&nbsp;<a href="/wiki/Guernsey" title="Guernsey">Guernsey</a></i> (<a href="/wiki/Crown_dependency" title="Crown dependency">British crown dependency</a>) – <a href="/wiki/Saint_Peter_Port" title="Saint Peter Port">Saint Peter Port</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Hungary.svg" class="image" title="Flag of Hungary"></a>&nbsp;<a href="/wiki/Hungary" title="Hungary">Hungary</a></b> – <a href="/wiki/Budapest" title="Budapest">Budapest</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Iceland.svg" class="image" title="Flag of Iceland"></a>&nbsp;<a href="/wiki/Iceland" title="Iceland">Iceland</a></b> – <a href="/wiki/Reykjav%C3%ADk" title="Reykjavík">Reykjavík</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Ireland.svg" class="image" title="Flag of Ireland"></a>&nbsp;<a href="/wiki/Republic_of_Ireland" title="Republic of Ireland">Ireland</a></b> – <a href="/wiki/Dublin" title="Dublin">Dublin</a></td></tr>
<tr><td>Europe</td><td><i><a href="/wiki/Image:Flag_of_the_Isle_of_Man.svg" class="image" title="Flag of the Isle of Man"></a>&nbsp;<a href="/wiki/Isle_of_Man" title="Isle of Man">Isle of Man</a></i> (<a href="/wiki/Crown_dependency" title="Crown dependency">British crown dependency</a>) – <a href="/wiki/Douglas%2C_Isle_of_Man" title="Douglas, Isle of Man">Douglas</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Italy.svg" class="image" title="Flag of Italy"></a>&nbsp;<a href="/wiki/Italy" title="Italy">Italy</a></b> – <a href="/wiki/Rome" title="Rome">Rome</a></td></tr>
<tr><td>Europe</td><td><i><a href="/wiki/Image:Flag_of_Jersey.svg" class="image" title="Flag of Jersey"></a>&nbsp;<a href="/wiki/Jersey" title="Jersey">Jersey</a></i> (<a href="/wiki/Crown_dependency" title="Crown dependency">British crown dependency</a>) – <a href="/wiki/Saint_Helier" title="Saint Helier">Saint Helier</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Latvia.svg" class="image" title="Flag of Latvia"></a>&nbsp;<a href="/wiki/Latvia" title="Latvia">Latvia</a></b> – <a href="/wiki/Riga" title="Riga">Riga</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Liechtenstein.svg" class="image" title="Flag of Liechtenstein"></a>&nbsp;<a href="/wiki/Liechtenstein" title="Liechtenstein">Liechtenstein</a></b> – <a href="/wiki/Vaduz" title="Vaduz">Vaduz</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Lithuania.svg" class="image" title="Flag of Lithuania"></a>&nbsp;<a href="/wiki/Lithuania" title="Lithuania">Lithuania</a></b> – <a href="/wiki/Vilnius" title="Vilnius">Vilnius</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Luxembourg.svg" class="image" title="Flag of Luxembourg"></a>&nbsp;<a href="/wiki/Luxembourg" title="Luxembourg">Luxembourg</a></b> – <a href="/wiki/Luxembourg%2C_Luxembourg" title="Luxembourg, Luxembourg">Luxembourg</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Macedonia.svg" class="image" title="Flag of the Republic of Macedonia"></a>&nbsp;<a href="/wiki/Republic_of_Macedonia" title="Republic of Macedonia">Macedonia</a></b> – <a href="/wiki/Skopje" title="Skopje">Skopje</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Malta.svg" class="image" title="Flag of Malta"></a>&nbsp;<a href="/wiki/Malta" title="Malta">Malta</a></b> – <a href="/wiki/Valletta" title="Valletta">Valletta</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Moldova.svg" class="image" title="Flag of Moldova"></a>&nbsp;<a href="/wiki/Moldova" title="Moldova">Moldova</a></b> – <a href="/wiki/Chi%C5%9Fin%C4%83u" title="Chişinău">Chişinău</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Monaco.svg" class="image" title="Flag of Monaco"></a>&nbsp;<a href="/wiki/Monaco" title="Monaco">Monaco</a></b> – Monaco<sup id="_ref-city-state_2" class="reference"><a href="#_note-city-state" title="">[5]</a></sup></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Montenegro.svg" class="image" title="Flag of Montenegro"></a>&nbsp;<a href="/wiki/Montenegro" title="Montenegro">Montenegro</a></b> – <a href="/wiki/Podgorica" title="Podgorica">Podgorica</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_the_Netherlands.svg" class="image" title="Flag of the Netherlands"></a>&nbsp;<a href="/wiki/Netherlands" title="Netherlands">Netherlands</a></b> – <a href="/wiki/Amsterdam" title="Amsterdam">Amsterdam</a> (seat of government at <a href="/wiki/The_Hague" title="The Hague">The Hague</a>)</td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Norway.svg" class="image" title="Flag of Norway"></a>&nbsp;<a href="/wiki/Norway" title="Norway">Norway</a></b> – <a href="/wiki/Oslo" title="Oslo">Oslo</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Poland.svg" class="image" title="Flag of Poland"></a>&nbsp;<a href="/wiki/Poland" title="Poland">Poland</a></b> – <a href="/wiki/Warsaw" title="Warsaw">Warsaw</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Portugal.svg" class="image" title="Flag of Portugal"></a>&nbsp;<a href="/wiki/Portugal" title="Portugal">Portugal</a></b> – <a href="/wiki/Lisbon" title="Lisbon">Lisbon</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Romania.svg" class="image" title="Flag of Romania"></a>&nbsp;<a href="/wiki/Romania" title="Romania">Romania</a></b> – <a href="/wiki/Bucharest" title="Bucharest">Bucharest</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Russia.svg" class="image" title="Flag of Russia"></a>&nbsp;<a href="/wiki/Russia" title="Russia">Russia</a></b><sup id="_ref-2" class="reference"><a href="#_note-2" title="">[6]</a></sup> – <a href="/wiki/Moscow" title="Moscow">Moscow</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_San_Marino.svg" class="image" title="Flag of San Marino"></a>&nbsp;<a href="/wiki/San_Marino" title="San Marino">San Marino</a></b> – <a href="/wiki/San_Marino%2C_San_Marino" title="San Marino, San Marino">San Marino</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Serbia.svg" class="image" title="Flag of Serbia"></a>&nbsp;<a href="/wiki/Serbia" title="Serbia">Serbia</a></b> – <a href="/wiki/Belgrade" title="Belgrade">Belgrade</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Slovakia.svg" class="image" title="Flag of Slovakia"></a>&nbsp;<a href="/wiki/Slovakia" title="Slovakia">Slovakia</a></b> – <a href="/wiki/Bratislava" title="Bratislava">Bratislava</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Slovenia.svg" class="image" title="Flag of Slovenia"></a>&nbsp;<a href="/wiki/Slovenia" title="Slovenia">Slovenia</a></b> – <a href="/wiki/Ljubljana" title="Ljubljana">Ljubljana</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Spain.svg" class="image" title="Flag of Spain"></a>&nbsp;<a href="/wiki/Spain" title="Spain">Spain</a></b> – <a href="/wiki/Madrid" title="Madrid">Madrid</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Sweden.svg" class="image" title="Flag of Sweden"></a>&nbsp;<a href="/wiki/Sweden" title="Sweden">Sweden</a></b> – <a href="/wiki/Stockholm" title="Stockholm">Stockholm</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Switzerland.svg" class="image" title="Flag of Switzerland"></a>&nbsp;<a href="/wiki/Switzerland" title="Switzerland">Switzerland</a></b> – <a href="/wiki/Berne" title="Berne">Berne</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_Ukraine.svg" class="image" title="Flag of Ukraine"></a>&nbsp;<a href="/wiki/Ukraine" title="Ukraine">Ukraine</a></b> – <a href="/wiki/Kiev" title="Kiev">Kiev</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_the_United_Kingdom.svg" class="image" title="Flag of the United Kingdom"></a>&nbsp;<a href="/wiki/United_Kingdom" title="United Kingdom">United Kingdom</a></b> – <a href="/wiki/London" title="London">London</a></td></tr>
<tr><td>Europe</td><td><b><a href="/wiki/Image:Flag_of_the_Vatican_City.svg" class="image" title="Flag of the Vatican City"></a>&nbsp;<a href="/wiki/Vatican_City" title="Vatican City">Vatican City</a></b> – Vatican City<sup id="_ref-city-state_3" class="reference"><a href="#_note-city-state" title="">[5]</a></sup></td></tr>
 
<!-- Americas: North_America -->
 
<tr><td>North America</td><td><i><a href="/wiki/Image:Flag_of_Anguilla.svg" class="image" title="Flag of Anguilla"></a>&nbsp;<a href="/wiki/Anguilla" title="Anguilla">Anguilla</a></i> (<a href="/wiki/British_overseas_territory" title="British overseas territory">overseas territory of the United Kingdom</a>) – <a href="/wiki/The_Valley%2C_Anguilla" title="The Valley, Anguilla">The Valley</a></td></tr>
<tr><td>North America</td><td><b><a href="/wiki/Image:Flag_of_Antigua_and_Barbuda.svg" class="image" title="Flag of Antigua and Barbuda"></a>&nbsp;<a href="/wiki/Antigua_and_Barbuda" title="Antigua and Barbuda">Antigua and Barbuda</a></b> – <a href="/wiki/Saint_John%27s%2C_Antigua_and_Barbuda" title="Saint John's, Antigua and Barbuda">Saint John's</a></td></tr>
<tr><td>North America</td><td><i><a href="/wiki/Image:Flag_of_Aruba.svg" class="image" title="Flag of Aruba"></a>&nbsp;<a href="/wiki/Aruba" title="Aruba">Aruba</a></i> (overseas country in the <a href="/wiki/Kingdom_of_the_Netherlands" title="Kingdom of the Netherlands">Kingdom of the Netherlands</a>) – <a href="/wiki/Oranjestad%2C_Aruba" title="Oranjestad, Aruba">Oranjestad</a></td></tr>
<tr><td>North America</td><td><b><a href="/wiki/Image:Flag_of_the_Bahamas.svg" class="image" title="Flag of the Bahamas"></a>&nbsp;<a href="/wiki/The_Bahamas" title="The Bahamas">Bahamas</a></b> – <a href="/wiki/Nassau%2C_Bahamas" title="Nassau, Bahamas">Nassau</a></td></tr>
<tr><td>North America</td><td><b><a href="/wiki/Image:Flag_of_Barbados.svg" class="image" title="Flag of Barbados"></a>&nbsp;<a href="/wiki/Barbados" title="Barbados">Barbados</a></b> – <a href="/wiki/Bridgetown" title="Bridgetown">Bridgetown</a></td></tr>
<tr><td>North America</td><td><b><a href="/wiki/Image:Flag_of_Belize.svg" class="image" title="Flag of Belize"></a>&nbsp;<a href="/wiki/Belize" title="Belize">Belize</a></b> – <a href="/wiki/Belmopan" title="Belmopan">Belmopan</a></td></tr>
<tr><td>North America</td><td><i><a href="/wiki/Image:Flag_of_Bermuda.svg" class="image" title="Flag of Bermuda"></a>&nbsp;<a href="/wiki/Bermuda" title="Bermuda">Bermuda</a></i> (<a href="/wiki/British_overseas_territory" title="British overseas territory">overseas territory of the United Kingdom</a>) – <a href="/wiki/Hamilton%2C_Bermuda" title="Hamilton, Bermuda">Hamilton</a></td></tr>
<tr><td>North America</td><td><i><a href="/wiki/Image:Flag_of_the_British_Virgin_Islands.svg" class="image" title="Flag of the British Virgin Islands"></a>&nbsp;<a href="/wiki/British_Virgin_Islands" title="British Virgin Islands">British Virgin Islands</a></i> (<a href="/wiki/British_overseas_territory" title="British overseas territory">overseas territory of the United Kingdom</a>) – <a href="/wiki/Road_Town" title="Road Town">Road Town</a></td></tr>
<tr><td>North America</td><td><b><a href="/wiki/Image:Flag_of_Canada.svg" class="image" title="Flag of Canada"></a>&nbsp;<a href="/wiki/Canada" title="Canada">Canada</a></b> – <a href="/wiki/Ottawa" title="Ottawa">Ottawa</a></td></tr>
<tr><td>North America</td><td><i><a href="/wiki/Image:Flag_of_the_Cayman_Islands.svg" class="image" title="Flag of Cayman Islands"></a>&nbsp;<a href="/wiki/Cayman_Islands" title="Cayman Islands">Cayman Islands</a></i> (<a href="/wiki/British_overseas_territory" title="British overseas territory">overseas territory of the United Kingdom</a>) – <a href="/wiki/George_Town%2C_Cayman_Islands" title="George Town, Cayman Islands">George Town</a></td></tr>
<tr><td>North America</td><td><i><a href="/wiki/Image:Flag_of_France.svg" class="image" title="Flag of France"></a> <a href="/wiki/Clipperton_Island" title="Clipperton Island">Clipperton Island</a></i> (<a href="/wiki/French_overseas_territory" title="French overseas territory">overseas territory of France</a>)</td></tr>
<tr><td>North America</td><td><b><a href="/wiki/Image:Flag_of_Costa_Rica.svg" class="image" title="Flag of Costa Rica"></a>&nbsp;<a href="/wiki/Costa_Rica" title="Costa Rica">Costa Rica</a></b> – <a href="/wiki/San_Jos%C3%A9%2C_Costa_Rica" title="San José, Costa Rica">San José</a></td></tr>
<tr><td>North America</td><td><b><a href="/wiki/Image:Flag_of_Cuba.svg" class="image" title="Flag of Cuba"></a>&nbsp;<a href="/wiki/Cuba" title="Cuba">Cuba</a></b> – <a href="/wiki/Havana" title="Havana">Havana</a></td></tr>
<tr><td>North America</td><td><b><a href="/wiki/Image:Flag_of_Dominica.svg" class="image" title="Flag of Dominica"></a>&nbsp;<a href="/wiki/Dominica" title="Dominica">Dominica</a></b> – <a href="/wiki/Roseau" title="Roseau">Roseau</a></td></tr>
<tr><td>North America</td><td><b><a href="/wiki/Image:Flag_of_the_Dominican_Republic.svg" class="image" title="Flag of the Dominican Republic"></a>&nbsp;<a href="/wiki/Dominican_Republic" title="Dominican Republic">Dominican Republic</a></b> – <a href="/wiki/Santo_Domingo" title="Santo Domingo">Santo Domingo</a></td></tr>
<tr><td>North America</td><td><b><a href="/wiki/Image:Flag_of_El_Salvador.svg" class="image" title="Flag of El Salvador"></a>&nbsp;<a href="/wiki/El_Salvador" title="El Salvador">El Salvador</a></b> – <a href="/wiki/San_Salvador" title="San Salvador">San Salvador</a></td></tr>
<tr><td>North America</td><td><i><a href="/wiki/Image:Flag_of_Greenland.svg" class="image" title="Flag of Greenland"></a>&nbsp;<a href="/wiki/Greenland" title="Greenland">Greenland</a></i> (overseas territory of Denmark) – <a href="/wiki/Nuuk" title="Nuuk">Nuuk</a></td></tr>
<tr><td>North America</td><td><b><a href="/wiki/Image:Flag_of_Grenada.svg" class="image" title="Flag of Grenada"></a>&nbsp;<a href="/wiki/Grenada" title="Grenada">Grenada</a></b> – <a href="/wiki/Saint_George%27s%2C_Grenada" title="Saint George's, Grenada">Saint George's</a></td></tr>
<tr><td>North America</td><td><i><a href="/wiki/Image:Flag_of_France.svg" class="image" title="Flag of Guadeloupe"></a>&nbsp;<a href="/wiki/Guadeloupe" title="Guadeloupe">Guadeloupe</a></i> (<a href="/wiki/French_overseas_territory" title="French overseas territory">overseas department of France</a>) – <a href="/wiki/Basse-Terre" title="Basse-Terre">Basse-Terre</a></td></tr>
<tr><td>North America</td><td><b><a href="/wiki/Image:Flag_of_Guatemala.svg" class="image" title="Flag of Guatemala"></a>&nbsp;<a href="/wiki/Guatemala" title="Guatemala">Guatemala</a></b> – <a href="/wiki/Guatemala_City" title="Guatemala City">Guatemala City</a></td></tr>
<tr><td>North America</td><td><b><a href="/wiki/Image:Flag_of_Haiti.svg" class="image" title="Flag of Haiti"></a>&nbsp;<a href="/wiki/Haiti" title="Haiti">Haiti</a></b> – <a href="/wiki/Port-au-Prince" title="Port-au-Prince">Port-au-Prince</a></td></tr>
<tr><td>North America</td><td><b><a href="/wiki/Image:Flag_of_Honduras.svg" class="image" title="Flag of Honduras"></a>&nbsp;<a href="/wiki/Honduras" title="Honduras">Honduras</a></b> – <a href="/wiki/Tegucigalpa" title="Tegucigalpa">Tegucigalpa</a></td></tr>
<tr><td>North America</td><td><b><a href="/wiki/Image:Flag_of_Jamaica.svg" class="image" title="Flag of Jamaica"></a>&nbsp;<a href="/wiki/Jamaica" title="Jamaica">Jamaica</a></b> – <a href="/wiki/Kingston%2C_Jamaica" title="Kingston, Jamaica">Kingston</a></td></tr>
<tr><td>North America</td><td><i><a href="/wiki/Image:Flag_of_France.svg" class="image" title="Flag of Martinique"></a>&nbsp;<a href="/wiki/Martinique" title="Martinique">Martinique</a></i> (<a href="/wiki/French_overseas_territory" title="French overseas territory">overseas department of France</a>) – <a href="/wiki/Fort-de-France" title="Fort-de-France">Fort-de-France</a></td></tr>
<tr><td>North America</td><td><b><a href="/wiki/Image:Flag_of_Mexico.svg" class="image" title="Flag of Mexico"></a>&nbsp;<a href="/wiki/Mexico" title="Mexico">Mexico</a></b> – <a href="/wiki/Mexico_City" title="Mexico City">Mexico City</a></td></tr>
<tr><td>North America</td><td><i><a href="/wiki/Image:Flag_of_Montserrat.svg" class="image" title="Flag of Montserrat"></a>&nbsp;<a href="/wiki/Montserrat" title="Montserrat">Montserrat</a></i> (<a href="/wiki/British_overseas_territory" title="British overseas territory">overseas territory of the United Kingdom</a>) – <a href="/wiki/Plymouth%2C_Montserrat" title="Plymouth, Montserrat">Plymouth</a> (seat of government at <a href="/wiki/Brades" title="Brades">Brades</a>)</td></tr>
<tr><td>North America</td><td><i><a href="/wiki/Image:Flag_of_the_United_States.svg" class="image" title="Flag of Navassa Island"></a>&nbsp;<a href="/wiki/Navassa_Island" title="Navassa Island">Navassa Island</a></i> (<a href="/wiki/Insular_area" title="Insular area">overseas territory of the United States</a>)</td></tr>
<tr><td>North America</td><td><i><a href="/wiki/Image:Flag_of_the_Netherlands_Antilles.svg" class="image" title="Flag of the Netherlands Antilles"></a>&nbsp;<a href="/wiki/Netherlands_Antilles" title="Netherlands Antilles">Netherlands Antilles</a></i> (overseas country in the <a href="/wiki/Kingdom_of_the_Netherlands" title="Kingdom of the Netherlands">Kingdom of the Netherlands</a>) – <a href="/wiki/Willemstad%2C_Netherlands_Antilles" title="Willemstad, Netherlands Antilles">Willemstad</a></td></tr>
<tr><td>North America</td><td><b><a href="/wiki/Image:Flag_of_Nicaragua.svg" class="image" title="Flag of Nicaragua"></a>&nbsp;<a href="/wiki/Nicaragua" title="Nicaragua">Nicaragua</a></b> – <a href="/wiki/Managua" title="Managua">Managua</a></td></tr>
<tr><td>North America</td><td><b><a href="/wiki/Image:Flag_of_Panama.svg" class="image" title="Flag of Panama"></a>&nbsp;<a href="/wiki/Panama" title="Panama">Panama</a></b> – <a href="/wiki/Panama_City" title="Panama City">Panama City</a></td></tr>
<tr><td>North America</td><td><i><a href="/wiki/Image:Flag_of_Puerto_Rico.svg" class="image" title="Flag of Puerto Rico"></a>&nbsp;<a href="/wiki/Puerto_Rico" title="Puerto Rico">Puerto Rico</a></i> (<a href="/wiki/Insular_area" title="Insular area">overseas territory of the United States</a>) – <a href="/wiki/San_Juan%2C_Puerto_Rico" title="San Juan, Puerto Rico">San Juan</a></td></tr>
<tr><td>North America</td><td><i><a href="/wiki/Image:Flag_of_France.svg" class="image" title="Flag of Saint Barthelemy"></a>&nbsp;<a href="/wiki/Saint_Barthelemy" title="Saint Barthelemy">Saint Barthelemy</a></i> (<a href="/wiki/French_overseas_territory" title="French overseas territory">overseas territory of France</a>) – <a href="/wiki/Gustavia%2C_Saint_Barthelemy" title="Gustavia, Saint Barthelemy">Gustavia</a></td></tr>
<tr><td>North America</td><td><b><a href="/wiki/Image:Flag_of_Saint_Kitts_and_Nevis.svg" class="image" title="Flag of Saint Kitts and Nevis"></a>&nbsp;<a href="/wiki/Saint_Kitts_and_Nevis" title="Saint Kitts and Nevis">Saint Kitts and Nevis</a></b> – <a href="/wiki/Basseterre" title="Basseterre">Basseterre</a></td></tr>
<tr><td>North America</td><td><b><a href="/wiki/Image:Flag_of_Saint_Lucia.svg" class="image" title="Flag of Saint Lucia"></a>&nbsp;<a href="/wiki/Saint_Lucia" title="Saint Lucia">Saint Lucia</a></b> – <a href="/wiki/Castries" title="Castries">Castries</a></td></tr>
<tr><td>North America</td><td><i><a href="/wiki/Image:Flag_of_France.svg" class="image" title="Flag of Saint Martin (France)"></a>&nbsp;<a href="/wiki/Saint_Martin_%28France%29" title="Saint Martin (France)">Saint Martin</a></i> (<a href="/wiki/French_overseas_territory" title="French overseas territory">overseas territory of France</a>) – <a href="/wiki/Marigot%2C_Saint_Martin" title="Marigot, Saint Martin">Marigot</a></td></tr>
<tr><td>North America</td><td><i><a href="/wiki/Image:Flag_of_France.svg" class="image" title="Flag of Saint Pierre and Miquelon"></a>&nbsp;<a href="/wiki/Saint_Pierre_and_Miquelon" title="Saint Pierre and Miquelon">Saint Pierre and Miquelon</a></i> (<a href="/wiki/French_overseas_territory" title="French overseas territory">overseas territory of France</a>) – <a href="/wiki/Saint-Pierre%2C_Saint_Pierre_and_Miquelon" title="Saint-Pierre, Saint Pierre and Miquelon">Saint-Pierre</a></td></tr>
<tr><td>North America</td><td><b><a href="/wiki/Image:Flag_of_Saint_Vincent_and_the_Grenadines.svg" class="image" title="Flag of Saint Vincent and the Grenadines"></a>&nbsp;<a href="/wiki/Saint_Vincent_and_the_Grenadines" title="Saint Vincent and the Grenadines">Saint Vincent and the Grenadines</a></b> – <a href="/wiki/Kingstown" title="Kingstown">Kingstown</a></td></tr>
<tr><td>North America</td><td><b><a href="/wiki/Image:Flag_of_Trinidad_and_Tobago.svg" class="image" title="Flag of Trinidad and Tobago"></a>&nbsp;<a href="/wiki/Trinidad_and_Tobago" title="Trinidad and Tobago">Trinidad and Tobago</a></b> – <a href="/wiki/Port_of_Spain" title="Port of Spain">Port of Spain</a></td></tr>
<tr><td>North America</td><td><i><a href="/wiki/Image:Flag_of_the_Turks_and_Caicos_Islands.svg" class="image" title="Flag of the Turks and Caicos Islands"></a>&nbsp;<a href="/wiki/Turks_and_Caicos_Islands" title="Turks and Caicos Islands">Turks and Caicos Islands</a></i> (<a href="/wiki/British_overseas_territory" title="British overseas territory">overseas territory of the United Kingdom</a>) – <a href="/wiki/Cockburn_Town" title="Cockburn Town">Cockburn Town</a></td></tr>
<tr><td>North America</td><td><b><a href="/wiki/Image:Flag_of_the_United_States.svg" class="image" title="Flag of the United States"></a>&nbsp;<a href="/wiki/United_States" title="United States">United States</a></b> – <a href="/wiki/Washington%2C_D.C." title="Washington, D.C.">Washington, D.C.</a></td></tr>
<tr><td>North America</td><td><i><a href="/wiki/Image:Flag_of_the_United_States_Virgin_Islands.svg" class="image" title="Flag of the United States Virgin Islands"></a>&nbsp;<a href="/wiki/United_States_Virgin_Islands" title="United States Virgin Islands">United States Virgin Islands</a></i> (<a href="/wiki/Insular_area" title="Insular area">overseas territory of the United States</a>) – <a href="/wiki/Charlotte_Amalie%2C_United_States_Virgin_Islands" title="Charlotte Amalie, United States Virgin Islands">Charlotte Amalie</a></td></tr>
 
<!-- Americas: South America -->
 
<tr><td>South America</td><td><b><a href="/wiki/Image:Flag_of_Argentina.svg" class="image" title="Flag of Argentina"></a>&nbsp;<a href="/wiki/Argentina" title="Argentina">Argentina</a></b> – <a href="/wiki/Buenos_Aires" title="Buenos Aires">Buenos Aires</a></td></tr>
<tr><td>South America</td><td><b><a href="/wiki/Image:Flag_of_Bolivia.svg" class="image" title="Flag of Bolivia"></a>&nbsp;<a href="/wiki/Bolivia" title="Bolivia">Bolivia</a></b> – <a href="/wiki/Sucre" title="Sucre">Sucre</a> (seat of government at <a href="/wiki/La_Paz" title="La Paz">La Paz</a>)</td></tr>
<tr><td>South America</td><td><b><a href="/wiki/Image:Flag_of_Brazil.svg" class="image" title="Flag of Brazil"></a>&nbsp;<a href="/wiki/Brazil" title="Brazil">Brazil</a></b> – <a href="/wiki/Bras%C3%ADlia" title="Brasília">Brasília</a></td></tr>
<tr><td>South America</td><td><b><a href="/wiki/Image:Flag_of_Chile.svg" class="image" title="Flag of Chile"></a>&nbsp;<a href="/wiki/Chile" title="Chile">Chile</a></b> – <a href="/wiki/Santiago%2C_Chile" title="Santiago, Chile">Santiago</a></td></tr>
<tr><td>South America</td><td><b><a href="/wiki/Image:Flag_of_Colombia.svg" class="image" title="Flag of Colombia"></a>&nbsp;<a href="/wiki/Colombia" title="Colombia">Colombia</a></b> – <a href="/wiki/Bogot%C3%A1" title="Bogotá">Bogotá</a></td></tr>
<tr><td>South America</td><td><b><a href="/wiki/Image:Flag_of_Ecuador.svg" class="image" title="Flag of Ecuador"></a>&nbsp;<a href="/wiki/Ecuador" title="Ecuador">Ecuador</a></b> – <a href="/wiki/Quito" title="Quito">Quito</a></td></tr>
<tr><td>South America</td><td><i><a href="/wiki/Image:Flag_of_the_Falkland_Islands.svg" class="image" title="Flag of the Falkland Islands"></a>&nbsp;<a href="/wiki/Falkland_Islands" title="Falkland Islands">Falkland Islands</a></i> (<a href="/wiki/British_overseas_territory" title="British overseas territory">overseas territory of the United Kingdom</a>) – <a href="/wiki/Stanley%2C_Falkland_Islands" title="Stanley, Falkland Islands">Stanley</a></td></tr>
<tr><td>South America</td><td><i><a href="/wiki/Image:Flag_of_France.svg" class="image" title="Flag of French Guiana"></a>&nbsp;<a href="/wiki/French_Guiana" title="French Guiana">French Guiana</a></i> (<a href="/wiki/French_overseas_territory" title="French overseas territory">overseas department of France</a>) – <a href="/wiki/Cayenne" title="Cayenne">Cayenne</a></td></tr>
<tr><td>South America</td><td><b><a href="/wiki/Image:Flag_of_Guyana.svg" class="image" title="Flag of Guyana"></a>&nbsp;<a href="/wiki/Guyana" title="Guyana">Guyana</a></b> – <a href="/wiki/Georgetown%2C_Guyana" title="Georgetown, Guyana">Georgetown</a></td></tr>
<tr><td>South America</td><td><b><a href="/wiki/Image:Flag_of_Paraguay.svg" class="image" title="Flag of Paraguay"></a>&nbsp;<a href="/wiki/Paraguay" title="Paraguay">Paraguay</a></b> – <a href="/wiki/Asunci%C3%B3n" title="Asunción">Asunción</a></td></tr>
<tr><td>South America</td><td><b><a href="/wiki/Image:Flag_of_Peru.svg" class="image" title="Flag of Peru"></a>&nbsp;<a href="/wiki/Peru" title="Peru">Peru</a></b> – <a href="/wiki/Lima" title="Lima">Lima</a></td></tr>
<tr><td>South America</td><td><b><a href="/wiki/Image:Flag_of_Suriname.svg" class="image" title="Flag of Suriname"></a>&nbsp;<a href="/wiki/Suriname" title="Suriname">Suriname</a></b> – <a href="/wiki/Paramaribo" title="Paramaribo">Paramaribo</a></td></tr>
<tr><td>South America</td><td><b><a href="/wiki/Image:Flag_of_Uruguay.svg" class="image" title="Flag of Uruguay"></a>&nbsp;<a href="/wiki/Uruguay" title="Uruguay">Uruguay</a></b> – <a href="/wiki/Montevideo" title="Montevideo">Montevideo</a></td></tr>
<tr><td>South America</td><td><b><a href="/wiki/Image:Flag_of_Venezuela.svg" class="image" title="Flag of Venezuela"></a>&nbsp;<a href="/wiki/Venezuela" title="Venezuela">Venezuela</a></b> – <a href="/wiki/Caracas" title="Caracas">Caracas</a></td></tr>
 
<!-- Americas: Oceania -->
 
<tr><td>Oceania</td><td><i><a href="/wiki/Image:Flag_of_American_Samoa.svg" class="image" title="Flag of American Samoa"></a>&nbsp;<a href="/wiki/American_Samoa" title="American Samoa">American Samoa</a></i> (<a href="/wiki/Insular_area" title="Insular area">overseas territory of the United States</a>) – <a href="/wiki/Pago_Pago" title="Pago Pago">Pago Pago</a> (seat of government at <a href="/wiki/Fagatogo" title="Fagatogo">Fagatogo</a>)</td></tr>
<tr><td>Oceania</td><td><b><a href="/wiki/Image:Flag_of_Australia.svg" class="image" title="Flag of Australia"></a>&nbsp;<a href="/wiki/Australia" title="Australia">Australia</a></b> – <a href="/wiki/Canberra" title="Canberra">Canberra</a></td></tr>
<tr><td>Oceania</td><td><i><a href="/wiki/Image:Flag_of_the_United_States.svg" class="image" title="Flag of the United States"></a> <a href="/wiki/Baker_Island" title="Baker Island">Baker Island</a></i> (<a href="/wiki/Insular_area" title="Insular area">overseas territory of the United States</a>)</td></tr>
<tr><td>Oceania</td><td><i><a href="/wiki/Image:Flag_of_the_Cook_Islands.svg" class="image" title="Flag of the Cook Islands"></a>&nbsp;<a href="/wiki/Cook_Islands" title="Cook Islands">Cook Islands</a></i> (<a href="/wiki/Associated_state" title="Associated state">territory in free association</a> with New Zealand) – <a href="/wiki/Avarua" title="Avarua">Avarua</a></td></tr>
<tr><td>Oceania</td><td><b><a href="/wiki/Image:Flag_of_Fiji.svg" class="image" title="Flag of Fiji"></a>&nbsp;<a href="/wiki/Fiji" title="Fiji">Fiji</a></b> – <a href="/wiki/Suva" title="Suva">Suva</a></td></tr>
<tr><td>Oceania</td><td><i><a href="/wiki/Image:Flag_of_French_Polynesia.svg" class="image" title="Flag of French Polynesia"></a>&nbsp;<a href="/wiki/French_Polynesia" title="French Polynesia">French Polynesia</a></i> (<a href="/wiki/French_overseas_territory" title="French overseas territory">overseas territory of France</a>) – <a href="/wiki/Papeete" title="Papeete">Papeete</a></td></tr>
<tr><td>Oceania</td><td><i><a href="/wiki/Image:Flag_of_Guam.svg" class="image" title="Flag of Guam"></a>&nbsp;<a href="/wiki/Guam" title="Guam">Guam</a></i> (<a href="/wiki/Insular_area" title="Insular area">overseas territory of the United States</a>) – <a href="/wiki/Hag%C3%A5t%C3%B1a" title="Hagåtña">Hagåtña</a></td></tr>
<tr><td>Oceania</td><td><i><a href="/wiki/Image:Flag_of_the_United_States.svg" class="image" title="Flag of the United States"></a> <a href="/wiki/Howland_Island" title="Howland Island">Howland Island</a></i> (<a href="/wiki/Insular_area" title="Insular area">overseas territory of the United States</a>)</td></tr>
<tr><td>Oceania</td><td><i><a href="/wiki/Image:Flag_of_the_United_States.svg" class="image" title="Flag of the United States"></a> <a href="/wiki/Jarvis_Island" title="Jarvis Island">Jarvis Island</a></i> (<a href="/wiki/Insular_area" title="Insular area">overseas territory of the United States</a>)</td></tr>
<tr><td>Oceania</td><td><i><a href="/wiki/Image:Flag_of_the_United_States.svg" class="image" title="Flag of the United States"></a> <a href="/wiki/Johnston_Atoll" title="Johnston Atoll">Johnston Atoll</a></i> (<a href="/wiki/Insular_area" title="Insular area">overseas territory of the United States</a>)</td></tr>
<tr><td>Oceania</td><td><i><a href="/wiki/Image:Flag_of_the_United_States.svg" class="image" title="Flag of the United States"></a> <a href="/wiki/Kingman_Reef" title="Kingman Reef">Kingman Reef</a></i> (<a href="/wiki/Insular_area" title="Insular area">overseas territory of the United States</a>)</td></tr>
<tr><td>Oceania</td><td><b><a href="/wiki/Image:Flag_of_Kiribati.svg" class="image" title="Flag of Kiribati"></a>&nbsp;<a href="/wiki/Kiribati" title="Kiribati">Kiribati</a></b> – <a href="/wiki/South_Tarawa" title="South Tarawa">South Tarawa</a></td></tr>
<tr><td>Oceania</td><td><b><a href="/wiki/Image:Flag_of_the_Marshall_Islands.svg" class="image" title="Flag of the Marshall Islands"></a>&nbsp;<a href="/wiki/Marshall_Islands" title="Marshall Islands">Marshall Islands</a></b> – <a href="/wiki/Majuro" title="Majuro">Majuro</a></td></tr>
<tr><td>Oceania</td><td><b><a href="/wiki/Image:Flag_of_Micronesia.svg" class="image" title="Flag of the Federated States of Micronesia"></a>&nbsp;<a href="/wiki/Federated_States_of_Micronesia" title="Federated States of Micronesia">Micronesia</a></b> – <a href="/wiki/Palikir" title="Palikir">Palikir</a></td></tr>
<tr><td>Oceania</td><td><i><a href="/wiki/Image:Flag_of_the_United_States.svg" class="image" title="Flag of the United States"></a> <a href="/wiki/Midway_Atoll" title="Midway Atoll">Midway Atoll</a></i> (<a href="/wiki/Insular_area" title="Insular area">overseas territory of the United States</a>)</td></tr>
<tr><td>Oceania</td><td><b><a href="/wiki/Image:Flag_of_Nauru.svg" class="image" title="Flag of Nauru"></a>&nbsp;<a href="/wiki/Nauru" title="Nauru">Nauru</a></b> – no official capital (seat of government at <a href="/wiki/Yaren" title="Yaren">Yaren</a>)</td></tr>
<tr><td>Oceania</td><td><i><a href="/wiki/Image:Flag_of_France.svg" class="image" title="Flag of New Caledonia"></a>&nbsp;<a href="/wiki/New_Caledonia" title="New Caledonia">New Caledonia</a></i> (<a href="/wiki/French_overseas_territory" title="French overseas territory">overseas territory of France</a>) – <a href="/wiki/Noum%C3%A9a" title="Nouméa">Nouméa</a></td></tr>
<tr><td>Oceania</td><td><b><a href="/wiki/Image:Flag_of_New_Zealand.svg" class="image" title="Flag of New Zealand"></a>&nbsp;<a href="/wiki/New_Zealand" title="New Zealand">New Zealand</a></b> – <a href="/wiki/Wellington" title="Wellington">Wellington</a></td></tr>
<tr><td>Oceania</td><td><i><a href="/wiki/Image:Flag_of_Niue.svg" class="image" title="Flag of Niue"></a>&nbsp;<a href="/wiki/Niue" title="Niue">Niue</a></i> (<a href="/wiki/Associated_state" title="Associated state">territory in free association</a> with New Zealand) – <a href="/wiki/Alofi" title="Alofi">Alofi</a></td></tr>
<tr><td>Oceania</td><td><i><a href="/wiki/Image:Flag_of_Norfolk_Island.svg" class="image" title="Flag of Norfolk Island"></a>&nbsp;<a href="/wiki/Norfolk_Island" title="Norfolk Island">Norfolk Island</a></i> (overseas territory of Australia) – <a href="/wiki/Kingston%2C_Norfolk_Island" title="Kingston, Norfolk Island">Kingston</a></td></tr>
<tr><td>Oceania</td><td><i><a href="/wiki/Image:Flag_of_the_Northern_Mariana_Islands.svg" class="image" title="Flag of the Northern Mariana Islands"></a>&nbsp;<a href="/wiki/Northern_Mariana_Islands" title="Northern Mariana Islands">Northern Mariana Islands</a></i> (<a href="/wiki/Insular_area" title="Insular area">overseas territory of the United States</a>) – <a href="/wiki/Saipan" title="Saipan">Saipan</a></td></tr>
<tr><td>Oceania</td><td><b><a href="/wiki/Image:Flag_of_Palau.svg" class="image" title="Flag of Palau"></a>&nbsp;<a href="/wiki/Palau" title="Palau">Palau</a></b> – <a href="/wiki/Melekeok" title="Melekeok">Melekeok</a></td></tr>
<tr><td>Oceania</td><td><i><a href="/wiki/Image:Flag_of_the_United_States.svg" class="image" title="Flag of the United States"></a> <a href="/wiki/Palmyra_Atoll" title="Palmyra Atoll">Palmyra Atoll</a></i> (<a href="/wiki/Insular_area" title="Insular area">overseas territory of the United States</a>)</td></tr>
<tr><td>Oceania</td><td><b><a href="/wiki/Image:Flag_of_Papua_New_Guinea.svg" class="image" title="Flag of Papua New Guinea"></a>&nbsp;<a href="/wiki/Papua_New_Guinea" title="Papua New Guinea">Papua New Guinea</a></b> – <a href="/wiki/Port_Moresby" title="Port Moresby">Port Moresby</a></td></tr>
<tr><td>Oceania</td><td><i><a href="/wiki/Image:Flag_of_the_Pitcairn_Islands.svg" class="image" title="Flag of the Pitcairn Islands"></a>&nbsp;<a href="/wiki/Pitcairn_Islands" title="Pitcairn Islands">Pitcairn Islands</a></i> (<a href="/wiki/British_overseas_territory" title="British overseas territory">overseas territory of the United Kingdom</a>) – <a href="/wiki/Adamstown%2C_Pitcairn_Island" title="Adamstown, Pitcairn Island">Adamstown</a></td></tr>
<tr><td>Oceania</td><td><b><a href="/wiki/Image:Flag_of_Samoa.svg" class="image" title="Flag of Samoa"></a>&nbsp;<a href="/wiki/Samoa" title="Samoa">Samoa</a></b> – <a href="/wiki/Apia" title="Apia">Apia</a></td></tr>
<tr><td>Oceania</td><td><b><a href="/wiki/Image:Flag_of_the_Solomon_Islands.svg" class="image" title="Flag of the Solomon Islands"></a>&nbsp;<a href="/wiki/Solomon_Islands" title="Solomon Islands">Solomon Islands</a></b> – <a href="/wiki/Honiara" title="Honiara">Honiara</a></td></tr>
<tr><td>Oceania</td><td><i><a href="/wiki/Image:Flag_of_New_Zealand.svg" class="image" title="Flag of Tokelau"></a>&nbsp;<a href="/wiki/Tokelau" title="Tokelau">Tokelau</a></i> (overseas territory of New Zealand) – no official capital (each atoll has its own administrative centre)</td></tr>
<tr><td>Oceania</td><td><b><a href="/wiki/Image:Flag_of_Tonga.svg" class="image" title="Flag of Tonga"></a>&nbsp;<a href="/wiki/Tonga" title="Tonga">Tonga</a></b> – <a href="/wiki/Nuku%27alofa" title="Nuku'alofa">Nuku'alofa</a></td></tr>
<tr><td>Oceania</td><td><b><a href="/wiki/Image:Flag_of_Tuvalu.svg" class="image" title="Flag of Tuvalu"></a>&nbsp;<a href="/wiki/Tuvalu" title="Tuvalu">Tuvalu</a></b> – <a href="/wiki/Funafuti" title="Funafuti">Funafuti</a></td></tr>
<tr><td>Oceania</td><td><b><a href="/wiki/Image:Flag_of_Vanuatu.svg" class="image" title="Flag of Vanuatu"></a>&nbsp;<a href="/wiki/Vanuatu" title="Vanuatu">Vanuatu</a></b> – <a href="/wiki/Port_Vila" title="Port Vila">Port Vila</a></td></tr>
<tr><td>Oceania</td><td><i><a href="/wiki/Image:Flag_of_the_United_States.svg" class="image" title="Flag of the United States"></a> <a href="/wiki/Wake_Island" title="Wake Island">Wake Island</a></i> (<a href="/wiki/Insular_area" title="Insular area">overseas territory of the United States</a>)</td></tr>
<tr><td>Oceania</td><td><i><a href="/wiki/Image:Flag_of_France.svg" class="image" title="Flag of Wallis and Futuna"></a>&nbsp;<a href="/wiki/Wallis_and_Futuna" title="Wallis and Futuna">Wallis and Futuna</a></i> (<a href="/wiki/French_overseas_territory" title="French overseas territory">overseas territory of France</a>) – <a href="/wiki/Mata-Utu" title="Mata-Utu">Mata-Utu</a></td></tr>
 
<tr><td>Antarctica</td><td><i><a href="/wiki/Image:Flag_of_Norway.svg" class="image" title="Flag of Bouvet Island"></a>&nbsp;<a href="/wiki/Bouvet_Island" title="Bouvet Island">Bouvet Island</a></i> (overseas territory of Norway)</td></tr>
<tr><td>Antarctica</td><td><i><a href="/wiki/Image:Flag_of_France.svg" class="image" title="Flag of the French Southern and Antarctic Lands"></a>&nbsp;<a href="/wiki/French_Southern_and_Antarctic_Lands" title="French Southern and Antarctic Lands">French Southern Territories</a></i> (<a href="/wiki/French_overseas_territory" title="French overseas territory">overseas territory of France</a>)</td></tr>
<tr><td>Antarctica</td><td><i><a href="/wiki/Image:Flag_of_Australia.svg" class="image" title="Flag of Heard Island and McDonald Islands"></a>&nbsp;<a href="/wiki/Heard_Island_and_McDonald_Islands" title="Heard Island and McDonald Islands">Heard Island and McDonald Islands</a></i> (overseas territory of Australia)</td></tr>
<tr><td>Antarctica</td><td><i><a href="/wiki/Image:Flag_of_South_Georgia_and_the_South_Sandwich_Islands.svg" class="image" title="Flag of South Georgia and the South Sandwich Islands"></a>&nbsp;<a href="/wiki/South_Georgia_and_the_South_Sandwich_Islands" title="South Georgia and the South Sandwich Islands">South Georgia and the South Sandwich Islands</a></i><sup id="_ref-3" class="reference"><a href="#_note-3" title="">[7]</a></sup> (<a href="/wiki/British_overseas_territory" title="British overseas territory">overseas territory of the United Kingdom</a>)</td></tr>
</table>
 
</body>
</html>
/trunk/api/js/dojo1.0/dijit/demos/i18n/languages.json
New file
0,0 → 1,7045
[
{ type: "language", iso: "aa",
countries: [
{_reference: "DJ"},
{_reference: "ER"},
{_reference: "ET"},
],
name: "Qafar",
},
{ type: "language", iso: "af",
countries: [
{_reference: "NA"},
{_reference: "ZA"},
],
name: "Afrikaans",
"af": "Afrikaans",
"es": "Spaans",
"pt": "Portugees",
"ru": "Russies",
"zh": "Sjinees",
},
{ type: "language", iso: "ak",
countries: [
{_reference: "GH"},
],
},
{ type: "language", iso: "am",
countries: [
{_reference: "ET"},
],
name: "አማርኛ",
"aa": "አፋርኛ",
"ab": "አብሐዚኛ",
"af": "አፍሪቃንስኛ",
"am": "አማርኛ",
"ar": "ዐርቢኛ",
"as": "አሳሜዛዊ",
"ay": "አያማርኛ",
"az": "አዜርባይጃንኛ",
"ba": "ባስኪርኛ",
"be": "ቤላራሻኛ",
"bg": "ቡልጋሪኛ",
"bh": "ቢሃሪ",
"bi": "ቢስላምኛ",
"bn": "በንጋሊኛ",
"bo": "ትበትንኛ",
"br": "ብሬቶንኛ",
"ca": "ካታላንኛ",
"co": "ኮርሲካኛ",
"cs": "ቼክኛ",
"cy": "ወልሽ",
"da": "ዴኒሽ",
"de": "ጀርመን",
"dz": "ድዞንግኻኛ",
"el": "ግሪክኛ",
"en": "እንግሊዝኛ",
"eo": "ኤስፐራንቶ",
"es": "ስፓኒሽ",
"et": "ኤስቶኒአን",
"eu": "ባስክኛ",
"fa": "ፐርሲያኛ",
"fi": "ፊኒሽ",
"fj": "ፊጂኛ",
"fo": "ፋሮኛ",
"fr": "ፈረንሳይኛ",
"fy": "ፍሪስኛ",
"ga": "አይሪሽ",
"gd": "እስኮትስ ጌልክኛ",
"gl": "ጋለጋኛ",
"gn": "ጓራኒኛ",
"gu": "ጉጃርቲኛ",
"ha": "ሃውሳኛ",
"he": "ዕብራስጥ",
"hi": "ሐንድኛ",
"hr": "ክሮሽያንኛ",
"hu": "ሀንጋሪኛ",
"hy": "አርመናዊ",
"ia": "ኢንቴርሊንጓ",
"id": "እንዶኒሲኛ",
"ie": "እንተርሊንግወ",
"ik": "እኑፒያቅኛ",
"is": "አይስላንድኛ",
"it": "ጣሊያንኛ",
"iu": "እኑክቲቱትኛ",
"ja": "ጃፓንኛ",
"jv": "ጃቫንኛ",
"ka": "ጊዮርጊያን",
"kk": "ካዛክኛ",
"kl": "ካላሊሱትኛ",
"km": "ክመርኛ",
"kn": "ካናዳኛ",
"ko": "ኮሪያኛ",
"ks": "ካሽሚርኛ",
"ku": "ኩርድሽኛ",
"ky": "ኪርጊዝኛ",
"la": "ላቲንኛ",
"ln": "ሊንጋላኛ",
"lo": "ላውስኛ",
"lt": "ሊቱአኒያን",
"lv": "ላትቪያን",
"mg": "ማላጋስኛ",
"mi": "ማዮሪኛ",
"mk": "ማከዶኒኛ",
"ml": "ማላያላምኛ",
"mn": "ሞንጎላዊኛ",
"mo": "ሞልዳቫዊና",
"mr": "ማራዚኛ",
"ms": "ማላይኛ",
"mt": "ማልቲስኛ",
"my": "ቡርማኛ",
"na": "ናኡሩ",
"ne": "ኔፓሊኛ",
"nl": "ደች",
"no": "ኖርዌጂያን",
"oc": "ኦኪታንኛ",
"om": "ኦሮምኛ",
"or": "ኦሪያኛ",
"pa": "ፓንጃቢኛ",
"pl": "ፖሊሽ",
"ps": "ፑሽቶኛ",
"pt": "ፖርቱጋሊኛ",
"qu": "ኵቿኛ",
"rm": "ሮማንስ",
"rn": "ሩንዲኛ",
"ro": "ሮማኒያን",
"ru": "ራሽኛ",
"rw": "ኪንያርዋንድኛ",
"sa": "ሳንስክሪትኛ",
"sd": "ሲንድሂኛ",
"sg": "ሳንጎኛ",
"si": "ስንሃልኛ",
"sk": "ስሎቫክኛ",
"sl": "ስሎቪኛ",
"sm": "ሳሞአኛ",
"sn": "ሾናኛ",
"so": "ሱማልኛ",
"sq": "ልቤኒኛ",
"sr": "ሰርቢኛ",
"ss": "ስዋቲኛ",
"st": "ሶዞኛ",
"su": "ሱዳንኛ",
"sv": "ስዊድንኛ",
"sw": "ስዋሂሊኛ",
"ta": "ታሚልኛ",
"te": "ተሉጉኛ",
"tg": "ታጂኪኛ",
"th": "ታይኛ",
"ti": "ትግርኛ",
"tk": "ቱርክመንኛ",
"tl": "ታጋሎገኛ",
"tn": "ጽዋናዊኛ",
"to": "ቶንጋ",
"tr": "ቱርክኛ",
"ts": "ጾንጋኛ",
"tt": "ታታርኛ",
"tw": "ትዊኛ",
"ug": "ኡዊግሁርኛ",
"uk": "ዩክረኒኛ",
"ur": "ኡርዱኛ",
"uz": "ኡዝበክኛ",
"vi": "ቪትናምኛ",
"vo": "ቮላፑክኛ",
"wo": "ዎሎፍኛ",
"xh": "ዞሳኛ",
"yi": "ይዲሻዊኛ",
"yo": "ዮሩባዊኛ",
"za": "ዡዋንግኛ",
"zh": "ቻይንኛ",
"zu": "ዙሉኛ",
},
{ type: "language", iso: "ar",
countries: [
{_reference: "AE"},
{_reference: "BH"},
{_reference: "DZ"},
{_reference: "EG"},
{_reference: "IQ"},
{_reference: "JO"},
{_reference: "KW"},
{_reference: "LB"},
{_reference: "LY"},
{_reference: "MA"},
{_reference: "OM"},
{_reference: "QA"},
{_reference: "SA"},
{_reference: "SD"},
{_reference: "SY"},
{_reference: "TN"},
{_reference: "YE"},
],
name: "العربية",
"aa": "الأفارية",
"ab": "الأبخازية",
"ae": "الأفستية",
"af": "الأفريقية",
"ak": "الأكانية",
"am": "الأمهرية",
"an": "الأراجونية",
"ar": "العربية",
"as": "الأسامية",
"av": "الأفاريكية",
"ay": "الأيمارا",
"az": "الأذرية",
"ba": "الباشكيرية",
"be": "البيلوروسية",
"bg": "البلغارية",
"bh": "البيهارية",
"bi": "البيسلامية",
"bm": "البامبارا",
"bn": "البنغالية",
"bo": "التبتية",
"br": "البريتونية",
"bs": "البوسنية",
"ca": "الكاتالوينية",
"ce": "الشيشانية",
"ch": "التشامورو",
"co": "الكورسيكية",
"cr": "الكرى",
"cs": "التشيكية",
"cu": "سلافية كنسية",
"cv": "التشفاش",
"cy": "الولزية",
"da": "الدانماركية",
"de": "الألمانية",
"dv": "المالديفية",
"dz": "الزونخاية",
"el": "اليونانية",
"en": "الانجليزية",
"eo": "اسبرانتو",
"es": "الأسبانية",
"et": "الأستونية",
"eu": "لغة الباسك",
"fa": "الفارسية",
"ff": "الفلة",
"fi": "الفنلندية",
"fj": "الفيجية",
"fo": "الفارويز",
"fr": "الفرنسية",
"fy": "الفريزيان",
"ga": "الأيرلندية",
"gd": "الغيلية الأسكتلندية",
"gl": "الجاليكية",
"gn": "الجوارانى",
"gu": "الغوجاراتية",
"gv": "المنكية",
"ha": "الهوسا",
"he": "العبرية",
"hi": "الهندية",
"ho": "الهيرى موتو",
"hr": "الكرواتية",
"ht": "الهايتية",
"hu": "الهنغارية",
"hy": "الأرمينية",
"hz": "الهيريرو",
"ia": "اللّغة الوسيطة",
"id": "الأندونيسية",
"ie": "الانترلينج",
"ig": "الايجبو",
"ii": "السيتشيون يى",
"ik": "الاينبياك",
"io": "الايدو",
"is": "الأيسلاندية",
"it": "الايطالية",
"iu": "الاينكتيتت",
"ja": "اليابانية",
"jv": "الجاوية",
"ka": "الجورجية",
"kg": "الكونغو",
"ki": "الكيكيو",
"kj": "الكيونياما",
"kk": "الكازاخستانية",
"kl": "الكالاليست",
"km": "الخميرية",
"kn": "الكانادا",
"ko": "الكورية",
"kr": "الكانيورى",
"ks": "الكاشميرية",
"ku": "الكردية",
"kv": "الكومى",
"kw": "الكورنية",
"ky": "القيرغستانية",
"la": "اللاتينية",
"lb": "اللوكسمبرجية",
"lg": "الجاندا",
"li": "الليمبرجيشية",
"ln": "اللينجالا",
"lo": "اللاوية",
"lt": "اللتوانية",
"lu": "اللبا-كاتانجا",
"lv": "اللاتفية",
"mg": "المالاجاشية",
"mh": "المارشالية",
"mi": "الماورية",
"mk": "المقدونية",
"ml": "الماليالام",
"mn": "المنغولية",
"mo": "المولدوفية",
"mr": "الماراثى",
"ms": "لغة الملايو",
"mt": "المالطية",
"my": "البورمية",
"na": "النورو",
"nb": "البوكمالية النرويجية",
"nd": "النديبيل الشمالى",
"ne": "النيبالية",
"ng": "الندونجا",
"nl": "الهولندية",
"nn": "النينورسك النرويجي",
"no": "النرويجية",
"nr": "النديبيل الجنوبى",
"nv": "النافاجو",
"ny": "النيانجا، التشيتشوا، التشوا",
"oc": "الأوكيتان (بعد 1500)، بروفينسية",
"oj": "الأوجيبوا",
"om": "الأورومو",
"or": "الأورييا",
"os": "الأوسيتيك",
"pa": "البنجابية",
"pi": "البالية",
"pl": "البولندية",
"ps": "البشتونية",
"pt": "البرتغالية",
"qu": "الكويتشوا",
"rm": "الرهايتو-رومانس",
"rn": "الرندى",
"ro": "الرومانية",
"ru": "الروسية",
"rw": "الكينيارواندا",
"sa": "السنسكريتية",
"sc": "السردينية",
"sd": "السيندى",
"se": "السامي الشمالى",
"sg": "السانجو",
"si": "السريلانكية",
"sk": "السلوفاكية",
"sl": "السلوفانية",
"sm": "الساموائية",
"sn": "الشونا",
"so": "الصومالية",
"sq": "الألبانية",
"sr": "الصربية",
"ss": "السواتى",
"su": "السودانية",
"sv": "السويدية",
"sw": "السواحلية",
"ta": "التاميلية",
"te": "التيلجو",
"tg": "الطاجيكية",
"th": "التايلاندية",
"ti": "التيجرينيا",
"tk": "التركمانية",
"tl": "التاغالوغية",
"tn": "التسوانية",
"to": "تونجا - جزر تونجا",
"tr": "التركية",
"ts": "السونجا",
"tt": "التتارية",
"tw": "التوى",
"ty": "التاهيتية",
"ug": "الأغورية",
"uk": "الأوكرانية",
"ur": "الأردية",
"uz": "الاوزباكية",
"ve": "الفيندا",
"vi": "الفيتنامية",
"wa": "الولونية",
"wo": "الولوف",
"yi": "اليديشية",
"yo": "اليوروبية",
"za": "الزهيونج",
"zh": "الصينية",
},
{ type: "language", iso: "as",
countries: [
{_reference: "IN"},
],
name: "অসমীয়া",
"as": "অসমীয়া",
},
{ type: "language", iso: "az",
countries: [
{_reference: "AZ"},
],
name: "azərbaycanca",
"az": "azərbaycanca",
},
{ type: "language", iso: "be",
countries: [
{_reference: "BY"},
],
name: "Беларускі",
"ar": "арабскі",
"be": "Беларускі",
"de": "нямецкі",
"en": "англійскі",
"es": "іспанскі",
"fr": "французскі",
"hi": "хіндзі",
"it": "італьянскі",
"ja": "японскі",
"pt": "партугальскі",
"ru": "рускі",
"zh": "кітайскі",
},
{ type: "language", iso: "bg",
countries: [
{_reference: "BG"},
],
name: "Български",
"ab": "Абхазски",
"af": "Африканс",
"am": "Амхарски",
"ar": "Арабски",
"av": "Аварски",
"ay": "Аймара",
"az": "Азърбайджански",
"ba": "Башкирски",
"be": "Беларуски",
"bg": "Български",
"bi": "Бислама",
"bn": "Бенгалски",
"bo": "Тибетски",
"br": "Бретонски",
"bs": "Босненски",
"ca": "Каталонски",
"ce": "Чеченски",
"co": "Корсикански",
"cs": "Чешки",
"cu": "Църковно славянски",
"cy": "Уелски",
"da": "Датски",
"de": "Немски",
"dv": "Дивехи",
"el": "Гръцки",
"en": "Английски",
"eo": "Есперанто",
"es": "Испански",
"et": "Естонски",
"eu": "Баски",
"fa": "Персийски",
"fi": "Фински",
"fr": "Френски",
"ga": "Ирландски",
"gd": "Шотландски галски",
"gu": "Гуджарати",
"he": "Иврит",
"hi": "Хинди",
"hr": "Хърватски",
"ht": "Хаитянски",
"hu": "Унгарски",
"hy": "Арменски",
"id": "Индонезийски",
"io": "Идо",
"is": "Исландски",
"it": "Италиански",
"ja": "Японски",
"jv": "Явански",
"ka": "Грузински",
"kg": "Конгоански",
"ki": "кикуйу",
"kk": "Казахски",
"km": "Кхмерски",
"ko": "Корейски",
"ks": "Кашмирски",
"ku": "Кюрдски",
"ky": "Киргизски",
"la": "Латински",
"lb": "Люксембургски",
"lo": "Лаоски",
"lt": "Литовски",
"lv": "Латвийски",
"mg": "Малгашки",
"mi": "Маорски",
"mk": "Македонски",
"ml": "Малаялам",
"mn": "Монголски",
"mo": "Молдовски",
"ms": "Малайски",
"mt": "Малтийски",
"my": "Бирмански",
"ne": "Непалски",
"nl": "Холандски",
"no": "Норвежки",
"ny": "Чинянджа",
"os": "Осетски",
"pa": "Пенджабски",
"pl": "Полски",
"ps": "Пущу",
"pt": "Португалски",
"qu": "Кечуа",
"rm": "Реторомански",
"rn": "Рунди",
"ro": "Румънски",
"ru": "Руски",
"rw": "Киняруанда",
"sa": "Санкскритски",
"sc": "Сардински",
"sg": "Санго",
"sh": "Сърбохърватски",
"si": "Синхалски",
"sk": "Словашки",
"sl": "Словенски",
"sm": "Самоански",
"so": "Сомалийски",
"sq": "Албански",
"sr": "Сръбски",
"ss": "Суази",
"st": "Сесуто",
"sv": "Шведски",
"sw": "Суахили",
"ta": "Тамилски",
"te": "Телугу",
"tg": "Таджикски",
"th": "Таи",
"tk": "Туркменски",
"tr": "Турски",
"tt": "Татарски",
"ty": "Таитянски",
"uk": "Украински",
"ur": "Урду",
"uz": "Узбекски",
"vi": "Виетнамски",
"zh": "Китайски",
"zu": "Зулуски",
},
{ type: "language", iso: "bn",
countries: [
{_reference: "BD"},
{_reference: "IN"},
],
name: "বাংলা",
"bn": "বাংলা",
},
{ type: "language", iso: "bs",
countries: [
{_reference: "BA"},
],
"de": "njemački",
"en": "engleski",
"es": "španjolski",
"fr": "francuski",
"it": "talijanski",
"ja": "japanski",
"pt": "portugalski",
"ru": "ruski",
"zh": "kineski",
},
{ type: "language", iso: "ca",
countries: [
{_reference: "ES"},
],
name: "català",
"aa": "àfar",
"ab": "abkhaz",
"af": "afrikaans",
"am": "amhàric",
"ar": "àrab",
"as": "assamès",
"ay": "aimara",
"az": "àzeri",
"ba": "baixkir",
"be": "bielorús",
"bg": "búlgar",
"bh": "bihari",
"bi": "bislama",
"bn": "bengalí",
"bo": "tibetà",
"br": "bretó",
"ca": "català",
"co": "cors",
"cs": "txec",
"cy": "gal·lès",
"da": "danès",
"de": "alemany",
"dz": "bhutanès",
"el": "grec",
"en": "anglès",
"eo": "esperanto",
"es": "espanyol",
"et": "estonià",
"eu": "basc",
"fa": "persa",
"fi": "finès",
"fj": "fijià",
"fo": "feroès",
"fr": "francès",
"fy": "frisó",
"ga": "irlandès",
"gd": "escocès",
"gl": "gallec",
"gn": "guaraní",
"gu": "gujarati",
"ha": "hausa",
"he": "hebreu",
"hi": "hindi",
"hr": "croat",
"hu": "hongarès",
"hy": "armeni",
"ia": "interlingua",
"id": "indonesi",
"ie": "interlingue",
"ik": "inupiak",
"is": "islandès",
"it": "italià",
"iu": "inuktitut",
"ja": "japonès",
"jv": "javanès",
"ka": "georgià",
"kk": "kazakh",
"kl": "greenlandès",
"km": "cambodjà",
"kn": "kannada",
"ko": "coreà",
"ks": "caixmiri",
"ku": "kurd",
"ky": "kirguís",
"la": "llatí",
"ln": "lingala",
"lo": "laosià",
"lt": "lituà",
"lv": "letó",
"mg": "malgaix",
"mi": "maori",
"mk": "macedoni",
"ml": "malaialam",
"mn": "mongol",
"mo": "moldau",
"mr": "marathi",
"ms": "malai",
"mt": "maltès",
"my": "birmà",
"na": "nauruà",
"ne": "nepalès",
"nl": "neerlandès",
"no": "noruec",
"oc": "occità",
"om": "oromo (afan)",
"or": "oriya",
"pa": "panjabi",
"pl": "polonès",
"ps": "paixto",
"pt": "portuguès",
"qu": "quètxua",
"rm": "retoromànic",
"rn": "kirundi",
"ro": "romanès",
"ru": "rus",
"rw": "kinyarwanda",
"sa": "sànscrit",
"sd": "sindhi",
"sg": "sango",
"sh": "serbo-croat",
"si": "sinhalès",
"sk": "eslovac",
"sl": "eslovè",
"sm": "samoà",
"sn": "shona",
"so": "somali",
"sq": "albanès",
"sr": "serbi",
"ss": "siswati",
"st": "sotho",
"su": "sundanès",
"sv": "suec",
"sw": "swahili",
"ta": "tàmil",
"te": "telugu",
"tg": "tadjik",
"th": "thai",
"ti": "tigrinya",
"tk": "turcman",
"tl": "tagàlog",
"tn": "tswana",
"to": "tonga",
"tr": "turc",
"ts": "tsonga",
"tt": "tàtar",
"tw": "twi",
"ug": "uigur",
"uk": "ucraïnès",
"ur": "urdú",
"uz": "uzbek",
"vi": "vietnamita",
"vo": "volapuk",
"wo": "wòlof",
"xh": "xosa",
"yi": "jiddish",
"yo": "ioruba",
"za": "zhuang",
"zh": "xinés",
"zu": "zulu",
},
{ type: "language", iso: "cs",
countries: [
{_reference: "CZ"},
],
name: "Čeština",
"aa": "Afarština",
"ab": "Abcházština",
"af": "Afrikánština",
"am": "Amharština",
"ar": "Arabština",
"as": "Assaméština",
"ay": "Aymárština",
"az": "Azerbajdžánština",
"ba": "Baskirština",
"be": "Běloruština",
"bg": "Bulharština",
"bh": "Biharština",
"bi": "Bislámština",
"bn": "Bengálština",
"bo": "Tibetština",
"br": "Bretaňština",
"ca": "Katalánština",
"co": "Korsičtina",
"cs": "Čeština",
"cy": "Velština",
"da": "Dánština",
"de": "Němčina",
"dz": "Bhútánština",
"el": "Řečtina",
"en": "Angličtina",
"eo": "Esperanto",
"es": "Španělština",
"et": "Estonština",
"eu": "Baskičtina",
"fa": "Perština",
"fi": "Finština",
"fj": "Fidži",
"fo": "Faerština",
"fr": "Francouzština",
"fy": "Fríština",
"ga": "Irština",
"gd": "Skotská galština",
"gl": "Haličština",
"gn": "Guaranština",
"gu": "Gujaratština",
"gv": "Manština",
"ha": "Hausa",
"he": "Hebrejština",
"hi": "Hindština",
"hr": "Chorvatština",
"hu": "Maďarština",
"hy": "Arménština",
"ia": "Interlingua",
"id": "Indonéština",
"ie": "Interlingue",
"ik": "Inupiakština",
"is": "Islandština",
"it": "Italština",
"iu": "Inuktitutština",
"ja": "Japonština",
"jv": "Javánština",
"ka": "Gruzínština",
"kk": "Kazachština",
"kl": "Grónština",
"km": "Kambodžština",
"kn": "Kannadština",
"ko": "Korejština",
"ks": "Kašmírština",
"ku": "Kurdština",
"ky": "Kirgizština",
"la": "Latina",
"ln": "Lingalština",
"lo": "Laoština",
"lt": "Litevština",
"lv": "Lotyština",
"mg": "Malgaština",
"mi": "Maorština",
"mk": "Makedonština",
"ml": "Malabarština",
"mn": "Mongolština",
"mo": "Moldavština",
"mr": "Marathi",
"ms": "Malajština",
"mt": "Maltština",
"my": "Barmština",
"na": "Nauru",
"ne": "Nepálština",
"no": "Norština",
"oc": "Occitan",
"om": "Oromo (Afan)",
"or": "Oriya",
"pa": "Paňdžábština",
"pl": "Polština",
"ps": "Pashto (Pushto)",
"pt": "Portugalština",
"qu": "Kečuánština",
"rm": "Rétorománština",
"rn": "Kirundi",
"ro": "Rumunština",
"ru": "Ruština",
"rw": "Kinyarwandština",
"sa": "Sanskrt",
"sd": "Sindhi",
"sg": "Sangho",
"sh": "Srbochorvatština",
"si": "Sinhálština",
"sk": "Slovenština",
"sl": "Slovinština",
"sm": "Samoyština",
"sn": "Shona",
"so": "Somálština",
"sq": "Albánština",
"sr": "Srbština",
"ss": "Siswatština",
"st": "Sesotho",
"su": "Sundanština",
"sv": "Švédština",
"sw": "Svahilština",
"ta": "Tamilština",
"te": "Telugština",
"tg": "Tádžičtina",
"th": "Thajština",
"ti": "Tigrinijština",
"tk": "Turkmenština",
"tl": "Tagalog",
"tn": "Setswanština",
"to": "Tonga",
"tr": "Turečtina",
"ts": "Tsonga",
"tt": "Tatarština",
"tw": "Twi",
"ug": "Uighurština",
"uk": "Ukrajinština",
"ur": "Urdština",
"uz": "Uzbečtina",
"vi": "Vietnamština",
"vo": "Volapuk",
"wo": "Wolof",
"xh": "Xhosa",
"yi": "Jidiš",
"yo": "Yoruba",
"za": "Zhuang",
"zh": "Čínština",
"zu": "Zulu",
},
{ type: "language", iso: "cy",
countries: [
{_reference: "GB"},
],
name: "Cymraeg",
"ar": "Arabeg",
"cy": "Cymraeg",
"de": "Almaeneg",
"en": "Saesneg",
"es": "Sbaeneg",
"fr": "Ffrangeg",
"hi": "Hindi",
"it": "Eidaleg",
"ja": "Siapaneeg",
"pt": "Portiwgaleg",
"ru": "Rwsieg",
"zh": "Tseineeg",
},
{ type: "language", iso: "da",
countries: [
{_reference: "DK"},
],
name: "Dansk",
"aa": "afar",
"ab": "abkhasisk",
"ae": "avestan",
"af": "afrikaans",
"ak": "akan",
"am": "amharisk",
"an": "aragonesisk",
"ar": "arabisk",
"as": "assamesisk",
"ay": "Aymara",
"az": "aserbajdsjansk",
"ba": "bashkir",
"be": "hviderussisk",
"bg": "bulgarsk",
"bh": "bihari",
"bi": "bislama",
"bm": "bambara",
"bn": "bengalsk",
"bo": "Tibetansk",
"br": "bretonsk",
"bs": "bosnisk",
"ca": "katalansk",
"ce": "tjetjensk",
"ch": "chamorro",
"co": "Korsikansk",
"cr": "Cree",
"cs": "Tjekkisk",
"cu": "Kirkeslavisk",
"cv": "Chuvash",
"cy": "Walisisk",
"da": "Dansk",
"de": "Tysk",
"dv": "Divehi",
"dz": "Dzongkha",
"ee": "Ewe",
"el": "Græsk",
"en": "Engelsk",
"eo": "Esperanto",
"es": "Spansk",
"et": "Estisk",
"eu": "baskisk",
"fa": "Persisk",
"ff": "Fulah",
"fi": "Finsk",
"fj": "Fijian",
"fo": "Færøsk",
"fr": "Fransk",
"fy": "Frisisk",
"ga": "Irsk",
"gd": "Gælisk (skotsk)",
"gl": "Galicisk",
"gn": "Guarani",
"gu": "Gujaratisk",
"gv": "Manx",
"ha": "Hausa",
"he": "Hebraisk",
"hi": "Hindi",
"ho": "Hiri Motu",
"hr": "Kroatisk",
"ht": "Haitisk",
"hu": "Ungarsk",
"hy": "armensk",
"hz": "Herero",
"ia": "Interlingua",
"id": "Indonesisk",
"ie": "Interlingue",
"ig": "Igbo",
"ii": "Sichuan Yi",
"ik": "Inupiaq",
"io": "Ido",
"is": "Islandsk",
"it": "Italiensk",
"iu": "Inuktitut",
"ja": "Japansk",
"jv": "Javanesisk",
"ka": "Georgisk",
"kg": "Kongo",
"ki": "Kikuyu",
"kj": "Kuanyama",
"kk": "Kasakhisk",
"kl": "Kalaallisut",
"km": "Khmer",
"kn": "Kannaresisk",
"ko": "Koreansk",
"kr": "Kanuri",
"ks": "Kashmiri",
"ku": "Kurdisk",
"kw": "Cornisk",
"ky": "Kirgisisk",
"la": "Latin",
"lb": "Luxembourgsk",
"lg": "Ganda",
"li": "Limburgsk",
"ln": "Lingala",
"lo": "Lao",
"lt": "Litauisk",
"lu": "Luba-Katanga",
"lv": "Lettisk",
"mg": "Malagasy",
"mh": "Marshallese",
"mi": "Maori",
"mk": "Makedonsk",
"ml": "Malayalam",
"mn": "Mongolsk",
"mo": "Moldovisk",
"mr": "Marathisk",
"ms": "Malay",
"mt": "Maltesisk",
"my": "burmesisk",
"na": "Nauru",
"nb": "Norsk Bokmål",
"nd": "Ndebele, Nord",
"ne": "Nepalesisk",
"ng": "Ndonga",
"nl": "Hollandsk",
"nn": "Nynorsk",
"no": "Norsk",
"nr": "Ndebele, Syd",
"nv": "Navajo",
"ny": "Nyanja; Chichewa; Chewa",
"oc": "Occitansk (efter 1500); Provencalsk",
"oj": "Ojibwa",
"om": "Oromo",
"or": "Oriya",
"os": "Ossetisk",
"pa": "Punjabi",
"pi": "Pali",
"pl": "Polsk",
"ps": "Pashto (Pushto)",
"pt": "Portugisisk",
"qu": "Quechua",
"rm": "Rætoromansk",
"rn": "Rundi",
"ro": "Rumænsk",
"ru": "Russisk",
"rw": "Kinyarwanda",
"sa": "Sanskrit",
"sc": "Sardinsk",
"sd": "Sindhi",
"se": "Nordsamisk",
"sg": "Sango",
"sh": "Serbokroatisk",
"si": "Singalesisk",
"sk": "Slovakisk",
"sl": "Slovensk",
"sm": "Samoansk",
"sn": "Shona",
"so": "Somalisk",
"sq": "albansk",
"sr": "Serbisk",
"ss": "Swati",
"st": "Sotho, Southern",
"su": "Sundanesisk",
"sv": "Svensk",
"sw": "Swahili",
"ta": "Tamilsk",
"te": "Telugu",
"tg": "Tajik",
"th": "Thailandsk",
"ti": "Tigrinya",
"tk": "Turkmensk",
"tl": "Tagalog",
"tn": "Tswana",
"to": "Tonga (Tongaøerne)",
"tr": "Tyrkisk",
"ts": "Tsonga",
"tt": "Tatarisk",
"tw": "Twi",
"ty": "Tahitiansk",
"ug": "Uigurisk",
"uk": "Ukrainsk",
"ur": "Urdu",
"uz": "Usbekisk",
"ve": "Venda",
"vi": "Vietnamesisk",
"vo": "Volapük",
"wa": "Vallonsk",
"wo": "Wolof",
"xh": "Xhosa",
"yi": "Jiddisch",
"yo": "Yoruba",
"za": "Zhuang",
"zh": "Kinesisk",
"zu": "Zulu",
},
{ type: "language", iso: "de",
countries: [
{_reference: "AT"},
{_reference: "BE"},
{_reference: "CH"},
{_reference: "DE"},
{_reference: "LI"},
{_reference: "LU"},
],
name: "Deutsch",
"aa": "Afar",
"ab": "Abchasisch",
"ae": "Avestisch",
"af": "Afrikaans",
"ak": "Akan",
"am": "Amharisch",
"an": "Aragonesisch",
"ar": "Arabisch",
"as": "Assamesisch",
"av": "Awarisch",
"ay": "Aymará-Sprache",
"az": "Aserbaidschanisch",
"ba": "Baschkirisch",
"be": "Weißrussisch",
"bg": "Bulgarisch",
"bh": "Biharisch",
"bi": "Bislama",
"bm": "Bambara-Sprache",
"bn": "Bengalisch",
"bo": "Tibetisch",
"br": "Bretonisch",
"bs": "Bosnisch",
"ca": "Katalanisch",
"ce": "Tschetschenisch",
"ch": "Chamorro-Sprache",
"co": "Korsisch",
"cr": "Cree",
"cs": "Tschechisch",
"cu": "Kirchenslawisch",
"cv": "Tschuwaschisch",
"cy": "Kymrisch",
"da": "Dänisch",
"de": "Deutsch",
"dv": "Maledivisch",
"dz": "Bhutanisch",
"ee": "Ewe-Sprache",
"el": "Griechisch",
"en": "Englisch",
"eo": "Esperanto",
"es": "Spanisch",
"et": "Estnisch",
"eu": "Baskisch",
"fa": "Persisch",
"ff": "Ful",
"fi": "Finnisch",
"fj": "Fidschianisch",
"fo": "Färöisch",
"fr": "Französisch",
"fy": "Friesisch",
"ga": "Irisch",
"gd": "Schottisch-Gälisch",
"gl": "Galizisch",
"gn": "Guarani",
"gu": "Gujarati",
"gv": "Manx",
"ha": "Hausa",
"he": "Hebräisch",
"hi": "Hindi",
"ho": "Hiri-Motu",
"hr": "Kroatisch",
"ht": "Kreolisch",
"hu": "Ungarisch",
"hy": "Armenisch",
"hz": "Herero-Sprache",
"ia": "Interlingua",
"id": "Indonesisch",
"ie": "Interlingue",
"ig": "Igbo-Sprache",
"ii": "Sichuan Yi",
"ik": "Inupiak",
"io": "Ido-Sprache",
"is": "Isländisch",
"it": "Italienisch",
"iu": "Inukitut",
"ja": "Japanisch",
"jv": "Javanisch",
"ka": "Georgisch",
"kg": "Kongo",
"ki": "Kikuyu-Sprache",
"kj": "Kwanyama",
"kk": "Kasachisch",
"kl": "Grönländisch",
"km": "Kambodschanisch",
"kn": "Kannada",
"ko": "Koreanisch",
"kr": "Kanuri-Sprache",
"ks": "Kaschmirisch",
"ku": "Kurdisch",
"kv": "Komi-Sprache",
"kw": "Kornisch",
"ky": "Kirgisisch",
"la": "Latein",
"lb": "Luxemburgisch",
"lg": "Ganda-Sprache",
"li": "Limburgisch",
"ln": "Lingala",
"lo": "Laotisch",
"lt": "Litauisch",
"lu": "Luba",
"lv": "Lettisch",
"mg": "Madagassisch",
"mh": "Marschallesisch",
"mi": "Maori",
"mk": "Mazedonisch",
"ml": "Malayalam",
"mn": "Mongolisch",
"mo": "Moldauisch",
"mr": "Marathi",
"ms": "Malaiisch",
"mt": "Maltesisch",
"my": "Birmanisch",
"na": "Nauruisch",
"nb": "Norwegisch Bokmål",
"nd": "Ndebele-Sprache (Nord)",
"ne": "Nepalesisch",
"ng": "Ndonga",
"nl": "Niederländisch",
"nn": "Norwegisch Nynorsk",
"no": "Norwegisch",
"nr": "Ndebele-Sprache (Süd)",
"nv": "Navajo-Sprache",
"ny": "Chewa-Sprache",
"oc": "Okzitanisch",
"oj": "Ojibwa-Sprache",
"om": "Oromo",
"or": "Orija",
"os": "Ossetisch",
"pa": "Pandschabisch",
"pi": "Pali",
"pl": "Polnisch",
"ps": "Afghanisch (Paschtu)",
"pt": "Portugiesisch",
"qu": "Quechua",
"rm": "Rätoromanisch",
"rn": "Rundi-Sprache",
"ro": "Rumänisch",
"ru": "Russisch",
"rw": "Ruandisch",
"sa": "Sanskrit",
"sc": "Sardisch",
"sd": "Sindhi",
"se": "Nord-Samisch",
"sg": "Sango",
"sh": "Serbo-Kroatisch",
"si": "Singhalesisch",
"sk": "Slowakisch",
"sl": "Slowenisch",
"sm": "Samoanisch",
"sn": "Shona",
"so": "Somali",
"sq": "Albanisch",
"sr": "Serbisch",
"ss": "Swazi",
"st": "Süd-Sotho-Sprache",
"su": "Sudanesisch",
"sv": "Schwedisch",
"sw": "Suaheli",
"ta": "Tamilisch",
"te": "Telugu",
"tg": "Tadschikisch",
"th": "Thai",
"ti": "Tigrinja",
"tk": "Turkmenisch",
"tl": "Tagalog",
"tn": "Tswana-Sprache",
"to": "Tongaisch",
"tr": "Türkisch",
"ts": "Tsonga",
"tt": "Tatarisch",
"tw": "Twi",
"ty": "Tahitisch",
"ug": "Uigurisch",
"uk": "Ukrainisch",
"ur": "Urdu",
"uz": "Usbekisch",
"ve": "Venda-Sprache",
"vi": "Vietnamesisch",
"vo": "Volapük",
"wa": "Wallonisch",
"wo": "Wolof",
"xh": "Xhosa",
"yi": "Jiddisch",
"yo": "Joruba",
"za": "Zhuang",
"zh": "Chinesisch",
"zu": "Zulu",
},
{ type: "language", iso: "dv",
countries: [
{_reference: "MV"},
],
name: "ދިވެހިބަސް",
},
{ type: "language", iso: "dz",
countries: [
{_reference: "BT"},
],
name: "རྫོང་ཁ",
},
{ type: "language", iso: "ee",
countries: [
{_reference: "GH"},
{_reference: "TG"},
],
},
{ type: "language", iso: "el",
countries: [
{_reference: "CY"},
{_reference: "GR"},
],
name: "Ελληνικά",
"ar": "Αραβικά",
"be": "Λευκορωσικά",
"bg": "Βουλγαρικά",
"bn": "Μπενγκάλι",
"bo": "Θιβετιανά",
"bs": "Βοσνιακά",
"ca": "Καταλανικά",
"co": "Κορσικανικά",
"cs": "Τσεχικά",
"cy": "Ουαλικά",
"da": "Δανικά",
"de": "Γερμανικά",
"el": "Ελληνικά",
"en": "Αγγλικά",
"es": "Ισπανικά",
"et": "Εσθονικά",
"eu": "Βασκικά",
"fa": "Περσικά",
"fi": "Φινλανδικά",
"fr": "Γαλλικά",
"ga": "Ιρλανδικά",
"gd": "Σκωτικά Κελτικά",
"he": "Εβραϊκά",
"hi": "Χίντι",
"hr": "Κροατικά",
"hu": "Ουγγρικά",
"hy": "Αρμενικά",
"id": "Ινδονησιακά",
"is": "Ισλανδικά",
"it": "Ιταλικά",
"ja": "Ιαπωνικά",
"ka": "Γεωργιανά",
"ko": "Κορεατικά",
"la": "Λατινικά",
"lt": "Λιθουανικά",
"lv": "Λετονικά",
"mk": "Σλαβομακεδονικά",
"mn": "Μογγολικά",
"mo": "Μολδαβικά",
"mt": "Μαλτεζικά",
"nl": "Ολλανδικά",
"no": "Νορβηγικά",
"pl": "Πολωνικά",
"pt": "Πορτογαλικά",
"ro": "Ρουμανικά",
"ru": "Ρωσικά",
"sh": "Σερβοκροατικά",
"sk": "Σλοβακικά",
"sl": "Σλοβενικά",
"sq": "Αλβανικά",
"sr": "Σερβικά",
"sv": "Σουηδικά",
"th": "Ταϊλανδικά",
"tr": "Τουρκικά",
"uk": "Ουκρανικά",
"vi": "Βιετναμεζικά",
"yi": "Ιουδαϊκά",
"zh": "Κινεζικά",
},
{ type: "language", iso: "en",
countries: [
{_reference: "AS"},
{_reference: "AU"},
{_reference: "BE"},
{_reference: "BW"},
{_reference: "BZ"},
{_reference: "CA"},
{_reference: "GB"},
{_reference: "GU"},
{_reference: "HK"},
{_reference: "IE"},
{_reference: "IN"},
{_reference: "JM"},
{_reference: "MH"},
{_reference: "MP"},
{_reference: "MT"},
{_reference: "NA"},
{_reference: "NZ"},
{_reference: "PH"},
{_reference: "PK"},
{_reference: "SG"},
{_reference: "TT"},
{_reference: "UM"},
{_reference: "US"},
{_reference: "VI"},
{_reference: "ZA"},
{_reference: "ZW"},
],
name: "English",
"aa": "Afar",
"ab": "Abkhazian",
"ae": "Avestan",
"af": "Afrikaans",
"ak": "Akan",
"am": "Amharic",
"an": "Aragonese",
"ar": "Arabic",
"as": "Assamese",
"av": "Avaric",
"ay": "Aymara",
"az": "Azerbaijani",
"ba": "Bashkir",
"be": "Belarusian",
"bg": "Bulgarian",
"bh": "Bihari",
"bi": "Bislama",
"bm": "Bambara",
"bn": "Bengali",
"bo": "Tibetan",
"br": "Breton",
"bs": "Bosnian",
"ca": "Catalan",
"ce": "Chechen",
"ch": "Chamorro",
"co": "Corsican",
"cr": "Cree",
"cs": "Czech",
"cu": "Church Slavic",
"cv": "Chuvash",
"cy": "Welsh",
"da": "Danish",
"de": "German",
"dv": "Divehi",
"dz": "Dzongkha",
"ee": "Ewe",
"el": "Greek",
"en": "English",
"eo": "Esperanto",
"es": "Spanish",
"et": "Estonian",
"eu": "Basque",
"fa": "Persian",
"ff": "Fulah",
"fi": "Finnish",
"fj": "Fijian",
"fo": "Faroese",
"fr": "French",
"fy": "Western Frisian",
"ga": "Irish",
"gd": "Scottish Gaelic",
"gl": "Galician",
"gn": "Guarani",
"gu": "Gujarati",
"gv": "Manx",
"ha": "Hausa",
"he": "Hebrew",
"hi": "Hindi",
"ho": "Hiri Motu",
"hr": "Croatian",
"ht": "Haitian",
"hu": "Hungarian",
"hy": "Armenian",
"hz": "Herero",
"ia": "Interlingua",
"id": "Indonesian",
"ie": "Interlingue",
"ig": "Igbo",
"ii": "Sichuan Yi",
"ik": "Inupiaq",
"io": "Ido",
"is": "Icelandic",
"it": "Italian",
"iu": "Inuktitut",
"ja": "Japanese",
"jv": "Javanese",
"ka": "Georgian",
"kg": "Kongo",
"ki": "Kikuyu",
"kj": "Kuanyama",
"kk": "Kazakh",
"kl": "Kalaallisut",
"km": "Khmer",
"kn": "Kannada",
"ko": "Korean",
"kr": "Kanuri",
"ks": "Kashmiri",
"ku": "Kurdish",
"kv": "Komi",
"kw": "Cornish",
"ky": "Kirghiz",
"la": "Latin",
"lb": "Luxembourgish",
"lg": "Ganda",
"li": "Limburgish",
"ln": "Lingala",
"lo": "Lao",
"lt": "Lithuanian",
"lu": "Luba-Katanga",
"lv": "Latvian",
"mg": "Malagasy",
"mh": "Marshallese",
"mi": "Maori",
"mk": "Macedonian",
"ml": "Malayalam",
"mn": "Mongolian",
"mo": "Moldavian",
"mr": "Marathi",
"ms": "Malay",
"mt": "Maltese",
"my": "Burmese",
"na": "Nauru",
"nb": "Norwegian Bokmål",
"nd": "North Ndebele",
"ne": "Nepali",
"ng": "Ndonga",
"nl": "Dutch",
"nn": "Norwegian Nynorsk",
"no": "Norwegian",
"nr": "South Ndebele",
"nv": "Navajo",
"ny": "Nyanja; Chichewa; Chewa",
"oc": "Occitan (post 1500); Provençal",
"oj": "Ojibwa",
"om": "Oromo",
"or": "Oriya",
"os": "Ossetic",
"pa": "Punjabi",
"pi": "Pali",
"pl": "Polish",
"pt": "Portuguese",
"qu": "Quechua",
"rm": "Rhaeto-Romance",
"rn": "Rundi",
"ro": "Romanian",
"ru": "Russian",
"rw": "Kinyarwanda",
"sa": "Sanskrit",
"sc": "Sardinian",
"sd": "Sindhi",
"se": "Northern Sami",
"sg": "Sango",
"sh": "Serbo-Croatian",
"si": "Sinhalese",
"sk": "Slovak",
"sl": "Slovenian",
"sm": "Samoan",
"sn": "Shona",
"so": "Somali",
"sq": "Albanian",
"sr": "Serbian",
"ss": "Swati",
"st": "Southern Sotho",
"su": "Sundanese",
"sv": "Swedish",
"sw": "Swahili",
"ta": "Tamil",
"te": "Telugu",
"tg": "Tajik",
"th": "Thai",
"ti": "Tigrinya",
"tk": "Turkmen",
"tl": "Tagalog",
"tn": "Tswana",
"to": "Tonga (Tonga Islands)",
"tr": "Turkish",
"ts": "Tsonga",
"tt": "Tatar",
"tw": "Twi",
"ty": "Tahitian",
"ug": "Uighur",
"uk": "Ukrainian",
"ur": "Urdu",
"uz": "Uzbek",
"ve": "Venda",
"vi": "Vietnamese",
"vo": "Volapük",
"wa": "Walloon",
"wo": "Wolof",
"xh": "Xhosa",
"yi": "Yiddish",
"yo": "Yoruba",
"za": "Zhuang",
"zh": "Chinese",
"zu": "Zulu",
},
{ type: "language", iso: "eo",
countries: [
],
name: "esperanto",
"aa": "afara",
"ab": "abĥaza",
"af": "afrikansa",
"am": "amhara",
"ar": "araba",
"as": "asama",
"ay": "ajmara",
"az": "azerbajĝana",
"ba": "baŝkira",
"be": "belorusa",
"bg": "bulgara",
"bh": "bihara",
"bi": "bislamo",
"bn": "bengala",
"bo": "tibeta",
"br": "bretona",
"ca": "kataluna",
"co": "korsika",
"cs": "ĉeĥa",
"cy": "kimra",
"da": "dana",
"de": "germana",
"dz": "dzonko",
"el": "greka",
"en": "angla",
"eo": "esperanto",
"es": "hispana",
"et": "estona",
"eu": "eŭska",
"fa": "persa",
"fi": "finna",
"fj": "fiĝia",
"fo": "feroa",
"fr": "franca",
"fy": "frisa",
"ga": "irlanda",
"gd": "gaela",
"gl": "galega",
"gn": "gvarania",
"gu": "guĝarata",
"ha": "haŭsa",
"he": "hebrea",
"hi": "hinda",
"hr": "kroata",
"hu": "hungara",
"hy": "armena",
"ia": "interlingvao",
"id": "indonezia",
"ie": "okcidentalo",
"ik": "eskima",
"is": "islanda",
"it": "itala",
"iu": "inuita",
"ja": "japana",
"jv": "java",
"ka": "kartvela",
"kk": "kazaĥa",
"kl": "gronlanda",
"km": "kmera",
"kn": "kanara",
"ko": "korea",
"ks": "kaŝmira",
"ku": "kurda",
"ky": "kirgiza",
"la": "latino",
"ln": "lingala",
"lo": "laŭa",
"lt": "litova",
"lv": "latva",
"mg": "malagasa",
"mi": "maoria",
"mk": "makedona",
"ml": "malajalama",
"mn": "mongola",
"mr": "marata",
"ms": "malaja",
"mt": "malta",
"my": "birma",
"na": "naura",
"ne": "nepala",
"nl": "nederlanda",
"no": "norvega",
"oc": "okcitana",
"om": "oroma",
"or": "orijo",
"pa": "panĝaba",
"pl": "pola",
"ps": "paŝtua",
"pt": "portugala",
"qu": "keĉua",
"rm": "romanĉa",
"rn": "burunda",
"ro": "rumana",
"ru": "rusa",
"rw": "ruanda",
"sa": "sanskrito",
"sd": "sinda",
"sg": "sangoa",
"sh": "serbo-Kroata",
"si": "sinhala",
"sk": "slovaka",
"sl": "slovena",
"sm": "samoa",
"sn": "ŝona",
"so": "somala",
"sq": "albana",
"sr": "serba",
"ss": "svazia",
"st": "sota",
"su": "sunda",
"sv": "sveda",
"sw": "svahila",
"ta": "tamila",
"te": "telugua",
"tg": "taĝika",
"th": "taja",
"ti": "tigraja",
"tk": "turkmena",
"tl": "filipina",
"tn": "cvana",
"to": "tongaa",
"tr": "turka",
"ts": "conga",
"tt": "tatara",
"tw": "akana",
"ug": "ujgura",
"uk": "ukraina",
"ur": "urduo",
"uz": "uzbeka",
"vi": "vjetnama",
"vo": "volapuko",
"wo": "volofa",
"xh": "ksosa",
"yi": "jida",
"yo": "joruba",
"za": "ĝuanga",
"zh": "ĉina",
"zu": "zulua",
},
{ type: "language", iso: "es",
countries: [
{_reference: "AR"},
{_reference: "BO"},
{_reference: "CL"},
{_reference: "CO"},
{_reference: "CR"},
{_reference: "DO"},
{_reference: "EC"},
{_reference: "ES"},
{_reference: "GT"},
{_reference: "HN"},
{_reference: "MX"},
{_reference: "NI"},
{_reference: "PA"},
{_reference: "PE"},
{_reference: "PR"},
{_reference: "PY"},
{_reference: "SV"},
{_reference: "US"},
{_reference: "UY"},
{_reference: "VE"},
],
name: "español",
"aa": "afar",
"ab": "abjaso",
"ae": "avéstico",
"af": "afrikaans",
"ak": "akan",
"am": "amárico",
"an": "aragonés",
"ar": "árabe",
"as": "asamés",
"av": "avar",
"ay": "aymara",
"az": "azerí",
"ba": "bashkir",
"be": "bielorruso",
"bg": "búlgaro",
"bh": "bihari",
"bi": "bislama",
"bm": "bambara",
"bn": "bengalí",
"bo": "tibetano",
"br": "bretón",
"bs": "bosnio",
"ca": "catalán",
"ce": "checheno",
"ch": "chamorro",
"co": "corso",
"cr": "cree",
"cs": "checo",
"cu": "eslavo eclesiástico",
"cv": "chuvash",
"cy": "galés",
"da": "danés",
"de": "alemán",
"dv": "divehi",
"ee": "ewe",
"el": "griego",
"en": "inglés",
"eo": "esperanto",
"es": "español",
"et": "estonio",
"eu": "vasco",
"fa": "farsi",
"ff": "fula",
"fi": "finés",
"fo": "feroés",
"fr": "francés",
"fy": "frisón",
"ga": "irlandés",
"gd": "gaélico escocés",
"gl": "gallego",
"gn": "guaraní",
"gu": "gujarati",
"gv": "gaélico manés",
"ha": "hausa",
"he": "hebreo",
"hi": "hindi",
"ho": "hiri motu",
"hr": "croata",
"ht": "haitiano",
"hu": "húngaro",
"hy": "armenio",
"hz": "herero",
"ia": "interlingua",
"id": "indonesio",
"ie": "interlingue",
"ig": "igbo",
"ii": "sichuan yi",
"ik": "inupiak",
"io": "ido",
"is": "islandés",
"it": "italiano",
"iu": "inuktitut",
"ja": "japonés",
"jv": "javanés",
"ka": "georgiano",
"kg": "kongo",
"ki": "kikuyu",
"kj": "kuanyama",
"kk": "kazajo",
"kl": "groenlandés",
"km": "jemer",
"kn": "canarés",
"ko": "coreano",
"kr": "kanuri",
"ks": "cachemiro",
"ku": "kurdo",
"kv": "komi",
"kw": "córnico",
"ky": "kirghiz",
"la": "latín",
"lb": "luxemburgués",
"lg": "ganda",
"li": "limburgués",
"ln": "lingala",
"lo": "laosiano",
"lt": "lituano",
"lu": "luba-katanga",
"lv": "letón",
"mg": "malgache",
"mh": "marshalés",
"mi": "maorí",
"mk": "macedonio",
"ml": "malayalam",
"mn": "mongol",
"mo": "moldavo",
"mr": "marathi",
"ms": "malayo",
"mt": "maltés",
"my": "birmano",
"na": "nauruano",
"nb": "bokmal noruego",
"nd": "ndebele septentrional",
"ne": "nepalí",
"ng": "ndonga",
"nn": "nynorsk noruego",
"no": "noruego",
"nr": "ndebele meridional",
"nv": "navajo",
"ny": "nyanja",
"oc": "occitano (después del 1500)",
"oj": "ojibwa",
"om": "oromo",
"or": "oriya",
"os": "osético",
"pa": "punjabí",
"pi": "pali",
"pl": "polaco",
"ps": "pashto",
"pt": "portugués",
"qu": "quechua",
"rm": "reto-romance",
"rn": "kiroundi",
"ro": "rumano",
"ru": "ruso",
"rw": "kinyarwanda",
"sa": "sánscrito",
"sc": "sardo",
"sd": "sindhi",
"se": "sami septentrional",
"sg": "sango",
"sh": "serbocroata",
"sk": "eslovaco",
"sl": "esloveno",
"sm": "samoano",
"sn": "shona",
"so": "somalí",
"sq": "albanés",
"sr": "serbio",
"ss": "siswati",
"st": "sesotho",
"su": "sundanés",
"sv": "sueco",
"sw": "swahili",
"ta": "tamil",
"te": "telugu",
"tg": "tayiko",
"th": "tailandés",
"tl": "tagalo",
"tn": "setchwana",
"to": "tonga (Islas Tonga)",
"tr": "turco",
"ts": "tsonga",
"tw": "twi",
"ty": "tahitiano",
"ug": "uigur",
"uk": "ucraniano",
"ur": "urdu",
"uz": "uzbeko",
"ve": "venda",
"vi": "vietnamita",
"wa": "valón",
"wo": "uolof",
"xh": "xhosa",
"yo": "yoruba",
"za": "zhuang",
"zh": "chino",
"zu": "zulú",
},
{ type: "language", iso: "et",
countries: [
{_reference: "EE"},
],
name: "Eesti",
"ar": "Araabia",
"bg": "Bulgaaria",
"cs": "Tiehhi",
"da": "Taani",
"de": "Saksa",
"el": "Kreeka",
"en": "Inglise",
"es": "Hispaania",
"et": "Eesti",
"fi": "Soome",
"fr": "Prantsuse",
"he": "Heebrea",
"hr": "Horvaadi",
"hu": "Ungari",
"it": "Itaalia",
"ja": "Jaapani",
"ko": "Korea",
"lt": "Leedu",
"lv": "Läti",
"nl": "Hollandi",
"no": "Norra",
"pl": "Poola",
"pt": "Portugali",
"ro": "Rumeenia",
"ru": "Vene",
"sk": "Slovaki",
"sl": "Sloveeni",
"sv": "Rootsi",
"tr": "Türgi",
"zh": "Hiina",
},
{ type: "language", iso: "eu",
countries: [
{_reference: "ES"},
],
name: "euskara",
"de": "alemanera",
"en": "ingelera",
"es": "espainiera",
"eu": "euskara",
"fr": "frantsesera",
"it": "italiera",
"ja": "japoniera",
"pt": "portugalera",
"ru": "errusiera",
"zh": "txinera",
},
{ type: "language", iso: "fa",
countries: [
{_reference: "AF"},
{_reference: "IR"},
],
name: "فارسی",
"az": "ترکی آذربایجانی",
"bs": "بوسنیایی",
"cu": "اسلاوی کلیسایی",
"ii": "یی سیچوان",
"iu": "اینوکتیتوت",
"li": "لیمبورگی",
"lu": "لوبایی‐کاتانگا",
"ng": "ندونگایی",
"pi": "پالی",
"tr": "ترکی استانبولی",
},
{ type: "language", iso: "fi",
countries: [
{_reference: "FI"},
],
name: "suomi",
"aa": "afar",
"ab": "abhaasi",
"ae": "avesta",
"af": "afrikaans",
"ak": "akan",
"am": "amhara",
"an": "aragonia",
"ar": "arabia",
"as": "assami",
"av": "avaari",
"ay": "aimara",
"az": "azeri",
"ba": "baškiiri",
"be": "valkovenäjä",
"bg": "bulgaria",
"bh": "bihari",
"bi": "bislama",
"bm": "bambara",
"bn": "bengali",
"bo": "tiibet",
"br": "bretoni",
"bs": "bosnia",
"ca": "katalaani",
"ce": "tšetšeeni",
"ch": "tšamorro",
"co": "korsika",
"cr": "cree",
"cs": "tšekki",
"cu": "kirkkoslaavi",
"cv": "tšuvassi",
"cy": "kymri",
"da": "tanska",
"de": "saksa",
"dv": "divehi",
"dz": "dzongkha",
"ee": "ewe",
"el": "kreikka",
"en": "englanti",
"eo": "esperanto",
"es": "espanja",
"et": "viro",
"eu": "baski",
"ff": "fulani",
"fi": "suomi",
"fj": "fidži",
"fo": "fääri",
"fr": "ranska",
"fy": "länsifriisi",
"ga": "iiri",
"gd": "gaeli",
"gl": "galicia",
"gn": "guarani",
"gv": "manx",
"ha": "hausa",
"he": "heprea",
"hi": "hindi",
"ho": "hiri-motu",
"hr": "kroatia",
"ht": "haiti",
"hu": "unkari",
"hy": "armenia",
"hz": "herero",
"ia": "interlingua",
"id": "indonesia",
"ie": "interlingue",
"ig": "igbo",
"ii": "sichuanin-yi",
"ik": "inupiatun",
"io": "ido",
"is": "islanti",
"it": "italia",
"iu": "inuktitut",
"ja": "japani",
"jv": "jaava",
"ka": "georgia",
"kg": "kongo",
"ki": "kikuju",
"kj": "kuanjama",
"kk": "kazakki",
"kl": "kalaallisut; grönlanti",
"km": "khmer",
"kn": "kannada",
"ko": "korea",
"kr": "kanuri",
"ks": "kašmiri",
"ku": "kurdi",
"kv": "komi",
"kw": "korni",
"ky": "kirgiisi",
"la": "latina",
"lb": "luxemburg",
"lg": "ganda",
"li": "limburg",
"ln": "lingala",
"lo": "lao",
"lt": "liettua",
"lu": "luba (Katanga)",
"lv": "latvia",
"mg": "malagassi",
"mh": "marshall",
"mi": "maori",
"mk": "makedonia",
"ml": "malajalam",
"mn": "mongoli",
"mo": "moldavia",
"mr": "marathi",
"ms": "malaiji",
"mt": "malta",
"my": "burma",
"na": "nauru",
"nb": "norja (bokmål)",
"nd": "ndebele, pohjois-",
"ne": "nepali",
"ng": "ndonga",
"nl": "hollanti",
"nn": "norja (nynorsk)",
"no": "norja",
"nr": "ndebele, etelä-",
"nv": "navajo",
"ny": "njandža",
"oc": "oksitaani",
"oj": "odžibwa",
"om": "oromo",
"or": "orija",
"os": "osseetti",
"pa": "pandžabi",
"pi": "paali",
"pl": "puola",
"ps": "paštu",
"pt": "portugali",
"qu": "ketšua",
"rm": "retoromaani",
"rn": "rundi",
"ro": "romania",
"ru": "venäjä",
"rw": "ruanda",
"sa": "sanskrit",
"sc": "sardi",
"sd": "sindhi",
"se": "saame, pohjois-",
"sg": "sango",
"si": "sinhali",
"sk": "slovakki",
"sl": "sloveeni",
"sm": "samoa",
"sn": "šona",
"so": "somali",
"sq": "albania",
"sr": "serbia",
"ss": "swazi",
"st": "sotho, etelä-",
"su": "sunda",
"sv": "ruotsi",
"sw": "swahili",
"ta": "tamil",
"te": "telugu",
"tg": "tadžikki",
"th": "thai",
"ti": "tigrinja",
"tk": "turkmeeni",
"tl": "tagalog",
"tn": "tswana",
"to": "tonga (Tonga)",
"tr": "turkki",
"ts": "tsonga",
"tt": "tataari",
"tw": "twi",
"ty": "tahiti",
"ug": "uiguuri",
"uk": "ukraina",
"ur": "urdu",
"uz": "uzbekki",
"ve": "venda",
"vi": "vietnam",
"vo": "volapük",
"wa": "valloni",
"wo": "wolof",
"xh": "xhosa",
"yi": "jiddiš",
"yo": "joruba",
"za": "zhuang",
"zh": "kiina",
"zu": "zulu",
},
{ type: "language", iso: "fo",
countries: [
{_reference: "FO"},
],
name: "føroyskt",
"fo": "føroyskt",
},
{ type: "language", iso: "fr",
countries: [
{_reference: "BE"},
{_reference: "CA"},
{_reference: "CH"},
{_reference: "FR"},
{_reference: "LU"},
{_reference: "MC"},
],
name: "français",
"aa": "afar",
"ab": "abkhaze",
"ae": "avestique",
"af": "afrikaans",
"ak": "akan",
"am": "amharique",
"an": "aragonais",
"ar": "arabe",
"as": "assamais",
"av": "avar",
"ay": "aymara",
"az": "azéri",
"ba": "bachkir",
"be": "biélorusse",
"bg": "bulgare",
"bh": "bihari",
"bi": "bichlamar",
"bm": "bambara",
"bn": "bengali",
"bo": "tibétain",
"br": "breton",
"bs": "bosniaque",
"ca": "catalan",
"ce": "tchétchène",
"ch": "chamorro",
"co": "corse",
"cr": "cree",
"cs": "tchèque",
"cu": "slavon d’église",
"cv": "tchouvache",
"cy": "gallois",
"da": "danois",
"de": "allemand",
"dv": "maldivien",
"dz": "dzongkha",
"ee": "éwé",
"el": "grec",
"en": "anglais",
"eo": "espéranto",
"es": "espagnol",
"et": "estonien",
"eu": "basque",
"fa": "persan",
"ff": "peul",
"fi": "finnois",
"fj": "fidjien",
"fo": "féroïen",
"fr": "français",
"fy": "frison",
"ga": "irlandais",
"gd": "gaélique écossais",
"gl": "galicien",
"gn": "guarani",
"gu": "goudjrati",
"gv": "manx",
"ha": "haoussa",
"he": "hébreu",
"hi": "hindi",
"ho": "hiri motu",
"hr": "croate",
"ht": "haïtien",
"hu": "hongrois",
"hy": "arménien",
"hz": "héréro",
"ia": "interlingua",
"id": "indonésien",
"ie": "interlingue",
"ig": "igbo",
"ii": "yi de Sichuan",
"ik": "inupiaq",
"io": "ido",
"is": "islandais",
"it": "italien",
"iu": "inuktitut",
"ja": "japonais",
"jv": "javanais",
"ka": "géorgien",
"kg": "kongo",
"ki": "kikuyu",
"kj": "kuanyama",
"kk": "kazakh",
"kl": "groenlandais",
"km": "khmer",
"kn": "kannada",
"ko": "coréen",
"kr": "kanouri",
"ks": "kashmiri",
"ku": "kurde",
"kv": "komi",
"kw": "cornique",
"ky": "kirghize",
"la": "latin",
"lb": "luxembourgeois",
"lg": "ganda",
"li": "limbourgeois",
"ln": "lingala",
"lo": "lao",
"lt": "lituanien",
"lu": "luba-katanga",
"lv": "letton",
"mg": "malgache",
"mh": "marshall",
"mi": "maori",
"mk": "macédonien",
"ml": "malayalam",
"mn": "mongol",
"mo": "moldave",
"mr": "marathe",
"ms": "malais",
"mt": "maltais",
"my": "birman",
"na": "nauruan",
"nb": "bokmål norvégien",
"nd": "ndébélé du Nord",
"ne": "népalais",
"ng": "ndonga",
"nl": "néerlandais",
"nn": "nynorsk norvégien",
"no": "norvégien",
"nr": "ndébélé du Sud",
"nv": "navaho",
"ny": "nyanja",
"oc": "occitan (après 1500)",
"oj": "ojibwa",
"om": "galla",
"or": "oriya",
"os": "ossète",
"pa": "pendjabi",
"pi": "pali",
"pl": "polonais",
"ps": "pachto",
"pt": "portugais",
"qu": "quechua",
"rm": "rhéto-roman",
"rn": "roundi",
"ro": "roumain",
"ru": "russe",
"rw": "rwanda",
"sa": "sanskrit",
"sc": "sarde",
"sd": "sindhi",
"se": "sami du Nord",
"sg": "sango",
"sh": "serbo-croate",
"si": "singhalais",
"sk": "slovaque",
"sl": "slovène",
"sm": "samoan",
"sn": "shona",
"so": "somali",
"sq": "albanais",
"sr": "serbe",
"ss": "swati",
"st": "sotho du Sud",
"su": "soundanais",
"sv": "suédois",
"sw": "swahili",
"ta": "tamoul",
"te": "télougou",
"tg": "tadjik",
"th": "thaï",
"ti": "tigrigna",
"tk": "turkmène",
"tl": "tagalog",
"tn": "setswana",
"to": "tongan (Îles Tonga)",
"tr": "turc",
"ts": "tsonga",
"tt": "tatar",
"tw": "twi",
"ty": "tahitien",
"ug": "ouïgour",
"uk": "ukrainien",
"ur": "ourdou",
"uz": "ouzbek",
"ve": "venda",
"vi": "vietnamien",
"vo": "volapük",
"wa": "wallon",
"wo": "wolof",
"xh": "xhosa",
"yi": "yiddish",
"yo": "yoruba",
"za": "zhuang",
"zh": "chinois",
"zu": "zoulou",
},
{ type: "language", iso: "ga",
countries: [
{_reference: "IE"},
],
name: "Gaeilge",
"aa": "Afar",
"ab": "Abcáisis",
"ae": "Aivéistis",
"af": "Afracáinis",
"ar": "Araibis",
"as": "Asaimis",
"az": "Asarbaiseáinis",
"ba": "Baiscíris",
"be": "Bealarúisis",
"bg": "Bulgáiris",
"bn": "Beangálais",
"bo": "Tibéadais",
"br": "Briotáinis",
"bs": "Boisnis",
"ca": "Catalóinis",
"ce": "Sisinis",
"co": "Corsaicis",
"cr": "Craíais",
"cs": "Seicis",
"cu": "Slavais na hEaglaise",
"cv": "Suvaisis",
"cy": "Breatnais",
"da": "Danmhairgis",
"de": "Gearmáinis",
"el": "Gréigis",
"en": "Béarla",
"eo": "Esperanto",
"es": "Spáinnis",
"et": "Eastóinis",
"eu": "Bascais",
"fa": "Peirsis",
"fi": "Fionnlainnis",
"fj": "Fidsis",
"fo": "Faróis",
"fr": "Fraincis",
"fy": "Freaslainnais",
"ga": "Gaeilge",
"gd": "Gaeilge na hAlban",
"gu": "Gúisearáitis",
"gv": "Mannainis",
"he": "Eabhrais",
"hi": "Hiondúis",
"hr": "Cróitis",
"hu": "Ungáiris",
"hy": "Airméinis",
"ia": "Interlingua",
"id": "Indinéisis",
"ie": "Interlingue",
"ik": "Inupiaq",
"io": "Ido",
"is": "Íoslainnais",
"it": "Iodáilis",
"iu": "Ionúitis",
"ja": "Seapáinis",
"jv": "Iávais",
"ka": "Seoirsis",
"kk": "Casachais",
"kn": "Cannadais",
"ko": "Cóiréis",
"ks": "Caismíris",
"kw": "Cornais",
"ky": "Cirgeasais",
"la": "Laidin",
"lb": "Leitseabuirgis",
"lo": "Laosais",
"lt": "Liotuáinis",
"lv": "Laitvis",
"mg": "Malagásais",
"mi": "Maorais",
"mk": "Macadóinis",
"ml": "Mailéalaimis",
"mn": "Mongóilis",
"mo": "Moldáivis",
"mr": "Maraitis",
"mt": "Maltais",
"my": "Burmais",
"na": "Nárúis",
"nb": "Ioruais Bokmål",
"ne": "Neipealais",
"nl": "Ollainnais",
"nn": "Ioruais Nynorsk",
"no": "Ioruais",
"nv": "Navachóis",
"oc": "Ocatáinis (tar éis 1500); Provençal",
"os": "Óiséitis",
"pa": "Puinseaibis",
"pl": "Polainnis",
"ps": "Paisteo",
"pt": "Portaingéilis",
"qu": "Ceatsuais",
"ro": "Romáinis",
"ru": "Rúisis",
"sa": "Sanscrait",
"sc": "Sairdínis",
"sd": "Sindis",
"se": "Sáimis Thuaidh",
"sh": "Seirbea-Chróitis",
"sk": "Slóvacais",
"sl": "Slóvéinis",
"sm": "Samóis",
"so": "Somálais",
"sq": "Albáinis",
"sr": "Seirbis",
"sv": "Sualainnis",
"sw": "Svahaílis",
"ta": "Tamailis",
"th": "Téalainnis",
"tl": "Tagálaigis",
"tr": "Tuircis",
"tt": "Tatarais",
"ty": "Taihítis",
"uk": "Úcráinis",
"ur": "Urdais",
"uz": "Úisbéicis",
"vi": "Vítneamais",
"wa": "Vallúnais",
"yi": "Giúdais",
"zh": "Sínis",
"zu": "Súlúis",
},
{ type: "language", iso: "gl",
countries: [
{_reference: "ES"},
],
name: "galego",
"gl": "galego",
},
{ type: "language", iso: "gu",
countries: [
{_reference: "IN"},
],
name: "ગુજરાતી",
"gu": "ગુજરાતી",
},
{ type: "language", iso: "gv",
countries: [
{_reference: "GB"},
],
name: "Gaelg",
"gv": "Gaelg",
},
{ type: "language", iso: "ha",
countries: [
{_reference: "GH"},
{_reference: "NE"},
{_reference: "NG"},
],
},
{ type: "language", iso: "he",
countries: [
{_reference: "IL"},
],
name: "עברית",
"aa": "אתיופית",
"ab": "אבחזית",
"ae": "אבסטן",
"af": "אפריקנית",
"ak": "אקאן",
"am": "אמהרית",
"ar": "ערבית",
"as": "אסאמית",
"az": "אזרית",
"ba": "בשקירית",
"be": "בלארוסית",
"bg": "בולגרית",
"bn": "בנגלית",
"bo": "טיבטית",
"br": "ברטונית",
"bs": "בוסנית",
"ca": "קטלונית",
"ce": "צ'צ'נית",
"co": "קורסיקאית",
"cs": "צ׳כית",
"cy": "וולשית",
"da": "דנית",
"de": "גרמנית",
"dv": "דיבהי",
"el": "יוונית",
"en": "אנגלית",
"eo": "אספרנטו",
"es": "ספרדית",
"et": "אסטונית",
"eu": "בסקית",
"fa": "פרסית",
"fi": "פינית",
"fj": "פיג'ית",
"fo": "פארואזית",
"fr": "צרפתית",
"ga": "אירית",
"gd": "סקוטית גאלית",
"gl": "גליציאנית",
"gu": "גוג'ראטית",
"ha": "האוסה",
"he": "עברית",
"hi": "הינדית",
"hr": "קרואטית",
"ht": "האיטית",
"hu": "הונגרית",
"hy": "ארמנית",
"id": "אינדונזית",
"is": "איסלנדית",
"it": "איטלקית",
"ja": "יפנית",
"ka": "גרוזינית",
"kk": "קזחית",
"ko": "קוריאנית",
"ks": "קשמירית",
"ku": "כורדית",
"la": "לטינית",
"lb": "לוקסמבורגית",
"lt": "ליטאית",
"lv": "לטבית",
"mg": "מלגשית",
"mi": "מאורית",
"mk": "מקדונית",
"mn": "מונגולית",
"mo": "מולדבית",
"mr": "מארתית",
"mt": "מלטזית",
"my": "בורמזית",
"nb": "נורבגית שפת הספר (בוקמול)",
"ne": "נפאלית",
"nl": "הולנדית",
"nn": "נורבגית חדשה (נינורשק)",
"no": "נורווגית",
"nv": "נבחו",
"pl": "פולנית",
"ps": "פאשטו",
"pt": "פורטוגזית",
"ro": "רומנית",
"ru": "רוסית",
"sa": "סנסקרית",
"sc": "סרדינית",
"sd": "סינדהית",
"sh": "סרבו-קרואטית",
"sk": "סלובקית",
"sl": "סלובנית",
"sm": "סמואית",
"so": "סומלית",
"sq": "אלבנית",
"sr": "סרבית",
"sv": "שוודית",
"sw": "סווהילית",
"ta": "טמילית",
"th": "תאי",
"tk": "טורקמנית",
"tr": "טורקית",
"uk": "אוקראינית",
"ur": "אורדו",
"uz": "אוזבקית",
"vi": "ויאטנמית",
"yi": "יידיש",
"zh": "סינית",
"zu": "זולו",
},
{ type: "language", iso: "hi",
countries: [
{_reference: "IN"},
],
name: "हिंदी",
"aa": "अफ़ार",
"ab": "अब्खाज़ियन्",
"af": "अफ्रीकी",
"am": "अम्हारिक्",
"ar": "अरबी",
"as": "असामी",
"ay": "आयमारा",
"az": "अज़रबैंजानी",
"ba": "बशख़िर",
"be": "बैलोरूशियन्",
"bg": "बल्गेरियन्",
"bh": "बिहारी",
"bi": "बिस्लामा",
"bn": "बँगाली",
"bo": "तिब्बती",
"br": "ब्रेटन",
"ca": "कातालान",
"co": "कोर्सीकन",
"cs": "चेक",
"cy": "वेल्श",
"da": "डैनीश",
"de": "ज़र्मन",
"dz": "भुटानी",
"el": "ग्रीक",
"en": "अंग्रेजी",
"eo": "एस्पेरान्तो",
"es": "स्पेनिश",
"et": "ऐस्तोनियन्",
"eu": "बास्क्",
"fa": "पर्शियन्",
"fi": "फिनिश",
"fj": "फ़ीजी",
"fo": "फिरोज़ी",
"fr": "फ्रेंच",
"fy": "फ्रीज़न्",
"ga": "आईरिश",
"gd": "स्काट्स् गायेलिक्",
"gl": "गैलिशियन्",
"gn": "गुआरानी",
"gu": "गुज़राती",
"ha": "होउसा",
"he": "हिब्रीऊ",
"hi": "हिंदी",
"hr": "क्रोएशन्",
"hu": "हंगेरी",
"hy": "अरमेनियन्",
"ia": "ईन्टरलिंगुआ",
"id": "इन्डोनेशियन्",
"ie": "ईन्टरलिंगुइ",
"ik": "इनुपियाक्",
"is": "आईस्लैंडिक्",
"it": "ईटालियन्",
"iu": "इनूकीटूत्",
"ja": "जापानी",
"jv": "जावानीस",
"ka": "जॉर्जीयन्",
"kk": "कज़ाख",
"kl": "ग्रीनलैंडिक",
"km": "कैम्बोडियन्",
"kn": "कन्नड़",
"ko": "कोरीयन्",
"ks": "काश्मिरी",
"ku": "कुरदीश",
"ky": "किरघिज़",
"la": "लैटीन",
"ln": "लिंगाला",
"lo": "लाओथीयन्",
"lt": "लिथुनियन्",
"lv": "लाटवियन् (लेट्टीश)",
"mg": "मालागासी",
"mi": "मेओरी",
"mk": "मैसेडोनियन्",
"ml": "मलयालम",
"mn": "मोंगोलियन",
"mo": "मोलडावियन्",
"mr": "मराठी",
"ms": "मलय",
"mt": "मालटिस्",
"my": "बर्लिस",
"na": "नायरू",
"ne": "नेपाली",
"nl": "डच्",
"no": "नार्वेजीयन्",
"oc": "ओसीटान",
"om": "ओरोमो (अफ़ान)",
"or": "उड़िया",
"pa": "पंजाबी",
"pl": "पॉलिश",
"ps": "पॉशतो (पुशतो)",
"pt": "पुर्तुगी",
"qu": "क्वेशुआ",
"rm": "रहेय्टो-रोमान्स",
"rn": "किरून्दी",
"ro": "रूमानीयन्",
"ru": "रुसी",
"rw": "किन्यारवाण्डा",
"sa": "संस्कृत",
"sd": "सिन्धी",
"sg": "साँग्रो",
"sh": "सेर्बो-क्रोएशन्",
"si": "शिंघालीस्",
"sk": "स्लोवाक्",
"sl": "स्लोवेनियन्",
"sm": "सामोन",
"sn": "सोणा",
"so": "सोमाली",
"sq": "अल्बेनियन्",
"sr": "सर्बियन्",
"ss": "सीस्वाटि",
"st": "सेसोथो",
"su": "सुन्दानीस",
"sv": "स्विडिश",
"sw": "स्वाहिली",
"ta": "तमिल",
"te": "तेलेगु",
"tg": "ताजिक्",
"th": "थाई",
"ti": "तिग्रीन्या",
"tk": "तुक्रमेन",
"tl": "तागालोग",
"tn": "सेत्स्वाना",
"to": "टोंगा",
"tr": "तुक्रीश",
"ts": "सोंगा",
"tt": "टाटर",
"tw": "ट्वी",
"ug": "उईघुर",
"uk": "यूक्रेनियन्",
"ur": "ऊर्दु",
"uz": "उज़बेक्",
"vi": "वियेतनामी",
"vo": "वोलापुक",
"wo": "वोलोफ",
"xh": "षोसा",
"yi": "येहुदी",
"yo": "योरूबा",
"za": "ज़ुआंग",
"zh": "चीनी",
"zu": "ज़ुलू",
},
{ type: "language", iso: "hr",
countries: [
{_reference: "HR"},
],
name: "hrvatski",
"ar": "arapski",
"av": "avarski",
"be": "bjeloruski",
"bg": "bugarski",
"cs": "češki",
"cu": "crkvenoslavenski",
"cy": "velški",
"da": "danski",
"de": "njemački",
"el": "grčki",
"en": "engleski",
"eo": "esperanto",
"es": "španjolski",
"et": "estonijski",
"fa": "perzijski",
"fi": "finski",
"fr": "francuski",
"fy": "frizijski",
"ga": "irski",
"he": "hebrejski",
"hr": "hrvatski",
"hu": "mađarski",
"hy": "armenski",
"is": "islandski",
"it": "talijanski",
"ja": "japanski",
"km": "kmerski",
"ko": "korejski",
"la": "latinski",
"lt": "litvanski",
"lv": "latvijski",
"mk": "makedonski",
"mn": "mongolski",
"mt": "malteški",
"ne": "nepalski",
"nl": "nizozemski",
"no": "norveški",
"pl": "poljski",
"pt": "portugalski",
"ro": "rumunjski",
"ru": "ruski",
"sk": "slovački",
"sl": "slovenski",
"sq": "albanski",
"sr": "srpski",
"sv": "švedski",
"tr": "turski",
"uk": "ukrajinski",
"vi": "vijetnamski",
"zh": "kineski",
},
{ type: "language", iso: "hu",
countries: [
{_reference: "HU"},
],
name: "magyar",
"aa": "afar",
"ab": "abház",
"af": "afrikai",
"am": "amhara",
"ar": "arab",
"as": "asszámi",
"ay": "ajmara",
"az": "azerbajdzsáni",
"ba": "baskír",
"be": "belorusz",
"bg": "bolgár",
"bh": "bihari",
"bi": "bislama",
"bn": "bengáli",
"bo": "tibeti",
"br": "breton",
"ca": "katalán",
"co": "korzikai",
"cs": "cseh",
"cy": "walesi",
"da": "dán",
"de": "német",
"dz": "butáni",
"el": "görög",
"en": "angol",
"eo": "eszperantó",
"es": "spanyol",
"et": "észt",
"eu": "baszk",
"fa": "perzsa",
"fi": "finn",
"fj": "fidzsi",
"fo": "feröeri",
"fr": "francia",
"fy": "fríz",
"ga": "ír",
"gd": "skót (gael)",
"gl": "galíciai",
"gn": "guarani",
"gu": "gudzsaráti",
"ha": "hausza",
"he": "héber",
"hi": "hindi",
"hr": "horvát",
"hu": "magyar",
"hy": "örmény",
"ia": "interlingua",
"id": "indonéz",
"ie": "interlingue",
"ik": "inupiak",
"is": "izlandi",
"it": "olasz",
"iu": "inuktitut",
"ja": "japán",
"jv": "jávai",
"ka": "grúz",
"kk": "kazah",
"kl": "grönlandi",
"km": "kambodzsai",
"kn": "kannada",
"ko": "koreai",
"ks": "kasmíri",
"ku": "kurd",
"ky": "kirgiz",
"la": "latin",
"ln": "lingala",
"lo": "laoszi",
"lt": "litván",
"lv": "lett",
"mg": "madagaszkári",
"mi": "maori",
"mk": "macedón",
"ml": "malajalam",
"mn": "mongol",
"mo": "moldvai",
"mr": "marati",
"ms": "maláj",
"mt": "máltai",
"my": "burmai",
"na": "naurui",
"ne": "nepáli",
"nl": "holland",
"no": "norvég",
"oc": "okszitán",
"om": "oromói",
"or": "orija",
"pa": "pandzsábi",
"pl": "lengyel",
"ps": "pastu (afgán)",
"pt": "portugál",
"qu": "kecsua",
"rm": "rétoromán",
"rn": "kirundi",
"ro": "román",
"ru": "orosz",
"rw": "kiruanda",
"sa": "szanszkrit",
"sd": "szindi",
"sg": "sango",
"sh": "szerb-horvát",
"si": "szingaléz",
"sk": "szlovák",
"sl": "szlovén",
"sm": "szamoai",
"sn": "sona",
"so": "szomáli",
"sq": "albán",
"sr": "szerb",
"ss": "sziszuati",
"st": "szeszotó",
"su": "szundanéz",
"sv": "svéd",
"sw": "szuahéli",
"ta": "tamil",
"te": "telugu",
"tg": "tadzsik",
"th": "thai",
"ti": "tigrinya",
"tk": "türkmén",
"tl": "tagalog",
"tn": "szecsuáni",
"to": "tonga",
"tr": "török",
"ts": "conga",
"tt": "tatár",
"tw": "tui",
"ug": "ujgur",
"uk": "ukrán",
"ur": "urdu",
"uz": "üzbég",
"vi": "vietnámi",
"vo": "volapük",
"wo": "volof",
"xh": "hosza",
"yi": "zsidó",
"yo": "joruba",
"za": "zsuang",
"zh": "kínai",
"zu": "zulu",
},
{ type: "language", iso: "hy",
countries: [
{_reference: "AM"},
],
name: "Հայերէն",
"hy": "Հայերէն",
},
{ type: "language", iso: "ia",
countries: [
],
},
{ type: "language", iso: "id",
countries: [
{_reference: "ID"},
],
name: "Bahasa Indonesia",
"aa": "Afar",
"ab": "Abkhaz",
"ae": "Avestan",
"af": "Afrikaans",
"ak": "Akan",
"am": "Amharik",
"ar": "Arab",
"as": "Assam",
"av": "Avarik",
"ay": "Aymara",
"az": "Azerbaijan",
"ba": "Bashkir",
"be": "Belarusia",
"bg": "Bulgaria",
"bh": "Bihari",
"bi": "Bislama",
"bm": "Bambara",
"bn": "Bengal",
"bo": "Tibet",
"br": "Breton",
"bs": "Bosnia",
"ca": "Catalan",
"ce": "Chechen",
"ch": "Chamorro",
"co": "Korsika",
"cr": "Cree",
"cs": "Ceko",
"cv": "Chuvash",
"cy": "Welsh",
"da": "Denmark",
"de": "Jerman",
"dv": "Divehi",
"dz": "Dzongkha",
"ee": "Ewe",
"el": "Yunani",
"en": "Inggris",
"eo": "Esperanto",
"es": "Spanyol",
"et": "Estonian",
"eu": "Basque",
"fa": "Persia",
"ff": "Fulah",
"fi": "Finlandia",
"fj": "Fiji",
"fo": "Faro",
"fr": "Perancis",
"fy": "Frisi",
"ga": "Irlandia",
"gd": "Gaelik Skotlandia",
"gl": "Gallegan",
"gn": "Guarani",
"gu": "Gujarati",
"gv": "Manx",
"ha": "Hausa",
"he": "Ibrani",
"hi": "Hindi",
"ho": "Hiri Motu",
"hr": "Kroasia",
"hu": "Hungaria",
"hy": "Armenia",
"hz": "Herero",
"ia": "Interlingua",
"id": "Bahasa Indonesia",
"ie": "Interlingue",
"ig": "Igbo",
"ii": "Sichuan Yi",
"ik": "Inupiaq",
"io": "Ido",
"is": "Icelandic",
"it": "Italian",
"ja": "Japanese",
"jv": "Jawa",
"ka": "Georgian",
"kg": "Kongo",
"ki": "Kikuyu",
"kj": "Kuanyama",
"kk": "Kazakh",
"kl": "Kalaallisut",
"km": "Khmer",
"kn": "Kannada",
"ko": "Korea",
"kr": "Kanuri",
"ks": "Kashmir",
"ku": "Kurdi",
"kv": "Komi",
"kw": "Cornish",
"ky": "Kirghiz",
"la": "Latin",
"lb": "Luxembourg",
"lg": "Ganda",
"li": "Limburg",
"ln": "Lingala",
"lo": "Lao",
"lt": "Lithuania",
"lu": "Luba-Katanga",
"lv": "Latvian",
"mg": "Malagasi",
"mh": "Marshall",
"mi": "Maori",
"mk": "Macedonian",
"ml": "Malayalam",
"mn": "Mongolian",
"mo": "Moldavian",
"mr": "Marathi",
"ms": "Malay",
"mt": "Maltese",
"my": "Burma",
"na": "Nauru",
"nb": "Norwegian Bokmål",
"ne": "Nepal",
"ng": "Ndonga",
"nl": "Belanda",
"nn": "Norwegian Nynorsk",
"no": "Norwegian",
"nv": "Navajo",
"ny": "Nyanja; Chichewa; Chewa",
"oj": "Ojibwa",
"om": "Oromo",
"or": "Oriya",
"os": "Ossetic",
"pa": "Punjabi",
"pi": "Pali",
"pl": "Polish",
"ps": "Pashto (Pushto)",
"pt": "Portugis",
"qu": "Quechua",
"rm": "Rhaeto-Romance",
"rn": "Rundi",
"ro": "Romanian",
"ru": "Russian",
"rw": "Kinyarwanda",
"sa": "Sanskrit",
"sc": "Sardinian",
"sd": "Sindhi",
"se": "Northern Sami",
"sg": "Sango",
"sh": "Serbo-Croatian",
"si": "Sinhalese",
"sk": "Slovak",
"sl": "Slovenian",
"sm": "Samoan",
"sn": "Shona",
"so": "Somali",
"sq": "Albanian",
"sr": "Serbian",
"ss": "Swati",
"su": "Sundan",
"sv": "Swedia",
"sw": "Swahili",
"ta": "Tamil",
"te": "Telugu",
"tg": "Tajik",
"th": "Thai",
"ti": "Tigrinya",
"tk": "Turkmen",
"tl": "Tagalog",
"tn": "Tswana",
"tr": "Turkish",
"ts": "Tsonga",
"tt": "Tatar",
"tw": "Twi",
"ty": "Tahitian",
"ug": "Uighur",
"uk": "Ukrainian",
"ur": "Urdu",
"uz": "Uzbek",
"ve": "Venda",
"vi": "Vietnamese",
"vo": "Volapük",
"wa": "Walloon",
"wo": "Wolof",
"xh": "Xhosa",
"yi": "Yiddish",
"yo": "Yoruba",
"za": "Zhuang",
"zh": "Cina",
"zu": "Zulu",
},
{ type: "language", iso: "ig",
countries: [
{_reference: "NG"},
],
},
{ type: "language", iso: "is",
countries: [
{_reference: "IS"},
],
name: "Íslenska",
"ab": "Abkasíska",
"ae": "Avestíska",
"af": "Afríkanska",
"ak": "Akan",
"am": "Amharíska",
"an": "Aragonska",
"ar": "Arabíska",
"as": "Assamska",
"av": "Avaríska",
"ay": "Aímara",
"az": "Aserska",
"ba": "Baskír",
"be": "Hvítrússneska",
"bg": "Búlgarska",
"bh": "Bíharí",
"bi": "Bíslama",
"bm": "Bambara",
"bn": "Bengalska",
"bo": "Tíbeska",
"br": "Bretónska",
"bs": "Bosníska",
"ca": "Katalónska",
"ce": "Tsjetsjenska",
"ch": "Kamorró",
"co": "Korsíska",
"cr": "Krí",
"cs": "Tékkneska",
"cu": "Kirkjuslavneska",
"cv": "Sjúvas",
"cy": "Velska",
"da": "Danska",
"de": "Þýska",
"dv": "Dívehí",
"dz": "Dsongka",
"ee": "Eve",
"el": "Nýgríska (1453-)",
"en": "Enska",
"eo": "Esperantó",
"es": "Spænska",
"et": "Eistneska",
"eu": "Baskneska",
"fa": "Persneska",
"ff": "Fúla",
"fi": "Finnska",
"fj": "Fídjeyska",
"fo": "Færeyska",
"fr": "Franska",
"fy": "Frísneska",
"ga": "Írska",
"gd": "Skosk gelíska",
"gl": "Gallegska",
"gn": "Gvaraní",
"gu": "Gújaratí",
"gv": "Manx",
"ha": "Hása",
"he": "Hebreska",
"hi": "Hindí",
"ho": "Hírímótú",
"hr": "Króatíska",
"ht": "Haítíska",
"hu": "Ungverska",
"hy": "Armenska",
"hz": "Hereró",
"ia": "Interlingva",
"id": "Indónesíska",
"ie": "Interlingve",
"ig": "Ígbó",
"ii": "Sísúanjí",
"ik": "Ínúpíak",
"io": "Ídó",
"is": "Íslenska",
"it": "Ítalska",
"iu": "Inúktitút",
"ja": "Japanska",
"jv": "Javanska",
"ka": "Georgíska",
"kg": "Kongó",
"ki": "Kíkújú",
"kj": "Kúanjama",
"kk": "Kasakska",
"kl": "Grænlenska",
"km": "Kmer",
"kn": "Kannada",
"ko": "Kóreska",
"kr": "Kanúrí",
"ks": "Kasmírska",
"ku": "Kúrdneska",
"kv": "Komíska",
"kw": "Korníska",
"ky": "Kirgiska",
"la": "Latína",
"lb": "Lúxemborgíska",
"lg": "Ganda",
"li": "Limbúrgíska",
"ln": "Lingala",
"lo": "Laó",
"lt": "Litháíska",
"lu": "Lúbakatanga",
"lv": "Lettneska",
"mg": "Malagasíska",
"mh": "Marshallska",
"mi": "Maórí",
"mk": "Makedónska",
"ml": "Malajalam",
"mn": "Mongólska",
"mo": "Moldóvska",
"mr": "Maratí",
"ms": "Malaíska",
"mt": "Maltneska",
"my": "Burmneska",
"na": "Nárúska",
"nb": "Norskt bókmál",
"nd": "Norðurndebele",
"ne": "Nepalska",
"ng": "Ndonga",
"nl": "Hollenska",
"nn": "Nýnorska",
"no": "Norska",
"nr": "Suðurndebele",
"nv": "Navahó",
"ny": "Njanja; Sísjeva; Sjeva",
"oc": "Okkitíska (eftir 1500); Próvensalska",
"oj": "Ojibva",
"om": "Órómó",
"or": "Óría",
"os": "Ossetíska",
"pa": "Púnjabí",
"pi": "Palí",
"pl": "Pólska",
"ps": "Pastú",
"pt": "Portúgalska",
"qu": "Kvesjúa",
"rm": "Retórómanska",
"rn": "Rúndí",
"ro": "Rúmenska",
"ru": "Rússneska",
"rw": "Kínjarvanda",
"sa": "Sanskrít",
"sc": "Sardínska",
"sd": "Sindí",
"se": "Norðursamíska",
"sg": "Sangó",
"sh": "Serbókróatíska",
"si": "Singalesíska",
"sk": "Slóvakíska",
"sl": "Slóvenska",
"sm": "Samóska",
"sn": "Shona",
"so": "Sómalska",
"sq": "Albanska",
"sr": "Serbneska",
"ss": "Svatí",
"st": "Suðursótó",
"su": "Súndanska",
"sv": "Sænska",
"sw": "Svahílí",
"ta": "Tamílska",
"te": "Telúgú",
"tg": "Tadsjikska",
"th": "Taílenska",
"ti": "Tígrinja",
"tk": "Túrkmenska",
"tl": "Tagalog",
"tn": "Tsúana",
"to": "Tongverska (Tongaeyjar)",
"tr": "Tyrkneska",
"ts": "Tsonga",
"tt": "Tatarska",
"tw": "Tví",
"ty": "Tahítíska",
"ug": "Úígúr",
"uk": "Úkraínska",
"ur": "Úrdú",
"uz": "Úsbekska",
"ve": "Venda",
"vi": "Víetnamska",
"vo": "Volapük",
"wa": "Vallónska",
"wo": "Volof",
"xh": "Sósa",
"yi": "Jiddíska",
"yo": "Jórúba",
"za": "Súang",
"zh": "Kínverska",
"zu": "Súlú",
},
{ type: "language", iso: "it",
countries: [
{_reference: "CH"},
{_reference: "IT"},
],
name: "italiano",
"aa": "afar",
"ab": "abkhazian",
"ae": "avestan",
"af": "afrikaans",
"ak": "akan",
"am": "amarico",
"an": "aragonese",
"ar": "arabo",
"as": "assamese",
"av": "avaro",
"ay": "aymara",
"az": "azerbaigiano",
"ba": "baschiro",
"be": "bielorusso",
"bg": "bulgaro",
"bh": "bihari",
"bi": "bislama",
"bm": "bambara",
"bn": "bengalese",
"bo": "tibetano",
"br": "bretone",
"bs": "bosniaco",
"ca": "catalano",
"ce": "ceceno",
"ch": "chamorro",
"co": "corso",
"cr": "cree",
"cs": "ceco",
"cu": "slavo della Chiesa",
"cv": "chuvash",
"cy": "gallese",
"da": "danese",
"de": "tedesco",
"dv": "divehi",
"dz": "dzongkha",
"ee": "ewe",
"el": "greco",
"en": "inglese",
"eo": "esperanto",
"es": "spagnolo",
"et": "estone",
"eu": "basco",
"fa": "persiano",
"ff": "fulah",
"fi": "finlandese",
"fj": "figiano",
"fo": "faroese",
"fr": "francese",
"fy": "frisone",
"ga": "irlandese",
"gd": "gaelico scozzese",
"gl": "galiziano",
"gn": "guarana",
"gu": "gujarati",
"gv": "manx",
"ha": "haussa",
"he": "ebraico",
"hi": "hindi",
"ho": "hiri motu",
"hr": "croato",
"ht": "haitiano",
"hu": "ungherese",
"hy": "armeno",
"hz": "herero",
"ia": "interlingua",
"id": "indonesiano",
"ie": "interlingue",
"ig": "igbo",
"ii": "sichuan yi",
"ik": "inupiak",
"io": "ido",
"is": "islandese",
"it": "italiano",
"iu": "inuktitut",
"ja": "giapponese",
"jv": "giavanese",
"ka": "georgiano",
"kg": "kongo",
"ki": "kikuyu",
"kj": "kuanyama",
"kk": "kazako",
"kl": "kalaallisut",
"km": "khmer",
"kn": "kannada",
"ko": "coreano",
"kr": "kanuri",
"ks": "kashmiri",
"ku": "curdo",
"kv": "komi",
"kw": "cornico",
"ky": "kirghiso",
"la": "latino",
"lb": "lussemburghese",
"lg": "ganda",
"li": "limburgese",
"ln": "lingala",
"lo": "lao",
"lt": "lituano",
"lu": "luba-katanga",
"lv": "lettone",
"mg": "malgascio",
"mh": "marshallese",
"mi": "maori",
"mk": "macedone",
"ml": "malayalam",
"mn": "mongolo",
"mo": "moldavo",
"mr": "marathi",
"ms": "malese",
"mt": "maltese",
"my": "birmano",
"na": "nauru",
"nd": "ndebele del nord",
"ne": "nepalese",
"ng": "ndonga",
"nl": "olandese",
"nn": "norvegese nynorsk",
"no": "norvegese",
"nr": "ndebele del sud",
"nv": "navajo",
"ny": "nyanja; chichewa; chewa",
"oc": "occitano (post 1500); provenzale",
"oj": "ojibwa",
"om": "oromo",
"or": "oriya",
"os": "ossetico",
"pa": "punjabi",
"pi": "pali",
"pl": "polacco",
"ps": "pashto",
"pt": "portoghese",
"qu": "quechua",
"rm": "lingua rhaeto-romance",
"rn": "rundi",
"ro": "rumeno",
"ru": "russo",
"rw": "kinyarwanda",
"sa": "sanscrito",
"sc": "sardo",
"sd": "sindhi",
"se": "sami del nord",
"sg": "sango",
"sh": "serbo-croato",
"si": "singalese",
"sk": "slovacco",
"sl": "sloveno",
"sm": "samoano",
"sn": "shona",
"so": "somalo",
"sq": "albanese",
"sr": "serbo",
"ss": "swati",
"st": "sotho del sud",
"su": "sundanese",
"sv": "svedese",
"sw": "swahili",
"ta": "tamil",
"te": "telugu",
"tg": "tagicco",
"th": "thai",
"ti": "tigrinya",
"tk": "turcomanno",
"tl": "tagalog",
"tn": "tswana",
"to": "tonga (Isole Tonga)",
"tr": "turco",
"ts": "tsonga",
"tt": "tatarico",
"tw": "ci",
"ty": "taitiano",
"ug": "uigurico",
"uk": "ucraino",
"ur": "urdu",
"uz": "usbeco",
"ve": "venda",
"vi": "vietnamita",
"wa": "vallone",
"wo": "volof",
"xh": "xosa",
"yi": "yiddish",
"yo": "yoruba",
"za": "zhuang",
"zh": "cinese",
"zu": "zulu",
},
{ type: "language", iso: "iu",
countries: [
],
name: "ᐃᓄᒃᑎᑐᑦ ᑎᑎᕋᐅᓯᖅ",
},
{ type: "language", iso: "ja",
countries: [
{_reference: "JP"},
],
name: "日本語",
"aa": "アファル語",
"ab": "アブハズ語",
"ae": "アヴェスタ語",
"af": "アフリカーンス語",
"ak": "アカン語",
"am": "アムハラ語",
"an": "アラゴン語",
"ar": "アラビア語",
"as": "アッサム語",
"av": "アヴァル語",
"ay": "アイマラ語",
"az": "アゼルバイジャン語",
"ba": "バシキール語",
"be": "ベラルーシ語",
"bg": "ブルガリア語",
"bh": "ビハール語",
"bi": "ビスラマ語",
"bm": "バンバラ語",
"bn": "ベンガル語",
"bo": "チベット語",
"br": "ブルトン語",
"bs": "ボスニア語",
"ca": "カタロニア語",
"ce": "チェチェン語",
"ch": "チャモロ語",
"co": "コルシカ語",
"cr": "クリー語",
"cs": "チェコ語",
"cu": "教会スラブ語",
"cv": "チュヴァシュ語",
"cy": "ウェールズ語",
"da": "デンマーク語",
"de": "ドイツ語",
"dv": "ディベヒ語",
"dz": "ゾンカ語",
"ee": "エウェ語",
"el": "ギリシャ語",
"en": "英語",
"eo": "エスペラント語",
"es": "スペイン語",
"et": "エストニア語",
"eu": "バスク語",
"fa": "ペルシア語",
"ff": "フラニ語",
"fi": "フィンランド語",
"fj": "フィジー語",
"fo": "フェロー語",
"fr": "フランス語",
"fy": "フリジア語",
"ga": "アイルランド語",
"gd": "スコットランド・ゲール語",
"gl": "ガリシア語",
"gn": "グアラニー語",
"gu": "グジャラート語",
"gv": "マン島語",
"ha": "ハウサ語",
"he": "ヘブライ語",
"hi": "ヒンディー語",
"ho": "ヒリモトゥ語",
"hr": "クロアチア語",
"ht": "ハイチ語",
"hu": "ハンガリー語",
"hy": "アルメニア語",
"hz": "ヘレロ語",
"ia": "インターリングア語",
"id": "インドネシア語",
"ie": "インターリング語",
"ig": "イボ語",
"ii": "四川イ語",
"ik": "イヌピアック語",
"io": "イド語",
"is": "アイスランド語",
"it": "イタリア語",
"iu": "イヌクウティトット語",
"ja": "日本語",
"jv": "ジャワ語",
"ka": "グルジア語",
"kg": "コンゴ語",
"ki": "キクユ語",
"kj": "クアニャマ語",
"kk": "カザフ語",
"kl": "グリーンランド語",
"km": "クメール語",
"kn": "カンナダ語",
"ko": "韓国語",
"kr": "カヌリ語",
"ks": "カシミール語",
"ku": "クルド語",
"kv": "コミ語",
"kw": "コーンウォール語",
"ky": "キルギス語",
"la": "ラテン語",
"lb": "ルクセンブルク語",
"lg": "ガンダ語",
"li": "リンブルフ語",
"ln": "リンガラ語",
"lo": "ラオ語",
"lt": "リトアニア語",
"lu": "ルバ・カタンガ語",
"lv": "ラトビア語",
"mg": "マダガスカル語",
"mh": "マーシャル語",
"mi": "マオリ語",
"mk": "マケドニア語",
"ml": "マラヤーラム語",
"mn": "モンゴル語",
"mo": "モルダビア語",
"mr": "マラーティー語",
"ms": "マレー語",
"mt": "マルタ語",
"my": "ビルマ語",
"na": "ナウル語",
"nb": "ノルウェー語 (ブークモール)",
"nd": "北ンデベレ語",
"ne": "ネパール語",
"ng": "ンドンガ語",
"nl": "オランダ語",
"nn": "ノルウェー語 (ニーノシュク)",
"no": "ノルウェー語",
"nr": "南ンデベレ語",
"nv": "ナバホ語",
"ny": "ニャンジャ語、チチェワ語、チェワ語",
"oc": "オック語 (1500以降)、プロバンス語",
"oj": "オブジワ語",
"om": "オロモ語",
"or": "オリヤー語",
"os": "オセト語",
"pa": "パンジャブ語",
"pi": "パーリ語",
"pl": "ポーランド語",
"ps": "パシュトゥー語",
"pt": "ポルトガル語",
"qu": "ケチュア語",
"rm": "レト=ロマン語",
"rn": "ルンディ語",
"ro": "ルーマニア語",
"ru": "ロシア語",
"rw": "ルワンダ語",
"sa": "サンスクリット語",
"sc": "サルデーニャ語",
"sd": "シンド語",
"se": "北サーミ語",
"sg": "サンゴ語",
"sh": "セルボ=クロアチア語",
"si": "シンハラ語",
"sk": "スロバキア語",
"sl": "スロベニア語",
"sm": "サモア語",
"sn": "ショナ語",
"so": "ソマリ語",
"sq": "アルバニア語",
"sr": "セルビア語",
"ss": "シスワティ語",
"st": "南部ソト語",
"su": "スンダ語",
"sv": "スウェーデン語",
"sw": "スワヒリ語",
"ta": "タミール語",
"te": "テルグ語",
"tg": "タジク語",
"th": "タイ語",
"ti": "ティグリニア語",
"tk": "トルクメン語",
"tl": "タガログ語",
"tn": "ツワナ語",
"to": "トンガ語",
"tr": "トルコ語",
"ts": "ツォンガ語",
"tt": "タタール語",
"tw": "トウィ語",
"ty": "タヒチ語",
"ug": "ウイグル語",
"uk": "ウクライナ語",
"ur": "ウルドゥー語",
"uz": "ウズベク語",
"ve": "ベンダ語",
"vi": "ベトナム語",
"vo": "ボラピュク語",
"wa": "ワロン語",
"wo": "ウォロフ語",
"xh": "コサ語",
"yi": "イディッシュ語",
"yo": "ヨルバ語",
"za": "チワン語",
"zh": "中国語",
"zu": "ズールー語",
},
{ type: "language", iso: "ka",
countries: [
{_reference: "GE"},
],
name: "ქართული",
"de": "გერმანული",
"en": "ინგლისური",
"es": "ესპანური",
"fr": "ფრანგული",
"it": "იტალიური",
"ja": "იაპონური",
"ka": "ქართული",
"pt": "პორტუგალიური",
"ru": "რუსული",
"zh": "ჩინური",
},
{ type: "language", iso: "kk",
countries: [
{_reference: "KZ"},
],
name: "Қазақ",
"kk": "Қазақ",
},
{ type: "language", iso: "kl",
countries: [
{_reference: "GL"},
],
name: "kalaallisut",
"kl": "kalaallisut",
},
{ type: "language", iso: "km",
countries: [
{_reference: "KH"},
],
name: "ភាសាខ្មែរ",
"aa": "ភាសាអាហ្វារ",
"ae": "ភាសាអាវែស្តង់",
"af": "ភាសាអាហ្វ្រីកាអាន",
"an": "ភាសាអារ៉ាហ្គោន",
"ar": "ភាសាអារ៉ាប់",
"ay": "ភាសាអីម៉ារ៉ា",
"az": "ភាសាអាហ៊្សែរបែហ្សង់",
"be": "ភាសាបេឡារុស្ស",
"bg": "ភាសាប៊ុលហ្ការី",
"bh": "ភាសាបិហារ",
"bm": "ភាសាបាម្បារា",
"bn": "ភាសាបេន្កាលី",
"bo": "ភាសាទីបេ",
"ca": "ភាសាកាតាឡាន",
"cs": "ភាសាឆេក",
"da": "ភាសាដាណឺម៉ាក",
"de": "ភាសាអាល្លឺម៉ង់",
"dz": "ភាសាប៊ូតាន",
"el": "ភាសាក្រិច",
"en": "ភាសាអង់គ្លេស",
"eo": "ភាសាអេស្ពេរ៉ាន្ទោ",
"es": "ភាសាអេស្ប៉ាញ",
"et": "ភាសាអេស្តូនី",
"eu": "ភាសាបាស្កេ",
"fi": "ភាសាហ្វាំងឡង់",
"fj": "ហ្វ៉ីហ្ស៉ី",
"fr": "ភាសាបារាំង",
"ga": "ភាសាហ្កែលិគ",
"gd": "ភាសាហ្កែលិគ [gd]",
"gl": "ភាសាហ្កាលីស៉ី",
"gn": "ភាសាហ្កួរ៉ានី",
"gu": "ភាសាហ្កុយ៉ារាទី",
"he": "ភាសាហេប្រិ",
"hi": "ភាសាហ៉ិនឌី",
"hu": "ភាសាហុងគ្រី",
"hy": "ភាសាអារមេនី",
"id": "ភាសាឥណ្ឌូនេស៊ី",
"is": "ភាសាអ៉ីស្លង់",
"it": "ភាសាអ៊ីតាលី",
"ja": "ភាសាជប៉ុន",
"jv": "ភាសាយ៉ាវា",
"ka": "ភាសាហ្សកហ្ស៉ី",
"kk": "ភាសាកាហ្សាក់ស្តង់់",
"km": "ភាសាខ្មែរ",
"kn": "ភាសាកិណាដា",
"ko": "ភាសាកូរ៉េ",
"ku": "ភាសាឃឺដ",
"ky": "ភាសាគៀរហ្គីស្តង់",
"la": "ភាសាឡាតំាង",
"lo": "ភាសាឡាវ",
"lt": "ភាសាលីទុយអានី",
"lv": "ភាសាឡាតវីយ៉ា",
"mg": "ភាសាម៉ាដាហ្កាសការ",
"mi": "ភាសាម៉ោរី",
"mk": "ភាសាម៉ាសេដូនី",
"ml": "ភាសាម៉ាឡាឡាយ៉ាន",
"mn": "ភាសាម៉ុងហ្គោលី",
"mo": "ភាសាម៉ុលដាវី",
"mr": "ភាសាម៉ារាធី",
"ms": "ភាសាម៉ាលេស៉ី",
"mt": "ភាសាម៉ាល់តា",
"ne": "ភាសានេប៉ាល់",
"nl": "ភាសាហុល្លង់",
"no": "ភាសាន័រវែស",
"or": "ភាសាអូរីយ៉ា",
"pa": "ភាសាពូនយ៉ាប៊ី",
"pl": "ភាសាប៉ូឡូញ",
"pt": "ភាសាព័រទុយហ្កាល់",
"qu": "ភាសាកេទ្ជូអា",
"rn": "ភាសារូន្ឌី",
"ro": "ភាសារូម៉ានី",
"ru": "ភាសាรัរូស្ស៉ី",
"sa": "ភាសាសំស្ក្រឹត",
"sd": "ភាសាស៉ីន្ដី",
"sk": "ភាសាស្លូវ៉ាគី",
"sl": "ភាសាស្លូវ៉ានី",
"sm": "ភាសាសាមូអា",
"so": "ភាសាសូម៉ាលី",
"sq": "ភាសាអាល់បានី",
"su": "ភាំសាស៊ូដង់",
"sv": "ភាសាស៊ុយអែដ",
"sw": "ភាសាស្វាហ៉ីលី",
"ta": "ភាសាតាមីល",
"te": "ភាសាតេលូហ្គូ",
"tg": "ភាសាតាដហ្ស៉ីគីស្តង់",
"th": "ភាសាថៃ",
"tk": "ភាសាទួគមេនីស្តង់",
"to": "ភាសាតុងហ្គោ",
"tr": "ភាសាទួរគី",
"tt": "ភាសាតាតារ",
"uk": "ភាសាអ៊ុយក្រែន",
"ur": "ភាសាអ៊ូរ្ឌូ",
"uz": "ភាសាអ៊ូហ្សបេគីស្តង់",
"vi": "ភាសាវៀតណាម",
"xh": "ភាសាឃសា",
"yi": "ភាសាយីឌីហ្ស",
"yo": "ភាសាយរូបា",
"za": "ភាសាចួង",
"zh": "ភាសាចិន",
"zu": "ភាសាហ្ស៉ូលូ",
},
{ type: "language", iso: "kn",
countries: [
{_reference: "IN"},
],
name: "ಕನ್ನಡ",
"kn": "ಕನ್ನಡ",
},
{ type: "language", iso: "ko",
countries: [
{_reference: "KR"},
],
name: "한국어",
"aa": "아파르어",
"ab": "압카즈어",
"af": "남아공 공용어",
"ak": "아칸어",
"am": "암하라어",
"an": "아라곤어",
"ar": "아랍어",
"as": "아샘어",
"av": "아바릭어",
"ay": "아이마라어",
"az": "아제르바이잔어",
"ba": "바슈키르어",
"be": "벨로루시어",
"bg": "불가리아어",
"bh": "비하르어",
"bi": "비슬라마어",
"bm": "밤바라어",
"bn": "벵골어",
"bo": "티베트어",
"br": "브르타뉴어",
"bs": "보스니아어",
"ca": "카탈로니아어",
"ch": "차모로어",
"co": "코르시카어",
"cr": "크리어",
"cs": "체코어",
"cu": "교회슬라브어",
"cv": "추바시어",
"cy": "웨일스어",
"da": "덴마크어",
"de": "독일어",
"dv": "디베히어",
"dz": "부탄어",
"ee": "에웨어",
"el": "그리스어",
"en": "영어",
"eo": "에스페란토어",
"es": "스페인어",
"et": "에스토니아어",
"eu": "바스크어",
"fa": "이란어",
"ff": "풀라어",
"fi": "핀란드어",
"fj": "피지어",
"fo": "페로스어",
"fr": "프랑스어",
"fy": "프리지아어",
"ga": "아일랜드어",
"gd": "스코갤릭어",
"gl": "갈리시아어",
"gn": "구아라니어",
"gu": "구자라트어",
"gv": "맹크스어",
"ha": "하우자어",
"he": "히브리어",
"hi": "힌디어",
"ho": "히리 모투어",
"hr": "크로아티아어",
"ht": "아이티어",
"hu": "헝가리어",
"hy": "아르메니아어",
"ia": "인터링거",
"id": "인도네시아어",
"ie": "인터링게어",
"ig": "이그보어",
"ii": "시츄안 이어",
"ik": "이누피아크어",
"io": "이도어",
"is": "아이슬란드어",
"it": "이탈리아어",
"iu": "이눅티투트어",
"ja": "일본어",
"jv": "자바어",
"ka": "그루지야어",
"kg": "콩고어",
"ki": "키쿠유어",
"kj": "쿠안야마어",
"kk": "카자흐어",
"kl": "그린랜드어",
"km": "캄보디아어",
"kn": "카나다어",
"ko": "한국어",
"kr": "칸누리어",
"ks": "카슈미르어",
"ku": "크르드어",
"kv": "코미어",
"kw": "콘월어",
"ky": "키르기스어",
"la": "라틴어",
"lb": "룩셈부르크어",
"lg": "간다어",
"li": "림버거어",
"ln": "링갈라어",
"lo": "라오어",
"lt": "리투아니아어",
"lu": "루바-카탄가어",
"lv": "라트비아어",
"mg": "마다가스카르어",
"mh": "마셜제도어",
"mi": "마오리어",
"mk": "마케도니아어",
"ml": "말라얄람어",
"mn": "몽골어",
"mo": "몰다비아어",
"mr": "마라티어",
"ms": "말레이어",
"mt": "몰타어",
"my": "버마어",
"na": "나우루어",
"nb": "보크말 노르웨이어",
"nd": "은데벨레어, 북부",
"ne": "네팔어",
"ng": "느동가어",
"nl": "네덜란드어",
"nn": "뉘노르스크 노르웨이어",
"no": "노르웨이어",
"nr": "은데벨레어, 남부",
"nv": "나바호어",
"ny": "니안자어; 치츄어; 츄어",
"oc": "옥시트어",
"oj": "오지브웨이어",
"om": "오로모어 (아판)",
"or": "오리야어",
"os": "오세트어",
"pa": "펀잡어",
"pi": "팔리어",
"pl": "폴란드어",
"ps": "파시토어 (푸시토)",
"pt": "포르투칼어",
"qu": "케추아어",
"rm": "레토로만어",
"rn": "반투어(부룬디)",
"ro": "루마니아어",
"ru": "러시아어",
"rw": "반투어(루완다)",
"sa": "산스크리트어",
"sc": "사르디니아어",
"sd": "신디어",
"se": "북부 사미어",
"sg": "산고어",
"sh": "세르보크로아티아어",
"si": "스리랑카어",
"sk": "슬로바키아어",
"sl": "슬로베니아어",
"sm": "사모아어",
"sn": "쇼나어",
"so": "소말리아어",
"sq": "알바니아어",
"sr": "세르비아어",
"ss": "시스와티어",
"st": "세소토어",
"su": "순단어",
"sv": "스웨덴어",
"sw": "스와힐리어",
"ta": "타밀어",
"te": "텔루구어",
"tg": "타지키스탄어",
"th": "태국어",
"ti": "티그리냐어",
"tk": "투르크멘어",
"tl": "타갈로그어",
"tn": "세츠와나어",
"to": "통가어",
"tr": "터키어",
"ts": "총가어",
"tt": "타타르어",
"tw": "트위어",
"ty": "타히티어",
"ug": "위구르어",
"uk": "우크라이나어",
"ur": "우르두어",
"uz": "우즈베크어",
"ve": "벤다어",
"vi": "베트남어",
"vo": "볼라퓌크어",
"wa": "왈론어",
"wo": "올로프어",
"xh": "반투어(남아프리카)",
"yi": "이디시어",
"yo": "요루바어",
"za": "주앙어",
"zh": "중국어",
"zu": "줄루어",
},
{ type: "language", iso: "ku",
countries: [
{_reference: "IQ"},
{_reference: "IR"},
{_reference: "SY"},
{_reference: "TR"},
],
name: "kurdî",
},
{ type: "language", iso: "kw",
countries: [
{_reference: "GB"},
],
name: "kernewek",
"kw": "kernewek",
},
{ type: "language", iso: "ky",
countries: [
{_reference: "KG"},
],
name: "Кыргыз",
"de": "немисче",
"en": "англисче",
"es": "испанча",
"fr": "французча",
"it": "италиянча",
"ja": "япончо",
"pt": "португалча",
"ru": "орусча",
"zh": "кытайча",
},
{ type: "language", iso: "ln",
countries: [
{_reference: "CD"},
{_reference: "CG"},
],
name: "lingála",
},
{ type: "language", iso: "lo",
countries: [
{_reference: "LA"},
],
name: "ລາວ",
},
{ type: "language", iso: "lt",
countries: [
{_reference: "LT"},
],
name: "Lietuvių",
"ar": "Arabų",
"bg": "Bulgarų",
"bn": "Bengalų",
"cs": "Čekų",
"da": "Danų",
"de": "Vokiečių",
"el": "Graikų",
"en": "Anglų",
"es": "Ispanų",
"et": "Estų",
"fi": "Suomių",
"fr": "Prancūzų",
"he": "Hebrajų",
"hi": "Hindi",
"hr": "Kroatų",
"hu": "Vengrų",
"it": "Italų",
"ja": "Japonų",
"ko": "Korėjiečių",
"lt": "Lietuvių",
"lv": "Latvių",
"nl": "Olandų",
"no": "Norvegų",
"pl": "Lenkų",
"pt": "Portugalų",
"ro": "Rumunų",
"ru": "Rusų",
"sk": "Slovakų",
"sl": "Slovėnų",
"sv": "Švedų",
"th": "Tajų",
"tr": "Turkų",
"zh": "Kinų",
},
{ type: "language", iso: "lv",
countries: [
{_reference: "LV"},
],
name: "latviešu",
"ar": "arābu",
"bg": "bulgāru",
"cs": "čehu",
"da": "dāņu",
"de": "vācu",
"el": "grieķu",
"en": "angļu",
"es": "spāņu",
"et": "igauņu",
"fi": "somu",
"fr": "franču",
"he": "ivrits",
"hr": "horvātu",
"hu": "ungāru",
"it": "itāliešu",
"ja": "japāņu",
"ko": "korejiešu",
"lt": "lietuviešu",
"lv": "latviešu",
"nl": "holandiešu",
"no": "norvēģu",
"pl": "poļu",
"pt": "portugāļu",
"ro": "rumāņu",
"ru": "krievu",
"sk": "slovāku",
"sl": "slovēņu",
"sv": "zviedru",
"tr": "turku",
"zh": "ķīniešu",
},
{ type: "language", iso: "mk",
countries: [
{_reference: "MK"},
],
name: "македонски",
"de": "германски",
"en": "англиски",
"es": "шпански",
"fr": "француски",
"it": "италијански",
"ja": "јапонски",
"mk": "македонски",
"pt": "португалски",
"ru": "руски",
"zh": "кинески",
},
{ type: "language", iso: "ml",
countries: [
{_reference: "IN"},
],
name: "മലയാളം",
},
{ type: "language", iso: "mn",
countries: [
{_reference: "MN"},
],
name: "Монгол хэл",
"de": "герман",
"en": "англи",
"es": "испани",
"fr": "франц",
"it": "итали",
"ja": "япон",
"pt": "португали",
"ru": "орос",
"zh": "хятад",
},
{ type: "language", iso: "mr",
countries: [
{_reference: "IN"},
],
name: "मराठी",
"aa": "अफार",
"ab": "अबखेजियन",
"af": "अफ्रिकान्स",
"am": "अमहारिक",
"ar": "अरेबिक",
"as": "असामी",
"ay": "ऐमरा",
"az": "अज़रबाइजानी",
"ba": "बष्किर",
"be": "बैलोरुसियन",
"bg": "बल्गेरियन",
"bh": "बीहारी",
"bi": "बिसलमा",
"bn": "बंगाली",
"bo": "तिबेटियन",
"br": "ब्रेटन",
"ca": "कटलन",
"co": "कोर्सिकन",
"cs": "ज़ेक",
"cy": "वेल्ष",
"da": "डानिष",
"de": "जर्मन",
"dz": "भूटानी",
"el": "ग्रीक",
"en": "इंग्रेजी",
"eo": "इस्परान्टो",
"es": "स्पानिष",
"et": "इस्टोनियन्",
"eu": "बास्क",
"fa": "पर्षियन्",
"fi": "फिन्निष",
"fj": "फिजी",
"fo": "फेरोस्",
"fr": "फ्रेन्च",
"fy": "फ्रिसियन्",
"ga": "ऐरिष",
"gd": "स्काटस् गेलिक",
"gl": "गेलीशियन",
"gn": "गौरानी",
"gu": "गुजराती",
"ha": "हौसा",
"he": "हेबृ",
"hi": "हिन्दी",
"hr": "क्रोयेषियन्",
"hu": "हंगेरियन्",
"hy": "आर्मीनियन्",
"ia": "इन्टरलिंग्वा",
"id": "इन्डोनेषियन",
"ie": "इन्टरलिंग",
"ik": "इनूपियाक",
"is": "आईसलान्डिक",
"it": "इटालियन",
"iu": "इनुकिटुट्",
"ja": "जापनीस्",
"jv": "जावनीस्",
"ka": "जार्जियन्",
"kk": "कज़क",
"kl": "ग्रीनलान्डिक",
"km": "कंबोडियन",
"kn": "कन्नड",
"ko": "कोरियन्",
"ks": "कश्मीरी",
"ku": "कुर्दिष",
"ky": "किर्गिज़",
"la": "लाटिन",
"ln": "लिंगाला",
"lo": "लाओतियन्",
"lt": "लिथुआनियन्",
"lv": "लाट्वियन् (लेट्टिष)",
"mg": "मलागसी",
"mi": "माओरी",
"mk": "मसीडोनियन्",
"ml": "मलियालम",
"mn": "मंगोलियन्",
"mo": "मोल्डावियन्",
"mr": "मराठी",
"ms": "मलय",
"mt": "मालतीस्",
"my": "बर्मीस्",
"na": "नौरो",
"ne": "नेपाली",
"nl": "डच",
"no": "नोर्वेजियन",
"oc": "ओसिटान्",
"om": "ओरोमो (अफान)",
"or": "ओरिया",
"pa": "पंजाबी",
"pl": "पोलिष",
"ps": "पष्टो (पुष्टो)",
"pt": "पोर्चुगीस्",
"qu": "क्वेचओ",
"rm": "रहटो-रोमान्स्",
"rn": "किरुन्दी",
"ro": "रोमानियन्",
"ru": "रष्यन्",
"rw": "किन्यार्वान्डा",
"sa": "संस्कृत",
"sd": "सिंधी",
"sg": "सांग्रो",
"sh": "सेर्बो-क्रोयेषियन्",
"si": "सिन्हलीस्",
"sk": "स्लोवाक",
"sl": "स्लोवेनियन्",
"sm": "समोन",
"sn": "शोना",
"so": "सोमाली",
"sq": "आल्बेनियन्",
"sr": "सेर्बियन्",
"ss": "सिस्वती",
"st": "सेसोथो",
"su": "सुंदनीस्",
"sv": "स्वीडिष",
"sw": "स्वाहिली",
"ta": "तमिळ",
"te": "तेलंगू",
"tg": "तजिक",
"th": "थाई",
"ti": "तिग्रिन्या",
"tk": "तुर्कमेन",
"tl": "तगालोग",
"tn": "सेत्स्वाना",
"to": "तोंगा",
"tr": "तुर्किष",
"ts": "त्सोगा",
"tt": "टटार",
"tw": "त्वि",
"ug": "उधूर",
"uk": "युक्रेनियन्",
"ur": "उर्दू",
"uz": "उज़बेक",
"vi": "वियत्नामीज़",
"vo": "ओलापुक",
"wo": "उलोफ",
"xh": "क्स्होसा",
"yi": "इद्दिष",
"yo": "यूरुबा",
"za": "झ्हुन्ग",
"zh": "चिनीस्",
"zu": "जुलू",
},
{ type: "language", iso: "ms",
countries: [
{_reference: "BN"},
{_reference: "MY"},
],
name: "Bahasa Melayu",
"ms": "Bahasa Melayu",
},
{ type: "language", iso: "mt",
countries: [
{_reference: "MT"},
],
name: "Malti",
"aa": "Afar",
"ab": "Abkażjan",
"ae": "Avestan",
"af": "Afrikans",
"ak": "Akan",
"am": "Amħariku",
"an": "Aragonese",
"ar": "Għarbi",
"as": "Assamese",
"av": "Avarik",
"ay": "Ajmara",
"az": "Ażerbajġani",
"ba": "Baxkir",
"be": "Belarussu",
"bg": "Bulgaru",
"bh": "Biħari",
"bi": "Bislama",
"bm": "Bambara",
"bn": "Bengali",
"bo": "Tibetjan",
"br": "Brenton",
"bs": "Bosnijan",
"ca": "Katalan",
"ce": "Ċeċen",
"ch": "Ċamorro",
"co": "Korsiku",
"cr": "Krij",
"cs": "Ċek",
"cu": "Slaviku tal-Knisja",
"cv": "Ċuvax",
"cy": "Welx",
"da": "Daniż",
"de": "Ġermaniż",
"dv": "Diveħi",
"dz": "Dżongka",
"ee": "Ewe",
"el": "Grieg",
"en": "Ingliż",
"eo": "Esperanto",
"es": "Spanjol",
"et": "Estonjan",
"eu": "Bask",
"fa": "Persjan",
"ff": "Fulaħ",
"fi": "Finlandiż",
"fj": "Fiġi",
"fo": "Fawriż",
"fr": "Franċiż",
"fy": "Friżjan",
"ga": "Irlandiż",
"gd": "Galliku Skoċċiż",
"gl": "Gallegjan",
"gn": "Gwarani",
"gu": "Guġarati",
"gv": "Manks",
"ha": "Ħawsa",
"he": "Ebrajk",
"hi": "Ħindi",
"ho": "Ħiri Motu",
"hr": "Kroat",
"ht": "Haitian",
"hu": "Ungeriż",
"hy": "Armenjan",
"hz": "Ħerero",
"ia": "Interlingua",
"id": "Indoneżjan",
"ie": "Interlingue",
"ig": "Igbo",
"ii": "Sichuan Yi",
"ik": "Inupjak",
"io": "Ido",
"is": "Iżlandiż",
"it": "Taljan",
"iu": "Inukitut",
"ja": "Ġappuniż",
"jv": "Ġavaniż",
"ka": "Ġorġjan",
"kg": "Kongo",
"ki": "Kikuju",
"kj": "Kuanyama",
"kk": "Każak",
"kl": "Kalallisut",
"km": "Kmer",
"kn": "Kannada",
"ko": "Korejan",
"kr": "Kanuri",
"ks": "Kaxmiri",
"ku": "Kurdiż",
"kv": "Komi",
"kw": "Korniku",
"ky": "Kirgiż",
"la": "Latin",
"lb": "Letżburgiż",
"lg": "Ganda",
"li": "Limburgish",
"ln": "Lingaljan",
"lo": "Lao",
"lt": "Litwanjan",
"lu": "Luba-Katanga",
"lv": "Latvjan (Lettix)",
"mg": "Malagażi",
"mh": "Marxall",
"mi": "Maori",
"mk": "Maċedonjan",
"ml": "Malajalam",
"mn": "Mongoljan",
"mo": "Moldavjan",
"mr": "Marati",
"ms": "Malajan",
"mt": "Malti",
"my": "Burmiż",
"na": "Nawuru",
"nb": "Bokmahal Norveġiż",
"nd": "Ndebele, ta’ Fuq",
"ne": "Nepaliż",
"ng": "Ndonga",
"nl": "Olandiż",
"nn": "Ninorsk Norveġiż",
"no": "Norveġiż",
"nr": "Ndebele, t’Isfel",
"nv": "Navaħo",
"ny": "Ċiċewa; Njanġa",
"oc": "Provenzal (wara 1500)",
"oj": "Oġibwa",
"om": "Oromo (Afan)",
"or": "Orija",
"os": "Ossettiku",
"pa": "Punġabi",
"pi": "Pali",
"pl": "Pollakk",
"ps": "Paxtun",
"pt": "Portugiż",
"qu": "Keċwa",
"rm": "Reto-Romanz",
"rn": "Rundi",
"ro": "Rumen",
"ru": "Russu",
"rw": "Kinjarwanda",
"sa": "Sanskrit",
"sc": "Sardinjan",
"sd": "Sindi",
"se": "Sami ta’ Fuq",
"sg": "Sango",
"sh": "Serbo-Kroat",
"si": "Sinħaliż",
"sk": "Slovakk",
"sl": "Sloven",
"sm": "Samojan",
"sn": "Xona",
"so": "Somali",
"sq": "Albaniż",
"sr": "Serb",
"ss": "Swati",
"st": "Soto, t’Isfel",
"su": "Sundaniż",
"sv": "Svediż",
"sw": "Swaħili",
"ta": "Tamil",
"te": "Telugu",
"tg": "Taġik",
"th": "Tajlandiż",
"ti": "Tigrinja",
"tk": "Turkmeni",
"tl": "Tagalog",
"tn": "Zwana",
"to": "Tongan (Gżejjer ta’ Tonga)",
"tr": "Tork",
"ts": "Tsonga",
"tt": "Tatar",
"tw": "Twi",
"ty": "Taħitjan",
"ug": "Wigur",
"uk": "Ukranjan",
"ur": "Urdu",
"uz": "Użbek",
"ve": "Venda",
"vi": "Vjetnamiż",
"vo": "Volapuk",
"wa": "Walloon",
"wo": "Wolof",
"xh": "Ħoża",
"yi": "Jiddix",
"yo": "Joruba",
"za": "Żwang",
"zh": "Ċiniż",
"zu": "Żulu",
},
{ type: "language", iso: "nb",
countries: [
{_reference: "NO"},
],
name: "bokmål",
"aa": "afar",
"ab": "abkhasisk",
"ae": "avestisk",
"af": "afrikaans",
"ak": "akan",
"am": "amharisk",
"an": "aragonsk",
"ar": "arabisk",
"as": "assamisk",
"av": "avarisk",
"ay": "aymara",
"az": "aserbajdsjansk",
"ba": "basjkirsk",
"be": "hviterussisk",
"bg": "bulgarsk",
"bh": "bihari",
"bi": "bislama",
"bm": "bambara",
"bn": "bengali",
"bo": "tibetansk",
"br": "bretonsk",
"bs": "bosnisk",
"ca": "katalansk",
"ce": "tsjetsjensk",
"ch": "chamorro",
"co": "korsikansk",
"cr": "cree",
"cs": "tsjekkisk",
"cu": "kirkeslavisk",
"cv": "tsjuvansk",
"cy": "walisisk",
"da": "dansk",
"de": "tysk",
"dv": "divehi",
"dz": "dzongkha",
"ee": "ewe",
"el": "gresk",
"en": "engelsk",
"eo": "esperanto",
"es": "spansk",
"et": "estisk",
"eu": "baskisk",
"fa": "persisk",
"ff": "fulani",
"fi": "finsk",
"fj": "fijiansk",
"fo": "færøysk",
"fr": "fransk",
"ga": "irsk",
"gd": "skotsk gælisk",
"gl": "galicisk",
"gn": "guarani",
"gu": "gujarati",
"gv": "manx",
"ha": "hausa",
"he": "hebraisk",
"hi": "hindi",
"ho": "hiri motu",
"hr": "kroatisk",
"ht": "haitisk",
"hu": "ungarsk",
"hy": "armensk",
"hz": "herero",
"ia": "interlingua",
"id": "indonesisk",
"ie": "interlingue",
"ig": "ibo",
"ii": "sichuan-yi",
"ik": "unupiak",
"io": "ido",
"is": "islandsk",
"it": "italiensk",
"iu": "inuktitut",
"ja": "japansk",
"jv": "javanesisk",
"ka": "georgisk",
"kg": "kikongo",
"ki": "kikuyu",
"kj": "kuanyama",
"kk": "kasakhisk",
"km": "khmer",
"kn": "kannada",
"ko": "koreansk",
"kr": "kanuri",
"ks": "kasjmiri",
"ku": "kurdisk",
"kv": "komi",
"kw": "kornisk",
"ky": "kirgisisk",
"la": "latin",
"lb": "luxemburgsk",
"lg": "ganda",
"li": "limburgisk",
"ln": "lingala",
"lo": "laotisk",
"lt": "litauisk",
"lu": "luba-katanga",
"lv": "latvisk",
"mg": "madagassisk",
"mh": "marshallesisk",
"mi": "maori",
"mk": "makedonsk",
"ml": "malayalam",
"mn": "mongolsk",
"mo": "moldavisk",
"mr": "marathi",
"ms": "malayisk",
"mt": "maltesisk",
"my": "burmesisk",
"na": "nauru",
"nb": "bokmål",
"nd": "nord-ndebele",
"ne": "nepalsk",
"ng": "ndonga",
"nl": "nederlandsk",
"nn": "nynorsk",
"no": "norsk",
"nr": "sør-ndebele",
"nv": "navajo",
"ny": "nyanja",
"oc": "oksitansk (etter 1500)",
"oj": "ojibwa",
"om": "oromo",
"or": "oriya",
"os": "ossetisk",
"pa": "panjabi",
"pi": "pali",
"pl": "polsk",
"ps": "pashto",
"pt": "portugisisk",
"qu": "quechua",
"rm": "retoromansk",
"rn": "rundi",
"ro": "rumensk",
"ru": "russisk",
"rw": "kinjarwanda",
"sa": "sanskrit",
"sc": "sardinsk",
"sd": "sindhi",
"se": "nordsamisk",
"sg": "sango",
"sh": "serbokroatisk",
"si": "singalesisk",
"sk": "slovakisk",
"sl": "slovensk",
"sm": "samoansk",
"sn": "shona",
"sq": "albansk",
"sr": "serbisk",
"ss": "swati",
"st": "sør-sotho",
"su": "sundanesisk",
"sv": "svensk",
"sw": "swahili",
"ta": "tamil",
"te": "telugu",
"tg": "tatsjikisk",
"th": "thai",
"ti": "tigrinja",
"tk": "turkmensk",
"tl": "tagalog",
"tn": "tswana",
"to": "tonga (Tonga-øyene)",
"tr": "tyrkisk",
"ts": "tsonga",
"tt": "tatarisk",
"tw": "twi",
"ty": "tahitisk",
"ug": "uigurisk",
"uk": "ukrainsk",
"ur": "urdu",
"uz": "usbekisk",
"ve": "venda",
"vi": "vietnamesisk",
"vo": "volapyk",
"wa": "vallonsk",
"wo": "wolof",
"xh": "xhosa",
"yi": "jiddisk",
"yo": "joruba",
"za": "zhuang",
"zh": "kinesisk",
"zu": "zulu",
},
{ type: "language", iso: "ne",
countries: [
{_reference: "NP"},
],
},
{ type: "language", iso: "nl",
countries: [
{_reference: "BE"},
{_reference: "NL"},
],
name: "Nederlands",
"aa": "Afar",
"ab": "Abchazisch",
"ae": "Avestisch",
"af": "Afrikaans",
"ak": "Akan",
"am": "Amhaars",
"an": "Aragonees",
"ar": "Arabisch",
"as": "Assamees",
"av": "Avarisch",
"ay": "Aymara",
"az": "Azerbeidzjaans",
"ba": "Basjkiers",
"be": "Wit-Russisch",
"bg": "Bulgaars",
"bh": "Bihari",
"bi": "Bislama",
"bm": "Bambara",
"bn": "Bengalees",
"bo": "Tibetaans",
"br": "Bretons",
"bs": "Bosnisch",
"ca": "Catalaans",
"ce": "Chechen",
"ch": "Chamorro",
"co": "Corsicaans",
"cr": "Cree",
"cs": "Tsjechisch",
"cu": "Kerkslavisch",
"cv": "Tsjoevasjisch",
"cy": "Welsh",
"da": "Deens",
"de": "Duits",
"dv": "Divehi",
"dz": "Dzongkha",
"ee": "Ewe",
"el": "Grieks",
"en": "Engels",
"eo": "Esperanto",
"es": "Spaans",
"et": "Estlands",
"eu": "Baskisch",
"fa": "Perzisch",
"ff": "Fulah",
"fi": "Fins",
"fj": "Fijisch",
"fo": "Faeröers",
"fr": "Frans",
"fy": "Fries",
"ga": "Iers",
"gd": "Schots Gaelic",
"gl": "Galicisch",
"gn": "Guarani",
"gu": "Gujarati",
"gv": "Manx",
"ha": "Hausa",
"he": "Hebreeuws",
"hi": "Hindi",
"ho": "Hiri Motu",
"hr": "Kroatisch",
"ht": "Haïtiaans",
"hu": "Hongaars",
"hy": "Armeens",
"hz": "Herero",
"ia": "Interlingua",
"id": "Indonesisch",
"ie": "Interlingue",
"ig": "Igbo",
"ii": "Sichuan Yi",
"ik": "Inupiaq",
"io": "Ido",
"is": "IJslands",
"it": "Italiaans",
"iu": "Inuktitut",
"ja": "Japans",
"jv": "Javaans",
"ka": "Georgisch",
"kg": "Kongo",
"ki": "Kikuyu",
"kj": "Kuanyama",
"kk": "Kazachs",
"kl": "Kalaallisut",
"km": "Khmer",
"kn": "Kannada",
"ko": "Koreaans",
"kr": "Kanuri",
"ks": "Kashmiri",
"ku": "Koerdisch",
"kv": "Komi",
"kw": "Cornish",
"ky": "Kirgizisch",
"la": "Latijn",
"lb": "Luxemburgs",
"lg": "Ganda",
"li": "Limburgs",
"ln": "Lingala",
"lo": "Lao",
"lt": "Litouws",
"lu": "Luba-Katanga",
"lv": "Letlands",
"mg": "Malagasisch",
"mh": "Marshallees",
"mi": "Maori",
"mk": "Macedonisch",
"ml": "Malayalam",
"mn": "Mongools",
"mo": "Moldavisch",
"mr": "Marathi",
"ms": "Maleis",
"mt": "Maltees",
"my": "Birmees",
"na": "Nauru",
"nb": "Noors - Bokmål",
"nd": "Ndebele, noord-",
"ne": "Nepalees",
"ng": "Ndonga",
"nl": "Nederlands",
"nn": "Noors - Nynorsk",
"no": "Noors",
"nr": "Ndebele, zuid-",
"nv": "Navajo",
"ny": "Nyanja",
"oc": "Langue d’Oc (na 1500)",
"oj": "Ojibwa",
"om": "Oromo",
"or": "Oriya",
"os": "Ossetisch",
"pa": "Punjabi",
"pi": "Pali",
"pl": "Pools",
"ps": "Pashto",
"pt": "Portugees",
"qu": "Quechua",
"rm": "Retoromaans",
"rn": "Rundi",
"ro": "Roemeens",
"ru": "Russisch",
"rw": "Kinyarwanda",
"sa": "Sanskrit",
"sc": "Sardinisch",
"sd": "Sindhi",
"se": "Noord-Samisch",
"sg": "Sango",
"sh": "Servokroatisch",
"si": "Singalees",
"sk": "Slowaaks",
"sl": "Sloveens",
"sm": "Samoaans",
"sn": "Shona",
"so": "Somalisch",
"sq": "Albanees",
"sr": "Servisch",
"ss": "Swati",
"st": "Sotho, zuid",
"su": "Sundanees",
"sv": "Zweeds",
"sw": "Swahili",
"ta": "Tamil",
"te": "Teloegoe",
"tg": "Tadzjik",
"th": "Thai",
"ti": "Tigrinya",
"tk": "Turkmeens",
"tl": "Tagalog",
"tn": "Tswana",
"to": "Tonga (Tonga-eilanden)",
"tr": "Turks",
"ts": "Tsonga",
"tt": "Tataars",
"tw": "Twi",
"ty": "Tahitisch",
"ug": "Uighur",
"uk": "Oekraïens",
"ur": "Urdu",
"uz": "Oezbeeks",
"ve": "Venda",
"vi": "Vietnamees",
"vo": "Volapük",
"wa": "Wallonisch",
"wo": "Wolof",
"xh": "Xhosa",
"yi": "Jiddisch",
"yo": "Joruba",
"za": "Zhuang",
"zh": "Chinees",
"zu": "Zulu",
},
{ type: "language", iso: "nn",
countries: [
{_reference: "NO"},
],
name: "nynorsk",
"aa": "afar",
"ab": "abkhasisk",
"ae": "avestisk",
"af": "afrikaans",
"ak": "akan",
"am": "amharisk",
"an": "aragonsk",
"ar": "arabisk",
"as": "assamisk",
"av": "avarisk",
"ay": "aymara",
"az": "aserbajdsjansk",
"ba": "basjkirsk",
"be": "kviterussisk",
"bg": "bulgarsk",
"bh": "bihari",
"bi": "bislama",
"bm": "bambara",
"bn": "bengali",
"bo": "tibetansk",
"br": "bretonsk",
"bs": "bosnisk",
"ca": "katalansk",
"ce": "tsjetsjensk",
"ch": "chamorro",
"co": "korsikansk",
"cr": "cree",
"cs": "tsjekkisk",
"cu": "kyrkjeslavisk",
"cv": "tsjuvansk",
"cy": "walisisk",
"da": "dansk",
"de": "tysk",
"dv": "divehi",
"dz": "dzongkha",
"ee": "ewe",
"el": "gresk",
"en": "engelsk",
"eo": "esperanto",
"es": "spansk",
"et": "estisk",
"eu": "baskisk",
"fa": "persisk",
"ff": "fulani",
"fi": "finsk",
"fj": "fijiansk",
"fo": "færøysk",
"fr": "fransk",
"fy": "vestfrisisk",
"ga": "irsk",
"gd": "skotsk-gælisk",
"gl": "galicisk",
"gn": "guarani",
"gu": "gujarati",
"gv": "manx",
"ha": "hausa",
"he": "hebraisk",
"hi": "hindi",
"ho": "hiri motu",
"hr": "kroatisk",
"ht": "haitisk",
"hu": "ungarsk",
"hy": "armensk",
"hz": "herero",
"ia": "interlingua",
"id": "indonesisk",
"ie": "interlingue",
"ig": "ibo",
"ii": "sichuan-yi",
"ik": "inupiak",
"io": "ido",
"is": "islandsk",
"it": "italiensk",
"iu": "inuktitut",
"ja": "japansk",
"jv": "javanesisk",
"ka": "georgisk",
"kg": "kikongo",
"ki": "kikuyu",
"kj": "kuanyama",
"kk": "kasakhisk",
"kl": "kalaallisut; grønlandsk",
"km": "khmer",
"kn": "kannada",
"ko": "koreansk",
"kr": "kanuri",
"ks": "kasjmiri",
"ku": "kurdisk",
"kv": "komi",
"kw": "kornisk",
"ky": "kirgisisk",
"la": "latin",
"lb": "luxemburgsk",
"lg": "ganda",
"li": "limburgisk",
"ln": "lingala",
"lo": "laotisk",
"lt": "litauisk",
"lu": "luba-katanga",
"lv": "latvisk",
"mg": "madagassisk",
"mh": "marshallesisk",
"mi": "maori",
"mk": "makedonsk",
"ml": "malayalam",
"mn": "mongolsk",
"mo": "moldavisk",
"mr": "marathi",
"ms": "malayisk",
"mt": "maltesisk",
"my": "burmesisk",
"na": "nauru",
"nb": "bokmål",
"nd": "nord-ndebele",
"ne": "nepalsk",
"ng": "ndonga",
"nl": "nederlandsk",
"nn": "nynorsk",
"no": "norsk",
"nr": "sør-ndebele",
"nv": "navajo",
"ny": "nyanja",
"oc": "oksitansk (etter 1500)",
"oj": "ojibwa",
"om": "oromo",
"or": "oriya",
"os": "ossetisk",
"pa": "panjabi",
"pi": "pali",
"pl": "polsk",
"ps": "pashto",
"pt": "portugisisk",
"qu": "quechua",
"rm": "retoromansk",
"rn": "rundi",
"ro": "rumensk",
"ru": "russisk",
"rw": "kinjarwanda",
"sa": "sanskrit",
"sc": "sardinsk",
"sd": "sindhi",
"se": "nordsamisk",
"sg": "sango",
"si": "singalesisk",
"sk": "slovakisk",
"sl": "slovensk",
"sm": "samoansk",
"sn": "shona",
"so": "somali",
"sq": "albansk",
"sr": "serbisk",
"ss": "swati",
"st": "sørsotho",
"su": "sundanesisk",
"sv": "svensk",
"sw": "swahili",
"ta": "tamil",
"te": "telugu",
"tg": "tatsjikisk",
"th": "thai",
"ti": "tigrinja",
"tk": "turkmensk",
"tl": "tagalog",
"tn": "tswana",
"to": "tonga (Tonga-øyane)",
"tr": "tyrkisk",
"ts": "tsonga",
"tt": "tatarisk",
"tw": "twi",
"ty": "tahitisk",
"ug": "uigurisk",
"uk": "ukrainsk",
"ur": "urdu",
"uz": "usbekisk",
"ve": "venda",
"vi": "vietnamesisk",
"vo": "volapyk",
"wa": "vallonsk",
"wo": "wolof",
"xh": "xhosa",
"yi": "jiddisk",
"yo": "joruba",
"za": "zhuang",
"zh": "kinesisk",
"zu": "zulu",
},
{ type: "language", iso: "nr",
countries: [
{_reference: "ZA"},
],
},
{ type: "language", iso: "ny",
countries: [
{_reference: "MW"},
],
},
{ type: "language", iso: "om",
countries: [
{_reference: "ET"},
{_reference: "KE"},
],
name: "Oromoo",
"om": "Oromoo",
},
{ type: "language", iso: "or",
countries: [
{_reference: "IN"},
],
name: "ଓଡ଼ିଆ",
},
{ type: "language", iso: "pa",
countries: [
{_reference: "IN"},
{_reference: "PK"},
],
name: "ਪੰਜਾਬੀ",
"pa": "ਪੰਜਾਬੀ",
},
{ type: "language", iso: "pl",
countries: [
{_reference: "PL"},
],
name: "polski",
"ar": "arabski",
"bg": "bułgarski",
"bn": "bengalski",
"ca": "kataloński",
"cs": "czeski",
"cy": "walijski",
"da": "duński",
"de": "niemiecki",
"el": "grecki",
"en": "angielski",
"es": "hiszpański",
"et": "estoński",
"eu": "baskijski",
"fi": "fiński",
"fr": "francuski",
"he": "hebrajski",
"hi": "hindi",
"hr": "chorwacki",
"hu": "węgierski",
"it": "włoski",
"ja": "japoński",
"ko": "koreański",
"lt": "litewski",
"lv": "łotewski",
"mt": "maltański",
"nl": "niderlandzki",
"no": "norweski",
"pl": "polski",
"pt": "portugalski",
"ro": "rumuński",
"ru": "rosyjski",
"sk": "słowacki",
"sl": "słoweński",
"sv": "szwedzki",
"th": "tajski",
"tr": "turecki",
"zh": "chiński",
},
{ type: "language", iso: "ps",
countries: [
{_reference: "AF"},
],
name: "پښتو",
"ar": "عربي",
"de": "الماني",
"el": "یوناني",
"en": "انګلیسي",
"et": "حبشي",
"fa": "فارسي",
"fi": "فینلنډي",
"fr": "فرانسوي",
"he": "عبري",
"hi": "هندي",
"hy": "ارمني",
"it": "ایټالوي",
"ja": "جاپانی",
"ku": "کردي",
"la": "لاتیني",
"mg": "ملغاسي",
"mk": "مقدوني",
"mn": "مغولي",
"ms": "ملایا",
"pl": "پولنډي",
"ps": "پښتو",
"pt": "پورتګالي",
"ru": "روسي",
"sa": "سنسکریټ",
"sv": "سویډنی",
"tg": "تاجک",
"tk": "ترکمني",
"tt": "تاتار",
"uz": "ازبکي",
"zh": "چیني",
},
{ type: "language", iso: "pt",
countries: [
{_reference: "BR"},
{_reference: "PT"},
],
name: "português",
"aa": "afar",
"ab": "abkhazian",
"ae": "avéstico",
"af": "africâner",
"ak": "Akan",
"am": "amárico",
"an": "aragonês",
"ar": "árabe",
"as": "assamês",
"av": "avaric",
"ay": "aimara",
"az": "azerbaijano",
"ba": "bashkir",
"be": "bielo-russo",
"bg": "búlgaro",
"bh": "biari",
"bi": "bislamá",
"bm": "bambara",
"bn": "bengali",
"bo": "tibetano",
"br": "bretão",
"bs": "bósnio",
"ca": "catalão",
"ce": "chechene",
"ch": "chamorro",
"co": "córsico",
"cr": "cree",
"cs": "tcheco",
"cu": "eslavo eclesiástico",
"cv": "chuvash",
"cy": "galês",
"da": "dinamarquês",
"de": "alemão",
"dv": "divehi",
"dz": "dzonga",
"ee": "eve",
"el": "grego",
"en": "inglês",
"eo": "esperanto",
"es": "espanhol",
"et": "estoniano",
"eu": "basco",
"fa": "persa",
"ff": "fula",
"fi": "finlandês",
"fj": "fijiano",
"fo": "feroês",
"fr": "francês",
"fy": "frisão",
"ga": "irlandês",
"gd": "gaélico escocês",
"gl": "galego",
"gn": "guarani",
"gu": "guzerate",
"gv": "manx",
"ha": "hauçá",
"he": "hebraico",
"hi": "hindi",
"ho": "hiri motu",
"hr": "croata",
"ht": "haitiano",
"hu": "húngaro",
"hy": "armênio",
"hz": "herero",
"ia": "interlíngua",
"id": "indonésio",
"ie": "interlingue",
"ig": "ibo",
"ii": "sichuan yi",
"ik": "Inupiaq",
"io": "ido",
"is": "islandês",
"it": "italiano",
"iu": "inuktitut",
"ja": "japonês",
"ka": "georgiano",
"kg": "congolês",
"ki": "quicuio",
"kj": "Kuanyama",
"kk": "cazaque",
"kl": "groenlandês",
"km": "cmer",
"kn": "canarês",
"ko": "coreano",
"kr": "canúri",
"ks": "kashmiri",
"ku": "curdo",
"kv": "komi",
"kw": "córnico",
"ky": "quirguiz",
"la": "latim",
"lb": "luxemburguês",
"lg": "luganda",
"li": "limburgish",
"ln": "lingala",
"lo": "laosiano",
"lt": "lituano",
"lu": "luba-catanga",
"lv": "letão",
"mg": "malgaxe",
"mh": "marshallês",
"mi": "maori",
"mk": "macedônio",
"ml": "malaiala",
"mn": "mongol",
"mo": "moldávio",
"mr": "marata",
"ms": "malaio",
"mt": "maltês",
"my": "birmanês",
"na": "nauruano",
"nb": "bokmål norueguês",
"nd": "ndebele, north",
"ne": "nepali",
"ng": "dongo",
"nl": "holandês",
"nn": "nynorsk norueguês",
"no": "norueguês",
"nr": "ndebele, south",
"nv": "navajo",
"ny": "nianja; chicheua; cheua",
"oc": "occitânico (após 1500); provençal",
"oj": "ojibwa",
"om": "oromo",
"or": "oriya",
"os": "ossetic",
"pa": "panjabi",
"pi": "páli",
"pl": "polonês",
"ps": "pashto (pushto)",
"pt": "português",
"qu": "quíchua",
"rm": "rhaeto-romance",
"rn": "rundi",
"ro": "romeno",
"ru": "russo",
"rw": "kinyarwanda",
"sa": "sânscrito",
"sc": "sardo",
"sd": "sindi",
"se": "northern sami",
"sg": "sango",
"sh": "servo-croata",
"si": "cingalês",
"sk": "eslovaco",
"sl": "eslovênio",
"so": "somali",
"sq": "albanês",
"sr": "sérvio",
"ss": "swati",
"st": "soto, do sul",
"su": "sundanês",
"sv": "sueco",
"sw": "suaíli",
"ta": "tâmil",
"te": "telugu",
"tg": "tadjique",
"th": "tailandês",
"ti": "tigrínia",
"tk": "turcomano",
"tn": "tswana",
"to": "tonga (ilhas tonga)",
"tr": "turco",
"ts": "tsonga",
"tt": "tatar",
"tw": "twi",
"ty": "taitiano",
"ug": "uighur",
"uk": "ucraniano",
"ur": "urdu",
"uz": "usbeque",
"ve": "venda",
"vi": "vietnamita",
"vo": "volapuque",
"wa": "walloon",
"wo": "uolofe",
"xh": "xosa",
"yi": "iídiche",
"yo": "ioruba",
"za": "zhuang",
"zh": "chinês",
"zu": "zulu",
},
{ type: "language", iso: "ro",
countries: [
{_reference: "RO"},
],
name: "Română",
"ar": "Arabă",
"bg": "Bulgară",
"cs": "Cehă",
"da": "Daneză",
"de": "Germană",
"el": "Greacă",
"en": "Engleză",
"es": "Spaniolă",
"et": "Estoniană",
"fi": "Finlandeză",
"fr": "Franceză",
"he": "Ebraică",
"hr": "Croată",
"hu": "Maghiară",
"it": "Italiană",
"ja": "Japoneză",
"ko": "Coreeană",
"lt": "Lituaniană",
"lv": "Letonă",
"nl": "Olandeză",
"no": "Norvegiană",
"pl": "Poloneză",
"pt": "Portugheză",
"ro": "Română",
"ru": "Rusă",
"sk": "Slovacă",
"sl": "Slovenă",
"sv": "Suedeză",
"tr": "Turcă",
"zh": "Chineză",
},
{ type: "language", iso: "ru",
countries: [
{_reference: "RU"},
{_reference: "UA"},
],
name: "русский",
"aa": "афар",
"ab": "абхазский",
"ae": "авестийский",
"af": "африкаанс",
"am": "амхарский",
"an": "арагонский",
"ar": "арабский",
"as": "ассамский",
"av": "аварский",
"ay": "аймара",
"az": "азербайджанский",
"ba": "башкирский",
"be": "белорусский",
"bg": "болгарский",
"bh": "бихари",
"bi": "бислама",
"bm": "бамбарийский",
"bn": "бенгальский",
"bo": "тибетский",
"br": "бретонский",
"bs": "боснийский",
"ca": "каталанский",
"ce": "чеченский",
"ch": "чаморро",
"co": "корсиканский",
"cr": "криийский",
"cs": "чешский",
"cu": "церковнославянский",
"cv": "чувашский",
"cy": "валлийский",
"da": "датский",
"de": "немецкий",
"dz": "дзонг-кэ",
"ee": "эве",
"el": "греческий",
"en": "английский",
"eo": "эсперанто",
"es": "испанский",
"et": "эстонский",
"eu": "баскский",
"fa": "персидский",
"fi": "финский",
"fj": "фиджи",
"fo": "фарерский",
"fr": "французский",
"fy": "фризский",
"ga": "ирландский",
"gd": "гэльский",
"gl": "галисийский",
"gn": "гуарани",
"gu": "гуджарати",
"gv": "мэнский",
"ha": "хауса",
"he": "иврит",
"hi": "хинди",
"hr": "хорватский",
"ht": "гаитянский",
"hu": "венгерский",
"hy": "армянский",
"hz": "гереро",
"ia": "интерлингва",
"id": "индонезийский",
"ie": "интерлингве",
"ig": "игбо",
"ik": "инупиак",
"is": "исландский",
"it": "итальянский",
"iu": "инуктитут",
"ja": "японский",
"jv": "яванский",
"ka": "грузинский",
"kg": "конго",
"ki": "кикуйю",
"kj": "кунама",
"kk": "казахский",
"kl": "эскимосский (гренландский)",
"km": "кхмерский",
"kn": "каннада",
"ko": "корейский",
"kr": "канури",
"ks": "кашмири",
"ku": "курдский",
"kv": "коми",
"kw": "корнийский",
"ky": "киргизский",
"la": "латинский",
"lb": "люксембургский",
"lg": "ганда",
"ln": "лингала",
"lo": "лаосский",
"lt": "литовский",
"lu": "луба-катанга",
"lv": "латышский",
"mg": "малагасийский",
"mh": "маршальский",
"mi": "маори",
"mk": "македонский",
"ml": "малаялам",
"mn": "монгольский",
"mo": "молдавский",
"mr": "маратхи",
"ms": "малайский",
"mt": "мальтийский",
"my": "бирманский",
"na": "науру",
"nb": "норвежский",
"nd": "ндебели (северный)",
"ne": "непальский",
"nl": "голландский",
"nn": "новонорвежский",
"no": "норвежский",
"nr": "ндебели (южный)",
"nv": "навахо",
"ny": "ньянджа",
"oc": "окситанский",
"oj": "оджибва",
"om": "оромо",
"or": "ория",
"os": "осетинский",
"pa": "панджаби (пенджаби)",
"pi": "пали",
"pl": "польский",
"ps": "пашто (пушту)",
"pt": "португальский",
"qu": "кечуа",
"rm": "ретороманский",
"rn": "рунди",
"ro": "румынский",
"ru": "русский",
"rw": "киньяруанда",
"sa": "санскрит",
"sc": "сардинский",
"sd": "синдхи",
"se": "саамский (северный)",
"sg": "санго",
"sh": "сербскохорватский",
"si": "сингальский",
"sk": "словацкий",
"sl": "словенский",
"sm": "самоанский",
"sn": "шона",
"so": "сомали",
"sq": "албанский",
"sr": "сербский",
"ss": "свази",
"st": "сото южный",
"su": "сунданский",
"sv": "шведский",
"sw": "суахили",
"ta": "тамильский",
"te": "телугу",
"tg": "таджикский",
"th": "тайский",
"ti": "тигринья",
"tk": "туркменский",
"tl": "тагалог",
"tn": "тсвана",
"to": "тонга",
"tr": "турецкий",
"ts": "тсонга",
"tt": "татарский",
"tw": "тви",
"ty": "таитянский",
"ug": "уйгурский",
"uk": "украинский",
"ur": "урду",
"uz": "узбекский",
"ve": "венда",
"vi": "вьетнамский",
"vo": "волапюк",
"wo": "волоф",
"xh": "ксоза",
"yi": "идиш",
"yo": "йоруба",
"za": "чжуань",
"zh": "китайский",
"zu": "зулу",
},
{ type: "language", iso: "rw",
countries: [
{_reference: "RW"},
],
},
{ type: "language", iso: "sa",
countries: [
{_reference: "IN"},
],
name: "संस्कृत",
},
{ type: "language", iso: "se",
countries: [
{_reference: "NO"},
],
},
{ type: "language", iso: "sh",
countries: [
{_reference: "BA"},
{_reference: "CS"},
{_reference: "YU"},
],
},
{ type: "language", iso: "sk",
countries: [
{_reference: "SK"},
],
name: "slovenský",
"ar": "arabský",
"bg": "bulharský",
"cs": "český",
"da": "dánsky",
"de": "nemecký",
"el": "grécky",
"en": "anglický",
"es": "španielsky",
"et": "estónsky",
"fi": "fínsky",
"fr": "francúzsky",
"he": "hebrejský",
"hr": "chorvátsky",
"hu": "maďarský",
"it": "taliansky",
"ja": "japonský",
"ko": "kórejský",
"lt": "litovský",
"lv": "lotyšský",
"nl": "holandský",
"no": "nórsky",
"pl": "poľský",
"pt": "portugalský",
"ro": "rumunský",
"ru": "ruský",
"sk": "slovenský",
"sl": "slovinský",
"sv": "švédsky",
"tr": "turecký",
"zh": "čínsky",
},
{ type: "language", iso: "sl",
countries: [
{_reference: "SI"},
],
name: "Slovenščina",
"ar": "Arabščina",
"bg": "Bolgarščina",
"cs": "Češčina",
"da": "Danščina",
"de": "Nemščina",
"el": "Grščina",
"en": "Angleščina",
"es": "Španščina",
"et": "Estonščina",
"fi": "Finščina",
"fr": "Francoščina",
"he": "Hebrejščina",
"hr": "Hrvaščina",
"hu": "Madžarščina",
"it": "Italijanščina",
"ja": "Japonščina",
"ko": "Korejščina",
"lt": "Litovščina",
"lv": "Letonščina",
"nl": "Nizozemščina",
"no": "Norveščina",
"pl": "Poljščina",
"pt": "Portugalščina",
"ro": "Romunščina",
"ru": "Ruščina",
"sk": "Slovaščina",
"sl": "Slovenščina",
"sv": "Švedščina",
"tr": "Turščina",
"zh": "Kitajščina",
},
{ type: "language", iso: "so",
countries: [
{_reference: "DJ"},
{_reference: "ET"},
{_reference: "KE"},
{_reference: "SO"},
],
name: "Soomaali",
"so": "Soomaali",
},
{ type: "language", iso: "sq",
countries: [
{_reference: "AL"},
],
name: "shqipe",
"ar": "Arabisht",
"de": "Gjermanisht",
"en": "Anglisht",
"es": "Spanjisht",
"fr": "Frengjisht",
"hi": "Hindi",
"it": "Italisht",
"ja": "Japanisht",
"pt": "Portugeze",
"ru": "Rusisht",
"sq": "shqipe",
"zh": "Kineze",
},
{ type: "language", iso: "sr",
countries: [
{_reference: "BA"},
{_reference: "CS"},
{_reference: "YU"},
],
name: "Српски",
"af": "Африканерски",
"ar": "Арапски",
"be": "Белоруски",
"bg": "Бугарски",
"br": "Бретонски",
"ca": "Каталонски",
"co": "Корзикански",
"cs": "Чешки",
"da": "Дански",
"de": "Немачки",
"el": "Грчки",
"en": "Енглески",
"eo": "Есперанто",
"es": "Шпански",
"et": "Естонски",
"eu": "Баскијски",
"fa": "Персијски",
"fi": "Фински",
"fr": "Француски",
"ga": "Ирски",
"he": "Хебрејски",
"hi": "Хинди",
"hr": "Хрватски",
"hu": "Мађарски",
"hy": "Арменски",
"id": "Индонезијски",
"is": "Исландски",
"it": "Италијански",
"ja": "Јапански",
"ka": "Грузијски",
"km": "Кмерски",
"ko": "Корејски",
"ku": "Курдски",
"ky": "Киргиски",
"la": "Латински",
"lt": "Литвански",
"lv": "Летонски",
"mk": "Македонски",
"mn": "Монголски",
"mo": "Молдавски",
"my": "Бурмански",
"nl": "Холандски",
"no": "Норвешки",
"pl": "Пољски",
"pt": "Португалски",
"rm": "Рето-Романски",
"ro": "Румунски",
"ru": "Руски",
"sa": "Санскрит",
"sh": "Српско-Хрватски",
"sk": "Словачки",
"sl": "Словеначки",
"sq": "Албански",
"sr": "Српски",
"sv": "Шведски",
"sw": "Свахили",
"tr": "Турски",
"uk": "Украјински",
"vi": "Вијетнамски",
"yi": "Јидиш",
"zh": "Кинески",
},
{ type: "language", iso: "ss",
countries: [
{_reference: "ZA"},
],
},
{ type: "language", iso: "st",
countries: [
{_reference: "ZA"},
],
},
{ type: "language", iso: "sv",
countries: [
{_reference: "FI"},
{_reference: "SE"},
],
name: "svenska",
"aa": "afar",
"ab": "abchasiska",
"ae": "avestiska",
"af": "afrikaans",
"ak": "akan",
"am": "amhariska",
"an": "aragonesiska",
"ar": "arabiska",
"as": "assamesiska",
"av": "avariskt språk",
"ay": "aymara",
"az": "azerbajdzjanska",
"ba": "basjkiriska",
"be": "vitryska",
"bg": "bulgariska",
"bh": "bihari",
"bi": "bislama",
"bm": "bambara",
"bn": "bengali",
"bo": "tibetanska",
"br": "bretonska",
"bs": "bosniska",
"ca": "katalanska",
"ce": "tjetjenska",
"ch": "chamorro",
"co": "korsikanska",
"cr": "cree",
"cs": "tjeckiska",
"cu": "kyrkslaviska",
"cv": "tjuvasjiska",
"cy": "walesiska",
"da": "danska",
"de": "tyska",
"dv": "divehi",
"dz": "bhutanesiska",
"ee": "ewe",
"el": "grekiska",
"en": "engelska",
"eo": "esperanto",
"es": "spanska",
"et": "estniska",
"eu": "baskiska",
"fa": "persiska",
"ff": "fulani",
"fi": "finska",
"fj": "fidjianska",
"fo": "färöiska",
"fr": "franska",
"fy": "västfrisiska",
"gd": "höglandsskotska",
"gl": "galiciska",
"gn": "guaraní",
"gu": "gujarati",
"gv": "manx",
"ha": "haussa",
"he": "hebreiska",
"hi": "hindi",
"ho": "hirimotu",
"hr": "kroatiska",
"ht": "haitiska",
"hu": "ungerska",
"hy": "armeniska",
"hz": "herero",
"ia": "interlingua",
"id": "indonesiska",
"ie": "interlingue",
"ig": "ibo",
"ii": "szezuan i",
"ik": "inupiak",
"io": "ido",
"is": "isländska",
"it": "italienska",
"iu": "inuktitut",
"ja": "japanska",
"jv": "javanesiska",
"ka": "georgiska",
"kg": "kikongo",
"ki": "kikuyu",
"kj": "kuanyama",
"kk": "kazakstanska",
"kl": "grönländska",
"km": "kambodjanska; khmeriska",
"kn": "kanaresiska; kannada",
"ko": "koreanska",
"kr": "kanuri",
"ks": "kashmiriska",
"ku": "kurdiska",
"kv": "kome",
"kw": "korniska",
"ky": "kirgisiska",
"la": "latin",
"lb": "luxemburgiska",
"lg": "luganda",
"li": "limburgiska",
"ln": "lingala",
"lo": "laotiska",
"lt": "litauiska",
"lu": "luba-katanga",
"lv": "lettiska",
"mg": "malagassiska",
"mh": "marshalliska",
"mi": "maori",
"mk": "makedonska",
"ml": "malayalam",
"mn": "mongoliska",
"mo": "moldaviska",
"mr": "marathi",
"ms": "malajiska",
"mt": "maltesiska",
"my": "burmesiska",
"na": "nauru",
"nb": "norska (bokmål)",
"ne": "nepalesiska",
"ng": "ndonga",
"nn": "nynorska",
"no": "norska",
"nv": "navaho",
"ny": "nyanja",
"oc": "provensalska (efter 1500); occitanska",
"oj": "odjibwa; chippewa",
"om": "oromo",
"or": "oriya",
"os": "ossetiska",
"pa": "punjabi",
"pi": "pali",
"pl": "polska",
"ps": "pashto; afghanska",
"pt": "portugisiska",
"qu": "quechua",
"rn": "rundi",
"ro": "rumänska",
"ru": "ryska",
"rw": "rwanda; kinjarwanda",
"sa": "sanskrit",
"sc": "sardiska",
"sd": "sindhi",
"sg": "sango",
"si": "singalesiska",
"sk": "slovakiska",
"sl": "slovenska",
"sm": "samoanska",
"sn": "shona; manshona",
"so": "somaliska",
"sq": "albanska",
"sr": "serbiska",
"ss": "swati",
"su": "sundanesiska",
"sv": "svenska",
"sw": "swahili",
"ta": "tamil",
"te": "telugiska",
"tg": "tadzjikiska",
"th": "thailändska",
"ti": "tigrinja",
"tk": "turkmeniska",
"tl": "tagalog",
"tn": "tswana",
"to": "tonganska",
"tr": "turkiska",
"ts": "tsonga",
"tt": "tatariska",
"tw": "twi",
"ty": "tahitiska",
"ug": "uiguriska",
"uk": "ukrainska",
"ur": "urdu",
"uz": "uzbekiska",
"ve": "venda",
"vi": "vietnamesiska",
"vo": "volapük",
"wa": "vallonska",
"wo": "wolof",
"xh": "xhosa",
"yi": "jiddisch",
"yo": "yoruba",
"za": "zhuang",
"zh": "kinesiska",
"zu": "zulu",
},
{ type: "language", iso: "sw",
countries: [
{_reference: "KE"},
{_reference: "TZ"},
],
name: "Kiswahili",
"de": "kijerumani",
"en": "kiingereza",
"es": "kihispania",
"fr": "kifaransa",
"it": "kiitaliano",
"ja": "kijapani",
"pt": "kireno",
"ru": "kirusi",
"sw": "Kiswahili",
"zh": "kichina",
},
{ type: "language", iso: "ta",
countries: [
{_reference: "IN"},
],
name: "தமிழ்",
"aa": "அபார்",
"ab": "அப்காஸின்",
"af": "ஆப்ரிகன்ஸ்",
"am": "அம்ஹாரிக்",
"ar": "அரபு",
"as": "அஸ்ஸாமி",
"ay": "அயமரா",
"az": "அசர்பாய்ஜானி",
"ba": "பாஷ்கிர்0",
"be": "பைலோருஷ்ன்",
"bg": "பல்கேரியன்",
"bh": "பிஹாரி",
"bi": "பிஸ்லாமா",
"bn": "வங்காளம்",
"bo": "திபெத்து",
"br": "பிரிடன்",
"ca": "காடலான்",
"co": "கார்சியன்",
"cs": "செக்",
"cy": "வெல்ஷ்",
"da": "டானிஷ்",
"de": "ஜெர்மன்",
"dz": "புடானி",
"el": "கிரேக்கம்",
"en": "ஆங்கிலம்",
"eo": "எஸ்பரேன்டோ",
"es": "ஸ்பேனிஷ்",
"et": "எஸ்டோனியன்",
"eu": "பஸ்க்",
"fa": "பர்ஸியன்",
"fi": "பின்னிஷ்",
"fj": "பிஜி",
"fo": "பைரோஸி",
"fr": "பிரெஞ்சு",
"fy": "பிரிஷியன்",
"ga": "ஐரிஷ்",
"gd": "ஸ்காட்ஸ் காலெக்",
"gl": "கெலிஸியன்",
"gn": "குரானி",
"gu": "குஜராத்தி",
"ha": "ஹொஸா",
"he": "ஹுப்ரு",
"hi": "இந்தி",
"hr": "கரோஷியன்",
"hu": "ஹங்கேரியன்",
"hy": "ஆர்மேனியன்",
"ia": "இன்டர்லிங்குவா [ia]",
"id": "இந்தோனேஷியன்",
"ie": "இன்டர்லிங்குவா",
"ik": "இனுபெக்",
"is": "ஐஸ்லென்டிக்",
"it": "இத்தாலியன்",
"iu": "இனுகிடட்",
"ja": "ஜப்பானீஸ்",
"jv": "ஜாவானீஸ்",
"ka": "கன்னடம்",
"kk": "கசாக்",
"kl": "கிரின்லென்டிக்",
"km": "கம்போடியன்",
"kn": "கன்னடா",
"ko": "கொரியன்",
"ks": "காஷ்மிரி",
"ku": "குர்திஷ்",
"ky": "கிர்கிஷ்",
"la": "லாதின்",
"ln": "லிங்காலா",
"lo": "லோத்தியன்",
"lt": "லுத்தேனியன்",
"lv": "லேட்வியன் (லேட்டிஷ்)",
"mg": "மலகெஸி",
"mi": "மோரி",
"mk": "மெக்கடோனியன்",
"ml": "மலையாளம்",
"mn": "மங்கோலியன்",
"mo": "மோல்டேவியன்",
"mr": "மராத்தி",
"ms": "மலாய்",
"mt": "மால்டிஸ்",
"my": "பர்மிஸ்",
"na": "நாரூ",
"ne": "நேப்பாலி",
"nl": "டச்சு",
"no": "நார்வேகியன்",
"oc": "ஆகிடியன்",
"om": "ஒரோம (அபன்)",
"or": "ஒரியா",
"pa": "பஞ்சாபி",
"pl": "போலிஷ்",
"ps": "பேஷ்டோ (புஷ்டோ)",
"pt": "போர்த்துகீஸ்",
"qu": "கியுசா",
"rm": "ரைட்டோ-ரோமென்ஸ்",
"rn": "கிருந்தி",
"ro": "ரோமேனியன்",
"ru": "ரஷியன்",
"rw": "கின்யர்வென்டா",
"sa": "சமஸ்கிருதம்",
"sd": "சிந்தி",
"sg": "சென்க்ரோ",
"sh": "செர்போ-க்ரோஷியன்",
"si": "சிங்களம்",
"sk": "ஸ்லோவெக்",
"sl": "ஸ்லோவினேயின்",
"sm": "ஸெமோன்",
"sn": "ஷோனா",
"so": "சோமாலி",
"sq": "அல்பெனியன்",
"sr": "சர்பியன்",
"ss": "ஷிஸ்வாதி",
"st": "ஷெஸ்ஸோதோ",
"su": "சுடானீஸ்",
"sv": "ஷீவிடிஸ்",
"sw": "சுவாஹிலி",
"ta": "தமிழ்",
"te": "தெலுங்கு",
"tg": "தாஜிக்",
"th": "தாய்",
"ti": "டிக்ரின்யா",
"tk": "டர்க்மென்",
"tl": "டாகாலோக்",
"tn": "ஸெட்ஸ்வானா",
"to": "டோங்கா",
"tr": "டர்கிஷ்",
"ts": "ஸோங்கா",
"tt": "டாடர்",
"tw": "த்திவி",
"ug": "யுகுர்",
"uk": "உக்ரேனியன்",
"ur": "உருது",
"uz": "உஸ்பெக்",
"vi": "வியட்நாமிஸ்",
"vo": "ஒலபுக்",
"wo": "ஒலோப்",
"xh": "ஹோஷா",
"yi": "ஈத்திஷ",
"yo": "யோருப்பா",
"za": "ஜுவாங்",
"zh": "சீனம்",
"zu": "ஜூலூ",
},
{ type: "language", iso: "te",
countries: [
{_reference: "IN"},
],
name: "తెలుగు",
"ar": "అరబిక్",
"de": "ఙర్మన్",
"en": "ఆంగ్లం",
"es": "స్పానిష్",
"fr": "ఫ్రెంచ్",
"hi": "హిందీ",
"it": "ఇటాలియన్ భాష",
"ja": "జపాను భాష",
"pt": "పొర్చుగల్ భాష",
"ru": "రష్యన్ భాష",
"te": "తెలుగు",
"zh": "చైనా భాష",
},
{ type: "language", iso: "tg",
countries: [
{_reference: "TJ"},
],
},
{ type: "language", iso: "th",
countries: [
{_reference: "TH"},
],
name: "ไทย",
"aa": "อาฟา",
"ab": "แอบกาเซีย",
"af": "แอฟริกัน",
"ak": "อาคาน",
"am": "อัมฮาริค",
"an": "อาราโกนิส",
"as": "อัสสัมมิส",
"av": "อาวาริก",
"ay": "ไอมารา",
"az": "อาเซอร์ไบจานี",
"ba": "บาสช์กีร์",
"be": "บายโลรัสเซีย",
"bg": "บัลแกเรีย",
"bh": "บิฮารี",
"bi": "บิสลามา",
"bm": "บามบารา",
"bo": "ทิเบต",
"br": "บรีทัน",
"bs": "บอสเนีย",
"ca": "แคตาแลน",
"ce": "เชเชิน",
"co": "คอร์ซิกา",
"cr": "ครี",
"cu": "เชอร์ชสลาวิก",
"cv": "ชูวาส",
"cy": "เวลส์",
"da": "เดนมาร์ก",
"de": "เยอรมัน",
"dv": "ดิเวฮิ",
"dz": "ดซองคา",
"ee": "อีเว",
"el": "กรีก",
"en": "อังกฤษ",
"eo": "เอสเปอรันโต",
"es": "สเปน",
"et": "เอสโตเนีย",
"eu": "แบสก์",
"fa": "เปอร์เซีย",
"ff": "ฟูลาฮ์",
"fi": "ฟิน",
"fj": "ฟิจิ",
"fo": "ฟาโรส",
"fr": "ฝรั่งเศส",
"fy": "ฟรีสแลนด์",
"ga": "ไอริช",
"gd": "สก็อตส์เกลิค",
"gl": "กะลีเชีย",
"gn": "กัวรานี",
"gu": "กูจาราติ",
"gv": "มานซ์",
"ha": "โฮซา",
"he": "ฮิบรู",
"hi": "ฮินดี",
"ho": "ฮิริโมทุ",
"hr": "โครเอเทีย",
"ht": "ไฮเทียน",
"hu": "ฮังการี",
"hy": "อาร์มีเนีย",
"hz": "เฮียร์โร",
"id": "อินโดนีเชีย",
"ie": "อินเตอร์ลิงค์",
"ig": "อิกโบ",
"ii": "สิชวนยิ",
"ik": "ไอนูเปียก",
"io": "อิโด",
"is": "ไอซ์แลนด์ดิค",
"it": "อิตาลี",
"iu": "ไอนุกติตัท",
"ja": "ญี่ปุ่น",
"jv": "ชวา",
"ka": "จอร์เจียน",
"kg": "คองโก",
"ki": "กิกุยุ",
"kj": "กวนยามา",
"kk": "คาซัค",
"kl": "กรีนแลนด์ดิค",
"km": "เขมร",
"kn": "กานาดา",
"ko": "เกาหลี",
"kr": "กานุริ",
"ks": "คัชมีรี",
"ku": "เคิด",
"kv": "โกมิ",
"kw": "คอร์นิส",
"ky": "เคอร์กิซ",
"la": "ละติน",
"lb": "ลักเซมเบิร์ก",
"lg": "กานดา",
"li": "ลิมเบิร์ก",
"ln": "ลิงกาลา",
"lo": "ลาว",
"lt": "ลิธัวเนีย",
"lu": "ลูกา-กาทันกา",
"lv": "แลตเวีย (เลททิสช์)",
"mg": "มาลากาซี",
"mh": "มาร์แชลลิส",
"mi": "เมารี",
"mk": "แมซีโดเนีย",
"ml": "มาลายาลัม",
"mn": "มองโกล",
"mo": "โมดาเวีย",
"mr": "มาราที",
"ms": "มลายู",
"mt": "มอลตา",
"my": "พม่า",
"na": "นอรู",
"nb": "นอร์เวย์บอกมอล",
"nd": "เอ็นเดเบเลเหนือ",
"ne": "เนปาล",
"ng": "ดองกา",
"nl": "ฮอลันดา",
"nn": "นอร์เวย์ไนนอรส์ก",
"no": "นอร์เวย์",
"nv": "นาวาโจ",
"ny": "เนียนจา; ชิเชวา; เชวา",
"oc": "ออกซิทัน",
"oj": "โอจิบวา",
"om": "โอโรโม (อาฟาน)",
"or": "โอริยา",
"os": "ออสเซทิก",
"pa": "ปัญจาป",
"pi": "บาลี",
"pl": "โปแลนด์",
"ps": "พาสช์โต (พุสช์โต)",
"pt": "โปรตุเกส",
"qu": "คิวชัว",
"rm": "เรโต-โรแมนซ์",
"rn": "คิรันดี",
"ro": "โรมัน",
"ru": "รัสเซีย",
"rw": "คินยาวันดา",
"sa": "สันสกฤต",
"sc": "ซาร์ดิเนียน",
"sd": "ซินดิ",
"se": "ซามิเหนือ",
"sg": "สันโค",
"sh": "เซอร์โบ-โครเอเทียน",
"si": "สิงหล",
"sk": "สโลวัค",
"sl": "สโลเวเนีย",
"sm": "ซามัว",
"sn": "โซนา",
"so": "โซมาลี",
"sq": "แอลเบเนีย",
"sr": "เซอร์เบีย",
"ss": "ซีสวาติ",
"st": "เซโสโท",
"su": "ซันดานีส",
"sv": "สวีเดน",
"sw": "ซวาฮิรี",
"ta": "ทมิฬ",
"te": "ทิลูกู",
"tg": "ทาจิค",
"th": "ไทย",
"ti": "ทิกรินยา",
"tk": "เติร์กเมน",
"tl": "ตากาล็อก",
"tn": "เซตสวานา",
"to": "ทองก้า",
"tr": "ตุรกี",
"ts": "ซองกา",
"tt": "ตาด",
"tw": "ทวี",
"ty": "ทาฮิเทียน",
"ug": "อุยกัว",
"uk": "ยูเครน",
"ur": "อิรดู",
"uz": "อุสเบค",
"ve": "เวนดา",
"vi": "เวียดนาม",
"vo": "โวลาพุก",
"wa": "วอลลูน",
"wo": "วูลอฟ",
"xh": "โซสา",
"yi": "ยีดิช",
"yo": "โยรูบา",
"za": "จวง",
"zh": "จีน",
"zu": "ซูลู",
},
{ type: "language", iso: "ti",
countries: [
{_reference: "ER"},
{_reference: "ET"},
],
},
{ type: "language", iso: "tn",
countries: [
{_reference: "ZA"},
],
},
{ type: "language", iso: "tr",
countries: [
{_reference: "TR"},
],
name: "Türkçe",
"aa": "Afar",
"ab": "Abazca",
"af": "Afrikaan Dili",
"am": "Amharik",
"ar": "Arapça",
"av": "Avar Dili",
"ay": "Aymara",
"az": "Azerice",
"ba": "Başkırt Dili",
"be": "Beyaz Rusça",
"bg": "Bulgarca",
"bh": "Bihari",
"bi": "Bislama",
"bn": "Bengal Dili",
"bo": "Tibetçe",
"br": "Breton Dili",
"bs": "Bosna Dili",
"ca": "Katalan Dili",
"ce": "Çeçence",
"co": "Korsika Dili",
"cs": "Çekçe",
"cu": "Kilise Slavcası",
"cv": "Çuvaş",
"cy": "Gal Dili",
"da": "Danca",
"de": "Almanca",
"dz": "Bhutan Dili",
"ee": "Ewe",
"el": "Yunanca",
"en": "İngilizce",
"eo": "Esperanto",
"es": "İspanyolca",
"et": "Estonya Dili",
"eu": "Bask Dili",
"fa": "Farsça",
"fi": "Fince",
"fj": "Fiji Dili",
"fo": "Faroe Dili",
"fr": "Fransızca",
"fy": "Frizye Dili",
"ga": "İrlanda Dili",
"gd": "İskoç Gal Dili",
"gl": "Galiçya Dili",
"gn": "Guarani",
"gu": "Gujarati",
"ha": "Hausa",
"he": "İbranice",
"hi": "Hint Dili",
"hr": "Hırvatça",
"ht": "Haiti Dili",
"hu": "Macarca",
"hy": "Ermenice",
"ia": "Interlingua",
"id": "Endonezya Dili",
"ie": "Interlingue",
"ik": "Inupiak",
"io": "Ido",
"is": "İzlandaca",
"it": "İtalyanca",
"iu": "Inuktitut",
"ja": "Japonca",
"jv": "Java Dili",
"ka": "Gürcüce",
"kk": "Kazak Dili",
"kl": "Grönland Dili",
"km": "Kamboçya Dili",
"kn": "Kannada",
"ko": "Korece",
"ks": "Keşmirce",
"ku": "Kürtçe",
"ky": "Kırgızca",
"la": "Latince",
"lb": "Lüksemburg Dili",
"ln": "Lingala",
"lo": "Laos Dili",
"lt": "Litvanya Dili",
"lv": "Letonya Dili",
"mg": "Malaga Dili",
"mh": "Marshall Adaları Dili",
"mi": "Maori",
"mk": "Makedonca",
"ml": "Malayalam",
"mn": "Moğol Dili",
"mo": "Moldavya Dili",
"mr": "Marathi",
"ms": "Malay",
"mt": "Malta Dili",
"my": "Birmanya Dili",
"na": "Nauru",
"nb": "Norveç Kitap Dili",
"nd": "Kuzey Ndebele",
"ne": "Nepal Dili",
"nl": "Hollanda Dili",
"nn": "Norveççe Nynorsk",
"no": "Norveççe",
"nr": "Güney Ndebele",
"oc": "Occitan (1500 sonrası); Provençal",
"oj": "Ojibwa",
"om": "Oromo (Afan)",
"or": "Oriya",
"os": "Oset",
"pa": "Pencap Dili",
"pl": "Polonya Dili",
"ps": "Peştun Dili",
"pt": "Portekizce",
"qu": "Quechua",
"rm": "Rhaeto-Roman Dili",
"rn": "Kirundi",
"ro": "Romence",
"ru": "Rusça",
"rw": "Kinyarwanda",
"sa": "Sanskritçe",
"sc": "Sardunya Dili",
"sd": "Sindhi",
"se": "Kuzey Sami",
"sg": "Sangho",
"sh": "Sırp-Hırvat Dili",
"si": "Sinhal Dili",
"sk": "Slovakça",
"sl": "Slovence",
"sm": "Samoa Dili",
"sn": "Shona",
"so": "Somali Dili",
"sq": "Arnavutça",
"sr": "Sırpça",
"ss": "Siswati",
"st": "Sesotho",
"su": "Sudan Dili",
"sv": "İsveççe",
"sw": "Swahili",
"ta": "Tamil",
"te": "Telugu",
"tg": "Tacik Dili",
"th": "Tay Dili",
"ti": "Tigrinya",
"tk": "Türkmence",
"tl": "Tagalog",
"tn": "Setswana",
"to": "Tonga (Tonga Adaları)",
"tr": "Türkçe",
"ts": "Tsonga",
"tt": "Tatarca",
"tw": "Twi",
"ty": "Tahiti Dili",
"ug": "Uygurca",
"uk": "Ukraynaca",
"ur": "Urduca",
"uz": "Özbekçe",
"vi": "Vietnam Dili",
"vo": "Volapuk",
"wo": "Wolof",
"xh": "Xhosa",
"yi": "Yiddiş",
"yo": "Yoruba",
"za": "Zhuang",
"zh": "Çince",
"zu": "Zulu",
},
{ type: "language", iso: "ts",
countries: [
{_reference: "ZA"},
],
},
{ type: "language", iso: "tt",
countries: [
{_reference: "RU"},
],
name: "Татар",
},
{ type: "language", iso: "uk",
countries: [
{_reference: "UA"},
],
name: "Українська",
"aa": "Афарська",
"ab": "Абхазька",
"af": "Африканс",
"am": "Амхарік",
"ar": "Арабська",
"as": "Ассамська",
"ay": "Аймара",
"az": "Азербайджанська",
"ba": "Башкирська",
"be": "Білоруська",
"bg": "Болгарська",
"bh": "Біхарійська",
"bi": "Бісламійська",
"bn": "Бенгальська",
"bo": "Тибетська",
"br": "Бретонська",
"ca": "Каталонська",
"co": "Корсиканська",
"cs": "Чеська",
"cy": "Валлійська",
"da": "Датська",
"de": "Німецька",
"dz": "Дзонг-ке",
"el": "Грецька",
"en": "Англійська",
"eo": "Есперанто",
"es": "Іспанська",
"et": "Естонська",
"eu": "Басків",
"fa": "Перська",
"fi": "Фінська",
"fj": "Фіджі",
"fo": "Фарерська",
"fr": "Французька",
"fy": "Фризька",
"ga": "Ірландська",
"gd": "Гаельська",
"gl": "Галісійська",
"gn": "Гуарані",
"gu": "Гуяраті",
"ha": "Хауса",
"he": "Іврит",
"hi": "Гінді",
"hr": "Хорватська",
"hu": "Угорська",
"hy": "Вірменська",
"ia": "Інтерлінгва",
"id": "Індонезійська",
"ie": "Інтерлінгве",
"ik": "Інупіак",
"is": "Ісландська",
"it": "Італійська",
"ja": "Японська",
"jv": "Яванська",
"ka": "Грузинська",
"kk": "Казахська",
"kl": "Калааллісут",
"km": "Кхмерська",
"kn": "Каннада",
"ko": "Корейська",
"ks": "Кашмірська",
"ku": "Курдська",
"ky": "Киргизька",
"la": "Латинська",
"ln": "Лінгала",
"lo": "Лаоська",
"lt": "Литовська",
"lv": "Латвійська",
"mg": "Малагасійська",
"mi": "Маорі",
"mk": "Македонська",
"ml": "Малайялам",
"mn": "Монгольська",
"mo": "Молдавська",
"mr": "Маратхі",
"ms": "Малайська",
"mt": "Мальтійська",
"my": "Бірманська",
"na": "Науру",
"ne": "Непальська",
"nl": "Голландська",
"no": "Норвезька",
"oc": "Окитан",
"om": "Оромо",
"or": "Орія",
"pa": "Панджабі",
"pl": "Польська",
"ps": "Пашто",
"pt": "Португальська",
"qu": "Кечуа",
"rm": "Ретророманські діалекти",
"rn": "Кірундійська",
"ro": "Румунська",
"ru": "Російська",
"rw": "Кінаруанда",
"sa": "Санскрит",
"sd": "Сіндтхі",
"sg": "Сангро",
"sh": "Сербсько-хорватська",
"si": "Сингальська",
"sk": "Словацька",
"sl": "Словенська",
"sm": "Самоанська",
"sn": "Шона",
"so": "Сомалі",
"sq": "Албанська",
"sr": "Сербська",
"ss": "Сісваті",
"st": "Сото, південний діалект",
"su": "Суданська",
"sv": "Шведська",
"sw": "Суахілі",
"ta": "Тамільська",
"te": "Телугу",
"tg": "Таджицька",
"th": "Тайська",
"ti": "Тигріні",
"tk": "Туркменська",
"tl": "Тагальська",
"tn": "Сетсванська",
"to": "Тонга (острови Тонга)",
"tr": "Турецька",
"ts": "Тсонго",
"tt": "Татарська",
"tw": "Тві",
"ug": "Уйгурська",
"uk": "Українська",
"ur": "Урду",
"uz": "Узбецька",
"vi": "Вʼєтнамська",
"vo": "Волапак",
"wo": "Волоф",
"xh": "Кхоса",
"yi": "Ідиш",
"yo": "Йоруба",
"za": "Зуанг",
"zh": "Китайська",
"zu": "Зулуська",
},
{ type: "language", iso: "ur",
countries: [
{_reference: "IN"},
{_reference: "PK"},
],
name: "اردو",
"ur": "اردو",
},
{ type: "language", iso: "uz",
countries: [
{_reference: "AF"},
{_reference: "UZ"},
],
name: "Ўзбек",
},
{ type: "language", iso: "ve",
countries: [
{_reference: "ZA"},
],
},
{ type: "language", iso: "vi",
countries: [
{_reference: "VN"},
],
name: "Tiếng Việt",
"ar": "Tiếng A-rập",
"az": "Tiếng Ai-déc-bai-gian",
"be": "Tiếng Bê-la-rút",
"bg": "Tiếng Bun-ga-ri",
"bo": "Tiếng Tây Tạng",
"ca": "Tiếng Ca-ta-lăng",
"cs": "Tiếng Séc",
"da": "Tiếng Đan Mạch",
"de": "Tiếng Đức",
"el": "Tiếng Hy Lạp",
"en": "Tiếng Anh",
"eo": "Tiếng Quốc Tế Ngữ",
"es": "Tiếng Tây Ban Nha",
"et": "Tiếng E-xtô-ni-a",
"fa": "Tiếng Ba Tư",
"fi": "Tiếng Phần Lan",
"fr": "Tiếng Pháp",
"ga": "Tiếng Ai-len",
"he": "Tiếng Hê-brơ",
"hi": "Tiếng Hin-đi",
"hr": "Tiếng Crô-a-ti-a",
"hu": "Tiếng Hung-ga-ri",
"hy": "Tiếng Ác-mê-ni",
"ia": "Tiếng Khoa Học Quốc Tế",
"id": "Tiếng In-đô-nê-xia",
"is": "Tiếng Ai-xơ-len",
"it": "Tiếng Ý",
"ja": "Tiếng Nhật",
"jv": "Tiếng Gia-va",
"km": "Tiếng Campuchia",
"kn": "Tiếng Kan-na-đa",
"ko": "Tiếng Hàn Quốc",
"la": "Tiếng La-tinh",
"lo": "Tiếng Lào",
"lt": "Tiếng Lít-va",
"lv": "Tiếng Lát-vi-a",
"mk": "Tiếng Ma-xê-đô-ni-a",
"mn": "Tiếng Mông Cổ",
"ms": "Tiếng Ma-lay-xi-a",
"ne": "Tiếng Nê-pan",
"nl": "Tiếng Hà Lan",
"no": "Tiếng Na Uy",
"pl": "Tiếng Ba Lan",
"pt": "Tiếng Bồ Đào Nha",
"ro": "Tiếng Ru-ma-ni",
"ru": "Tiếng Nga",
"sa": "Tiếng Phạn",
"sk": "Tiếng Xlô-vác",
"sl": "Tiếng Xlô-ven",
"so": "Tiếng Xô-ma-li",
"sq": "Tiếng An-ba-ni",
"sr": "Tiếng Séc-bi",
"sv": "Tiếng Thụy Điển",
"th": "Tiếng Thái",
"tr": "Tiếng Thổ Nhĩ Kỳ",
"uk": "Tiếng U-crai-na",
"uz": "Tiếng U-dơ-bếch",
"vi": "Tiếng Việt",
"yi": "Tiếng Y-đit",
"zh": "Tiếng Trung Quốc",
},
{ type: "language", iso: "xh",
countries: [
{_reference: "ZA"},
],
},
{ type: "language", iso: "yo",
countries: [
{_reference: "NG"},
],
},
{ type: "language", iso: "zh",
countries: [
{_reference: "CN"},
{_reference: "HK"},
{_reference: "MO"},
{_reference: "SG"},
{_reference: "TW"},
],
name: "中文",
"aa": "阿法文",
"ab": "阿布哈西亚文",
"ae": "阿维斯塔文",
"af": "南非荷兰文",
"ak": "阿肯文",
"am": "阿姆哈拉文",
"ar": "阿拉伯文",
"as": "阿萨姆文",
"av": "阿瓦尔文",
"ay": "艾马拉文",
"az": "阿塞拜疆文",
"ba": "巴什客尔文",
"be": "白俄罗斯文",
"bg": "保加利亚文",
"bh": "比哈尔文",
"bi": "比斯拉马文",
"bm": "班巴拉文",
"bn": "孟加拉文",
"bo": "西藏文",
"br": "布里多尼文",
"bs": "波斯尼亚文",
"ca": "加泰罗尼亚文",
"ce": "车臣文",
"ch": "查莫罗文",
"co": "科西嘉文",
"cr": "克里族文",
"cs": "捷克文",
"cu": "宗教斯拉夫文",
"cv": "楚瓦什文",
"cy": "威尔士文",
"da": "丹麦文",
"de": "德文",
"dv": "迪维希文",
"dz": "不丹文",
"ee": "幽文",
"el": "希腊文",
"en": "英文",
"eo": "世界文",
"es": "西班牙文",
"et": "爱沙尼亚文",
"eu": "巴斯克文",
"fa": "波斯文",
"ff": "夫拉文",
"fi": "芬兰文",
"fj": "斐济文",
"fo": "法罗文",
"fr": "法文",
"fy": "弗里斯兰文",
"ga": "爱尔兰文",
"gd": "苏格兰- 盖尔文",
"gl": "加利西亚文",
"gn": "瓜拉尼文",
"gu": "古加拉提文",
"gv": "马恩岛文",
"ha": "豪撒文",
"he": "希伯来文",
"hi": "印地文",
"ho": "新里木托文",
"hr": "克罗地亚文",
"hu": "匈牙利文",
"hy": "亚美尼亚文",
"hz": "赫雷罗文",
"ia": "拉丁国际文 Interlingua",
"id": "印度尼西亚文",
"ie": "拉丁国际文 Interlingue",
"ig": "伊格博文",
"ii": "四川话",
"ik": "依奴皮维克文",
"io": "爱德莪文(人工语言)",
"is": "冰岛文",
"it": "意大利文",
"iu": "爱斯基摩文",
"ja": "日文",
"jv": "爪哇文",
"ka": "格鲁吉亚文",
"kg": "刚果文",
"ki": "吉库尤文",
"kj": "关琊玛文",
"kk": "哈萨克文",
"kl": "格陵兰文",
"km": "柬埔寨文",
"kn": "埃纳德文",
"ko": "韩文",
"kr": "卡努里文",
"ks": "克什米尔文",
"ku": "库尔德文",
"kv": "科米文",
"kw": "凯尔特文",
"ky": "吉尔吉斯文",
"la": "拉丁文",
"lb": "卢森堡文",
"lg": "卢干达文",
"li": "淋布尔吉文",
"ln": "林加拉文",
"lo": "老挝文",
"lt": "立陶宛文",
"lu": "鲁巴加丹加文",
"lv": "拉脫維亞文",
"mg": "马尔加什文",
"mh": "马绍尔文",
"mi": "毛利文",
"mk": "马其顿文",
"ml": "马来亚拉姆文",
"mn": "蒙古文",
"mo": "摩尔多瓦文",
"mr": "马拉地文",
"ms": "马来文",
"mt": "马耳他文",
"my": "缅甸文",
"na": "瑙鲁文",
"nb": "挪威博克马尔文",
"nd": "北恩德贝勒文",
"ne": "尼泊尔文",
"ng": "恩东加文",
"nl": "荷兰文",
"nn": "挪威尼诺斯克文",
"no": "挪威文",
"nr": "南部恩德贝勒文",
"nv": "纳瓦霍文",
"ny": "尼昂加文;切瓦文;切瓦文",
"oc": "奥西坦文",
"oj": "奥季布瓦文",
"om": "阿曼文",
"or": "欧里亚文",
"os": "奥塞提文",
"pa": "旁遮普文",
"pi": "帕利文",
"pl": "波兰文",
"ps": "普什图文",
"pt": "葡萄牙文",
"qu": "盖丘亚文",
"rm": "里托罗曼斯文",
"rn": "基隆迪文",
"ro": "罗马尼亚文",
"ru": "俄文",
"rw": "卢旺达文",
"sa": "梵文",
"sc": "萨丁文",
"sd": "信德语",
"se": "北萨迷文",
"sg": "桑戈文",
"sh": "塞波尼斯-克罗地亚文",
"si": "僧伽罗文",
"sk": "斯洛伐克文",
"sl": "斯洛文尼亚文",
"sm": "萨摩亚文",
"sn": "塞内加尔文",
"so": "索马里文",
"sq": "阿尔巴尼亚文",
"sr": "塞尔维亚文",
"ss": "辛辛那提文",
"st": "塞索托文",
"su": "巽他语",
"sv": "瑞典文",
"sw": "斯瓦希里文",
"ta": "泰米尔文",
"te": "泰卢固文",
"tg": "塔吉克文",
"th": "泰文",
"ti": "提格里尼亚文",
"tk": "土库曼文",
"tl": "塔加路族文",
"tn": "突尼斯文",
"to": "汤加文",
"tr": "土耳其文",
"ts": "特松加文",
"tt": "鞑靼文",
"tw": "台湾文",
"ty": "塔西提文",
"ug": "维吾尔文",
"uk": "乌克兰文",
"ur": "乌尔都文",
"uz": "乌兹别克文",
"ve": "文达文",
"vi": "越南文",
"vo": "沃拉普克文",
"wa": "華隆文",
"wo": "沃尔夫文",
"xh": "科萨语",
"yi": "依地文",
"yo": "约鲁巴文",
"za": "藏文",
"zh": "中文",
"zu": "祖鲁文",
},
{ type: "language", iso: "zu",
countries: [
{_reference: "ZA"},
],
},
]
/trunk/api/js/dojo1.0/dijit/demos/i18n/flags.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/demos/i18n/flags.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/demos/i18n/languages.sh
New file
0,0 → 1,18
echo "["
for lang in $(ls [a-z][a-z].xml |sed s/.xml//)
do
echo '{ type: "language", iso: "'${lang}'",'
 
# countries that use this language
echo 'countries: ['
ls ${lang}_[A-Z][A-Z].xml | sed -e 's/^.*_/{_reference: "/' -e 's/.xml/"},/'
echo '],'
 
# name of this language (in this language)
grep '<language type="'${lang}'"[ >]' ${lang}.xml |head -1 |sed -e 's/.*<language type=".."[^>]*>/name: "/' -e 's/<\/language>/",/'
 
# names of other langauges (in this language)
grep '<language type="..">' ${lang}.xml |sed -e 's/.*<language type=//' -e 's/<\/language>/",/' -e 's/>/: "/' -e 's/-->//'
echo '},'
done
echo "]"
/trunk/api/js/dojo1.0/dijit/demos/i18n/data.json
New file
0,0 → 1,8646
{ "identifier": 'iso',
"label": 'name',
"items":
[
{
"type": "language",
"iso": "aa",
"name": "Qafar",
"countries": [
{
"_reference": "DJ"
},
{
"_reference": "ER"
},
{
"_reference": "ET"
}
],
"am": "አፋርኛ",
"ar": "الأفارية",
"ca": "àfar",
"cs": "Afarština",
"da": "afar",
"de": "Afar",
"en": "Afar",
"es": "afar",
"fi": "afar",
"fr": "afar",
"ga": "Afar",
"he": "אתיופית",
"hi": "अफ़ार",
"hu": "afar",
"id": "Afar",
"it": "afar",
"ja": "アファル語",
"km": "ភាសាអាហ្វារ",
"ko": "아파르어",
"mr": "अफार",
"mt": "Afar",
"nb": "afar",
"nl": "Afar",
"nn": "afar",
"pt": "afar",
"ru": "афар",
"sv": "afar",
"ta": "அபார்",
"th": "อาฟา",
"tr": "Afar",
"uk": "Афарська",
"zh": "阿法文"
},
{
"type": "language",
"iso": "af",
"name": "Afrikaans",
"countries": [
{
"_reference": "NA"
},
{
"_reference": "ZA"
}
],
"af": "Afrikaans",
"am": "አፍሪቃንስኛ",
"ar": "الأفريقية",
"bg": "Африканс",
"ca": "afrikaans",
"cs": "Afrikánština",
"da": "afrikaans",
"de": "Afrikaans",
"en": "Afrikaans",
"es": "afrikaans",
"fi": "afrikaans",
"fr": "afrikaans",
"ga": "Afracáinis",
"he": "אפריקנית",
"hi": "अफ्रीकी",
"hu": "afrikai",
"id": "Afrikaans",
"is": "Afríkanska",
"it": "afrikaans",
"ja": "アフリカーンス語",
"km": "ភាសាអាហ្វ្រីកាអាន",
"ko": "남아공 공용어",
"mr": "अफ्रिकान्स",
"mt": "Afrikans",
"nb": "afrikaans",
"nl": "Afrikaans",
"nn": "afrikaans",
"pt": "africâner",
"ru": "африкаанс",
"sr": "Африканерски",
"sv": "afrikaans",
"ta": "ஆப்ரிகன்ஸ்",
"th": "แอฟริกัน",
"tr": "Afrikaan Dili",
"uk": "Африканс",
"zh": "南非荷兰文"
},
{
"type": "language",
"iso": "am",
"name": "አማርኛ",
"countries": [
{
"_reference": "ET"
}
],
"am": "አማርኛ",
"ar": "الأمهرية",
"bg": "Амхарски",
"ca": "amhàric",
"cs": "Amharština",
"da": "amharisk",
"de": "Amharisch",
"en": "Amharic",
"es": "amárico",
"fi": "amhara",
"fr": "amharique",
"he": "אמהרית",
"hi": "अम्हारिक्",
"hu": "amhara",
"id": "Amharik",
"is": "Amharíska",
"it": "amarico",
"ja": "アムハラ語",
"ko": "암하라어",
"mr": "अमहारिक",
"mt": "Amħariku",
"nb": "amharisk",
"nl": "Amhaars",
"nn": "amharisk",
"pt": "amárico",
"ru": "амхарский",
"sv": "amhariska",
"ta": "அம்ஹாரிக்",
"th": "อัมฮาริค",
"tr": "Amharik",
"uk": "Амхарік",
"zh": "阿姆哈拉文"
},
{
"type": "language",
"iso": "ar",
"name": "العربية",
"countries": [
{
"_reference": "AE"
},
{
"_reference": "BH"
},
{
"_reference": "DZ"
},
{
"_reference": "EG"
},
{
"_reference": "IQ"
},
{
"_reference": "JO"
},
{
"_reference": "KW"
},
{
"_reference": "LB"
},
{
"_reference": "LY"
},
{
"_reference": "MA"
},
{
"_reference": "OM"
},
{
"_reference": "QA"
},
{
"_reference": "SA"
},
{
"_reference": "SD"
},
{
"_reference": "SY"
},
{
"_reference": "TN"
},
{
"_reference": "YE"
}
],
"am": "ዐርቢኛ",
"ar": "العربية",
"be": "арабскі",
"bg": "Арабски",
"ca": "àrab",
"cs": "Arabština",
"cy": "Arabeg",
"da": "arabisk",
"de": "Arabisch",
"el": "Αραβικά",
"en": "Arabic",
"es": "árabe",
"et": "Araabia",
"fi": "arabia",
"fr": "arabe",
"ga": "Araibis",
"he": "ערבית",
"hi": "अरबी",
"hr": "arapski",
"hu": "arab",
"id": "Arab",
"is": "Arabíska",
"it": "arabo",
"ja": "アラビア語",
"km": "ភាសាអារ៉ាប់",
"ko": "아랍어",
"lt": "Arabų",
"lv": "arābu",
"mr": "अरेबिक",
"mt": "Għarbi",
"nb": "arabisk",
"nl": "Arabisch",
"nn": "arabisk",
"pl": "arabski",
"ps": "عربي",
"pt": "árabe",
"ro": "Arabă",
"ru": "арабский",
"sk": "arabský",
"sl": "Arabščina",
"sq": "Arabisht",
"sr": "Арапски",
"sv": "arabiska",
"ta": "அரபு",
"te": "అరబిక్",
"tr": "Arapça",
"uk": "Арабська",
"vi": "Tiếng A-rập",
"zh": "阿拉伯文"
},
{
"type": "language",
"iso": "as",
"name": "অসমীয়া",
"countries": [
{
"_reference": "IN"
}
],
"am": "አሳሜዛዊ",
"ar": "الأسامية",
"as": "অসমীয়া",
"ca": "assamès",
"cs": "Assaméština",
"da": "assamesisk",
"de": "Assamesisch",
"en": "Assamese",
"es": "asamés",
"fi": "assami",
"fr": "assamais",
"ga": "Asaimis",
"he": "אסאמית",
"hi": "असामी",
"hu": "asszámi",
"id": "Assam",
"is": "Assamska",
"it": "assamese",
"ja": "アッサム語",
"ko": "아샘어",
"mr": "असामी",
"mt": "Assamese",
"nb": "assamisk",
"nl": "Assamees",
"nn": "assamisk",
"pt": "assamês",
"ru": "ассамский",
"sv": "assamesiska",
"ta": "அஸ்ஸாமி",
"th": "อัสสัมมิส",
"uk": "Ассамська",
"zh": "阿萨姆文"
},
{
"type": "language",
"iso": "az",
"name": "azərbaycanca",
"countries": [
{
"_reference": "AZ"
}
],
"am": "አዜርባይጃንኛ",
"ar": "الأذرية",
"az": "azərbaycanca",
"bg": "Азърбайджански",
"ca": "àzeri",
"cs": "Azerbajdžánština",
"da": "aserbajdsjansk",
"de": "Aserbaidschanisch",
"en": "Azerbaijani",
"es": "azerí",
"fa": "ترکی آذربایجانی",
"fi": "azeri",
"fr": "azéri",
"ga": "Asarbaiseáinis",
"he": "אזרית",
"hi": "अज़रबैंजानी",
"hu": "azerbajdzsáni",
"id": "Azerbaijan",
"is": "Aserska",
"it": "azerbaigiano",
"ja": "アゼルバイジャン語",
"km": "ភាសាអាហ៊្សែរបែហ្សង់",
"ko": "아제르바이잔어",
"mr": "अज़रबाइजानी",
"mt": "Ażerbajġani",
"nb": "aserbajdsjansk",
"nl": "Azerbeidzjaans",
"nn": "aserbajdsjansk",
"pt": "azerbaijano",
"ru": "азербайджанский",
"sv": "azerbajdzjanska",
"ta": "அசர்பாய்ஜானி",
"th": "อาเซอร์ไบจานี",
"tr": "Azerice",
"uk": "Азербайджанська",
"vi": "Tiếng Ai-déc-bai-gian",
"zh": "阿塞拜疆文"
},
{
"type": "language",
"iso": "be",
"name": "Беларускі",
"countries": [
{
"_reference": "BY"
}
],
"am": "ቤላራሻኛ",
"ar": "البيلوروسية",
"be": "Беларускі",
"bg": "Беларуски",
"ca": "bielorús",
"cs": "Běloruština",
"da": "hviderussisk",
"de": "Weißrussisch",
"el": "Λευκορωσικά",
"en": "Belarusian",
"es": "bielorruso",
"fi": "valkovenäjä",
"fr": "biélorusse",
"ga": "Bealarúisis",
"he": "בלארוסית",
"hi": "बैलोरूशियन्",
"hr": "bjeloruski",
"hu": "belorusz",
"id": "Belarusia",
"is": "Hvítrússneska",
"it": "bielorusso",
"ja": "ベラルーシ語",
"km": "ភាសាបេឡារុស្ស",
"ko": "벨로루시어",
"mr": "बैलोरुसियन",
"mt": "Belarussu",
"nb": "hviterussisk",
"nl": "Wit-Russisch",
"nn": "kviterussisk",
"pt": "bielo-russo",
"ru": "белорусский",
"sr": "Белоруски",
"sv": "vitryska",
"ta": "பைலோருஷ்ன்",
"th": "บายโลรัสเซีย",
"tr": "Beyaz Rusça",
"uk": "Білоруська",
"vi": "Tiếng Bê-la-rút",
"zh": "白俄罗斯文"
},
{
"type": "language",
"iso": "bg",
"name": "Български",
"countries": [
{
"_reference": "BG"
}
],
"am": "ቡልጋሪኛ",
"ar": "البلغارية",
"bg": "Български",
"ca": "búlgar",
"cs": "Bulharština",
"da": "bulgarsk",
"de": "Bulgarisch",
"el": "Βουλγαρικά",
"en": "Bulgarian",
"es": "búlgaro",
"et": "Bulgaaria",
"fi": "bulgaria",
"fr": "bulgare",
"ga": "Bulgáiris",
"he": "בולגרית",
"hi": "बल्गेरियन्",
"hr": "bugarski",
"hu": "bolgár",
"id": "Bulgaria",
"is": "Búlgarska",
"it": "bulgaro",
"ja": "ブルガリア語",
"km": "ភាសាប៊ុលហ្ការី",
"ko": "불가리아어",
"lt": "Bulgarų",
"lv": "bulgāru",
"mr": "बल्गेरियन",
"mt": "Bulgaru",
"nb": "bulgarsk",
"nl": "Bulgaars",
"nn": "bulgarsk",
"pl": "bułgarski",
"pt": "búlgaro",
"ro": "Bulgară",
"ru": "болгарский",
"sk": "bulharský",
"sl": "Bolgarščina",
"sr": "Бугарски",
"sv": "bulgariska",
"ta": "பல்கேரியன்",
"th": "บัลแกเรีย",
"tr": "Bulgarca",
"uk": "Болгарська",
"vi": "Tiếng Bun-ga-ri",
"zh": "保加利亚文"
},
{
"type": "language",
"iso": "bn",
"name": "বাংলা",
"countries": [
{
"_reference": "BD"
},
{
"_reference": "IN"
}
],
"am": "በንጋሊኛ",
"ar": "البنغالية",
"bg": "Бенгалски",
"bn": "বাংলা",
"ca": "bengalí",
"cs": "Bengálština",
"da": "bengalsk",
"de": "Bengalisch",
"el": "Μπενγκάλι",
"en": "Bengali",
"es": "bengalí",
"fi": "bengali",
"fr": "bengali",
"ga": "Beangálais",
"he": "בנגלית",
"hi": "बँगाली",
"hu": "bengáli",
"id": "Bengal",
"is": "Bengalska",
"it": "bengalese",
"ja": "ベンガル語",
"km": "ភាសាបេន្កាលី",
"ko": "벵골어",
"lt": "Bengalų",
"mr": "बंगाली",
"mt": "Bengali",
"nb": "bengali",
"nl": "Bengalees",
"nn": "bengali",
"pl": "bengalski",
"pt": "bengali",
"ru": "бенгальский",
"sv": "bengali",
"ta": "வங்காளம்",
"tr": "Bengal Dili",
"uk": "Бенгальська",
"zh": "孟加拉文"
},
{
"type": "language",
"iso": "ca",
"name": "català",
"countries": [
{
"_reference": "ES"
}
],
"am": "ካታላንኛ",
"ar": "الكاتالوينية",
"bg": "Каталонски",
"ca": "català",
"cs": "Katalánština",
"da": "katalansk",
"de": "Katalanisch",
"el": "Καταλανικά",
"en": "Catalan",
"es": "catalán",
"fi": "katalaani",
"fr": "catalan",
"ga": "Catalóinis",
"he": "קטלונית",
"hi": "कातालान",
"hu": "katalán",
"id": "Catalan",
"is": "Katalónska",
"it": "catalano",
"ja": "カタロニア語",
"km": "ភាសាកាតាឡាន",
"ko": "카탈로니아어",
"mr": "कटलन",
"mt": "Katalan",
"nb": "katalansk",
"nl": "Catalaans",
"nn": "katalansk",
"pl": "kataloński",
"pt": "catalão",
"ru": "каталанский",
"sr": "Каталонски",
"sv": "katalanska",
"ta": "காடலான்",
"th": "แคตาแลน",
"tr": "Katalan Dili",
"uk": "Каталонська",
"vi": "Tiếng Ca-ta-lăng",
"zh": "加泰罗尼亚文"
},
{
"type": "language",
"iso": "cs",
"name": "Čeština",
"countries": [
{
"_reference": "CZ"
}
],
"am": "ቼክኛ",
"ar": "التشيكية",
"bg": "Чешки",
"ca": "txec",
"cs": "Čeština",
"da": "Tjekkisk",
"de": "Tschechisch",
"el": "Τσεχικά",
"en": "Czech",
"es": "checo",
"et": "Tiehhi",
"fi": "tšekki",
"fr": "tchèque",
"ga": "Seicis",
"he": "צ׳כית",
"hi": "चेक",
"hr": "češki",
"hu": "cseh",
"id": "Ceko",
"is": "Tékkneska",
"it": "ceco",
"ja": "チェコ語",
"km": "ភាសាឆេក",
"ko": "체코어",
"lt": "Čekų",
"lv": "čehu",
"mr": "ज़ेक",
"mt": "Ċek",
"nb": "tsjekkisk",
"nl": "Tsjechisch",
"nn": "tsjekkisk",
"pl": "czeski",
"pt": "tcheco",
"ro": "Cehă",
"ru": "чешский",
"sk": "český",
"sl": "Češčina",
"sr": "Чешки",
"sv": "tjeckiska",
"ta": "செக்",
"tr": "Çekçe",
"uk": "Чеська",
"vi": "Tiếng Séc",
"zh": "捷克文"
},
{
"type": "language",
"iso": "cy",
"name": "Cymraeg",
"countries": [
{
"_reference": "GB"
}
],
"am": "ወልሽ",
"ar": "الولزية",
"bg": "Уелски",
"ca": "gal·lès",
"cs": "Velština",
"cy": "Cymraeg",
"da": "Walisisk",
"de": "Kymrisch",
"el": "Ουαλικά",
"en": "Welsh",
"es": "galés",
"fi": "kymri",
"fr": "gallois",
"ga": "Breatnais",
"he": "וולשית",
"hi": "वेल्श",
"hr": "velški",
"hu": "walesi",
"id": "Welsh",
"is": "Velska",
"it": "gallese",
"ja": "ウェールズ語",
"ko": "웨일스어",
"mr": "वेल्ष",
"mt": "Welx",
"nb": "walisisk",
"nl": "Welsh",
"nn": "walisisk",
"pl": "walijski",
"pt": "galês",
"ru": "валлийский",
"sv": "walesiska",
"ta": "வெல்ஷ்",
"th": "เวลส์",
"tr": "Gal Dili",
"uk": "Валлійська",
"zh": "威尔士文"
},
{
"type": "language",
"iso": "da",
"name": "Dansk",
"countries": [
{
"_reference": "DK"
}
],
"am": "ዴኒሽ",
"ar": "الدانماركية",
"bg": "Датски",
"ca": "danès",
"cs": "Dánština",
"da": "Dansk",
"de": "Dänisch",
"el": "Δανικά",
"en": "Danish",
"es": "danés",
"et": "Taani",
"fi": "tanska",
"fr": "danois",
"ga": "Danmhairgis",
"he": "דנית",
"hi": "डैनीश",
"hr": "danski",
"hu": "dán",
"id": "Denmark",
"is": "Danska",
"it": "danese",
"ja": "デンマーク語",
"km": "ភាសាដាណឺម៉ាក",
"ko": "덴마크어",
"lt": "Danų",
"lv": "dāņu",
"mr": "डानिष",
"mt": "Daniż",
"nb": "dansk",
"nl": "Deens",
"nn": "dansk",
"pl": "duński",
"pt": "dinamarquês",
"ro": "Daneză",
"ru": "датский",
"sk": "dánsky",
"sl": "Danščina",
"sr": "Дански",
"sv": "danska",
"ta": "டானிஷ்",
"th": "เดนมาร์ก",
"tr": "Danca",
"uk": "Датська",
"vi": "Tiếng Đan Mạch",
"zh": "丹麦文"
},
{
"type": "language",
"iso": "de",
"name": "Deutsch",
"countries": [
{
"_reference": "AT"
},
{
"_reference": "BE"
},
{
"_reference": "CH"
},
{
"_reference": "DE"
},
{
"_reference": "LI"
},
{
"_reference": "LU"
}
],
"am": "ጀርመን",
"ar": "الألمانية",
"be": "нямецкі",
"bg": "Немски",
"ca": "alemany",
"cs": "Němčina",
"cy": "Almaeneg",
"da": "Tysk",
"de": "Deutsch",
"el": "Γερμανικά",
"en": "German",
"es": "alemán",
"et": "Saksa",
"eu": "alemanera",
"fi": "saksa",
"fr": "allemand",
"ga": "Gearmáinis",
"he": "גרמנית",
"hi": "ज़र्मन",
"hr": "njemački",
"hu": "német",
"id": "Jerman",
"is": "Þýska",
"it": "tedesco",
"ja": "ドイツ語",
"ka": "გერმანული",
"km": "ភាសាអាល្លឺម៉ង់",
"ko": "독일어",
"ky": "немисче",
"lt": "Vokiečių",
"lv": "vācu",
"mk": "германски",
"mn": "герман",
"mr": "जर्मन",
"mt": "Ġermaniż",
"nb": "tysk",
"nl": "Duits",
"nn": "tysk",
"pl": "niemiecki",
"ps": "الماني",
"pt": "alemão",
"ro": "Germană",
"ru": "немецкий",
"sk": "nemecký",
"sl": "Nemščina",
"sq": "Gjermanisht",
"sr": "Немачки",
"sv": "tyska",
"sw": "kijerumani",
"ta": "ஜெர்மன்",
"te": "ఙర్మన్",
"th": "เยอรมัน",
"tr": "Almanca",
"uk": "Німецька",
"vi": "Tiếng Đức",
"zh": "德文"
},
{
"type": "language",
"iso": "dv",
"name": "ދިވެހިބަސް",
"countries": [
{
"_reference": "MV"
}
],
"ar": "المالديفية",
"bg": "Дивехи",
"da": "Divehi",
"de": "Maledivisch",
"en": "Divehi",
"es": "divehi",
"fi": "divehi",
"fr": "maldivien",
"he": "דיבהי",
"id": "Divehi",
"is": "Dívehí",
"it": "divehi",
"ja": "ディベヒ語",
"ko": "디베히어",
"mt": "Diveħi",
"nb": "divehi",
"nl": "Divehi",
"nn": "divehi",
"pt": "divehi",
"sv": "divehi",
"th": "ดิเวฮิ",
"zh": "迪维希文"
},
{
"type": "language",
"iso": "dz",
"name": "རྫོང་ཁ",
"countries": [
{
"_reference": "BT"
}
],
"am": "ድዞንግኻኛ",
"ar": "الزونخاية",
"ca": "bhutanès",
"cs": "Bhútánština",
"da": "Dzongkha",
"de": "Bhutanisch",
"en": "Dzongkha",
"fi": "dzongkha",
"fr": "dzongkha",
"hi": "भुटानी",
"hu": "butáni",
"id": "Dzongkha",
"is": "Dsongka",
"it": "dzongkha",
"ja": "ゾンカ語",
"km": "ភាសាប៊ូតាន",
"ko": "부탄어",
"mr": "भूटानी",
"mt": "Dżongka",
"nb": "dzongkha",
"nl": "Dzongkha",
"nn": "dzongkha",
"pt": "dzonga",
"ru": "дзонг-кэ",
"sv": "bhutanesiska",
"ta": "புடானி",
"th": "ดซองคา",
"tr": "Bhutan Dili",
"uk": "Дзонг-ке",
"zh": "不丹文"
},
{
"type": "language",
"iso": "el",
"name": "Ελληνικά",
"countries": [
{
"_reference": "CY"
},
{
"_reference": "GR"
}
],
"am": "ግሪክኛ",
"ar": "اليونانية",
"bg": "Гръцки",
"ca": "grec",
"cs": "Řečtina",
"da": "Græsk",
"de": "Griechisch",
"el": "Ελληνικά",
"en": "Greek",
"es": "griego",
"et": "Kreeka",
"fi": "kreikka",
"fr": "grec",
"ga": "Gréigis",
"he": "יוונית",
"hi": "ग्रीक",
"hr": "grčki",
"hu": "görög",
"id": "Yunani",
"is": "Nýgríska (1453-)",
"it": "greco",
"ja": "ギリシャ語",
"km": "ភាសាក្រិច",
"ko": "그리스어",
"lt": "Graikų",
"lv": "grieķu",
"mr": "ग्रीक",
"mt": "Grieg",
"nb": "gresk",
"nl": "Grieks",
"nn": "gresk",
"pl": "grecki",
"ps": "یوناني",
"pt": "grego",
"ro": "Greacă",
"ru": "греческий",
"sk": "grécky",
"sl": "Grščina",
"sr": "Грчки",
"sv": "grekiska",
"ta": "கிரேக்கம்",
"th": "กรีก",
"tr": "Yunanca",
"uk": "Грецька",
"vi": "Tiếng Hy Lạp",
"zh": "希腊文"
},
{
"type": "language",
"iso": "en",
"name": "English",
"countries": [
{
"_reference": "AS"
},
{
"_reference": "AU"
},
{
"_reference": "BE"
},
{
"_reference": "BW"
},
{
"_reference": "BZ"
},
{
"_reference": "CA"
},
{
"_reference": "GB"
},
{
"_reference": "GU"
},
{
"_reference": "HK"
},
{
"_reference": "IE"
},
{
"_reference": "IN"
},
{
"_reference": "JM"
},
{
"_reference": "MH"
},
{
"_reference": "MP"
},
{
"_reference": "MT"
},
{
"_reference": "NA"
},
{
"_reference": "NZ"
},
{
"_reference": "PH"
},
{
"_reference": "PK"
},
{
"_reference": "SG"
},
{
"_reference": "TT"
},
{
"_reference": "UM"
},
{
"_reference": "US"
},
{
"_reference": "VI"
},
{
"_reference": "ZA"
},
{
"_reference": "ZW"
}
],
"am": "እንግሊዝኛ",
"ar": "الانجليزية",
"be": "англійскі",
"bg": "Английски",
"ca": "anglès",
"cs": "Angličtina",
"cy": "Saesneg",
"da": "Engelsk",
"de": "Englisch",
"el": "Αγγλικά",
"en": "English",
"es": "inglés",
"et": "Inglise",
"eu": "ingelera",
"fi": "englanti",
"fr": "anglais",
"ga": "Béarla",
"he": "אנגלית",
"hi": "अंग्रेजी",
"hr": "engleski",
"hu": "angol",
"id": "Inggris",
"is": "Enska",
"it": "inglese",
"ja": "英語",
"ka": "ინგლისური",
"km": "ភាសាអង់គ្លេស",
"ko": "영어",
"ky": "англисче",
"lt": "Anglų",
"lv": "angļu",
"mk": "англиски",
"mn": "англи",
"mr": "इंग्रेजी",
"mt": "Ingliż",
"nb": "engelsk",
"nl": "Engels",
"nn": "engelsk",
"pl": "angielski",
"ps": "انګلیسي",
"pt": "inglês",
"ro": "Engleză",
"ru": "английский",
"sk": "anglický",
"sl": "Angleščina",
"sq": "Anglisht",
"sr": "Енглески",
"sv": "engelska",
"sw": "kiingereza",
"ta": "ஆங்கிலம்",
"te": "ఆంగ్లం",
"th": "อังกฤษ",
"tr": "İngilizce",
"uk": "Англійська",
"vi": "Tiếng Anh",
"zh": "英文"
},
{
"type": "language",
"iso": "es",
"name": "español",
"countries": [
{
"_reference": "AR"
},
{
"_reference": "BO"
},
{
"_reference": "CL"
},
{
"_reference": "CO"
},
{
"_reference": "CR"
},
{
"_reference": "DO"
},
{
"_reference": "EC"
},
{
"_reference": "ES"
},
{
"_reference": "GT"
},
{
"_reference": "HN"
},
{
"_reference": "MX"
},
{
"_reference": "NI"
},
{
"_reference": "PA"
},
{
"_reference": "PE"
},
{
"_reference": "PR"
},
{
"_reference": "PY"
},
{
"_reference": "SV"
},
{
"_reference": "US"
},
{
"_reference": "UY"
},
{
"_reference": "VE"
}
],
"af": "Spaans",
"am": "ስፓኒሽ",
"ar": "الأسبانية",
"be": "іспанскі",
"bg": "Испански",
"ca": "espanyol",
"cs": "Španělština",
"cy": "Sbaeneg",
"da": "Spansk",
"de": "Spanisch",
"el": "Ισπανικά",
"en": "Spanish",
"es": "español",
"et": "Hispaania",
"eu": "espainiera",
"fi": "espanja",
"fr": "espagnol",
"ga": "Spáinnis",
"he": "ספרדית",
"hi": "स्पेनिश",
"hr": "španjolski",
"hu": "spanyol",
"id": "Spanyol",
"is": "Spænska",
"it": "spagnolo",
"ja": "スペイン語",
"ka": "ესპანური",
"km": "ភាសាអេស្ប៉ាញ",
"ko": "스페인어",
"ky": "испанча",
"lt": "Ispanų",
"lv": "spāņu",
"mk": "шпански",
"mn": "испани",
"mr": "स्पानिष",
"mt": "Spanjol",
"nb": "spansk",
"nl": "Spaans",
"nn": "spansk",
"pl": "hiszpański",
"pt": "espanhol",
"ro": "Spaniolă",
"ru": "испанский",
"sk": "španielsky",
"sl": "Španščina",
"sq": "Spanjisht",
"sr": "Шпански",
"sv": "spanska",
"sw": "kihispania",
"ta": "ஸ்பேனிஷ்",
"te": "స్పానిష్",
"th": "สเปน",
"tr": "İspanyolca",
"uk": "Іспанська",
"vi": "Tiếng Tây Ban Nha",
"zh": "西班牙文"
},
{
"type": "language",
"iso": "et",
"name": "Eesti",
"countries": [
{
"_reference": "EE"
}
],
"am": "ኤስቶኒአን",
"ar": "الأستونية",
"bg": "Естонски",
"ca": "estonià",
"cs": "Estonština",
"da": "Estisk",
"de": "Estnisch",
"el": "Εσθονικά",
"en": "Estonian",
"es": "estonio",
"et": "Eesti",
"fi": "viro",
"fr": "estonien",
"ga": "Eastóinis",
"he": "אסטונית",
"hi": "ऐस्तोनियन्",
"hr": "estonijski",
"hu": "észt",
"id": "Estonian",
"is": "Eistneska",
"it": "estone",
"ja": "エストニア語",
"km": "ភាសាអេស្តូនី",
"ko": "에스토니아어",
"lt": "Estų",
"lv": "igauņu",
"mr": "इस्टोनियन्",
"mt": "Estonjan",
"nb": "estisk",
"nl": "Estlands",
"nn": "estisk",
"pl": "estoński",
"ps": "حبشي",
"pt": "estoniano",
"ro": "Estoniană",
"ru": "эстонский",
"sk": "estónsky",
"sl": "Estonščina",
"sr": "Естонски",
"sv": "estniska",
"ta": "எஸ்டோனியன்",
"th": "เอสโตเนีย",
"tr": "Estonya Dili",
"uk": "Естонська",
"vi": "Tiếng E-xtô-ni-a",
"zh": "爱沙尼亚文"
},
{
"type": "language",
"iso": "eu",
"name": "euskara",
"countries": [
{
"_reference": "ES"
}
],
"am": "ባስክኛ",
"ar": "لغة الباسك",
"bg": "Баски",
"ca": "basc",
"cs": "Baskičtina",
"da": "baskisk",
"de": "Baskisch",
"el": "Βασκικά",
"en": "Basque",
"es": "vasco",
"eu": "euskara",
"fi": "baski",
"fr": "basque",
"ga": "Bascais",
"he": "בסקית",
"hi": "बास्क्",
"hu": "baszk",
"id": "Basque",
"is": "Baskneska",
"it": "basco",
"ja": "バスク語",
"km": "ភាសាបាស្កេ",
"ko": "바스크어",
"mr": "बास्क",
"mt": "Bask",
"nb": "baskisk",
"nl": "Baskisch",
"nn": "baskisk",
"pl": "baskijski",
"pt": "basco",
"ru": "баскский",
"sr": "Баскијски",
"sv": "baskiska",
"ta": "பஸ்க்",
"th": "แบสก์",
"tr": "Bask Dili",
"uk": "Басків",
"zh": "巴斯克文"
},
{
"type": "language",
"iso": "fa",
"name": "فارسی",
"countries": [
{
"_reference": "AF"
},
{
"_reference": "IR"
}
],
"am": "ፐርሲያኛ",
"ar": "الفارسية",
"bg": "Персийски",
"ca": "persa",
"cs": "Perština",
"da": "Persisk",
"de": "Persisch",
"el": "Περσικά",
"en": "Persian",
"es": "farsi",
"fr": "persan",
"ga": "Peirsis",
"he": "פרסית",
"hi": "पर्शियन्",
"hr": "perzijski",
"hu": "perzsa",
"id": "Persia",
"is": "Persneska",
"it": "persiano",
"ja": "ペルシア語",
"ko": "이란어",
"mr": "पर्षियन्",
"mt": "Persjan",
"nb": "persisk",
"nl": "Perzisch",
"nn": "persisk",
"ps": "فارسي",
"pt": "persa",
"ru": "персидский",
"sr": "Персијски",
"sv": "persiska",
"ta": "பர்ஸியன்",
"th": "เปอร์เซีย",
"tr": "Farsça",
"uk": "Перська",
"vi": "Tiếng Ba Tư",
"zh": "波斯文"
},
{
"type": "language",
"iso": "fi",
"name": "suomi",
"countries": [
{
"_reference": "FI"
}
],
"am": "ፊኒሽ",
"ar": "الفنلندية",
"bg": "Фински",
"ca": "finès",
"cs": "Finština",
"da": "Finsk",
"de": "Finnisch",
"el": "Φινλανδικά",
"en": "Finnish",
"es": "finés",
"et": "Soome",
"fi": "suomi",
"fr": "finnois",
"ga": "Fionnlainnis",
"he": "פינית",
"hi": "फिनिश",
"hr": "finski",
"hu": "finn",
"id": "Finlandia",
"is": "Finnska",
"it": "finlandese",
"ja": "フィンランド語",
"km": "ភាសាហ្វាំងឡង់",
"ko": "핀란드어",
"lt": "Suomių",
"lv": "somu",
"mr": "फिन्निष",
"mt": "Finlandiż",
"nb": "finsk",
"nl": "Fins",
"nn": "finsk",
"pl": "fiński",
"ps": "فینلنډي",
"pt": "finlandês",
"ro": "Finlandeză",
"ru": "финский",
"sk": "fínsky",
"sl": "Finščina",
"sr": "Фински",
"sv": "finska",
"ta": "பின்னிஷ்",
"th": "ฟิน",
"tr": "Fince",
"uk": "Фінська",
"vi": "Tiếng Phần Lan",
"zh": "芬兰文"
},
{
"type": "language",
"iso": "fo",
"name": "føroyskt",
"countries": [
{
"_reference": "FO"
}
],
"am": "ፋሮኛ",
"ar": "الفارويز",
"ca": "feroès",
"cs": "Faerština",
"da": "Færøsk",
"de": "Färöisch",
"en": "Faroese",
"es": "feroés",
"fi": "fääri",
"fo": "føroyskt",
"fr": "féroïen",
"ga": "Faróis",
"he": "פארואזית",
"hi": "फिरोज़ी",
"hu": "feröeri",
"id": "Faro",
"is": "Færeyska",
"it": "faroese",
"ja": "フェロー語",
"ko": "페로스어",
"mr": "फेरोस्",
"mt": "Fawriż",
"nb": "færøysk",
"nl": "Faeröers",
"nn": "færøysk",
"pt": "feroês",
"ru": "фарерский",
"sv": "färöiska",
"ta": "பைரோஸி",
"th": "ฟาโรส",
"tr": "Faroe Dili",
"uk": "Фарерська",
"zh": "法罗文"
},
{
"type": "language",
"iso": "fr",
"name": "français",
"countries": [
{
"_reference": "BE"
},
{
"_reference": "CA"
},
{
"_reference": "CH"
},
{
"_reference": "FR"
},
{
"_reference": "LU"
},
{
"_reference": "MC"
}
],
"am": "ፈረንሳይኛ",
"ar": "الفرنسية",
"be": "французскі",
"bg": "Френски",
"ca": "francès",
"cs": "Francouzština",
"cy": "Ffrangeg",
"da": "Fransk",
"de": "Französisch",
"el": "Γαλλικά",
"en": "French",
"es": "francés",
"et": "Prantsuse",
"eu": "frantsesera",
"fi": "ranska",
"fr": "français",
"ga": "Fraincis",
"he": "צרפתית",
"hi": "फ्रेंच",
"hr": "francuski",
"hu": "francia",
"id": "Perancis",
"is": "Franska",
"it": "francese",
"ja": "フランス語",
"ka": "ფრანგული",
"km": "ភាសាបារាំង",
"ko": "프랑스어",
"ky": "французча",
"lt": "Prancūzų",
"lv": "franču",
"mk": "француски",
"mn": "франц",
"mr": "फ्रेन्च",
"mt": "Franċiż",
"nb": "fransk",
"nl": "Frans",
"nn": "fransk",
"pl": "francuski",
"ps": "فرانسوي",
"pt": "francês",
"ro": "Franceză",
"ru": "французский",
"sk": "francúzsky",
"sl": "Francoščina",
"sq": "Frengjisht",
"sr": "Француски",
"sv": "franska",
"sw": "kifaransa",
"ta": "பிரெஞ்சு",
"te": "ఫ్రెంచ్",
"th": "ฝรั่งเศส",
"tr": "Fransızca",
"uk": "Французька",
"vi": "Tiếng Pháp",
"zh": "法文"
},
{
"type": "language",
"iso": "ga",
"name": "Gaeilge",
"countries": [
{
"_reference": "IE"
}
],
"am": "አይሪሽ",
"ar": "الأيرلندية",
"bg": "Ирландски",
"ca": "irlandès",
"cs": "Irština",
"da": "Irsk",
"de": "Irisch",
"el": "Ιρλανδικά",
"en": "Irish",
"es": "irlandés",
"fi": "iiri",
"fr": "irlandais",
"ga": "Gaeilge",
"he": "אירית",
"hi": "आईरिश",
"hr": "irski",
"hu": "ír",
"id": "Irlandia",
"is": "Írska",
"it": "irlandese",
"ja": "アイルランド語",
"km": "ភាសាហ្កែលិគ",
"ko": "아일랜드어",
"mr": "ऐरिष",
"mt": "Irlandiż",
"nb": "irsk",
"nl": "Iers",
"nn": "irsk",
"pt": "irlandês",
"ru": "ирландский",
"sr": "Ирски",
"ta": "ஐரிஷ்",
"th": "ไอริช",
"tr": "İrlanda Dili",
"uk": "Ірландська",
"vi": "Tiếng Ai-len",
"zh": "爱尔兰文"
},
{
"type": "language",
"iso": "gl",
"name": "galego",
"countries": [
{
"_reference": "ES"
}
],
"am": "ጋለጋኛ",
"ar": "الجاليكية",
"ca": "gallec",
"cs": "Haličština",
"da": "Galicisk",
"de": "Galizisch",
"en": "Galician",
"es": "gallego",
"fi": "galicia",
"fr": "galicien",
"gl": "galego",
"he": "גליציאנית",
"hi": "गैलिशियन्",
"hu": "galíciai",
"id": "Gallegan",
"is": "Gallegska",
"it": "galiziano",
"ja": "ガリシア語",
"km": "ភាសាហ្កាលីស៉ី",
"ko": "갈리시아어",
"mr": "गेलीशियन",
"mt": "Gallegjan",
"nb": "galicisk",
"nl": "Galicisch",
"nn": "galicisk",
"pt": "galego",
"ru": "галисийский",
"sv": "galiciska",
"ta": "கெலிஸியன்",
"th": "กะลีเชีย",
"tr": "Galiçya Dili",
"uk": "Галісійська",
"zh": "加利西亚文"
},
{
"type": "language",
"iso": "gu",
"name": "ગુજરાતી",
"countries": [
{
"_reference": "IN"
}
],
"am": "ጉጃርቲኛ",
"ar": "الغوجاراتية",
"bg": "Гуджарати",
"ca": "gujarati",
"cs": "Gujaratština",
"da": "Gujaratisk",
"de": "Gujarati",
"en": "Gujarati",
"es": "gujarati",
"fr": "goudjrati",
"ga": "Gúisearáitis",
"gu": "ગુજરાતી",
"he": "גוג'ראטית",
"hi": "गुज़राती",
"hu": "gudzsaráti",
"id": "Gujarati",
"is": "Gújaratí",
"it": "gujarati",
"ja": "グジャラート語",
"km": "ភាសាហ្កុយ៉ារាទី",
"ko": "구자라트어",
"mr": "गुजराती",
"mt": "Guġarati",
"nb": "gujarati",
"nl": "Gujarati",
"nn": "gujarati",
"pt": "guzerate",
"ru": "гуджарати",
"sv": "gujarati",
"ta": "குஜராத்தி",
"th": "กูจาราติ",
"tr": "Gujarati",
"uk": "Гуяраті",
"zh": "古加拉提文"
},
{
"type": "language",
"iso": "gv",
"name": "Gaelg",
"countries": [
{
"_reference": "GB"
}
],
"ar": "المنكية",
"cs": "Manština",
"da": "Manx",
"de": "Manx",
"en": "Manx",
"es": "gaélico manés",
"fi": "manx",
"fr": "manx",
"ga": "Mannainis",
"gv": "Gaelg",
"id": "Manx",
"is": "Manx",
"it": "manx",
"ja": "マン島語",
"ko": "맹크스어",
"mt": "Manks",
"nb": "manx",
"nl": "Manx",
"nn": "manx",
"pt": "manx",
"ru": "мэнский",
"sv": "manx",
"th": "มานซ์",
"zh": "马恩岛文"
},
{
"type": "language",
"iso": "he",
"name": "עברית",
"countries": [
{
"_reference": "IL"
}
],
"am": "ዕብራስጥ",
"ar": "العبرية",
"bg": "Иврит",
"ca": "hebreu",
"cs": "Hebrejština",
"da": "Hebraisk",
"de": "Hebräisch",
"el": "Εβραϊκά",
"en": "Hebrew",
"es": "hebreo",
"et": "Heebrea",
"fi": "heprea",
"fr": "hébreu",
"ga": "Eabhrais",
"he": "עברית",
"hi": "हिब्रीऊ",
"hr": "hebrejski",
"hu": "héber",
"id": "Ibrani",
"is": "Hebreska",
"it": "ebraico",
"ja": "ヘブライ語",
"km": "ភាសាហេប្រិ",
"ko": "히브리어",
"lt": "Hebrajų",
"lv": "ivrits",
"mr": "हेबृ",
"mt": "Ebrajk",
"nb": "hebraisk",
"nl": "Hebreeuws",
"nn": "hebraisk",
"pl": "hebrajski",
"ps": "عبري",
"pt": "hebraico",
"ro": "Ebraică",
"ru": "иврит",
"sk": "hebrejský",
"sl": "Hebrejščina",
"sr": "Хебрејски",
"sv": "hebreiska",
"ta": "ஹுப்ரு",
"th": "ฮิบรู",
"tr": "İbranice",
"uk": "Іврит",
"vi": "Tiếng Hê-brơ",
"zh": "希伯来文"
},
{
"type": "language",
"iso": "hi",
"name": "हिंदी",
"countries": [
{
"_reference": "IN"
}
],
"am": "ሐንድኛ",
"ar": "الهندية",
"be": "хіндзі",
"bg": "Хинди",
"ca": "hindi",
"cs": "Hindština",
"cy": "Hindi",
"da": "Hindi",
"de": "Hindi",
"el": "Χίντι",
"en": "Hindi",
"es": "hindi",
"fi": "hindi",
"fr": "hindi",
"ga": "Hiondúis",
"he": "הינדית",
"hi": "हिंदी",
"hu": "hindi",
"id": "Hindi",
"is": "Hindí",
"it": "hindi",
"ja": "ヒンディー語",
"km": "ភាសាហ៉ិនឌី",
"ko": "힌디어",
"lt": "Hindi",
"mr": "हिन्दी",
"mt": "Ħindi",
"nb": "hindi",
"nl": "Hindi",
"nn": "hindi",
"pl": "hindi",
"ps": "هندي",
"pt": "hindi",
"ru": "хинди",
"sq": "Hindi",
"sr": "Хинди",
"sv": "hindi",
"ta": "இந்தி",
"te": "హిందీ",
"th": "ฮินดี",
"tr": "Hint Dili",
"uk": "Гінді",
"vi": "Tiếng Hin-đi",
"zh": "印地文"
},
{
"type": "language",
"iso": "hr",
"name": "hrvatski",
"countries": [
{
"_reference": "HR"
}
],
"am": "ክሮሽያንኛ",
"ar": "الكرواتية",
"bg": "Хърватски",
"ca": "croat",
"cs": "Chorvatština",
"da": "Kroatisk",
"de": "Kroatisch",
"el": "Κροατικά",
"en": "Croatian",
"es": "croata",
"et": "Horvaadi",
"fi": "kroatia",
"fr": "croate",
"ga": "Cróitis",
"he": "קרואטית",
"hi": "क्रोएशन्",
"hr": "hrvatski",
"hu": "horvát",
"id": "Kroasia",
"is": "Króatíska",
"it": "croato",
"ja": "クロアチア語",
"ko": "크로아티아어",
"lt": "Kroatų",
"lv": "horvātu",
"mr": "क्रोयेषियन्",
"mt": "Kroat",
"nb": "kroatisk",
"nl": "Kroatisch",
"nn": "kroatisk",
"pl": "chorwacki",
"pt": "croata",
"ro": "Croată",
"ru": "хорватский",
"sk": "chorvátsky",
"sl": "Hrvaščina",
"sr": "Хрватски",
"sv": "kroatiska",
"ta": "கரோஷியன்",
"th": "โครเอเทีย",
"tr": "Hırvatça",
"uk": "Хорватська",
"vi": "Tiếng Crô-a-ti-a",
"zh": "克罗地亚文"
},
{
"type": "language",
"iso": "hu",
"name": "magyar",
"countries": [
{
"_reference": "HU"
}
],
"am": "ሀንጋሪኛ",
"ar": "الهنغارية",
"bg": "Унгарски",
"ca": "hongarès",
"cs": "Maďarština",
"da": "Ungarsk",
"de": "Ungarisch",
"el": "Ουγγρικά",
"en": "Hungarian",
"es": "húngaro",
"et": "Ungari",
"fi": "unkari",
"fr": "hongrois",
"ga": "Ungáiris",
"he": "הונגרית",
"hi": "हंगेरी",
"hr": "mađarski",
"hu": "magyar",
"id": "Hungaria",
"is": "Ungverska",
"it": "ungherese",
"ja": "ハンガリー語",
"km": "ភាសាហុងគ្រី",
"ko": "헝가리어",
"lt": "Vengrų",
"lv": "ungāru",
"mr": "हंगेरियन्",
"mt": "Ungeriż",
"nb": "ungarsk",
"nl": "Hongaars",
"nn": "ungarsk",
"pl": "węgierski",
"pt": "húngaro",
"ro": "Maghiară",
"ru": "венгерский",
"sk": "maďarský",
"sl": "Madžarščina",
"sr": "Мађарски",
"sv": "ungerska",
"ta": "ஹங்கேரியன்",
"th": "ฮังการี",
"tr": "Macarca",
"uk": "Угорська",
"vi": "Tiếng Hung-ga-ri",
"zh": "匈牙利文"
},
{
"type": "language",
"iso": "hy",
"name": "Հայերէն",
"countries": [
{
"_reference": "AM"
}
],
"am": "አርመናዊ",
"ar": "الأرمينية",
"bg": "Арменски",
"ca": "armeni",
"cs": "Arménština",
"da": "armensk",
"de": "Armenisch",
"el": "Αρμενικά",
"en": "Armenian",
"es": "armenio",
"fi": "armenia",
"fr": "arménien",
"ga": "Airméinis",
"he": "ארמנית",
"hi": "अरमेनियन्",
"hr": "armenski",
"hu": "örmény",
"hy": "Հայերէն",
"id": "Armenia",
"is": "Armenska",
"it": "armeno",
"ja": "アルメニア語",
"km": "ភាសាអារមេនី",
"ko": "아르메니아어",
"mr": "आर्मीनियन्",
"mt": "Armenjan",
"nb": "armensk",
"nl": "Armeens",
"nn": "armensk",
"ps": "ارمني",
"pt": "armênio",
"ru": "армянский",
"sr": "Арменски",
"sv": "armeniska",
"ta": "ஆர்மேனியன்",
"th": "อาร์มีเนีย",
"tr": "Ermenice",
"uk": "Вірменська",
"vi": "Tiếng Ác-mê-ni",
"zh": "亚美尼亚文"
},
{
"type": "language",
"iso": "id",
"name": "Bahasa Indonesia",
"countries": [
{
"_reference": "ID"
}
],
"am": "እንዶኒሲኛ",
"ar": "الأندونيسية",
"bg": "Индонезийски",
"ca": "indonesi",
"cs": "Indonéština",
"da": "Indonesisk",
"de": "Indonesisch",
"el": "Ινδονησιακά",
"en": "Indonesian",
"es": "indonesio",
"fi": "indonesia",
"fr": "indonésien",
"ga": "Indinéisis",
"he": "אינדונזית",
"hi": "इन्डोनेशियन्",
"hu": "indonéz",
"id": "Bahasa Indonesia",
"is": "Indónesíska",
"it": "indonesiano",
"ja": "インドネシア語",
"km": "ភាសាឥណ្ឌូនេស៊ី",
"ko": "인도네시아어",
"mr": "इन्डोनेषियन",
"mt": "Indoneżjan",
"nb": "indonesisk",
"nl": "Indonesisch",
"nn": "indonesisk",
"pt": "indonésio",
"ru": "индонезийский",
"sr": "Индонезијски",
"sv": "indonesiska",
"ta": "இந்தோனேஷியன்",
"th": "อินโดนีเชีย",
"tr": "Endonezya Dili",
"uk": "Індонезійська",
"vi": "Tiếng In-đô-nê-xia",
"zh": "印度尼西亚文"
},
{
"type": "language",
"iso": "is",
"name": "Íslenska",
"countries": [
{
"_reference": "IS"
}
],
"am": "አይስላንድኛ",
"ar": "الأيسلاندية",
"bg": "Исландски",
"ca": "islandès",
"cs": "Islandština",
"da": "Islandsk",
"de": "Isländisch",
"el": "Ισλανδικά",
"en": "Icelandic",
"es": "islandés",
"fi": "islanti",
"fr": "islandais",
"ga": "Íoslainnais",
"he": "איסלנדית",
"hi": "आईस्लैंडिक्",
"hr": "islandski",
"hu": "izlandi",
"id": "Icelandic",
"is": "Íslenska",
"it": "islandese",
"ja": "アイスランド語",
"km": "ភាសាអ៉ីស្លង់",
"ko": "아이슬란드어",
"mr": "आईसलान्डिक",
"mt": "Iżlandiż",
"nb": "islandsk",
"nl": "IJslands",
"nn": "islandsk",
"pt": "islandês",
"ru": "исландский",
"sr": "Исландски",
"sv": "isländska",
"ta": "ஐஸ்லென்டிக்",
"th": "ไอซ์แลนด์ดิค",
"tr": "İzlandaca",
"uk": "Ісландська",
"vi": "Tiếng Ai-xơ-len",
"zh": "冰岛文"
},
{
"type": "language",
"iso": "it",
"name": "italiano",
"countries": [
{
"_reference": "CH"
},
{
"_reference": "IT"
}
],
"am": "ጣሊያንኛ",
"ar": "الايطالية",
"be": "італьянскі",
"bg": "Италиански",
"ca": "italià",
"cs": "Italština",
"cy": "Eidaleg",
"da": "Italiensk",
"de": "Italienisch",
"el": "Ιταλικά",
"en": "Italian",
"es": "italiano",
"et": "Itaalia",
"eu": "italiera",
"fi": "italia",
"fr": "italien",
"ga": "Iodáilis",
"he": "איטלקית",
"hi": "ईटालियन्",
"hr": "talijanski",
"hu": "olasz",
"id": "Italian",
"is": "Ítalska",
"it": "italiano",
"ja": "イタリア語",
"ka": "იტალიური",
"km": "ភាសាអ៊ីតាលី",
"ko": "이탈리아어",
"ky": "италиянча",
"lt": "Italų",
"lv": "itāliešu",
"mk": "италијански",
"mn": "итали",
"mr": "इटालियन",
"mt": "Taljan",
"nb": "italiensk",
"nl": "Italiaans",
"nn": "italiensk",
"pl": "włoski",
"ps": "ایټالوي",
"pt": "italiano",
"ro": "Italiană",
"ru": "итальянский",
"sk": "taliansky",
"sl": "Italijanščina",
"sq": "Italisht",
"sr": "Италијански",
"sv": "italienska",
"sw": "kiitaliano",
"ta": "இத்தாலியன்",
"te": "ఇటాలియన్ భాష",
"th": "อิตาลี",
"tr": "İtalyanca",
"uk": "Італійська",
"vi": "Tiếng Ý",
"zh": "意大利文"
},
{
"type": "language",
"iso": "ja",
"name": "日本語",
"countries": [
{
"_reference": "JP"
}
],
"am": "ጃፓንኛ",
"ar": "اليابانية",
"be": "японскі",
"bg": "Японски",
"ca": "japonès",
"cs": "Japonština",
"cy": "Siapaneeg",
"da": "Japansk",
"de": "Japanisch",
"el": "Ιαπωνικά",
"en": "Japanese",
"es": "japonés",
"et": "Jaapani",
"eu": "japoniera",
"fi": "japani",
"fr": "japonais",
"ga": "Seapáinis",
"he": "יפנית",
"hi": "जापानी",
"hr": "japanski",
"hu": "japán",
"id": "Japanese",
"is": "Japanska",
"it": "giapponese",
"ja": "日本語",
"ka": "იაპონური",
"km": "ភាសាជប៉ុន",
"ko": "일본어",
"ky": "япончо",
"lt": "Japonų",
"lv": "japāņu",
"mk": "јапонски",
"mn": "япон",
"mr": "जापनीस्",
"mt": "Ġappuniż",
"nb": "japansk",
"nl": "Japans",
"nn": "japansk",
"pl": "japoński",
"ps": "جاپانی",
"pt": "japonês",
"ro": "Japoneză",
"ru": "японский",
"sk": "japonský",
"sl": "Japonščina",
"sq": "Japanisht",
"sr": "Јапански",
"sv": "japanska",
"sw": "kijapani",
"ta": "ஜப்பானீஸ்",
"te": "జపాను భాష",
"th": "ญี่ปุ่น",
"tr": "Japonca",
"uk": "Японська",
"vi": "Tiếng Nhật",
"zh": "日文"
},
{
"type": "language",
"iso": "ka",
"name": "ქართული",
"countries": [
{
"_reference": "GE"
}
],
"am": "ጊዮርጊያን",
"ar": "الجورجية",
"bg": "Грузински",
"ca": "georgià",
"cs": "Gruzínština",
"da": "Georgisk",
"de": "Georgisch",
"el": "Γεωργιανά",
"en": "Georgian",
"es": "georgiano",
"fi": "georgia",
"fr": "géorgien",
"ga": "Seoirsis",
"he": "גרוזינית",
"hi": "जॉर्जीयन्",
"hu": "grúz",
"id": "Georgian",
"is": "Georgíska",
"it": "georgiano",
"ja": "グルジア語",
"ka": "ქართული",
"km": "ភាសាហ្សកហ្ស៉ី",
"ko": "그루지야어",
"mr": "जार्जियन्",
"mt": "Ġorġjan",
"nb": "georgisk",
"nl": "Georgisch",
"nn": "georgisk",
"pt": "georgiano",
"ru": "грузинский",
"sr": "Грузијски",
"sv": "georgiska",
"ta": "கன்னடம்",
"th": "จอร์เจียน",
"tr": "Gürcüce",
"uk": "Грузинська",
"zh": "格鲁吉亚文"
},
{
"type": "language",
"iso": "kk",
"name": "Қазақ",
"countries": [
{
"_reference": "KZ"
}
],
"am": "ካዛክኛ",
"ar": "الكازاخستانية",
"bg": "Казахски",
"ca": "kazakh",
"cs": "Kazachština",
"da": "Kasakhisk",
"de": "Kasachisch",
"en": "Kazakh",
"es": "kazajo",
"fi": "kazakki",
"fr": "kazakh",
"ga": "Casachais",
"he": "קזחית",
"hi": "कज़ाख",
"hu": "kazah",
"id": "Kazakh",
"is": "Kasakska",
"it": "kazako",
"ja": "カザフ語",
"kk": "Қазақ",
"km": "ភាសាកាហ្សាក់ស្តង់់",
"ko": "카자흐어",
"mr": "कज़क",
"mt": "Każak",
"nb": "kasakhisk",
"nl": "Kazachs",
"nn": "kasakhisk",
"pt": "cazaque",
"ru": "казахский",
"sv": "kazakstanska",
"ta": "கசாக்",
"th": "คาซัค",
"tr": "Kazak Dili",
"uk": "Казахська",
"zh": "哈萨克文"
},
{
"type": "language",
"iso": "kl",
"name": "kalaallisut",
"countries": [
{
"_reference": "GL"
}
],
"am": "ካላሊሱትኛ",
"ar": "الكالاليست",
"ca": "greenlandès",
"cs": "Grónština",
"da": "Kalaallisut",
"de": "Grönländisch",
"en": "Kalaallisut",
"es": "groenlandés",
"fi": "kalaallisut; grönlanti",
"fr": "groenlandais",
"hi": "ग्रीनलैंडिक",
"hu": "grönlandi",
"id": "Kalaallisut",
"is": "Grænlenska",
"it": "kalaallisut",
"ja": "グリーンランド語",
"kl": "kalaallisut",
"ko": "그린랜드어",
"mr": "ग्रीनलान्डिक",
"mt": "Kalallisut",
"nl": "Kalaallisut",
"nn": "kalaallisut; grønlandsk",
"pt": "groenlandês",
"ru": "эскимосский (гренландский)",
"sv": "grönländska",
"ta": "கிரின்லென்டிக்",
"th": "กรีนแลนด์ดิค",
"tr": "Grönland Dili",
"uk": "Калааллісут",
"zh": "格陵兰文"
},
{
"type": "language",
"iso": "km",
"name": "ភាសាខ្មែរ",
"countries": [
{
"_reference": "KH"
}
],
"am": "ክመርኛ",
"ar": "الخميرية",
"bg": "Кхмерски",
"ca": "cambodjà",
"cs": "Kambodžština",
"da": "Khmer",
"de": "Kambodschanisch",
"en": "Khmer",
"es": "jemer",
"fi": "khmer",
"fr": "khmer",
"hi": "कैम्बोडियन्",
"hr": "kmerski",
"hu": "kambodzsai",
"id": "Khmer",
"is": "Kmer",
"it": "khmer",
"ja": "クメール語",
"km": "ភាសាខ្មែរ",
"ko": "캄보디아어",
"mr": "कंबोडियन",
"mt": "Kmer",
"nb": "khmer",
"nl": "Khmer",
"nn": "khmer",
"pt": "cmer",
"ru": "кхмерский",
"sr": "Кмерски",
"sv": "kambodjanska; khmeriska",
"ta": "கம்போடியன்",
"th": "เขมร",
"tr": "Kamboçya Dili",
"uk": "Кхмерська",
"vi": "Tiếng Campuchia",
"zh": "柬埔寨文"
},
{
"type": "language",
"iso": "kn",
"name": "ಕನ್ನಡ",
"countries": [
{
"_reference": "IN"
}
],
"am": "ካናዳኛ",
"ar": "الكانادا",
"ca": "kannada",
"cs": "Kannadština",
"da": "Kannaresisk",
"de": "Kannada",
"en": "Kannada",
"es": "canarés",
"fi": "kannada",
"fr": "kannada",
"ga": "Cannadais",
"hi": "कन्नड़",
"hu": "kannada",
"id": "Kannada",
"is": "Kannada",
"it": "kannada",
"ja": "カンナダ語",
"km": "ភាសាកិណាដា",
"kn": "ಕನ್ನಡ",
"ko": "카나다어",
"mr": "कन्नड",
"mt": "Kannada",
"nb": "kannada",
"nl": "Kannada",
"nn": "kannada",
"pt": "canarês",
"ru": "каннада",
"sv": "kanaresiska; kannada",
"ta": "கன்னடா",
"th": "กานาดา",
"tr": "Kannada",
"uk": "Каннада",
"vi": "Tiếng Kan-na-đa",
"zh": "埃纳德文"
},
{
"type": "language",
"iso": "ko",
"name": "한국어",
"countries": [
{
"_reference": "KR"
}
],
"am": "ኮሪያኛ",
"ar": "الكورية",
"bg": "Корейски",
"ca": "coreà",
"cs": "Korejština",
"da": "Koreansk",
"de": "Koreanisch",
"el": "Κορεατικά",
"en": "Korean",
"es": "coreano",
"et": "Korea",
"fi": "korea",
"fr": "coréen",
"ga": "Cóiréis",
"he": "קוריאנית",
"hi": "कोरीयन्",
"hr": "korejski",
"hu": "koreai",
"id": "Korea",
"is": "Kóreska",
"it": "coreano",
"ja": "韓国語",
"km": "ភាសាកូរ៉េ",
"ko": "한국어",
"lt": "Korėjiečių",
"lv": "korejiešu",
"mr": "कोरियन्",
"mt": "Korejan",
"nb": "koreansk",
"nl": "Koreaans",
"nn": "koreansk",
"pl": "koreański",
"pt": "coreano",
"ro": "Coreeană",
"ru": "корейский",
"sk": "kórejský",
"sl": "Korejščina",
"sr": "Корејски",
"sv": "koreanska",
"ta": "கொரியன்",
"th": "เกาหลี",
"tr": "Korece",
"uk": "Корейська",
"vi": "Tiếng Hàn Quốc",
"zh": "韩文"
},
{
"type": "language",
"iso": "ku",
"name": "kurdî",
"countries": [
{
"_reference": "IQ"
},
{
"_reference": "IR"
},
{
"_reference": "SY"
},
{
"_reference": "TR"
}
],
"am": "ኩርድሽኛ",
"ar": "الكردية",
"bg": "Кюрдски",
"ca": "kurd",
"cs": "Kurdština",
"da": "Kurdisk",
"de": "Kurdisch",
"en": "Kurdish",
"es": "kurdo",
"fi": "kurdi",
"fr": "kurde",
"he": "כורדית",
"hi": "कुरदीश",
"hu": "kurd",
"id": "Kurdi",
"is": "Kúrdneska",
"it": "curdo",
"ja": "クルド語",
"km": "ភាសាឃឺដ",
"ko": "크르드어",
"mr": "कुर्दिष",
"mt": "Kurdiż",
"nb": "kurdisk",
"nl": "Koerdisch",
"nn": "kurdisk",
"ps": "کردي",
"pt": "curdo",
"ru": "курдский",
"sr": "Курдски",
"sv": "kurdiska",
"ta": "குர்திஷ்",
"th": "เคิด",
"tr": "Kürtçe",
"uk": "Курдська",
"zh": "库尔德文"
},
{
"type": "language",
"iso": "kw",
"name": "kernewek",
"countries": [
{
"_reference": "GB"
}
],
"ar": "الكورنية",
"da": "Cornisk",
"de": "Kornisch",
"en": "Cornish",
"es": "córnico",
"fi": "korni",
"fr": "cornique",
"ga": "Cornais",
"id": "Cornish",
"is": "Korníska",
"it": "cornico",
"ja": "コーンウォール語",
"ko": "콘월어",
"kw": "kernewek",
"mt": "Korniku",
"nb": "kornisk",
"nl": "Cornish",
"nn": "kornisk",
"pt": "córnico",
"ru": "корнийский",
"sv": "korniska",
"th": "คอร์นิส",
"zh": "凯尔特文"
},
{
"type": "language",
"iso": "ky",
"name": "Кыргыз",
"countries": [
{
"_reference": "KG"
}
],
"am": "ኪርጊዝኛ",
"ar": "القيرغستانية",
"bg": "Киргизски",
"ca": "kirguís",
"cs": "Kirgizština",
"da": "Kirgisisk",
"de": "Kirgisisch",
"en": "Kirghiz",
"es": "kirghiz",
"fi": "kirgiisi",
"fr": "kirghize",
"ga": "Cirgeasais",
"hi": "किरघिज़",
"hu": "kirgiz",
"id": "Kirghiz",
"is": "Kirgiska",
"it": "kirghiso",
"ja": "キルギス語",
"km": "ភាសាគៀរហ្គីស្តង់",
"ko": "키르기스어",
"mr": "किर्गिज़",
"mt": "Kirgiż",
"nb": "kirgisisk",
"nl": "Kirgizisch",
"nn": "kirgisisk",
"pt": "quirguiz",
"ru": "киргизский",
"sr": "Киргиски",
"sv": "kirgisiska",
"ta": "கிர்கிஷ்",
"th": "เคอร์กิซ",
"tr": "Kırgızca",
"uk": "Киргизька",
"zh": "吉尔吉斯文"
},
{
"type": "language",
"iso": "ln",
"name": "lingála",
"countries": [
{
"_reference": "CD"
},
{
"_reference": "CG"
}
],
"am": "ሊንጋላኛ",
"ar": "اللينجالا",
"ca": "lingala",
"cs": "Lingalština",
"da": "Lingala",
"de": "Lingala",
"en": "Lingala",
"es": "lingala",
"fi": "lingala",
"fr": "lingala",
"hi": "लिंगाला",
"hu": "lingala",
"id": "Lingala",
"is": "Lingala",
"it": "lingala",
"ja": "リンガラ語",
"ko": "링갈라어",
"mr": "लिंगाला",
"mt": "Lingaljan",
"nb": "lingala",
"nl": "Lingala",
"nn": "lingala",
"pt": "lingala",
"ru": "лингала",
"sv": "lingala",
"ta": "லிங்காலா",
"th": "ลิงกาลา",
"tr": "Lingala",
"uk": "Лінгала",
"zh": "林加拉文"
},
{
"type": "language",
"iso": "lo",
"name": "ລາວ",
"countries": [
{
"_reference": "LA"
}
],
"am": "ላውስኛ",
"ar": "اللاوية",
"bg": "Лаоски",
"ca": "laosià",
"cs": "Laoština",
"da": "Lao",
"de": "Laotisch",
"en": "Lao",
"es": "laosiano",
"fi": "lao",
"fr": "lao",
"ga": "Laosais",
"hi": "लाओथीयन्",
"hu": "laoszi",
"id": "Lao",
"is": "Laó",
"it": "lao",
"ja": "ラオ語",
"km": "ភាសាឡាវ",
"ko": "라오어",
"mr": "लाओतियन्",
"mt": "Lao",
"nb": "laotisk",
"nl": "Lao",
"nn": "laotisk",
"pt": "laosiano",
"ru": "лаосский",
"sv": "laotiska",
"ta": "லோத்தியன்",
"th": "ลาว",
"tr": "Laos Dili",
"uk": "Лаоська",
"vi": "Tiếng Lào",
"zh": "老挝文"
},
{
"type": "language",
"iso": "lt",
"name": "Lietuvių",
"countries": [
{
"_reference": "LT"
}
],
"am": "ሊቱአኒያን",
"ar": "اللتوانية",
"bg": "Литовски",
"ca": "lituà",
"cs": "Litevština",
"da": "Litauisk",
"de": "Litauisch",
"el": "Λιθουανικά",
"en": "Lithuanian",
"es": "lituano",
"et": "Leedu",
"fi": "liettua",
"fr": "lituanien",
"ga": "Liotuáinis",
"he": "ליטאית",
"hi": "लिथुनियन्",
"hr": "litvanski",
"hu": "litván",
"id": "Lithuania",
"is": "Litháíska",
"it": "lituano",
"ja": "リトアニア語",
"km": "ភាសាលីទុយអានី",
"ko": "리투아니아어",
"lt": "Lietuvių",
"lv": "lietuviešu",
"mr": "लिथुआनियन्",
"mt": "Litwanjan",
"nb": "litauisk",
"nl": "Litouws",
"nn": "litauisk",
"pl": "litewski",
"pt": "lituano",
"ro": "Lituaniană",
"ru": "литовский",
"sk": "litovský",
"sl": "Litovščina",
"sr": "Литвански",
"sv": "litauiska",
"ta": "லுத்தேனியன்",
"th": "ลิธัวเนีย",
"tr": "Litvanya Dili",
"uk": "Литовська",
"vi": "Tiếng Lít-va",
"zh": "立陶宛文"
},
{
"type": "language",
"iso": "lv",
"name": "latviešu",
"countries": [
{
"_reference": "LV"
}
],
"am": "ላትቪያን",
"ar": "اللاتفية",
"bg": "Латвийски",
"ca": "letó",
"cs": "Lotyština",
"da": "Lettisk",
"de": "Lettisch",
"el": "Λετονικά",
"en": "Latvian",
"es": "letón",
"et": "Läti",
"fi": "latvia",
"fr": "letton",
"ga": "Laitvis",
"he": "לטבית",
"hi": "लाटवियन् (लेट्टीश)",
"hr": "latvijski",
"hu": "lett",
"id": "Latvian",
"is": "Lettneska",
"it": "lettone",
"ja": "ラトビア語",
"km": "ភាសាឡាតវីយ៉ា",
"ko": "라트비아어",
"lt": "Latvių",
"lv": "latviešu",
"mr": "लाट्वियन् (लेट्टिष)",
"mt": "Latvjan (Lettix)",
"nb": "latvisk",
"nl": "Letlands",
"nn": "latvisk",
"pl": "łotewski",
"pt": "letão",
"ro": "Letonă",
"ru": "латышский",
"sk": "lotyšský",
"sl": "Letonščina",
"sr": "Летонски",
"sv": "lettiska",
"ta": "லேட்வியன் (லேட்டிஷ்)",
"th": "แลตเวีย (เลททิสช์)",
"tr": "Letonya Dili",
"uk": "Латвійська",
"vi": "Tiếng Lát-vi-a",
"zh": "拉脫維亞文"
},
{
"type": "language",
"iso": "mk",
"name": "македонски",
"countries": [
{
"_reference": "MK"
}
],
"am": "ማከዶኒኛ",
"ar": "المقدونية",
"bg": "Македонски",
"ca": "macedoni",
"cs": "Makedonština",
"da": "Makedonsk",
"de": "Mazedonisch",
"el": "Σλαβομακεδονικά",
"en": "Macedonian",
"es": "macedonio",
"fi": "makedonia",
"fr": "macédonien",
"ga": "Macadóinis",
"he": "מקדונית",
"hi": "मैसेडोनियन्",
"hr": "makedonski",
"hu": "macedón",
"id": "Macedonian",
"is": "Makedónska",
"it": "macedone",
"ja": "マケドニア語",
"km": "ភាសាម៉ាសេដូនី",
"ko": "마케도니아어",
"mk": "македонски",
"mr": "मसीडोनियन्",
"mt": "Maċedonjan",
"nb": "makedonsk",
"nl": "Macedonisch",
"nn": "makedonsk",
"ps": "مقدوني",
"pt": "macedônio",
"ru": "македонский",
"sr": "Македонски",
"sv": "makedonska",
"ta": "மெக்கடோனியன்",
"th": "แมซีโดเนีย",
"tr": "Makedonca",
"uk": "Македонська",
"vi": "Tiếng Ma-xê-đô-ni-a",
"zh": "马其顿文"
},
{
"type": "language",
"iso": "ml",
"name": "മലയാളം",
"countries": [
{
"_reference": "IN"
}
],
"am": "ማላያላምኛ",
"ar": "الماليالام",
"bg": "Малаялам",
"ca": "malaialam",
"cs": "Malabarština",
"da": "Malayalam",
"de": "Malayalam",
"en": "Malayalam",
"es": "malayalam",
"fi": "malajalam",
"fr": "malayalam",
"ga": "Mailéalaimis",
"hi": "मलयालम",
"hu": "malajalam",
"id": "Malayalam",
"is": "Malajalam",
"it": "malayalam",
"ja": "マラヤーラム語",
"km": "ភាសាម៉ាឡាឡាយ៉ាន",
"ko": "말라얄람어",
"mr": "मलियालम",
"mt": "Malajalam",
"nb": "malayalam",
"nl": "Malayalam",
"nn": "malayalam",
"pt": "malaiala",
"ru": "малаялам",
"sv": "malayalam",
"ta": "மலையாளம்",
"th": "มาลายาลัม",
"tr": "Malayalam",
"uk": "Малайялам",
"zh": "马来亚拉姆文"
},
{
"type": "language",
"iso": "mn",
"name": "Монгол хэл",
"countries": [
{
"_reference": "MN"
}
],
"am": "ሞንጎላዊኛ",
"ar": "المنغولية",
"bg": "Монголски",
"ca": "mongol",
"cs": "Mongolština",
"da": "Mongolsk",
"de": "Mongolisch",
"el": "Μογγολικά",
"en": "Mongolian",
"es": "mongol",
"fi": "mongoli",
"fr": "mongol",
"ga": "Mongóilis",
"he": "מונגולית",
"hi": "मोंगोलियन",
"hr": "mongolski",
"hu": "mongol",
"id": "Mongolian",
"is": "Mongólska",
"it": "mongolo",
"ja": "モンゴル語",
"km": "ភាសាម៉ុងហ្គោលី",
"ko": "몽골어",
"mr": "मंगोलियन्",
"mt": "Mongoljan",
"nb": "mongolsk",
"nl": "Mongools",
"nn": "mongolsk",
"ps": "مغولي",
"pt": "mongol",
"ru": "монгольский",
"sr": "Монголски",
"sv": "mongoliska",
"ta": "மங்கோலியன்",
"th": "มองโกล",
"tr": "Moğol Dili",
"uk": "Монгольська",
"vi": "Tiếng Mông Cổ",
"zh": "蒙古文"
},
{
"type": "language",
"iso": "mr",
"name": "मराठी",
"countries": [
{
"_reference": "IN"
}
],
"am": "ማራዚኛ",
"ar": "الماراثى",
"ca": "marathi",
"cs": "Marathi",
"da": "Marathisk",
"de": "Marathi",
"en": "Marathi",
"es": "marathi",
"fi": "marathi",
"fr": "marathe",
"ga": "Maraitis",
"he": "מארתית",
"hi": "मराठी",
"hu": "marati",
"id": "Marathi",
"is": "Maratí",
"it": "marathi",
"ja": "マラーティー語",
"km": "ភាសាម៉ារាធី",
"ko": "마라티어",
"mr": "मराठी",
"mt": "Marati",
"nb": "marathi",
"nl": "Marathi",
"nn": "marathi",
"pt": "marata",
"ru": "маратхи",
"sv": "marathi",
"ta": "மராத்தி",
"th": "มาราที",
"tr": "Marathi",
"uk": "Маратхі",
"zh": "马拉地文"
},
{
"type": "language",
"iso": "ms",
"name": "Bahasa Melayu",
"countries": [
{
"_reference": "BN"
},
{
"_reference": "MY"
}
],
"am": "ማላይኛ",
"ar": "لغة الملايو",
"bg": "Малайски",
"ca": "malai",
"cs": "Malajština",
"da": "Malay",
"de": "Malaiisch",
"en": "Malay",
"es": "malayo",
"fi": "malaiji",
"fr": "malais",
"hi": "मलय",
"hu": "maláj",
"id": "Malay",
"is": "Malaíska",
"it": "malese",
"ja": "マレー語",
"km": "ភាសាម៉ាលេស៉ី",
"ko": "말레이어",
"mr": "मलय",
"ms": "Bahasa Melayu",
"mt": "Malajan",
"nb": "malayisk",
"nl": "Maleis",
"nn": "malayisk",
"ps": "ملایا",
"pt": "malaio",
"ru": "малайский",
"sv": "malajiska",
"ta": "மலாய்",
"th": "มลายู",
"tr": "Malay",
"uk": "Малайська",
"vi": "Tiếng Ma-lay-xi-a",
"zh": "马来文"
},
{
"type": "language",
"iso": "mt",
"name": "Malti",
"countries": [
{
"_reference": "MT"
}
],
"am": "ማልቲስኛ",
"ar": "المالطية",
"bg": "Малтийски",
"ca": "maltès",
"cs": "Maltština",
"da": "Maltesisk",
"de": "Maltesisch",
"el": "Μαλτεζικά",
"en": "Maltese",
"es": "maltés",
"fi": "malta",
"fr": "maltais",
"ga": "Maltais",
"he": "מלטזית",
"hi": "मालटिस्",
"hr": "malteški",
"hu": "máltai",
"id": "Maltese",
"is": "Maltneska",
"it": "maltese",
"ja": "マルタ語",
"km": "ភាសាម៉ាល់តា",
"ko": "몰타어",
"mr": "मालतीस्",
"mt": "Malti",
"nb": "maltesisk",
"nl": "Maltees",
"nn": "maltesisk",
"pl": "maltański",
"pt": "maltês",
"ru": "мальтийский",
"sv": "maltesiska",
"ta": "மால்டிஸ்",
"th": "มอลตา",
"tr": "Malta Dili",
"uk": "Мальтійська",
"zh": "马耳他文"
},
{
"type": "language",
"iso": "nb",
"name": "bokmål",
"countries": [
{
"_reference": "NO"
}
],
"ar": "البوكمالية النرويجية",
"da": "Norsk Bokmål",
"de": "Norwegisch Bokmål",
"en": "Norwegian Bokmål",
"es": "bokmal noruego",
"fi": "norja (bokmål)",
"fr": "bokmål norvégien",
"ga": "Ioruais Bokmål",
"he": "נורבגית שפת הספר (בוקמול)",
"id": "Norwegian Bokmål",
"is": "Norskt bókmál",
"ja": "ノルウェー語 (ブークモール)",
"ko": "보크말 노르웨이어",
"mt": "Bokmahal Norveġiż",
"nb": "bokmål",
"nl": "Noors - Bokmål",
"nn": "bokmål",
"pt": "bokmål norueguês",
"ru": "норвежский",
"sv": "norska (bokmål)",
"th": "นอร์เวย์บอกมอล",
"tr": "Norveç Kitap Dili",
"zh": "挪威博克马尔文"
},
{
"type": "language",
"iso": "nl",
"name": "Nederlands",
"countries": [
{
"_reference": "BE"
},
{
"_reference": "NL"
}
],
"am": "ደች",
"ar": "الهولندية",
"bg": "Холандски",
"ca": "neerlandès",
"da": "Hollandsk",
"de": "Niederländisch",
"el": "Ολλανδικά",
"en": "Dutch",
"et": "Hollandi",
"fi": "hollanti",
"fr": "néerlandais",
"ga": "Ollainnais",
"he": "הולנדית",
"hi": "डच्",
"hr": "nizozemski",
"hu": "holland",
"id": "Belanda",
"is": "Hollenska",
"it": "olandese",
"ja": "オランダ語",
"km": "ភាសាហុល្លង់",
"ko": "네덜란드어",
"lt": "Olandų",
"lv": "holandiešu",
"mr": "डच",
"mt": "Olandiż",
"nb": "nederlandsk",
"nl": "Nederlands",
"nn": "nederlandsk",
"pl": "niderlandzki",
"pt": "holandês",
"ro": "Olandeză",
"ru": "голландский",
"sk": "holandský",
"sl": "Nizozemščina",
"sr": "Холандски",
"ta": "டச்சு",
"th": "ฮอลันดา",
"tr": "Hollanda Dili",
"uk": "Голландська",
"vi": "Tiếng Hà Lan",
"zh": "荷兰文"
},
{
"type": "language",
"iso": "nn",
"name": "nynorsk",
"countries": [
{
"_reference": "NO"
}
],
"ar": "النينورسك النرويجي",
"da": "Nynorsk",
"de": "Norwegisch Nynorsk",
"en": "Norwegian Nynorsk",
"es": "nynorsk noruego",
"fi": "norja (nynorsk)",
"fr": "nynorsk norvégien",
"ga": "Ioruais Nynorsk",
"he": "נורבגית חדשה (נינורשק)",
"id": "Norwegian Nynorsk",
"is": "Nýnorska",
"it": "norvegese nynorsk",
"ja": "ノルウェー語 (ニーノシュク)",
"ko": "뉘노르스크 노르웨이어",
"mt": "Ninorsk Norveġiż",
"nb": "nynorsk",
"nl": "Noors - Nynorsk",
"nn": "nynorsk",
"pt": "nynorsk norueguês",
"ru": "новонорвежский",
"sv": "nynorska",
"th": "นอร์เวย์ไนนอรส์ก",
"tr": "Norveççe Nynorsk",
"zh": "挪威尼诺斯克文"
},
{
"type": "language",
"iso": "om",
"name": "Oromoo",
"countries": [
{
"_reference": "ET"
},
{
"_reference": "KE"
}
],
"am": "ኦሮምኛ",
"ar": "الأورومو",
"ca": "oromo (afan)",
"cs": "Oromo (Afan)",
"da": "Oromo",
"de": "Oromo",
"en": "Oromo",
"es": "oromo",
"fi": "oromo",
"fr": "galla",
"hi": "ओरोमो (अफ़ान)",
"hu": "oromói",
"id": "Oromo",
"is": "Órómó",
"it": "oromo",
"ja": "オロモ語",
"ko": "오로모어 (아판)",
"mr": "ओरोमो (अफान)",
"mt": "Oromo (Afan)",
"nb": "oromo",
"nl": "Oromo",
"nn": "oromo",
"om": "Oromoo",
"pt": "oromo",
"ru": "оромо",
"sv": "oromo",
"ta": "ஒரோம (அபன்)",
"th": "โอโรโม (อาฟาน)",
"tr": "Oromo (Afan)",
"uk": "Оромо",
"zh": "阿曼文"
},
{
"type": "language",
"iso": "or",
"name": "ଓଡ଼ିଆ",
"countries": [
{
"_reference": "IN"
}
],
"am": "ኦሪያኛ",
"ar": "الأورييا",
"ca": "oriya",
"cs": "Oriya",
"da": "Oriya",
"de": "Orija",
"en": "Oriya",
"es": "oriya",
"fi": "orija",
"fr": "oriya",
"hi": "उड़िया",
"hu": "orija",
"id": "Oriya",
"is": "Óría",
"it": "oriya",
"ja": "オリヤー語",
"km": "ភាសាអូរីយ៉ា",
"ko": "오리야어",
"mr": "ओरिया",
"mt": "Orija",
"nb": "oriya",
"nl": "Oriya",
"nn": "oriya",
"pt": "oriya",
"ru": "ория",
"sv": "oriya",
"ta": "ஒரியா",
"th": "โอริยา",
"tr": "Oriya",
"uk": "Орія",
"zh": "欧里亚文"
},
{
"type": "language",
"iso": "pa",
"name": "ਪੰਜਾਬੀ",
"countries": [
{
"_reference": "IN"
},
{
"_reference": "PK"
}
],
"am": "ፓንጃቢኛ",
"ar": "البنجابية",
"bg": "Пенджабски",
"ca": "panjabi",
"cs": "Paňdžábština",
"da": "Punjabi",
"de": "Pandschabisch",
"en": "Punjabi",
"es": "punjabí",
"fi": "pandžabi",
"fr": "pendjabi",
"ga": "Puinseaibis",
"hi": "पंजाबी",
"hu": "pandzsábi",
"id": "Punjabi",
"is": "Púnjabí",
"it": "punjabi",
"ja": "パンジャブ語",
"km": "ភាសាពូនយ៉ាប៊ី",
"ko": "펀잡어",
"mr": "पंजाबी",
"mt": "Punġabi",
"nb": "panjabi",
"nl": "Punjabi",
"nn": "panjabi",
"pa": "ਪੰਜਾਬੀ",
"pt": "panjabi",
"ru": "панджаби (пенджаби)",
"sv": "punjabi",
"ta": "பஞ்சாபி",
"th": "ปัญจาป",
"tr": "Pencap Dili",
"uk": "Панджабі",
"zh": "旁遮普文"
},
{
"type": "language",
"iso": "pl",
"name": "polski",
"countries": [
{
"_reference": "PL"
}
],
"am": "ፖሊሽ",
"ar": "البولندية",
"bg": "Полски",
"ca": "polonès",
"cs": "Polština",
"da": "Polsk",
"de": "Polnisch",
"el": "Πολωνικά",
"en": "Polish",
"es": "polaco",
"et": "Poola",
"fi": "puola",
"fr": "polonais",
"ga": "Polainnis",
"he": "פולנית",
"hi": "पॉलिश",
"hr": "poljski",
"hu": "lengyel",
"id": "Polish",
"is": "Pólska",
"it": "polacco",
"ja": "ポーランド語",
"km": "ភាសាប៉ូឡូញ",
"ko": "폴란드어",
"lt": "Lenkų",
"lv": "poļu",
"mr": "पोलिष",
"mt": "Pollakk",
"nb": "polsk",
"nl": "Pools",
"nn": "polsk",
"pl": "polski",
"ps": "پولنډي",
"pt": "polonês",
"ro": "Poloneză",
"ru": "польский",
"sk": "poľský",
"sl": "Poljščina",
"sr": "Пољски",
"sv": "polska",
"ta": "போலிஷ்",
"th": "โปแลนด์",
"tr": "Polonya Dili",
"uk": "Польська",
"vi": "Tiếng Ba Lan",
"zh": "波兰文"
},
{
"type": "language",
"iso": "ps",
"name": "پښتو",
"countries": [
{
"_reference": "AF"
}
],
"am": "ፑሽቶኛ",
"ar": "البشتونية",
"bg": "Пущу",
"ca": "paixto",
"cs": "Pashto (Pushto)",
"da": "Pashto (Pushto)",
"de": "Afghanisch (Paschtu)",
"es": "pashto",
"fi": "paštu",
"fr": "pachto",
"ga": "Paisteo",
"he": "פאשטו",
"hi": "पॉशतो (पुशतो)",
"hu": "pastu (afgán)",
"id": "Pashto (Pushto)",
"is": "Pastú",
"it": "pashto",
"ja": "パシュトゥー語",
"ko": "파시토어 (푸시토)",
"mr": "पष्टो (पुष्टो)",
"mt": "Paxtun",
"nb": "pashto",
"nl": "Pashto",
"nn": "pashto",
"ps": "پښتو",
"pt": "pashto (pushto)",
"ru": "пашто (пушту)",
"sv": "pashto; afghanska",
"ta": "பேஷ்டோ (புஷ்டோ)",
"th": "พาสช์โต (พุสช์โต)",
"tr": "Peştun Dili",
"uk": "Пашто",
"zh": "普什图文"
},
{
"type": "language",
"iso": "pt",
"name": "português",
"countries": [
{
"_reference": "BR"
},
{
"_reference": "PT"
}
],
"af": "Portugees",
"am": "ፖርቱጋሊኛ",
"ar": "البرتغالية",
"be": "партугальскі",
"bg": "Португалски",
"ca": "portuguès",
"cs": "Portugalština",
"cy": "Portiwgaleg",
"da": "Portugisisk",
"de": "Portugiesisch",
"el": "Πορτογαλικά",
"en": "Portuguese",
"es": "portugués",
"et": "Portugali",
"eu": "portugalera",
"fi": "portugali",
"fr": "portugais",
"ga": "Portaingéilis",
"he": "פורטוגזית",
"hi": "पुर्तुगी",
"hr": "portugalski",
"hu": "portugál",
"id": "Portugis",
"is": "Portúgalska",
"it": "portoghese",
"ja": "ポルトガル語",
"ka": "პორტუგალიური",
"km": "ភាសាព័រទុយហ្កាល់",
"ko": "포르투칼어",
"ky": "португалча",
"lt": "Portugalų",
"lv": "portugāļu",
"mk": "португалски",
"mn": "португали",
"mr": "पोर्चुगीस्",
"mt": "Portugiż",
"nb": "portugisisk",
"nl": "Portugees",
"nn": "portugisisk",
"pl": "portugalski",
"ps": "پورتګالي",
"pt": "português",
"ro": "Portugheză",
"ru": "португальский",
"sk": "portugalský",
"sl": "Portugalščina",
"sq": "Portugeze",
"sr": "Португалски",
"sv": "portugisiska",
"sw": "kireno",
"ta": "போர்த்துகீஸ்",
"te": "పొర్చుగల్ భాష",
"th": "โปรตุเกส",
"tr": "Portekizce",
"uk": "Португальська",
"vi": "Tiếng Bồ Đào Nha",
"zh": "葡萄牙文"
},
{
"type": "language",
"iso": "ro",
"name": "Română",
"countries": [
{
"_reference": "RO"
}
],
"am": "ሮማኒያን",
"ar": "الرومانية",
"bg": "Румънски",
"ca": "romanès",
"cs": "Rumunština",
"da": "Rumænsk",
"de": "Rumänisch",
"el": "Ρουμανικά",
"en": "Romanian",
"es": "rumano",
"et": "Rumeenia",
"fi": "romania",
"fr": "roumain",
"ga": "Romáinis",
"he": "רומנית",
"hi": "रूमानीयन्",
"hr": "rumunjski",
"hu": "román",
"id": "Romanian",
"is": "Rúmenska",
"it": "rumeno",
"ja": "ルーマニア語",
"km": "ភាសារូម៉ានី",
"ko": "루마니아어",
"lt": "Rumunų",
"lv": "rumāņu",
"mr": "रोमानियन्",
"mt": "Rumen",
"nb": "rumensk",
"nl": "Roemeens",
"nn": "rumensk",
"pl": "rumuński",
"pt": "romeno",
"ro": "Română",
"ru": "румынский",
"sk": "rumunský",
"sl": "Romunščina",
"sr": "Румунски",
"sv": "rumänska",
"ta": "ரோமேனியன்",
"th": "โรมัน",
"tr": "Romence",
"uk": "Румунська",
"vi": "Tiếng Ru-ma-ni",
"zh": "罗马尼亚文"
},
{
"type": "language",
"iso": "ru",
"name": "русский",
"countries": [
{
"_reference": "RU"
},
{
"_reference": "UA"
}
],
"af": "Russies",
"am": "ራሽኛ",
"ar": "الروسية",
"be": "рускі",
"bg": "Руски",
"ca": "rus",
"cs": "Ruština",
"cy": "Rwsieg",
"da": "Russisk",
"de": "Russisch",
"el": "Ρωσικά",
"en": "Russian",
"es": "ruso",
"et": "Vene",
"eu": "errusiera",
"fi": "venäjä",
"fr": "russe",
"ga": "Rúisis",
"he": "רוסית",
"hi": "रुसी",
"hr": "ruski",
"hu": "orosz",
"id": "Russian",
"is": "Rússneska",
"it": "russo",
"ja": "ロシア語",
"ka": "რუსული",
"km": "ភាសាรัរូស្ស៉ី",
"ko": "러시아어",
"ky": "орусча",
"lt": "Rusų",
"lv": "krievu",
"mk": "руски",
"mn": "орос",
"mr": "रष्यन्",
"mt": "Russu",
"nb": "russisk",
"nl": "Russisch",
"nn": "russisk",
"pl": "rosyjski",
"ps": "روسي",
"pt": "russo",
"ro": "Rusă",
"ru": "русский",
"sk": "ruský",
"sl": "Ruščina",
"sq": "Rusisht",
"sr": "Руски",
"sv": "ryska",
"sw": "kirusi",
"ta": "ரஷியன்",
"te": "రష్యన్ భాష",
"th": "รัสเซีย",
"tr": "Rusça",
"uk": "Російська",
"vi": "Tiếng Nga",
"zh": "俄文"
},
{
"type": "language",
"iso": "sa",
"name": "संस्कृत",
"countries": [
{
"_reference": "IN"
}
],
"am": "ሳንስክሪትኛ",
"ar": "السنسكريتية",
"bg": "Санкскритски",
"ca": "sànscrit",
"cs": "Sanskrt",
"da": "Sanskrit",
"de": "Sanskrit",
"en": "Sanskrit",
"es": "sánscrito",
"fi": "sanskrit",
"fr": "sanskrit",
"ga": "Sanscrait",
"he": "סנסקרית",
"hi": "संस्कृत",
"hu": "szanszkrit",
"id": "Sanskrit",
"is": "Sanskrít",
"it": "sanscrito",
"ja": "サンスクリット語",
"km": "ភាសាសំស្ក្រឹត",
"ko": "산스크리트어",
"mr": "संस्कृत",
"mt": "Sanskrit",
"nb": "sanskrit",
"nl": "Sanskrit",
"nn": "sanskrit",
"ps": "سنسکریټ",
"pt": "sânscrito",
"ru": "санскрит",
"sr": "Санскрит",
"sv": "sanskrit",
"ta": "சமஸ்கிருதம்",
"th": "สันสกฤต",
"tr": "Sanskritçe",
"uk": "Санскрит",
"vi": "Tiếng Phạn",
"zh": "梵文"
},
{
"type": "language",
"iso": "sk",
"name": "slovenský",
"countries": [
{
"_reference": "SK"
}
],
"am": "ስሎቫክኛ",
"ar": "السلوفاكية",
"bg": "Словашки",
"ca": "eslovac",
"cs": "Slovenština",
"da": "Slovakisk",
"de": "Slowakisch",
"el": "Σλοβακικά",
"en": "Slovak",
"es": "eslovaco",
"et": "Slovaki",
"fi": "slovakki",
"fr": "slovaque",
"ga": "Slóvacais",
"he": "סלובקית",
"hi": "स्लोवाक्",
"hr": "slovački",
"hu": "szlovák",
"id": "Slovak",
"is": "Slóvakíska",
"it": "slovacco",
"ja": "スロバキア語",
"km": "ភាសាស្លូវ៉ាគី",
"ko": "슬로바키아어",
"lt": "Slovakų",
"lv": "slovāku",
"mr": "स्लोवाक",
"mt": "Slovakk",
"nb": "slovakisk",
"nl": "Slowaaks",
"nn": "slovakisk",
"pl": "słowacki",
"pt": "eslovaco",
"ro": "Slovacă",
"ru": "словацкий",
"sk": "slovenský",
"sl": "Slovaščina",
"sr": "Словачки",
"sv": "slovakiska",
"ta": "ஸ்லோவெக்",
"th": "สโลวัค",
"tr": "Slovakça",
"uk": "Словацька",
"vi": "Tiếng Xlô-vác",
"zh": "斯洛伐克文"
},
{
"type": "language",
"iso": "sl",
"name": "Slovenščina",
"countries": [
{
"_reference": "SI"
}
],
"am": "ስሎቪኛ",
"ar": "السلوفانية",
"bg": "Словенски",
"ca": "eslovè",
"cs": "Slovinština",
"da": "Slovensk",
"de": "Slowenisch",
"el": "Σλοβενικά",
"en": "Slovenian",
"es": "esloveno",
"et": "Sloveeni",
"fi": "sloveeni",
"fr": "slovène",
"ga": "Slóvéinis",
"he": "סלובנית",
"hi": "स्लोवेनियन्",
"hr": "slovenski",
"hu": "szlovén",
"id": "Slovenian",
"is": "Slóvenska",
"it": "sloveno",
"ja": "スロベニア語",
"km": "ភាសាស្លូវ៉ានី",
"ko": "슬로베니아어",
"lt": "Slovėnų",
"lv": "slovēņu",
"mr": "स्लोवेनियन्",
"mt": "Sloven",
"nb": "slovensk",
"nl": "Sloveens",
"nn": "slovensk",
"pl": "słoweński",
"pt": "eslovênio",
"ro": "Slovenă",
"ru": "словенский",
"sk": "slovinský",
"sl": "Slovenščina",
"sr": "Словеначки",
"sv": "slovenska",
"ta": "ஸ்லோவினேயின்",
"th": "สโลเวเนีย",
"tr": "Slovence",
"uk": "Словенська",
"vi": "Tiếng Xlô-ven",
"zh": "斯洛文尼亚文"
},
{
"type": "language",
"iso": "so",
"name": "Soomaali",
"countries": [
{
"_reference": "DJ"
},
{
"_reference": "ET"
},
{
"_reference": "KE"
},
{
"_reference": "SO"
}
],
"am": "ሱማልኛ",
"ar": "الصومالية",
"bg": "Сомалийски",
"ca": "somali",
"cs": "Somálština",
"da": "Somalisk",
"de": "Somali",
"en": "Somali",
"es": "somalí",
"fi": "somali",
"fr": "somali",
"ga": "Somálais",
"he": "סומלית",
"hi": "सोमाली",
"hu": "szomáli",
"id": "Somali",
"is": "Sómalska",
"it": "somalo",
"ja": "ソマリ語",
"km": "ភាសាសូម៉ាលី",
"ko": "소말리아어",
"mr": "सोमाली",
"mt": "Somali",
"nl": "Somalisch",
"nn": "somali",
"pt": "somali",
"ru": "сомали",
"so": "Soomaali",
"sv": "somaliska",
"ta": "சோமாலி",
"th": "โซมาลี",
"tr": "Somali Dili",
"uk": "Сомалі",
"vi": "Tiếng Xô-ma-li",
"zh": "索马里文"
},
{
"type": "language",
"iso": "sq",
"name": "shqipe",
"countries": [
{
"_reference": "AL"
}
],
"am": "ልቤኒኛ",
"ar": "الألبانية",
"bg": "Албански",
"ca": "albanès",
"cs": "Albánština",
"da": "albansk",
"de": "Albanisch",
"el": "Αλβανικά",
"en": "Albanian",
"es": "albanés",
"fi": "albania",
"fr": "albanais",
"ga": "Albáinis",
"he": "אלבנית",
"hi": "अल्बेनियन्",
"hr": "albanski",
"hu": "albán",
"id": "Albanian",
"is": "Albanska",
"it": "albanese",
"ja": "アルバニア語",
"km": "ភាសាអាល់បានី",
"ko": "알바니아어",
"mr": "आल्बेनियन्",
"mt": "Albaniż",
"nb": "albansk",
"nl": "Albanees",
"nn": "albansk",
"pt": "albanês",
"ru": "албанский",
"sq": "shqipe",
"sr": "Албански",
"sv": "albanska",
"ta": "அல்பெனியன்",
"th": "แอลเบเนีย",
"tr": "Arnavutça",
"uk": "Албанська",
"vi": "Tiếng An-ba-ni",
"zh": "阿尔巴尼亚文"
},
{
"type": "language",
"iso": "sr",
"name": "Српски",
"countries": [
{
"_reference": "BA"
},
{
"_reference": "CS"
},
{
"_reference": "YU"
}
],
"am": "ሰርቢኛ",
"ar": "الصربية",
"bg": "Сръбски",
"ca": "serbi",
"cs": "Srbština",
"da": "Serbisk",
"de": "Serbisch",
"el": "Σερβικά",
"en": "Serbian",
"es": "serbio",
"fi": "serbia",
"fr": "serbe",
"ga": "Seirbis",
"he": "סרבית",
"hi": "सर्बियन्",
"hr": "srpski",
"hu": "szerb",
"id": "Serbian",
"is": "Serbneska",
"it": "serbo",
"ja": "セルビア語",
"ko": "세르비아어",
"mr": "सेर्बियन्",
"mt": "Serb",
"nb": "serbisk",
"nl": "Servisch",
"nn": "serbisk",
"pt": "sérvio",
"ru": "сербский",
"sr": "Српски",
"sv": "serbiska",
"ta": "சர்பியன்",
"th": "เซอร์เบีย",
"tr": "Sırpça",
"uk": "Сербська",
"vi": "Tiếng Séc-bi",
"zh": "塞尔维亚文"
},
{
"type": "language",
"iso": "sv",
"name": "svenska",
"countries": [
{
"_reference": "FI"
},
{
"_reference": "SE"
}
],
"am": "ስዊድንኛ",
"ar": "السويدية",
"bg": "Шведски",
"ca": "suec",
"cs": "Švédština",
"da": "Svensk",
"de": "Schwedisch",
"el": "Σουηδικά",
"en": "Swedish",
"es": "sueco",
"et": "Rootsi",
"fi": "ruotsi",
"fr": "suédois",
"ga": "Sualainnis",
"he": "שוודית",
"hi": "स्विडिश",
"hr": "švedski",
"hu": "svéd",
"id": "Swedia",
"is": "Sænska",
"it": "svedese",
"ja": "スウェーデン語",
"km": "ភាសាស៊ុយអែដ",
"ko": "스웨덴어",
"lt": "Švedų",
"lv": "zviedru",
"mr": "स्वीडिष",
"mt": "Svediż",
"nb": "svensk",
"nl": "Zweeds",
"nn": "svensk",
"pl": "szwedzki",
"ps": "سویډنی",
"pt": "sueco",
"ro": "Suedeză",
"ru": "шведский",
"sk": "švédsky",
"sl": "Švedščina",
"sr": "Шведски",
"sv": "svenska",
"ta": "ஷீவிடிஸ்",
"th": "สวีเดน",
"tr": "İsveççe",
"uk": "Шведська",
"vi": "Tiếng Thụy Điển",
"zh": "瑞典文"
},
{
"type": "language",
"iso": "sw",
"name": "Kiswahili",
"countries": [
{
"_reference": "KE"
},
{
"_reference": "TZ"
}
],
"am": "ስዋሂሊኛ",
"ar": "السواحلية",
"bg": "Суахили",
"ca": "swahili",
"cs": "Svahilština",
"da": "Swahili",
"de": "Suaheli",
"en": "Swahili",
"es": "swahili",
"fi": "swahili",
"fr": "swahili",
"ga": "Svahaílis",
"he": "סווהילית",
"hi": "स्वाहिली",
"hu": "szuahéli",
"id": "Swahili",
"is": "Svahílí",
"it": "swahili",
"ja": "スワヒリ語",
"km": "ភាសាស្វាហ៉ីលី",
"ko": "스와힐리어",
"mr": "स्वाहिली",
"mt": "Swaħili",
"nb": "swahili",
"nl": "Swahili",
"nn": "swahili",
"pt": "suaíli",
"ru": "суахили",
"sr": "Свахили",
"sv": "swahili",
"sw": "Kiswahili",
"ta": "சுவாஹிலி",
"th": "ซวาฮิรี",
"tr": "Swahili",
"uk": "Суахілі",
"zh": "斯瓦希里文"
},
{
"type": "language",
"iso": "ta",
"name": "தமிழ்",
"countries": [
{
"_reference": "IN"
}
],
"am": "ታሚልኛ",
"ar": "التاميلية",
"bg": "Тамилски",
"ca": "tàmil",
"cs": "Tamilština",
"da": "Tamilsk",
"de": "Tamilisch",
"en": "Tamil",
"es": "tamil",
"fi": "tamil",
"fr": "tamoul",
"ga": "Tamailis",
"he": "טמילית",
"hi": "तमिल",
"hu": "tamil",
"id": "Tamil",
"is": "Tamílska",
"it": "tamil",
"ja": "タミール語",
"km": "ភាសាតាមីល",
"ko": "타밀어",
"mr": "तमिळ",
"mt": "Tamil",
"nb": "tamil",
"nl": "Tamil",
"nn": "tamil",
"pt": "tâmil",
"ru": "тамильский",
"sv": "tamil",
"ta": "தமிழ்",
"th": "ทมิฬ",
"tr": "Tamil",
"uk": "Тамільська",
"zh": "泰米尔文"
},
{
"type": "language",
"iso": "te",
"name": "తెలుగు",
"countries": [
{
"_reference": "IN"
}
],
"am": "ተሉጉኛ",
"ar": "التيلجو",
"bg": "Телугу",
"ca": "telugu",
"cs": "Telugština",
"da": "Telugu",
"de": "Telugu",
"en": "Telugu",
"es": "telugu",
"fi": "telugu",
"fr": "télougou",
"hi": "तेलेगु",
"hu": "telugu",
"id": "Telugu",
"is": "Telúgú",
"it": "telugu",
"ja": "テルグ語",
"km": "ភាសាតេលូហ្គូ",
"ko": "텔루구어",
"mr": "तेलंगू",
"mt": "Telugu",
"nb": "telugu",
"nl": "Teloegoe",
"nn": "telugu",
"pt": "telugu",
"ru": "телугу",
"sv": "telugiska",
"ta": "தெலுங்கு",
"te": "తెలుగు",
"th": "ทิลูกู",
"tr": "Telugu",
"uk": "Телугу",
"zh": "泰卢固文"
},
{
"type": "language",
"iso": "th",
"name": "ไทย",
"countries": [
{
"_reference": "TH"
}
],
"am": "ታይኛ",
"ar": "التايلاندية",
"bg": "Таи",
"ca": "thai",
"cs": "Thajština",
"da": "Thailandsk",
"de": "Thai",
"el": "Ταϊλανδικά",
"en": "Thai",
"es": "tailandés",
"fi": "thai",
"fr": "thaï",
"ga": "Téalainnis",
"he": "תאי",
"hi": "थाई",
"hu": "thai",
"id": "Thai",
"is": "Taílenska",
"it": "thai",
"ja": "タイ語",
"km": "ភាសាថៃ",
"ko": "태국어",
"lt": "Tajų",
"mr": "थाई",
"mt": "Tajlandiż",
"nb": "thai",
"nl": "Thai",
"nn": "thai",
"pl": "tajski",
"pt": "tailandês",
"ru": "тайский",
"sv": "thailändska",
"ta": "தாய்",
"th": "ไทย",
"tr": "Tay Dili",
"uk": "Тайська",
"vi": "Tiếng Thái",
"zh": "泰文"
},
{
"type": "language",
"iso": "tr",
"name": "Türkçe",
"countries": [
{
"_reference": "TR"
}
],
"am": "ቱርክኛ",
"ar": "التركية",
"bg": "Турски",
"ca": "turc",
"cs": "Turečtina",
"da": "Tyrkisk",
"de": "Türkisch",
"el": "Τουρκικά",
"en": "Turkish",
"es": "turco",
"et": "Türgi",
"fa": "ترکی استانبولی",
"fi": "turkki",
"fr": "turc",
"ga": "Tuircis",
"he": "טורקית",
"hi": "तुक्रीश",
"hr": "turski",
"hu": "török",
"id": "Turkish",
"is": "Tyrkneska",
"it": "turco",
"ja": "トルコ語",
"km": "ភាសាទួរគី",
"ko": "터키어",
"lt": "Turkų",
"lv": "turku",
"mr": "तुर्किष",
"mt": "Tork",
"nb": "tyrkisk",
"nl": "Turks",
"nn": "tyrkisk",
"pl": "turecki",
"pt": "turco",
"ro": "Turcă",
"ru": "турецкий",
"sk": "turecký",
"sl": "Turščina",
"sr": "Турски",
"sv": "turkiska",
"ta": "டர்கிஷ்",
"th": "ตุรกี",
"tr": "Türkçe",
"uk": "Турецька",
"vi": "Tiếng Thổ Nhĩ Kỳ",
"zh": "土耳其文"
},
{
"type": "language",
"iso": "tt",
"name": "Татар",
"countries": [
{
"_reference": "RU"
}
],
"am": "ታታርኛ",
"ar": "التتارية",
"bg": "Татарски",
"ca": "tàtar",
"cs": "Tatarština",
"da": "Tatarisk",
"de": "Tatarisch",
"en": "Tatar",
"fi": "tataari",
"fr": "tatar",
"ga": "Tatarais",
"hi": "टाटर",
"hu": "tatár",
"id": "Tatar",
"is": "Tatarska",
"it": "tatarico",
"ja": "タタール語",
"km": "ភាសាតាតារ",
"ko": "타타르어",
"mr": "टटार",
"mt": "Tatar",
"nb": "tatarisk",
"nl": "Tataars",
"nn": "tatarisk",
"ps": "تاتار",
"pt": "tatar",
"ru": "татарский",
"sv": "tatariska",
"ta": "டாடர்",
"th": "ตาด",
"tr": "Tatarca",
"uk": "Татарська",
"zh": "鞑靼文"
},
{
"type": "language",
"iso": "uk",
"name": "Українська",
"countries": [
{
"_reference": "UA"
}
],
"am": "ዩክረኒኛ",
"ar": "الأوكرانية",
"bg": "Украински",
"ca": "ucraïnès",
"cs": "Ukrajinština",
"da": "Ukrainsk",
"de": "Ukrainisch",
"el": "Ουκρανικά",
"en": "Ukrainian",
"es": "ucraniano",
"fi": "ukraina",
"fr": "ukrainien",
"ga": "Úcráinis",
"he": "אוקראינית",
"hi": "यूक्रेनियन्",
"hr": "ukrajinski",
"hu": "ukrán",
"id": "Ukrainian",
"is": "Úkraínska",
"it": "ucraino",
"ja": "ウクライナ語",
"km": "ភាសាអ៊ុយក្រែន",
"ko": "우크라이나어",
"mr": "युक्रेनियन्",
"mt": "Ukranjan",
"nb": "ukrainsk",
"nl": "Oekraïens",
"nn": "ukrainsk",
"pt": "ucraniano",
"ru": "украинский",
"sr": "Украјински",
"sv": "ukrainska",
"ta": "உக்ரேனியன்",
"th": "ยูเครน",
"tr": "Ukraynaca",
"uk": "Українська",
"vi": "Tiếng U-crai-na",
"zh": "乌克兰文"
},
{
"type": "language",
"iso": "ur",
"name": "اردو",
"countries": [
{
"_reference": "IN"
},
{
"_reference": "PK"
}
],
"am": "ኡርዱኛ",
"ar": "الأردية",
"bg": "Урду",
"ca": "urdú",
"cs": "Urdština",
"da": "Urdu",
"de": "Urdu",
"en": "Urdu",
"es": "urdu",
"fi": "urdu",
"fr": "ourdou",
"ga": "Urdais",
"he": "אורדו",
"hi": "ऊर्दु",
"hu": "urdu",
"id": "Urdu",
"is": "Úrdú",
"it": "urdu",
"ja": "ウルドゥー語",
"km": "ភាសាអ៊ូរ្ឌូ",
"ko": "우르두어",
"mr": "उर्दू",
"mt": "Urdu",
"nb": "urdu",
"nl": "Urdu",
"nn": "urdu",
"pt": "urdu",
"ru": "урду",
"sv": "urdu",
"ta": "உருது",
"th": "อิรดู",
"tr": "Urduca",
"uk": "Урду",
"ur": "اردو",
"zh": "乌尔都文"
},
{
"type": "language",
"iso": "uz",
"name": "Ўзбек",
"countries": [
{
"_reference": "AF"
},
{
"_reference": "UZ"
}
],
"am": "ኡዝበክኛ",
"ar": "الاوزباكية",
"bg": "Узбекски",
"ca": "uzbek",
"cs": "Uzbečtina",
"da": "Usbekisk",
"de": "Usbekisch",
"en": "Uzbek",
"es": "uzbeko",
"fi": "uzbekki",
"fr": "ouzbek",
"ga": "Úisbéicis",
"he": "אוזבקית",
"hi": "उज़बेक्",
"hu": "üzbég",
"id": "Uzbek",
"is": "Úsbekska",
"it": "usbeco",
"ja": "ウズベク語",
"km": "ភាសាអ៊ូហ្សបេគីស្តង់",
"ko": "우즈베크어",
"mr": "उज़बेक",
"mt": "Użbek",
"nb": "usbekisk",
"nl": "Oezbeeks",
"nn": "usbekisk",
"ps": "ازبکي",
"pt": "usbeque",
"ru": "узбекский",
"sv": "uzbekiska",
"ta": "உஸ்பெக்",
"th": "อุสเบค",
"tr": "Özbekçe",
"uk": "Узбецька",
"vi": "Tiếng U-dơ-bếch",
"zh": "乌兹别克文"
},
{
"type": "language",
"iso": "vi",
"name": "Tiếng Việt",
"countries": [
{
"_reference": "VN"
}
],
"am": "ቪትናምኛ",
"ar": "الفيتنامية",
"bg": "Виетнамски",
"ca": "vietnamita",
"cs": "Vietnamština",
"da": "Vietnamesisk",
"de": "Vietnamesisch",
"el": "Βιετναμεζικά",
"en": "Vietnamese",
"es": "vietnamita",
"fi": "vietnam",
"fr": "vietnamien",
"ga": "Vítneamais",
"he": "ויאטנמית",
"hi": "वियेतनामी",
"hr": "vijetnamski",
"hu": "vietnámi",
"id": "Vietnamese",
"is": "Víetnamska",
"it": "vietnamita",
"ja": "ベトナム語",
"km": "ភាសាវៀតណាម",
"ko": "베트남어",
"mr": "वियत्नामीज़",
"mt": "Vjetnamiż",
"nb": "vietnamesisk",
"nl": "Vietnamees",
"nn": "vietnamesisk",
"pt": "vietnamita",
"ru": "вьетнамский",
"sr": "Вијетнамски",
"sv": "vietnamesiska",
"ta": "வியட்நாமிஸ்",
"th": "เวียดนาม",
"tr": "Vietnam Dili",
"uk": "Вʼєтнамська",
"vi": "Tiếng Việt",
"zh": "越南文"
},
{
"type": "language",
"iso": "zh",
"name": "中文",
"countries": [
{
"_reference": "CN"
},
{
"_reference": "HK"
},
{
"_reference": "MO"
},
{
"_reference": "SG"
},
{
"_reference": "TW"
}
],
"af": "Sjinees",
"am": "ቻይንኛ",
"ar": "الصينية",
"be": "кітайскі",
"bg": "Китайски",
"ca": "xinés",
"cs": "Čínština",
"cy": "Tseineeg",
"da": "Kinesisk",
"de": "Chinesisch",
"el": "Κινεζικά",
"en": "Chinese",
"es": "chino",
"et": "Hiina",
"eu": "txinera",
"fi": "kiina",
"fr": "chinois",
"ga": "Sínis",
"he": "סינית",
"hi": "चीनी",
"hr": "kineski",
"hu": "kínai",
"id": "Cina",
"is": "Kínverska",
"it": "cinese",
"ja": "中国語",
"ka": "ჩინური",
"km": "ភាសាចិន",
"ko": "중국어",
"ky": "кытайча",
"lt": "Kinų",
"lv": "ķīniešu",
"mk": "кинески",
"mn": "хятад",
"mr": "चिनीस्",
"mt": "Ċiniż",
"nb": "kinesisk",
"nl": "Chinees",
"nn": "kinesisk",
"pl": "chiński",
"ps": "چیني",
"pt": "chinês",
"ro": "Chineză",
"ru": "китайский",
"sk": "čínsky",
"sl": "Kitajščina",
"sq": "Kineze",
"sr": "Кинески",
"sv": "kinesiska",
"sw": "kichina",
"ta": "சீனம்",
"te": "చైనా భాష",
"th": "จีน",
"tr": "Çince",
"uk": "Китайська",
"vi": "Tiếng Trung Quốc",
"zh": "中文"
},
{
"type": "languageCountryMap",
"language": "aa",
"country": "DJ",
"iso": "aa_DJ"
},
{
"type": "languageCountryMap",
"language": "aa",
"country": "ER",
"iso": "aa_ER"
},
{
"type": "languageCountryMap",
"language": "aa",
"country": "ET",
"iso": "aa_ET"
},
{
"type": "languageCountryMap",
"language": "af",
"country": "NA",
"iso": "af_NA"
},
{
"type": "languageCountryMap",
"language": "af",
"country": "ZA",
"iso": "af_ZA"
},
{
"type": "languageCountryMap",
"language": "ak",
"country": "GH",
"iso": "ak_GH"
},
{
"type": "languageCountryMap",
"language": "am",
"country": "ET",
"iso": "am_ET"
},
{
"type": "languageCountryMap",
"language": "ar",
"country": "AE",
"iso": "ar_AE"
},
{
"type": "languageCountryMap",
"language": "ar",
"country": "BH",
"iso": "ar_BH"
},
{
"type": "languageCountryMap",
"language": "ar",
"country": "DZ",
"iso": "ar_DZ"
},
{
"type": "languageCountryMap",
"language": "ar",
"country": "EG",
"iso": "ar_EG"
},
{
"type": "languageCountryMap",
"language": "ar",
"country": "IQ",
"iso": "ar_IQ"
},
{
"type": "languageCountryMap",
"language": "ar",
"country": "JO",
"iso": "ar_JO"
},
{
"type": "languageCountryMap",
"language": "ar",
"country": "KW",
"iso": "ar_KW"
},
{
"type": "languageCountryMap",
"language": "ar",
"country": "LB",
"iso": "ar_LB"
},
{
"type": "languageCountryMap",
"language": "ar",
"country": "LY",
"iso": "ar_LY"
},
{
"type": "languageCountryMap",
"language": "ar",
"country": "MA",
"iso": "ar_MA"
},
{
"type": "languageCountryMap",
"language": "ar",
"country": "OM",
"iso": "ar_OM"
},
{
"type": "languageCountryMap",
"language": "ar",
"country": "QA",
"iso": "ar_QA"
},
{
"type": "languageCountryMap",
"language": "ar",
"country": "SA",
"iso": "ar_SA"
},
{
"type": "languageCountryMap",
"language": "ar",
"country": "SD",
"iso": "ar_SD"
},
{
"type": "languageCountryMap",
"language": "ar",
"country": "SY",
"iso": "ar_SY"
},
{
"type": "languageCountryMap",
"language": "ar",
"country": "TN",
"iso": "ar_TN"
},
{
"type": "languageCountryMap",
"language": "ar",
"country": "YE",
"iso": "ar_YE"
},
{
"type": "languageCountryMap",
"language": "as",
"country": "IN",
"iso": "as_IN"
},
{
"type": "languageCountryMap",
"language": "az",
"country": "AZ",
"iso": "az_AZ"
},
{
"type": "languageCountryMap",
"language": "be",
"country": "BY",
"iso": "be_BY"
},
{
"type": "languageCountryMap",
"language": "bg",
"country": "BG",
"iso": "bg_BG"
},
{
"type": "languageCountryMap",
"language": "bn",
"country": "BD",
"iso": "bn_BD"
},
{
"type": "languageCountryMap",
"language": "bn",
"country": "IN",
"iso": "bn_IN"
},
{
"type": "languageCountryMap",
"language": "bs",
"country": "BA",
"iso": "bs_BA"
},
{
"type": "languageCountryMap",
"language": "ca",
"country": "ES",
"iso": "ca_ES"
},
{
"type": "languageCountryMap",
"language": "cs",
"country": "CZ",
"iso": "cs_CZ"
},
{
"type": "languageCountryMap",
"language": "cy",
"country": "GB",
"iso": "cy_GB"
},
{
"type": "languageCountryMap",
"language": "da",
"country": "DK",
"iso": "da_DK"
},
{
"type": "languageCountryMap",
"language": "de",
"country": "AT",
"iso": "de_AT"
},
{
"type": "languageCountryMap",
"language": "de",
"country": "BE",
"iso": "de_BE"
},
{
"type": "languageCountryMap",
"language": "de",
"country": "CH",
"iso": "de_CH"
},
{
"type": "languageCountryMap",
"language": "de",
"country": "DE",
"iso": "de_DE"
},
{
"type": "languageCountryMap",
"language": "de",
"country": "LI",
"iso": "de_LI"
},
{
"type": "languageCountryMap",
"language": "de",
"country": "LU",
"iso": "de_LU"
},
{
"type": "languageCountryMap",
"language": "dv",
"country": "MV",
"iso": "dv_MV"
},
{
"type": "languageCountryMap",
"language": "dz",
"country": "BT",
"iso": "dz_BT"
},
{
"type": "languageCountryMap",
"language": "ee",
"country": "GH",
"iso": "ee_GH"
},
{
"type": "languageCountryMap",
"language": "ee",
"country": "TG",
"iso": "ee_TG"
},
{
"type": "languageCountryMap",
"language": "el",
"country": "CY",
"iso": "el_CY"
},
{
"type": "languageCountryMap",
"language": "el",
"country": "GR",
"iso": "el_GR"
},
{
"type": "languageCountryMap",
"language": "en",
"country": "AS",
"iso": "en_AS"
},
{
"type": "languageCountryMap",
"language": "en",
"country": "AU",
"iso": "en_AU"
},
{
"type": "languageCountryMap",
"language": "en",
"country": "BE",
"iso": "en_BE"
},
{
"type": "languageCountryMap",
"language": "en",
"country": "BW",
"iso": "en_BW"
},
{
"type": "languageCountryMap",
"language": "en",
"country": "BZ",
"iso": "en_BZ"
},
{
"type": "languageCountryMap",
"language": "en",
"country": "CA",
"iso": "en_CA"
},
{
"type": "languageCountryMap",
"language": "en",
"country": "GB",
"iso": "en_GB"
},
{
"type": "languageCountryMap",
"language": "en",
"country": "GU",
"iso": "en_GU"
},
{
"type": "languageCountryMap",
"language": "en",
"country": "HK",
"iso": "en_HK"
},
{
"type": "languageCountryMap",
"language": "en",
"country": "IE",
"iso": "en_IE"
},
{
"type": "languageCountryMap",
"language": "en",
"country": "IN",
"iso": "en_IN"
},
{
"type": "languageCountryMap",
"language": "en",
"country": "JM",
"iso": "en_JM"
},
{
"type": "languageCountryMap",
"language": "en",
"country": "MH",
"iso": "en_MH"
},
{
"type": "languageCountryMap",
"language": "en",
"country": "MP",
"iso": "en_MP"
},
{
"type": "languageCountryMap",
"language": "en",
"country": "MT",
"iso": "en_MT"
},
{
"type": "languageCountryMap",
"language": "en",
"country": "NA",
"iso": "en_NA"
},
{
"type": "languageCountryMap",
"language": "en",
"country": "NZ",
"iso": "en_NZ"
},
{
"type": "languageCountryMap",
"language": "en",
"country": "PH",
"iso": "en_PH"
},
{
"type": "languageCountryMap",
"language": "en",
"country": "PK",
"iso": "en_PK"
},
{
"type": "languageCountryMap",
"language": "en",
"country": "SG",
"iso": "en_SG"
},
{
"type": "languageCountryMap",
"language": "en",
"country": "TT",
"iso": "en_TT"
},
{
"type": "languageCountryMap",
"language": "en",
"country": "UM",
"iso": "en_UM"
},
{
"type": "languageCountryMap",
"language": "en",
"country": "US",
"iso": "en_US"
},
{
"type": "languageCountryMap",
"language": "en",
"country": "VI",
"iso": "en_VI"
},
{
"type": "languageCountryMap",
"language": "en",
"country": "ZA",
"iso": "en_ZA"
},
{
"type": "languageCountryMap",
"language": "en",
"country": "ZW",
"iso": "en_ZW"
},
{
"type": "languageCountryMap",
"language": "es",
"country": "AR",
"iso": "es_AR"
},
{
"type": "languageCountryMap",
"language": "es",
"country": "BO",
"iso": "es_BO"
},
{
"type": "languageCountryMap",
"language": "es",
"country": "CL",
"iso": "es_CL"
},
{
"type": "languageCountryMap",
"language": "es",
"country": "CO",
"iso": "es_CO"
},
{
"type": "languageCountryMap",
"language": "es",
"country": "CR",
"iso": "es_CR"
},
{
"type": "languageCountryMap",
"language": "es",
"country": "DO",
"iso": "es_DO"
},
{
"type": "languageCountryMap",
"language": "es",
"country": "EC",
"iso": "es_EC"
},
{
"type": "languageCountryMap",
"language": "es",
"country": "ES",
"iso": "es_ES"
},
{
"type": "languageCountryMap",
"language": "es",
"country": "GT",
"iso": "es_GT"
},
{
"type": "languageCountryMap",
"language": "es",
"country": "HN",
"iso": "es_HN"
},
{
"type": "languageCountryMap",
"language": "es",
"country": "MX",
"iso": "es_MX"
},
{
"type": "languageCountryMap",
"language": "es",
"country": "NI",
"iso": "es_NI"
},
{
"type": "languageCountryMap",
"language": "es",
"country": "PA",
"iso": "es_PA"
},
{
"type": "languageCountryMap",
"language": "es",
"country": "PE",
"iso": "es_PE"
},
{
"type": "languageCountryMap",
"language": "es",
"country": "PR",
"iso": "es_PR"
},
{
"type": "languageCountryMap",
"language": "es",
"country": "PY",
"iso": "es_PY"
},
{
"type": "languageCountryMap",
"language": "es",
"country": "SV",
"iso": "es_SV"
},
{
"type": "languageCountryMap",
"language": "es",
"country": "US",
"iso": "es_US"
},
{
"type": "languageCountryMap",
"language": "es",
"country": "UY",
"iso": "es_UY"
},
{
"type": "languageCountryMap",
"language": "es",
"country": "VE",
"iso": "es_VE"
},
{
"type": "languageCountryMap",
"language": "et",
"country": "EE",
"iso": "et_EE"
},
{
"type": "languageCountryMap",
"language": "eu",
"country": "ES",
"iso": "eu_ES"
},
{
"type": "languageCountryMap",
"language": "fa",
"country": "AF",
"iso": "fa_AF"
},
{
"type": "languageCountryMap",
"language": "fa",
"country": "IR",
"iso": "fa_IR"
},
{
"type": "languageCountryMap",
"language": "fi",
"country": "FI",
"iso": "fi_FI"
},
{
"type": "languageCountryMap",
"language": "fo",
"country": "FO",
"iso": "fo_FO"
},
{
"type": "languageCountryMap",
"language": "fr",
"country": "BE",
"iso": "fr_BE"
},
{
"type": "languageCountryMap",
"language": "fr",
"country": "CA",
"iso": "fr_CA"
},
{
"type": "languageCountryMap",
"language": "fr",
"country": "CH",
"iso": "fr_CH"
},
{
"type": "languageCountryMap",
"language": "fr",
"country": "FR",
"iso": "fr_FR"
},
{
"type": "languageCountryMap",
"language": "fr",
"country": "LU",
"iso": "fr_LU"
},
{
"type": "languageCountryMap",
"language": "fr",
"country": "MC",
"iso": "fr_MC"
},
{
"type": "languageCountryMap",
"language": "ga",
"country": "IE",
"iso": "ga_IE"
},
{
"type": "languageCountryMap",
"language": "gl",
"country": "ES",
"iso": "gl_ES"
},
{
"type": "languageCountryMap",
"language": "gu",
"country": "IN",
"iso": "gu_IN"
},
{
"type": "languageCountryMap",
"language": "gv",
"country": "GB",
"iso": "gv_GB"
},
{
"type": "languageCountryMap",
"language": "ha",
"country": "GH",
"iso": "ha_GH"
},
{
"type": "languageCountryMap",
"language": "ha",
"country": "NE",
"iso": "ha_NE"
},
{
"type": "languageCountryMap",
"language": "ha",
"country": "NG",
"iso": "ha_NG"
},
{
"type": "languageCountryMap",
"language": "he",
"country": "IL",
"iso": "he_IL"
},
{
"type": "languageCountryMap",
"language": "hi",
"country": "IN",
"iso": "hi_IN"
},
{
"type": "languageCountryMap",
"language": "hr",
"country": "HR",
"iso": "hr_HR"
},
{
"type": "languageCountryMap",
"language": "hu",
"country": "HU",
"iso": "hu_HU"
},
{
"type": "languageCountryMap",
"language": "hy",
"country": "AM",
"iso": "hy_AM"
},
{
"type": "languageCountryMap",
"language": "id",
"country": "ID",
"iso": "id_ID"
},
{
"type": "languageCountryMap",
"language": "ig",
"country": "NG",
"iso": "ig_NG"
},
{
"type": "languageCountryMap",
"language": "is",
"country": "IS",
"iso": "is_IS"
},
{
"type": "languageCountryMap",
"language": "it",
"country": "CH",
"iso": "it_CH"
},
{
"type": "languageCountryMap",
"language": "it",
"country": "IT",
"iso": "it_IT"
},
{
"type": "languageCountryMap",
"language": "ja",
"country": "JP",
"iso": "ja_JP"
},
{
"type": "languageCountryMap",
"language": "ka",
"country": "GE",
"iso": "ka_GE"
},
{
"type": "languageCountryMap",
"language": "kk",
"country": "KZ",
"iso": "kk_KZ"
},
{
"type": "languageCountryMap",
"language": "kl",
"country": "GL",
"iso": "kl_GL"
},
{
"type": "languageCountryMap",
"language": "km",
"country": "KH",
"iso": "km_KH"
},
{
"type": "languageCountryMap",
"language": "kn",
"country": "IN",
"iso": "kn_IN"
},
{
"type": "languageCountryMap",
"language": "ko",
"country": "KR",
"iso": "ko_KR"
},
{
"type": "languageCountryMap",
"language": "ku",
"country": "IQ",
"iso": "ku_IQ"
},
{
"type": "languageCountryMap",
"language": "ku",
"country": "IR",
"iso": "ku_IR"
},
{
"type": "languageCountryMap",
"language": "ku",
"country": "SY",
"iso": "ku_SY"
},
{
"type": "languageCountryMap",
"language": "ku",
"country": "TR",
"iso": "ku_TR"
},
{
"type": "languageCountryMap",
"language": "kw",
"country": "GB",
"iso": "kw_GB"
},
{
"type": "languageCountryMap",
"language": "ky",
"country": "KG",
"iso": "ky_KG"
},
{
"type": "languageCountryMap",
"language": "ln",
"country": "CD",
"iso": "ln_CD"
},
{
"type": "languageCountryMap",
"language": "ln",
"country": "CG",
"iso": "ln_CG"
},
{
"type": "languageCountryMap",
"language": "lo",
"country": "LA",
"iso": "lo_LA"
},
{
"type": "languageCountryMap",
"language": "lt",
"country": "LT",
"iso": "lt_LT"
},
{
"type": "languageCountryMap",
"language": "lv",
"country": "LV",
"iso": "lv_LV"
},
{
"type": "languageCountryMap",
"language": "mk",
"country": "MK",
"iso": "mk_MK"
},
{
"type": "languageCountryMap",
"language": "ml",
"country": "IN",
"iso": "ml_IN"
},
{
"type": "languageCountryMap",
"language": "mn",
"country": "MN",
"iso": "mn_MN"
},
{
"type": "languageCountryMap",
"language": "mr",
"country": "IN",
"iso": "mr_IN"
},
{
"type": "languageCountryMap",
"language": "ms",
"country": "BN",
"iso": "ms_BN"
},
{
"type": "languageCountryMap",
"language": "ms",
"country": "MY",
"iso": "ms_MY"
},
{
"type": "languageCountryMap",
"language": "mt",
"country": "MT",
"iso": "mt_MT"
},
{
"type": "languageCountryMap",
"language": "nb",
"country": "NO",
"iso": "nb_NO"
},
{
"type": "languageCountryMap",
"language": "ne",
"country": "NP",
"iso": "ne_NP"
},
{
"type": "languageCountryMap",
"language": "nl",
"country": "BE",
"iso": "nl_BE"
},
{
"type": "languageCountryMap",
"language": "nl",
"country": "NL",
"iso": "nl_NL"
},
{
"type": "languageCountryMap",
"language": "nn",
"country": "NO",
"iso": "nn_NO"
},
{
"type": "languageCountryMap",
"language": "nr",
"country": "ZA",
"iso": "nr_ZA"
},
{
"type": "languageCountryMap",
"language": "ny",
"country": "MW",
"iso": "ny_MW"
},
{
"type": "languageCountryMap",
"language": "om",
"country": "ET",
"iso": "om_ET"
},
{
"type": "languageCountryMap",
"language": "om",
"country": "KE",
"iso": "om_KE"
},
{
"type": "languageCountryMap",
"language": "or",
"country": "IN",
"iso": "or_IN"
},
{
"type": "languageCountryMap",
"language": "pa",
"country": "IN",
"iso": "pa_IN"
},
{
"type": "languageCountryMap",
"language": "pa",
"country": "PK",
"iso": "pa_PK"
},
{
"type": "languageCountryMap",
"language": "pl",
"country": "PL",
"iso": "pl_PL"
},
{
"type": "languageCountryMap",
"language": "ps",
"country": "AF",
"iso": "ps_AF"
},
{
"type": "languageCountryMap",
"language": "pt",
"country": "BR",
"iso": "pt_BR"
},
{
"type": "languageCountryMap",
"language": "pt",
"country": "PT",
"iso": "pt_PT"
},
{
"type": "languageCountryMap",
"language": "ro",
"country": "RO",
"iso": "ro_RO"
},
{
"type": "languageCountryMap",
"language": "ru",
"country": "RU",
"iso": "ru_RU"
},
{
"type": "languageCountryMap",
"language": "ru",
"country": "UA",
"iso": "ru_UA"
},
{
"type": "languageCountryMap",
"language": "rw",
"country": "RW",
"iso": "rw_RW"
},
{
"type": "languageCountryMap",
"language": "sa",
"country": "IN",
"iso": "sa_IN"
},
{
"type": "languageCountryMap",
"language": "se",
"country": "NO",
"iso": "se_NO"
},
{
"type": "languageCountryMap",
"language": "sh",
"country": "BA",
"iso": "sh_BA"
},
{
"type": "languageCountryMap",
"language": "sh",
"country": "CS",
"iso": "sh_CS"
},
{
"type": "languageCountryMap",
"language": "sh",
"country": "YU",
"iso": "sh_YU"
},
{
"type": "languageCountryMap",
"language": "sk",
"country": "SK",
"iso": "sk_SK"
},
{
"type": "languageCountryMap",
"language": "sl",
"country": "SI",
"iso": "sl_SI"
},
{
"type": "languageCountryMap",
"language": "so",
"country": "DJ",
"iso": "so_DJ"
},
{
"type": "languageCountryMap",
"language": "so",
"country": "ET",
"iso": "so_ET"
},
{
"type": "languageCountryMap",
"language": "so",
"country": "KE",
"iso": "so_KE"
},
{
"type": "languageCountryMap",
"language": "so",
"country": "SO",
"iso": "so_SO"
},
{
"type": "languageCountryMap",
"language": "sq",
"country": "AL",
"iso": "sq_AL"
},
{
"type": "languageCountryMap",
"language": "sr",
"country": "BA",
"iso": "sr_BA"
},
{
"type": "languageCountryMap",
"language": "sr",
"country": "CS",
"iso": "sr_CS"
},
{
"type": "languageCountryMap",
"language": "sr",
"country": "YU",
"iso": "sr_YU"
},
{
"type": "languageCountryMap",
"language": "ss",
"country": "ZA",
"iso": "ss_ZA"
},
{
"type": "languageCountryMap",
"language": "st",
"country": "ZA",
"iso": "st_ZA"
},
{
"type": "languageCountryMap",
"language": "sv",
"country": "FI",
"iso": "sv_FI"
},
{
"type": "languageCountryMap",
"language": "sv",
"country": "SE",
"iso": "sv_SE"
},
{
"type": "languageCountryMap",
"language": "sw",
"country": "KE",
"iso": "sw_KE"
},
{
"type": "languageCountryMap",
"language": "sw",
"country": "TZ",
"iso": "sw_TZ"
},
{
"type": "languageCountryMap",
"language": "ta",
"country": "IN",
"iso": "ta_IN"
},
{
"type": "languageCountryMap",
"language": "te",
"country": "IN",
"iso": "te_IN"
},
{
"type": "languageCountryMap",
"language": "tg",
"country": "TJ",
"iso": "tg_TJ"
},
{
"type": "languageCountryMap",
"language": "th",
"country": "TH",
"iso": "th_TH"
},
{
"type": "languageCountryMap",
"language": "ti",
"country": "ER",
"iso": "ti_ER"
},
{
"type": "languageCountryMap",
"language": "ti",
"country": "ET",
"iso": "ti_ET"
},
{
"type": "languageCountryMap",
"language": "tn",
"country": "ZA",
"iso": "tn_ZA"
},
{
"type": "languageCountryMap",
"language": "tr",
"country": "TR",
"iso": "tr_TR"
},
{
"type": "languageCountryMap",
"language": "ts",
"country": "ZA",
"iso": "ts_ZA"
},
{
"type": "languageCountryMap",
"language": "tt",
"country": "RU",
"iso": "tt_RU"
},
{
"type": "languageCountryMap",
"language": "uk",
"country": "UA",
"iso": "uk_UA"
},
{
"type": "languageCountryMap",
"language": "ur",
"country": "IN",
"iso": "ur_IN"
},
{
"type": "languageCountryMap",
"language": "ur",
"country": "PK",
"iso": "ur_PK"
},
{
"type": "languageCountryMap",
"language": "uz",
"country": "AF",
"iso": "uz_AF"
},
{
"type": "languageCountryMap",
"language": "uz",
"country": "UZ",
"iso": "uz_UZ"
},
{
"type": "languageCountryMap",
"language": "ve",
"country": "ZA",
"iso": "ve_ZA"
},
{
"type": "languageCountryMap",
"language": "vi",
"country": "VN",
"iso": "vi_VN"
},
{
"type": "languageCountryMap",
"language": "xh",
"country": "ZA",
"iso": "xh_ZA"
},
{
"type": "languageCountryMap",
"language": "yo",
"country": "NG",
"iso": "yo_NG"
},
{
"type": "languageCountryMap",
"language": "zh",
"country": "CN",
"iso": "zh_CN"
},
{
"type": "languageCountryMap",
"language": "zh",
"country": "HK",
"iso": "zh_HK"
},
{
"type": "languageCountryMap",
"language": "zh",
"country": "MO",
"iso": "zh_MO"
},
{
"type": "languageCountryMap",
"language": "zh",
"country": "SG",
"iso": "zh_SG"
},
{
"type": "languageCountryMap",
"language": "zh",
"country": "TW",
"iso": "zh_TW"
},
{
"type": "languageCountryMap",
"language": "zu",
"country": "ZA",
"iso": "zu_ZA"
},
{
"type": "continent",
"name": "Africa",
"iso": "Africa"
},
{
"type": "continent",
"name": "Asia",
"iso": "Asia"
},
{
"type": "continent",
"name": "Europe",
"iso": "Europe"
},
{
"type": "continent",
"name": "North America",
"iso": "North America"
},
{
"type": "continent",
"name": "South America",
"iso": "South America"
},
{
"type": "continent",
"name": "Oceania",
"iso": "Oceania"
},
{
"type": "continent",
"name": "Antarctica",
"iso": "Antarctica"
},
{
"type": "country",
"iso": "AF",
"name": "Afghanistan",
"href": "http://en.wikipedia.org/wiki/Afghanistan",
"continent": "Asia",
"languages": [
{
"_reference": "fa"
},
{
"_reference": "ps"
},
{
"_reference": "uz"
}
]
},
{
"type": "country",
"iso": "AX",
"name": "Åland Islands",
"href": "http://en.wikipedia.org/wiki/%C3%85land",
"languages": [
]
},
{
"type": "country",
"iso": "AL",
"name": "Albania",
"href": "http://en.wikipedia.org/wiki/Albania",
"continent": "Europe",
"languages": [
{
"_reference": "sq"
}
]
},
{
"type": "country",
"iso": "DZ",
"name": "Algeria",
"href": "http://en.wikipedia.org/wiki/Algeria",
"continent": "Africa",
"languages": [
{
"_reference": "ar"
}
]
},
{
"type": "country",
"iso": "AS",
"name": "American Samoa",
"href": "http://en.wikipedia.org/wiki/American_Samoa",
"continent": "Oceania",
"languages": [
{
"_reference": "en"
}
]
},
{
"type": "country",
"iso": "AD",
"name": "Andorra",
"href": "http://en.wikipedia.org/wiki/Andorra",
"continent": "Europe",
"languages": [
]
},
{
"type": "country",
"iso": "AO",
"name": "Angola",
"href": "http://en.wikipedia.org/wiki/Angola",
"continent": "Africa",
"languages": [
]
},
{
"type": "country",
"iso": "AI",
"name": "Anguilla",
"href": "http://en.wikipedia.org/wiki/Anguilla",
"continent": "North America",
"languages": [
]
},
{
"type": "country",
"iso": "AQ",
"name": "Antarctica",
"href": "http://en.wikipedia.org/wiki/Antarctica",
"languages": [
]
},
{
"type": "country",
"iso": "AG",
"name": "Antigua and Barbuda",
"href": "http://en.wikipedia.org/wiki/Antigua_and_Barbuda",
"continent": "North America",
"languages": [
]
},
{
"type": "country",
"iso": "AR",
"name": "Argentina",
"href": "http://en.wikipedia.org/wiki/Argentina",
"continent": "South America",
"languages": [
{
"_reference": "es"
}
]
},
{
"type": "country",
"iso": "AM",
"name": "Armenia",
"href": "http://en.wikipedia.org/wiki/Armenia",
"continent": "Asia",
"languages": [
{
"_reference": "hy"
}
]
},
{
"type": "country",
"iso": "AW",
"name": "Aruba",
"href": "http://en.wikipedia.org/wiki/Aruba",
"continent": "North America",
"languages": [
]
},
{
"type": "country",
"iso": "AU",
"name": "Australia",
"href": "http://en.wikipedia.org/wiki/Australia",
"continent": "Oceania",
"languages": [
{
"_reference": "en"
}
]
},
{
"type": "country",
"iso": "AT",
"name": "Austria",
"href": "http://en.wikipedia.org/wiki/Austria",
"continent": "Europe",
"languages": [
{
"_reference": "de"
}
]
},
{
"type": "country",
"iso": "AZ",
"name": "Azerbaijan",
"href": "http://en.wikipedia.org/wiki/Azerbaijan",
"continent": "Asia",
"languages": [
{
"_reference": "az"
}
]
},
{
"type": "country",
"iso": "BS",
"name": "Bahamas",
"href": "http://en.wikipedia.org/wiki/The_Bahamas",
"continent": "North America",
"languages": [
]
},
{
"type": "country",
"iso": "BH",
"name": "Bahrain",
"href": "http://en.wikipedia.org/wiki/Bahrain",
"continent": "Asia",
"languages": [
{
"_reference": "ar"
}
]
},
{
"type": "country",
"iso": "BD",
"name": "Bangladesh",
"href": "http://en.wikipedia.org/wiki/Bangladesh",
"continent": "Asia",
"languages": [
{
"_reference": "bn"
}
]
},
{
"type": "country",
"iso": "BB",
"name": "Barbados",
"href": "http://en.wikipedia.org/wiki/Barbados",
"continent": "North America",
"languages": [
]
},
{
"type": "country",
"iso": "BY",
"name": "Belarus",
"href": "http://en.wikipedia.org/wiki/Belarus",
"continent": "Europe",
"languages": [
{
"_reference": "be"
}
]
},
{
"type": "country",
"iso": "BE",
"name": "Belgium",
"href": "http://en.wikipedia.org/wiki/Belgium",
"continent": "Europe",
"languages": [
{
"_reference": "de"
},
{
"_reference": "en"
},
{
"_reference": "fr"
},
{
"_reference": "nl"
}
]
},
{
"type": "country",
"iso": "BZ",
"name": "Belize",
"href": "http://en.wikipedia.org/wiki/Belize",
"continent": "North America",
"languages": [
{
"_reference": "en"
}
]
},
{
"type": "country",
"iso": "BJ",
"name": "Benin",
"href": "http://en.wikipedia.org/wiki/Benin",
"continent": "Africa",
"languages": [
]
},
{
"type": "country",
"iso": "BM",
"name": "Bermuda",
"href": "http://en.wikipedia.org/wiki/Bermuda",
"continent": "North America",
"languages": [
]
},
{
"type": "country",
"iso": "BT",
"name": "Bhutan",
"href": "http://en.wikipedia.org/wiki/Bhutan",
"continent": "Asia",
"languages": [
{
"_reference": "dz"
}
]
},
{
"type": "country",
"iso": "BO",
"name": "Bolivia",
"href": "http://en.wikipedia.org/wiki/Bolivia",
"continent": "South America",
"languages": [
{
"_reference": "es"
}
]
},
{
"type": "country",
"iso": "BA",
"name": "Bosnia and Herzegovina",
"href": "http://en.wikipedia.org/wiki/Bosnia_and_Herzegovina",
"continent": "Europe",
"languages": [
{
"_reference": "bs"
},
{
"_reference": "sh"
},
{
"_reference": "sr"
}
]
},
{
"type": "country",
"iso": "BW",
"name": "Botswana",
"href": "http://en.wikipedia.org/wiki/Botswana",
"continent": "Africa",
"languages": [
{
"_reference": "en"
}
]
},
{
"type": "country",
"iso": "BV",
"name": "Bouvet Island",
"href": "http://en.wikipedia.org/wiki/Bouvet_Island",
"continent": "Antarctica",
"languages": [
]
},
{
"type": "country",
"iso": "BR",
"name": "Brazil",
"href": "http://en.wikipedia.org/wiki/Brazil",
"continent": "South America",
"languages": [
{
"_reference": "pt"
}
]
},
{
"type": "country",
"iso": "IO",
"name": "British Indian Ocean Territory",
"href": "http://en.wikipedia.org/wiki/British_Indian_Ocean_Territory",
"continent": "Asia",
"languages": [
]
},
{
"type": "country",
"iso": "BN",
"name": "Brunei Darussalam",
"href": "http://en.wikipedia.org/wiki/Brunei",
"languages": [
{
"_reference": "ms"
}
]
},
{
"type": "country",
"iso": "BG",
"name": "Bulgaria",
"href": "http://en.wikipedia.org/wiki/Bulgaria",
"continent": "Europe",
"languages": [
{
"_reference": "bg"
}
]
},
{
"type": "country",
"iso": "BF",
"name": "Burkina Faso",
"href": "http://en.wikipedia.org/wiki/Burkina_Faso",
"continent": "Africa",
"languages": [
]
},
{
"type": "country",
"iso": "BI",
"name": "Burundi",
"href": "http://en.wikipedia.org/wiki/Burundi",
"continent": "Africa",
"languages": [
]
},
{
"type": "country",
"iso": "KH",
"name": "Cambodia",
"href": "http://en.wikipedia.org/wiki/Cambodia",
"continent": "Asia",
"languages": [
{
"_reference": "km"
}
]
},
{
"type": "country",
"iso": "CM",
"name": "Cameroon",
"href": "http://en.wikipedia.org/wiki/Cameroon",
"continent": "Africa",
"languages": [
]
},
{
"type": "country",
"iso": "CA",
"name": "Canada",
"href": "http://en.wikipedia.org/wiki/Canada",
"continent": "North America",
"languages": [
{
"_reference": "en"
},
{
"_reference": "fr"
}
]
},
{
"type": "country",
"iso": "CV",
"name": "Cape Verde",
"href": "http://en.wikipedia.org/wiki/Cape_Verde",
"continent": "Africa",
"languages": [
]
},
{
"type": "country",
"iso": "KY",
"name": "Cayman Islands",
"href": "http://en.wikipedia.org/wiki/Cayman_Islands",
"continent": "North America",
"languages": [
]
},
{
"type": "country",
"iso": "CF",
"name": "Central African Republic",
"href": "http://en.wikipedia.org/wiki/Central_African_Republic",
"continent": "Africa",
"languages": [
]
},
{
"type": "country",
"iso": "TD",
"name": "Chad",
"href": "http://en.wikipedia.org/wiki/Chad",
"continent": "Africa",
"languages": [
]
},
{
"type": "country",
"iso": "CL",
"name": "Chile",
"href": "http://en.wikipedia.org/wiki/Chile",
"continent": "South America",
"languages": [
{
"_reference": "es"
}
]
},
{
"type": "country",
"iso": "CN",
"name": "China",
"continent": "Asia",
"href": "http://en.wikipedia.org/wiki/People%27s_Republic_of_China",
"languages": [
{
"_reference": "zh"
}
]
},
{
"type": "country",
"iso": "CX",
"name": "Christmas Island",
"href": "http://en.wikipedia.org/wiki/Christmas_Island",
"continent": "Asia",
"languages": [
]
},
{
"type": "country",
"iso": "CC",
"name": "Cocos (Keeling) Islands",
"href": "http://en.wikipedia.org/wiki/Cocos_%28Keeling%29_Islands",
"continent": "Asia",
"languages": [
]
},
{
"type": "country",
"iso": "CO",
"name": "Colombia",
"href": "http://en.wikipedia.org/wiki/Colombia",
"continent": "South America",
"languages": [
{
"_reference": "es"
}
]
},
{
"type": "country",
"iso": "KM",
"name": "Comoros",
"href": "http://en.wikipedia.org/wiki/Comoros",
"continent": "Africa",
"languages": [
]
},
{
"type": "country",
"iso": "CG",
"name": "Congo",
"href": "http://en.wikipedia.org/wiki/Republic_of_the_Congo",
"languages": [
{
"_reference": "ln"
}
]
},
{
"type": "country",
"iso": "CD",
"name": "Congo, Democratic Republic of the",
"href": "http://en.wikipedia.org/wiki/Democratic_Republic_of_the_Congo",
"languages": [
{
"_reference": "ln"
}
]
},
{
"type": "country",
"iso": "CK",
"name": "Cook Islands",
"href": "http://en.wikipedia.org/wiki/Cook_Islands",
"continent": "Oceania",
"languages": [
]
},
{
"type": "country",
"iso": "CR",
"name": "Costa Rica",
"href": "http://en.wikipedia.org/wiki/Costa_Rica",
"continent": "North America",
"languages": [
{
"_reference": "es"
}
]
},
{
"type": "country",
"iso": "CI",
"name": "Côte d'Ivoire",
"href": "http://en.wikipedia.org/wiki/C%C3%B4te_d%27Ivoire",
"continent": "Africa",
"languages": [
]
},
{
"type": "country",
"iso": "HR",
"name": "Croatia",
"href": "http://en.wikipedia.org/wiki/Croatia",
"continent": "Europe",
"languages": [
{
"_reference": "hr"
}
]
},
{
"type": "country",
"iso": "CU",
"name": "Cuba",
"href": "http://en.wikipedia.org/wiki/Cuba",
"continent": "North America",
"languages": [
]
},
{
"type": "country",
"iso": "CY",
"name": "Cyprus",
"href": "http://en.wikipedia.org/wiki/Cyprus",
"continent": "Asia",
"languages": [
{
"_reference": "el"
}
]
},
{
"type": "country",
"iso": "CZ",
"name": "Czech Republic",
"href": "http://en.wikipedia.org/wiki/Czech_Republic",
"continent": "Europe",
"languages": [
{
"_reference": "cs"
}
]
},
{
"type": "country",
"iso": "DK",
"name": "Denmark",
"href": "http://en.wikipedia.org/wiki/Denmark",
"continent": "Europe",
"languages": [
{
"_reference": "da"
}
]
},
{
"type": "country",
"iso": "DJ",
"name": "Djibouti",
"href": "http://en.wikipedia.org/wiki/Djibouti",
"continent": "Africa",
"languages": [
{
"_reference": "aa"
},
{
"_reference": "so"
}
]
},
{
"type": "country",
"iso": "DM",
"name": "Dominica",
"href": "http://en.wikipedia.org/wiki/Dominica",
"continent": "North America",
"languages": [
]
},
{
"type": "country",
"iso": "DO",
"name": "Dominican Republic",
"href": "http://en.wikipedia.org/wiki/Dominican_Republic",
"continent": "North America",
"languages": [
{
"_reference": "es"
}
]
},
{
"type": "country",
"iso": "EC",
"name": "Ecuador",
"href": "http://en.wikipedia.org/wiki/Ecuador",
"continent": "South America",
"languages": [
{
"_reference": "es"
}
]
},
{
"type": "country",
"iso": "EG",
"name": "Egypt",
"href": "http://en.wikipedia.org/wiki/Egypt",
"continent": "Africa",
"languages": [
{
"_reference": "ar"
}
]
},
{
"type": "country",
"iso": "SV",
"name": "El Salvador",
"href": "http://en.wikipedia.org/wiki/El_Salvador",
"continent": "North America",
"languages": [
{
"_reference": "es"
}
]
},
{
"type": "country",
"iso": "GQ",
"name": "Equatorial Guinea",
"href": "http://en.wikipedia.org/wiki/Equatorial_Guinea",
"continent": "Africa",
"languages": [
]
},
{
"type": "country",
"iso": "ER",
"name": "Eritrea",
"href": "http://en.wikipedia.org/wiki/Eritrea",
"continent": "Africa",
"languages": [
{
"_reference": "aa"
},
{
"_reference": "ti"
}
]
},
{
"type": "country",
"iso": "EE",
"name": "Estonia",
"href": "http://en.wikipedia.org/wiki/Estonia",
"continent": "Europe",
"languages": [
{
"_reference": "et"
}
]
},
{
"type": "country",
"iso": "ET",
"name": "Ethiopia",
"href": "http://en.wikipedia.org/wiki/Ethiopia",
"continent": "Africa",
"languages": [
{
"_reference": "aa"
},
{
"_reference": "am"
},
{
"_reference": "om"
},
{
"_reference": "so"
},
{
"_reference": "ti"
}
]
},
{
"type": "country",
"iso": "FK",
"name": "Falkland Islands (Malvinas)",
"href": "http://en.wikipedia.org/wiki/Falkland_Islands",
"languages": [
]
},
{
"type": "country",
"iso": "FO",
"name": "Faroe Islands",
"href": "http://en.wikipedia.org/wiki/Faroe_Islands",
"continent": "Europe",
"languages": [
{
"_reference": "fo"
}
]
},
{
"type": "country",
"iso": "FJ",
"name": "Fiji",
"href": "http://en.wikipedia.org/wiki/Fiji",
"continent": "Oceania",
"languages": [
]
},
{
"type": "country",
"iso": "FI",
"name": "Finland",
"href": "http://en.wikipedia.org/wiki/Finland",
"continent": "Europe",
"languages": [
{
"_reference": "fi"
},
{
"_reference": "sv"
}
]
},
{
"type": "country",
"iso": "FR",
"name": "France",
"href": "http://en.wikipedia.org/wiki/France",
"continent": "Europe",
"languages": [
{
"_reference": "fr"
}
]
},
{
"type": "country",
"iso": "GF",
"name": "French Guiana",
"href": "http://en.wikipedia.org/wiki/French_Guiana",
"continent": "South America",
"languages": [
]
},
{
"type": "country",
"iso": "PF",
"name": "French Polynesia",
"href": "http://en.wikipedia.org/wiki/French_Polynesia",
"continent": "Oceania",
"languages": [
]
},
{
"type": "country",
"iso": "TF",
"name": "French Southern Territories",
"href": "http://en.wikipedia.org/wiki/French_Southern_and_Antarctic_Lands",
"continent": "Antarctica",
"languages": [
]
},
{
"type": "country",
"iso": "GA",
"name": "Gabon",
"href": "http://en.wikipedia.org/wiki/Gabon",
"continent": "Africa",
"languages": [
]
},
{
"type": "country",
"iso": "GM",
"name": "Gambia",
"href": "http://en.wikipedia.org/wiki/The_Gambia",
"continent": "Africa",
"languages": [
]
},
{
"type": "country",
"iso": "GE",
"name": "Georgia",
"href": "http://en.wikipedia.org/wiki/Georgia_%28country%29",
"continent": "Asia",
"languages": [
{
"_reference": "ka"
}
]
},
{
"type": "country",
"iso": "DE",
"name": "Germany",
"href": "http://en.wikipedia.org/wiki/Germany",
"continent": "Europe",
"languages": [
{
"_reference": "de"
}
]
},
{
"type": "country",
"iso": "GH",
"name": "Ghana",
"href": "http://en.wikipedia.org/wiki/Ghana",
"continent": "Africa",
"languages": [
{
"_reference": "ak"
},
{
"_reference": "ee"
},
{
"_reference": "ha"
}
]
},
{
"type": "country",
"iso": "GI",
"name": "Gibraltar",
"href": "http://en.wikipedia.org/wiki/Gibraltar",
"continent": "Europe",
"languages": [
]
},
{
"type": "country",
"iso": "GR",
"name": "Greece",
"href": "http://en.wikipedia.org/wiki/Greece",
"continent": "Europe",
"languages": [
{
"_reference": "el"
}
]
},
{
"type": "country",
"iso": "GL",
"name": "Greenland",
"href": "http://en.wikipedia.org/wiki/Greenland",
"continent": "North America",
"languages": [
{
"_reference": "kl"
}
]
},
{
"type": "country",
"iso": "GD",
"name": "Grenada",
"href": "http://en.wikipedia.org/wiki/Grenada",
"continent": "North America",
"languages": [
]
},
{
"type": "country",
"iso": "GP",
"name": "Guadeloupe",
"href": "http://en.wikipedia.org/wiki/Guadeloupe",
"continent": "North America",
"languages": [
]
},
{
"type": "country",
"iso": "GU",
"name": "Guam",
"href": "http://en.wikipedia.org/wiki/Guam",
"continent": "Oceania",
"languages": [
{
"_reference": "en"
}
]
},
{
"type": "country",
"iso": "GT",
"name": "Guatemala",
"href": "http://en.wikipedia.org/wiki/Guatemala",
"continent": "North America",
"languages": [
{
"_reference": "es"
}
]
},
{
"type": "country",
"iso": "GG",
"name": "Guernsey",
"href": "http://en.wikipedia.org/wiki/Guernsey",
"continent": "Europe",
"languages": [
]
},
{
"type": "country",
"iso": "GN",
"name": "Guinea",
"href": "http://en.wikipedia.org/wiki/Guinea",
"continent": "Africa",
"languages": [
]
},
{
"type": "country",
"iso": "GW",
"name": "Guinea-Bissau",
"href": "http://en.wikipedia.org/wiki/Guinea-Bissau",
"continent": "Africa",
"languages": [
]
},
{
"type": "country",
"iso": "GY",
"name": "Guyana",
"href": "http://en.wikipedia.org/wiki/Guyana",
"continent": "South America",
"languages": [
]
},
{
"type": "country",
"iso": "HT",
"name": "Haiti",
"href": "http://en.wikipedia.org/wiki/Haiti",
"continent": "North America",
"languages": [
]
},
{
"type": "country",
"iso": "HM",
"name": "Heard Island and McDonald Islands",
"href": "http://en.wikipedia.org/wiki/Heard_Island_and_McDonald_Islands",
"continent": "Antarctica",
"languages": [
]
},
{
"type": "country",
"iso": "VA",
"name": "Holy See (Vatican City State)",
"href": "http://en.wikipedia.org/wiki/Vatican_City",
"languages": [
]
},
{
"type": "country",
"iso": "HN",
"name": "Honduras",
"href": "http://en.wikipedia.org/wiki/Honduras",
"continent": "North America",
"languages": [
{
"_reference": "es"
}
]
},
{
"type": "country",
"iso": "HK",
"name": "Hong Kong",
"href": "http://en.wikipedia.org/wiki/Hong_Kong",
"continent": "Asia",
"languages": [
{
"_reference": "en"
},
{
"_reference": "zh"
}
]
},
{
"type": "country",
"iso": "HU",
"name": "Hungary",
"href": "http://en.wikipedia.org/wiki/Hungary",
"continent": "Europe",
"languages": [
{
"_reference": "hu"
}
]
},
{
"type": "country",
"iso": "IS",
"name": "Iceland",
"href": "http://en.wikipedia.org/wiki/Iceland",
"continent": "Europe",
"languages": [
{
"_reference": "is"
}
]
},
{
"type": "country",
"iso": "IN",
"name": "India",
"href": "http://en.wikipedia.org/wiki/India",
"continent": "Asia",
"languages": [
{
"_reference": "as"
},
{
"_reference": "bn"
},
{
"_reference": "en"
},
{
"_reference": "gu"
},
{
"_reference": "hi"
},
{
"_reference": "kn"
},
{
"_reference": "ml"
},
{
"_reference": "mr"
},
{
"_reference": "or"
},
{
"_reference": "pa"
},
{
"_reference": "sa"
},
{
"_reference": "ta"
},
{
"_reference": "te"
},
{
"_reference": "ur"
}
]
},
{
"type": "country",
"iso": "ID",
"name": "Indonesia",
"href": "http://en.wikipedia.org/wiki/Indonesia",
"continent": "Asia",
"languages": [
{
"_reference": "id"
}
]
},
{
"type": "country",
"iso": "IR",
"name": "Iran, Islamic Republic of",
"href": "http://en.wikipedia.org/wiki/Iran",
"languages": [
{
"_reference": "fa"
},
{
"_reference": "ku"
}
]
},
{
"type": "country",
"iso": "IQ",
"name": "Iraq",
"href": "http://en.wikipedia.org/wiki/Iraq",
"continent": "Asia",
"languages": [
{
"_reference": "ar"
},
{
"_reference": "ku"
}
]
},
{
"type": "country",
"iso": "IE",
"name": "Ireland",
"href": "http://en.wikipedia.org/wiki/Republic_of_Ireland",
"continent": "Europe",
"languages": [
{
"_reference": "en"
},
{
"_reference": "ga"
}
]
},
{
"type": "country",
"iso": "IM",
"name": "Isle of Man",
"href": "http://en.wikipedia.org/wiki/Isle_of_Man",
"continent": "Europe",
"languages": [
]
},
{
"type": "country",
"iso": "IL",
"name": "Israel",
"href": "http://en.wikipedia.org/wiki/Israel",
"continent": "Asia",
"languages": [
{
"_reference": "he"
}
]
},
{
"type": "country",
"iso": "IT",
"name": "Italy",
"href": "http://en.wikipedia.org/wiki/Italy",
"continent": "Europe",
"languages": [
{
"_reference": "it"
}
]
},
{
"type": "country",
"iso": "JM",
"name": "Jamaica",
"href": "http://en.wikipedia.org/wiki/Jamaica",
"continent": "North America",
"languages": [
{
"_reference": "en"
}
]
},
{
"type": "country",
"iso": "JP",
"name": "Japan",
"href": "http://en.wikipedia.org/wiki/Japan",
"continent": "Asia",
"languages": [
{
"_reference": "ja"
}
]
},
{
"type": "country",
"iso": "JE",
"name": "Jersey",
"href": "http://en.wikipedia.org/wiki/Jersey",
"continent": "Europe",
"languages": [
]
},
{
"type": "country",
"iso": "JO",
"name": "Jordan",
"href": "http://en.wikipedia.org/wiki/Jordan",
"continent": "Asia",
"languages": [
{
"_reference": "ar"
}
]
},
{
"type": "country",
"iso": "KZ",
"name": "Kazakhstan",
"href": "http://en.wikipedia.org/wiki/Kazakhstan",
"continent": "Asia",
"languages": [
{
"_reference": "kk"
}
]
},
{
"type": "country",
"iso": "KE",
"name": "Kenya",
"href": "http://en.wikipedia.org/wiki/Kenya",
"continent": "Africa",
"languages": [
{
"_reference": "om"
},
{
"_reference": "so"
},
{
"_reference": "sw"
}
]
},
{
"type": "country",
"iso": "KI",
"name": "Kiribati",
"href": "http://en.wikipedia.org/wiki/Kiribati",
"continent": "Oceania",
"languages": [
]
},
{
"type": "country",
"iso": "KP",
"name": "Korea, Democratic People's Republic of",
"href": "http://en.wikipedia.org/wiki/North_Korea",
"continent": "Asia",
"languages": [
]
},
{
"type": "country",
"iso": "KR",
"name": "Korea, Republic of",
"href": "http://en.wikipedia.org/wiki/South_Korea",
"continent": "Asia",
"languages": [
{
"_reference": "ko"
}
]
},
{
"type": "country",
"iso": "KW",
"name": "Kuwait",
"href": "http://en.wikipedia.org/wiki/Kuwait",
"continent": "Asia",
"languages": [
{
"_reference": "ar"
}
]
},
{
"type": "country",
"iso": "KG",
"name": "Kyrgyzstan",
"href": "http://en.wikipedia.org/wiki/Kyrgyzstan",
"continent": "Asia",
"languages": [
{
"_reference": "ky"
}
]
},
{
"type": "country",
"iso": "LA",
"name": "Lao People's Democratic Republic",
"href": "http://en.wikipedia.org/wiki/Laos",
"languages": [
{
"_reference": "lo"
}
]
},
{
"type": "country",
"iso": "LV",
"name": "Latvia",
"href": "http://en.wikipedia.org/wiki/Latvia",
"continent": "Europe",
"languages": [
{
"_reference": "lv"
}
]
},
{
"type": "country",
"iso": "LB",
"name": "Lebanon",
"href": "http://en.wikipedia.org/wiki/Lebanon",
"continent": "Asia",
"languages": [
{
"_reference": "ar"
}
]
},
{
"type": "country",
"iso": "LS",
"name": "Lesotho",
"href": "http://en.wikipedia.org/wiki/Lesotho",
"continent": "Africa",
"languages": [
]
},
{
"type": "country",
"iso": "LR",
"name": "Liberia",
"href": "http://en.wikipedia.org/wiki/Liberia",
"continent": "Africa",
"languages": [
]
},
{
"type": "country",
"iso": "LY",
"name": "Libyan Arab Jamahiriya",
"href": "http://en.wikipedia.org/wiki/Libya",
"languages": [
{
"_reference": "ar"
}
]
},
{
"type": "country",
"iso": "LI",
"name": "Liechtenstein",
"href": "http://en.wikipedia.org/wiki/Liechtenstein",
"continent": "Europe",
"languages": [
{
"_reference": "de"
}
]
},
{
"type": "country",
"iso": "LT",
"name": "Lithuania",
"href": "http://en.wikipedia.org/wiki/Lithuania",
"continent": "Europe",
"languages": [
{
"_reference": "lt"
}
]
},
{
"type": "country",
"iso": "LU",
"name": "Luxembourg",
"href": "http://en.wikipedia.org/wiki/Luxembourg",
"continent": "Europe",
"languages": [
{
"_reference": "de"
},
{
"_reference": "fr"
}
]
},
{
"type": "country",
"iso": "MO",
"name": "Macao",
"href": "http://en.wikipedia.org/wiki/Macau",
"languages": [
{
"_reference": "zh"
}
]
},
{
"type": "country",
"iso": "MK",
"name": "Macedonia, the former Yugoslav Republic of",
"href": "http://en.wikipedia.org/wiki/Republic_of_Macedonia",
"languages": [
{
"_reference": "mk"
}
]
},
{
"type": "country",
"iso": "MG",
"name": "Madagascar",
"href": "http://en.wikipedia.org/wiki/Madagascar",
"continent": "Africa",
"languages": [
]
},
{
"type": "country",
"iso": "MW",
"name": "Malawi",
"href": "http://en.wikipedia.org/wiki/Malawi",
"continent": "Africa",
"languages": [
{
"_reference": "ny"
}
]
},
{
"type": "country",
"iso": "MY",
"name": "Malaysia",
"href": "http://en.wikipedia.org/wiki/Malaysia",
"continent": "Asia",
"languages": [
{
"_reference": "ms"
}
]
},
{
"type": "country",
"iso": "MV",
"name": "Maldives",
"href": "http://en.wikipedia.org/wiki/Maldives",
"continent": "Asia",
"languages": [
{
"_reference": "dv"
}
]
},
{
"type": "country",
"iso": "ML",
"name": "Mali",
"href": "http://en.wikipedia.org/wiki/Mali",
"continent": "Africa",
"languages": [
]
},
{
"type": "country",
"iso": "MT",
"name": "Malta",
"href": "http://en.wikipedia.org/wiki/Malta",
"continent": "Europe",
"languages": [
{
"_reference": "en"
},
{
"_reference": "mt"
}
]
},
{
"type": "country",
"iso": "MH",
"name": "Marshall Islands",
"href": "http://en.wikipedia.org/wiki/Marshall_Islands",
"continent": "Oceania",
"languages": [
{
"_reference": "en"
}
]
},
{
"type": "country",
"iso": "MQ",
"name": "Martinique",
"href": "http://en.wikipedia.org/wiki/Martinique",
"continent": "North America",
"languages": [
]
},
{
"type": "country",
"iso": "MR",
"name": "Mauritania",
"href": "http://en.wikipedia.org/wiki/Mauritania",
"continent": "Africa",
"languages": [
]
},
{
"type": "country",
"iso": "MU",
"name": "Mauritius",
"href": "http://en.wikipedia.org/wiki/Mauritius",
"continent": "Africa",
"languages": [
]
},
{
"type": "country",
"iso": "YT",
"name": "Mayotte",
"href": "http://en.wikipedia.org/wiki/Mayotte",
"continent": "Africa",
"languages": [
]
},
{
"type": "country",
"iso": "MX",
"name": "Mexico",
"href": "http://en.wikipedia.org/wiki/Mexico",
"continent": "North America",
"languages": [
{
"_reference": "es"
}
]
},
{
"type": "country",
"iso": "FM",
"name": "Micronesia, Federated States of",
"href": "http://en.wikipedia.org/wiki/Federated_States_of_Micronesia",
"languages": [
]
},
{
"type": "country",
"iso": "MD",
"name": "Moldova, Republic of",
"href": "http://en.wikipedia.org/wiki/Moldova",
"languages": [
]
},
{
"type": "country",
"iso": "MC",
"name": "Monaco",
"href": "http://en.wikipedia.org/wiki/Monaco",
"continent": "Europe",
"languages": [
{
"_reference": "fr"
}
]
},
{
"type": "country",
"iso": "MN",
"name": "Mongolia",
"href": "http://en.wikipedia.org/wiki/Mongolia",
"continent": "Asia",
"languages": [
{
"_reference": "mn"
}
]
},
{
"type": "country",
"iso": "ME",
"name": "Montenegro",
"href": "http://en.wikipedia.org/wiki/Montenegro",
"continent": "Europe",
"languages": [
]
},
{
"type": "country",
"iso": "MS",
"name": "Montserrat",
"href": "http://en.wikipedia.org/wiki/Montserrat",
"continent": "North America",
"languages": [
]
},
{
"type": "country",
"iso": "MA",
"name": "Morocco",
"href": "http://en.wikipedia.org/wiki/Morocco",
"continent": "Africa",
"languages": [
{
"_reference": "ar"
}
]
},
{
"type": "country",
"iso": "MZ",
"name": "Mozambique",
"href": "http://en.wikipedia.org/wiki/Mozambique",
"continent": "Africa",
"languages": [
]
},
{
"type": "country",
"iso": "MM",
"name": "Myanmar",
"href": "http://en.wikipedia.org/wiki/Myanmar",
"continent": "Asia",
"languages": [
]
},
{
"type": "country",
"iso": "NA",
"name": "Namibia",
"href": "http://en.wikipedia.org/wiki/Namibia",
"continent": "Africa",
"languages": [
{
"_reference": "af"
},
{
"_reference": "en"
}
]
},
{
"type": "country",
"iso": "NR",
"name": "Nauru",
"href": "http://en.wikipedia.org/wiki/Nauru",
"continent": "Oceania",
"languages": [
]
},
{
"type": "country",
"iso": "NP",
"name": "Nepal",
"href": "http://en.wikipedia.org/wiki/Nepal",
"continent": "Asia",
"languages": [
{
"_reference": "ne"
}
]
},
{
"type": "country",
"iso": "NL",
"name": "Netherlands",
"href": "http://en.wikipedia.org/wiki/Netherlands",
"continent": "Europe",
"languages": [
{
"_reference": "nl"
}
]
},
{
"type": "country",
"iso": "AN",
"name": "Netherlands Antilles",
"href": "http://en.wikipedia.org/wiki/Netherlands_Antilles",
"continent": "North America",
"languages": [
]
},
{
"type": "country",
"iso": "NC",
"name": "New Caledonia",
"href": "http://en.wikipedia.org/wiki/New_Caledonia",
"continent": "Oceania",
"languages": [
]
},
{
"type": "country",
"iso": "NZ",
"name": "New Zealand",
"href": "http://en.wikipedia.org/wiki/New_Zealand",
"continent": "Oceania",
"languages": [
{
"_reference": "en"
}
]
},
{
"type": "country",
"iso": "NI",
"name": "Nicaragua",
"href": "http://en.wikipedia.org/wiki/Nicaragua",
"continent": "North America",
"languages": [
{
"_reference": "es"
}
]
},
{
"type": "country",
"iso": "NE",
"name": "Niger",
"href": "http://en.wikipedia.org/wiki/Niger",
"continent": "Africa",
"languages": [
{
"_reference": "ha"
}
]
},
{
"type": "country",
"iso": "NG",
"name": "Nigeria",
"href": "http://en.wikipedia.org/wiki/Nigeria",
"continent": "Africa",
"languages": [
{
"_reference": "ha"
},
{
"_reference": "ig"
},
{
"_reference": "yo"
}
]
},
{
"type": "country",
"iso": "NU",
"name": "Niue",
"href": "http://en.wikipedia.org/wiki/Niue",
"continent": "Oceania",
"languages": [
]
},
{
"type": "country",
"iso": "NF",
"name": "Norfolk Island",
"href": "http://en.wikipedia.org/wiki/Norfolk_Island",
"continent": "Oceania",
"languages": [
]
},
{
"type": "country",
"iso": "MP",
"name": "Northern Mariana Islands",
"href": "http://en.wikipedia.org/wiki/Northern_Mariana_Islands",
"continent": "Oceania",
"languages": [
{
"_reference": "en"
}
]
},
{
"type": "country",
"iso": "NO",
"name": "Norway",
"href": "http://en.wikipedia.org/wiki/Norway",
"continent": "Europe",
"languages": [
{
"_reference": "nb"
},
{
"_reference": "nn"
},
{
"_reference": "se"
}
]
},
{
"type": "country",
"iso": "OM",
"name": "Oman",
"href": "http://en.wikipedia.org/wiki/Oman",
"continent": "Asia",
"languages": [
{
"_reference": "ar"
}
]
},
{
"type": "country",
"iso": "PK",
"name": "Pakistan",
"href": "http://en.wikipedia.org/wiki/Pakistan",
"continent": "Asia",
"languages": [
{
"_reference": "en"
},
{
"_reference": "pa"
},
{
"_reference": "ur"
}
]
},
{
"type": "country",
"iso": "PW",
"name": "Palau",
"href": "http://en.wikipedia.org/wiki/Palau",
"continent": "Oceania",
"languages": [
]
},
{
"type": "country",
"iso": "PS",
"name": "Palestinian Territory, Occupied",
"href": "http://en.wikipedia.org/wiki/Palestinian_territories",
"languages": [
]
},
{
"type": "country",
"iso": "PA",
"name": "Panama",
"href": "http://en.wikipedia.org/wiki/Panama",
"continent": "North America",
"languages": [
{
"_reference": "es"
}
]
},
{
"type": "country",
"iso": "PG",
"name": "Papua New Guinea",
"href": "http://en.wikipedia.org/wiki/Papua_New_Guinea",
"continent": "Oceania",
"languages": [
]
},
{
"type": "country",
"iso": "PY",
"name": "Paraguay",
"href": "http://en.wikipedia.org/wiki/Paraguay",
"continent": "South America",
"languages": [
{
"_reference": "es"
}
]
},
{
"type": "country",
"iso": "PE",
"name": "Peru",
"href": "http://en.wikipedia.org/wiki/Peru",
"continent": "South America",
"languages": [
{
"_reference": "es"
}
]
},
{
"type": "country",
"iso": "PH",
"name": "Philippines",
"href": "http://en.wikipedia.org/wiki/Philippines",
"continent": "Asia",
"languages": [
{
"_reference": "en"
}
]
},
{
"type": "country",
"iso": "PN",
"name": "Pitcairn",
"href": "http://en.wikipedia.org/wiki/Pitcairn_Islands",
"languages": [
]
},
{
"type": "country",
"iso": "PL",
"name": "Poland",
"href": "http://en.wikipedia.org/wiki/Poland",
"continent": "Europe",
"languages": [
{
"_reference": "pl"
}
]
},
{
"type": "country",
"iso": "PT",
"name": "Portugal",
"href": "http://en.wikipedia.org/wiki/Portugal",
"continent": "Europe",
"languages": [
{
"_reference": "pt"
}
]
},
{
"type": "country",
"iso": "PR",
"name": "Puerto Rico",
"href": "http://en.wikipedia.org/wiki/Puerto_Rico",
"continent": "North America",
"languages": [
{
"_reference": "es"
}
]
},
{
"type": "country",
"iso": "QA",
"name": "Qatar",
"href": "http://en.wikipedia.org/wiki/Qatar",
"continent": "Asia",
"languages": [
{
"_reference": "ar"
}
]
},
{
"type": "country",
"iso": "RE",
"name": "Réunion",
"href": "http://en.wikipedia.org/wiki/R%C3%A9union",
"continent": "Africa",
"languages": [
]
},
{
"type": "country",
"iso": "RO",
"name": "Romania",
"href": "http://en.wikipedia.org/wiki/Romania",
"continent": "Europe",
"languages": [
{
"_reference": "ro"
}
]
},
{
"type": "country",
"iso": "RU",
"name": "Russian Federation",
"href": "http://en.wikipedia.org/wiki/Russia",
"languages": [
{
"_reference": "ru"
},
{
"_reference": "tt"
}
]
},
{
"type": "country",
"iso": "RW",
"name": "Rwanda",
"href": "http://en.wikipedia.org/wiki/Rwanda",
"continent": "Africa",
"languages": [
{
"_reference": "rw"
}
]
},
{
"type": "country",
"iso": "SH",
"name": "Saint Helena",
"href": "http://en.wikipedia.org/wiki/Saint_Helena",
"continent": "Africa",
"languages": [
]
},
{
"type": "country",
"iso": "KN",
"name": "Saint Kitts and Nevis",
"href": "http://en.wikipedia.org/wiki/Saint_Kitts_and_Nevis",
"continent": "North America",
"languages": [
]
},
{
"type": "country",
"iso": "LC",
"name": "Saint Lucia",
"href": "http://en.wikipedia.org/wiki/Saint_Lucia",
"continent": "North America",
"languages": [
]
},
{
"type": "country",
"iso": "PM",
"name": "Saint Pierre and Miquelon",
"href": "http://en.wikipedia.org/wiki/Saint_Pierre_and_Miquelon",
"continent": "North America",
"languages": [
]
},
{
"type": "country",
"iso": "VC",
"name": "Saint Vincent and the Grenadines",
"href": "http://en.wikipedia.org/wiki/Saint_Vincent_and_the_Grenadines",
"continent": "North America",
"languages": [
]
},
{
"type": "country",
"iso": "WS",
"name": "Samoa",
"href": "http://en.wikipedia.org/wiki/Samoa",
"continent": "Oceania",
"languages": [
]
},
{
"type": "country",
"iso": "SM",
"name": "San Marino",
"href": "http://en.wikipedia.org/wiki/San_Marino",
"continent": "Europe",
"languages": [
]
},
{
"type": "country",
"iso": "ST",
"name": "Sao Tome and Principe",
"href": "http://en.wikipedia.org/wiki/S%C3%A3o_Tom%C3%A9_and_Pr%C3%ADncipe",
"continent": "Africa",
"languages": [
]
},
{
"type": "country",
"iso": "SA",
"name": "Saudi Arabia",
"href": "http://en.wikipedia.org/wiki/Saudi_Arabia",
"continent": "Asia",
"languages": [
{
"_reference": "ar"
}
]
},
{
"type": "country",
"iso": "SN",
"name": "Senegal",
"href": "http://en.wikipedia.org/wiki/Senegal",
"continent": "Africa",
"languages": [
]
},
{
"type": "country",
"iso": "RS",
"name": "Serbia",
"href": "http://en.wikipedia.org/wiki/Serbia",
"continent": "Europe",
"languages": [
]
},
{
"type": "country",
"iso": "SC",
"name": "Seychelles",
"href": "http://en.wikipedia.org/wiki/Seychelles",
"continent": "Africa",
"languages": [
]
},
{
"type": "country",
"iso": "SL",
"name": "Sierra Leone",
"href": "http://en.wikipedia.org/wiki/Sierra_Leone",
"continent": "Africa",
"languages": [
]
},
{
"type": "country",
"iso": "SG",
"name": "Singapore",
"href": "http://en.wikipedia.org/wiki/Singapore",
"continent": "Asia",
"languages": [
{
"_reference": "en"
},
{
"_reference": "zh"
}
]
},
{
"type": "country",
"iso": "SK",
"name": "Slovakia",
"href": "http://en.wikipedia.org/wiki/Slovakia",
"continent": "Europe",
"languages": [
{
"_reference": "sk"
}
]
},
{
"type": "country",
"iso": "SI",
"name": "Slovenia",
"href": "http://en.wikipedia.org/wiki/Slovenia",
"continent": "Europe",
"languages": [
{
"_reference": "sl"
}
]
},
{
"type": "country",
"iso": "SB",
"name": "Solomon Islands",
"href": "http://en.wikipedia.org/wiki/Solomon_Islands",
"continent": "Oceania",
"languages": [
]
},
{
"type": "country",
"iso": "SO",
"name": "Somalia",
"href": "http://en.wikipedia.org/wiki/Somalia",
"continent": "Africa",
"languages": [
{
"_reference": "so"
}
]
},
{
"type": "country",
"iso": "ZA",
"name": "South Africa",
"href": "http://en.wikipedia.org/wiki/South_Africa",
"continent": "Africa",
"languages": [
{
"_reference": "af"
},
{
"_reference": "en"
},
{
"_reference": "nr"
},
{
"_reference": "ss"
},
{
"_reference": "st"
},
{
"_reference": "tn"
},
{
"_reference": "ts"
},
{
"_reference": "ve"
},
{
"_reference": "xh"
},
{
"_reference": "zu"
}
]
},
{
"type": "country",
"iso": "GS",
"name": "South Georgia and the South Sandwich Islands",
"href": "http://en.wikipedia.org/wiki/South_Georgia_and_the_South_Sandwich_Islands",
"continent": "Antarctica",
"languages": [
]
},
{
"type": "country",
"iso": "ES",
"name": "Spain",
"href": "http://en.wikipedia.org/wiki/Spain",
"continent": "Europe",
"languages": [
{
"_reference": "ca"
},
{
"_reference": "es"
},
{
"_reference": "eu"
},
{
"_reference": "gl"
}
]
},
{
"type": "country",
"iso": "LK",
"name": "Sri Lanka",
"href": "http://en.wikipedia.org/wiki/Sri_Lanka",
"continent": "Asia",
"languages": [
]
},
{
"type": "country",
"iso": "SD",
"name": "Sudan",
"href": "http://en.wikipedia.org/wiki/Sudan",
"continent": "Africa",
"languages": [
{
"_reference": "ar"
}
]
},
{
"type": "country",
"iso": "SR",
"name": "Suriname",
"href": "http://en.wikipedia.org/wiki/Suriname",
"continent": "South America",
"languages": [
]
},
{
"type": "country",
"iso": "SJ",
"name": "Svalbard and Jan Mayen",
"href": "http://en.wikipedia.org/wiki/Svalbard_and_Jan_Mayen",
"languages": [
]
},
{
"type": "country",
"iso": "SZ",
"name": "Swaziland",
"href": "http://en.wikipedia.org/wiki/Swaziland",
"continent": "Africa",
"languages": [
]
},
{
"type": "country",
"iso": "SE",
"name": "Sweden",
"href": "http://en.wikipedia.org/wiki/Sweden",
"continent": "Europe",
"languages": [
{
"_reference": "sv"
}
]
},
{
"type": "country",
"iso": "CH",
"name": "Switzerland",
"href": "http://en.wikipedia.org/wiki/Switzerland",
"continent": "Europe",
"languages": [
{
"_reference": "de"
},
{
"_reference": "fr"
},
{
"_reference": "it"
}
]
},
{
"type": "country",
"iso": "SY",
"name": "Syrian Arab Republic",
"href": "http://en.wikipedia.org/wiki/Syria",
"languages": [
{
"_reference": "ar"
},
{
"_reference": "ku"
}
]
},
{
"type": "country",
"iso": "TW",
"name": "Taiwan, Province of China",
"href": "http://en.wikipedia.org/wiki/Republic_of_China",
"languages": [
{
"_reference": "zh"
}
]
},
{
"type": "country",
"iso": "TJ",
"name": "Tajikistan",
"href": "http://en.wikipedia.org/wiki/Tajikistan",
"continent": "Asia",
"languages": [
{
"_reference": "tg"
}
]
},
{
"type": "country",
"iso": "TZ",
"name": "Tanzania, United Republic of",
"href": "http://en.wikipedia.org/wiki/Tanzania",
"languages": [
{
"_reference": "sw"
}
]
},
{
"type": "country",
"iso": "TH",
"name": "Thailand",
"href": "http://en.wikipedia.org/wiki/Thailand",
"continent": "Asia",
"languages": [
{
"_reference": "th"
}
]
},
{
"type": "country",
"iso": "TL",
"name": "Timor-Leste",
"href": "http://en.wikipedia.org/wiki/East_Timor",
"continent": "Asia",
"languages": [
]
},
{
"type": "country",
"iso": "TG",
"name": "Togo",
"href": "http://en.wikipedia.org/wiki/Togo",
"continent": "Africa",
"languages": [
{
"_reference": "ee"
}
]
},
{
"type": "country",
"iso": "TK",
"name": "Tokelau",
"href": "http://en.wikipedia.org/wiki/Tokelau",
"continent": "Oceania",
"languages": [
]
},
{
"type": "country",
"iso": "TO",
"name": "Tonga",
"href": "http://en.wikipedia.org/wiki/Tonga",
"continent": "Oceania",
"languages": [
]
},
{
"type": "country",
"iso": "TT",
"name": "Trinidad and Tobago",
"href": "http://en.wikipedia.org/wiki/Trinidad_and_Tobago",
"continent": "North America",
"languages": [
{
"_reference": "en"
}
]
},
{
"type": "country",
"iso": "TN",
"name": "Tunisia",
"href": "http://en.wikipedia.org/wiki/Tunisia",
"continent": "Africa",
"languages": [
{
"_reference": "ar"
}
]
},
{
"type": "country",
"iso": "TR",
"name": "Turkey",
"href": "http://en.wikipedia.org/wiki/Turkey",
"continent": "Asia",
"languages": [
{
"_reference": "ku"
},
{
"_reference": "tr"
}
]
},
{
"type": "country",
"iso": "TM",
"name": "Turkmenistan",
"href": "http://en.wikipedia.org/wiki/Turkmenistan",
"continent": "Asia",
"languages": [
]
},
{
"type": "country",
"iso": "TC",
"name": "Turks and Caicos Islands",
"href": "http://en.wikipedia.org/wiki/Turks_and_Caicos_Islands",
"continent": "North America",
"languages": [
]
},
{
"type": "country",
"iso": "TV",
"name": "Tuvalu",
"href": "http://en.wikipedia.org/wiki/Tuvalu",
"continent": "Oceania",
"languages": [
]
},
{
"type": "country",
"iso": "UG",
"name": "Uganda",
"href": "http://en.wikipedia.org/wiki/Uganda",
"continent": "Africa",
"languages": [
]
},
{
"type": "country",
"iso": "UA",
"name": "Ukraine",
"href": "http://en.wikipedia.org/wiki/Ukraine",
"continent": "Europe",
"languages": [
{
"_reference": "ru"
},
{
"_reference": "uk"
}
]
},
{
"type": "country",
"iso": "AE",
"name": "United Arab Emirates",
"href": "http://en.wikipedia.org/wiki/United_Arab_Emirates",
"continent": "Asia",
"languages": [
{
"_reference": "ar"
}
]
},
{
"type": "country",
"iso": "GB",
"name": "United Kingdom",
"href": "http://en.wikipedia.org/wiki/United_Kingdom",
"continent": "Europe",
"languages": [
{
"_reference": "cy"
},
{
"_reference": "en"
},
{
"_reference": "gv"
},
{
"_reference": "kw"
}
]
},
{
"type": "country",
"iso": "US",
"name": "United States",
"href": "http://en.wikipedia.org/wiki/United_States",
"continent": "North America",
"languages": [
{
"_reference": "en"
},
{
"_reference": "es"
}
]
},
{
"type": "country",
"iso": "UM",
"name": "United States Minor Outlying Islands",
"href": "http://en.wikipedia.org/wiki/United_States_Minor_Outlying_Islands",
"languages": [
{
"_reference": "en"
}
]
},
{
"type": "country",
"iso": "UY",
"name": "Uruguay",
"href": "http://en.wikipedia.org/wiki/Uruguay",
"continent": "South America",
"languages": [
{
"_reference": "es"
}
]
},
{
"type": "country",
"iso": "UZ",
"name": "Uzbekistan",
"href": "http://en.wikipedia.org/wiki/Uzbekistan",
"continent": "Asia",
"languages": [
{
"_reference": "uz"
}
]
},
{
"type": "country",
"iso": "VU",
"name": "Vanuatu",
"href": "http://en.wikipedia.org/wiki/Vanuatu",
"continent": "Oceania",
"languages": [
]
},
{
"type": "country",
"iso": "VE",
"name": "Venezuela",
"href": "http://en.wikipedia.org/wiki/Venezuela",
"continent": "South America",
"languages": [
{
"_reference": "es"
}
]
},
{
"type": "country",
"iso": "VN",
"name": "Viet Nam",
"href": "http://en.wikipedia.org/wiki/Vietnam",
"languages": [
{
"_reference": "vi"
}
]
},
{
"type": "country",
"iso": "VG",
"name": "Virgin Islands, British",
"href": "http://en.wikipedia.org/wiki/British_Virgin_Islands",
"languages": [
]
},
{
"type": "country",
"iso": "VI",
"name": "Virgin Islands, U.S.",
"href": "http://en.wikipedia.org/wiki/United_States_Virgin_Islands",
"languages": [
{
"_reference": "en"
}
]
},
{
"type": "country",
"iso": "WF",
"name": "Wallis and Futuna",
"href": "http://en.wikipedia.org/wiki/Wallis_and_Futuna",
"continent": "Oceania",
"languages": [
]
},
{
"type": "country",
"iso": "EH",
"name": "Western Sahara",
"href": "http://en.wikipedia.org/wiki/Western_Sahara",
"continent": "Africa",
"languages": [
]
},
{
"type": "country",
"iso": "YE",
"name": "Yemen",
"href": "http://en.wikipedia.org/wiki/Yemen",
"continent": "Asia",
"languages": [
{
"_reference": "ar"
}
]
},
{
"type": "country",
"iso": "ZM",
"name": "Zambia",
"href": "http://en.wikipedia.org/wiki/Zambia",
"continent": "Africa",
"languages": [
]
},
{
"type": "country",
"iso": "ZW",
"name": "Zimbabwe",
"href": "http://en.wikipedia.org/wiki/Zimbabwe",
"continent": "Africa",
"languages": [
{
"_reference": "en"
}
]
}
]
}
/trunk/api/js/dojo1.0/dijit/demos/i18n/flags.css
New file
0,0 → 1,1224
.countryIcon {
background-image: url('flags.png');
}
 
.countryAFIcon {
background-position: 0px 0px;
width: 22px;
height: 15px;
}
.countryAXIcon {
background-position: -22px -1px;
width: 22px;
height: 14px;
}
.countryALIcon {
background-position: -44px 0px;
width: 22px;
height: 15px;
}
.countryDZIcon {
background-position: -66px 0px;
width: 22px;
height: 15px;
}
.countryASIcon {
background-position: -88px -4px;
width: 22px;
height: 11px;
}
.countryADIcon {
background-position: -110px 0px;
width: 22px;
height: 15px;
}
.countryAOIcon {
background-position: -132px 0px;
width: 22px;
height: 15px;
}
.countryAIIcon {
background-position: -154px -4px;
width: 22px;
height: 11px;
}
.countryAQIcon {
background-position: -176px 0px;
width: 22px;
height: 15px;
}
.countryAGIcon {
background-position: -198px 0px;
width: 22px;
height: 15px;
}
.countryARIcon {
background-position: -220px -1px;
width: 22px;
height: 14px;
}
.countryAMIcon {
background-position: -242px -4px;
width: 22px;
height: 11px;
}
.countryAWIcon {
background-position: -264px 0px;
width: 22px;
height: 15px;
}
.countryAUIcon {
background-position: -286px -4px;
width: 22px;
height: 11px;
}
.countryATIcon {
background-position: -308px 0px;
width: 22px;
height: 15px;
}
.countryAZIcon {
background-position: -330px -4px;
width: 22px;
height: 11px;
}
.countryBSIcon {
background-position: -352px -4px;
width: 22px;
height: 11px;
}
.countryBHIcon {
background-position: -374px -2px;
width: 22px;
height: 13px;
}
.countryBDIcon {
background-position: -396px -2px;
width: 22px;
height: 13px;
}
.countryBBIcon {
background-position: -418px 0px;
width: 22px;
height: 15px;
}
.countryBYIcon {
background-position: 0px -24px;
width: 22px;
height: 11px;
}
.countryBEIcon {
background-position: -22px -20px;
width: 22px;
height: 15px;
}
.countryBZIcon {
background-position: -44px -20px;
width: 22px;
height: 15px;
}
.countryBJIcon {
background-position: -66px -20px;
width: 22px;
height: 15px;
}
.countryBMIcon {
background-position: -88px -24px;
width: 22px;
height: 11px;
}
.countryBTIcon {
background-position: -110px -20px;
width: 22px;
height: 15px;
}
.countryBOIcon {
background-position: -132px -20px;
width: 22px;
height: 15px;
}
.countryBAIcon {
background-position: -154px -24px;
width: 22px;
height: 11px;
}
.countryBWIcon {
background-position: -176px -20px;
width: 22px;
height: 15px;
}
.countryBVIcon {
background-position: -198px -19px;
width: 22px;
height: 16px;
}
.countryBRIcon {
background-position: -220px -20px;
width: 22px;
height: 15px;
}
.countryIOIcon {
background-position: -242px -24px;
width: 22px;
height: 11px;
}
.countryBNIcon {
background-position: -264px -24px;
width: 22px;
height: 11px;
}
.countryBGIcon {
background-position: -286px -22px;
width: 22px;
height: 13px;
}
.countryBFIcon {
background-position: -308px -20px;
width: 22px;
height: 15px;
}
.countryBIIcon {
background-position: -330px -22px;
width: 22px;
height: 13px;
}
.countryKHIcon {
background-position: -352px -20px;
width: 22px;
height: 15px;
}
.countryCMIcon {
background-position: -374px -20px;
width: 22px;
height: 15px;
}
.countryCAIcon {
background-position: -396px -24px;
width: 22px;
height: 11px;
}
.countryCVIcon {
background-position: -418px -22px;
width: 22px;
height: 13px;
}
.countryKYIcon {
background-position: 0px -45px;
width: 22px;
height: 11px;
}
.countryCFIcon {
background-position: -22px -41px;
width: 22px;
height: 15px;
}
.countryTDIcon {
background-position: -44px -41px;
width: 22px;
height: 15px;
}
.countryCLIcon {
background-position: -66px -41px;
width: 22px;
height: 15px;
}
.countryCNIcon {
background-position: -88px -41px;
width: 22px;
height: 15px;
}
.countryCXIcon {
background-position: -110px -45px;
width: 22px;
height: 11px;
}
.countryCCIcon {
background-position: -132px -45px;
width: 22px;
height: 11px;
}
.countryCOIcon {
background-position: -154px -41px;
width: 22px;
height: 15px;
}
.countryKMIcon {
background-position: -176px -43px;
width: 22px;
height: 13px;
}
.countryCGIcon {
background-position: -198px -41px;
width: 22px;
height: 15px;
}
.countryCDIcon {
background-position: -220px -41px;
width: 22px;
height: 15px;
}
.countryCKIcon {
background-position: -242px -45px;
width: 22px;
height: 11px;
}
.countryCRIcon {
background-position: -264px -43px;
width: 22px;
height: 13px;
}
.countryCIIcon {
background-position: -286px -41px;
width: 22px;
height: 15px;
}
.countryHRIcon {
background-position: -308px -45px;
width: 22px;
height: 11px;
}
.countryCUIcon {
background-position: -330px -45px;
width: 22px;
height: 11px;
}
.countryCYIcon {
background-position: -352px -43px;
width: 22px;
height: 13px;
}
.countryCZIcon {
background-position: -374px -41px;
width: 22px;
height: 15px;
}
.countryDKIcon {
background-position: -396px -39px;
width: 22px;
height: 17px;
}
.countryDJIcon {
background-position: -418px -41px;
width: 22px;
height: 15px;
}
.countryDMIcon {
background-position: 0px -66px;
width: 22px;
height: 11px;
}
.countryDOIcon {
background-position: -22px -63px;
width: 22px;
height: 14px;
}
.countryECIcon {
background-position: -44px -66px;
width: 22px;
height: 11px;
}
.countryEGIcon {
background-position: -66px -62px;
width: 22px;
height: 15px;
}
.countrySVIcon {
background-position: -88px -65px;
width: 22px;
height: 12px;
}
.countryGQIcon {
background-position: -110px -62px;
width: 22px;
height: 15px;
}
.countryERIcon {
background-position: -132px -66px;
width: 22px;
height: 11px;
}
.countryEEIcon {
background-position: -154px -63px;
width: 22px;
height: 14px;
}
.countryETIcon {
background-position: -176px -66px;
width: 22px;
height: 11px;
}
.countryFKIcon {
background-position: -198px -66px;
width: 22px;
height: 11px;
}
.countryFOIcon {
background-position: -220px -61px;
width: 22px;
height: 16px;
}
.countryFJIcon {
background-position: -242px -66px;
width: 22px;
height: 11px;
}
.countryFIIcon {
background-position: -264px -64px;
width: 22px;
height: 13px;
}
.countryFRIcon {
background-position: -286px -62px;
width: 22px;
height: 15px;
}
.countryGFIcon {
background-position: -308px -62px;
width: 22px;
height: 15px;
}
.countryPFIcon {
background-position: -330px -62px;
width: 22px;
height: 15px;
}
.countryTFIcon {
background-position: -352px -62px;
width: 22px;
height: 15px;
}
.countryGAIcon {
background-position: -374px -60px;
width: 22px;
height: 17px;
}
.countryGMIcon {
background-position: -396px -62px;
width: 22px;
height: 15px;
}
.countryGEIcon {
background-position: -418px -62px;
width: 22px;
height: 15px;
}
.countryDEIcon {
background-position: 0px -88px;
width: 22px;
height: 13px;
}
.countryGHIcon {
background-position: -22px -86px;
width: 22px;
height: 15px;
}
.countryGIIcon {
background-position: -44px -90px;
width: 22px;
height: 11px;
}
.countryGRIcon {
background-position: -66px -86px;
width: 22px;
height: 15px;
}
.countryGLIcon {
background-position: -88px -86px;
width: 22px;
height: 15px;
}
.countryGDIcon {
background-position: -110px -88px;
width: 22px;
height: 13px;
}
.countryGPIcon {
background-position: -132px -86px;
width: 22px;
height: 15px;
}
.countryGUIcon {
background-position: -154px -88px;
width: 22px;
height: 13px;
}
.countryGTIcon {
background-position: -176px -87px;
width: 22px;
height: 14px;
}
.countryGGIcon {
background-position: -198px -86px;
width: 22px;
height: 15px;
}
.countryGNIcon {
background-position: -220px -86px;
width: 22px;
height: 15px;
}
.countryGWIcon {
background-position: -242px -90px;
width: 22px;
height: 11px;
}
.countryGYIcon {
background-position: -264px -88px;
width: 22px;
height: 13px;
}
.countryHTIcon {
background-position: -286px -88px;
width: 22px;
height: 13px;
}
.countryHMIcon {
background-position: -308px -90px;
width: 22px;
height: 11px;
}
.countryVAIcon {
background-position: -330px -81px;
width: 20px;
height: 20px;
}
.countryHNIcon {
background-position: -350px -90px;
width: 22px;
height: 11px;
}
.countryHKIcon {
background-position: -372px -86px;
width: 22px;
height: 15px;
}
.countryHUIcon {
background-position: -394px -90px;
width: 22px;
height: 11px;
}
.countryISIcon {
background-position: -416px -85px;
width: 22px;
height: 16px;
}
.countryINIcon {
background-position: 0px -106px;
width: 22px;
height: 15px;
}
.countryIDIcon {
background-position: -22px -106px;
width: 22px;
height: 15px;
}
.countryIRIcon {
background-position: -44px -108px;
width: 22px;
height: 13px;
}
.countryIQIcon {
background-position: -66px -106px;
width: 22px;
height: 15px;
}
.countryIEIcon {
background-position: -88px -110px;
width: 22px;
height: 11px;
}
.countryIMIcon {
background-position: -110px -110px;
width: 22px;
height: 11px;
}
.countryILIcon {
background-position: -132px -105px;
width: 22px;
height: 16px;
}
.countryITIcon {
background-position: -154px -106px;
width: 22px;
height: 15px;
}
.countryJMIcon {
background-position: -176px -110px;
width: 22px;
height: 11px;
}
.countryJPIcon {
background-position: -198px -106px;
width: 22px;
height: 15px;
}
.countryJEIcon {
background-position: -220px -108px;
width: 22px;
height: 13px;
}
.countryJOIcon {
background-position: -242px -110px;
width: 22px;
height: 11px;
}
.countryKZIcon {
background-position: -264px -110px;
width: 22px;
height: 11px;
}
.countryKEIcon {
background-position: -286px -106px;
width: 22px;
height: 15px;
}
.countryKIIcon {
background-position: -308px -110px;
width: 22px;
height: 11px;
}
.countryKPIcon {
background-position: -330px -110px;
width: 22px;
height: 11px;
}
.countryKRIcon {
background-position: -352px -106px;
width: 22px;
height: 15px;
}
.countryKWIcon {
background-position: -374px -110px;
width: 22px;
height: 11px;
}
.countryKGIcon {
background-position: -396px -108px;
width: 22px;
height: 13px;
}
.countryLAIcon {
background-position: -418px -106px;
width: 22px;
height: 15px;
}
.countryLVIcon {
background-position: 0px -129px;
width: 22px;
height: 11px;
}
.countryLBIcon {
background-position: -22px -125px;
width: 22px;
height: 15px;
}
.countryLSIcon {
background-position: -44px -125px;
width: 22px;
height: 15px;
}
.countryLRIcon {
background-position: -66px -128px;
width: 22px;
height: 12px;
}
.countryLYIcon {
background-position: -88px -129px;
width: 22px;
height: 11px;
}
.countryLIIcon {
background-position: -110px -127px;
width: 22px;
height: 13px;
}
.countryLTIcon {
background-position: -132px -127px;
width: 22px;
height: 13px;
}
.countryLUIcon {
background-position: -154px -127px;
width: 22px;
height: 13px;
}
.countryMOIcon {
background-position: -176px -125px;
width: 22px;
height: 15px;
}
.countryMKIcon {
background-position: -198px -129px;
width: 22px;
height: 11px;
}
.countryMGIcon {
background-position: -220px -125px;
width: 22px;
height: 15px;
}
.countryMWIcon {
background-position: -242px -125px;
width: 22px;
height: 15px;
}
.countryMYIcon {
background-position: -264px -129px;
width: 22px;
height: 11px;
}
.countryMVIcon {
background-position: -286px -125px;
width: 22px;
height: 15px;
}
.countryMLIcon {
background-position: -308px -125px;
width: 22px;
height: 15px;
}
.countryMTIcon {
background-position: -330px -125px;
width: 22px;
height: 15px;
}
.countryMHIcon {
background-position: -352px -128px;
width: 22px;
height: 12px;
}
.countryMQIcon {
background-position: -374px -125px;
width: 22px;
height: 15px;
}
.countryMRIcon {
background-position: -396px -125px;
width: 22px;
height: 15px;
}
.countryMUIcon {
background-position: -418px -125px;
width: 22px;
height: 15px;
}
.countryYTIcon {
background-position: 0px -149px;
width: 22px;
height: 15px;
}
.countryMXIcon {
background-position: -22px -151px;
width: 22px;
height: 13px;
}
.countryFMIcon {
background-position: -44px -152px;
width: 22px;
height: 12px;
}
.countryMDIcon {
background-position: -66px -153px;
width: 22px;
height: 11px;
}
.countryMCIcon {
background-position: -88px -146px;
width: 22px;
height: 18px;
}
.countryMNIcon {
background-position: -110px -153px;
width: 22px;
height: 11px;
}
.countryMEIcon {
background-position: -132px -153px;
width: 22px;
height: 11px;
}
.countryMSIcon {
background-position: -154px -153px;
width: 22px;
height: 11px;
}
.countryMAIcon {
background-position: -176px -149px;
width: 22px;
height: 15px;
}
.countryMZIcon {
background-position: -198px -149px;
width: 22px;
height: 15px;
}
.countryMMIcon {
background-position: -220px -152px;
width: 22px;
height: 12px;
}
.countryNAIcon {
background-position: -242px -149px;
width: 22px;
height: 15px;
}
.countryNRIcon {
background-position: -264px -153px;
width: 22px;
height: 11px;
}
.countryNPIcon {
background-position: -286px -144px;
width: 16px;
height: 20px;
}
.countryNLIcon {
background-position: -302px -149px;
width: 22px;
height: 15px;
}
.countryANIcon {
background-position: -324px -149px;
width: 22px;
height: 15px;
}
.countryNCIcon {
background-position: -346px -149px;
width: 22px;
height: 15px;
}
.countryNZIcon {
background-position: -368px -153px;
width: 22px;
height: 11px;
}
.countryNIIcon {
background-position: -390px -151px;
width: 22px;
height: 13px;
}
.countryNEIcon {
background-position: -412px -145px;
width: 22px;
height: 19px;
}
.countryNGIcon {
background-position: 0px -174px;
width: 22px;
height: 11px;
}
.countryNUIcon {
background-position: -22px -174px;
width: 22px;
height: 11px;
}
.countryNFIcon {
background-position: -44px -174px;
width: 22px;
height: 11px;
}
.countryMPIcon {
background-position: -66px -174px;
width: 22px;
height: 11px;
}
.countryNOIcon {
background-position: -88px -169px;
width: 22px;
height: 16px;
}
.countryOMIcon {
background-position: -110px -174px;
width: 22px;
height: 11px;
}
.countryPKIcon {
background-position: -132px -170px;
width: 22px;
height: 15px;
}
.countryPWIcon {
background-position: -154px -171px;
width: 22px;
height: 14px;
}
.countryPSIcon {
background-position: -176px -174px;
width: 22px;
height: 11px;
}
.countryPAIcon {
background-position: -198px -170px;
width: 22px;
height: 15px;
}
.countryPGIcon {
background-position: -220px -168px;
width: 22px;
height: 17px;
}
.countryPYIcon {
background-position: -242px -172px;
width: 22px;
height: 13px;
}
.countryPEIcon {
background-position: -264px -170px;
width: 22px;
height: 15px;
}
.countryPHIcon {
background-position: -286px -174px;
width: 22px;
height: 11px;
}
.countryPNIcon {
background-position: -308px -174px;
width: 22px;
height: 11px;
}
.countryPLIcon {
background-position: -330px -171px;
width: 22px;
height: 14px;
}
.countryPTIcon {
background-position: -352px -170px;
width: 22px;
height: 15px;
}
.countryPRIcon {
background-position: -374px -170px;
width: 22px;
height: 15px;
}
.countryQAIcon {
background-position: -396px -176px;
width: 22px;
height: 9px;
}
.countryREIcon {
background-position: -418px -170px;
width: 22px;
height: 15px;
}
.countryROIcon {
background-position: 0px -191px;
width: 22px;
height: 15px;
}
.countryRUIcon {
background-position: -22px -191px;
width: 22px;
height: 15px;
}
.countryRWIcon {
background-position: -44px -191px;
width: 22px;
height: 15px;
}
.countrySHIcon {
background-position: -66px -195px;
width: 22px;
height: 11px;
}
.countryKNIcon {
background-position: -88px -191px;
width: 22px;
height: 15px;
}
.countryLCIcon {
background-position: -110px -195px;
width: 22px;
height: 11px;
}
.countryPMIcon {
background-position: -132px -191px;
width: 22px;
height: 15px;
}
.countryVCIcon {
background-position: -154px -191px;
width: 22px;
height: 15px;
}
.countryWSIcon {
background-position: -176px -195px;
width: 22px;
height: 11px;
}
.countrySMIcon {
background-position: -198px -189px;
width: 22px;
height: 17px;
}
.countrySTIcon {
background-position: -220px -195px;
width: 22px;
height: 11px;
}
.countrySAIcon {
background-position: -242px -191px;
width: 22px;
height: 15px;
}
.countrySNIcon {
background-position: -264px -191px;
width: 22px;
height: 15px;
}
.countryRSIcon {
background-position: -286px -191px;
width: 22px;
height: 15px;
}
.countrySCIcon {
background-position: -308px -195px;
width: 22px;
height: 11px;
}
.countrySLIcon {
background-position: -330px -191px;
width: 22px;
height: 15px;
}
.countrySGIcon {
background-position: -352px -191px;
width: 22px;
height: 15px;
}
.countrySKIcon {
background-position: -374px -191px;
width: 22px;
height: 15px;
}
.countrySIIcon {
background-position: -396px -195px;
width: 22px;
height: 11px;
}
.countrySBIcon {
background-position: -418px -195px;
width: 22px;
height: 11px;
}
.countrySOIcon {
background-position: 0px -215px;
width: 22px;
height: 15px;
}
.countryZAIcon {
background-position: -22px -215px;
width: 22px;
height: 15px;
}
.countryGSIcon {
background-position: -44px -219px;
width: 22px;
height: 11px;
}
.countryESIcon {
background-position: -66px -215px;
width: 22px;
height: 15px;
}
.countryLKIcon {
background-position: -88px -219px;
width: 22px;
height: 11px;
}
.countrySDIcon {
background-position: -110px -219px;
width: 22px;
height: 11px;
}
.countrySRIcon {
background-position: -132px -215px;
width: 22px;
height: 15px;
}
.countrySJIcon {
background-position: -154px -214px;
width: 22px;
height: 16px;
}
.countrySZIcon {
background-position: -176px -215px;
width: 22px;
height: 15px;
}
.countrySEIcon {
background-position: -198px -216px;
width: 22px;
height: 14px;
}
.countryCHIcon {
background-position: -220px -210px;
width: 20px;
height: 20px;
}
.countrySYIcon {
background-position: -240px -215px;
width: 22px;
height: 15px;
}
.countryTWIcon {
background-position: -262px -215px;
width: 22px;
height: 15px;
}
.countryTJIcon {
background-position: -284px -219px;
width: 22px;
height: 11px;
}
.countryTZIcon {
background-position: -306px -215px;
width: 22px;
height: 15px;
}
.countryTHIcon {
background-position: -328px -215px;
width: 22px;
height: 15px;
}
.countryTLIcon {
background-position: -350px -219px;
width: 22px;
height: 11px;
}
.countryTGIcon {
background-position: -372px -216px;
width: 22px;
height: 14px;
}
.countryTKIcon {
background-position: -394px -219px;
width: 22px;
height: 11px;
}
.countryTOIcon {
background-position: -416px -219px;
width: 22px;
height: 11px;
}
.countryTTIcon {
background-position: 0px -236px;
width: 22px;
height: 13px;
}
.countryTNIcon {
background-position: -22px -234px;
width: 22px;
height: 15px;
}
.countryTRIcon {
background-position: -44px -234px;
width: 22px;
height: 15px;
}
.countryTMIcon {
background-position: -66px -234px;
width: 22px;
height: 15px;
}
.countryTCIcon {
background-position: -88px -238px;
width: 22px;
height: 11px;
}
.countryTVIcon {
background-position: -110px -238px;
width: 22px;
height: 11px;
}
.countryUGIcon {
background-position: -132px -234px;
width: 22px;
height: 15px;
}
.countryUAIcon {
background-position: -154px -234px;
width: 22px;
height: 15px;
}
.countryAEIcon {
background-position: -176px -238px;
width: 22px;
height: 11px;
}
.countryGBIcon {
background-position: -198px -238px;
width: 22px;
height: 11px;
}
.countryUSIcon {
background-position: -220px -237px;
width: 22px;
height: 12px;
}
.countryUMIcon {
background-position: -242px -237px;
width: 22px;
height: 12px;
}
.countryUYIcon {
background-position: -264px -234px;
width: 22px;
height: 15px;
}
.countryUZIcon {
background-position: -286px -238px;
width: 22px;
height: 11px;
}
.countryVUIcon {
background-position: -308px -236px;
width: 22px;
height: 13px;
}
.countryVEIcon {
background-position: -330px -234px;
width: 22px;
height: 15px;
}
.countryVNIcon {
background-position: -352px -234px;
width: 22px;
height: 15px;
}
.countryVGIcon {
background-position: -374px -238px;
width: 22px;
height: 11px;
}
.countryVIIcon {
background-position: -396px -234px;
width: 22px;
height: 15px;
}
.countryWFIcon {
background-position: -418px -234px;
width: 22px;
height: 15px;
}
.countryEHIcon {
background-position: 0px -257px;
width: 22px;
height: 11px;
}
.countryYEIcon {
background-position: -22px -253px;
width: 22px;
height: 15px;
}
.countryZMIcon {
background-position: -44px -253px;
width: 22px;
height: 15px;
}
.countryZWIcon {
background-position: -66px -257px;
width: 22px;
height: 11px;
}
/trunk/api/js/dojo1.0/dijit/demos/nihao.html
New file
0,0 → 1,88
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Dojo Globalization Hello World</title>
 
<script language="JavaScript" type="text/javascript">
// set the global locale for Dojo from the request parameter
var result = location.href.match(/[\?\&]locale=([^\&]+)/);
djConfig = {locale: result && result[1] || "en-us"}; // default locale is en-us
</script>
 
<script type="text/javascript" src="../../dojo/dojo.js"></script>
<style type="text/css">
@import "../../dojo/resources/dojo.css";
@import "../themes/tundra/tundra.css";
@import "../themes/tundra/tundra_rtl.css";
 
body {padding:1em}
</style>
 
<script language="JavaScript" type="text/javascript">
dojo.require("dojo.date.locale");
dojo.require("dojo.number");
dojo.require("dojo.string");
dojo.require("dojo.parser");
dojo.require("dijit.form.DateTextBox");
 
// load the resource bundle for HelloWorld
dojo.requireLocalization("dijit.demos.nihao", "helloworld");
 
var resourceBundle;
 
dojo.addOnLoad(function(){
// create the DateTextBox from the HTML segment with the dojoType set
dojo.parser.parse();
// make current locale selected
dojo.byId('langList').value = dojo.locale;
 
// get the resource bundle object of the current global locale
resourceBundle = dojo.i18n.getLocalization("dijit.demos.nihao", "helloworld");
 
// do formatting and update the resource strings
dojo.byId('locale').innerHTML = resourceBundle.localeSelect;
dojo.byId('content').innerHTML = dojo.string.substitute(
resourceBundle.contentStr,
[dojo.date.locale.format(new Date(), {selector:'date', formatLength:'long'})]);
dojo.byId('date').innerHTML = resourceBundle.dateSelect;
 
dateChanged();
});
 
function localeChanged(){
open("nihao.html?locale=" + dojo.byId("langList").value, "_self");
}
function dateChanged(){
if(resourceBundle){
dojo.byId('secondsToGo').innerHTML = dojo.string.substitute(
resourceBundle.dateStr,
[dojo.number.format((dijit.byId("dateBox").getValue() - new Date()) / 1000)]);
}
}
</script>
</head>
 
<body class="tundra">
<h1>Dojo Globalization Hello World</h1>
<p>
<span id="locale"></span>
<select id="langList" onchange="localeChanged();" >
<option value="en-us">en-US</option>
<option value="fr-fr">fr-FR</option>
<option value="zh-cn">zh-CN</option>
</select>
</p>
<hr>
<p id="content"></p>
<p>
<span id="date"></span>
<input id="dateBox" type="text" dojoType="dijit.form.DateTextBox" constraints="{formatLength:'long'}" onchange="dateChanged();">
</p>
<p id="secondsToGo"></p>
</body>
</html>
/trunk/api/js/dojo1.0/dijit/demos/chat.html
New file
0,0 → 1,87
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Chat Demo Starter</title>
 
 
<script type="text/javascript" src="../../dojo/dojo.js"
djConfig="isDebug: false, defaultTestTheme: 'soria'"></script>
<script type="text/javascript" src="../tests/_testCommon.js"></script>
 
<style type="text/css">
@import "../../dijit/tests/css/dijitTests.css";
@import "../themes/soria/soria.css";
@import "chat/chat.css";
 
.body { width:720px; margin:0 auto; }
 
.picker {
margin:0 auto;
height:100px;
}
 
.box a { color:#000; text-decoration:none; }
 
.box { border:1px solid #666;
background:#b7cdee url('../themes/soria/images/gradientTopBg.png') repeat-x top left;
background-position:0px -1px;
padding:35px;
padding-top:15px;
padding-bottom:15px;
margin:5px;
font-weight:bold;
-moz-border-radius:7pt;
cursor:pointer;
}
.box:hover {
color:#fff;
background-color:#54f767;
}
</style>
<script type="text/javascript">
 
var _pass = function(/* Event */e){
var href = e.target.getAttribute("href")||null;
if(href){ window.location.href = href; }
}
 
dojo.addOnLoad(function(){
var links = dojo.query(".box");
dojo.forEach(links,function(node){
dojo.connect(node,"onclick","_pass");
});
});
</script>
 
</head>
<body class="soria">
<div class="body">
<h1 class="testTitle">Dojo chat demo preabmle ...</h1>
<p>
There are two examples of chat, using <a
href="http://cometd.org">cometd</a> as a backend and Dojo's
dojox.cometd client as a transport.
</p>
<p>
The first, a simple public chat room, that any live participants
that happen to be online will be able to communicate.
</p>
<div class="dijitInline box" href="chat/community.html">Join Group Chat</div>
<p>The other: the example from the Dojo Book - an example of a
client / operator relationship, where the client chats from an
'existing' page, and the operator has a TabContainer view of
open client chats, and can communicate privately and directly
to the client. The client page demonstrates how this can be used in existing
pages for real-time support. You will need two people for this, or you
are welcome to talk to yourself ...
</p>
<div class="dijitInline">
<div class="dijitInline box" href="chat/client.html">Client Page</div>
<div class="dijitInline box" href="chat/operator.html">Operator Page</div>
</div>
<p>the Chatroom widget source can be found <a href="chat/room.js">here</a>.</p>
</div>
</body>
</html>
/trunk/api/js/dojo1.0/dijit/demos/i18n.html
New file
0,0 → 1,156
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Dijit I18N Demo</title>
 
<script>
var djConfig = {parseOnLoad: true, isDebug: true},
locale,
lang,
bidi;
 
// read in HREF arguments
if(window.location.href.indexOf("?") > -1){
var str = window.location.href.substr(window.location.href.indexOf("?")+1);
var ary = str.split(/&/);
for(var i=0; i<ary.length; i++){
var split = ary[i].split(/=/),
key = split[0],
value = split[1];
switch(key){
case "locale":
djConfig.locale = locale = value;
lang = locale.replace(/-.*/, "");
break;
case "dir":
document.getElementsByTagName("html")[0].dir = value;
bidi = value;
break;
}
}
}
</script>
<style type="text/css">
@import "../../dojo/resources/dojo.css";
@import "../themes/tundra/tundra.css";
@import "../themes/tundra/tundra_rtl.css";
@import "../tests/css/dijitTests.css";
@import "i18n/flags.css";
</style>
 
<script type="text/javascript" src="../../dojo/dojo.js"></script>
 
<script language="JavaScript" type="text/javascript">
dojo.require("dojo.data.ItemFileReadStore");
dojo.require("dijit.Tree");
dojo.require("dijit._Calendar");
dojo.require("dijit.form.DateTextBox");
dojo.require("dijit.form.CurrencyTextBox");
dojo.require("dijit.form.NumberSpinner");
dojo.require("dijit.form.ComboBox");
dojo.require("dijit.Menu");
dojo.require("dojo.parser");
dojo.addOnLoad(function(){
dojo.byId("locale").innerHTML = locale || "default";
dojo.byId("dir").innerHTML = bidi || "default";
});
</script>
 
</head>
<body class="tundra">
<div dojoType="dojo.data.ItemFileReadStore" jsId="store"
url="i18n/data.json"></div>
 
<h1 class="testTitle" dir="ltr">Dijit I18N Demo (locale=<span id="locale"></span> dir=<span id="dir"></span>)</h1>
 
<table width="100%">
<tr>
<td width="30%" style="vertical-align: top;">
<div dojoType="dijit.Tree" id="mytree" store="store" label="Continents" childrenAttr="languages">
<!-- Override all the data access functions to work from the I18N data store -->
<script type="dojo/method" event="getItemChildren" args="item, onComplete">
switch(item ? store.getValue(item, "type") : "top"){
case "top":
return store.fetch({query: {type:'continent'}, onComplete: onComplete});
case "continent":
return store.fetch({query: {continent: store.getValue(item, "iso")}, onComplete: onComplete});
case "country":
return dijit.Tree.prototype.getItemChildren.apply(this, arguments);
}
</script>
<script type="dojo/method" event="mayHaveChildren" args="item">
if(!item){ return true; } // top level
var type = store.getValue(item, "type");
return (type == "continent" || type == "country");
</script>
 
<!-- override functions for display of each node -->
<script type="dojo/method" event="getIconClass" args="item">
var icon =
(item && store.getValue(item, "type") == "country") ?
("countryIcon country" + store.getValue(item, "iso") + "Icon") :
null;
return icon;
</script>
<script type="dojo/method" event="getLabel" args="item">
var localizedName = lang && store.getValue(item, lang);
return localizedName || (store.getLabel(item) + " \u202b" + "(" + store.getIdentity(item) + ")\u202c");
</script>
 
<!-- clicking a node refreshes the page with new locale setting -->
<script type="dojo/method" event="onClick" args="item, node">
var type = store.getValue(item, "type");
if(type == "language"){
var lang = store.getIdentity(item),
locale = lang + "-" + store.getIdentity(node.getParent().item).toLowerCase(),
dir = /ar|fa|he|ps|ur|yi/i.test(lang) ? "rtl" : "ltr";
window.location.href = window.location.href.replace(/\?.*/, "") + "?locale=" + locale + "&dir=" + dir;
}else{
alert("Please click a language, not a country or continent.");
}
</script>
</div>
</td>
<td style="vertical-align: top;">
<p dir="ltr">
Use the tree to select a language or a language/country combo; the page will reload
in the specified locale. Note that tree is also rerendered using the specified language for top level tree items.
Arabic and Hebrew display right-to-left so be sure to try those.
</p>
<input dojoType="dijit._Calendar"/>
 
<p>Some form controls:</p>
 
<label for="date">Date:</label>
<input id="date" dojoType="dijit.form.DateTextBox" value="2006-07-04"/>
<br/>
<label for="spinner">Number spinner:</label>
<input id="spinner" dojoType="dijit.form.NumberSpinner" value="123456789"/>
<br/>
<label for="currency">Currency:</label>
<input id="currency" type="text" name="income1" value="54775.53"
dojoType="dijit.form.CurrencyTextBox"
required="true"
constraints="{fractional:true}"
currency="USD"/>
<br/>
 
<label for="combo1">Simple Combo:</label>
<select id="combo1" dojoType="dijit.form.ComboBox">
<option>option #1</option>
<option>option #2</option>
<option>option #3</option>
</select>
<br/>
<label for="combo2">Combo on languages and countries:</label>
<input id="combo2" dojoType="dijit.form.ComboBox"
value=""
store="store"
searchAttr="name"
name="anything"/>
</td>
</tr>
</table>
</body>
</html>
/trunk/api/js/dojo1.0/dijit/demos/mail/mail.css
New file
0,0 → 1,133
html, body, #main{
width: 100%; /* make the body expand to fill the visible window */
height: 100%;
overflow: hidden; /* erase window level scrollbars */
padding: 0 0 0 0;
margin: 0 0 0 0;
font: 10pt Arial,Myriad,Tahoma,Verdana,sans-serif;
}
 
#banner, #footer {
background-color: #b7cdee;
color: #333;
padding:3px;
}
#banner { text-align:right; }
 
/* list of messages
TODO: If i add the rules below as a plain tr/td it seems to mess up accordion, tree, etc. ???
*/
#listPane tr:hover, #listPane td:hover, .dijitTreeContent:hover {
background-color: #b7cdee;
color: #333;
cursor: pointer;
}
#listPane tr, #listPane td { cursor: pointer; }
 
th {
background-color: #4f8ce5;
color: #fff;
font-weight:: bold !important;
margin:0;
padding:3px;
background-image:url('../../themes/soria/images/gradientTopBg.png');
background-position:0px -1px;
}
 
th .arrowNode { position:relative; right:2px;
width:16px;
height:16px;
}
th.arrowUp .arrowNode {
padding-right: 16px;
background:transparent url("../../themes/soria/images/arrows.png") no-repeat;
background-position:-32px 0px;
}
 
th.arrowDown .arrowNode {
padding-right: 16px;
background:transparent url("../../themes/soria/images/arrows.png") no-repeat;
background-position:0px 0px;
}
 
.demoTable td { padding:3px; }
.demoTable {
border-spacing:0;
padding:0; margin:0;
width:98%;
}
.oddRow {
background-color: #f2f5f9;
}
 
#message {
padding: 8px;
}
 
/* Stuff for new messages */
 
.subject {
background: gray;
width: 100%;
padding-top: 5px;
padding-bottom: 10px;
}
 
.message {
border: black 2px;
}
.messageHeader {
font:12pt Arial,sans-serif;
font-weight:bold;
color:#333;
}
body .dojoSplitPane {
background: #ededff;
overflow: auto;
}
 
/* Icons */
 
.mailIconCancel,
.mailIconOptions,
.mailIconFolderDocuments,
.mailIconFolderInbox,
.mailIconFolderSent,
.mailIconGetMail,
.mailIconNewMessage,
.mailIconMailbox,
.mailIconOk,
.mailIconTrashcanFull {
background-image: url('icons.png'); /* mail icons sprite image */
background-repeat: no-repeat;
width: 16px;
height: 16px;
text-align: center;
padding-right:4px;
}
 
.dj_ie6 .mailIconCancel,
.dj_ie6 .mailIconOptions,
.dj_ie6 .mailIconFolderDocuments,
.dj_ie6 .mailIconFolderInbox,
.dj_ie6 .mailIconFolderSent,
.dj_ie6 .mailIconGetMail,
.dj_ie6 .mailIconNewMessage,
.dj_ie6 .mailIconMailbox,
.dj_ie6 .mailIconOk,
.dj_ie6 .mailIconTrashcanFull {
background-image: url('icons.gif');
}
 
 
.mailIconCancel { background-position: 0px; }
.mailIconOptions { background-position: -22px; }
.mailIconFolderDocuments { background-position: -44px; }
.mailIconFolderInbox { background-position: -66px; }
.mailIconFolderSent { background-position: -88px; }
.mailIconGetMail { background-position: -110px; }
.mailIconNewMessage { background-position: -132px; }
.mailIconMailbox { background-position: -154px; }
.mailIconOk { background-position: -176px; }
.mailIconTrashcanFull { background-position: -198px; }
/trunk/api/js/dojo1.0/dijit/demos/mail/mail.json
New file
0,0 → 1,75
{
identifier: 'id',
label: 'label',
items: [
 
// Hierarchy of folders
{ type: 'folder', id: 'inbox', label:'Inbox', icon:'mailIconFolderInbox' },
{ type: 'folder', id: 'deleted', label:'Trash', icon:'mailIconTrashcanFull' },
{ type: 'folder', id: 'save', label:'Save', folders:[
{ id: 'work', label:'stuff for work'},
{ id: 'fun', label:'stuff for fun'}
]},
 
// Address book (list of people that have sent me messages)
{ type: 'address', id: 'adam', label: "Adam Arlen" },
{ type: 'address', id: 'bob', label: "Bob Baxter" },
{ type: 'address', id: 'carrie', label: "Carrie Crow" },
 
// Flat list of messages (each message lists it's folder)
 
{ type: 'message', id: 'node1.1', folder: 'inbox', label: "today's meeting", sender: "Adam Arlen", sent: "2005-12-19",
text: "Today's meeting is cancelled.<br>Let's do it tomorrow instead.<br><br>Adam" },
{ type: 'message', id: 'node1.2', folder: 'inbox', label: "remaining work", sender: "Bob Baxter", sent: "2005-12-18",
text:
"<p>Hey, we need to talk about who's gonna do all the left over work. Pick a day you want to meet: <div dojoType='dijit._Calendar'></div></p>"
},
{ type: 'message', id: 'node1.3', folder: 'inbox', label: "Hey, look!", sender: "Carrey Crown", sent: "2005-12-17", text:
"This is our new simple mail app. What do you think? <br><br>You can navigate around this demo with arrows and tabs ... <br><br>Regards,<br>Carrey"
},
{ type: 'message', id: 'node1.4', folder: 'inbox', label: "paint", sender: "David Davis", sent: "2005-12-16", text:
"<p>what color is good for the new office?</p><div dojoType='dijit.ColorPalette'></div><p>Let me know soon</p>"
},
{ type: 'message', id: 'node2.1', folder: 'deleted', label: "today's meeting", sender: "Madam Marlen", sent: "2005-12-19",
text: "Today's meeting is cancelled.<br>Let's do it tomorrow instead.<br><br>Madam" },
{ type: 'message', id: 'node2.2', folder: 'deleted', label: "congratulations", sender: "Rob Raxter", sent: "2005-12-18", text: " Good job on that project! " },
{ type: 'message', id: 'node2.3', folder: 'deleted', label: "schedule", sender: "Carrie Crow", sent: "2005-12-17", text: " Are we still on schedule?<br>The deadline is next Friday. " },
{ type: 'message', id: 'node2.4', folder: 'deleted', label: "paint", sender: "Daniel Dooey", sent: "2005-12-16", text:
"<p>what color is good for the new office?</p><div dojoType='dijit.ColorPalette'></div><p>Let me know soon</p>"
},
{ type: 'message', id: 'node3.1', folder: 'work', label: "today's meeting", sender: "Bob Baxter", sent: "2005-12-19",
text: "Today's meeting is cancelled.<br>Unnecessary.<br><br>Bob" },
{ type: 'message', id: 'node3.2', folder: 'work', label: "remaining work", sender: "Bob Baxter", sent: "2005-12-18", text: " Are we still on schedule?<br>The deadline is next Friday. " },
{ type: 'message', id: 'node3.3', folder: 'work', label: "lunch", sender: "Bob Baxter", sent: "2005-12-17", text:
"Where do you want to go for lunch?<br><br><ul><li>Fresh Choice<li>Starbucks<li>Dominos</ul><br><br>Let me know..."
},
{ type: 'message', id: 'node3.4', folder: 'work', label: "paint", sender: "Bob Baxter", sent: "2005-12-16", text:
"<p>what color is good for the new office?</p><div dojoType='dijit.ColorPalette'></div><p>Let me know soon</p>"
},
{ type: 'message', id: 'node4.1', folder: 'fun', label: "today's meeting", sender: "Jack Jackson", sent: "2005-12-19",
text: "Today's meeting is cancelled.<br>Let's do it friday instead.<br><br>Joe" },
{ type: 'message', id: 'node4.2', folder: 'fun', label: "remaining work", sender: "Jack Jackson", sent: "2005-12-18",
text:
"<p>Hey, we need to talk about who's gonna do all the left over work. Pick a day you want to meet: <div dojoType='dijit._Calendar'></div></p>"
},
{ type: 'message', id: 'node4.3', folder: 'fun', label: "lunch", sender: "Jack Jackson", sent: "2005-12-17", text:
"Where do you want to go for lunch?<br><br><ul><li>Indian<li>Mexican<li>Chinese<li>Japanese<li>Pizza</ul><br><br>Let me know..."
},
{ type: 'message', id: 'node4.4', folder: 'fun', label: "paint", sender: "Jack Jackson", sent: "2005-12-16", text:
"<p>what color is good for the new office?</p><div dojoType='dijit.ColorPalette'></div><p>Let me know soon</p>"
},
 
{ type: 'message', id: 'node5.1', folder: 'deleted', label: "today's meeting", sender: "Jill Jones", sent: "2005-12-19",
text: "Today's meeting is cancelled.<br>Let's do it thursday instead.<br><br>Jill" },
{ type: 'message', id: 'node5.2', folder: 'deleted', label: "remaining work", sender: "Jill Jones", sent: "2005-12-18",
text:
"<p>Hey, we need to talk about who's gonna do all the left over work. Pick a day you want to meet: <div dojoType='dijit._Calendar'></div></p>"
},
{ type: 'message', id: 'node5.3', folder: 'deleted', label: "lunch", sender: "Jill Jones", sent: "2005-12-17", text:
"Where do you want to go for lunch?<br><br><ul><li>McDonalds<li>Burger King<li>KFC</ul><br><br>Let me know..."
},
{ type: 'message', id: 'node5.4', folder: 'deleted', label: "paint", sender: "Jill Jones", sent: "2005-12-16", text:
"<p>what color is good for the new office?</p><div dojoType='dijit.ColorPalette'></div><p>Let me know soon</p>"
}
]
}
/trunk/api/js/dojo1.0/dijit/demos/mail/icons.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/demos/mail/icons.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/demos/mail/icons.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/demos/mail/icons.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/demos/mail/newMail.html
New file
0,0 → 1,8
<textarea dojoType="dijit.Editor" style="overflow:auto"
extraPlugins="[{name:'dijit._editor.plugins.LinkDialog'}]"
 
>
<i> This is just a sample message. There is email-address auto-complete in the to: field.
<br><br> give it a whirl.
</i>
</textarea>
/trunk/api/js/dojo1.0/dijit/demos/mail.html
New file
0,0 → 1,435
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Demo Mail Application</title>
 
<style type="text/css">
@import "../../dojo/resources/dojo.css";
@import "../themes/soria/soria.css";
@import "mail/mail.css";
</style>
 
<script type="text/javascript" src="../../dojo/dojo.js"
djConfig="isDebug: false, parseOnLoad: true, defaultTestTheme: 'soria'"></script>
<script type="text/javascript" src="../tests/_testCommon.js"></script>
<!--
<script type="text/javascript" src="../dijit.js"></script>
<script type="text/javascript" src="../dijit-all.js"></script>
-->
<script type="text/javascript">
// Use profile builds, if available. Since we use pretty much all of the widgets, just use dijit-all.
// A custom profile would provide some additional savings.
dojo.require("dijit.dijit");
dojo.require("dijit.dijit-all");
 
dojo.require("dojo.parser");
dojo.require("dojo.data.ItemFileWriteStore");
 
dojo.require("dijit.dijit");
dojo.require("dijit.Declaration");
dojo.require("dijit.form.Button");
dojo.require("dijit.Menu");
dojo.require("dijit.Tree");
dojo.require("dijit.Tooltip");
dojo.require("dijit.Dialog");
dojo.require("dijit.Toolbar");
dojo.require("dijit._Calendar");
dojo.require("dijit.ColorPalette");
dojo.require("dijit.Editor");
dojo.require("dijit._editor.plugins.LinkDialog");
dojo.require("dijit.ProgressBar");
 
dojo.require("dijit.form.ComboBox");
dojo.require("dijit.form.CheckBox");
dojo.require("dijit.form.FilteringSelect");
dojo.require("dijit.form.Textarea");
 
dojo.require("dijit.layout.LayoutContainer");
dojo.require("dijit.layout.SplitContainer");
dojo.require("dijit.layout.AccordionContainer");
dojo.require("dijit.layout.TabContainer");
dojo.require("dijit.layout.ContentPane");
 
dojo.addOnLoad(function(){
dijit.setWaiRole(dojo.body(), "application");
});
var paneId=1;
 
// for "new message" tab closing
function testClose(pane,tab){
return confirm("Are you sure you want to leave your changes?");
}
 
// fake mail download code:
var numMails;
var updateFetchStatus = function(x){
if (x == 0) {
dijit.byId('fakeFetch').update({ indeterminate: false });
return;
}
dijit.byId('fakeFetch').update({ progress: x });
if (x == numMails){
dojo.fadeOut({ node: 'fetchMail', duration:800,
// set progress back to indeterminate. we're cheating, because this
// doesn't actually have any data to "progress"
onEnd: function(){
dijit.byId('fakeFetch').update({ indeterminate: true });
dojo.byId('fetchMail').style.visibility='hidden'; // remove progress bar from tab order
}
}).play();
}
}
var fakeReport = function(percent){
// FIXME: can't set a label on an indeterminate progress bar
// like if(this.indeterminate) { return " connecting."; }
return "Fetching: "+(percent*this.maximum) + " of " + this.maximum + " messages.";
}
var fakeDownload = function(){
dojo.byId('fetchMail').style.visibility='visible';
numMails = Math.floor(Math.random()*10)+1;
dijit.byId('fakeFetch').update({ maximum: numMails, progress:0 });
dojo.fadeIn({ node: 'fetchMail', duration:300 }).play();
for (var i=0; i<=numMails; i++){
setTimeout("updateFetchStatus("+i+")",((i+1)*(Math.floor(Math.random()*100)+400)));
}
}
// fake sending dialog progress bar
var stopSendBar = function(){
dijit.byId('fakeSend').update({indeterminate: false});
dijit.byId('sendDialog').hide();
tabs.selectedChildWidget.onClose = function(){return true;}; // don't want confirm message
tabs.closeChild(tabs.selectedChildWidget);
}
var showSendBar = function(){
dijit.byId('fakeSend').update({ indeterminate: true });
dijit.byId('sendDialog').show();
setTimeout("stopSendBar()", 3000);
}
 
</script>
</head>
<body class="soria">
<div dojoType="dojo.data.ItemFileWriteStore" jsId="mailStore"
url="mail/mail.json"></div>
 
<!-- Inline declaration of a table widget (thanks Alex!) -->
 
<table dojoType="dijit.Declaration"
widgetClass="demo.Table" class="demoTable"
defaults="{ store: null, query: { query: { type: 'message' } }, columns: [ { name: 'From', attribute: 'sender' }, { name: 'Subject', attribute: 'label' }, { name: 'Sent on', attribute: 'sent',
format: function(v){ return dojo.date.locale.format(dojo.date.stamp.fromISOString(v), {selector: 'date'}); }
} ] }">
<thead dojoAttachPoint="head">
<tr dojoAttachPoint="headRow"></tr>
</thead>
<tbody dojoAttachPoint="body">
<tr dojoAttachPoint="row"></tr>
</tbody>
 
<script type="dojo/method">
dojo.forEach(this.columns, function(item, idx){
var icn = item.className||"";
// add a header for each column
var tth = document.createElement("th");
tth.innerHTML = "<span class='arrowNode'></span> "+ item.name;
tth.className = icn;
dojo.connect(tth, "onclick", dojo.hitch(this, "onSort", idx));
this.headRow.appendChild(tth);
 
// and fill in the column cell in the template row
this.row.appendChild(document.createElement("td"));
this.row.lastChild.className = icn;
}, this);
this.runQuery();
</script>
<script type="dojo/method" event="onSort" args="index">
var ca = this.columns[index].attribute;
var qs = this.query.sort;
// clobber an existing sort arrow
dojo.query("> th", this.headRow).removeClass("arrowUp").removeClass("arrowDown");
if(qs && qs[0].attribute == ca){
qs[0].descending = !qs[0].descending;
}else{
this.query.sort = [{
attribute: ca,
descending: false
}];
}
var th = dojo.query("> th", this.headRow)[index];
dojo.addClass(th, (this.query.sort[0].descending ? "arrowUp" : "arrowDown"));
this.runQuery();
</script>
<script type="dojo/method" event="runQuery">
this.query.onBegin = dojo.hitch(this, function(){ dojo.query("tr", this.body).orphan(); });
this.query.onItem = dojo.hitch(this, "onItem");
this.query.onComplete = dojo.hitch(this, function(){
dojo.query("tr:nth-child(odd)", this.body).addClass("oddRow");
dojo.query("tr:nth-child(even)", this.body).removeClass("oddRow");
});
this.store.fetch(this.query);
</script>
<script type="dojo/method" event="onItem" args="item">
var tr = this.row.cloneNode(true);
dojo.query("td", tr).forEach(function(n, i, a){
var tc = this.columns[i];
var tv = this.store.getValue(item, tc.attribute)||"";
if(tc.format){ tv = tc.format(tv, item, this.store); }
n.innerHTML = tv;
}, this);
this.body.appendChild(tr);
dojo.connect(tr, "onclick", this, function(){ this.onClick(item); });
</script>
</table>
 
<!-- Inline declaration for programmatically created "New Message" tabs -->
<div dojoType="dijit.Declaration"
widgetClass="mail.NewMessage">
<div dojoType="dijit.layout.LayoutContainer" dojoAttachPoint="container" title="Composing..." closeable="true">
<div dojoType="dijit.layout.LayoutContainer" layoutAlign="top" style="overflow: visible; z-index: 10; color:#666; ">
<table width=100%>
<tr style="padding-top:5px;">
<td style="padding-left:20px; padding-right: 8px; text-align:right;"><label for="${id}_to">To:</label></td>
<td width=100%>
<select dojoType="dijit.form.ComboBox" id="${id}_to" hasDownArrow="false">
<option></option>
<option>adam@yahoo.com</option>
<option>barry@yahoo.com</option>
<option>bob@yahoo.com</option>
<option>cal@yahoo.com</option>
<option>chris@yahoo.com</option>
<option>courtney@yahoo.com</option>
</select>
</td>
</tr>
<tr>
<td style="padding-left: 20px; padding-right:8px; text-align:right;"><label for="${id}_subject">Subject:</label></td>
<td width=100%>
<select dojoType="dijit.form.ComboBox" id="${id}_subject" hasDownArrow="false">
<option></option>
<option>progress meeting</option>
<option>reports</option>
<option>lunch</option>
<option>vacation</option>
<option>status meeting</option>
</select>
</td>
</tr>
</table>
<hr noshade size="1">
</div>
 
<!-- new messase part -->
<div dojoType="dijit.layout.LayoutContainer" layoutAlign="client">
<!-- FIXME: editor as direct widget here doesn't init -->
<div dojoType="dijit.layout.ContentPane" href="mail/newMail.html"></div>
</div>
<div dojoType="dijit.layout.LayoutContainer" layoutAlign="bottom" align=center>
<button dojoType="dijit.form.Button" iconClass="mailIconOk"
>Send
<script type="dojo/method" event="onClick">
var toField = dojo.byId("${id}_to");
if (toField.value == ""){
alert("Please enter a recipient address");
}else{
showSendBar();
}
</script>
</button>
<button dojoType="dijit.form.Button" iconClass="mailIconCancel"
>Cancel
<script type="dojo/method" event="onClick">
tabs.closeChild(tabs.selectedChildWidget);
</script>
</button>
</div>
 
</div>
</div>
 
 
<div dojoType="dijit.layout.LayoutContainer" id="main">
 
<!-- toolbar with new mail button, etc. -->
<div dojoType="dijit.Toolbar" layoutAlign="top" style="height:25px;">
<div id="getMail" dojoType="dijit.form.ComboButton"
iconClass="mailIconGetMail" optionsTitle="Mail Source Options">
<script type="dojo/method" event="onClick">
fakeDownload();
</script>
<span>Get Mail</span>
<ul dojoType="dijit.Menu">
<li dojoType="dijit.MenuItem" iconClass="mailIconGetMail">Yahoo</li>
<li dojoType="dijit.MenuItem" iconClass="mailIconGetMail">GMail</li>
</ul>
</div>
<span dojoType="dijit.Tooltip" connectId="getMail">Click to download new mail.</span>
 
<button
id="newMsg" dojoType="dijit.form.Button"
iconClass="mailIconNewMessage">
New Message
<script type="dojo/method" event="onClick">
/* make a new tab for composing the message */
var newTab = new mail.NewMessage({id: "new"+paneId }).container;
dojo.mixin(newTab,
{
title: "New Message #" + paneId++,
closable: true,
onClose: testClose
}
);
tabs.addChild(newTab);
tabs.selectChild(newTab);
</script>
</button>
<span dojoType="dijit.Tooltip" connectId="newMsg">Click to compose new message.</span>
 
<button id="options" dojoType="dijit.form.Button" iconClass="mailIconOptions">
Options
<script type="dojo/method" event="onClick">
dijit.byId('optionsDialog').show();
</script>
</button>
<div dojoType="dijit.Tooltip" connectId="options">Set various options</div>
</div>
<div dojoType="dijit.layout.TabContainer" id="tabs" jsId="tabs" layoutAlign="client">
<!-- main section with tree, table, and preview -->
<div dojoType="dijit.layout.SplitContainer"
orientation="horizontal"
sizerWidth="5"
activeSizing="0"
title="Inbox"
>
<div dojoType="dijit.layout.AccordionContainer" sizeMin="20" sizeShare="20">
<div dojoType="dijit.layout.AccordionPane" title="Folders">
<div dojoType="dijit.Tree" id="mytree" store="mailStore"
labelAttr="label" childrenAttr="folders" query="{type:'folder'}" label="Folders">
<script type="dojo/method" event="onClick" args="item">
if(!item){
return; // top level node in tree doesn't correspond to any item
}
/* filter the message list to messages in this folder */
table.query.query = {
type: "message",
folder: mailStore.getValue(item, "id")
};
table.runQuery();
</script>
<script type="dojo/method" event="getIconClass" args="item">
return (item && mailStore.getValue(item, "icon")) || "mailIconFolderDocuments";
</script>
</div>
</div>
<div dojoType="dijit.layout.AccordionPane" title="Address Book">
<span dojoType="demo.Table" store="mailStore"
query="{ query: { type: 'address' }, columns: [ {name: 'User name', attribute: 'label'} ], sort: [ { attribute: 'label' } ] }"
id="addresses" style="width: 100%">
<script type="dojo/method" event="preamble">
this.query = { type: "address" };
this.columns = [
{
name: "Name",
attribute: "label"
}
];
</script>
<script type="dojo/method" event="onClick" args="item">
table.query.query.sender = mailStore.getValue(item, "sender");
delete table.query.query.folder;
table.runQuery();
</script>
</span>
</div>
</div> <!-- end of Accordion -->
 
<div dojoType="dijit.layout.SplitContainer"
id="rightPane"
orientation="vertical"
sizerWidth="5"
activeSizing="0"
sizeMin="50" sizeShare="85"
>
<div id="listPane" dojoType="dijit.layout.ContentPane" sizeMin="20" sizeShare="20">
<span dojoType="demo.Table" store="mailStore"
query="{ query: { type: 'message' }, sort: [ { attribute: 'label' } ] }"
id="foo" jsId="table" style="width: 100%">
<script type="dojo/method" event="onClick" args="item">
var sender = this.store.getValue(item, "sender");
var subject = this.store.getValue(item, "label");
var sent = dojo.date.locale.format(
dojo.date.stamp.fromISOString(this.store.getValue(item, "sent")),
{formatLength: "long", selector: "date"});
var text = this.store.getValue(item, "text");
var messageInner = "<span class='messageHeader'>From: " + sender + "<br>" +
"Subject: "+ subject + "<br>" +
"Date: " + sent + "<br><br></span>" +
text;
dijit.byId("message").setContent(messageInner);
</script>
</span>
</div>
<div id="message" dojoType="dijit.layout.ContentPane" sizeMin="20" sizeShare="80">
<p>
This is a simple application mockup showing some of the dojo widgets:
</p>
<ul>
<li>layout widgets: SplitContainer, LayoutContainer, AccordionContainer</li>
<li>TooltipDialog, Tooltip</li>
<li>Tree</li>
<li>form widgets: Button, DropDownButton, ComboButton, FilteringSelect, ComboBox</li>
<li>Editor</li>
</ul>
<p>
The message list above originally contains all the messages, but you can filter it
by clicking on items in the left Accordion.
Then click on the messages in the above list to display them.
There's no server running, so the app is just a facade and it doesn't really do anything.
<!-- TODO: delete button (we can delete since we are using ItemFileWriteStore -->
</p>
<p>
<span style="font-family: 'Comic Sans MS',Textile,cursive; color: blue; font-style: italic;">-- Bill</span>
</p>
</div>
</div> <!-- end of vertical SplitContainer -->
</div> <!-- end of horizontal SplitContainer -->
</div> <!-- end of TabContainer -->
<div dojoType="dijit.layout.ContentPane" layoutAlign="bottom" id="footer" align="left">
<span style="float:right;">DojoMail v1.0 (demo only)</span>
<div id="fetchMail" style="opacity:0;visibility:hidden">
<div annotate="true" id="fakeFetch" dojoType="dijit.ProgressBar" style="height:15px; width:275px;" indeterminate="true" report="fakeReport"></div>
</div>
</div>
</div> <!-- end of Layoutcontainer -->
 
<div dojoType="dijit.Dialog" id="optionsDialog" title="Options:">
<table>
<tr><td style="text-align:right;"><label for="option1">Transport type:</label></td><td>
<select id="option1" dojoType="dijit.form.FilteringSelect">
<option value="pop3">POP3</option>
<option value="imap">IMAP</option>
</select></td></tr>
<tr><td style="text-align:right;"><label for="option2">Server:</label></td><td><input id="option2" dojoType="dijit.form.TextBox" type="text">
</td></tr>
 
<tr><td style="text-align:right;"><input type="checkbox" id="fooCB" dojoType="dijit.form.CheckBox"></td><td><label for="fooCB">Leave messages on Server</label></td></tr>
<tr><td style="text-align:right;"><input type="checkbox" id="fooCB2" dojoType="dijit.form.CheckBox"></td><td><label for="fooCB2">Remember Password</label></td></tr>
 
<tr><td colspan="2" style="text-align:center;">
<button dojoType="dijit.form.Button" type="submit" iconClass="mailIconOk">OK</button>
<button dojoType="dijit.form.Button" type="submit" iconClass="mailIconCancel">Abort</button>
</td></tr>
</table>
</div>
<div dojoType="dijit.Dialog" id="sendDialog" title="Sending Mail">
<div id="sendMailBar" style="text-align:center">
<div id="fakeSend" dojoType="dijit.ProgressBar" style="height:15px; width:175px;" indeterminate="true" ></div>
</div>
<div>
</body>
</html>
/trunk/api/js/dojo1.0/dijit/InlineEditBox.js
New file
0,0 → 1,417
if(!dojo._hasResource["dijit.InlineEditBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.InlineEditBox"] = true;
dojo.provide("dijit.InlineEditBox");
 
dojo.require("dojo.i18n");
 
dojo.require("dijit._Widget");
dojo.require("dijit._Container");
dojo.require("dijit.form.Button");
dojo.require("dijit.form.TextBox");
 
dojo.requireLocalization("dijit", "common", null, "ko,zh,ja,zh-tw,ru,it,hu,fr,pt,ROOT,pl,es,de,cs");
 
dojo.declare("dijit.InlineEditBox",
dijit._Widget,
{
// summary: An element with in-line edit capabilitites
//
// description:
// Behavior for an existing node (<p>, <div>, <span>, etc.) so that
// when you click it, an editor shows up in place of the original
// text. Optionally, Save and Cancel button are displayed below the edit widget.
// When Save is clicked, the text is pulled from the edit
// widget and redisplayed and the edit widget is again hidden.
// By default a plain Textarea widget is used as the editor (or for
// inline values a TextBox), but you can specify an editor such as
// dijit.Editor (for editing HTML) or a Slider (for adjusting a number).
// An edit widget must support the following API to be used:
// String getDisplayedValue() OR String getValue()
// void setDisplayedValue(String) OR void setValue(String)
// void focus()
//
// editing: Boolean
// Is the node currently in edit mode?
editing: false,
 
// autoSave: Boolean
// Changing the value automatically saves it; don't have to push save button
// (and save button isn't even displayed)
autoSave: true,
 
// buttonSave: String
// Save button label
buttonSave: "",
 
// buttonCancel: String
// Cancel button label
buttonCancel: "",
 
// renderAsHtml: Boolean
// Set this to true if the specified Editor's value should be interpreted as HTML
// rather than plain text (ie, dijit.Editor)
renderAsHtml: false,
 
// editor: String
// Class name for Editor widget
editor: "dijit.form.TextBox",
 
// editorParams: Object
// Set of parameters for editor, like {required: true}
editorParams: {},
 
onChange: function(value){
// summary: User should set this handler to be notified of changes to value
},
 
// width: String
// Width of editor. By default it's width=100% (ie, block mode)
width: "100%",
 
// value: String
// The display value of the widget in read-only mode
value: "",
 
// noValueIndicator: String
// The text that gets displayed when there is no value (so that the user has a place to click to edit)
noValueIndicator: "<span style='font-family: wingdings; text-decoration: underline;'>&nbsp;&nbsp;&nbsp;&nbsp;&#x270d;&nbsp;&nbsp;&nbsp;&nbsp;</span>",
 
postMixInProperties: function(){
this.inherited('postMixInProperties', arguments);
 
// save pointer to original source node, since Widget nulls-out srcNodeRef
this.displayNode = this.srcNodeRef;
 
// connect handlers to the display node
var events = {
ondijitclick: "_onClick",
onmouseover: "_onMouseOver",
onmouseout: "_onMouseOut",
onfocus: "_onMouseOver",
onblur: "_onMouseOut"
};
for(var name in events){
this.connect(this.displayNode, name, events[name]);
}
dijit.setWaiRole(this.displayNode, "button");
if(!this.displayNode.getAttribute("tabIndex")){
this.displayNode.setAttribute("tabIndex", 0);
}
 
if(!this.value){
this.value = this.displayNode.innerHTML;
}
this._setDisplayValue(this.value); // if blank, change to icon for "input needed"
},
 
_onMouseOver: function(){
dojo.addClass(this.displayNode, this.disabled ? "dijitDisabledClickableRegion" : "dijitClickableRegion");
},
 
_onMouseOut: function(){
dojo.removeClass(this.displayNode, this.disabled ? "dijitDisabledClickableRegion" : "dijitClickableRegion");
},
 
_onClick: function(/*Event*/ e){
if(this.disabled){ return; }
if(e){ dojo.stopEvent(e); }
this._onMouseOut();
 
// Since FF gets upset if you move a node while in an event handler for that node...
setTimeout(dojo.hitch(this, "_edit"), 0);
},
 
_edit: function(){
// summary: display the editor widget in place of the original (read only) markup
 
this.editing = true;
 
var editValue =
(this.renderAsHtml ?
this.value :
this.value.replace(/\s*\r?\n\s*/g,"").replace(/<br\/?>/gi, "\n").replace(/&gt;/g,">").replace(/&lt;/g,"<").replace(/&amp;/g,"&"));
 
// Placeholder for edit widget
// Put place holder (and eventually editWidget) before the display node so that it's positioned correctly
// when Calendar dropdown appears, which happens automatically on focus.
var placeholder = document.createElement("span");
dojo.place(placeholder, this.domNode, "before");
 
var ew = this.editWidget = new dijit._InlineEditor({
value: dojo.trim(editValue),
autoSave: this.autoSave,
buttonSave: this.buttonSave,
buttonCancel: this.buttonCancel,
renderAsHtml: this.renderAsHtml,
editor: this.editor,
editorParams: this.editorParams,
style: dojo.getComputedStyle(this.displayNode),
save: dojo.hitch(this, "save"),
cancel: dojo.hitch(this, "cancel"),
width: this.width
}, placeholder);
 
// to avoid screen jitter, we first create the editor with position:absolute, visibility:hidden,
// and then when it's finished rendering, we switch from display mode to editor
var ews = ew.domNode.style;
this.displayNode.style.display="none";
ews.position = "static";
ews.visibility = "visible";
 
// Replace the display widget with edit widget, leaving them both displayed for a brief time so that
// focus can be shifted without incident. (browser may needs some time to render the editor.)
this.domNode = ew.domNode;
setTimeout(function(){
ew.focus();
}, 100);
},
 
_showText: function(/*Boolean*/ focus){
// summary: revert to display mode, and optionally focus on display node
 
// display the read-only text and then quickly hide the editor (to avoid screen jitter)
this.displayNode.style.display="";
var ews = this.editWidget.domNode.style;
ews.position="absolute";
ews.visibility="hidden";
 
this.domNode = this.displayNode;
 
// give the browser some time to render the display node and then shift focus to it
// and hide the edit widget
var _this = this;
setTimeout(function(){
if(focus){
dijit.focus(_this.displayNode);
}
_this.editWidget.destroy();
delete _this.editWidget;
}, 100);
},
 
save: function(/*Boolean*/ focus){
// summary:
// Save the contents of the editor and revert to display mode.
// focus: Boolean
// Focus on the display mode text
this.editing = false;
 
this.value = this.editWidget.getValue() + "";
if(this.renderAsHtml){
this.value = this.value.replace(/&/gm, "&amp;").replace(/</gm, "&lt;").replace(/>/gm, "&gt;").replace(/"/gm, "&quot;")
.replace("\n", "<br>");
}
this._setDisplayValue(this.value);
 
// tell the world that we have changed
this.onChange(this.value);
 
this._showText(focus);
},
 
_setDisplayValue: function(/*String*/ val){
// summary: inserts specified HTML value into this node, or an "input needed" character if node is blank
this.displayNode.innerHTML = val || this.noValueIndicator;
},
 
cancel: function(/*Boolean*/ focus){
// summary:
// Revert to display mode, discarding any changes made in the editor
this.editing = false;
this._showText(focus);
}
});
 
dojo.declare(
"dijit._InlineEditor",
[dijit._Widget, dijit._Templated],
{
// summary:
// internal widget used by InlineEditBox, displayed when in editing mode
// to display the editor and maybe save/cancel buttons. Calling code should
// connect to save/cancel methods to detect when editing is finished
//
// Has mainly the same parameters as InlineEditBox, plus these values:
//
// style: Object
// Set of CSS attributes of display node, to replicate in editor
//
// value: String
// Value as an HTML string or plain text string, depending on renderAsHTML flag
 
templateString:"<fieldset dojoAttachPoint=\"editNode\" waiRole=\"presentation\" style=\"position: absolute; visibility:hidden\" class=\"dijitReset dijitInline\"\n\tdojoAttachEvent=\"onkeypress: _onKeyPress\" \n\t><input dojoAttachPoint=\"editorPlaceholder\"\n\t/><span dojoAttachPoint=\"buttonContainer\"\n\t\t><button class='saveButton' dojoAttachPoint=\"saveButton\" dojoType=\"dijit.form.Button\" dojoAttachEvent=\"onClick:save\">${buttonSave}</button\n\t\t><button class='cancelButton' dojoAttachPoint=\"cancelButton\" dojoType=\"dijit.form.Button\" dojoAttachEvent=\"onClick:cancel\">${buttonCancel}</button\n\t></span\n></fieldset>\n",
widgetsInTemplate: true,
 
postMixInProperties: function(){
this.inherited('postMixInProperties', arguments);
this.messages = dojo.i18n.getLocalization("dijit", "common", this.lang);
dojo.forEach(["buttonSave", "buttonCancel"], function(prop){
if(!this[prop]){ this[prop] = this.messages[prop]; }
}, this);
},
 
postCreate: function(){
// Create edit widget in place in the template
var cls = dojo.getObject(this.editor);
var ew = this.editWidget = new cls(this.editorParams, this.editorPlaceholder);
 
// Copy the style from the source
// Don't copy ALL properties though, just the necessary/applicable ones
var srcStyle = this.style;
dojo.forEach(["fontWeight","fontFamily","fontSize","fontStyle"], function(prop){
ew.focusNode.style[prop]=srcStyle[prop];
}, this);
dojo.forEach(["marginTop","marginBottom","marginLeft", "marginRight"], function(prop){
this.domNode.style[prop]=srcStyle[prop];
}, this);
if(this.width=="100%"){
// block mode
ew.domNode.style.width = "100%"; // because display: block doesn't work for table widgets
this.domNode.style.display="block";
}else{
// inline-block mode
ew.domNode.style.width = this.width + (Number(this.width)==this.width ? "px" : "");
}
 
this.connect(this.editWidget, "onChange", "_onChange");
 
// setting the value of the edit widget will cause a possibly asynchronous onChange() call.
// we need to ignore it, since we are only interested in when the user changes the value.
this._ignoreNextOnChange = true;
(this.editWidget.setDisplayedValue||this.editWidget.setValue).call(this.editWidget, this.value);
 
this._initialText = this.getValue();
 
if(this.autoSave){
this.buttonContainer.style.display="none";
}
},
 
destroy: function(){
this.editWidget.destroy();
this.inherited(arguments);
},
 
getValue: function(){
var ew = this.editWidget;
return ew.getDisplayedValue ? ew.getDisplayedValue() : ew.getValue();
},
 
_onKeyPress: function(e){
// summary: Callback when keypress in the edit box (see template).
// description:
// For autoSave widgets, if Esc/Enter, call cancel/save.
// For non-autoSave widgets, enable save button if the text value is
// different than the original value.
if(this._exitInProgress){
return;
}
if(this.autoSave){
// If Enter/Esc pressed, treat as save/cancel.
if(e.keyCode == dojo.keys.ESCAPE){
dojo.stopEvent(e);
this._exitInProgress = true;
this.cancel(true);
}else if(e.keyCode == dojo.keys.ENTER){
dojo.stopEvent(e);
this._exitInProgress = true;
this.save(true);
}
}else{
var _this = this;
// Delay before calling getValue().
// The delay gives the browser a chance to update the Textarea.
setTimeout(
function(){
_this.saveButton.setDisabled(_this.getValue() == _this._initialText);
}, 100);
}
},
 
_onBlur: function(){
// summary:
// Called when focus moves outside the editor
if(this._exitInProgress){
// when user clicks the "save" button, focus is shifted back to display text, causing this
// function to be called, but in that case don't do anything
return;
}
if(this.autoSave){
this._exitInProgress = true;
if(this.getValue() == this._initialText){
this.cancel(false);
}else{
this.save(false);
}
}
},
 
enableSave: function(){
// summary: User replacable function returning a Boolean to indicate
// if the Save button should be enabled or not - usually due to invalid conditions
return this.editWidget.isValid ? this.editWidget.isValid() : true; // Boolean
},
 
_onChange: function(){
// summary:
// Called when the underlying widget fires an onChange event,
// which means that the user has finished entering the value
if(this._ignoreNextOnChange){
delete this._ignoreNextOnChange;
return;
}
if(this._exitInProgress){
// TODO: the onChange event might happen after the return key for an async widget
// like FilteringSelect. Shouldn't be deleting the edit widget on end-of-edit
return;
}
if(this.autoSave){
this._exitInProgress = true;
this.save(true);
}else{
// in case the keypress event didn't get through (old problem with Textarea that has been fixed
// in theory) or if the keypress event comes too quickly and the value inside the Textarea hasn't
// been updated yet)
this.saveButton.setDisabled((this.getValue() == this._initialText) || !this.enableSave());
}
},
enableSave: function(){
// summary: User replacable function returning a Boolean to indicate
// if the Save button should be enabled or not - usually due to invalid conditions
return this.editWidget.isValid ? this.editWidget.isValid() : true;
},
 
focus: function(){
this.editWidget.focus();
dijit.selectInputText(this.editWidget.focusNode);
}
});
 
dijit.selectInputText = function(/*DomNode*/element){
// summary: select all the text in an input element
 
// TODO: use functions in _editor/selection.js?
var _window = dojo.global;
var _document = dojo.doc;
element = dojo.byId(element);
if(_document["selection"] && dojo.body()["createTextRange"]){ // IE
if(element.createTextRange){
var range = element.createTextRange();
range.moveStart("character", 0);
range.moveEnd("character", element.value.length);
range.select();
}
}else if(_window["getSelection"]){
var selection = _window.getSelection();
// FIXME: does this work on Safari?
if(element.setSelectionRange){
element.setSelectionRange(0, element.value.length);
}
}
element.focus();
};
 
 
}
/trunk/api/js/dojo1.0/dijit/_base/place.js
New file
0,0 → 1,207
if(!dojo._hasResource["dijit._base.place"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit._base.place"] = true;
dojo.provide("dijit._base.place");
 
// ported from dojo.html.util
 
dijit.getViewport = function(){
// summary
// Returns the dimensions and scroll position of the viewable area of a browser window
 
var _window = dojo.global;
var _document = dojo.doc;
 
// get viewport size
var w = 0, h = 0;
if(dojo.isMozilla){
// mozilla
// _window.innerHeight includes the height taken by the scroll bar
// clientHeight is ideal but has DTD issues:
// #4539: FF reverses the roles of body.clientHeight/Width and documentElement.clientHeight/Width based on the DTD!
// check DTD to see whether body or documentElement returns the viewport dimensions using this algorithm:
var minw, minh, maxw, maxh;
if(_document.body.clientWidth>_document.documentElement.clientWidth){
minw = _document.documentElement.clientWidth;
maxw = _document.body.clientWidth;
}else{
maxw = _document.documentElement.clientWidth;
minw = _document.body.clientWidth;
}
if(_document.body.clientHeight>_document.documentElement.clientHeight){
minh = _document.documentElement.clientHeight;
maxh = _document.body.clientHeight;
}else{
maxh = _document.documentElement.clientHeight;
minh = _document.body.clientHeight;
}
w = (maxw > _window.innerWidth) ? minw : maxw;
h = (maxh > _window.innerHeight) ? minh : maxh;
}else if(!dojo.isOpera && _window.innerWidth){
//in opera9, dojo.body().clientWidth should be used, instead
//of window.innerWidth/document.documentElement.clientWidth
//so we have to check whether it is opera
w = _window.innerWidth;
h = _window.innerHeight;
}else if(dojo.isIE && _document.documentElement && _document.documentElement.clientHeight){
w = _document.documentElement.clientWidth;
h = _document.documentElement.clientHeight;
}else if(dojo.body().clientWidth){
// IE5, Opera
w = dojo.body().clientWidth;
h = dojo.body().clientHeight;
}
 
// get scroll position
var scroll = dojo._docScroll();
 
return { w: w, h: h, l: scroll.x, t: scroll.y }; // object
};
 
dijit.placeOnScreen = function(
/* DomNode */ node,
/* Object */ pos,
/* Object */ corners,
/* boolean? */ tryOnly){
// summary:
// Keeps 'node' in the visible area of the screen while trying to
// place closest to pos.x, pos.y. The input coordinates are
// expected to be the desired document position.
//
// Set which corner(s) you want to bind to, such as
//
// placeOnScreen(node, {x: 10, y: 20}, ["TR", "BL"])
//
// The desired x/y will be treated as the topleft(TL)/topright(TR) or
// BottomLeft(BL)/BottomRight(BR) corner of the node. Each corner is tested
// and if a perfect match is found, it will be used. Otherwise, it goes through
// all of the specified corners, and choose the most appropriate one.
//
// NOTE: node is assumed to be absolutely or relatively positioned.
 
var choices = dojo.map(corners, function(corner){ return { corner: corner, pos: pos }; });
 
return dijit._place(node, choices);
}
 
dijit._place = function(/*DomNode*/ node, /* Array */ choices, /* Function */ layoutNode){
// summary:
// Given a list of spots to put node, put it at the first spot where it fits,
// of if it doesn't fit anywhere then the place with the least overflow
// choices: Array
// Array of elements like: {corner: 'TL', pos: {x: 10, y: 20} }
// Above example says to put the top-left corner of the node at (10,20)
// layoutNode: Function(node, orient)
// for things like tooltip, they are displayed differently (and have different dimensions)
// based on their orientation relative to the parent. This adjusts the popup based on orientation.
 
// get {x: 10, y: 10, w: 100, h:100} type obj representing position of
// viewport over document
var view = dijit.getViewport();
 
// This won't work if the node is inside a <div style="position: relative">,
// so reattach it to document.body. (Otherwise, the positioning will be wrong
// and also it might get cutoff)
if(!node.parentNode || String(node.parentNode.tagName).toLowerCase() != "body"){
dojo.body().appendChild(node);
}
 
var best=null;
for(var i=0; i<choices.length; i++){
var corner = choices[i].corner;
var pos = choices[i].pos;
 
// configure node to be displayed in given position relative to button
// (need to do this in order to get an accurate size for the node, because
// a tooltips size changes based on position, due to triangle)
if(layoutNode){
layoutNode(corner);
}
 
// get node's size
var oldDisplay = node.style.display;
var oldVis = node.style.visibility;
node.style.visibility = "hidden";
node.style.display = "";
var mb = dojo.marginBox(node);
node.style.display = oldDisplay;
node.style.visibility = oldVis;
 
// coordinates and size of node with specified corner placed at pos,
// and clipped by viewport
var startX = (corner.charAt(1)=='L' ? pos.x : Math.max(view.l, pos.x - mb.w)),
startY = (corner.charAt(0)=='T' ? pos.y : Math.max(view.t, pos.y - mb.h)),
endX = (corner.charAt(1)=='L' ? Math.min(view.l+view.w, startX+mb.w) : pos.x),
endY = (corner.charAt(0)=='T' ? Math.min(view.t+view.h, startY+mb.h) : pos.y),
width = endX-startX,
height = endY-startY,
overflow = (mb.w-width) + (mb.h-height);
 
if(best==null || overflow<best.overflow){
best = {
corner: corner,
aroundCorner: choices[i].aroundCorner,
x: startX,
y: startY,
w: width,
h: height,
overflow: overflow
};
}
if(overflow==0){
break;
}
}
 
node.style.left = best.x + "px";
node.style.top = best.y + "px";
return best;
}
 
dijit.placeOnScreenAroundElement = function(
/* DomNode */ node,
/* DomNode */ aroundNode,
/* Object */ aroundCorners,
/* Function */ layoutNode){
 
// summary
// Like placeOnScreen, except it accepts aroundNode instead of x,y
// and attempts to place node around it. Uses margin box dimensions.
//
// aroundCorners
// specify Which corner of aroundNode should be
// used to place the node => which corner(s) of node to use (see the
// corners parameter in dijit.placeOnScreen)
// e.g. {'TL': 'BL', 'BL': 'TL'}
//
// layoutNode: Function(node, orient)
// for things like tooltip, they are displayed differently (and have different dimensions)
// based on their orientation relative to the parent. This adjusts the popup based on orientation.
 
 
// get coordinates of aroundNode
aroundNode = dojo.byId(aroundNode);
var oldDisplay = aroundNode.style.display;
aroundNode.style.display="";
// #3172: use the slightly tighter border box instead of marginBox
var aroundNodeW = aroundNode.offsetWidth; //mb.w;
var aroundNodeH = aroundNode.offsetHeight; //mb.h;
var aroundNodePos = dojo.coords(aroundNode, true);
aroundNode.style.display=oldDisplay;
 
// Generate list of possible positions for node
var choices = [];
for(var nodeCorner in aroundCorners){
choices.push( {
aroundCorner: nodeCorner,
corner: aroundCorners[nodeCorner],
pos: {
x: aroundNodePos.x + (nodeCorner.charAt(1)=='L' ? 0 : aroundNodeW),
y: aroundNodePos.y + (nodeCorner.charAt(0)=='T' ? 0 : aroundNodeH)
}
});
}
 
return dijit._place(node, choices, layoutNode);
}
 
}
/trunk/api/js/dojo1.0/dijit/_base/sniff.js
New file
0,0 → 1,43
if(!dojo._hasResource["dijit._base.sniff"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit._base.sniff"] = true;
dojo.provide("dijit._base.sniff");
 
// ported from dojo.html.applyBrowserClass (style.js)
 
// summary:
// Applies pre-set class names based on browser & version to the
// top-level HTML node. Simply doing a require on this module will
// establish this CSS. Modified version of Morris' CSS hack.
(function(){
var d = dojo;
var ie = d.isIE;
var opera = d.isOpera;
var maj = Math.floor;
var classes = {
dj_ie: ie,
// dj_ie55: ie == 5.5,
dj_ie6: maj(ie) == 6,
dj_ie7: maj(ie) == 7,
dj_iequirks: ie && d.isQuirks,
// NOTE: Opera not supported by dijit
dj_opera: opera,
dj_opera8: maj(opera) == 8,
dj_opera9: maj(opera) == 9,
dj_khtml: d.isKhtml,
dj_safari: d.isSafari,
dj_gecko: d.isMozilla
}; // no dojo unsupported browsers
 
for(var p in classes){
if(classes[p]){
var html = dojo.doc.documentElement; //TODO browser-specific DOM magic needed?
if(html.className){
html.className += " " + p;
}else{
html.className = p;
}
}
}
})();
 
}
/trunk/api/js/dojo1.0/dijit/_base/bidi.js
New file
0,0 → 1,13
if(!dojo._hasResource["dijit._base.bidi"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit._base.bidi"] = true;
dojo.provide("dijit._base.bidi");
 
// summary: applies a class to the top of the document for right-to-left stylesheet rules
 
dojo.addOnLoad(function(){
if(!dojo._isBodyLtr()){
dojo.addClass(dojo.body(), "dijitRtl");
}
});
 
}
/trunk/api/js/dojo1.0/dijit/_base/window.js
New file
0,0 → 1,44
if(!dojo._hasResource["dijit._base.window"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit._base.window"] = true;
dojo.provide("dijit._base.window");
 
dijit.getDocumentWindow = function(doc){
// summary
// Get window object associated with document doc
 
// With Safari, there is not way to retrieve the window from the document, so we must fix it.
if(dojo.isSafari && !doc._parentWindow){
/*
This is a Safari specific function that fix the reference to the parent
window from the document object.
*/
var fix=function(win){
win.document._parentWindow=win;
for(var i=0; i<win.frames.length; i++){
fix(win.frames[i]);
}
}
fix(window.top);
}
 
//In some IE versions (at least 6.0), document.parentWindow does not return a
//reference to the real window object (maybe a copy), so we must fix it as well
//We use IE specific execScript to attach the real window reference to
//document._parentWindow for later use
if(dojo.isIE && window !== document.parentWindow && !doc._parentWindow){
/*
In IE 6, only the variable "window" can be used to connect events (others
may be only copies).
*/
doc.parentWindow.execScript("document._parentWindow = window;", "Javascript");
//to prevent memory leak, unset it after use
//another possibility is to add an onUnload handler which seems overkill to me (liucougar)
var win = doc._parentWindow;
doc._parentWindow = null;
return win; // Window
}
 
return doc._parentWindow || doc.parentWindow || doc.defaultView; // Window
}
 
}
/trunk/api/js/dojo1.0/dijit/_base/manager.js
New file
0,0 → 1,98
if(!dojo._hasResource["dijit._base.manager"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit._base.manager"] = true;
dojo.provide("dijit._base.manager");
 
dojo.declare("dijit.WidgetSet", null, {
constructor: function(){
// summary:
// A set of widgets indexed by id
this._hash={};
},
 
add: function(/*Widget*/ widget){
if(this._hash[widget.id]){
throw new Error("Tried to register widget with id==" + widget.id + " but that id is already registered");
}
this._hash[widget.id]=widget;
},
 
remove: function(/*String*/ id){
delete this._hash[id];
},
 
forEach: function(/*Function*/ func){
for(var id in this._hash){
func(this._hash[id]);
}
},
 
filter: function(/*Function*/ filter){
var res = new dijit.WidgetSet();
this.forEach(function(widget){
if(filter(widget)){ res.add(widget); }
});
return res; // dijit.WidgetSet
},
 
byId: function(/*String*/ id){
return this._hash[id];
},
 
byClass: function(/*String*/ cls){
return this.filter(function(widget){ return widget.declaredClass==cls; }); // dijit.WidgetSet
}
});
 
// registry: list of all widgets on page
dijit.registry = new dijit.WidgetSet();
 
dijit._widgetTypeCtr = {};
 
dijit.getUniqueId = function(/*String*/widgetType){
// summary
// Generates a unique id for a given widgetType
 
var id;
do{
id = widgetType + "_" +
(dijit._widgetTypeCtr[widgetType] !== undefined ?
++dijit._widgetTypeCtr[widgetType] : dijit._widgetTypeCtr[widgetType] = 0);
}while(dijit.byId(id));
return id; // String
};
 
 
if(dojo.isIE){
// Only run this for IE because we think it's only necessary in that case,
// and because it causes problems on FF. See bug #3531 for details.
dojo.addOnUnload(function(){
dijit.registry.forEach(function(widget){ widget.destroy(); });
});
}
 
dijit.byId = function(/*String|Widget*/id){
// summary:
// Returns a widget by its id, or if passed a widget, no-op (like dojo.byId())
return (dojo.isString(id)) ? dijit.registry.byId(id) : id; // Widget
};
 
dijit.byNode = function(/* DOMNode */ node){
// summary:
// Returns the widget as referenced by node
return dijit.registry.byId(node.getAttribute("widgetId")); // Widget
};
 
dijit.getEnclosingWidget = function(/* DOMNode */ node){
// summary:
// Returns the widget whose dom tree contains node or null if
// the node is not contained within the dom tree of any widget
while(node){
if(node.getAttribute && node.getAttribute("widgetId")){
return dijit.registry.byId(node.getAttribute("widgetId"));
}
node = node.parentNode;
}
return null;
};
 
}
/trunk/api/js/dojo1.0/dijit/_base/scroll.js
New file
0,0 → 1,33
if(!dojo._hasResource["dijit._base.scroll"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit._base.scroll"] = true;
dojo.provide("dijit._base.scroll");
 
dijit.scrollIntoView = function(/* DomNode */node){
// summary
// Scroll the passed node into view, if it is not.
 
// don't rely on that node.scrollIntoView works just because the function is there
// it doesnt work in Konqueror or Opera even though the function is there and probably
// not safari either
// dont like browser sniffs implementations but sometimes you have to use it
if(dojo.isIE){
//only call scrollIntoView if there is a scrollbar for this menu,
//otherwise, scrollIntoView will scroll the window scrollbar
if(dojo.marginBox(node.parentNode).h <= node.parentNode.scrollHeight){ //PORT was getBorderBox
node.scrollIntoView(false);
}
}else if(dojo.isMozilla){
node.scrollIntoView(false);
}else{
var parent = node.parentNode;
var parentBottom = parent.scrollTop + dojo.marginBox(parent).h; //PORT was getBorderBox
var nodeBottom = node.offsetTop + dojo.marginBox(node).h;
if(parentBottom < nodeBottom){
parent.scrollTop += (nodeBottom - parentBottom);
}else if(parent.scrollTop > node.offsetTop){
parent.scrollTop -= (parent.scrollTop - node.offsetTop);
}
}
};
 
}
/trunk/api/js/dojo1.0/dijit/_base/focus.js
New file
0,0 → 1,330
if(!dojo._hasResource["dijit._base.focus"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit._base.focus"] = true;
dojo.provide("dijit._base.focus");
 
// summary:
// These functions are used to query or set the focus and selection.
//
// Also, they trace when widgets become actived/deactivated,
// so that the widget can fire _onFocus/_onBlur events.
// "Active" here means something similar to "focused", but
// "focus" isn't quite the right word because we keep track of
// a whole stack of "active" widgets. Example: Combobutton --> Menu -->
// MenuItem. The onBlur event for Combobutton doesn't fire due to focusing
// on the Menu or a MenuItem, since they are considered part of the
// Combobutton widget. It only happens when focus is shifted
// somewhere completely different.
 
dojo.mixin(dijit,
{
// _curFocus: DomNode
// Currently focused item on screen
_curFocus: null,
 
// _prevFocus: DomNode
// Previously focused item on screen
_prevFocus: null,
 
isCollapsed: function(){
// summary: tests whether the current selection is empty
var _window = dojo.global;
var _document = dojo.doc;
if(_document.selection){ // IE
return !_document.selection.createRange().text; // Boolean
}else if(_window.getSelection){
var selection = _window.getSelection();
if(dojo.isString(selection)){ // Safari
return !selection; // Boolean
}else{ // Mozilla/W3
return selection.isCollapsed || !selection.toString(); // Boolean
}
}
},
 
getBookmark: function(){
// summary: Retrieves a bookmark that can be used with moveToBookmark to return to the same range
var bookmark, selection = dojo.doc.selection;
if(selection){ // IE
var range = selection.createRange();
if(selection.type.toUpperCase()=='CONTROL'){
bookmark = range.length ? dojo._toArray(range) : null;
}else{
bookmark = range.getBookmark();
}
}else{
if(dojo.global.getSelection){
selection = dojo.global.getSelection();
if(selection){
var range = selection.getRangeAt(0);
bookmark = range.cloneRange();
}
}else{
console.debug("No idea how to store the current selection for this browser!");
}
}
return bookmark; // Array
},
 
moveToBookmark: function(/*Object*/bookmark){
// summary: Moves current selection to a bookmark
// bookmark: this should be a returned object from dojo.html.selection.getBookmark()
var _document = dojo.doc;
if(_document.selection){ // IE
var range;
if(dojo.isArray(bookmark)){
range = _document.body.createControlRange();
dojo.forEach(bookmark, range.addElement);
}else{
range = _document.selection.createRange();
range.moveToBookmark(bookmark);
}
range.select();
}else{ //Moz/W3C
var selection = dojo.global.getSelection && dojo.global.getSelection();
if(selection && selection.removeAllRanges){
selection.removeAllRanges();
selection.addRange(bookmark);
}else{
console.debug("No idea how to restore selection for this browser!");
}
}
},
 
getFocus: function(/*Widget*/menu, /*Window*/ openedForWindow){
// summary:
// Returns the current focus and selection.
// Called when a popup appears (either a top level menu or a dialog),
// or when a toolbar/menubar receives focus
//
// menu:
// the menu that's being opened
//
// openedForWindow:
// iframe in which menu was opened
//
// returns:
// a handle to restore focus/selection
 
return {
// Node to return focus to
node: menu && dojo.isDescendant(dijit._curFocus, menu.domNode) ? dijit._prevFocus : dijit._curFocus,
 
// Previously selected text
bookmark:
!dojo.withGlobal(openedForWindow||dojo.global, dijit.isCollapsed) ?
dojo.withGlobal(openedForWindow||dojo.global, dijit.getBookmark) :
null,
 
openedForWindow: openedForWindow
}; // Object
},
 
focus: function(/*Object || DomNode */ handle){
// summary:
// Sets the focused node and the selection according to argument.
// To set focus to an iframe's content, pass in the iframe itself.
// handle:
// object returned by get(), or a DomNode
 
if(!handle){ return; }
 
var node = "node" in handle ? handle.node : handle, // because handle is either DomNode or a composite object
bookmark = handle.bookmark,
openedForWindow = handle.openedForWindow;
 
// Set the focus
// Note that for iframe's we need to use the <iframe> to follow the parentNode chain,
// but we need to set focus to iframe.contentWindow
if(node){
var focusNode = (node.tagName.toLowerCase()=="iframe") ? node.contentWindow : node;
if(focusNode && focusNode.focus){
try{
// Gecko throws sometimes if setting focus is impossible,
// node not displayed or something like that
focusNode.focus();
}catch(e){/*quiet*/}
}
dijit._onFocusNode(node);
}
 
// set the selection
// do not need to restore if current selection is not empty
// (use keyboard to select a menu item)
if(bookmark && dojo.withGlobal(openedForWindow||dojo.global, dijit.isCollapsed)){
if(openedForWindow){
openedForWindow.focus();
}
try{
dojo.withGlobal(openedForWindow||dojo.global, moveToBookmark, null, [bookmark]);
}catch(e){
/*squelch IE internal error, see http://trac.dojotoolkit.org/ticket/1984 */
}
}
},
 
// List of currently active widgets (focused widget and it's ancestors)
_activeStack: [],
 
registerWin: function(/*Window?*/targetWindow){
// summary:
// Registers listeners on the specified window (either the main
// window or an iframe) to detect when the user has clicked somewhere.
// Anyone that creates an iframe should call this function.
 
if(!targetWindow){
targetWindow = window;
}
 
dojo.connect(targetWindow.document, "onmousedown", null, function(evt){
dijit._justMouseDowned = true;
setTimeout(function(){ dijit._justMouseDowned = false; }, 0);
dijit._onTouchNode(evt.target||evt.srcElement);
});
//dojo.connect(targetWindow, "onscroll", ???);
 
// Listen for blur and focus events on targetWindow's body
var body = targetWindow.document.body || targetWindow.document.getElementsByTagName("body")[0];
if(body){
if(dojo.isIE){
body.attachEvent('onactivate', function(evt){
if(evt.srcElement.tagName.toLowerCase() != "body"){
dijit._onFocusNode(evt.srcElement);
}
});
body.attachEvent('ondeactivate', function(evt){ dijit._onBlurNode(evt.srcElement); });
}else{
body.addEventListener('focus', function(evt){ dijit._onFocusNode(evt.target); }, true);
body.addEventListener('blur', function(evt){ dijit._onBlurNode(evt.target); }, true);
}
}
body = null; // prevent memory leak (apparent circular reference via closure)
},
 
_onBlurNode: function(/*DomNode*/ node){
// summary:
// Called when focus leaves a node.
// Usually ignored, _unless_ it *isn't* follwed by touching another node,
// which indicates that we tabbed off the last field on the page,
// in which case every widget is marked inactive
dijit._prevFocus = dijit._curFocus;
dijit._curFocus = null;
 
var w = dijit.getEnclosingWidget(node);
if (w && w._setStateClass){
w._focused = false;
w._setStateClass();
}
if(dijit._justMouseDowned){
// the mouse down caused a new widget to be marked as active; this blur event
// is coming late, so ignore it.
return;
}
 
// if the blur event isn't followed by a focus event then mark all widgets as inactive.
if(dijit._clearActiveWidgetsTimer){
clearTimeout(dijit._clearActiveWidgetsTimer);
}
dijit._clearActiveWidgetsTimer = setTimeout(function(){
delete dijit._clearActiveWidgetsTimer; dijit._setStack([]); }, 100);
},
 
_onTouchNode: function(/*DomNode*/ node){
// summary
// Callback when node is focused or mouse-downed
 
// ignore the recent blurNode event
if(dijit._clearActiveWidgetsTimer){
clearTimeout(dijit._clearActiveWidgetsTimer);
delete dijit._clearActiveWidgetsTimer;
}
 
// compute stack of active widgets (ex: ComboButton --> Menu --> MenuItem)
var newStack=[];
try{
while(node){
if(node.dijitPopupParent){
node=dijit.byId(node.dijitPopupParent).domNode;
}else if(node.tagName && node.tagName.toLowerCase()=="body"){
// is this the root of the document or just the root of an iframe?
if(node===dojo.body()){
// node is the root of the main document
break;
}
// otherwise, find the iframe this node refers to (can't access it via parentNode,
// need to do this trick instead) and continue tracing up the document
node=dojo.query("iframe").filter(function(iframe){ return iframe.contentDocument.body===node; })[0];
}else{
var id = node.getAttribute && node.getAttribute("widgetId");
if(id){
newStack.unshift(id);
}
node=node.parentNode;
}
}
}catch(e){ /* squelch */ }
 
dijit._setStack(newStack);
},
 
_onFocusNode: function(/*DomNode*/ node){
// summary
// Callback when node is focused
if(node && node.tagName && node.tagName.toLowerCase() == "body"){
return;
}
dijit._onTouchNode(node);
if(node==dijit._curFocus){ return; }
dijit._prevFocus = dijit._curFocus;
dijit._curFocus = node;
dojo.publish("focusNode", [node]);
 
// handle focus/blur styling
var w = dijit.getEnclosingWidget(node);
if (w && w._setStateClass){
w._focused = true;
w._setStateClass();
}
},
 
_setStack: function(newStack){
// summary
// The stack of active widgets has changed. Send out appropriate events and record new stack
 
var oldStack = dijit._activeStack;
dijit._activeStack = newStack;
 
// compare old stack to new stack to see how many elements they have in common
for(var nCommon=0; nCommon<Math.min(oldStack.length, newStack.length); nCommon++){
if(oldStack[nCommon] != newStack[nCommon]){
break;
}
}
 
// for all elements that have gone out of focus, send blur event
for(var i=oldStack.length-1; i>=nCommon; i--){
var widget = dijit.byId(oldStack[i]);
if(widget){
dojo.publish("widgetBlur", [widget]);
if(widget._onBlur){
widget._onBlur();
}
}
}
 
// for all element that have come into focus, send focus event
for(var i=nCommon; i<newStack.length; i++){
var widget = dijit.byId(newStack[i]);
if(widget){
dojo.publish("widgetFocus", [widget]);
if(widget._onFocus){
widget._onFocus();
}
}
}
}
});
 
// register top window and all the iframes it contains
dojo.addOnLoad(dijit.registerWin);
 
}
/trunk/api/js/dojo1.0/dijit/_base/typematic.js
New file
0,0 → 1,139
if(!dojo._hasResource["dijit._base.typematic"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit._base.typematic"] = true;
dojo.provide("dijit._base.typematic");
 
dijit.typematic = {
// summary:
// These functions are used to repetitively call a user specified callback
// method when a specific key or mouse click over a specific DOM node is
// held down for a specific amount of time.
// Only 1 such event is allowed to occur on the browser page at 1 time.
 
_fireEventAndReload: function(){
this._timer = null;
this._callback(++this._count, this._node, this._evt);
this._currentTimeout = (this._currentTimeout < 0) ? this._initialDelay : ((this._subsequentDelay > 1) ? this._subsequentDelay : Math.round(this._currentTimeout * this._subsequentDelay));
this._timer = setTimeout(dojo.hitch(this, "_fireEventAndReload"), this._currentTimeout);
},
 
trigger: function(/*Event*/ evt, /* Object */ _this, /*DOMNode*/ node, /* Function */ callback, /* Object */ obj, /* Number */ subsequentDelay, /* Number */ initialDelay){
// summary:
// Start a timed, repeating callback sequence.
// If already started, the function call is ignored.
// This method is not normally called by the user but can be
// when the normal listener code is insufficient.
// Parameters:
// evt: key or mouse event object to pass to the user callback
// _this: pointer to the user's widget space.
// node: the DOM node object to pass the the callback function
// callback: function to call until the sequence is stopped called with 3 parameters:
// count: integer representing number of repeated calls (0..n) with -1 indicating the iteration has stopped
// node: the DOM node object passed in
// evt: key or mouse event object
// obj: user space object used to uniquely identify each typematic sequence
// subsequentDelay: if > 1, the number of milliseconds until the 3->n events occur
// or else the fractional time multiplier for the next event's delay, default=0.9
// initialDelay: the number of milliseconds until the 2nd event occurs, default=500ms
if(obj != this._obj){
this.stop();
this._initialDelay = initialDelay || 500;
this._subsequentDelay = subsequentDelay || 0.90;
this._obj = obj;
this._evt = evt;
this._node = node;
this._currentTimeout = -1;
this._count = -1;
this._callback = dojo.hitch(_this, callback);
this._fireEventAndReload();
}
},
 
stop: function(){
// summary:
// Stop an ongoing timed, repeating callback sequence.
if(this._timer){
clearTimeout(this._timer);
this._timer = null;
}
if(this._obj){
this._callback(-1, this._node, this._evt);
this._obj = null;
}
},
 
addKeyListener: function(/*DOMNode*/ node, /*Object*/ keyObject, /*Object*/ _this, /*Function*/ callback, /*Number*/ subsequentDelay, /*Number*/ initialDelay){
// summary: Start listening for a specific typematic key.
// keyObject: an object defining the key to listen for.
// key: (mandatory) the keyCode (number) or character (string) to listen for.
// ctrlKey: desired ctrl key state to initiate the calback sequence:
// pressed (true)
// released (false)
// either (unspecified)
// altKey: same as ctrlKey but for the alt key
// shiftKey: same as ctrlKey but for the shift key
// See the trigger method for other parameters.
// Returns an array of dojo.connect handles
return [
dojo.connect(node, "onkeypress", this, function(evt){
if(evt.keyCode == keyObject.keyCode && (!keyObject.charCode || keyObject.charCode == evt.charCode) &&
(keyObject.ctrlKey === undefined || keyObject.ctrlKey == evt.ctrlKey) &&
(keyObject.altKey === undefined || keyObject.altKey == evt.ctrlKey) &&
(keyObject.shiftKey === undefined || keyObject.shiftKey == evt.ctrlKey)){
dojo.stopEvent(evt);
dijit.typematic.trigger(keyObject, _this, node, callback, keyObject, subsequentDelay, initialDelay);
}else if(dijit.typematic._obj == keyObject){
dijit.typematic.stop();
}
}),
dojo.connect(node, "onkeyup", this, function(evt){
if(dijit.typematic._obj == keyObject){
dijit.typematic.stop();
}
})
];
},
 
addMouseListener: function(/*DOMNode*/ node, /*Object*/ _this, /*Function*/ callback, /*Number*/ subsequentDelay, /*Number*/ initialDelay){
// summary: Start listening for a typematic mouse click.
// See the trigger method for other parameters.
// Returns an array of dojo.connect handles
var dc = dojo.connect;
return [
dc(node, "mousedown", this, function(evt){
dojo.stopEvent(evt);
dijit.typematic.trigger(evt, _this, node, callback, node, subsequentDelay, initialDelay);
}),
dc(node, "mouseup", this, function(evt){
dojo.stopEvent(evt);
dijit.typematic.stop();
}),
dc(node, "mouseout", this, function(evt){
dojo.stopEvent(evt);
dijit.typematic.stop();
}),
dc(node, "mousemove", this, function(evt){
dojo.stopEvent(evt);
}),
dc(node, "dblclick", this, function(evt){
dojo.stopEvent(evt);
if(dojo.isIE){
dijit.typematic.trigger(evt, _this, node, callback, node, subsequentDelay, initialDelay);
setTimeout(dijit.typematic.stop, 50);
}
})
];
},
 
addListener: function(/*Node*/ mouseNode, /*Node*/ keyNode, /*Object*/ keyObject, /*Object*/ _this, /*Function*/ callback, /*Number*/ subsequentDelay, /*Number*/ initialDelay){
// summary: Start listening for a specific typematic key and mouseclick.
// This is a thin wrapper to addKeyListener and addMouseListener.
// mouseNode: the DOM node object to listen on for mouse events.
// keyNode: the DOM node object to listen on for key events.
// See the addMouseListener and addKeyListener methods for other parameters.
// Returns an array of dojo.connect handles
return this.addKeyListener(keyNode, keyObject, _this, callback, subsequentDelay, initialDelay).concat(
this.addMouseListener(mouseNode, _this, callback, subsequentDelay, initialDelay));
}
};
 
}
/trunk/api/js/dojo1.0/dijit/_base/wai.js
New file
0,0 → 1,150
if(!dojo._hasResource["dijit._base.wai"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit._base.wai"] = true;
dojo.provide("dijit._base.wai");
 
dijit.wai = {
onload: function(){
// summary:
// Function that detects if we are in high-contrast mode or not,
// and sets up a timer to periodically confirm the value.
// figure out the background-image style property
// and apply that to the image.src property.
// description:
// This must be a named function and not an anonymous
// function, so that the widget parsing code can make sure it
// registers its onload function after this function.
// DO NOT USE "this" within this function.
 
// create div for testing if high contrast mode is on or images are turned off
var div = document.createElement("div");
div.id = "a11yTestNode";
div.style.cssText = 'border: 1px solid;'
+ 'border-color:red green;'
+ 'position: absolute;'
+ 'height: 5px;'
+ 'top: -999px;'
+ 'background-image: url("' + dojo.moduleUrl("dijit", "form/templates/blank.gif") + '");';
dojo.body().appendChild(div);
 
// test it
function check(){
var cs = dojo.getComputedStyle(div);
if(cs){
var bkImg = cs.backgroundImage;
var needsA11y = (cs.borderTopColor==cs.borderRightColor) || (bkImg != null && (bkImg == "none" || bkImg == "url(invalid-url:)" ));
dojo[needsA11y ? "addClass" : "removeClass"](dojo.body(), "dijit_a11y");
}
}
check();
if(dojo.isIE){
setInterval(check, 4000);
}
}
};
 
// Test if computer is in high contrast mode.
// Make sure the a11y test runs first, before widgets are instantiated.
if(dojo.isIE || dojo.isMoz){ // NOTE: checking in Safari messes things up
dojo._loaders.unshift(dijit.wai.onload);
}
 
dojo.mixin(dijit,
{
hasWaiRole: function(/*Element*/ elem){
// Summary: Return true if elem has a role attribute and false if not.
if(elem.hasAttribute){
return elem.hasAttribute("role");
}else{
return elem.getAttribute("role") ? true : false;
}
},
 
getWaiRole: function(/*Element*/ elem){
// Summary: Return the role of elem or an empty string if
// elem does not have a role.
var value = elem.getAttribute("role");
if(value){
var prefixEnd = value.indexOf(":");
return prefixEnd == -1 ? value : value.substring(prefixEnd+1);
}else{
return "";
}
},
 
setWaiRole: function(/*Element*/ elem, /*String*/ role){
// Summary: Set the role on elem. On Firefox 2 and below, "wairole:" is
// prepended to the provided role value.
if(dojo.isFF && dojo.isFF < 3){
elem.setAttribute("role", "wairole:"+role);
}else{
elem.setAttribute("role", role);
}
},
 
removeWaiRole: function(/*Element*/ elem){
// Summary: Removes the role attribute from elem.
elem.removeAttribute("role");
},
 
hasWaiState: function(/*Element*/ elem, /*String*/ state){
// Summary: Return true if elem has a value for the given state and
// false if it does not.
// On Firefox 2 and below, we check for an attribute in namespace
// "http://www.w3.org/2005/07/aaa" with a name of the given state.
// On all other browsers, we check for an attribute called
// "aria-"+state.
if(dojo.isFF && dojo.isFF < 3){
return elem.hasAttributeNS("http://www.w3.org/2005/07/aaa", state);
}else{
if(elem.hasAttribute){
return elem.hasAttribute("aria-"+state);
}else{
return elem.getAttribute("aria-"+state) ? true : false;
}
}
},
 
getWaiState: function(/*Element*/ elem, /*String*/ state){
// Summary: Return the value of the requested state on elem
// or an empty string if elem has no value for state.
// On Firefox 2 and below, we check for an attribute in namespace
// "http://www.w3.org/2005/07/aaa" with a name of the given state.
// On all other browsers, we check for an attribute called
// "aria-"+state.
if(dojo.isFF && dojo.isFF < 3){
return elem.getAttributeNS("http://www.w3.org/2005/07/aaa", state);
}else{
var value = elem.getAttribute("aria-"+state);
return value ? value : "";
}
},
 
setWaiState: function(/*Element*/ elem, /*String*/ state, /*String*/ value){
// Summary: Set state on elem to value.
// On Firefox 2 and below, we set an attribute in namespace
// "http://www.w3.org/2005/07/aaa" with a name of the given state.
// On all other browsers, we set an attribute called
// "aria-"+state.
if(dojo.isFF && dojo.isFF < 3){
elem.setAttributeNS("http://www.w3.org/2005/07/aaa",
"aaa:"+state, value);
}else{
elem.setAttribute("aria-"+state, value);
}
},
 
removeWaiState: function(/*Element*/ elem, /*String*/ state){
// Summary: Removes the given state from elem.
// On Firefox 2 and below, we remove the attribute in namespace
// "http://www.w3.org/2005/07/aaa" with a name of the given state.
// On all other browsers, we remove the attribute called
// "aria-"+state.
if(dojo.isFF && dojo.isFF < 3){
elem.removeAttributeNS("http://www.w3.org/2005/07/aaa", state);
}else{
elem.removeAttribute("aria-"+state);
}
}
});
 
}
/trunk/api/js/dojo1.0/dijit/_base/popup.js
New file
0,0 → 1,240
if(!dojo._hasResource["dijit._base.popup"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit._base.popup"] = true;
dojo.provide("dijit._base.popup");
 
dojo.require("dijit._base.focus");
dojo.require("dijit._base.place");
dojo.require("dijit._base.window");
 
dijit.popup = new function(){
// summary:
// This class is used to show/hide widgets as popups.
//
 
var stack = [],
beginZIndex=1000,
idGen = 1;
 
this.open = function(/*Object*/ args){
// summary:
// Popup the widget at the specified position
//
// args: Object
// popup: Widget
// widget to display,
// parent: Widget
// the button etc. that is displaying this popup
// around: DomNode
// DOM node (typically a button); place popup relative to this node
// orient: Object
// structure specifying possible positions of popup relative to "around" node
// onCancel: Function
// callback when user has canceled the popup by
// 1. hitting ESC or
// 2. by using the popup widget's proprietary cancel mechanism (like a cancel button in a dialog);
// ie: whenever popupWidget.onCancel() is called, args.onCancel is called
// onClose: Function
// callback whenever this popup is closed
// onExecute: Function
// callback when user "executed" on the popup/sub-popup by selecting a menu choice, etc. (top menu only)
//
// examples:
// 1. opening at the mouse position
// dijit.popup.open({popup: menuWidget, x: evt.pageX, y: evt.pageY});
// 2. opening the widget as a dropdown
// dijit.popup.open({parent: this, popup: menuWidget, around: this.domNode, onClose: function(){...} });
//
// Note that whatever widget called dijit.popup.open() should also listen to it's own _onBlur callback
// (fired from _base/focus.js) to know that focus has moved somewhere else and thus the popup should be closed.
 
var widget = args.popup,
orient = args.orient || {'BL':'TL', 'TL':'BL'},
around = args.around,
id = (args.around && args.around.id) ? (args.around.id+"_dropdown") : ("popup_"+idGen++);
 
// make wrapper div to hold widget and possibly hold iframe behind it.
// we can't attach the iframe as a child of the widget.domNode because
// widget.domNode might be a <table>, <ul>, etc.
var wrapper = dojo.doc.createElement("div");
wrapper.id = id;
wrapper.className="dijitPopup";
wrapper.style.zIndex = beginZIndex + stack.length;
wrapper.style.visibility = "hidden";
if(args.parent){
wrapper.dijitPopupParent=args.parent.id;
}
dojo.body().appendChild(wrapper);
 
widget.domNode.style.display="";
wrapper.appendChild(widget.domNode);
 
var iframe = new dijit.BackgroundIframe(wrapper);
 
// position the wrapper node
var best = around ?
dijit.placeOnScreenAroundElement(wrapper, around, orient, widget.orient ? dojo.hitch(widget, "orient") : null) :
dijit.placeOnScreen(wrapper, args, orient == 'R' ? ['TR','BR','TL','BL'] : ['TL','BL','TR','BR']);
 
wrapper.style.visibility = "visible";
// TODO: use effects to fade in wrapper
 
var handlers = [];
 
// Compute the closest ancestor popup that's *not* a child of another popup.
// Ex: For a TooltipDialog with a button that spawns a tree of menus, find the popup of the button.
function getTopPopup(){
for(var pi=stack.length-1; pi > 0 && stack[pi].parent === stack[pi-1].widget; pi--);
return stack[pi];
}
 
// provide default escape and tab key handling
// (this will work for any widget, not just menu)
handlers.push(dojo.connect(wrapper, "onkeypress", this, function(evt){
if(evt.keyCode == dojo.keys.ESCAPE && args.onCancel){
args.onCancel();
}else if(evt.keyCode == dojo.keys.TAB){
dojo.stopEvent(evt);
var topPopup = getTopPopup();
if(topPopup && topPopup.onCancel){
topPopup.onCancel();
}
}
}));
 
// watch for cancel/execute events on the popup and notify the caller
// (for a menu, "execute" means clicking an item)
if(widget.onCancel){
handlers.push(dojo.connect(widget, "onCancel", null, args.onCancel));
}
 
handlers.push(dojo.connect(widget, widget.onExecute ? "onExecute" : "onChange", null, function(){
var topPopup = getTopPopup();
if(topPopup && topPopup.onExecute){
topPopup.onExecute();
}
}));
 
stack.push({
wrapper: wrapper,
iframe: iframe,
widget: widget,
parent: args.parent,
onExecute: args.onExecute,
onCancel: args.onCancel,
onClose: args.onClose,
handlers: handlers
});
 
if(widget.onOpen){
widget.onOpen(best);
}
 
return best;
};
 
this.close = function(/*Widget*/ popup){
// summary:
// Close specified popup and any popups that it parented
while(dojo.some(stack, function(elem){return elem.widget == popup;})){
var top = stack.pop(),
wrapper = top.wrapper,
iframe = top.iframe,
widget = top.widget,
onClose = top.onClose;
if(widget.onClose){
widget.onClose();
}
dojo.forEach(top.handlers, dojo.disconnect);
// #2685: check if the widget still has a domNode so ContentPane can change its URL without getting an error
if(!widget||!widget.domNode){ return; }
dojo.style(widget.domNode, "display", "none");
dojo.body().appendChild(widget.domNode);
iframe.destroy();
dojo._destroyElement(wrapper);
if(onClose){
onClose();
}
}
};
}();
 
dijit._frames = new function(){
// summary: cache of iframes
var queue = [];
 
this.pop = function(){
var iframe;
if(queue.length){
iframe = queue.pop();
iframe.style.display="";
}else{
if(dojo.isIE){
var html="<iframe src='javascript:\"\"'"
+ " style='position: absolute; left: 0px; top: 0px;"
+ "z-index: -1; filter:Alpha(Opacity=\"0\");'>";
iframe = dojo.doc.createElement(html);
}else{
var iframe = dojo.doc.createElement("iframe");
iframe.src = 'javascript:""';
iframe.className = "dijitBackgroundIframe";
}
iframe.tabIndex = -1; // Magic to prevent iframe from getting focus on tab keypress - as style didnt work.
dojo.body().appendChild(iframe);
}
return iframe;
};
 
this.push = function(iframe){
iframe.style.display="";
if(dojo.isIE){
iframe.style.removeExpression("width");
iframe.style.removeExpression("height");
}
queue.push(iframe);
}
}();
 
// fill the queue
if(dojo.isIE && dojo.isIE < 7){
dojo.addOnLoad(function(){
var f = dijit._frames;
dojo.forEach([f.pop()], f.push);
});
}
 
 
dijit.BackgroundIframe = function(/* DomNode */node){
// summary:
// For IE z-index schenanigans. id attribute is required.
//
// description:
// new dijit.BackgroundIframe(node)
// Makes a background iframe as a child of node, that fills
// area (and position) of node
 
if(!node.id){ throw new Error("no id"); }
if((dojo.isIE && dojo.isIE < 7) || (dojo.isFF && dojo.isFF < 3 && dojo.hasClass(dojo.body(), "dijit_a11y"))){
var iframe = dijit._frames.pop();
node.appendChild(iframe);
if(dojo.isIE){
iframe.style.setExpression("width", "document.getElementById('" + node.id + "').offsetWidth");
iframe.style.setExpression("height", "document.getElementById('" + node.id + "').offsetHeight");
}
this.iframe = iframe;
}
};
 
dojo.extend(dijit.BackgroundIframe, {
destroy: function(){
// summary: destroy the iframe
if(this.iframe){
dijit._frames.push(this.iframe);
delete this.iframe;
}
}
});
 
}
/trunk/api/js/dojo1.0/dijit/Dialog.js
New file
0,0 → 1,371
if(!dojo._hasResource["dijit.Dialog"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.Dialog"] = true;
dojo.provide("dijit.Dialog");
 
dojo.require("dojo.dnd.move");
dojo.require("dojo.fx");
 
dojo.require("dijit._Widget");
dojo.require("dijit._Templated");
dojo.require("dijit.layout.ContentPane");
dojo.require("dijit.form.Form");
 
dojo.declare(
"dijit.DialogUnderlay",
[dijit._Widget, dijit._Templated],
{
// summary: the thing that grays out the screen behind the dialog
 
// Template has two divs; outer div is used for fade-in/fade-out, and also to hold background iframe.
// Inner div has opacity specified in CSS file.
templateString: "<div class=dijitDialogUnderlayWrapper id='${id}_underlay'><div class=dijitDialogUnderlay dojoAttachPoint='node'></div></div>",
 
postCreate: function(){
dojo.body().appendChild(this.domNode);
this.bgIframe = new dijit.BackgroundIframe(this.domNode);
},
 
layout: function(){
// summary
// Sets the background to the size of the viewport (rather than the size
// of the document) since we need to cover the whole browser window, even
// if the document is only a few lines long.
 
var viewport = dijit.getViewport();
var is = this.node.style,
os = this.domNode.style;
 
os.top = viewport.t + "px";
os.left = viewport.l + "px";
is.width = viewport.w + "px";
is.height = viewport.h + "px";
 
// process twice since the scroll bar may have been removed
// by the previous resizing
var viewport2 = dijit.getViewport();
if(viewport.w != viewport2.w){ is.width = viewport2.w + "px"; }
if(viewport.h != viewport2.h){ is.height = viewport2.h + "px"; }
},
 
show: function(){
this.domNode.style.display = "block";
this.layout();
if(this.bgIframe.iframe){
this.bgIframe.iframe.style.display = "block";
}
this._resizeHandler = this.connect(window, "onresize", "layout");
},
 
hide: function(){
this.domNode.style.display = "none";
if(this.bgIframe.iframe){
this.bgIframe.iframe.style.display = "none";
}
this.disconnect(this._resizeHandler);
},
 
uninitialize: function(){
if(this.bgIframe){
this.bgIframe.destroy();
}
}
}
);
 
dojo.declare(
"dijit.Dialog",
[dijit.layout.ContentPane, dijit._Templated, dijit.form._FormMixin],
{
// summary:
// Pops up a modal dialog window, blocking access to the screen
// and also graying out the screen Dialog is extended from
// ContentPane so it supports all the same parameters (href, etc.)
 
templateString: null,
templateString:"<div class=\"dijitDialog\">\n\t<div dojoAttachPoint=\"titleBar\" class=\"dijitDialogTitleBar\" tabindex=\"0\" waiRole=\"dialog\">\n\t<span dojoAttachPoint=\"titleNode\" class=\"dijitDialogTitle\">${title}</span>\n\t<span dojoAttachPoint=\"closeButtonNode\" class=\"dijitDialogCloseIcon\" dojoAttachEvent=\"onclick: hide\">\n\t\t<span dojoAttachPoint=\"closeText\" class=\"closeText\">x</span>\n\t</span>\n\t</div>\n\t\t<div dojoAttachPoint=\"containerNode\" class=\"dijitDialogPaneContent\"></div>\n\t<span dojoAttachPoint=\"tabEnd\" dojoAttachEvent=\"onfocus:_cycleFocus\" tabindex=\"0\"></span>\n</div>\n",
 
// open: Boolean
// is True or False depending on state of dialog
open: false,
 
// duration: Integer
// The time in milliseconds it takes the dialog to fade in and out
duration: 400,
 
_lastFocusItem:null,
 
attributeMap: dojo.mixin(dojo.clone(dijit._Widget.prototype.attributeMap),
{title: "titleBar"}),
 
postCreate: function(){
dojo.body().appendChild(this.domNode);
this.inherited("postCreate",arguments);
this.domNode.style.display="none";
this.connect(this, "onExecute", "hide");
this.connect(this, "onCancel", "hide");
},
 
onLoad: function(){
// summary:
// when href is specified we need to reposition the dialog after the data is loaded
this._position();
this.inherited("onLoad",arguments);
},
 
_setup: function(){
// summary:
// stuff we need to do before showing the Dialog for the first
// time (but we defer it until right beforehand, for
// performance reasons)
 
this._modalconnects = [];
 
if(this.titleBar){
this._moveable = new dojo.dnd.Moveable(this.domNode, { handle: this.titleBar });
}
 
this._underlay = new dijit.DialogUnderlay();
 
var node = this.domNode;
this._fadeIn = dojo.fx.combine(
[dojo.fadeIn({
node: node,
duration: this.duration
}),
dojo.fadeIn({
node: this._underlay.domNode,
duration: this.duration,
onBegin: dojo.hitch(this._underlay, "show")
})
]
);
 
this._fadeOut = dojo.fx.combine(
[dojo.fadeOut({
node: node,
duration: this.duration,
onEnd: function(){
node.style.display="none";
}
}),
dojo.fadeOut({
node: this._underlay.domNode,
duration: this.duration,
onEnd: dojo.hitch(this._underlay, "hide")
})
]
);
},
 
uninitialize: function(){
if(this._underlay){
this._underlay.destroy();
}
},
 
_position: function(){
// summary: position modal dialog in center of screen
if(dojo.hasClass(dojo.body(),"dojoMove")){ return; }
var viewport = dijit.getViewport();
var mb = dojo.marginBox(this.domNode);
 
var style = this.domNode.style;
style.left = Math.floor((viewport.l + (viewport.w - mb.w)/2)) + "px";
style.top = Math.floor((viewport.t + (viewport.h - mb.h)/2)) + "px";
},
 
_findLastFocus: function(/*Event*/ evt){
// summary: called from onblur of dialog container to determine the last focusable item
this._lastFocused = evt.target;
},
 
_cycleFocus: function(/*Event*/ evt){
// summary: when tabEnd receives focus, advance focus around to titleBar
 
// on first focus to tabEnd, store the last focused item in dialog
if(!this._lastFocusItem){
this._lastFocusItem = this._lastFocused;
}
this.titleBar.focus();
},
 
_onKey: function(/*Event*/ evt){
if(evt.keyCode){
var node = evt.target;
// see if we are shift-tabbing from titleBar
if(node == this.titleBar && evt.shiftKey && evt.keyCode == dojo.keys.TAB){
if(this._lastFocusItem){
this._lastFocusItem.focus(); // send focus to last item in dialog if known
}
dojo.stopEvent(evt);
}else{
// see if the key is for the dialog
while(node){
if(node == this.domNode){
if(evt.keyCode == dojo.keys.ESCAPE){
this.hide();
}else{
return; // just let it go
}
}
node = node.parentNode;
}
// this key is for the disabled document window
if(evt.keyCode != dojo.keys.TAB){ // allow tabbing into the dialog for a11y
dojo.stopEvent(evt);
// opera won't tab to a div
}else if (!dojo.isOpera){
try{
this.titleBar.focus();
}catch(e){/*squelch*/}
}
}
}
},
 
show: function(){
// summary: display the dialog
 
// first time we show the dialog, there's some initialization stuff to do
if(!this._alreadyInitialized){
this._setup();
this._alreadyInitialized=true;
}
 
if(this._fadeOut.status() == "playing"){
this._fadeOut.stop();
}
 
this._modalconnects.push(dojo.connect(window, "onscroll", this, "layout"));
this._modalconnects.push(dojo.connect(document.documentElement, "onkeypress", this, "_onKey"));
 
// IE doesn't bubble onblur events - use ondeactivate instead
var ev = typeof(document.ondeactivate) == "object" ? "ondeactivate" : "onblur";
this._modalconnects.push(dojo.connect(this.containerNode, ev, this, "_findLastFocus"));
 
dojo.style(this.domNode, "opacity", 0);
this.domNode.style.display="block";
this.open = true;
this._loadCheck(); // lazy load trigger
 
this._position();
 
this._fadeIn.play();
 
this._savedFocus = dijit.getFocus(this);
 
// set timeout to allow the browser to render dialog
setTimeout(dojo.hitch(this, function(){
dijit.focus(this.titleBar);
}), 50);
},
 
hide: function(){
// summary
// Hide the dialog
 
// if we haven't been initialized yet then we aren't showing and we can just return
if(!this._alreadyInitialized){
return;
}
 
if(this._fadeIn.status() == "playing"){
this._fadeIn.stop();
}
this._fadeOut.play();
 
if (this._scrollConnected){
this._scrollConnected = false;
}
dojo.forEach(this._modalconnects, dojo.disconnect);
this._modalconnects = [];
 
this.connect(this._fadeOut,"onEnd",dojo.hitch(this,function(){
dijit.focus(this._savedFocus);
}));
this.open = false;
},
 
layout: function() {
// summary: position the Dialog and the underlay
if(this.domNode.style.display == "block"){
this._underlay.layout();
this._position();
}
}
}
);
 
dojo.declare(
"dijit.TooltipDialog",
[dijit.layout.ContentPane, dijit._Templated, dijit.form._FormMixin],
{
// summary:
// Pops up a dialog that appears like a Tooltip
// title: String
// Description of tooltip dialog (required for a11Y)
title: "",
 
_lastFocusItem: null,
 
templateString: null,
templateString:"<div class=\"dijitTooltipDialog\" >\n\t<div class=\"dijitTooltipContainer\">\n\t\t<div class =\"dijitTooltipContents dijitTooltipFocusNode\" dojoAttachPoint=\"containerNode\" tabindex=\"0\" waiRole=\"dialog\"></div>\n\t</div>\n\t<span dojoAttachPoint=\"tabEnd\" tabindex=\"0\" dojoAttachEvent=\"focus:_cycleFocus\"></span>\n\t<div class=\"dijitTooltipConnector\" ></div>\n</div>\n",
 
postCreate: function(){
this.inherited("postCreate",arguments);
this.connect(this.containerNode, "onkeypress", "_onKey");
 
// IE doesn't bubble onblur events - use ondeactivate instead
var ev = typeof(document.ondeactivate) == "object" ? "ondeactivate" : "onblur";
this.connect(this.containerNode, ev, "_findLastFocus");
this.containerNode.title=this.title;
},
 
orient: function(/*Object*/ corner){
// summary: configure widget to be displayed in given position relative to the button
this.domNode.className="dijitTooltipDialog " +" dijitTooltipAB"+(corner.charAt(1)=='L'?"Left":"Right")+" dijitTooltip"+(corner.charAt(0)=='T' ? "Below" : "Above");
},
 
onOpen: function(/*Object*/ pos){
// summary: called when dialog is displayed
this.orient(pos.corner);
this._loadCheck(); // lazy load trigger
this.containerNode.focus();
},
 
_onKey: function(/*Event*/ evt){
// summary: keep keyboard focus in dialog; close dialog on escape key
if(evt.keyCode == dojo.keys.ESCAPE){
this.onCancel();
}else if(evt.target == this.containerNode && evt.shiftKey && evt.keyCode == dojo.keys.TAB){
if (this._lastFocusItem){
this._lastFocusItem.focus();
}
dojo.stopEvent(evt);
}else if(evt.keyCode == dojo.keys.TAB){
// we want the browser's default tab handling to move focus
// but we don't want the tab to propagate upwards
evt.stopPropagation();
}
},
 
_findLastFocus: function(/*Event*/ evt){
// summary: called from onblur of dialog container to determine the last focusable item
this._lastFocused = evt.target;
},
 
_cycleFocus: function(/*Event*/ evt){
// summary: when tabEnd receives focus, advance focus around to containerNode
 
// on first focus to tabEnd, store the last focused item in dialog
if(!this._lastFocusItem){
this._lastFocusItem = this._lastFocused;
}
this.containerNode.focus();
}
}
);
 
 
}
/trunk/api/js/dojo1.0/dijit/Toolbar.js
New file
0,0 → 1,47
if(!dojo._hasResource["dijit.Toolbar"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.Toolbar"] = true;
dojo.provide("dijit.Toolbar");
 
dojo.require("dijit._Widget");
dojo.require("dijit._Container");
dojo.require("dijit._Templated");
 
dojo.declare(
"dijit.Toolbar",
[dijit._Widget, dijit._Templated, dijit._KeyNavContainer],
{
templateString:
'<div class="dijit dijitToolbar" waiRole="toolbar" tabIndex="${tabIndex}" dojoAttachPoint="containerNode">' +
// '<table style="table-layout: fixed" class="dijitReset dijitToolbarTable">' + // factor out style
// '<tr class="dijitReset" dojoAttachPoint="containerNode"></tr>'+
// '</table>' +
'</div>',
 
tabIndex: "0",
 
postCreate: function(){
this.connectKeyNavHandlers(
this.isLeftToRight() ? [dojo.keys.LEFT_ARROW] : [dojo.keys.RIGHT_ARROW],
this.isLeftToRight() ? [dojo.keys.RIGHT_ARROW] : [dojo.keys.LEFT_ARROW]
);
},
 
startup: function(){
this.startupKeyNavChildren();
}
}
);
 
// Combine with dijit.MenuSeparator??
dojo.declare(
"dijit.ToolbarSeparator",
[ dijit._Widget, dijit._Templated ],
{
// summary
// A line between two menu items
templateString: '<div class="dijitToolbarSeparator dijitInline"></div>',
postCreate: function(){ dojo.setSelectable(this.domNode, false); },
isFocusable: function(){ return false; }
});
 
}
/trunk/api/js/dojo1.0/dijit/Menu.js
New file
0,0 → 1,457
if(!dojo._hasResource["dijit.Menu"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.Menu"] = true;
dojo.provide("dijit.Menu");
 
dojo.require("dijit._Widget");
dojo.require("dijit._Container");
dojo.require("dijit._Templated");
 
dojo.declare(
"dijit.Menu",
[dijit._Widget, dijit._Templated, dijit._KeyNavContainer],
{
constructor: function() {
this._bindings = [];
},
 
templateString:
'<table class="dijit dijitMenu dijitReset dijitMenuTable" waiRole="menu" dojoAttachEvent="onkeypress:_onKeyPress">' +
'<tbody class="dijitReset" dojoAttachPoint="containerNode"></tbody>'+
'</table>',
 
// targetNodeIds: String[]
// Array of dom node ids of nodes to attach to.
// Fill this with nodeIds upon widget creation and it becomes context menu for those nodes.
targetNodeIds: [],
 
// contextMenuForWindow: Boolean
// if true, right clicking anywhere on the window will cause this context menu to open;
// if false, must specify targetNodeIds
contextMenuForWindow: false,
 
// parentMenu: Widget
// pointer to menu that displayed me
parentMenu: null,
 
// popupDelay: Integer
// number of milliseconds before hovering (without clicking) causes the popup to automatically open
popupDelay: 500,
 
// _contextMenuWithMouse: Boolean
// used to record mouse and keyboard events to determine if a context
// menu is being opened with the keyboard or the mouse
_contextMenuWithMouse: false,
 
postCreate: function(){
if(this.contextMenuForWindow){
this.bindDomNode(dojo.body());
}else{
dojo.forEach(this.targetNodeIds, this.bindDomNode, this);
}
this.connectKeyNavHandlers([dojo.keys.UP_ARROW], [dojo.keys.DOWN_ARROW]);
},
 
startup: function(){
dojo.forEach(this.getChildren(), function(child){ child.startup(); });
this.startupKeyNavChildren();
},
 
onExecute: function(){
// summary: attach point for notification about when a menu item has been executed
},
 
onCancel: function(/*Boolean*/ closeAll){
// summary: attach point for notification about when the user cancels the current menu
},
 
_moveToPopup: function(/*Event*/ evt){
if(this.focusedChild && this.focusedChild.popup && !this.focusedChild.disabled){
this.focusedChild._onClick(evt);
}
},
 
_onKeyPress: function(/*Event*/ evt){
// summary
// Handle keyboard based menu navigation.
if(evt.ctrlKey || evt.altKey){ return; }
 
switch(evt.keyCode){
case dojo.keys.RIGHT_ARROW:
this._moveToPopup(evt);
dojo.stopEvent(evt);
break;
case dojo.keys.LEFT_ARROW:
if(this.parentMenu){
this.onCancel(false);
}else{
dojo.stopEvent(evt);
}
break;
}
},
 
onItemHover: function(/*MenuItem*/ item){
this.focusChild(item);
 
if(this.focusedChild.popup && !this.focusedChild.disabled && !this.hover_timer){
this.hover_timer = setTimeout(dojo.hitch(this, "_openPopup"), this.popupDelay);
}
},
 
_onChildBlur: function(item){
// Close all popups that are open and descendants of this menu
dijit.popup.close(item.popup);
item._blur();
this._stopPopupTimer();
},
 
onItemUnhover: function(/*MenuItem*/ item){
},
 
_stopPopupTimer: function(){
if(this.hover_timer){
clearTimeout(this.hover_timer);
this.hover_timer = null;
}
},
 
_getTopMenu: function(){
for(var top=this; top.parentMenu; top=top.parentMenu);
return top;
},
 
onItemClick: function(/*Widget*/ item){
// summary: user defined function to handle clicks on an item
// summary: internal function for clicks
if(item.disabled){ return false; }
 
if(item.popup){
if(!this.is_open){
this._openPopup();
}
}else{
// before calling user defined handler, close hierarchy of menus
// and restore focus to place it was when menu was opened
this.onExecute();
 
// user defined handler for click
item.onClick();
}
},
 
// thanks burstlib!
_iframeContentWindow: function(/* HTMLIFrameElement */iframe_el) {
// summary
// returns the window reference of the passed iframe
var win = dijit.getDocumentWindow(dijit.Menu._iframeContentDocument(iframe_el)) ||
// Moz. TODO: is this available when defaultView isn't?
dijit.Menu._iframeContentDocument(iframe_el)['__parent__'] ||
(iframe_el.name && document.frames[iframe_el.name]) || null;
return win; // Window
},
 
_iframeContentDocument: function(/* HTMLIFrameElement */iframe_el){
// summary
// returns a reference to the document object inside iframe_el
var doc = iframe_el.contentDocument // W3
|| (iframe_el.contentWindow && iframe_el.contentWindow.document) // IE
|| (iframe_el.name && document.frames[iframe_el.name] && document.frames[iframe_el.name].document)
|| null;
return doc; // HTMLDocument
},
 
bindDomNode: function(/*String|DomNode*/ node){
// summary: attach menu to given node
node = dojo.byId(node);
 
//TODO: this is to support context popups in Editor. Maybe this shouldn't be in dijit.Menu
var win = dijit.getDocumentWindow(node.ownerDocument);
if(node.tagName.toLowerCase()=="iframe"){
win = this._iframeContentWindow(node);
node = dojo.withGlobal(win, dojo.body);
}
 
// to capture these events at the top level,
// attach to document, not body
var cn = (node == dojo.body() ? dojo.doc : node);
 
node[this.id] = this._bindings.push([
dojo.connect(cn, "oncontextmenu", this, "_openMyself"),
dojo.connect(cn, "onkeydown", this, "_contextKey"),
dojo.connect(cn, "onmousedown", this, "_contextMouse")
]);
},
 
unBindDomNode: function(/*String|DomNode*/ nodeName){
// summary: detach menu from given node
var node = dojo.byId(nodeName);
var bid = node[this.id]-1, b = this._bindings[bid];
dojo.forEach(b, dojo.disconnect);
delete this._bindings[bid];
},
 
_contextKey: function(e){
this._contextMenuWithMouse = false;
if (e.keyCode == dojo.keys.F10) {
dojo.stopEvent(e);
if (e.shiftKey && e.type=="keydown") {
// FF: copying the wrong property from e will cause the system
// context menu to appear in spite of stopEvent. Don't know
// exactly which properties cause this effect.
var _e = { target: e.target, pageX: e.pageX, pageY: e.pageY };
_e.preventDefault = _e.stopPropagation = function(){};
// IE: without the delay, focus work in "open" causes the system
// context menu to appear in spite of stopEvent.
window.setTimeout(dojo.hitch(this, function(){ this._openMyself(_e); }), 1);
}
}
},
 
_contextMouse: function(e){
this._contextMenuWithMouse = true;
},
 
_openMyself: function(/*Event*/ e){
// summary:
// Internal function for opening myself when the user
// does a right-click or something similar
 
dojo.stopEvent(e);
 
// Get coordinates.
// if we are opening the menu with the mouse or on safari open
// the menu at the mouse cursor
// (Safari does not have a keyboard command to open the context menu
// and we don't currently have a reliable way to determine
// _contextMenuWithMouse on Safari)
var x,y;
if(dojo.isSafari || this._contextMenuWithMouse){
x=e.pageX;
y=e.pageY;
}else{
// otherwise open near e.target
var coords = dojo.coords(e.target, true);
x = coords.x + 10;
y = coords.y + 10;
}
 
var self=this;
var savedFocus = dijit.getFocus(this);
function closeAndRestoreFocus(){
// user has clicked on a menu or popup
dijit.focus(savedFocus);
dijit.popup.close(self);
}
dijit.popup.open({
popup: this,
x: x,
y: y,
onExecute: closeAndRestoreFocus,
onCancel: closeAndRestoreFocus,
orient: this.isLeftToRight() ? 'L' : 'R'
});
this.focus();
 
this._onBlur = function(){
// Usually the parent closes the child widget but if this is a context
// menu then there is no parent
dijit.popup.close(this);
// don't try to restore focus; user has clicked another part of the screen
// and set focus there
}
},
 
onOpen: function(/*Event*/ e){
// summary
// Open menu relative to the mouse
this.isShowingNow = true;
},
 
onClose: function(){
// summary: callback when this menu is closed
this._stopPopupTimer();
this.parentMenu = null;
this.isShowingNow = false;
this.currentPopup = null;
if(this.focusedChild){
this._onChildBlur(this.focusedChild);
this.focusedChild = null;
}
},
 
_openPopup: function(){
// summary: open the popup to the side of the current menu item
this._stopPopupTimer();
var from_item = this.focusedChild;
var popup = from_item.popup;
 
if(popup.isShowingNow){ return; }
popup.parentMenu = this;
var self = this;
dijit.popup.open({
parent: this,
popup: popup,
around: from_item.arrowCell,
orient: this.isLeftToRight() ? {'TR': 'TL', 'TL': 'TR'} : {'TL': 'TR', 'TR': 'TL'},
onCancel: function(){
// called when the child menu is canceled
dijit.popup.close(popup);
from_item.focus(); // put focus back on my node
self.currentPopup = null;
}
});
 
this.currentPopup = popup;
 
if(popup.focus){
popup.focus();
}
}
}
);
 
dojo.declare(
"dijit.MenuItem",
[dijit._Widget, dijit._Templated, dijit._Contained],
{
// summary
// A line item in a Menu2
 
// Make 3 columns
// icon, label, and expand arrow (BiDi-dependent) indicating sub-menu
templateString:
'<tr class="dijitReset dijitMenuItem"'
+'dojoAttachEvent="onmouseenter:_onHover,onmouseleave:_onUnhover,ondijitclick:_onClick">'
+'<td class="dijitReset"><div class="dijitMenuItemIcon ${iconClass}" dojoAttachPoint="iconNode" ></div></td>'
+'<td tabIndex="-1" class="dijitReset dijitMenuItemLabel" dojoAttachPoint="containerNode" waiRole="menuitem"></td>'
+'<td class="dijitReset" dojoAttachPoint="arrowCell">'
+'<div class="dijitMenuExpand" dojoAttachPoint="expand" style="display:none">'
+'<span class="dijitInline dijitArrowNode dijitMenuExpandInner">+</span>'
+'</div>'
+'</td>'
+'</tr>',
 
// label: String
// menu text
label: '',
 
// iconClass: String
// class to apply to div in button to make it display an icon
iconClass: "",
 
// disabled: Boolean
// if true, the menu item is disabled
// if false, the menu item is enabled
disabled: false,
 
postCreate: function(){
dojo.setSelectable(this.domNode, false);
this.setDisabled(this.disabled);
if(this.label){
this.containerNode.innerHTML=this.label;
}
},
 
_onHover: function(){
// summary: callback when mouse is moved onto menu item
this.getParent().onItemHover(this);
},
 
_onUnhover: function(){
// summary: callback when mouse is moved off of menu item
// if we are unhovering the currently selected item
// then unselect it
this.getParent().onItemUnhover(this);
},
 
_onClick: function(evt){
this.getParent().onItemClick(this);
dojo.stopEvent(evt);
},
 
onClick: function() {
// summary
// User defined function to handle clicks
},
 
focus: function(){
dojo.addClass(this.domNode, 'dijitMenuItemHover');
try{
dijit.focus(this.containerNode);
}catch(e){
// this throws on IE (at least) in some scenarios
}
},
 
_blur: function(){
dojo.removeClass(this.domNode, 'dijitMenuItemHover');
},
 
setDisabled: function(/*Boolean*/ value){
// summary: enable or disable this menu item
this.disabled = value;
dojo[value ? "addClass" : "removeClass"](this.domNode, 'dijitMenuItemDisabled');
dijit.setWaiState(this.containerNode, 'disabled', value ? 'true' : 'false');
}
});
 
dojo.declare(
"dijit.PopupMenuItem",
dijit.MenuItem,
{
_fillContent: function(){
// my inner HTML contains both the menu item text and a popup widget, like
// <div dojoType="dijit.PopupMenuItem">
// <span>pick me</span>
// <popup> ... </popup>
// </div>
// the first part holds the menu item text and the second part is the popup
if(this.srcNodeRef){
var nodes = dojo.query("*", this.srcNodeRef);
dijit.PopupMenuItem.superclass._fillContent.call(this, nodes[0]);
 
// save pointer to srcNode so we can grab the drop down widget after it's instantiated
this.dropDownContainer = this.srcNodeRef;
}
},
 
startup: function(){
// we didn't copy the dropdown widget from the this.srcNodeRef, so it's in no-man's
// land now. move it to document.body.
if(!this.popup){
var node = dojo.query("[widgetId]", this.dropDownContainer)[0];
this.popup = dijit.byNode(node);
}
dojo.body().appendChild(this.popup.domNode);
 
this.popup.domNode.style.display="none";
dojo.addClass(this.expand, "dijitMenuExpandEnabled");
dojo.style(this.expand, "display", "");
dijit.setWaiState(this.containerNode, "haspopup", "true");
}
});
 
dojo.declare(
"dijit.MenuSeparator",
[dijit._Widget, dijit._Templated, dijit._Contained],
{
// summary
// A line between two menu items
 
templateString: '<tr class="dijitMenuSeparator"><td colspan=3>'
+'<div class="dijitMenuSeparatorTop"></div>'
+'<div class="dijitMenuSeparatorBottom"></div>'
+'</td></tr>',
 
postCreate: function(){
dojo.setSelectable(this.domNode, false);
},
isFocusable: function(){
// summary:
// over ride to always return false
return false;
}
});
 
}
/trunk/api/js/dojo1.0/dijit/LICENSE
New file
0,0 → 1,195
Dojo is availble under *either* the terms of the modified BSD license *or* the
Academic Free License version 2.1. As a recipient of Dojo, you may choose which
license to receive this code under (except as noted in per-module LICENSE
files). Some modules may not be the copyright of the Dojo Foundation. These
modules contain explicit declarations of copyright in both the LICENSE files in
the directories in which they reside and in the code itself. No external
contributions are allowed under licenses which are fundamentally incompatible
with the AFL or BSD licenses that Dojo is distributed under.
 
The text of the AFL and BSD licenses is reproduced below.
 
-------------------------------------------------------------------------------
The "New" BSD License:
**********************
 
Copyright (c) 2005-2007, The Dojo Foundation
All rights reserved.
 
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
 
* Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the Dojo Foundation nor the names of its contributors
may be used to endorse or promote products derived from this software
without specific prior written permission.
 
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-------------------------------------------------------------------------------
The Academic Free License, v. 2.1:
**********************************
 
This Academic Free License (the "License") applies to any original work of
authorship (the "Original Work") whose owner (the "Licensor") has placed the
following notice immediately following the copyright notice for the Original
Work:
 
Licensed under the Academic Free License version 2.1
 
1) Grant of Copyright License. Licensor hereby grants You a world-wide,
royalty-free, non-exclusive, perpetual, sublicenseable license to do the
following:
 
a) to reproduce the Original Work in copies;
 
b) to prepare derivative works ("Derivative Works") based upon the Original
Work;
 
c) to distribute copies of the Original Work and Derivative Works to the
public;
 
d) to perform the Original Work publicly; and
 
e) to display the Original Work publicly.
 
2) Grant of Patent License. Licensor hereby grants You a world-wide,
royalty-free, non-exclusive, perpetual, sublicenseable license, under patent
claims owned or controlled by the Licensor that are embodied in the Original
Work as furnished by the Licensor, to make, use, sell and offer for sale the
Original Work and Derivative Works.
 
3) Grant of Source Code License. The term "Source Code" means the preferred
form of the Original Work for making modifications to it and all available
documentation describing how to modify the Original Work. Licensor hereby
agrees to provide a machine-readable copy of the Source Code of the Original
Work along with each copy of the Original Work that Licensor distributes.
Licensor reserves the right to satisfy this obligation by placing a
machine-readable copy of the Source Code in an information repository
reasonably calculated to permit inexpensive and convenient access by You for as
long as Licensor continues to distribute the Original Work, and by publishing
the address of that information repository in a notice immediately following
the copyright notice that applies to the Original Work.
 
4) Exclusions From License Grant. Neither the names of Licensor, nor the names
of any contributors to the Original Work, nor any of their trademarks or
service marks, may be used to endorse or promote products derived from this
Original Work without express prior written permission of the Licensor. Nothing
in this License shall be deemed to grant any rights to trademarks, copyrights,
patents, trade secrets or any other intellectual property of Licensor except as
expressly stated herein. No patent license is granted to make, use, sell or
offer to sell embodiments of any patent claims other than the licensed claims
defined in Section 2. No right is granted to the trademarks of Licensor even if
such marks are included in the Original Work. Nothing in this License shall be
interpreted to prohibit Licensor from licensing under different terms from this
License any Original Work that Licensor otherwise would have a right to
license.
 
5) This section intentionally omitted.
 
6) Attribution Rights. You must retain, in the Source Code of any Derivative
Works that You create, all copyright, patent or trademark notices from the
Source Code of the Original Work, as well as any notices of licensing and any
descriptive text identified therein as an "Attribution Notice." You must cause
the Source Code for any Derivative Works that You create to carry a prominent
Attribution Notice reasonably calculated to inform recipients that You have
modified the Original Work.
 
7) Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that
the copyright in and to the Original Work and the patent rights granted herein
by Licensor are owned by the Licensor or are sublicensed to You under the terms
of this License with the permission of the contributor(s) of those copyrights
and patent rights. Except as expressly stated in the immediately proceeding
sentence, the Original Work is provided under this License on an "AS IS" BASIS
and WITHOUT WARRANTY, either express or implied, including, without limitation,
the warranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU.
This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No
license to Original Work is granted hereunder except under this disclaimer.
 
8) Limitation of Liability. Under no circumstances and under no legal theory,
whether in tort (including negligence), contract, or otherwise, shall the
Licensor be liable to any person for any direct, indirect, special, incidental,
or consequential damages of any character arising as a result of this License
or the use of the Original Work including, without limitation, damages for loss
of goodwill, work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses. This limitation of liability shall not
apply to liability for death or personal injury resulting from Licensor's
negligence to the extent applicable law prohibits such limitation. Some
jurisdictions do not allow the exclusion or limitation of incidental or
consequential damages, so this exclusion and limitation may not apply to You.
 
9) Acceptance and Termination. If You distribute copies of the Original Work or
a Derivative Work, You must make a reasonable effort under the circumstances to
obtain the express assent of recipients to the terms of this License. Nothing
else but this License (or another written agreement between Licensor and You)
grants You permission to create Derivative Works based upon the Original Work
or to exercise any of the rights granted in Section 1 herein, and any attempt
to do so except under the terms of this License (or another written agreement
between Licensor and You) is expressly prohibited by U.S. copyright law, the
equivalent laws of other countries, and by international treaty. Therefore, by
exercising any of the rights granted to You in Section 1 herein, You indicate
Your acceptance of this License and all of its terms and conditions.
 
10) Termination for Patent Action. This License shall terminate automatically
and You may no longer exercise any of the rights granted to You by this License
as of the date You commence an action, including a cross-claim or counterclaim,
against Licensor or any licensee alleging that the Original Work infringes a
patent. This termination provision shall not apply for an action alleging
patent infringement by combinations of the Original Work with other software or
hardware.
 
11) Jurisdiction, Venue and Governing Law. Any action or suit relating to this
License may be brought only in the courts of a jurisdiction wherein the
Licensor resides or in which Licensor conducts its primary business, and under
the laws of that jurisdiction excluding its conflict-of-law provisions. The
application of the United Nations Convention on Contracts for the International
Sale of Goods is expressly excluded. Any use of the Original Work outside the
scope of this License or after its termination shall be subject to the
requirements and penalties of the U.S. Copyright Act, 17 U.S.C. § 101 et
seq., the equivalent laws of other countries, and international treaty. This
section shall survive the termination of this License.
 
12) Attorneys Fees. In any action to enforce the terms of this License or
seeking damages relating thereto, the prevailing party shall be entitled to
recover its costs and expenses, including, without limitation, reasonable
attorneys' fees and costs incurred in connection with such action, including
any appeal of such action. This section shall survive the termination of this
License.
 
13) Miscellaneous. This License represents the complete agreement concerning
the subject matter hereof. If any provision of this License is held to be
unenforceable, such provision shall be reformed only to the extent necessary to
make it enforceable.
 
14) Definition of "You" in This License. "You" throughout this License, whether
in upper or lower case, means an individual or a legal entity exercising rights
under, and complying with all of the terms of, this License. For legal
entities, "You" includes any entity that controls, is controlled by, or is
under common control with you. For purposes of this definition, "control" means
(i) the power, direct or indirect, to cause the direction or management of such
entity, whether by contract or otherwise, or (ii) ownership of fifty percent
(50%) or more of the outstanding shares, or (iii) beneficial ownership of such
entity.
 
15) Right to Use. You may use the Original Work in all ways not otherwise
restricted or conditioned by this License or by law, and Licensor promises not
to interfere with or be responsible for such uses by You.
 
This license is Copyright (C) 2003-2004 Lawrence E. Rosen. All rights reserved.
Permission is hereby granted to copy and distribute this license without
modification. This license may not be modified without the express written
permission of its copyright owner.
/trunk/api/js/dojo1.0/dijit/themes/dijit.css
New file
0,0 → 1,1461
/*
Essential styles that themes can inherit.
In other words, works but doesn't look great.
*/
 
 
 
/****
GENERIC PIECES
****/
 
.dijitReset {
/* Use this style to null out padding, margin, border in your template elements
so that page specific styles don't break them.
- Use in all TABLE, TR and TD tags.
- If there is more than one class on the tag, place this first so other classes override.
*/
margin:0px;
border:0px;
padding:0px;
line-height:normal;
}
 
.dijitInline {
/* To inline block elements.
Similar to InlineBox below, but this has fewer side-effects in Moz.
Also, apparently works on a DIV as well as a FIELDSET.
*/
display:-moz-inline-box; /* FF2 */
display:inline-block; /* webkit and FF3 */
border:0px;
padding:0px;
vertical-align:middle;
}
 
.dj_ie .dijitInline {
zoom: 1; /* set hasLayout:true to mimic inline-block */
#display:inline;
}
 
.dijitInlineTable {
/* To inline tables with a given width set (otherwise, use dijitInline above)
* Must also put style="-moz-inline-stack" on the node itself to workaround FF2 bugs
*/
display: -moz-inline-stack; /* FF2 */
display:inline-table;
display:inline-block; /* webkit and FF3 */
#display:inline; /* MSIE (TODO: is this needed???) */
border:0px;
padding:0px;
vertical-align:middle;
position:relative; /* #5034 */
}
 
.dijitTeeny {
font-size:1px;
line-height:1px;
}
 
/*
* Popup items have a wrapper div (dijitPopup)
* with the real popup inside, and maybe an iframe too
*/
.dijitPopup {
position: absolute;
background-color: transparent;
margin: 0;
border: 0;
padding: 0;
}
.dijit_a11y .dijitPopup,
.dijit_ally .dijitPopup div,
.dijit_a11y .dijitPopup table,
.dijit_a11y .dijitTooltipContainer {
opacity: 1 !important;
background-color: white !important;
}
.dj_ie .dijit_a11y .dijitPopup * {
filter: none;
}
 
.dijitInputField {
font-family:inherit;
font-size:inherit;
font-weight:inherit;
}
 
.dijitPositionOnly {
/* Null out all position-related properties */
padding: 0px !important;
border: 0px !important;
background-color: transparent !important;
background-image: none !important;
height: auto !important;
width: auto !important;
}
 
.dijitNonPositionOnly {
/* Null position-related properties */
float: none !important;
position: static !important;
margin: 0px 0px 0px 0px !important;
vertical-align: middle !important;
}
 
.dijitBackgroundIframe {
/*
* iframe used for FF2 in high-contrast mode to prevent menu
* being transparent
*/
position: absolute;
left: 0px;
top: 0px;
width: 100%;
height: 100%;
z-index: -1;
border: 0;
padding: 0;
margin: 0;
}
 
.dijitClickableRegion {
/* a region we expect the user to click on */
cursor : pointer;
}
 
 
.dijitDisplayNone {
/* hide something. Use this as a class rather than element.style so another class can override */
display:none !important;
}
 
.dijitContainer {
/* for all layout containers */
overflow: hidden; /* need on IE so something can be reduced in size, and so scrollbars aren't temporarily displayed when resizing */
}
 
/****
A11Y
****/
.dijit_a11y * {
background-image:none !important;
background-color:transparent !important;
}
 
.dijit_a11y .dijitCalendarIncrementControl .dijitA11ySideArrow {
padding-left:.2em;
visibility:visible !important;
}
 
.dijitToolbar .dijitDropDownButton .dijitA11yDownArrow{
/*make the arrow smaller in toolbar*/
padding:0;
margin:0;
}
.dj_ie6 .dijitToolbar .dijitDropDownButton .dijitA11yDownArrow{
/*vertical-align: middle does not place the arrow in the middle of the toolbar in IE*/
vertical-align: bottom;
}
 
.dijitA11ySideArrow {
vertical-align:top;
margin-right:0em;
margin-left:.2em;
line-height:2em;
text-align:center;
}
 
.dj_ie .dijitA11yDownArrow,
.dj_ie .dijitA11yUpArrow {
font-size:.8em;
vertical-align:middle;
margin-right:.5em;
}
 
 
 
 
.dijit_a11y .dijitButton .dijitButtonNode,
.dijit_a11y .dijitDropDownButton .dijitButtonNode,
.dijit_a11y .dijitComboButton .dijitButtonNode,
.dijit_a11y .dijitComboBox .dijitInputField,
.dijit_a11y .dijitComboBox .dijitButtonNode {
border:1px solid black !important;
background:white !important;
color:black !important;
}
 
.dijit_a11y .dijitButtonDisabled .dijitButtonNode,
.dijit_a11y .dijitDropDownButtonDisabled .dijitButtonNode,
.dijit_a11y .dijitComboButtonDisabled .dijitButtonNode,
.dijit_a11y .dijitComboBoxDisabled .dijitInputField,
.dijit_a11y .dijitComboBoxDisabled .dijitButtonNode,
.dijit_a11y .dijitSpinnerDisabled .dijitButtonNode,
.dijit_a11y .dijitSpinnerDisabled .dijitInputField {
border:1px dotted #999999 !important;
color:#999999 !important;
}
 
.dijit_a11y .dijitComboButton .dijitDownArrowButton,
.dijit_a11y .dijitComboBox .dijitDownArrowButton {
border-left:0px !important;
}
 
/* In high contrast mode, display the check symbol */
.dijit_a11y .dijitToggleButtonChecked .dijitToggleButtonIconChar {
display: inline !important;
}
 
 
 
/****
3-element borders: ( dijitLeft + dijitStretch + dijitRight )
****/
.dijitLeft {
/* Left part of a 3-element border */
background-position:left top;
background-repeat:no-repeat;
}
 
.dijitStretch {
/* Middle (stretchy) part of a 3-element border */
white-space:nowrap; /* MOW: move somewhere else */
background-repeat:repeat-x;
}
 
.dijitRight {
/* Right part of a 3-element border */
#display:inline; /* IE7 sizes to outer size w/o this */
background-position:right top;
background-repeat:no-repeat;
}
 
 
/****
Right-to-left rules
****/
.dijitRTL .dijitRightArrow {
/* it becomes a left arrow for LTR locales */
/* MOW: TODO... */
margin-left:-2.1em;
}
 
 
 
 
 
/****
dijit.form.Button
dijit.form.DropDownButton
dijit.form.ComboButton
dijit.form.ComboBox (partial)
****/
.dijitButton,
.dijitDropDownButton,
.dijitComboButton,
.dijitComboBox {
/* outside of button */
margin: 0.2em;
/* normalize line-heights inside the button */
line-height: 1.3em;
}
 
.dj_safari .dijitToolbar .dijitDropDownButton {
padding-left: 0.3em;
}
 
.dijitButtonNode {
/* Node that is acting as a button -- may or may not be a BUTTON element */
border:1px solid gray;
margin:0px;
padding:.2em .2em .1em .2em;
overflow:visible;
line-height:normal;
font-family:inherit;
font-size:inherit;
color: inherit;
cursor:pointer;
vertical-align:middle;
text-align:center;
white-space: nowrap;
}
 
.dijitDownArrowButton,
.dijitUpArrowButton {
/* Node that is acting as a arrow button -- drop down (spinner has its own treatment). Also gets dijitButtonNode */
/* place AFTER dijitButtonNode so it overrides */
padding:0em .4em;
margin:0px;
font-size: 0.7em;
}
 
 
.dijitButtonContents {
color:inherit;
}
 
.dijitDropDownButton .dijitA11yDownArrow {
margin-left:.8em;
}
 
.dijitComboButton TABLE {
/* each cell in a combo-table should have its own separate border */
border-collapse: separate;
border:0px;
padding:0px;
margin:0px;
}
 
.dijitComboButton .dijitButtonContents {
border-right-width:0px !important;
}
 
 
table .dijitButton .dijitButtonNode,
table .dijitComboButton .dijitButtonNode {
#overflow:hidden; /* visible messes up if the button is inside a table on IE */
}
 
 
 
.dijitButtonNode IMG {
/* make text and images line up cleanly */
vertical-align:middle;
margin-bottom:.2em;
}
 
/******
TextBox related.
Everything that has an <input>
*******/
 
.dijitTextBox,
.dijitComboBox,
.dijitSpinner {
border: solid black 1px;
width: 15em; /* need to set default size on outer node since inner nodes say <input style="width:100%"> and <td width=100%>. user can override */
}
 
/* rules for safari to deal with fuzzy blue focus border */
.dijitTextBox input:focus,
.dijitComboBox input:focus,
.dijitSpinner input:focus {
outline: none; /* blue fuzzy line looks wrong on combobox or something w/validation icon showing */
}
.dijitTextBoxFocused,
.dijitComboBoxFocused,
.dijitSpinnerFocused {
/* should we display focus like we do on other browsers, or use the safari standard focus indicator?? */
outline: auto 5px -webkit-focus-ring-color;
}
 
.dijitTextBox INPUT,
.dijitComboBox INPUT,
.dijitSpinner INPUT {
padding:0px;
border-left: solid black 1px; /* TODO: for RTL mode should be border-right */
display:inline;
position:static !important;
border:0px !important;
margin:0px !important;
vertical-align:0em !important;
visibility:visible !important;
background-color:transparent !important;
background-image:none !important;
width:100% !important;
}
 
/* #4711: prevent IE from over-expanding 100% width input boxes */
.dj_ie .dijitTextBox .dijitInputField,
.dj_ie .dijitComboBox .dijitInputField,
.dj_ie .dijitSpinner .dijitInputField {
position:relative;
}
.dj_ie .dijitTextBox .dijitInputField INPUT,
.dj_ie .dijitComboBox .dijitInputField INPUT,
.dj_ie .dijitSpinner .dijitInputField INPUT {
position:absolute !important;
top:auto !important;
left:auto !important;
right:auto !important;
bottom:auto !important;
font-size:100%;
}
 
.dj_ie INPUT.dijitTextBox {
font-size:100%;
}
 
/* Display an "X" for invalid input. Themes will override these rules to display an icon instead.
*/
.dijitValidationIcon { display: none; background-position-y:center; }
.dijitValidationIconText { visibility: hidden; }
.dijit_a11y .dijitValidationIcon { display: none !important; }
.dijit_a11y .dijitValidationIconText { display: block !important; }
 
.dijitTextBoxError .dijitValidationIconText,
.dijitComboBoxError .dijitValidationIconText,
.dijitSpinnerError .dijitValidationIconText {
visibility: visible;
}
 
.dijitSpinner .dijitDownArrowButton,
.dijitSpinner .dijitUpArrowButton {
padding: 0 .4em;
border: 1px solid;
line-height: .769em;
/* TODO: as we use border-collapse, is this necessary? */
border-left-style: none;
}
.dj_ie .dijitSpinner .dijitDownArrowButton,
.dj_ie .dijitSpinner .dijitUpArrowButton {
padding: 0 .2em!important;
text-align: center;
}
.dijitSpinner .dijitDownArrowButton div,
.dijitSpinner .dijitUpArrowButton div {
text-align: center;
font-size: .769em;
line-height: 1em;
vertical-align: baseline;
margin: 0 auto;
}
 
.dijitTextBox .dijitDownArrowButton {
/* this is for a combo box with no arrow displayed; we set baseClass=TextBox */
display:none;
}
 
/****
dijit.form.CheckBox
&
dijit.form.RadioButton
****/
 
.dijitCheckBox,
.dijitRadio,
.dijitCheckBoxInput {
padding: 0;
border: 0;
width: 16px;
height: 16px;
background-position:center center;
background-repeat:no-repeat;
}
 
.dijitCheckBox INPUT,
.dijitRadio INPUT {
margin: 0;
padding: 0;
display: block;
}
.dijitCheckBoxInput {
/* place the actual input on top, but all-but-invisible */
opacity: 0.01;
overflow:hidden;
}
 
.dj_ie .dijitCheckBoxInput {
filter: alpha(opacity=0);
}
 
.dijit_a11y .dijitCheckBox,
.dijit_a11y .dijitRadio {
width: auto;
height: auto;
}
.dijit_a11y .dijitCheckBoxInput {
opacity: 1;
filter: none;
width: auto;
height: auto;
}
 
 
/****
dijit.ProgressBar
****/
.dijitProgressBarEmpty{
/* outer container and background of the bar that's not finished yet*/
position:relative;overflow:hidden;
border:1px solid black; /* a11y: border necessary for high-contrast mode */
z-index:0; /* establish a stacking context for this progress bar */
}
 
.dijitProgressBarFull {
/* outer container for background of bar that is finished */
position:absolute;
overflow:hidden;
z-index:-1;
top:0;
width:100%;
height:100%;
}
 
.dijitProgressBarTile{
/* inner container for finished portion */
position:absolute;
overflow:hidden;
top:0px;
left:0px;
bottom:0px;
right:0px;
margin:0px;
padding:0px;
width:auto;
height:auto;
background-color:#aaa;
background-attachment: fixed;
}
 
.dijit_a11y .dijitProgressBarTile{
/* a11y: The border provides visibility in high-contrast mode */
border-width:4px;
border-style:solid;
background-color:transparent !important;
}
 
.dj_iequirks .dijitProgressBarTile{
width:100%;
height:100%;
}
 
.dj_ie6 .dijitProgressBarTile{
/* width:auto works in IE6 with position:static but not position:absolute */
position:static;
/* height:auto does not work in IE6 */
height:100%;
}
 
.dijitProgressBarIndeterminate .dijitProgressBarLabel{
visibility:hidden;
}
 
.dijitProgressBarIndeterminate .dijitProgressBarTile{
/* animated gif for 'indeterminate' mode */
}
 
.dijitProgressBarIndeterminateHighContrastImage{
display:none;
}
 
.dijit_a11y .dijitProgressBarIndeterminate .dijitProgressBarIndeterminateHighContrastImage{
display:block;
position:absolute;
top:0;
bottom:0;
margin:0;
padding:0;
width:100%;
height:auto;
}
 
.dijitProgressBarLabel{
display:block;
position:static;
width:100%;
text-align:center;
background-color:transparent;
}
 
/* progress bar in vertical mode - TODO: remove? no longer supported? */
.dijitProgressBarVertical .dijitProgressBarFull{
bottom:0px; /* start at the bottom */
}
 
.dj_ie6 .dijitProgressBarVertical .dijitProgressBarTile{
position:absolute;
/* can't use position:static here -- need absolute positioning to place
the bar at the bottom of a vertical progressbar */
width:100%;
}
 
 
/****
dijit.Tooltip
****/
 
.dijitTooltip {
position: absolute;
z-index: 2000;
display: block;
/* make visible but off screen */
left: 50%;
top: -10000px;
overflow: visible;
}
/*
See http://trac.dojotoolkit.org/ticket/5006
.dijitTooltipDialog {
position: relative;
}
*/
.dijitTooltipContainer {
border: solid black 2px;
background: #b8b5b5;
color: black;
font-size: small;
}
 
.dijitTooltipFocusNode {
padding: 2px 2px 2px 2px;
}
 
.dijitTooltipConnector {
position: absolute;
}
 
/* MOW: using actual images at this time
/* draw an arrow with CSS only * /
.dijitTooltipConnector {
/* the border on the triangle * /
font-size: 0px; line-height: 0%; width: 0px;
border-top: none;
border-bottom: 14px solid black;
border-left: 7px solid transparent;
border-right: 7px solid transparent;
top: -14px;
left: 3px;
z-index: 2;
}
 
.dijitTooltipConnector div {
/* the background of the triangle * /
font-size: 0px; line-height: 0%; width: 0px;
position: absolute;
border-bottom: 10px solid #b8b5b5;
border-left: 5px solid transparent;
border-right: 5px solid transparent;
top: 6px;
left: -5px;
z-index: 3;
}
 
*/
 
 
 
/* Layout widgets. This is essential CSS to make layout work (it isn't "styling" CSS)
make sure that the position:absolute in dijitAlign* overrides other classes */
 
.dijitLayoutContainer{
position: relative;
display: block;
overflow: hidden;
}
 
body .dijitAlignTop,
body .dijitAlignBottom,
body .dijitAlignLeft,
body .dijitAlignRight {
position: absolute;
overflow: hidden;
}
 
body .dijitAlignClient { position: absolute; }
 
/* SplitContainer
 
'V' == container that splits vertically (up/down)
'H' = horizontal (left/right)
*/
.dijitSplitContainer{
position: relative;
overflow: hidden;
display: block;
}
 
.dijitSplitPane{
position: absolute;
}
 
.dijitSplitContainerSizerH,
.dijitSplitContainerSizerV {
position:absolute;
font-size: 1px;
cursor: move;
cursor: w-resize;
background-color: ThreeDFace;
border: 1px solid;
border-color: ThreeDHighlight ThreeDShadow ThreeDShadow ThreeDHighlight;
margin: 0;
}
 
.dijitSplitContainerSizerV {
cursor: n-resize;
}
 
.dijitSplitContainerSizerH .thumb {
position:absolute;
top:49%;
}
 
.dijitSplitContainerSizerV .thumb {
position:absolute;
left:49%;
}
 
.dijitSplitContainerVirtualSizerH,
.dijitSplitContainerVirtualSizerV {
font-size: 1px;
cursor: move;
cursor: w-resize;
background-color: ThreeDShadow;
-moz-opacity: 0.5;
opacity: 0.5;
filter: Alpha(Opacity=50);
margin: 0;
}
 
.dijitSplitContainerVirtualSizerV {
cursor: n-resize;
}
 
 
/* ContentPane */
 
.dijitContentPane {
display: block;
overflow: auto; /* if we don't have this (or overflow:hidden), then Widget.resizeTo() doesn't make sense for ContentPane */
}
/* TitlePane */
.dijitTitlePane {
display: block;
overflow: hidden;
}
 
/* Color Palette */
 
.dijitColorPalette {
border:1px solid #999;
background:#fff;
-moz-border-radius:3pt;
}
 
img.dijitColorPaletteUnder {
border-style:none;
position:absolute;
left:0;
top:0;
}
.dijitColorPaletteInner {
position: relative;
overflow:hidden;
outline:0;
}
.dijitPaletteImg {
width: 16px; /*This is the width of one color in the provided palettes. */
height: 14px; /* Height of one color in the provided palettes. */
position: absolute;
overflow: hidden;
cursor: default;
z-index: 10;
border:1px solid #999;
/* -moz-border-radius:2pt; */
}
 
.dijitPaletteImgHighlight {
width: 14px; /*This is the width of one color in the provided palettes. */
height: 12px; /* Height of one color in the provided palettes. */
position: absolute;
overflow: hidden;
cursor: default;
z-index: 10;
}
 
/* .dijitPaletteImg:hover, */
.dijitPaletteImg:focus,
.dijitPaletteImgHighlight {
width: 14px; /*This is the width of one color in the provided palettes. */
height: 12px; /* Height of one color in the provided palettes. */
border:2px solid #000;
outline:2px solid #dedede;
/* -moz-border-radius:0; */
}
 
 
.dijitColorPaletteCell {
width:16px;
height:14px;
border: 1px solid;
}
 
.dijitColorPaletteCell:hover {
border-style: solid;
outline:0;
}
 
/* Accordion */
 
.dijitAccordionPane {
overflow: hidden !important; /* prevent spurious scrollbars */
}
 
.dijitAccordionPane .dijitAccordionBody {
overflow: auto;
}
 
 
.dijitAccordionContainer {
border:1px solid #b7b7b7;
border-top:0 !important;
}
 
.dijitAccordionPane .dijitAccordionTitle:hover {
cursor: pointer;
}
 
.dijitAccordionPane .dijitAccordionTitle .dijitAccordionArrow {
float: right;
}
 
/* images off, high-contrast mode styles */
.dijitAccordionPane .dijitAccordionTitle .arrowTextUp,
.dijitAccordionPane .dijitAccordionTitle .arrowTextDown {
display: none;
float: right;
font-size: 0.65em;
font-weight: normal !important;
}
 
.dijit_a11y .dijitAccordionPane .dijitAccordionTitle .arrowTextUp {
display: inline;
}
 
.dijit_a11y .dijitAccordionPane-selected .dijitAccordionTitle .arrowTextDown {
display: inline;
}
 
.dijit_a11y .dijitAccordionPane-selected .dijitAccordionTitle .arrowTextUp {
display: none;
}
 
/* Calendar */
 
.dijitCalendarContainer thead tr th, .dijitCalendarContainer thead tr td, .dijitCalendarContainer tbody tr td, .dijitCalendarContainer tfoot tr td {
padding: 0;
}
 
.dijitCalendarNextYear {
margin:0 0 0 0.55em;
}
 
.dijitCalendarPreviousYear {
margin:0 0.55em 0 0;
}
 
.dijitCalendarIncrementControl {
cursor:pointer;
cursor:hand;
width:1em;
}
 
.dijitCalendarDisabledDate {
color:gray !important;
}
 
.dijitCalendarBodyContainer tbody tr td {
cursor:pointer;
cursor:hand;
}
 
.dijitCalendarPreviousMonthDisabled {
cursor:default !important
}
 
.dijitCalendarCurrentMonthDisabled {
cursor:default !important
}
 
.dijitCalendarNextMonthDisabled {
cursor:default !important;
}
 
.dijitCalendarDateTemplate {
cursor:pointer;
}
 
.dijitCalendarSelectedYear {
cursor:pointer;
}
.dijitCalendarNextYear,
.dijitCalendarPreviousYear {
cursor:pointer;
}
 
.dijitCalendarMonthLabelSpacer {
/* don't display it, but make it affect the width */
position: relative;
height: 1px;
overflow: hidden;
visibility: hidden;
}
 
 
/* Menu */
 
.dijitMenu {
border:1px solid black;
background-color:white;
}
.dijitMenuTable {
margin:1px 0px;
border-collapse:collapse;
border-width:0px;
background-color:white;
}
 
.dijitMenuItem{
white-space: nowrap;
padding:.1em .2em;
}
 
.dijitMenuItemHover {
cursor:pointer;
cursor:hand;
background-color:black;
color:white;
}
 
.dijitMenuItemIcon {
position: relative;
background-position: center center;
background-repeat: no-repeat;
}
 
.dijitMenuItemDisabled * {
/* for a disabled menu item, just set it to mostly transparent */
opacity:0.3;
cursor:default;
}
.dj_ie .dijit_a11y .dijitMenuItemDisabled td,
.dj_ie .dijitMenuItemDisabled *,
.dj_ie .dijitMenuItemDisabled td {
color:gray !important;
filter: alpha(opacity=35);
}
 
.dijitMenuItemLabel {
position: relative;
vertical-align: middle;
}
 
.dijit_a11y .dijitMenuItemHover .dijitMenuItemLabel {
border-width: 1px;
border-style: solid;
}
.dijit_a11y .dijitMenuItemHover {
border: 1px #fff dotted !important;
}
 
.dijit_a11y .dijitMenuExpandInner {
display:block !important;
}
 
/* separator can be two pixels -- set border of either one to 0px to have only one */
.dijitMenuSeparatorTop {
height: 50%;
margin: 0px;
margin-top:3px;
font-size: 1px;
}
 
.dijitMenuSeparatorBottom {
height: 50%;
margin: 0px;
margin-bottom:3px;
font-size: 1px;
}
 
 
 
/* Tab */
 
 
.dijitTabContainer .dijitAlignTop {
/* position the tab labels row down by 1 px, and on top of the dijitTabPaneWrapper
so the buttons can overlay the tab pane properly */
top:1px !important;
z-index:10;
}
 
.dijitTabContainer .dijitAlignBottom {
/* position the tab labels row up by 1 px so they overlap */
margin-top:-1px !important;
z-index:10;
}
 
.dijitTabContainer .dijitAlignLeft {
/* position the tab labels left by 1 px so they overlap */
margin-right:-1px !important;
z-index:10;
}
 
.dijitTabContainer .dijitAlignRight {
/* position the tab labels row up by 1 px, and on top of the dijitTabPaneWrapper
so the buttons can overlay the tab pane properly */
margin-left:-1px !important;
z-index:10;
}
 
.dijitTabPaneWrapper {
z-index:0;
overflow: hidden;
}
 
.dijitTab {
position:relative;
float:left;
cursor:pointer;
white-space:nowrap;
z-index:3;
}
 
.dijitTabContainer .dijitAlignLeft .dijitTab,
.dijitTabContainer .dijitAlignRight .dijitTab {
float:none;
}
 
.dijitTabInnerDiv {
position:relative;
}
 
.dijitTab .close {
display: inline-block;
cursor: default;
font-size: small;
}
 
/* images off, high-contrast mode styles */
.dijitTab .closeText {
display:none;
padding: 0px 2px;
margin: 0px 2px;
}
.dijit_a11y .dijitTab .closeImage {
padding: 0px !important;
margin: 0px !important;
top: 0px !important;
bottom: 0px !important;
}
.dijit_a11y .closeText {
display:inline;
margin-left:6px;
}
.dijit_a11y .closeText:hover {
border:thin solid;
}
.dijit_a11y .dijitTabChecked {
border-style:dashed !important;
}
 
.dijit_a11y .dijitTabInnerDiv {
border-left:none !important;
}
 
 
.dijitInlineEditor {
/* span around an inline-editable value when in edit mode */
position:relative;
vertical-align:bottom;
}
.dj_ie .dijitInlineEditor {
vertical-align:middle;
}
 
.dijitInlineValue {
/* span around an inline-editable value when NOT in edit mode */
}
 
.dijitInlineEditor .dijitButtonContainer {
/* div around the buttons -- makes them float below the field */
position:absolute;
right:0px;
overflow:visible;
}
 
.dijitInlineEditor .saveButton,
.dijitInlineEditor .cancelButton {
}
 
/* Tree */
 
.dijitTreeExpando {
float: left;
display: inline;
clear:both;
}
 
.dijitTreeExpand {
float: left;
display: inline;
}
 
.dijitTreeContent {
cursor: default;
/* can't make inline - multiline bugs */
}
 
.dijitExpandoText {
display: none;
}
.dijit_a11y .dijitExpandoText {
float: left;
display: inline;
padding-left: 10px;
padding-right: 10px;
font-family: monospace;
border-style: solid;
border-width: thin;
}
 
/* Dialog */
 
.dijitDialog {
position: absolute;
z-index: 999;
padding: 1px;
}
 
.dijitDialogUnderlayWrapper {
position: absolute;
left: 0px;
top: 0px;
z-index: 998;
display: none;
background: transparent;
}
 
.dijitDialogUnderlay {
background: #eeeeee;
opacity: 0.5;
}
 
.dj_ie .dijitDialogUnderlay {
filter: alpha(opacity=50);
}
 
/* images off, high-contrast mode styles */
.dijit_a11y .dijitDialog {
opacity: 1 !important;
background-color: white !important;
}
 
.dijitDialog .closeText {
display:none;
position:absolute;
}
 
.dijit_a11y .dijitDialog .closeText {
display:inline;
}
 
.dijitSliderMoveable {
z-index:99;
position:absolute !important;
display:block;
vertical-align:middle;
}
 
.dijitHorizontalSliderMoveable {
right:0px;
}
 
.dijit_a11y div.dijitSliderImageHandle,
.dijitSliderImageHandle {
margin:0px;
padding:0px;
position:absolute !important;
border:8px solid gray;
width:0px;
height:0px;
}
.dijit_a11y .dijitSliderFocused .dijitSliderImageHandle {
border:4px solid #000;
height:8px;
width:8px;
}
 
.dijitVerticalSliderImageHandle {
top:-8px;
left:-6px;
}
 
.dijitHorizontalSliderImageHandle {
left:-8px;
top:-5px;
vertical-align:top;
}
 
.dijitSliderBar {
border-style:solid;
border-color:black;
}
 
.dijitHorizontalSliderBar {
height:4px;
border-width:1px 0px;
}
 
.dijitVerticalSliderBar {
width:4px;
border-width:0px 1px;
}
 
.dijitSliderProgressBar {
background-color:red;
#z-index:0;
}
 
.dijitVerticalSliderProgressBar {
position:static !important;
height:0%;
vertical-align:top;
text-align:left;
}
 
.dijitHorizontalSliderProgressBar {
position:absolute !important;
width:0%;
vertical-align:middle;
overflow:visible;
}
 
.dijitSliderRemainingBar {
overflow:hidden;
background-color:transparent;
#z-index:-1;
}
 
.dijitVerticalSliderRemainingBar {
height:100%;
text-align:left;
}
 
.dijitHorizontalSliderRemainingBar {
width:100% !important;
}
 
/* the slider bumper is the space consumed by the slider handle when it hangs over an edge */
.dijitSliderBumper {
overflow:hidden;
#z-index:-1
}
 
.dijitVerticalSliderBumper {
width:4px;
height:8px;
border-width:0px 1px;
}
 
.dijitHorizontalSliderBumper {
width:8px;
height:4px;
border-width:1px 0px;
}
 
.dijitVerticalSliderBottomBumper,
.dijitHorizontalSliderLeftBumper {
background-color:red;
}
 
.dijitVerticalSliderTopBumper,
.dijitHorizontalSliderRightBumper {
background-color:transparent;
}
 
.dijitHorizontalSliderDecoration {
text-align:center;
}
 
.dijitSlider .dijitSliderButton {
font-family:monospace;
margin:0px;
padding:0px;
display:block;
}
 
.dijit_a11y .dijitSliderButtonInner {
visibility:visible !important;
}
 
.dijitSlider .dijitVerticalSliderTopButton {
vertical-align:bottom;
}
 
.dijitSlider .dijitVerticalSliderBottomButton {
vertical-align:top;
}
 
.dijitSliderButtonContainer {
text-align:center;
height:0px;
}
 
.dijitSlider .dijitButtonNode {
padding:0px;
display:block;
}
 
.dj_ie .RuleContainer {
z-index: -1; /* #4809 */
}
 
.RuleContainer {
position:relative;
overflow:visible;
}
 
.VerticalRuleContainer {
height:100%;
line-height:0px;
float:left;
text-align:left;
}
 
.dj_opera .VerticalRuleContainer {
line-height:2%;
}
 
.dj_ie .VerticalRuleContainer {
line-height:normal;
}
 
.dj_gecko .VerticalRuleContainer {
margin:0px 0px 1px 0px; /* mozilla bug workaround for float:left,height:100% block elements */
}
 
.RuleMark {
position:absolute;
border:1px solid black;
line-height:0px;
height:100%;
}
 
.HorizontalRuleMark {
width:0px;
border-top-width:0px !important;
border-bottom-width:0px !important;
border-left-width:0px !important;
}
 
.RuleLabelContainer {
position:absolute;
}
 
.HorizontalRuleLabelContainer {
text-align:center;
display:inline-block;
}
 
.HorizontalRuleLabel {
position:relative;
left:-50%;
}
 
.VerticalRuleMark {
height:0px;
border-right-width:0px !important;
border-bottom-width:0px !important;
border-left-width:0px !important;
width:100%;
left:0px;
}
 
.dj_ie .VerticalRuleLabelContainer {
margin-top:-.55em;
}
 
/* Toolbar A11y */
.dijit_a11y .dijitButtonContents .dijitButtonText {
display: inline !important;
}
 
.dijitTextArea {
width:100%;
}
 
.dj_ie .dijitTextArea p {
margin-top:0px;
margin-bottom:0px;
}
 
/* Editor */
.IEFixedToolbar {
position:absolute;
/* top:0; */
top: expression(eval((document.documentElement||document.body).scrollTop));
}
 
/* TimePicker */
 
.dijitTimePickerItemInner {
text-align:center;
border:0;
padding:2px 8px 2px 8px;
}
.dijitTimePickerTick {
/* opacity:0.1 !important; */
color:#dedede;
border-bottom:1px solid #dedede;
border-top:1px solid #dedede;
position:relative;
}
.dijitTimePickerTick .dijitTimePickerItemInner {
font-size:0.25em;
}
.dijitTimePickerMarker {
background-color:#ededed;
border-top:1px solid #999;
border-bottom:1px solid #999;
}
 
.dijitTimePickerItemHover {
opacity:1 !important;
background-color:#808080;
color:#fff;
border-top:1px solid #333;
border-bottom:1px solid #333;
cursor:pointer;
}
.dijitTimePickerMarker.dijitTimePickerItemHover {
font-size:1.3em;
}
 
.dijitTimePickerItemHover .dijitTimePickerItemInner {
display:block;
overflow:visible;
background-color:#808080;
font-size:1em;
}
 
.dijitTimePickerItemSelected {
font-weight:bold;
color:#333;
background-color:#b7cdee !important;
}
 
.dijit_a11y .dijitTimePickerItem {
border-bottom:1px solid #333;
}
 
 
/* Disable the high contrast character */
.dijitToggleButtonIconChar {
display:none !important;
}
.dijit_a11y .dijitToggleButtonIconChar {
display:inline !important;
}
 
.dijit_a11y .dijitToggleButtonIconChar {
visibility:hidden;
}
.dijit_a11y .dijitToggleButtonChecked .dijitToggleButtonIconChar {
visibility:visible !important;
}
/trunk/api/js/dojo1.0/dijit/themes/a11y/README.txt
New file
0,0 → 1,3
This folder contains images used by all themes when in "high-contrast" mode.
 
If you think you need to put something here, please talk to Becky or Bill first.
/trunk/api/js/dojo1.0/dijit/themes/a11y/indeterminate_progress.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/a11y/indeterminate_progress.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/dijit_rtl.css
New file
0,0 → 1,151
/* Tree */
 
.dijitRtl .dijitTreeContainer .dijitTreeExpando {
float:right;
}
 
.dijitRtl .dijitTreeContainer .dijitTreeExpand {
float:right;
}
 
/* can't specify .dijitRtl and .dijit_a11y on this rule, since they are on the same node */
.dijitRtl .dijitExpandoText {
float: right;
padding-left: 3px;
padding-right: 0;
}
 
/* ComboBox */
 
.dijitRtl .dijitComboBox .dijitInputField {
border-right-width:1px !important;
border-left-width:0px !important;
}
 
/* Calendar */
 
.dijitRtl .dijitCalendarNextYear {
margin:0 0.55em 0 0;
}
 
.dijitRtl .dijitCalendarPreviousYear {
margin:0 0 0 0.55em;
}
 
.dijitRtl .dijitProgressBarFull .dijitProgressBarLabel {
right:0px; /* FF workaround */
}
 
/* Button */
 
.dijitRtl .dijitComboButton .dijitButtonContents {
border-right-width:1px !important;
}
 
/* A11y */
.dijitRtl .dijitA11ySideArrow {
margin-left:1em;
margin-right:0;
}
 
/* AccordionPane */
 
.dijitRtl .dijitAccordionPane .dijitAccordionTitle .dijitAccordionArrow,
.dijitRtl .dijitAccordionPane .dijitAccordionTitle .arrowTextUp,
.dijitRtl .dijitAccordionPane .dijitAccordionTitle .arrowTextDown {
float: left;
}
 
/* Slider */
 
.dijitRtl .dijitVerticalSliderImageHandle {
left:auto;
right:-6px;
}
 
.dj_ie .dijitRtl .dijitVerticalSliderImageHandle {
right:-10px;
}
 
.dijitRtl .dijitHorizontalSliderMoveable {
right:auto;
left:0;
}
 
.dijitRtl .VerticalRuleContainer {
float:right;
}
 
.dj_ie .dijitRtl .VerticalRuleContainer {
text-align:right;
}
 
.dj_ie .dijitRtl .VerticalRuleLabel {
text-align:left;
}
 
.dj_ie .dijitRtl .HorizontalRuleLabel {
zoom:1;
}
 
.dj_ie .dijitRtl .dijitHorizontalSliderProgressBar {
right:0;
left:auto;
}
 
/* TabContainer */
 
.dijitRtl .dijitTab {
float:right;
}
 
.dj_ie .dijitRtl .dijitTab,
.dj_ie .dijitRtl .dijitTab .dijitTabInnerDiv,
.dj_ie .dijitRtl .dijitTab .dijitTabInnerDiv span {
position:static;
zoom:1;
}
 
.dj_ie .dijitRtl .dijitTabContainer .dijitAlignLeft {
margin-left:1px !important;
}
 
.dj_ie .dijitRtl .dijitTabContainer .dijitAlignRight {
margin-right:1px !important;
}
 
/* TabContainer */
 
.dijitRtl .dijitTab {
float:right;
}
 
.dj_ie .dijitRtl .dijitTab,
.dj_ie .dijitRtl .dijitTab .dijitTabInnerDiv {
zoom:1;
}
 
.dj_ie6 .dijitRtl .dijitTab {
/* force ie6 to render each tab based on the tab's label */
width:1px;
}
 
.dj_ie7 .dijitRtl .dijitTabContainer .dijitAlignLeft {
/* fix the offset between tabs and the pane */
margin-left:1px !important;
}
 
.dj_ie7 .dijitRtl .dijitTabContainer .dijitAlignRight {
/* fix the offset between tabs and the pane */
margin-right:1px !important;
}
 
.dj_ie6 .dijitRtl .dijitTabContainer .dijitAlignLeft {
overflow-x:visible;
margin-left:2px !important;
}
 
.dj_ie6 .dijitRtl .dijitTabContainer .dijitAlignRight {
overflow-x:visible;
margin-right:2px !important;
}
/trunk/api/js/dojo1.0/dijit/themes/themeTester.html
New file
0,0 → 1,744
<html>
<head>
<title>Dijit Theme Tester</title>
<script type="text/javascript" src="../../dojo/dojo.js"
djConfig="parseOnLoad: false, isDebug: true"></script>
<!--
<script type="text/javascript" src="http://prototypejs.org/assets/2007/10/16/prototype.js"></script>
-->
<script type="text/javascript" src="../dijit.js"></script>
<script type="text/javascript" src="../dijit-all.js"></script>
<script type="text/javascript">
// this is just a list of 'official' dijit themes, you can use ?theme=String
// for 'un-supported' themes, too. (eg: yours)
var availableThemes = [
{ theme:"tundra", author:"Dojo", baseUri:"../themes/"},
{ theme:"soria", author:"dante", baseUri:"../themes/"}//,
//{ theme:"noir", author:"owen", baseUri:"../themes/"}
];
</script>
<style type="text/css">
@import "../../dojo/resources/dojo.css";
@import "../../dijit/themes/dijit.css";
@import "../tests/css/dijitTests.css";
@import "../../dojo/tests/dnd/dndDefault.css";
 
html, body { height: 100%; width: 100%; padding: 0; border: 0; }
#main { height: 100%; width: 100%; padding: 0; border: 0; }
#header, #mainSplit { margin: 10px; }
 
/* pre-loader specific stuff to prevent unsightly flash of unstyled content */
#loader {
padding:0;
margin:0;
position:absolute;
top:0; left:0;
width:100%; height:100%;
background:#ededed;
z-index:999;
vertical-align:center;
}
#loaderInner {
padding:5px;
position:relative;
left:0;
top:0;
width:175px;
background:#3c3;
color:#fff;
}
 
hr.spacer { border:0; background-color:#ededed; width:80%; height:1px; }
</style>
<script type="text/javascript" src="../tests/_testCommon.js"></script>
<script type="text/javascript"> // dojo.requires()
 
dojo.require("dijit.Menu");
dojo.require("dijit._Calendar");
dojo.require("dijit.ColorPalette");
dojo.require("dijit.ProgressBar");
dojo.require("dijit.TitlePane");
dojo.require("dijit.Tooltip");
dojo.require("dijit.Tree");
 
// editor:
dojo.require("dijit.Editor");
// dnd:
dojo.require("dojo.dnd.Source");
 
// various Form elemetns
dojo.require("dijit.form.CheckBox");
dojo.require("dijit.form.Textarea");
dojo.require("dijit.form.FilteringSelect");
dojo.require("dijit.form.TextBox");
dojo.require("dijit.form.DateTextBox");
dojo.require("dijit.form.Button");
dojo.require("dijit.InlineEditBox");
dojo.require("dijit.form.NumberSpinner");
dojo.require("dijit.form.Slider");
 
// layouts used in page
dojo.require("dijit.layout.AccordionContainer");
dojo.require("dijit.layout.ContentPane");
dojo.require("dijit.layout.SplitContainer");
dojo.require("dijit.layout.TabContainer");
dojo.require("dijit.layout.LayoutContainer");
dojo.require("dijit.Dialog");
 
// scan page for widgets and instantiate them
dojo.require("dojo.parser");
 
// humm?
dojo.require("dojo.date.locale");
 
// for the Tree
dojo.require("dojo.data.ItemFileReadStore");
 
// for the colorpalette
function setColor(color){
var theSpan = dojo.byId("outputSpan");
dojo.style(theSpan,"color",color);
theSpan.innerHTML = color;
}
 
// for the calendar
function myHandler(id,newValue){
console.debug("onChange for id = " + id + ", value: " + newValue);
};
 
function hideLoader(){
var loader = dojo.byId('loader');
dojo.fadeOut({ node: loader, duration:500,
onEnd: function(){
loader.style.display = "none";
}
}).play();
}
 
dojo.addOnLoad(function() {
 
var holder = dojo.byId('themeData');
var tmpString='';
dojo.forEach(availableThemes,function(theme){
tmpString += '<a href="?theme='+theme.theme+'">'+theme.theme+'</'+'a> - by: '+theme.author+' <br>';
});
holder.innerHTML = tmpString;
 
var start = new Date().getTime();
dojo.parser.parse(dojo.byId('container'));
console.log("Total parse time: " + (new Date().getTime() - start) + "ms");
 
dojo.byId('loaderInner').innerHTML += " done.";
setTimeout("hideLoader()",250);
});
 
</script>
<style type="text/css">
/* for custom menu buttons, do not appear to have any effect */
.dc {
font-size: x-large !important;
padding-top: 10px !important;
padding-bottom: 10px !important;
}
.Acme *,
.Acme {
background: rgb(96,96,96) !important;
color: white !important;
padding: 10px !important;
}
.Acme:hover *,
.Acme:hover {
background-color: rgb(89,94,111) !important;
color: cyan !important;
}
.Acme:active *,
.Acme:active {
background-color: white !important;
color: black !important;
}
</style>
<script>
/***
dojo.addOnLoad(function(){
// use "before advice" to print log message each time resize is called on a layout widget
var origResize = dijit.layout._LayoutWidget.prototype.resize;
dijit.layout._LayoutWidget.prototype.resize = function(mb){
console.log(this + ": resize({w:"+ mb.w + ", h:" + mb.h + "})");
origResize.apply(this, arguments);
};
 
// content pane has no children so just use dojo's builtin after advice
dojo.connect(dijit.layout.ContentPane.prototype, "resize", function(mb){
console.log(this + ": resize({w:"+ mb.w + ", h:" + mb.h + "})");
});
});
***/
</script>
</head>
<body>
<!-- basic preloader: -->
<div id="loader"><div id="loaderInner">Loading themeTester ... </div></div>
 
<!-- data for tree and combobox -->
<div dojoType="dojo.data.ItemFileReadStore" jsId="continentStore"
url="../tests/_data/countries.json"></div>
<div dojoType="dojo.data.ItemFileReadStore" jsId="stateStore"
url="../tests/_data/states.json"></div>
<!-- contentMenu popup -->
<div dojoType="dijit.Menu" id="submenu1" contextMenuForWindow="true" style="display: none;">
<div dojoType="dijit.MenuItem" onClick="alert('Hello world');">Enabled Item</div>
<div dojoType="dijit.MenuItem" disabled="true">Disabled Item</div>
<div dojoType="dijit.MenuSeparator"></div>
<div dojoType="dijit.MenuItem" iconClass="dijitEditorIcon dijitEditorIconCut"
onClick="alert('not actually cutting anything, just a test!')">Cut</div>
<div dojoType="dijit.MenuItem" iconClass="dijitEditorIcon dijitEditorIconCopy"
onClick="alert('not actually copying anything, just a test!')">Copy</div>
<div dojoType="dijit.MenuItem" iconClass="dijitEditorIcon dijitEditorIconPaste"
onClick="alert('not actually pasting anything, just a test!')">Paste</div>
<div dojoType="dijit.MenuSeparator"></div>
<div dojoType="dijit.PopupMenuItem">
<span>Enabled Submenu</span>
<div dojoType="dijit.Menu" id="submenu2">
<div dojoType="dijit.MenuItem" onClick="alert('Submenu 1!')">Submenu Item One</div>
<div dojoType="dijit.MenuItem" onClick="alert('Submenu 2!')">Submenu Item Two</div>
<div dojoType="dijit.PopupMenuItem">
<span>Deeper Submenu</span>
<div dojoType="dijit.Menu" id="submenu4">
<div dojoType="dijit.MenuItem" onClick="alert('Sub-submenu 1!')">Sub-sub-menu Item One</div>
<div dojoType="dijit.MenuItem" onClick="alert('Sub-submenu 2!')">Sub-sub-menu Item Two</div>
</div>
</div>
</div>
</div>
<div dojoType="dijit.PopupMenuItem" disabled="true">
<span>Disabled Submenu</span>
<div dojoType="dijit.Menu" id="submenu3" style="display: none;">
<div dojoType="dijit.MenuItem" onClick="alert('Submenu 1!')">Submenu Item One</div>
<div dojoType="dijit.MenuItem" onClick="alert('Submenu 2!')">Submenu Item Two</div>
</div>
</div>
<div dojoType="dijit.PopupMenuItem">
<span>Different popup</span>
<div dojoType="dijit.ColorPalette"></div>
</div>
<div dojoType="dijit.PopupMenuItem">
<span>Different popup</span>
<div dojoType="dijit._Calendar"></div>
</div>
</div>
<!-- end contextMenu -->
<div id="main" dojoType="dijit.layout.LayoutContainer">
<h1 id="header" dojoType="dijit.layout.ContentPane" layoutAlign=top>Dijit Theme Test Page</h1>
<!-- overall splitcontainer horizontal -->
<div dojoType="dijit.layout.SplitContainer" orientation="horizontal" sizerWidth="7"
layoutAlign=client id="mainSplit">
<div dojoType="dijit.layout.AccordionContainer" duration="200"
sizeMin="20" sizeShare="38">
 
<div dojoType="dijit.layout.AccordionPane" title="Popups and Alerts"><div style="padding:8px">
<h2>Tooltips:</h2>
<ul>
<li>
<span id="ttRich">rich text tooltip</span>
<span dojoType="dijit.Tooltip" connectId="ttRich" style="display:none;">
Embedded <b>bold</b> <i>RICH</i> text <span style="color:#309; font-size:x-large;">weirdness!</span>
</span>
</li>
 
<li><a id="ttOne" href="#bogus">anchor tooltip</a>
<span dojoType="dijit.Tooltip" connectId="ttOne" style="display:none;">tooltip on anchor</span>
</li>
 
</ul>
 
<hr class="spacer">
 
<h2>Dialogs:</h2>
<ul>
<li><a href="javascript:dijit.byId('dialog1').show()">show Modal Dialog</a></li>
</ul>
 
<div dojoType="dijit.form.DropDownButton">
<span>Show Tooltip Dialog</span>
<div dojoType="dijit.TooltipDialog" id="tooltipDlg" title="Enter Login information"
execute="alert('submitted w/args:\n' + dojo.toJson(arguments[0], true));">
<table>
<tr>
<td><label for="user">User:</label></td>
<td><input dojoType=dijit.form.TextBox type="text" name="user" ></td>
</tr>
<tr>
<td><label for="pwd">Password:</label></td>
<td><input dojoType=dijit.form.TextBox type="password" name="pwd"></td>
</tr>
<tr>
<td colspan="2" align="center">
<button dojoType=dijit.form.Button type="submit" name="submit">Login</button>
</tr>
</table>
</div>
</div>
</div>
</div>
 
<div dojoType="dijit.layout.AccordionPane" title="Dojo Tree from Store">
<!-- tree widget -->
<div dojoType="dijit.Tree" store="continentStore" query="{type:'continent'}"
labelAttr="name" typeAttr="type" label="Continents">
</div>
</div>
<div dojoType="dijit.layout.AccordionPane" title="Calendar" selected="true">
<!-- calendar widget pane -->
<input id="calendar1" dojoType="dijit._Calendar" onChange="myHandler(this.id,arguments[0])">
</div>
<div dojoType="dijit.layout.AccordionPane" title="Color Picker">
<!-- color palette picker -->
<h2 class="testHeader">Dijit Color Palette(7x10)</h2>
<div dojoType="dijit.ColorPalette" onChange="setColor(this.value);"></div>
<br>
Test color is: <span id="outputSpan"></span>
 
<br><br>
<div dojoType="dijit.ColorPalette" palette="3x4"></div>
</div>
 
</div><!-- end AccordionContainer -->
<!-- embedded split container start -->
<div dojoType="dijit.layout.SplitContainer" orientation="vertical" sizerWidth="7" sizeShare="75" id="verticalSplit">
<!-- top half, vertical split container -->
<div dojoType="dijit.layout.TabContainer" sizeShare="40">
<!-- first tab? -->
<div id="tab1" dojoType="dijit.layout.ContentPane" title="Form Feel" style="padding:10px;display:none;">
<h2>Various Form Elements:</h2>
<form name="dijitFormTest">
<p><input type="checkBox" dojoType="dijit.form.CheckBox" checked="checked"> Standard Dijit CheckBox
<br><input type="checkBox" dojoType="dijit.form.CheckBox" disabled="disabled"> Disabled Dijit
<br><input type="checkBox" dojoType="dijit.form.CheckBox" disabled="disabled" checked="checked"> Checked and Disabled Dijit
</p>
<p>
<span>Radio group #1:</span>
<input type="radio" name="g1" id="g1rb1" value="news" dojoType="dijit.form.RadioButton">
<label for="g1rb1">news</label>
<input type="radio" name="g1" id="g1rb2" value="talk" dojoType="dijit.form.RadioButton" checked="checked"/>
<label for="g1rb2">talk</label>
<input type="radio" name="g1" id="g1rb3" value="weather" dojoType="dijit.form.RadioButton" disabled="disabled"/>
<label for="g1rb3">weather (disabled)</label>
</p>
<p>
<span>Radio group #2: (no default value, and has breaks)</span><br>
<input type="radio" name="g2" id="g2rb1" value="top40" dojoType="dijit.form.RadioButton">
<label for="g2rb1">top 40</label><br>
<input type="radio" name="g2" id="g2rb2" value="oldies" dojoType="dijit.form.RadioButton">
<label for="g2rb2">oldies</label><br>
<input type="radio" name="g2" id="g2rb3" value="country" dojoType="dijit.form.RadioButton">
<label for="g2rb3">country</label><br>
<br>
(Note if using keyboard: tab to navigate, and use arrow or space to select)
</p>
 
<hr class="spacer">
 
<h2>dijit.form.NumberSpinner max=100</h2>
<input dojoType="dijit.form.NumberSpinner" constraints="{max:100,places:0}" id="integertextbox3" value="10">
<hr class="spacer">
 
<h2>dijit.form.Textarea: (sans <i>any</i> styling...)</h2>
<textarea dojoType="dijit.form.Textarea" name="areText">Lorem ipsum dolor sit amet,
consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet
dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci
tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis
autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat,
vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio
dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait
nulla facilisi.
</textarea>
 
<hr class="spacer">
 
<h2>dijit.form.ComboBox</h2>
<label for="datatest">US State test 2: </label>
<input dojoType="dijit.form.ComboBox"
value="California"
class="medium"
store="stateStore"
searchAttr="name"
style="width: 300px;"
name="state2"
id="datatestComboBox"
>
 
</form>
 
</div><!-- end first tab -->
<!-- second upper tab -->
<div id="tab2" dojoType="dijit.layout.ContentPane" title="Various Dijits"
style="padding:10px; display:none;">
<!-- Sliders: -->
<div style="float:right;">
<div dojoType="dijit.form.VerticalSlider" name="vertical1"
onChange="dojo.byId('slider2input').value=arguments[0];"
value="10"
maximum="100"
minimum="0"
discreteValues="11"
style="height:175px; clear:both"
id="slider2">
<ol dojoType="dijit.form.VerticalRuleLabels" container="leftDecoration"style="width:2em;color:gray;" labelStyle="right:0px;">
<li>0
<li>100
</ol>
<div dojoType="dijit.form.VerticalRule" container="leftDecoration" count=11 style="width:5px;" ruleStyle="border-color:gray;"></div>
<div dojoType="dijit.form.VerticalRule" container="rightDecoration" count=11 style="width:5px;" ruleStyle="border-color:gray;"></div>
<ol dojoType="dijit.form.VerticalRuleLabels" container="rightDecoration"style="width:2em;color:gray;" maximum="100" count="6" numericMargin="1" constraints="{pattern:'#'}"></ol>
</div>
<br> Slider2 Value:<input readonly id="slider2input" size="3" value="10">
</div>
<h2>Sliders</h2>
<div dojoType="dijit.form.HorizontalSlider" name="horizontal1"
onChange="dojo.byId('slider1input').value=dojo.number.format(arguments[0]/100,{places:1,pattern:'#%'});"
value="10"
maximum="100"
minimum="0"
showButtons="false"
intermediateChanges="true"
style="width:50%; height: 20px;"
id="horizontal1">
<ol dojoType="dijit.form.HorizontalRuleLabels" container="topDecoration" style="height:1.2em;font-size:75%;color:gray;" numericMargin="1" count="6"></ol>
<div dojoType="dijit.form.HorizontalRule" container="topDecoration" count=11 style="height:5px;"></div>
<div dojoType="dijit.form.HorizontalRule" container="bottomDecoration" count=5 style="height:5px;"></div>
<ol dojoType="dijit.form.HorizontalRuleLabels" container="bottomDecoration" style="height:1em;font-size:75%;color:gray;">
<li>lowest
<li>normal
<li>highest
</ol>
 
</div>
<br>Value: <input readonly id="slider1input" size="5" value="10.0%">
 
<div dojoType="dijit.form.HorizontalSlider" name="horizontal2"
minimum="1"
value="2"
maximum="3"
discreteValues="3"
showButtons="false"
intermediateChanges="true"
style="width:300px; height: 40px;"
id="horizontal2">
<div dojoType="dijit.form.HorizontalRule" container="bottomDecoration" count=3 style="height:5px;"></div>
<ol dojoType="dijit.form.HorizontalRuleLabels" container="bottomDecoration"style="height:1em;font-size:75%;color:gray;">
<li><img width=10 height=10 src="../tests/images/note.gif"><br><span style="font-size: small">small</span>
<li><img width=15 height=15 src="../tests/images/note.gif"><br><span style="font-size: medium">medium</span>
<li><img width=20 height=20 src="../tests/images/note.gif"><br><span style="font-size: large">large</span>
</ol>
</div>
 
<br style="clear:both;">
<hr class="spacer">
 
<h2>ProgressBar</h2>
<div style="width:400px" annotate="true" maximum="200" id="setTestBar"
progress="20" dojoType="dijit.ProgressBar"></div>
Indeterminate:
<div style="width:400px" indeterminate="true" dojoType="dijit.ProgressBar"></div>
 
<hr class="spacer">
 
<h2>TitlePane (nested)</h2>
<div dojoType="dijit.TitlePane" title="Outer pane" width="275">
<p>This is a title pane, containing another title pane ...</p>
<div dojoType="dijit.TitlePane" title="Inner pane" width="125">
<p>And this is the inner title pane...</p>
<p>Sed sollicitudin suscipit risus. Nam
ullamcorper. Sed nisl lectus, pellentesque nec,
malesuada eget, ornare a, libero. Lorem ipsum dolor
sit amet, consectetuer adipiscing elit.</p>
</div><!-- end inner titlepane -->
<p>And this is the closing line for the outer title pane.</p>
</div><!-- end outer title pane -->
<h2>HTML After, check indent</h2>
</div><!-- end:second upper tab -->
<!-- start third upper tab -->
<div id="tab3" dojoType="dijit.layout.ContentPane" title="Buttons"
style="padding:10px; display:none; ">
<h2>Simple, drop down &amp; combo buttons</h2>
<p>Buttons can do an action, display a menu, or both:</p>
<div class="box">
<button dojoType="dijit.form.Button" iconClass="plusIcon" onClick='console.debug("clicked simple")'>
Create
</button>
<button dojoType="dijit.form.DropDownButton" iconClass="noteIcon">
<span>Edit</span>
<div dojoType="dijit.Menu" id="editMenu" style="display: none;">
<div dojoType="dijit.MenuItem"
iconClass="dijitEditorIcon dijitEditorIconCut"
onClick="console.debug('not actually cutting anything, just a test!')">
Cut
</div>
<div dojoType="dijit.MenuItem"
iconClass="dijitEditorIcon dijitEditorIconCopy"
onClick="console.debug('not actually copying anything, just a test!')">
Copy
</div>
<div dojoType="dijit.MenuItem"
iconClass="dijitEditorIcon dijitEditorIconPaste"
onClick="console.debug('not actually pasting anything, just a test!')">
Paste
</div>
</div>
</button>
<button dojoType="dijit.form.ComboButton" iconClass="noteIcon"
optionsTitle='save options'
onClick='console.debug("clicked combo save")'>
<span>Save</span>
<div dojoType="dijit.Menu" id="saveMenu" style="display: none;">
<div dojoType="dijit.MenuItem"
iconClass="dijitEditorIcon dijitEditorIconSave"
onClick="console.debug('not actually saving anything, just a test!')">
Save
</div>
<div dojoType="dijit.MenuItem"
onClick="console.debug('not actually saving anything, just a test!')">
Save As
</div>
</div>
</button>
<button dojoType="dijit.form.Button" iconClass="plusIcon" onClick='console.debug("clicked simple")'
disabled='true'>
Disabled
</button>
</div><!-- end:box -->
<hr class="spacer">
<h2>Sizing</h2>
<p>Short button, tall buttons, big buttons, small buttons... These buttons
size to their content (just like &lt;button&gt;).</p>
<div class="box">
<button dojoType="dijit.form.Button" iconClass="flatScreenIcon" onclick='console.debug("big");'>
<span style="font-size:xx-large">big</span>
</button>
<button id="smallButton1" dojoType="dijit.form.Button" onclick='console.debug("small");'>
<img src="../tests/images/arrowSmall.gif" width="15" height="5">
<span style="font-size:x-small">small</span>
</button>
<button dojoType="dijit.form.Button" onclick='console.debug("long");'>
<img src="../tests/images/tube.gif" width="150" height="16"> long
</button>
<button dojoType="dijit.form.Button" onclick='console.debug("tall");' width2height="0.1">
<img src="../tests/images/tubeTall.gif" height="75" width="35"><br>
<span style="font-size:medium">tall</span>
</button>
<div style="clear: both;"></div>
</div><!-- end box -->
<hr class="spacer">
<h2>Customized buttons</h2>
<p>Dojo users can mix in their styles. Here's an example:</p>
<div class="box"><!-- custom styled button tests -->
<button dojoType="dijit.form.Button" class="Acme"
onclick='console.debug("short");'>
<div class="dc">short</div>
</button>
<button dojoType="dijit.form.Button" class="Acme"
onclick='console.debug("longer");'>
<div class="dc">bit longer</div>
</button>
<button dojoType="dijit.form.Button" class="Acme"
onclick='console.debug("longer yet");'>
<div class="dc">ridiculously long</div>
</button>
<div style="clear: both;"></div>
</div><!-- end styled buttons -->
</div><!-- end third upper tab-->
<!-- fourth upper tab -->
<div id="tab32" dojoType="dijit.layout.ContentPane" title="Editable Text" style="padding:10px;" selected="selected">
<h2>dijit.Editor:</h2>
<!-- FIXME:
set height on this node to size the whole editor, but causes the tab to not scroll
until you select another tab and come back. alternative is no height: here, but that
causes editor to become VERY tall, and size to a normal height when selected (like the
dijit.form.TextArea in "Form Feel" Tab), but in reverse. refs #3980 and is maybe new bug?
-->
<div style="border:1px solid #ededed;">
<textarea height="175" dojoType="dijit.Editor" styleSheets="../../dojo/resources/dojo.css" sytle="width:400px; height:175px; overflow:auto; ">
<ul>
<li>Lorem <a href="http://dojotoolkit.org">and a link</a>, what do you think?</li>
<li>This is the Editor with a Toolbar attached.</li>
</ul>
</textarea>
</div>
<hr class="spacer">
 
<h2 class="testTitle">dijit.InlineEditBox + dijit.form.TextBox</h2>
This is an editable header,
<h3 id="editable" style="font-size:larger;" dojoType="dijit.InlineEditBox" onChange="myHandler(this.id,arguments[0])">
Edit me - I trigger the onChange callback
</h3>
And keep the text around me static.
 
<hr class="spacer">
<h2>dijit.InlineEditBox + dijit.form.Textarea</h2>
 
(HTML before)
<p id="areaEditable" dojoType="dijit.InlineEditBox" editor="dijit.form.Textarea">
I'm one big paragraph. Go ahead and <i>edit</i> me. <b>I dare you.</b>
The quick brown fox jumped over the lazy dog. Blah blah blah blah blah blah blah ...
</p>
(HTML after)
 
<p>
These links will
<a href="#" onClick="dijit.byId('areaEditable').setDisabled(true)">disable</a> /
<a href="#" onClick="dijit.byId('areaEditable').setDisabled(false)">enable</a>
the text area above.
</p>
 
<hr class="spacer">
 
<h2>dijit.form.DateTextBox:</h2>
(HTML inline before)
<span id="backgroundArea" dojoType="dijit.InlineEditBox" editor="dijit.form.DateTextBox" width="170px">12/30/2005</span>
(HTML after)
 
<hr class="spacer">
 
<h2>dijit.form.TimeTextBox:</h2>
(HTML inline before)
<span id="timePicker" dojoType="dijit.InlineEditBox" editor="dijit.form.TimeTextBox" width="150px">9:00 AM</span>
(HTML after)
 
<hr class="spacer">
 
<h2>dijit.form.FilteringSelect + Inline + remote data store:</h2>
(HTML inline before)
<span id="backgroundArea2" dojoType="dijit.InlineEditBox" editor="dijit.form.FilteringSelect"
editorParams="{store: stateStore, autoComplete: true, promptMessage: 'Please enter a state'}"
width="300px">
Indiana
</span>
(HTML after)
</div><!-- end fourth upper tab -->
<!-- fourth upper tab -->
<div id="tab4" dojoType="dijit.layout.ContentPane" title="DnD"
style="padding:10px; display:none; ">
<div style="float:left; margin:5px; ">
<h3>Source 1</h3>
<div dojoType="dojo.dnd.Source" class="container">
<div class="dojoDndItem">Item <strong>X</strong></div>
<div class="dojoDndItem">Item <strong>Y</strong></div>
<div class="dojoDndItem">Item <strong>Z</strong></div>
</div>
</div>
<div style="float:left; margin:5px; ">
<h3>Source 2</h3>
<div dojoType="dojo.dnd.Source" class="container">
<div class="dojoDndItem">Item <strong>1</strong></div>
<div class="dojoDndItem">Item <strong>2</strong></div>
<div class="dojoDndItem">Item <strong>3</strong></div>
</div>
</div>
</div>
<!-- fifth upper tab -->
<div id="tab5" dojoType="dijit.layout.ContentPane" title="Closable"
style="display:none; padding:10px; " closable="true">
This pane is closable, just for the icon ...
</div>
</div><!-- end top part vertical split container -->
<!-- bottom half, vertical split container -->
<div dojoType="dijit.layout.TabContainer" tabPosition="bottom" selectedChild="btab1">
<!-- btab 1 -->
<div id="btab1" dojoType="dijit.layout.ContentPane" title="Info" style=" padding:10px; ">
<p>You can explore this single page after applying a Theme
for use in creation of your own theme.</p>
<p>I am whole slew of Widgets on a page. Jump to <a href="../tests/">dijit tests</a> to
test individual components.</p>
<p>There is a right-click [context] pop-up menu here, as well.</p>
</div><!-- end:info btab1 -->
<div id="btab21" dojoType="dijit.layout.ContentPane" title="Alternate Themes" style="padding:20px;">
<span id="themeData"></span>
</div><!-- btab21 -->
<div id="btab3" dojoType="dijit.layout.ContentPane" title="Bottom 3" closable="true">
<p>I am the last Tab</p>
<div id="dialog2" dojoType="dijit.Dialog" title="Encased Dialog" style="display:none;">
I am the second dialog. I am
parented by the Low Tab Pane #3
</div>
</div><!-- btab3 -->
</div><!-- end Bottom TabContainer -->
</div><!-- end embedded vertical split container -->
</div><!-- splitContainer parent -->
</div><!-- Layoutcontainer -->
 
<!-- dialog in body -->
<div id="dialog1" dojoType="dijit.Dialog" title="Floating Modal Dialog" style="display:none;" href="../tests/layout/doc0.html"></div>
 
</body>
</html>
/trunk/api/js/dojo1.0/dijit/themes/soria/rounded.css
New file
0,0 → 1,34
/*
this is experimental stylestuff for the pseudo-builtin support
webkit and firefox provide for CSS3 radius: property.
*/
.soria .dijitTab {
margin-left:0px;
-moz-border-radius-topleft:6pt;
-moz-border-radius-topright:5pt;
-webkit-border-top-left-radius:6pt;
-webkit-border-top-right-radius:6pt;
}
.soria .dijitAlignBottom .dijitTab {
 
-webkit-border-top-left-radius:0;
-webkit-border-top-right-radius:0;
-moz-border-radius-topleft:0;
-moz-border-radius-topright:0;
 
-webkit-border-bottom-left-radius:6pt;
-webkit-border-bottom-right-radius:6pt;
-moz-border-radius-bottomleft:6pt;
-moz-border-radius-bottomright:5pt;
}
 
.soria .dijitButton {
-moz-border-radius:4pt;
}
 
.soria .dijitDialogTitleBar {
-webkit-border-top-left-radius:6pt;
-webkit-border-top-right-radius:6pt;
-moz-border-radius-topleft:6pt;
-moz-border-radius-topright:5pt;
}
/trunk/api/js/dojo1.0/dijit/themes/soria/soria.js
New file
0,0 → 1,23
if(!dojo._hasResource["dijit.themes.soria"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo._hasResource["dijit.themes.soria"] = true;
dojo.provide("dijit.themes.soria");
/* theoritical implementation */
 
// dojo.requireCss(dojo.moduleUrl("dijit.themes.soria","soria.css");
// if (dojo.isRTL) {
// dojo.requireCss(dojo.moduleUrl("dijit.theme.soria","soria_rtl.css"));
// }
// if(dojo.isIE<7){
// dojo.requireCss(dojo.moduleUrl("dijit.themes.soria","soria_ie6.css"));
// var imgList = ["images/arrows.png","images/gradientTopBg"]; // png's w/ alpha
// // we'll take a hit performance wise with ie6, but such is life, right? and
// // it allows us to take dj_ie6 classes out of the root css for performance
// // enhancement on sane/good browsers.
// dojo.addOnLoad(function(){
// dojo.forEach(imgList,function(img){
// filter(img);
// });
// }
// }
 
}
/trunk/api/js/dojo1.0/dijit/themes/soria/soria.css
New file
0,0 → 1,1151
/*
Soria theme - not in solid state right now. Not ready for production ...
` please feel free to add styles for new widgets should they appear,
or fix classnames you would fix in tundra.css if you change a widget
template classname.
*/
 
@import url("../dijit.css");
 
/* un-comment to endable webkit and ff2 builtin love */
/*
@import url("rounded.css");
*/
 
.dj_safari .soria .dijitPopup {
-webkit-box-shadow: 0px 3px 7px #adadad;
}
 
/* try and group similar look and feel into these main groupings, and put extra stling grouped
by widget somehwere below (most already have sections) */
.soria .dijitButtonNode,
.soria .dijitToolbar,
.soria .dijitTab,
.soria .dijitSplitContainerSizerV,
.soria .dijitAccordionPane .dijitAccordionTitle,
.soria .dijitCalendarMonthContainer th,
.soria .dijitProgressBarEmpty,
.soria .dijitTooltipContainer,
.soria .dijitHorizontalSliderRemainingBar {
background:#b7cdee url('images/gradientTopBg.png') repeat-x;
/* background:#090 url('images/gradientTopBg.png') repeat-x; */
#background-image:none !important;
}
 
.soria .dijitButtonHover .dijitButtonNode,
.soria .dijitToggleButtonHover .dijitButtonNode,
.soria .dijitDropDownButtonHover .dijitButtonNode,
.soria .dijitComboButtonHover .dijitButtonContents,
.soria .dijitComboButtonDownArrowHover .dijitDownArrowButton,
.soria .dijitComboBoxHover .dijitDownArrowButton,
.soria .dijitSpinnerUpArrowHover .dijitUpArrowButton,
.soria .dijitSpinnerDownArrowHover .dijitDownArrowButton,
.soria .dijitTitlePane .dijitTitlePaneTitle,
.soria .dijitTabHover,
.soria .dijitTabCloseButtonHover,
.soria .dijitDialogTitleBar,
.soria .dijitAccordionPane-selected .dijitAccordionTitle,
.soria .dijitProgressBarTile,
.soria .dijitHorizontalSliderProgressBar {
background:#4f8ce5 url('images/gradientTopBg.png') repeat-x;
 
}
 
/* all icons are here */
.soria .dijitComboBox .dijitDownArrowButtonInner,
.soria .dijitMenuExpandEnabled,
.soria .dijitTitlePane .dijitClosed .dijitArrowNode,
.soria .dijitTitlePane .dijitOpen .dijitArrowNode,
.soria .dijitTab .dijitClosable .closeImage,
.soria .dijitTabCloseButton .dijitClosable .closeImage,
.soria .dijitTabCloseButtonHover .dijitClosable .closeImage,
.soria .dijitSplitContainerSizerH .thumb,
.soria .dijitSplitContainerSizerV .thumb,
.soria .dijitDialogCloseIcon,
.soria .dijitTooltipConnector,
.soria .dijitAccordionArrow,
.soria .dijitCalendarDecrease,
.soria .dijitCalendarIncrease,
.soria .dijitHorizontalSliderDecrementIcon,
.soria .dijitHorizontalSliderIncrementIcon,
.soria .dijitVerticalSliderIncrementIcon,
.soria .dijitVerticalSliderDecrementIcon,
.soria .dijitHorizontalSliderImageHandle,
.soria .dijitVerticalSliderImageHandle,
.soria .dijitInputFieldValidationIconNormal,
.soria .dijitInputFieldValidationIcon,
/* FIXME: need to make these spans inside the cell? */
.soria.dojoDndMove .dojoDndAvatarCanDrop .dojoDndAvatarHeader,
.soria.dojoDndCopy .dojoDndAvatarCanDrop .dojoDndAvatarHeader,
.soria.dojoDndCopy .dojoDndAvatarHeader,
.soria.dojoDndMove .dojoDndAvatarHeader,
/* FIXME: should be .dijitRtl .soria ... {} */
.dijitRtl .dijitCalendarDecrease,
.dijitRtl .dijitCalendarIncrease,
.dijitRtl .dijitMenuItem .dijitMenuExpandEnabled,
.dijitRtl .dijitTitlePane .dijitClosed .dijitArrowNode,
.dijitRtl .dijitDialogTitleBar .dijitDialogCloseIcon
{
width:16px;
height:16px;
overflow:hidden;
margin:0; padding:0;
background-image: url('images/arrows.png');
background-repeat: none;
}
 
.soria .dijitCheckBoxIcon,
.soria .dijitRadioIcon,
.soria .dijitCheckBox,
.soria .dijitRadio {
width:16px;
height:16px;
margin:0; padding:0;
background-image: url('images/arrows.png');
}
 
/* Control opacity of popups */
.soria .dijitPopup div,
.soria .dijitPopup table {
opacity: 0.95;
}
/*
dijit.form.Button
dijit.form.DropDownButton
dijit.form.ComboButton
dijit.form.ComboBox (partial)
*/
.soria .dijitButtonNode {
/* enabled state - inner */
border:1px solid #4f8ce5;
vertical-align: middle;
padding: 0.2em 0.2em;
}
 
.dj_ie6 .soria .dijitButtonNode {
zoom: 1;
padding-bottom: 0.1em;
}
 
.soria .dijitButtonDisabled .dijitButtonNode,
.soria .dijitToggleButtonDisabled .dijitButtonNode,
.soria .dijitDropDownButtonDisabled .dijitButtonNode,
.soria .dijitComboButtonDisabled .dijitButtonNode,
.soria .dijitComboBoxDisabled .dijitDownArrowButton,
.soria .dijitComboBoxDisabled .dijitInputField,
.soria .dijitSpinnerDisabled .dijitInputField,
.soria .dijitSpinnerDisabled .dijitButtonNode {
/* disabled state - inner */
border: 1px solid #d5d5d5;
background:#ccc url("images/gradientTopBg.png") repeat-x top left;
opacity: 0.50; /* Safari, Opera and Mozilla */
}
.soria .dijitButtonDisabled .dijitButtonNode *,
.soria .dijitToggleButtonDisabled .dijitButtonNode *,
.soria .dijitDropDownButtonDisabled .dijitButtonNode *,
.soria .dijitComboButtonDisabled .dijitButtonNode *,
.soria .dijitSpinnerDisabled .dijitButtonNode * {
filter: gray() alpha(opacity=50); /* IE */
}
 
.soria .dijitButtonHover .dijitButtonNode,
.soria .dijitToggleButtonHover .dijitButtonNode,
.soria .dijitDropDownButtonHover .dijitButtonNode,
.soria .dijitComboButtonHover .dijitButtonContents,
.soria .dijitComboButtonDownArrowHover .dijitDownArrowButton,
.soria .dijitComboBoxHover .dijitDownArrowButton,
.soria .dijitSpinnerUpArrowHover .dijitUpArrowButton,
.soria .dijitSpinnerDownArrowHover .dijitDownArrowButton {
/* hover state - inner */
border-color:#666;
color:#fff;
background-position:0px -1px;
}
 
.soria .dijitButtonActive .dijitButtonNode,
.soria .dijitToggleButtonActive .dijitButtonNode,
.soria .dijitDropDownButtonActive .dijitButtonNode,
.soria .dijitComboButtonActive .dijitButtonContents,
.soria .dijitDownArrowActive .dijitDownArrowButton,
.soria .dijitComboBoxActive .dijitDownArrowButton {
/* active state - inner (for when you are pressing a normal button, or
* when a toggle button is in a depressed state
*/
border-color:#333;
background: #cbdcf7 url("images/gradientBottomBg.png") bottom repeat-x;
}
 
/* button inner contents - labels, icons etc. */
.soria .dijitButtonNode * {
display: -moz-inline-box;
display: inline-block;
vertical-align: middle;
}
.dj_ie .soria .dijitButtonNode * {
zoom: 1;
display:inline;
}
.soria .dijitButtonText {
padding: 0 0.3em;
}
 
 
.soria .dijitToolbar {
border: 1px solid #333;
}
.soria .dijitToolbar * {
padding: 0px;
margin: 0px;
}
.dj_ie .soria .dijitToolbar {
padding-bottom: 1px;
margin-top: -1px;
}
.soria .dijitToolbar .dijitButtonNode {
padding: 0px;
margin: 0px;
border: 1px solid transparent;
background: none;
}
.soria .dijitToolbar .dijitToggleButtonChecked .dijitButtonNode {
background-color:#C1D2EE;
border:1px solid #666;
border-top:0;
border-bottom:0;
}
.soria .dijitToolbar .dijitToggleButtonCheckedHover .dijitButtonContents {
border-color: #000;
background-color:transparent;
}
.dj_ie6 .soria .dijitToolbar .dijitButtonNode {
/* workaround no transparent border support in IE6*/
border-color: #e9e9e9;
}
.soria .dijitToolbar .dijitButtonHover .dijitButtonNode,
.soria .dijitToolbar .dijitToggleButtonHover .dijitButtonNode,
.soria .dijitToolbar .dijitDropDownButtonHover .dijitButtonNode {
border-color: #366dba;
}
.dijitToolbarSeparator {
background: url('images/editor.gif');
height: 18px;
width: 5px;
padding: 0px 1px 0px 1px;
margin: 0px;
}
.soria .dijitToolbar .dijitToolbarSeparator {
background: url('images/editor.gif');
}
 
/* ComboBox-icon-specific */
.soria .dijitComboBox .dijitDownArrowButtonChar {
/* visibility:hidden; */
display:none;
}
.soria .dijitComboBox .dijitDownArrowButtonInner { background-position:0px 0px; }
.soria .dijitComboBoxHover .dijitDownArrowButtonInner { }
.soria .dijitSpinner .dijitButtonNode {
padding: 0 .4em 0 .4em;
}
 
/*
dijit.form.TextBox
dijit.form.ValidationTextBox
dijit.form.SerializableTextBox
dijit.form.RangeBoundTextBox
dijit.form.NumberTextBox
dijit.form.CurrencyTextBox
dijit.form.NumberSpinner
dijit.form.ComboBox (partial)
*/
.soria .dijitComboBox {
/* put margin on the outer element of the autocompleter rather than the input */
margin:.0em .1em .2em .1em;
}
 
.soria .dijitInputField,
.soria .dijitInlineEditor input,
.soria .dijitTextArea {
/* For all except dijit.form.NumberSpinner: the actual input element.
For dijit.form.NumberSpinner: the outer fieldset that contains the input.
*/
font-size: inherit;
background:#fff url("images/gradientInverseTopBg.png") repeat-x top left;
background-position:0 -32px;
/* border:1px solid #333; */
line-height: normal;
padding: 0.2em 0.3em;
}
 
.dj_ie .soria TD.dijitInputField,
.dj_ie .soria .dijitInputField INPUT {
height: 1.65em; /* set height for IE since the INPUT is position:absolute */
}
 
.dj_safari .soria .dijitInputField {
padding: 0.08em 0.3em; /* looks better */
}
 
.soria INPUT.dijitTextBox {
padding: 0.2em 0.3em;
}
 
.dj_ie .soria .dijitTextBox INPUT,
.dj_ie .soria .dijitComboBox INPUT,
.dj_ie .soria .dijitSpinner INPUT {
width:95% !important; /* add a little padding-right for position:absolute INPUT */
}
 
.soria .dijitComboBoxFocused .dijitInputField {
/* input field when focused (eg: typing affects it) */
border-color:#333;
border-style:inset;
}
 
.soria .dijitComboBoxDisabled .dijitInputField {
/* input field when disabled (also set above) */
}
 
.soria .dijitComboBoxHover .dijitInputField {
/* input field when hovered over */
border-color:#4f8ce5;
}
 
.soria .dijitComboBoxActive .dijitInputField {
/* input field when mouse is down (?) */
}
 
/* Dojo Input Field */
 
HTML.dj_ie6 .soria .dijitInputFieldValidationNormal,
.soria .dijitInputFieldValidationNormal {
}
 
HTML.dj_ie6 .soria .dijitInputFieldValidationError,
.soria .dijitInputFieldValidationError {
border:1px solid #f3d118;
background-color::#f9f7ba;
background-image:none;
}
 
.soria .dijitInputFieldFocused {
border:1px solid #000;
}
 
.soria .dijitInputFieldValidationError:hover,
.soria .dijitInputFieldValidationError:focus {
background-color:#ff6;
background-image:none;
}
.soria .dijitInputFieldValidationIcon {
margin-left: 3px;
padding-bottom: 1px;
}
.soria .dijitInputFieldValidationIconNormal {
background-image: none;
}
 
.soria .dijitInputFieldValidationIconError {
background-position:-384px 0px;
}
 
.soria .dijitInputFieldValidationIconText {
visibility: hidden;
}
 
/* CheckBox and Radio Widgets, and the CSS to embed a checkbox or radio icon inside a ToggleButton. */
 
.soria .dijitToggleButton .dijitCheckBox,
.soria .dijitToggleButton .dijitRadio,
.soria .dijitToggleButton .dijitCheckBoxIcon,
.soria .dijitToggleButton .dijitRadioIcon {
background-image: url('images/checkmarkNoBorder.gif');
}
 
.soria .dijitCheckBox, .soria .dijitToggleButton .dijitCheckBoxIcon { background-position: -112px; }/* unchecked */
.soria .dijitCheckBoxChecked,
.soria .dijitToggleButtonChecked .dijitCheckBoxIcon { background-position: -96px; } /* checked */
.soria .dijitCheckBoxDisabled { /* disabled */ background-position: -144px; }
.soria .dijitCheckBoxCheckedDisabled { background-position: -128px; } /* disabled but checked */
.soria .dijitCheckBoxHover,
.soria .dijitCheckBoxFocused { background-position: -176px; } /* hovering over an unchecked enabled checkbox */
.soria .dijitCheckBoxCheckedHover,
.soria .dijitCheckBoxCheckedFocused { background-position: -160px; } /* hovering over a checked enabled checkbox */
.soria .dijitRadio,
.soria .dijitToggleButton .dijitRadioIcon { background-position: -208px; } /* unselected */
.soria .dijitRadioChecked,
.soria .dijitToggleButtonChecked .dijitRadioIcon { background-position: -192px; } /* selected */
.soria .dijitRadioCheckedDisabled { background-position: -224px; } /* selected but disabled */
.soria .dijitRadioDisabled { background-position: -240px; } /* unselected and disabled */
.soria .dijitRadioHover,
.soria .dijitRadioFocused { background-position: -272px; } /* hovering over an unselected enabled radio button */
.soria .dijitRadioCheckedHover,
.soria .dijitRadioCheckedFocused { background-position: -256px; } /* hovering over a selected enabled radio button */
 
/* diji.Menu */
.soria .dijitMenu {
border: 1px solid #333;
margin: 0px;
padding: 0px;
}
.soria .dijitMenuSeparator,
.soria .dijitMenuItem {
background-color: #b7cdee;
font: menu;
margin: 0;
}
.soria .dijitMenuItem TD {
padding:2px;
outline:0;
}
.soria .dijitMenuItemHover {
background-color: #4f8ce5;
color:#fff;
}
.soria .dijitMenuExpand {
display:none;
}
.soria .dijitMenuExpandEnabled {
background-position: -48px 0px;
display:block;
}
.soria .dijitMenuExpandInner {
display:none !important;
}
/* separator can be two pixels -- set border of either one to 0px to have only one */
.soria .dijitMenuSeparatorTop {
border-bottom: 1px solid #333;
}
 
.soria .dijitMenuSeparatorBottom {
border-top: 1px solid #666;
}
 
/* TitlePane */
.soria .dijitTitlePane .dijitTitlePaneTitle {
border:1px solid #333;
border-bottom:0;
background-position:0px -1px;
padding:4px 4px 4px 4px;
cursor: pointer;
color:#fff;
font-weight:bold;
}
.soria .dijitTitlePane .dijitClosed {
border-bottom:1px solid #333;
}
.soria .dijitTitlePane .dijitClosed .dijitArrowNode { background-position:-48px 0px; }
.soria .dijitTitlePane .dijitOpen .dijitArrowNode { background-position:0px 0px; }
.soria .dijitTitlePane .dijitArrowNodeInner { visibility:hidden; }
.soria .dijitTitlePaneTitle .dijitOpenCloseArrowOuter { margin-right:5px; }
.soria .dijitOpen .dijitTitlePaneTitle .dijitOpenCloseArrowOuter {
position:relative;
top:2px;
}
.soria .dijitTitlePaneContentOuter {
background: #ffffff;
border:1px solid #666;
border-top: 1px solid #666; /* w/out this, an <h1> on the top line causes a gap between the .content and .label */
}
.soria .dijitTitlePaneContentInner {
padding:10px;
}
/* force hasLayout to ensure borders etc, show up */
.dj_ie6 .soria .dijitTitlePaneContentOuter,
.dj_ie6 .soria .dijitTitlePane .dijitTitlePaneTitle {
zoom: 1;
}
.soria .dijitClickableRegion {
background-color : #ffc !important;
}
 
/* Tabs */
.soria .dijitTabPaneWrapper {
background:#fff;
/* border:1px solid #b7cde5; */
border:1px solid #666;
}
 
.soria .dijitTab {
line-height:normal;
margin-right:3px; /* space between one tab and the next in top/bottom mode */
padding:0px;
border:1px solid #666;
}
 
.soria .dijitAlignLeft .dijitTab,
.soria .dijitAlignRight .dijitTab {
margin-right:0px;
margin-bottom:5px; /* space between one tab and the next in left/right mode */
}
 
.soria .dijitTabInnerDiv {
padding:6px 10px 4px 10px;
/* border-left:1px solid #fff; */
border-bottom:transparent;
}
.dj_ie6 .soria .dijitTabInnerDiv { border-bottom:0; }
 
.soria .dijitTabInnerDiv span {
outline:0;
}
 
.soria .dijitTabHover,
.soria .dijitTabCloseButtonHover {
color: #fff;
border-top-color:#333;
border-left-color:#333;
border-right-color:#333;
}
 
.soria .dijitTabChecked,
.soria .dijitTabCloseButtonChecked
{
/* the selected tab (with or without hover) */
background-color:#fff;
border-color:#666;
border-top:1px solid #666;
color:#333;
/* border-color: #4F8CE5; */
/* border-top:1px solid #4f8ce5; */
background-image:none;
}
.soria .dijitTabCloseButton {
border-bottom:1px solid #fff;
}
 
/* make the active tab white on the side next to the content pane */
.soria .dijitAlignTop .dijitTabChecked,
.soria .dijitAlignTop .dijitTabCloseButtonChecked
{
border-bottom-color:white;
vertical-align:bottom;
}
 
.soria .dijitAlignBottom .dijitTabChecked,
.soria .dijitAlignBottom .dijitTabCloseButtonChecked
{
border-top-color:transparent;
-moz-border-radius:2px 2px 0px 0px; /* eliminate some border detritrus on moz */
}
 
.soria .dijitAlignLeft .dijitTabChecked,
.soria .dijitAlignLeft .dijitTabCloseButtonChecked
{
border-right-color:white;
}
 
.soria .dijitAlignRight .dijitTabChecked,
.soria .dijitAlignRight .dijitTabCloseButtonChecked
{
border-left-color:white;
}
 
/* make space for a positioned close button */
.soria .dijitTab .dijitClosable {
position: relative;
padding:6px 24px 3px 10px;
/* border-bottom:transparent; */
}
 
.soria .dijitTab .dijitClosable .closeImage {
position:absolute;
top: 5px;
right: 3px;
background-position:-65px -1px;
}
 
.soria .dijitTabCloseButton .dijitClosable .closeImage { background-position:-65px -1px; }
.soria .dijitTabCloseButtonHover .dijitClosable .closeImage { background-position:-81px -1px; }
 
.soria .dijitAlignLeft .dijitTab .dijitClosable {
padding:6px 10px 6px 20px;
}
/* correct for IE6.
We cant force hasLayout as that blows out the shrink wrapped tabs
..so we shim in the closeImage position properties instead
*/
.dj_ie6 .soria .dijitAlignLeft .dijitTab .dijitClosable .closeImage {
left:-20px;
}
 
.soria .dijitAlignBottom .dijitTab .dijitClosable .closeImage {
top: auto;
bottom: 5px;
right: 2px;
}
 
.soria .dijitAlignLeft .dijitTab .dijitClosable .closeImage {
top: 2px;
left: 5px;
}
 
/* SplitContainer */
 
.soria .dijitSplitContainerSizerH {
background:#b7cdee url("images/gradientLeftBg.png") repeat-y;
border:0;
border-right:1px solid #cbdcf7;
width:7px;
}
 
.soria .dijitSplitContainerSizerH .thumb {
background-position:-357px 0px;
left:0px;
width:6px;
}
 
.soria .dijitSplitContainerSizerV {
border:0;
border-bottom:1px solid #cbdcf7;
height:7px;
}
 
.soria .dijitSplitContainerSizerV .thumb {
background-position:-368px -5px;
top:0px;
height:6px;
}
 
/* Dialog */
.soria .dijitDialog {
margin:0; padding:0;
background: #eee;
border: 1px solid #666;
border-top:0px;
-webkit-box-shadow: 0px 3px 7px #adadad;
}
 
.soria .dijitDialog .dijitDialogTitle {
border-top: none;
border-left: none;
border-right: none;
}
 
.soria .dijitDialog .dijitDialogPaneContent {
background: #ffffff;
border:none;
padding:10px;
outline:0;
opacity:1;
}
 
.soria .dijitDialogTitleBar {
/* outer container for the titlebar of the dialog */
border-top: 1px solid #666;
border-bottom: 1px solid #666;
padding: 4px 4px 4px 4px;
cursor: move;
outline:0;
}
 
.soria .dijitDialogTitle {
/* typography and styling of the dialog title */
font-weight: bold;
color:#fff;
padding: 8px 8px 8px 8px;
outline:0;
}
 
.soria .dijitDialogCloseIcon {
/* the default close icon for the dialog */
background-position:-64px 0px;
float: right;
position: absolute;
vertical-align: middle;
right: 5px;
top: 5px;
cursor: pointer;
}
.soria .dijitDialogContent {
/* the body of the dialog */
padding: 8px;
}
 
/* Tooltip */
.soria .dijitTooltip,
.soria .dijitTooltipDialog {
/* the outermost dom node, holding the connector and container */
opacity: 0.85;
background: transparent; /* make the area on the sides of the arrow transparent */
}
 
.dijitTooltipBelow {
/* leave room for arrow above content */
padding-top: 13px;
}
 
.dijitTooltipAbove {
/* leave room for arrow below content */
padding-bottom: 13px;
}
 
.soria .dijitTooltipContainer {
background-color:#ffc;
background-position:0 -30px;
border:1px solid #333;
padding:0.45em;
border-radius: 6px;
-moz-border-radius: 7px;
-webkit-border-radius: 6px;
}
.soria .dijitTooltipContents {
outline:0; /* the node that gets focus */
}
 
.soria .dijitTooltipConnector {
/* the arrow piece */
border:0px;
z-index: 2;
width:16px;
height:14px;
}
.soria .dijitTooltipABRight .dijitTooltipConnector {
left: auto !important;
right: 3px;
}
.soria .dijitTooltipBelow .dijitTooltipConnector {
/* the arrow piece for tooltips below an element */
top: 0px;
left: 3px;
background-position:-336px 0px;
}
.soria .dijitTooltipAbove .dijitTooltipConnector {
/* the arrow piece for tooltips above an element */
bottom: 0px;
left: 3px;
background-position:-304px 0px;
}
.soria .dijitTooltipLeft {
padding-right: 14px;
}
.dj_ie6 .soria .dijitTooltipLeft {
padding-right: 16px;
}
.soria .dijitTooltipLeft .dijitTooltipConnector {
/* the arrow piece for tooltips to the left of an element, bottom borders aligned */
right: 0px;
bottom: 7px;
background-position:-288px 0px;
}
.soria .dijitTooltipRight {
padding-left: 13px;
}
.soria .dijitTooltipRight .dijitTooltipConnector {
/* the arrow piece for tooltips to the right of an element, bottom borders aligned */
left: 0px;
bottom: 7px;
background-position:-321px 0px;
}
 
/* dijit.layout.AccordionPane */
.soria .dijitAccordionPane .dijitAccordionTitle {
border:1px solid #666;
border-bottom:0;
padding:5px 5px 3px 5px;
color:#333;
}
 
.soria .dijitAccordionPane-selected .dijitAccordionTitle {
color:#fff;
padding: 5px 5px 3px 5px;
font-weight: bold;
}
 
.soria .dijitAccordionPane .dijitAccordionArrow {
background-position: -32px 0px;
}
.soria .dijitAccordionPane-selected .dijitAccordionArrow {
background-position: 0px 0px;
}
.soria .dijitAccordionPane .dijitAccordionBody {
background: #fff;
border:1px solid #666;
border-bottom:0;
}
 
/* Tree */
.soria .dijitTreeNode {
margin-left: 19px;
cursor:pointer;
zoom: 1;
}
.soria .dijitTreeIsRoot {
margin-left: 4px;
}
/* left vertical line (grid) for all nodes */
.soria .dijitTreeIsLast {
background: transparent;
}
.soria .dijitTreeExpando {
width: 18px;
height: 18px;
cursor:pointer;
}
.soria .dijitTreeContent {
min-height: 18px;
min-width: 18px;
margin-left:16px;
padding-top:3px;
padding-left:1px;
}
.soria .dijitTreeExpand {
width: 18px;
height: 18px;
background-repeat : no-repeat;
}
/* same style as IE selection */
.soria .dijitTreeNodeEmphasized {
background-color: Highlight;
color: HighlightText;
}
 
/* don't use :focus due to opera and IE's lack of support on div's */
.soria .dijitTreeLabelFocused {
outline:0;
border-top:0;
border-bottom:2px solid #4f8ce5;
background-color:#b7cdee;
}
 
/* FIXME: convert to sprites */
.soria .dijitTreeExpandoOpened { background-image: url('images/treeExpand_minus.gif'); }
.soria .dijitTreeExpandoClosed { background-image: url('images/treeExpand_plus.gif'); }
.soria .dijitTreeExpandoLeaf { }
.soria .dijitTreeExpandoLoading { background-image: url('images/treeExpand_loading.gif'); }
 
/* Calendar*/
.dj_ie6 .soria .dijitCalendarIncrementControl {
padding:.1em;
}
 
.soria .dijitCalendarIncreaseInner,
.soria .dijitCalendarDecreaseInner { display:none; }
.soria .dijitCalendarDecrease { background-position:-16px 0px; }
.soria .dijitCalendarIncrease { background-position:-48px 0px; }
.soria table.dijitCalendarContainer {
font-size: 100%;
border-collapse: collapse;
border-spacing: 0;
border: 1px solid #666;
margin: 0;
}
 
.soria .dijitCalendarMonthContainer th {
/* month header cell */
padding-top:.3em;
padding-bottom:.1em;
text-align:center;
}
.dj_ie6 .soria .dijitCalendarMonthContainer th {
padding-top:.1em;
padding-bottom:0em;
}
 
.soria .dijitCalendarDayLabelTemplate {
/* day of week labels */
background:#b7cdee url("images/gradientBottomBg.png") repeat-x bottom;
font-weight:normal;
background-position:0 -28px;
padding-top:.15em;
padding-bottom:0em;
border-top:0;
border-bottom:1px solid #666;
color:#293a4b;
text-align:center;
}
 
.soria .dijitCalendarMonthLabel {
/* day of week labels */
color:#293a4b;
font-size: 0.75em;
font-weight: bold;
text-align:center;
}
 
.dj_ie7 .soria .dijitCalendarDateTemplate,
.dj_ie6 .soria .dijitCalendarDateTemplate {
font-size: 0.8em;
}
 
.soria .dijitCalendarDateTemplate {
/* style for each day cell */
font-size: 0.9em;
font-weight: bold;
text-align: center;
padding: 0.3em 0.3em 0.05em 0.3em;
letter-spacing: 1px;
}
 
 
.soria .dijitCalendarPreviousMonth,
.soria .dijitCalendarNextMonth {
/* days that are part of the previous or next month */
color:#999999;
background-color:#f8f8f8 !important;
}
 
.soria .dijitCalendarPreviousMonthDisabled,
.soria .dijitCalendarNextMonthDisabled {
/* days that are part of the previous or next month - disabled*/
background-color:#a4a5a6 !important;
}
 
.soria .dijitCalendarCurrentMonth {
/* days that are part of this month */
background-color:white !important;
}
 
.soria .dijitCalendarCurrentMonthDisabled {
/* days that are part of this month - disabled */
background-color:#bbbbbc !important;
}
 
.soria .dijitCalendarCurrentDate {
/* cell for today's date */
text-decoration:underline;
font-weight:bold;
}
 
.soria .dijitCalendarSelectedDate {
/* cell for the selected date */
background-color:#4f8ce5 !important;
color:#fff !important;
}
 
 
.soria .dijitCalendarYearContainer {
/* footer of the table that contains the year display/selector */
background:#b7cdee url("images/gradientBottomBg.png") repeat-x bottom;
border-top:1px solid #333;
}
 
.soria .dijitCalendarYearLabel {
/* container for all of 3 year labels */
margin:0;
padding:0.4em 0 0.25em 0;
text-align:center;
}
 
.soria .dijitCalendarSelectedYear {
/* label for selected year */
color:#fff;
padding:0.2em;
padding-bottom:0.1em;
background-color:#4f8ce5 !important;
}
 
.soria .dijitCalendarNextYear,
.soria .dijitCalendarPreviousYear {
/* label for next/prev years */
color:black !important;
font-weight:normal;
}
 
/* inline edit boxen */
.soria .dijitInlineValue {
/* span around an inline-editable value when NOT in edit mode */
padding:3px;
margin:4px;
}
 
 
/* MOW: trying to get this to look like a mini-dialog. Advised? */
.soria .dijitInlineEditor {
/* fieldset surrounding an inlineEditor in edit mode */
display: inline-block;
display: -moz-inline-stack;
}
.dj_ie6 .dijitInLineEditor {
display:inline;
}
.dijitInlineEditor .saveButton,
.dijitInlineEditor .cancelButton {
margin:3px 3px 3px 0px;
}
 
/* spinner */
.soria .dijitSpinner {}
.soria .dijitSpinner input {
}
 
/* dijit.ProgressBar */
.soria .dijitProgressBar {
margin:2px 0px 2px 0px;
}
 
.soria .dijitProgressBarEmpty {
/* outer container and background of the bar that's not finished yet*/
border-color: #333;
}
 
.soria .dijitProgressBarTile {
/* inner container for finished portion when in 'tile' (image) mode */
}
 
.soria .dijitProgressBarLabel {
/* Set to a color that contrasts with both the "Empty" and "Full" parts. */
color:#293a4b;
}
 
.soria .dijitProgressBarIndeterminate .dijitProgressBarTile {
/* use an animated gif for the progress bar in 'indeterminate' mode */
background:#b7cdee url("images/progressBarAnim.gif") repeat-x top left;
/* FIXME: make a white/alpha animation to overlay a colored node */
}
 
/* dijit.Slider(s) */
.soria .dijitHorizontalSliderProgressBar {
border-color: #333;
zoom:1;
}
.soria .dijitVerticalSliderProgressBar {
border-color: #333;
background: #4f8ce5 url("images/gradientLeftBg.png") repeat-y bottom left;
}
.soria .dijitVerticalSliderRemainingBar {
border-color: #333;
background: #b7cdee url("images/gradientLeftBg.png") repeat-y bottom left;
}
.soria .dijitHorizontalSliderRemainingBar { border-color: #333; }
.soria .dijitSliderBar {
border-style: solid;
outline:1px;
}
 
.soria .dijitHorizontalSliderImageHandle {
border:0px;
background-position:-416px 0px;
cursor:pointer;
}
.soria .dijitHorizontalSliderLeftBumper {
border:0;
border-right:1px solid #333;
background:transparent;
}
.soria .dijitHorizontalSliderRightBumper {
border:0;
border-left:1px solid #333;
background:transparent;
}
 
.soria .dijitVerticalSliderImageHandle {
border:0px;
background-position:-400px 0px;
cursor:pointer;
}
 
.soria .dijitVerticalSliderBottomBumper {
border-bottom-width: 1px;
border-color: #333;
background: #4f8ce5 url("images/gradientLeftBg.png") repeat-y bottom left;
}
 
.soria .dijitVerticalSliderTopBumper {
background: #b7cdee url("images/gradientLeftBg.png") repeat-y top left;
border-color: #333;
border-top-width: 1px;
}
 
.soria .dijitSliderDisabled {
opacity:0.5 !important;
}
.dj_ie6 .soria .dijitSliderDisabled {
filter: gray() alpha(opacity=50);
}
 
.soria .dijitHorizontalSliderIncrementIcon { background-position:-48px 0px; }
.soria .dijitHorizontalSliderDecrementIcon { background-position:-16px 0px; }
.soria .dijitVerticalSliderIncrementIcon { background-position:-32px 0px; }
.soria .dijitVerticalSliderDecrementIcon { background-position:0px 0px; }
 
.soria .dijitSliderButtonInner { visibility:hidden; }
.dijit_a11y .dijitSliderButtonInner { visibility:visible !important; }
 
/* ICONS */
.soria .dijitEditorIcon {
background-image: url('images/editor.gif'); /* editor icons sprite image */
background-repeat: no-repeat;
width: 18px;
height: 18px;
text-align: center;
}
.soria .dijitEditorIconSep { background-position: 0px; }
.soria .dijitEditorIconBackColor { background-position: -18px; }
.soria .dijitEditorIconBold { background-position: -36px; }
.soria .dijitEditorIconCancel { background-position: -54px; }
.soria .dijitEditorIconCopy { background-position: -72px; }
.soria .dijitEditorIconCreateLink { background-position: -90px; }
.soria .dijitEditorIconCut { background-position: -108px; }
.soria .dijitEditorIconDelete { background-position: -126px; }
.soria .dijitEditorIconForeColor { background-position: -144px; }
.soria .dijitEditorIconHiliteColor { background-position: -162px; }
.soria .dijitEditorIconIndent { background-position: -180px; }
.soria .dijitEditorIconInsertHorizontalRule { background-position: -198px; }
.soria .dijitEditorIconInsertImage { background-position: -216px; }
.soria .dijitEditorIconInsertOrderedList { background-position: -234px; }
.soria .dijitEditorIconInsertTable { background-position: -252px; }
.soria .dijitEditorIconInsertUnorderedList { background-position: -270px; }
.soria .dijitEditorIconItalic { background-position: -288px; }
.soria .dijitEditorIconJustifyCenter { background-position: -306px; }
.soria .dijitEditorIconJustifyFull { background-position: -324px; }
.soria .dijitEditorIconJustifyLeft { background-position: -342px; }
.soria .dijitEditorIconJustifyRight { background-position: -360px; }
.soria .dijitEditorIconLeftToRight { background-position: -378px; }
.soria .dijitEditorIconListBulletIndent { background-position: -396px; }
.soria .dijitEditorIconListBulletOutdent { background-position: -414px; }
.soria .dijitEditorIconListNumIndent { background-position: -432px; }
.soria .dijitEditorIconListNumOutdent { background-position: -450px; }
.soria .dijitEditorIconOutdent { background-position: -468px; }
.soria .dijitEditorIconPaste { background-position: -486px; }
.soria .dijitEditorIconRedo { background-position: -504px; }
.soria .dijitEditorIconRemoveFormat { background-position: -522px; }
.soria .dijitEditorIconRightToLeft { background-position: -540px; }
.soria .dijitEditorIconSave { background-position: -558px; }
.soria .dijitEditorIconSpace { background-position: -576px; }
.soria .dijitEditorIconStrikethrough { background-position: -594px; }
.soria .dijitEditorIconSubscript { background-position: -612px; }
.soria .dijitEditorIconSuperscript { background-position: -630px; }
.soria .dijitEditorIconUnderline { background-position: -648px; }
.soria .dijitEditorIconUndo { background-position: -666px; }
.soria .dijitEditorIconWikiword { background-position: -684px; }
 
.dj_ie6 .soria .dijitInputField
{
background:#fff;
/* FIXME: un-comment when a pretty version of .gif is made */
/* background-image: url("images/dojoTundraGradientBg.gif"); */
}
 
/* Disabled cursor */
.soria .dijitDisabledClickableRegion, /* a region the user would be able to click on, but it's disabled */
.soria .dijitSliderDisabled *,
.soria .dijitSpinnerDisabled *,
.soria .dijitButtonDisabled *,
.soria .dijitDropDownButtonDisabled *,
.soria .dijitComboButtonDisabled *,
.soria .dijitComboBoxDisabled *
{
cursor: not-allowed !important;
}
 
/* DnD avatar-specific settings FIXME: need to wrap icon in a span like rest of dijits. */
/* For now it uses a default set of rules. Some other DnD classes can be modified as well. */
.soria .dojoDndAvatar { font-size: 75%; color: black; }
.soria .dojoDndAvatarHeader td {
padding-left: 20px;
padding-right: 4px;
}
.soria .dojoDndAvatarHeader {
background: #ccc;
}
.soria .dojoDndAvatarItem { background: #eee; }
.soria.dojoDndMove .dojoDndAvatarHeader { background-position:-432px 0px; }
.soria.dojoDndCopy .dojoDndAvatarHeader { background-position:-448px 0px; }
.soria.dojoDndMove .dojoDndAvatarCanDrop .dojoDndAvatarHeader { background-position:-464px 0px; }
.soria.dojoDndCopy .dojoDndAvatarCanDrop .dojoDndAvatarHeader { background-position:-480px 0px; }
 
 
/trunk/api/js/dojo1.0/dijit/themes/soria/images/editor.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/soria/images/editor.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/soria/images/gradientTopBg2.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/soria/images/gradientTopBg2.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/soria/images/treeExpand_minus_rtl.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/soria/images/treeExpand_minus_rtl.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/soria/images/arrows.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/soria/images/arrows.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/soria/images/treeExpand_loading.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/soria/images/treeExpand_loading.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/soria/images/progressBarAnim.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/soria/images/progressBarAnim.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/soria/images/gradientLeftBg.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/soria/images/gradientLeftBg.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/soria/images/treeExpand_plus.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/soria/images/treeExpand_plus.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/soria/images/gradientInverseTopBg.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/soria/images/gradientInverseTopBg.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/soria/images/gradientInverseBottomBg.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/soria/images/gradientInverseBottomBg.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/soria/images/gradientTopBg.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/soria/images/gradientTopBg.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/soria/images/gradientBottomBg.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/soria/images/gradientBottomBg.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/soria/images/treeExpand_minus.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/soria/images/treeExpand_minus.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/soria/images/no.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/soria/images/no.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/soria/images/gradientRightBg.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/soria/images/gradientRightBg.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/soria/images/treeExpand_plus_rtl.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/soria/images/treeExpand_plus_rtl.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/soria/soria_rtl.css
New file
0,0 → 1,90
@import url("../dijit_rtl.css");
 
/* Dialog */
.dijitRtl .dijitDialogTitleBar .dijitDialogCloseIcon {
background-position:-65px -1px;
float: left;
right: auto;
left: 5px;
width:16px; height:16px;
}
 
.dijitRtl .dijitDialogTitleBar {
padding: 4px 4px 2px 8px;
}
 
/* Menu */
.dijitRtl .dijitMenuItem .dijitMenuItemIcon {
padding-left: 3px;
padding-right: 0px;
}
 
.dijitRtl .dijitMenuItem .dijitMenuExpandEnabled {
background-position:-16px 0px;
}
 
/* TitlePane */
.dijitRtl .dijitTitlePane .dijitClosed .dijitArrowNode {
background-position:-16px 0px;
}
 
/* Tree */
.dijitRtl .dijitTreeContainer .dijitTreeNode {
margin-left: auto;
margin-right: 19px;
}
 
.dijitRtl .dijitTreeContainer .dijitTreeIsRoot {
margin-left: auto;
margin-right: 0;
}
 
 
.dijitRtl .dijitTreeContainer .dijitTreeContent {
margin-left: auto;
margin-right: 18px;
padding-left: auto;
padding-right: 1px;
}
 
.dijitRtl .dijitTreeContainer .dijitTreeExpandoOpened {
background-image: url('images/treeExpand_minus_rtl.gif');
}
 
.dijitRtl .dijitTreeContainer .dijitTreeExpandoClosed {
background-image: url('images/treeExpand_plus_rtl.gif');
}
 
.dijitRtl .dijitTreeContainer .dijitTreeExpandoLeaf {
 
}
 
/* ToolTip */
.dj_ie .dijitRtl .dijitTooltipLeft {
margin-right: 0px;
margin-left: 16px;
}
 
.dj_ie .dijitRtl .dijitTooltipRight {
margin-left: 26px;
margin-right: -16px;
}
.dj_ie .dijitRtl .dijitTooltipDialog {
zoom:1 !important;
}
 
/* Calendar */
.dijitRtl .dijitCalendarDecrease {
background-position:-48px 0px;
margin-left:0;
margin-right:2px;
}
.dijitRtl .dijitCalendarIncrease {
background-position:-16px 0px;
margin-right:0;
margin-left:4px;
}
 
/* Slider: an attempt, but Slider is broken in RTL in code anyway. */
.dijitRtl .dijitHorizontalSliderIncrementIcon { background-position:-16px 0px; }
.dijitRtl .dijitHorizontalSliderDecrementIcon { background-position:-48px 0px; }
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/arrowLeft.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/arrowLeft.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/dndNoMove.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/dndNoMove.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/sliderEmptyVertical.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/sliderEmptyVertical.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/dndMove.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/dndMove.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/no.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/no.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/dndNoCopy.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/dndNoCopy.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/tooltipConnectorDown.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/tooltipConnectorDown.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/tabDisabled.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/tabDisabled.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/sliderFullVertical.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/sliderFullVertical.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/arrowUp.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/arrowUp.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/titleBarBg.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/titleBarBg.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/dndCopy.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/dndCopy.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/progressBarAnim.psd
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/progressBarAnim.psd
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/treeExpand_plus_rtl.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/treeExpand_plus_rtl.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/checkmarkNoBorder.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/checkmarkNoBorder.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/buttonActive.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/buttonActive.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/i.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/i.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/smallArrowDown.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/smallArrowDown.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/tooltipConnectorDown.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/tooltipConnectorDown.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/buttonHover.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/buttonHover.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/calendarMonthLabel.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/calendarMonthLabel.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/arrowUp.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/arrowUp.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/arrowDown.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/arrowDown.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/checkboxActive.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/checkboxActive.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/radioButtonDisabled.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/radioButtonDisabled.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/splitContainerSizerH.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/splitContainerSizerH.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/treeExpand_leaf_rtl.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/treeExpand_leaf_rtl.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/arrowRight.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/arrowRight.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/calendarYearLabel.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/calendarYearLabel.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/radioButtonActiveHover.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/radioButtonActiveHover.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/treeExpand_minus.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/treeExpand_minus.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/tabClose.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/tabClose.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/progressBarAnim-1.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/progressBarAnim-1.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/progressBarAnim-2.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/progressBarAnim-2.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/progressBarAnim-3.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/progressBarAnim-3.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/progressBarAnim-4.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/progressBarAnim-4.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/progressBarAnim-5.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/progressBarAnim-5.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/splitContainerSizerV.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/splitContainerSizerV.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/progressBarAnim-6.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/progressBarAnim-6.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/progressBarAnim-7.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/progressBarAnim-7.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/tabActive.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/tabActive.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/progressBarAnim-8.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/progressBarAnim-8.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/i_half.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/i_half.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/buttonDisabled.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/buttonDisabled.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/arrowDown.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/arrowDown.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/dijitProgressBarAnim.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/dijitProgressBarAnim.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/progressBarAnim-9.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/progressBarAnim-9.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/warning.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/warning.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/calendarDayLabel.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/calendarDayLabel.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/arrowRight.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/arrowRight.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/circleIcon.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/circleIcon.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/tooltipConnectorUp.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/tooltipConnectorUp.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/doubleArrowDown.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/doubleArrowDown.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/tabClose.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/tabClose.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/popupMenuBg.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/popupMenuBg.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/sliderThumb.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/sliderThumb.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/treeExpand_plus.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/treeExpand_plus.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/dijitProgressBarAnim.psd
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/dijitProgressBarAnim.psd
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/noX.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/noX.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/radioButtonActive.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/radioButtonActive.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/checkmark.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/checkmark.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/smallArrowUp.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/smallArrowUp.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/checkboxHover.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/checkboxHover.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/circleIcon.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/circleIcon.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/tooltipConnectorUp.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/tooltipConnectorUp.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/sliderFullVerticalFocus.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/sliderFullVerticalFocus.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/tabCloseHover.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/tabCloseHover.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/checkboxEnabled.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/checkboxEnabled.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/sliderEmpty.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/sliderEmpty.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/sliderFull.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/sliderFull.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/sliderFullFocus.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/sliderFullFocus.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/titleBar.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/titleBar.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/editor.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/editor.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/treeExpand_leaf.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/treeExpand_leaf.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/progressBarEmpty.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/progressBarEmpty.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/checkmark.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/checkmark.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/tabHover.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/tabHover.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/radioButtonActiveDisabled.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/radioButtonActiveDisabled.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/tooltipConnectorLeft.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/tooltipConnectorLeft.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/tabCloseHover.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/tabCloseHover.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/tabEnabled.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/tabEnabled.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/sliderThumbFocus.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/sliderThumbFocus.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/validationInputBg.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/validationInputBg.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/buttonEnabled.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/buttonEnabled.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/doubleArrowUp.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/doubleArrowUp.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/i_rtl.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/i_rtl.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/tabHover.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/tabHover.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/preciseSliderThumb.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/preciseSliderThumb.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/preciseSliderThumbFocus.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/preciseSliderThumbFocus.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/radioButtonHover.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/radioButtonHover.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/loading.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/loading.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/splitContainerSizerH-thumb.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/splitContainerSizerH-thumb.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/tooltipConnectorLeft.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/tooltipConnectorLeft.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/tooltipConnectorRight.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/tooltipConnectorRight.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/sliderThumbFocus.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/sliderThumbFocus.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/validationInputBg.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/validationInputBg.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/menu.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/menu.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/arrowLeft.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/arrowLeft.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/radioButtonEnabled.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/radioButtonEnabled.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/progressBarFull.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/progressBarFull.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/treeExpand_minus_rtl.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/treeExpand_minus_rtl.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/treeExpand_loading.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/treeExpand_loading.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/preciseSliderThumbFocus.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/preciseSliderThumbFocus.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/preciseSliderThumb.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/preciseSliderThumb.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/checkboxDisabled.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/checkboxDisabled.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/splitContainerSizerV-thumb.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/splitContainerSizerV-thumb.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/checkmarkNoBorder.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/checkmarkNoBorder.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/i_half_rtl.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/i_half_rtl.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/tooltipConnectorRight.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/images/tooltipConnectorRight.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/tundra_rtl.css
New file
0,0 → 1,217
@import url("../dijit_rtl.css");
 
/* Dialog */
.dijitRtl .dijitDialogTitleBar .dijitDialogCloseIcon {
background : url("images/tabClose.png") no-repeat left top;
float: left;
right: auto;
left: 5px;
}
.dj_ie6 .dijitRtl .dijitDialogTitleBar .dijitDialogCloseIcon {
background-image: url('images/tabClose.gif');
}
 
.dijitRtl .dijitDialogTitleBar {
background: #fafafa url("images/titleBarBg.gif") repeat-x bottom left;
padding: 4px 4px 2px 8px;
}
 
/* Menu */
 
.dijitRtl .dijitMenuItem .dijitMenuItemIcon {
padding-left: 3px;
padding-right: 0px;
}
 
.dijitRtl .dijitMenuItem .dijitMenuExpandEnabled {
background:url('images/arrowLeft.png') no-repeat bottom center;
}
.dj_ie6 .dijitRtl .dijitMenuItem .dijitMenuExpandEnabled {
background-image:url('images/arrowLeft.gif');
}
 
/* TitlePane */
.dijitRtl .dijitTitlePane .dijitClosed .dijitArrowNode {
background:url('images/arrowLeft.png') no-repeat center center;
}
.dj_ie6 .dijitRtl .dijitTitlePane .dijitClosed .dijitArrowNode {
background-image:url('images/arrowLeft.gif');
}
 
/* Tree */
.dijitRtl .dijitTreeContainer .dijitTreeNode {
background-image : url('images/i_rtl.gif');
background-position : top right;
margin-left: auto;
margin-right: 19px;
}
 
.dijitRtl .dijitTreeContainer .dijitTreeIsRoot {
margin-left: auto;
margin-right: 0;
background-image: none;
}
 
.dijitRtl .dijitTreeContainer .dijitTreeIsLast {
background-image: url('images/i_half_rtl.gif');
}
 
.dijitRtl .dijitTreeContainer .dijitTreeContent {
margin-left: auto;
margin-right: 18px;
padding-left: auto;
padding-right: 1px;
}
 
.dijitRtl .dijitTreeContainer .dijitTreeExpandoOpened {
background-image: url('images/treeExpand_minus_rtl.gif');
}
 
.dijitRtl .dijitTreeContainer .dijitTreeExpandoClosed {
background-image: url('images/treeExpand_plus_rtl.gif');
}
 
.dijitRtl .dijitTreeContainer .dijitTreeExpandoLeaf {
background-image: url('images/treeExpand_leaf_rtl.gif');
}
 
/* ToolTip */
 
.dj_ie .dijitRtl .dijitTooltipLeft {
margin-right: 0px;
margin-left: 13px;
}
 
.dj_ie .dijitRtl .dijitTooltipRight {
margin-left: 26px;
margin-right: -13px;
}
 
.dj_ie .dijitRtl .dijitTooltipDialog {
zoom:1 !important;
}
 
/* Calendar */
 
.dijitRtl .dijitCalendarDecrease {
background:url(images/arrowRight.png) no-repeat center center;
margin-left:0;
margin-right:2px;
}
 
.dijitRtl .dijitCalendarIncrease {
background:url(images/arrowLeft.png) no-repeat center center;
margin-right:0;
margin-left:4px;
}
.dj_ie6 .dijitRtl .dijitCalendarIncrease {
background-image:url(images/arrowLeft.gif);
}
.dj_ie6 .dijitRtl .dijitCalendarDecrease {
background-image:url(images/arrowRight.gif);
}
 
/* Slider */
 
.dijitRtl .dijitHorizontalSliderProgressBar {
background: #c0c2c5 url("images/sliderFull.png") repeat-x top right;
}
 
.dijitRtl .dijitVerticalSliderProgressBar {
background: #c0c2c5 url("images/sliderFullVertical.png") repeat-y bottom right;
}
 
.dijitRtl .dijitVerticalSliderRemainingBar {
background: #dcdcdc url("images/sliderEmptyVertical.png") repeat-y bottom right;
}
 
.dijitRtl .dijitHorizontalSliderRemainingBar {
background: #dcdcdc url("images/sliderEmpty.png") repeat-x top right;
}
 
.dijitRtl .dijitHorizontalSliderLeftBumper {
border-left-width: 0px;
border-right-width: 1px;
background: #c0c2c5 url("images/sliderFull.png") repeat-x top right;
}
 
.dijitRtl .dijitHorizontalSliderRightBumper {
background: #dcdcdc url("images/sliderEmpty.png") repeat-x top right;
border-left-width: 1px;
border-right-width: 0px;
}
 
.dijitRtl .dijitVerticalSliderBottomBumper {
background: #c0c2c5 url("images/sliderFullVertical.png") repeat-y bottom right;
}
 
.dijitRtl .dijitVerticalSliderTopBumper {
background: #dcdcdc url("images/sliderEmptyVertical.png") repeat-y top right;
}
 
/* TabContainer */
 
.dijitRtl .dijitTab {
margin-right:0;
margin-left:5px; /* space between one tab and the next in top/bottom mode */
}
 
.dijitRtl .dijitTab .dijitTabInnerDiv {
border-left:none;
border-right:1px solid #fff;
}
 
.dijitRtl .dijitTab .dijitClosable {
padding:6px 10px 4px 20px;
}
 
.dijitRtl .dijitTab .closeImage {
position:static;
padding: 0px 12px 0px 0px;
}
 
.dj_gecko .dijitTab .closeImage {
position:relative;
float:none;
padding:0;
}
 
.dijitRtl .dijitTab .dijitClosable .closeImage {
right:auto;
left:3px;
background: url("images/tabClose.png") no-repeat left top;
}
 
.dj_ie .dijitRtl .dijitTab .dijitClosable .closeImage {
width:12px !important;
}
 
.dijitRtl .dijitAlignLeft .dijitTab,
.dijitRtl .dijitAlignRight .dijitTab {
margin-left:0px;
}
 
.dijitRtl .dijitAlignBottom .dijitTab .dijitClosable .closeImage {
right:auto;
left:3px;
}
 
.dijitRtl .dijitAlignRight .dijitTab .dijitTabInnerDiv {
padding-left:10px;
padding-right:20px;
}
 
.dijitRtl .dijitAlignLeft .dijitTab .dijitTabInnerDiv {
padding-left:20px;
padding-right:10px;
}
 
.dijitRtl .dijitAlignRight .dijitTab .dijitClosable .closeImage {
left:auto;
right:3px;
}
 
.dijitRtl .dijitAlignLeft .dijitTab .dijitClosable .closeImage {
right:auto;
left:3px;
}
/trunk/api/js/dojo1.0/dijit/themes/tundra/dojoUITundra06.psd
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/dojoUITundra06.psd
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/dojoTundraGradientBg.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/dojoTundraGradientBg.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/dojoTundraGradientBg.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/api/js/dojo1.0/dijit/themes/tundra/dojoTundraGradientBg.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/api/js/dojo1.0/dijit/themes/tundra/tundra.css
New file
0,0 → 1,1465
/*
Adds cosmetic styling to Dijit. Users may swap with a custom theme CSS file.
*/
 
@import url("../dijit.css");
 
 
.dj_safari .tundra .dijitPopup {
/* -webkit-border-radius: 5px; */
-webkit-box-shadow: 0px 5px 10px #adadad;
}
 
/*
* Control opacity of popups
*/
.tundra .dijitPopup div,
.tundra .dijitPopup table {
opacity: 0.95;
}
 
/*****
dijit.form.Button
dijit.form.DropDownButton
dijit.form.ComboButton
dijit.form.ComboBox (partial)
*****/
 
.tundra .dijitButtonNode {
/* enabled state - inner */
/* border:1px outset #a0a0a0; */
border:1px solid #9b9b9b;
vertical-align: middle;
padding: 0.2em 0.2em;
background:#e9e9e9 url("images/buttonEnabled.png") repeat-x top;
}
.dj_ie .tundra .dijitButtonNode {
zoom: 1;
padding-bottom: 0.1em;
}
 
/* button inner contents - labels, icons etc. */
.tundra .dijitButtonNode * {
display: -moz-inline-box;
display: inline-block;
vertical-align: middle;
}
.dj_ie .tundra .dijitButtonNode * {
zoom: 1;
display:inline;
}
.tundra .dijitButtonText {
padding: 0 0.3em;
}
 
.tundra .dijitComboBox .dijitButtonNode,
.tundra .dijitSpinner .dijitButtonNode {
border: 0px;
padding: 1px .4em; /* the inner node will be vertically centered automatically because it's in a <td> */
}
 
.tundra .dijitA11yDownArrow,
.tundra .dijitDownArrowButton,
.tundra .dijitUpArrowButton {
font-size: 0.75em;
color: #848484;
}
 
 
.tundra .dijitButtonDisabled .dijitButtonNode,
.tundra .dijitToggleButtonDisabled .dijitButtonNode,
.tundra .dijitDropDownButtonDisabled .dijitButtonNode,
.tundra .dijitComboButtonDisabled .dijitButtonNode,
.tundra .dijitComboBoxDisabled,
.tundra .dijitSpinnerDisabled,
.tundra .dijitSpinnerDisabled .dijitButtonNode {
/* disabled state - inner */
border: 1px solid #d5d5d5;
/*color:#b4b4b4;*/
background:#e4e4e4 url("images/buttonDisabled.png") top repeat-x;
opacity: 0.60; /* Safari, Opera and Mozilla */
}
.tundra .dijitButtonDisabled .dijitButtonNode *,
.tundra .dijitToggleButtonDisabled .dijitButtonNode *,
.tundra .dijitDropDownButtonDisabled .dijitButtonNode *,
.tundra .dijitComboButtonDisabled .dijitButtonNode *,
.tundra .dijitSpinnerDisabled .dijitButtonNode * {
filter: gray() alpha(opacity=50); /* IE */
}
 
.tundra .dijitButtonHover .dijitButtonNode,
.tundra .dijitToggleButtonHover .dijitButtonNode,
.tundra .dijitDropDownButtonHover .dijitButtonNode,
.tundra .dijitComboButtonHover .dijitButtonContents,
.tundra .dijitComboButtonDownArrowHover .dijitDownArrowButton,
.tundra .dijitComboBoxHover .dijitDownArrowButton,
.tundra .dijitSpinnerUpArrowHover .dijitUpArrowButton,
.tundra .dijitSpinnerDownArrowHover .dijitDownArrowButton {
/* hover state - inner */
/* TODO: change from Hover to Selected so that button is still highlighted while drop down is being used */
border-color:#366dba;
color:#366dba;
background:#f1f6fc url("images/buttonHover.png") repeat-x bottom;
}
 
.tundra .dijitButtonActive .dijitButtonNode,
.tundra .dijitToggleButtonActive .dijitButtonNode,
.tundra .dijitDropDownButtonActive .dijitButtonNode,
.tundra .dijitComboButtonActive .dijitButtonContents,
.tundra .dijitDownArrowActive .dijitDownArrowButton,
.tundra .dijitComboBoxActive .dijitDownArrowButton {
/* active state - inner (for when you are pressing a normal button, or
* when a toggle button is in a depressed state
*/
border-color:#366dba;
background: #ededed url("images/buttonActive.png") bottom repeat-x;
}
 
.tundra .dijitToolbar {
border: 1px solid #9b9b9b;
background:#e9e9e9 url("images/buttonEnabled.png") repeat-x top;
}
 
.tundra .dijitToolbar * {
padding: 0px;
margin: 0px;
/* #margin-top: -1px; */
/*IE*/
}
.dj_ie .tundra .dijitToolbar {
padding-bottom: 1px;
}
 
.tundra .dijitToolbar .dijitButtonNode {
padding: 0px;
margin: 0px;
border: 1px solid transparent;
background: none;
_margin: 1px;
_padding: 0px 1px 0px 1px;
_border: 0px;
}
 
.tundra .dijitToolbar .dijitToggleButtonChecked .dijitButtonNode {
background-color:#C1D2EE;
border:1px solid #316AC5;
}
.tundra .dijitToolbar .dijitToggleButtonCheckedHover .dijitButtonContents {
border-color: #366dba;
background-color:transparent;
}
.dj_ie6 .tundra .dijitToolbar .dijitButtonNode {
/* workaround no transparent border support in IE6*/
border-color: #e9e9e9;
}
 
.tundra .dijitToolbar .dijitButtonHover .dijitButtonNode,
.tundra .dijitToolbar .dijitToggleButtonHover .dijitButtonNode,
.tundra .dijitToolbar .dijitDropDownButtonHover .dijitButtonNode {
/* TODO: change this from Hover to Selected so that button is still highlighted while drop down is being used */
border-color: #366dba;
/* IE hackery */
_border: 1px solid #366dba;
_margin: -1px 0px 0px 0px;
_padding: 0px;
}
 
.dijitToolbarSeparator {
background: url('images/editor.gif');
height: 18px;
width: 5px;
padding: 0px 1px 0px 1px;
margin: 0px;
}
 
.tundra .dijitToolbar .dijitToolbarSeparator {
background: url('images/editor.gif');
}
 
/* ComboBox-icon-specific */
.tundra .dijitComboBox .dijitDownArrowButtonChar {
/* visibility:hidden; */
display:none;
}
.dijit_a11y .dijitComboBox .dijitDownArrowButtonChar {
display:inline;
}
.tundra .dijitComboBox .dijitDownArrowButtonInner {
width:16px;
height:16px;
background:url("images/arrowDown.png") no-repeat center center;
}
.dj_ie6 .tundra .dijitComboBox .dijitDownArrowButtonInner {
background-image:url("images/arrowDown.gif");
}
.tundra .dijitComboBoxHover .dijitDownArrowButtonInner {
/* TODO: url("images/arrowDownHover.png") but in IE6 it flickers some? */
}
 
 
/*****
dijit.form.NumberSpinner
override for the shorter stacked buttons
*****/
 
.tundra .dijitSpinner .dijitButtonNode {
padding: 0 .4em 0 .4em;
}
 
 
/****
dijit.form.TextBox
dijit.form.ValidationTextBox
dijit.form.SerializableTextBox
dijit.form.RangeBoundTextBox
dijit.form.NumberTextBox
dijit.form.CurrencyTextBox
dijit.form.NumberSpinner
dijit.form.ComboBox (partial)
****/
 
.tundra .dijitInputField INPUT,
.tundra .dijitTextBox,
.tundra .dijitComboBox,
.tundra .dijitSpinner {
margin: 0em 0.1em 0.0em 0.1em;
}
 
.tundra .dijitTextBox,
.tundra .dijitComboBox,
.tundra .dijitSpinner,
.tundra .dijitInlineEditor input,
.tundra .dijitTextArea {
/* For all except dijit.form.NumberSpinner: the actual input element.
For TextBox, ComboBox, Spinner: the table that contains the input.
Otherwise the actual input element.
*/
background:#fff url("images/validationInputBg.png") repeat-x top left;
#background:#fff url('images/validationInputBg.gif') repeat-x top left;
border:1px solid #9b9b9b;
line-height: normal;
}
 
.dj_safari .tundra INPUT.dijitTextBox {
padding:0.15em 0em; /* make it roughly the same size as a validation input box */
}
 
.dj_ie .tundra INPUT.dijitTextBox,
.dj_ie .tundra TD.dijitInputField,
.dj_ie .tundra .dijitInputField INPUT {
height: 1.2em; /* needed since the INPUT is position:absolute */
}
 
.tundra .dijitComboBox .dijitButtonNode,
.tundra .dijitSpinner .dijitButtonNode {
/* line between the input area and the drop down button */
border-left:1px solid #9b9b9b;
}
.tundra .dijitSpinner .dijitDownArrowButton {
border-top:1px solid #9b9b9b; /* line between top and bottom arrow */
}
 
.tundra .dijitTextBoxFocused,
.tundra .dijitComboBoxFocused,
.tundra .dijitSpinnerFocused {
/* input field when focused (ie: typing affects it) */
border-color:#366dba;
}
.tundra .dijitComboBoxFocused .dijitButtonNode, .tundra .dijitSpinnerFocused .dijitButtonNode {
border-left:1px solid #366dba;
}
.tundra .dijitSpinnerFocused .dijitDownArrowButton {
border-top:1px solid #366dba;
}
 
.tundra .dijitTextBoxError,
.tundra .dijitComboBoxError,
.tundra .dijitSpinnerError {
border:1px solid #f3d118;
background-color:#f9f7ba;
background-image:none;
}
.dj_ie6 .tundra .dijitTextBoxError input,
.dj_ie6 .tundra .dijitComboBoxError input,
.dj_ie6 .tundra .dijitSpinnerError input {
/* background-color: transparent on an <input> doesn't work on IE6 */
background-color:#f9f7ba !important;
}
 
.tundra .dijitTextBoxErrorFocused,
.tundra .dijitComboBoxErrorFocused,
.tundra .dijitSpinnerErrorFocused {
background-color:#ff6;
background-image:none;
}
.dj_ie6 .tundra .dijitTextBoxErrorFocused input,
.dj_ie6 .tundra .dijitComboBoxErrorFocused input,
.dj_ie6 .tundra .dijitSpinnerErrorFocused input {
/* background-color: transparent on an <input> doesn't work on IE6 */
background-color:#ff6 !important;
}
 
/* Validation errors */
.tundra .dijitValidationIcon {
/* prevent height change when widget goes from valid to invalid state, and
* workaround browser (FF and safari) sizing bugs when last table column is empty or display:null
*/
display: block;
width: 16px;
height: 16px;
background-repeat: no-repeat;
background-image: url('images/warning.png');
visibility: hidden;
}
.tundra .dijitValidationIconText {
display: none;
}
 
.tundra .dijitTextBoxError .dijitValidationIcon,
.tundra .dijitComboBoxError .dijitValidationIcon,
.tundra .dijitSpinnerError .dijitValidationIcon {
visibility: visible;
}
 
/*
* CheckBox and Radio Widgets,
* and the CSS to embed a checkbox or radio icon inside a ToggleButton.
*
* Order of images in the default sprite (from L to R, checkbox and radio in same image):
* checkbox normal - checked
* - unchecked
* disabled - checked
* - unchecked
* hover - checked
* - unchecked
*
* radio normal - checked
* - unchecked
* disabled - checked
* - unchecked
* hover - checked
* - unchecked
*/
 
.tundra .dijitToggleButton .dijitCheckBox,
.tundra .dijitToggleButton .dijitRadio,
.tundra .dijitToggleButton .dijitCheckBoxIcon,
.tundra .dijitToggleButton .dijitRadioIcon {
background-image: url('images/checkmarkNoBorder.gif');
}
 
.tundra .dijitCheckBox,
.tundra .dijitRadio,
.tundra .dijitCheckBoxIcon, /* inside a toggle button */
.tundra .dijitRadioIcon { /* inside a toggle button */
background-image: url('images/checkmark.gif'); /* checkbox sprite image */
background-repeat: no-repeat;
width: 16px;
height: 16px;
overflow: visible;
margin: 0;
padding: 0;
}
 
.tundra .dijitCheckBox,
.tundra .dijitToggleButton .dijitCheckBoxIcon {
/* unchecked */
background-position: -16px;
}
.tundra .dijitCheckBoxChecked,
.tundra .dijitToggleButtonChecked .dijitCheckBoxIcon {
/* checked */
background-position: 0px;
}
 
.tundra .dijitCheckBoxDisabled {
/* disabled */
background-position: -48px;
}
 
.tundra .dijitCheckBoxCheckedDisabled {
/* disabled but checked */
background-position: -32px;
}
 
.tundra .dijitCheckBoxHover,
.tundra .dijitCheckBoxFocused {
/* hovering over an unchecked enabled checkbox */
background-position: -80px;
}
 
.tundra .dijitCheckBoxCheckedHover,
.tundra .dijitCheckBoxCheckedFocused {
/* hovering over a checked enabled checkbox */
background-position: -64px;
}
 
.tundra .dijitRadio,
.tundra .dijitToggleButton .dijitRadioIcon {
/* unselected */
background-position: -112px;
}
 
.tundra .dijitRadioChecked,
.tundra .dijitToggleButtonChecked .dijitRadioIcon {
/* selected */
background-position: -96px;
}
 
.tundra .dijitRadioCheckedDisabled {
/* selected but disabled */
background-position: -128px;
}
 
.tundra .dijitRadioDisabled {
/* unselected and disabled */
background-position: -144px;
}
 
.tundra .dijitRadioHover,
.tundra .dijitRadioFocused {
/* hovering over an unselected enabled radio button */
background-position: -176px;
}
 
.tundra .dijitRadioCheckedHover,
.tundra .dijitRadioCheckedFocused {
/* hovering over a selected enabled radio button */
background-position: -160px;
}
 
/* Menu */
.tundra .dijitMenu {
border: 1px solid #9b9b9b;
margin: 0px;
padding: 0px;
}
 
.tundra .dijitMenuItem {
background-color: #f7f7f7;
font: menu;
margin: 0;
}
.tundra .dijitMenuPreviousButton, .tundra .dijitMenuNextButton {
font-style: italic;
}
.tundra .dijitMenuItem TD {
padding:2px;
}
 
.tundra .dijitMenuItemHover {
background-color: #808080; /* #95a0b0; #555555; #aaaaaa; #646464; #60a1ea; #848484; */
color:#fff;
}
 
.tundra .dijitMenuItemIcon {
width: 16px;
height: 16px;
/* padding-right: 3px; */
}
 
.tundra .dijitMenuExpand {
display:none;
}
.tundra .dijitMenuExpandEnabled {
/* margin-top:4px; */
width:16px;
height:16px;
background:url('images/arrowRight.png') no-repeat center center;
display:block;
}
.dj_ie6 .tundra .dijitMenuExpandEnabled {
background-image:url('images/arrowRight.gif');
}
.tundra .dijitMenuExpandInner {
display:none;
}
 
.tundra .dijitMenuSeparator {
background-color: #f7f7f7;
}
 
/* separator can be two pixels -- set border of either one to 0px to have only one */
.tundra .dijitMenuSeparatorTop {
border-bottom: 1px solid #9b9b9b; /*97adcb; */
}
 
.tundra .dijitMenuSeparatorBottom {
border-top: 1px solid #e8e8e8;
}
 
/* TitlePane */
 
.tundra .dijitTitlePane .dijitTitlePaneTitle {
background: #cccccc;
background:#fafafa url("images/titleBarBg.gif") repeat-x bottom left;
border:1px solid #bfbfbf;
padding:4px 4px 2px 4px;
cursor: pointer;
}
.dj_ie7 .dijitTitlePaneTextNode {
display:inline;
}
 
/* TODO: merge these, and all other icons to a series of background-image:() and background-position: -16*n px styles */
.tundra .dijitTitlePane .dijitArrowNode {
width:16px;
height:16px;
float:right;
}
.tundra .dijitTitlePane .dijitClosed .dijitArrowNode {
background:url('images/arrowRight.png') no-repeat center center;
}
 
.tundra .dijitTitlePaneFocused .dijitTitlePaneTextNode {
text-decoration:underline;
}
 
.dj_ie6 .tundra .dijitTitlePane .dijitClosed .dijitArrowNode {
background-image:url('images/arrowRight.gif');
}
.tundra .dijitTitlePane .dijitOpen .dijitArrowNode {
background:url('images/arrowDown.png') no-repeat center center;
}
.dj_ie6 .tundra .dijitTitlePane .dijitOpen .dijitArrowNode {
background-image:url('images/arrowDown.gif');
}
.tundra .dijitTitlePane .dijitArrowNodeInner {
visibility:hidden;
}
.dijit_a11y .dijitTitlePane .dijitArrowNodeInner {
visibility:visible;
}
 
.tundra .dijitTitlePaneTitle .dijitOpenCloseArrowOuter {
margin-right:5px;
}
 
.tundra .dijitOpen .dijitTitlePaneTitle .dijitOpenCloseArrowOuter {
position:relative;
top:2px;
}
 
.tundra .dijitTitlePaneContentOuter {
background: #ffffff;
border:1px solid #bfbfbf;
border-top: 1px solid #cddde9; /* w/out this, an <h1> on the top line causes a gap between the .content and .label */
}
.tundra .dijitTitlePaneContentInner {
padding:10px;
}
/* force hasLayout to ensure borders etc, show up */
.dj_ie6 .tundra .dijitTitlePaneContentOuter,
.dj_ie6 .tundra .dijitTitlePane .dijitTitlePaneTitle {
zoom: 1;
}
.tundra .dijitClickableRegion {
background-color : #ffc !important;
}
 
/* Tabs */
 
.tundra .dijitTabPaneWrapper {
/*
overflow: hidden;
*/
background:#fff;
border:1px solid #ccc;
}
 
.tundra .dijitTab {
line-height:normal;
margin-right:5px; /* space between one tab and the next in top/bottom mode */
padding:0px;
border:1px solid #ccc;
background:#e2e2e2 url("images/tabEnabled.png") repeat-x;
}
 
.tundra .dijitAlignLeft .dijitTab,
.tundra .dijitAlignRight .dijitTab {
margin-right:0px;
margin-bottom:5px; /* space between one tab and the next in left/right mode */
}
 
.tundra .dijitTabInnerDiv {
padding:6px 10px 4px 10px;
border-left:1px solid #fff;
border-bottom:1px solid #fff;
}
 
.tundra .dijitTabHover,
.tundra .dijitTabCloseButtonHover {
color: #243C5F;
border-top-color:#92a0b3;
border-left-color:#92a0b3;
border-right-color:#92a0b3;
background:#e2e2e2 url("images/tabHover.png") repeat-x bottom;
}
 
.dj_ie6 .tundra .dijitTabHover,
.dj_ie6 .tundra .dijitTabCloseButtonHover {
background-image: url("images/tabHover.gif");
}
 
.tundra .dijitTabChecked,
.tundra .dijitTabCloseButtonChecked
{
/* the selected tab (with or without hover) */
background-color:#fff;
border-color: #ccc;
background-image:none;
}
 
/* make the active tab white on the side next to the content pane */
.tundra .dijitAlignTop .dijitTabChecked,
.tundra .dijitAlignTop .dijitTabCloseButtonChecked
{
border-bottom-color:white;
vertical-align:bottom;
}
 
.tundra .dijitAlignBottom .dijitTabChecked,
.tundra .dijitAlignBottom .dijitTabCloseButtonChecked
{
border-top-color:white;
-moz-border-radius:2px 2px 0px 0px; /* eliminate some border detritrus on moz */
}
 
.tundra .dijitAlignLeft .dijitTabChecked,
.tundra .dijitAlignLeft .dijitTabCloseButtonChecked
{
border-right-color:white;
}
 
.tundra .dijitAlignRight .dijitTabChecked,
.tundra .dijitAlignRight .dijitTabCloseButtonChecked
{
border-left-color:white;
}
 
 
/* make space for a positioned close button */
.tundra .dijitTab .dijitClosable {
position: relative;
padding:6px 20px 4px 10px;
}
 
.tundra .dijitTab .dijitClosable .closeImage {
position:absolute;
top: 7px;
right: 3px;
height: 12px;
width: 12px;
padding: 0;
margin: 0;
background: url("images/tabClose.png") no-repeat right top;
}
.dj_ie6 .dijitTab .dijitClosable .closeImage {
background-image:url("images/tabClose.gif");
}
 
.tundra .dijitTabCloseButton .dijitClosable .closeImage {
background-image : url("images/tabClose.png");
}
.dj_ie6 .tundra .dijitTabCloseButton .dijitClosable .closeImage {
background-image : url("images/tabClose.gif");
}
 
.tundra .dijitTabCloseButtonHover .dijitClosable .closeImage {
background-image : url("images/tabCloseHover.png");
}
.dj_ie6 .tundra .dijitTabCloseButtonHover .dijitClosable .closeImage {
background-image : url("images/tabCloseHover.gif");
}
 
.tundra .dijitAlignLeft .dijitTab .dijitClosable {
padding:6px 10px 4px 20px;
}
 
/* correct for IE6.
We cant force hasLayout as that blows out the shrink wrapped tabs
..so we shim in the closeImage position properties instead
*/
.dj_ie6 .tundra .dijitAlignLeft .dijitTab .dijitClosable .closeImage {
left:-20px;
}
 
.tundra .dijitAlignBottom .dijitTab .dijitClosable .closeImage {
top: auto;
bottom: 7px;
right: 3px;
}
 
.tundra .dijitAlignLeft .dijitTab .dijitClosable .closeImage {
top: 7px;
left: 3px;
}
 
/* SplitContainer */
 
.tundra .dijitSplitContainerSizerH {
background:url("images/splitContainerSizerH.png") repeat-y #fff;
border:0;
border-left:1px solid #bfbfbf;
border-right:1px solid #bfbfbf;
width:7px;
}
 
.tundra .dijitSplitContainerSizerH .thumb {
background:url("images/splitContainerSizerH-thumb.png") no-repeat #ccc;
left:1px;
width:3px;
height:19px;
}
 
.tundra .dijitSplitContainerSizerV {
background:url("images/splitContainerSizerV.png") repeat-x #fff;
border:0;
border-top:1px solid #bfbfbf;
border-bottom:1px solid #bfbfbf;
height:7px;
}
 
.tundra .dijitSplitContainerSizerV .thumb {
background:url("images/splitContainerSizerV-thumb.png") no-repeat #ccc;
top:1px;
width:19px;
height:3px;
}
 
 
/* Dialog */
 
.tundra .dijitDialog {
background: #eee;
border: 1px solid #999;
-webkit-box-shadow: 0px 5px 10px #adadad;
}
 
.tundra .dijitDialog .dijitDialogTitle {
border-top: none;
border-left: none;
border-right: none;
}
 
.tundra .dijitDialog .dijitDialogPaneContent {
background: #ffffff;
border:none;
border-top: 1px solid #ccc; /* #cddde9; /* w/out this, an <h1> on the top line causes a gap between the .content and .label */
padding:10px;
 
}
 
.tundra .dijitDialogTitleBar {
/* outer container for the titlebar of the dialog */
background: #fafafa url("images/titleBarBg.gif") repeat-x bottom left;
/* border: 1px solid #bfbfbf; */
padding: 4px 8px 2px 4px;
cursor: move;
outline:0; /* remove this line if keyboard focus on dialog startup is an issue. tab still takes you to first focusable element */
}
 
.tundra .dijitDialogTitle {
/* typography and styling of the dialog title */
font-weight: bold;
padding: 8px 12px 8px 12px;
outline:0;
}
 
.tundra .dijitDialogCloseIcon {
/* the default close icon for the dialog */
background : url("images/tabClose.png") no-repeat right top;
float: right;
position: absolute;
vertical-align: middle;
right: 5px;
top: 5px;
height: 22px;
width: 22px;
cursor: pointer;
}
.dj_ie6 .tundra .dijitDialogCloseIcon {
background-image: url("images/tabClose.gif");
}
 
.tundra .dijitDialogContent {
/* the body of the dialog */
padding: 8px;
}
 
/*Tooltip*/
 
.tundra .dijitTooltip,
.tundra .dijitTooltipDialog {
/* the outermost dom node, holding the connector and container */
opacity: 0.95;
background: transparent; /* make the area on the sides of the arrow transparent */
}
 
.dijitTooltipBelow {
/* leave room for arrow above content */
padding-top: 13px;
}
 
.dijitTooltipAbove {
/* leave room for arrow below content */
padding-bottom: 13px;
}
 
.tundra .dijitTooltipContainer {
/*
The part with the text.
 
NOTE:
FF doesn't clip images used as CSS bgs if you specify a border
radius. If you use a solid color, it does. Webkit gets it right.
Sigh.
background: #ffffff url("images/popupMenuBg.gif") repeat-x bottom left;
*/
background-color: #fafafa;
border:1px solid #b6c7d5;
padding:0.45em;
border-radius: 6px;
-moz-border-radius: 7px;
-webkit-border-radius: 6px;
}
 
.tundra .dijitTooltipConnector {
/* the arrow piece */
border:0px;
z-index: 2;
}
 
.tundra .dijitTooltipABRight .dijitTooltipConnector {
left: auto !important;
right: 3px;
}
 
.tundra .dijitTooltipBelow .dijitTooltipConnector {
/* the arrow piece for tooltips below an element */
top: 0px;
left: 3px;
background:url("images/tooltipConnectorUp.png") no-repeat top left;
width:16px;
height:14px;
}
 
.dj_ie6 .tundra .dijitTooltipBelow .dijitTooltipConnector {
background-image: url("images/tooltipConnectorUp.gif");
}
 
.tundra .dijitTooltipAbove .dijitTooltipConnector {
/* the arrow piece for tooltips above an element */
bottom: 0px;
left: 3px;
background:url("images/tooltipConnectorDown.png") no-repeat top left;
width:16px;
height:14px;
}
.dj_ie6 .tundra .dijitTooltipAbove .dijitTooltipConnector {
background-image: url("images/tooltipConnectorDown.gif");
}
 
.tundra .dijitTooltipLeft {
padding-right: 13px;
}
.dj_ie6 .tundra .dijitTooltipLeft {
padding-right: 15px;
}
.tundra .dijitTooltipLeft .dijitTooltipConnector {
/* the arrow piece for tooltips to the left of an element, bottom borders aligned */
right: 0px;
bottom: 7px;
background:url("images/tooltipConnectorRight.png") no-repeat top left;
width:16px;
height:14px;
}
.dj_ie6 .tundra .dijitTooltipLeft .dijitTooltipConnector {
background-image: url("images/tooltipConnectorRight.gif");
}
 
.tundra .dijitTooltipRight {
padding-left: 13px;
}
.tundra .dijitTooltipRight .dijitTooltipConnector {
/* the arrow piece for tooltips to the right of an element, bottom borders aligned */
left: 0px;
bottom: 7px;
background:url("images/tooltipConnectorLeft.png") no-repeat top left;
width:16px;
height:14px;
}
.dj_ie6 .tundra .dijitTooltipRight .dijitTooltipConnector {
background-image: url("images/tooltipConnectorLeft.gif");
}
 
/* Accordion */
 
.tundra .dijitAccordionPane-selected {
/* background-color:#85aeec; */
background-color: #e7e7e7;
}
 
.tundra .dijitAccordionPane .dijitAccordionTitle {
background:#fafafa url("images/titleBar.png") repeat-x bottom left;
border-top: 1px solid #bfbfbf;
padding:4px 4px 2px 4px;
}
 
.tundra .dijitAccordionPane-selected .dijitAccordionTitle {
background: #ededed url("images/buttonActive.png") bottom repeat-x;
font-weight: bold;
border-top: 1px solid #aaaaaa;
padding: 4px 4px 2px 4px;
}
.tundra .dijitAccordionPaneFocused .dijitAccordionText {
text-decoration:underline !important;
/*border-left:1px solid #999;
border-right:1px solid #999;
border-top:1px solid #999; */
}
 
.tundra .dijitAccordionPane .dijitAccordionArrow {
background:url("images/arrowUp.png") no-repeat;
width:15px;
height:15px;
margin-top:2px;
}
.dj_ie6 .tundra .dijitAccordionPane .dijitAccordionArrow {
background-image: url("images/arrowUp.gif");
}
 
.tundra .dijitAccordionPane-selected .dijitAccordionArrow {
background:url("images/circleIcon.png") no-repeat;
margin-top:2px;
}
.dj_ie6 .tundra .dijitAccordionPane-selected .dijitAccordionArrow {
background-image: url("images/circleIcon.gif");
}
 
.tundra .dijitAccordionPane .dijitAccordionBody {
background: #fff;
border-top: 1px solid #bfbfbf;
}
 
/* Tree */
 
.tundra .dijitTreeNode {
background-image : url('images/i.gif');
background-position : top left;
background-repeat : repeat-y;
margin-left: 19px;
zoom: 1; /* MOW: what the heck is this doing in here? */
}
/* left vertical line (grid) for all nodes */
.tundra .dijitTreeIsLast {
background: url('images/i_half.gif') no-repeat;
}
 
.tundra .dijitTreeIsRoot {
margin-left: 0;
background-image: none;
}
 
.tundra .dijitTreeExpando {
width: 18px;
height: 18px;
}
 
.tundra .dijitTreeContent {
min-height: 18px;
min-width: 18px;
margin-left:18px;
padding-top:3px;
padding-left:1px;
}
 
 
.tundra .dijitTreeExpand {
width: 18px;
height: 18px;
background-repeat : no-repeat;
}
/* same style as IE selection */
.tundra .dijitTreeNodeEmphasized {
background-color: Highlight;
color: HighlightText;
}
 
/* don't use :focus due to opera and IE's lack of support on div's */
.tundra .dijitTreeLabelFocused {
outline: 1px invert dotted;
}
 
.tundra .dijitTreeExpandoOpened {
background-image: url('images/treeExpand_minus.gif');
}
.tundra .dijitTreeExpandoClosed {
background-image: url('images/treeExpand_plus.gif');
}
.tundra .dijitTreeExpandoLeaf {
background-image: url('images/treeExpand_leaf.gif');
}
 
.tundra .dijitTreeExpandoLoading {
background-image: url('images/treeExpand_loading.gif');
}
 
 
/* Calendar*/
 
.tundra .dijitCalendarIncrementControl {
/* next/prev month buttons */
width:16px;
height:16px;
}
.dj_ie6 .tundra .dijitCalendarIncrementControl {
padding:.1em;
}
 
.tundra .dijitCalendarIncreaseInner,
.tundra .dijitCalendarDecreaseInner {
visibility:hidden;
}
 
.tundra .dijitCalendarDecrease {
background:url("images/arrowLeft.png") no-repeat center center;
}
.dj_ie6 .tundra .dijitCalendarDecrease {
background-image:url("images/arrowLeft.gif");
}
 
.tundra .dijitCalendarIncrease {
background:url(images/arrowRight.png) no-repeat center center;
}
.dj_ie6 .tundra .dijitCalendarIncrease {
background-image:url("images/arrowRight.gif");
}
 
.tundra table.dijitCalendarContainer {
font-size: 100%;
border-collapse: collapse;
border-spacing: 0;
border: 1px solid #ccc;
margin: 0;
}
 
.tundra .dijitCalendarMonthContainer th {
/* month header cell */
background:white url("images/calendarMonthLabel.png") repeat-x top;
padding-top:.3em;
padding-bottom:.1em;
text-align:center;
}
.dj_ie6 .tundra .dijitCalendarMonthContainer th {
padding-top:.1em;
padding-bottom:0em;
}
 
.tundra .dijitCalendarDayLabelTemplate {
/* day of week labels */
background:white url("images/calendarDayLabel.png") repeat-x bottom;
font-weight:normal;
padding-top:.15em;
padding-bottom:0em;
border-top: 1px solid #eeeeee;
color:#293a4b;
text-align:center;
}
 
.tundra .dijitCalendarMonthLabel {
/* day of week labels */
color:#293a4b;
font-size: 0.75em;
font-weight: bold;
text-align:center;
}
 
.dj_ie7 .tundra .dijitCalendarDateTemplate,
.dj_ie6 .tundra .dijitCalendarDateTemplate {
font-size: 0.8em;
}
 
.tundra .dijitCalendarDateTemplate {
/* style for each day cell */
font-size: 0.9em;
font-weight: bold;
text-align: center;
padding: 0.3em 0.3em 0.05em 0.3em;
letter-spacing: 1px;
}
 
 
.tundra .dijitCalendarPreviousMonth,
.tundra .dijitCalendarNextMonth {
/* days that are part of the previous or next month */
color:#999999;
background-color:#f8f8f8 !important;
}
 
.tundra .dijitCalendarPreviousMonthDisabled,
.tundra .dijitCalendarNextMonthDisabled {
/* days that are part of the previous or next month - disabled*/
background-color:#a4a5a6 !important;
}
 
.tundra .dijitCalendarCurrentMonth {
/* days that are part of this month */
background-color:white !important;
}
 
.tundra .dijitCalendarCurrentMonthDisabled {
/* days that are part of this month - disabled */
background-color:#bbbbbc !important;
}
 
.tundra .dijitCalendarDisabledDate {
/* one or the other? */
/* background: url(images/noX.gif) no-repeat center center !important; */
text-decoration:line-through !important;
cursor:default !important;
}
 
.tundra .dijitCalendarCurrentDate {
/* cell for today's date */
text-decoration:underline;
font-weight:bold;
}
 
.tundra .dijitCalendarSelectedDate {
/* cell for the selected date */
background-color:#bbc4d0 !important;
color:black !important;
}
 
 
.tundra .dijitCalendarYearContainer {
/* footer of the table that contains the year display/selector */
background:white url("images/calendarYearLabel.png") repeat-x bottom;
border-top:1px solid #ccc;
}
 
.tundra .dijitCalendarYearLabel {
/* container for all of 3 year labels */
margin:0;
padding:0.4em 0 0.25em 0;
text-align:center;
}
 
.tundra .dijitCalendarSelectedYear {
/* label for selected year */
color:black;
padding:0.2em;
padding-bottom:0.1em;
background-color:#bbc4d0 !important;
}
 
.tundra .dijitCalendarNextYear,
.tundra .dijitCalendarPreviousYear {
/* label for next/prev years */
color:black !important;
font-weight:normal;
}
 
 
 
/* inline edit boxen */
.tundra .dijitInlineValue {
/* span around an inline-editable value when NOT in edit mode */
padding:3px;
margin:4px;
}
 
 
/* MOW: trying to get this to look like a mini-dialog. Advised? */
.tundra .dijitInlineEditor {
/* fieldset surrounding an inlineEditor in edit mode */
display: inline-block;
display: -moz-inline-stack;
#display:inline;
/*
border: solid;
border-color: #7788a0 #344257 #344257 #7788a0;
border-width:1px 2px 2px 1px;
-moz-border-radius:0px 2px 0px 2px; make BL and TR corners indent on Moz so it looks like we have a shadow
background-color:white;
*/
}
 
.dijitInlineEditor .saveButton,
.dijitInlineEditor .cancelButton {
margin:3px 3px 3px 0px;
}
 
 
/* spinner */
 
.tundra .dijitSpinner {}
.tundra .dijitSpinner input {
}
 
 
 
 
/****
dijit.ProgressBar
****/
.tundra .dijitProgressBar {
margin:2px 0px 2px 0px;
}
 
.tundra .dijitProgressBarEmpty{
/* outer container and background of the bar that's not finished yet*/
background:#ececec url("images/progressBarEmpty.png") repeat-x bottom left;
border-color: #84a3d1;
}
 
.tundra .dijitProgressBarTile{
/* inner container for finished portion when in 'tile' (image) mode */
background:#cad2de url("images/progressBarFull.png") repeat-x top left;
}
 
.tundra .dijitProgressBarLabel {
/* Set to a color that contrasts with both the "Empty" and "Full" parts. */
color:#293a4b;
}
 
.tundra .dijitProgressBarIndeterminate .dijitProgressBarTile {
/* use an animated gif for the progress bar in 'indeterminate' mode */
background:#cad2de url("images/dijitProgressBarAnim.gif") repeat-x top left;
}
 
/****
SLIDER
****/
 
.tundra .dijitHorizontalSliderProgressBar {
border-color: #aab0bb;
background: #c0c2c5 url("images/sliderFull.png") repeat-x top left;
}
 
.tundra .dijitVerticalSliderProgressBar {
border-color: #aab0bb;
background: #c0c2c5 url("images/sliderFullVertical.png") repeat-y bottom left;
}
 
.tundra .dijitSliderFocused .dijitHorizontalSliderProgressBar,
.tundra .dijitSliderFocused .dijitHorizontalSliderLeftBumper {
background-image:url("images/sliderFullFocus.png");
}
 
.tundra .dijitSliderFocused .dijitVerticalSliderProgressBar,
.tundra .dijitSliderFocused .dijitVerticalSliderBottomBumper {
background-image:url("images/sliderFullVerticalFocus.png");
}
 
.tundra .dijitVerticalSliderRemainingBar {
border-color: #b4b4b4;
background: #dcdcdc url("images/sliderEmptyVertical.png") repeat-y bottom left;
}
 
.tundra .dijitHorizontalSliderRemainingBar {
border-color: #b4b4b4;
background: #dcdcdc url("images/sliderEmpty.png") repeat-x top left;
}
 
.tundra .dijitSliderBar {
border-style: solid;
outline:1px;
/* border-color: #b4b4b4; */
}
.tundra .dijitSliderFocused .dijitSliderBar {
border-color:#333;
}
 
.dijit_a11y .dijitSliderProgressBar {
background-color:#333 !important;
}
 
.tundra .dijitHorizontalSliderImageHandle {
border:0px;
width:16px;
height:16px;
background:url("images/preciseSliderThumb.png") no-repeat center top;
cursor:pointer;
}
.tundra .dijitSliderFocused .dijitHorizontalSliderImageHandle {
background-image:url("images/preciseSliderThumbFocus.png");
#background-image:url("images/preciseSliderThumbFocus.gif");
}
 
.dj_ie6 .tundra .dijitHorizontalSliderImageHandle {
background-image:url("images/preciseSliderThumb.gif");
}
 
.tundra .dijitHorizontalSliderLeftBumper {
border-left-width: 1px;
border-color: #aab0bb;
background: #c0c2c5 url("images/sliderFull.png") repeat-x top left;
}
 
.tundra .dijitHorizontalSliderRightBumper {
background: #dcdcdc url("images/sliderEmpty.png") repeat-x top left;
border-color: #b4b4b4;
border-right-width: 1px;
}
 
.tundra .dijitVerticalSliderImageHandle {
border:0px;
width:16px;
height:16px;
background:url("images/sliderThumb.png") no-repeat center center;
cursor:pointer;
}
 
.tundra .dijitSliderFocused .dijitVerticalSliderImageHandle {
background-image:url("images/sliderThumbFocus.png");
}
.dj_ie6 .tundra .dijitSliderFocused .dijitVerticalSliderImageHandle {
background-image:url("images/sliderThumbFocus.gif");
}
 
.tundra .dijitVerticalSliderBottomBumper {
border-bottom-width: 1px;
border-color: #aab0bb;
background: #c0c2c5 url("images/sliderFullVertical.png") repeat-y bottom left;
}
 
.tundra .dijitVerticalSliderTopBumper {
background: #dcdcdc url("images/sliderEmptyVertical.png") repeat-y top left;
border-color: #b4b4b4;
border-top-width: 1px;
}
 
.tundra .dijitHorizontalSliderIncrementIcon,
.tundra .dijitVerticalSliderIncrementIcon {
background:url('images/arrowUp.png') no-repeat center center;
width:16px; height:16px;
cursor:pointer;
}
.tundra .dijitHorizontalSliderIncrementIcon {
background-image:url('images/arrowRight.png');
}
 
.tundra .dijitHorizontalSliderDecrementIcon,
.tundra .dijitVerticalSliderDecrementIcon {
width:16px;
height:16px;
cursor:pointer;
background:url('images/arrowDown.png') no-repeat center center;
}
.tundra .dijitHorizontalSliderDecrementIcon { background-image:url('images/arrowLeft.png'); }
 
.tundra .dijitSliderButtonInner {
visibility:hidden;
}
 
.tundra .dijitSliderDisabled {
opacity:0.6 !important;
}
 
.dj_ie6 .tundra .dijitSliderDisabled,
.dj_ie6 .tundra .dijitSliderDisabled .RuleContainer,
.dj_ie6 .tundra .dijitSliderDisabled .dijitSliderRemainingBar,
.dj_ie6 .tundra .dijitSliderDisabled .dijitSliderProgressBar {
filter: gray() alpha(opacity=40);
}
 
/**** ICONS *****/
 
.tundra .dijitEditorIcon {
background-image: url('images/editor.gif'); /* editor icons sprite image */
background-repeat: no-repeat;
width: 18px;
height: 18px;
text-align: center;
}
.tundra .dijitEditorIconSep { background-position: 0px; }
.tundra .dijitEditorIconBackColor { background-position: -18px; }
.tundra .dijitEditorIconBold { background-position: -36px; }
.tundra .dijitEditorIconCancel { background-position: -54px; }
.tundra .dijitEditorIconCopy { background-position: -72px; }
.tundra .dijitEditorIconCreateLink { background-position: -90px; }
.tundra .dijitEditorIconCut { background-position: -108px; }
.tundra .dijitEditorIconDelete { background-position: -126px; }
.tundra .dijitEditorIconForeColor { background-position: -144px; }
.tundra .dijitEditorIconHiliteColor { background-position: -162px; }
.tundra .dijitEditorIconIndent { background-position: -180px; }
.tundra .dijitEditorIconInsertHorizontalRule { background-position: -198px; }
.tundra .dijitEditorIconInsertImage { background-position: -216px; }
.tundra .dijitEditorIconInsertOrderedList { background-position: -234px; }
.tundra .dijitEditorIconInsertTable { background-position: -252px; }
.tundra .dijitEditorIconInsertUnorderedList { background-position: -270px; }
.tundra .dijitEditorIconItalic { background-position: -288px; }
.tundra .dijitEditorIconJustifyCenter { background-position: -306px; }
.tundra .dijitEditorIconJustifyFull { background-position: -324px; }
.tundra .dijitEditorIconJustifyLeft { background-position: -342px; }
.tundra .dijitEditorIconJustifyRight { background-position: -360px; }
.tundra .dijitEditorIconLeftToRight { background-position: -378px; }
.tundra .dijitEditorIconListBulletIndent { background-position: -396px; }
.tundra .dijitEditorIconListBulletOutdent { background-position: -414px; }
.tundra .dijitEditorIconListNumIndent { background-position: -432px; }
.tundra .dijitEditorIconListNumOutdent { background-position: -450px; }
.tundra .dijitEditorIconOutdent { background-position: -468px; }
.tundra .dijitEditorIconPaste { background-position: -486px; }
.tundra .dijitEditorIconRedo { background-position: -504px; }
.tundra .dijitEditorIconRemoveFormat { background-position: -522px; }
.tundra .dijitEditorIconRightToLeft { background-position: -540px; }
.tundra .dijitEditorIconSave { background-position: -558px; }
.tundra .dijitEditorIconSpace { background-position: -576px; }
.tundra .dijitEditorIconStrikethrough { background-position: -594px; }
.tundra .dijitEditorIconSubscript { background-position: -612px; }
.tundra .dijitEditorIconSuperscript { background-position: -630px; }
.tundra .dijitEditorIconUnderline { background-position: -648px; }
.tundra .dijitEditorIconUndo { background-position: -666px; }
.tundra .dijitEditorIconWikiword { background-position: -684px; }
 
/*
* IE6: can't display PNG images with gradient transparency.
* Want to use filter property for those images, but then need to specify a path relative
* to the main page, rather than relative to this file... using gifs for now
*/
 
.dj_ie6 .tundra .dijitInputField
{
background: url("images/validationInputBg.gif") repeat-x top left #fff;
}
 
/**** Disabled cursor *****/
.tundra .dijitSliderDisabled *,
.tundra .dijitDisabledClickableRegion, /* a region the user would be able to click on, but it's disabled */
.tundra .dijitSpinnerDisabled *,
.tundra .dijitButtonDisabled *,
.tundra .dijitDropDownButtonDisabled *,
.tundra .dijitComboButtonDisabled *,
.tundra .dijitComboBoxDisabled *
{
cursor: not-allowed !important;
}
 
/* DnD avatar-specific settings */
/* For now it uses a default set of rules. Some other DnD classes can be modified as well. */
.tundra .dojoDndAvatar {font-size: 75%; color: black;}
.tundra .dojoDndAvatarHeader td {padding-left: 20px; padding-right: 4px;}
.tundra .dojoDndAvatarHeader {background: #ccc;}
.tundra .dojoDndAvatarItem {background: #eee;}
.tundra.dojoDndMove .dojoDndAvatarHeader {background-image: url(images/dndNoMove.png); background-repeat: no-repeat;}
.tundra.dojoDndCopy .dojoDndAvatarHeader {background-image: url(images/dndNoCopy.png); background-repeat: no-repeat;}
.tundra.dojoDndMove .dojoDndAvatarCanDrop .dojoDndAvatarHeader {background-image: url(images/dndMove.png); background-repeat: no-repeat;}
.tundra.dojoDndCopy .dojoDndAvatarCanDrop .dojoDndAvatarHeader {background-image: url(images/dndCopy.png); background-repeat: no-repeat;}
 
.tundra .dijitContentPaneLoading {
background:url('images/loading.gif') no-repeat left center;
padding-left:25px;
}
 
.tundra .dijitContentPaneError {
background:url('images/warning.png') no-repeat left center;
padding-left:25px;
}
/trunk/api/js/dojo1.0/dijit/themes/templateThemeTest.html
New file
0,0 → 1,186
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Test Widget Templates in Multiple Themes</title>
 
<script type="text/javascript" src="../../dojo/dojo.js"
djConfig="parseOnLoad: true, isDebug: true"></script>
<script type="text/javascript" src="../tests/_testCommon.js"></script>
 
<script type="text/javascript">
dojo.require("dijit.Menu");
dojo.require("dijit.form.Button");
dojo.require("dijit.form.ComboBox");
dojo.require("dijit.form.NumberSpinner");
dojo.require("dojo.parser");
logMessage = console.debug;
</script>
<style type="text/css">
@import "../../dojo/resources/dojo.css";
@import "noir/noir.css";
@import "tundra/tundra.css";
@import "soria/soria.css";
@import "../tests/css/dijitTests.css";
 
/* group multiple buttons in a row */
body {
margin:10px;
}
.box {
display: block;
}
.box .dijitButton {
margin-right: 10px;
}
 
</style>
</head>
<body>
<h2>Tundra</h2>
<div id='tundra' class="box tundra">
<button id='foo' dojoType="dijit.form.Button" onClick='logMessage("clicked simple")'>
Button
</button>
<button dojoType="dijit.form.Button" iconClass="noteIcon" onClick='logMessage("clicked simple")'>
Button w/image
</button>
<button dojoType="dijit.form.Button" onClick='logMessage("clicked simple")' disabled='true'>
Disabled Button
</button>
<br><br>
<button dojoType="dijit.form.DropDownButton">
<span>Drop Down Button</span>
<div dojoType="dijit.Menu" id="editMenu" style="display: none;">
<div dojoType="dijit.MenuItem" iconClass="dijitEditorIconCut"
onClick="logMessage('not actually cutting anything, just a test!')">Cut</div>
<div dojoType="dijit.MenuItem" iconClass="dijitEditorIconCopy"
onClick="logMessage('not actually copying anything, just a test!')">Copy</div>
<div dojoType="dijit.MenuItem" iconClass="dijitEditorIconPaste"
onClick="logMessage('not actually pasting anything, just a test!')">Paste</div>
</div>
</button>
<button dojoType="dijit.form.DropDownButton" iconClass="noteIcon">
<span>Button w/image</span>
<div dojoType="dijit.Menu" id="editMenu2" style="display: none;">
<div dojoType="dijit.MenuItem" iconClass="dijitEditorIconCut"
onClick="logMessage('not actually cutting anything, just a test!')">Cut</div>
<div dojoType="dijit.MenuItem" iconClass="dijitEditorIconCopy"
onClick="logMessage('not actually copying anything, just a test!')">Copy</div>
<div dojoType="dijit.MenuItem" iconClass="dijitEditorIconPaste"
onClick="logMessage('not actually pasting anything, just a test!')">Paste</div>
</div>
</button>
<button dojoType="dijit.form.DropDownButton" disabled='true'>
<span>Drop Down Disabled</span>
<div dojoType="dijit.Menu" id="editMenu3" style="display: none;">
<div dojoType="dijit.MenuItem" iconClass="dijitEditorIconCut"
onClick="logMessage('not actually cutting anything, just a test!')">Cut</div>
<div dojoType="dijit.MenuItem" iconClass="dijitEditorIconCopy"
onClick="logMessage('not actually copying anything, just a test!')">Copy</div>
<div dojoType="dijit.MenuItem" iconClass="dijitEditorIconPaste"
onClick="logMessage('not actually pasting anything, just a test!')">Paste</div>
</div>
</button>
<br><br>
<button dojoType="dijit.form.ComboButton" onClick='logMessage("clicked combo save")'>
<span>Combo Button</span>
<div dojoType="dijit.Menu" id="saveMenu" style="display: none;">
<div dojoType="dijit.MenuItem" iconSrc="../../templates/buttons/save.gif"
onClick="logMessage('not actually saving anything, just a test!')">Save</div>
<div dojoType="dijit.MenuItem" iconSrc="../../templates/buttons/save.gif"
onClick="logMessage('not actually saving anything, just a test!')">Save As</div>
</div>
</button>
<button dojoType="dijit.form.ComboButton" iconClass="noteIcon" onClick='logMessage("clicked combo save")'>
<span>Combo w/image</span>
<div dojoType="dijit.Menu" id="saveMenu" style="display: none;">
<div dojoType="dijit.MenuItem" iconClass="dijitEditorIconSave"
onClick="logMessage('not actually saving anything, just a test!')">Save</div>
<div dojoType="dijit.MenuItem"
onClick="logMessage('not actually saving anything, just a test!')">Save As</div>
</div>
</button>
<button dojoType="dijit.form.ComboButton" onClick='logMessage("clicked combo save")' disabled='true'>
<span>Combo Disabled</span>
<div dojoType="dijit.Menu" id="saveMenu" style="display: none;">
<div dojoType="dijit.MenuItem" iconClass="dijitEditorIconSave"
onClick="logMessage('not actually saving anything, just a test!')">Save</div>
<div dojoType="dijit.MenuItem"
onClick="logMessage('not actually saving anything, just a test!')">Save As</div>
</div>
</button>
<br><br>
<input dojoType="dijit.form.ComboBox"
value="California"
class="medium"
url="../tests/form/states.json"
searchAttr="name"
labelField="label"
labelType="html"
style="width: 300px;"
name="state2"
promptMessage="Please enter a state"
id="datatest"
>
 
<input dojoType="dijit.form.ComboBox"
value="California"
class="medium"
url="../tests/form/states.json"
searchAttr="name"
labelField="label"
labelType="html"
style="width: 300px;"
name="state2"
promptMessage="Please enter a state"
id="datatest"
disabled="true"
>
 
<br><br>
<input dojoType="dijit.form.NumberSpinner"
onChange="console.debug('onChange fired for widget id = ' + this.id + ' with value = ' + arguments[0]);"
value="900"
constraints={max:1550,places:0}
maxLength="10"
id="integerspinner1">
 
 
<input dojoType="dijit.form.NumberSpinner"
onChange="console.debug('onChange fired for widget id = ' + this.id + ' with value = ' + arguments[0]);"
value="900"
disabled='true'
constraints={max:1550,places:0}
maxLength="10"
id="integerspinner1">
 
</div>
<br clear=both>
 
<h2>Noir</h2>
<div id='noir' class="box noir">
</div>
<br clear=both>
 
<h2>Soria</h2>
<div id='soria' class="box soria">
</div>
<br clear=both>
 
<h2>a11y mode</h2>
<div id='a11y' class="box dijit_a11y">
</div>
<br clear=both>
 
 
<script language='javascript'>
var html = dojo.byId("tundra").innerHTML;
dojo.byId("noir").innerHTML = html;
dojo.byId("a11y").innerHTML = html;
dojo.byId("soria").innerHTML = html;
</script>
 
</body>
</html>